u-boot/drivers/usb/host
Jerome Forissier 1c0f6999b5 dm: usb: initialize and scan multiple buses simultaneously with uthread
Use the uthread framework to initialize and scan USB buses in parallel
for better performance. The console output is slightly modified with a
final per-bus report of the number of devices found, common to UTHREAD
and !UTHREAD. The USB tests are updated accordingly.

Tested on two platforms:

1. arm64 QEMU on a somewhat contrived example (4 USB buses, each with
one audio device, one keyboard, one mouse and one tablet)

 $ make qemu_arm64_defconfig
 $ make -j$(nproc) CROSS_COMPILE="ccache aarch64-linux-gnu-"
 $ qemu-system-aarch64 -M virt -nographic -cpu max -bios u-boot.bin \
     $(for i in {1..4}; do echo -device qemu-xhci,id=xhci$i \
         -device\ usb-{audio,kbd,mouse,tablet},bus=xhci$i.0; \
     done)

2. i.MX93 EVK (imx93_11x11_evk_defconfig) with two USB hubs, each with
one webcam and one ethernet adapter, resulting in the following device
tree:

 USB device tree:
   1  Hub (480 Mb/s, 0mA)
   |  u-boot EHCI Host Controller
   |
   +-2  Hub (480 Mb/s, 100mA)
     |  GenesysLogic USB2.1 Hub
     |
     +-3  Vendor specific (480 Mb/s, 350mA)
     |    Realtek USB 10/100/1000 LAN 001000001
     |
     +-4   (480 Mb/s, 500mA)
           HD Pro Webcam C920 8F7CD51F

   1  Hub (480 Mb/s, 0mA)
   |  u-boot EHCI Host Controller
   |
   +-2  Hub (480 Mb/s, 100mA)
     |   USB 2.0 Hub
     |
     +-3  Vendor specific (480 Mb/s, 200mA)
     |    Realtek USB 10/100/1000 LAN 000001
     |
     +-4   (480 Mb/s, 500mA)
          Generic OnLan-CS30 201801010008

Note that i.MX was tested on top of the downstream repository [1] since
USB doesn't work in the upstream master branch.

[1] https://github.com/nxp-imx/uboot-imx/tree/lf-6.6.52-2.2.0
    commit 6c4545203d12 ("LF-13928 update key for capsule")

The time spent in usb_init() ("usb start" command) is reported on
the console. Here are the results:

        | CONFIG_UTHREAD=n | CONFIG_UTHREAD=y
--------+------------------+-----------------
QEMU    |          5628 ms |          2212 ms
i.MX93  |          4591 ms |          2441 ms

