mirror of
https://source.denx.de/u-boot/u-boot.git
synced 2025-08-13 18:56:59 +02:00
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>
This commit is contained in:
parent
ef9574da96
commit
1a48b0be93
@ -606,6 +606,7 @@ static __maybe_unused void lmb_reserve_common_spl(void)
|
|||||||
void lmb_add_memory(void)
|
void lmb_add_memory(void)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
phys_addr_t bank_end;
|
||||||
phys_size_t size;
|
phys_size_t size;
|
||||||
u64 ram_top = gd->ram_top;
|
u64 ram_top = gd->ram_top;
|
||||||
struct bd_info *bd = gd->bd;
|
struct bd_info *bd = gd->bd;
|
||||||
@ -619,6 +620,8 @@ void lmb_add_memory(void)
|
|||||||
|
|
||||||
for (i = 0; i < CONFIG_NR_DRAM_BANKS; i++) {
|
for (i = 0; i < CONFIG_NR_DRAM_BANKS; i++) {
|
||||||
size = bd->bi_dram[i].size;
|
size = bd->bi_dram[i].size;
|
||||||
|
bank_end = bd->bi_dram[i].start + size;
|
||||||
|
|
||||||
if (size) {
|
if (size) {
|
||||||
lmb_add(bd->bi_dram[i].start, size);
|
lmb_add(bd->bi_dram[i].start, size);
|
||||||
|
|
||||||
@ -630,6 +633,9 @@ void lmb_add_memory(void)
|
|||||||
if (bd->bi_dram[i].start >= ram_top)
|
if (bd->bi_dram[i].start >= ram_top)
|
||||||
lmb_reserve_flags(bd->bi_dram[i].start, size,
|
lmb_reserve_flags(bd->bi_dram[i].start, size,
|
||||||
LMB_NOOVERWRITE);
|
LMB_NOOVERWRITE);
|
||||||
|
else if (bank_end > ram_top)
|
||||||
|
lmb_reserve_flags(ram_top, bank_end - ram_top,
|
||||||
|
LMB_NOOVERWRITE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user