Hi!
We have designed a custom carrier board for the jetson agx orin with the following USB connections:
With J16 and J17 being USB type A ports and, J10 a direct link to the agx orin connector.
On Jetpack5.1.2 port J17 and both M2 slots have been working with no modifications to the device tree, ruling out any hardware issues. Port J16 was used for flashing, but didn’t work once the system booted.
With Jetpack6.2 by default both type A ports were not responding(empty lsusb and no dmesg changes when plugging things in). Following the bring up docs and other forum posts I made the following changes to the device tree.
tegra234-p3737-0000+p3701-0005.dts:
xusb_padctl@3520000 {
status = "okay";
pads {
usb2 {
usb2-0 {
nvidia,function = "xusb";
status = "okay";
};
usb2-1 {
nvidia,function = "xusb";
status = "okay";
};
};
usb3 {
usb3-0 {
nvidia,function = "xusb";
status = "okay";
};
};
};
ports {
usb2-0 {
mode = "host";
vbus-supply = <0xf8>;
status = "okay";
};
usb2-1 {
mode = "host";
vbus-supply = <0xf8>;
status = "okay";
};
usb3-0 {
mode = "host";
vbus-supply = <0xf8>;
status = "okay";
};
};
};
padctl@3520000 {
compatible = "nvidia,tegra234-xusb-padctl";
reg = <0x00 0x3520000 0x00 0x20000 0x00 0x3540000 0x00 0x10000>;
reg-names = "padctl\0ao";
interrupts = <0x00 0xa7 0x04>;
resets = <0x03 0x72>;
reset-names = "padctl";
status = "okay";
vclamp-usb-supply = <0xf6>;
avdd-usb-supply = <0xf7>;
phandle = <0xfd>;
pads {
usb2 {
lanes {
usb2-0 {
nvidia,function = "xusb";
status = "okay";
#phy-cells = <0x00>;
};
usb2-1 {
nvidia,function = "xusb";
status = "okay";
#phy-cells = <0x00>;
};
};
};
usb3 {
lanes {
usb3-0 {
nvidia,function = "xusb";
status = "okay";
#phy-cells = <0x00>;
};
};
};
};
ports {
usb2-0 {
status = "okay";
vbus-supply = <0xf8>;
mode = "host";
};
usb2-1 {
status = "okay";
vbus-supply = <0xf8>;
mode = "host";
};
usb3-0 {
status = "okay";
nvidia,usb2-companion = <1>;
};
};
};
usb@3550000 {
compatible = "nvidia,tegra234-xudc";
reg = <0x00 0x3550000 0x00 0x8000 0x00 0x3558000 0x00 0x8000>;
reg-names = "base\0fpci";
interrupts = <0x00 0xa6 0x04>;
clocks = <0x03 0x109 0x03 0x10c 0x03 0x113 0x03 0x110>;
clock-names = "dev\0ss\0ss_src\0fs_src";
interconnects = <0x58 0x4c 0x59 0x58 0x4d 0x59>;
interconnect-names = "dma-mem\0write";
iommus = <0xf3 0x0f>;
power-domains = <0x03 0x0b 0x03 0x0a>;
power-domain-names = "dev\0ss";
nvidia,xusb-padctl = <0xfd>;
dma-coherent;
status = "okay";
phys = <&{/bus@0/padctl@3520000/pads/usb2/lanes/usb2-0}>,
<&{/bus@0/padctl@3520000/pads/usb2/lanes/usb2-1}>,
<&{/bus@0/padctl@3520000/pads/usb3/lanes/usb3-0}>;
phy-names = "usb2-0","usb2-1","usb3-0";
};
usb@3610000 {
compatible = "nvidia,tegra234-xusb";
reg = <0x00 0x3610000 0x00 0x40000 0x00 0x3600000 0x00 0x10000 0x00 0x3650000 0x00 0x10000>;
reg-names = "hcd\0fpci\0bar2";
interrupts-extended = <0x01 0x00 0xa3 0x04 0x01 0x00 0xa4 0x04 0x100 0x4c 0x04 0x100 0x4d 0x04 0x100 0x4e 0x04 0x100 0x4f 0x04 0x100 0x50 0x04 0x100 0x51 0x04 0x100 0x52 0x04>;
interrupt-names = "xhci\0mbox\0wake0\0wake1\0wake2\0wake3\0wake4\0wake5\0wake6";
clocks = <0x03 0x10b 0x03 0x10d 0x03 0x10c 0x03 0x113 0x03 0x0e 0x03 0x110 0x03 0x67 0x03 0x0e 0x03 0x64>;
clock-names = "xusb_host\0xusb_falcon_src\0xusb_ss\0xusb_ss_src\0xusb_hs_src\0xusb_fs_src\0pll_u_480m\0clk_m\0pll_e";
interconnects = <0x58 0x4a 0x59 0x58 0x4b 0x59>;
interconnect-names = "dma-mem\0write";
iommus = <0xf3 0x0e>;
power-domains = <0x03 0x0c 0x03 0x0a>;
power-domain-names = "xusb_host\0xusb_ss";
nvidia,xusb-padctl = <0xfd>;
dma-coherent;
status = "okay";
phys = <&{/bus@0/padctl@3520000/pads/usb2/lanes/usb2-0}>,
<&{/bus@0/padctl@3520000/pads/usb2/lanes/usb2-1}>,
<&{/bus@0/padctl@3520000/pads/usb3/lanes/usb3-0}>;
phy-names = "usb2-0","usb2-1","usb3-0";
};
I have deleted everything relating to the ccg typec connector and added what I want to be 2xUSB2 with 1xUSB3 companion.
With these changes:
nvidia@ubuntu:~$ lsusb
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Now two USB hubs are showing up with only one of them working - J16. So that is some progress but I would like to also activate the other port and better understand the required changes.
I will provide the full dmesg log as soon as I have access to the board again, In the meantime could you help me with these questions,
- What is the difference in USB handling between Jetpack 5 and 6?
- Are there any mistakes or things to add/remove in the device tree changes i have ?
Thank you for your time and support!