mirror of
https://github.com/Fishwaldo/u-boot.git
synced 2025-03-19 05:31:32 +00:00
arm: bootm: fix sp detection at end of address range
This fixes 'arch_lmb_reserve()' for ARM that tries to detect in which
DRAM bank 'sp' is in.
This code failed if a bank was at the end of physical address range
(i.e. size + length overflowed to 0).
To fix this, calculate 'bank_end' as 'size + length - 1' so that such
banks end at 0xffffffff, not 0.
Fixes: 15751403b6
("ARM: bootm: don't assume sp is in DRAM bank 0")
Reported-by: Frank Wunderlich <frank-w@public-files.de>
Signed-off-by: Simon Goldschmidt <simon.k.r.goldschmidt@gmail.com>
Reviewed-by: Stephen Warren <swarren@nvidia.com>
This commit is contained in:
parent
a156c47e39
commit
f8878da557
1 changed files with 6 additions and 4 deletions
|
@ -64,13 +64,15 @@ void arch_lmb_reserve(struct lmb *lmb)
|
||||||
/* adjust sp by 4K to be safe */
|
/* adjust sp by 4K to be safe */
|
||||||
sp -= 4096;
|
sp -= 4096;
|
||||||
for (bank = 0; bank < CONFIG_NR_DRAM_BANKS; bank++) {
|
for (bank = 0; bank < CONFIG_NR_DRAM_BANKS; bank++) {
|
||||||
if (sp < gd->bd->bi_dram[bank].start)
|
if (!gd->bd->bi_dram[bank].size ||
|
||||||
|
sp < gd->bd->bi_dram[bank].start)
|
||||||
continue;
|
continue;
|
||||||
|
/* Watch out for RAM at end of address space! */
|
||||||
bank_end = gd->bd->bi_dram[bank].start +
|
bank_end = gd->bd->bi_dram[bank].start +
|
||||||
gd->bd->bi_dram[bank].size;
|
gd->bd->bi_dram[bank].size - 1;
|
||||||
if (sp >= bank_end)
|
if (sp > bank_end)
|
||||||
continue;
|
continue;
|
||||||
lmb_reserve(lmb, sp, bank_end - sp);
|
lmb_reserve(lmb, sp, bank_end - sp + 1);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue