Thanks for posting the update!
A bit of technical background of what has happened: the Pi4 has VL805 USB controller chip onboard. Those require their own firmware that also went through a few changes over the years (See listed vl805-* files in the EEPROM repository).
After the Linux kernel is started, the PCI bus is reset and the USB chip forgets its firmware data. It needs to be reloaded. Either from /sd/vl805.bin on the SD card, or for newer Pi 4 models, right from the EEPROM persisted on the Pi itself. The Pi4 has 512Kb space for storing such data directly on its hardware. The data stored in the EEPROM also has a file system like structure. I have tools written to inspect and modify that data and a listing of a Pi4 EEPROM shows the VL805 files:
$ pi-eeprom-ls pieeprom.bin
eeprom version: 224877da 224877da90f82a72dbcc9db10bcf059259f54680, 2026-05-17 (pi4)
-----------------------------------
<ChunkBoot : <bootcode> 73104 @ 0x00000000 / 0 all>
<ChunkFileLZ4: bootmain 212138 @ 0x00011e00 / 73216 all>
[. cut for brevity ..]
<ChunkFileCK : vl805hub.bin 7012 @ 0x0005ed60 / 388448 all>
<ChunkFileCK : vl805mcu.bin 60435 @ 0x000608e0 / 395488 all>
<ChunkFileLZ4: font.bin 7406 @ 0x0006f510 / 455952 all>
The files vl805hub.bin and vl805mcu.bin are relevant for the USB chip. These files are compressed. This is necessary as they otherwise wouldn’t even fit into 512Kb. For most of the Pi4’s lifetime, the compression format was called ‘CK’. Hristo Venev reverse engineered that format back in 2020. At some point last year support for the widely known LZ4 compression format was added. Now almost all files within the EEPROM are compressed using LZ4. Except those two vl805 files. They still use ‘CK’ compression.
Unfortunately another change was made to the firmware code in start4.elf. It runs alongside the normal ARM CPUs on the so called VPU: It lost the ability to decompress the ‘CK’ format. When the kernel boots, after a PCI reset, the following kernel code triggers the VPU to reload the VL805’s code. As it no longer knows how to decompress the data it now runs into a timeout. Here’s how that looks in the debug output:
[ 0.942527] xhci_hcd 0000:01:00.0: xHCI Host Controller
[ 0.942539] xhci_hcd 0000:01:00.0: new USB bus registered, assigned bus number 1
[ 17.834631] xhci_hcd 0000:01:00.0: can't setup: -110
[ 17.834662] xhci_hcd 0000:01:00.0: USB bus 1 deregistered
[ 17.834674] xhci_hcd 0000:01:00.0: init 0000:01:00.0 fail, -110
[ 17.834694] xhci_hcd 0000:01:00.0: probe with driver xhci_hcd failed with error -110
After that USB was completely unusable. Connecting devices did nothing.
Debugging this wasn’t easy as it wasn’t really obvious why it wasn’t reproducible on earlier Pi4 models. Those loaded the data just fine. I’m still not 100% why, because the Pi4’s VPU processor cannot access the SD card directly. If someone knows, please let me now.
I discovered this seemingly unrelated bug report that also noted disabled USB. It turns this is the issue I’ve been seeing and it’s now fixed in this firmware release. The code in start4.elf can now decode ‘CK’ data again and the kernel can successfully trigger the firmware into loading and decompressing the VL805 data from the embedded EEPROM. USB now works again.
This is fixed in the latest testing release and a pending update to stable will also include this fix.