[U-Boot] ELF_RELOC causes strange I-cache issues

Wolfgang Denk wd at denx.de
Wed Oct 20 20:49:30 CEST 2010


Hello everybody,

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

However, we cannot find a real cause in the modified code.


Here my request for help:

- Has anybody experienced similar problems? 

- Did your tests of the elf_reloc code include any thorough testing
  of USB mass storage devices?

- If you have any suitable hardware around, could you please run a few
  such tests (as mentioned above, a simple "usb read <addr> 0 1000",
  repeated 5 times or so, should be sufficient. If you want to be
  sure, increase the block count and repeat more often.


All ideas welcome.  Thanks a lot in advance.

Best regards,

Wolfgang Denk

-- 
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
Anyone who isn't confused here doesn't really know what's going on.


More information about the U-Boot mailing list