[PATCH] lmb: Reinstate access to memory above ram_top

Gary Guo gary at garyguo.net
Sun Mar 22 23:27:42 CET 2026


On Sun Mar 22, 2026 at 9:59 PM GMT, Marek Vasut wrote:
> On 3/22/26 10:45 PM, Gary Guo wrote:
>
> [...]
>
>>> Is your malloc area by any chance above the 4 GiB boundary ? Or how come
>>> does EFI allocate pages from above 4 GiB range? It should not be doing
>>> that and that is what should be fixed, at least until the DMA32
>>> allocator is in place.
>>>
>>> Please keep in mind, that revering this patch breaks other use cases,
>>> like loading into the DRAM above 4 GiB.
>> 
>> Code in lib/efi_loader uses efi_allocate_pool (in lib/efi_loader/efi_memory.c)
>> whenever it allocates, which calls efi_allocate_pages, which calls into
>> lmb_alloc_mem. There's no malloc here.
> Does something like this make the issue go away ?
>
> "
> diff --git a/lib/efi_loader/efi_memory.c b/lib/efi_loader/efi_memory.c
> index b77c2f980cc..44eccc0cf35 100644
> --- a/lib/efi_loader/efi_memory.c
> +++ b/lib/efi_loader/efi_memory.c
> @@ -475,8 +475,10 @@ efi_status_t efi_allocate_pages(enum 
> efi_allocate_type type,
>          flags = LMB_NOOVERWRITE | LMB_NONOTIFY;
>          switch (type) {
>          case EFI_ALLOCATE_ANY_PAGES:
> +               addr = map_to_sysmem((void *)(uintptr_t)0xffff0000);
> +
>                  /* Any page */
> -               err = lmb_alloc_mem(LMB_MEM_ALLOC_ANY, EFI_PAGE_SIZE, &addr,
> +               err = lmb_alloc_mem(LMB_MEM_ALLOC_MAX, EFI_PAGE_SIZE, &addr,
>                                      len, flags);
>                  if (err)
>                          return EFI_OUT_OF_RESOURCES;
> "
>
> If so, then maybe we need a temporary config option which limits the 
> EFI_ALLOCATE_ANY_PAGES below 4 GiB on hardware that has DMA limitations.

My system is indeed booting with this diff + the RPI5 memory map diff that I
included in my previous email.

Tested-by: Gary Guo <gary at garyguo.net>

Thanks,
Gary


More information about the U-Boot mailing list