David Hill
2016-02-06 16:32:51 UTC
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);
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);