aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/firewire
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/firewire')
-rw-r--r--drivers/firewire/ohci.c13
1 files changed, 8 insertions, 5 deletions
diff --git a/drivers/firewire/ohci.c b/drivers/firewire/ohci.c
index d6ba897b2197..bf5e11284421 100644
--- a/drivers/firewire/ohci.c
+++ b/drivers/firewire/ohci.c
@@ -1817,13 +1817,14 @@ static u64 ohci_get_bus_time(struct fw_card *card)
1817 c2 = reg_read(ohci, OHCI1394_IsochronousCycleTimer); 1817 c2 = reg_read(ohci, OHCI1394_IsochronousCycleTimer);
1818 } else { 1818 } else {
1819 /* 1819 /*
1820 * VIA controllers have two bugs when updating the iso cycle 1820 * Some controllers exhibit one or more of the following bugs
1821 * timer register: 1821 * when updating the iso cycle timer register:
1822 * 1) When the lowest six bits are wrapping around to zero, 1822 * - When the lowest six bits are wrapping around to zero,
1823 * a read that happens at the same time will return garbage 1823 * a read that happens at the same time will return garbage
1824 * in the lowest ten bits. 1824 * in the lowest ten bits.
1825 * 2) When the cycleOffset field wraps around to zero, the 1825 * - When the cycleOffset field wraps around to zero, the
1826 * cycleCount field is not incremented for about 60 ns. 1826 * cycleCount field is not incremented for about 60 ns.
1827 * - Occasionally, the entire register reads zero.
1827 * 1828 *
1828 * To catch these, we read the register three times and ensure 1829 * To catch these, we read the register three times and ensure
1829 * that the difference between each two consecutive reads is 1830 * that the difference between each two consecutive reads is
@@ -2542,7 +2543,9 @@ static int __devinit pci_probe(struct pci_dev *dev,
2542#endif 2543#endif
2543 ohci->bus_reset_packet_quirk = dev->vendor == PCI_VENDOR_ID_TI; 2544 ohci->bus_reset_packet_quirk = dev->vendor == PCI_VENDOR_ID_TI;
2544 2545
2545 ohci->iso_cycle_timer_quirk = dev->vendor == PCI_VENDOR_ID_VIA; 2546 ohci->iso_cycle_timer_quirk = dev->vendor == PCI_VENDOR_ID_AL ||
2547 dev->vendor == PCI_VENDOR_ID_NEC ||
2548 dev->vendor == PCI_VENDOR_ID_VIA;
2546 2549
2547 ar_context_init(&ohci->ar_request_ctx, ohci, 2550 ar_context_init(&ohci->ar_request_ctx, ohci,
2548 OHCI1394_AsReqRcvContextControlSet); 2551 OHCI1394_AsReqRcvContextControlSet);