> -----Original Message----- > From: Sami Mujawar [mailto:sami.muja...@arm.com] > Sent: 19 March 2018 15:22 > To: edk2-devel@lists.01.org > Cc: Arvind Chauhan <arvind.chau...@arm.com>; Daniil Egranov > <daniil.egra...@arm.com>; Thomas Abraham > <thomas.abra...@arm.com>; Evan Lloyd <evan.ll...@arm.com>; > leif.lindh...@linaro.org; Matteo Carlini <matteo.carl...@arm.com>; > Stephanie Hughes-Fitt <stephanie.hughes-f...@arm.com>; nd > <n...@arm.com> > Subject: [PATCH 2/2][platforms/dynamictables] Platform/ARM: Dynamic > Tables support for FVP > > The dynamic tables framework utilizes the configuration manager protocol > to get the platform specific information required for building the firmware > tables. > > The configuration manager is a platform specific component that collates > the platform hardware information and builds an abstract platform > configuration repository. The configuration manager also implements the > configuration manager protocol which returns the hardware information > requested by the table generators. > > This patch implements the configuration manager support for the FVP > platform. > > The dynamic tables framework support is configurable and can be enabled > using the DYNAMIC_TABLES_FRAMEWORK build option. > > Contributed-under: TianoCore Contribution Agreement 1.1 > Signed-off-by: Sami Mujawar <sami.muja...@arm.com> Reviewed-by: Evan Lloyd <evan.ll...@arm.com> > --- > Platform/ARM/VExpressPkg/ArmVExpress-FVP-AArch64.dsc > | 15 + > Platform/ARM/VExpressPkg/ArmVExpress-FVP-AArch64.fdf > | 16 +- > > Platform/ARM/VExpressPkg/ConfigurationManager/ConfigurationManager. > dsc.inc | 31 + > > Platform/ARM/VExpressPkg/ConfigurationManager/ConfigurationManager > Dxe/ConfigurationManager.c | 607 ++++++++++++++++++++ > > Platform/ARM/VExpressPkg/ConfigurationManager/ConfigurationManager > Dxe/ConfigurationManager.h | 172 ++++++ > > Platform/ARM/VExpressPkg/ConfigurationManager/ConfigurationManager > Dxe/ConfigurationManagerDxe.inf | 78 +++ > > Platform/ARM/VExpressPkg/ConfigurationManager/ConfigurationManager > Dxe/Platform.h | 91 +++ > > Platform/ARM/VExpressPkg/ConfigurationManager/PlatformASLTablesLib/ > Dsdt.asl | 77 +++ > > Platform/ARM/VExpressPkg/ConfigurationManager/PlatformASLTablesLib/ > PlatformASLTablesLib.inf | 34 ++ > 9 files changed, 1119 insertions(+), 2 deletions(-) > > diff --git a/Platform/ARM/VExpressPkg/ArmVExpress-FVP-AArch64.dsc > b/Platform/ARM/VExpressPkg/ArmVExpress-FVP-AArch64.dsc > index > cdf9e2d49784d542701dc84eb511f592e77ec106..ed1a16b7b35d9854847e > 3898f8061abb5261e134 100644 > --- a/Platform/ARM/VExpressPkg/ArmVExpress-FVP-AArch64.dsc > +++ b/Platform/ARM/VExpressPkg/ArmVExpress-FVP-AArch64.dsc > @@ -38,6 +38,10 @@ [Defines] > DT_SUPPORT = FALSE > > !include Platform/ARM/VExpressPkg/ArmVExpress.dsc.inc > +!ifdef DYNAMIC_TABLES_FRAMEWORK > + !include DynamicTablesPkg/DynamicTables.dsc.inc > + !include > +Platform/ARM/VExpressPkg/ConfigurationManager/ConfigurationManage > r.dsc. > +inc > +!endif > > [LibraryClasses.common] > ArmLib|ArmPkg/Library/ArmLib/ArmBaseLib.inf > @@ -128,6 +132,15 @@ [PcdsFixedAtBuild.common] > gEfiMdeModulePkgTokenSpaceGuid.PcdSerialRegisterBase|0x1c090000 > gEfiMdePkgTokenSpaceGuid.PcdUartDefaultBaudRate|115200 > gEfiMdePkgTokenSpaceGuid.PcdUartDefaultReceiveFifoDepth|0 > + gArmPlatformTokenSpaceGuid.PL011UartInterrupt|0x25 > + > + ## PL011 Serial Debug UART > + gArmPlatformTokenSpaceGuid.PcdSerialDbgRegisterBase|0x1c0a0000 > + gArmPlatformTokenSpaceGuid.PcdSerialDbgUartBaudRate|115200 > + gArmPlatformTokenSpaceGuid.PcdSerialDbgUartClkInHz|24000000 > + > + # SBSA Generic Watchdog > + gArmTokenSpaceGuid.PcdGenericWatchdogEl2IntrNum|59 > > ## PL031 RealTimeClock > gArmPlatformTokenSpaceGuid.PcdPL031RtcBase|0x1C170000 > @@ -255,8 +268,10 @@ [Components.common] !endif > } > > +!ifndef DYNAMIC_TABLES_FRAMEWORK > MdeModulePkg/Universal/Acpi/AcpiPlatformDxe/AcpiPlatformDxe.inf > Platform/ARM/VExpressPkg/AcpiTables/AcpiTables.inf > +!endif > > ArmPkg/Drivers/ArmGic/ArmGicDxe.inf > ArmPlatformPkg/Drivers/NorFlashDxe/NorFlashDxe.inf > diff --git a/Platform/ARM/VExpressPkg/ArmVExpress-FVP-AArch64.fdf > b/Platform/ARM/VExpressPkg/ArmVExpress-FVP-AArch64.fdf > index > 305e661a2bdc3ade2c16232c77769df5fc6f0c32..db164be9641cf6e315302 > 3752f60f95909ce803c 100644 > --- a/Platform/ARM/VExpressPkg/ArmVExpress-FVP-AArch64.fdf > +++ b/Platform/ARM/VExpressPkg/ArmVExpress-FVP-AArch64.fdf > @@ -1,5 +1,5 @@ > # > -# Copyright (c) 2011 - 2015, ARM Limited. All rights reserved. > +# Copyright (c) 2011 - 2018, ARM Limited. All rights reserved. > # > # This program and the accompanying materials # are licensed and made > available under the terms and conditions of the BSD License @@ -97,9 > +97,19 @@ [FV.FvMain] > > # ACPI Support > # > - INF MdeModulePkg/Universal/Acpi/AcpiPlatformDxe/AcpiPlatformDxe.inf > INF MdeModulePkg/Universal/Acpi/AcpiTableDxe/AcpiTableDxe.inf > +!ifndef DYNAMIC_TABLES_FRAMEWORK > + INF > MdeModulePkg/Universal/Acpi/AcpiPlatformDxe/AcpiPlatformDxe.inf > INF RuleOverride=ACPITABLE > Platform/ARM/VExpressPkg/AcpiTables/AcpiTables.inf > +!else > + # Configuration Manager > + INF > +Platform/ARM/VExpressPkg/ConfigurationManager/ConfigurationManage > rDxe/C > +onfigurationManagerDxe.inf > + > + # > + # Dynamic Table fdf > + # > + !include DynamicTablesPkg/DynamicTables.fdf.inc > +!endif > > # > # Multiple Console IO support > @@ -319,8 +329,10 @@ [Rule.Common.UEFI_APPLICATION.BINARY] > VERSION STRING="$(INF_VERSION)" Optional > BUILD_NUM=$(BUILD_NUMBER) > } > > +!ifndef DYNAMIC_TABLES_FRAMEWORK > [Rule.Common.USER_DEFINED.ACPITABLE] > FILE FREEFORM = $(NAMED_GUID) { > RAW ACPI |.acpi > RAW ASL |.aml > } > +!endif > diff --git > a/Platform/ARM/VExpressPkg/ConfigurationManager/ConfigurationManag > er.dsc.inc > b/Platform/ARM/VExpressPkg/ConfigurationManager/ConfigurationManag > er.dsc.inc > new file mode 100644 > index > 0000000000000000000000000000000000000000..8402742ebb0249d8b5 > 85d2315e24bba2f5ecf480 > --- /dev/null > +++ > b/Platform/ARM/VExpressPkg/ConfigurationManager/ConfigurationManag > er > +++ .dsc.inc > @@ -0,0 +1,31 @@ > +## @file > +# > +# Copyright (c) 2017, ARM Limited. All rights reserved. > +# > +# This program and the accompanying materials # are licensed and made > +available under the terms and conditions of the BSD License # which > +accompanies this distribution. The full text of the license may be > +found at # http://opensource.org/licenses/bsd-license.php > +# > +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" > +BASIS, # WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, > EITHER EXPRESS OR IMPLIED. > +## > + > +[Defines] > +# [BuildOptions.common.EDKII.DXE_RUNTIME_DRIVER] > + > +[BuildOptions] > +# Required for pre-processing ASL files that include ArmPlatform.h > + *_*_*_ASLPP_FLAGS = $(PLATFORM_FLAGS) > + > +[LibraryClasses.common] > + > +[Components.common] > + # Configuration Manager > + > Platform/ARM/VExpressPkg/ConfigurationManager/ConfigurationManager > Dxe/ConfigurationManagerDxe.inf { > + <LibraryClasses> > + # Platform ASL Tables > + > +PlatformAslTablesLib|Platform/ARM/VExpressPkg/ConfigurationManager > /Plat > +formASLTablesLib/PlatformASLTablesLib.inf > + <BuildOptions> > + *_*_*_PLATFORM_FLAGS = > +- > I$(BIN_DIR)/Platform/ARM/VExpressPkg/ConfigurationManager/PlatformA > SLT > +ablesLib/PlatformASLTablesLib/OUTPUT > + } > diff --git > a/Platform/ARM/VExpressPkg/ConfigurationManager/ConfigurationManag > erDxe/ConfigurationManager.c > b/Platform/ARM/VExpressPkg/ConfigurationManager/ConfigurationManag > erDxe/ConfigurationManager.c > new file mode 100644 > index > 0000000000000000000000000000000000000000..d45528813e2db9f44e > 1745392dfd35ffe05f1dca > --- /dev/null > +++ > b/Platform/ARM/VExpressPkg/ConfigurationManager/ConfigurationManag > er > +++ Dxe/ConfigurationManager.c > @@ -0,0 +1,607 @@ > +/** @file > + Configuration Manager Dxe > + > + Copyright (c) 2017 - 2018, ARM Limited. All rights reserved. > + > + This program and the accompanying materials are licensed and made > + available under the terms and conditions of the BSD License which > + accompanies this distribution. The full text of the license may be > + found at http://opensource.org/licenses/bsd-license.php > + > + THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" > BASIS, > + WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER > EXPRESS OR IMPLIED. > + > + @par Glossary: > + - Cm or CM - Configuration Manager > + - Obj or OBJ - Object > +**/ > + > +#include <IndustryStandard/DebugPort2Table.h> > +#include <Library/IoLib.h> > +#include <Library/UefiBootServicesTableLib.h> > +#include <Library/ArmLib.h> > +#include <Library/DebugLib.h> > +#include <Library/PcdLib.h> > +#include <Protocol/AcpiTable.h> > + > +#include <ArmPlatform.h> > +#include <AcpiTableGenerator.h> > +#include <Protocol/ConfigurationManagerProtocol.h> > + > +#include "ConfigurationManager.h" > +#include "Platform.h" > + > +// AML Code Include files generated by iASL Compiler #include > +<Dsdt.hex> > + > +/** The platform configuration repository information. > +*/ > +STATIC > +EFI_PLATFORM_REPOSITORY_INFO VExpressPlatRepositoryInfo = { > + /// Configuration Manager information > + { CONFIGURATION_MANAGER_REVISION, CFG_MGR_OEM_ID }, > + > + // ACPI Table List > + { > + // FADT Table > + { > + EFI_ACPI_6_2_FIXED_ACPI_DESCRIPTION_TABLE_SIGNATURE, > + CREATE_STD_ACPI_TABLE_GEN_ID (ESTD_ACPI_TABLE_ID_FADT), > + NULL > + }, > + // GTDT Table > + { > + EFI_ACPI_6_2_GENERIC_TIMER_DESCRIPTION_TABLE_SIGNATURE, > + CREATE_STD_ACPI_TABLE_GEN_ID (ESTD_ACPI_TABLE_ID_GTDT), > + NULL > + }, > + // MADT Table > + { > + EFI_ACPI_6_2_MULTIPLE_APIC_DESCRIPTION_TABLE_SIGNATURE, > + CREATE_STD_ACPI_TABLE_GEN_ID (ESTD_ACPI_TABLE_ID_MADT), > + NULL > + }, > + // SPCR Table > + { > + > EFI_ACPI_6_2_SERIAL_PORT_CONSOLE_REDIRECTION_TABLE_SIGNATURE, > + CREATE_STD_ACPI_TABLE_GEN_ID (ESTD_ACPI_TABLE_ID_SPCR), > + NULL > + }, > + // DSDT Table > + { > + > EFI_ACPI_6_2_DIFFERENTIATED_SYSTEM_DESCRIPTION_TABLE_SIGNATURE, > + CREATE_STD_ACPI_TABLE_GEN_ID (ESTD_ACPI_TABLE_ID_DSDT), > + (EFI_ACPI_DESCRIPTION_HEADER*)dsdt_AmlCode > + }, > + // DBG2 Table > + { > + EFI_ACPI_6_2_DEBUG_PORT_2_TABLE_SIGNATURE, > + CREATE_STD_ACPI_TABLE_GEN_ID (ESTD_ACPI_TABLE_ID_DBG2), > + NULL > + } > + }, > + > + // Boot architecture information > + { EFI_ACPI_6_2_ARM_PSCI_COMPLIANT }, // BootArchFlags > + > +#ifdef HEADLESS_PLATFORM > + // Fixed feature flag information > + { EFI_ACPI_6_2_HEADLESS }, // Fixed feature flags > +#endif > + > + // Power management profile information > + { EFI_ACPI_6_2_PM_PROFILE_ENTERPRISE_SERVER }, // > PowerManagement Profile > + > + /* GIC CPU Interface information > + GIC_ENTRY (CPUInterfaceNumber, Mpidr, PmuIrq, VGicIrq, > + EnergyEfficiency) */ { > + GICC_ENTRY (0, GET_MPID (0, 0), 92, 25, 0), > + GICC_ENTRY (1, GET_MPID (0, 1), 93, 25, 0), > + GICC_ENTRY (2, GET_MPID (0, 2), 94, 25, 0), > + GICC_ENTRY (3, GET_MPID (0, 3), 95, 25, 0), > + > + GICC_ENTRY (4, GET_MPID (1, 0), 96, 25, 0), > + GICC_ENTRY (5, GET_MPID (1, 1), 97, 25, 0), > + GICC_ENTRY (6, GET_MPID (1, 2), 98, 25, 0), > + GICC_ENTRY (7, GET_MPID (1, 3), 99, 25, 0) }, > + > + // GIC Distributor Info > + { > + 0, // UINT32 GicId > + FixedPcdGet64 (PcdGicDistributorBase), // UINT64 > PhysicalBaseAddress > + 0, // UINT32 SystemVectorBase > + 3 // UINT8 GicVersion > + }, > + > + /// GIC Re-Distributor Info > + { > + // UINT64 DiscoveryRangeBaseAddress > + FixedPcdGet64 (PcdGicRedistributorsBase), > + // UINT32 DiscoveryRangeLength > + 0x00200000 > + }, > + > + // Generic Timer Info > + { > + // The physical base address for the counter control frame > + FVP_SYSTEM_TIMER_BASE_ADDRESS, > + // The physical base address for the counter read frame > + FVP_CNT_READ_BASE_ADDRESS, > + // The secure PL1 timer interrupt > + FixedPcdGet32 (PcdArmArchTimerSecIntrNum), > + // The secure PL1 timer flags > + FVP_GTDT_GTIMER_FLAGS, > + // The non-secure PL1 timer interrupt > + FixedPcdGet32 (PcdArmArchTimerIntrNum), > + // The non-secure PL1 timer flags > + FVP_GTDT_GTIMER_FLAGS, > + // The virtual timer interrupt > + FixedPcdGet32 (PcdArmArchTimerVirtIntrNum), > + // The virtual timer flags > + FVP_GTDT_GTIMER_FLAGS, > + // The non-secure PL2 timer interrupt > + FixedPcdGet32 (PcdArmArchTimerHypIntrNum), > + // The non-secure PL2 timer flags > + FVP_GTDT_GTIMER_FLAGS > + }, > + > + // Generic Timer Block Information > + { > + { > + // The physical base address for the GT Block Timer structure > + FVP_GT_BLOCK_CTL_BASE, > + // The number of timer frames implemented in the GT Block > + FVP_TIMER_FRAMES_COUNT, > + // Reference token for the GT Block timer frame list > + (CM_OBJECT_TOKEN)((UINT8*)&VExpressPlatRepositoryInfo + > + OFFSET_OF (EFI_PLATFORM_REPOSITORY_INFO, GTBlock0TimerInfo)) > + } > + }, > + > + // GT Block Timer Frames > + { > + // Frame 0 > + { > + 0, // UINT8 FrameNumber > + FVP_GT_BLOCK_FRAME0_CTL_BASE, // UINT64 > PhysicalAddressCntBase > + FVP_GT_BLOCK_FRAME0_CTL_EL0_BASE, // UINT64 > PhysicalAddressCntEL0Base > + FVP_GT_BLOCK_FRAME0_GSIV, // UINT32 PhysicalTimerGSIV > + FVP_GTX_TIMER_FLAGS, // UINT32 PhysicalTimerFlags > + 0, // UINT32 VirtualTimerGSIV > + 0, // UINT32 VirtualTimerFlags > + FVP_GTX_COMMON_FLAGS // UINT32 CommonFlags > + }, > + // Frame 1 > + { > + 1, // UINT8 FrameNumber > + FVP_GT_BLOCK_FRAME1_CTL_BASE, // UINT64 > PhysicalAddressCntBase > + FVP_GT_BLOCK_FRAME1_CTL_EL0_BASE, // UINT64 > PhysicalAddressCntEL0Base > + FVP_GT_BLOCK_FRAME1_GSIV, // UINT32 PhysicalTimerGSIV > + FVP_GTX_TIMER_FLAGS, // UINT32 PhysicalTimerFlags > + 0, // UINT32 VirtualTimerGSIV > + 0, // UINT32 VirtualTimerFlags > + FVP_GTX_COMMON_FLAGS // UINT32 CommonFlags > + }, > + }, > + > + // Watchdog Info > + { > + // The physical base address of the SBSA Watchdog control frame > + FixedPcdGet64 (PcdGenericWatchdogControlBase), > + // The physical base address of the SBSA Watchdog refresh frame > + FixedPcdGet64 (PcdGenericWatchdogRefreshBase), > + // The watchdog interrupt > + FixedPcdGet32 (PcdGenericWatchdogEl2IntrNum), > + // The watchdog flags > + FVP_SBSA_WATCHDOG_FLAGS > + }, > + > + // SPCR Serial Port > + { > + FixedPcdGet64 (PcdSerialRegisterBase), // UINT64 BaseAddress > + FixedPcdGet32 (PL011UartInterrupt), // UINT32 Interrupt > + FixedPcdGet64 (PcdUartDefaultBaudRate), // UINT64 BaudRate > + FixedPcdGet32 (PL011UartClkInHz), // UINT32 Clock > + EFI_ACPI_DBG2_PORT_SUBTYPE_SERIAL_ARM_PL011_UART // UINT16 > Port > + subtype }, // Debug Serial Port { > + FixedPcdGet64 (PcdSerialDbgRegisterBase), // UINT64 BaseAddress > + 38, // UINT32 Interrupt > + FixedPcdGet64 (PcdSerialDbgUartBaudRate), // UINT64 BaudRate > + FixedPcdGet32 (PcdSerialDbgUartClkInHz), // UINT32 Clock > + EFI_ACPI_DBG2_PORT_SUBTYPE_SERIAL_ARM_PL011_UART // UINT16 > Port > + subtype }, > + > + // GIC ITS > + { > + // The GIC ITS ID. > + 0, > + // The physical address for the Interrupt Translation Service > + 0x2f020000 > + } > +}; > + > +/** 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 EFI_CONFIGURATION_MANAGER_PROTOCOL * CONST This > + ) > +{ > + 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 [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 EFI_CONFIGURATION_MANAGER_PROTOCOL * CONST This, > + IN CONST CM_OBJECT_ID CmObjectId, > + IN CONST CM_OBJECT_TOKEN Token, > + IN OUT CM_OBJ_DESCRIPTOR * CONST CmObject > + ) > +{ > + EFI_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->Size = sizeof (PlatformRepo->GTBlock0TimerInfo); > + CmObject->Data = (VOID*)&PlatformRepo->GTBlock0TimerInfo; > + return EFI_SUCCESS; > +} > + > +/** 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 [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 EFI_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 = EFI_SUCCESS; > + EFI_PLATFORM_REPOSITORY_INFO * PlatformRepo; > + > + if ((This == NULL) || (CmObject == NULL)) { > + ASSERT (This != NULL); > + ASSERT (CmObject != NULL); > + return EFI_INVALID_PARAMETER; > + } > + PlatformRepo = This->PlatRepoInfo; > + > + switch (GET_CM_OBJECT_ID (CmObjectId)) { > + HANDLE_CM_OBJECT (EStdObjCfgMgrInfo, PlatformRepo->CmInfo); > + HANDLE_CM_OBJECT (EStdObjAcpiTableList, PlatformRepo- > >CmAcpiTableList); > + 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 [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 EFI_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 = EFI_SUCCESS; > + EFI_PLATFORM_REPOSITORY_INFO * PlatformRepo; > + > + if ((This == NULL) || (CmObject == NULL)) { > + ASSERT (This != NULL); > + ASSERT (CmObject != NULL); > + return EFI_INVALID_PARAMETER; > + } > + PlatformRepo = This->PlatRepoInfo; > + > + switch (GET_CM_OBJECT_ID (CmObjectId)) { > + HANDLE_CM_OBJECT (EArmObjBootArchInfo, PlatformRepo- > >BootArchInfo); > +#ifdef HEADLESS_PLATFORM > + HANDLE_CM_OBJECT ( > + EArmObjFixedFeatureFlags, > + PlatformRepo->FixedFeatureFlags > + ); > +#endif > + HANDLE_CM_OBJECT ( > + EArmObjPowerManagementProfileInfo, > + PlatformRepo->PmProfileInfo > + ); > + HANDLE_CM_OBJECT (EArmObjGenericTimerInfo, PlatformRepo- > >GenericTimerInfo); > + HANDLE_CM_OBJECT ( > + EArmObjPlatformGenericWatchdogInfo, > + PlatformRepo->Watchdog > + ); > + HANDLE_CM_OBJECT (EArmObjPlatformGTBlockInfo, PlatformRepo- > >GTBlockInfo); > + HANDLE_CM_OBJECT_REF_BY_TOKEN ( > + EArmObjGTBlockTimerFrameInfo, > + PlatformRepo->GTBlock0TimerInfo, > + Token, > + GetGTBlockTimerFrameInfo > + ); > + HANDLE_CM_OBJECT (EArmObjGicCInfo, PlatformRepo->GicCInfo); > + HANDLE_CM_OBJECT (EArmObjGicDInfo, PlatformRepo->GicDInfo); > + HANDLE_CM_OBJECT (EArmObjGicRedistributorInfo, PlatformRepo- > >GicRedistInfo); > + HANDLE_CM_OBJECT ( > + EArmObjSerialConsolePortInfo, > + PlatformRepo->SpcrSerialPort > + ); > + HANDLE_CM_OBJECT (EArmObjSerialDebugPortInfo, PlatformRepo- > >DbgSerialPort); > + HANDLE_CM_OBJECT (EArmObjGicItsInfo, PlatformRepo->GicItsInfo); > + > + 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 [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. > + @retval EFI_BAD_BUFFER_SIZE The size returned by the Configuration > Manager > + is less than the Object size for the > requested > + object. > +*/ > +EFI_STATUS > +EFIAPI > +GetOemNameSpaceObject ( > + IN CONST EFI_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 = 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 [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 > +ArmVExpressPlatformGetObject ( > + IN CONST EFI_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 [out] CmObject Pointer to the Configuration Manager Object > + descriptor describing the Object. > + > + @retval EFI_UNSUPPORTED This operation is not supported. > +*/ > +EFI_STATUS > +EFIAPI > +ArmVExpressPlatformSetObject ( > + IN CONST EFI_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 > +EFI_CONFIGURATION_MANAGER_PROTOCOL > +VExpressPlatformConfigManagerProtocol = { > + CREATE_REVISION(1,0), > + ArmVExpressPlatformGetObject, > + ArmVExpressPlatformSetObject, > + &VExpressPlatRepositoryInfo > +}; > + > +/** > + 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, > + &gEfiConfigurationManagerProtocolGuid, > + EFI_NATIVE_INTERFACE, > + (VOID*)&VExpressPlatformConfigManagerProtocol > + ); > + if (EFI_ERROR (Status)) { > + DEBUG (( > + DEBUG_ERROR, > + "ERROR: Failed to get Install Configuration Manager Protocol." \ > + " Status = %r\n", > + Status > + )); > + goto error_handler; > + } > + > + Status = InitializePlatformRepository ( > + &VExpressPlatformConfigManagerProtocol > + ); > + 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/ARM/VExpressPkg/ConfigurationManager/ConfigurationManag > erDxe/ConfigurationManager.h > b/Platform/ARM/VExpressPkg/ConfigurationManager/ConfigurationManag > erDxe/ConfigurationManager.h > new file mode 100644 > index > 0000000000000000000000000000000000000000..2d852b2d0466e5a87c > 0b2c33b6041faab47cbea7 > --- /dev/null > +++ > b/Platform/ARM/VExpressPkg/ConfigurationManager/ConfigurationManag > er > +++ Dxe/ConfigurationManager.h > @@ -0,0 +1,172 @@ > +/** @file > + > + Copyright (c) 2017 - 2018, ARM Limited. All rights reserved. > + > + This program and the accompanying materials are licensed and made > + available under the terms and conditions of the BSD License which > + accompanies this distribution. The full text of the license may be > + found at http://opensource.org/licenses/bsd-license.php > + > + THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" > BASIS, > + WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER > EXPRESS OR IMPLIED. > + > + @par Glossary: > + - Cm or CM - Configuration Manager > + - Obj or OBJ - Object > +**/ > + > +#ifndef CONFIGURATION_MANAGER_H__ > +#define CONFIGURATION_MANAGER_H__ > + > +/** The configuration manager version. > +*/ > +#define CONFIGURATION_MANAGER_REVISION CREATE_REVISION (1, 0) > + > +/** The OEM ID > +*/ > +#define CFG_MGR_OEM_ID { 'A', 'R', 'M', 'L', 'T', 'D' } > + > +/** 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 */ \ > + FixedPcdGet64 ( \ > + PcdGicInterruptInterfaceBase \ > + ), /* UINT64 PhysicalBaseAddress */ \ > + 0, /* UINT64 GICV */ \ > + 0, /* UINT64 GICH */ \ > + VGicIrq, /* UINT32 VGICMaintenanceInterrupt */ \ > + 0, /* UINT64 GICRBaseAddress */ \ > + Mpidr, /* UINT64 MPIDR */ \ > + EnergyEfficiency /* UINT8 ProcessorPowerEfficiencyClass*/ \ > + } > + > +/** A helper macro for returning configuration manager objects */ > +#define HANDLE_CM_OBJECT(CmObjectId, Object) \ > + case CmObjectId: { \ > + CmObject->Size = sizeof (Object); \ > + CmObject->Data = (VOID*)&Object; \ > + DEBUG (( \ > + DEBUG_INFO, \ > + #CmObjectId ": Ptr = 0x%p, Size = %d\n", \ > + CmObject->Data, \ > + CmObject->Size \ > + )); \ > + break; \ > + } > + > +/** A helper macro for returning configuration manager objects > + referenced by token > +*/ > +#define HANDLE_CM_OBJECT_REF_BY_TOKEN( \ > + CmObjectId, \ > + Object, \ > + Token, \ > + HandlerProc \ > + ) \ > + case CmObjectId: { \ > + if (Token == CM_NULL_TOKEN) { \ > + CmObject->Size = sizeof (Object); \ > + CmObject->Data = (VOID*)&Object; \ > + DEBUG (( \ > + DEBUG_INFO, \ > + #CmObjectId ": Ptr = 0x%p, Size = %d\n", \ > + CmObject->Data, \ > + CmObject->Size \ > + )); \ > + } else { \ > + Status = HandlerProc (This, CmObjectId, Token, CmObject); \ > + DEBUG (( \ > + DEBUG_INFO, \ > + #CmObjectId ": Token = 0x%p, Ptr = 0x%p, Size = %d\n", \ > + (VOID*)Token, \ > + CmObject->Data, \ > + CmObject->Size \ > + )); \ > + } \ > + break; \ > + } > + > +/** The number of CPUs > +*/ > +#define PLAT_CPU_COUNT 8 > + > +/** The number of ACPI tables to install */ > +#define PLAT_ACPI_TABLE_COUNT 6 > + > +/** The number of platform generic timer blocks */ > +#define PLAT_GTBLOCK_COUNT 1 > + > +/** The number of timer frames per generic timer block */ > +#define PLAT_GTFRAME_COUNT 2 > + > +/** 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; > + > +#ifdef HEADLESS_PLATFORM > + /// Fixed feature flag information > + CM_ARM_FIXED_FEATURE_FLAGS FixedFeatureFlags; > +#endif > + > + /// Power management profile information > + CM_ARM_POWER_MANAGEMENT_PROFILE_INFO PmProfileInfo; > + > + /// 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; > + > + /// 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; > + > + /** Serial port information for the > + serial port console redirection port */ > + CM_ARM_SERIAL_PORT_INFO SpcrSerialPort; > + > + /// Serial port information for the DBG2 UART port > + CM_ARM_SERIAL_PORT_INFO DbgSerialPort; > + > + /// GIC ITS information > + CM_ARM_GIC_ITS_INFO GicItsInfo; > +} EFI_PLATFORM_REPOSITORY_INFO; > + > +#endif // CONFIGURATION_MANAGER_H__ > diff --git > a/Platform/ARM/VExpressPkg/ConfigurationManager/ConfigurationManag > erDxe/ConfigurationManagerDxe.inf > b/Platform/ARM/VExpressPkg/ConfigurationManager/ConfigurationManag > erDxe/ConfigurationManagerDxe.inf > new file mode 100644 > index > 0000000000000000000000000000000000000000..ff61763f661289e2f86 > 911b5f68576ac657a400c > --- /dev/null > +++ > b/Platform/ARM/VExpressPkg/ConfigurationManager/ConfigurationManag > er > +++ Dxe/ConfigurationManagerDxe.inf > @@ -0,0 +1,78 @@ > +## @file > +# > +# Copyright (c) 2017 - 2018, ARM Limited. All rights reserved. > +# > +# This program and the accompanying materials # are licensed and made > +available under the terms and conditions of the BSD License # which > +accompanies this distribution. The full text of the license may be > +found at # http://opensource.org/licenses/bsd-license.php > +# > +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" > +BASIS, # WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, > EITHER EXPRESS OR IMPLIED. > +## > + > +[Defines] > + INF_VERSION = 0x00010019 > + BASE_NAME = ConfigurationManagerDxe > + FILE_GUID = 29F45677-1920-4454-94A6-CF119C9491DB > + 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 > + MdePkg/MdePkg.dec > + MdeModulePkg/MdeModulePkg.dec > + Platform/ARM/VExpressPkg/ArmVExpressPkg.dec > + > +[LibraryClasses] > + ArmPlatformLib > + PlatformAslTablesLib > + PrintLib > + UefiBootServicesTableLib > + UefiDriverEntryPoint > + UefiRuntimeServicesTableLib > + > +[Protocols] > + gEfiConfigurationManagerProtocolGuid > + > +[FixedPcd] > + gArmTokenSpaceGuid.PcdArmArchTimerSecIntrNum > + gArmTokenSpaceGuid.PcdArmArchTimerIntrNum > + gArmTokenSpaceGuid.PcdArmArchTimerVirtIntrNum > + gArmTokenSpaceGuid.PcdArmArchTimerHypIntrNum > + > + gArmTokenSpaceGuid.PcdGicDistributorBase > + gArmTokenSpaceGuid.PcdGicInterruptInterfaceBase > + gArmTokenSpaceGuid.PcdGicRedistributorsBase > + > + gEfiMdeModulePkgTokenSpaceGuid.PcdSerialRegisterBase > + gEfiMdePkgTokenSpaceGuid.PcdUartDefaultBaudRate > + gArmPlatformTokenSpaceGuid.PL011UartClkInHz > + gArmPlatformTokenSpaceGuid.PL011UartInterrupt > + > + ## PL011 Serial Debug UART > + gArmPlatformTokenSpaceGuid.PcdSerialDbgRegisterBase > + gArmPlatformTokenSpaceGuid.PcdSerialDbgUartBaudRate > + gArmPlatformTokenSpaceGuid.PcdSerialDbgUartClkInHz > + > + # SBSA Generic Watchdog > + gArmTokenSpaceGuid.PcdGenericWatchdogControlBase > + gArmTokenSpaceGuid.PcdGenericWatchdogRefreshBase > + gArmTokenSpaceGuid.PcdGenericWatchdogEl2IntrNum > + > +[Pcd] > + > +[Depex] > + TRUE > diff --git > a/Platform/ARM/VExpressPkg/ConfigurationManager/ConfigurationManag > erDxe/Platform.h > b/Platform/ARM/VExpressPkg/ConfigurationManager/ConfigurationManag > erDxe/Platform.h > new file mode 100644 > index > 0000000000000000000000000000000000000000..8ba32717704af8cc65d > 23e93affcc2922add0346 > --- /dev/null > +++ > b/Platform/ARM/VExpressPkg/ConfigurationManager/ConfigurationManag > er > +++ Dxe/Platform.h > @@ -0,0 +1,91 @@ > +/** @file > + > + Copyright (c) 2017, ARM Limited. All rights reserved. > + > + This program and the accompanying materials are licensed and made > + available under the terms and conditions of the BSD License which > + accompanies this distribution. The full text of the license may be > + found at http://opensource.org/licenses/bsd-license.php > + > + THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" > BASIS, > + WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER > EXPRESS OR IMPLIED. > + > +**/ > + > +#ifndef PLATFORM_H__ > +#define PLATFORM_H__ > + > +#define ENABLE_MEM_MAPPED_TIMER > + > +#ifdef ENABLE_MEM_MAPPED_TIMER > +#define FVP_SYSTEM_TIMER_BASE_ADDRESS 0x2A430000 > +#define FVP_CNT_READ_BASE_ADDRESS 0x2A800000 > +#else > +#define FVP_SYSTEM_TIMER_BASE_ADDRESS 0xFFFFFFFFFFFFFFFF > +#define FVP_CNT_READ_BASE_ADDRESS 0xFFFFFFFFFFFFFFFF > +#endif > + > +// GT Block Timer > +#define FVP_GT_BLOCK_CTL_BASE 0x2A810000 > +#define FVP_TIMER_FRAMES_COUNT 2 > + > +// GT Block Timer Frames > +#define FVP_GT_BLOCK_FRAME0_CTL_BASE 0x2A820000 > +#define FVP_GT_BLOCK_FRAME0_CTL_EL0_BASE 0xFFFFFFFFFFFFFFFF > +#define FVP_GT_BLOCK_FRAME0_GSIV 57 > + > +#define FVP_GT_BLOCK_FRAME1_CTL_BASE 0x2A830000 > +#define FVP_GT_BLOCK_FRAME1_CTL_EL0_BASE 0xFFFFFFFFFFFFFFFF > +#define FVP_GT_BLOCK_FRAME1_GSIV 58 > + > +#define GTDT_TIMER_EDGE_TRIGGERED \ > + EFI_ACPI_6_2_GTDT_TIMER_FLAG_TIMER_INTERRUPT_MODE > +#define GTDT_TIMER_LEVEL_TRIGGERED 0 > +#define GTDT_TIMER_ACTIVE_LOW \ > + EFI_ACPI_6_2_GTDT_TIMER_FLAG_TIMER_INTERRUPT_POLARITY > +#define GTDT_TIMER_ACTIVE_HIGH 0 > +#define GTDT_TIMER_SAVE_CONTEXT \ > + EFI_ACPI_6_2_GTDT_TIMER_FLAG_ALWAYS_ON_CAPABILITY > +#define GTDT_TIMER_LOSE_CONTEXT 0 > + > +#define FVP_GTDT_GTIMER_FLAGS (GTDT_TIMER_LOSE_CONTEXT | \ > + GTDT_TIMER_ACTIVE_LOW | \ > + GTDT_TIMER_LEVEL_TRIGGERED) > + > +// GT Block Timer Flags > +#define GTX_TIMER_EDGE_TRIGGERED \ > + > EFI_ACPI_6_2_GTDT_GT_BLOCK_TIMER_FLAG_TIMER_INTERRUPT_MODE > +#define GTX_TIMER_LEVEL_TRIGGERED 0 > +#define GTX_TIMER_ACTIVE_LOW \ > + > EFI_ACPI_6_2_GTDT_GT_BLOCK_TIMER_FLAG_TIMER_INTERRUPT_POLARIT > Y > +#define GTX_TIMER_ACTIVE_HIGH 0 > + > +#define FVP_GTX_TIMER_FLAGS (GTX_TIMER_ACTIVE_HIGH | \ > + GTX_TIMER_LEVEL_TRIGGERED) > + > +#define GTX_TIMER_SECURE \ > + EFI_ACPI_6_2_GTDT_GT_BLOCK_COMMON_FLAG_SECURE_TIMER > +#define GTX_TIMER_NON_SECURE 0 > +#define GTX_TIMER_SAVE_CONTEXT \ > + > EFI_ACPI_6_2_GTDT_GT_BLOCK_COMMON_FLAG_ALWAYS_ON_CAPABILIT > Y > +#define GTX_TIMER_LOSE_CONTEXT 0 > + > +#define FVP_GTX_COMMON_FLAGS (GTX_TIMER_SAVE_CONTEXT | > GTX_TIMER_SECURE) > + > +// Watchdog > +#define SBSA_WATCHDOG_EDGE_TRIGGERED \ > + > +EFI_ACPI_6_2_GTDT_SBSA_GENERIC_WATCHDOG_FLAG_TIMER_INTERRU > PT_MODE > +#define SBSA_WATCHDOG_LEVEL_TRIGGERED 0 > +#define SBSA_WATCHDOG_ACTIVE_LOW \ > + > EFI_ACPI_6_2_GTDT_SBSA_GENERIC_WATCHDOG_FLAG_TIMER_INTERRUP > T_POLARITY > +#define SBSA_WATCHDOG_ACTIVE_HIGH 0 > +#define SBSA_WATCHDOG_SECURE \ > + > EFI_ACPI_6_2_GTDT_SBSA_GENERIC_WATCHDOG_FLAG_SECURE_TIMER > +#define SBSA_WATCHDOG_NON_SECURE 0 > + > +#define FVP_SBSA_WATCHDOG_FLAGS > (SBSA_WATCHDOG_NON_SECURE | \ > + SBSA_WATCHDOG_ACTIVE_HIGH | \ > + > +SBSA_WATCHDOG_LEVEL_TRIGGERED) > + > +#endif // PLATFORM_H__ > + > diff --git > a/Platform/ARM/VExpressPkg/ConfigurationManager/PlatformASLTablesLi > b/Dsdt.asl > b/Platform/ARM/VExpressPkg/ConfigurationManager/PlatformASLTablesLi > b/Dsdt.asl > new file mode 100644 > index > 0000000000000000000000000000000000000000..15ce7c020045d42f08c > f92ad76644b07f0a1e25e > --- /dev/null > +++ > b/Platform/ARM/VExpressPkg/ConfigurationManager/PlatformASLTablesLi > b > +++ /Dsdt.asl > @@ -0,0 +1,77 @@ > +/** @file > + Differentiated System Description Table Fields (DSDT) > + > + Copyright (c) 2014-2017, ARM Ltd. All rights reserved.<BR> > + This program and the accompanying materials are licensed and made > + available under the terms and conditions of the BSD License which > + accompanies this distribution. The full text of the license may be > + found at http://opensource.org/licenses/bsd-license.php > + > + THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" > BASIS, > + WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER > EXPRESS OR IMPLIED. > + > +**/ > + > +DefinitionBlock("DsdtTable.aml", "DSDT", 1, "ARMLTD", "ARM-VEXPRESS", > +1) { > + Scope(_SB) { > + // > + // Processor > + // > + Device(CPU0) { > + Name(_HID, "ACPI0007") > + Name(_UID, Zero) > + } > + Device(CPU1) { > + Name(_HID, "ACPI0007") > + Name(_UID, One) > + } > + Device(CPU2) { > + Name(_HID, "ACPI0007") > + Name(_UID, 2) > + } > + Device(CPU3) { > + Name(_HID, "ACPI0007") > + Name(_UID, 3) > + } > + Device(CPU4) { > + Name(_HID, "ACPI0007") > + Name(_UID, 4) > + } > + Device(CPU5) { > + Name(_HID, "ACPI0007") > + Name(_UID, 5) > + } > + Device(CPU6) { > + Name(_HID, "ACPI0007") > + Name(_UID, 6) > + } > + Device(CPU7) { > + Name(_HID, "ACPI0007") > + Name(_UID, 7) > + } > + > + // UART PL011 > + Device(COM2) { > + Name(_HID, "ARMH0011") > + Name(_CID, "PL011") > + Name(_UID, Zero) > + > + Method(_STA) { > + Return(0xF) > + } > + > + Method(_CRS, 0x0, NotSerialized) { > + Name(RBUF, ResourceTemplate() { > + // UART1 > + Memory32Fixed(ReadWrite, 0x1c090000, 0x1000) > + Interrupt(ResourceConsumer, Level, ActiveHigh, Exclusive) { 0x25 } > + // UART3 > + // Memory32Fixed(ReadWrite, 0x1c0B0000, 0x1000) > + // Interrupt(ResourceConsumer, Level, ActiveHigh, Exclusive) { > 0x27 } > + }) > + Return (RBUF) > + } > + } > + > + } // Scope(_SB) > +} > diff --git > a/Platform/ARM/VExpressPkg/ConfigurationManager/PlatformASLTablesLi > b/PlatformASLTablesLib.inf > b/Platform/ARM/VExpressPkg/ConfigurationManager/PlatformASLTablesLi > b/PlatformASLTablesLib.inf > new file mode 100644 > index > 0000000000000000000000000000000000000000..28426e18f32dc25af6f > af51826e11d5e09fe105d > --- /dev/null > +++ > b/Platform/ARM/VExpressPkg/ConfigurationManager/PlatformASLTablesLi > b > +++ /PlatformASLTablesLib.inf > @@ -0,0 +1,34 @@ > +## @file > +# > +# Copyright (c) 2017 - 2018, ARM Limited. All rights reserved. > +# > +# This program and the accompanying materials # are licensed and made > +available under the terms and conditions of the BSD License # which > +accompanies this distribution. The full text of the license may be > +found at # http://opensource.org/licenses/bsd-license.php > +# > +# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" > +BASIS, # WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, > EITHER EXPRESS OR IMPLIED. > +## > + > +[Defines] > + INF_VERSION = 0x00010019 > + BASE_NAME = PlatformAslTablesLib > + FILE_GUID = 4000AEAB-C6D3-4F67-ADE3-D4B504FC164B > + MODULE_TYPE = DXE_DRIVER > + VERSION_STRING = 1.0 > + LIBRARY_CLASS = PlatformAslTablesLib|DXE_DRIVER > + > +# > +# The following information is for reference only and not required by the > build tools. > +# > +# VALID_ARCHITECTURES = ARM AARCH64 > +# > + > +[Sources] > + Dsdt.asl > + > +[Packages] > + ArmPlatformPkg/ArmPlatformPkg.dec > + MdePkg/MdePkg.dec > + Platform/ARM/VExpressPkg/ArmVExpressPkg.dec > -- > 'Guid(CE165669-3EF3-493F-B85D-6190EE5B9759)' >
_______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel