[U-Boot] Modify go to allow chain loading a second u-boot

Rob Herring robherring2 at gmail.com
Thu Apr 10 01:41:00 CEST 2014


On Thu, Apr 3, 2014 at 4:40 AM, Helmut Raiger <helmut.raiger at hale.at> wrote:
> Hi,
>
>   for all the wrong reasons I have to load a second u-boot from a first one.

FYI, I can do this without problems on highbank. It's certainly useful
for development.

> I'm finally able to start it, but it only works if I do a
> cleanup_before_linux(),
> i.e. turn off interrupts and caches before the actual 'go'.

Most platforms (at least on ARM) don't enable interrupts, so your
problem is probably the cache. Loaded data (2nd u-boot) goes into the
d-cache and needs to be flushed to be in sync with the i-cache on
Harvard architecture processors. It works for me since the d-cache is
not enabled in u-boot on highbank (and all the init code is safe to
run twice).

> For testing I patched the go command, but obviously this can't be
> contributed as such.
>
> Anyone having a suggestion on how to do this?

The go command should have a defined state with respect to caches as
to how programs are entered. Loading code and jumping to it without
any cache maintenance is simply broken. Fix the go command. If an
architecture does not need a cache flush, then it should simply be a
nop.

Rob


More information about the U-Boot mailing list