[PATCH v2 14/32] lmb: introduce a function to add memory to the lmb memory map

Sughosh Ganu sughosh.ganu at linaro.org
Tue Aug 20 10:17:06 CEST 2024


On Fri, 16 Aug 2024 at 02:04, Simon Glass <sjg at chromium.org> wrote:
>
> Hi Sughosh,
>
> On Wed, 14 Aug 2024 at 12:01, Sughosh Ganu <sughosh.ganu at 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 at 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 at 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


More information about the U-Boot mailing list