diff options
author | Ahmad Fatoum <a.fatoum@pengutronix.de> | 2024-03-04 19:59:45 +0100 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2024-03-05 16:28:06 +0100 |
commit | b488d9ada0342777f03cf8e7cf9c75c2991ed11c (patch) | |
tree | 189a93e559129d363b3a4d9397cc2e8b0fd1a561 | |
parent | f6559edc80d3e02f3c551c1f9005a182e331718c (diff) | |
download | barebox-b488d9ada034.tar.gz barebox-b488d9ada034.tar.xz |
efi: payload: init: restrict barebox mem to first 1G only on x86
When run as EFI payload, barebox will not have full access to DRAM and will
have to ask the EFI firmware for memory. It does so once at the beginning
and since commit 356aaef5a37d ("efi: improve malloc pool allocation"),
the buffer was always placed beneath the 1G boundary.
Aforementioned commit didn't elaborate why a maximum of 1G in particular
was chosen. Anyways, non-PC architectures have different memory maps, so
a 1G limit doesn't make sense there. Therefore restrict the limit to
ARCH_X86. On non-x86, we allow the memory pages to be located anywhere.
This can break PCI drivers on systems that so far assumed barebox memory
is located in the first 4G, but that's ok. That code will need to be
fixed eventually anyway.
Cc: Michael Olbrich <m.olbrich@pengutronix.de>
Signed-off-by: Ahmad Fatoum <a.fatoum@pengutronix.de>
Link: https://lore.barebox.org/20240304190038.3486881-61-a.fatoum@pengutronix.de
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
-rw-r--r-- | efi/payload/init.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/efi/payload/init.c b/efi/payload/init.c index 557bf033a4..dedecbf92c 100644 --- a/efi/payload/init.c +++ b/efi/payload/init.c @@ -293,7 +293,7 @@ void efi_main(efi_handle_t image, struct efi_system_table *sys_table) BS->handle_protocol(efi_loaded_image->device_handle, &efi_device_path_protocol_guid, (void **)&efi_device_path); - mem = 0x3fffffff; + mem = IS_ENABLED(CONFIG_X86) ? 0x3fffffff : ~0ULL; for (memsize = SZ_256M; memsize >= SZ_8M; memsize /= 2) { efiret = BS->allocate_pages(EFI_ALLOCATE_MAX_ADDRESS, EFI_LOADER_DATA, |