Re: IBM Power S822LC: pci 0021:0d:00.0: xHCI HW did not halt within 32000 usec status = 0x0
From: Michal Pecio
Date: Tue Oct 06 2026 - 17:51:01 EST
On Tue, 12 May 2026 17:32:09 +0200, Paul Menzel wrote:
> As a further data point, adding `ppc_pci_reset_phbs` to the command line
> also gets xhci_hcd to initialize the TI xHCI host controller:
>
> $ lspci -nn -s 0021:0d:00.0
> 0021:0d:00.0 USB controller [0c03]: Texas Instruments TUSB73x0
> SuperSpeed USB 3.0 xHCI Host Controller [104c:8241] (rev 02)
>
>
> [ 14.050249] Issue PHB reset ...
> […]
> [ 19.339822] ehci_hcd: block sizes: qh 144 qtd 96 itd 192 sitd 96
> [ 19.339919] ohci_hcd: block sizes: ed 112 td 96
> [ 19.340538] xhci_hcd 0021:0d:00.0: xHCI Host Controller
Hi Paul,
Are you still interested in this issue, or happy with your workaround?
Maybe both?
I have some updates:
We learned that the kernel does dodgy things with the FW handoff
protocol, particularly with TI chips. This may possibly matter if
FW is involved. I could supply patches to test this hypothesis.
A suspiciously similar case has been reported here:
https://lore.kernel.org/linux-usb/b43b9d21-4134-4e4c-89d8-f867207b125e@xxxxxxxxxxxxxxx/T/
There is a new workaround: PCI device reset before kexec. Weird.
> No log `xHCI HW did not halt within 32000 usec status = 0x0` (or 0x10
> with the other patch). In `arch/powerpc/platforms/powernv/pci-ioda.c`,
> reading the comment in `pnv_pci_init_ioda_phb()` suggests, that PHB
> should be reset also in the kexec case:
>
> /*
> * If we're running in kdump kernel, the previous kernel never
> * shutdown PCI devices correctly. We already got IODA table
> * cleaned out. So we have to issue PHB reset to stop all PCI
> * transactions from previous kernel. The ppc_pci_reset_phbs
> * kernel parameter will force this reset too. Additionally,
> * if the IODA reset above failed then use a bigger hammer.
> * This can happen if we get a PHB fatal error in very early
> * boot.
> */
> if (is_kdump_kernel() || pci_reset_phbs || rc) {
> pr_info(" Issue PHB reset ...\n");
> pnv_eeh_phb_reset(hose, EEH_RESET_FUNDAMENTAL);
> pnv_eeh_phb_reset(hose, EEH_RESET_DEACTIVATE);
> }
>
> At least, I’d assume that kdump and kexec are similar, that both do not
> shut down PCI devices? (Commit 361f2a2a1536 (powrpc/powernv: Reset PHB
> in kdump kernel) from 2024 adds (some) the code above.)
Apparently, we try to shut down PCI devices on kexec, unless loading a
crash dump kernel on panic. So as I wrote in the new thread, we already
call xhci_halt() before kexec, the xHC should be halted, and for new
kernel xhci_halt() should be almost a no-op with guaranteed success.
It seems that we are failing to actually halt it, or something (FW?)
touches the chip during kexec, or something else is quite weird.
Regards,
Michal