Jetson TX1 USB3.0 OTG

Can anyone confirm/answer the below questions? I have gone through the TRM and OEM guides and I believe the following to be true, but I was hoping someone who has done it before could confirm.

I want to confirm that the USB Super Speed connection (USB SS controller #0) is a dedicated port to the ethernet controller. This port is not exposed externally so we cannot accidentally connect a device to this port. Correct?

Is there any restrictions on which USB ports must be paired to get USB3.0 OTG?
My understanding is that USB0_* (USB 2.0 controller #1) is the only USB OTG. Does connecting USB_SS0_* (USB SS controller #1) to USB0_* make the super speed port also OTG? Or do we need to use a specific USB SS port?
The TRM (22.1) says one USB3.0 port can be OTG. Are there any additional requirements?
The TRM (22.4.1) says any one USB3.0 port can be exclusively paired to USB0

If I pair USB0_* with USB_SS0_* will this prevent flashing the device in anyway?
The TRM (22.2.1) says USB recovery is only supported on controller #1.

Thanks,
Chris

Hi Chris,

  1. Yes, correct. BTW, USB_SS#0 is a port not a controller name, there is only one XUSB 3.0 controller in TX1.

  2. As 22.4.1 said, any one of USB SS port can be exclusively paired with USB2.0 port 0 to get USB3.0 OTG. And in this case, USB2.0 port 0 must be assigned to the XUSB controller prior.

  3. No, TX1 can enter recovery mode by pressing recovery button during power on or reset, in recovery mode USB0 is assigned to controller #1 default, then TX1 can be flashed in through USB0.

This sounds like there might be some device tree modification required for this setup. Is that right? If so, can you provide us with any pointers about what needs to change?

HiJosh,

Please check below explanation about the usb port mapping,

nvidia,lane_owner
is to set the owner of PCIe lane pad. It could be XUSB, PCIe x7 or Sata x1.
such as for 0xff56, it means lane P6 is used as SSP0 and lane P5 is used as SSP1.
The other lanes(0xf) are not assigned, may be allocated for PCIe or Sata controller.
nvidia,portmap
is to define which usb/xusb port will be enabled. BIT0 - BIT7 : SS ports. BIT8 - BIT15 : USB2 UTMI ports
such as for 0x0e03, LSB 0x03 means SSP0 and SSP1 are enabled, MSB 0x0E means USBP1, USBP2, USBP3 are enabled
nvidia,ss_portmap
is to map xusb port with desire usb port. ss_portmap[0:3] = SS0 map, ss_portmap[4:7] = SS1 map
such as for 0x21, it means SSP0 on USB2P1 and SSP1 on USB2P2

You may refer to the following dts file to configure the device tree
$TOP/kernel/arch/arm64/boot/dts/tegra210-ers-e2220-1180-a00-00-common.dts
Also, please enable xotg/xudc from device tree and kconfig to get xotg working.

Thanks very much nVConan. That information is helpful. I’ll try making the changes and report back.

Hello again,

I’ve been playing around with device tree configuration but have been unable to get USB 3.0 to work through our connector. USB 2.0 seems to continue to work though.

We have connected the following TX1 SOM pins to the usb3 physical connector, using the “Jetson TX1 Pin Name” from Jetson_TX1_Generic_Customer_Pinmux spreadsheet:

F43, USB_SS0_RX+
F44, USB_SS0_RX-
C43, USB_SS0_TX+
C44, USB_SS0_TX-
A36, USB0_OTG_ID
B39, USB0_D
B40, USB0_D-
A17, USB0_EN_OC

We are basing our kernel configuration on that of the jetson TX1 devkit and so I think the relevent device tree file for us is tegra210-jetson-cv-base-p2597-2180-a00.dts (which is included by tegra210-jetson-tx1-p2597-2180-a01-devkit.dts).

When I make changes to this file and then inspect the contents of /proc/device-tree I can see the values match my changes.

Based on you suggestion to:

I’ve made the following changes:

tegra210-jetson-cv-base-p2597-2180-a00.dts:504
    xudc@700d0000.status="disabled" -> "okay"
tegra210-jetson-cv-base-p2597-2180-a00.dts:510
    xotg.status="disabled" -> "okay"

And in my kernel config I have enabled XOTG with:

CONFIG_USB_TEGRA_XOTG=y

I’ve cross-referenced the OEM Product Design Guide, Jetson TX1 Carrier Board Specification, and the Customer Pinmux spreadsheet, and read through this document and I understand the following: When you say “SSP1” this is short for “USB SS Port 1”, which is denoted “USB_SS#1” in the OEM Product Design Guide, and the “Jetson TX1 Pin Names” for this port are USB_SS0_*. Based on our configuration I understand that we have “SSP1” wired to our USB3 connector.

Unfortunately, I’m unable to determine which “USB Port <#>” corresponds to the “Jetson TX1 Pin Names” of USB0_*. I would have guessed this was USBP0, but looking at the device tree, it seems that USBP0 is disabled (since nvidia,portmap=0x0e03), suggesting that these pins are for a different USB “port” (in the device-tree sense, I guess).

Based on which pins we have wired to our connnector, I believe that the nvidia,lane_owner=<0xff56> and nvidia,portmap=<0x0e03> are correct, and that I should just need to change nvidia,ss_portmap. Ive tried the following values: <0x21> (default), <0x01>, and <0x31>.

My understanding is that the Jetson TX1 Devkit default of <0x21> means:

SSP0 + USBP1 = SOM ethernet controller
SSP1 + USBP2 = USB3 connector on the devkit

In all three of my tries the behavior I observe is that a USB 2.0 flash drive will enumerate and mount correctly through a USB 3.0 OTG cable, but a USB 3.0 portable hard drive will not (through the same USB 3.0 OTG cable).

When I plug the USB 3.0 OTG cable in, I can see the following warnings in the terminal:

[   60.087200] regulator_get() failed for (tegra-ehci.0,usb_vbus), -19
[   60.095964] usb_phy: failed regulator_get vdd_vbus_usb:-19, inst:0
[   61.141175] Could not add tegra-ehci.0 to power domain using device tree

And I see the following in the kernel log:

Aug 29 16:14:00 testmachine kernel: [   60.020390] extcon-gpio-states 1.extcon: Cable state 2
Aug 29 16:14:00 testmachine kernel: [   60.020594] tegra-xotg xotg.26: extcon_id_notifications():219: USB_ID pin grounded
Aug 29 16:14:00 testmachine kernel: [   60.077549] otg state changed: SUSPEND --> HOST
Aug 29 16:14:00 testmachine kernel: [   60.082501] tegra USB phy - inst[0] platform info:
Aug 29 16:14:00 testmachine kernel: [   60.082609] port_otg: yes
Aug 29 16:14:00 testmachine kernel: [   60.082678] has_hostpc: yes
Aug 29 16:14:00 testmachine kernel: [   60.082743] phy_interface: USB_PHY_INTF_UTMI
Aug 29 16:14:00 testmachine kernel: [   60.082806] op_mode: TEGRA_USB_OPMODE_HOST
Aug 29 16:14:00 testmachine kernel: [   60.082867] qc2_voltage: 0
Aug 29 16:14:00 testmachine kernel: [   60.082929] hot_plug: disabled
Aug 29 16:14:00 testmachine kernel: [   60.082991] remote_wakeup: enabled
Aug 29 16:14:00 testmachine kernel: [   60.087200] regulator_get() failed for (tegra-ehci.0,usb_vbus), -19
Aug 29 16:14:00 testmachine kernel: [   60.095964] usb_phy: failed regulator_get vdd_vbus_usb:-19, inst:0
Aug 29 16:14:00 testmachine kernel: [   60.189473] extcon-gpio-states 1.extcon: Cable state 2
Aug 29 16:14:01 testmachine kernel: [   61.113362] tegra-ehci tegra-ehci.0: Tegra EHCI Host Controller
Aug 29 16:14:01 testmachine kernel: [   61.113644] tegra-ehci tegra-ehci.0: new USB bus registered, assigned bus number 1
Aug 29 16:14:01 testmachine kernel: [   61.115019] tegra-ehci tegra-ehci.0: irq 52, io mem 0x7d000000
Aug 29 16:14:01 testmachine kernel: [   61.127871] tegra-ehci tegra-ehci.0: USB 2.0 started, EHCI 1.10
Aug 29 16:14:01 testmachine kernel: [   61.128683] usb usb1: New USB device found, idVendor=1d6b, idProduct=0002
Aug 29 16:14:01 testmachine kernel: [   61.128803] usb usb1: New USB device strings: Mfr=3, Product=2, SerialNumber=1
Aug 29 16:14:01 testmachine kernel: [   61.128903] usb usb1: Product: Tegra EHCI Host Controller
Aug 29 16:14:01 testmachine kernel: [   61.128998] usb usb1: Manufacturer: Linux 3.10.96-skydio-24.1-gabb2224-dirty ehci_hcd
Aug 29 16:14:01 testmachine kernel: [   61.129089] usb usb1: SerialNumber: tegra-ehci.0
Aug 29 16:14:01 testmachine kernel: [   61.138712] hub 1-0:1.0: USB hub found
Aug 29 16:14:01 testmachine kernel: [   61.138958] hub 1-0:1.0: 1 port detected
Aug 29 16:14:01 testmachine kernel: [   61.141175] Could not add tegra-ehci.0 to power domain using device tree
Aug 29 16:14:01 testmachine kernel: [   61.141307] reg-fixed-sync-voltage 5.regulator: Consumer c1 does not have device name
Aug 29 16:14:01 testmachine kernel: [   61.142243] platform 5.regulator: Driver reg-fixed-sync-voltage requests probe deferral
Aug 29 16:14:01 testmachine kernel: [   61.145923] platform 7.regulator: Driver reg-fixed-sync-voltage requests probe deferral
Aug 29 16:14:01 testmachine kernel: [   61.148849] platform d.regulator: Driver reg-fixed-sync-voltage requests probe deferral
Aug 29 16:14:01 testmachine kernel: [   61.151623] platform c9.regulator: Driver reg-fixed-sync-voltage requests probe deferral
Aug 29 16:14:01 testmachine kernel: [   61.155171] platform ca.regulator: Driver reg-fixed-sync-voltage requests probe deferral
Aug 29 16:14:01 testmachine kernel: [   61.156773] platform cb.regulator: Driver reg-fixed-sync-voltage requests probe deferral
Aug 29 16:14:01 testmachine kernel: [   61.158719] platform cc.regulator: Driver reg-fixed-sync-voltage requests probe deferral
Aug 29 16:14:01 testmachine kernel: [   61.160636] platform cd.regulator: Driver reg-fixed-sync-voltage requests probe deferral
Aug 29 16:14:01 testmachine kernel: [   61.162055] reg-fixed-sync-voltage ce.regulator: Consumer c0 does not have device name
Aug 29 16:14:01 testmachine kernel: [   61.162328] platform ce.regulator: Driver reg-fixed-sync-voltage requests probe deferral
Aug 29 16:14:01 testmachine kernel: [   61.163849] platform d1.regulator: Driver reg-fixed-sync-voltage requests probe deferral
Aug 29 16:14:01 testmachine kernel: [   61.165496] platform d3.regulator: Driver reg-fixed-sync-voltage requests probe deferral
Aug 29 16:14:01 testmachine kernel: [   61.166977] reg-fixed-sync-voltage 5.regulator: Consumer c1 does not have device name
Aug 29 16:14:01 testmachine kernel: [   61.167421] platform 5.regulator: Driver reg-fixed-sync-voltage requests probe deferral
Aug 29 16:14:01 testmachine kernel: [   61.169263] platform 7.regulator: Driver reg-fixed-sync-voltage requests probe deferral
Aug 29 16:14:01 testmachine kernel: [   61.170968] platform d.regulator: Driver reg-fixed-sync-voltage requests probe deferral
Aug 29 16:14:01 testmachine kernel: [   61.172581] platform c9.regulator: Driver reg-fixed-sync-voltage requests probe deferral

Then I plug in the USB 3.0 hard drive and I see no messages in the kernel log. When I unplug the usb 3.0 hard drive, then plug in the usb 2.0 flash key, I see the following.

Aug 29 16:22:02 testmachine kernel: [  541.828245] usb 1-1: new high-speed USB device number 2 using tegra-ehci
Aug 29 16:22:02 testmachine kernel: [  541.880522] usb 1-1: New USB device found, idVendor=0930, idProduct=6545
Aug 29 16:22:02 testmachine kernel: [  541.880668] usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
Aug 29 16:22:02 testmachine kernel: [  541.880780] usb 1-1: Product: DataTraveler 2.0
Aug 29 16:22:02 testmachine kernel: [  541.880875] usb 1-1: Manufacturer: Kingston
Aug 29 16:22:02 testmachine kernel: [  541.880970] usb 1-1: SerialNumber: 408D5C16386DB0416953F037
Aug 29 16:22:02 testmachine kernel: [  541.886571] usb-storage 1-1:1.0: USB Mass Storage device detected
Aug 29 16:22:02 testmachine kernel: [  541.889683] scsi0 : usb-storage 1-1:1.0
Aug 29 16:22:02 testmachine kernel: [  541.896237] platform ca.regulator: Driver reg-fixed-sync-voltage requests probe deferral
Aug 29 16:22:02 testmachine kernel: [  541.901773] platform cb.regulator: Driver reg-fixed-sync-voltage requests probe deferral
Aug 29 16:22:02 testmachine kernel: [  541.903470] platform cc.regulator: Driver reg-fixed-sync-voltage requests probe deferral
Aug 29 16:22:02 testmachine kernel: [  541.904934] platform cd.regulator: Driver reg-fixed-sync-voltage requests probe deferral
Aug 29 16:22:02 testmachine kernel: [  541.906280] reg-fixed-sync-voltage ce.regulator: Consumer c0 does not have device name
Aug 29 16:22:02 testmachine kernel: [  541.906527] platform ce.regulator: Driver reg-fixed-sync-voltage requests probe deferral
Aug 29 16:22:02 testmachine kernel: [  541.911079] platform d1.regulator: Driver reg-fixed-sync-voltage requests probe deferral
Aug 29 16:22:02 testmachine kernel: [  541.912933] platform d3.regulator: Driver reg-fixed-sync-voltage requests probe deferral
Aug 29 16:22:02 testmachine kernel: [  541.914382] reg-fixed-sync-voltage 5.regulator: Consumer c1 does not have device name
Aug 29 16:22:02 testmachine kernel: [  541.914759] platform 5.regulator: Driver reg-fixed-sync-voltage requests probe deferral
Aug 29 16:22:02 testmachine kernel: [  541.916629] platform 7.regulator: Driver reg-fixed-sync-voltage requests probe deferral
Aug 29 16:22:02 testmachine kernel: [  541.919671] platform d.regulator: Driver reg-fixed-sync-voltage requests probe deferral
Aug 29 16:22:02 testmachine kernel: [  541.920733] platform c9.regulator: Driver reg-fixed-sync-voltage requests probe deferral
Aug 29 16:22:02 testmachine kernel: [  541.921749] platform ca.regulator: Driver reg-fixed-sync-voltage requests probe deferral
Aug 29 16:22:03 testmachine kernel: [  542.895483] scsi 0:0:0:0: Direct-Access     Kingston DataTraveler 2.0 PMAP PQ: 0 ANSI: 6
Aug 29 16:22:03 testmachine kernel: [  542.902444] platform cb.regulator: Driver reg-fixed-sync-voltage requests probe deferral
Aug 29 16:22:03 testmachine kernel: [  542.904088] sd 0:0:0:0: [sda] 60481536 512-byte logical blocks: (30.9 GB/28.8 GiB)
Aug 29 16:22:03 testmachine kernel: [  542.905879] platform cc.regulator: Driver reg-fixed-sync-voltage requests probe deferral
Aug 29 16:22:03 testmachine kernel: [  542.906407] sd 0:0:0:0: [sda] Write Protect is off
Aug 29 16:22:03 testmachine kernel: [  542.906609] sd 0:0:0:0: [sda] Mode Sense: 45 00 00 00
Aug 29 16:22:03 testmachine kernel: [  542.909328] platform cd.regulator: Driver reg-fixed-sync-voltage requests probe deferral
Aug 29 16:22:03 testmachine kernel: [  542.910181] sd 0:0:0:0: [sda] Write cache: disabled, read cache: enabled, doesn't support DPO or FUA
Aug 29 16:22:03 testmachine kernel: [  542.910873] reg-fixed-sync-voltage ce.regulator: Consumer c0 does not have device name
Aug 29 16:22:03 testmachine kernel: [  542.911958] platform ce.regulator: Driver reg-fixed-sync-voltage requests probe deferral
Aug 29 16:22:03 testmachine kernel: [  542.914082] platform d1.regulator: Driver reg-fixed-sync-voltage requests probe deferral
Aug 29 16:22:03 testmachine kernel: [  542.915816] platform d3.regulator: Driver reg-fixed-sync-voltage requests probe deferral
Aug 29 16:22:03 testmachine kernel: [  542.917207] reg-fixed-sync-voltage 5.regulator: Consumer c1 does not have device name
Aug 29 16:22:03 testmachine kernel: [  542.917669] platform 5.regulator: Driver reg-fixed-sync-voltage requests probe deferral
Aug 29 16:22:03 testmachine kernel: [  542.919553] platform 7.regulator: Driver reg-fixed-sync-voltage requests probe deferral
Aug 29 16:22:03 testmachine kernel: [  542.921339] platform d.regulator: Driver reg-fixed-sync-voltage requests probe deferral
Aug 29 16:22:03 testmachine kernel: [  542.923148] platform c9.regulator: Driver reg-fixed-sync-voltage requests probe deferral
Aug 29 16:22:03 testmachine kernel: [  542.924681] platform ca.regulator: Driver reg-fixed-sync-voltage requests probe deferral
Aug 29 16:22:03 testmachine kernel: [  543.037992]  sda: sda1
Aug 29 16:22:03 testmachine kernel: [  543.053023] sd 0:0:0:0: [sda] Attached SCSI removable disk