Discussion:
[diff] xhci intel port route freeze
David Hill
2016-02-06 16:32:51 UTC
Permalink
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);
David Hill
2016-02-06 16:48:30 UTC
Permalink
Ugh, not enough testing. Breaks again on resume. Ignore this diff.
Too excited about being able to charge my phone with my laptop :)

- David

Loading...