On Fri, 16 Aug 2024 at 02:04, Simon Glass <s...@chromium.org> wrote: > > Hi Sughosh, > > On Wed, 14 Aug 2024 at 12:01, Sughosh Ganu <sughosh.g...@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.g...@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 <s...@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/077ced7aaa6d495b1b87b324fb1c60658c203ce1 [3] - https://github.com/u-boot/u-boot/commit/d0fa3a89865b796f3bbebffebbe4f7b5b048c140 > > > 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