
On Fri, 16 Aug 2024 at 02:04, Simon Glass sjg@chromium.org wrote:
Hi Sughosh,
On Wed, 14 Aug 2024 at 12:01, Sughosh Ganu sughosh.ganu@linaro.org wrote:
Introduce a function lmb_add_memory() to add available memory to the LMB memory map. Call this function during board init once the LMB data structures have been initialised.
Signed-off-by: Sughosh Ganu sughosh.ganu@linaro.org
Changes since V1:
- Call the lmb_add_memory() from lmb_init() instead of lmb_mem_regions_init().
include/lmb.h | 10 ++++++++++ lib/lmb.c | 42 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 52 insertions(+)
Reviewed-by: Simon Glass sjg@chromium.org
But this should not be weak.
This is being made weak, as there would be lmb_add_memory() definitions added for powerpc and x86 arch's in the EFI part of my patches. Moreover, the lmb_add_memory() function would be called even in the SPL stage when LMB is enabled for that stage. So I am not sure how do we get around this. You can check the relevant branch [1] on my github to check for the specific commits [2][3] that I am referring to. Thanks.
-sughosh
[1] - https://github.com/sughoshg/u-boot/tree/lmb_efi_sep_apis_nrfc_next_v3 [2] - https://github.com/u-boot/u-boot/commit/077ced7aaa6d495b1b87b324fb1c60658c20... [3] - https://github.com/u-boot/u-boot/commit/d0fa3a89865b796f3bbebffebbe4f7b5b048...
diff --git a/include/lmb.h b/include/lmb.h index f6b2a81546..a82ea63d6c 100644 --- a/include/lmb.h +++ b/include/lmb.h @@ -63,6 +63,16 @@ struct lmb { */ int lmb_init(void);
+/**
- lmb_add_memory() - Add memory range for LMB allocations
- Add the entire available memory range to the pool of memory that
- can be used by the LMB module for allocations.
- Return: None
- */
+void lmb_add_memory(void);
long lmb_add(phys_addr_t base, phys_size_t size); long lmb_reserve(phys_addr_t base, phys_size_t size); /** diff --git a/lib/lmb.c b/lib/lmb.c index 3ccee26a46..f35a94c41b 100644 --- a/lib/lmb.c +++ b/lib/lmb.c @@ -225,6 +225,46 @@ static void lmb_reserve_common(void *fdt_blob) efi_lmb_reserve(); }
+/**
- lmb_add_memory() - Add memory range for LMB allocations
- Add the entire available memory range to the pool of memory that
- can be used by the LMB module for allocations.
- This can be overridden for specific boards/architectures.
- Return: None
- */
+__weak 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;
/* Assume a 4GB ram_top if not defined */
if (!ram_top)
ram_top = 0x100000000ULL;
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);
}
}
+}
static long lmb_resize_regions(struct alist *lmb_rgn_lst, unsigned long idx_start, phys_addr_t base, phys_size_t size) @@ -674,5 +714,7 @@ int lmb_init(void) return ret; }
lmb_add_memory();
return 0;
}
2.34.1
Regards, Simon