[PATCH 22/40] lmb: init: initialise the lmb data structures during board init
Sughosh Ganu
sughosh.ganu at linaro.org
Mon Jul 29 10:36:16 CEST 2024
On Fri, 26 Jul 2024 at 05:02, Simon Glass <sjg at chromium.org> wrote:
>
> Hi Sughosh,
>
> On Wed, 24 Jul 2024 at 00:04, Sughosh Ganu <sughosh.ganu at linaro.org> wrote:
> >
> > The memory map maintained by the LMB module is now persistent and
> > global. This memory map is being maintained through the alloced list
> > structure which can be extended at runtime -- there is one list for
> > the available memory, and one for the used memory. Allocate and
> > initialise these lists during the board init.
> >
> > Signed-off-by: Sughosh Ganu <sughosh.ganu at linaro.org>
> > ---
> > Changes since rfc: None
> >
> > common/board_r.c | 4 ++++
> > common/spl/spl.c | 3 +++
> > include/lmb.h | 11 +++++++++++
> > lib/lmb.c | 20 ++++++++++++++++++++
> > 4 files changed, 38 insertions(+)
> >
> > diff --git a/common/board_r.c b/common/board_r.c
> > index d4ba245ac6..eaf9b40ec0 100644
> > --- a/common/board_r.c
> > +++ b/common/board_r.c
> > @@ -22,6 +22,7 @@
> > #include <hang.h>
> > #include <image.h>
> > #include <irq_func.h>
> > +#include <lmb.h>
> > #include <log.h>
> > #include <net.h>
> > #include <asm/cache.h>
> > @@ -610,6 +611,9 @@ static init_fnc_t init_sequence_r[] = {
> > #ifdef CONFIG_CLOCKS
> > set_cpu_clk_info, /* Setup clock information */
> > #endif
> > +#if CONFIG_IS_ENABLED(LMB)
> > + initr_lmb,
> > +#endif
>
> Can you put the if() in the function, to avoid #ifdefs here?
Will do
>
> > #ifdef CONFIG_EFI_LOADER
> > efi_memory_init,
> > #endif
> > diff --git a/common/spl/spl.c b/common/spl/spl.c
> > index 7794ddccad..38ac0608bb 100644
> > --- a/common/spl/spl.c
> > +++ b/common/spl/spl.c
> > @@ -723,6 +723,9 @@ void board_init_r(gd_t *dummy1, ulong dummy2)
> > IS_ENABLED(CONFIG_SPL_ATF))
> > dram_init_banksize();
> >
> > + if (IS_ENABLED(CONFIG_SPL_LMB))
> > + initr_lmb();
> > +
>
> Still unsure why this is needed. I'm also not sure how it works, since
> SPL allocations will not transfer to U-Boot proper.
I am not sure if I get your question right, but we initialise the LMB
lists, and add to it's available memory map, both in SPL and in U-Boot
proper. These are being initialised for SPL separately once the ram
memory has been set up, including the dram banksize values.
-sughosh
>
> > if (CONFIG_IS_ENABLED(PCI) && !(gd->flags & GD_FLG_DM_DEAD)) {
> > ret = pci_init();
> > if (ret)
> > diff --git a/include/lmb.h b/include/lmb.h
> > index 2d8f9a6b71..cc4cf9f3c8 100644
> > --- a/include/lmb.h
> > +++ b/include/lmb.h
> > @@ -37,6 +37,17 @@ struct lmb_region {
> > enum lmb_flags flags;
> > };
> >
> > +/**
> > + * initr_lmb() - Initialise the LMB lists
> > + *
> > + * Initialise the LMB lists needed for keeping the memory map. There
> > + * are two lists, in form of alloced list data structure. One for the
> > + * available memory, and one for the used memory.
> > + *
> > + * Return: 0 on success, -ve on error
> > + */
> > +int initr_lmb(void);
> > +
> > /**
> > * lmb_add_memory() - Add memory range for LMB allocations
> > *
> > diff --git a/lib/lmb.c b/lib/lmb.c
> > index 5afdfc32fb..5baa5c4c52 100644
> > --- a/lib/lmb.c
> > +++ b/lib/lmb.c
> > @@ -783,3 +783,23 @@ int lmb_mem_regions_init(void)
> >
> > return 0;
> > }
> > +
> > +/**
> > + * initr_lmb() - Initialise the LMB lists
> > + *
> > + * Initialise the LMB lists needed for keeping the memory map. There
> > + * are two lists, in form of alloced list data structure. One for the
> > + * available memory, and one for the used memory.
> > + *
> > + * Return: 0 on success, -ve on error
> > + */
> > +int initr_lmb(void)
> > +{
> > + int ret;
> > +
> > + ret = lmb_mem_regions_init();
> > + if (ret)
> > + printf("Unable to initialise the LMB data structures\n");
> > +
> > + return ret;
> > +}
> > --
> > 2.34.1
> >
>
> Regards,
> Simon
More information about the U-Boot
mailing list