[U-Boot] [PATCH v5 0/4] usb: Reduce USB scanning time
Marek Vasut
marex at denx.de
Tue Mar 15 20:53:31 CET 2016
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!
>
> 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
More information about the U-Boot
mailing list