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);
 

Reply via email to