[U-Boot] [PATCH v5 0/4] usb: Reduce USB scanning time
Simon Glass
sjg at chromium.org
Wed Mar 16 04:32:34 CET 2016
Hi Stefan,
On 15 March 2016 at 13:53, Marek Vasut <marex at denx.de> wrote:
> On 03/15/2016 01:59 PM, Stefan Roese wrote:
>> My current x86 platform (Bay Trail, not in mainline yet) has a quite
>> complex USB infrastructure with many USB hubs. Here the USB scan takes
>> an incredible huge amount of time:
>>
>> starting USB...
>> USB0: USB EHCI 1.00
>> scanning bus 0 for devices... 9 USB Device(s) found
>>
>> time: 28.415 seconds
>>
>> This is of course not acceptable on platforms, where USB needs to get
>> scanned at every bootup. As this increases the bootup time of this
>> device by nearly 30 seconds!
>>
That is truly amazing - nice work!
>> This patch series greatly reduces the USB scanning time. This is done
>> by multiple means:
>>
>> - Remove or reduce delays and timeouts
>> - Remove a 2nd reset of the USB hubs
>> - Change USB port timeout handling and introduce quasi parallel USB
>> port scanning
>>
>> As a result, the USB scanning time is greatly reduced:
>>
>> starting USB...
>> USB0: USB EHCI 1.00
>> scanning bus 0 for devices... 9 USB Device(s) found
>>
>> time: 1.822 seconds
>>
>> As you can see, the time is reduced from 28.4 to 1.8 seconds!
>>
>> Please find more details to the changes in the patch description.
>>
>> Testing and comments welcome!
>>
>> Thanks,
>> Stefan
>>
>> Changes in v5:
>> - Removed superfluous debug output from usb_scan_port()
>> - Replaced usb_hub_power_on() with usb_set_port_feature() in case
>> of overcurrent detection. This is whats really needed here.
>> - Added a per-port overcurrent counter and stop re-scanning of
>> a device that exceeds the PORT_OVERCURRENT_MAX_SCAN_COUNT
>> - Moved list_del() to end of loop in usb_scan_port()
>> - Moved timeout / delay variables from USB dev to hub struct
>> as they are hub specific
>> - Moved state_get_skip_delays() to usb_hub_power_on() so that
>> the timeouts are not set there
>>
>> Changes in v4:
>> - Minor rewording / fixes of the commit text
>> - Add Acked-by / Tested-by from Hans and Stephen
>> - Minor rewording / fixes of the commit text
>> - Add Acked-by from Hans
>> - Moved check for query_delay into usb_scan_port() as suggested by Hans
>> - Correct list handling (drop INIT_LIST_HEAD)
>> - Added some missing free() calls
>> - Changed connect_timeout calculation as suggested by Stephen
>> - Moved usb_scan_list to other globals to be cleaned up in a later patch
>> - Added timeout check for non-functional ports (usb_get_port_status
>> return error
>> - Reverted if logic in loop to remove an indentation level
>> - Moved debug() output
>> - Removed unnecessary if when already connected
>> - Added Hans's Acked-by
>> - Added Stephen's Tested-by
>> - Minor rewording / fixes of the commit text
>>
>> Changes in v3:
>> - Changed small timeout from 10ms to 20ms as this results in a
>> much faster USB scanning time (10ms too small and 20ms enough
>> in many cases)
>> - Introduced scanning list containing all USB devices of one USB
>> controller that need to get scanned
>> - Don't delay in usb_hub_power_on(). Instead skip querying these devices
>> until the delay time is reached.
>>
>> Changes in v2:
>> - Add Acked-by / Tested-by from Hans and Stephen
>> - Make this change unconditional
>> - Add Acked-by / Tested-by from Hans and Stephen
>> - Make this change unconditional
>> - Add Tested-by from Stephen
>> - Remove static USB port configuration patch (for now)
>>
>> Stefan Roese (4):
>> usb: legacy_hub_port_reset(): Speedup hub reset handling
>> usb: Remove 200 ms delay in usb_hub_port_connect_change()
>> usb: Don't reset the USB hub a 2nd time
>> usb: Change power-on / scanning timeout handling
>>
>> common/usb.c | 13 +--
>> common/usb_hub.c | 329 ++++++++++++++++++++++++++++++++++++++-----------------
>> include/usb.h | 4 +
>> 3 files changed, 235 insertions(+), 111 deletions(-)
>>
> Applied to u-boot-usb/master , thanks!
>
> --
> Best regards,
> Marek Vasut
Regards,
Simon
More information about the U-Boot
mailing list