]> git.ipfire.org Git - thirdparty/u-boot.git/commitdiff
arm: fix lmb region reservation when PRAM is defined
authorHolger Brunck <holger.brunck@hitachienergy.com>
Mon, 14 Jul 2025 11:16:51 +0000 (13:16 +0200)
committerTom Rini <trini@konsulko.com>
Tue, 22 Jul 2025 17:29:31 +0000 (11:29 -0600)
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>
lib/lmb.c

index e5a0677e3f9d26130b1d661ea572466c928bad2a..e3a1761e6d1ee1a0d5bb26f23d5ec5faf0a4d47f 100644 (file)
--- 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,