• Jarod Wilson's avatar
    firewire: fw-ohci: don't append to AT context when it's not active · 76f73ca1
    Jarod Wilson authored
    I finally tracked down the issues with this JMicron PCI-e card in my
    possession to a failure to comply with section 7.2.3.2 of the OHCI 1.1
    specification (thanks to Kristian for the pointer to illustrate that it
    is indeed a flaw in this card, not the driver). The controller should
    simply flush the packets we've appended to its AT queue if a bus reset
    occurs before they've been transmitted and we'll try again, but
    something goes wrong and the controller winds up hung.
    
    However, we can avoid the problem by simply checking if the
    IntEvent.busReset register had been set before we try appending to the
    AT context. When busReset is set, the AT context is completely halted
    until busReset is cleared, so there's no point in appending AT packets
    until the register is cleared. So at_context_queue_packet() now checks
    for busReset being set, and bails with an RCODE_GENERATION packet ack,
    which results in us trying to append the packet again after recognizing
    the fact there has been a bus reset, and clearing busReset.
    Signed-off-by: default avatarJarod Wilson <jwilson@redhat.com>
    Signed-off-by: default avatarStefan Richter <stefanr@s5r6.in-berlin.de>
    76f73ca1
fw-ohci.c 69.5 KB