arm: fix lmb region reservation when PRAM is defined

PRAM usage is not taken into account when reserving lmb for ARM
architecture, this means that predefined PRAM region is marked as
reserved by the architecture and cannot be used by other users.

Signed-off-by: Holger Brunck <holger.brunck@hitachienergy.com>
This commit is contained in:
Holger Brunck
2025-07-14 13:16:51 +02:00
committed by Tom Rini
parent 50ef42c948
commit 01548afc43

View File

@@ -8,6 +8,7 @@
#include <alist.h>
#include <efi_loader.h>
#include <env.h>
#include <event.h>
#include <image.h>
#include <mapmem.h>
@@ -538,6 +539,7 @@ static void lmb_reserve_uboot_region(void)
int bank;
ulong end, bank_end;
phys_addr_t rsv_start;
ulong pram = 0;
rsv_start = gd->start_addr_sp - CONFIG_STACK_SIZE;
end = gd->ram_top;
@@ -548,6 +550,11 @@ static void lmb_reserve_uboot_region(void)
*/
debug("## Current stack ends at 0x%08lx ", (ulong)rsv_start);
#ifdef CFG_PRAM
pram = env_get_ulong("pram", 10, CFG_PRAM);
pram = pram << 10; /* size is in kB */
#endif
for (bank = 0; bank < CONFIG_NR_DRAM_BANKS; bank++) {
if (!gd->bd->bi_dram[bank].size ||
rsv_start < gd->bd->bi_dram[bank].start)
@@ -560,7 +567,8 @@ static void lmb_reserve_uboot_region(void)
if (bank_end > end)
bank_end = end - 1;
lmb_reserve(rsv_start, bank_end - rsv_start + 1, LMB_NOOVERWRITE);
lmb_reserve(rsv_start, bank_end - rsv_start - pram + 1,
LMB_NOOVERWRITE);
if (gd->flags & GD_FLG_SKIP_RELOC)
lmb_reserve((phys_addr_t)(uintptr_t)_start,