[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