aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/firewire/ohci.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/firewire/ohci.c')
-rw-r--r--drivers/firewire/ohci.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/drivers/firewire/ohci.c b/drivers/firewire/ohci.c
index 3372cd187c2..cfe5afe359c 100644
--- a/drivers/firewire/ohci.c
+++ b/drivers/firewire/ohci.c
@@ -1336,6 +1336,8 @@ static int at_context_queue_packet(struct context *ctx,
1336 * some controllers (like a JMicron JMB381 PCI-e) misbehave and wind 1336 * some controllers (like a JMicron JMB381 PCI-e) misbehave and wind
1337 * up stalling out. So we just bail out in software and try again 1337 * up stalling out. So we just bail out in software and try again
1338 * later, and everyone is happy. 1338 * later, and everyone is happy.
1339 * FIXME: Test of IntEvent.busReset may no longer be necessary since we
1340 * flush AT queues in bus_reset_tasklet.
1339 * FIXME: Document how the locking works. 1341 * FIXME: Document how the locking works.
1340 */ 1342 */
1341 if (ohci->generation != packet->generation || 1343 if (ohci->generation != packet->generation ||
@@ -1750,6 +1752,11 @@ static void bus_reset_tasklet(unsigned long data)
1750 1752
1751 spin_unlock_irqrestore(&ohci->lock, flags); 1753 spin_unlock_irqrestore(&ohci->lock, flags);
1752 1754
1755 /*
1756 * Per OHCI 1.2 draft, clause 7.2.3.3, hardware may leave unsent
1757 * packets in the AT queues and software needs to drain them.
1758 * Some OHCI 1.1 controllers (JMicron) apparently require this too.
1759 */
1753 at_context_flush(&ohci->at_request_ctx); 1760 at_context_flush(&ohci->at_request_ctx);
1754 at_context_flush(&ohci->at_response_ctx); 1761 at_context_flush(&ohci->at_response_ctx);
1755 1762