summaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorStefan Roese <sr@denx.de>2016-03-15 13:59:15 +0100
committerMarek Vasut <marex@denx.de>2016-03-20 18:00:45 +0100
commitc998da0d67091f800933e59b8693913764a9e8f4 (patch)
tree97aed8c40e4b927b3fbba763dcf3053cdf998fcc /include
parent3ed9eb93c2c7d8e09ac0b5a047f58c3aae201516 (diff)
downloadtalos-obmc-uboot-c998da0d67091f800933e59b8693913764a9e8f4.tar.gz
talos-obmc-uboot-c998da0d67091f800933e59b8693913764a9e8f4.zip
usb: Change power-on / scanning timeout handling
This patch changes the USB port scanning procedure and timeout handling in the following ways: a) The power-on delay in usb_hub_power_on() is now reduced to a value of max(100ms, "hub->desc.bPwrOn2PwrGood * 2"). The code does not wait using mdelay, instead usb_hub_power_on() will wait before querying the device in the scanning loop later. The total timeout for this hub, which is 1 second + "hub->desc.bPwrOn2PwrGood * 2" is calculated and will be used in the following per-port scanning loop as the timeout to detect active USB devices on this hub. b) Don't delay the minimum delay (for power to stabilize) in usb_hub_power_on(). Instead skip querying these devices in the scannig loop until the delay time is reached. c) The ports are now scanned in a quasi parallel way. The current code did wait for each (unconnected) port to reach its timeout and only then continue with the next port. This patch now changes this to scan all ports of all USB hubs quasi simultaneously. For this, all ports are added to a scanning list. This list is scanned until all ports are ready by either a) reaching the connection timeout (calculated earlier), or by b) detecting a USB device. This results in a faster USB scan time as the recursive scanning of USB hubs connected to the hub that's currently being scanned will start earlier. One small functional change to the original code is, that ports with overcurrent detection will now get rescanned multiple times (PORT_OVERCURRENT_MAX_SCAN_COUNT). Without this patch: starting USB... USB0: USB EHCI 1.00 scanning bus 0 for devices... 9 USB Device(s) found time: 20.163 seconds With this patch: starting USB... USB0: USB EHCI 1.00 scanning bus 0 for devices... 9 USB Device(s) found time: 1.822 seconds So ~18.3 seconds of USB scanning time reduction. Signed-off-by: Stefan Roese <sr@denx.de> Acked-by: Hans de Goede <hdegoede@redhat.com> Tested-by: Stephen Warren <swarren@nvidia.com>
Diffstat (limited to 'include')
-rw-r--r--include/usb.h4
1 files changed, 4 insertions, 0 deletions
diff --git a/include/usb.h b/include/usb.h
index c2fa6849f1..19411258ec 100644
--- a/include/usb.h
+++ b/include/usb.h
@@ -556,6 +556,10 @@ struct usb_hub_descriptor {
struct usb_hub_device {
struct usb_device *pusb_dev;
struct usb_hub_descriptor desc;
+
+ ulong connect_timeout; /* Device connection timeout in ms */
+ ulong query_delay; /* Device query delay in ms */
+ int overcurrent_count[USB_MAXCHILDREN]; /* Over-current counter */
};
#ifdef CONFIG_DM_USB
OpenPOWER on IntegriCloud