From 960dad93fb90cd5c5362458a15621a168cb0bae0 Mon Sep 17 00:00:00 2001 From: Peter Hurley Date: Wed, 27 Mar 2013 06:56:01 -0400 Subject: [PATCH] --- yaml --- r: 374705 b: refs/heads/master c: 67672134aaafd520a61dda448a662336e8fde236 h: refs/heads/master i: 374703: ebcb46d6daa34b5974da1c0a7fcbf2b01778b62e v: v3 --- [refs] | 2 +- trunk/drivers/firewire/ohci.c | 27 ++++++++++++++------------- 2 files changed, 15 insertions(+), 14 deletions(-) diff --git a/[refs] b/[refs] index 7c16a5ec7141..31df816df089 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: de97cb64a959fe5ccf828b02d3a78de9f9defb67 +refs/heads/master: 67672134aaafd520a61dda448a662336e8fde236 diff --git a/trunk/drivers/firewire/ohci.c b/trunk/drivers/firewire/ohci.c index 925a2a6fe68f..c64b4801adaa 100644 --- a/trunk/drivers/firewire/ohci.c +++ b/trunk/drivers/firewire/ohci.c @@ -1911,7 +1911,7 @@ static void bus_reset_work(struct work_struct *work) reg = reg_read(ohci, OHCI1394_SelfIDCount); if (reg & OHCI1394_SelfIDCount_selfIDError) { - ohci_notice(ohci, "inconsistent self IDs\n"); + ohci_notice(ohci, "self ID receive error\n"); return; } /* @@ -1923,7 +1923,7 @@ static void bus_reset_work(struct work_struct *work) self_id_count = (reg >> 3) & 0xff; if (self_id_count > 252) { - ohci_notice(ohci, "inconsistent self IDs\n"); + ohci_notice(ohci, "bad selfIDSize (%08x)\n", reg); return; } @@ -1931,7 +1931,10 @@ static void bus_reset_work(struct work_struct *work) rmb(); for (i = 1, j = 0; j < self_id_count; i += 2, j++) { - if (ohci->self_id_cpu[i] != ~ohci->self_id_cpu[i + 1]) { + u32 id = cond_le32_to_cpu(ohci->self_id_cpu[i]); + u32 id2 = cond_le32_to_cpu(ohci->self_id_cpu[i + 1]); + + if (id != ~id2) { /* * If the invalid data looks like a cycle start packet, * it's likely to be the result of the cycle master @@ -1939,19 +1942,17 @@ static void bus_reset_work(struct work_struct *work) * so far are valid and should be processed so that the * bus manager can then correct the gap count. */ - if (cond_le32_to_cpu(ohci->self_id_cpu[i]) - == 0xffff008f) { - ohci_notice(ohci, - "ignoring spurious self IDs\n"); + if (id == 0xffff008f) { + ohci_notice(ohci, "ignoring spurious self IDs\n"); self_id_count = j; break; - } else { - ohci_notice(ohci, "inconsistent self IDs\n"); - return; } + + ohci_notice(ohci, "bad self ID %d/%d (%08x != ~%08x)\n", + j, self_id_count, id, id2); + return; } - ohci->self_id_buffer[j] = - cond_le32_to_cpu(ohci->self_id_cpu[i]); + ohci->self_id_buffer[j] = id; } if (ohci->quirks & QUIRK_TI_SLLZ059) { @@ -1964,7 +1965,7 @@ static void bus_reset_work(struct work_struct *work) } if (self_id_count == 0) { - ohci_notice(ohci, "inconsistent self IDs\n"); + ohci_notice(ohci, "no self IDs\n"); return; } rmb();