• Mike Nuss's avatar
    USB: OHCI handles more ZFMicro quirks · 89a0fd18
    Mike Nuss authored
    The ZF Micro OHCI controller exhibits unexpected behavior that seems to be
    related to high load.  Under certain conditions, the controller will
    complete a TD, remove it from the endpoint's queue, and fail to add it to
    the donelist. This causes the endpoint to appear to stop responding. Worse,
    if the device is removed while in that state, OHCI will hang while waiting
    for the orphaned TD to complete.  The situation is not recoverable without
    rebooting.
    
    This fix enhances the scope of the existing OHCI_QUIRK_ZFMICRO flag:
    
     1. A watchdog routine periodically scans the OHCI structures to check
        for orphaned TDs. In these cases the TD is taken back from the
        controller and completed normally.
    
     2. If a device is removed while the endpoint is hung but before the
        watchdog catches the situation, any outstanding TDs are taken back
        from the controller in the 'sanitize' phase.
    
    The ohci-hcd driver used to print "INTR_SF lossage" in this situation;
    this changes it to the universally accurate "ED unlink timeout".  Other
    instances of this message presumably have different root causes.
    
    Both this Compaq quirk and a NEC quirk are now properly compiled out for
    non-PCI builds of this driver.
    Signed-off-by: default avatarMike Nuss <mike@terascala.com>
    Signed-off-by: default avatarDavid Brownell <dbrownell@users.sourceforge.net>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
    89a0fd18
ohci.h 22.4 KB