Kernel Crash on Nvidia Jetson Orin Nano Dev Board with Multiple USB-C Ports
Issue Overview
Users are experiencing a kernel crash on a custom board derived from the Nvidia Jetson Orin Nano when attempting to configure multiple USB-C ports. The specific issue occurs when trying to add more than one PHY to the xudc@355000 node in the device tree. The crash happens in the xudc driver, preventing the proper setup of two USB-C ports with dual data roles.
The problem manifests during the boot process, with the following error message appearing in the system logs:
[ 5.304805] ------------[ cut here ]------------
[ 5.305084] double register detected
[ 5.305154] WARNING: CPU: 5 PID: 134 at kernel/notifier.c:27 notifier_chain_register+0x5c/0x90
This error indicates a problem with the USB driver’s ability to handle multiple device ports.
Possible Causes
-
Driver Limitation: The USB driver for the Nvidia Jetson Orin Nano does not support multi-device port configurations.
-
Incorrect Device Tree Configuration: The attempt to add multiple PHYs to the xudc@355000 node is not supported by the current driver implementation.
-
Hardware Incompatibility: The custom board design may not be fully compatible with the standard Jetson Orin Nano USB configuration.
-
Software Version Mismatch: The kernel or driver version may not be compatible with the desired multi-port setup.
Troubleshooting Steps, Solutions & Fixes
-
Remove Multiple PHYs Configuration:
- Do not add multiple PHYs to the xudc@355000 node in the device tree.
- Revert to a single PHY configuration for the USB-C port.
-
Alternative USB-C Port Configuration:
-
Set USB2-0 as the host and USB2-1 as dual role.
-
Modify the device tree accordingly:
tegra_xudc: xudc@3550000 { phys = <&{/xusb_padctl@3520000/pads/usb2/lanes/usb2-0}>; phy-names = "usb2-0"; }
-
-
Flashing with Initrd and Reconfiguration:
If USB2-0 is the recovery port and needs to be set as dual-role for initrd flashing, follow these steps:a. Prepare two Linux_for_Tegra folders:
- Folder 1: Run initrd flash with
--no-flash
option to generate flash images with kernel changes. - Folder 2: Use the standard configuration without kernel changes.
b. Copy the generated images from Folder 1 to Folder 2:
cp Folder1/tools/kernel_flash/images/* Folder2/tools/kernel_flash/
c. Flash using the backup image:
tools/kernel_flash/l4t_initrd_flash.sh --use-backup-image jetson-orin-nano-devkit mmcblk0p1
This method allows you to use a kernel DTB with USB device mode enabled for flashing, and a different DTB with USB device mode disabled for the final system.
- Folder 1: Run initrd flash with
-
Consult Nvidia Support:
- If the issue persists or you require a specific multi-port configuration, contact Nvidia support for further assistance or potential custom solutions.
-
Consider Hardware Redesign:
- If multiple USB-C ports with dual roles are crucial for your application, you may need to explore hardware redesign options that are compatible with the current driver limitations.
-
Monitor for Driver Updates:
- Keep an eye on Nvidia’s official channels for any future driver updates that might introduce support for multiple USB-C ports in dual-role configuration.
Remember that the current USB driver for the Nvidia Jetson Orin Nano does not support multi-device port configurations. Any solution implemented should work within this limitation until official support is provided by Nvidia.