u-boot-brain/drivers/usb/host
Ye Li e1769da17e usb: ehci-hcd: Add IAA handshake for removing async QH
According to EHCI spec, software needs to do handshake with HC for
safely removing QH from async list. This handshake is implemented by
setting IAAD (Interrupt on Async Advance Doorbell) bit in USB_USBCMD
register and poll the IAA (Interrupt on Async Advance bit) in the
USB_USBSTS to ensure the HC has released all on-chip state that may
potentially reference one of the data structures just removed.

Current codes only check active status of the last QTD, but this can't
ensure the QH is released from HC. We can meet unrecoverable
"EHCI timed out on TD" errors when running UEFI SCT tests on USB disk.
The USB_ASYNCLISTADDR register is changed to a invalid address when the
issue happens. It is fixed after adding the IAA handshake.

Steps to reproduce the issue:
1. Build the UEFI SCT from https://github.com/tianocore/edk2-test
2. Build the EDK2 UEFI Shell from https://github.com/tianocore/edk2
3. Copy SCT files and Shell.efi to USB disk FAT partition
4. Load the Shell.efi from USB FAT, and run bootefi to execute it
5. After booting into Shell, enter the SCT directory and run "sct -a"
   to execute all tests.
6. Tests run about 1 hour and stop with many EHCI timeout errors like
   EHCI timed out on TD - token=0x801f8c80

