diff --git a/ArmVirtPkg/ArmVirtPkg.dec b/ArmVirtPkg/ArmVirtPkg.dec index efe83a383d..a5ec421664 100644 --- a/ArmVirtPkg/ArmVirtPkg.dec +++ b/ArmVirtPkg/ArmVirtPkg.dec @@ -58,3 +58,13 @@ # EFI_VT_100_GUID. # gArmVirtTokenSpaceGuid.PcdTerminalTypeGuidBuffer|{0x65, 0x60, 0xA6, 0xDF, 0x19, 0xB4, 0xD3, 0x11, 0x9A, 0x2D, 0x00, 0x90, 0x27, 0x3F, 0xC1, 0x4D}|VOID*|0x00000007 + +[PcdsFeatureFlag] + # + # Pure ACPI boot + # + # Inhibit installation of the FDT as a configuration table if this feature + # PCD is TRUE. Otherwise, the OS is presented with both a DT and an ACPI + # description of the platform, and it is up to the OS to choose. + # + gArmVirtTokenSpaceGuid.PcdPureAcpiBoot|FALSE|BOOLEAN|0x0000000a diff --git a/ArmVirtPkg/ArmVirtQemu.dsc b/ArmVirtPkg/ArmVirtQemu.dsc index 4f686faa55..4b556f309a 100644 --- a/ArmVirtPkg/ArmVirtQemu.dsc +++ b/ArmVirtPkg/ArmVirtQemu.dsc @@ -34,6 +34,7 @@ # -D FLAG=VALUE # DEFINE SECURE_BOOT_ENABLE = FALSE + DEFINE PURE_ACPI_BOOT_ENABLE = FALSE !include ArmVirtPkg/ArmVirt.dsc.inc @@ -94,6 +95,10 @@ gEfiMdeModulePkgTokenSpaceGuid.PcdConOutGopSupport|TRUE gEfiMdeModulePkgTokenSpaceGuid.PcdConOutUgaSupport|FALSE +!if $(PURE_ACPI_BOOT_ENABLE) == TRUE + gArmVirtTokenSpaceGuid.PcdPureAcpiBoot|TRUE +!endif + [PcdsFixedAtBuild.common] gArmPlatformTokenSpaceGuid.PcdCoreCount|1 !if $(ARCH) == AARCH64 diff --git a/ArmVirtPkg/FdtClientDxe/FdtClientDxe.c b/ArmVirtPkg/FdtClientDxe/FdtClientDxe.c index 21c1074e33..4cf79f70cb 100644 --- a/ArmVirtPkg/FdtClientDxe/FdtClientDxe.c +++ b/ArmVirtPkg/FdtClientDxe/FdtClientDxe.c @@ -17,11 +17,9 @@ #include #include #include -#include #include #include -#include #include #include #include @@ -318,16 +316,12 @@ OnReadyToBoot ( ) { EFI_STATUS Status; - VOID *Table; - // - // Only install the FDT as a configuration table if we are not exposing - // ACPI 2.0 (or later) tables. Note that the legacy ACPI table GUID has - // no meaning on ARM since we need at least ACPI 5.0 support, and the - // 64-bit ACPI 2.0 table GUID is mandatory in that case. - // - Status = EfiGetSystemConfigurationTable (&gEfiAcpi20TableGuid, &Table); - if (EFI_ERROR (Status) || Table == NULL) { + if (!FeaturePcdGet (PcdPureAcpiBoot)) { + // + // Only install the FDT as a configuration table if we want to leave it up + // to the OS to decide whether it prefers ACPI over DT. + // Status = gBS->InstallConfigurationTable (&gFdtTableGuid, mDeviceTreeBase); ASSERT_EFI_ERROR (Status); } diff --git a/ArmVirtPkg/FdtClientDxe/FdtClientDxe.inf b/ArmVirtPkg/FdtClientDxe/FdtClientDxe.inf index 9861f41e96..00017727c3 100644 --- a/ArmVirtPkg/FdtClientDxe/FdtClientDxe.inf +++ b/ArmVirtPkg/FdtClientDxe/FdtClientDxe.inf @@ -37,16 +37,17 @@ HobLib UefiBootServicesTableLib UefiDriverEntryPoint - UefiLib [Protocols] gFdtClientProtocolGuid ## PRODUCES [Guids] - gEfiAcpi20TableGuid gEfiEventReadyToBootGuid gFdtHobGuid gFdtTableGuid +[FeaturePcd] + gArmVirtTokenSpaceGuid.PcdPureAcpiBoot + [Depex] TRUE