aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/usb
diff options
context:
space:
mode:
authorAlan Stern <stern@rowland.harvard.edu>2012-04-17 15:23:25 -0400
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2012-04-18 16:55:40 -0400
commit6feff1b92bedab133c5835e510d11f62e843b257 (patch)
tree4bd441f074ec30afb83e9ad7aee03df58d4a8cd6 /drivers/usb
parent56fafb94f64efaca625206a3876432b96558dcb0 (diff)
EHCI: don't try to clear the IAAD bit
This patch (as1541) corrects a small mistake in ehci-hcd. The IAAD (Interrupt on Async Advance Doorbell) bit in the USBCMD register is designed, as its name says, to act as a "doorbell". That is, the driver activates the bit by setting it to 1, and the hardware deactivates it later by setting it back to 0. The driver cannot clear the bit by writing a 0 to it; such writes are simply ignored. Therefore there is no reason for ehci-hcd to try to clear the bit. The patch removes the two instances where such attempts occur. Signed-off-by: Alan Stern <stern@rowland.harvard.edu> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/usb')
-rw-r--r--drivers/usb/host/ehci-hcd.c8
1 files changed, 1 insertions, 7 deletions
diff --git a/drivers/usb/host/ehci-hcd.c b/drivers/usb/host/ehci-hcd.c
index 057cdda7a489..343f40c23b5f 100644
--- a/drivers/usb/host/ehci-hcd.c
+++ b/drivers/usb/host/ehci-hcd.c
@@ -415,9 +415,6 @@ static void ehci_iaa_watchdog(unsigned long param)
415 * CMD_IAAD when it sets STS_IAA.) 415 * CMD_IAAD when it sets STS_IAA.)
416 */ 416 */
417 cmd = ehci_readl(ehci, &ehci->regs->command); 417 cmd = ehci_readl(ehci, &ehci->regs->command);
418 if (cmd & CMD_IAAD)
419 ehci_writel(ehci, cmd & ~CMD_IAAD,
420 &ehci->regs->command);
421 418
422 /* If IAA is set here it either legitimately triggered 419 /* If IAA is set here it either legitimately triggered
423 * before we cleared IAAD above (but _way_ late, so we'll 420 * before we cleared IAAD above (but _way_ late, so we'll
@@ -887,11 +884,8 @@ static irqreturn_t ehci_irq (struct usb_hcd *hcd)
887 /* complete the unlinking of some qh [4.15.2.3] */ 884 /* complete the unlinking of some qh [4.15.2.3] */
888 if (status & STS_IAA) { 885 if (status & STS_IAA) {
889 /* guard against (alleged) silicon errata */ 886 /* guard against (alleged) silicon errata */
890 if (cmd & CMD_IAAD) { 887 if (cmd & CMD_IAAD)
891 ehci_writel(ehci, cmd & ~CMD_IAAD,
892 &ehci->regs->command);
893 ehci_dbg(ehci, "IAA with IAAD still set?\n"); 888 ehci_dbg(ehci, "IAA with IAAD still set?\n");
894 }
895 if (ehci->reclaim) { 889 if (ehci->reclaim) {
896 COUNT(ehci->stats.reclaim); 890 COUNT(ehci->stats.reclaim);
897 end_unlink_async(ehci); 891 end_unlink_async(ehci);