Am 28. Januar 2026 00:48:40 MEZ schrieb Marek Vasut 
<[email protected]>:
>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.

IIRC there are drivers that have issues with memory above 4 GiB and boards that 
artificially set ram_top to 4 GiB to work around these issues. We need to 
carefully consider why the reverted patch was introduced.

Why does your board use a 4GiB ram_top and not place ram_top at the physical 
top?

Best regards

Heinrich

>
>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 <[email protected]>
>Signed-off-by: Marek Vasut <[email protected]>
>---
>Cc: Andrew Goodbody <[email protected]>
>Cc: Casey Connolly <[email protected]>
>Cc: Heinrich Schuchardt <[email protected]>
>Cc: Holger Brunck <[email protected]>
>Cc: Ilias Apalodimas <[email protected]>
>Cc: Jonas Karlman <[email protected]>,
>Cc: Mark Kettenis <[email protected]>
>Cc: Sam Protsenko <[email protected]>
>Cc: Sughosh Ganu <[email protected]>
>Cc: Tom Rini <[email protected]>
>Cc: [email protected]
>---
> lib/lmb.c | 17 +----------------
> 1 file changed, 1 insertion(+), 16 deletions(-)
>
>diff --git a/lib/lmb.c b/lib/lmb.c
>index e2d9fe86c14..8f12c6ad8e5 100644
>--- 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);
>-              }
>       }
> }
> 

Reply via email to