• Sarah Sharp's avatar
    USB: xhci: Handle errors that cause endpoint halts. · bcef3fd5
    Sarah Sharp authored
    The xHCI 0.95 and 0.96 specification defines several transfer buffer
    request completion codes that indicate a USB transaction error occurred.
    When a stall, babble, transaction, or split transaction error completion code
    is set, the xHCI has halted that endpoint ring.  Software must issue a
    Reset Endpoint command and a Set Transfer Ring Dequeue Pointer command
    to clean up the halted ring.
    
    The USB device driver is supposed to call into usb_reset_endpoint() when
    an endpoint stalls.  That calls into the xHCI driver to issue the proper
    commands.  However, drivers don't call that function for the other
    errors that cause the xHC to halt the endpoint ring.  If a babble,
    transaction, or split transaction error occurs, check if the endpoint
    context reports a halted condition, and clean up the endpoint ring if it
    does.
    Signed-off-by: default avatarSarah Sharp <sarah.a.sharp@linux.intel.com>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
    bcef3fd5
xhci-ring.c 72.2 KB