lmb: prohibit allocations above ram_top even from same bank
There are platforms which set the value of ram_top based on certain
restrictions that the platform might have in accessing memory above
ram_top, even when the memory region is in the same DRAM bank. So,
even though the LMB allocator works as expected, when trying to
allocate memory above ram_top, prohibit this by marking all memory
above ram_top as reserved, even if the said memory region is from the
same bank.
Signed-off-by: Sughosh Ganu <sughosh.ganu@linaro.org>
Tested-by: Andreas Schwab <schwab@suse.de>
(cherry picked from commit 1a48b0be93)
This commit is contained in:
committed by
Simon Glass
parent
d81cc609d9
commit
d3f2f8a772
@@ -603,6 +603,7 @@ static __maybe_unused void lmb_reserve_common_spl(void)
|
||||
void lmb_add_memory(void)
|
||||
{
|
||||
int i;
|
||||
phys_addr_t bank_end;
|
||||
phys_size_t size;
|
||||
u64 ram_top = gd->ram_top;
|
||||
struct bd_info *bd = gd->bd;
|
||||
@@ -616,6 +617,8 @@ void lmb_add_memory(void)
|
||||
|
||||
for (i = 0; i < CONFIG_NR_DRAM_BANKS; i++) {
|
||||
size = bd->bi_dram[i].size;
|
||||
bank_end = bd->bi_dram[i].start + size;
|
||||
|
||||
if (size) {
|
||||
lmb_add(bd->bi_dram[i].start, size);
|
||||
|
||||
@@ -627,6 +630,9 @@ void lmb_add_memory(void)
|
||||
if (bd->bi_dram[i].start >= ram_top)
|
||||
lmb_reserve_flags(bd->bi_dram[i].start, size,
|
||||
LMB_NOOVERWRITE);
|
||||
else if (bank_end > ram_top)
|
||||
lmb_reserve_flags(ram_top, bank_end - ram_top,
|
||||
LMB_NOOVERWRITE);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user