I finally got my hands on a DELL Optiplex 3020. The BIOS on this
machines uses the xHCI controller to handle the keyboard and mouse.
Turns out that I badly copy/pasted the ehci(4) code to take over the
HC from the BIOS. With the diff below I can now route all my ports
to xhci(4) and the machine no longer hang at boot.
ok?
Index: xhci_pci.c
===================================================================
RCS file: /cvs/src/sys/dev/pci/xhci_pci.c,v
retrieving revision 1.7
diff -u -p -r1.7 xhci_pci.c
--- xhci_pci.c 2 Nov 2015 14:53:10 -0000 1.7
+++ xhci_pci.c 31 May 2016 16:36:14 -0000
@@ -258,8 +258,9 @@ xhci_pci_takecontroller(struct xhci_pci_
eec = -1;
/* Synchronise with the BIOS if it owns the controller. */
- for (xecp = XHCI_HCC_XECP(cparams) << 2; xecp != 0;
- xecp = XHCI_XECP_NEXT(eec) << 2) {
+ for (xecp = XHCI_HCC_XECP(cparams) << 2;
+ xecp != 0 && XHCI_XECP_NEXT(eec);
+ xecp += XHCI_XECP_NEXT(eec) << 2) {
eec = XREAD4(&psc->sc, xecp);
if (XHCI_XECP_ID(eec) != XHCI_ID_USB_LEGACY)
continue;