ehci-hcd.c: fix hanging under higher load
authorWolfgang Denk <wd@denx.de>
Fri, 22 Oct 2010 12:23:00 +0000 (14:23 +0200)
committerRemy Bohmer <linux@bohmer.net>
Fri, 22 Oct 2010 19:44:37 +0000 (21:44 +0200)
commit09c83a45b797aefbb41115af1b348494740460ce
tree692a20c5fac0656e75ce236e0e3a1a2bf0de60e9
parent2ff12285426b02dd7e13f2cb2fda53800dce741c
ehci-hcd.c: fix hanging under higher load

This patch solves a problem with USB hanging under higher load on a
i.MX31 board.  It falls into class of typical USB problems and fixes:
if you don't understand the real cause, add a delay somewhere.

The problem appeared after introduction of ELF relocation, which
results in smaller code, which appears to run faster (probably because
it fits better in the cache); turning off the instruction cache,
adding debug printf()s and increasing the delay have all been found to
make the problem go away.

Moving the original "udelay(1)" up in the code to it's new place made
the problem appear much less frequently. Increasing the delay to 2
microseconds then made the code run reliably in all (hour-long) tests.
To be on the safe side, we set it to 5 microseconds here.

Signed-off-by: Heiko schocher <hs@denx.de>
Signed-off-by: Wolfgang Denk <wd@denx.de>
Cc: Remy Bohmer <linux@bohmer.net>
Cc: Stefano Babic <sbabic@denx.de>
drivers/usb/host/ehci-hcd.c