linux/drivers/usb/chipidea
Peter Chen 2fc5a7dace usb: chipidea: udc: using MultO at TD as real mult value for ISO-TX
We have met a bug that the high bandwidth ISO-TX transfer has failed
at the last packet if it is less than 1024, the TD status shows it
is "Transaction Error".

The root cause of this problem is: the mult value at qh is not correct
for current TD's transfer length. We use TD list to queue un-transfer
TDs, and change mult for new adding TDs. If new adding TDs transfer length
less than 1024, but the queued un-transfer TDs transfer length is larger
than 1024, the transfer error will occur, and vice versa.
Usually, this problem occurs at the last packet, and the first packet for
new frame.

We fixed this problem by setting Mult at QH as the largest value (3), and
set MultO (Multiplier Override) at TD according to every transfer length.
It can cover both hardware version less than 2.3 (the real mult is MultO
if it is not 0) and 2.3+ (the real mult is min(qh.mult, td.multo)).

Since the MultO bits are only existed at TX TD, we keep the ISO-RX behavior
unchanged.

For stable tree: 3.11+.

Cc: stable <stable@vger.kernel.org>
Cc: Michael Grzeschik <m.grzeschik@pengutronix.de>
Reported-by: Matthieu Vanin <b47495@freescale.com>
Tested-by: Matthieu Vanin <b47495@freescale.com>
Signed-off-by: Peter Chen <peter.chen@freescale.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2014-01-13 15:55:19 -08:00
..
Kconfig
Makefile usb: chipidea: imx: avoid unnecessary probe defer every time 2013-12-08 18:02:54 -08:00
bits.h
ci.h usb: chipidea: add freescale imx28 special write register method 2014-01-13 15:55:19 -08:00
ci_hdrc_imx.c usb: chipidea: imx: set CI_HDRC_IMX28_WRITE_FIX for imx28 2014-01-13 15:55:19 -08: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
ci_hdrc_pci.c usb: chipidea: remove DEFINE_PCI_DEVICE_TABLE macro 2013-12-03 10:22:52 -08:00
core.c usb: chipidea: put hw_phymode_configure before ci_usb_phy_init 2014-01-13 15:55:19 -08:00
debug.c
debug.h
host.c usb: chipidea: add freescale imx28 special write register method 2014-01-13 15:55:19 -08:00
host.h
otg.c
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: using MultO at TD as real mult value for ISO-TX 2014-01-13 15:55:19 -08:00
udc.h
usbmisc_imx.c usb: chipidea: usbmisc: Add support for i.MX51 CPU 2013-12-08 18:02:55 -08:00