[PATCH] lmb: Reinstate access to memory above ram_top

Marek Vasut marek.vasut at mailbox.org
Sun Mar 22 22:59:53 CET 2026


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.


More information about the U-Boot mailing list