Jetson AGX Orin reload xhci-tegra.ko failed. USB3.0 cannot work

After the system is started, the xhci-tegra.ko driver can be successfully loaded manually for the first time. However, after uninstalling and reloading it again, an error occurs:

[Fri Jul 18 11:27:48 2025] tegra-xusb 3610000.usb: XHCI Controller not ready. Falcon state: 0xffffffff

[Fri Jul 18 11:27:48 2025] tegra-xusb 3610000.usb: failed to load firmware: -5

[Fri Jul 18 11:27:48 2025] tegra-xusb: probe of 3610000.usb failed with error -5

Why can it be loaded successfully for the first time but report an error when reloaded for the second time? What is the reason for this error and how can it be resolved? Thank you.

Specific execution process:

sudo insmod xhci-tegra.ko
sudo rmmod  xhci_tegra
sudo insmode  xhci-tegra.ko
[Fri Jul 18 11:27:48 2025] tegra-xusb 3610000.usb: XHCI Controller not ready. Falcon state: 0xffffffff
[Fri Jul 18 11:27:48 2025] tegra-xusb 3610000.usb: failed to load firmware: -5
[Fri Jul 18 11:27:48 2025] tegra-xusb: probe of 3610000.usb failed with error -5

The environment used is:

*** Please note that this reply is generated by LLM automatically ***

The error you’re encountering is likely due to the firmware not being properly unloaded when the xhci-tegra.ko driver is removed, causing issues when trying to reload it. Here’s a breakdown of the possible reasons and a step-by-step solution:

Reasons for the error:

  1. Firmware not properly unloaded: When the xhci-tegra.ko driver is removed, the firmware might not be properly unloaded, causing conflicts when trying to reload the driver.
  2. Falcon state not reset: The Falcon state (0xffffffff) indicates that the controller is not in a ready state, which might be due to the firmware not being properly unloaded or reset.
  3. Error -5: The error code -5 typically indicates a “Input/Output Error” or “I/O Error”, which could be related to the firmware loading issue.

Comparison with other versions:

The issue you’re facing is specific to the xhci-tegra.ko driver on the AGX Orin platform. The phy tegra xusb driver, which is used in other versions (e.g., v6.1, v6.2, and v6.3), might not have the same issue.

Solution:

To resolve the issue, try the following steps:

  1. Unload the firmware: Before removing the xhci-tegra.ko driver, try unloading the firmware using the following command:
echo 1 > /sys/bus/platform/devices/3610000.usb/unload_firmware

This will ensure that the firmware is properly unloaded.
2. Remove the driver: Remove the xhci-tegra.ko driver using the following command:

rmmod xhci-tegra
  1. Reload the driver: Reload the xhci-tegra.ko driver using the following command:
insmod xhci-tegra.ko

If the issue persists, try reloading the firmware manually using the following command:

echo 1 > /sys/bus/platform/devices/3610000.usb/load_firmware
  1. Verify the Falcon state: After reloading the driver, verify that the Falcon state is reset by checking the kernel logs or using the following command:
cat /sys/bus/platform/devices/3610000.usb/falcon_state

The Falcon state should be reset to a ready state (e.g., 0x00000000).

By following these steps, you should be able to resolve the issue and successfully reload the xhci-tegra.ko driver.

*** Please give the thumbs up if you get answers you like. Or provide feedback to help us improve the answer. ***

1 Like

drivers\usb\host\xhci-tegra.c has no MODULE_FIRMWARE

static const struct tegra_xusb_soc_ops tegra234_ops = {
	.mbox_reg_readl = &bar2_readl,
	.mbox_reg_writel = &bar2_writel,
	.csb_reg_readl = &bar2_csb_readl,
	.csb_reg_writel = &bar2_csb_writel,
};

static const struct tegra_xusb_soc tegra234_soc = {
	.supply_names = tegra194_supply_names,
	.num_supplies = ARRAY_SIZE(tegra194_supply_names),
	.phy_types = tegra194_phy_types,
	.num_types = ARRAY_SIZE(tegra194_phy_types),
	.context = &tegra186_xusb_context,
	.ports = {
		.usb3 = { .offset = 0, .count = 4, },
		.usb2 = { .offset = 4, .count = 4, },
	},
	.scale_ss_clock = false,
	.has_ipfs = false,
	.otg_reset_sspi = false,
	.ops = &tegra234_ops,
	.mbox = {
		.cmd = XUSB_BAR2_ARU_MBOX_CMD,
		.data_in = XUSB_BAR2_ARU_MBOX_DATA_IN,
		.data_out = XUSB_BAR2_ARU_MBOX_DATA_OUT,
		.owner = XUSB_BAR2_ARU_MBOX_OWNER,
		.smi_intr = XUSB_BAR2_ARU_SMI_INTR,
	},
	.lpm_support = true,
	.has_bar2 = true,
};

has no file /sys/bus/platform/devices/3610000.usb/unload_firmware

corenetic@nvidia-desktop:~$ ls -la /sys/bus/platform/devices/3610000.usb/unload_firmware
ls: cannot access '/sys/bus/platform/devices/3610000.usb/unload_firmware': No such file or directory

corenetic@nvidia-desktop:~$ echo 1 |sudo tee /sys/bus/platform/devices/3610000.usb/unload_firmware
[sudo] password for corenetic:
tee: /sys/bus/platform/devices/3610000.usb/unload_firmware: Permission denied

What is your purpose to reload this driver there?

If the external USB device is accidentally downgraded or malfunctioning, you can perform a complete initialization by reloading the controller.

Hi,

Discussed with our usb team, we don’t actually support to build out xhci_tegra as oot kernel on rel-36.

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