Hi Jerome, On Tue, 25 Feb 2025 at 09:35, Jerome Forissier <jerome.foriss...@linaro.org> wrote: > > 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.foriss...@linaro.org> > --- > drivers/usb/host/usb-uclass.c | 92 ++++++++++++++++++++++++++++------- > test/boot/bootdev.c | 14 +++--- > test/boot/bootflow.c | 2 +- > 3 files changed, 83 insertions(+), 25 deletions(-)
What happens to output produced by a thread? Does it get stored somewhere and written when the thread completes, or do the threads intermingle their output? I'm not sure if you saw my email about using a state machine for USB. If so, could you please point me to your reply? Regards, Simon