AGX Orin industrial Usb3.0 not working

Hi
We are using custom carrier board with AGX Orin industrial but Usb3.0(type-A) not working. Our hardware design tested with AGX Xavier industrial. Is work fine with AGX Xavier industrial module.

With AGX Orin industrial when connected usb2.0 device usb2.0 work fine but when connected us3.0 device gives this warning for a long time;

“usb usb2-port2: Cannot enable. Maybe the USB cable is bad?”

Using lanes is here for Usb3.0;
(F13) - USB0_N
(F12) - USB0_P
(G22) - UPHY_TX1_N
(G23) - UPHY_TX1_P
(C22) - UPHY_RX1_N
(C23) - UPHY_RX1_P

Device tree is like that :
tegra234-p3701-0008-p3737-0000_usb.txt (7.9 KB)

Jetpack version: 5.1.2

debug console log:
usb_Logs.txt (8.5 KB)

lsusb results :

tegra-ubuntu:~$ lsusb
Bus 002 Device 002: ID 0451:9261 Texas Instruments, Inc. TUSB9261 USB3.0 to SATA Bridge
Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 013: ID 2109:0715 VIA Labs, Inc. Longline Micro Portable SSD 
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

Hi,

If you are designing a custom base board, then it means some adaptation configurations are needed.
Otherwise, your board may not work fine.

For Orin AGX series, you could refer to below document

(please be aware that above link is for rel-36.3/jetpack6.0)

This document includes below configuration

  1. pinmux change & GPIO configuration
  2. EEPROM change as most custom boards do not have an EEPROM on it.
  3. Kernel porting
  4. PCIe configuration
  5. USB configuration
  6. MGBE configuration
  7. RGMII configuration

Thanks!

Please check if this patch is present in your BSP.

diff --git a/drivers/phy/tegra/xusb-tegra186.c b/drivers/phy/tegra/xusb-tegra186.c
index fc74240..746b5a69 100644
--- a/drivers/phy/tegra/xusb-tegra186.c
+++ b/drivers/phy/tegra/xusb-tegra186.c
@@ -1,6 +1,6 @@
 // SPDX-License-Identifier: GPL-2.0
 /*
- * Copyright (c) 2016-2023, NVIDIA CORPORATION.  All rights reserved.
+ * SPDX-FileCopyrightText: Copyright (c) 2016-2025, NVIDIA CORPORATION & AFFILIATES. All rights reserved.
  */
 
 #include <linux/delay.h>
@@ -972,6 +972,7 @@
 	unsigned int index = lane->index;
 	struct device *dev = padctl->dev;
 	int err;
+	u32 reg;
 
 	port = tegra_xusb_find_usb2_port(padctl, index);
 	if (!port) {
@@ -979,6 +980,13 @@
 		return -ENODEV;
 	}
 
+	/* reset VBUS&ID OVERRIDE */
+	reg = padctl_readl(padctl, USB2_VBUS_ID);
+	reg &= ~VBUS_OVERRIDE;
+	reg &= ~ID_OVERRIDE(~0);
+	reg |= ID_OVERRIDE_FLOATING;
+	padctl_writel(padctl, reg, USB2_VBUS_ID);
+
 	if (port->supply && port->mode == USB_DR_MODE_HOST) {
 		err = regulator_enable(port->supply);
 		if (err) {

I changed in our BSP like this ;

static int tegra186_utmi_phy_init(struct phy *phy)
{
	struct tegra_xusb_lane *lane = phy_get_drvdata(phy);
	struct tegra_xusb_padctl *padctl = lane->pad->padctl;
	struct tegra_xusb_usb2_port *port;
	unsigned int index = lane->index;
	unsigned int vbus_id_index = padctl->soc->supports_vbus_id_map ? lane->index : 0;
	struct device *dev = padctl->dev;
	int err;
	u32 reg;

	port = tegra_xusb_find_usb2_port(padctl, index);
	if (!port) {
		dev_err(dev, "no port found for USB2 lane %u\n", index);
		return -ENODEV;
	}

	/* reset VBUS&ID OVERRIDE */
	reg = padctl_readl(padctl, USB2_VBUS_ID(vbus_id_index));
	reg &= ~VBUS_OVERRIDE;
	reg &= ~ID_OVERRIDE(~0);
	reg |= ID_OVERRIDE_FLOATING;
	padctl_writel(padctl, reg, USB2_VBUS_ID(vbus_id_index));
	/*
	if (port->mode == USB_DR_MODE_OTG
		|| port->mode == USB_DR_MODE_PERIPHERAL) {
		reg = padctl_readl(padctl, USB2_VBUS_ID(vbus_id_index));
		reg &= ~VBUS_OVERRIDE;
		reg &= ~ID_OVERRIDE(~0);
		reg |= ID_OVERRIDE_FLOATING;
		padctl_writel(padctl, reg, USB2_VBUS_ID(vbus_id_index));
	}
	*/

	if (!padctl->is_disable_regulator) {
		if (port->supply && port->mode == USB_DR_MODE_HOST) {
			err = regulator_enable(port->supply);
			if (err) {
				dev_err(dev,
					"failed to enable port %u VBUS: %d\n",
					index, err);
				return err;
			}
		}
	}

	return 0;
}

But didn’t work. Unfortunately, gives same warning.

Then this is related to hardware.

I think hardware is correct because we tested hardware with Xavier Industrial.

Xavier Industrial - “lsusb” results when plugged usb3.0 device ;

@tegra-ubuntu:~$ lsusb
Bus 002 Device 003: ID 2109:0715 VIA Labs, Inc. Longline Micro Portable SSD
Bus 002 Device 002: ID 0451:9261 Texas Instruments, Inc. TUSB9261 USB3.0 to SATA Bridge
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

The USB driver on rel-35 is same for both Xavier and Orin. So the device tree setting should be same as well.

And the most reliable method to tell why usb3 is not enabled is by using the USB bus trace.

If you have such tool, then dumping out the trace might help debug.

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