Hello - Looking at the FreeBSD code, their xhci_pci_port_route function is called on activation and not on attach.
OpenBSD calles it in xhci_pci_attach and xhci_pci_activate. If I remove it from attach, all my usb devices attach and no longer lock the machine. ugen1 at uhub4 port 2 "Apple Inc. iPhone" rev 2.00/7.01 addr 3 FreeBSD sets the port route function to use if intel in attach but does not call it: https://github.com/freebsd/freebsd/blob/5badcaaa0f325d543c4a79c30c6c91b0e88163fd/sys/dev/usb/controller/xhci_pci.c#L228 FreeBSD calls it in activate: https://github.com/freebsd/freebsd/blob/0f2211c30ded7871b441bfaa1647843f1b4fd0c2/sys/dev/usb/controller/xhci.c#L485 OpenBSD might be missing: https://github.com/freebsd/freebsd/blob/0f2211c30ded7871b441bfaa1647843f1b4fd0c2/sys/dev/usb/controller/xhci.c#L1439-L1445 Index: pci/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 --- pci/xhci_pci.c 2 Nov 2015 14:53:10 -0000 1.7 +++ pci/xhci_pci.c 6 Feb 2016 16:23:06 -0000 @@ -192,9 +192,6 @@ xhci_pci_attach(struct device *parent, s goto disestablish_ret; } - if (PCI_VENDOR(psc->sc_id) == PCI_VENDOR_INTEL) - xhci_pci_port_route(psc); - /* Attach usb device. */ config_found(self, &psc->sc.sc_bus, usbctlprint);