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

Joakim Tjernlund joakim.tjernlund at transmode.se
Thu Oct 21 00:20:10 CEST 2010


> 
> Dear Albert ARIBAUD,
> 
> In message <4CBF4D17.6020403 at free.fr> you wrote:
> >
> > Is the data cache on or off when you experience the issue? If it was 
on,
> 
> DC is always off.  DC on has always casued problems with lots of
> drivers, including USB, so we never attempted doing that (except for
> verification that it indeed does cause problems).
> 
> > can you try with data cache off and instruction cache on?
> 
> Done. The situation was IC off/DC off versus IC on/DC off.
> 
> > If the issue arises when both caches are on, then *maybe* the issue is
> > caused by code which was loaded into i-cache *before* it was fixed up,
> > or loaded while its fixups were still in the data cache. However this
> > does not explain everything, since even with instruction cache off, 
data
> > cache can hold fixups for some time and thus non-cached instruction
> > fetches could return the wrong code.
> 
> As mentioned, DC has always been off.
> 
> > Still, since ELF fixups are some sort of code self-modification, they
> > must, according to the ARM doc, be followed by an IMB sequence. The
> > exact sequence varies; I will look up and provide the sequence for
> > ARM1136 tomorrow -- unless someone else can do it sooner, of course.
> 
> Thanks.

Yes, if ARM is anything like ppc you must invalidate the icache line that 
maps the to
modified text. Otherwise you will keep using the old code.

 Jocke


More information about the U-Boot mailing list