]> git.ipfire.org Git - thirdparty/u-boot.git/commitdiff
lmb: Reinstate access to memory above ram_top
authorMarek Vasut <marek.vasut+renesas@mailbox.org>
Tue, 27 Jan 2026 23:48:40 +0000 (00:48 +0100)
committerTom Rini <trini@konsulko.com>
Fri, 13 Mar 2026 19:20:11 +0000 (13:20 -0600)
Revert commit eb052cbb896f ("lmb: add and reserve memory above ram_top")
and commit 1a48b0be93d4 ("lmb: prohibit allocations above ram_top even from
same bank"). These are based on incorrect premise of the first commit, that
"U-Boot does not use memory above ram_top". While U-Boot itself indeed does
not and should not use memory above ram_top, user can perfectly well use
that memory from the U-Boot shell, for example to load content in there.

Currently, attempt to use that memory to load large image using TFTP ends
with "TFTP error: trying to overwrite reserved memory...". With this change
in place, the memory can be used again.

Fixes: eb052cbb896f ("lmb: add and reserve memory above ram_top")
Fixes: 1a48b0be93d4 ("lmb: prohibit allocations above ram_top even from same bank")
Reported-by: Yuya Hamamachi <yuya.hamamachi.sx@renesas.com>
Signed-off-by: Marek Vasut <marek.vasut+renesas@mailbox.org>
lib/lmb.c

index e2d9fe86c14e05c5dffa21ad54d088ecd5c11c73..8f12c6ad8e595c39ab061fb27a4c4f2f55f23198 100644 (file)
--- a/lib/lmb.c
+++ b/lib/lmb.c
@@ -611,7 +611,6 @@ static __maybe_unused void lmb_reserve_common_spl(void)
 static 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;
@@ -625,23 +624,9 @@ static 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) {
+               if (size)
                        lmb_add(bd->bi_dram[i].start, size);
-
-                       /*
-                        * Reserve memory above ram_top as
-                        * no-overwrite so that it cannot be
-                        * allocated
-                        */
-                       if (bd->bi_dram[i].start >= ram_top)
-                               lmb_reserve(bd->bi_dram[i].start, size,
-                                           LMB_NOOVERWRITE);
-                       else if (bank_end > ram_top)
-                               lmb_reserve(ram_top, bank_end - ram_top,
-                                           LMB_NOOVERWRITE);
-               }
        }
 }