summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHolger Brunck <holger.brunck@hitachienergy.com>2025-07-14 13:16:51 +0200
committerTom Rini <trini@konsulko.com>2025-07-22 11:29:31 -0600
commit01548afc43770020cfebecc4a62cfa0d8b05517e (patch)
tree90e6bc44a12a8fe015be0631b34532cffeb3ab1e
parent50ef42c94858b3fa60f88ce56b767c721955804c (diff)
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>
-rw-r--r--lib/lmb.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/lib/lmb.c b/lib/lmb.c
index e5a0677e3f9..e3a1761e6d1 100644
--- a/lib/lmb.c
+++ b/lib/lmb.c
@@ -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,