* [PATCH v2 0/2] Dynamic ACPI framework for fsl layerscape platforms @ 2021-01-27 6:44 Vikas Singh 2021-01-27 6:44 ` [PATCH v2 1/2] Platform/NXP: Add Dynamic Acpi for " Vikas Singh ` (2 more replies) 0 siblings, 3 replies; 9+ messages in thread From: Vikas Singh @ 2021-01-27 6:44 UTC (permalink / raw) To: devel Cc: sami.mujawar, leif, meenakshi.aggarwal, paul.yang, augustine.philips, samer.el-haj-mahmoud, v.sethi, arokia.samy, kuldip.dwivedi, ard.biesheuvel, vikas.singh This patch series sets the foundation of Dynamic ACPI framework for all fsl layerscape platforms. In order to achieve: - Configurable firmware builds. - Unify firmware build for similar platforms. - Minimize/eliminate human induced errors. - Validate and generate firmware that complies with relevant specifications. this change set will introduce following changes in below defined order under edk2-platforms/NXP for LX2160ARDB platform. (1) Introduced edk2-platforms/NXP/ConfigurationManager It creates the platform repositories dynamically during build time and initializes with platform specific information and serves all requestes coming from OEM/standard firmware table generators. Configuration Manager(CM) will be common for all fsl platforms. (2) Introduced edk2-platforms/NXP/LX2160ARDB/Include/Platform.h It has all the declarations and the definitions specified for the platforms. These definitions will be inturn consumed by Configuration Manager. Additionally the placement of this header under "Include" dir will make these macro's availale to other translation units of the platform built. (3) Introduced edk2-platforms/NXP/LX2160ARDB/AcpiTablesInclude This is a placeholder for - OEM specific firmware acpi table generators. This also includes IP specific - DSDT/SSDT generators for the OEM's platform. Currently Dsdt.asl is a place holder having only platform's clock related dsdt properties for LX2160ARDB but it is intended to extend this "Dsdt.asl" to hold other table as well in next patch series. (4) Introduced a new "DYNAMIC_ACPI_ENABLE" flag to control DACPI framework. Currently this flag is used for LX2160ARDB and by default it is enabled. This flag can also extend to other fsl layerscape platforms in future. Changes can be referred under: - LX2160ARDb.dsc - LX2160ARDB.fdf (5) Introduced a "build.sh" script under edk2-platforms/NXP/ to automate builds. And also mandatorily need to support Dynamic ACPI framework for all fsl platforms. It exports build environment variables and also invokes "Env.sh". Vikas Singh (2): Platform/NXP: Add Dynamic Acpi for layerscape platforms Platform/NXP: Add OEM specific DSDT generator .../ConfigurationManagerDxe/ConfigurationManager.c | 843 +++++++++++++++++++++ .../ConfigurationManagerDxe/ConfigurationManager.h | 153 ++++ .../ConfigurationManagerDxe.inf | 52 ++ .../ConfigurationManagerPkg.dec | 23 + .../Include/PlatformAcpiTableGenerator.h | 20 + Platform/NXP/Env.sh | 67 ++ .../LX2160aRdbPkg/AcpiTablesInclude/Dsdt/Clk.asl | 40 + .../LX2160aRdbPkg/AcpiTablesInclude/Dsdt/Dsdt.asl | 15 + .../AcpiTablesInclude/PlatformAcpiDsdtLib.inf | 39 + .../PlatformAcpiDsdtLib/RawDsdtGenerator.c | 146 ++++ .../AcpiTablesInclude/PlatformAcpiLib.h | 24 + Platform/NXP/LX2160aRdbPkg/Include/Platform.h | 246 ++++++ Platform/NXP/LX2160aRdbPkg/LX2160aRdbPkg.dec | 4 + Platform/NXP/LX2160aRdbPkg/LX2160aRdbPkg.dsc | 29 + Platform/NXP/LX2160aRdbPkg/LX2160aRdbPkg.fdf | 12 + Platform/NXP/Readme.md | 35 +- Platform/NXP/build.sh | 115 +++ Silicon/NXP/LX2160A/LX2160A.dsc.inc | 9 + 18 files changed, 1871 insertions(+), 1 deletion(-) create mode 100644 Platform/NXP/ConfigurationManagerPkg/ConfigurationManagerDxe/ConfigurationManager.c create mode 100644 Platform/NXP/ConfigurationManagerPkg/ConfigurationManagerDxe/ConfigurationManager.h create mode 100644 Platform/NXP/ConfigurationManagerPkg/ConfigurationManagerDxe/ConfigurationManagerDxe.inf create mode 100644 Platform/NXP/ConfigurationManagerPkg/ConfigurationManagerPkg.dec create mode 100644 Platform/NXP/ConfigurationManagerPkg/Include/PlatformAcpiTableGenerator.h create mode 100755 Platform/NXP/Env.sh create mode 100644 Platform/NXP/LX2160aRdbPkg/AcpiTablesInclude/Dsdt/Clk.asl create mode 100644 Platform/NXP/LX2160aRdbPkg/AcpiTablesInclude/Dsdt/Dsdt.asl create mode 100644 Platform/NXP/LX2160aRdbPkg/AcpiTablesInclude/PlatformAcpiDsdtLib.inf create mode 100644 Platform/NXP/LX2160aRdbPkg/AcpiTablesInclude/PlatformAcpiDsdtLib/RawDsdtGenerator.c create mode 100644 Platform/NXP/LX2160aRdbPkg/AcpiTablesInclude/PlatformAcpiLib.h create mode 100644 Platform/NXP/LX2160aRdbPkg/Include/Platform.h create mode 100755 Platform/NXP/build.sh -- 2.7.4 ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH v2 1/2] Platform/NXP: Add Dynamic Acpi for layerscape platforms 2021-01-27 6:44 [PATCH v2 0/2] Dynamic ACPI framework for fsl layerscape platforms Vikas Singh @ 2021-01-27 6:44 ` Vikas Singh 2021-02-15 13:55 ` Leif Lindholm 2021-01-27 6:44 ` [PATCH v2 2/2] Platform/NXP: Add OEM specific DSDT generator Vikas Singh 2021-02-15 13:18 ` [PATCH v2 0/2] Dynamic ACPI framework for fsl layerscape platforms Leif Lindholm 2 siblings, 1 reply; 9+ messages in thread From: Vikas Singh @ 2021-01-27 6:44 UTC (permalink / raw) To: devel Cc: sami.mujawar, leif, meenakshi.aggarwal, paul.yang, augustine.philips, samer.el-haj-mahmoud, v.sethi, arokia.samy, kuldip.dwivedi, ard.biesheuvel, vikas.singh These changes intend to add Common Configuration Manager (CM) for all fsl platforms and Platform headers consumed by CM for LX2160ARDB. Signed-off-by: Vikas Singh <vikas.singh@puresoftware.com> --- .../ConfigurationManagerDxe/ConfigurationManager.c | 834 +++++++++++++++++++++ .../ConfigurationManagerDxe/ConfigurationManager.h | 151 ++++ .../ConfigurationManagerDxe.inf | 51 ++ Platform/NXP/Env.sh | 67 ++ Platform/NXP/LX2160aRdbPkg/Include/Platform.h | 240 ++++++ Platform/NXP/LX2160aRdbPkg/LX2160aRdbPkg.dec | 1 + Platform/NXP/LX2160aRdbPkg/LX2160aRdbPkg.dsc | 28 + Platform/NXP/LX2160aRdbPkg/LX2160aRdbPkg.fdf | 12 + Platform/NXP/Readme.md | 35 +- Platform/NXP/build.sh | 115 +++ Silicon/NXP/LX2160A/LX2160A.dsc.inc | 9 + 11 files changed, 1542 insertions(+), 1 deletion(-) create mode 100644 Platform/NXP/ConfigurationManagerPkg/ConfigurationManagerDxe/ConfigurationManager.c create mode 100644 Platform/NXP/ConfigurationManagerPkg/ConfigurationManagerDxe/ConfigurationManager.h create mode 100644 Platform/NXP/ConfigurationManagerPkg/ConfigurationManagerDxe/ConfigurationManagerDxe.inf create mode 100755 Platform/NXP/Env.sh create mode 100644 Platform/NXP/LX2160aRdbPkg/Include/Platform.h create mode 100755 Platform/NXP/build.sh diff --git a/Platform/NXP/ConfigurationManagerPkg/ConfigurationManagerDxe/ConfigurationManager.c b/Platform/NXP/ConfigurationManagerPkg/ConfigurationManagerDxe/ConfigurationManager.c new file mode 100644 index 0000000..bec9131 --- /dev/null +++ b/Platform/NXP/ConfigurationManagerPkg/ConfigurationManagerDxe/ConfigurationManager.c @@ -0,0 +1,834 @@ +/** @file + Configuration Manager Dxe + + Copyright 2020 NXP + Copyright 2020 Puresoftware Ltd + + SPDX-License-Identifier: BSD-2-Clause-Patent + + @par Glossary: + - Cm or CM - Configuration Manager + - Obj or OBJ - Object +**/ + +#include <IndustryStandard/MemoryMappedConfigurationSpaceAccessTable.h> +#include <IndustryStandard/SerialPortConsoleRedirectionTable.h> +#include <Library/ArmLib.h> +#include <Library/DebugLib.h> +#include <Library/IoLib.h> +#include <Library/PcdLib.h> +#include <Library/UefiBootServicesTableLib.h> +#include <Protocol/AcpiTable.h> +#include <Protocol/ConfigurationManagerProtocol.h> + +/** The platform specific headers +*/ +#include "ConfigurationManager.h" +#include <Library/SocLib.h> + +/** The platform configuration repository information. +*/ +STATIC +FSL_PLATFORM_REPOSITORY_INFO FslPlatformRepositoryInfo = { + /// Configuration Manager information + { CONFIGURATION_MANAGER_REVISION, CFG_MGR_OEM_ID }, + + // ACPI Table List + { + // FADT Table + { + EFI_ACPI_6_2_FIXED_ACPI_DESCRIPTION_TABLE_SIGNATURE, + EFI_ACPI_6_2_FIXED_ACPI_DESCRIPTION_TABLE_REVISION, + CREATE_STD_ACPI_TABLE_GEN_ID (EStdAcpiTableIdFadt), + NULL, + CFG_MGR_TABLE_ID + }, + + // GTDT Table + { + EFI_ACPI_6_2_GENERIC_TIMER_DESCRIPTION_TABLE_SIGNATURE, + EFI_ACPI_6_2_GENERIC_TIMER_DESCRIPTION_TABLE_REVISION, + CREATE_STD_ACPI_TABLE_GEN_ID (EStdAcpiTableIdGtdt), + NULL, + CFG_MGR_TABLE_ID + }, + + // MADT Table + { + EFI_ACPI_6_2_MULTIPLE_APIC_DESCRIPTION_TABLE_SIGNATURE, + EFI_ACPI_6_2_MULTIPLE_APIC_DESCRIPTION_TABLE_REVISION, + CREATE_STD_ACPI_TABLE_GEN_ID (EStdAcpiTableIdMadt), + NULL, + CFG_MGR_TABLE_ID + }, + + // PCI MCFG Table + { + EFI_ACPI_6_2_PCI_EXPRESS_MEMORY_MAPPED_CONFIGURATION_SPACE_BASE_ADDRESS_DESCRIPTION_TABLE_SIGNATURE, + EFI_ACPI_MEMORY_MAPPED_CONFIGURATION_SPACE_ACCESS_TABLE_REVISION, + CREATE_STD_ACPI_TABLE_GEN_ID (EStdAcpiTableIdMcfg), + NULL, + CFG_MGR_TABLE_ID + }, + + // SPCR Table + { + EFI_ACPI_6_2_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE_SIGNATURE, + EFI_ACPI_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE_REVISION, + CREATE_STD_ACPI_TABLE_GEN_ID (EStdAcpiTableIdSpcr), + NULL, + CFG_MGR_TABLE_ID + } + + }, + + // Boot architecture information + { EFI_ACPI_6_2_ARM_PSCI_COMPLIANT }, // BootArchFlags + + // Power management profile information + { EFI_ACPI_6_2_PM_PROFILE_ENTERPRISE_SERVER }, // PowerManagement Profile + + // Generic Timer Info + { + // The physical base address for the counter control frame + TIMER_BASE_ADDRESS, + // The physical base address for the counter read frame + TIMER_READ_BASE_ADDRESS, + // The secure PL1 timer interrupt + TIMER_SEC_IT, + // The secure PL1 timer flags + GTDT_GTIMER_FLAGS, + // The non-secure PL1 timer interrupt + TIMER_NON_SEC_IT, + // The non-secure PL1 timer flags + GTDT_GTIMER_FLAGS, + // The virtual timer interrupt + TIMER_VIRT_IT, + // The virtual timer flags + GTDT_GTIMER_FLAGS, + // The non-secure PL2 timer interrupt + TIMER_HYP_IT, + // The non-secure PL2 timer flags + GTDT_GTIMER_FLAGS + }, + + // Generic Timer Block Information + PLAT_TIMER_BLOCK_INFO, + + // GTDT Frames + PLAT_TIMER_FRAME_INFO, + + // Watchdog info + PLAT_WATCHDOG_INFO, + + // GIC CPU Interface information + PLAT_GIC_CPU_INTERFACE, + + // GIC Distributor Info + PLAT_GIC_DISTRIBUTOR_INFO, + + // GIC Redistributor + PLAT_GIC_REDISTRIBUTOR_INFO, + + // GIC ITS + PLAT_GIC_ITS_INFO, + + // MCFG Info + PLAT_MCFG_INFO, + + // SPCR Info + PLAT_SPCR_INFO, + + 2.0 // fsl board revision +}; + +/** Initialize the platform configuration repository. + + @param [in] This Pointer to the Configuration Manager Protocol. + + @retval EFI_SUCCESS Success +**/ +STATIC +EFI_STATUS +EFIAPI +InitializePlatformRepository ( + IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL * CONST This + ) +{ + FSL_PLATFORM_REPOSITORY_INFO * PlatformRepo; + UINT32 Svr; + + PlatformRepo = This->PlatRepoInfo; + + Svr = SocGetSvr (); + if (SVR_SOC_VER(Svr) == SVR_LX2160A) { + PlatformRepo->FslBoardRevision = SVR_MAJOR(Svr); + DEBUG ((DEBUG_INFO, "Fsl : SoC LX2160A Rev = 0x%x\n", PlatformRepo->FslBoardRevision)); + } else { + DEBUG ((DEBUG_INFO, "Fsl : SoC Unknown Rev = 0x%x\n", PlatformRepo->FslBoardRevision)); + } + + return EFI_SUCCESS; +} + +/** Return PCI Configuration Info. + @param [in] This Pointer to the Configuration Manager Protocol. + @param [in] CmObjectId The Object ID of the CM object requested + @param [in] Token A unique token for identifying the requested + CM_ARM_PCI_INFO object. + @param [in, out] CmObject Pointer to the Configuration Manager Object + descriptor describing the requested Object. + @retval EFI_SUCCESS Success. + @retval EFI_INVALID_PARAMETER A parameter is invalid. + @retval EFI_NOT_FOUND The required object information is + not found. + **/ +EFI_STATUS +EFIAPI +GetPciConfigInfo ( + IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL * CONST This, + IN CONST CM_OBJECT_ID CmObjectId, + IN CONST CM_OBJECT_TOKEN Token, + IN OUT CM_OBJ_DESCRIPTOR * CONST CmObject + ) +{ + FSL_PLATFORM_REPOSITORY_INFO * PlatformRepo; + UINT32 TotalObjCount; + UINT32 ObjIndex; + + if ((This == NULL) || (CmObject == NULL)) { + ASSERT (This != NULL); + ASSERT (CmObject != NULL); + return EFI_INVALID_PARAMETER; + } + + PlatformRepo = This->PlatRepoInfo; + + TotalObjCount = ARRAY_SIZE (PlatformRepo->PciConfigInfo); + + for (ObjIndex = 0; ObjIndex < TotalObjCount; ObjIndex++) { + if (Token == (CM_OBJECT_TOKEN)&PlatformRepo->PciConfigInfo[ObjIndex]) + { + CmObject->ObjectId = CmObjectId; + CmObject->Size = sizeof (PlatformRepo->PciConfigInfo[ObjIndex]); + CmObject->Data = (VOID*)&PlatformRepo->PciConfigInfo[ObjIndex]; + CmObject->Count = 1; + return EFI_SUCCESS; + } + } + + return EFI_NOT_FOUND; +} + +/** Return GIC CPU Interface Info. + @param [in] This Pointer to the Configuration Manager Protocol. + @param [in] CmObjectId The Object ID of the CM object requested + @param [in] Token A unique token for identifying the requested + CM_ARM_GICC_INFO object. + @param [in, out] CmObject Pointer to the Configuration Manager Object + descriptor describing the requested Object. + @retval EFI_SUCCESS Success. + @retval EFI_INVALID_PARAMETER A parameter is invalid. + @retval EFI_NOT_FOUND The required object information is + not found. + **/ +EFI_STATUS +EFIAPI +GetGicCInfo ( + IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL * CONST This, + IN CONST CM_OBJECT_ID CmObjectId, + IN CONST CM_OBJECT_TOKEN Token, + IN OUT CM_OBJ_DESCRIPTOR * CONST CmObject + ) +{ + FSL_PLATFORM_REPOSITORY_INFO * PlatformRepo; + + if ((This == NULL) || (CmObject == NULL)) { + ASSERT (This != NULL); + ASSERT (CmObject != NULL); + return EFI_INVALID_PARAMETER; + } + + PlatformRepo = This->PlatRepoInfo; + + if (Token != (CM_OBJECT_TOKEN)&PlatformRepo->GicCInfo) { + return EFI_NOT_FOUND; + } + + CmObject->ObjectId = CmObjectId; + CmObject->Size = sizeof (PlatformRepo->GicCInfo); + CmObject->Data = (VOID*)&PlatformRepo->GicCInfo; + CmObject->Count = ARRAY_SIZE (PlatformRepo->GicCInfo); + + return EFI_SUCCESS; +} + +/** Return a GT Block timer frame info list. + @param [in] This Pointer to the Configuration Manager Protocol. + @param [in] CmObjectId The Configuration Manager Object ID. + @param [in] Token A token for identifying the object + @param [in, out] CmObject Pointer to the Configuration Manager Object + descriptor describing the requested Object. + @retval EFI_SUCCESS Success. + @retval EFI_INVALID_PARAMETER A parameter is invalid. + @retval EFI_NOT_FOUND The required object information is not found. + **/ +EFI_STATUS +EFIAPI +GetGTBlockTimerFrameInfo ( + IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL * CONST This, + IN CONST CM_OBJECT_ID CmObjectId, + IN CONST CM_OBJECT_TOKEN Token, + IN OUT CM_OBJ_DESCRIPTOR * CONST CmObject + ) +{ + FSL_PLATFORM_REPOSITORY_INFO * PlatformRepo; + + if ((This == NULL) || (CmObject == NULL)) { + ASSERT (This != NULL); + ASSERT (CmObject != NULL); + return EFI_INVALID_PARAMETER; + } + + PlatformRepo = This->PlatRepoInfo; + + if (Token != (CM_OBJECT_TOKEN)&PlatformRepo->GTBlock0TimerInfo) { + return EFI_NOT_FOUND; + } + + CmObject->ObjectId = CmObjectId; + CmObject->Size = sizeof (PlatformRepo->GTBlock0TimerInfo); + CmObject->Data = (VOID*)&PlatformRepo->GTBlock0TimerInfo; + CmObject->Count = ARRAY_SIZE (PlatformRepo->GTBlock0TimerInfo); + + return EFI_SUCCESS; +} + +/** A helper function for returning the Configuration Manager Objects. + + @param [in] CmObjectId The Configuration Manager Object ID. + @param [in] Object Pointer to the Object(s). + @param [in] ObjectSize Total size of the Object(s). + @param [in] ObjectCount Number of Objects. + @param [in, out] CmObjectDesc Pointer to the Configuration Manager Object + descriptor describing the requested Object. + + @retval EFI_SUCCESS Success. +**/ +STATIC +EFI_STATUS +EFIAPI +HandleCmObject ( + IN CONST CM_OBJECT_ID CmObjectId, + IN VOID * Object, + IN CONST UINTN ObjectSize, + IN CONST UINTN ObjectCount, + IN OUT CM_OBJ_DESCRIPTOR * CONST CmObjectDesc + ) +{ + CmObjectDesc->ObjectId = CmObjectId; + CmObjectDesc->Size = ObjectSize; + CmObjectDesc->Data = (VOID*)Object; + CmObjectDesc->Count = ObjectCount; + DEBUG (( + DEBUG_INFO, + "INFO: CmObjectId = %x, Ptr = 0x%p, Size = %d, Count = %d\n", + CmObjectId, + CmObjectDesc->Data, + CmObjectDesc->Size, + CmObjectDesc->Count + )); + return EFI_SUCCESS; +} + +/** A helper function for returning the Configuration Manager Objects that + match the token. + + @param [in] This Pointer to the Configuration Manager Protocol. + @param [in] CmObjectId The Configuration Manager Object ID. + @param [in] Object Pointer to the Object(s). + @param [in] ObjectSize Total size of the Object(s). + @param [in] ObjectCount Number of Objects. + @param [in] Token A token identifying the object. + @param [in] HandlerProc A handler function to search the object + referenced by the token. + @param [in, out] CmObjectDesc Pointer to the Configuration Manager Object + descriptor describing the requested Object. + + @retval EFI_SUCCESS Success. + @retval EFI_INVALID_PARAMETER A parameter is invalid. + @retval EFI_NOT_FOUND The required object information is not found. +**/ +STATIC +EFI_STATUS +EFIAPI +HandleCmObjectRefByToken ( + IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL * CONST This, + IN CONST CM_OBJECT_ID CmObjectId, + IN VOID * Object, + IN CONST UINTN ObjectSize, + IN CONST UINTN ObjectCount, + IN CONST CM_OBJECT_TOKEN Token, + IN CONST CM_OBJECT_HANDLER_PROC HandlerProc, + IN OUT CM_OBJ_DESCRIPTOR * CONST CmObjectDesc + ) +{ + EFI_STATUS Status; + CmObjectDesc->ObjectId = CmObjectId; + if (Token == CM_NULL_TOKEN) { + CmObjectDesc->Size = ObjectSize; + CmObjectDesc->Data = (VOID*)Object; + CmObjectDesc->Count = ObjectCount; + Status = EFI_SUCCESS; + } else { + Status = HandlerProc (This, CmObjectId, Token, CmObjectDesc); + } + + DEBUG (( + DEBUG_INFO, + "INFO: Token = 0x%p, CmObjectId = %x, Ptr = 0x%p, Size = %d, Count = %d\n", + (VOID*)Token, + CmObjectId, + CmObjectDesc->Data, + CmObjectDesc->Size, + CmObjectDesc->Count + )); + return Status; +} + +/** Return a standard namespace object. + + @param [in] This Pointer to the Configuration Manager Protocol. + @param [in] CmObjectId The Configuration Manager Object ID. + @param [in] Token An optional token identifying the object. If + unused this must be CM_NULL_TOKEN. + @param [in, out] CmObject Pointer to the Configuration Manager Object + descriptor describing the requested Object. + + @retval EFI_SUCCESS Success. + @retval EFI_INVALID_PARAMETER A parameter is invalid. + @retval EFI_NOT_FOUND The required object information is not found. +**/ +EFI_STATUS +EFIAPI +GetStandardNameSpaceObject ( + IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL * CONST This, + IN CONST CM_OBJECT_ID CmObjectId, + IN CONST CM_OBJECT_TOKEN Token OPTIONAL, + IN OUT CM_OBJ_DESCRIPTOR * CONST CmObject + ) +{ + EFI_STATUS Status; + FSL_PLATFORM_REPOSITORY_INFO * PlatformRepo; + + Status = EFI_SUCCESS; + if ((This == NULL) || (CmObject == NULL)) { + ASSERT (This != NULL); + ASSERT (CmObject != NULL); + return EFI_INVALID_PARAMETER; + } + PlatformRepo = This->PlatRepoInfo; + + switch (GET_CM_OBJECT_ID (CmObjectId)) { + case EStdObjCfgMgrInfo: + Status = HandleCmObject ( + CmObjectId, + &PlatformRepo->CmInfo, + sizeof (PlatformRepo->CmInfo), + 1, + CmObject + ); + break; + case EStdObjAcpiTableList: + Status = HandleCmObject ( + CmObjectId, + &PlatformRepo->CmAcpiTableList, + sizeof (PlatformRepo->CmAcpiTableList), + ARRAY_SIZE (PlatformRepo->CmAcpiTableList), + CmObject + ); + break; + default: { + Status = EFI_NOT_FOUND; + DEBUG (( + DEBUG_ERROR, + "ERROR: Object 0x%x. Status = %r\n", + CmObjectId, + Status + )); + break; + } + } + + return Status; +} + +/** Return an ARM namespace object. + + @param [in] This Pointer to the Configuration Manager Protocol. + @param [in] CmObjectId The Configuration Manager Object ID. + @param [in] Token An optional token identifying the object. If + unused this must be CM_NULL_TOKEN. + @param [in, out] CmObject Pointer to the Configuration Manager Object + descriptor describing the requested Object. + + @retval EFI_SUCCESS Success. + @retval EFI_INVALID_PARAMETER A parameter is invalid. + @retval EFI_NOT_FOUND The required object information is not found. +**/ +EFI_STATUS +EFIAPI +GetArmNameSpaceObject ( + IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL * CONST This, + IN CONST CM_OBJECT_ID CmObjectId, + IN CONST CM_OBJECT_TOKEN Token OPTIONAL, + IN OUT CM_OBJ_DESCRIPTOR * CONST CmObject + ) +{ + EFI_STATUS Status; + FSL_PLATFORM_REPOSITORY_INFO * PlatformRepo; + + Status = EFI_SUCCESS; + if ((This == NULL) || (CmObject == NULL)) { + ASSERT (This != NULL); + ASSERT (CmObject != NULL); + return EFI_INVALID_PARAMETER; + } + PlatformRepo = This->PlatRepoInfo; + + switch (GET_CM_OBJECT_ID (CmObjectId)) { + case EArmObjBootArchInfo: + Status = HandleCmObject ( + CmObjectId, + &PlatformRepo->BootArchInfo, + sizeof (PlatformRepo->BootArchInfo), + 1, + CmObject + ); + break; + + case EArmObjPowerManagementProfileInfo: + Status = HandleCmObject ( + CmObjectId, + &PlatformRepo->PmProfileInfo, + sizeof (PlatformRepo->PmProfileInfo), + 1, + CmObject + ); + break; + + case EArmObjGenericTimerInfo: + Status = HandleCmObject ( + CmObjectId, + &PlatformRepo->GenericTimerInfo, + sizeof (PlatformRepo->GenericTimerInfo), + 1, + CmObject + ); + break; + + case EArmObjPlatformGenericWatchdogInfo: + Status = HandleCmObject ( + CmObjectId, + &PlatformRepo->Watchdog, + sizeof (PlatformRepo->Watchdog), + PLAT_WATCHDOG_COUNT, + CmObject + ); + break; + + case EArmObjPlatformGTBlockInfo: + Status = HandleCmObject ( + CmObjectId, + &PlatformRepo->GTBlockInfo, + sizeof (PlatformRepo->GTBlockInfo), + ARRAY_SIZE (PlatformRepo->GTBlockInfo), + CmObject + ); + break; + + case EArmObjGTBlockTimerFrameInfo: + Status = HandleCmObjectRefByToken ( + This, + CmObjectId, + PlatformRepo->GTBlock0TimerInfo, + sizeof (PlatformRepo->GTBlock0TimerInfo), + ARRAY_SIZE (PlatformRepo->GTBlock0TimerInfo), + Token, + GetGTBlockTimerFrameInfo, + CmObject + ); + break; + + case EArmObjGicCInfo: + Status = HandleCmObjectRefByToken ( + This, + CmObjectId, + PlatformRepo->GicCInfo, + sizeof (PlatformRepo->GicCInfo), + ARRAY_SIZE (PlatformRepo->GicCInfo), + Token, + GetGicCInfo, + CmObject + ); + break; + + case EArmObjGicDInfo: + Status = HandleCmObject ( + CmObjectId, + &PlatformRepo->GicDInfo, + sizeof (PlatformRepo->GicDInfo), + 1, + CmObject + ); + break; + + case EArmObjGicRedistributorInfo: + Status = HandleCmObject ( + CmObjectId, + &PlatformRepo->GicRedistInfo, + sizeof (PlatformRepo->GicRedistInfo), + PLAT_GIC_REDISTRIBUTOR_COUNT, + CmObject + ); + break; + + case EArmObjGicItsInfo: + Status = HandleCmObject ( + CmObjectId, + &PlatformRepo->GicItsInfo, + sizeof (PlatformRepo->GicItsInfo), + PLAT_GIC_ITS_COUNT, + CmObject + ); + break; + + case EArmObjSerialConsolePortInfo: + Status = HandleCmObject ( + CmObjectId, + &PlatformRepo->SpcrSerialPort, + sizeof (PlatformRepo->SpcrSerialPort), + 1, + CmObject + ); + break; + + case EArmObjPciConfigSpaceInfo: + Status = HandleCmObjectRefByToken ( + This, + CmObjectId, + PlatformRepo->PciConfigInfo, + sizeof (PlatformRepo->PciConfigInfo), + ARRAY_SIZE (PlatformRepo->PciConfigInfo), + Token, + GetPciConfigInfo, + CmObject + ); + break; + + default: { + Status = EFI_NOT_FOUND; + DEBUG (( + DEBUG_INFO, + "INFO: Object 0x%x. Status = %r\n", + CmObjectId, + Status + )); + break; + } + }//switch + + return Status; +} + +/** Return an OEM namespace object. + + @param [in] This Pointer to the Configuration Manager Protocol. + @param [in] CmObjectId The Configuration Manager Object ID. + @param [in] Token An optional token identifying the object. If + unused this must be CM_NULL_TOKEN. + @param [in, out] CmObject Pointer to the Configuration Manager Object + descriptor describing the requested Object. + + @retval EFI_SUCCESS Success. + @retval EFI_INVALID_PARAMETER A parameter is invalid. + @retval EFI_NOT_FOUND The required object information is not found. +**/ +EFI_STATUS +EFIAPI +GetOemNameSpaceObject ( + IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL * CONST This, + IN CONST CM_OBJECT_ID CmObjectId, + IN CONST CM_OBJECT_TOKEN Token OPTIONAL, + IN OUT CM_OBJ_DESCRIPTOR * CONST CmObject + ) +{ + EFI_STATUS Status; + + Status = EFI_SUCCESS; + if ((This == NULL) || (CmObject == NULL)) { + ASSERT (This != NULL); + ASSERT (CmObject != NULL); + return EFI_INVALID_PARAMETER; + } + + switch (GET_CM_OBJECT_ID (CmObjectId)) { + default: { + Status = EFI_NOT_FOUND; + DEBUG (( + DEBUG_ERROR, + "ERROR: Object 0x%x. Status = %r\n", + CmObjectId, + Status + )); + break; + } + } + + return Status; +} + +/** The GetObject function defines the interface implemented by the + Configuration Manager Protocol for returning the Configuration + Manager Objects. + + @param [in] This Pointer to the Configuration Manager Protocol. + @param [in] CmObjectId The Configuration Manager Object ID. + @param [in] Token An optional token identifying the object. If + unused this must be CM_NULL_TOKEN. + @param [in, out] CmObject Pointer to the Configuration Manager Object + descriptor describing the requested Object. + + @retval EFI_SUCCESS Success. + @retval EFI_INVALID_PARAMETER A parameter is invalid. + @retval EFI_NOT_FOUND The required object information is not found. +**/ +EFI_STATUS +EFIAPI +FslPlatformGetObject ( + IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL * CONST This, + IN CONST CM_OBJECT_ID CmObjectId, + IN CONST CM_OBJECT_TOKEN Token OPTIONAL, + IN OUT CM_OBJ_DESCRIPTOR * CONST CmObject + ) +{ + EFI_STATUS Status; + + if ((This == NULL) || (CmObject == NULL)) { + ASSERT (This != NULL); + ASSERT (CmObject != NULL); + return EFI_INVALID_PARAMETER; + } + + switch (GET_CM_NAMESPACE_ID (CmObjectId)) { + case EObjNameSpaceStandard: + Status = GetStandardNameSpaceObject (This, CmObjectId, Token, CmObject); + break; + case EObjNameSpaceArm: + Status = GetArmNameSpaceObject (This, CmObjectId, Token, CmObject); + break; + case EObjNameSpaceOem: + Status = GetOemNameSpaceObject (This, CmObjectId, Token, CmObject); + break; + default: { + Status = EFI_INVALID_PARAMETER; + DEBUG (( + DEBUG_ERROR, + "ERROR: Unknown Namespace Object = 0x%x. Status = %r\n", + CmObjectId, + Status + )); + break; + } + } + + return Status; +} + +/** The SetObject function defines the interface implemented by the + Configuration Manager Protocol for updating the Configuration + Manager Objects. + + @param [in] This Pointer to the Configuration Manager Protocol. + @param [in] CmObjectId The Configuration Manager Object ID. + @param [in] Token An optional token identifying the object. If + unused this must be CM_NULL_TOKEN. + @param [in] CmObject Pointer to the Configuration Manager Object + descriptor describing the Object. + + @retval EFI_UNSUPPORTED This operation is not supported. +**/ +EFI_STATUS +EFIAPI +FslPlatformSetObject ( + IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL * CONST This, + IN CONST CM_OBJECT_ID CmObjectId, + IN CONST CM_OBJECT_TOKEN Token OPTIONAL, + IN CM_OBJ_DESCRIPTOR * CONST CmObject + ) +{ + return EFI_UNSUPPORTED; +} + +/** A structure describing the configuration manager protocol interface. +*/ +STATIC +CONST +EDKII_CONFIGURATION_MANAGER_PROTOCOL FslConfigManagerProtocol = { + CREATE_REVISION (1, 0), + FslPlatformGetObject, + FslPlatformSetObject, + &FslPlatformRepositoryInfo +}; + +/** + Entrypoint of Configuration Manager Dxe. + + @param ImageHandle + @param SystemTable + + @return EFI_SUCCESS + @return EFI_LOAD_ERROR + @return EFI_OUT_OF_RESOURCES + +**/ +EFI_STATUS +EFIAPI +ConfigurationManagerDxeInitialize ( + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE * SystemTable + ) +{ + EFI_STATUS Status; + + Status = gBS->InstallProtocolInterface ( + &ImageHandle, + &gEdkiiConfigurationManagerProtocolGuid, + EFI_NATIVE_INTERFACE, + (VOID*)&FslConfigManagerProtocol + ); + if (EFI_ERROR (Status)) { + DEBUG (( + DEBUG_ERROR, + "ERROR: Failed to get Install Configuration Manager Protocol." \ + " Status = %r\n", + Status + )); + goto error_handler; + } + + Status = InitializePlatformRepository ( + &FslConfigManagerProtocol + ); + if (EFI_ERROR (Status)) { + DEBUG (( + DEBUG_ERROR, + "ERROR: Failed to initialize the Platform Configuration Repository." \ + " Status = %r\n", + Status + )); + } + +error_handler: + return Status; +} diff --git a/Platform/NXP/ConfigurationManagerPkg/ConfigurationManagerDxe/ConfigurationManager.h b/Platform/NXP/ConfigurationManagerPkg/ConfigurationManagerDxe/ConfigurationManager.h new file mode 100644 index 0000000..ab320e5 --- /dev/null +++ b/Platform/NXP/ConfigurationManagerPkg/ConfigurationManagerDxe/ConfigurationManager.h @@ -0,0 +1,151 @@ +/** @file + Configuration Manager headers + + Copyright 2020 NXP + Copyright 2020 Puresoftware Ltd + + SPDX-License-Identifier: BSD-2-Clause-Patent + + @par Glossary: + - Cm or CM - Configuration Manager + - Obj or OBJ - Object +**/ + +#ifndef CONFIGURATION_MANAGER_H +#define CONFIGURATION_MANAGER_H + +#include <Platform.h> + +/** The configuration manager version +*/ +#define CONFIGURATION_MANAGER_REVISION CREATE_REVISION (0, 0) + +/** The OEM ID +*/ +#define CFG_MGR_OEM_ID { 'N', 'X', 'P', ' ', ' ', ' ' } + +/** A helper macro for populating the GIC CPU information + */ +#define GICC_ENTRY( \ + CPUInterfaceNumber, \ + Mpidr, \ + PmuIrq, \ + VGicIrq, \ + EnergyEfficiency \ + ) { \ + CPUInterfaceNumber, /* UINT32 CPUInterfaceNumber */ \ + CPUInterfaceNumber, /* UINT32 AcpiProcessorUid */ \ + EFI_ACPI_6_2_GIC_ENABLED, /* UINT32 Flags */ \ + 0, /* UINT32 ParkingProtocolVersion */ \ + PmuIrq, /* UINT32 PerformanceInterruptGsiv */ \ + 0, /* UINT64 ParkedAddress */ \ + GICC_BASE, /* UINT64 PhysicalBaseAddress */ \ + GICV_BASE, /* UINT64 GICV */ \ + GICH_BASE, /* UINT64 GICH */ \ + VGicIrq, /* UINT32 VGICMaintenanceInterrupt */ \ + 0, /* UINT64 GICRBaseAddress */ \ + Mpidr, /* UINT64 MPIDR */ \ + EnergyEfficiency /* UINT8 ProcessorPowerEfficiency */ \ +} + +/** + @retval EFI_SUCCESS Success. + @retval EFI_INVALID_PARAMETER A parameter is invalid. + @retval EFI_NOT_FOUND The required object information is not found. +**/ +typedef EFI_STATUS (*CM_OBJECT_HANDLER_PROC) ( + IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL * CONST This, + IN CONST CM_OBJECT_ID CmObjectId, + IN CONST CM_OBJECT_TOKEN Token, + IN OUT CM_OBJ_DESCRIPTOR * CONST CmObject + ); + +/** The number of ACPI tables to install +*/ +#define PLAT_ACPI_TABLE_COUNT 5 + +/** A structure describing the platform configuration + manager repository information +*/ +typedef struct PlatformRepositoryInfo { + /// Configuration Manager Information + CM_STD_OBJ_CONFIGURATION_MANAGER_INFO CmInfo; + + /// List of ACPI tables + CM_STD_OBJ_ACPI_TABLE_INFO CmAcpiTableList[PLAT_ACPI_TABLE_COUNT]; + + /// Boot architecture information + CM_ARM_BOOT_ARCH_INFO BootArchInfo; + + /// Power management profile information + CM_ARM_POWER_MANAGEMENT_PROFILE_INFO PmProfileInfo; + + /// Generic timer information + CM_ARM_GENERIC_TIMER_INFO GenericTimerInfo; + + /// Generic timer block information + CM_ARM_GTBLOCK_INFO GTBlockInfo[PLAT_GTBLOCK_COUNT]; + + /// Generic timer frame information + CM_ARM_GTBLOCK_TIMER_FRAME_INFO GTBlock0TimerInfo[PLAT_GTFRAME_COUNT]; + + /// Watchdog information + CM_ARM_GENERIC_WATCHDOG_INFO Watchdog; + + /// GIC CPU interface information + CM_ARM_GICC_INFO GicCInfo[PLAT_CPU_COUNT]; + + /// GIC distributor information + CM_ARM_GICD_INFO GicDInfo; + + /// GIC Redistributor information + CM_ARM_GIC_REDIST_INFO GicRedistInfo; + + /// GIC ITS information + CM_ARM_GIC_ITS_INFO GicItsInfo; + + /// PCI configuration space information + CM_ARM_PCI_CONFIG_SPACE_INFO PciConfigInfo[PLAT_PCI_CONFG_COUNT]; + + /// Serial port information for serial port console redirection port + CM_ARM_SERIAL_PORT_INFO SpcrSerialPort; + + /// Fsl Board Revision + UINT32 FslBoardRevision; +} FSL_PLATFORM_REPOSITORY_INFO; + +/* + * GTDT_GTIMER_FLAGS + * IT trigger (Level/Edge- Bit 0) and Polarity (Low/High) Bit 1 + * Set bit-0 is 0 (Level trigger), Bit 1 1 (Active low) + */ +#define GTDT_GTIMER_FLAGS (EFI_ACPI_6_1_GTDT_TIMER_FLAG_TIMER_INTERRUPT_POLARITY) + +/* + * Timer Frame IT High Level triggered + * IT trigger (Level/Edge- Bit 0) and Polarity (Low/High) Bit 1 + * Set bit-0 is 0 (Level trigger), Bit 1 0 (Active High) + */ +#define GTDT_FRAME_FLAGS 0 + +/* + * Timer frame status + * Access - Secure or non secure <-- Bit 0 + * State - Save (meaning always on) or Lose Context <-- Bit 1 + * Set Bit 0 1 as Secure and Bit 1 zero as lose context +*/ +#define GTDT_FRAME_COMMON_FLAGS EFI_ACPI_6_1_GTDT_GT_BLOCK_COMMON_FLAG_SECURE_TIMER + +/* + * Watchdog flags + * IT trigger (Level/Edge- Bit 0), Polarity (Low/High) Bit 1, Secured Bit 2 + * Set Level trigger (Bit 0 as 0) + * Active High (Bit 1 as 0) + * Non secure (Bit 2 as 0) + */ +#define SBSA_WATCHDOG_FLAGS 0 +#define SBSA_SEC_WATCHDOG_FLAGS EFI_ACPI_6_1_GTDT_GT_BLOCK_COMMON_FLAG_SECURE_TIMER + +#define GT_BLOCK_FRAME_RES_BASE MAX_UINT64 + +#endif // CONFIGURATION_MANAGER_H diff --git a/Platform/NXP/ConfigurationManagerPkg/ConfigurationManagerDxe/ConfigurationManagerDxe.inf b/Platform/NXP/ConfigurationManagerPkg/ConfigurationManagerDxe/ConfigurationManagerDxe.inf new file mode 100644 index 0000000..496c8bf --- /dev/null +++ b/Platform/NXP/ConfigurationManagerPkg/ConfigurationManagerDxe/ConfigurationManagerDxe.inf @@ -0,0 +1,51 @@ +## @file +# Configuration Manager Dxe +# +# Copyright 2020 NXP +# Copyright 2020 Puresoftware Ltd +# +# SPDX-License-Identifier: BSD-2-Clause-Patent +## + +[Defines] + INF_VERSION = 0x0001001B + BASE_NAME = ConfigurationManagerDxe + FILE_GUID = A97F70AC-3BB4-4596-B4D2-9F948EC12D17 + MODULE_TYPE = DXE_DRIVER + VERSION_STRING = 1.0 + ENTRY_POINT = ConfigurationManagerDxeInitialize + +# +# The following information is for reference only and not required by the build tools. +# +# VALID_ARCHITECTURES = ARM AARCH64 +# + +[Sources] + ConfigurationManager.c + +[Packages] + ArmPkg/ArmPkg.dec + ArmPlatformPkg/ArmPlatformPkg.dec + DynamicTablesPkg/DynamicTablesPkg.dec + EmbeddedPkg/EmbeddedPkg.dec + MdeModulePkg/MdeModulePkg.dec + MdePkg/MdePkg.dec + Silicon/NXP/NxpQoriqLs.dec + +[LibraryClasses] + ArmPlatformLib + PrintLib + UefiBootServicesTableLib + UefiDriverEntryPoint + UefiRuntimeServicesTableLib + +[Protocols] + gEdkiiConfigurationManagerProtocolGuid + +[FixedPcd] + +[Pcd] + +[Depex] + TRUE diff --git a/Platform/NXP/Env.sh b/Platform/NXP/Env.sh new file mode 100755 index 0000000..3a8ad38 --- /dev/null +++ b/Platform/NXP/Env.sh @@ -0,0 +1,67 @@ +#!/bin/bash +# +# Copyright 2020 NXP +# Copyright 2020 Puresoftware Ltd +# +# SPDX-License-Identifier: BSD-2-Clause-Patent +## + +unset GCC_UTILITY GCC_VERSION MajorVersion MinorVersion + +if [ X"$CROSS_COMPILE_64" != X"" ]; then + ARM64_PREFIX="$CROSS_COMPILE_64" +elif [ X"$CROSS_COMPILE" != X"" ]; then + ARM64_PREFIX="$CROSS_COMPILE" +else + ARM64_PREFIX="aarch64-linux-gnu-" +fi + +GCC_UTILITY="${ARM64_PREFIX}gcc" +CheckGcc=`which $GCC_UTILITY >/dev/null 2>&1` +if [ "$?" -eq 0 ];then + GCC_VERSION=`$GCC_UTILITY -v 2>&1 | tail -n 1 | awk '{print $3}'` + MajorVersion=`echo $GCC_VERSION | cut -d . -f 1` + MinorVersion=`echo $GCC_VERSION | cut -d . -f 2` + GCC_ARCH_PREFIX= + + case $MajorVersion in + 4) + case $MinorVersion in + 9) + GCC_ARCH_PREFIX="GCC49_AARCH64_PREFIX" + ;; + *) + NOTSUPPORTED=1 + ;; + esac + ;; + 5) + case $MinorVersion in + 4) + GCC_ARCH_PREFIX="GCC5_AARCH64_PREFIX" + ;; + *) + GCC_ARCH_PREFIX="GCC5_AARCH64_PREFIX" + echo "Warning: ${GCC_UTILITY} version ($MajorVersion.$MinorVersion) has not been tested, please use at own risk." + ;; + esac + ;; + *) + GCC_ARCH_PREFIX="GCC5_AARCH64_PREFIX" + echo "Warning: ${GCC_UTILITY} version ($MajorVersion.$MinorVersion) has not been tested, please use at own risk." + ;; + esac + + [ -n "$GCC_ARCH_PREFIX" ] && { + export GCC_ARCH_PREFIX="$GCC_ARCH_PREFIX" + export "$GCC_ARCH_PREFIX=$ARM64_PREFIX" + } + + unset ARCH +else + echo "Error: ${GCC_UTILITY} not found. Please check PATH variable." + unset GCC_UTILITY GCC_VERSION MajorVersion MinorVersion +fi + +# Export edk2-platforms path +export PACKAGES_PATH=`dirname \`dirname "$PWD"\`` diff --git a/Platform/NXP/LX2160aRdbPkg/Include/Platform.h b/Platform/NXP/LX2160aRdbPkg/Include/Platform.h new file mode 100644 index 0000000..e11ac37 --- /dev/null +++ b/Platform/NXP/LX2160aRdbPkg/Include/Platform.h @@ -0,0 +1,240 @@ +/** @file + * Platform headers + * + * Copyright 2020 NXP + * Copyright 2020 Puresoftware Ltd + * + * SPDX-License-Identifier: BSD-2-Clause-Patent + * +**/ + + +#ifndef LX2160ARDB_PLATFORM_H +#define LX2160ARDB_PLATFORM_H + +#define EFI_ACPI_ARM_OEM_REVISION 0x00000000 + +// Soc defines +#define SVR_SOC_VER(svr) (((svr) >> 8) & 0xFFFFFE) +#define SVR_MAJOR(svr) (((svr) >> 4) & 0xf) +#define SVR_MINOR(svr) (((svr) >> 0) & 0xf) + +#define SVR_LX2160A 0x873600 + +// Gic +#define GIC_VERSION 3 +#define GICD_BASE 0x6000000 +#define GICI_BASE 0x6020000 +#define GICR_BASE 0x06200000 +#define GICR_LEN 0x200000 +#define GICC_BASE 0x0c0c0000 +#define GICH_BASE 0x0c0d0000 +#define GICV_BASE 0x0c0e0000 + +// UART +#define UART0_BASE 0x21C0000 +#define UART1_BASE 0x21D0000 +#define UART2_BASE 0x21E0000 +#define UART3_BASE 0x21F0000 +#define UART0_IT 64 +#define UART1_IT 65 +#define UART2_IT 104 +#define UART3_IT 105 +#define UART_LEN 0x10000 +#define SPCR_FLOW_CONTROL_NONE 0 + +// Timer +#define TIMER_BLOCK_COUNT 1 +#define TIMER_FRAME_COUNT 4 +#define TIMER_WATCHDOG_COUNT 1 +#define TIMER_BASE_ADDRESS 0x23E0000 // a.k.a CNTControlBase +#define TIMER_READ_BASE_ADDRESS 0x23F0000 // a.k.a CNTReadBase +#define TIMER_GT_BLOCK_0_ADDRESS 0x2890000 // a.k.a CNTCTLBase (Secure) +#define TIMER_GT_BASE_0_ADDRESS 0x28A0000 // a.k.a CNTBase0 +#define TIMER_GT_BASE_1_ADDRESS 0x28B0000 // a.k.a CNTBase1 +#define TIMER_GT_BASE_2_ADDRESS 0x28C0000 // a.k.a CNTBase2 +#define TIMER_GT_BASE_3_ADDRESS 0x28D0000 // a.k.a CNTBase3 +#define TIMER_GT_BASE_0_EL0_ADDRESS 0x28E0000 // a.k.a CNTBase0EL0 +#define TIMER_GT_BASE_2_EL0_ADDRESS 0x28F0000 // a.k.a CNTBase2EL0 +#define TIMER_WDT0_REFRESH_BASE 0x2390000 +#define TIMER_WDT0_CONTROL_BASE 0x23A0000 +#define TIMER_SEC_IT 29 +#define TIMER_NON_SEC_IT 30 +#define TIMER_VIRT_IT 27 +#define TIMER_HYP_IT 26 +#define TIMER_FRAME0_IT 78 +#define TIMER_FRAME1_IT 79 +#define TIMER_FRAME2_IT 92 +#define TIMER_FRAME3_IT 93 +#define TIMER_WDT0_IT 91 + +#define DEFAULT_PLAT_FREQ 700000000 + +// Mcfg +#define LX2160A_PCI_SEG0_CONFIG_BASE 0x9000000000 +#define LX2160A_PCI_SEG0 0x2 +#define LX2160A_PCI_SEG_BUSNUM_MIN 0x0 +#define LX2160A_PCI_SEG_BUSNUM_MAX 0xff +#define LX2160A_PCI_SEG1_CONFIG_BASE 0xA000000000 +#define LX2160A_PCI_SEG1 0x4 + +// Platform specific info needed by Configuration Manager + +#define CFG_MGR_TABLE_ID SIGNATURE_64 ('L','X','2','1','6','0',' ',' ') + +#define PLAT_PCI_SEG0_CONFIG_BASE LX2160A_PCI_SEG0_CONFIG_BASE +#define PLAT_PCI_SEG0 LX2160A_PCI_SEG0 +#define PLAT_PCI_SEG_BUSNUM_MIN LX2160A_PCI_SEG_BUSNUM_MIN +#define PLAT_PCI_SEG_BUSNUM_MAX LX2160A_PCI_SEG_BUSNUM_MAX +#define PLAT_PCI_SEG1_CONFIG_BASE LX2160A_PCI_SEG1_CONFIG_BASE +#define PLAT_PCI_SEG1 LX2160A_PCI_SEG1 + +#define PLAT_GIC_VERSION GIC_VERSION +#define PLAT_GICD_BASE GICD_BASE +#define PLAT_GICI_BASE GICI_BASE +#define PLAT_GICR_BASE GICR_BASE +#define PLAT_GICR_LEN GICR_LEN +#define PLAT_GICC_BASE GICC_BASE +#define PLAT_GICH_BASE GICH_BASE +#define PLAT_GICV_BASE GICV_BASE + +#define PLAT_CPU_COUNT 16 +#define PLAT_GTBLOCK_COUNT 1 +#define PLAT_GTFRAME_COUNT 4 +#define PLAT_PCI_CONFG_COUNT 2 + +#define PLAT_WATCHDOG_COUNT 1 +#define PLAT_GIC_REDISTRIBUTOR_COUNT 1 +#define PLAT_GIC_ITS_COUNT 1 + +/* GIC CPU Interface information + GIC_ENTRY (CPUInterfaceNumber, Mpidr, PmuIrq, VGicIrq, EnergyEfficiency) + */ +#define PLAT_GIC_CPU_INTERFACE { \ + GICC_ENTRY (0, GET_MPID (0, 0), 23, 0x19, 0), \ + GICC_ENTRY (1, GET_MPID (0, 1), 23, 0x19, 0), \ + GICC_ENTRY (2, GET_MPID (1, 0), 23, 0x19, 0), \ + GICC_ENTRY (3, GET_MPID (1, 1), 23, 0x19, 0), \ + GICC_ENTRY (4, GET_MPID (2, 0), 23, 0x19, 0), \ + GICC_ENTRY (5, GET_MPID (2, 1), 23, 0x19, 0), \ + GICC_ENTRY (6, GET_MPID (3, 0), 23, 0x19, 0), \ + GICC_ENTRY (7, GET_MPID (3, 1), 23, 0x19, 0), \ + GICC_ENTRY (8, GET_MPID (4, 0), 23, 0x19, 0), \ + GICC_ENTRY (9, GET_MPID (4, 1), 23, 0x19, 0), \ + GICC_ENTRY (10, GET_MPID (5, 0), 23, 0x19, 0), \ + GICC_ENTRY (11, GET_MPID (5, 1), 23, 0x19, 0), \ + GICC_ENTRY (12, GET_MPID (6, 0), 23, 0x19, 0), \ + GICC_ENTRY (13, GET_MPID (6, 1), 23, 0x19, 0), \ + GICC_ENTRY (14, GET_MPID (7, 0), 23, 0x19, 0), \ + GICC_ENTRY (15, GET_MPID (7, 1), 23, 0x19, 0) \ +} + +// watchdogs +#define PLAT_WATCHDOG_INFO \ + { \ + TIMER_WDT0_CONTROL_BASE, \ + TIMER_WDT0_REFRESH_BASE, \ + TIMER_WDT0_IT, \ + SBSA_WATCHDOG_FLAGS \ + } \ + +#define PLAT_TIMER_BLOCK_INFO \ + { \ + { \ + TIMER_GT_BLOCK_0_ADDRESS, \ + PLAT_GTFRAME_COUNT, \ + (CM_OBJECT_TOKEN)((UINT8*)&FslPlatformRepositoryInfo + \ + OFFSET_OF (EDKII_PLATFORM_REPOSITORY_INFO, GTBlock0TimerInfo)) \ + } \ + } \ + +#define PLAT_TIMER_FRAME_INFO \ + { \ + { \ + 0, /* UINT8 GTFrameNumber */ \ + TIMER_GT_BASE_0_ADDRESS, /* UINT64 CntBaseX */ \ + TIMER_GT_BASE_0_EL0_ADDRESS, /* UINT64 CntEL0BaseX */ \ + TIMER_FRAME0_IT, /* UINT32 GTxPhysicalTimerGSIV */ \ + GTDT_FRAME_FLAGS, /* UINT32 GTxPhysicalTimerFlags */ \ + TIMER_FRAME0_IT, /* UINT32 GTxVirtualTimerGSIV */ \ + GTDT_FRAME_FLAGS, /* UINT32 GTxVirtualTimerFlags */ \ + 0 /* UINT32 GTxCommonFlags */ \ + }, /* Gtdt.Frames[0] */ \ + { \ + 1, /* UINT8 GTFrameNumber */ \ + TIMER_GT_BASE_1_ADDRESS, /* UINT64 CntBaseX */ \ + GT_BLOCK_FRAME_RES_BASE, /* UINT64 CntEL0BaseX */ \ + TIMER_FRAME1_IT, /* UINT32 GTxPhysicalTimerGSIV */ \ + GTDT_FRAME_FLAGS, /* UINT32 GTxPhysicalTimerFlags */ \ + 0, /* UINT32 GTxVirtualTimerGSIV */ \ + 0, /* UINT32 GTxVirtualTimerFlags */ \ + GTDT_FRAME_COMMON_FLAGS /* UINT32 GTxCommonFlags */ \ + }, /* Gtdt.Frames[1] */ \ + { \ + 2, /* UINT8 GTFrameNumber */ \ + TIMER_GT_BASE_2_ADDRESS, /* UINT64 CntBaseX */ \ + TIMER_GT_BASE_2_EL0_ADDRESS, /* UINT64 CntEL0BaseX */ \ + TIMER_FRAME2_IT, /* UINT32 GTxPhysicalTimerGSIV */ \ + GTDT_FRAME_FLAGS, /* UINT32 GTxPhysicalTimerFlags */ \ + 0, /* UINT32 GTxVirtualTimerGSIV */ \ + 0, /* UINT32 GTxVirtualTimerFlags */ \ + GTDT_FRAME_COMMON_FLAGS /* UINT32 GTxCommonFlags */ \ + },/* Gtdt.Frames[2] */ \ + { \ + 3, /* UINT8 GTFrameNumber */ \ + TIMER_GT_BASE_3_ADDRESS, /* UINT64 CntBaseX */ \ + GT_BLOCK_FRAME_RES_BASE, /* UINT64 CntEL0BaseX */ \ + TIMER_FRAME3_IT, /* UINT32 GTxPhysicalTimerGSIV */ \ + GTDT_FRAME_FLAGS, /* UINT32 GTxPhysicalTimerFlags */ \ + 0, /* UINT32 GTxVirtualTimerGSIV */ \ + 0, /* UINT32 GTxVirtualTimerFlags */ \ + GTDT_FRAME_COMMON_FLAGS /* UINT32 GTxCommonFlags */ \ + }, /* Gtdt.Frames[3] */ \ + } \ + +#define PLAT_GIC_DISTRIBUTOR_INFO \ + { \ + PLAT_GICD_BASE, /* UINT64 PhysicalBaseAddress */ \ + 0, /* UINT32 SystemVectorBase */ \ + PLAT_GIC_VERSION /* UINT8 GicVersion */ \ + } \ + +#define PLAT_GIC_REDISTRIBUTOR_INFO \ + { \ + PLAT_GICR_BASE, /* UINT64 DiscoveryRangeBaseAddress */ \ + PLAT_GICR_LEN /* UINT32 DiscoveryRangeLength */ \ + } \ + +#define PLAT_GIC_ITS_INFO \ + { \ + 0, /* UINT32 GIC ITS ID */ \ + PLAT_GICI_BASE, /* UINT64 The 64-bit physical address for ITS */ \ + 0 /* UINT32 Populate the GIC ITS affinity in SRAT. */ \ + } \ + +#define PLAT_MCFG_INFO \ + { \ + { \ + PLAT_PCI_SEG0_CONFIG_BASE, \ + PLAT_PCI_SEG0, \ + PLAT_PCI_SEG_BUSNUM_MIN, \ + PLAT_PCI_SEG_BUSNUM_MAX, \ + }, \ + { \ + PLAT_PCI_SEG1_CONFIG_BASE, \ + PLAT_PCI_SEG1, \ + PLAT_PCI_SEG_BUSNUM_MIN, \ + PLAT_PCI_SEG_BUSNUM_MAX, \ + } \ + } \ + +#define PLAT_SPCR_INFO \ + { \ + UART0_BASE, \ + UART0_IT, \ + 115200, \ + 0, \ + EFI_ACPI_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE_INTERFACE_TYPE_ARM_PL011_UART \ + } \ + +#endif // LX2160ARDB_PLATFORM_H diff --git a/Platform/NXP/LX2160aRdbPkg/LX2160aRdbPkg.dec b/Platform/NXP/LX2160aRdbPkg/LX2160aRdbPkg.dec index 03996b0..459440c 100644 --- a/Platform/NXP/LX2160aRdbPkg/LX2160aRdbPkg.dec +++ b/Platform/NXP/LX2160aRdbPkg/LX2160aRdbPkg.dec @@ -2,6 +2,7 @@ # LX2160a board package. # # Copyright 2018, 2020 NXP +# Copyright 2020 Puresoftware Ltd # # SPDX-License-Identifier: BSD-2-Clause-Patent # diff --git a/Platform/NXP/LX2160aRdbPkg/LX2160aRdbPkg.dsc b/Platform/NXP/LX2160aRdbPkg/LX2160aRdbPkg.dsc index 7132b3e..6ba429d 100644 --- a/Platform/NXP/LX2160aRdbPkg/LX2160aRdbPkg.dsc +++ b/Platform/NXP/LX2160aRdbPkg/LX2160aRdbPkg.dsc @@ -3,6 +3,7 @@ # LX2160ARDB Board package. # # Copyright 2018-2020 NXP +# Copyright 2020 Puresoftware Ltd # # SPDX-License-Identifier: BSD-2-Clause-Patent # @@ -29,9 +30,17 @@ DEFINE NETWORK_HTTP_BOOT_ENABLE = FALSE DEFINE NETWORK_ISCSI_ENABLE = FALSE + # This flag controls the dynamic acpi generation + # + DEFINE DYNAMIC_ACPI_ENABLE = TRUE + !include Silicon/NXP/NxpQoriqLs.dsc.inc !include Silicon/NXP/LX2160A/LX2160A.dsc.inc +!if $(DYNAMIC_ACPI_ENABLE) == TRUE + !include DynamicTablesPkg/DynamicTables.dsc.inc +!endif + [LibraryClasses.common] ArmPlatformLib|Platform/NXP/LX2160aRdbPkg/Library/ArmPlatformLib/ArmPlatformLib.inf RealTimeClockLib|EmbeddedPkg/Library/VirtualRealTimeClockLib/VirtualRealTimeClockLib.inf @@ -64,6 +73,25 @@ MdeModulePkg/Bus/Pci/PciBusDxe/PciBusDxe.inf # + # Dynamic Table Factory + !if $(DYNAMIC_ACPI_ENABLE) == TRUE + DynamicTablesPkg/Drivers/DynamicTableFactoryDxe/DynamicTableFactoryDxe.inf { + <LibraryClasses> + NULL|DynamicTablesPkg/Library/Acpi/Arm/AcpiFadtLibArm/AcpiFadtLibArm.inf + NULL|DynamicTablesPkg/Library/Acpi/Arm/AcpiGtdtLibArm/AcpiGtdtLibArm.inf + NULL|DynamicTablesPkg/Library/Acpi/Arm/AcpiMadtLibArm/AcpiMadtLibArm.inf + NULL|DynamicTablesPkg/Library/Acpi/Arm/AcpiMcfgLibArm/AcpiMcfgLibArm.inf + NULL|DynamicTablesPkg/Library/Acpi/Arm/AcpiSpcrLibArm/AcpiSpcrLibArm.inf + } + !endif + + # + # Acpi Support + # + MdeModulePkg/Universal/Acpi/AcpiPlatformDxe/AcpiPlatformDxe.inf + MdeModulePkg/Universal/Acpi/AcpiTableDxe/AcpiTableDxe.inf + + # # Networking stack # !include NetworkPkg/Network.dsc.inc diff --git a/Platform/NXP/LX2160aRdbPkg/LX2160aRdbPkg.fdf b/Platform/NXP/LX2160aRdbPkg/LX2160aRdbPkg.fdf index 111c845..0680565 100644 --- a/Platform/NXP/LX2160aRdbPkg/LX2160aRdbPkg.fdf +++ b/Platform/NXP/LX2160aRdbPkg/LX2160aRdbPkg.fdf @@ -3,6 +3,7 @@ # FLASH layout file for LX2160a board. # # Copyright 2018-2020 NXP +# Copyright 2020 Puresoftware Ltd # # SPDX-License-Identifier: BSD-2-Clause-Patent # @@ -103,6 +104,17 @@ READ_LOCK_STATUS = TRUE INF MdeModulePkg/Universal/HiiDatabaseDxe/HiiDatabaseDxe.inf # + # Acpi Support + # + INF MdeModulePkg/Universal/Acpi/AcpiPlatformDxe/AcpiPlatformDxe.inf + INF MdeModulePkg/Universal/Acpi/AcpiTableDxe/AcpiTableDxe.inf + + !if $(DYNAMIC_ACPI_ENABLE) == TRUE + INF Platform/NXP/ConfigurationManagerPkg/ConfigurationManagerDxe/ConfigurationManagerDxe.inf + !include DynamicTablesPkg/DynamicTables.fdf.inc + !endif + + # # Multiple Console IO support # INF MdeModulePkg/Universal/Console/ConPlatformDxe/ConPlatformDxe.inf diff --git a/Platform/NXP/Readme.md b/Platform/NXP/Readme.md index 2d60d7c..878df75 100644 --- a/Platform/NXP/Readme.md +++ b/Platform/NXP/Readme.md @@ -2,4 +2,37 @@ Support for all NXP boards is available in this directory. # How to build -Please follow top-level Readme.md for build instructions.. +Introduced a "build.sh" script under edk2-platforms/NXP/ to automate fsl +platforms build system. Also called UEFI build script for NXP Layer Scape +SoCs And also mandatorily needed to support Dynamic ACPI framework for fsl +based platforms. +This script intend to: + - Setup workspace + - Setup BaseTools in edk2 + - Setup Target and Tools needed + - Finally exports variables if needed (in case of Dynamic ACPI) + +Most importantly it uses source environment file "Env.sh". +This file sources in: + - GCC VERSION info + - CROSS COMPILE info + - ARCH info etc. + +This build shell script (build.sh) expects: + Arg 1 (mandatory): SoC Type (can be LS1046 / LS2088 / LX2160 / LS1028). + Arg 2 (mandatory): Board Type (can be RDB / QDS /FRWY). + Arg 3 (mandatory): Build candidate (can be RELEASE or DEBUG). + By default we build the RELEASE candidate. + Arg 4 (optional): clean - To do a 'make clean' operation. + +Usage: $ ./build.sh <Soc Type> <Board Type> <Build Type> + +E.g: $ ./build.sh LX2160 RDB RELEASE + Or + $ ./build.sh LX2160 RDB RELEASE clean // For build cleanup + +# Prerequisites + +Please follow top-level Readme.md's "Obtaining source code" tag +https://github.com/tianocore/edk2-platforms#obtaining-source-code +for sources. diff --git a/Platform/NXP/build.sh b/Platform/NXP/build.sh new file mode 100755 index 0000000..0c47e73 --- /dev/null +++ b/Platform/NXP/build.sh @@ -0,0 +1,115 @@ +#!/bin/bash +# UEFI build script for NXP Layer Scape SoCs +# +# Copyright 2020 NXP +# Copyright 2020 Puresoftware Ltd +# +# SPDX-License-Identifier: BSD-2-Clause-Patent +## + +# source environment file +source Env.sh + +# Global Defaults +ARCH=AARCH64 +TARGET_TOOLS=`echo $GCC_ARCH_PREFIX | cut -d _ -f 1` +BASE_DIR=../../.. + +[ -z "$TARGET_TOOLS" ] && { + echo "TARGET_TOOLS not found. Please run \"source Env.cshrc\" ." + exit 1 +} + +print_usage_banner() +{ + echo "" + echo "This shell script expects:" + echo " Arg 1 (mandatory): SoC Type (can be LS1043 / LS1046 / LS2088 / LX2160 / LS1028)." + echo " Arg 2 (mandatory): Board Type (can be RDB / QDS /FRWY)." + echo " Arg 3 (mandatory): Build candidate (can be RELEASE or DEBUG). By + default we build the RELEASE candidate." + echo " Arg 4 (optional): clean - To do a 'make clean' operation." +} + +# Check for total num of input arguments +if [[ "$#" -gt 4 ]]; then + echo "Illegal number of parameters" + print_usage_banner + exit +fi + +# Check for third parameter to be clean only +if [[ "$4" && $4 != "clean" ]]; then + echo "Error ! Either clean or emplty" + print_usage_banner + exit +fi + +# Check for input arguments +if [[ $1 == "" || $2 == "" || $3 == "" ]]; then + echo "Error !" + print_usage_banner + exit +fi + +# Check for input arguments +if [[ $1 != "LS1043" && $1 != "LS1046" && $1 != "LS2088" && $1 != "LX2160" && $1 != "LS1028" ]]; then + echo "Error ! Incorrect Soc Type specified." + print_usage_banner + exit +fi + +# Check for input arguments +if [[ $2 != "RDB" && $2 != "QDS" && $2 != "FRWY" ]]; then + echo "Error ! Incorrect Board Type specified." + print_usage_banner + exit +fi + +# Check for input arguments +if [[ $3 != "RELEASE" ]]; then + if [[ $3 != "DEBUG" ]]; then + echo "Error ! Incorrect build target specified." + print_usage_banner + exit + fi +fi + +# Set Package drirectory +if [[ $2 == "RDB" ]]; then + PKG="aRdbPkg" + if [[ $2 == "QDS" ]]; then + PKG="aQdsPkg" + fi +elif [[ $2 == "FRWY" ]]; then + PKG="aFrwyPkg" +fi + +echo ".........................................." +echo "Welcome to $1$PKG UEFI Build environment" +echo ".........................................." + +if [[ $4 == "clean" ]]; then + echo "Cleaning up the build directory '$BASE_DIR/Build/$1$PKG/'.." + rm -rf $BASE_DIR/Build/$1$PKG/* + exit +fi + +# Clean-up +set -e +shopt -s nocasematch + +# +# Setup workspace now +# +echo Initializing workspace +cd $BASE_DIR + +# Use the BaseTools in edk2 +export EDK_TOOLS_PATH=`pwd`/BaseTools +source edksetup.sh BaseTools + +export DYNAMIC_ACPI_PLATFORM=$1$PKG +export DYNAMIC_ACPI_INC="$1A" + +build -p "$PACKAGES_PATH/Platform/NXP/$1$PKG/$1$PKG.dsc" -a $ARCH -t $TARGET_TOOLS -b $3 diff --git a/Silicon/NXP/LX2160A/LX2160A.dsc.inc b/Silicon/NXP/LX2160A/LX2160A.dsc.inc index 856fc59..149376f 100644 --- a/Silicon/NXP/LX2160A/LX2160A.dsc.inc +++ b/Silicon/NXP/LX2160A/LX2160A.dsc.inc @@ -63,4 +63,13 @@ [Components.common] ArmPkg/Drivers/GenericWatchdogDxe/GenericWatchdogDxe.inf + # + # Configuration Manager +!if $(DYNAMIC_ACPI_ENABLE) == TRUE + Platform/NXP/ConfigurationManagerPkg/ConfigurationManagerDxe/ConfigurationManagerDxe.inf { + <BuildOptions> + *_*_*_PLATFORM_FLAGS = -I$(WORKSPACE)/Platform/NXP/$(DYNAMIC_ACPI_PLATFORM)/Include + } +!endif + ## -- 2.7.4 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH v2 1/2] Platform/NXP: Add Dynamic Acpi for layerscape platforms 2021-01-27 6:44 ` [PATCH v2 1/2] Platform/NXP: Add Dynamic Acpi for " Vikas Singh @ 2021-02-15 13:55 ` Leif Lindholm 0 siblings, 0 replies; 9+ messages in thread From: Leif Lindholm @ 2021-02-15 13:55 UTC (permalink / raw) To: Vikas Singh Cc: devel, sami.mujawar, meenakshi.aggarwal, paul.yang, augustine.philips, samer.el-haj-mahmoud, v.sethi, arokia.samy, kuldip.dwivedi, ard.biesheuvel, vikas.singh On Wed, Jan 27, 2021 at 12:14:58 +0530, Vikas Singh wrote: > These changes intend to add Common Configuration Manager (CM) > for all fsl platforms and Platform headers consumed by CM for > LX2160ARDB. > > Signed-off-by: Vikas Singh <vikas.singh@puresoftware.com> > --- > .../ConfigurationManagerDxe/ConfigurationManager.c | 834 +++++++++++++++++++++ > .../ConfigurationManagerDxe/ConfigurationManager.h | 151 ++++ > .../ConfigurationManagerDxe.inf | 51 ++ > Platform/NXP/Env.sh | 67 ++ > Platform/NXP/LX2160aRdbPkg/Include/Platform.h | 240 ++++++ > Platform/NXP/LX2160aRdbPkg/LX2160aRdbPkg.dec | 1 + > Platform/NXP/LX2160aRdbPkg/LX2160aRdbPkg.dsc | 28 + > Platform/NXP/LX2160aRdbPkg/LX2160aRdbPkg.fdf | 12 + > Platform/NXP/Readme.md | 35 +- > Platform/NXP/build.sh | 115 +++ > Silicon/NXP/LX2160A/LX2160A.dsc.inc | 9 + > 11 files changed, 1542 insertions(+), 1 deletion(-) > create mode 100644 Platform/NXP/ConfigurationManagerPkg/ConfigurationManagerDxe/ConfigurationManager.c > create mode 100644 Platform/NXP/ConfigurationManagerPkg/ConfigurationManagerDxe/ConfigurationManager.h > create mode 100644 Platform/NXP/ConfigurationManagerPkg/ConfigurationManagerDxe/ConfigurationManagerDxe.inf > create mode 100755 Platform/NXP/Env.sh > create mode 100644 Platform/NXP/LX2160aRdbPkg/Include/Platform.h > create mode 100755 Platform/NXP/build.sh > > diff --git a/Platform/NXP/ConfigurationManagerPkg/ConfigurationManagerDxe/ConfigurationManager.c b/Platform/NXP/ConfigurationManagerPkg/ConfigurationManagerDxe/ConfigurationManager.c > new file mode 100644 > index 0000000..bec9131 > --- /dev/null > +++ b/Platform/NXP/ConfigurationManagerPkg/ConfigurationManagerDxe/ConfigurationManager.c > @@ -0,0 +1,834 @@ > +/** @file > + Configuration Manager Dxe > + > + Copyright 2020 NXP > + Copyright 2020 Puresoftware Ltd > + > + SPDX-License-Identifier: BSD-2-Clause-Patent > + > + @par Glossary: > + - Cm or CM - Configuration Manager > + - Obj or OBJ - Object > +**/ > + > +#include <IndustryStandard/MemoryMappedConfigurationSpaceAccessTable.h> > +#include <IndustryStandard/SerialPortConsoleRedirectionTable.h> > +#include <Library/ArmLib.h> > +#include <Library/DebugLib.h> > +#include <Library/IoLib.h> > +#include <Library/PcdLib.h> > +#include <Library/UefiBootServicesTableLib.h> > +#include <Protocol/AcpiTable.h> > +#include <Protocol/ConfigurationManagerProtocol.h> > + > +/** The platform specific headers > +*/ > +#include "ConfigurationManager.h" > +#include <Library/SocLib.h> > + > +/** The platform configuration repository information. > +*/ > +STATIC > +FSL_PLATFORM_REPOSITORY_INFO FslPlatformRepositoryInfo = { > + /// Configuration Manager information > + { CONFIGURATION_MANAGER_REVISION, CFG_MGR_OEM_ID }, > + > + // ACPI Table List > + { > + // FADT Table > + { > + EFI_ACPI_6_2_FIXED_ACPI_DESCRIPTION_TABLE_SIGNATURE, > + EFI_ACPI_6_2_FIXED_ACPI_DESCRIPTION_TABLE_REVISION, > + CREATE_STD_ACPI_TABLE_GEN_ID (EStdAcpiTableIdFadt), > + NULL, > + CFG_MGR_TABLE_ID > + }, > + > + // GTDT Table > + { > + EFI_ACPI_6_2_GENERIC_TIMER_DESCRIPTION_TABLE_SIGNATURE, > + EFI_ACPI_6_2_GENERIC_TIMER_DESCRIPTION_TABLE_REVISION, > + CREATE_STD_ACPI_TABLE_GEN_ID (EStdAcpiTableIdGtdt), > + NULL, > + CFG_MGR_TABLE_ID > + }, > + > + // MADT Table > + { > + EFI_ACPI_6_2_MULTIPLE_APIC_DESCRIPTION_TABLE_SIGNATURE, > + EFI_ACPI_6_2_MULTIPLE_APIC_DESCRIPTION_TABLE_REVISION, > + CREATE_STD_ACPI_TABLE_GEN_ID (EStdAcpiTableIdMadt), > + NULL, > + CFG_MGR_TABLE_ID > + }, > + > + // PCI MCFG Table > + { > + EFI_ACPI_6_2_PCI_EXPRESS_MEMORY_MAPPED_CONFIGURATION_SPACE_BASE_ADDRESS_DESCRIPTION_TABLE_SIGNATURE, > + EFI_ACPI_MEMORY_MAPPED_CONFIGURATION_SPACE_ACCESS_TABLE_REVISION, > + CREATE_STD_ACPI_TABLE_GEN_ID (EStdAcpiTableIdMcfg), > + NULL, > + CFG_MGR_TABLE_ID > + }, > + > + // SPCR Table > + { > + EFI_ACPI_6_2_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE_SIGNATURE, > + EFI_ACPI_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE_REVISION, > + CREATE_STD_ACPI_TABLE_GEN_ID (EStdAcpiTableIdSpcr), > + NULL, > + CFG_MGR_TABLE_ID > + } > + > + }, > + > + // Boot architecture information > + { EFI_ACPI_6_2_ARM_PSCI_COMPLIANT }, // BootArchFlags > + > + // Power management profile information > + { EFI_ACPI_6_2_PM_PROFILE_ENTERPRISE_SERVER }, // PowerManagement Profile > + > + // Generic Timer Info > + { > + // The physical base address for the counter control frame > + TIMER_BASE_ADDRESS, > + // The physical base address for the counter read frame > + TIMER_READ_BASE_ADDRESS, > + // The secure PL1 timer interrupt > + TIMER_SEC_IT, > + // The secure PL1 timer flags > + GTDT_GTIMER_FLAGS, > + // The non-secure PL1 timer interrupt > + TIMER_NON_SEC_IT, > + // The non-secure PL1 timer flags > + GTDT_GTIMER_FLAGS, > + // The virtual timer interrupt > + TIMER_VIRT_IT, > + // The virtual timer flags > + GTDT_GTIMER_FLAGS, > + // The non-secure PL2 timer interrupt > + TIMER_HYP_IT, > + // The non-secure PL2 timer flags > + GTDT_GTIMER_FLAGS > + }, > + > + // Generic Timer Block Information > + PLAT_TIMER_BLOCK_INFO, > + > + // GTDT Frames > + PLAT_TIMER_FRAME_INFO, > + > + // Watchdog info > + PLAT_WATCHDOG_INFO, > + > + // GIC CPU Interface information > + PLAT_GIC_CPU_INTERFACE, > + > + // GIC Distributor Info > + PLAT_GIC_DISTRIBUTOR_INFO, > + > + // GIC Redistributor > + PLAT_GIC_REDISTRIBUTOR_INFO, > + > + // GIC ITS > + PLAT_GIC_ITS_INFO, > + > + // MCFG Info > + PLAT_MCFG_INFO, > + > + // SPCR Info > + PLAT_SPCR_INFO, > + > + 2.0 // fsl board revision > +}; > + > +/** Initialize the platform configuration repository. > + > + @param [in] This Pointer to the Configuration Manager Protocol. > + > + @retval EFI_SUCCESS Success > +**/ > +STATIC > +EFI_STATUS > +EFIAPI > +InitializePlatformRepository ( > + IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL * CONST This > + ) > +{ > + FSL_PLATFORM_REPOSITORY_INFO * PlatformRepo; > + UINT32 Svr; > + > + PlatformRepo = This->PlatRepoInfo; > + > + Svr = SocGetSvr (); > + if (SVR_SOC_VER(Svr) == SVR_LX2160A) { > + PlatformRepo->FslBoardRevision = SVR_MAJOR(Svr); > + DEBUG ((DEBUG_INFO, "Fsl : SoC LX2160A Rev = 0x%x\n", PlatformRepo->FslBoardRevision)); > + } else { > + DEBUG ((DEBUG_INFO, "Fsl : SoC Unknown Rev = 0x%x\n", PlatformRepo->FslBoardRevision)); > + } > + > + return EFI_SUCCESS; > +} > + > +/** Return PCI Configuration Info. > + @param [in] This Pointer to the Configuration Manager Protocol. > + @param [in] CmObjectId The Object ID of the CM object requested > + @param [in] Token A unique token for identifying the requested > + CM_ARM_PCI_INFO object. > + @param [in, out] CmObject Pointer to the Configuration Manager Object > + descriptor describing the requested Object. > + @retval EFI_SUCCESS Success. > + @retval EFI_INVALID_PARAMETER A parameter is invalid. > + @retval EFI_NOT_FOUND The required object information is > + not found. > + **/ > +EFI_STATUS > +EFIAPI > +GetPciConfigInfo ( > + IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL * CONST This, > + IN CONST CM_OBJECT_ID CmObjectId, > + IN CONST CM_OBJECT_TOKEN Token, > + IN OUT CM_OBJ_DESCRIPTOR * CONST CmObject > + ) > +{ > + FSL_PLATFORM_REPOSITORY_INFO * PlatformRepo; > + UINT32 TotalObjCount; > + UINT32 ObjIndex; > + > + if ((This == NULL) || (CmObject == NULL)) { > + ASSERT (This != NULL); > + ASSERT (CmObject != NULL); > + return EFI_INVALID_PARAMETER; > + } > + > + PlatformRepo = This->PlatRepoInfo; > + > + TotalObjCount = ARRAY_SIZE (PlatformRepo->PciConfigInfo); > + > + for (ObjIndex = 0; ObjIndex < TotalObjCount; ObjIndex++) { > + if (Token == (CM_OBJECT_TOKEN)&PlatformRepo->PciConfigInfo[ObjIndex]) > + { > + CmObject->ObjectId = CmObjectId; > + CmObject->Size = sizeof (PlatformRepo->PciConfigInfo[ObjIndex]); > + CmObject->Data = (VOID*)&PlatformRepo->PciConfigInfo[ObjIndex]; > + CmObject->Count = 1; > + return EFI_SUCCESS; > + } > + } > + > + return EFI_NOT_FOUND; > +} > + > +/** Return GIC CPU Interface Info. > + @param [in] This Pointer to the Configuration Manager Protocol. > + @param [in] CmObjectId The Object ID of the CM object requested > + @param [in] Token A unique token for identifying the requested > + CM_ARM_GICC_INFO object. > + @param [in, out] CmObject Pointer to the Configuration Manager Object > + descriptor describing the requested Object. > + @retval EFI_SUCCESS Success. > + @retval EFI_INVALID_PARAMETER A parameter is invalid. > + @retval EFI_NOT_FOUND The required object information is > + not found. > + **/ > +EFI_STATUS > +EFIAPI > +GetGicCInfo ( > + IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL * CONST This, > + IN CONST CM_OBJECT_ID CmObjectId, > + IN CONST CM_OBJECT_TOKEN Token, > + IN OUT CM_OBJ_DESCRIPTOR * CONST CmObject > + ) > +{ > + FSL_PLATFORM_REPOSITORY_INFO * PlatformRepo; > + > + if ((This == NULL) || (CmObject == NULL)) { > + ASSERT (This != NULL); > + ASSERT (CmObject != NULL); > + return EFI_INVALID_PARAMETER; > + } > + > + PlatformRepo = This->PlatRepoInfo; > + > + if (Token != (CM_OBJECT_TOKEN)&PlatformRepo->GicCInfo) { > + return EFI_NOT_FOUND; > + } > + > + CmObject->ObjectId = CmObjectId; > + CmObject->Size = sizeof (PlatformRepo->GicCInfo); > + CmObject->Data = (VOID*)&PlatformRepo->GicCInfo; > + CmObject->Count = ARRAY_SIZE (PlatformRepo->GicCInfo); > + > + return EFI_SUCCESS; > +} > + > +/** Return a GT Block timer frame info list. > + @param [in] This Pointer to the Configuration Manager Protocol. > + @param [in] CmObjectId The Configuration Manager Object ID. > + @param [in] Token A token for identifying the object > + @param [in, out] CmObject Pointer to the Configuration Manager Object > + descriptor describing the requested Object. > + @retval EFI_SUCCESS Success. > + @retval EFI_INVALID_PARAMETER A parameter is invalid. > + @retval EFI_NOT_FOUND The required object information is not found. > + **/ > +EFI_STATUS > +EFIAPI > +GetGTBlockTimerFrameInfo ( > + IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL * CONST This, > + IN CONST CM_OBJECT_ID CmObjectId, > + IN CONST CM_OBJECT_TOKEN Token, > + IN OUT CM_OBJ_DESCRIPTOR * CONST CmObject > + ) > +{ > + FSL_PLATFORM_REPOSITORY_INFO * PlatformRepo; > + > + if ((This == NULL) || (CmObject == NULL)) { > + ASSERT (This != NULL); > + ASSERT (CmObject != NULL); > + return EFI_INVALID_PARAMETER; > + } > + > + PlatformRepo = This->PlatRepoInfo; > + > + if (Token != (CM_OBJECT_TOKEN)&PlatformRepo->GTBlock0TimerInfo) { > + return EFI_NOT_FOUND; > + } > + > + CmObject->ObjectId = CmObjectId; > + CmObject->Size = sizeof (PlatformRepo->GTBlock0TimerInfo); > + CmObject->Data = (VOID*)&PlatformRepo->GTBlock0TimerInfo; > + CmObject->Count = ARRAY_SIZE (PlatformRepo->GTBlock0TimerInfo); > + > + return EFI_SUCCESS; > +} > + > +/** A helper function for returning the Configuration Manager Objects. > + > + @param [in] CmObjectId The Configuration Manager Object ID. > + @param [in] Object Pointer to the Object(s). > + @param [in] ObjectSize Total size of the Object(s). > + @param [in] ObjectCount Number of Objects. > + @param [in, out] CmObjectDesc Pointer to the Configuration Manager Object > + descriptor describing the requested Object. > + > + @retval EFI_SUCCESS Success. > +**/ > +STATIC > +EFI_STATUS > +EFIAPI > +HandleCmObject ( > + IN CONST CM_OBJECT_ID CmObjectId, > + IN VOID * Object, > + IN CONST UINTN ObjectSize, > + IN CONST UINTN ObjectCount, > + IN OUT CM_OBJ_DESCRIPTOR * CONST CmObjectDesc > + ) > +{ > + CmObjectDesc->ObjectId = CmObjectId; > + CmObjectDesc->Size = ObjectSize; > + CmObjectDesc->Data = (VOID*)Object; > + CmObjectDesc->Count = ObjectCount; > + DEBUG (( > + DEBUG_INFO, > + "INFO: CmObjectId = %x, Ptr = 0x%p, Size = %d, Count = %d\n", > + CmObjectId, > + CmObjectDesc->Data, > + CmObjectDesc->Size, > + CmObjectDesc->Count > + )); > + return EFI_SUCCESS; > +} > + > +/** A helper function for returning the Configuration Manager Objects that > + match the token. > + > + @param [in] This Pointer to the Configuration Manager Protocol. > + @param [in] CmObjectId The Configuration Manager Object ID. > + @param [in] Object Pointer to the Object(s). > + @param [in] ObjectSize Total size of the Object(s). > + @param [in] ObjectCount Number of Objects. > + @param [in] Token A token identifying the object. > + @param [in] HandlerProc A handler function to search the object > + referenced by the token. > + @param [in, out] CmObjectDesc Pointer to the Configuration Manager Object > + descriptor describing the requested Object. > + > + @retval EFI_SUCCESS Success. > + @retval EFI_INVALID_PARAMETER A parameter is invalid. > + @retval EFI_NOT_FOUND The required object information is not found. > +**/ > +STATIC > +EFI_STATUS > +EFIAPI > +HandleCmObjectRefByToken ( > + IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL * CONST This, > + IN CONST CM_OBJECT_ID CmObjectId, > + IN VOID * Object, > + IN CONST UINTN ObjectSize, > + IN CONST UINTN ObjectCount, > + IN CONST CM_OBJECT_TOKEN Token, > + IN CONST CM_OBJECT_HANDLER_PROC HandlerProc, > + IN OUT CM_OBJ_DESCRIPTOR * CONST CmObjectDesc > + ) > +{ > + EFI_STATUS Status; > + CmObjectDesc->ObjectId = CmObjectId; > + if (Token == CM_NULL_TOKEN) { > + CmObjectDesc->Size = ObjectSize; > + CmObjectDesc->Data = (VOID*)Object; > + CmObjectDesc->Count = ObjectCount; > + Status = EFI_SUCCESS; > + } else { > + Status = HandlerProc (This, CmObjectId, Token, CmObjectDesc); > + } > + > + DEBUG (( > + DEBUG_INFO, > + "INFO: Token = 0x%p, CmObjectId = %x, Ptr = 0x%p, Size = %d, Count = %d\n", > + (VOID*)Token, > + CmObjectId, > + CmObjectDesc->Data, > + CmObjectDesc->Size, > + CmObjectDesc->Count > + )); > + return Status; > +} > + > +/** Return a standard namespace object. > + > + @param [in] This Pointer to the Configuration Manager Protocol. > + @param [in] CmObjectId The Configuration Manager Object ID. > + @param [in] Token An optional token identifying the object. If > + unused this must be CM_NULL_TOKEN. > + @param [in, out] CmObject Pointer to the Configuration Manager Object > + descriptor describing the requested Object. > + > + @retval EFI_SUCCESS Success. > + @retval EFI_INVALID_PARAMETER A parameter is invalid. > + @retval EFI_NOT_FOUND The required object information is not found. > +**/ > +EFI_STATUS > +EFIAPI > +GetStandardNameSpaceObject ( > + IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL * CONST This, > + IN CONST CM_OBJECT_ID CmObjectId, > + IN CONST CM_OBJECT_TOKEN Token OPTIONAL, > + IN OUT CM_OBJ_DESCRIPTOR * CONST CmObject > + ) > +{ > + EFI_STATUS Status; > + FSL_PLATFORM_REPOSITORY_INFO * PlatformRepo; > + > + Status = EFI_SUCCESS; > + if ((This == NULL) || (CmObject == NULL)) { > + ASSERT (This != NULL); > + ASSERT (CmObject != NULL); > + return EFI_INVALID_PARAMETER; > + } > + PlatformRepo = This->PlatRepoInfo; > + > + switch (GET_CM_OBJECT_ID (CmObjectId)) { > + case EStdObjCfgMgrInfo: > + Status = HandleCmObject ( > + CmObjectId, > + &PlatformRepo->CmInfo, > + sizeof (PlatformRepo->CmInfo), > + 1, > + CmObject > + ); > + break; > + case EStdObjAcpiTableList: > + Status = HandleCmObject ( > + CmObjectId, > + &PlatformRepo->CmAcpiTableList, > + sizeof (PlatformRepo->CmAcpiTableList), > + ARRAY_SIZE (PlatformRepo->CmAcpiTableList), > + CmObject > + ); > + break; > + default: { > + Status = EFI_NOT_FOUND; > + DEBUG (( > + DEBUG_ERROR, > + "ERROR: Object 0x%x. Status = %r\n", > + CmObjectId, > + Status > + )); > + break; > + } > + } > + > + return Status; > +} > + > +/** Return an ARM namespace object. > + > + @param [in] This Pointer to the Configuration Manager Protocol. > + @param [in] CmObjectId The Configuration Manager Object ID. > + @param [in] Token An optional token identifying the object. If > + unused this must be CM_NULL_TOKEN. > + @param [in, out] CmObject Pointer to the Configuration Manager Object > + descriptor describing the requested Object. > + > + @retval EFI_SUCCESS Success. > + @retval EFI_INVALID_PARAMETER A parameter is invalid. > + @retval EFI_NOT_FOUND The required object information is not found. > +**/ > +EFI_STATUS > +EFIAPI > +GetArmNameSpaceObject ( > + IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL * CONST This, > + IN CONST CM_OBJECT_ID CmObjectId, > + IN CONST CM_OBJECT_TOKEN Token OPTIONAL, > + IN OUT CM_OBJ_DESCRIPTOR * CONST CmObject > + ) > +{ > + EFI_STATUS Status; > + FSL_PLATFORM_REPOSITORY_INFO * PlatformRepo; > + > + Status = EFI_SUCCESS; > + if ((This == NULL) || (CmObject == NULL)) { > + ASSERT (This != NULL); > + ASSERT (CmObject != NULL); > + return EFI_INVALID_PARAMETER; > + } > + PlatformRepo = This->PlatRepoInfo; > + > + switch (GET_CM_OBJECT_ID (CmObjectId)) { > + case EArmObjBootArchInfo: > + Status = HandleCmObject ( > + CmObjectId, > + &PlatformRepo->BootArchInfo, > + sizeof (PlatformRepo->BootArchInfo), > + 1, > + CmObject > + ); > + break; > + > + case EArmObjPowerManagementProfileInfo: > + Status = HandleCmObject ( > + CmObjectId, > + &PlatformRepo->PmProfileInfo, > + sizeof (PlatformRepo->PmProfileInfo), > + 1, > + CmObject > + ); > + break; > + > + case EArmObjGenericTimerInfo: > + Status = HandleCmObject ( > + CmObjectId, > + &PlatformRepo->GenericTimerInfo, > + sizeof (PlatformRepo->GenericTimerInfo), > + 1, > + CmObject > + ); > + break; > + > + case EArmObjPlatformGenericWatchdogInfo: > + Status = HandleCmObject ( > + CmObjectId, > + &PlatformRepo->Watchdog, > + sizeof (PlatformRepo->Watchdog), > + PLAT_WATCHDOG_COUNT, > + CmObject > + ); > + break; > + > + case EArmObjPlatformGTBlockInfo: > + Status = HandleCmObject ( > + CmObjectId, > + &PlatformRepo->GTBlockInfo, > + sizeof (PlatformRepo->GTBlockInfo), > + ARRAY_SIZE (PlatformRepo->GTBlockInfo), > + CmObject > + ); > + break; > + > + case EArmObjGTBlockTimerFrameInfo: > + Status = HandleCmObjectRefByToken ( > + This, > + CmObjectId, > + PlatformRepo->GTBlock0TimerInfo, > + sizeof (PlatformRepo->GTBlock0TimerInfo), > + ARRAY_SIZE (PlatformRepo->GTBlock0TimerInfo), > + Token, > + GetGTBlockTimerFrameInfo, > + CmObject > + ); > + break; > + > + case EArmObjGicCInfo: > + Status = HandleCmObjectRefByToken ( > + This, > + CmObjectId, > + PlatformRepo->GicCInfo, > + sizeof (PlatformRepo->GicCInfo), > + ARRAY_SIZE (PlatformRepo->GicCInfo), > + Token, > + GetGicCInfo, > + CmObject > + ); > + break; > + > + case EArmObjGicDInfo: > + Status = HandleCmObject ( > + CmObjectId, > + &PlatformRepo->GicDInfo, > + sizeof (PlatformRepo->GicDInfo), > + 1, > + CmObject > + ); > + break; > + > + case EArmObjGicRedistributorInfo: > + Status = HandleCmObject ( > + CmObjectId, > + &PlatformRepo->GicRedistInfo, > + sizeof (PlatformRepo->GicRedistInfo), > + PLAT_GIC_REDISTRIBUTOR_COUNT, > + CmObject > + ); > + break; > + > + case EArmObjGicItsInfo: > + Status = HandleCmObject ( > + CmObjectId, > + &PlatformRepo->GicItsInfo, > + sizeof (PlatformRepo->GicItsInfo), > + PLAT_GIC_ITS_COUNT, > + CmObject > + ); > + break; > + > + case EArmObjSerialConsolePortInfo: > + Status = HandleCmObject ( > + CmObjectId, > + &PlatformRepo->SpcrSerialPort, > + sizeof (PlatformRepo->SpcrSerialPort), > + 1, > + CmObject > + ); > + break; > + > + case EArmObjPciConfigSpaceInfo: > + Status = HandleCmObjectRefByToken ( > + This, > + CmObjectId, > + PlatformRepo->PciConfigInfo, > + sizeof (PlatformRepo->PciConfigInfo), > + ARRAY_SIZE (PlatformRepo->PciConfigInfo), > + Token, > + GetPciConfigInfo, > + CmObject > + ); > + break; > + > + default: { > + Status = EFI_NOT_FOUND; > + DEBUG (( > + DEBUG_INFO, > + "INFO: Object 0x%x. Status = %r\n", > + CmObjectId, > + Status > + )); > + break; > + } > + }//switch > + > + return Status; > +} > + > +/** Return an OEM namespace object. > + > + @param [in] This Pointer to the Configuration Manager Protocol. > + @param [in] CmObjectId The Configuration Manager Object ID. > + @param [in] Token An optional token identifying the object. If > + unused this must be CM_NULL_TOKEN. > + @param [in, out] CmObject Pointer to the Configuration Manager Object > + descriptor describing the requested Object. > + > + @retval EFI_SUCCESS Success. > + @retval EFI_INVALID_PARAMETER A parameter is invalid. > + @retval EFI_NOT_FOUND The required object information is not found. > +**/ > +EFI_STATUS > +EFIAPI > +GetOemNameSpaceObject ( > + IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL * CONST This, > + IN CONST CM_OBJECT_ID CmObjectId, > + IN CONST CM_OBJECT_TOKEN Token OPTIONAL, > + IN OUT CM_OBJ_DESCRIPTOR * CONST CmObject > + ) > +{ > + EFI_STATUS Status; > + > + Status = EFI_SUCCESS; > + if ((This == NULL) || (CmObject == NULL)) { > + ASSERT (This != NULL); > + ASSERT (CmObject != NULL); > + return EFI_INVALID_PARAMETER; > + } > + > + switch (GET_CM_OBJECT_ID (CmObjectId)) { > + default: { > + Status = EFI_NOT_FOUND; > + DEBUG (( > + DEBUG_ERROR, > + "ERROR: Object 0x%x. Status = %r\n", > + CmObjectId, > + Status > + )); > + break; > + } > + } > + > + return Status; > +} > + > +/** The GetObject function defines the interface implemented by the > + Configuration Manager Protocol for returning the Configuration > + Manager Objects. > + > + @param [in] This Pointer to the Configuration Manager Protocol. > + @param [in] CmObjectId The Configuration Manager Object ID. > + @param [in] Token An optional token identifying the object. If > + unused this must be CM_NULL_TOKEN. > + @param [in, out] CmObject Pointer to the Configuration Manager Object > + descriptor describing the requested Object. > + > + @retval EFI_SUCCESS Success. > + @retval EFI_INVALID_PARAMETER A parameter is invalid. > + @retval EFI_NOT_FOUND The required object information is not found. > +**/ > +EFI_STATUS > +EFIAPI > +FslPlatformGetObject ( > + IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL * CONST This, > + IN CONST CM_OBJECT_ID CmObjectId, > + IN CONST CM_OBJECT_TOKEN Token OPTIONAL, > + IN OUT CM_OBJ_DESCRIPTOR * CONST CmObject > + ) > +{ > + EFI_STATUS Status; > + > + if ((This == NULL) || (CmObject == NULL)) { > + ASSERT (This != NULL); > + ASSERT (CmObject != NULL); > + return EFI_INVALID_PARAMETER; > + } > + > + switch (GET_CM_NAMESPACE_ID (CmObjectId)) { > + case EObjNameSpaceStandard: > + Status = GetStandardNameSpaceObject (This, CmObjectId, Token, CmObject); > + break; > + case EObjNameSpaceArm: > + Status = GetArmNameSpaceObject (This, CmObjectId, Token, CmObject); > + break; > + case EObjNameSpaceOem: > + Status = GetOemNameSpaceObject (This, CmObjectId, Token, CmObject); > + break; > + default: { > + Status = EFI_INVALID_PARAMETER; > + DEBUG (( > + DEBUG_ERROR, > + "ERROR: Unknown Namespace Object = 0x%x. Status = %r\n", > + CmObjectId, > + Status > + )); > + break; > + } > + } > + > + return Status; > +} > + > +/** The SetObject function defines the interface implemented by the > + Configuration Manager Protocol for updating the Configuration > + Manager Objects. > + > + @param [in] This Pointer to the Configuration Manager Protocol. > + @param [in] CmObjectId The Configuration Manager Object ID. > + @param [in] Token An optional token identifying the object. If > + unused this must be CM_NULL_TOKEN. > + @param [in] CmObject Pointer to the Configuration Manager Object > + descriptor describing the Object. > + > + @retval EFI_UNSUPPORTED This operation is not supported. > +**/ > +EFI_STATUS > +EFIAPI > +FslPlatformSetObject ( > + IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL * CONST This, > + IN CONST CM_OBJECT_ID CmObjectId, > + IN CONST CM_OBJECT_TOKEN Token OPTIONAL, > + IN CM_OBJ_DESCRIPTOR * CONST CmObject > + ) > +{ > + return EFI_UNSUPPORTED; > +} > + > +/** A structure describing the configuration manager protocol interface. > +*/ > +STATIC > +CONST > +EDKII_CONFIGURATION_MANAGER_PROTOCOL FslConfigManagerProtocol = { > + CREATE_REVISION (1, 0), > + FslPlatformGetObject, > + FslPlatformSetObject, > + &FslPlatformRepositoryInfo > +}; > + > +/** > + Entrypoint of Configuration Manager Dxe. > + > + @param ImageHandle > + @param SystemTable > + > + @return EFI_SUCCESS > + @return EFI_LOAD_ERROR > + @return EFI_OUT_OF_RESOURCES > + > +**/ > +EFI_STATUS > +EFIAPI > +ConfigurationManagerDxeInitialize ( > + IN EFI_HANDLE ImageHandle, > + IN EFI_SYSTEM_TABLE * SystemTable > + ) > +{ > + EFI_STATUS Status; > + > + Status = gBS->InstallProtocolInterface ( > + &ImageHandle, > + &gEdkiiConfigurationManagerProtocolGuid, > + EFI_NATIVE_INTERFACE, > + (VOID*)&FslConfigManagerProtocol > + ); > + if (EFI_ERROR (Status)) { > + DEBUG (( > + DEBUG_ERROR, > + "ERROR: Failed to get Install Configuration Manager Protocol." \ > + " Status = %r\n", > + Status > + )); > + goto error_handler; > + } > + > + Status = InitializePlatformRepository ( > + &FslConfigManagerProtocol > + ); > + if (EFI_ERROR (Status)) { > + DEBUG (( > + DEBUG_ERROR, > + "ERROR: Failed to initialize the Platform Configuration Repository." \ > + " Status = %r\n", > + Status > + )); > + } > + > +error_handler: > + return Status; > +} > diff --git a/Platform/NXP/ConfigurationManagerPkg/ConfigurationManagerDxe/ConfigurationManager.h b/Platform/NXP/ConfigurationManagerPkg/ConfigurationManagerDxe/ConfigurationManager.h > new file mode 100644 > index 0000000..ab320e5 > --- /dev/null > +++ b/Platform/NXP/ConfigurationManagerPkg/ConfigurationManagerDxe/ConfigurationManager.h > @@ -0,0 +1,151 @@ > +/** @file > + Configuration Manager headers > + > + Copyright 2020 NXP > + Copyright 2020 Puresoftware Ltd > + > + SPDX-License-Identifier: BSD-2-Clause-Patent > + > + @par Glossary: > + - Cm or CM - Configuration Manager > + - Obj or OBJ - Object > +**/ > + > +#ifndef CONFIGURATION_MANAGER_H > +#define CONFIGURATION_MANAGER_H > + > +#include <Platform.h> > + > +/** The configuration manager version > +*/ > +#define CONFIGURATION_MANAGER_REVISION CREATE_REVISION (0, 0) > + > +/** The OEM ID > +*/ > +#define CFG_MGR_OEM_ID { 'N', 'X', 'P', ' ', ' ', ' ' } > + > +/** A helper macro for populating the GIC CPU information > + */ > +#define GICC_ENTRY( \ > + CPUInterfaceNumber, \ > + Mpidr, \ > + PmuIrq, \ > + VGicIrq, \ > + EnergyEfficiency \ > + ) { \ > + CPUInterfaceNumber, /* UINT32 CPUInterfaceNumber */ \ > + CPUInterfaceNumber, /* UINT32 AcpiProcessorUid */ \ > + EFI_ACPI_6_2_GIC_ENABLED, /* UINT32 Flags */ \ > + 0, /* UINT32 ParkingProtocolVersion */ \ > + PmuIrq, /* UINT32 PerformanceInterruptGsiv */ \ > + 0, /* UINT64 ParkedAddress */ \ > + GICC_BASE, /* UINT64 PhysicalBaseAddress */ \ > + GICV_BASE, /* UINT64 GICV */ \ > + GICH_BASE, /* UINT64 GICH */ \ > + VGicIrq, /* UINT32 VGICMaintenanceInterrupt */ \ > + 0, /* UINT64 GICRBaseAddress */ \ > + Mpidr, /* UINT64 MPIDR */ \ > + EnergyEfficiency /* UINT8 ProcessorPowerEfficiency */ \ > +} > + > +/** > + @retval EFI_SUCCESS Success. > + @retval EFI_INVALID_PARAMETER A parameter is invalid. > + @retval EFI_NOT_FOUND The required object information is not found. > +**/ > +typedef EFI_STATUS (*CM_OBJECT_HANDLER_PROC) ( > + IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL * CONST This, > + IN CONST CM_OBJECT_ID CmObjectId, > + IN CONST CM_OBJECT_TOKEN Token, > + IN OUT CM_OBJ_DESCRIPTOR * CONST CmObject > + ); > + > +/** The number of ACPI tables to install > +*/ > +#define PLAT_ACPI_TABLE_COUNT 5 > + > +/** A structure describing the platform configuration > + manager repository information > +*/ > +typedef struct PlatformRepositoryInfo { > + /// Configuration Manager Information > + CM_STD_OBJ_CONFIGURATION_MANAGER_INFO CmInfo; > + > + /// List of ACPI tables > + CM_STD_OBJ_ACPI_TABLE_INFO CmAcpiTableList[PLAT_ACPI_TABLE_COUNT]; > + > + /// Boot architecture information > + CM_ARM_BOOT_ARCH_INFO BootArchInfo; > + > + /// Power management profile information > + CM_ARM_POWER_MANAGEMENT_PROFILE_INFO PmProfileInfo; > + > + /// Generic timer information > + CM_ARM_GENERIC_TIMER_INFO GenericTimerInfo; > + > + /// Generic timer block information > + CM_ARM_GTBLOCK_INFO GTBlockInfo[PLAT_GTBLOCK_COUNT]; > + > + /// Generic timer frame information > + CM_ARM_GTBLOCK_TIMER_FRAME_INFO GTBlock0TimerInfo[PLAT_GTFRAME_COUNT]; > + > + /// Watchdog information > + CM_ARM_GENERIC_WATCHDOG_INFO Watchdog; > + > + /// GIC CPU interface information > + CM_ARM_GICC_INFO GicCInfo[PLAT_CPU_COUNT]; > + > + /// GIC distributor information > + CM_ARM_GICD_INFO GicDInfo; > + > + /// GIC Redistributor information > + CM_ARM_GIC_REDIST_INFO GicRedistInfo; > + > + /// GIC ITS information > + CM_ARM_GIC_ITS_INFO GicItsInfo; > + > + /// PCI configuration space information > + CM_ARM_PCI_CONFIG_SPACE_INFO PciConfigInfo[PLAT_PCI_CONFG_COUNT]; > + > + /// Serial port information for serial port console redirection port > + CM_ARM_SERIAL_PORT_INFO SpcrSerialPort; > + > + /// Fsl Board Revision > + UINT32 FslBoardRevision; > +} FSL_PLATFORM_REPOSITORY_INFO; > + > +/* > + * GTDT_GTIMER_FLAGS > + * IT trigger (Level/Edge- Bit 0) and Polarity (Low/High) Bit 1 > + * Set bit-0 is 0 (Level trigger), Bit 1 1 (Active low) > + */ > +#define GTDT_GTIMER_FLAGS (EFI_ACPI_6_1_GTDT_TIMER_FLAG_TIMER_INTERRUPT_POLARITY) > + > +/* > + * Timer Frame IT High Level triggered > + * IT trigger (Level/Edge- Bit 0) and Polarity (Low/High) Bit 1 > + * Set bit-0 is 0 (Level trigger), Bit 1 0 (Active High) > + */ > +#define GTDT_FRAME_FLAGS 0 > + > +/* > + * Timer frame status > + * Access - Secure or non secure <-- Bit 0 > + * State - Save (meaning always on) or Lose Context <-- Bit 1 > + * Set Bit 0 1 as Secure and Bit 1 zero as lose context > +*/ > +#define GTDT_FRAME_COMMON_FLAGS EFI_ACPI_6_1_GTDT_GT_BLOCK_COMMON_FLAG_SECURE_TIMER > + > +/* > + * Watchdog flags > + * IT trigger (Level/Edge- Bit 0), Polarity (Low/High) Bit 1, Secured Bit 2 > + * Set Level trigger (Bit 0 as 0) > + * Active High (Bit 1 as 0) > + * Non secure (Bit 2 as 0) > + */ > +#define SBSA_WATCHDOG_FLAGS 0 > +#define SBSA_SEC_WATCHDOG_FLAGS EFI_ACPI_6_1_GTDT_GT_BLOCK_COMMON_FLAG_SECURE_TIMER > + > +#define GT_BLOCK_FRAME_RES_BASE MAX_UINT64 > + > +#endif // CONFIGURATION_MANAGER_H > diff --git a/Platform/NXP/ConfigurationManagerPkg/ConfigurationManagerDxe/ConfigurationManagerDxe.inf b/Platform/NXP/ConfigurationManagerPkg/ConfigurationManagerDxe/ConfigurationManagerDxe.inf > new file mode 100644 > index 0000000..496c8bf > --- /dev/null > +++ b/Platform/NXP/ConfigurationManagerPkg/ConfigurationManagerDxe/ConfigurationManagerDxe.inf > @@ -0,0 +1,51 @@ > +## @file > +# Configuration Manager Dxe > +# > +# Copyright 2020 NXP > +# Copyright 2020 Puresoftware Ltd > +# > +# SPDX-License-Identifier: BSD-2-Clause-Patent > +## > + > +[Defines] > + INF_VERSION = 0x0001001B > + BASE_NAME = ConfigurationManagerDxe > + FILE_GUID = A97F70AC-3BB4-4596-B4D2-9F948EC12D17 > + MODULE_TYPE = DXE_DRIVER > + VERSION_STRING = 1.0 > + ENTRY_POINT = ConfigurationManagerDxeInitialize > + > +# > +# The following information is for reference only and not required by the build tools. > +# > +# VALID_ARCHITECTURES = ARM AARCH64 > +# > + > +[Sources] > + ConfigurationManager.c > + > +[Packages] > + ArmPkg/ArmPkg.dec > + ArmPlatformPkg/ArmPlatformPkg.dec > + DynamicTablesPkg/DynamicTablesPkg.dec > + EmbeddedPkg/EmbeddedPkg.dec > + MdeModulePkg/MdeModulePkg.dec > + MdePkg/MdePkg.dec > + Silicon/NXP/NxpQoriqLs.dec > + > +[LibraryClasses] > + ArmPlatformLib > + PrintLib > + UefiBootServicesTableLib > + UefiDriverEntryPoint > + UefiRuntimeServicesTableLib > + > +[Protocols] > + gEdkiiConfigurationManagerProtocolGuid > + > +[FixedPcd] > + > +[Pcd] > + > +[Depex] > + TRUE > diff --git a/Platform/NXP/Env.sh b/Platform/NXP/Env.sh > new file mode 100755 > index 0000000..3a8ad38 > --- /dev/null > +++ b/Platform/NXP/Env.sh > @@ -0,0 +1,67 @@ > +#!/bin/bash > +# > +# Copyright 2020 NXP > +# Copyright 2020 Puresoftware Ltd > +# > +# SPDX-License-Identifier: BSD-2-Clause-Patent > +## > + > +unset GCC_UTILITY GCC_VERSION MajorVersion MinorVersion > + > +if [ X"$CROSS_COMPILE_64" != X"" ]; then > + ARM64_PREFIX="$CROSS_COMPILE_64" > +elif [ X"$CROSS_COMPILE" != X"" ]; then > + ARM64_PREFIX="$CROSS_COMPILE" > +else > + ARM64_PREFIX="aarch64-linux-gnu-" > +fi > + > +GCC_UTILITY="${ARM64_PREFIX}gcc" > +CheckGcc=`which $GCC_UTILITY >/dev/null 2>&1` > +if [ "$?" -eq 0 ];then > + GCC_VERSION=`$GCC_UTILITY -v 2>&1 | tail -n 1 | awk '{print $3}'` > + MajorVersion=`echo $GCC_VERSION | cut -d . -f 1` > + MinorVersion=`echo $GCC_VERSION | cut -d . -f 2` > + GCC_ARCH_PREFIX= > + > + case $MajorVersion in > + 4) > + case $MinorVersion in > + 9) > + GCC_ARCH_PREFIX="GCC49_AARCH64_PREFIX" > + ;; > + *) > + NOTSUPPORTED=1 > + ;; > + esac > + ;; > + 5) > + case $MinorVersion in > + 4) > + GCC_ARCH_PREFIX="GCC5_AARCH64_PREFIX" > + ;; > + *) > + GCC_ARCH_PREFIX="GCC5_AARCH64_PREFIX" > + echo "Warning: ${GCC_UTILITY} version ($MajorVersion.$MinorVersion) has not been tested, please use at own risk." > + ;; > + esac > + ;; > + *) > + GCC_ARCH_PREFIX="GCC5_AARCH64_PREFIX" > + echo "Warning: ${GCC_UTILITY} version ($MajorVersion.$MinorVersion) has not been tested, please use at own risk." > + ;; > + esac > + > + [ -n "$GCC_ARCH_PREFIX" ] && { > + export GCC_ARCH_PREFIX="$GCC_ARCH_PREFIX" > + export "$GCC_ARCH_PREFIX=$ARM64_PREFIX" > + } > + > + unset ARCH > +else > + echo "Error: ${GCC_UTILITY} not found. Please check PATH variable." > + unset GCC_UTILITY GCC_VERSION MajorVersion MinorVersion > +fi > + > +# Export edk2-platforms path > +export PACKAGES_PATH=`dirname \`dirname "$PWD"\`` > diff --git a/Platform/NXP/LX2160aRdbPkg/Include/Platform.h b/Platform/NXP/LX2160aRdbPkg/Include/Platform.h > new file mode 100644 > index 0000000..e11ac37 > --- /dev/null > +++ b/Platform/NXP/LX2160aRdbPkg/Include/Platform.h > @@ -0,0 +1,240 @@ > +/** @file > + * Platform headers > + * > + * Copyright 2020 NXP > + * Copyright 2020 Puresoftware Ltd > + * > + * SPDX-License-Identifier: BSD-2-Clause-Patent > + * > +**/ > + > + > +#ifndef LX2160ARDB_PLATFORM_H > +#define LX2160ARDB_PLATFORM_H > + > +#define EFI_ACPI_ARM_OEM_REVISION 0x00000000 > + > +// Soc defines > +#define SVR_SOC_VER(svr) (((svr) >> 8) & 0xFFFFFE) > +#define SVR_MAJOR(svr) (((svr) >> 4) & 0xf) > +#define SVR_MINOR(svr) (((svr) >> 0) & 0xf) > + > +#define SVR_LX2160A 0x873600 > + > +// Gic > +#define GIC_VERSION 3 > +#define GICD_BASE 0x6000000 > +#define GICI_BASE 0x6020000 > +#define GICR_BASE 0x06200000 > +#define GICR_LEN 0x200000 > +#define GICC_BASE 0x0c0c0000 > +#define GICH_BASE 0x0c0d0000 > +#define GICV_BASE 0x0c0e0000 > + > +// UART > +#define UART0_BASE 0x21C0000 > +#define UART1_BASE 0x21D0000 > +#define UART2_BASE 0x21E0000 > +#define UART3_BASE 0x21F0000 > +#define UART0_IT 64 > +#define UART1_IT 65 > +#define UART2_IT 104 > +#define UART3_IT 105 > +#define UART_LEN 0x10000 > +#define SPCR_FLOW_CONTROL_NONE 0 > + > +// Timer > +#define TIMER_BLOCK_COUNT 1 > +#define TIMER_FRAME_COUNT 4 > +#define TIMER_WATCHDOG_COUNT 1 > +#define TIMER_BASE_ADDRESS 0x23E0000 // a.k.a CNTControlBase > +#define TIMER_READ_BASE_ADDRESS 0x23F0000 // a.k.a CNTReadBase > +#define TIMER_GT_BLOCK_0_ADDRESS 0x2890000 // a.k.a CNTCTLBase (Secure) > +#define TIMER_GT_BASE_0_ADDRESS 0x28A0000 // a.k.a CNTBase0 > +#define TIMER_GT_BASE_1_ADDRESS 0x28B0000 // a.k.a CNTBase1 > +#define TIMER_GT_BASE_2_ADDRESS 0x28C0000 // a.k.a CNTBase2 > +#define TIMER_GT_BASE_3_ADDRESS 0x28D0000 // a.k.a CNTBase3 > +#define TIMER_GT_BASE_0_EL0_ADDRESS 0x28E0000 // a.k.a CNTBase0EL0 > +#define TIMER_GT_BASE_2_EL0_ADDRESS 0x28F0000 // a.k.a CNTBase2EL0 > +#define TIMER_WDT0_REFRESH_BASE 0x2390000 > +#define TIMER_WDT0_CONTROL_BASE 0x23A0000 > +#define TIMER_SEC_IT 29 > +#define TIMER_NON_SEC_IT 30 > +#define TIMER_VIRT_IT 27 > +#define TIMER_HYP_IT 26 > +#define TIMER_FRAME0_IT 78 > +#define TIMER_FRAME1_IT 79 > +#define TIMER_FRAME2_IT 92 > +#define TIMER_FRAME3_IT 93 > +#define TIMER_WDT0_IT 91 > + > +#define DEFAULT_PLAT_FREQ 700000000 > + > +// Mcfg > +#define LX2160A_PCI_SEG0_CONFIG_BASE 0x9000000000 > +#define LX2160A_PCI_SEG0 0x2 > +#define LX2160A_PCI_SEG_BUSNUM_MIN 0x0 > +#define LX2160A_PCI_SEG_BUSNUM_MAX 0xff > +#define LX2160A_PCI_SEG1_CONFIG_BASE 0xA000000000 > +#define LX2160A_PCI_SEG1 0x4 > + > +// Platform specific info needed by Configuration Manager > + > +#define CFG_MGR_TABLE_ID SIGNATURE_64 ('L','X','2','1','6','0',' ',' ') > + > +#define PLAT_PCI_SEG0_CONFIG_BASE LX2160A_PCI_SEG0_CONFIG_BASE > +#define PLAT_PCI_SEG0 LX2160A_PCI_SEG0 > +#define PLAT_PCI_SEG_BUSNUM_MIN LX2160A_PCI_SEG_BUSNUM_MIN > +#define PLAT_PCI_SEG_BUSNUM_MAX LX2160A_PCI_SEG_BUSNUM_MAX > +#define PLAT_PCI_SEG1_CONFIG_BASE LX2160A_PCI_SEG1_CONFIG_BASE > +#define PLAT_PCI_SEG1 LX2160A_PCI_SEG1 > + > +#define PLAT_GIC_VERSION GIC_VERSION > +#define PLAT_GICD_BASE GICD_BASE > +#define PLAT_GICI_BASE GICI_BASE > +#define PLAT_GICR_BASE GICR_BASE > +#define PLAT_GICR_LEN GICR_LEN > +#define PLAT_GICC_BASE GICC_BASE > +#define PLAT_GICH_BASE GICH_BASE > +#define PLAT_GICV_BASE GICV_BASE > + > +#define PLAT_CPU_COUNT 16 > +#define PLAT_GTBLOCK_COUNT 1 > +#define PLAT_GTFRAME_COUNT 4 > +#define PLAT_PCI_CONFG_COUNT 2 > + > +#define PLAT_WATCHDOG_COUNT 1 > +#define PLAT_GIC_REDISTRIBUTOR_COUNT 1 > +#define PLAT_GIC_ITS_COUNT 1 > + > +/* GIC CPU Interface information > + GIC_ENTRY (CPUInterfaceNumber, Mpidr, PmuIrq, VGicIrq, EnergyEfficiency) > + */ > +#define PLAT_GIC_CPU_INTERFACE { \ > + GICC_ENTRY (0, GET_MPID (0, 0), 23, 0x19, 0), \ > + GICC_ENTRY (1, GET_MPID (0, 1), 23, 0x19, 0), \ > + GICC_ENTRY (2, GET_MPID (1, 0), 23, 0x19, 0), \ > + GICC_ENTRY (3, GET_MPID (1, 1), 23, 0x19, 0), \ > + GICC_ENTRY (4, GET_MPID (2, 0), 23, 0x19, 0), \ > + GICC_ENTRY (5, GET_MPID (2, 1), 23, 0x19, 0), \ > + GICC_ENTRY (6, GET_MPID (3, 0), 23, 0x19, 0), \ > + GICC_ENTRY (7, GET_MPID (3, 1), 23, 0x19, 0), \ > + GICC_ENTRY (8, GET_MPID (4, 0), 23, 0x19, 0), \ > + GICC_ENTRY (9, GET_MPID (4, 1), 23, 0x19, 0), \ > + GICC_ENTRY (10, GET_MPID (5, 0), 23, 0x19, 0), \ > + GICC_ENTRY (11, GET_MPID (5, 1), 23, 0x19, 0), \ > + GICC_ENTRY (12, GET_MPID (6, 0), 23, 0x19, 0), \ > + GICC_ENTRY (13, GET_MPID (6, 1), 23, 0x19, 0), \ > + GICC_ENTRY (14, GET_MPID (7, 0), 23, 0x19, 0), \ > + GICC_ENTRY (15, GET_MPID (7, 1), 23, 0x19, 0) \ > +} > + > +// watchdogs > +#define PLAT_WATCHDOG_INFO \ > + { \ > + TIMER_WDT0_CONTROL_BASE, \ > + TIMER_WDT0_REFRESH_BASE, \ > + TIMER_WDT0_IT, \ > + SBSA_WATCHDOG_FLAGS \ > + } \ > + > +#define PLAT_TIMER_BLOCK_INFO \ > + { \ > + { \ > + TIMER_GT_BLOCK_0_ADDRESS, \ > + PLAT_GTFRAME_COUNT, \ > + (CM_OBJECT_TOKEN)((UINT8*)&FslPlatformRepositoryInfo + \ > + OFFSET_OF (EDKII_PLATFORM_REPOSITORY_INFO, GTBlock0TimerInfo)) \ > + } \ > + } \ > + > +#define PLAT_TIMER_FRAME_INFO \ > + { \ > + { \ > + 0, /* UINT8 GTFrameNumber */ \ > + TIMER_GT_BASE_0_ADDRESS, /* UINT64 CntBaseX */ \ > + TIMER_GT_BASE_0_EL0_ADDRESS, /* UINT64 CntEL0BaseX */ \ > + TIMER_FRAME0_IT, /* UINT32 GTxPhysicalTimerGSIV */ \ > + GTDT_FRAME_FLAGS, /* UINT32 GTxPhysicalTimerFlags */ \ > + TIMER_FRAME0_IT, /* UINT32 GTxVirtualTimerGSIV */ \ > + GTDT_FRAME_FLAGS, /* UINT32 GTxVirtualTimerFlags */ \ > + 0 /* UINT32 GTxCommonFlags */ \ > + }, /* Gtdt.Frames[0] */ \ > + { \ > + 1, /* UINT8 GTFrameNumber */ \ > + TIMER_GT_BASE_1_ADDRESS, /* UINT64 CntBaseX */ \ > + GT_BLOCK_FRAME_RES_BASE, /* UINT64 CntEL0BaseX */ \ > + TIMER_FRAME1_IT, /* UINT32 GTxPhysicalTimerGSIV */ \ > + GTDT_FRAME_FLAGS, /* UINT32 GTxPhysicalTimerFlags */ \ > + 0, /* UINT32 GTxVirtualTimerGSIV */ \ > + 0, /* UINT32 GTxVirtualTimerFlags */ \ > + GTDT_FRAME_COMMON_FLAGS /* UINT32 GTxCommonFlags */ \ > + }, /* Gtdt.Frames[1] */ \ > + { \ > + 2, /* UINT8 GTFrameNumber */ \ > + TIMER_GT_BASE_2_ADDRESS, /* UINT64 CntBaseX */ \ > + TIMER_GT_BASE_2_EL0_ADDRESS, /* UINT64 CntEL0BaseX */ \ > + TIMER_FRAME2_IT, /* UINT32 GTxPhysicalTimerGSIV */ \ > + GTDT_FRAME_FLAGS, /* UINT32 GTxPhysicalTimerFlags */ \ > + 0, /* UINT32 GTxVirtualTimerGSIV */ \ > + 0, /* UINT32 GTxVirtualTimerFlags */ \ > + GTDT_FRAME_COMMON_FLAGS /* UINT32 GTxCommonFlags */ \ > + },/* Gtdt.Frames[2] */ \ > + { \ > + 3, /* UINT8 GTFrameNumber */ \ > + TIMER_GT_BASE_3_ADDRESS, /* UINT64 CntBaseX */ \ > + GT_BLOCK_FRAME_RES_BASE, /* UINT64 CntEL0BaseX */ \ > + TIMER_FRAME3_IT, /* UINT32 GTxPhysicalTimerGSIV */ \ > + GTDT_FRAME_FLAGS, /* UINT32 GTxPhysicalTimerFlags */ \ > + 0, /* UINT32 GTxVirtualTimerGSIV */ \ > + 0, /* UINT32 GTxVirtualTimerFlags */ \ > + GTDT_FRAME_COMMON_FLAGS /* UINT32 GTxCommonFlags */ \ > + }, /* Gtdt.Frames[3] */ \ > + } \ > + > +#define PLAT_GIC_DISTRIBUTOR_INFO \ > + { \ > + PLAT_GICD_BASE, /* UINT64 PhysicalBaseAddress */ \ > + 0, /* UINT32 SystemVectorBase */ \ > + PLAT_GIC_VERSION /* UINT8 GicVersion */ \ > + } \ > + > +#define PLAT_GIC_REDISTRIBUTOR_INFO \ > + { \ > + PLAT_GICR_BASE, /* UINT64 DiscoveryRangeBaseAddress */ \ > + PLAT_GICR_LEN /* UINT32 DiscoveryRangeLength */ \ > + } \ > + > +#define PLAT_GIC_ITS_INFO \ > + { \ > + 0, /* UINT32 GIC ITS ID */ \ > + PLAT_GICI_BASE, /* UINT64 The 64-bit physical address for ITS */ \ > + 0 /* UINT32 Populate the GIC ITS affinity in SRAT. */ \ > + } \ > + > +#define PLAT_MCFG_INFO \ > + { \ > + { \ > + PLAT_PCI_SEG0_CONFIG_BASE, \ > + PLAT_PCI_SEG0, \ > + PLAT_PCI_SEG_BUSNUM_MIN, \ > + PLAT_PCI_SEG_BUSNUM_MAX, \ > + }, \ > + { \ > + PLAT_PCI_SEG1_CONFIG_BASE, \ > + PLAT_PCI_SEG1, \ > + PLAT_PCI_SEG_BUSNUM_MIN, \ > + PLAT_PCI_SEG_BUSNUM_MAX, \ > + } \ > + } \ > + > +#define PLAT_SPCR_INFO \ > + { \ > + UART0_BASE, \ > + UART0_IT, \ > + 115200, \ > + 0, \ > + EFI_ACPI_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE_INTERFACE_TYPE_ARM_PL011_UART \ > + } \ > + > +#endif // LX2160ARDB_PLATFORM_H > diff --git a/Platform/NXP/LX2160aRdbPkg/LX2160aRdbPkg.dec b/Platform/NXP/LX2160aRdbPkg/LX2160aRdbPkg.dec > index 03996b0..459440c 100644 > --- a/Platform/NXP/LX2160aRdbPkg/LX2160aRdbPkg.dec > +++ b/Platform/NXP/LX2160aRdbPkg/LX2160aRdbPkg.dec > @@ -2,6 +2,7 @@ > # LX2160a board package. > # > # Copyright 2018, 2020 NXP > +# Copyright 2020 Puresoftware Ltd > # > # SPDX-License-Identifier: BSD-2-Clause-Patent > # > diff --git a/Platform/NXP/LX2160aRdbPkg/LX2160aRdbPkg.dsc b/Platform/NXP/LX2160aRdbPkg/LX2160aRdbPkg.dsc > index 7132b3e..6ba429d 100644 > --- a/Platform/NXP/LX2160aRdbPkg/LX2160aRdbPkg.dsc > +++ b/Platform/NXP/LX2160aRdbPkg/LX2160aRdbPkg.dsc > @@ -3,6 +3,7 @@ > # LX2160ARDB Board package. > # > # Copyright 2018-2020 NXP > +# Copyright 2020 Puresoftware Ltd > # > # SPDX-License-Identifier: BSD-2-Clause-Patent > # > @@ -29,9 +30,17 @@ > DEFINE NETWORK_HTTP_BOOT_ENABLE = FALSE > DEFINE NETWORK_ISCSI_ENABLE = FALSE > > + # This flag controls the dynamic acpi generation > + # > + DEFINE DYNAMIC_ACPI_ENABLE = TRUE > + > !include Silicon/NXP/NxpQoriqLs.dsc.inc > !include Silicon/NXP/LX2160A/LX2160A.dsc.inc > > +!if $(DYNAMIC_ACPI_ENABLE) == TRUE > + !include DynamicTablesPkg/DynamicTables.dsc.inc > +!endif > + > [LibraryClasses.common] > ArmPlatformLib|Platform/NXP/LX2160aRdbPkg/Library/ArmPlatformLib/ArmPlatformLib.inf > RealTimeClockLib|EmbeddedPkg/Library/VirtualRealTimeClockLib/VirtualRealTimeClockLib.inf > @@ -64,6 +73,25 @@ > MdeModulePkg/Bus/Pci/PciBusDxe/PciBusDxe.inf > > # > + # Dynamic Table Factory > + !if $(DYNAMIC_ACPI_ENABLE) == TRUE > + DynamicTablesPkg/Drivers/DynamicTableFactoryDxe/DynamicTableFactoryDxe.inf { > + <LibraryClasses> > + NULL|DynamicTablesPkg/Library/Acpi/Arm/AcpiFadtLibArm/AcpiFadtLibArm.inf > + NULL|DynamicTablesPkg/Library/Acpi/Arm/AcpiGtdtLibArm/AcpiGtdtLibArm.inf > + NULL|DynamicTablesPkg/Library/Acpi/Arm/AcpiMadtLibArm/AcpiMadtLibArm.inf > + NULL|DynamicTablesPkg/Library/Acpi/Arm/AcpiMcfgLibArm/AcpiMcfgLibArm.inf > + NULL|DynamicTablesPkg/Library/Acpi/Arm/AcpiSpcrLibArm/AcpiSpcrLibArm.inf > + } > + !endif > + > + # > + # Acpi Support > + # > + MdeModulePkg/Universal/Acpi/AcpiPlatformDxe/AcpiPlatformDxe.inf > + MdeModulePkg/Universal/Acpi/AcpiTableDxe/AcpiTableDxe.inf > + > + # > # Networking stack > # > !include NetworkPkg/Network.dsc.inc > diff --git a/Platform/NXP/LX2160aRdbPkg/LX2160aRdbPkg.fdf b/Platform/NXP/LX2160aRdbPkg/LX2160aRdbPkg.fdf > index 111c845..0680565 100644 > --- a/Platform/NXP/LX2160aRdbPkg/LX2160aRdbPkg.fdf > +++ b/Platform/NXP/LX2160aRdbPkg/LX2160aRdbPkg.fdf > @@ -3,6 +3,7 @@ > # FLASH layout file for LX2160a board. > # > # Copyright 2018-2020 NXP > +# Copyright 2020 Puresoftware Ltd > # > # SPDX-License-Identifier: BSD-2-Clause-Patent > # > @@ -103,6 +104,17 @@ READ_LOCK_STATUS = TRUE > INF MdeModulePkg/Universal/HiiDatabaseDxe/HiiDatabaseDxe.inf > > # > + # Acpi Support > + # > + INF MdeModulePkg/Universal/Acpi/AcpiPlatformDxe/AcpiPlatformDxe.inf > + INF MdeModulePkg/Universal/Acpi/AcpiTableDxe/AcpiTableDxe.inf > + > + !if $(DYNAMIC_ACPI_ENABLE) == TRUE > + INF Platform/NXP/ConfigurationManagerPkg/ConfigurationManagerDxe/ConfigurationManagerDxe.inf > + !include DynamicTablesPkg/DynamicTables.fdf.inc > + !endif > + > + # > # Multiple Console IO support > # > INF MdeModulePkg/Universal/Console/ConPlatformDxe/ConPlatformDxe.inf > diff --git a/Platform/NXP/Readme.md b/Platform/NXP/Readme.md > index 2d60d7c..878df75 100644 > --- a/Platform/NXP/Readme.md > +++ b/Platform/NXP/Readme.md > @@ -2,4 +2,37 @@ Support for all NXP boards is available in this directory. > > # How to build > > -Please follow top-level Readme.md for build instructions.. > +Introduced a "build.sh" script under edk2-platforms/NXP/ to automate fsl > +platforms build system. Also called UEFI build script for NXP Layer Scape > +SoCs And also mandatorily needed to support Dynamic ACPI framework for fsl > +based platforms. > +This script intend to: > + - Setup workspace > + - Setup BaseTools in edk2 > + - Setup Target and Tools needed > + - Finally exports variables if needed (in case of Dynamic ACPI) > + > +Most importantly it uses source environment file "Env.sh". > +This file sources in: > + - GCC VERSION info > + - CROSS COMPILE info > + - ARCH info etc. > + > +This build shell script (build.sh) expects: > + Arg 1 (mandatory): SoC Type (can be LS1046 / LS2088 / LX2160 / LS1028). > + Arg 2 (mandatory): Board Type (can be RDB / QDS /FRWY). > + Arg 3 (mandatory): Build candidate (can be RELEASE or DEBUG). > + By default we build the RELEASE candidate. > + Arg 4 (optional): clean - To do a 'make clean' operation. > + > +Usage: $ ./build.sh <Soc Type> <Board Type> <Build Type> > + > +E.g: $ ./build.sh LX2160 RDB RELEASE > + Or > + $ ./build.sh LX2160 RDB RELEASE clean // For build cleanup > + > +# Prerequisites > + > +Please follow top-level Readme.md's "Obtaining source code" tag > +https://github.com/tianocore/edk2-platforms#obtaining-source-code > +for sources. Seeing this improved version, I'm even more convinced than I was that this is nothing we want in the upstream tree. It remains misleading, inflexible, and of insufficient quality. (And is the cause of the build failure I reported for 0/2.) Please drop build.sh and Env.sh from this patch, and update the Readme.md to provide the platform-specific relevant information. (It should have been a separate patch to begin with.) If NXP wants this "vendor value add", they can keep it as a single patch in some othe repo. / Leif > diff --git a/Platform/NXP/build.sh b/Platform/NXP/build.sh > new file mode 100755 > index 0000000..0c47e73 > --- /dev/null > +++ b/Platform/NXP/build.sh > @@ -0,0 +1,115 @@ > +#!/bin/bash > +# UEFI build script for NXP Layer Scape SoCs > +# > +# Copyright 2020 NXP > +# Copyright 2020 Puresoftware Ltd > +# > +# SPDX-License-Identifier: BSD-2-Clause-Patent > +## > + > +# source environment file > +source Env.sh > + > +# Global Defaults > +ARCH=AARCH64 > +TARGET_TOOLS=`echo $GCC_ARCH_PREFIX | cut -d _ -f 1` > +BASE_DIR=../../.. > + > +[ -z "$TARGET_TOOLS" ] && { > + echo "TARGET_TOOLS not found. Please run \"source Env.cshrc\" ." > + exit 1 > +} > + > +print_usage_banner() > +{ > + echo "" > + echo "This shell script expects:" > + echo " Arg 1 (mandatory): SoC Type (can be LS1043 / LS1046 / LS2088 / LX2160 / LS1028)." > + echo " Arg 2 (mandatory): Board Type (can be RDB / QDS /FRWY)." > + echo " Arg 3 (mandatory): Build candidate (can be RELEASE or DEBUG). By > + default we build the RELEASE candidate." > + echo " Arg 4 (optional): clean - To do a 'make clean' operation." > +} > + > +# Check for total num of input arguments > +if [[ "$#" -gt 4 ]]; then > + echo "Illegal number of parameters" > + print_usage_banner > + exit > +fi > + > +# Check for third parameter to be clean only > +if [[ "$4" && $4 != "clean" ]]; then > + echo "Error ! Either clean or emplty" > + print_usage_banner > + exit > +fi > + > +# Check for input arguments > +if [[ $1 == "" || $2 == "" || $3 == "" ]]; then > + echo "Error !" > + print_usage_banner > + exit > +fi > + > +# Check for input arguments > +if [[ $1 != "LS1043" && $1 != "LS1046" && $1 != "LS2088" && $1 != "LX2160" && $1 != "LS1028" ]]; then > + echo "Error ! Incorrect Soc Type specified." > + print_usage_banner > + exit > +fi > + > +# Check for input arguments > +if [[ $2 != "RDB" && $2 != "QDS" && $2 != "FRWY" ]]; then > + echo "Error ! Incorrect Board Type specified." > + print_usage_banner > + exit > +fi > + > +# Check for input arguments > +if [[ $3 != "RELEASE" ]]; then > + if [[ $3 != "DEBUG" ]]; then > + echo "Error ! Incorrect build target specified." > + print_usage_banner > + exit > + fi > +fi > + > +# Set Package drirectory > +if [[ $2 == "RDB" ]]; then > + PKG="aRdbPkg" > + if [[ $2 == "QDS" ]]; then > + PKG="aQdsPkg" > + fi > +elif [[ $2 == "FRWY" ]]; then > + PKG="aFrwyPkg" > +fi > + > +echo ".........................................." > +echo "Welcome to $1$PKG UEFI Build environment" > +echo ".........................................." > + > +if [[ $4 == "clean" ]]; then > + echo "Cleaning up the build directory '$BASE_DIR/Build/$1$PKG/'.." > + rm -rf $BASE_DIR/Build/$1$PKG/* > + exit > +fi > + > +# Clean-up > +set -e > +shopt -s nocasematch > + > +# > +# Setup workspace now > +# > +echo Initializing workspace > +cd $BASE_DIR > + > +# Use the BaseTools in edk2 > +export EDK_TOOLS_PATH=`pwd`/BaseTools > +source edksetup.sh BaseTools > + > +export DYNAMIC_ACPI_PLATFORM=$1$PKG > +export DYNAMIC_ACPI_INC="$1A" > + > +build -p "$PACKAGES_PATH/Platform/NXP/$1$PKG/$1$PKG.dsc" -a $ARCH -t $TARGET_TOOLS -b $3 > diff --git a/Silicon/NXP/LX2160A/LX2160A.dsc.inc b/Silicon/NXP/LX2160A/LX2160A.dsc.inc > index 856fc59..149376f 100644 > --- a/Silicon/NXP/LX2160A/LX2160A.dsc.inc > +++ b/Silicon/NXP/LX2160A/LX2160A.dsc.inc > @@ -63,4 +63,13 @@ > [Components.common] > ArmPkg/Drivers/GenericWatchdogDxe/GenericWatchdogDxe.inf > > + # > + # Configuration Manager > +!if $(DYNAMIC_ACPI_ENABLE) == TRUE > + Platform/NXP/ConfigurationManagerPkg/ConfigurationManagerDxe/ConfigurationManagerDxe.inf { > + <BuildOptions> > + *_*_*_PLATFORM_FLAGS = -I$(WORKSPACE)/Platform/NXP/$(DYNAMIC_ACPI_PLATFORM)/Include > + } > +!endif > + > ## > -- > 2.7.4 > ^ permalink raw reply [flat|nested] 9+ messages in thread
* [PATCH v2 2/2] Platform/NXP: Add OEM specific DSDT generator 2021-01-27 6:44 [PATCH v2 0/2] Dynamic ACPI framework for fsl layerscape platforms Vikas Singh 2021-01-27 6:44 ` [PATCH v2 1/2] Platform/NXP: Add Dynamic Acpi for " Vikas Singh @ 2021-01-27 6:44 ` Vikas Singh 2021-02-15 13:44 ` Leif Lindholm 2021-02-15 13:18 ` [PATCH v2 0/2] Dynamic ACPI framework for fsl layerscape platforms Leif Lindholm 2 siblings, 1 reply; 9+ messages in thread From: Vikas Singh @ 2021-01-27 6:44 UTC (permalink / raw) To: devel Cc: sami.mujawar, leif, meenakshi.aggarwal, paul.yang, augustine.philips, samer.el-haj-mahmoud, v.sethi, arokia.samy, kuldip.dwivedi, ard.biesheuvel, vikas.singh These changes add platform specific DSDT generator and Clk dsdt properties for LX2160ARDB. Signed-off-by: Vikas Singh <vikas.singh@puresoftware.com> --- .../ConfigurationManagerDxe/ConfigurationManager.c | 9 ++ .../ConfigurationManagerDxe/ConfigurationManager.h | 4 +- .../ConfigurationManagerDxe.inf | 1 + .../ConfigurationManagerPkg.dec | 23 ++++ .../Include/PlatformAcpiTableGenerator.h | 20 +++ .../LX2160aRdbPkg/AcpiTablesInclude/Dsdt/Clk.asl | 40 ++++++ .../LX2160aRdbPkg/AcpiTablesInclude/Dsdt/Dsdt.asl | 15 +++ .../AcpiTablesInclude/PlatformAcpiDsdtLib.inf | 39 ++++++ .../PlatformAcpiDsdtLib/RawDsdtGenerator.c | 146 +++++++++++++++++++++ .../AcpiTablesInclude/PlatformAcpiLib.h | 24 ++++ Platform/NXP/LX2160aRdbPkg/Include/Platform.h | 6 + Platform/NXP/LX2160aRdbPkg/LX2160aRdbPkg.dec | 3 + Platform/NXP/LX2160aRdbPkg/LX2160aRdbPkg.dsc | 1 + 13 files changed, 330 insertions(+), 1 deletion(-) create mode 100644 Platform/NXP/ConfigurationManagerPkg/ConfigurationManagerPkg.dec create mode 100644 Platform/NXP/ConfigurationManagerPkg/Include/PlatformAcpiTableGenerator.h create mode 100644 Platform/NXP/LX2160aRdbPkg/AcpiTablesInclude/Dsdt/Clk.asl create mode 100644 Platform/NXP/LX2160aRdbPkg/AcpiTablesInclude/Dsdt/Dsdt.asl create mode 100644 Platform/NXP/LX2160aRdbPkg/AcpiTablesInclude/PlatformAcpiDsdtLib.inf create mode 100644 Platform/NXP/LX2160aRdbPkg/AcpiTablesInclude/PlatformAcpiDsdtLib/RawDsdtGenerator.c create mode 100644 Platform/NXP/LX2160aRdbPkg/AcpiTablesInclude/PlatformAcpiLib.h diff --git a/Platform/NXP/ConfigurationManagerPkg/ConfigurationManagerDxe/ConfigurationManager.c b/Platform/NXP/ConfigurationManagerPkg/ConfigurationManagerDxe/ConfigurationManager.c index bec9131..80ce841 100644 --- a/Platform/NXP/ConfigurationManagerPkg/ConfigurationManagerDxe/ConfigurationManager.c +++ b/Platform/NXP/ConfigurationManagerPkg/ConfigurationManagerDxe/ConfigurationManager.c @@ -78,6 +78,15 @@ FSL_PLATFORM_REPOSITORY_INFO FslPlatformRepositoryInfo = { CREATE_STD_ACPI_TABLE_GEN_ID (EStdAcpiTableIdSpcr), NULL, CFG_MGR_TABLE_ID + }, + + // DSDT (OEM) Table + { + EFI_ACPI_6_2_DIFFERENTIATED_SYSTEM_DESCRIPTION_TABLE_SIGNATURE, + 0, + CREATE_OEM_ACPI_TABLE_GEN_ID (PlatAcpiTableIdDsdt), + NULL, + CFG_MGR_TABLE_ID } }, diff --git a/Platform/NXP/ConfigurationManagerPkg/ConfigurationManagerDxe/ConfigurationManager.h b/Platform/NXP/ConfigurationManagerPkg/ConfigurationManagerDxe/ConfigurationManager.h index ab320e5..0c7dd41 100644 --- a/Platform/NXP/ConfigurationManagerPkg/ConfigurationManagerDxe/ConfigurationManager.h +++ b/Platform/NXP/ConfigurationManagerPkg/ConfigurationManagerDxe/ConfigurationManager.h @@ -15,6 +15,7 @@ #define CONFIGURATION_MANAGER_H #include <Platform.h> +#include <PlatformAcpiTableGenerator.h> /** The configuration manager version */ @@ -62,7 +63,8 @@ typedef EFI_STATUS (*CM_OBJECT_HANDLER_PROC) ( /** The number of ACPI tables to install */ -#define PLAT_ACPI_TABLE_COUNT 5 +#define CM_MANDATORY_ACPI_TABLES 5 +#define PLAT_ACPI_TABLE_COUNT (CM_MANDATORY_ACPI_TABLES + OEM_ACPI_TABLES) /** A structure describing the platform configuration manager repository information diff --git a/Platform/NXP/ConfigurationManagerPkg/ConfigurationManagerDxe/ConfigurationManagerDxe.inf b/Platform/NXP/ConfigurationManagerPkg/ConfigurationManagerDxe/ConfigurationManagerDxe.inf index 496c8bf..7c082cb 100644 --- a/Platform/NXP/ConfigurationManagerPkg/ConfigurationManagerDxe/ConfigurationManagerDxe.inf +++ b/Platform/NXP/ConfigurationManagerPkg/ConfigurationManagerDxe/ConfigurationManagerDxe.inf @@ -31,6 +31,7 @@ EmbeddedPkg/EmbeddedPkg.dec MdeModulePkg/MdeModulePkg.dec MdePkg/MdePkg.dec + Platform/NXP/ConfigurationManagerPkg/ConfigurationManagerPkg.dec Silicon/NXP/NxpQoriqLs.dec [LibraryClasses] diff --git a/Platform/NXP/ConfigurationManagerPkg/ConfigurationManagerPkg.dec b/Platform/NXP/ConfigurationManagerPkg/ConfigurationManagerPkg.dec new file mode 100644 index 0000000..e4af8e4 --- /dev/null +++ b/Platform/NXP/ConfigurationManagerPkg/ConfigurationManagerPkg.dec @@ -0,0 +1,23 @@ +# ConfigurationManager.dec +# +# Copyright 2020 NXP +# Copyright 2020 Puresoftware Ltd +# +# SPDX-License-Identifier: BSD-2-Clause-Patent +# + +[Defines] + PACKAGE_NAME = ConfigurationManagerPkg + PACKAGE_GUID = 0222b1b1-247f-404e-bdc3-baab65f2ddd3 + +################################################################################ +# +# Include Section - list of Include Paths that are provided by this package. +# Comments are used for Keywords and Module Types. +# +# Supported Module Types: +# BASE SEC PEI_CORE PEIM DXE_CORE DXE_DRIVER DXE_RUNTIME_DRIVER DXE_SMM_DRIVER DXE_SAL_DRIVER UEFI_DRIVER UEFI_APPLICATION +# +################################################################################ +[Includes] + Include diff --git a/Platform/NXP/ConfigurationManagerPkg/Include/PlatformAcpiTableGenerator.h b/Platform/NXP/ConfigurationManagerPkg/Include/PlatformAcpiTableGenerator.h new file mode 100644 index 0000000..c1ec114 --- /dev/null +++ b/Platform/NXP/ConfigurationManagerPkg/Include/PlatformAcpiTableGenerator.h @@ -0,0 +1,20 @@ +/** @file + Acpi Table generator headers + + Copyright 2020 NXP + Copyright 2020 Puresoftware Ltd + + SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#ifndef PLATFORM_ACPI_TABLE_GENERATOR_H +#define PLATFORM_ACPI_TABLE_GENERATOR_H + +typedef enum PlatAcpiTableId { + PlatAcpiTableIdReserved = 0x0000, ///< Reserved + PlatAcpiTableIdDsdt, + PlatAcpiTableIdMax +} PLAT_ACPI_TABLE_ID; + +#endif // PLATFORM_ACPI_TABLE_GENERATOR_H diff --git a/Platform/NXP/LX2160aRdbPkg/AcpiTablesInclude/Dsdt/Clk.asl b/Platform/NXP/LX2160aRdbPkg/AcpiTablesInclude/Dsdt/Clk.asl new file mode 100644 index 0000000..1008476 --- /dev/null +++ b/Platform/NXP/LX2160aRdbPkg/AcpiTablesInclude/Dsdt/Clk.asl @@ -0,0 +1,40 @@ +/** @file + Differentiated System Description Table Fields (DSDT) + + Copyright 2020 NXP + Copyright 2020 Puresoftware Ltd + + SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +Scope(_SB) +{ + Device(PCLK) { + Name(_HID, "NXP0017") + Name(CLK, 0) + Name(AVBL, 0) + OperationRegion(RCWS, SystemMemory, DCFG_BASE, DCFG_LEN) + Method(_REG,2) { + if (Arg0 == "RCWS") { + Store(Arg1, AVBL) + } + } + Field (RCWS, ByteAcc, NoLock, Preserve) { + offset(0x100), + PCFG, 2, + PRAT, 6, + offset(0x124), + RESV, 4, + SFRQ, 10 + } + + Method(_INI, 0, NotSerialized) { + Store(SFRQ, Local0) + Multiply(Local0, 500000, Local0) + Multiply(Local0, PRAT, Local0) + Divide(Local0, 6, , Local0) + Store(Local0, CLK) + } + } +} // end of device PCLK diff --git a/Platform/NXP/LX2160aRdbPkg/AcpiTablesInclude/Dsdt/Dsdt.asl b/Platform/NXP/LX2160aRdbPkg/AcpiTablesInclude/Dsdt/Dsdt.asl new file mode 100644 index 0000000..e4f04ce --- /dev/null +++ b/Platform/NXP/LX2160aRdbPkg/AcpiTablesInclude/Dsdt/Dsdt.asl @@ -0,0 +1,15 @@ +/** @file + Differentiated System Description Table Fields (DSDT) + + Copyright 2020 NXP + Copyright 2020 Puresoftware Ltd. + + SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#include "Platform.h" + +DefinitionBlock("DsdtTable.aml", "DSDT", 2, "NXP ", "LX2160 ", EFI_ACPI_ARM_OEM_REVISION) { + include ("Clk.asl") +} diff --git a/Platform/NXP/LX2160aRdbPkg/AcpiTablesInclude/PlatformAcpiDsdtLib.inf b/Platform/NXP/LX2160aRdbPkg/AcpiTablesInclude/PlatformAcpiDsdtLib.inf new file mode 100644 index 0000000..ac7d0b6 --- /dev/null +++ b/Platform/NXP/LX2160aRdbPkg/AcpiTablesInclude/PlatformAcpiDsdtLib.inf @@ -0,0 +1,39 @@ +## @file +# Raw Table Generator +# +# Copyright 2020 NXP +# Copyright 2020 Puresoftware Ltd +# +# SPDX-License-Identifier: BSD-2-Clause-Patent +## + +[Defines] + INF_VERSION = 0x00010019 + BASE_NAME = PlatformAcpiDsdtLib + FILE_GUID = 0b1768cf-13fa-4ecf-b640-338a636d1abb + VERSION_STRING = 1.0 + MODULE_TYPE = DXE_DRIVER + LIBRARY_CLASS = NULL|DXE_DRIVER + CONSTRUCTOR = AcpiDsdtLibConstructor + DESTRUCTOR = AcpiDsdtLibDestructor + +[Sources] + PlatformAcpiDsdtLib/RawDsdtGenerator.c + Dsdt/Dsdt.asl + +[Packages] + DynamicTablesPkg/DynamicTablesPkg.dec + EmbeddedPkg/EmbeddedPkg.dec + MdePkg/MdePkg.dec + MdeModulePkg/MdeModulePkg.dec + Platform/NXP/LX2160aRdbPkg/LX2160aRdbPkg.dec + +[LibraryClasses] + BaseLib + +[Pcd] + +[Protocols] + +[Guids] + diff --git a/Platform/NXP/LX2160aRdbPkg/AcpiTablesInclude/PlatformAcpiDsdtLib/RawDsdtGenerator.c b/Platform/NXP/LX2160aRdbPkg/AcpiTablesInclude/PlatformAcpiDsdtLib/RawDsdtGenerator.c new file mode 100644 index 0000000..375598c --- /dev/null +++ b/Platform/NXP/LX2160aRdbPkg/AcpiTablesInclude/PlatformAcpiDsdtLib/RawDsdtGenerator.c @@ -0,0 +1,146 @@ +/** @file + Raw DSDT Table Generator + + Copyright 2020 NXP + Copyright 2020 Puresoftware Ltd. + + SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#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 "PlatformAcpiLib.h" + +/** Construct the ACPI table using the ACPI table data provided. + + This function invokes the Configuration Manager protocol interface + to get the required hardware information for generating the ACPI + table. + + If this function allocates any resources then they must be freed + in the FreeXXXXTableResources function. + + @param [in] This Pointer to the table generator. + @param [in] AcpiTableInfo Pointer to the ACPI Table Info. + @param [in] CfgMgrProtocol Pointer to the Configuration Manager + Protocol Interface. + @param [out] Table Pointer to the constructed ACPI Table. + + @retval EFI_SUCCESS Table generated successfully. + @retval EFI_INVALID_PARAMETER A parameter is invalid. +**/ +STATIC +EFI_STATUS +EFIAPI +BuildRawDsdtTable ( + IN CONST ACPI_TABLE_GENERATOR * CONST This, + IN CONST CM_STD_OBJ_ACPI_TABLE_INFO * CONST AcpiTableInfo, + IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL * CONST CfgMgrProtocol, + OUT EFI_ACPI_DESCRIPTION_HEADER ** CONST Table + ) +{ + ASSERT (This != NULL); + ASSERT (AcpiTableInfo != NULL); + ASSERT (CfgMgrProtocol != NULL); + ASSERT (Table != NULL); + ASSERT (AcpiTableInfo->TableGeneratorId == This->GeneratorID); + + if (AcpiTableInfo->AcpiTableData == NULL) { + // Add the dsdt aml code here, Currently NULL place holder. + *Table = (EFI_ACPI_DESCRIPTION_HEADER *)&dsdt_aml_code; + } + + return EFI_SUCCESS; +} + +/** This macro defines the Raw Generator revision. +*/ +#define DSDT_GENERATOR_REVISION CREATE_REVISION (1, 0) + +/** The interface for the Raw Table Generator. +*/ +STATIC +CONST +ACPI_TABLE_GENERATOR RawDsdtGenerator = { + // Generator ID + CREATE_OEM_ACPI_TABLE_GEN_ID (PlatAcpiTableIdDsdt), + // Generator Description + L"ACPI.OEM.RAW.DSDT.GENERATOR", + // ACPI Table Signature - Unused + 0, + // ACPI Table Revision - Unused + 0, + // Minimum ACPI Table Revision - Unused + 0, + // Creator ID + TABLE_GENERATOR_CREATOR_ID_ARM, + // Creator Revision + DSDT_GENERATOR_REVISION, + // Build Table function + BuildRawDsdtTable, + // No additional resources are allocated by the generator. + // Hence the Free Resource function is not required. + NULL, + // Extended build function not needed + NULL, + // Extended build function not implemented by the generator. + // Hence extended free resource function is not required. + NULL +}; + +/** Register the Generator with the ACPI Table Factory. + + @param [in] ImageHandle The handle to the image. + @param [in] SystemTable Pointer to the System Table. + + @retval EFI_SUCCESS The Generator is registered. + @retval EFI_INVALID_PARAMETER A parameter is invalid. + @retval EFI_ALREADY_STARTED The Generator for the Table ID + is already registered. +**/ +EFI_STATUS +EFIAPI +AcpiDsdtLibConstructor ( + IN CONST EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE * CONST SystemTable + ) +{ + EFI_STATUS Status; + Status = RegisterAcpiTableGenerator (&RawDsdtGenerator); + DEBUG ((DEBUG_INFO, "OEM: Register DSDT Generator. Status = %r\n", Status)); + ASSERT_EFI_ERROR (Status); + return Status; +} + +/** Deregister the Generator from the ACPI Table Factory. + + @param [in] ImageHandle The handle to the image. + @param [in] SystemTable Pointer to the System Table. + + @retval EFI_SUCCESS The Generator is deregistered. + @retval EFI_INVALID_PARAMETER A parameter is invalid. + @retval EFI_NOT_FOUND The Generator is not registered. +**/ +EFI_STATUS +EFIAPI +AcpiDsdtLibDestructor ( + IN CONST EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE * CONST SystemTable + ) +{ + EFI_STATUS Status; + Status = DeregisterAcpiTableGenerator (&RawDsdtGenerator); + DEBUG ((DEBUG_INFO, "OEM: Deregister DSDT Generator. Status = %r\n", Status)); + ASSERT_EFI_ERROR (Status); + return Status; +} diff --git a/Platform/NXP/LX2160aRdbPkg/AcpiTablesInclude/PlatformAcpiLib.h b/Platform/NXP/LX2160aRdbPkg/AcpiTablesInclude/PlatformAcpiLib.h new file mode 100644 index 0000000..3ab2fd0 --- /dev/null +++ b/Platform/NXP/LX2160aRdbPkg/AcpiTablesInclude/PlatformAcpiLib.h @@ -0,0 +1,24 @@ +/** @file + * Acpi lib headers + * + * Copyright 2020 NXP + * Copyright 2020 Puresoftware Ltd + * + * SPDX-License-Identifier: BSD-2-Clause-Patent + * +**/ + + +#ifndef LX2160ARDB_PLATFORM_ACPI_LIB_H +#define LX2160ARDB_PLATFORM_ACPI_LIB_H + +#include <PlatformAcpiTableGenerator.h> + +/** C array containing the compiled AML template. + These symbols are defined in the auto generated C file + containing the AML bytecode array. +*/ +extern CHAR8 dsdt_aml_code[]; + +#endif + diff --git a/Platform/NXP/LX2160aRdbPkg/Include/Platform.h b/Platform/NXP/LX2160aRdbPkg/Include/Platform.h index e11ac37..76a41d4 100644 --- a/Platform/NXP/LX2160aRdbPkg/Include/Platform.h +++ b/Platform/NXP/LX2160aRdbPkg/Include/Platform.h @@ -21,6 +21,10 @@ #define SVR_LX2160A 0x873600 +// PCLK +#define DCFG_BASE 0x1E00000 +#define DCFG_LEN 0x1FFFF + // Gic #define GIC_VERSION 3 #define GICD_BASE 0x6000000 @@ -80,6 +84,8 @@ // Platform specific info needed by Configuration Manager +#define OEM_ACPI_TABLES 1 // OEM defined DSDT + #define CFG_MGR_TABLE_ID SIGNATURE_64 ('L','X','2','1','6','0',' ',' ') #define PLAT_PCI_SEG0_CONFIG_BASE LX2160A_PCI_SEG0_CONFIG_BASE diff --git a/Platform/NXP/LX2160aRdbPkg/LX2160aRdbPkg.dec b/Platform/NXP/LX2160aRdbPkg/LX2160aRdbPkg.dec index 459440c..8f10d96 100644 --- a/Platform/NXP/LX2160aRdbPkg/LX2160aRdbPkg.dec +++ b/Platform/NXP/LX2160aRdbPkg/LX2160aRdbPkg.dec @@ -22,3 +22,6 @@ ################################################################################ [Includes.common] Include # Root include for the package + . + AcpiTablesInclude + Platform/NXP/ConfigurationManagerPkg/Include diff --git a/Platform/NXP/LX2160aRdbPkg/LX2160aRdbPkg.dsc b/Platform/NXP/LX2160aRdbPkg/LX2160aRdbPkg.dsc index 6ba429d..9d898f2 100644 --- a/Platform/NXP/LX2160aRdbPkg/LX2160aRdbPkg.dsc +++ b/Platform/NXP/LX2160aRdbPkg/LX2160aRdbPkg.dsc @@ -82,6 +82,7 @@ NULL|DynamicTablesPkg/Library/Acpi/Arm/AcpiMadtLibArm/AcpiMadtLibArm.inf NULL|DynamicTablesPkg/Library/Acpi/Arm/AcpiMcfgLibArm/AcpiMcfgLibArm.inf NULL|DynamicTablesPkg/Library/Acpi/Arm/AcpiSpcrLibArm/AcpiSpcrLibArm.inf + NULL|Platform/NXP/LX2160aRdbPkg/AcpiTablesInclude/PlatformAcpiDsdtLib.inf } !endif -- 2.7.4 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [PATCH v2 2/2] Platform/NXP: Add OEM specific DSDT generator 2021-01-27 6:44 ` [PATCH v2 2/2] Platform/NXP: Add OEM specific DSDT generator Vikas Singh @ 2021-02-15 13:44 ` Leif Lindholm 0 siblings, 0 replies; 9+ messages in thread From: Leif Lindholm @ 2021-02-15 13:44 UTC (permalink / raw) To: Vikas Singh Cc: devel, sami.mujawar, meenakshi.aggarwal, paul.yang, augustine.philips, samer.el-haj-mahmoud, v.sethi, arokia.samy, kuldip.dwivedi, ard.biesheuvel, vikas.singh On Wed, Jan 27, 2021 at 12:14:59 +0530, Vikas Singh wrote: > These changes add platform specific DSDT generator > and Clk dsdt properties for LX2160ARDB. > > Signed-off-by: Vikas Singh <vikas.singh@puresoftware.com> > --- > .../ConfigurationManagerDxe/ConfigurationManager.c | 9 ++ > .../ConfigurationManagerDxe/ConfigurationManager.h | 4 +- > .../ConfigurationManagerDxe.inf | 1 + > .../ConfigurationManagerPkg.dec | 23 ++++ > .../Include/PlatformAcpiTableGenerator.h | 20 +++ > .../LX2160aRdbPkg/AcpiTablesInclude/Dsdt/Clk.asl | 40 ++++++ > .../LX2160aRdbPkg/AcpiTablesInclude/Dsdt/Dsdt.asl | 15 +++ > .../AcpiTablesInclude/PlatformAcpiDsdtLib.inf | 39 ++++++ > .../PlatformAcpiDsdtLib/RawDsdtGenerator.c | 146 +++++++++++++++++++++ > .../AcpiTablesInclude/PlatformAcpiLib.h | 24 ++++ > Platform/NXP/LX2160aRdbPkg/Include/Platform.h | 6 + > Platform/NXP/LX2160aRdbPkg/LX2160aRdbPkg.dec | 3 + > Platform/NXP/LX2160aRdbPkg/LX2160aRdbPkg.dsc | 1 + > 13 files changed, 330 insertions(+), 1 deletion(-) Please use --stat=1000 --stat-graph-width=20 when generating patches, to prevent the ... above. > create mode 100644 Platform/NXP/ConfigurationManagerPkg/ConfigurationManagerPkg.dec > create mode 100644 Platform/NXP/ConfigurationManagerPkg/Include/PlatformAcpiTableGenerator.h > create mode 100644 Platform/NXP/LX2160aRdbPkg/AcpiTablesInclude/Dsdt/Clk.asl > create mode 100644 Platform/NXP/LX2160aRdbPkg/AcpiTablesInclude/Dsdt/Dsdt.asl > create mode 100644 Platform/NXP/LX2160aRdbPkg/AcpiTablesInclude/PlatformAcpiDsdtLib.inf > create mode 100644 Platform/NXP/LX2160aRdbPkg/AcpiTablesInclude/PlatformAcpiDsdtLib/RawDsdtGenerator.c > create mode 100644 Platform/NXP/LX2160aRdbPkg/AcpiTablesInclude/PlatformAcpiLib.h > > diff --git a/Platform/NXP/ConfigurationManagerPkg/ConfigurationManagerDxe/ConfigurationManager.c b/Platform/NXP/ConfigurationManagerPkg/ConfigurationManagerDxe/ConfigurationManager.c > index bec9131..80ce841 100644 > --- a/Platform/NXP/ConfigurationManagerPkg/ConfigurationManagerDxe/ConfigurationManager.c > +++ b/Platform/NXP/ConfigurationManagerPkg/ConfigurationManagerDxe/ConfigurationManager.c > @@ -78,6 +78,15 @@ FSL_PLATFORM_REPOSITORY_INFO FslPlatformRepositoryInfo = { > CREATE_STD_ACPI_TABLE_GEN_ID (EStdAcpiTableIdSpcr), > NULL, > CFG_MGR_TABLE_ID > + }, > + > + // DSDT (OEM) Table > + { > + EFI_ACPI_6_2_DIFFERENTIATED_SYSTEM_DESCRIPTION_TABLE_SIGNATURE, > + 0, > + CREATE_OEM_ACPI_TABLE_GEN_ID (PlatAcpiTableIdDsdt), > + NULL, > + CFG_MGR_TABLE_ID > } > > }, > diff --git a/Platform/NXP/ConfigurationManagerPkg/ConfigurationManagerDxe/ConfigurationManager.h b/Platform/NXP/ConfigurationManagerPkg/ConfigurationManagerDxe/ConfigurationManager.h > index ab320e5..0c7dd41 100644 > --- a/Platform/NXP/ConfigurationManagerPkg/ConfigurationManagerDxe/ConfigurationManager.h > +++ b/Platform/NXP/ConfigurationManagerPkg/ConfigurationManagerDxe/ConfigurationManager.h > @@ -15,6 +15,7 @@ > #define CONFIGURATION_MANAGER_H > > #include <Platform.h> > +#include <PlatformAcpiTableGenerator.h> > > /** The configuration manager version > */ > @@ -62,7 +63,8 @@ typedef EFI_STATUS (*CM_OBJECT_HANDLER_PROC) ( > > /** The number of ACPI tables to install > */ > -#define PLAT_ACPI_TABLE_COUNT 5 > +#define CM_MANDATORY_ACPI_TABLES 5 > +#define PLAT_ACPI_TABLE_COUNT (CM_MANDATORY_ACPI_TABLES + OEM_ACPI_TABLES) > > /** A structure describing the platform configuration > manager repository information > diff --git a/Platform/NXP/ConfigurationManagerPkg/ConfigurationManagerDxe/ConfigurationManagerDxe.inf b/Platform/NXP/ConfigurationManagerPkg/ConfigurationManagerDxe/ConfigurationManagerDxe.inf > index 496c8bf..7c082cb 100644 > --- a/Platform/NXP/ConfigurationManagerPkg/ConfigurationManagerDxe/ConfigurationManagerDxe.inf > +++ b/Platform/NXP/ConfigurationManagerPkg/ConfigurationManagerDxe/ConfigurationManagerDxe.inf > @@ -31,6 +31,7 @@ > EmbeddedPkg/EmbeddedPkg.dec > MdeModulePkg/MdeModulePkg.dec > MdePkg/MdePkg.dec > + Platform/NXP/ConfigurationManagerPkg/ConfigurationManagerPkg.dec > Silicon/NXP/NxpQoriqLs.dec > > [LibraryClasses] > diff --git a/Platform/NXP/ConfigurationManagerPkg/ConfigurationManagerPkg.dec b/Platform/NXP/ConfigurationManagerPkg/ConfigurationManagerPkg.dec > new file mode 100644 > index 0000000..e4af8e4 > --- /dev/null > +++ b/Platform/NXP/ConfigurationManagerPkg/ConfigurationManagerPkg.dec > @@ -0,0 +1,23 @@ > +# ConfigurationManager.dec > +# > +# Copyright 2020 NXP > +# Copyright 2020 Puresoftware Ltd > +# > +# SPDX-License-Identifier: BSD-2-Clause-Patent > +# > + > +[Defines] > + PACKAGE_NAME = ConfigurationManagerPkg > + PACKAGE_GUID = 0222b1b1-247f-404e-bdc3-baab65f2ddd3 > + > +################################################################################ > +# > +# Include Section - list of Include Paths that are provided by this package. > +# Comments are used for Keywords and Module Types. > +# > +# Supported Module Types: > +# BASE SEC PEI_CORE PEIM DXE_CORE DXE_DRIVER DXE_RUNTIME_DRIVER DXE_SMM_DRIVER DXE_SAL_DRIVER UEFI_DRIVER UEFI_APPLICATION > +# > +################################################################################ > +[Includes] > + Include > diff --git a/Platform/NXP/ConfigurationManagerPkg/Include/PlatformAcpiTableGenerator.h b/Platform/NXP/ConfigurationManagerPkg/Include/PlatformAcpiTableGenerator.h > new file mode 100644 > index 0000000..c1ec114 > --- /dev/null > +++ b/Platform/NXP/ConfigurationManagerPkg/Include/PlatformAcpiTableGenerator.h > @@ -0,0 +1,20 @@ > +/** @file > + Acpi Table generator headers > + > + Copyright 2020 NXP > + Copyright 2020 Puresoftware Ltd > + > + SPDX-License-Identifier: BSD-2-Clause-Patent > + > +**/ > + > +#ifndef PLATFORM_ACPI_TABLE_GENERATOR_H > +#define PLATFORM_ACPI_TABLE_GENERATOR_H > + > +typedef enum PlatAcpiTableId { > + PlatAcpiTableIdReserved = 0x0000, ///< Reserved > + PlatAcpiTableIdDsdt, > + PlatAcpiTableIdMax > +} PLAT_ACPI_TABLE_ID; > + > +#endif // PLATFORM_ACPI_TABLE_GENERATOR_H > diff --git a/Platform/NXP/LX2160aRdbPkg/AcpiTablesInclude/Dsdt/Clk.asl b/Platform/NXP/LX2160aRdbPkg/AcpiTablesInclude/Dsdt/Clk.asl > new file mode 100644 > index 0000000..1008476 > --- /dev/null > +++ b/Platform/NXP/LX2160aRdbPkg/AcpiTablesInclude/Dsdt/Clk.asl > @@ -0,0 +1,40 @@ > +/** @file > + Differentiated System Description Table Fields (DSDT) > + > + Copyright 2020 NXP > + Copyright 2020 Puresoftware Ltd > + > + SPDX-License-Identifier: BSD-2-Clause-Patent > + > +**/ > + > +Scope(_SB) > +{ > + Device(PCLK) { > + Name(_HID, "NXP0017") > + Name(CLK, 0) > + Name(AVBL, 0) > + OperationRegion(RCWS, SystemMemory, DCFG_BASE, DCFG_LEN) > + Method(_REG,2) { > + if (Arg0 == "RCWS") { > + Store(Arg1, AVBL) > + } > + } > + Field (RCWS, ByteAcc, NoLock, Preserve) { > + offset(0x100), > + PCFG, 2, > + PRAT, 6, > + offset(0x124), > + RESV, 4, > + SFRQ, 10 > + } > + > + Method(_INI, 0, NotSerialized) { > + Store(SFRQ, Local0) > + Multiply(Local0, 500000, Local0) > + Multiply(Local0, PRAT, Local0) > + Divide(Local0, 6, , Local0) > + Store(Local0, CLK) > + } > + } > +} // end of device PCLK > diff --git a/Platform/NXP/LX2160aRdbPkg/AcpiTablesInclude/Dsdt/Dsdt.asl b/Platform/NXP/LX2160aRdbPkg/AcpiTablesInclude/Dsdt/Dsdt.asl > new file mode 100644 > index 0000000..e4f04ce > --- /dev/null > +++ b/Platform/NXP/LX2160aRdbPkg/AcpiTablesInclude/Dsdt/Dsdt.asl > @@ -0,0 +1,15 @@ > +/** @file > + Differentiated System Description Table Fields (DSDT) > + > + Copyright 2020 NXP > + Copyright 2020 Puresoftware Ltd. > + > + SPDX-License-Identifier: BSD-2-Clause-Patent > + > +**/ > + > +#include "Platform.h" > + > +DefinitionBlock("DsdtTable.aml", "DSDT", 2, "NXP ", "LX2160 ", EFI_ACPI_ARM_OEM_REVISION) { > + include ("Clk.asl") > +} > diff --git a/Platform/NXP/LX2160aRdbPkg/AcpiTablesInclude/PlatformAcpiDsdtLib.inf b/Platform/NXP/LX2160aRdbPkg/AcpiTablesInclude/PlatformAcpiDsdtLib.inf > new file mode 100644 > index 0000000..ac7d0b6 > --- /dev/null > +++ b/Platform/NXP/LX2160aRdbPkg/AcpiTablesInclude/PlatformAcpiDsdtLib.inf > @@ -0,0 +1,39 @@ > +## @file > +# Raw Table Generator > +# > +# Copyright 2020 NXP > +# Copyright 2020 Puresoftware Ltd > +# > +# SPDX-License-Identifier: BSD-2-Clause-Patent > +## > + > +[Defines] > + INF_VERSION = 0x00010019 > + BASE_NAME = PlatformAcpiDsdtLib > + FILE_GUID = 0b1768cf-13fa-4ecf-b640-338a636d1abb > + VERSION_STRING = 1.0 > + MODULE_TYPE = DXE_DRIVER > + LIBRARY_CLASS = NULL|DXE_DRIVER > + CONSTRUCTOR = AcpiDsdtLibConstructor > + DESTRUCTOR = AcpiDsdtLibDestructor > + > +[Sources] > + PlatformAcpiDsdtLib/RawDsdtGenerator.c > + Dsdt/Dsdt.asl > + > +[Packages] > + DynamicTablesPkg/DynamicTablesPkg.dec > + EmbeddedPkg/EmbeddedPkg.dec > + MdePkg/MdePkg.dec > + MdeModulePkg/MdeModulePkg.dec > + Platform/NXP/LX2160aRdbPkg/LX2160aRdbPkg.dec > + > +[LibraryClasses] > + BaseLib > + > +[Pcd] > + > +[Protocols] > + > +[Guids] > + Please drop blank trailing lines (git complains about this when I import the patch). > diff --git a/Platform/NXP/LX2160aRdbPkg/AcpiTablesInclude/PlatformAcpiDsdtLib/RawDsdtGenerator.c b/Platform/NXP/LX2160aRdbPkg/AcpiTablesInclude/PlatformAcpiDsdtLib/RawDsdtGenerator.c > new file mode 100644 > index 0000000..375598c > --- /dev/null > +++ b/Platform/NXP/LX2160aRdbPkg/AcpiTablesInclude/PlatformAcpiDsdtLib/RawDsdtGenerator.c > @@ -0,0 +1,146 @@ > +/** @file > + Raw DSDT Table Generator > + > + Copyright 2020 NXP > + Copyright 2020 Puresoftware Ltd. > + > + SPDX-License-Identifier: BSD-2-Clause-Patent > + > +**/ > + > +#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 "PlatformAcpiLib.h" > + > +/** Construct the ACPI table using the ACPI table data provided. > + > + This function invokes the Configuration Manager protocol interface > + to get the required hardware information for generating the ACPI > + table. > + > + If this function allocates any resources then they must be freed > + in the FreeXXXXTableResources function. > + > + @param [in] This Pointer to the table generator. > + @param [in] AcpiTableInfo Pointer to the ACPI Table Info. > + @param [in] CfgMgrProtocol Pointer to the Configuration Manager > + Protocol Interface. > + @param [out] Table Pointer to the constructed ACPI Table. > + > + @retval EFI_SUCCESS Table generated successfully. > + @retval EFI_INVALID_PARAMETER A parameter is invalid. > +**/ > +STATIC > +EFI_STATUS > +EFIAPI > +BuildRawDsdtTable ( > + IN CONST ACPI_TABLE_GENERATOR * CONST This, > + IN CONST CM_STD_OBJ_ACPI_TABLE_INFO * CONST AcpiTableInfo, > + IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL * CONST CfgMgrProtocol, > + OUT EFI_ACPI_DESCRIPTION_HEADER ** CONST Table > + ) > +{ > + ASSERT (This != NULL); > + ASSERT (AcpiTableInfo != NULL); > + ASSERT (CfgMgrProtocol != NULL); > + ASSERT (Table != NULL); > + ASSERT (AcpiTableInfo->TableGeneratorId == This->GeneratorID); > + > + if (AcpiTableInfo->AcpiTableData == NULL) { > + // Add the dsdt aml code here, Currently NULL place holder. > + *Table = (EFI_ACPI_DESCRIPTION_HEADER *)&dsdt_aml_code; > + } > + > + return EFI_SUCCESS; > +} > + > +/** This macro defines the Raw Generator revision. > +*/ > +#define DSDT_GENERATOR_REVISION CREATE_REVISION (1, 0) > + > +/** The interface for the Raw Table Generator. > +*/ > +STATIC > +CONST > +ACPI_TABLE_GENERATOR RawDsdtGenerator = { > + // Generator ID > + CREATE_OEM_ACPI_TABLE_GEN_ID (PlatAcpiTableIdDsdt), > + // Generator Description > + L"ACPI.OEM.RAW.DSDT.GENERATOR", > + // ACPI Table Signature - Unused > + 0, > + // ACPI Table Revision - Unused > + 0, > + // Minimum ACPI Table Revision - Unused > + 0, > + // Creator ID > + TABLE_GENERATOR_CREATOR_ID_ARM, > + // Creator Revision > + DSDT_GENERATOR_REVISION, > + // Build Table function > + BuildRawDsdtTable, > + // No additional resources are allocated by the generator. > + // Hence the Free Resource function is not required. > + NULL, > + // Extended build function not needed > + NULL, > + // Extended build function not implemented by the generator. > + // Hence extended free resource function is not required. > + NULL > +}; > + > +/** Register the Generator with the ACPI Table Factory. > + > + @param [in] ImageHandle The handle to the image. > + @param [in] SystemTable Pointer to the System Table. > + > + @retval EFI_SUCCESS The Generator is registered. > + @retval EFI_INVALID_PARAMETER A parameter is invalid. > + @retval EFI_ALREADY_STARTED The Generator for the Table ID > + is already registered. > +**/ > +EFI_STATUS > +EFIAPI > +AcpiDsdtLibConstructor ( > + IN CONST EFI_HANDLE ImageHandle, > + IN EFI_SYSTEM_TABLE * CONST SystemTable > + ) > +{ > + EFI_STATUS Status; > + Status = RegisterAcpiTableGenerator (&RawDsdtGenerator); > + DEBUG ((DEBUG_INFO, "OEM: Register DSDT Generator. Status = %r\n", Status)); > + ASSERT_EFI_ERROR (Status); > + return Status; > +} > + > +/** Deregister the Generator from the ACPI Table Factory. > + > + @param [in] ImageHandle The handle to the image. > + @param [in] SystemTable Pointer to the System Table. > + > + @retval EFI_SUCCESS The Generator is deregistered. > + @retval EFI_INVALID_PARAMETER A parameter is invalid. > + @retval EFI_NOT_FOUND The Generator is not registered. > +**/ > +EFI_STATUS > +EFIAPI > +AcpiDsdtLibDestructor ( > + IN CONST EFI_HANDLE ImageHandle, > + IN EFI_SYSTEM_TABLE * CONST SystemTable > + ) > +{ > + EFI_STATUS Status; > + Status = DeregisterAcpiTableGenerator (&RawDsdtGenerator); > + DEBUG ((DEBUG_INFO, "OEM: Deregister DSDT Generator. Status = %r\n", Status)); > + ASSERT_EFI_ERROR (Status); > + return Status; > +} > diff --git a/Platform/NXP/LX2160aRdbPkg/AcpiTablesInclude/PlatformAcpiLib.h b/Platform/NXP/LX2160aRdbPkg/AcpiTablesInclude/PlatformAcpiLib.h > new file mode 100644 > index 0000000..3ab2fd0 > --- /dev/null > +++ b/Platform/NXP/LX2160aRdbPkg/AcpiTablesInclude/PlatformAcpiLib.h > @@ -0,0 +1,24 @@ > +/** @file > + * Acpi lib headers > + * > + * Copyright 2020 NXP > + * Copyright 2020 Puresoftware Ltd > + * > + * SPDX-License-Identifier: BSD-2-Clause-Patent > + * > +**/ > + > + > +#ifndef LX2160ARDB_PLATFORM_ACPI_LIB_H > +#define LX2160ARDB_PLATFORM_ACPI_LIB_H > + > +#include <PlatformAcpiTableGenerator.h> > + > +/** C array containing the compiled AML template. > + These symbols are defined in the auto generated C file > + containing the AML bytecode array. > +*/ > +extern CHAR8 dsdt_aml_code[]; > + > +#endif > + Please drop blank traling lines. > diff --git a/Platform/NXP/LX2160aRdbPkg/Include/Platform.h b/Platform/NXP/LX2160aRdbPkg/Include/Platform.h > index e11ac37..76a41d4 100644 > --- a/Platform/NXP/LX2160aRdbPkg/Include/Platform.h > +++ b/Platform/NXP/LX2160aRdbPkg/Include/Platform.h > @@ -21,6 +21,10 @@ > > #define SVR_LX2160A 0x873600 > > +// PCLK > +#define DCFG_BASE 0x1E00000 > +#define DCFG_LEN 0x1FFFF > + > // Gic > #define GIC_VERSION 3 > #define GICD_BASE 0x6000000 > @@ -80,6 +84,8 @@ > > // Platform specific info needed by Configuration Manager > > +#define OEM_ACPI_TABLES 1 // OEM defined DSDT > + > #define CFG_MGR_TABLE_ID SIGNATURE_64 ('L','X','2','1','6','0',' ',' ') > > #define PLAT_PCI_SEG0_CONFIG_BASE LX2160A_PCI_SEG0_CONFIG_BASE > diff --git a/Platform/NXP/LX2160aRdbPkg/LX2160aRdbPkg.dec b/Platform/NXP/LX2160aRdbPkg/LX2160aRdbPkg.dec > index 459440c..8f10d96 100644 > --- a/Platform/NXP/LX2160aRdbPkg/LX2160aRdbPkg.dec > +++ b/Platform/NXP/LX2160aRdbPkg/LX2160aRdbPkg.dec > @@ -22,3 +22,6 @@ > ################################################################################ > [Includes.common] > Include # Root include for the package > + . No. This is neither permitted nor required. A package cannot declare include paths outside itself, and you can always #include "file.h" without needing it on the path. > + AcpiTablesInclude > + Platform/NXP/ConfigurationManagerPkg/Include You cannot have one package declaring the include paths of another package. Whatever module wants to grab header files from Platform/NXP/ConfigurationManagerPkg/Include needs to include Platform/NXP/ConfigurationManagerPkg.dec / Leif > diff --git a/Platform/NXP/LX2160aRdbPkg/LX2160aRdbPkg.dsc b/Platform/NXP/LX2160aRdbPkg/LX2160aRdbPkg.dsc > index 6ba429d..9d898f2 100644 > --- a/Platform/NXP/LX2160aRdbPkg/LX2160aRdbPkg.dsc > +++ b/Platform/NXP/LX2160aRdbPkg/LX2160aRdbPkg.dsc > @@ -82,6 +82,7 @@ > NULL|DynamicTablesPkg/Library/Acpi/Arm/AcpiMadtLibArm/AcpiMadtLibArm.inf > NULL|DynamicTablesPkg/Library/Acpi/Arm/AcpiMcfgLibArm/AcpiMcfgLibArm.inf > NULL|DynamicTablesPkg/Library/Acpi/Arm/AcpiSpcrLibArm/AcpiSpcrLibArm.inf > + NULL|Platform/NXP/LX2160aRdbPkg/AcpiTablesInclude/PlatformAcpiDsdtLib.inf > } > !endif > > -- > 2.7.4 > ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH v2 0/2] Dynamic ACPI framework for fsl layerscape platforms 2021-01-27 6:44 [PATCH v2 0/2] Dynamic ACPI framework for fsl layerscape platforms Vikas Singh 2021-01-27 6:44 ` [PATCH v2 1/2] Platform/NXP: Add Dynamic Acpi for " Vikas Singh 2021-01-27 6:44 ` [PATCH v2 2/2] Platform/NXP: Add OEM specific DSDT generator Vikas Singh @ 2021-02-15 13:18 ` Leif Lindholm 2021-02-15 13:53 ` Sami Mujawar 2021-02-16 11:59 ` Vikas Singh 2 siblings, 2 replies; 9+ messages in thread From: Leif Lindholm @ 2021-02-15 13:18 UTC (permalink / raw) To: Vikas Singh, sami.mujawar Cc: devel, meenakshi.aggarwal, paul.yang, augustine.philips, samer.el-haj-mahmoud, v.sethi, arokia.samy, kuldip.dwivedi, ard.biesheuvel, vikas.singh Hi Vikas, Apologies for very slow review. However, this set doesn't build for me. It fails with In file included from /work/git/edk2-platforms/Platform/NXP/ConfigurationManagerPkg/ConfigurationManagerDxe/ConfigurationManager.c:26: /work/git/edk2-platforms/Platform/NXP/ConfigurationManagerPkg/ConfigurationManagerDxe/ConfigurationManager.h:17:10: fatal error: Platform.h: No such file or directory #include <Platform.h> ^~~~~~~~~~~~ Since the location of ConfigurationManagerPkg suggests the intent to use this for additional platforms in the future, this cannot be resolved by referencing LX2160aRdbPkg.dec from ConfigurationManagerDxe.inf. I would suggest doing like the ARM VExpressPkg and add: [BuildOptions] GCC:*_*_AARCH64_PLATFORM_FLAGS == -I$(WORKSPACE)/Platform/NXP/LX2160aRdbPkg/Include to LX2160aRdbPkg.dsc. Also, I'm seeing a build failure in edk2 DynamicTablesPkg when building with NOOPT: /work/git/edk2/DynamicTablesPkg/Library/Common/AmlLib/NameSpace/AmlNameSpace.c: In function ‘AmlEnumeratePathCallback’: /work/git/edk2/DynamicTablesPkg/Library/Common/AmlLib/NameSpace/AmlNameSpace.c:1081:31: error: variable ‘CurrNodePath’ set but not used [-Werror=unused-but-set-variable] CHAR8 * CurrNodePath; ^~~~~~~~~~~~ /work/git/edk2/DynamicTablesPkg/Library/Common/AmlLib/NameSpace/AmlNameSpace.c:1078:31: error: variable ‘SearchedPath’ set but not used [-Werror=unused-but-set-variable] CHAR8 * SearchedPath; ^~~~~~~~~~~~ Sami - can you have a look at that? I'll follow up with a couple of minor comments on the patches. Best Regards, Leif On Wed, Jan 27, 2021 at 12:14:57 +0530, Vikas Singh wrote: > This patch series sets the foundation of Dynamic ACPI framework for all > fsl layerscape platforms. In order to achieve: > - Configurable firmware builds. > - Unify firmware build for similar platforms. > - Minimize/eliminate human induced errors. > - Validate and generate firmware that complies with relevant specifications. > this change set will introduce following changes in below defined order under > edk2-platforms/NXP for LX2160ARDB platform. > > (1) Introduced edk2-platforms/NXP/ConfigurationManager > It creates the platform repositories dynamically during build time > and initializes with platform specific information and serves all requestes > coming from OEM/standard firmware table generators. Configuration Manager(CM) > will be common for all fsl platforms. > > (2) Introduced edk2-platforms/NXP/LX2160ARDB/Include/Platform.h > It has all the declarations and the definitions specified for the platforms. > These definitions will be inturn consumed by Configuration Manager. > Additionally the placement of this header under "Include" dir will make these > macro's availale to other translation units of the platform built. > > (3) Introduced edk2-platforms/NXP/LX2160ARDB/AcpiTablesInclude > This is a placeholder for - OEM specific firmware acpi table generators. > This also includes IP specific - DSDT/SSDT generators for the OEM's platform. > Currently Dsdt.asl is a place holder having only platform's clock related dsdt > properties for LX2160ARDB but it is intended to extend this "Dsdt.asl" to hold > other table as well in next patch series. > > (4) Introduced a new "DYNAMIC_ACPI_ENABLE" flag to control DACPI framework. > Currently this flag is used for LX2160ARDB and by default it is enabled. > This flag can also extend to other fsl layerscape platforms in future. > Changes can be referred under: > - LX2160ARDb.dsc > - LX2160ARDB.fdf > > (5) Introduced a "build.sh" script under edk2-platforms/NXP/ to automate builds. > And also mandatorily need to support Dynamic ACPI framework for all fsl platforms. > It exports build environment variables and also invokes "Env.sh". > > Vikas Singh (2): > Platform/NXP: Add Dynamic Acpi for layerscape platforms > Platform/NXP: Add OEM specific DSDT generator > > .../ConfigurationManagerDxe/ConfigurationManager.c | 843 +++++++++++++++++++++ > .../ConfigurationManagerDxe/ConfigurationManager.h | 153 ++++ > .../ConfigurationManagerDxe.inf | 52 ++ > .../ConfigurationManagerPkg.dec | 23 + > .../Include/PlatformAcpiTableGenerator.h | 20 + > Platform/NXP/Env.sh | 67 ++ > .../LX2160aRdbPkg/AcpiTablesInclude/Dsdt/Clk.asl | 40 + > .../LX2160aRdbPkg/AcpiTablesInclude/Dsdt/Dsdt.asl | 15 + > .../AcpiTablesInclude/PlatformAcpiDsdtLib.inf | 39 + > .../PlatformAcpiDsdtLib/RawDsdtGenerator.c | 146 ++++ > .../AcpiTablesInclude/PlatformAcpiLib.h | 24 + > Platform/NXP/LX2160aRdbPkg/Include/Platform.h | 246 ++++++ > Platform/NXP/LX2160aRdbPkg/LX2160aRdbPkg.dec | 4 + > Platform/NXP/LX2160aRdbPkg/LX2160aRdbPkg.dsc | 29 + > Platform/NXP/LX2160aRdbPkg/LX2160aRdbPkg.fdf | 12 + > Platform/NXP/Readme.md | 35 +- > Platform/NXP/build.sh | 115 +++ > Silicon/NXP/LX2160A/LX2160A.dsc.inc | 9 + > 18 files changed, 1871 insertions(+), 1 deletion(-) > create mode 100644 Platform/NXP/ConfigurationManagerPkg/ConfigurationManagerDxe/ConfigurationManager.c > create mode 100644 Platform/NXP/ConfigurationManagerPkg/ConfigurationManagerDxe/ConfigurationManager.h > create mode 100644 Platform/NXP/ConfigurationManagerPkg/ConfigurationManagerDxe/ConfigurationManagerDxe.inf > create mode 100644 Platform/NXP/ConfigurationManagerPkg/ConfigurationManagerPkg.dec > create mode 100644 Platform/NXP/ConfigurationManagerPkg/Include/PlatformAcpiTableGenerator.h > create mode 100755 Platform/NXP/Env.sh > create mode 100644 Platform/NXP/LX2160aRdbPkg/AcpiTablesInclude/Dsdt/Clk.asl > create mode 100644 Platform/NXP/LX2160aRdbPkg/AcpiTablesInclude/Dsdt/Dsdt.asl > create mode 100644 Platform/NXP/LX2160aRdbPkg/AcpiTablesInclude/PlatformAcpiDsdtLib.inf > create mode 100644 Platform/NXP/LX2160aRdbPkg/AcpiTablesInclude/PlatformAcpiDsdtLib/RawDsdtGenerator.c > create mode 100644 Platform/NXP/LX2160aRdbPkg/AcpiTablesInclude/PlatformAcpiLib.h > create mode 100644 Platform/NXP/LX2160aRdbPkg/Include/Platform.h > create mode 100755 Platform/NXP/build.sh > > -- > 2.7.4 > ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH v2 0/2] Dynamic ACPI framework for fsl layerscape platforms 2021-02-15 13:18 ` [PATCH v2 0/2] Dynamic ACPI framework for fsl layerscape platforms Leif Lindholm @ 2021-02-15 13:53 ` Sami Mujawar 2021-02-16 11:59 ` Vikas Singh 1 sibling, 0 replies; 9+ messages in thread From: Sami Mujawar @ 2021-02-15 13:53 UTC (permalink / raw) To: Leif Lindholm, Vikas Singh, Pierre Gondois Cc: devel@edk2.groups.io, Meenakshi Aggarwal (meenakshi.aggarwal@nxp.com), Paul Yang, Augustine Philips, Samer El-Haj-Mahmoud, V Sethi (v.sethi@nxp.com), arokia.samy, kuldip.dwivedi@puresoftware.com, Ard Biesheuvel, vikas.singh@nxp.com, nd Hi Leif, Please find my response inline marked [SAMI]. Regards, Sami Mujawar -----Original Message----- From: Leif Lindholm <leif@nuviainc.com> Sent: 15 February 2021 01:18 PM To: Vikas Singh <vikas.singh@puresoftware.com>; Sami Mujawar <Sami.Mujawar@arm.com> Cc: devel@edk2.groups.io; Meenakshi Aggarwal (meenakshi.aggarwal@nxp.com) <meenakshi.aggarwal@nxp.com>; Paul Yang <Paul.Yang@arm.com>; Augustine Philips <Augustine.Philips@arm.com>; Samer El-Haj-Mahmoud <Samer.El-Haj-Mahmoud@arm.com>; V Sethi (v.sethi@nxp.com) <v.sethi@nxp.com>; arokia.samy <arokia.samy@puresoftware.com>; kuldip.dwivedi@puresoftware.com; Ard Biesheuvel <Ard.Biesheuvel@arm.com>; vikas.singh@nxp.com Subject: Re: [PATCH v2 0/2] Dynamic ACPI framework for fsl layerscape platforms Hi Vikas, Apologies for very slow review. However, this set doesn't build for me. It fails with In file included from /work/git/edk2-platforms/Platform/NXP/ConfigurationManagerPkg/ConfigurationManagerDxe/ConfigurationManager.c:26: /work/git/edk2-platforms/Platform/NXP/ConfigurationManagerPkg/ConfigurationManagerDxe/ConfigurationManager.h:17:10: fatal error: Platform.h: No such file or directory #include <Platform.h> ^~~~~~~~~~~~ Since the location of ConfigurationManagerPkg suggests the intent to use this for additional platforms in the future, this cannot be resolved by referencing LX2160aRdbPkg.dec from ConfigurationManagerDxe.inf. I would suggest doing like the ARM VExpressPkg and add: [BuildOptions] GCC:*_*_AARCH64_PLATFORM_FLAGS == -I$(WORKSPACE)/Platform/NXP/LX2160aRdbPkg/Include to LX2160aRdbPkg.dsc. Also, I'm seeing a build failure in edk2 DynamicTablesPkg when building with NOOPT: /work/git/edk2/DynamicTablesPkg/Library/Common/AmlLib/NameSpace/AmlNameSpace.c: In function ‘AmlEnumeratePathCallback’: /work/git/edk2/DynamicTablesPkg/Library/Common/AmlLib/NameSpace/AmlNameSpace.c:1081:31: error: variable ‘CurrNodePath’ set but not used [-Werror=unused-but-set-variable] CHAR8 * CurrNodePath; ^~~~~~~~~~~~ /work/git/edk2/DynamicTablesPkg/Library/Common/AmlLib/NameSpace/AmlNameSpace.c:1078:31: error: variable ‘SearchedPath’ set but not used [-Werror=unused-but-set-variable] CHAR8 * SearchedPath; ^~~~~~~~~~~~ Sami - can you have a look at that? [SAMI] We will get a patch to fix this soon. [/SAMI] I'll follow up with a couple of minor comments on the patches. Best Regards, Leif On Wed, Jan 27, 2021 at 12:14:57 +0530, Vikas Singh wrote: > This patch series sets the foundation of Dynamic ACPI framework for all > fsl layerscape platforms. In order to achieve: > - Configurable firmware builds. > - Unify firmware build for similar platforms. > - Minimize/eliminate human induced errors. > - Validate and generate firmware that complies with relevant specifications. > this change set will introduce following changes in below defined order under > edk2-platforms/NXP for LX2160ARDB platform. > > (1) Introduced edk2-platforms/NXP/ConfigurationManager > It creates the platform repositories dynamically during build time > and initializes with platform specific information and serves all requestes > coming from OEM/standard firmware table generators. Configuration Manager(CM) > will be common for all fsl platforms. > > (2) Introduced edk2-platforms/NXP/LX2160ARDB/Include/Platform.h > It has all the declarations and the definitions specified for the platforms. > These definitions will be inturn consumed by Configuration Manager. > Additionally the placement of this header under "Include" dir will make these > macro's availale to other translation units of the platform built. > > (3) Introduced edk2-platforms/NXP/LX2160ARDB/AcpiTablesInclude > This is a placeholder for - OEM specific firmware acpi table generators. > This also includes IP specific - DSDT/SSDT generators for the OEM's platform. > Currently Dsdt.asl is a place holder having only platform's clock related dsdt > properties for LX2160ARDB but it is intended to extend this "Dsdt.asl" to hold > other table as well in next patch series. > > (4) Introduced a new "DYNAMIC_ACPI_ENABLE" flag to control DACPI framework. > Currently this flag is used for LX2160ARDB and by default it is enabled. > This flag can also extend to other fsl layerscape platforms in future. > Changes can be referred under: > - LX2160ARDb.dsc > - LX2160ARDB.fdf > > (5) Introduced a "build.sh" script under edk2-platforms/NXP/ to automate builds. > And also mandatorily need to support Dynamic ACPI framework for all fsl platforms. > It exports build environment variables and also invokes "Env.sh". > > Vikas Singh (2): > Platform/NXP: Add Dynamic Acpi for layerscape platforms > Platform/NXP: Add OEM specific DSDT generator > > .../ConfigurationManagerDxe/ConfigurationManager.c | 843 +++++++++++++++++++++ > .../ConfigurationManagerDxe/ConfigurationManager.h | 153 ++++ > .../ConfigurationManagerDxe.inf | 52 ++ > .../ConfigurationManagerPkg.dec | 23 + > .../Include/PlatformAcpiTableGenerator.h | 20 + > Platform/NXP/Env.sh | 67 ++ > .../LX2160aRdbPkg/AcpiTablesInclude/Dsdt/Clk.asl | 40 + > .../LX2160aRdbPkg/AcpiTablesInclude/Dsdt/Dsdt.asl | 15 + > .../AcpiTablesInclude/PlatformAcpiDsdtLib.inf | 39 + > .../PlatformAcpiDsdtLib/RawDsdtGenerator.c | 146 ++++ > .../AcpiTablesInclude/PlatformAcpiLib.h | 24 + > Platform/NXP/LX2160aRdbPkg/Include/Platform.h | 246 ++++++ > Platform/NXP/LX2160aRdbPkg/LX2160aRdbPkg.dec | 4 + > Platform/NXP/LX2160aRdbPkg/LX2160aRdbPkg.dsc | 29 + > Platform/NXP/LX2160aRdbPkg/LX2160aRdbPkg.fdf | 12 + > Platform/NXP/Readme.md | 35 +- > Platform/NXP/build.sh | 115 +++ > Silicon/NXP/LX2160A/LX2160A.dsc.inc | 9 + > 18 files changed, 1871 insertions(+), 1 deletion(-) > create mode 100644 Platform/NXP/ConfigurationManagerPkg/ConfigurationManagerDxe/ConfigurationManager.c > create mode 100644 Platform/NXP/ConfigurationManagerPkg/ConfigurationManagerDxe/ConfigurationManager.h > create mode 100644 Platform/NXP/ConfigurationManagerPkg/ConfigurationManagerDxe/ConfigurationManagerDxe.inf > create mode 100644 Platform/NXP/ConfigurationManagerPkg/ConfigurationManagerPkg.dec > create mode 100644 Platform/NXP/ConfigurationManagerPkg/Include/PlatformAcpiTableGenerator.h > create mode 100755 Platform/NXP/Env.sh > create mode 100644 Platform/NXP/LX2160aRdbPkg/AcpiTablesInclude/Dsdt/Clk.asl > create mode 100644 Platform/NXP/LX2160aRdbPkg/AcpiTablesInclude/Dsdt/Dsdt.asl > create mode 100644 Platform/NXP/LX2160aRdbPkg/AcpiTablesInclude/PlatformAcpiDsdtLib.inf > create mode 100644 Platform/NXP/LX2160aRdbPkg/AcpiTablesInclude/PlatformAcpiDsdtLib/RawDsdtGenerator.c > create mode 100644 Platform/NXP/LX2160aRdbPkg/AcpiTablesInclude/PlatformAcpiLib.h > create mode 100644 Platform/NXP/LX2160aRdbPkg/Include/Platform.h > create mode 100755 Platform/NXP/build.sh > > -- > 2.7.4 > ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH v2 0/2] Dynamic ACPI framework for fsl layerscape platforms 2021-02-15 13:18 ` [PATCH v2 0/2] Dynamic ACPI framework for fsl layerscape platforms Leif Lindholm 2021-02-15 13:53 ` Sami Mujawar @ 2021-02-16 11:59 ` Vikas Singh 2021-02-19 10:42 ` Vikas Singh 1 sibling, 1 reply; 9+ messages in thread From: Vikas Singh @ 2021-02-16 11:59 UTC (permalink / raw) To: Leif Lindholm Cc: Sami Mujawar, devel, meenakshi.aggarwal, Paul Yang, Augustine Philips, samer.el-haj-mahmoud, Varun Sethi, Arokia Samy, Kuldip Dwivedi, ard.biesheuvel, Vikas Singh On Mon, Feb 15, 2021 at 6:48 PM Leif Lindholm <leif@nuviainc.com> wrote: > > Hi Vikas, > > Apologies for very slow review. > > However, this set doesn't build for me. > It fails with > > In file included from /work/git/edk2-platforms/Platform/NXP/ConfigurationManagerPkg/ConfigurationManagerDxe/ConfigurationManager.c:26: > /work/git/edk2-platforms/Platform/NXP/ConfigurationManagerPkg/ConfigurationManagerDxe/ConfigurationManager.h:17:10: fatal error: Platform.h: No such file or directory > #include <Platform.h> > ^~~~~~~~~~~~ > > Since the location of ConfigurationManagerPkg suggests the intent to > use this for additional platforms in the future, this cannot be > resolved by referencing LX2160aRdbPkg.dec from > ConfigurationManagerDxe.inf. > > I would suggest doing like the ARM VExpressPkg and add: > [BuildOptions] > GCC:*_*_AARCH64_PLATFORM_FLAGS == -I$(WORKSPACE)/Platform/NXP/LX2160aRdbPkg/Include > to LX2160aRdbPkg.dsc. > Thank you leif for your review comments and suggesting the way out. I will do the necessary changes (suggested by you) and drop the build script idea at this moment. I will share the updated V3 series asap. Thnx!! VS > Also, I'm seeing a build failure in edk2 DynamicTablesPkg when > building with NOOPT: > /work/git/edk2/DynamicTablesPkg/Library/Common/AmlLib/NameSpace/AmlNameSpace.c: In function ‘AmlEnumeratePathCallback’: > /work/git/edk2/DynamicTablesPkg/Library/Common/AmlLib/NameSpace/AmlNameSpace.c:1081:31: error: variable ‘CurrNodePath’ set but not used [-Werror=unused-but-set-variable] > CHAR8 * CurrNodePath; > ^~~~~~~~~~~~ > /work/git/edk2/DynamicTablesPkg/Library/Common/AmlLib/NameSpace/AmlNameSpace.c:1078:31: error: variable ‘SearchedPath’ set but not used [-Werror=unused-but-set-variable] > CHAR8 * SearchedPath; > ^~~~~~~~~~~~ > > Sami - can you have a look at that? > > I'll follow up with a couple of minor comments on the patches. > > Best Regards, > > Leif > > On Wed, Jan 27, 2021 at 12:14:57 +0530, Vikas Singh wrote: > > This patch series sets the foundation of Dynamic ACPI framework for all > > fsl layerscape platforms. In order to achieve: > > - Configurable firmware builds. > > - Unify firmware build for similar platforms. > > - Minimize/eliminate human induced errors. > > - Validate and generate firmware that complies with relevant specifications. > > this change set will introduce following changes in below defined order under > > edk2-platforms/NXP for LX2160ARDB platform. > > > > (1) Introduced edk2-platforms/NXP/ConfigurationManager > > It creates the platform repositories dynamically during build time > > and initializes with platform specific information and serves all requestes > > coming from OEM/standard firmware table generators. Configuration Manager(CM) > > will be common for all fsl platforms. > > > > (2) Introduced edk2-platforms/NXP/LX2160ARDB/Include/Platform.h > > It has all the declarations and the definitions specified for the platforms. > > These definitions will be inturn consumed by Configuration Manager. > > Additionally the placement of this header under "Include" dir will make these > > macro's availale to other translation units of the platform built. > > > > (3) Introduced edk2-platforms/NXP/LX2160ARDB/AcpiTablesInclude > > This is a placeholder for - OEM specific firmware acpi table generators. > > This also includes IP specific - DSDT/SSDT generators for the OEM's platform. > > Currently Dsdt.asl is a place holder having only platform's clock related dsdt > > properties for LX2160ARDB but it is intended to extend this "Dsdt.asl" to hold > > other table as well in next patch series. > > > > (4) Introduced a new "DYNAMIC_ACPI_ENABLE" flag to control DACPI framework. > > Currently this flag is used for LX2160ARDB and by default it is enabled. > > This flag can also extend to other fsl layerscape platforms in future. > > Changes can be referred under: > > - LX2160ARDb.dsc > > - LX2160ARDB.fdf > > > > (5) Introduced a "build.sh" script under edk2-platforms/NXP/ to automate builds. > > And also mandatorily need to support Dynamic ACPI framework for all fsl platforms. > > It exports build environment variables and also invokes "Env.sh". > > > > Vikas Singh (2): > > Platform/NXP: Add Dynamic Acpi for layerscape platforms > > Platform/NXP: Add OEM specific DSDT generator > > > > .../ConfigurationManagerDxe/ConfigurationManager.c | 843 +++++++++++++++++++++ > > .../ConfigurationManagerDxe/ConfigurationManager.h | 153 ++++ > > .../ConfigurationManagerDxe.inf | 52 ++ > > .../ConfigurationManagerPkg.dec | 23 + > > .../Include/PlatformAcpiTableGenerator.h | 20 + > > Platform/NXP/Env.sh | 67 ++ > > .../LX2160aRdbPkg/AcpiTablesInclude/Dsdt/Clk.asl | 40 + > > .../LX2160aRdbPkg/AcpiTablesInclude/Dsdt/Dsdt.asl | 15 + > > .../AcpiTablesInclude/PlatformAcpiDsdtLib.inf | 39 + > > .../PlatformAcpiDsdtLib/RawDsdtGenerator.c | 146 ++++ > > .../AcpiTablesInclude/PlatformAcpiLib.h | 24 + > > Platform/NXP/LX2160aRdbPkg/Include/Platform.h | 246 ++++++ > > Platform/NXP/LX2160aRdbPkg/LX2160aRdbPkg.dec | 4 + > > Platform/NXP/LX2160aRdbPkg/LX2160aRdbPkg.dsc | 29 + > > Platform/NXP/LX2160aRdbPkg/LX2160aRdbPkg.fdf | 12 + > > Platform/NXP/Readme.md | 35 +- > > Platform/NXP/build.sh | 115 +++ > > Silicon/NXP/LX2160A/LX2160A.dsc.inc | 9 + > > 18 files changed, 1871 insertions(+), 1 deletion(-) > > create mode 100644 Platform/NXP/ConfigurationManagerPkg/ConfigurationManagerDxe/ConfigurationManager.c > > create mode 100644 Platform/NXP/ConfigurationManagerPkg/ConfigurationManagerDxe/ConfigurationManager.h > > create mode 100644 Platform/NXP/ConfigurationManagerPkg/ConfigurationManagerDxe/ConfigurationManagerDxe.inf > > create mode 100644 Platform/NXP/ConfigurationManagerPkg/ConfigurationManagerPkg.dec > > create mode 100644 Platform/NXP/ConfigurationManagerPkg/Include/PlatformAcpiTableGenerator.h > > create mode 100755 Platform/NXP/Env.sh > > create mode 100644 Platform/NXP/LX2160aRdbPkg/AcpiTablesInclude/Dsdt/Clk.asl > > create mode 100644 Platform/NXP/LX2160aRdbPkg/AcpiTablesInclude/Dsdt/Dsdt.asl > > create mode 100644 Platform/NXP/LX2160aRdbPkg/AcpiTablesInclude/PlatformAcpiDsdtLib.inf > > create mode 100644 Platform/NXP/LX2160aRdbPkg/AcpiTablesInclude/PlatformAcpiDsdtLib/RawDsdtGenerator.c > > create mode 100644 Platform/NXP/LX2160aRdbPkg/AcpiTablesInclude/PlatformAcpiLib.h > > create mode 100644 Platform/NXP/LX2160aRdbPkg/Include/Platform.h > > create mode 100755 Platform/NXP/build.sh > > > > -- > > 2.7.4 > > ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [PATCH v2 0/2] Dynamic ACPI framework for fsl layerscape platforms 2021-02-16 11:59 ` Vikas Singh @ 2021-02-19 10:42 ` Vikas Singh 0 siblings, 0 replies; 9+ messages in thread From: Vikas Singh @ 2021-02-19 10:42 UTC (permalink / raw) To: Leif Lindholm Cc: Sami Mujawar, devel, meenakshi.aggarwal, Paul Yang, Augustine Philips, samer.el-haj-mahmoud, Varun Sethi, Arokia Samy, Kuldip Dwivedi, ard.biesheuvel, Vikas Singh On Tue, Feb 16, 2021 at 5:29 PM Vikas Singh <vikas.singh@puresoftware.com> wrote: > > On Mon, Feb 15, 2021 at 6:48 PM Leif Lindholm <leif@nuviainc.com> wrote: > > > > Hi Vikas, > > > > Apologies for very slow review. > > > > However, this set doesn't build for me. > > It fails with > > > > In file included from /work/git/edk2-platforms/Platform/NXP/ConfigurationManagerPkg/ConfigurationManagerDxe/ConfigurationManager.c:26: > > /work/git/edk2-platforms/Platform/NXP/ConfigurationManagerPkg/ConfigurationManagerDxe/ConfigurationManager.h:17:10: fatal error: Platform.h: No such file or directory > > #include <Platform.h> > > ^~~~~~~~~~~~ > > > > Since the location of ConfigurationManagerPkg suggests the intent to > > use this for additional platforms in the future, this cannot be > > resolved by referencing LX2160aRdbPkg.dec from > > ConfigurationManagerDxe.inf. > > > > I would suggest doing like the ARM VExpressPkg and add: > > [BuildOptions] > > GCC:*_*_AARCH64_PLATFORM_FLAGS == -I$(WORKSPACE)/Platform/NXP/LX2160aRdbPkg/Include > > to LX2160aRdbPkg.dsc. > > > > Thank you leif for your review comments and suggesting the way out. > I will do the necessary changes (suggested by you) and drop the build > script idea at this moment. > > I will share the updated V3 series asap. > > Thnx!! > VS > Hi Leif, I have shared the modified V3 series the day before yesterday. Let me know if you see further improvements on it. This is for your info. Thnx !! VS > > Also, I'm seeing a build failure in edk2 DynamicTablesPkg when > > building with NOOPT: > > /work/git/edk2/DynamicTablesPkg/Library/Common/AmlLib/NameSpace/AmlNameSpace.c: In function ‘AmlEnumeratePathCallback’: > > /work/git/edk2/DynamicTablesPkg/Library/Common/AmlLib/NameSpace/AmlNameSpace.c:1081:31: error: variable ‘CurrNodePath’ set but not used [-Werror=unused-but-set-variable] > > CHAR8 * CurrNodePath; > > ^~~~~~~~~~~~ > > /work/git/edk2/DynamicTablesPkg/Library/Common/AmlLib/NameSpace/AmlNameSpace.c:1078:31: error: variable ‘SearchedPath’ set but not used [-Werror=unused-but-set-variable] > > CHAR8 * SearchedPath; > > ^~~~~~~~~~~~ > > > > Sami - can you have a look at that? > > > > I'll follow up with a couple of minor comments on the patches. > > > > Best Regards, > > > > Leif > > > > On Wed, Jan 27, 2021 at 12:14:57 +0530, Vikas Singh wrote: > > > This patch series sets the foundation of Dynamic ACPI framework for all > > > fsl layerscape platforms. In order to achieve: > > > - Configurable firmware builds. > > > - Unify firmware build for similar platforms. > > > - Minimize/eliminate human induced errors. > > > - Validate and generate firmware that complies with relevant specifications. > > > this change set will introduce following changes in below defined order under > > > edk2-platforms/NXP for LX2160ARDB platform. > > > > > > (1) Introduced edk2-platforms/NXP/ConfigurationManager > > > It creates the platform repositories dynamically during build time > > > and initializes with platform specific information and serves all requestes > > > coming from OEM/standard firmware table generators. Configuration Manager(CM) > > > will be common for all fsl platforms. > > > > > > (2) Introduced edk2-platforms/NXP/LX2160ARDB/Include/Platform.h > > > It has all the declarations and the definitions specified for the platforms. > > > These definitions will be inturn consumed by Configuration Manager. > > > Additionally the placement of this header under "Include" dir will make these > > > macro's availale to other translation units of the platform built. > > > > > > (3) Introduced edk2-platforms/NXP/LX2160ARDB/AcpiTablesInclude > > > This is a placeholder for - OEM specific firmware acpi table generators. > > > This also includes IP specific - DSDT/SSDT generators for the OEM's platform. > > > Currently Dsdt.asl is a place holder having only platform's clock related dsdt > > > properties for LX2160ARDB but it is intended to extend this "Dsdt.asl" to hold > > > other table as well in next patch series. > > > > > > (4) Introduced a new "DYNAMIC_ACPI_ENABLE" flag to control DACPI framework. > > > Currently this flag is used for LX2160ARDB and by default it is enabled. > > > This flag can also extend to other fsl layerscape platforms in future. > > > Changes can be referred under: > > > - LX2160ARDb.dsc > > > - LX2160ARDB.fdf > > > > > > (5) Introduced a "build.sh" script under edk2-platforms/NXP/ to automate builds. > > > And also mandatorily need to support Dynamic ACPI framework for all fsl platforms. > > > It exports build environment variables and also invokes "Env.sh". > > > > > > Vikas Singh (2): > > > Platform/NXP: Add Dynamic Acpi for layerscape platforms > > > Platform/NXP: Add OEM specific DSDT generator > > > > > > .../ConfigurationManagerDxe/ConfigurationManager.c | 843 +++++++++++++++++++++ > > > .../ConfigurationManagerDxe/ConfigurationManager.h | 153 ++++ > > > .../ConfigurationManagerDxe.inf | 52 ++ > > > .../ConfigurationManagerPkg.dec | 23 + > > > .../Include/PlatformAcpiTableGenerator.h | 20 + > > > Platform/NXP/Env.sh | 67 ++ > > > .../LX2160aRdbPkg/AcpiTablesInclude/Dsdt/Clk.asl | 40 + > > > .../LX2160aRdbPkg/AcpiTablesInclude/Dsdt/Dsdt.asl | 15 + > > > .../AcpiTablesInclude/PlatformAcpiDsdtLib.inf | 39 + > > > .../PlatformAcpiDsdtLib/RawDsdtGenerator.c | 146 ++++ > > > .../AcpiTablesInclude/PlatformAcpiLib.h | 24 + > > > Platform/NXP/LX2160aRdbPkg/Include/Platform.h | 246 ++++++ > > > Platform/NXP/LX2160aRdbPkg/LX2160aRdbPkg.dec | 4 + > > > Platform/NXP/LX2160aRdbPkg/LX2160aRdbPkg.dsc | 29 + > > > Platform/NXP/LX2160aRdbPkg/LX2160aRdbPkg.fdf | 12 + > > > Platform/NXP/Readme.md | 35 +- > > > Platform/NXP/build.sh | 115 +++ > > > Silicon/NXP/LX2160A/LX2160A.dsc.inc | 9 + > > > 18 files changed, 1871 insertions(+), 1 deletion(-) > > > create mode 100644 Platform/NXP/ConfigurationManagerPkg/ConfigurationManagerDxe/ConfigurationManager.c > > > create mode 100644 Platform/NXP/ConfigurationManagerPkg/ConfigurationManagerDxe/ConfigurationManager.h > > > create mode 100644 Platform/NXP/ConfigurationManagerPkg/ConfigurationManagerDxe/ConfigurationManagerDxe.inf > > > create mode 100644 Platform/NXP/ConfigurationManagerPkg/ConfigurationManagerPkg.dec > > > create mode 100644 Platform/NXP/ConfigurationManagerPkg/Include/PlatformAcpiTableGenerator.h > > > create mode 100755 Platform/NXP/Env.sh > > > create mode 100644 Platform/NXP/LX2160aRdbPkg/AcpiTablesInclude/Dsdt/Clk.asl > > > create mode 100644 Platform/NXP/LX2160aRdbPkg/AcpiTablesInclude/Dsdt/Dsdt.asl > > > create mode 100644 Platform/NXP/LX2160aRdbPkg/AcpiTablesInclude/PlatformAcpiDsdtLib.inf > > > create mode 100644 Platform/NXP/LX2160aRdbPkg/AcpiTablesInclude/PlatformAcpiDsdtLib/RawDsdtGenerator.c > > > create mode 100644 Platform/NXP/LX2160aRdbPkg/AcpiTablesInclude/PlatformAcpiLib.h > > > create mode 100644 Platform/NXP/LX2160aRdbPkg/Include/Platform.h > > > create mode 100755 Platform/NXP/build.sh > > > > > > -- > > > 2.7.4 > > > ^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2021-02-19 10:43 UTC | newest] Thread overview: 9+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2021-01-27 6:44 [PATCH v2 0/2] Dynamic ACPI framework for fsl layerscape platforms Vikas Singh 2021-01-27 6:44 ` [PATCH v2 1/2] Platform/NXP: Add Dynamic Acpi for " Vikas Singh 2021-02-15 13:55 ` Leif Lindholm 2021-01-27 6:44 ` [PATCH v2 2/2] Platform/NXP: Add OEM specific DSDT generator Vikas Singh 2021-02-15 13:44 ` Leif Lindholm 2021-02-15 13:18 ` [PATCH v2 0/2] Dynamic ACPI framework for fsl layerscape platforms Leif Lindholm 2021-02-15 13:53 ` Sami Mujawar 2021-02-16 11:59 ` Vikas Singh 2021-02-19 10:42 ` Vikas Singh
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox