usb: Reduce USB scanning time
Get series with b4
b4 am [email protected]Versions newest first
- v5 Latest2 of 4 patches 0 repliesNew
2 of 4 patches are in this archive. The cover letter announces 4.
Patches in v5 No applies recorded yet
| # | Subject and files | Size | Replies | Applied |
|---|---|---|---|---|
| 4/4 | usb: Change power-on / scanning timeout handling | +0 | 1 reply | |
| 4/4 | usb: Change power-on / scanning timeout handling | +0 | 1 reply |
Reviews trailers per patch
No Reviewed-by, Acked-by or Tested-by trailers for v5 yet.
Cover letter [U-Boot] [PATCH v5 0/4] usb: Reduce USB scanning time
Quoted 93 lines · Stefan Roese
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) foundtime: 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 scanningAs 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) foundtime: 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,
StefanChanges in v5:
- Removed superfluous debug output fromusb_scan_port()
- Replacedusb_hub_power_on()withusb_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 thePORT_OVERCURRENT_MAX_SCAN_COUNT
- Movedlist_del()to end of loop inusb_scan_port()
- Moved timeout / delay variables from USB dev to hub struct as they are hub specific
- Movedstate_get_skip_delays()tousb_hub_power_on()so that the timeouts are not set thereChanges 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 forquery_delayintousb_scan_port()as suggested by Hans
- Correct list handling (dropINIT_LIST_HEAD)
- Added some missingfree()calls
- Changedconnect_timeoutcalculation as suggested by Stephen
- Movedusb_scan_listto other globals to be cleaned up in a later patch
- Added timeout check for non-functional ports (usb_get_port_statusreturn error
- Reverted if logic in loop to remove an indentation level
- Moveddebug()output
- Removed unnecessary if when already connected
- Added Hans's Acked-by
- Added Stephen's Tested-by
- Minor rewording / fixes of the commit textChanges 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 inusb_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 inusb_hub_port_connect_change()
usb: Don't reset the USB hub a 2nd time
usb: Change power-on / scanning timeout handling
Quoted 5 lines
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!
Signature · 2 lines
Best regards, Marek Vasut