Orin NX - Updating device tree of custom USB-C

Hello,

I am working on a custom carrier board for a Jetson Orin NX 16GB module.

Currently, everything is working correctly except the USB-C. My target is replicate the same USB-C from the EVK on my custom carrier (USBSS1 and USB0 signals).

The only hardware difference is that instead of using the FUSB301 mux, I am using the HD3SS3220. This HD3SS3220 is configured by hardware, so it should work immediately once powered.

Below, I show the schematic from the module to the connector:

Jetson module:

HD3SS3220 component configured by hardware:
HD3SS3220

USB-C connector:
usbc-connector

Device tree updated:


	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 {
						nvidia,function = "xusb";
						status = "okay";
					};
					usb3-1 {
						nvidia,function = "xusb";
						status = "okay";
					};
				};
			};
		};

		ports {
			usb2-0 {/* Goes to recovery port */
				mode = "otg";
				status = "okay";
				vbus-supply = <&p3768_vdd_5v_sys>;
				usb-role-switch;
			};
			usb2-1 {/* Goes to hub */
				mode = "host";
				vbus-supply = <&p3768_vdd_av10_hub>;
				status = "okay";
			};
			usb2-2 {/* Goes to M2.E */
				mode = "host";
				vbus-supply = <&p3768_vdd_5v_sys>;
				status = "okay";
			};
			usb3-0 {/* Goes to hub */
				nvidia,usb2-companion = <1>;
				status = "okay";
			};
			usb3-1 {/* Goes to J5 */
				nvidia,usb2-companion = <0>;
				status = "okay";
			};
		};
	};

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

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

	i2c@c240000{
		status = "okay";

Next logs are shown sometimes (not always) in dmesg when something is connected and disconnected from the USB-C port:

[lun jun 10 11:59:37 2024] pcieport 0004:00:00.0: AER: Corrected error received: 0004:00:00.0
[lun jun 10 11:59:37 2024] pcieport 0004:00:00.0: PCIe Bus Error: severity=Corrected, type=Physical Layer, (Receiver ID)
[lun jun 10 11:59:37 2024] pcieport 0004:00:00.0:   device [10de:229c] error status/mask=00000001/0000e000
[lun jun 10 11:59:37 2024] pcieport 0004:00:00.0:    [ 0] RxErr                 
[lun jun 10 11:59:37 2024] pcieport 0004:00:00.0: AER: Corrected error received: 0004:00:00.0
[lun jun 10 11:59:37 2024] pcieport 0004:00:00.0: AER: can't find device of ID0000
[lun jun 10 11:59:37 2024] pcieport 0004:00:00.0: AER: Multiple Corrected error received: 0004:00:00.0
[lun jun 10 11:59:37 2024] pcieport 0004:00:00.0: AER: can't find device of ID0000

Any idea of what the problem might be or which way to go?

  1. PCIe C4 should not get affected by plugging in device to USB port. It could be hardware design related mistake.

  2. Your device tree does not have remote-endpoint as original fusb301 did. I wonder if otg mode really can work fine on your side.

Hello WayneWWW,

  • I will check the hardware side.

  • Related to point 2, is that endpoint really necessary? At the hardware level, those usb2-0 lines are directly mapped to the USB-C connector, just like the usb3-1 lines. Perhaps I am understanding it incorrectly?

Anyway, in your opinion, should USBSS1 be working with this DT and HW configuration?

Thanks for your support!

Your design may not work with OTG and could be only run in host mode.
If this is fine for you then I have no question here.