[PATCH v3 17/27] lmb: do away with arch_lmb_reserve()
Simon Glass
sjg at chromium.org
Fri Aug 23 22:47:26 CEST 2024
Hi Sughosh,
On Wed, 21 Aug 2024 at 05:00, Sughosh Ganu <sughosh.ganu at linaro.org> wrote:
>
> All of the current definitions of arch_lmb_reserve() are doing the
> same thing -- reserve the region of memory occupied by U-Boot,
> starting from the current stack address to the ram_top. Introduce a
> function lmb_reserve_uboot_region() which does this, and do away with
> the arch_lmb_reserve() function.
>
> Instead of using the current value of stack pointer for starting the
> reserved region, have a fixed value, considering the stack size config
> value.nit
>
> Signed-off-by: Sughosh Ganu <sughosh.ganu at linaro.org>
> ---
> Changes since V2:
> * Remove the definitions of arch_lmb_reserve() and
> arch_lmb_reserve_generic() functions.
> * Introduce a new function lmb_reserve_uboot_region() and call it from
> lmb_reserve_common().
>
> arch/arc/lib/cache.c | 14 -------
> arch/arm/lib/stack.c | 14 -------
> arch/m68k/lib/bootm.c | 17 --------
> arch/microblaze/lib/bootm.c | 14 -------
> arch/mips/lib/bootm.c | 15 -------
> arch/nios2/lib/bootm.c | 13 ------
> arch/powerpc/lib/bootm.c | 9 ----
> arch/riscv/lib/bootm.c | 13 ------
> arch/sh/lib/bootm.c | 13 ------
> arch/x86/lib/bootm.c | 18 --------
> arch/xtensa/lib/bootm.c | 13 ------
> include/lmb.h | 2 -
> lib/lmb.c | 83 ++++++++++++++++++-------------------
> 13 files changed, 41 insertions(+), 197 deletions(-)
Reviewed-by: Simon Glass <sjg at chromium.org>
question below
[..]
> diff --git a/include/lmb.h b/include/lmb.h
> index e6c6f1cdcd..6e435bd35c 100644
> --- a/include/lmb.h
> +++ b/include/lmb.h
> @@ -108,8 +108,6 @@ void lmb_dump_all(void);
> void lmb_dump_all_force(void);
>
> void board_lmb_reserve(void);
> -void arch_lmb_reserve(void);
> -void arch_lmb_reserve_generic(ulong sp, ulong end, ulong align);
>
> #if CONFIG_IS_ENABLED(UNIT_TEST)
There is no need to do this in the header file, BTW. It will cause a
link error if someone uses it by mistake.
> struct lmb *lmb_get(void);
> diff --git a/lib/lmb.c b/lib/lmb.c
> index e26e329248..1116b2b868 100644
> --- a/lib/lmb.c
> +++ b/lib/lmb.c
[..]
> @@ -215,10 +179,50 @@ static __maybe_unused int efi_lmb_reserve(void)
> return 0;
> }
>
> +static void lmb_reserve_uboot_region(void)
> +{
> + int bank;
> + ulong end, bank_end;
> + phys_addr_t rsv_start;
> +
> + rsv_start = gd->start_addr_sp - CONFIG_STACK_SIZE;
> + end = gd->ram_top;
> +
> + /*
> + * Reserve memory from aligned address below the bottom of U-Boot stack
> + * until end of RAM area to prevent LMB from overwriting that memory.
> + */
> + debug("## Current stack ends at 0x%08lx ", (ulong)rsv_start);
> +
> + /* adjust sp by 4K to be safe */
> + rsv_start -= 16384;
Should that be SZ_4K ?
> + for (bank = 0; bank < CONFIG_NR_DRAM_BANKS; bank++) {
> + if (!gd->bd->bi_dram[bank].size ||
> + rsv_start < gd->bd->bi_dram[bank].start)
> + continue;
> + /* Watch out for RAM at end of address space! */
> + bank_end = gd->bd->bi_dram[bank].start +
> + gd->bd->bi_dram[bank].size - 1;
> + if (rsv_start > bank_end)
> + continue;
> + if (bank_end > end)
> + bank_end = end - 1;
> +
> + lmb_reserve_flags(rsv_start, bank_end - rsv_start + 1,
> + LMB_NOOVERWRITE);
> +
> + if (gd->flags & GD_FLG_SKIP_RELOC)
> + lmb_reserve_flags((phys_addr_t)(uintptr_t)_start,
> + gd->mon_len, LMB_NOOVERWRITE);
> +
> + break;
> + }
> +}
> +
> static void lmb_reserve_common(void *fdt_blob)
> {
> - arch_lmb_reserve();
> board_lmb_reserve();
> + lmb_reserve_uboot_region();
>
> if (CONFIG_IS_ENABLED(OF_LIBFDT) && fdt_blob)
> boot_fdt_add_mem_rsv_regions(fdt_blob);
> @@ -689,11 +693,6 @@ __weak void board_lmb_reserve(void)
> /* please define platform specific board_lmb_reserve() */
> }
>
> -__weak void arch_lmb_reserve(void)
> -{
> - /* please define platform specific arch_lmb_reserve() */
> -}
> -
> static int lmb_setup(void)
> {
> bool ret;
> --
> 2.34.1
>
Regards,
Simon
More information about the U-Boot
mailing list