summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAhmad Fatoum <a.fatoum@pengutronix.de>2024-03-04 19:59:45 +0100
committerSascha Hauer <s.hauer@pengutronix.de>2024-03-05 16:28:06 +0100
commitb488d9ada0342777f03cf8e7cf9c75c2991ed11c (patch)
tree189a93e559129d363b3a4d9397cc2e8b0fd1a561
parentf6559edc80d3e02f3c551c1f9005a182e331718c (diff)
downloadbarebox-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.c2
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,