linux/drivers/usb/dwc3
Thinh Nguyen d92021f660 usb: dwc3: Add workaround for isoc start transfer failure
In DWC_usb31 version 1.70a-ea06 and prior, for highspeed and fullspeed
isochronous IN, BIT[15:14] of the 16-bit microframe number reported by
the XferNotReady event are invalid. The driver uses this number to
schedule the isochronous transfer and passes it to the START TRANSFER
command. Because this number is invalid, the command may fail. If
BIT[15:14] matches the internal 16-bit microframe, the START TRANSFER
command will pass and the transfer will start at the scheduled time, if
it is off by 1, the command will still pass, but the transfer will start
2 seconds in the future. For all other conditions, the START TRANSFER
command will fail with bus-expiry.

In order to workaround this issue, we can test for the correct
combination of BIT[15:14] by sending START TRANSFER commands with
different values of BIT[15:14]: 'b00, 'b01, 'b10, and 'b11. Each
combination is 2^14 uframe apart (or 2 seconds). 4 seconds into the
future will result in a bus-expiry status. As the result, within the 4
possible combinations for BIT[15:14], there will be 2 successful and 2
failure START COMMAND status. One of the 2 successful command status
will result in a 2-second delay start. The smaller BIT[15:14] value is
the correct combination.

Since there are only 4 outcomes and the results are ordered, we can
simply test 2 START TRANSFER commands with BIT[15:14] combinations 'b00
and 'b01 to deduce the smaller successful combination.

Let test0 = test status for combination 'b00 and test1 = test status for
'b01 of BIT[15:14]. The correct combination is as follow:

if test0 fails and test1 passes, BIT[15:14] is 'b01
if test0 fails and test1 fails, BIT[15:14] is 'b10
if test0 passes and test1 fails, BIT[15:14] is 'b11
if test0 passes and test1 passes, BIT[15:14] is 'b00

Synopsys STAR 9001202023: Wrong microframe number for isochronous IN
endpoints.

Signed-off-by: Thinh Nguyen <thinhn@synopsys.com>
Signed-off-by: Felipe Balbi <felipe.balbi@linux.intel.com>
2018-11-26 09:06:32 +02:00
..
core.c usb: dwc3: Add workaround for isoc start transfer failure 2018-11-26 09:06:32 +02:00
core.h usb: dwc3: Add workaround for isoc start transfer failure 2018-11-26 09:06:32 +02:00
debug.h usb: dwc3: debugfs: Properly print/set link state for HS 2018-11-26 09:06:31 +02:00
debugfs.c usb: dwc3: debugfs: Print/set link state for peripheral mode 2018-11-26 09:06:31 +02:00
drd.c usb: dwc3: drd: Add support for DR detection through extcon 2018-11-26 09:06:32 +02:00
dwc3-exynos.c usb: dwc3: exynos: Add support for Exynos5433 variant with all clocks 2018-10-02 10:33:01 +03:00
dwc3-haps.c usb: dwc3: Add a glue driver for Synopsys HAPS platform 2018-07-26 13:47:51 +03:00
dwc3-keystone.c USB: dwc3: Remove redundant license text 2017-11-07 15:45:01 +01:00
dwc3-of-simple.c usb: dwc3: of-simple: avoid unused function warnings 2018-08-29 09:59:37 +03:00
dwc3-omap.c usb: dwc3: omap: don't miss events during suspend/resume 2018-02-12 10:53:18 +02:00
dwc3-pci.c usb: dwc3: Fix NULL pointer exception in dwc3_pci_remove() 2018-11-14 10:37:19 +02:00
dwc3-qcom.c usb: dwc3: qcom: mark PM functions as __maybe_unused 2018-06-19 12:48:12 +03:00
dwc3-st.c USB: dwc3: Remove redundant license text 2017-11-07 15:45:01 +01:00
ep0.c usb: dwc3: gadget: remove redundant variable maxpacket 2018-07-13 15:41:56 +02:00
gadget.c usb: dwc3: Add workaround for isoc start transfer failure 2018-11-26 09:06:32 +02:00
gadget.h usb: dwc3: change stream event enable bit back to 13 2018-07-26 14:04:28 +03:00
host.c usb: dwc3: Support option to disable USB2 LPM 2018-11-26 09:06:31 +02:00
io.h USB: dwc3: Remove redundant license text 2017-11-07 15:45:01 +01:00
Kconfig usb: dwc3: add EXTCON dependency for qcom 2018-10-02 10:33:43 +03:00
Makefile usb: dwc3: Add a glue driver for Synopsys HAPS platform 2018-07-26 13:47:51 +03:00
trace.c USB: dwc3: Remove redundant license text 2017-11-07 15:45:01 +01:00
trace.h usb: dwc3: gadget: remove duplicated missed isoc handling 2018-05-21 10:00:53 +03:00
ulpi.c USB: dwc3: Remove redundant license text 2017-11-07 15:45:01 +01:00