[U-Boot] [PATCH 3/6] usb: Remove 1 second per port timeout in usb_hub_configure()
Stefan Roese
sr at denx.de
Thu Mar 10 16:50:09 CET 2016
On complex USB infrastructures, with many hubs and therefore many
(perhaps unconnected) ports, current U-Boot has a very long USB scanning
time. On my current custom x86 board, this time is over 20 seconds!!!
One of the biggest problems here is a 1 second delay (timeout) in
usb_hub_configure() to check, if a USB device is connected to a
port. As this is done for each port, this timeout sums up over
all unconnected ports.
This patch removes this 1 seconds per port timeout from
usb_hub_configure(). All my USB devices are still detected correctly
on my platform. And I'm using 4 different USB keys right now.
Including a problematic "Intenso Alu Line" key.
Here the numbers for my current board:
Without this patch:
starting USB...
USB0: USB EHCI 1.00
scanning bus 0 for devices... 9 USB Device(s) found
time: 24.811 seconds
With this patch:
starting USB...
USB0: USB EHCI 1.00
scanning bus 0 for devices... 9 USB Device(s) found
time: 10.822 seconds
So ~14 seconds of USB scanning time reduction.
Again, this timeout is only removed if CONFIG_USB_FAST_SCAN is
defined. Once more tests are done on multiple other platforms we
can decide to remove this timeout completely.
Signed-off-by: Stefan Roese <sr at denx.de>
Cc: Simon Glass <sjg at chromium.org>
Cc: Hans de Goede <hdegoede at redhat.com>
Cc: Stephen Warren <swarren at nvidia.com>
Cc: Marek Vasut <marex at denx.de>
---
common/usb_hub.c | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/common/usb_hub.c b/common/usb_hub.c
index 660f4f4..780291f 100644
--- a/common/usb_hub.c
+++ b/common/usb_hub.c
@@ -478,7 +478,11 @@ static int usb_hub_configure(struct usb_device *dev)
unsigned short portstatus, portchange;
int ret;
ulong start = get_timer(0);
+#if defined(CONFIG_USB_FAST_SCAN)
+ uint delay = 0;
+#else
uint delay = CONFIG_SYS_HZ;
+#endif
#ifdef CONFIG_SANDBOX
if (state_get_skip_delays())
--
2.7.2
More information about the U-Boot
mailing list