ArmBootArch field in FADT is specific to ARM. To leverage most of the code in FADT generator for other architectures, this needs to be moved into ARM specific file. There may be other fields in future (ex: IA_PC_BOOT_ARCH) that need to be created in similar way. So, instead of adding the function only to create BootArch, make this function generic to add all arch specific functions into FADT.
Cc: Ard Biesheuvel <ardb+tianoc...@kernel.org> Cc: Leif Lindholm <quic_llind...@quicinc.com> Cc: Pierre Gondois <pierre.gond...@arm.com> Cc: Sami Mujawar <sami.muja...@arm.com> Signed-off-by: Sunil V L <suni...@ventanamicro.com> --- .../Acpi/Common/AcpiFadtLib/AcpiFadtLib.inf | 4 + .../Acpi/Common/AcpiFadtLib/FadtGenerator.h | 32 ++++++++ .../Common/AcpiFadtLib/ArmFadtGenerator.c | 80 +++++++++++++++++++ .../Acpi/Common/AcpiFadtLib/FadtGenerator.c | 71 ++-------------- .../Arm/BootArch/ArmBootArchParser.c | 8 +- 5 files changed, 125 insertions(+), 70 deletions(-) create mode 100644 DynamicTablesPkg/Library/Acpi/Common/AcpiFadtLib/FadtGenerator.h create mode 100644 DynamicTablesPkg/Library/Acpi/Common/AcpiFadtLib/ArmFadtGenerator.c diff --git a/DynamicTablesPkg/Library/Acpi/Common/AcpiFadtLib/AcpiFadtLib.inf b/DynamicTablesPkg/Library/Acpi/Common/AcpiFadtLib/AcpiFadtLib.inf index c9cd850faac0..1ea47aefc3e1 100644 --- a/DynamicTablesPkg/Library/Acpi/Common/AcpiFadtLib/AcpiFadtLib.inf +++ b/DynamicTablesPkg/Library/Acpi/Common/AcpiFadtLib/AcpiFadtLib.inf @@ -18,6 +18,10 @@ [Defines] [Sources] FadtGenerator.c + FadtGenerator.h + +[Sources.ARM, Sources.AARCH64] + ArmFadtGenerator.c [Packages] MdePkg/MdePkg.dec diff --git a/DynamicTablesPkg/Library/Acpi/Common/AcpiFadtLib/FadtGenerator.h b/DynamicTablesPkg/Library/Acpi/Common/AcpiFadtLib/FadtGenerator.h new file mode 100644 index 000000000000..bb98ea4c8854 --- /dev/null +++ b/DynamicTablesPkg/Library/Acpi/Common/AcpiFadtLib/FadtGenerator.h @@ -0,0 +1,32 @@ +/** @file + + Copyright (c) 2017 - 2023, Arm Limited. All rights reserved.<BR> + Copyright (c) 2024, Ventana Micro Systems Inc. All rights reserved.<BR> + + SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#ifndef FADT_GENERATOR_H_ +#define FADT_GENERATOR_H_ + +/** Updates the Architecture specific information in the FADT Table. + + @param [in] CfgMgrProtocol Pointer to the Configuration Manager + Protocol Interface. + + @retval EFI_SUCCESS Success. + @retval EFI_INVALID_PARAMETER A parameter is invalid. + @retval EFI_NOT_FOUND The required object was not found. + @retval EFI_BAD_BUFFER_SIZE The size returned by the Configuration + Manager is less than the Object size for the + requested object. +**/ +EFI_STATUS +EFIAPI +FadtAddArchInfo ( + IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL *CONST CfgMgrProtocol, + OUT EFI_ACPI_6_5_FIXED_ACPI_DESCRIPTION_TABLE *Fadt + ); + +#endif // FADT_GENERATOR_H_ diff --git a/DynamicTablesPkg/Library/Acpi/Common/AcpiFadtLib/ArmFadtGenerator.c b/DynamicTablesPkg/Library/Acpi/Common/AcpiFadtLib/ArmFadtGenerator.c new file mode 100644 index 000000000000..ca4f6958a5b9 --- /dev/null +++ b/DynamicTablesPkg/Library/Acpi/Common/AcpiFadtLib/ArmFadtGenerator.c @@ -0,0 +1,80 @@ +/** @file + ARM FADT Table Helpers + + Copyright (c) 2017 - 2023, Arm Limited. All rights reserved. + SPDX-License-Identifier: BSD-2-Clause-Patent + + @par Reference(s): + - ACPI 6.5 Specification, Aug 29, 2022 + +**/ + +#include <Library/AcpiLib.h> +#include <Library/DebugLib.h> +#include <Protocol/AcpiTable.h> + +// Module specific include files. +#include <AcpiTableGenerator.h> +#include <ConfigurationManagerObject.h> +#include <ConfigurationManagerHelper.h> +#include <Library/TableHelperLib.h> +#include <Protocol/ConfigurationManagerProtocol.h> +#include "FadtGenerator.h" + +/** This macro expands to a function that retrieves the Boot + Architecture Information from the Configuration Manager. +*/ +GET_OBJECT_LIST ( + EObjNameSpaceArch, + EArchObjBootArchInfo, + CM_ARCH_BOOT_ARCH_INFO + ); + +/** Updates the Architecture specific information in the FADT Table. + + @param [in] CfgMgrProtocol Pointer to the Configuration Manager + Protocol Interface. + @param [out] Fadt Pointer to the FADT table + + @retval EFI_SUCCESS Success. + @retval EFI_NOT_FOUND The required object was not found. +**/ +EFI_STATUS +EFIAPI +FadtAddArchInfo ( + IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL *CONST CfgMgrProtocol, + OUT EFI_ACPI_6_5_FIXED_ACPI_DESCRIPTION_TABLE *Fadt + ) +{ + EFI_STATUS Status; + CM_ARCH_BOOT_ARCH_INFO *BootArchInfo; + + ASSERT (CfgMgrProtocol != NULL); + + // Get the Boot Architecture flags from the Platform Configuration Manager + Status = GetEArchObjBootArchInfo ( + CfgMgrProtocol, + CM_NULL_TOKEN, + &BootArchInfo, + NULL + ); + if (EFI_ERROR (Status)) { + DEBUG (( + DEBUG_ERROR, + "ERROR: FADT: Failed to get Boot Architecture flags. Status = %r\n", + Status + )); + goto error_handler; + } + + DEBUG (( + DEBUG_INFO, + "FADT BootArchFlag = 0x%x\n", + BootArchInfo->BootArchFlags + )); + + Fadt->ArmBootArch = BootArchInfo->BootArchFlags; + +error_handler: + return Status; +} diff --git a/DynamicTablesPkg/Library/Acpi/Common/AcpiFadtLib/FadtGenerator.c b/DynamicTablesPkg/Library/Acpi/Common/AcpiFadtLib/FadtGenerator.c index 6f760532314e..60f1ad69a420 100644 --- a/DynamicTablesPkg/Library/Acpi/Common/AcpiFadtLib/FadtGenerator.c +++ b/DynamicTablesPkg/Library/Acpi/Common/AcpiFadtLib/FadtGenerator.c @@ -19,14 +19,14 @@ #include <ConfigurationManagerHelper.h> #include <Library/TableHelperLib.h> #include <Protocol/ConfigurationManagerProtocol.h> +#include "FadtGenerator.h" -/** ARM standard FADT Generator +/** Standard FADT Generator Requirements: The following Configuration Manager Object(s) are required by this Generator: - EArchObjPowerManagementProfileInfo - - EArchObjBootArchInfo - EArchObjHypervisorVendorIdentity (OPTIONAL) */ @@ -165,7 +165,7 @@ EFI_ACPI_6_5_FIXED_ACPI_DESCRIPTION_TABLE AcpiFadt = { // UINT8 ResetValue 0, // UINT16 ArmBootArch - EFI_ACPI_6_5_ARM_PSCI_COMPLIANT, // {Template}: ARM Boot Architecture Flags + 0, // {Template}: ARM Boot Architecture Flags // UINT8 MinorRevision EFI_ACPI_6_5_FIXED_ACPI_DESCRIPTION_TABLE_MINOR_REVISION, // {Template} // UINT64 XFirmwareCtrl @@ -207,15 +207,6 @@ GET_OBJECT_LIST ( CM_ARCH_POWER_MANAGEMENT_PROFILE_INFO ); -/** This macro expands to a function that retrieves the Boot - Architecture Information from the Configuration Manager. -*/ -GET_OBJECT_LIST ( - EObjNameSpaceArch, - EArchObjBootArchInfo, - CM_ARCH_BOOT_ARCH_INFO - ); - /** This macro expands to a function that retrieves the Hypervisor Vendor ID from the Configuration Manager. */ @@ -287,58 +278,6 @@ FadtAddPmProfileInfo ( return Status; } -/** Updates the Boot Architecture information in the FADT Table. - - @param [in] CfgMgrProtocol Pointer to the Configuration Manager - Protocol Interface. - - @retval EFI_SUCCESS Success. - @retval EFI_INVALID_PARAMETER A parameter is invalid. - @retval EFI_NOT_FOUND The required object was not found. - @retval EFI_BAD_BUFFER_SIZE The size returned by the Configuration - Manager is less than the Object size for the - requested object. -**/ -STATIC -EFI_STATUS -EFIAPI -FadtAddBootArchInfo ( - IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL *CONST CfgMgrProtocol - ) -{ - EFI_STATUS Status; - CM_ARCH_BOOT_ARCH_INFO *BootArchInfo; - - ASSERT (CfgMgrProtocol != NULL); - - // Get the Boot Architecture flags from the Platform Configuration Manager - Status = GetEArchObjBootArchInfo ( - CfgMgrProtocol, - CM_NULL_TOKEN, - &BootArchInfo, - NULL - ); - if (EFI_ERROR (Status)) { - DEBUG (( - DEBUG_ERROR, - "ERROR: FADT: Failed to get Boot Architecture flags. Status = %r\n", - Status - )); - goto error_handler; - } - - DEBUG (( - DEBUG_INFO, - "FADT BootArchFlag = 0x%x\n", - BootArchInfo->BootArchFlags - )); - - AcpiFadt.ArmBootArch = BootArchInfo->BootArchFlags; - -error_handler: - return Status; -} - /** Update the Hypervisor Vendor ID in the FADT Table. @param [in] CfgMgrProtocol Pointer to the Configuration Manager @@ -577,8 +516,8 @@ BuildFadtTable ( goto error_handler; } - // Update BootArch Info - Status = FadtAddBootArchInfo (CfgMgrProtocol); + // Update Arch specific Info + Status = FadtAddArchInfo (CfgMgrProtocol, &AcpiFadt); if (EFI_ERROR (Status)) { goto error_handler; } diff --git a/DynamicTablesPkg/Library/FdtHwInfoParserLib/Arm/BootArch/ArmBootArchParser.c b/DynamicTablesPkg/Library/FdtHwInfoParserLib/Arm/BootArch/ArmBootArchParser.c index d0f6e257a7ac..028a659292f2 100644 --- a/DynamicTablesPkg/Library/FdtHwInfoParserLib/Arm/BootArch/ArmBootArchParser.c +++ b/DynamicTablesPkg/Library/FdtHwInfoParserLib/Arm/BootArch/ArmBootArchParser.c @@ -49,8 +49,8 @@ STATIC EFI_STATUS EFIAPI PsciNodeParser ( - IN CONST VOID *Fdt, - IN INT32 PsciNode, + IN CONST VOID *Fdt, + IN INT32 PsciNode, IN CM_ARCH_BOOT_ARCH_INFO *BootArchInfo ) { @@ -115,8 +115,8 @@ ArmBootArchInfoParser ( IN INT32 FdtBranch ) { - EFI_STATUS Status; - INT32 PsciNode; + EFI_STATUS Status; + INT32 PsciNode; CM_ARCH_BOOT_ARCH_INFO BootArchInfo; if (FdtParserHandle == NULL) { -- 2.34.1 -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#113478): https://edk2.groups.io/g/devel/message/113478 Mute This Topic: https://groups.io/mt/103622741/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-