• Peter Chen's avatar
    usb: chipidea: udc: delete td from req's td list at ep_dequeue · e4adcff0
    Peter Chen authored
    We need to delete un-finished td from current request's td list
    at ep_dequeue API, otherwise, this non-user td will be remained
    at td list before this request is freed. So if we do ep_queue->
    ep_dequeue->ep_queue sequence, when the complete interrupt for
    the second ep_queue comes, we search td list for this request,
    the first td (added by the first ep_queue) will be handled, and
    its status is still active, so we will consider the this transfer
    still not be completed, but in fact, it has completed. It causes
    the peripheral side considers it never receives current data for
    this transfer.
    
    We met this problem when do "Error Recovery Test - Device Configured"
    test item for USBCV2 MSC test, the host has never received ACK for
    the IN token for CSW due to peripheral considers it does not get this
    CBW, the USBCV test log like belows:
    
    --------------------------------------------------------------------------
    INFO
    Issuing BOT MSC Reset, reset should always succeed
    INFO
    Retrieving status on CBW endpoint
    INFO
    CBW endpoint status = 0x0
    INFO
    Retrieving status on CSW endpoint
    INFO
    CSW endpoint status = 0x0
    INFO
    Issuing required command (Test Unit Ready) to verify device has recovered
    INFO
    Issuing CBW (attempt #1):
    INFO
    |----- CBW LUN                  = 0x0
    INFO
    |----- CBW Flags                = 0x0
    INFO
    |----- CBW Data Transfer Length = 0x0
    INFO
    |----- CBW CDB Length           = 0x6
    INFO
    |----- CBW CDB-00 = 0x0
    INFO
    |----- CBW CDB-01 = 0x0
    INFO
    |----- CBW CDB-02 = 0x0
    INFO
    |----- CBW CDB-03 = 0x0
    INFO
    |----- CBW CDB-04 = 0x0
    INFO
    |----- CBW CDB-05 = 0x0
    INFO
    Issuing CSW : try 1
    INFO
    CSW Bulk Request timed out!
    ERROR
    Failed CSW phase : should have been success or stall
    FAIL
    (5.3.4) The CSW status value must be 0x00, 0x01, or 0x02.
    ERROR
    BOTCommonMSCRequest failed:  error=80004000
    
    Cc: Andrzej Pietrasiewicz <andrzej.p@samsung.com>
    Cc: stable@vger.kernel.org
    Signed-off-by: default avatarPeter Chen <peter.chen@freescale.com>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    e4adcff0
udc.c 45 KB