linux/drivers/usb/chipidea
Peter Chen 02aa24f7a8 usb: chipidea: udc: delete td from req's td list at ep_dequeue
commit e4adcff09c upstream.

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>
Signed-off-by: Peter Chen <peter.chen@freescale.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
History 2014-07-09 11:21:24 -07:00
..
bits.h usb: chipidea: udc: add maximum-speed = full-speed option 2014-02-24 17:07:52 -08:00
ci.h usb: chipidea: refine PHY operation 2014-02-24 17:07:52 -08:00
ci_hdrc_imx.c usb: chipidea: imx: Use dev_name() for ci_hdrc name to distinguish USBs 2014-03-12 12:32:21 -07:00
ci_hdrc_imx.h USB: chipidea: add guard macro to ci_hdrc_imx.h 2014-01-03 12:37:57 -08:00
ci_hdrc_msm.c usb: chipidea: retire flag CI_HDRC_PULLUP_ON_VBUS 2013-08-14 12:37:20 -07:00
ci_hdrc_pci.c usb: chipidea: remove DEFINE_PCI_DEVICE_TABLE macro 2013-12-03 10:22:52 -08:00
ci_hdrc_zevio.c usb: chipidea: add support for USB OTG controller on LSI Zevio SoCs 2014-03-12 12:32:21 -07:00
core.c usb: chipidea: coordinate usb phy initialization for different phy type 2014-04-24 12:45:40 -07:00
debug.c usb: chipidea: drop "13xxx" infix 2013-06-24 16:16:55 -07:00
debug.h usb: chipidea: drop "13xxx" infix 2013-06-24 16:16:55 -07:00
host.c usb: chipidea: add freescale imx28 special write register method 2014-01-13 15:55:19 -08:00
host.h usb: chipidea: add role init and destroy APIs 2013-08-14 12:37:19 -07:00
Kconfig usb: chipidea: USB_CHIPIDEA should depend on HAS_DMA 2013-09-25 17:30:39 -07:00
Makefile usb: chipidea: add support for USB OTG controller on LSI Zevio SoCs 2014-03-12 12:32:21 -07:00
otg.c usb: chipidea: add wait vbus lower than OTGSC_BSV before role starts 2013-08-14 12:37:20 -07:00
otg.h usb: chipidea: need to mask INT_STATUS when write otgsc 2014-01-13 15:55:19 -08:00
udc.c usb: chipidea: udc: delete td from req's td list at ep_dequeue 2014-07-09 11:21:24 -07:00
udc.h usb: chipidea: add role init and destroy APIs 2013-08-14 12:37:19 -07:00
usbmisc_imx.c usb: chipidea: usbmisc: Add support for i.MX51 CPU 2013-12-08 18:02:55 -08:00