diff mbox series

[v2] efi_loader: Don't carve out memory reservations too early

Message ID 20240226203509.36563-1-kettenis@openbsd.org
State Not Applicable, archived
Delegated to: Heinrich Schuchardt
Headers show
Series [v2] efi_loader: Don't carve out memory reservations too early | expand

Commit Message

Mark Kettenis Feb. 26, 2024, 8:35 p.m. UTC
Moving the efi_carve_out_dt_rsv() call in commit 1be415b21b2d
("efi_loader: create memory reservations in ACPI case")
broke boards that create additional memory reservations in
ft_board_setup() since it is now called before those additional
memory reservations are made.  This is the case for the rk3588
boards and breaks booting OpenBSD on those boards.

Move the call back to its original location and add a call in
the code path used for ACPI after calling image_setup_libfdt()
such that memory reservations made by ft_board_setup() are
applied when booting with ACPI too.

Fixes: 1be415b21b2d ("efi_loader: create memory reservations in ACPI case")
Signed-off-by: Mark Kettenis <kettenis@openbsd.org>
---

ChangeLog:

v2: - Call image_setup_libfdt() in the ACPI code path


 lib/efi_loader/efi_helper.c | 14 +++++++++++---
 1 file changed, 11 insertions(+), 3 deletions(-)
diff mbox series

Patch

diff --git a/lib/efi_loader/efi_helper.c b/lib/efi_loader/efi_helper.c
index 5dd9cc876e..5f8d9a17fd 100644
--- a/lib/efi_loader/efi_helper.c
+++ b/lib/efi_loader/efi_helper.c
@@ -456,11 +456,16 @@  efi_status_t efi_install_fdt(void *fdt)
 		return EFI_LOAD_ERROR;
 	}
 
-	/* Create memory reservations as indicated by the device tree */
-	efi_carve_out_dt_rsv(fdt);
+	if (CONFIG_IS_ENABLED(GENERATE_ACPI_TABLE)) {
+		if (image_setup_libfdt(&img, fdt, NULL)) {
+			log_err("ERROR: failed to process device tree\n");
+			return EFI_LOAD_ERROR;
+		}
 
-	if (CONFIG_IS_ENABLED(GENERATE_ACPI_TABLE))
+		/* Create memory reservations as indicated by the device tree */
+		efi_carve_out_dt_rsv(fdt);
 		return EFI_SUCCESS;
+	}
 
 	/* Prepare device tree for payload */
 	ret = copy_fdt(&fdt);
@@ -474,6 +479,9 @@  efi_status_t efi_install_fdt(void *fdt)
 		return EFI_LOAD_ERROR;
 	}
 
+	/* Create memory reservations as indicated by the device tree */
+	efi_carve_out_dt_rsv(fdt);
+
 	efi_try_purge_kaslr_seed(fdt);
 
 	if (CONFIG_IS_ENABLED(EFI_TCG2_PROTOCOL_MEASURE_DTB)) {