[U-Boot] [PATCH 5/6] usb: Don't reset the USB hub a 2nd time
Stefan Roese
sr at denx.de
Thu Mar 10 16:50:11 CET 2016
Debugging has shown, that all USB hubs are being resetted twice while
USB scanning. This introduces additional delays and makes USB scanning
even more slow. Testing has shown that this 2nd USB hub reset doesn't
seem to be necessary.
This patch now removes this 2nd USB hub reset if CONFIG_USB_FAST_SCAN
is defined. Resulting in faster USB scan time. Here the current
number:
Without this patch:
=> time usb start
starting USB...
USB0: USB EHCI 1.00
scanning bus 0 for devices... 9 USB Device(s) found
time: 6.319 seconds
With this patch:
=> time usb start
starting USB...
USB0: USB EHCI 1.00
scanning bus 0 for devices... 9 USB Device(s) found
time: 3.777 seconds
So ~2.5 seconds of USB scanning time reduction.
Again, this 2nd reset 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 2nd reset 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.c | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/common/usb.c b/common/usb.c
index c7b8b0e..b96a2f6 100644
--- a/common/usb.c
+++ b/common/usb.c
@@ -920,6 +920,11 @@ __weak int usb_alloc_device(struct usb_device *udev)
static int usb_hub_port_reset(struct usb_device *dev, struct usb_device *hub)
{
if (hub) {
+#if !defined(CONFIG_USB_FAST_SCAN)
+ /*
+ * Is this 2nd hub port reset necessary? The port has already
+ * been reset in usb_hub_port_connect_change() before.
+ */
unsigned short portstatus;
int err;
@@ -929,6 +934,7 @@ static int usb_hub_port_reset(struct usb_device *dev, struct usb_device *hub)
printf("\n Couldn't reset port %i\n", dev->portnr);
return err;
}
+#endif
} else {
usb_reset_root_port(dev);
}
--
2.7.2
More information about the U-Boot
mailing list