From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from NAM04-DM6-obe.outbound.protection.outlook.com (NAM04-DM6-obe.outbound.protection.outlook.com [40.107.102.84]) by mx.groups.io with SMTP id smtpd.web12.5060.1663624894903074227 for ; Mon, 19 Sep 2022 15:01:35 -0700 Authentication-Results: mx.groups.io; dkim=pass header.i=@nvidia.com header.s=selector2 header.b=dakjCIWV; spf=permerror, err=parse error for token &{10 18 %{i}._ip.%{h}._ehlo.%{d}._spf.vali.email}: invalid domain name (domain: nvidia.com, ip: 40.107.102.84, mailfrom: jbrasen@nvidia.com) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=jnMd/kOelYTOlXZI1m/z40pfF+CZ4F/KKBIAfKhqKpCOCK76cYnNVWn1Jb1XpUGrVi+GLt1UCdAmPptxxtsfkXtsa6jT1HWg5MsiWG/DpbP1cg1Q9zOoj2zy5XNVNdO/APtFmy09YLLs3zRU2CwYEjWClQspqBIRpwC1z6+F+uh7i6MUFnOhTTmsCvkONCv0geRkOG+RK06A4jL6OA1taobMuhFPdPYguVmJSacYrkTHZTXC2jgKHS0zS1ccEfyeW76FlhpBFDuH41kr97sbZYyNPSVsy0XDeGlFG7bYVZiMkvFD3uq66Zx1gLO+PAWFbrwJjZAgkWLbr1ycAtajZg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=ubv+zXL5ynLqZ14mEUbLGsS6oGv2TxCzpdbHVE00drI=; b=UUfjq0q9e+hwBA8WICqOW35Tmr0fNjfFSBwxkzIxCY2z5ciSVwysMhxVQ78uFRziNBHaewK/6RrQT2+qA2LlhZHk8sP5pVOCftPiHxt/PYUOT8TrhPx/9/C+hl9lF97RzVxLYNvxyC1owKBmZQB8cMOh0mb3EWyqUEFxNw/nABHSqq8LXc2jDsALO3uQ+wZBcyUajVJbJ4oWQhxZzRVzrauL3r6njtFUzROIlBw+A/57MWxeayg0DNcki7UFUr1Du79PZ/vV1STc6CvDfaNEc8fSzh0Mgy/K5WK9+OHWkSwsq1gaAu8OQhKSITQks0hjEb1qI0PxoAaemrD34hI3XA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 216.228.117.161) smtp.rcpttodomain=edk2.groups.io smtp.mailfrom=nvidia.com; dmarc=pass (p=reject sp=reject pct=100) action=none header.from=nvidia.com; dkim=none (message not signed); arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=ubv+zXL5ynLqZ14mEUbLGsS6oGv2TxCzpdbHVE00drI=; b=dakjCIWVtQPEHmZjpP+WHsYGFI20ib9qA9bchAbAaDA5eutqdPWHlemL6oSLD+92H0911wA9K0TeSAFt30qASzA5nMHeqN+F7VwLf3gnXMZjFXm0N2RIzley/NBfm5ehcwQilRnwXw5waJK47Um4vbEMFVom31L3CdsXeW+u/uUGubEf0zgDob2U56IpKeOJ7UOCkH7TMQ6mjtZlUurTcVoN+VHJgjC8d+bLnKL6t0C/maJ5S0fh4jJUaJGuksJMtD4P61fR3VxI9lOvFxFKlg0rrYoV9vRzZHzXcRicJ7uU3v+8x6drex+/p/8KRRw1Z1iQKgPgacduV4sELK98QA== Received: from BN9PR03CA0925.namprd03.prod.outlook.com (2603:10b6:408:107::30) by CH0PR12MB5187.namprd12.prod.outlook.com (2603:10b6:610:ba::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5632.21; Mon, 19 Sep 2022 22:01:32 +0000 Received: from BN8NAM11FT032.eop-nam11.prod.protection.outlook.com (2603:10b6:408:107:cafe::a9) by BN9PR03CA0925.outlook.office365.com (2603:10b6:408:107::30) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5632.21 via Frontend Transport; Mon, 19 Sep 2022 22:01:32 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 216.228.117.161) smtp.mailfrom=nvidia.com; dkim=none (message not signed) header.d=none;dmarc=pass action=none header.from=nvidia.com; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 216.228.117.161 as permitted sender) receiver=protection.outlook.com; client-ip=216.228.117.161; helo=mail.nvidia.com; pr=C Received: from mail.nvidia.com (216.228.117.161) by BN8NAM11FT032.mail.protection.outlook.com (10.13.177.88) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5632.12 via Frontend Transport; Mon, 19 Sep 2022 22:01:32 +0000 Received: from rnnvmail203.nvidia.com (10.129.68.9) by mail.nvidia.com (10.129.200.67) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.26; Mon, 19 Sep 2022 15:01:18 -0700 Received: from drhqmail202.nvidia.com (10.126.190.181) by rnnvmail203.nvidia.com (10.129.68.9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.29; Mon, 19 Sep 2022 15:01:17 -0700 Received: from drhqmail203.nvidia.com (10.126.190.182) by drhqmail202.nvidia.com (10.126.190.181) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.29; Mon, 19 Sep 2022 15:01:17 -0700 Received: from f153882e4be8.nvidia.com (10.127.8.12) by mail.nvidia.com (10.126.190.182) with Microsoft SMTP Server id 15.2.986.29 via Frontend Transport; Mon, 19 Sep 2022 15:01:16 -0700 From: "Jeff Brasen" To: CC: , , , , , Jeff Brasen Subject: [PATCH v4 1/3] DynamicTablesPkg: Add CM_ARM_CPC_INFO object Date: Mon, 19 Sep 2022 16:01:09 -0600 Message-ID: X-Mailer: git-send-email 2.25.1 In-Reply-To: References: MIME-Version: 1.0 X-NVConfidentiality: public Return-Path: jbrasen@nvidia.com X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BN8NAM11FT032:EE_|CH0PR12MB5187:EE_ X-MS-Office365-Filtering-Correlation-Id: 4a015063-ffe4-4838-ed17-08da9a8a8336 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: uuWc/Q/VP8QztqUIwGxtbsGes9KusvRgyZh8J3mkdX3te/MrflXJK0xKxcim4XTyDPhqqy3YenqX5IdU5cduvaZ6JRU+GhtXln13MNBtklyAMECXxFZX7rhF2w1kqLOs35OoeaoAkUAdDOdaP54q7dIDa2S4rcCinL/MVRZT1IZr06MICD3NQFYNgkuqRJDQzn00vawdyEhyp0r/07tUvTXYqnWCqV2Yc8spefg+8FRPQwmFw+RjalQ2s+k2XqDoq1gpUZ6bqeKku5j1FTTBRmRnL4wfFoAq9QF2CfnglHNAWIl+Wp4tIxndHkxpiBLfbP/IOC9oqeqVcWDMOVEDX2lXIAe63dNEF9Zuvm0K/38eXCNGT4sSPO0Z9J9Z+NhAOtVUZVO9MKIgMSmeYlWlQFCfNqLfPHviCdUXHF6dL/LKvTxjSNsfb7EvYnryKkFVc3IhOxBZfLhD1nOMRNJWumrLG/8HQRUMuSmXUh/bTT3/+NJuwGKwwRkc1QUQwryWhUu1PaXV8F13DM0qZ9oKkoPfh+smXGNk3yPFFqBufoSS+z7OsoKaCK8WHsD9cCAWk4qHe1x24AR6eO0IofwMskgN9XpwB9OWvzEvCCXW6JR4k03j5h810gw45uOBbAE+tNXRuXSps5FHtxVGFBrs4jVMXvKBJ/6Da9OUxSosXDe8u9+A80dhgzUA18MWRLWxn9CiIfMXkh/Nuny5wSdMx7UvXIREEUu1cmQeUzAxwdTdJ9T1xMlOKDEg+b4Fy//EL+wr8xlwnpbYmScMKb9qJw== X-Forefront-Antispam-Report: CIP:216.228.117.161;CTRY:US;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:mail.nvidia.com;PTR:dc6edge2.nvidia.com;CAT:NONE;SFS:(13230022)(4636009)(39860400002)(396003)(346002)(376002)(136003)(451199015)(36840700001)(40470700004)(46966006)(5660300002)(36860700001)(30864003)(82740400003)(83380400001)(47076005)(26005)(40480700001)(2906002)(54906003)(316002)(6916009)(478600001)(40460700003)(356005)(82310400005)(336012)(426003)(2616005)(186003)(7636003)(8936002)(86362001)(41300700001)(107886003)(6666004)(36756003)(70206006)(70586007)(8676002)(4326008)(7696005);DIR:OUT;SFP:1101; X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 Sep 2022 22:01:32.1582 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: 4a015063-ffe4-4838-ed17-08da9a8a8336 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a;Ip=[216.228.117.161];Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: BN8NAM11FT032.eop-nam11.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH0PR12MB5187 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain Introduce the CM_ARM_CPC_INFO CmObj in the ArmNameSpaceObjects.=0D This allows to describe CPC information, as described in ACPI 6.4,=0D s8.4.7.1 "_CPC (Continuous Performance Control)".=0D =0D Signed-off-by: Jeff Brasen =0D ---=0D .../Include/ArmNameSpaceObjects.h | 60 ++++++---=0D DynamicTablesPkg/Include/Library/AmlCpcInfo.h | 124 ++++++++++++++++++=0D .../ConfigurationManagerObjectParser.c | 80 +++++++++++=0D 3 files changed, 247 insertions(+), 17 deletions(-)=0D create mode 100644 DynamicTablesPkg/Include/Library/AmlCpcInfo.h=0D =0D diff --git a/DynamicTablesPkg/Include/ArmNameSpaceObjects.h b/DynamicTables= Pkg/Include/ArmNameSpaceObjects.h=0D index 102e0f96be..ea5bf81070 100644=0D --- a/DynamicTablesPkg/Include/ArmNameSpaceObjects.h=0D +++ b/DynamicTablesPkg/Include/ArmNameSpaceObjects.h=0D @@ -14,6 +14,7 @@=0D #define ARM_NAMESPACE_OBJECTS_H_=0D =0D #include =0D +#include =0D =0D #pragma pack(1)=0D =0D @@ -63,6 +64,7 @@ typedef enum ArmObjectID {=0D EArmObjPciInterruptMapInfo, ///< 39 - Pci Interrupt Map Info=0D EArmObjRmr, ///< 40 - Reserved Memory Range Nod= e=0D EArmObjMemoryRangeDescriptor, ///< 41 - Memory Range Descriptor=0D + EArmObjCpcInfo, ///< 42 - Continuous Performance Co= ntrol Info=0D EArmObjMax=0D } EARM_OBJECT_ID;=0D =0D @@ -97,99 +99,105 @@ typedef struct CmArmPowerManagementProfileInfo {=0D */=0D typedef struct CmArmGicCInfo {=0D /// The GIC CPU Interface number.=0D - UINT32 CPUInterfaceNumber;=0D + UINT32 CPUInterfaceNumber;=0D =0D /** The ACPI Processor UID. This must match the=0D _UID of the CPU Device object information described=0D in the DSDT/SSDT for the CPU.=0D */=0D - UINT32 AcpiProcessorUid;=0D + UINT32 AcpiProcessorUid;=0D =0D /** The flags field as described by the GICC structure=0D in the ACPI Specification.=0D */=0D - UINT32 Flags;=0D + UINT32 Flags;=0D =0D /** The parking protocol version field as described by=0D the GICC structure in the ACPI Specification.=0D */=0D - UINT32 ParkingProtocolVersion;=0D + UINT32 ParkingProtocolVersion;=0D =0D /** The Performance Interrupt field as described by=0D the GICC structure in the ACPI Specification.=0D */=0D - UINT32 PerformanceInterruptGsiv;=0D + UINT32 PerformanceInterruptGsiv;=0D =0D /** The CPU Parked address field as described by=0D the GICC structure in the ACPI Specification.=0D */=0D - UINT64 ParkedAddress;=0D + UINT64 ParkedAddress;=0D =0D /** The base address for the GIC CPU Interface=0D as described by the GICC structure in the=0D ACPI Specification.=0D */=0D - UINT64 PhysicalBaseAddress;=0D + UINT64 PhysicalBaseAddress;=0D =0D /** The base address for GICV interface=0D as described by the GICC structure in the=0D ACPI Specification.=0D */=0D - UINT64 GICV;=0D + UINT64 GICV;=0D =0D /** The base address for GICH interface=0D as described by the GICC structure in the=0D ACPI Specification.=0D */=0D - UINT64 GICH;=0D + UINT64 GICH;=0D =0D /** The GICV maintenance interrupt=0D as described by the GICC structure in the=0D ACPI Specification.=0D */=0D - UINT32 VGICMaintenanceInterrupt;=0D + UINT32 VGICMaintenanceInterrupt;=0D =0D /** The base address for GICR interface=0D as described by the GICC structure in the=0D ACPI Specification.=0D */=0D - UINT64 GICRBaseAddress;=0D + UINT64 GICRBaseAddress;=0D =0D /** The MPIDR for the CPU=0D as described by the GICC structure in the=0D ACPI Specification.=0D */=0D - UINT64 MPIDR;=0D + UINT64 MPIDR;=0D =0D /** The Processor Power Efficiency class=0D as described by the GICC structure in the=0D ACPI Specification.=0D */=0D - UINT8 ProcessorPowerEfficiencyClass;=0D + UINT8 ProcessorPowerEfficiencyClass;=0D =0D /** Statistical Profiling Extension buffer overflow GSIV. Zero if=0D unsupported by this processor. This field was introduced in=0D ACPI 6.3 (MADT revision 5) and is therefore ignored when=0D generating MADT revision 4 or lower.=0D */=0D - UINT16 SpeOverflowInterrupt;=0D + UINT16 SpeOverflowInterrupt;=0D =0D /** The proximity domain to which the logical processor belongs.=0D This field is used to populate the GICC affinity structure=0D in the SRAT table.=0D */=0D - UINT32 ProximityDomain;=0D + UINT32 ProximityDomain;=0D =0D /** The clock domain to which the logical processor belongs.=0D This field is used to populate the GICC affinity structure=0D in the SRAT table.=0D */=0D - UINT32 ClockDomain;=0D + UINT32 ClockDomain;=0D =0D /** The GICC Affinity flags field as described by the GICC Affinity stru= cture=0D in the SRAT table.=0D */=0D - UINT32 AffinityFlags;=0D + UINT32 AffinityFlags;=0D +=0D + /** Optional field: Reference Token for the Cpc info of this processor.= =0D + Token identifying a CM_ARM_OBJ_REF structure, itself referencing=0D + CM_ARM_CPC_INFO objects.=0D + */=0D + CM_OBJECT_TOKEN CpcToken;=0D } CM_ARM_GICC_INFO;=0D =0D /** A structure that describes the=0D @@ -1070,6 +1078,24 @@ typedef struct CmArmRmrDescriptor {=0D UINT64 Length;=0D } CM_ARM_MEMORY_RANGE_DESCRIPTOR;=0D =0D +/** A structure that describes the Cpc information.=0D +=0D + Continuous Performance Control is described in DSDT/SSDT and associated= =0D + to cpus/clusters in the cpu topology.=0D +=0D + Unsupported Optional registers should be encoded with NULL resource=0D + Register {(SystemMemory, 0, 0, 0, 0)}=0D +=0D + For values that support Integer or Buffer, integer will be used=0D + if buffer is NULL resource.=0D + If resource is not NULL then Integer must be 0=0D +=0D + Cf. ACPI 6.4, s8.4.7.1 _CPC (Continuous Performance Control)=0D +=0D + ID: EArmObjCpcInfo=0D +*/=0D +typedef AML_CPC_INFO CM_ARM_CPC_INFO;=0D +=0D #pragma pack()=0D =0D #endif // ARM_NAMESPACE_OBJECTS_H_=0D diff --git a/DynamicTablesPkg/Include/Library/AmlCpcInfo.h b/DynamicTablesP= kg/Include/Library/AmlCpcInfo.h=0D new file mode 100644=0D index 0000000000..8981c22954=0D --- /dev/null=0D +++ b/DynamicTablesPkg/Include/Library/AmlCpcInfo.h=0D @@ -0,0 +1,124 @@=0D +/** @file=0D +=0D + Copyright (c) 2022, NVIDIA CORPORATION & AFFILIATES. All rights reserved= .
=0D +=0D + SPDX-License-Identifier: BSD-2-Clause-Patent=0D +**/=0D +=0D +#ifndef AML_CPC_INFO_H_=0D +#define AML_CPC_INFO_H_=0D +=0D +#include =0D +=0D +#pragma pack(1)=0D +=0D +/** A structure that describes the Cpc information.=0D +=0D + Continuous Performance Control is described in DSDT/SSDT and associated= =0D + to cpus/clusters in the cpu topology.=0D +=0D + Unsupported Optional registers should be encoded with NULL resource=0D + Register {(SystemMemory, 0, 0, 0, 0)}=0D +=0D + For values that support Integer or Buffer, integer will be used=0D + if buffer is NULL resource.=0D + If resource is not NULL then Integer must be 0=0D +=0D + Cf. ACPI 6.4, s8.4.7.1 _CPC (Continuous Performance Control)=0D +=0D +**/=0D +=0D +typedef struct AmlCpcInfo {=0D + /// The revision number of the _CPC package format.=0D + UINT32 Revision;=0D +=0D + /// Indicates the highest level of performance the processor=0D + /// is theoretically capable of achieving.=0D + EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE HighestPerformanceBuffer;=0D + UINT32 HighestPerformanceInteger;=0D +=0D + /// Indicates the highest sustained performance level of the processor.= =0D + EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE NominalPerformanceBuffer;=0D + UINT32 NominalPerformanceInteger;=0D +=0D + /// Indicates the lowest performance level of the processor with non-lin= ear power savings.=0D + EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE LowestNonlinearPerformanceBuff= er;=0D + UINT32 LowestNonlinearPerformanceInte= ger;=0D +=0D + /// Indicates the lowest performance level of the processor..=0D + EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE LowestPerformanceBuffer;=0D + UINT32 LowestPerformanceInteger;=0D +=0D + /// Guaranteed Performance Register Buffer.=0D + /// Optional=0D + EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE GuaranteedPerformanceRegister;= =0D +=0D + /// Desired Performance Register Buffer.=0D + EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE DesiredPerformanceRegister;=0D +=0D + /// Minimum Performance Register Buffer.=0D + /// Optional=0D + EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE MinimumPerformanceRegister;=0D +=0D + /// Maximum Performance Register Buffer.=0D + /// Optional=0D + EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE MaximumPerformanceRegister;=0D +=0D + /// Performance Reduction Tolerance Register.=0D + /// Optional=0D + EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE PerformanceReductionToleranceR= egister;=0D +=0D + /// Time Window Register.=0D + /// Optional=0D + EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE TimeWindowRegister;=0D +=0D + /// Counter Wraparound Time=0D + /// Optional=0D + EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE CounterWraparoundTimeBuffer;=0D + UINT32 CounterWraparoundTimeInteger;= =0D +=0D + /// Reference Performance Counter Register=0D + EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE ReferencePerformanceCounterReg= ister;=0D +=0D + /// Delivered Performance Counter Register=0D + EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE DeliveredPerformanceCounterReg= ister;=0D +=0D + /// Performance Limited Register=0D + EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE PerformanceLimitedRegister;=0D +=0D + /// CPPC EnableRegister=0D + /// Optional=0D + EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE CPPCEnableRegister;=0D +=0D + /// Autonomous Selection Enable=0D + /// Optional=0D + EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE AutonomousSelectionEnableBuffe= r;=0D + UINT32 AutonomousSelectionEnableInteg= er;=0D +=0D + /// AutonomousActivity-WindowRegister=0D + /// Optional=0D + EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE AutonomousActivityWindowRegist= er;=0D +=0D + /// EnergyPerformance-PreferenceRegister=0D + /// Optional=0D + EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE EnergyPerformancePreferenceReg= ister;=0D +=0D + /// Reference Performance=0D + /// Optional=0D + EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE ReferencePerformanceBuffer;=0D + UINT32 ReferencePerformanceInteger;=0D +=0D + /// Lowest Frequency=0D + /// Optional=0D + EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE LowestFrequencyBuffer;=0D + UINT32 LowestFrequencyInteger;=0D +=0D + /// Nominal Frequency=0D + /// Optional=0D + EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE NominalFrequencyBuffer;=0D + UINT32 NominalFrequencyInteger;=0D +} AML_CPC_INFO;=0D +=0D +#pragma pack()=0D +=0D +#endif //AML_CPC_INFO_H_=0D diff --git a/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationMa= nagerObjectParser.c b/DynamicTablesPkg/Library/Common/TableHelperLib/Config= urationManagerObjectParser.c=0D index c1b21d24a4..cda3696557 100644=0D --- a/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerOb= jectParser.c=0D +++ b/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerOb= jectParser.c=0D @@ -423,6 +423,84 @@ STATIC CONST CM_OBJ_PARSER CmPciInterruptMapInfoParse= r[] =3D {=0D ARRAY_SIZE (CmArmGenericInterruptParser) },=0D };=0D =0D +/** A parser for EArmObjCpcInfo.=0D +*/=0D +STATIC CONST CM_OBJ_PARSER CmArmCpcInfoParser[] =3D {=0D + { "Revision", 4, = "0x%lx", NULL },=0D + { "HighestPerformanceBuffer", sizeof (EFI_ACPI_6_4_GENERIC_= ADDRESS_STRUCTURE),=0D + NULL, NULL, AcpiGenericAddressParser,=0D + ARRAY_SIZE (AcpiGenericAddressParser) },=0D + { "HighestPerformanceInteger", 4, = "0x%lx", NULL },=0D + { "NominalPerformanceBuffer", sizeof (EFI_ACPI_6_4_GENERIC_= ADDRESS_STRUCTURE),=0D + NULL, NULL, AcpiGenericAddressParser,=0D + ARRAY_SIZE (AcpiGenericAddressParser) },=0D + { "NominalPerformanceInteger", 4, = "0x%lx", NULL },=0D + { "LowestNonlinearPerformanceBuffer", sizeof (EFI_ACPI_6_4_GENERIC_= ADDRESS_STRUCTURE),=0D + NULL, NULL, AcpiGenericAddressParser,=0D + ARRAY_SIZE (AcpiGenericAddressParser) },=0D + { "LowestNonlinearPerformanceInteger", 4, = "0x%lx", NULL },=0D + { "LowestPerformanceBuffer", sizeof (EFI_ACPI_6_4_GENERIC_= ADDRESS_STRUCTURE),=0D + NULL, NULL, AcpiGenericAddressParser,=0D + ARRAY_SIZE (AcpiGenericAddressParser) },=0D + { "LowestPerformanceInteger", 4, = "0x%lx", NULL },=0D + { "GuaranteedPerformanceRegister", sizeof (EFI_ACPI_6_4_GENERIC_= ADDRESS_STRUCTURE),=0D + NULL, NULL, AcpiGenericAddressParser,=0D + ARRAY_SIZE (AcpiGenericAddressParser) },=0D + { "DesiredPerformanceRegister", sizeof (EFI_ACPI_6_4_GENERIC_= ADDRESS_STRUCTURE),=0D + NULL, NULL, AcpiGenericAddressParser,=0D + ARRAY_SIZE (AcpiGenericAddressParser) },=0D + { "MinimumPerformanceRegister", sizeof (EFI_ACPI_6_4_GENERIC_= ADDRESS_STRUCTURE),=0D + NULL, NULL, AcpiGenericAddressParser,=0D + ARRAY_SIZE (AcpiGenericAddressParser) },=0D + { "MaximumPerformanceRegister", sizeof (EFI_ACPI_6_4_GENERIC_= ADDRESS_STRUCTURE),=0D + NULL, NULL, AcpiGenericAddressParser,=0D + ARRAY_SIZE (AcpiGenericAddressParser) },=0D + { "PerformanceReductionToleranceRegister", sizeof (EFI_ACPI_6_4_GENERIC_= ADDRESS_STRUCTURE),=0D + NULL, NULL, AcpiGenericAddressParser,=0D + ARRAY_SIZE (AcpiGenericAddressParser) },=0D + { "TimeWindowRegister", sizeof (EFI_ACPI_6_4_GENERIC_= ADDRESS_STRUCTURE),=0D + NULL, NULL, AcpiGenericAddressParser,=0D + ARRAY_SIZE (AcpiGenericAddressParser) },=0D + { "CounterWraparoundTimeBuffer", sizeof (EFI_ACPI_6_4_GENERIC_= ADDRESS_STRUCTURE),=0D + NULL, NULL, AcpiGenericAddressParser,=0D + ARRAY_SIZE (AcpiGenericAddressParser) },=0D + { "CounterWraparoundTimeInteger", 4, = "0x%lx", NULL },=0D + { "ReferencePerformanceCounterRegister", sizeof (EFI_ACPI_6_4_GENERIC_= ADDRESS_STRUCTURE),=0D + NULL, NULL, AcpiGenericAddressParser,=0D + ARRAY_SIZE (AcpiGenericAddressParser) },=0D + { "DeliveredPerformanceCounterRegister", sizeof (EFI_ACPI_6_4_GENERIC_= ADDRESS_STRUCTURE),=0D + NULL, NULL, AcpiGenericAddressParser,=0D + ARRAY_SIZE (AcpiGenericAddressParser) },=0D + { "PerformanceLimitedRegister", sizeof (EFI_ACPI_6_4_GENERIC_= ADDRESS_STRUCTURE),=0D + NULL, NULL, AcpiGenericAddressParser,=0D + ARRAY_SIZE (AcpiGenericAddressParser) },=0D + { "CPPCEnableRegister", sizeof (EFI_ACPI_6_4_GENERIC_= ADDRESS_STRUCTURE),=0D + NULL, NULL, AcpiGenericAddressParser,=0D + ARRAY_SIZE (AcpiGenericAddressParser) },=0D + { "AutonomousSelectionEnableBuffer", sizeof (EFI_ACPI_6_4_GENERIC_= ADDRESS_STRUCTURE),=0D + NULL, NULL, AcpiGenericAddressParser,=0D + ARRAY_SIZE (AcpiGenericAddressParser) },=0D + { "AutonomousSelectionEnableInteger", 4, = "0x%lx", NULL },=0D + { "AutonomousActivityWindowRegister", sizeof (EFI_ACPI_6_4_GENERIC_= ADDRESS_STRUCTURE),=0D + NULL, NULL, AcpiGenericAddressParser,=0D + ARRAY_SIZE (AcpiGenericAddressParser) },=0D + { "EnergyPerformancePreferenceRegister", sizeof (EFI_ACPI_6_4_GENERIC_= ADDRESS_STRUCTURE),=0D + NULL, NULL, AcpiGenericAddressParser,=0D + ARRAY_SIZE (AcpiGenericAddressParser) },=0D + { "ReferencePerformanceBuffer", sizeof (EFI_ACPI_6_4_GENERIC_= ADDRESS_STRUCTURE),=0D + NULL, NULL, AcpiGenericAddressParser,=0D + ARRAY_SIZE (AcpiGenericAddressParser) },=0D + { "ReferencePerformanceInteger", 4, = "0x%lx", NULL },=0D + { "LowestFrequencyBuffer", sizeof (EFI_ACPI_6_4_GENERIC_= ADDRESS_STRUCTURE),=0D + NULL, NULL, AcpiGenericAddressParser,=0D + ARRAY_SIZE (AcpiGenericAddressParser) },=0D + { "LowestFrequencyInteger", 4, = "0x%lx", NULL },=0D + { "NominalFrequencyBuffer", sizeof (EFI_ACPI_6_4_GENERIC_= ADDRESS_STRUCTURE),=0D + NULL, NULL, AcpiGenericAddressParser,=0D + ARRAY_SIZE (AcpiGenericAddressParser) },=0D + { "NominalFrequencyInteger", 4, = "0x%lx", NULL },=0D +};=0D +=0D /** A parser for Arm namespace objects.=0D */=0D STATIC CONST CM_OBJ_PARSER_ARRAY ArmNamespaceObjectParser[] =3D {=0D @@ -501,6 +579,8 @@ STATIC CONST CM_OBJ_PARSER_ARRAY ArmNamespaceObjectPar= ser[] =3D {=0D ARRAY_SIZE (CmArmPciAddressMapInfoParser) },=0D { "EArmObjPciInterruptMapInfo", CmPciInterruptMapInfoParser,=0D ARRAY_SIZE (CmPciInterruptMapInfoParser) },=0D + { "EArmObjCpcInfo", CmArmCpcInfoParser,=0D + ARRAY_SIZE (CmArmCpcInfoParser) },=0D { "EArmObjMax", NULL, = 0 },=0D };=0D =0D -- =0D 2.25.1=0D =0D