[PATCH] lmb: Reinstate access to memory above ram_top
Gary Guo
gary at garyguo.net
Mon Mar 23 18:11:57 CET 2026
On Sun Mar 22, 2026 at 11:25 PM GMT, Mark Kettenis wrote:
>> Date: Sun, 22 Mar 2026 22:59:53 +0100
>>
>> 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.
>
> Well, technically it doesn't break things as this is new
> functionality.
>
>> > 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.
>
> Note that some arm64 systems (e.g. Apple Silicon) have *no* memory
> below 4 GiB. So that change must indeed be behind a config option and
> care must be taken on what systems to enabled it.
Perhaps a good short-term fix it to use gd->ram_top here rather than hardcoding
4 GiB. This way it should work on all systems without a config option.
Best,
Gary
More information about the U-Boot
mailing list