libpayload: Increase USB EHCI transfer timeout
The EHCI driver defines a maximum transfer timeout of two seconds. The comments state that during tests the maximum amount of required transfer time was for the SCSI TEST_UNIT_READY command on certain devices. We have now observed a USB device (Patriot Memory 13fe:3100) that can NAK this command for slightly more than two seconds. It will also completely fail if the timeout hits, since it gets confused by the subsequent CSW retry/recovery mechanism and starts producing babble errors. This patch increases the timeout to three seconds to circumvent this problem. To test, boot a Falco from a red-black RageXT USB stick. Change-Id: I3c4fef468fb16eacc5a487d76d025a78fb450e27 Signed-off-by: Julius Werner <jwerner@chromium.org> Reviewed-on: https://gerrit.chromium.org/gerrit/63095 Reviewed-by: Aaron Durbin <adurbin@chromium.org> Reviewed-by: Duncan Laurie <dlaurie@chromium.org> Reviewed-by: Sameer Nanda <snanda@chromium.org> Reviewed-on: http://review.coreboot.org/4379 Tested-by: build bot (Jenkins) Reviewed-by: Patrick Georgi <patrick@georgi-clan.de>
This commit is contained in:
parent
68a8431fcf
commit
52e3f449ac
|
@ -279,12 +279,12 @@ static int wait_for_tds(qtd_t *head)
|
||||||
/* how long to wait?
|
/* how long to wait?
|
||||||
* tested with some USB2.0 flash sticks:
|
* tested with some USB2.0 flash sticks:
|
||||||
* TUR turn around took
|
* TUR turn around took
|
||||||
* about 2s for the slowest (14cd:121c)
|
* about 2.2s for the slowest (13fe:3800)
|
||||||
* max. 250ms for the others
|
* max. 250ms for the others
|
||||||
* slowest non-TUR turn around took about 1.3s
|
* slowest non-TUR turn around took about 1.3s
|
||||||
* try 2s for now as a failed TUR is not fatal
|
* set to 3s to be safe as a failed TUR can be fatal
|
||||||
*/
|
*/
|
||||||
int timeout = 40000; /* time out after 40000 * 50us == 2s */
|
int timeout = 60000; /* time out after 60000 * 50us == 3s */
|
||||||
while ((cur->token & QTD_ACTIVE) && !(cur->token & QTD_HALTED)
|
while ((cur->token & QTD_ACTIVE) && !(cur->token & QTD_HALTED)
|
||||||
&& timeout--)
|
&& timeout--)
|
||||||
udelay(50);
|
udelay(50);
|
||||||
|
|
Loading…
Reference in New Issue