PERFORCE change 184749 for review
Hans Petter Selasky
hselasky at FreeBSD.org
Thu Oct 14 22:42:15 UTC 2010
http://p4web.freebsd.org/@@184749?ac=10
Change 184749 by hselasky at hselasky_laptop001 on 2010/10/14 22:41:28
EHCI: Wait for IAA IRQ and not only the clearing
of the IAAD bit in the CMD register, before
issuing a new IAAD command. Might fix some IRQ-hang
issues.
Affected files ...
.. //depot/projects/usb/src/sys/dev/usb/controller/ehci.c#62 edit
.. //depot/projects/usb/src/sys/dev/usb/controller/ehci.h#20 edit
Differences ...
==== //depot/projects/usb/src/sys/dev/usb/controller/ehci.c#62 (text+ko) ====
@@ -1589,6 +1589,10 @@
usb_callout_reset(&sc->sc_tmo_pcd, hz,
(void *)&ehci_pcd_enable, sc);
}
+ /* if there was a doorbell, clear the doorbell busy flag */
+ if (status & EHCI_STS_IAA)
+ sc->sc_flags &= ~EHCI_SCFLG_IAADBUSY;
+
status &= ~(EHCI_STS_INT | EHCI_STS_ERRINT | EHCI_STS_PCD | EHCI_STS_IAA);
if (status != 0) {
@@ -2313,7 +2317,7 @@
* XXX Certain nVidia chipsets choke when using the IAAD
* feature too frequently.
*/
- if (sc->sc_flags & EHCI_SCFLG_IAADBUG)
+ if (sc->sc_flags & (EHCI_SCFLG_IAADBUG | EHCI_SCFLG_IAADBUSY))
return;
/* XXX Performance quirk: Some Host Controllers have a too low
@@ -2321,8 +2325,10 @@
* Controller after queueing the BULK transfer.
*/
temp = EOREAD4(sc, EHCI_USBCMD);
- if (!(temp & EHCI_CMD_IAAD))
+ if (!(temp & EHCI_CMD_IAAD)) {
EOWRITE4(sc, EHCI_USBCMD, temp | EHCI_CMD_IAAD);
+ sc->sc_flags |= EHCI_SCFLG_IAADBUSY;
+ }
}
struct usb_pipe_methods ehci_device_bulk_methods =
==== //depot/projects/usb/src/sys/dev/usb/controller/ehci.h#20 (text+ko) ====
@@ -347,6 +347,7 @@
#define EHCI_SCFLG_TT 0x0020 /* transaction translator present */
#define EHCI_SCFLG_LOSTINTRBUG 0x0040 /* workaround for VIA / ATI chipsets */
#define EHCI_SCFLG_IAADBUG 0x0080 /* workaround for nVidia chipsets */
+#define EHCI_SCFLG_IAADBUSY 0x0100 /* doorbell is busy */
uint8_t sc_offs; /* offset to operational registers */
uint8_t sc_doorbell_disable; /* set on doorbell failure */
More information about the p4-projects
mailing list