svn commit: r261097 - stable/9/sys/dev/usb/controller
Hans Petter Selasky
hselasky at FreeBSD.org
Fri Jan 24 07:27:11 UTC 2014
Author: hselasky
Date: Fri Jan 24 07:27:11 2014
New Revision: 261097
URL: http://svnweb.freebsd.org/changeset/base/261097
Log:
MFC r260388, r260535 and r260536:
Fix XHCI interrupt logic for "Intel Lynx Point" found in MBP2013.
Modified:
stable/9/sys/dev/usb/controller/xhci.c
Directory Properties:
stable/9/sys/ (props changed)
stable/9/sys/dev/ (props changed)
Modified: stable/9/sys/dev/usb/controller/xhci.c
==============================================================================
--- stable/9/sys/dev/usb/controller/xhci.c Fri Jan 24 07:24:40 2014 (r261096)
+++ stable/9/sys/dev/usb/controller/xhci.c Fri Jan 24 07:27:11 2014 (r261097)
@@ -1544,23 +1544,26 @@ void
xhci_interrupt(struct xhci_softc *sc)
{
uint32_t status;
+ uint32_t temp;
USB_BUS_LOCK(&sc->sc_bus);
status = XREAD4(sc, oper, XHCI_USBSTS);
- if (status == 0)
- goto done;
- /* acknowledge interrupts */
+ /* acknowledge interrupts, if any */
+ if (status != 0) {
+ XWRITE4(sc, oper, XHCI_USBSTS, status);
+ DPRINTFN(16, "real interrupt (status=0x%08x)\n", status);
+ }
- XWRITE4(sc, oper, XHCI_USBSTS, status);
+ temp = XREAD4(sc, runt, XHCI_IMAN(0));
- DPRINTFN(16, "real interrupt (status=0x%08x)\n", status);
+ /* force clearing of pending interrupts */
+ if (temp & XHCI_IMAN_INTR_PEND)
+ XWRITE4(sc, runt, XHCI_IMAN(0), temp);
- if (status & XHCI_STS_EINT) {
- /* check for event(s) */
- xhci_interrupt_poll(sc);
- }
+ /* check for event(s) */
+ xhci_interrupt_poll(sc);
if (status & (XHCI_STS_PCD | XHCI_STS_HCH |
XHCI_STS_HSE | XHCI_STS_HCE)) {
@@ -1584,7 +1587,6 @@ xhci_interrupt(struct xhci_softc *sc)
__FUNCTION__);
}
}
-done:
USB_BUS_UNLOCK(&sc->sc_bus);
}
More information about the svn-src-stable-9
mailing list