Hi Sughosh, On Thu, 4 Jul 2024 at 08:38, Sughosh Ganu <sughosh.g...@linaro.org> wrote: > > Mark the EFI runtime memory region as reserved memory during board > init so that it does not get allocated by the LMB module on subsequent > memory requests. > > Signed-off-by: Sughosh Ganu <sughosh.g...@linaro.org> > --- > Changes since V1: New patch > > lib/lmb.c | 41 ++++++++++++++++++++--------------------- > 1 file changed, 20 insertions(+), 21 deletions(-)
I see again that this is getting circular. Can you look at what is actually allocated by EFI on init (i.e. before anything is booted)? > > diff --git a/lib/lmb.c b/lib/lmb.c > index 387ec2ac65..6018f1de31 100644 > --- a/lib/lmb.c > +++ b/lib/lmb.c > @@ -19,6 +19,7 @@ > #include <asm/global_data.h> > #include <asm/sections.h> > #include <linux/kernel.h> > +#include <linux/sizes.h> > > DECLARE_GLOBAL_DATA_PTR; > > @@ -212,33 +213,31 @@ void arch_lmb_reserve_generic(ulong sp, ulong end, > ulong align) > /** > * efi_lmb_reserve() - add reservations for EFI memory > * > - * Add reservations for all EFI memory areas that are not > - * EFI_CONVENTIONAL_MEMORY. > + * Add reservations for EFI runtime services memory > * > - * Return: 0 on success, 1 on failure > + * Return: None > */ > -static __maybe_unused int efi_lmb_reserve(void) > +static __maybe_unused void efi_lmb_reserve(void) > { > - struct efi_mem_desc *memmap = NULL, *map; > - efi_uintn_t i, map_size = 0; > - efi_status_t ret; > + phys_addr_t runtime_start, runtime_end; > + unsigned long runtime_mask = EFI_PAGE_MASK; > > - ret = efi_get_memory_map_alloc(&map_size, &memmap); > - if (ret != EFI_SUCCESS) > - return 1; > +#if defined(__aarch64__) > + /* > + * Runtime Services must be 64KiB aligned according to the > + * "AArch64 Platforms" section in the UEFI spec (2.7+). > + */ > > - for (i = 0, map = memmap; i < map_size / sizeof(*map); ++map, ++i) { > - if (map->type != EFI_CONVENTIONAL_MEMORY) { > - lmb_reserve_flags(map_to_sysmem((void *)(uintptr_t) > - map->physical_start), > - map->num_pages * EFI_PAGE_SIZE, > - map->type == > EFI_RESERVED_MEMORY_TYPE > - ? LMB_NOMAP : LMB_NONE); > - } > - } > - efi_free_pool(memmap); > + runtime_mask = SZ_64K - 1; > +#endif > > - return 0; > + /* Reserve the EFI runtime services memory */ > + runtime_start = (uintptr_t)__efi_runtime_start & ~runtime_mask; > + runtime_end = (uintptr_t)__efi_runtime_stop; > + runtime_end = (runtime_end + runtime_mask) & ~runtime_mask; > + > + lmb_reserve_flags(runtime_start, runtime_end - runtime_start, > + LMB_NOOVERWRITE | LMB_NONOTIFY); > } > > static void lmb_reserve_common(void *fdt_blob) > -- > 2.34.1 > Regards, Simon