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

  1. Driver Limitation: The USB driver for the Nvidia Jetson Orin Nano does not support multi-device port configurations.

  2. Incorrect Device Tree Configuration: The attempt to add multiple PHYs to the xudc@355000 node is not supported by the current driver implementation.

  3. Hardware Incompatibility: The custom board design may not be fully compatible with the standard Jetson Orin Nano USB configuration.

  4. Software Version Mismatch: The kernel or driver version may not be compatible with the desired multi-port setup.

Troubleshooting Steps, Solutions & Fixes

  1. 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.
  2. 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";
      }
      
  3. 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.

  4. 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.
  5. 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.
  6. 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.

Similar Posts

Leave a Reply

Your email address will not be published. Required fields are marked *