Message ID | 20110426123746.GC3755@atomide.com |
---|---|
State | New |
Headers | show |
* Nicolas Pitre <nicolas.pitre@linaro.org> [110426 14:28]: > On Tue, 26 Apr 2011, Tony Lindgren wrote: > > > Otherwise cache_clean_flush can overwrite some of the relocated > > area depending on where the kernel image gets loaded. This fixes > > booting on n900 after commit 6d7d0ae51574943bf571d269da3243257a2d15db > > (ARM: 6750/1: improvements to compressed/head.S). > > Gaaaah. Indeed. > > > Thanks to Aaro Koskinen <aaro.koskinen@nokia.com> for debugging > > the address of the relocated area that gets corrupted, and to > > Nicolas Pitre <nicolas.pitre@linaro.org> for the other uncompress > > related fixes. > > > > Signed-off-by: Tony Lindgren <tony@atomide.com> > > I think there could be a better fix yet. Could you test this patch: Cool that works too and avoids using the stack, so that's a better fix: Tested-by: Tony Lindgren <tony@atomide.com>
--- a/arch/arm/boot/compressed/head.S +++ b/arch/arm/boot/compressed/head.S @@ -253,6 +253,15 @@ restart: adr r0, LC0 /* Preserve offset to relocated code. */ sub r6, r9, r6 +#ifndef CONFIG_ZBOOT_ROM + /* + * Fix sp to use the relocated address in case old sp is + * within the relocated area. Otherwise cache_clean_flush + * will trash some of the relocated area. + */ + add sp, r6 +#endif + bl cache_clean_flush adr r0, BSYM(restart)
Otherwise cache_clean_flush can overwrite some of the relocated area depending on where the kernel image gets loaded. This fixes booting on n900 after commit 6d7d0ae51574943bf571d269da3243257a2d15db (ARM: 6750/1: improvements to compressed/head.S). Thanks to Aaro Koskinen <aaro.koskinen@nokia.com> for debugging the address of the relocated area that gets corrupted, and to Nicolas Pitre <nicolas.pitre@linaro.org> for the other uncompress related fixes. Signed-off-by: Tony Lindgren <tony@atomide.com> --- I think this is the right fix.. And we don't want to mess with the ZBOOT_ROM sp address, right?