JetCore USB hubs fail to enumerate on cold boot when USB camera (0c45:636d) is connected

Hi Vecros Team,

We are using a JetCore carrier board with NVIDIA Jetson Orin NX 16GB and are encountering a repeatable USB initialization issue during a true cold power-up.

The connected camera is a USB 2.0 UVC device. Its USB VID:PID:0c45:636d.
The JetCore USB2 topology normally appears as:
Jetson USB2 root hub
└── Port 2 → 0424:2504 USB hub
└── Port 1 → 0424:2504 USB hub

Problem

If the JetCore is cold-powered with the USB camera already connected to one of the USB2 connectors behind the 0424:2504 hub, the complete downstream hub chain fails to enumerate.

In the failed condition, lsusb shows only:
1d6b:0002 Linux Foundation 2.0 root hub
1d6b:0003 Linux Foundation 3.0 root hub

Both 0424:2504 hubs and the camera are absent.
However:

  • Cold boot with the camera disconnected → both 0424:2504 hubs enumerate normally.
  • Connecting the camera after boot → camera enumerates and operates normally.
  • Warm reboot after entering the failed state does not recover the hubs.
  • Completely removing DC power and booting again with the camera disconnected restores the hub chain.

We also tested another physical USB2 connector connected through the first 0424:2504 hub, and the same cold-boot failure occurred.

Software recovery attempts
We tested several recovery methods from the failed state:
USB authorized / authorized_default reset
udev trigger / settle
USB root-hub driver unbind/rebind
XUSB runtime suspend/resume
warm reboot

None of these caused the 0424:2504 hub to reappear.

We also tested unbinding/rebinding the tegra-xusb platform driver. Rebinding was unsuccessful due to the XUSB/Falcon firmware state, so we are no longer using that method.

Interesting observation / workaround

We then connected the same USB 2.0 camera to the physical USB3 connector on JetCore.

In this configuration the USB2 portion of that connector appears to connect the camera directly to the Jetson XUSB root hub, bypassing the 0424:2504 hub chain:
Jetson USB2 root hub
├── Port 2 → 0424:2504
│ └── Port 1 → 0424:2504

└── Port 3 → USB camera 0c45:636d
lsusb -t shows:
/: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=tegra-xusb/4p, 480M
|__ Port 2: Dev 2, Class=Hub, Driver=hub/4p, 480M
|__ Port 1: Dev 4, Class=Hub, Driver=hub/4p, 480M
|__ Port 3: Dev 3, If 0, Class=Video, Driver=uvcvideo, 480M
|__ Port 3: Dev 3, If 1, Class=Video, Driver=uvcvideo, 480M
We performed a full cold power cycle with the camera left connected to this USB3 physical connector, and both USB hubs and the camera enumerated successfully.

Could you please clarify:

  1. How is RESET_N of the two 0424:2504 USB hubs controlled on JetCore?
  2. Is the hub reset connected to a Jetson GPIO, PMIC GPIO, GPIO expander, or another software-controllable signal?
  3. How are the USB hub PRTPWR signals and downstream USB VBUS switches implemented?
  4. Is there a controllable load-switch / VBUS enable signal for the USB2 connectors?
  5. Is there a supported way to reset or power-cycle the USB hub hardware from software?
  6. Could a downstream USB device’s startup/inrush current prevent the first USB hub from completing its power/reset sequence during cold boot?
  7. Are there any recommended device-tree, firmware, power-sequencing, or hardware changes for this condition?
  8. Is using the physical USB3 connector for a USB2 UVC device a recommended long-term workaround in this situation?

Thanks & Regards

Hi Rihdus,

Great observation. I have tagged our internal team for support, they will get back asap.