[DGX Spark] XHCI Controller "HC Died" crashes with RealSense D435i streaming 30fps (depth, RGB)

Hi everyone,

I’m running into an stability issue with the USB subsystem on my DGX Spark and wanted to see if anyone else has encountered this or if it’s a known limitation of the current Hardware or anything from FW/Driver. To rule out cable issues I am able to stream, toggling on/off many time without issue on another Ubunut linux laptop.

The Setup:

  • Hardware: NVIDIA DGX Spark

  • Device: Intel RealSense D435i

  • Connection: Tested both Directly to the port and via a Powered StarTech Industrial Hub (Wall-powered).

  • Workload:

    • Standard RGB stream (640x480 @ 30fps) using the Native V4L2 driver (I did try RUSB driver also and it failed the same way) whenever turning on both RGB + depth
    • Also crashed if toggling on/off with only RGB only from realsense-viewer
[  429.539999] xhci-hcd NVDA8000:02: xHCI host not responding to stop endpoint command
[  429.602116] xhci-hcd NVDA8000:02: Host halt failed, -110
[  429.602119] xhci-hcd NVDA8000:02: xHCI host controller not responding, assume dead
[  429.603098] xhci-hcd NVDA8000:02: HC died; cleaning up

bug_report_dgx_spark.tar.gz (37.5 KB)

Thank you for the logs and the bug report. We will look into this and get back to you

I am having a similar issue with one of my DGX sparks. I can SSH and SFTP to the box. RDC will not connect. Nor can I get the Gnome Desktop to boot There are text errors that are displaying through the KVM display. My other DGX works fine through both RDC and the KVM.

[ xhci_endpoint_init rsv 0x801 ]

(9 entries of this error)

usb 1:1:device descriptor read/64, error -71

(2 entries of this error)

How do I recover from this?

Having similar problem with usb HDMI capture card…
Whenever I tried to get the output from it, the card will failed and be disconnected.

/: Bus 002.Port 001: Dev 001, Class=root_hub, Driver=xhci-hcd/1p, 20000M/x2
|__ Port 001: Dev 002, If 0, Class=Video, Driver=uvcvideo, 5000M
|__ Port 001: Dev 002, If 1, Class=Video, Driver=uvcvideo, 5000M
|__ Port 001: Dev 002, If 2, Class=Audio, Driver=snd-usb-audio, 5000M
|__ Port 001: Dev 002, If 3, Class=Audio, Driver=snd-usb-audio, 5000M

Bus 002 Device 002: ID 0bda:0102 Realtek Semiconductor Corp. SAV2503

[ 61.924954] uvcvideo 6-1:1.1: Failed to query (GET_MIN) UVC probe control : -110 (exp. 26).
[ 67.043780] xhci-hcd NVDA8000:02: xHCI host not responding to stop endpoint command
[ 67.105524] xhci-hcd NVDA8000:02: Host halt failed, -110
[ 67.105528] xhci-hcd NVDA8000:02: xHCI host controller not responding, assume dead
[ 67.106490] xhci-hcd NVDA8000:02: HC died; cleaning up

Just a update..

My capture card is a USB 3 capture card which supports up to 4k 60fps/ FHD 240fps

trying to access the output data will cause the problem if it is connected as USB 3 device

If I connected it with an usb 2 cable, it will work but I think the bandwidth can only do mjpeg 1920x1080@60fps or lower (same ouput setting will cause xHCI controller crash for USB 3)

@kenny8379 does your capture card has a external power option? The USB-C port on the Spark might not have enough power to driver your card at 4K.

The first error message uvcvideo 6-1:1.1: Failed to query (GET_MIN) UVC probe control : -110 (exp. 26) is the clue. Your video capture device did not answer to a driver query and many times that’s caused by insufficient power.

My capture card doesn’t have external power option, I’ve tried to use another hub which has PD input but have same problem (I will try it again today after work to make sure).
but even when I try 640x480 when connecting it with usb3 it will still crash…

–Update:
usb hub with external power supply will still have the problem

Just an update from engineering. This bug has been identified and will be fixed in a future update, probably later in the year

Any updates on this subject? I was investigating it myself with Stereolabs ZED 2i and ZED Mini cameras.

DGX Spark “HC died” with UVC cameras: ep0 control transfers AFTER stream-start wedge the MT8901

We root-caused the HC died crash (same signature as this thread). The trigger is an ep0 control transfer issued after the video stream has started. A capture pipeline that issues no ep0 traffic once streaming runs indeterminately (tested ~30min stream from the DGX Spark to my Host PC); an application that sends a UVC control (e.g. an extension-unit / ISP control: exposure, gain, register access) on ep0 after STREAMON wedges the controller. Confirmed with in-flight usbmon + xhci-hcd tracepoints, camera-agnostic.