Signed-off-by: Ye Li <ye.li@nxp.com>
2021-04-22 21:09:57 +02:00
..
dwc2.c dm: treewide: Rename ofdata_to_platdata() to of_to_plat() 2020-12-13 16:51:09 -07:00
dwc2.h SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
dwc3-octeon-glue.c common: Drop asm/global_data.h from common header 2021-02-02 15:33:42 -05:00
dwc3-of-simple.c dm: treewide: Rename dev_get_platdata() to dev_get_plat() 2020-12-13 16:51:09 -07:00
dwc3-sti-glue.c common: Drop asm/global_data.h from common header 2021-02-02 15:33:42 -05:00
ehci-armada100.c common: Drop log.h from common header 2020-05-18 21:19:18 -04:00
ehci-atmel.c dm: treewide: Rename ..._platdata variables to just ..._plat 2020-12-13 16:51:09 -07:00
ehci-exynos.c common: Drop asm/global_data.h from common header 2021-02-02 15:33:42 -05:00
ehci-faraday.c common: Drop linux/delay.h from common header 2020-05-18 21:19:23 -04:00
ehci-fsl.c common: Drop asm/global_data.h from common header 2021-02-02 15:33:42 -05:00
ehci-generic.c dm: treewide: Rename auto_alloc_size members to be shorter 2020-12-13 08:00:25 -07:00
ehci-hcd.c usb: ehci-hcd: Add IAA handshake for removing async QH 2021-04-22 21:09:57 +02:00
ehci-marvell.c common: Drop asm/global_data.h from common header 2021-02-02 15:33:42 -05:00
ehci-msm.c dm: treewide: Rename ..._platdata variables to just ..._plat 2020-12-13 16:51:09 -07:00
ehci-mx5.c common: Drop asm/global_data.h from common header 2021-02-02 15:33:42 -05:00
ehci-mx6.c usb: ehci-mx6: Fix aarch64 build warnings 2021-04-18 04:29:36 +02:00
ehci-mxc.c common: Drop linux/delay.h from common header 2020-05-18 21:19:23 -04:00
ehci-mxs.c common: Drop linux/delay.h from common header 2020-05-18 21:19:23 -04:00
ehci-omap.c dm: Avoid accessing seq directly 2020-12-18 20:32:21 -07:00
ehci-pci.c dm: treewide: Rename ..._platdata variables to just ..._plat 2020-12-13 16:51:09 -07:00
ehci-rmobile.c common: Drop linux/delay.h from common header 2020-05-18 21:19:23 -04:00
ehci-spear.c common: Drop linux/delay.h from common header 2020-05-18 21:19:23 -04:00
ehci-tegra.c dm: treewide: Rename ..._platdata variables to just ..._plat 2020-12-13 16:51:09 -07:00
ehci-vct.c SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
ehci-vf.c common: Drop asm/global_data.h from common header 2021-02-02 15:33:42 -05:00
ehci-zynq.c dm: treewide: Rename ..._platdata variables to just ..._plat 2020-12-13 16:51:09 -07:00
ehci.h usb: ehci-hcd: Add IAA handshake for removing async QH 2021-04-22 21:09:57 +02:00
Kconfig usb: ehci-mx6: Add iMX8M support 2021-04-18 04:29:36 +02:00
Makefile usb: xhci: octeon: Add DWC3 glue layer for Octeon 2020-10-07 20:25:57 +02:00
ohci-at91.c SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
ohci-da8xx.c dm: treewide: Rename auto_alloc_size members to be shorter 2020-12-13 08:00:25 -07:00
ohci-ep93xx.c SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
ohci-generic.c dm: treewide: Rename auto_alloc_size members to be shorter 2020-12-13 08:00:25 -07:00
ohci-hcd.c common: Drop linux/delay.h from common header 2020-05-18 21:19:23 -04:00
ohci-lpc32xx.c dm: i2c: use CONFIG_IS_ENABLED macro for DM_I2C/DM_I2C_GPIO 2021-02-21 06:08:00 +01:00
ohci-pci.c dm: treewide: Rename ..._platdata variables to just ..._plat 2020-12-13 16:51:09 -07:00
ohci.h usb: ohci: Add header file for ARCH_DMA_MINALIGN 2020-06-02 13:06:10 -04:00
r8a66597-hcd.c dm: treewide: Rename ofdata_to_platdata() to of_to_plat() 2020-12-13 16:51:09 -07:00
r8a66597.h common: Drop linux/bitops.h from common header 2020-05-18 21:19:23 -04:00
sl811-hcd.c common: Drop linux/delay.h from common header 2020-05-18 21:19:23 -04:00
sl811.h drivers/usb: regorganisation 2009-04-06 20:40:46 +02:00
usb-sandbox.c dm: Avoid accessing seq directly 2020-12-18 20:32:21 -07:00
usb-uclass.c dm: core: Use dev_has_ofnode() instead of dev_of_valid() 2021-01-05 12:24:41 -07:00
utmi-armada100.c common: Drop linux/delay.h from common header 2020-05-18 21:19:23 -04:00
xhci-brcm.c dm: treewide: Rename ..._platdata variables to just ..._plat 2020-12-13 16:51:09 -07:00
xhci-dwc3.c dm: core: Access device ofnode through functions 2021-01-05 12:24:41 -07:00
xhci-exynos5.c common: Drop asm/global_data.h from common header 2021-02-02 15:33:42 -05:00
xhci-fsl.c dm: treewide: Rename ..._platdata variables to just ..._plat 2020-12-13 16:51:09 -07:00
xhci-mem.c usb: xhci: Add missing xhci_readl() 2021-04-06 16:38:57 +02:00
xhci-mtk.c usb: xhci-mtk: support option to disable ports 2021-02-10 22:23:24 +01:00
xhci-mvebu.c dm: treewide: Rename ..._platdata variables to just ..._plat 2020-12-13 16:51:09 -07:00
xhci-omap.c common: Drop log.h from common header 2020-05-18 21:19:18 -04:00
xhci-pci.c usb: xhci-pci: Add DM_FLAG_OS_PREPARE flag 2021-02-18 11:56:25 +01:00
xhci-rcar-r8a779x_usb3_v3.h usb: xhci: Add Renesas R-Car xHCI driver 2017-11-26 02:22:36 +01:00
xhci-rcar.c dm: treewide: Rename ..._platdata variables to just ..._plat 2020-12-13 16:51:09 -07:00
xhci-ring.c usb: xhci: Make debug output better readable and checkpatch clean 2021-04-06 16:38:58 +02:00
xhci.c xhci: translate virtual addresses into the bus's address space 2021-02-18 11:56:26 +01:00