We are facing a frustrating USB3 Port deadlock issue on our custom carrier board (Jetson Orin Nano). The issue specifically happens with USB 3.2 Gen 2 (10Gbps) devices.
The Symptom: When we perform a “surprise removal” (physically unplugging) of a Gen 2 SSD:
No “USB disconnect” message appears in dmesg.
lsusb -t still shows the device as if it’s still connected.
The port becomes “dead”—plugging the device back in (or any other device) does nothing.
Our Workaround: We found that the hardware is actually fine because we can “revive” the port without a reboot by:
Manually toggling the authorized attribute: echo 0 > .../authorized then echo 1.
Or by unbinding and re-binding the 3610000.usb controller. After these steps, the port starts working again immediately.
What we’ve checked:
CC Logic: We are using TUSB322 for DRP. The interrupts are firing correctly when we unplug.
Comparison with EVM: On the NVIDIA EVM (which uses FUSB301), the disconnect is handled instantly and the port never locks up.
Driver: Our software team is using the standard NVIDIA driver/DTS structure. They believe the code is identical to what’s provided by NV.
10G SI (Signal Integrity): Verified PASS with margin.
Gen 2 vs. Gen 1: Issue occurs ONLY at 10G. Gen 1 (5Gbps) works normaly.
Via Adapter (PASS): Type-C Port → C-to-A Cable/Adapter → Gen2 SSD. If we connect the adapter first and then the Gen2 SSD, the port works perfectly and never locks up upon unplugging the SSD or the adapter.
The Problem: It seems the tegra-xusb driver is losing track of the link state only on this custom board. Since the hardware recovers after a manual reset, we suspect there’s a missing “handshake” or notification between the Extcon (TUSB322) and the xHCI controller during a Gen 2 unplug event.
Questions:
Why does the controller get stuck in a state where it stops performing “Receiver Detection” after a Gen 2 unplug?
Is there a specific link reset or Warm Reset logic in the tegra-xusb driver that depends on Extcon notifications?
Are there any known issues where the xHCI state machine (LTSSM) hangs if the CC logic doesn’t explicitly tell the controller to “Clear the Port” during a high-speed disconnect?
Any guidance on where to look in the driver code or DTS to ensure the xHCI controller correctly resets the link would be greatly appreciated!
*** Please note that this reply is generated by LLM automatically ***
The issue you’re experiencing with the USB3 port deadlock on your custom carrier board with the Jetson Orin Nano module seems to be related to the handling of Gen 2 SSD unplug events. The fact that the port becomes unresponsive after a surprise removal of a Gen 2 SSD, but not with Gen 1 SSDs, suggests that there might be a specific issue with the link state management during high-speed disconnect events.
Based on the information provided, here are some potential reasons and areas to investigate:
Missing handshake or notification between the UPHY and the xHCI controller: It’s possible that the UPHY (Universal Physical Layer) is not sending the correct notifications to the xHCI controller during a Gen 2 unplug event, causing the controller to lose track of the link state. You can investigate the UPHY driver code and the xHCI controller driver code to see if there are any specific notifications or handshakes that are missing.
Link reset or logic in the driver: The xHCI controller might require a specific link reset or logic to be executed during a high-speed disconnect event. You can check the xHCI controller driver code to see if there are any specific reset or logic functions that are not being executed correctly.
Extcon notifications: The Extcon (External Connector) framework is used to manage external connectors, such as USB ports. It’s possible that the Extcon notifications are not being sent correctly during a Gen 2 unplug event, causing the xHCI controller to lose track of the link state. You can investigate the Extcon driver code to see if there are any issues with the notifications.
CC logic: The CC (Configuration Channel) logic is responsible for managing the USB port configuration. It’s possible that the CC logic is not correctly telling the xHCI controller to clear the port during a high-speed disconnect event. You can investigate the CC logic driver code to see if there are any issues.
xHCI state machine (LTSSM): The xHCI state machine (LTSSM) is responsible for managing the USB link state. It’s possible that the LTSSM is hanging due to incorrect notifications or handshakes during a Gen 2 unplug event. You can investigate the xHCI state machine driver code to see if there are any issues.
To troubleshoot the issue, you can try the following:
Check the UPHY driver code: Investigate the UPHY driver code to see if there are any specific notifications or handshakes that are missing during a Gen 2 unplug event.
Check the xHCI controller driver code: Investigate the xHCI controller driver code to see if there are any specific reset or logic functions that are not being executed correctly during a high-speed disconnect event.
Check the Extcon driver code: Investigate the Extcon driver code to see if there are any issues with the notifications during a Gen 2 unplug event.
Check the CC logic driver code: Investigate the CC logic driver code to see if there are any issues with the CC logic not correctly telling the xHCI controller to clear the port during a high-speed disconnect event.
Check the xHCI state machine driver code: Investigate the xHCI state machine driver code to see if there are any issues with the LTSSM hanging due to incorrect notifications or handshakes during a Gen 2 unplug event.
In terms of specific areas to look in the driver code or DTS, you can start by investigating the following:
UPHY driver code: Look for any specific notifications or handshakes that are missing during a Gen 2 unplug event.
xHCI controller driver code: Look for any specific reset or logic functions that are not being executed correctly during a high-speed disconnect event.
Extcon driver code: Look for any issues with the notifications during a Gen 2 unplug event.
CC logic driver code: Look for any issues with the CC logic not correctly telling the xHCI controller to clear the port during a high-speed disconnect event.
xHCI state machine driver code: Look for any issues with the LTSSM hanging due to incorrect notifications or handshakes during a Gen 2 unplug event.
In terms of DTS, you can check the following:
USB port configuration: Verify that the USB port configuration is correct and that the xHCI controller is properly configured.
UPHY configuration: Verify that the UPHY is properly configured and that the notifications are being sent correctly.
Extcon configuration: Verify that the Extcon is properly configured and that the notifications are being sent correctly.
By investigating these areas and checking the driver code and DTS, you should be able to identify the root cause of the issue and implement a fix to ensure that the xHCI controller correctly resets the link during a Gen 2 unplug event.
*** Please give the thumbs up if you get answers you like. Or provide feedback to help us improve the answer. ***
Thanks for the suggestions. Given that our 10G SI measurement is verified PASS and the adapter test works (pre-establishing Host role), we suspect the port is falling into a locked state during a direct Gen 2 unplug.
Since our internal software resources are currently limited, could you please provide:
The Register Address: What is the specific address for the xHCI Port Status and Control Register to check the current link state? We want to see if the port is stuck in a “Disabled” or “Inactive” status after unplugging.
The Reset Logic: Where in the tegra-xusb driver is the link reset (Warm Reset) triggered when a Detach event is received from the CC logic?
Having these specific pointers will allow us to verify the hardware state immediately with a simple register dump.