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>
This commit is contained in:
parent
56fafb94f6
commit
6feff1b92b
|
@ -415,9 +415,6 @@ static void ehci_iaa_watchdog(unsigned long param)
|
||||||
* CMD_IAAD when it sets STS_IAA.)
|
* CMD_IAAD when it sets STS_IAA.)
|
||||||
*/
|
*/
|
||||||
cmd = ehci_readl(ehci, &ehci->regs->command);
|
cmd = ehci_readl(ehci, &ehci->regs->command);
|
||||||
if (cmd & CMD_IAAD)
|
|
||||||
ehci_writel(ehci, cmd & ~CMD_IAAD,
|
|
||||||
&ehci->regs->command);
|
|
||||||
|
|
||||||
/* If IAA is set here it either legitimately triggered
|
/* If IAA is set here it either legitimately triggered
|
||||||
* before we cleared IAAD above (but _way_ late, so we'll
|
* before we cleared IAAD above (but _way_ late, so we'll
|
||||||
|
@ -887,11 +884,8 @@ static irqreturn_t ehci_irq (struct usb_hcd *hcd)
|
||||||
/* complete the unlinking of some qh [4.15.2.3] */
|
/* complete the unlinking of some qh [4.15.2.3] */
|
||||||
if (status & STS_IAA) {
|
if (status & STS_IAA) {
|
||||||
/* guard against (alleged) silicon errata */
|
/* guard against (alleged) silicon errata */
|
||||||
if (cmd & CMD_IAAD) {
|
if (cmd & CMD_IAAD)
|
||||||
ehci_writel(ehci, cmd & ~CMD_IAAD,
|
|
||||||
&ehci->regs->command);
|
|
||||||
ehci_dbg(ehci, "IAA with IAAD still set?\n");
|
ehci_dbg(ehci, "IAA with IAAD still set?\n");
|
||||||
}
|
|
||||||
if (ehci->reclaim) {
|
if (ehci->reclaim) {
|
||||||
COUNT(ehci->stats.reclaim);
|
COUNT(ehci->stats.reclaim);
|
||||||
end_unlink_async(ehci);
|
end_unlink_async(ehci);
|
||||||
|
|
Loading…
Reference in New Issue