[PATCH] lmb: Reinstate access to memory above ram_top
Marek Vasut
marek.vasut at mailbox.org
Sun Mar 22 23:46:13 CET 2026
On 3/22/26 11:27 PM, Gary Guo wrote:
> 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>
Thank you for testing. Now, let's see what Heinrich and co. has to say
about this.
More information about the U-Boot
mailing list