[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