Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Select an option

  • Save squirrel532/d5da86b53749d21767dd8d3bbd4db15b to your computer and use it in GitHub Desktop.

Select an option

Save squirrel532/d5da86b53749d21767dd8d3bbd4db15b to your computer and use it in GitHub Desktop.
MIC-711-ON USB 3.2 Fix on JetPack 7.2 (L4T r39) — Engineering Notes
> Disclamer: This note is generate by Claude Opus 4.8 and manually tested on a real device. It does fix my problem, please take it at risk.
● MIC-711-ON USB 3.2 Fix on JetPack 7.2 (L4T r39) — Engineering Notes
Problem
After flashing an Advantech MIC-711-ON (Jetson Orin Nano, module p3767-0004) with stock NVIDIA JetPack 7.2 / L4T R39.2.0:
- USB 3.2 ports ran at USB 2.0 speed (480M) only — e.g. an Orbbec Gemini 305 USB-3 camera capped at 480M.
- One USB 2.0 port was completely dead.
Root Cause
The board was flashed with NVIDIA's stock Orin Nano devkit DTB (tegra234-p3768-0000+p3767-0004-nv.dtb), which targets NVIDIA's reference carrier — not the Advantech
carrier. Two mismatches:
1. usb3-2 disabled. The MIC-711-ON has an onboard Genesys GL3523 USB-3.1 hub that provides the USB-3.2 Type-A ports. Its SuperSpeed upstream is physically wired to the
usb3-2 UPHY lane, which the devkit DTB leaves disabled → the hub runs in USB-2.0 mode → everything downstream caps at 480M.
2. usb2-0 bound to a fusb301 USB-C controller (I²C 0x25) that the MIC-711-ON does not have → probe fails (err -22), dependency cycle → that OTG port is dead.
Same ODMDATA / hsio-uphy-config-0 on both → kernel-DTB-only fix, no MB1/UPHY/ODMDATA change needed.
Key Findings (verified)
- The flash target name is a red herring. Advantech flashes p3509-a02+p3767-0000, but that .conf just sources p3768-0000-p3767-0000-a0.conf and resolves to the same
devkit DTB (…p3767-0004-nv.dtb). The target name does not change USB wiring — only the DTB binary content does.
- Advantech patched their DTB. Proven by decompiling three DTBs:
| DTB | usb3-2 lane | fusb301 refs |
|----------------------|-------------|--------------|
| Stock NVIDIA r36.4.4 | disabled | 3 |
| Stock NVIDIA r39 | disabled | 3 |
| Advantech r36.4 BSP | okay | 0 |
- No stock NVIDIA config (devkit or p3509, r36 or r39) enables usb3-2. To stay on JetPack 7.2 you must modify the DTB; the only "stock" alternative is flashing
Advantech's JP6.1 BSP (downgrade).
- Advantech BSP source: MIC-711_OrinNX_6.1.0_V1.0.0_SDK.tbz2 (public Dropbox link on learn.advantech.com/BSP/MIC-711-OX4A1/...), L4T r36.4. Its carrier DTB is the
reference for these changes.
The Fix (applied to tegra234-p3768-0000+p3767-0004-nv.dtb)
Inside padctl@3520000:
- pads/usb3/lanes/usb3-2: status "disabled" → "okay", add a phandle (use a dtc label to avoid collisions).
- ports/usb3-2: status → "okay", add nvidia,usb2-companion = <0x01>; (pairs with usb2-1).
- Host usb@3610000: append the usb3-2 lane phandle to phys, and "usb3-2" to phy-names.
Build:
dtc -I dtb -O dts -o carrier.dts <stock>.dtb
# edit as above (label the usb3-2 lane node, reference it in phys)
dtc -I dts -O dtb -o tegra234-p3768-0000+p3767-0004-nv-USB3FIX.dtb carrier.dts
How to Apply
Non-destructive test (recommended — reversible, persists across reboots, no recovery mode):
# copy patched DTB to board:
sudo cp ...-USB3FIX.dtb /boot/dtb/
# in /boot/extlinux/extlinux.conf, under LABEL primary, add:
FDT /boot/dtb/tegra234-p3768-0000+p3767-0004-nv-USB3FIX.dtb
sudo reboot
(UEFI L4TLauncher honors the FDT line.) Revert = remove the line + reboot.
Permanent (survives full reflash): drop patched DTB into Linux_for_Tegra/kernel/dtb/, board into recovery, then sudo ./flash.sh -k A_kernel-dtb jetson-orin-nano-devkit
internal.
Verification
lsusb -t # GL3523 / device now at 5000M on Bus 002 (was 480M)
cat /proc/device-tree/bus@0/padctl@*/ports/usb3-2/status # "okay"
✅ Orbbec camera confirmed at 5000M SuperSpeed on Bus 002 after the fix.
Still Open
- Dead USB-2.0 port — fusb301 probe still fails (-22). Separate fix: in ports/usb2-0, remove usb-role-switch + the fusb301 connector, replace with gpio-usb-b-connector
(or mode = "host"), as Advantech does. Not yet applied.
Useful Diagnostics / Gotchas
- lsusb -t — 480M vs 5000M/10000M tells you SuperSpeed status instantly.
- A 10000M root hub on Bus 002 means the xHCI/UPHY SS lane is up at controller level — if devices still show 480M, it's a port/lane mapping problem in the DTB, not
silicon.
- p3767-0004 = Orin Nano (260-pin SO-DIMM). It physically cannot sit on an AGX (p3701, 699-pin) carrier — don't try AGX DTBs.
- Module SKU ↔ DTB: live compatible string (nvidia,p3768-0000+p3767-0004) tells you which DTB is flashed; match live padctl values to pick -nv vs -nv-super.
---
This is also saved to project memory (mic711-usb3-dtb-mismatch.md) so it'll resurface next session. Want me to drop this same write-up into a file in your working
directory (e.g. MIC-711-ON_USB3_fix_notes.md) so you have it outside the Claude memory too?
@squirrel532

Copy link
Copy Markdown
Author

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment