summaryrefslogtreecommitdiffstats
path: root/drivers/firewire
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/firewire')
-rw-r--r--drivers/firewire/ohci.c18
1 files changed, 16 insertions, 2 deletions
diff --git a/drivers/firewire/ohci.c b/drivers/firewire/ohci.c
index bffc2ad7ecab..b6977149394e 100644
--- a/drivers/firewire/ohci.c
+++ b/drivers/firewire/ohci.c
@@ -1860,8 +1860,22 @@ static void bus_reset_work(struct work_struct *work)
1860 1860
1861 for (i = 1, j = 0; j < self_id_count; i += 2, j++) { 1861 for (i = 1, j = 0; j < self_id_count; i += 2, j++) {
1862 if (ohci->self_id_cpu[i] != ~ohci->self_id_cpu[i + 1]) { 1862 if (ohci->self_id_cpu[i] != ~ohci->self_id_cpu[i + 1]) {
1863 fw_notify("inconsistent self IDs\n"); 1863 /*
1864 return; 1864 * If the invalid data looks like a cycle start packet,
1865 * it's likely to be the result of the cycle master
1866 * having a wrong gap count. In this case, the self IDs
1867 * so far are valid and should be processed so that the
1868 * bus manager can then correct the gap count.
1869 */
1870 if (cond_le32_to_cpu(ohci->self_id_cpu[i])
1871 == 0xffff008f) {
1872 fw_notify("ignoring spurious self IDs\n");
1873 self_id_count = j;
1874 break;
1875 } else {
1876 fw_notify("inconsistent self IDs\n");
1877 return;
1878 }
1865 } 1879 }
1866 ohci->self_id_buffer[j] = 1880 ohci->self_id_buffer[j] =
1867 cond_le32_to_cpu(ohci->self_id_cpu[i]); 1881 cond_le32_to_cpu(ohci->self_id_cpu[i]);