
I'm working on enabling the VIA805 XCHI controller found on the new Raspberry Pi 4. The controller sits behind a PCIe bus, which I've already implemented[1] and will submit once the XCHI issues are resolved, as it's worthless otherwise.
The XHCI initialization gets stuck after issuing the fist 'enable slot' command. I've been reviewing the whole init process and comparing it to Linux's for days without finding anything fishy. DMA constraints, which are important on the RPi are mantained, and on top of that, I can confirm DMA trough PCIe works fine as I see two 'port status change' events available in the ring before completly stalling. Also note that, unsurprisingly, the CRR bit in the CRCR register (which marks the running state of the Command Ring state machine) is never set after ringing the relevant doorbell.
This is probably caused by the required structure setup by U-Boot is viewed as buggy by the xHCI controller, hence there is no response to the first "enable slot" command.
Could you please compare all the data structures, with the one set up by the Linux kernel?
BTW: does Linux kernel xHCI driver work on this RPI 4 board?
Yes, it uses the standard xhci-hcd controller driver, it's a fairly vanilla VIA controller.