Environment:

DGX Spark, DGX OS 7.5 / Ubuntu 24.04.4 (aarch64),

kernel 6.17.0-1021-nvidia.

Host = NVIDIA/MediaTek MT8901 (NVDA8000/PNP0D15, xhci-plat-hcd,

quirks 0x0008000000000010 = XHCI_NVIDIA_MT8901_HOST|SPURIOUS_SUCCESS).

Case A — works: gstreamer, NO ep0 after stream-start (ran 37 min clean)

gst-launch-1.0 v4l2src ! video/x-raw,YUY2,2560x720,30/1 ! jpegenc ! ... — pure UVC capture, no controls.

usbmon ep0 timeline (bus 4): UVC PROBE/COMMIT, then zero ep0 transfers until teardown:

21 01 0100 0001  SET_CUR PROBE  ⇄  a1 81/82/83 GET_CUR/MIN/MAX   (probe handshake)
21 01 0200 0001  SET_CUR COMMIT
   ── 25 s of PURE bulk-IN, ZERO ep0 control transfers ──

Recorded result (25 s window):

usbmon bulk-IN:  83327 × "C Bi:4:002:1 0 32768"   (status 0, full payload)
                     0 × ESHUTDOWN(-108), 0 × stall(-32), 0 × proto(-71)
xhci tracepoints: ring_ep_doorbell 84122 ≈ handle_transfer 84103   (events posted 1:1)
HC died: 0

Case B — wedges: one ep0 control AFTER the stream commit

The identical ep0 control completes fine before the commit, then gets no completion event after it:

# BEFORE commit — completes in ~130 us:
S Ci:4:002:0 s a1 85 0200 0400 0002 2 <
C Ci:4:002:0 0 2 = 8001                       # status 0, 2 bytes returned

# AFTER commit (stream running) — same request, NO completion event:
xhci_urb_enqueue       ep0  length 0/2
xhci_queue_trb         Setup / Data / Status
xhci_ring_ep_doorbell  ep0in
   ── 5.117 s: NO xhci_handle_transfer, NO xhci_handle_event for this TD ──
xhci_urb_dequeue       (5 s kernel timeout, -110)
xhci_queue_trb         Stop Ring Command       ── also gets NO completion ──
Host halt failed, -110
HC died; cleaning up                            ── takes down every device on the controller

The interrupt line is healthy throughout (hundreds of xhci_handle_transfer delivered for other traffic, no LOST EVENTS) — this is not a lost IRQ. After a stream-state transition the MT8901 simply stops posting completion events for the endpoint. (Same defect also seen as bulk-IN going silent on a 2nd stream of the same boot.)

Notes

  • Not bandwidth/power: every mode works as the first stream incl. the highest-bandwidth ones; even 640×480 over USB3 crashes for others here; a powered/PD hub does not fix it (this thread + our bench).
  • Can’t be recovered once wedged: a Stop-EP timeout falling through to a command-ring abort also times out -110 — the controller is hung below the command-ring level. Only an electrical port reset (USBDEVFS_RESET/libusb_reset_device) re-inits the device. Host-side can prevent (reset before each stream, or force USB2, whose ep0 path does not wedge) but not repair.
  • There is a second way to trigger the problem, open the stream twice in a row (open>close>open but a libusb_reset_device() (open>close>reset>open) made it so that i can restart the streaming without EP0 after closing the first stream.

Ask

Is there a controller/firmware fix in progress for the MT8901 completion engine going silent across a stream-state transition (the “ep0 after STREAMON” case is the easiest repro)? And once wedged below the command-ring level, is there any command-ring-free recovery the driver could do short of a reboot? Full captures available on request.

This issue should be fixed with our recent July update. Please update and try it out

@aniculescu Can you please be specific about which “recent July update”? My capture card still killed it, and I just finished installing the 7.5.0-2 OS release (full OS reinstall), and then sudo apt update && sudo apt full-upgrade -y.

@aniculescu Can you please be specific about which “recent July update”? My capture card still killed it, and I just finished installing the 7.5.0-2 OS release (full OS reinstall), and then sudo apt update && sudo apt full-upgrade -y.

Please tell me if you have an OEM GB10 unit or an FE Spark. Then make sure you are fully updated through the DGX Dashboard. Once that is done, please reproduce your issue and capture and share an nvidia-bug-report with me