From 09cd17b0deef4920a1845f70b0e4859f57726e6a Mon Sep 17 00:00:00 2001 From: Sunil V L Date: Wed, 21 Sep 2022 06:36:37 +0530 Subject: ArmVirtPkg/PlatformHasAcpiDtDxe: Move to OvmfPkg REF: https://bugzilla.tianocore.org/show_bug.cgi?id=4076 This module is required by other architectures like RISC-V. Hence, move this to OvmfPkg. Cc: Ard Biesheuvel Cc: Jiewen Yao Cc: Jordan Justen Cc: Gerd Hoffmann Signed-off-by: Sunil V L Acked-by: Ard Biesheuvel Reviewed-by: Andrei Warkentin --- ArmVirtPkg/ArmVirtPkg.dec | 9 --- .../PlatformHasAcpiDtDxe/PlatformHasAcpiDtDxe.c | 83 ---------------------- .../PlatformHasAcpiDtDxe/PlatformHasAcpiDtDxe.inf | 44 ------------ OvmfPkg/OvmfPkg.dec | 7 ++ .../PlatformHasAcpiDtDxe/PlatformHasAcpiDtDxe.c | 83 ++++++++++++++++++++++ .../PlatformHasAcpiDtDxe/PlatformHasAcpiDtDxe.inf | 43 +++++++++++ 6 files changed, 133 insertions(+), 136 deletions(-) delete mode 100644 ArmVirtPkg/PlatformHasAcpiDtDxe/PlatformHasAcpiDtDxe.c delete mode 100644 ArmVirtPkg/PlatformHasAcpiDtDxe/PlatformHasAcpiDtDxe.inf create mode 100644 OvmfPkg/PlatformHasAcpiDtDxe/PlatformHasAcpiDtDxe.c create mode 100644 OvmfPkg/PlatformHasAcpiDtDxe/PlatformHasAcpiDtDxe.inf diff --git a/ArmVirtPkg/ArmVirtPkg.dec b/ArmVirtPkg/ArmVirtPkg.dec index 89d21ec3a3..4645c91a83 100644 --- a/ArmVirtPkg/ArmVirtPkg.dec +++ b/ArmVirtPkg/ArmVirtPkg.dec @@ -34,8 +34,6 @@ gEarly16550UartBaseAddressGuid = { 0xea67ca3e, 0x1f54, 0x436b, { 0x97, 0x88, 0xd4, 0xeb, 0x29, 0xc3, 0x42, 0x67 } } gArmVirtSystemMemorySizeGuid = { 0x504eccb9, 0x1bf0, 0x4420, { 0x86, 0x5d, 0xdc, 0x66, 0x06, 0xd4, 0x13, 0xbf } } - gArmVirtVariableGuid = { 0x50bea1e5, 0xa2c5, 0x46e9, { 0x9b, 0x3a, 0x59, 0x59, 0x65, 0x16, 0xb0, 0x0a } } - [PcdsFeatureFlag] # # Feature Flag PCD that defines whether TPM2 support is enabled @@ -69,10 +67,3 @@ # Cloud Hypervisor has no other way to pass Rsdp address to the guest except use a PCD. # gArmVirtTokenSpaceGuid.PcdCloudHvAcpiRsdpBaseAddress|0x0|UINT64|0x00000005 - -[PcdsDynamic] - # - # Whether to force disable ACPI, regardless of the fw_cfg settings - # exposed by QEMU - # - gArmVirtTokenSpaceGuid.PcdForceNoAcpi|0x0|BOOLEAN|0x00000003 diff --git a/ArmVirtPkg/PlatformHasAcpiDtDxe/PlatformHasAcpiDtDxe.c b/ArmVirtPkg/PlatformHasAcpiDtDxe/PlatformHasAcpiDtDxe.c deleted file mode 100644 index 952d9bfc1f..0000000000 --- a/ArmVirtPkg/PlatformHasAcpiDtDxe/PlatformHasAcpiDtDxe.c +++ /dev/null @@ -1,83 +0,0 @@ -/** @file - Decide whether the firmware should expose an ACPI- and/or a Device Tree-based - hardware description to the operating system. - - Copyright (c) 2017, Red Hat, Inc. - - SPDX-License-Identifier: BSD-2-Clause-Patent -**/ - -#include -#include -#include -#include -#include -#include -#include - -EFI_STATUS -EFIAPI -PlatformHasAcpiDt ( - IN EFI_HANDLE ImageHandle, - IN EFI_SYSTEM_TABLE *SystemTable - ) -{ - EFI_STATUS Status; - FIRMWARE_CONFIG_ITEM FwCfgItem; - UINTN FwCfgSize; - - // - // If we fail to install any of the necessary protocols below, the OS will be - // unbootable anyway (due to lacking hardware description), so tolerate no - // errors here. - // - if ((MAX_UINTN == MAX_UINT64) && - !PcdGetBool (PcdForceNoAcpi) && - !EFI_ERROR ( - QemuFwCfgFindFile ( - "etc/table-loader", - &FwCfgItem, - &FwCfgSize - ) - )) - { - // - // Only make ACPI available on 64-bit systems, and only if QEMU generates - // (a subset of) the ACPI tables. - // - Status = gBS->InstallProtocolInterface ( - &ImageHandle, - &gEdkiiPlatformHasAcpiGuid, - EFI_NATIVE_INTERFACE, - NULL - ); - if (EFI_ERROR (Status)) { - goto Failed; - } - - return Status; - } - - // - // Expose the Device Tree otherwise. - // - Status = gBS->InstallProtocolInterface ( - &ImageHandle, - &gEdkiiPlatformHasDeviceTreeGuid, - EFI_NATIVE_INTERFACE, - NULL - ); - if (EFI_ERROR (Status)) { - goto Failed; - } - - return Status; - -Failed: - ASSERT_EFI_ERROR (Status); - CpuDeadLoop (); - // - // Keep compilers happy. - // - return Status; -} diff --git a/ArmVirtPkg/PlatformHasAcpiDtDxe/PlatformHasAcpiDtDxe.inf b/ArmVirtPkg/PlatformHasAcpiDtDxe/PlatformHasAcpiDtDxe.inf deleted file mode 100644 index e900aa9926..0000000000 --- a/ArmVirtPkg/PlatformHasAcpiDtDxe/PlatformHasAcpiDtDxe.inf +++ /dev/null @@ -1,44 +0,0 @@ -## @file -# Decide whether the firmware should expose an ACPI- and/or a Device Tree-based -# hardware description to the operating system. -# -# Copyright (c) 2017, Red Hat, Inc. -# -# SPDX-License-Identifier: BSD-2-Clause-Patent -## - -[Defines] - INF_VERSION = 1.25 - BASE_NAME = PlatformHasAcpiDtDxe - FILE_GUID = 9d1dd27f-6d7f-427b-aec4-b62f6279c2f1 - MODULE_TYPE = DXE_DRIVER - VERSION_STRING = 1.0 - ENTRY_POINT = PlatformHasAcpiDt - -[Sources] - PlatformHasAcpiDtDxe.c - -[Packages] - ArmVirtPkg/ArmVirtPkg.dec - EmbeddedPkg/EmbeddedPkg.dec - MdeModulePkg/MdeModulePkg.dec - MdePkg/MdePkg.dec - OvmfPkg/OvmfPkg.dec - -[LibraryClasses] - BaseLib - DebugLib - PcdLib - QemuFwCfgLib - UefiBootServicesTableLib - UefiDriverEntryPoint - -[Guids] - gEdkiiPlatformHasAcpiGuid ## SOMETIMES_PRODUCES ## PROTOCOL - gEdkiiPlatformHasDeviceTreeGuid ## SOMETIMES_PRODUCES ## PROTOCOL - -[Pcd] - gArmVirtTokenSpaceGuid.PcdForceNoAcpi - -[Depex] - gEfiVariableArchProtocolGuid diff --git a/OvmfPkg/OvmfPkg.dec b/OvmfPkg/OvmfPkg.dec index be30547474..749fbd3b6b 100644 --- a/OvmfPkg/OvmfPkg.dec +++ b/OvmfPkg/OvmfPkg.dec @@ -161,6 +161,7 @@ gVMMBootOrderGuid = {0x668f4529, 0x63d0, 0x4bb5, {0xb6, 0x5d, 0x6f, 0xbb, 0x9d, 0x36, 0xa4, 0x4a}} gUefiOvmfPkgTdxAcpiHobGuid = {0x6a0c5870, 0xd4ed, 0x44f4, {0xa1, 0x35, 0xdd, 0x23, 0x8b, 0x6f, 0x0c, 0x8d}} gEfiNonCcFvGuid = {0xae047c6d, 0xbce9, 0x426c, {0xae, 0x03, 0xa6, 0x8e, 0x3b, 0x8a, 0x04, 0x88}} + gOvmfVariableGuid = {0x50bea1e5, 0xa2c5, 0x46e9, {0x9b, 0x3a, 0x59, 0x59, 0x65, 0x16, 0xb0, 0x0a}} [Ppis] # PPI whose presence in the PPI database signals that the TPM base address @@ -467,6 +468,12 @@ # 2 - set by GOP Driver. gUefiOvmfPkgTokenSpaceGuid.PcdVideoResolutionSource|0|UINT8|0x64 + # + # Whether to force disable ACPI, regardless of the fw_cfg settings + # exposed by QEMU + # + gUefiOvmfPkgTokenSpaceGuid.PcdForceNoAcpi|0x0|BOOLEAN|0x69 + [PcdsFeatureFlag] gUefiOvmfPkgTokenSpaceGuid.PcdQemuBootOrderPciTranslation|TRUE|BOOLEAN|0x1c gUefiOvmfPkgTokenSpaceGuid.PcdQemuBootOrderMmioTranslation|FALSE|BOOLEAN|0x1d diff --git a/OvmfPkg/PlatformHasAcpiDtDxe/PlatformHasAcpiDtDxe.c b/OvmfPkg/PlatformHasAcpiDtDxe/PlatformHasAcpiDtDxe.c new file mode 100644 index 0000000000..952d9bfc1f --- /dev/null +++ b/OvmfPkg/PlatformHasAcpiDtDxe/PlatformHasAcpiDtDxe.c @@ -0,0 +1,83 @@ +/** @file + Decide whether the firmware should expose an ACPI- and/or a Device Tree-based + hardware description to the operating system. + + Copyright (c) 2017, Red Hat, Inc. + + SPDX-License-Identifier: BSD-2-Clause-Patent +**/ + +#include +#include +#include +#include +#include +#include +#include + +EFI_STATUS +EFIAPI +PlatformHasAcpiDt ( + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable + ) +{ + EFI_STATUS Status; + FIRMWARE_CONFIG_ITEM FwCfgItem; + UINTN FwCfgSize; + + // + // If we fail to install any of the necessary protocols below, the OS will be + // unbootable anyway (due to lacking hardware description), so tolerate no + // errors here. + // + if ((MAX_UINTN == MAX_UINT64) && + !PcdGetBool (PcdForceNoAcpi) && + !EFI_ERROR ( + QemuFwCfgFindFile ( + "etc/table-loader", + &FwCfgItem, + &FwCfgSize + ) + )) + { + // + // Only make ACPI available on 64-bit systems, and only if QEMU generates + // (a subset of) the ACPI tables. + // + Status = gBS->InstallProtocolInterface ( + &ImageHandle, + &gEdkiiPlatformHasAcpiGuid, + EFI_NATIVE_INTERFACE, + NULL + ); + if (EFI_ERROR (Status)) { + goto Failed; + } + + return Status; + } + + // + // Expose the Device Tree otherwise. + // + Status = gBS->InstallProtocolInterface ( + &ImageHandle, + &gEdkiiPlatformHasDeviceTreeGuid, + EFI_NATIVE_INTERFACE, + NULL + ); + if (EFI_ERROR (Status)) { + goto Failed; + } + + return Status; + +Failed: + ASSERT_EFI_ERROR (Status); + CpuDeadLoop (); + // + // Keep compilers happy. + // + return Status; +} diff --git a/OvmfPkg/PlatformHasAcpiDtDxe/PlatformHasAcpiDtDxe.inf b/OvmfPkg/PlatformHasAcpiDtDxe/PlatformHasAcpiDtDxe.inf new file mode 100644 index 0000000000..85873f73b2 --- /dev/null +++ b/OvmfPkg/PlatformHasAcpiDtDxe/PlatformHasAcpiDtDxe.inf @@ -0,0 +1,43 @@ +## @file +# Decide whether the firmware should expose an ACPI- and/or a Device Tree-based +# hardware description to the operating system. +# +# Copyright (c) 2017, Red Hat, Inc. +# +# SPDX-License-Identifier: BSD-2-Clause-Patent +## + +[Defines] + INF_VERSION = 1.25 + BASE_NAME = PlatformHasAcpiDtDxe + FILE_GUID = 9d1dd27f-6d7f-427b-aec4-b62f6279c2f1 + MODULE_TYPE = DXE_DRIVER + VERSION_STRING = 1.0 + ENTRY_POINT = PlatformHasAcpiDt + +[Sources] + PlatformHasAcpiDtDxe.c + +[Packages] + EmbeddedPkg/EmbeddedPkg.dec + MdeModulePkg/MdeModulePkg.dec + MdePkg/MdePkg.dec + OvmfPkg/OvmfPkg.dec + +[LibraryClasses] + BaseLib + DebugLib + PcdLib + QemuFwCfgLib + UefiBootServicesTableLib + UefiDriverEntryPoint + +[Guids] + gEdkiiPlatformHasAcpiGuid ## SOMETIMES_PRODUCES ## PROTOCOL + gEdkiiPlatformHasDeviceTreeGuid ## SOMETIMES_PRODUCES ## PROTOCOL + +[Pcd] + gUefiOvmfPkgTokenSpaceGuid.PcdForceNoAcpi + +[Depex] + gEfiVariableArchProtocolGuid -- cgit v1.2.3