From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=40.107.2.64; helo=eur02-ve1-obe.outbound.protection.outlook.com; envelope-from=evan.lloyd@arm.com; receiver=edk2-devel@lists.01.org Received: from EUR02-VE1-obe.outbound.protection.outlook.com (mail-eopbgr20064.outbound.protection.outlook.com [40.107.2.64]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id 5BF5D21ED1C4F for ; Mon, 19 Mar 2018 09:07:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=armh.onmicrosoft.com; s=selector1-arm-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version; bh=cR6sOvslS/BWKMOpXDsIrItH/H1Bnb5UWsWajPXltxk=; b=LgZAKWrFIN//ej32p/T4uPMet/qBaWWVNSfXPMgzp0kKzW5YbtIqxHH8XCz1gqIQwCwvY0+zucH1I96bQzN1ONaclDS5oNjPSQIQ6x/BmUydfgcRAgGxkhC6pvDykIHzbchPxxqFpdMZ2BXWNWoMmBc0ruOGi2hTRqgMBZ5b7kk= Received: from HE1PR0801MB1771.eurprd08.prod.outlook.com (10.168.150.14) by HE1PR0801MB1387.eurprd08.prod.outlook.com (10.167.248.19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256) id 15.20.588.14; Mon, 19 Mar 2018 16:13:54 +0000 Received: from HE1PR0801MB1771.eurprd08.prod.outlook.com ([fe80::69cc:3ecf:9c8c:f5a3]) by HE1PR0801MB1771.eurprd08.prod.outlook.com ([fe80::69cc:3ecf:9c8c:f5a3%17]) with mapi id 15.20.0588.016; Mon, 19 Mar 2018 16:13:54 +0000 From: Evan Lloyd To: Sami Mujawar , "edk2-devel@lists.01.org" CC: Arvind Chauhan , Daniil Egranov , Thomas Abraham , "leif.lindholm@linaro.org" , Matteo Carlini , Stephanie Hughes-Fitt , nd Thread-Topic: [PATCH 2/2][platforms/dynamictables] Platform/ARM: Dynamic Tables support for FVP Thread-Index: AQHTv5YL9fQk28aGbUyxhB+La7LudqPXu0sA Date: Mon, 19 Mar 2018 16:13:54 +0000 Message-ID: References: <20180319152153.98292-1-sami.mujawar@arm.com> <20180319152153.98292-3-sami.mujawar@arm.com> In-Reply-To: <20180319152153.98292-3-sami.mujawar@arm.com> Accept-Language: en-GB, en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: spf=none (sender IP is ) smtp.mailfrom=Evan.Lloyd@arm.com; x-originating-ip: [217.140.96.140] x-ms-publictraffictype: Email x-microsoft-exchange-diagnostics: 1; HE1PR0801MB1387; 6:sZdhgjCd6ua2KAbIlEPelZlvgw4QPWcGfT2NulrG00NGjclpk7pqkN5FmzOqL29mQJqts+tGgnVe4V2z6XS+4vWn8JkXHNzfsGmF5nrf5//pxuFOy0RbKHnfmSAlNikGILhSeY/NQuZbVoxg6BXf3DpCzPwLY1TcKXthrJeORtF7EzcGTXWKyn0i6pbTf/uBNH5uK2ulPUd2Upxib1N5HUz1TgXcWwbulyJIPTMR5GcGnMCnug2bUYwHH7GKKJgn2WHOfTVY6aomE1urnYQGRj5wAEmnL29NM1+m6lY7KTwXY0hQOQSYHvYdP8dGUo5h4y2qIJU3fl5D8s4STbfoP9xG/w4mpl5G84fmFreR4cue4ON3TImyTXCXAQ6CaOCa; 5:HOcviMg8rx+AucoypFHrUk9Oli0rwm+u11u2utMGZ4oDxL23lAG2LjJK9t3gvZy2+mBievY7vEqVUF35FYmnQck/jUUGbnops0Q4IIicce5aGoBk9naWoS5tLLjFscn5rrZe6eKLa8djhwJctYCqY8Hc+r54Ne8TArrJPsZMiuY=; 24:pQpCx/WOXIOclbsjbVPrunYh2OAkopSQZOk1/LInvGBIJi0+3rbjXBGlKsRLBa21FlLTNcfZCOsoqiEvw9ypJmJWP8W3kWqQqo26kI+In4A=; 7:B/CiO1NGxMODYipwciH0rDX/nX+0l14rVrFSyfpUO/iZZFUeNirkAmHBmBJKqv+6rK/q4GFP+I8SgszIDUi+/dW/iAcvOgH8k45CYqP8jrclfvDhJGVHlAJV6AVkv+GC97XpaFPvH064Va61MqqDKE3dHUhunVmEl+MOk1ZKvi19WfAZzVOl8geo0OMVYhi/sBHdmcG63UdJod4ceAS9je1EaQmksu+t0UA38EWk2Ca1DfgZYlRSky2lOsNHZWDg x-ms-exchange-antispam-srfa-diagnostics: SOS;SOR; x-ms-office365-filtering-ht: Tenant x-ms-office365-filtering-correlation-id: 8b788c19-59bf-4251-f801-08d58db469b1 x-microsoft-antispam: UriScan:; BCL:0; PCL:0; RULEID:(7020095)(4652020)(48565401081)(5600026)(4604075)(3008032)(2017052603328)(7153060)(7193020); SRVR:HE1PR0801MB1387; x-ms-traffictypediagnostic: HE1PR0801MB1387: nodisclaimer: True x-microsoft-antispam-prvs: x-exchange-antispam-report-test: UriScan:(180628864354917)(162533806227266); x-exchange-antispam-report-cfa-test: BCL:0; PCL:0; RULEID:(8211001083)(6040522)(2401047)(5005006)(8121501046)(93006095)(93001095)(10201501046)(3002001)(3231221)(944501244)(52105095)(6055026)(6041310)(20161123564045)(20161123562045)(20161123558120)(201703131423095)(201702281528075)(20161123555045)(201703061421075)(201703061406153)(20161123560045)(6072148)(201708071742011); SRVR:HE1PR0801MB1387; BCL:0; PCL:0; RULEID:; SRVR:HE1PR0801MB1387; x-forefront-prvs: 06167FAD59 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(396003)(39380400002)(366004)(376002)(346002)(39860400002)(199004)(189003)(13464003)(966005)(6306002)(7736002)(6436002)(5660300001)(305945005)(74316002)(25786009)(4326008)(478600001)(2501003)(5250100002)(3660700001)(3280700002)(316002)(2906002)(6116002)(72206003)(102836004)(33656002)(68736007)(54906003)(110136005)(106356001)(3846002)(8676002)(14454004)(99286004)(575784001)(8936002)(81156014)(53936002)(81166006)(7696005)(53946003)(53376002)(16200700003)(6246003)(15188155005)(66066001)(2900100001)(16799955002)(86362001)(105586002)(2950100002)(229853002)(9686003)(76176011)(26005)(97736004)(55016002)(53546011)(6506007)(569006); DIR:OUT; SFP:1101; SCL:1; SRVR:HE1PR0801MB1387; H:HE1PR0801MB1771.eurprd08.prod.outlook.com; FPR:; SPF:None; PTR:InfoNoRecords; A:1; MX:1; LANG:en; received-spf: None (protection.outlook.com: arm.com does not designate permitted sender hosts) x-microsoft-antispam-message-info: SqsOKO1SFmz7FVX2BN16F+wT0MtTUbhDAOUNtgYFzSCLHArW8yZv0yiD+IJLAm9Sa+RMS/TV6oO8GIkU2FSqFo/yMcCM20rlCRJ/OjaGk/jwk4Ed3shcFQDAaSX8I7cees6KeSrjkEp6ja6FJ4pEjimdmXWum7XgnDHhZre1q+ipK5lHMm4nqzYTEhWF4XSO/nCY5pzLuGWj3Clt5x5TfAF/h8RKF+SB9UD8K9nyLnGIVoAW/Bng4F+dWD00RUYOblvsmhiuHYhXbZhdruJY0VvS2vwRpR1jrPsKZUoqfxP7nHN/HM7DwF3Be2mEi1T4PZ/67iuNb0BUqRjD3G6EMw== spamdiagnosticoutput: 1:99 spamdiagnosticmetadata: NSPM MIME-Version: 1.0 X-OriginatorOrg: arm.com X-MS-Exchange-CrossTenant-Network-Message-Id: 8b788c19-59bf-4251-f801-08d58db469b1 X-MS-Exchange-CrossTenant-originalarrivaltime: 19 Mar 2018 16:13:54.7506 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: f34e5979-57d9-4aaa-ad4d-b122a662184d X-MS-Exchange-Transport-CrossTenantHeadersStamped: HE1PR0801MB1387 Subject: Re: [PATCH 2/2][platforms/dynamictables] Platform/ARM: Dynamic Tables support for FVP X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 19 Mar 2018 16:07:31 -0000 Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable > -----Original Message----- > From: Sami Mujawar [mailto:sami.mujawar@arm.com] > Sent: 19 March 2018 15:22 > To: edk2-devel@lists.01.org > Cc: Arvind Chauhan ; Daniil Egranov > ; Thomas Abraham > ; Evan Lloyd ; > leif.lindholm@linaro.org; Matteo Carlini ; > Stephanie Hughes-Fitt ; nd > > Subject: [PATCH 2/2][platforms/dynamictables] Platform/ARM: Dynamic > Tables support for FVP >=20 > The dynamic tables framework utilizes the configuration manager protocol > to get the platform specific information required for building the firmwa= re > tables. >=20 > 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. >=20 > This patch implements the configuration manager support for the FVP > platform. >=20 > The dynamic tables framework support is configurable and can be enabled > using the DYNAMIC_TABLES_FRAMEWORK build option. >=20 > Contributed-under: TianoCore Contribution Agreement 1.1 > Signed-off-by: Sami Mujawar Reviewed-by: Evan Lloyd > --- > Platform/ARM/VExpressPkg/ArmVExpress-FVP-AArch64.dsc > | 15 + > Platform/ARM/VExpressPkg/ArmVExpress-FVP-AArch64.fdf > | 16 +- >=20 > Platform/ARM/VExpressPkg/ConfigurationManager/ConfigurationManager. > dsc.inc | 31 + >=20 > Platform/ARM/VExpressPkg/ConfigurationManager/ConfigurationManager > Dxe/ConfigurationManager.c | 607 ++++++++++++++++++++ >=20 > Platform/ARM/VExpressPkg/ConfigurationManager/ConfigurationManager > Dxe/ConfigurationManager.h | 172 ++++++ >=20 > Platform/ARM/VExpressPkg/ConfigurationManager/ConfigurationManager > Dxe/ConfigurationManagerDxe.inf | 78 +++ >=20 > Platform/ARM/VExpressPkg/ConfigurationManager/ConfigurationManager > Dxe/Platform.h | 91 +++ >=20 > Platform/ARM/VExpressPkg/ConfigurationManager/PlatformASLTablesLib/ > Dsdt.asl | 77 +++ >=20 > Platform/ARM/VExpressPkg/ConfigurationManager/PlatformASLTablesLib/ > PlatformASLTablesLib.inf | 34 ++ > 9 files changed, 1119 insertions(+), 2 deletions(-) >=20 > 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 =3D FALSE >=20 > !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 >=20 > [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 >=20 > ## PL031 RealTimeClock > gArmPlatformTokenSpaceGuid.PcdPL031RtcBase|0x1C170000 > @@ -255,8 +268,10 @@ [Components.common] !endif > } >=20 > +!ifndef DYNAMIC_TABLES_FRAMEWORK > MdeModulePkg/Universal/Acpi/AcpiPlatformDxe/AcpiPlatformDxe.inf > Platform/ARM/VExpressPkg/AcpiTables/AcpiTables.inf > +!endif >=20 > 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] >=20 > # 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=3DACPITABLE > 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 >=20 > # > # Multiple Console IO support > @@ -319,8 +329,10 @@ [Rule.Common.UEFI_APPLICATION.BINARY] > VERSION STRING=3D"$(INF_VERSION)" Optional > BUILD_NUM=3D$(BUILD_NUMBER) > } >=20 > +!ifndef DYNAMIC_TABLES_FRAMEWORK > [Rule.Common.USER_DEFINED.ACPITABLE] > FILE FREEFORM =3D $(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 =3D $(PLATFORM_FLAGS) > + > +[LibraryClasses.common] > + > +[Components.common] > + # Configuration Manager > + > Platform/ARM/VExpressPkg/ConfigurationManager/ConfigurationManager > Dxe/ConfigurationManagerDxe.inf { > + > + # Platform ASL Tables > + > +PlatformAslTablesLib|Platform/ARM/VExpressPkg/ConfigurationManager > /Plat > +formASLTablesLib/PlatformASLTablesLib.inf > + > + *_*_*_PLATFORM_FLAGS =3D > +- > 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 > +#include > +#include > +#include > +#include > +#include > +#include > + > +#include > +#include > +#include > + > +#include "ConfigurationManager.h" > +#include "Platform.h" > + > +// AML Code Include files generated by iASL Compiler #include > + > + > +/** The platform configuration repository information. > +*/ > +STATIC > +EFI_PLATFORM_REPOSITORY_INFO VExpressPlatRepositoryInfo =3D { > + /// 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 fla= gs > +#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 BaseAdd= ress > + FixedPcdGet32 (PL011UartInterrupt), // UINT32 Interru= pt > + FixedPcdGet64 (PcdUartDefaultBaudRate), // UINT64 BaudRat= e > + FixedPcdGet32 (PL011UartClkInHz), // UINT32 Clock > + EFI_ACPI_DBG2_PORT_SUBTYPE_SERIAL_ARM_PL011_UART // UINT16 > Port > + subtype }, // Debug Serial Port { > + FixedPcdGet64 (PcdSerialDbgRegisterBase), // UINT64 BaseAdd= ress > + 38, // UINT32 Interru= pt > + FixedPcdGet64 (PcdSerialDbgUartBaudRate), // UINT64 BaudRat= e > + 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 =3D=3D NULL) || (CmObject =3D=3D NULL)) { > + ASSERT (This !=3D NULL); > + ASSERT (CmObject !=3D NULL); > + return EFI_INVALID_PARAMETER; > + } > + > + PlatformRepo =3D This->PlatRepoInfo; > + > + if (Token !=3D (CM_OBJECT_TOKEN)&PlatformRepo->GTBlock0TimerInfo) { > + return EFI_NOT_FOUND; > + } > + > + CmObject->Size =3D sizeof (PlatformRepo->GTBlock0TimerInfo); > + CmObject->Data =3D (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 =3D EFI_SUCCESS; > + EFI_PLATFORM_REPOSITORY_INFO * PlatformRepo; > + > + if ((This =3D=3D NULL) || (CmObject =3D=3D NULL)) { > + ASSERT (This !=3D NULL); > + ASSERT (CmObject !=3D NULL); > + return EFI_INVALID_PARAMETER; > + } > + PlatformRepo =3D This->PlatRepoInfo; > + > + switch (GET_CM_OBJECT_ID (CmObjectId)) { > + HANDLE_CM_OBJECT (EStdObjCfgMgrInfo, PlatformRepo->CmInfo); > + HANDLE_CM_OBJECT (EStdObjAcpiTableList, PlatformRepo- > >CmAcpiTableList); > + default: { > + Status =3D EFI_NOT_FOUND; > + DEBUG (( > + DEBUG_ERROR, > + "ERROR: Object 0x%x. Status =3D %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 =3D EFI_SUCCESS; > + EFI_PLATFORM_REPOSITORY_INFO * PlatformRepo; > + > + if ((This =3D=3D NULL) || (CmObject =3D=3D NULL)) { > + ASSERT (This !=3D NULL); > + ASSERT (CmObject !=3D NULL); > + return EFI_INVALID_PARAMETER; > + } > + PlatformRepo =3D 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 =3D EFI_NOT_FOUND; > + DEBUG (( > + DEBUG_INFO, > + "INFO: Object 0x%x. Status =3D %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 req= uested > + 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 =3D EFI_SUCCESS; > + > + if ((This =3D=3D NULL) || (CmObject =3D=3D NULL)) { > + ASSERT (This !=3D NULL); > + ASSERT (CmObject !=3D NULL); > + return EFI_INVALID_PARAMETER; > + } > + > + switch (GET_CM_OBJECT_ID (CmObjectId)) { > + default: { > + Status =3D EFI_NOT_FOUND; > + DEBUG (( > + DEBUG_ERROR, > + "ERROR: Object 0x%x. Status =3D %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 =3D=3D NULL) || (CmObject =3D=3D NULL)) { > + ASSERT (This !=3D NULL); > + ASSERT (CmObject !=3D NULL); > + return EFI_INVALID_PARAMETER; > + } > + > + switch (GET_CM_NAMESPACE_ID (CmObjectId)) { > + case EObjNameSpaceStandard: > + Status =3D GetStandardNameSpaceObject (This, CmObjectId, Token, > CmObject); > + break; > + case EObjNameSpaceArm: > + Status =3D GetArmNameSpaceObject (This, CmObjectId, Token, > CmObject); > + break; > + case EObjNameSpaceOem: > + Status =3D GetOemNameSpaceObject (This, CmObjectId, Token, > CmObject); > + break; > + default: { > + Status =3D EFI_INVALID_PARAMETER; > + DEBUG (( > + DEBUG_ERROR, > + "ERROR: Unknown Namespace Object =3D 0x%x. Status =3D %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 =3D { > + 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 =3D 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 =3D %r\n", > + Status > + )); > + goto error_handler; > + } > + > + Status =3D InitializePlatformRepository ( > + &VExpressPlatformConfigManagerProtocol > + ); > + if (EFI_ERROR (Status)) { > + DEBUG (( > + DEBUG_ERROR, > + "ERROR: Failed to initialize the Platform Configuration Repository= ." \ > + " Status =3D %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 =3D sizeof (Object); \ > + CmObject->Data =3D (VOID*)&Object; \ > + DEBUG (( \ > + DEBUG_INFO, \ > + #CmObjectId ": Ptr =3D 0x%p, Size =3D %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 =3D=3D CM_NULL_TOKEN) { \ > + CmObject->Size =3D sizeof (Object); \ > + CmObject->Data =3D (VOID*)&Object; \ > + DEBUG (( \ > + DEBUG_INFO, \ > + #CmObjectId ": Ptr =3D 0x%p, Size =3D %d\n", \ > + CmObject->Data, \ > + CmObject->Size \ > + )); \ > + } else { \ > + Status =3D HandlerProc (This, CmObjectId, Token, CmObject); \ > + DEBUG (( \ > + DEBUG_INFO, \ > + #CmObjectId ": Token =3D 0x%p, Ptr =3D 0x%p, Size =3D %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 =3D 0x00010019 > + BASE_NAME =3D ConfigurationManagerDxe > + FILE_GUID =3D 29F45677-1920-4454-94A6-CF119C9491D= B > + MODULE_TYPE =3D DXE_DRIVER > + VERSION_STRING =3D 1.0 > + ENTRY_POINT =3D ConfigurationManagerDxeInitialize > + > +# > +# The following information is for reference only and not required by th= e > build tools. > +# > +# VALID_ARCHITECTURES =3D 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.
> + 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) { 0x= 25 } > + // 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 =3D 0x00010019 > + BASE_NAME =3D PlatformAslTablesLib > + FILE_GUID =3D 4000AEAB-C6D3-4F67-ADE3-D4B504FC164= B > + MODULE_TYPE =3D DXE_DRIVER > + VERSION_STRING =3D 1.0 > + LIBRARY_CLASS =3D PlatformAslTablesLib|DXE_DRIVER > + > +# > +# The following information is for reference only and not required by th= e > build tools. > +# > +# VALID_ARCHITECTURES =3D ARM AARCH64 > +# > + > +[Sources] > + Dsdt.asl > + > +[Packages] > + ArmPlatformPkg/ArmPlatformPkg.dec > + MdePkg/MdePkg.dec > + Platform/ARM/VExpressPkg/ArmVExpressPkg.dec > -- > 'Guid(CE165669-3EF3-493F-B85D-6190EE5B9759)' >=20