[PATCH v2 14/32] lmb: introduce a function to add memory to the lmb memory map
Simon Glass
sjg at chromium.org
Thu Aug 15 22:33:55 CEST 2024
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.
> 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