UEFI XHCI ASSERTION on new Carrier Bringup

I’m bringing up a newly designed carrier. I have a non-Nvidia carrier as a reference, and my flash configuration will boot on that carrier (UART only).
When I move the module over to the new board, I get this assertion:

I/TC: Primary CPU switching to normal world boot
ÿá
Jetson UEFI firmware (version 36.4.0-gcid-37537400 built on 2024-09-13T04:02:39+00:00)
ÿäI/TC: Reserved shared memory is disabled
I/TC: Dynamic shared memory is enabled
I/TC: Normal World virtualization support is disabled
I/TC: Asynchronous notifications are disabled
I/TC: WARNING: Test UEFI variable auth key is being used !
I/TC: WARNING: UEFI variable protection is not fully enabled !
[ 5.795457] Camera-FW on t234-rce-safe started
TCU early console enabled.
[ 5.842695] Camera-FW on t234-rce-safe ready SHA1=e2238c99 (crt 0.907 ms, total boot 48.195 ms)

ASSERT [XhciDxe] /out/nvidia/bootloader/uefi/Jetson_RELEASE/edk2/MdeModulePkg/Bus/Pci/XhciDxe/Xhci.c(2084): !((((BOOLEAN)(((XhcReadOpReg ((Xhc), (0x0004))) & ((0x00000800))) == ((0x00000800))))))
Resetting the system in 5 seconds.
ÿäÿâShutdown state requested 1
Rebooting system …

ChatGPT says:

This error appears to be related to XHCI (eXtensible Host Controller Interface) in UEFI firmware on an NVIDIA Jetson device. The assertion failure in Xhci.c at line 2084 suggests that a condition wasn’t met during XHCI (USB 3.0 host controller) initialization.

Possible Causes:

  1. USB Controller Issue
  • The error indicates that XhcReadOpReg(Xhc, 0x0004) & 0x00000800 evaluates to true, which means the Host Controller Run/Stop (HCRST) bit is set when it shouldn’t be.
  • This could mean the XHCI controller is in a halted or reset state.
    *=========================================================================
    I have removed the Type C configuration as instructed. I also have an un-tested PCIe to USB controller on-board.

I would like to look at the UEFI code, but the Intel code doesn’t match and I cannot seem to find the Nvidia version of xhci.c. Could someone point me to it?

Does anyone have any debugging suggestions to help me narrow down this error?

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
https://docs.nvidia.com/jetson/archives/r36.3/DeveloperGuide/HR/JetsonModuleAdaptationAndBringUp/JetsonAgxOrinSeries.html?highlight=universal%20serial%20bus#jetson-agx-orin-platform-adaptation-and-bring-up
(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!

I’ve been all over those documents for the last 3 weeks. As far as I know, I have done all the configuration recommended.

Hi:

  1. What Jetpack version you are using?
  2. What Jetson Device you are using? AGX Orin 64G?
  3. What’s your flashing command?

Hi don.harrison1,

What’t the difference between these 2 boards?

Have you tried to reflash the board when you hit the assertion issue?
Please share the full flash log and serial console log for further check.

Answers to everyone’s questions:
Version is R36.4.0.
Orin AGX 32GB

The known good 3rd party carrier:

  • ODMDATA=“gbe-uphy-config-0,hsstp-lane-map-3,hsio-uphy-config-16,nvhs-uphy-config-0”;
  • Two USB-C ports
  • Stand alone USB 3.0 switch on 3rd USB 3.2 port supports 2 external USBs
  • Intel i210 on a x1 PCIe, additional Ethernet on RGMII port.
  • M.2 Key M memory cards on a x4 PCIe
  • Mini PCIe on a x1 PCIe
  • M.2 Key E without PCIe
  • HDMI
    UART, Console and kernel_tegra234-p3737-0000+p3701-0004-nv.dts attached.
    Thanks for your help.

Edit: I just looked at that dts file and I see the Type C entries that I thought I expunged. Looking into that.

FlashConsoleOutput.txt (101.2 KB)
kernel_tegra234-p3737-0000+p3701-0004-nv.dts.txt (322.4 KB)
UART Output.txt (106.6 KB)

Your flash log looks good to me.

It seems the issue caused from your custom design in USB on your board.
UEFI is DTB-driven so that please refer to Jetson AGX Orin Platform Adaptation and Bring-Up — NVIDIA Jetson Linux Developer Guide 1 documentation to port USB for your use case.

I have it booting now. I had to learn the lesson about the difference between tegra234-p3737-0000+p3701-0004-nv.dts and tegra234-p3737-0000+p3701-0000-nv.dts the hard way.

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