Signed-off-by: Jerome Forissier <jerome.forissier@linaro.org>
2025-04-23 13:19:44 -06:00
..
dwc2.c Restore patch series "arm: dts: am62-beagleplay: Fix Beagleplay Ethernet" 2024-05-20 13:35:03 -06:00
dwc2.h usb: dwc2: Fix the write to W1C fields in HPRT register 2023-06-21 13:15:58 +02: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 Restore patch series "arm: dts: am62-beagleplay: Fix Beagleplay Ethernet" 2024-05-20 13:35:03 -06:00
ehci-atmel.c Restore patch series "arm: dts: am62-beagleplay: Fix Beagleplay Ethernet" 2024-05-20 13:35:03 -06:00
ehci-exynos.c Restore patch series "arm: dts: am62-beagleplay: Fix Beagleplay Ethernet" 2024-05-20 13:35:03 -06:00
ehci-fsl.c Restore patch series "arm: dts: am62-beagleplay: Fix Beagleplay Ethernet" 2024-05-20 13:35:03 -06:00
ehci-generic.c phy: Extend generic_setup_phy() with PHY mode and submode 2024-09-09 17:18:04 +02:00
ehci-hcd.c Restore patch series "arm: dts: am62-beagleplay: Fix Beagleplay Ethernet" 2024-05-20 13:35:03 -06:00
ehci-marvell.c Restore patch series "arm: dts: am62-beagleplay: Fix Beagleplay Ethernet" 2024-05-20 13:35:03 -06:00
ehci-msm.c phy: Extend generic_setup_phy() with PHY mode and submode 2024-09-09 17:18:04 +02:00
ehci-mx5.c usb: ehci-mx5: Use regulator_set_enable_if_allowed 2025-01-09 21:09:05 +01:00
ehci-mx6.c usb: ehci-mx6: Use regulator_set_enable_if_allowed 2025-01-09 21:09:05 +01:00
ehci-mxs.c Restore patch series "arm: dts: am62-beagleplay: Fix Beagleplay Ethernet" 2024-05-20 13:35:03 -06:00
ehci-npcm.c Restore patch series "arm: dts: am62-beagleplay: Fix Beagleplay Ethernet" 2024-05-20 13:35:03 -06:00
ehci-omap.c Restore patch series "arm: dts: am62-beagleplay: Fix Beagleplay Ethernet" 2024-05-20 13:35:03 -06:00
ehci-pci.c phy: Extend generic_setup_phy() with PHY mode and submode 2024-09-09 17:18:04 +02:00
ehci-tegra.c usb: host: tegra: get usb phy configuration from phy node 2024-10-13 17:33:39 +03:00
ehci-vf.c Restore patch series "arm: dts: am62-beagleplay: Fix Beagleplay Ethernet" 2024-05-20 13:35:03 -06:00
ehci-zynq.c Restore patch series "arm: dts: am62-beagleplay: Fix Beagleplay Ethernet" 2024-05-20 13:35:03 -06:00
ehci.h usb: ehci: Remove unused ehci_{setup,shutdown}_phy() helpers 2022-10-10 18:08:18 +02:00
Kconfig usb: dwc3: Remove dwc3 glue driver support for STi 2025-02-11 09:00:42 +01:00
Makefile Kbuild: Always use $(PHASE_) 2025-04-11 12:16:44 -06:00
ohci-at91.c Restore patch series "arm: dts: am62-beagleplay: Fix Beagleplay Ethernet" 2024-05-20 13:35:03 -06:00
ohci-da8xx.c Restore patch series "arm: dts: am62-beagleplay: Fix Beagleplay Ethernet" 2024-05-20 13:35:03 -06:00
ohci-generic.c phy: Extend generic_setup_phy() with PHY mode and submode 2024-09-09 17:18:04 +02:00
ohci-hcd.c usb: ohci-hcd: annotate switch/case fallthrough 2025-04-08 16:23:51 -06:00
ohci-lpc32xx.c i2c: Remove IC2_xxx enum 2024-08-13 06:06:02 +02:00
ohci-npcm.c Restore patch series "arm: dts: am62-beagleplay: Fix Beagleplay Ethernet" 2024-05-20 13:35:03 -06:00
ohci-pci.c Restore patch series "arm: dts: am62-beagleplay: Fix Beagleplay Ethernet" 2024-05-20 13:35:03 -06:00
ohci.h drivers: usb: Remove duplicate newlines 2024-07-22 10:53:06 -06:00
r8a66597-hcd.c Restore patch series "arm: dts: am62-beagleplay: Fix Beagleplay Ethernet" 2024-05-20 13:35:03 -06:00
r8a66597.h common: Drop linux/bitops.h from common header 2020-05-18 21:19:23 -04:00
usb_bootdev.c Restore patch series "arm: dts: am62-beagleplay: Fix Beagleplay Ethernet" 2024-05-20 13:35:03 -06:00
usb-sandbox.c usb: gadget: sandbox: Drop dm_usb_gadget_handle_interrupts() 2024-07-05 14:08:48 +02:00
usb-uclass.c dm: usb: initialize and scan multiple buses simultaneously with uthread 2025-04-23 13:19:44 -06:00
xhci-brcm.c Restore patch series "arm: dts: am62-beagleplay: Fix Beagleplay Ethernet" 2024-05-20 13:35:03 -06:00
xhci-dwc3.c Restore patch series "arm: dts: am62-beagleplay: Fix Beagleplay Ethernet" 2024-05-20 13:35:03 -06:00
xhci-exynos5.c Restore patch series "arm: dts: am62-beagleplay: Fix Beagleplay Ethernet" 2024-05-20 13:35:03 -06:00
xhci-fsl.c Restore patch series "arm: dts: am62-beagleplay: Fix Beagleplay Ethernet" 2024-05-20 13:35:03 -06:00
xhci-generic.c drivers: usb: Add generic XHCI 2024-10-27 17:24:13 -06:00
xhci-mem.c drivers: usb: Remove duplicate newlines 2024-07-22 10:53:06 -06:00
xhci-mtk.c Restore patch series "arm: dts: am62-beagleplay: Fix Beagleplay Ethernet" 2024-05-20 13:35:03 -06:00
xhci-mvebu.c Restore patch series "arm: dts: am62-beagleplay: Fix Beagleplay Ethernet" 2024-05-20 13:35:03 -06:00
xhci-omap.c Restore patch series "arm: dts: am62-beagleplay: Fix Beagleplay Ethernet" 2024-05-20 13:35:03 -06:00
xhci-pci.c Restore patch series "arm: dts: am62-beagleplay: Fix Beagleplay Ethernet" 2024-05-20 13:35:03 -06:00
xhci-rcar-r8a779x_usb3_v3.h usb: renesas: Fix R-Car spelling 2024-12-11 08:36:24 +01:00
xhci-rcar.c usb: renesas: Fix R-Car spelling 2024-12-11 08:36:24 +01:00
xhci-ring.c usb: xhci: pet watchdog during transfers 2024-10-14 22:17:17 +02:00
xhci.c usb: xhci: annotate switch/case fallthrough properly 2025-04-08 16:23:51 -06:00