summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSughosh Ganu <sughosh.ganu@linaro.org>2024-10-15 21:07:05 +0530
committerTom Rini <trini@konsulko.com>2024-10-15 13:45:29 -0600
commiteb052cbb896fee6f947765b44b0d80a54b19ce1a (patch)
tree9209354f80363830d4558b23f63e0f7dce889f54
parent3c6896ad2fb876b0a23202f62a83c0d44380c9ea (diff)
lmb: add and reserve memory above ram_top
U-Boot does not use memory above ram_top. However, this memory does need to get registered as part of the memory map, so that subsystems like EFI pass it on to the operating system as part of the EFI memory map. Add memory above ram_top and reserve it with the LMB_NOOVERWRITE flag so that it does not get allocated or re-used. Signed-off-by: Sughosh Ganu <sughosh.ganu@linaro.org> Suggested-by: Mark Kettenis <kettenis@openbsd.org>
-rw-r--r--lib/lmb.c19
1 files changed, 9 insertions, 10 deletions
diff --git a/lib/lmb.c b/lib/lmb.c
index e1e616679f0..0504a7b3407 100644
--- a/lib/lmb.c
+++ b/lib/lmb.c
@@ -281,7 +281,6 @@ void lmb_add_memory(void)
{
int i;
phys_size_t size;
- phys_addr_t rgn_top;
u64 ram_top = gd->ram_top;
struct bd_info *bd = gd->bd;
@@ -292,16 +291,16 @@ void lmb_add_memory(void)
for (i = 0; i < CONFIG_NR_DRAM_BANKS; i++) {
size = bd->bi_dram[i].size;
if (size) {
- if (bd->bi_dram[i].start > ram_top)
- continue;
-
- rgn_top = bd->bi_dram[i].start +
- bd->bi_dram[i].size;
-
- if (rgn_top > ram_top)
- size -= rgn_top - ram_top;
-
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_flags(bd->bi_dram[i].start, size,
+ LMB_NOOVERWRITE);
}
}
}