diff options
Diffstat (limited to 'drivers/firewire/ohci.c')
-rw-r--r-- | drivers/firewire/ohci.c | 15 |
1 files changed, 12 insertions, 3 deletions
diff --git a/drivers/firewire/ohci.c b/drivers/firewire/ohci.c index 276324d741df..0031ec6e1f00 100644 --- a/drivers/firewire/ohci.c +++ b/drivers/firewire/ohci.c | |||
@@ -1790,8 +1790,12 @@ static irqreturn_t irq_handler(int irq, void *data) | |||
1790 | if (!event || !~event) | 1790 | if (!event || !~event) |
1791 | return IRQ_NONE; | 1791 | return IRQ_NONE; |
1792 | 1792 | ||
1793 | /* busReset must not be cleared yet, see OHCI 1.1 clause 7.2.3.2 */ | 1793 | /* |
1794 | reg_write(ohci, OHCI1394_IntEventClear, event & ~OHCI1394_busReset); | 1794 | * busReset and postedWriteErr must not be cleared yet |
1795 | * (OHCI 1.1 clauses 7.2.3.2 and 13.2.8.1) | ||
1796 | */ | ||
1797 | reg_write(ohci, OHCI1394_IntEventClear, | ||
1798 | event & ~(OHCI1394_busReset | OHCI1394_postedWriteErr)); | ||
1795 | log_irqs(event); | 1799 | log_irqs(event); |
1796 | 1800 | ||
1797 | if (event & OHCI1394_selfIDComplete) | 1801 | if (event & OHCI1394_selfIDComplete) |
@@ -1831,8 +1835,13 @@ static irqreturn_t irq_handler(int irq, void *data) | |||
1831 | fw_error("Register access failure - " | 1835 | fw_error("Register access failure - " |
1832 | "please notify linux1394-devel@lists.sf.net\n"); | 1836 | "please notify linux1394-devel@lists.sf.net\n"); |
1833 | 1837 | ||
1834 | if (unlikely(event & OHCI1394_postedWriteErr)) | 1838 | if (unlikely(event & OHCI1394_postedWriteErr)) { |
1839 | reg_read(ohci, OHCI1394_PostedWriteAddressHi); | ||
1840 | reg_read(ohci, OHCI1394_PostedWriteAddressLo); | ||
1841 | reg_write(ohci, OHCI1394_IntEventClear, | ||
1842 | OHCI1394_postedWriteErr); | ||
1835 | fw_error("PCI posted write error\n"); | 1843 | fw_error("PCI posted write error\n"); |
1844 | } | ||
1836 | 1845 | ||
1837 | if (unlikely(event & OHCI1394_cycleTooLong)) { | 1846 | if (unlikely(event & OHCI1394_cycleTooLong)) { |
1838 | if (printk_ratelimit()) | 1847 | if (printk_ratelimit()) |