aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'drivers')
-rw-r--r--drivers/firewire/core-transaction.c14
-rw-r--r--drivers/firewire/ohci.c168
2 files changed, 120 insertions, 62 deletions
diff --git a/drivers/firewire/core-transaction.c b/drivers/firewire/core-transaction.c
index e3925f67ec12..2a390726fa76 100644
--- a/drivers/firewire/core-transaction.c
+++ b/drivers/firewire/core-transaction.c
@@ -1104,6 +1104,17 @@ static void handle_registers(struct fw_card *card, struct fw_request *request,
1104 rcode = RCODE_TYPE_ERROR; 1104 rcode = RCODE_TYPE_ERROR;
1105 break; 1105 break;
1106 1106
1107 case CSR_BUS_TIME:
1108 if (tcode == TCODE_READ_QUADLET_REQUEST)
1109 *data = cpu_to_be32(card->driver->
1110 read_csr_reg(card, CSR_BUS_TIME));
1111 else if (tcode == TCODE_WRITE_QUADLET_REQUEST)
1112 card->driver->write_csr_reg(card, CSR_BUS_TIME,
1113 be32_to_cpu(*data));
1114 else
1115 rcode = RCODE_TYPE_ERROR;
1116 break;
1117
1107 case CSR_BROADCAST_CHANNEL: 1118 case CSR_BROADCAST_CHANNEL:
1108 if (tcode == TCODE_READ_QUADLET_REQUEST) 1119 if (tcode == TCODE_READ_QUADLET_REQUEST)
1109 *data = cpu_to_be32(card->broadcast_channel); 1120 *data = cpu_to_be32(card->broadcast_channel);
@@ -1132,9 +1143,6 @@ static void handle_registers(struct fw_card *card, struct fw_request *request,
1132 case CSR_BUSY_TIMEOUT: 1143 case CSR_BUSY_TIMEOUT:
1133 /* FIXME: Implement this. */ 1144 /* FIXME: Implement this. */
1134 1145
1135 case CSR_BUS_TIME:
1136 /* Useless without initialization by the bus manager. */
1137
1138 default: 1146 default:
1139 rcode = RCODE_ADDRESS_ERROR; 1147 rcode = RCODE_ADDRESS_ERROR;
1140 break; 1148 break;
diff --git a/drivers/firewire/ohci.c b/drivers/firewire/ohci.c
index 777811a736b2..3d4badb7c79b 100644
--- a/drivers/firewire/ohci.c
+++ b/drivers/firewire/ohci.c
@@ -170,6 +170,7 @@ struct fw_ohci {
170 int generation; 170 int generation;
171 int request_generation; /* for timestamping incoming requests */ 171 int request_generation; /* for timestamping incoming requests */
172 unsigned quirks; 172 unsigned quirks;
173 u32 bus_time;
173 174
174 /* 175 /*
175 * Spinlock for accessing fw_ohci data. Never call out of 176 * Spinlock for accessing fw_ohci data. Never call out of
@@ -292,7 +293,7 @@ static void log_irqs(u32 evt)
292 !(evt & OHCI1394_busReset)) 293 !(evt & OHCI1394_busReset))
293 return; 294 return;
294 295
295 fw_notify("IRQ %08x%s%s%s%s%s%s%s%s%s%s%s%s%s\n", evt, 296 fw_notify("IRQ %08x%s%s%s%s%s%s%s%s%s%s%s%s%s%s\n", evt,
296 evt & OHCI1394_selfIDComplete ? " selfID" : "", 297 evt & OHCI1394_selfIDComplete ? " selfID" : "",
297 evt & OHCI1394_RQPkt ? " AR_req" : "", 298 evt & OHCI1394_RQPkt ? " AR_req" : "",
298 evt & OHCI1394_RSPkt ? " AR_resp" : "", 299 evt & OHCI1394_RSPkt ? " AR_resp" : "",
@@ -302,6 +303,7 @@ static void log_irqs(u32 evt)
302 evt & OHCI1394_isochTx ? " IT" : "", 303 evt & OHCI1394_isochTx ? " IT" : "",
303 evt & OHCI1394_postedWriteErr ? " postedWriteErr" : "", 304 evt & OHCI1394_postedWriteErr ? " postedWriteErr" : "",
304 evt & OHCI1394_cycleTooLong ? " cycleTooLong" : "", 305 evt & OHCI1394_cycleTooLong ? " cycleTooLong" : "",
306 evt & OHCI1394_cycle64Seconds ? " cycle64Seconds" : "",
305 evt & OHCI1394_cycleInconsistent ? " cycleInconsistent" : "", 307 evt & OHCI1394_cycleInconsistent ? " cycleInconsistent" : "",
306 evt & OHCI1394_regAccessFail ? " regAccessFail" : "", 308 evt & OHCI1394_regAccessFail ? " regAccessFail" : "",
307 evt & OHCI1394_busReset ? " busReset" : "", 309 evt & OHCI1394_busReset ? " busReset" : "",
@@ -309,7 +311,8 @@ static void log_irqs(u32 evt)
309 OHCI1394_RSPkt | OHCI1394_reqTxComplete | 311 OHCI1394_RSPkt | OHCI1394_reqTxComplete |
310 OHCI1394_respTxComplete | OHCI1394_isochRx | 312 OHCI1394_respTxComplete | OHCI1394_isochRx |
311 OHCI1394_isochTx | OHCI1394_postedWriteErr | 313 OHCI1394_isochTx | OHCI1394_postedWriteErr |
312 OHCI1394_cycleTooLong | OHCI1394_cycleInconsistent | 314 OHCI1394_cycleTooLong | OHCI1394_cycle64Seconds |
315 OHCI1394_cycleInconsistent |
313 OHCI1394_regAccessFail | OHCI1394_busReset) 316 OHCI1394_regAccessFail | OHCI1394_busReset)
314 ? " ?" : ""); 317 ? " ?" : "");
315} 318}
@@ -1316,6 +1319,78 @@ static void at_context_transmit(struct context *ctx, struct fw_packet *packet)
1316 1319
1317} 1320}
1318 1321
1322static u32 cycle_timer_ticks(u32 cycle_timer)
1323{
1324 u32 ticks;
1325
1326 ticks = cycle_timer & 0xfff;
1327 ticks += 3072 * ((cycle_timer >> 12) & 0x1fff);
1328 ticks += (3072 * 8000) * (cycle_timer >> 25);
1329
1330 return ticks;
1331}
1332
1333/*
1334 * Some controllers exhibit one or more of the following bugs when updating the
1335 * iso cycle timer register:
1336 * - When the lowest six bits are wrapping around to zero, a read that happens
1337 * at the same time will return garbage in the lowest ten bits.
1338 * - When the cycleOffset field wraps around to zero, the cycleCount field is
1339 * not incremented for about 60 ns.
1340 * - Occasionally, the entire register reads zero.
1341 *
1342 * To catch these, we read the register three times and ensure that the
1343 * difference between each two consecutive reads is approximately the same, i.e.
1344 * less than twice the other. Furthermore, any negative difference indicates an
1345 * error. (A PCI read should take at least 20 ticks of the 24.576 MHz timer to
1346 * execute, so we have enough precision to compute the ratio of the differences.)
1347 */
1348static u32 get_cycle_time(struct fw_ohci *ohci)
1349{
1350 u32 c0, c1, c2;
1351 u32 t0, t1, t2;
1352 s32 diff01, diff12;
1353 int i;
1354
1355 c2 = reg_read(ohci, OHCI1394_IsochronousCycleTimer);
1356
1357 if (ohci->quirks & QUIRK_CYCLE_TIMER) {
1358 i = 0;
1359 c1 = c2;
1360 c2 = reg_read(ohci, OHCI1394_IsochronousCycleTimer);
1361 do {
1362 c0 = c1;
1363 c1 = c2;
1364 c2 = reg_read(ohci, OHCI1394_IsochronousCycleTimer);
1365 t0 = cycle_timer_ticks(c0);
1366 t1 = cycle_timer_ticks(c1);
1367 t2 = cycle_timer_ticks(c2);
1368 diff01 = t1 - t0;
1369 diff12 = t2 - t1;
1370 } while ((diff01 <= 0 || diff12 <= 0 ||
1371 diff01 / diff12 >= 2 || diff12 / diff01 >= 2)
1372 && i++ < 20);
1373 }
1374
1375 return c2;
1376}
1377
1378/*
1379 * This function has to be called at least every 64 seconds. The bus_time
1380 * field stores not only the upper 25 bits of the BUS_TIME register but also
1381 * the most significant bit of the cycle timer in bit 6 so that we can detect
1382 * changes in this bit.
1383 */
1384static u32 update_bus_time(struct fw_ohci *ohci)
1385{
1386 u32 cycle_time_seconds = get_cycle_time(ohci) >> 25;
1387
1388 if ((ohci->bus_time & 0x40) != (cycle_time_seconds & 0x40))
1389 ohci->bus_time += 0x40;
1390
1391 return ohci->bus_time | cycle_time_seconds;
1392}
1393
1319static void bus_reset_tasklet(unsigned long data) 1394static void bus_reset_tasklet(unsigned long data)
1320{ 1395{
1321 struct fw_ohci *ohci = (struct fw_ohci *)data; 1396 struct fw_ohci *ohci = (struct fw_ohci *)data;
@@ -1520,6 +1595,12 @@ static irqreturn_t irq_handler(int irq, void *data)
1520 fw_notify("isochronous cycle inconsistent\n"); 1595 fw_notify("isochronous cycle inconsistent\n");
1521 } 1596 }
1522 1597
1598 if (event & OHCI1394_cycle64Seconds) {
1599 spin_lock(&ohci->lock);
1600 update_bus_time(ohci);
1601 spin_unlock(&ohci->lock);
1602 }
1603
1523 return IRQ_HANDLED; 1604 return IRQ_HANDLED;
1524} 1605}
1525 1606
@@ -1604,7 +1685,7 @@ static int ohci_enable(struct fw_card *card,
1604{ 1685{
1605 struct fw_ohci *ohci = fw_ohci(card); 1686 struct fw_ohci *ohci = fw_ohci(card);
1606 struct pci_dev *dev = to_pci_dev(card->device); 1687 struct pci_dev *dev = to_pci_dev(card->device);
1607 u32 lps, irqs; 1688 u32 lps, seconds, irqs;
1608 int i, ret; 1689 int i, ret;
1609 1690
1610 if (software_reset(ohci)) { 1691 if (software_reset(ohci)) {
@@ -1652,6 +1733,10 @@ static int ohci_enable(struct fw_card *card,
1652 (OHCI1394_MAX_AT_RESP_RETRIES << 4) | 1733 (OHCI1394_MAX_AT_RESP_RETRIES << 4) |
1653 (OHCI1394_MAX_PHYS_RESP_RETRIES << 8)); 1734 (OHCI1394_MAX_PHYS_RESP_RETRIES << 8));
1654 1735
1736 seconds = lower_32_bits(get_seconds());
1737 reg_write(ohci, OHCI1394_IsochronousCycleTimer, seconds << 25);
1738 ohci->bus_time = seconds & ~0x3f;
1739
1655 ar_context_run(&ohci->ar_request_ctx); 1740 ar_context_run(&ohci->ar_request_ctx);
1656 ar_context_run(&ohci->ar_response_ctx); 1741 ar_context_run(&ohci->ar_response_ctx);
1657 1742
@@ -1732,6 +1817,7 @@ static int ohci_enable(struct fw_card *card,
1732 OHCI1394_postedWriteErr | 1817 OHCI1394_postedWriteErr |
1733 OHCI1394_selfIDComplete | 1818 OHCI1394_selfIDComplete |
1734 OHCI1394_regAccessFail | 1819 OHCI1394_regAccessFail |
1820 OHCI1394_cycle64Seconds |
1735 OHCI1394_cycleInconsistent | OHCI1394_cycleTooLong | 1821 OHCI1394_cycleInconsistent | OHCI1394_cycleTooLong |
1736 OHCI1394_masterIntEnable; 1822 OHCI1394_masterIntEnable;
1737 if (param_debug & OHCI_PARAM_DEBUG_BUSRESETS) 1823 if (param_debug & OHCI_PARAM_DEBUG_BUSRESETS)
@@ -1913,65 +1999,11 @@ static int ohci_enable_phys_dma(struct fw_card *card,
1913#endif /* CONFIG_FIREWIRE_OHCI_REMOTE_DMA */ 1999#endif /* CONFIG_FIREWIRE_OHCI_REMOTE_DMA */
1914} 2000}
1915 2001
1916static u32 cycle_timer_ticks(u32 cycle_timer)
1917{
1918 u32 ticks;
1919
1920 ticks = cycle_timer & 0xfff;
1921 ticks += 3072 * ((cycle_timer >> 12) & 0x1fff);
1922 ticks += (3072 * 8000) * (cycle_timer >> 25);
1923
1924 return ticks;
1925}
1926
1927/*
1928 * Some controllers exhibit one or more of the following bugs when updating the
1929 * iso cycle timer register:
1930 * - When the lowest six bits are wrapping around to zero, a read that happens
1931 * at the same time will return garbage in the lowest ten bits.
1932 * - When the cycleOffset field wraps around to zero, the cycleCount field is
1933 * not incremented for about 60 ns.
1934 * - Occasionally, the entire register reads zero.
1935 *
1936 * To catch these, we read the register three times and ensure that the
1937 * difference between each two consecutive reads is approximately the same, i.e.
1938 * less than twice the other. Furthermore, any negative difference indicates an
1939 * error. (A PCI read should take at least 20 ticks of the 24.576 MHz timer to
1940 * execute, so we have enough precision to compute the ratio of the differences.)
1941 */
1942static u32 get_cycle_time(struct fw_ohci *ohci)
1943{
1944 u32 c0, c1, c2;
1945 u32 t0, t1, t2;
1946 s32 diff01, diff12;
1947 int i;
1948
1949 c2 = reg_read(ohci, OHCI1394_IsochronousCycleTimer);
1950
1951 if (ohci->quirks & QUIRK_CYCLE_TIMER) {
1952 i = 0;
1953 c1 = c2;
1954 c2 = reg_read(ohci, OHCI1394_IsochronousCycleTimer);
1955 do {
1956 c0 = c1;
1957 c1 = c2;
1958 c2 = reg_read(ohci, OHCI1394_IsochronousCycleTimer);
1959 t0 = cycle_timer_ticks(c0);
1960 t1 = cycle_timer_ticks(c1);
1961 t2 = cycle_timer_ticks(c2);
1962 diff01 = t1 - t0;
1963 diff12 = t2 - t1;
1964 } while ((diff01 <= 0 || diff12 <= 0 ||
1965 diff01 / diff12 >= 2 || diff12 / diff01 >= 2)
1966 && i++ < 20);
1967 }
1968
1969 return c2;
1970}
1971
1972static u32 ohci_read_csr_reg(struct fw_card *card, int csr_offset) 2002static u32 ohci_read_csr_reg(struct fw_card *card, int csr_offset)
1973{ 2003{
1974 struct fw_ohci *ohci = fw_ohci(card); 2004 struct fw_ohci *ohci = fw_ohci(card);
2005 unsigned long flags;
2006 u32 value;
1975 2007
1976 switch (csr_offset) { 2008 switch (csr_offset) {
1977 case CSR_NODE_IDS: 2009 case CSR_NODE_IDS:
@@ -1980,6 +2012,17 @@ static u32 ohci_read_csr_reg(struct fw_card *card, int csr_offset)
1980 case CSR_CYCLE_TIME: 2012 case CSR_CYCLE_TIME:
1981 return get_cycle_time(ohci); 2013 return get_cycle_time(ohci);
1982 2014
2015 case CSR_BUS_TIME:
2016 /*
2017 * We might be called just after the cycle timer has wrapped
2018 * around but just before the cycle64Seconds handler, so we
2019 * better check here, too, if the bus time needs to be updated.
2020 */
2021 spin_lock_irqsave(&ohci->lock, flags);
2022 value = update_bus_time(ohci);
2023 spin_unlock_irqrestore(&ohci->lock, flags);
2024 return value;
2025
1983 default: 2026 default:
1984 WARN_ON(1); 2027 WARN_ON(1);
1985 return 0; 2028 return 0;
@@ -1989,6 +2032,7 @@ static u32 ohci_read_csr_reg(struct fw_card *card, int csr_offset)
1989static void ohci_write_csr_reg(struct fw_card *card, int csr_offset, u32 value) 2032static void ohci_write_csr_reg(struct fw_card *card, int csr_offset, u32 value)
1990{ 2033{
1991 struct fw_ohci *ohci = fw_ohci(card); 2034 struct fw_ohci *ohci = fw_ohci(card);
2035 unsigned long flags;
1992 2036
1993 switch (csr_offset) { 2037 switch (csr_offset) {
1994 case CSR_NODE_IDS: 2038 case CSR_NODE_IDS:
@@ -2003,6 +2047,12 @@ static void ohci_write_csr_reg(struct fw_card *card, int csr_offset, u32 value)
2003 flush_writes(ohci); 2047 flush_writes(ohci);
2004 break; 2048 break;
2005 2049
2050 case CSR_BUS_TIME:
2051 spin_lock_irqsave(&ohci->lock, flags);
2052 ohci->bus_time = (ohci->bus_time & 0x7f) | (value & ~0x7f);
2053 spin_unlock_irqrestore(&ohci->lock, flags);
2054 break;
2055
2006 default: 2056 default:
2007 WARN_ON(1); 2057 WARN_ON(1);
2008 break; 2058 break;