Is our device tree adequate for USB 3.0 USB hub on our carrier board

We are having an issue getting the xhci@3610000 device to operate at USB 3.0 speeds when our usb hub chip(Microchip USB5806) is capable.
Our platform is our own carrier card with Orin NX SOM.
Does anyone have any feedback on our device tree config?

This our pin mux:
pin 41 DP0_TXD0_P to USBSS1_RX_P
pin 39 DP0_TXD0_N to USBSS1_RX_N
pin 47 DP0_TXD1_P to USBSS1_TX_P
pin 45 DP0_TXD1_N to USBSS1_TX_N

Device Tree snippet for USB:

xusb_padctl: xusb_padctl@3520000 {
	status = "okay";
	pads {
		usb2 {
			lanes {
				usb2-0 {
					nvidia,function = "xusb";
					status = "okay";
				};
				usb2-1 {
					nvidia,function = "xusb";
					status = "okay";
				};
				usb2-2 {
					nvidia,function = "xusb";
					status = "okay";
				};
			};
		};
		usb3 {

			lanes {

				usb3-0 {
					status = "disabled";
					#phy-cells = <0x00>;
				};

				usb3-1 {
					status = "okay";
					#phy-cells = <0x00>;
					nvidia,function = "xusb";
					phandle = <0xb1>;
				};

				usb3-2 {
					status = "disabled";
					#phy-cells = <0x00>;
				};

				usb3-3 {
					status = "disabled";
					#phy-cells = <0x00>;
				};
			};
		};

	ports {

		usb2-0 {
			mode = "peripheral";
			status = "okay";
			usb-role-switch;
		};

		usb2-0 {
			mode = "otg";
			status = "okay";
			vbus-supply = <&varmint_vdd_5v_sys>;

#if TEGRA_XUSB_DT_VERSION >= DT_VERSION_3
usb-role-switch;
connector {
compatible = “usb-b-connector”, “gpio-usb-b-connector”;
label = “micro-USB”;
type = “micro”;
vbus-gpio = <&tegra_main_gpio TEGRA234_MAIN_GPIO(Z, 1) GPIO_ACTIVE_LOW>;
};
endif
};
usb2-1 {
mode = “host”;
vbus-supply = <&varmint_vdd_av10_hub>;
status = “okay”;
};

		usb2-2 {/* Goes to M2.E */
			mode = "host";
			vbus-supply = <&varmint_vdd_5v_sys>;
			status = "okay";
		};


		usb3-0 {
			status = "disabled";
		};

		usb3-1 {
			status = "okay";
			nvidia,usb2-companion = <0x01>;
		};
	};
};

tegra_xudc: xudc@3550000 {
	status = "okay";
	phys = <&{/xusb_padctl@3520000/pads/usb2/lanes/usb2-0}>;
	phy-names = "usb2-0";
	nvidia,xusb-padctl = <&xusb_padctl>;
};

tegra_xhci: xhci@3610000 {
	status = "okay";
	phys = <&{/xusb_padctl@3520000/pads/usb2/lanes/usb2-1}>,
		<&{/xusb_padctl@3520000/pads/usb2/lanes/usb2-2}>,
		<&{/xusb_padctl@3520000/pads/usb3/lanes/usb3-1}>;
	phy-names = "usb2-1", "usb2-2", "usb3-1";
	nvidia,xusb-padctl = <&xusb_padctl>;
};

Please read the document first. Don’t know what you are doing by reading your device tree.

https://docs.nvidia.com/jetson/archives/r35.4.1/DeveloperGuide/text/HR/JetsonModuleAdaptationAndBringUp/JetsonAgxOrinSeries.html?highlight=universal%20serial%20bus#porting-the-universal-serial-bus

You can ask if you don’t know some points from the document, but not just directly give me a device tree and ask me how to do.

Does each entry in a lanes node represent uphy lane 0,1…?
Since we are using DP0_TXD0/1 for our high speed USB hub should we be using the 2nd Lanes entry in our usb3 pad so we are using UPHY0, lane 1? Also in the Universal Physical Layer Lane Assigment chart on Jetson Orin NX and Nano Series — Jetson Linux Developer Guide documentation what does USB 3.2 (P1) mean for the Jetson Orin NX/Nano Function?

USB 3.2 (P1) means it is port1. So it is usb3-1 in device tree.

Also, a USB3.0 pin must have a pair of usb2 pin together so that it can work…

Thanks for the information, this issue can be closed.

1 Like

This topic was automatically closed 14 days after the last reply. New replies are no longer allowed.