Hi Stefan, On 15 March 2016 at 13:53, Marek Vasut <ma...@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 _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot