
Hello all,
In message 20101020184930.E89F7136320@gemini.denx.de I wrote:
after nailing down a few USB and FAT related bugs we had USB running stable on i.MX31, but suddenly the current mainline code behaves strangely again:
Repeating simple calls like "usb read 80800000 0 1000" will reliably hard hang the system after 3...5 calls.
The problem can be avoided by switching off the instruction cache (using the "icache off" command).
Trying to track down this problem it turns out that somehow the ELF_RELOC patches seem to be responsible for it. I have a source tree that works perfectly fine, with I-caches on, and after cherry-picking the following commits from the elf_reloc branch the problem appears:
92d5ecb 2010-10-13 10:10:21 arm: implement ELF relocations bafe743 2010-10-13 10:12:52 arm1136, qong: add support for ELF relocations
Thanks to everybody who spent time and efforts looking into this.
I think we halve solved (wel, actually worked around) the problem; the solution is (like so often) adding / increasing a delay in the USB code.
I think the ELF relocations only triggered the problem because they resulted in smaller code which (most probably) also executes a bit faster - and the difference was enough to trigger the problem.
After increasing a delay in the USB code, I see no indications whatever that the ELF relocation cod emight be to blame for the issues we observed.
Best regards,
Wolfgang Denk