From 57dead0b92a43dec85246f2064ea1814a431efa6 Mon Sep 17 00:00:00 2001 From: Jianyong Wu Date: Wed, 5 Jul 2023 10:14:16 +0000 Subject: [PATCH] efi/fdt: don't expose fdt to kernel There is a check that if fdt is stub when ACPI table initialized in linux kernel [1]. So, if full fdt is given, fdt will be used insdead of ACPI. It is aginst our primary goal to use UEFI. So, full fdt can't be given here. For simplicity, just neglict it here. It can be improved by making a stub fdt and pass it through configuration table. Maybe later. Fixes: #261 Signed-off-by: Jianyong Wu [1] https://github.com/torvalds/linux/blob/d528014517f2b0531862c02865b9d4c908019dc4/arch/arm64/kernel/acpi.c#L203 --- src/efi/mod.rs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/efi/mod.rs b/src/efi/mod.rs index 607f96bf..44971ec1 100644 --- a/src/efi/mod.rs +++ b/src/efi/mod.rs @@ -614,7 +614,6 @@ pub extern "efiapi" fn install_configuration_table(guid: *mut Guid, table: *mut for entry in ct.iter_mut() { if entry.vendor_guid == unsafe { *guid } { - entry.vendor_table = table; if table.is_null() { entry.vendor_guid = INVALID_GUID; entry.vendor_table = null_mut(); @@ -1115,6 +1114,8 @@ pub fn efi_exec( let mut ct_index = 0; // Populate with FDT table if present + // To boot with ACPI, we can't offer full fdt. Simply, neglect it. See https://github.com/torvalds/linux/blob/d528014517f2b0531862c02865b9d4c908019dc4/arch/arm64/kernel/acpi.c#L203 + #[cfg(not(target_arch = "aarch64"))] if let Some(fdt_entry) = info.fdt_reservation() { ct[ct_index] = efi::ConfigurationTable { vendor_guid: Guid::from_fields(