Message ID | 1340891651-17618-2-git-send-email-robherring2@gmail.com |
---|---|
State | Accepted |
Delegated to: | Albert ARIBAUD |
Headers | show |
Albert, On 06/28/2012 08:54 AM, Rob Herring wrote: > From: Rob Herring <rob.herring@calxeda.com> > > The bootm initrd image copy to ram can collide with the stack in cases > where the print buffer size is large (i.e. 1K). The result is intermittent > initrd decompression errors depending on the initrd size MOD 4KB since > the initrd start address is 4KB aligned. > > Cc: Albert ARIBAUD <albert.u.boot@aribaud.net> > Signed-off-by: Rob Herring <rob.herring@calxeda.com> > --- Can you please apply this fix. I've seen other issues posted that appear to be the same cause and this same issue was fixed on PPC ~2 years ago. Rob > arch/arm/lib/bootm.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/arch/arm/lib/bootm.c b/arch/arm/lib/bootm.c > index 599547d..999f201 100644 > --- a/arch/arm/lib/bootm.c > +++ b/arch/arm/lib/bootm.c > @@ -69,8 +69,8 @@ void arch_lmb_reserve(struct lmb *lmb) > sp = get_sp(); > debug("## Current stack ends at 0x%08lx ", sp); > > - /* adjust sp by 1K to be safe */ > - sp -= 1024; > + /* adjust sp by 4K to be safe */ > + sp -= 4096; > lmb_reserve(lmb, sp, > gd->bd->bi_dram[0].start + gd->bd->bi_dram[0].size - sp); > } >
Hi Rob, On Thu, 28 Jun 2012 08:54:11 -0500, Rob Herring <robherring2@gmail.com> wrote: > From: Rob Herring <rob.herring@calxeda.com> > > The bootm initrd image copy to ram can collide with the stack in cases > where the print buffer size is large (i.e. 1K). The result is intermittent > initrd decompression errors depending on the initrd size MOD 4KB since > the initrd start address is 4KB aligned. > > Cc: Albert ARIBAUD <albert.u.boot@aribaud.net> > Signed-off-by: Rob Herring <rob.herring@calxeda.com> > --- > arch/arm/lib/bootm.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/arch/arm/lib/bootm.c b/arch/arm/lib/bootm.c > index 599547d..999f201 100644 > --- a/arch/arm/lib/bootm.c > +++ b/arch/arm/lib/bootm.c > @@ -69,8 +69,8 @@ void arch_lmb_reserve(struct lmb *lmb) > sp = get_sp(); > debug("## Current stack ends at 0x%08lx ", sp); > > - /* adjust sp by 1K to be safe */ > - sp -= 1024; > + /* adjust sp by 4K to be safe */ > + sp -= 4096; > lmb_reserve(lmb, sp, > gd->bd->bi_dram[0].start + gd->bd->bi_dram[0].size - sp); > } Applied to u-boot-arm/master, thanks! Amicalement,
diff --git a/arch/arm/lib/bootm.c b/arch/arm/lib/bootm.c index 599547d..999f201 100644 --- a/arch/arm/lib/bootm.c +++ b/arch/arm/lib/bootm.c @@ -69,8 +69,8 @@ void arch_lmb_reserve(struct lmb *lmb) sp = get_sp(); debug("## Current stack ends at 0x%08lx ", sp); - /* adjust sp by 1K to be safe */ - sp -= 1024; + /* adjust sp by 4K to be safe */ + sp -= 4096; lmb_reserve(lmb, sp, gd->bd->bi_dram[0].start + gd->bd->bi_dram[0].size - sp); }