u-boot-brain/drivers/usb/host
Marek Vasut 02b0e1a36c usb: ehci-hcd: Keep async schedule running
Profiling the EHCI driver shows a significant performance problem in
ehci_submit_async(). Specifically, this function keeps enabling and
disabling async schedule back and forth for every single transaction.
However, enabling/disabling the async schedule does not take effect
immediatelly, but instead may take up to 1 mS (8 uFrames) to complete.

This impacts USB storage significantly, esp. since the recent reduction
of maximum transfer size to support more USB storage devices. This in
turn results in sharp increase in the number of ehci_submit_async()
calls. Since one USB storage BBB transfer does three such calls and
the maximum transfer size is 120 kiB, the overhead is 6 mS per 120 kiB,
which is unacceptable.

However, this overhead can be removed simply by keeping the async
schedule running. Specifically, the first transfer starts the async
schedule and then each and every subsequent transfer only adds a new
QH into that schedule, waits until the QH is completed and does NOT
disable the async schedule. The async schedule is stopped only by
shutting down the controller, which must happen before moving out
of U-Boot, otherwise the controller will corrupt memory.

Signed-off-by: Marek Vasut <marek.vasut+renesas@gmail.com>
Cc: Bin Meng <bmeng.cn@gmail.com>
Cc: Simon Glass <sjg@chromium.org>
2019-10-31 12:13:40 +01:00
..
dwc2.c dwc2: use the nonblock argument in submit_int_msg 2019-09-11 10:11:29 +02:00
dwc2.h SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
dwc3-of-simple.c usb: dwc3-of-simple: Add support for RK3399 2019-07-19 11:11:09 +08:00
dwc3-sti-glue.c regmap: clean up regmap allocation 2018-05-07 15:15:27 -04:00
ehci-armada100.c SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
ehci-atmel.c usb: s/CONFIG_DM_USB/CONFIG_IS_ENABLED(DM_USB)/ 2018-11-26 21:19:03 +01:00
ehci-exynos.c SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
ehci-faraday.c SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
ehci-fsl.c env: Move env_get() to env.h 2019-08-11 16:43:41 -04:00
ehci-generic.c usb: ehci-generic: don't probe fail if there is no clk_enable() ops 2019-09-11 16:16:12 +08:00
ehci-hcd.c usb: ehci-hcd: Keep async schedule running 2019-10-31 12:13:40 +01:00
ehci-marvell.c usb: s/CONFIG_DM_USB/CONFIG_IS_ENABLED(DM_USB)/ 2018-11-26 21:19:03 +01:00
ehci-msm.c usb: ehci-msm: Add init_after_reset for CI_UDC 2018-09-30 13:00:37 -04:00
ehci-mx5.c USB: DM: Convert i.MX5 ehci code to driver model 2019-04-25 17:03:25 +02:00
ehci-mx6.c ehci-mx6: Update EHCI driver to support OTG0 on i.MX7ULP 2019-10-24 15:31:13 +02:00
ehci-mxc.c SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
ehci-mxs.c SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
ehci-omap.c SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
ehci-pci.c usb: s/CONFIG_DM_USB/CONFIG_IS_ENABLED(DM_USB)/ 2018-11-26 21:19:03 +01:00
ehci-rmobile.c SPDX: Convert a few files that were missed before 2018-05-10 20:38:35 -04:00
ehci-spear.c SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
ehci-tegra.c SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04: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 usb: s/CONFIG_DM_USB/CONFIG_IS_ENABLED(DM_USB)/ 2018-11-26 21:19:03 +01:00
ehci-zynq.c SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
ehci.h fsl/usb: Workaround for USB erratum-A005275 2018-10-29 13:13:05 -07:00
Kconfig ehci-mx6: Update EHCI driver to support OTG0 on i.MX7ULP 2019-10-24 15:31:13 +02:00
Makefile usb: host: remove the xhci-zynqmp driver 2019-10-24 11:28:16 +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 usb: ohci: ohci-da8xx: Cleanup Error handling and fix flags 2019-05-09 19:52:55 -04: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 usb: ohci-generic: don't probe fail if there is no clk_enable() ops 2019-09-11 16:16:12 +08:00
ohci-hcd.c usb: Add nonblock argument to submit_int_msg 2019-09-11 10:11:29 +02:00
ohci-lpc32xx.c SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
ohci-pci.c usb, ohci, pci: add DM support for PCI-based OHCI USB controller 2019-08-08 11:35:02 +02:00
ohci.h usb, ohci: fix ohci swap register access 2019-08-08 11:35:02 +02:00
r8a66597-hcd.c usb: r8a66597: Add optional DM VBUS regulator support 2019-08-22 18:23:36 +02:00
r8a66597.h usb: r8a66597: Add optional DM VBUS regulator support 2019-08-22 18:23:36 +02:00
sl811-hcd.c usb: Add nonblock argument to submit_int_msg 2019-09-11 10:11:29 +02:00
sl811.h drivers/usb: regorganisation 2009-04-06 20:40:46 +02:00
usb-sandbox.c usb: Add nonblock argument to submit_int_msg 2019-09-11 10:11:29 +02:00
usb-uclass.c usb: Add nonblock argument to submit_int_msg 2019-09-11 10:11:29 +02:00
utmi-armada100.c SPDX: Convert all of our single license tags to Linux Kernel style 2018-05-07 09:34:12 -04:00
xhci-dwc3.c usb: xhci: move xhci.h to include usb 2019-10-24 11:28:17 +02:00
xhci-exynos5.c usb: xhci: move xhci.h to include usb 2019-10-24 11:28:17 +02:00
xhci-fsl.c usb: xhci: move xhci.h to include usb 2019-10-24 11:28:17 +02:00
xhci-mem.c usb: xhci: move xhci.h to include usb 2019-10-24 11:28:17 +02:00
xhci-mvebu.c usb: xhci: move xhci.h to include usb 2019-10-24 11:28:17 +02:00
xhci-omap.c usb: xhci: move xhci.h to include usb 2019-10-24 11:28:17 +02:00
xhci-pci.c usb: xhci: move xhci.h to include usb 2019-10-24 11:28:17 +02: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 usb: xhci: move xhci.h to include usb 2019-10-24 11:28:17 +02:00
xhci-ring.c usb: xhci: move xhci.h to include usb 2019-10-24 11:28:17 +02:00
xhci-rockchip.c usb: xhci: move xhci.h to include usb 2019-10-24 11:28:17 +02:00
xhci.c usb: xhci: move xhci.h to include usb 2019-10-24 11:28:17 +02:00