From nobody Thu May 9 11:54:47 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+93967+1787277+3901457@groups.io; arc=fail (BodyHash is different from the expected one) Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by mx.zohomail.com with SMTPS id 1663624897059499.0859752061124; Mon, 19 Sep 2022 15:01:37 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id 4GG3YY1788612xNhNAnC5LMw; Mon, 19 Sep 2022 15:01:35 -0700 X-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 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 X-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 X-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 (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) client-ip=66.175.222.108; envelope-from=bounce+27952+93967+1787277+3901457@groups.io; helo=mail02.groups.io; 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 X-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 X-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 X-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 X-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 X-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 via groups.io" To: CC: , , , , , Jeff Brasen Subject: [edk2-devel] [PATCH v4 1/3] DynamicTablesPkg: Add CM_ARM_CPC_INFO object Date: Mon, 19 Sep 2022 16:01:09 -0600 Message-ID: In-Reply-To: References: MIME-Version: 1.0 X-NVConfidentiality: public 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-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-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 Precedence: Bulk List-Unsubscribe: List-Subscribe: List-Help: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,jbrasen@nvidia.com X-Gm-Message-State: Or4SUBwqzUCInrCD81jBJpODx1787277AA= Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1663624895; bh=c7zl0bda2Og7/UqIX5paddhREQenGiaYUVYls6+HUQ4=; h=CC:Content-Type:Date:From:Reply-To:Subject:To; b=banDgeFVol3rbV6lZ0Urzutf6rRyqh/DLincUSN3iQIHTsvGLjg3cs+MXdB6918H5d1 IuCYFykA+Pm+m3U4QpAqdVgrkGy7KPPMxUEBpnyiTBII7RKI7j9OKM9v8ddqoNP/ZJMVe FFbUsrV/hoHC9c9LTlnGo7TPkSN4JQRgp3c= X-ZohoMail-DKIM: pass (identity @groups.io) X-ZM-MESSAGEID: 1663624898881100006 Content-Type: text/plain; charset="utf-8" Introduce the CM_ARM_CPC_INFO CmObj in the ArmNameSpaceObjects. This allows to describe CPC information, as described in ACPI 6.4, s8.4.7.1 "_CPC (Continuous Performance Control)". Signed-off-by: Jeff Brasen --- .../Include/ArmNameSpaceObjects.h | 60 ++++++--- DynamicTablesPkg/Include/Library/AmlCpcInfo.h | 124 ++++++++++++++++++ .../ConfigurationManagerObjectParser.c | 80 +++++++++++ 3 files changed, 247 insertions(+), 17 deletions(-) create mode 100644 DynamicTablesPkg/Include/Library/AmlCpcInfo.h diff --git a/DynamicTablesPkg/Include/ArmNameSpaceObjects.h b/DynamicTables= Pkg/Include/ArmNameSpaceObjects.h index 102e0f96be..ea5bf81070 100644 --- a/DynamicTablesPkg/Include/ArmNameSpaceObjects.h +++ b/DynamicTablesPkg/Include/ArmNameSpaceObjects.h @@ -14,6 +14,7 @@ #define ARM_NAMESPACE_OBJECTS_H_ =20 #include +#include =20 #pragma pack(1) =20 @@ -63,6 +64,7 @@ typedef enum ArmObjectID { EArmObjPciInterruptMapInfo, ///< 39 - Pci Interrupt Map Info EArmObjRmr, ///< 40 - Reserved Memory Range Node EArmObjMemoryRangeDescriptor, ///< 41 - Memory Range Descriptor + EArmObjCpcInfo, ///< 42 - Continuous Performance Co= ntrol Info EArmObjMax } EARM_OBJECT_ID; =20 @@ -97,99 +99,105 @@ typedef struct CmArmPowerManagementProfileInfo { */ typedef struct CmArmGicCInfo { /// The GIC CPU Interface number. - UINT32 CPUInterfaceNumber; + UINT32 CPUInterfaceNumber; =20 /** The ACPI Processor UID. This must match the _UID of the CPU Device object information described in the DSDT/SSDT for the CPU. */ - UINT32 AcpiProcessorUid; + UINT32 AcpiProcessorUid; =20 /** The flags field as described by the GICC structure in the ACPI Specification. */ - UINT32 Flags; + UINT32 Flags; =20 /** The parking protocol version field as described by the GICC structure in the ACPI Specification. */ - UINT32 ParkingProtocolVersion; + UINT32 ParkingProtocolVersion; =20 /** The Performance Interrupt field as described by the GICC structure in the ACPI Specification. */ - UINT32 PerformanceInterruptGsiv; + UINT32 PerformanceInterruptGsiv; =20 /** The CPU Parked address field as described by the GICC structure in the ACPI Specification. */ - UINT64 ParkedAddress; + UINT64 ParkedAddress; =20 /** The base address for the GIC CPU Interface as described by the GICC structure in the ACPI Specification. */ - UINT64 PhysicalBaseAddress; + UINT64 PhysicalBaseAddress; =20 /** The base address for GICV interface as described by the GICC structure in the ACPI Specification. */ - UINT64 GICV; + UINT64 GICV; =20 /** The base address for GICH interface as described by the GICC structure in the ACPI Specification. */ - UINT64 GICH; + UINT64 GICH; =20 /** The GICV maintenance interrupt as described by the GICC structure in the ACPI Specification. */ - UINT32 VGICMaintenanceInterrupt; + UINT32 VGICMaintenanceInterrupt; =20 /** The base address for GICR interface as described by the GICC structure in the ACPI Specification. */ - UINT64 GICRBaseAddress; + UINT64 GICRBaseAddress; =20 /** The MPIDR for the CPU as described by the GICC structure in the ACPI Specification. */ - UINT64 MPIDR; + UINT64 MPIDR; =20 /** The Processor Power Efficiency class as described by the GICC structure in the ACPI Specification. */ - UINT8 ProcessorPowerEfficiencyClass; + UINT8 ProcessorPowerEfficiencyClass; =20 /** Statistical Profiling Extension buffer overflow GSIV. Zero if unsupported by this processor. This field was introduced in ACPI 6.3 (MADT revision 5) and is therefore ignored when generating MADT revision 4 or lower. */ - UINT16 SpeOverflowInterrupt; + UINT16 SpeOverflowInterrupt; =20 /** The proximity domain to which the logical processor belongs. This field is used to populate the GICC affinity structure in the SRAT table. */ - UINT32 ProximityDomain; + UINT32 ProximityDomain; =20 /** The clock domain to which the logical processor belongs. This field is used to populate the GICC affinity structure in the SRAT table. */ - UINT32 ClockDomain; + UINT32 ClockDomain; =20 /** The GICC Affinity flags field as described by the GICC Affinity stru= cture in the SRAT table. */ - UINT32 AffinityFlags; + UINT32 AffinityFlags; + + /** Optional field: Reference Token for the Cpc info of this processor. + Token identifying a CM_ARM_OBJ_REF structure, itself referencing + CM_ARM_CPC_INFO objects. + */ + CM_OBJECT_TOKEN CpcToken; } CM_ARM_GICC_INFO; =20 /** A structure that describes the @@ -1070,6 +1078,24 @@ typedef struct CmArmRmrDescriptor { UINT64 Length; } CM_ARM_MEMORY_RANGE_DESCRIPTOR; =20 +/** A structure that describes the Cpc information. + + Continuous Performance Control is described in DSDT/SSDT and associated + to cpus/clusters in the cpu topology. + + Unsupported Optional registers should be encoded with NULL resource + Register {(SystemMemory, 0, 0, 0, 0)} + + For values that support Integer or Buffer, integer will be used + if buffer is NULL resource. + If resource is not NULL then Integer must be 0 + + Cf. ACPI 6.4, s8.4.7.1 _CPC (Continuous Performance Control) + + ID: EArmObjCpcInfo +*/ +typedef AML_CPC_INFO CM_ARM_CPC_INFO; + #pragma pack() =20 #endif // ARM_NAMESPACE_OBJECTS_H_ diff --git a/DynamicTablesPkg/Include/Library/AmlCpcInfo.h b/DynamicTablesP= kg/Include/Library/AmlCpcInfo.h new file mode 100644 index 0000000000..8981c22954 --- /dev/null +++ b/DynamicTablesPkg/Include/Library/AmlCpcInfo.h @@ -0,0 +1,124 @@ +/** @file + + Copyright (c) 2022, NVIDIA CORPORATION & AFFILIATES. All rights reserved= .
+ + SPDX-License-Identifier: BSD-2-Clause-Patent +**/ + +#ifndef AML_CPC_INFO_H_ +#define AML_CPC_INFO_H_ + +#include + +#pragma pack(1) + +/** A structure that describes the Cpc information. + + Continuous Performance Control is described in DSDT/SSDT and associated + to cpus/clusters in the cpu topology. + + Unsupported Optional registers should be encoded with NULL resource + Register {(SystemMemory, 0, 0, 0, 0)} + + For values that support Integer or Buffer, integer will be used + if buffer is NULL resource. + If resource is not NULL then Integer must be 0 + + Cf. ACPI 6.4, s8.4.7.1 _CPC (Continuous Performance Control) + +**/ + +typedef struct AmlCpcInfo { + /// The revision number of the _CPC package format. + UINT32 Revision; + + /// Indicates the highest level of performance the processor + /// is theoretically capable of achieving. + EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE HighestPerformanceBuffer; + UINT32 HighestPerformanceInteger; + + /// Indicates the highest sustained performance level of the processor. + EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE NominalPerformanceBuffer; + UINT32 NominalPerformanceInteger; + + /// Indicates the lowest performance level of the processor with non-lin= ear power savings. + EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE LowestNonlinearPerformanceBuff= er; + UINT32 LowestNonlinearPerformanceInte= ger; + + /// Indicates the lowest performance level of the processor.. + EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE LowestPerformanceBuffer; + UINT32 LowestPerformanceInteger; + + /// Guaranteed Performance Register Buffer. + /// Optional + EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE GuaranteedPerformanceRegister; + + /// Desired Performance Register Buffer. + EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE DesiredPerformanceRegister; + + /// Minimum Performance Register Buffer. + /// Optional + EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE MinimumPerformanceRegister; + + /// Maximum Performance Register Buffer. + /// Optional + EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE MaximumPerformanceRegister; + + /// Performance Reduction Tolerance Register. + /// Optional + EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE PerformanceReductionToleranceR= egister; + + /// Time Window Register. + /// Optional + EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE TimeWindowRegister; + + /// Counter Wraparound Time + /// Optional + EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE CounterWraparoundTimeBuffer; + UINT32 CounterWraparoundTimeInteger; + + /// Reference Performance Counter Register + EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE ReferencePerformanceCounterReg= ister; + + /// Delivered Performance Counter Register + EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE DeliveredPerformanceCounterReg= ister; + + /// Performance Limited Register + EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE PerformanceLimitedRegister; + + /// CPPC EnableRegister + /// Optional + EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE CPPCEnableRegister; + + /// Autonomous Selection Enable + /// Optional + EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE AutonomousSelectionEnableBuffe= r; + UINT32 AutonomousSelectionEnableInteg= er; + + /// AutonomousActivity-WindowRegister + /// Optional + EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE AutonomousActivityWindowRegist= er; + + /// EnergyPerformance-PreferenceRegister + /// Optional + EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE EnergyPerformancePreferenceReg= ister; + + /// Reference Performance + /// Optional + EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE ReferencePerformanceBuffer; + UINT32 ReferencePerformanceInteger; + + /// Lowest Frequency + /// Optional + EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE LowestFrequencyBuffer; + UINT32 LowestFrequencyInteger; + + /// Nominal Frequency + /// Optional + EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE NominalFrequencyBuffer; + UINT32 NominalFrequencyInteger; +} AML_CPC_INFO; + +#pragma pack() + +#endif //AML_CPC_INFO_H_ diff --git a/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationMa= nagerObjectParser.c b/DynamicTablesPkg/Library/Common/TableHelperLib/Config= urationManagerObjectParser.c index c1b21d24a4..cda3696557 100644 --- a/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerOb= jectParser.c +++ b/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerOb= jectParser.c @@ -423,6 +423,84 @@ STATIC CONST CM_OBJ_PARSER CmPciInterruptMapInfoParse= r[] =3D { ARRAY_SIZE (CmArmGenericInterruptParser) }, }; =20 +/** A parser for EArmObjCpcInfo. +*/ +STATIC CONST CM_OBJ_PARSER CmArmCpcInfoParser[] =3D { + { "Revision", 4, = "0x%lx", NULL }, + { "HighestPerformanceBuffer", sizeof (EFI_ACPI_6_4_GENERIC_= ADDRESS_STRUCTURE), + NULL, NULL, AcpiGenericAddressParser, + ARRAY_SIZE (AcpiGenericAddressParser) }, + { "HighestPerformanceInteger", 4, = "0x%lx", NULL }, + { "NominalPerformanceBuffer", sizeof (EFI_ACPI_6_4_GENERIC_= ADDRESS_STRUCTURE), + NULL, NULL, AcpiGenericAddressParser, + ARRAY_SIZE (AcpiGenericAddressParser) }, + { "NominalPerformanceInteger", 4, = "0x%lx", NULL }, + { "LowestNonlinearPerformanceBuffer", sizeof (EFI_ACPI_6_4_GENERIC_= ADDRESS_STRUCTURE), + NULL, NULL, AcpiGenericAddressParser, + ARRAY_SIZE (AcpiGenericAddressParser) }, + { "LowestNonlinearPerformanceInteger", 4, = "0x%lx", NULL }, + { "LowestPerformanceBuffer", sizeof (EFI_ACPI_6_4_GENERIC_= ADDRESS_STRUCTURE), + NULL, NULL, AcpiGenericAddressParser, + ARRAY_SIZE (AcpiGenericAddressParser) }, + { "LowestPerformanceInteger", 4, = "0x%lx", NULL }, + { "GuaranteedPerformanceRegister", sizeof (EFI_ACPI_6_4_GENERIC_= ADDRESS_STRUCTURE), + NULL, NULL, AcpiGenericAddressParser, + ARRAY_SIZE (AcpiGenericAddressParser) }, + { "DesiredPerformanceRegister", sizeof (EFI_ACPI_6_4_GENERIC_= ADDRESS_STRUCTURE), + NULL, NULL, AcpiGenericAddressParser, + ARRAY_SIZE (AcpiGenericAddressParser) }, + { "MinimumPerformanceRegister", sizeof (EFI_ACPI_6_4_GENERIC_= ADDRESS_STRUCTURE), + NULL, NULL, AcpiGenericAddressParser, + ARRAY_SIZE (AcpiGenericAddressParser) }, + { "MaximumPerformanceRegister", sizeof (EFI_ACPI_6_4_GENERIC_= ADDRESS_STRUCTURE), + NULL, NULL, AcpiGenericAddressParser, + ARRAY_SIZE (AcpiGenericAddressParser) }, + { "PerformanceReductionToleranceRegister", sizeof (EFI_ACPI_6_4_GENERIC_= ADDRESS_STRUCTURE), + NULL, NULL, AcpiGenericAddressParser, + ARRAY_SIZE (AcpiGenericAddressParser) }, + { "TimeWindowRegister", sizeof (EFI_ACPI_6_4_GENERIC_= ADDRESS_STRUCTURE), + NULL, NULL, AcpiGenericAddressParser, + ARRAY_SIZE (AcpiGenericAddressParser) }, + { "CounterWraparoundTimeBuffer", sizeof (EFI_ACPI_6_4_GENERIC_= ADDRESS_STRUCTURE), + NULL, NULL, AcpiGenericAddressParser, + ARRAY_SIZE (AcpiGenericAddressParser) }, + { "CounterWraparoundTimeInteger", 4, = "0x%lx", NULL }, + { "ReferencePerformanceCounterRegister", sizeof (EFI_ACPI_6_4_GENERIC_= ADDRESS_STRUCTURE), + NULL, NULL, AcpiGenericAddressParser, + ARRAY_SIZE (AcpiGenericAddressParser) }, + { "DeliveredPerformanceCounterRegister", sizeof (EFI_ACPI_6_4_GENERIC_= ADDRESS_STRUCTURE), + NULL, NULL, AcpiGenericAddressParser, + ARRAY_SIZE (AcpiGenericAddressParser) }, + { "PerformanceLimitedRegister", sizeof (EFI_ACPI_6_4_GENERIC_= ADDRESS_STRUCTURE), + NULL, NULL, AcpiGenericAddressParser, + ARRAY_SIZE (AcpiGenericAddressParser) }, + { "CPPCEnableRegister", sizeof (EFI_ACPI_6_4_GENERIC_= ADDRESS_STRUCTURE), + NULL, NULL, AcpiGenericAddressParser, + ARRAY_SIZE (AcpiGenericAddressParser) }, + { "AutonomousSelectionEnableBuffer", sizeof (EFI_ACPI_6_4_GENERIC_= ADDRESS_STRUCTURE), + NULL, NULL, AcpiGenericAddressParser, + ARRAY_SIZE (AcpiGenericAddressParser) }, + { "AutonomousSelectionEnableInteger", 4, = "0x%lx", NULL }, + { "AutonomousActivityWindowRegister", sizeof (EFI_ACPI_6_4_GENERIC_= ADDRESS_STRUCTURE), + NULL, NULL, AcpiGenericAddressParser, + ARRAY_SIZE (AcpiGenericAddressParser) }, + { "EnergyPerformancePreferenceRegister", sizeof (EFI_ACPI_6_4_GENERIC_= ADDRESS_STRUCTURE), + NULL, NULL, AcpiGenericAddressParser, + ARRAY_SIZE (AcpiGenericAddressParser) }, + { "ReferencePerformanceBuffer", sizeof (EFI_ACPI_6_4_GENERIC_= ADDRESS_STRUCTURE), + NULL, NULL, AcpiGenericAddressParser, + ARRAY_SIZE (AcpiGenericAddressParser) }, + { "ReferencePerformanceInteger", 4, = "0x%lx", NULL }, + { "LowestFrequencyBuffer", sizeof (EFI_ACPI_6_4_GENERIC_= ADDRESS_STRUCTURE), + NULL, NULL, AcpiGenericAddressParser, + ARRAY_SIZE (AcpiGenericAddressParser) }, + { "LowestFrequencyInteger", 4, = "0x%lx", NULL }, + { "NominalFrequencyBuffer", sizeof (EFI_ACPI_6_4_GENERIC_= ADDRESS_STRUCTURE), + NULL, NULL, AcpiGenericAddressParser, + ARRAY_SIZE (AcpiGenericAddressParser) }, + { "NominalFrequencyInteger", 4, = "0x%lx", NULL }, +}; + /** A parser for Arm namespace objects. */ STATIC CONST CM_OBJ_PARSER_ARRAY ArmNamespaceObjectParser[] =3D { @@ -501,6 +579,8 @@ STATIC CONST CM_OBJ_PARSER_ARRAY ArmNamespaceObjectPar= ser[] =3D { ARRAY_SIZE (CmArmPciAddressMapInfoParser) }, { "EArmObjPciInterruptMapInfo", CmPciInterruptMapInfoParser, ARRAY_SIZE (CmPciInterruptMapInfoParser) }, + { "EArmObjCpcInfo", CmArmCpcInfoParser, + ARRAY_SIZE (CmArmCpcInfoParser) }, { "EArmObjMax", NULL, = 0 }, }; =20 --=20 2.25.1 -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#93967): https://edk2.groups.io/g/devel/message/93967 Mute This Topic: https://groups.io/mt/93792017/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- From nobody Thu May 9 11:54:47 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+93968+1787277+3901457@groups.io; arc=fail (BodyHash is different from the expected one) Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by mx.zohomail.com with SMTPS id 1663624896689974.0852648336376; Mon, 19 Sep 2022 15:01:36 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id lka3YY1788612x9PIpj9AOxO; Mon, 19 Sep 2022 15:01:36 -0700 X-Received: from NAM12-DM6-obe.outbound.protection.outlook.com (NAM12-DM6-obe.outbound.protection.outlook.com [40.107.243.65]) by mx.groups.io with SMTP id smtpd.web09.5091.1663624895659658816 for ; Mon, 19 Sep 2022 15:01:35 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=etjSI7wAjWqKM/DVVppcOsWDL8/qass6H95st49ZlleJwsccxntNgwFJT/hQQRCkEQ6bZnsaL4keYYYiW9ZabVlpohkkBdhBPmnR4uDr4kALcTJYgsNOo+rabXG9IJKU3GHo2/xB1zl/iWG8hOfi2FCz18l+pFcYeISX8dN0FtLBhR8sxsMHS/VditlxrUOyd9ZDlueOl53CUM967jDiVF78CNX1Uxr7UD4s71ZYD80hEnQFak5SDVcHl/25HhoWXCbafXQ6tz6swbvQFRCwXj1AXC5oagAFhgNMiFfmBd154BG0xDJtR3f6LF5iERyW9bhUTMS5QeUM668VkbHprA== 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=7FcRuaJIptU3NU7lFyYtl3wMRPAEvv51ZBKl5BcaSrs=; b=ViMvi/zBYF5a4hZbl6w07i6Btuc+j9kHOxhIhFCrKUFZp5FTdyARE9eAhaZXexuzN0mXdfgOcoJcPHSt605yXvRwuMXbMGpWdKzFC6NZocW53IB2zOJCSJ7PGF1uoOW/1nVFEw+UdWV+K2xb673GM4VlxgE0vmJKG3WbWtR8YNRxc8eB+lWxw/8z7HhKPkmM/vjms22hVz2dvYM2xat80IiJoev+GnOQw5bPY/Vlh1xl3qFIEnSS6CQnelPpPbFxwh0Un2SQEPBWDsUJudhZJ50JrNBOzeM9gfGS/M7ztAFznCg2wcNp+2T4QEuVotQ4C38KJselMZEjeI+VnT02EA== 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 X-Received: from BN9PR03CA0108.namprd03.prod.outlook.com (2603:10b6:408:fd::23) by BL1PR12MB5285.namprd12.prod.outlook.com (2603:10b6:208:31f::14) 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:33 +0000 X-Received: from BN8NAM11FT109.eop-nam11.prod.protection.outlook.com (2603:10b6:408:fd:cafe::fe) by BN9PR03CA0108.outlook.office365.com (2603:10b6:408:fd::23) 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:33 +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 (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) client-ip=66.175.222.108; envelope-from=bounce+27952+93968+1787277+3901457@groups.io; helo=mail02.groups.io; 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 X-Received: from mail.nvidia.com (216.228.117.161) by BN8NAM11FT109.mail.protection.outlook.com (10.13.176.221) 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 X-Received: from rnnvmail204.nvidia.com (10.129.68.6) 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:19 -0700 X-Received: from drhqmail203.nvidia.com (10.126.190.182) by rnnvmail204.nvidia.com (10.129.68.6) 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:18 -0700 X-Received: from drhqmail203.nvidia.com (10.126.190.182) by drhqmail203.nvidia.com (10.126.190.182) 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:18 -0700 X-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:17 -0700 From: "Jeff Brasen via groups.io" To: CC: , , , , , Jeff Brasen Subject: [edk2-devel] [PATCH v4 2/3] DynamicTablesPkg: AML Code generation to add _CPC entries Date: Mon, 19 Sep 2022 16:01:10 -0600 Message-ID: In-Reply-To: References: MIME-Version: 1.0 X-NVConfidentiality: public X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BN8NAM11FT109:EE_|BL1PR12MB5285:EE_ X-MS-Office365-Filtering-Correlation-Id: f8d82985-dd77-467a-8509-08da9a8a8394 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Message-Info: a9DUZ571Q0DEeCHX287TF0vHoBvo5p7taj+hdJROrjOsZkkwNE1IpYEUaxnbkaggDm7kXm4KrH4riuAs9YeimMqVrZ0PoI66XXVemr0jdGjodoK0P02X47Up3H2U47QR7tgHFm3NycjmEHIJeWC6KV3WmaqQNJzUWZM2FW7rILPk0HG5IkzThennAZpMtChAuY5AU2ywVTOK4Wn1ElsVdfAK4MNYjmzQc3ckdvWbJNLThFmi+8lZeSH/feDhLG5zCaGiX+OAyd7SN0JwqczY0f6RKr8XiH42bScEgH59keRhSjA0XswwbkFGdFyE2TQFuOERJSGj0nYuu8Ymy4KFMTGh/AvwcW3iRQquSiowhUSoLdwk4lCNqkSrVxZd6gXZTnq2ZputC9ZqHwrARslaooiWnhfnpj13v14mUthak+q0RrUSHt9zeAeM5jJKqlT7uju+5Db7ifbA9D372koyDT1TqHiVk1GfqyXmlSRdY3Wd+J78V178aWHH5NsEYM4p3QO+/br7ytuj8AFJH0KFMpco7r6EJgFhTxJxhwTMxYqA9uG8A8+auzkl6KS65T5+JmELJatQB6r6MVcSeWw1NZNTNBMzBCvlJGO+RyLfJyGSQBU4DBWRD6qui2MkUbofjuXrb13lgCuYrZ2j313bc61bibWSOFuTU/xCwqFm176V9xxl59sf35Wr264tTXlrsQEVAo1AL+aJCw7qj67V7djJsRf9yRxrv0F9leXK1n0K+E3tHDmK2X/mP8veMqoNSVvH7bma0kGmkL2Kw94VRGuUTRpPspf8TV2rpKNyzBk= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 Sep 2022 22:01:32.7872 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: f8d82985-dd77-467a-8509-08da9a8a8394 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: BN8NAM11FT109.eop-nam11.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL1PR12MB5285 Precedence: Bulk List-Unsubscribe: List-Subscribe: List-Help: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,jbrasen@nvidia.com X-Gm-Message-State: gT0kuiiMBEgOon1iWqUHRrL2x1787277AA= Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1663624896; bh=hAT1i8h6IzWsugTcFvdWTQT18AhPFgs6MH2fcNImiRg=; h=CC:Content-Type:Date:From:Reply-To:Subject:To; b=X7DYbipzzPUV3XSyQPwQyRBUntYGcjM84Z7vIv2tQT99hFsE8ciRc3Ju+kI52VuMOJZ bsdHUN+ouBCrK3GK9hRtxt1wboPTg8sRmvjUq+dbpj+4XnWubzTQzMB0k9msctK4Z3Z31 pmyqAT42utPB6Fjx1eHCzMD2JKKBYKJ3BZE= X-ZohoMail-DKIM: pass (identity @groups.io) X-ZM-MESSAGEID: 1663624896903100002 Content-Type: text/plain; charset="utf-8" _CPC entries can describe CPU performance information. The object is described in ACPI 6.4 s8.4.7.1. "_CPC (Continuous Performance Control)". Add AmlCreateCpcNode() helper function to add _CPC entries to an existing CPU object. Signed-off-by: Jeff Brasen Reviewed-by: Pierre Gondois --- .../Include/Library/AmlLib/AmlLib.h | 54 ++ .../Common/AmlLib/CodeGen/AmlCodeGen.c | 476 ++++++++++++++++++ 2 files changed, 530 insertions(+) diff --git a/DynamicTablesPkg/Include/Library/AmlLib/AmlLib.h b/DynamicTabl= esPkg/Include/Library/AmlLib/AmlLib.h index 39968660f2..ebaccba811 100644 --- a/DynamicTablesPkg/Include/Library/AmlLib/AmlLib.h +++ b/DynamicTablesPkg/Include/Library/AmlLib/AmlLib.h @@ -37,6 +37,7 @@ */ =20 #include +#include =20 #ifndef AML_HANDLE =20 @@ -1336,6 +1337,59 @@ AmlAddNameIntegerPackage ( IN AML_OBJECT_NODE_HANDLE PackageNode ); =20 +/** Create a _CPC node. + + Creates and optionally adds the following node + Name(_CPC, Package() + { + NumEntries, // Integer + Revision, // Integer + HighestPerformance, // Integer or Buffer (Resourc= e Descriptor) + NominalPerformance, // Integer or Buffer (Resourc= e Descriptor) + LowestNonlinearPerformance, // Integer or Buffer (Resourc= e Descriptor) + LowestPerformance, // Integer or Buffer (Resourc= e Descriptor) + GuaranteedPerformanceRegister, // Buffer (Resource Descripto= r) + DesiredPerformanceRegister , // Buffer (Resource Descripto= r) + MinimumPerformanceRegister , // Buffer (Resource Descripto= r) + MaximumPerformanceRegister , // Buffer (Resource Descripto= r) + PerformanceReductionToleranceRegister, // Buffer (Resource Descripto= r) + TimeWindowRegister, // Buffer (Resource Descripto= r) + CounterWraparoundTime, // Integer or Buffer (Resourc= e Descriptor) + ReferencePerformanceCounterRegister, // Buffer (Resource Descripto= r) + DeliveredPerformanceCounterRegister, // Buffer (Resource Descripto= r) + PerformanceLimitedRegister, // Buffer (Resource Descripto= r) + CPPCEnableRegister // Buffer (Resource Descripto= r) + AutonomousSelectionEnable, // Integer or Buffer (Resourc= e Descriptor) + AutonomousActivityWindowRegister, // Buffer (Resource Descripto= r) + EnergyPerformancePreferenceRegister, // Buffer (Resource Descripto= r) + ReferencePerformance // Integer or Buffer (Resourc= e Descriptor) + LowestFrequency, // Integer or Buffer (Resourc= e Descriptor) + NominalFrequency // Integer or Buffer (Resourc= e Descriptor) + }) + + If resource buffer is NULL then integer will be used. + + Cf. ACPI 6.4, s8.4.7.1 _CPC (Continuous Performance Control) + + @ingroup CodeGenApis + + @param [in] CpcInfo CpcInfo object + @param [in] ParentNode If provided, set ParentNode as the pa= rent + of the node created. + @param [out] NewCpcNode If success and provided, contains the= created node. + + @retval EFI_SUCCESS The function completed successfully. + @retval EFI_INVALID_PARAMETER Invalid parameter. + @retval EFI_OUT_OF_RESOURCES Failed to allocate memory. +**/ +EFI_STATUS +EFIAPI +AmlCreateCpcNode ( + IN AML_CPC_INFO *CpcInfo, + IN AML_NODE_HANDLE ParentNode OPTIONAL, + OUT AML_OBJECT_NODE_HANDLE *NewCpcNode OPTIONAL + ); + // DEPRECATED APIS #ifndef DISABLE_NEW_DEPRECATED_INTERFACES =20 diff --git a/DynamicTablesPkg/Library/Common/AmlLib/CodeGen/AmlCodeGen.c b/= DynamicTablesPkg/Library/Common/AmlLib/CodeGen/AmlCodeGen.c index 5fb39d077b..fc85c467ec 100644 --- a/DynamicTablesPkg/Library/Common/AmlLib/CodeGen/AmlCodeGen.c +++ b/DynamicTablesPkg/Library/Common/AmlLib/CodeGen/AmlCodeGen.c @@ -14,6 +14,7 @@ #include #include #include +#include #include #include #include @@ -2850,3 +2851,478 @@ error_handler: =20 return Status; } + +/** Adds a register to the package + + @ingroup CodeGenApis + + @param [in] Register If provided, register that will be added to pa= ckage. + otherwise NULL register will be added + @param [in] PackageNode Package to add value to + + @retval EFI_SUCCESS The function completed successfully. + @retval EFI_INVALID_PARAMETER Invalid parameter. + @retval EFI_OUT_OF_RESOURCES Failed to allocate memory. +**/ +STATIC +EFI_STATUS +EFIAPI +AmlAddRegisterToPackage ( + IN EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE *Register OPTIONAL, + IN AML_OBJECT_NODE_HANDLE PackageNode + ) +{ + EFI_STATUS Status; + AML_DATA_NODE_HANDLE RdNode; + AML_OBJECT_NODE_HANDLE ResourceTemplateNode; + + RdNode =3D NULL; + + Status =3D AmlCodeGenResourceTemplate (&ResourceTemplateNode); + if (EFI_ERROR (Status)) { + ASSERT_EFI_ERROR (Status); + return Status; + } + + if (Register !=3D NULL) { + Status =3D AmlCodeGenRdRegister ( + Register->AddressSpaceId, + Register->RegisterBitWidth, + Register->RegisterBitOffset, + Register->Address, + Register->AccessSize, + NULL, + &RdNode + ); + } else { + Status =3D AmlCodeGenRdRegister ( + EFI_ACPI_6_4_SYSTEM_MEMORY, + 0, + 0, + 0, + 0, + NULL, + &RdNode + ); + } + + if (EFI_ERROR (Status)) { + ASSERT_EFI_ERROR (Status); + goto error_handler; + } + + Status =3D AmlAppendRdNode (ResourceTemplateNode, RdNode); + if (EFI_ERROR (Status)) { + ASSERT_EFI_ERROR (Status); + goto error_handler; + } + + RdNode =3D NULL; + + Status =3D AmlVarListAddTail ( + (AML_NODE_HANDLE)PackageNode, + (AML_NODE_HANDLE)ResourceTemplateNode + ); + if (EFI_ERROR (Status)) { + ASSERT_EFI_ERROR (Status); + goto error_handler; + } + + return Status; + +error_handler: + if (RdNode !=3D NULL) { + AmlDeleteTree ((AML_NODE_HANDLE)RdNode); + } + + if (ResourceTemplateNode !=3D NULL) { + AmlDeleteTree ((AML_NODE_HANDLE)ResourceTemplateNode); + } + + return Status; +} + +/** Utility function to check if generic address points to NULL + + @param [in] Address Pointer to the Generic address + + @retval TRUE Address is system memory with an Address of 0. + @retval FALSE Address does not point to NULL. +**/ +STATIC +BOOLEAN +EFIAPI +IsNullGenericAddress ( + IN EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE *Address + ) +{ + if ((Address =3D=3D NULL) || + ((Address->AddressSpaceId =3D=3D EFI_ACPI_6_4_SYSTEM_MEMORY) && + (Address->Address =3D=3D 0x0))) + { + return TRUE; + } + + return FALSE; +} + +/** Adds an integer or register to the package + + @ingroup CodeGenApis + + @param [in] Register If provided, register that will be added to pa= ckage + @param [in] Integer If Register is NULL, integer that will be adde= d to the package + @param [in] PackageNode Package to add value to + + @retval EFI_SUCCESS The function completed successfully. + @retval EFI_INVALID_PARAMETER Invalid parameter. + @retval EFI_OUT_OF_RESOURCES Failed to allocate memory. +**/ +STATIC +EFI_STATUS +EFIAPI +AmlAddRegisterOrIntegerToPackage ( + IN EFI_ACPI_6_4_GENERIC_ADDRESS_STRUCTURE *Register OPTIONAL, + IN UINT32 Integer, + IN AML_OBJECT_NODE_HANDLE PackageNode + ) +{ + EFI_STATUS Status; + AML_OBJECT_NODE_HANDLE IntegerNode; + + IntegerNode =3D NULL; + + if ((Register !=3D NULL) && !IsNullGenericAddress (Register)) { + Status =3D AmlAddRegisterToPackage (Register, PackageNode); + } else { + Status =3D AmlCodeGenInteger (Integer, &IntegerNode); + if (EFI_ERROR (Status)) { + ASSERT_EFI_ERROR (Status); + return Status; + } + + Status =3D AmlVarListAddTail ( + (AML_NODE_HANDLE)PackageNode, + (AML_NODE_HANDLE)IntegerNode + ); + } + + if (EFI_ERROR (Status)) { + ASSERT_EFI_ERROR (Status); + if (IntegerNode !=3D NULL) { + AmlDeleteTree ((AML_NODE_HANDLE)IntegerNode); + } + } + + return Status; +} + +/** Create a _CPC node. + + Creates and optionally adds the following node + Name(_CPC, Package() + { + NumEntries, // Integer + Revision, // Integer + HighestPerformance, // Integer or Buffer (Resourc= e Descriptor) + NominalPerformance, // Integer or Buffer (Resourc= e Descriptor) + LowestNonlinearPerformance, // Integer or Buffer (Resourc= e Descriptor) + LowestPerformance, // Integer or Buffer (Resourc= e Descriptor) + GuaranteedPerformanceRegister, // Buffer (Resource Descripto= r) + DesiredPerformanceRegister , // Buffer (Resource Descripto= r) + MinimumPerformanceRegister , // Buffer (Resource Descripto= r) + MaximumPerformanceRegister , // Buffer (Resource Descripto= r) + PerformanceReductionToleranceRegister, // Buffer (Resource Descripto= r) + TimeWindowRegister, // Buffer (Resource Descripto= r) + CounterWraparoundTime, // Integer or Buffer (Resourc= e Descriptor) + ReferencePerformanceCounterRegister, // Buffer (Resource Descripto= r) + DeliveredPerformanceCounterRegister, // Buffer (Resource Descripto= r) + PerformanceLimitedRegister, // Buffer (Resource Descripto= r) + CPPCEnableRegister // Buffer (Resource Descripto= r) + AutonomousSelectionEnable, // Integer or Buffer (Resourc= e Descriptor) + AutonomousActivityWindowRegister, // Buffer (Resource Descripto= r) + EnergyPerformancePreferenceRegister, // Buffer (Resource Descripto= r) + ReferencePerformance // Integer or Buffer (Resourc= e Descriptor) + LowestFrequency, // Integer or Buffer (Resourc= e Descriptor) + NominalFrequency // Integer or Buffer (Resourc= e Descriptor) + }) + + If resource buffer is NULL then integer will be used. + + Cf. ACPI 6.4, s8.4.7.1 _CPC (Continuous Performance Control) + + @ingroup CodeGenApis + + @param [in] CpcInfo CpcInfo object + @param [in] ParentNode If provided, set ParentNode as the pa= rent + of the node created. + @param [out] NewCpcNode If success and provided, contains the= created node. + + @retval EFI_SUCCESS The function completed successfully. + @retval EFI_INVALID_PARAMETER Invalid parameter. + @retval EFI_OUT_OF_RESOURCES Failed to allocate memory. +**/ +EFI_STATUS +EFIAPI +AmlCreateCpcNode ( + IN AML_CPC_INFO *CpcInfo, + IN AML_NODE_HANDLE ParentNode OPTIONAL, + OUT AML_OBJECT_NODE_HANDLE *NewCpcNode OPTIONAL + ) +{ + EFI_STATUS Status; + AML_OBJECT_NODE_HANDLE CpcNode; + AML_OBJECT_NODE_HANDLE CpcPackage; + UINT32 NumberOfEntries; + + if ((CpcInfo =3D=3D NULL) || + ((ParentNode =3D=3D NULL) && (NewCpcNode =3D=3D NULL))) + { + ASSERT (0); + return EFI_INVALID_PARAMETER; + } + + // Revision 3 per ACPI 6.4 specification + if (CpcInfo->Revision =3D=3D 3) { + // NumEntries 23 per ACPI 6.4 specification + NumberOfEntries =3D 23; + } else { + ASSERT (0); + return EFI_INVALID_PARAMETER; + } + + if ((CpcInfo =3D=3D NULL) || + (IsNullGenericAddress (&CpcInfo->HighestPerformanceBuffer) && + (CpcInfo->HighestPerformanceInteger =3D=3D 0)) || + (IsNullGenericAddress (&CpcInfo->NominalPerformanceBuffer) && + (CpcInfo->NominalPerformanceInteger =3D=3D 0)) || + (IsNullGenericAddress (&CpcInfo->LowestNonlinearPerformanceBuffer) && + (CpcInfo->LowestNonlinearPerformanceInteger =3D=3D 0)) || + (IsNullGenericAddress (&CpcInfo->LowestPerformanceBuffer) && + (CpcInfo->LowestPerformanceInteger =3D=3D 0)) || + IsNullGenericAddress (&CpcInfo->DesiredPerformanceRegister) || + IsNullGenericAddress (&CpcInfo->ReferencePerformanceCounterRegister)= || + IsNullGenericAddress (&CpcInfo->DeliveredPerformanceCounterRegister)= || + IsNullGenericAddress (&CpcInfo->PerformanceLimitedRegister)) + { + ASSERT (0); + return EFI_INVALID_PARAMETER; + } + + CpcPackage =3D NULL; + + Status =3D AmlCodeGenNamePackage ("_CPC", NULL, &CpcNode); + if (EFI_ERROR (Status)) { + ASSERT_EFI_ERROR (Status); + return Status; + } + + // Get the Package object node of the _CPC node, + // which is the 2nd fixed argument (i.e. index 1). + CpcPackage =3D (AML_OBJECT_NODE_HANDLE)AmlGetFixedArgument ( + CpcNode, + EAmlParseIndexTerm1 + ); + if ((CpcPackage =3D=3D NULL) = || + (AmlGetNodeType ((AML_NODE_HANDLE)CpcPackage) !=3D EAmlNodeObject) = || + (!AmlNodeHasOpCode (CpcPackage, AML_PACKAGE_OP, 0))) + { + ASSERT (0); + Status =3D EFI_INVALID_PARAMETER; + goto error_handler; + } + + Status =3D AmlAddRegisterOrIntegerToPackage ( + NULL, + NumberOfEntries, + CpcPackage + ); + if (EFI_ERROR (Status)) { + ASSERT_EFI_ERROR (Status); + goto error_handler; + } + + Status =3D AmlAddRegisterOrIntegerToPackage ( + NULL, + CpcInfo->Revision, + CpcPackage + ); + if (EFI_ERROR (Status)) { + ASSERT_EFI_ERROR (Status); + goto error_handler; + } + + Status =3D AmlAddRegisterOrIntegerToPackage ( + &CpcInfo->HighestPerformanceBuffer, + CpcInfo->HighestPerformanceInteger, + CpcPackage + ); + if (EFI_ERROR (Status)) { + ASSERT_EFI_ERROR (Status); + goto error_handler; + } + + Status =3D AmlAddRegisterOrIntegerToPackage ( + &CpcInfo->NominalPerformanceBuffer, + CpcInfo->NominalPerformanceInteger, + CpcPackage + ); + if (EFI_ERROR (Status)) { + ASSERT_EFI_ERROR (Status); + goto error_handler; + } + + Status =3D AmlAddRegisterOrIntegerToPackage ( + &CpcInfo->LowestNonlinearPerformanceBuffer, + CpcInfo->LowestNonlinearPerformanceInteger, + CpcPackage + ); + if (EFI_ERROR (Status)) { + ASSERT_EFI_ERROR (Status); + goto error_handler; + } + + Status =3D AmlAddRegisterOrIntegerToPackage ( + &CpcInfo->LowestPerformanceBuffer, + CpcInfo->LowestPerformanceInteger, + CpcPackage + ); + if (EFI_ERROR (Status)) { + ASSERT_EFI_ERROR (Status); + goto error_handler; + } + + Status =3D AmlAddRegisterToPackage (&CpcInfo->GuaranteedPerformanceRegis= ter, CpcPackage); + if (EFI_ERROR (Status)) { + ASSERT_EFI_ERROR (Status); + goto error_handler; + } + + Status =3D AmlAddRegisterToPackage (&CpcInfo->DesiredPerformanceRegister= , CpcPackage); + if (EFI_ERROR (Status)) { + ASSERT_EFI_ERROR (Status); + goto error_handler; + } + + Status =3D AmlAddRegisterToPackage (&CpcInfo->MinimumPerformanceRegister= , CpcPackage); + if (EFI_ERROR (Status)) { + ASSERT_EFI_ERROR (Status); + goto error_handler; + } + + Status =3D AmlAddRegisterToPackage (&CpcInfo->MaximumPerformanceRegister= , CpcPackage); + if (EFI_ERROR (Status)) { + ASSERT_EFI_ERROR (Status); + goto error_handler; + } + + Status =3D AmlAddRegisterToPackage (&CpcInfo->PerformanceReductionTolera= nceRegister, CpcPackage); + if (EFI_ERROR (Status)) { + ASSERT_EFI_ERROR (Status); + goto error_handler; + } + + Status =3D AmlAddRegisterToPackage (&CpcInfo->TimeWindowRegister, CpcPac= kage); + if (EFI_ERROR (Status)) { + ASSERT_EFI_ERROR (Status); + goto error_handler; + } + + Status =3D AmlAddRegisterOrIntegerToPackage ( + &CpcInfo->CounterWraparoundTimeBuffer, + CpcInfo->CounterWraparoundTimeInteger, + CpcPackage + ); + if (EFI_ERROR (Status)) { + ASSERT_EFI_ERROR (Status); + goto error_handler; + } + + Status =3D AmlAddRegisterToPackage (&CpcInfo->ReferencePerformanceCounte= rRegister, CpcPackage); + if (EFI_ERROR (Status)) { + ASSERT_EFI_ERROR (Status); + goto error_handler; + } + + Status =3D AmlAddRegisterToPackage (&CpcInfo->DeliveredPerformanceCounte= rRegister, CpcPackage); + if (EFI_ERROR (Status)) { + ASSERT_EFI_ERROR (Status); + goto error_handler; + } + + Status =3D AmlAddRegisterToPackage (&CpcInfo->PerformanceLimitedRegister= , CpcPackage); + if (EFI_ERROR (Status)) { + ASSERT_EFI_ERROR (Status); + goto error_handler; + } + + Status =3D AmlAddRegisterToPackage (&CpcInfo->CPPCEnableRegister, CpcPac= kage); + if (EFI_ERROR (Status)) { + ASSERT_EFI_ERROR (Status); + goto error_handler; + } + + Status =3D AmlAddRegisterOrIntegerToPackage ( + &CpcInfo->AutonomousSelectionEnableBuffer, + CpcInfo->AutonomousSelectionEnableInteger, + CpcPackage + ); + if (EFI_ERROR (Status)) { + ASSERT_EFI_ERROR (Status); + goto error_handler; + } + + Status =3D AmlAddRegisterToPackage (&CpcInfo->AutonomousActivityWindowRe= gister, CpcPackage); + if (EFI_ERROR (Status)) { + ASSERT_EFI_ERROR (Status); + goto error_handler; + } + + Status =3D AmlAddRegisterToPackage (&CpcInfo->EnergyPerformancePreferenc= eRegister, CpcPackage); + if (EFI_ERROR (Status)) { + ASSERT_EFI_ERROR (Status); + goto error_handler; + } + + Status =3D AmlAddRegisterOrIntegerToPackage ( + &CpcInfo->ReferencePerformanceBuffer, + CpcInfo->ReferencePerformanceInteger, + CpcPackage + ); + if (EFI_ERROR (Status)) { + ASSERT_EFI_ERROR (Status); + goto error_handler; + } + + Status =3D AmlAddRegisterOrIntegerToPackage ( + &CpcInfo->LowestFrequencyBuffer, + CpcInfo->LowestFrequencyInteger, + CpcPackage + ); + if (EFI_ERROR (Status)) { + ASSERT_EFI_ERROR (Status); + goto error_handler; + } + + Status =3D AmlAddRegisterOrIntegerToPackage ( + &CpcInfo->NominalFrequencyBuffer, + CpcInfo->NominalFrequencyInteger, + CpcPackage + ); + if (EFI_ERROR (Status)) { + ASSERT_EFI_ERROR (Status); + goto error_handler; + } + + Status =3D LinkNode (CpcNode, ParentNode, NewCpcNode); + if (EFI_ERROR (Status)) { + ASSERT_EFI_ERROR (Status); + goto error_handler; + } + + return Status; + +error_handler: + AmlDeleteTree ((AML_NODE_HANDLE)CpcNode); + return Status; +} --=20 2.25.1 -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#93968): https://edk2.groups.io/g/devel/message/93968 Mute This Topic: https://groups.io/mt/93792018/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- From nobody Thu May 9 11:54:47 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce+27952+93970+1787277+3901457@groups.io; arc=fail (BodyHash is different from the expected one) Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by mx.zohomail.com with SMTPS id 1663624897735350.7512066412172; Mon, 19 Sep 2022 15:01:37 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id YsIpYY1788612x3tyZC29Yt7; Mon, 19 Sep 2022 15:01:37 -0700 X-Received: from NAM04-DM6-obe.outbound.protection.outlook.com (NAM04-DM6-obe.outbound.protection.outlook.com [40.107.102.83]) by mx.groups.io with SMTP id smtpd.web12.5062.1663624896659048645 for ; Mon, 19 Sep 2022 15:01:36 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=OvDCKUPY98eXdxO9TFsr8i8Tr2Xq8y+Tx4PZFPlmh0fSVp414iQUqjxfDNJY4YJMKGKywJD6pX7XEOuf40T2rAdTawfmsDBbQ0juiYcxqTIr1MLGTZOYBAhMccm4jhY/rbbo5nEHYOq6vcebj3BS1tg6MAJxz6aN0Q22/hc5/LNASNaFhHMX7+wk7GYsYdvKi45IE99Up5a2TlrTUy1kHyydW5YDkCHzySWjIwwRQ9imFzt2Qt07JNeFA80UJQ/taozJMV5DKicGsARah3giTpm0K1e2JlFZUaSAq/O8Y6hBR8CcDzFSEW8WJjW5OUqonzWv9cyfSVcLK3GidyFrYw== 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=o29N+fsz4FJVamCJ5J0XJneZ5mWurTTSj6LNAFuc2AY=; b=RiGt1vw/b1BGK+CoyGNdskCzijHxsi+mAdHzVpmRcY6zWW8G0gIooBGK9D1UdDz5J34wAUx6kvhv+PLmBs7+NrPt86CHTVmU+QpXZxOP574DJ7K5CpHoMKS4Tw7ZjmV4HE6GmVrOA6vqB+kG33fJcMZioaNicYqBvuzwlUH0r8+dIz+qD59BQ+MYf2HEb9qKjrt4A2x2jRSSyrjBLCJ31eKfIA+eng098CDpIzSjYtIrEp3dZBUrQGsTTrttCA6kMeXClBukYxTWEQE6a9uwaLCPAfE9nbaJIW3mqGI/p2D4Plx0MTwBo7pbOtPi6NfO3OLLSldlqhb3+0sryNRTdQ== 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 X-Received: from BN9PR03CA0405.namprd03.prod.outlook.com (2603:10b6:408:111::20) by SA1PR12MB7151.namprd12.prod.outlook.com (2603:10b6:806:2b1::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5632.19; Mon, 19 Sep 2022 22:01:33 +0000 X-Received: from BN8NAM11FT039.eop-nam11.prod.protection.outlook.com (2603:10b6:408:111:cafe::78) by BN9PR03CA0405.outlook.office365.com (2603:10b6:408:111::20) 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:33 +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 (zohomail.com: domain of groups.io designates 66.175.222.108 as permitted sender) client-ip=66.175.222.108; envelope-from=bounce+27952+93970+1787277+3901457@groups.io; helo=mail02.groups.io; 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 X-Received: from mail.nvidia.com (216.228.117.161) by BN8NAM11FT039.mail.protection.outlook.com (10.13.177.169) 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:33 +0000 X-Received: from rnnvmail201.nvidia.com (10.129.68.8) 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:19 -0700 X-Received: from drhqmail202.nvidia.com (10.126.190.181) by rnnvmail201.nvidia.com (10.129.68.8) 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:19 -0700 X-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:18 -0700 X-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:18 -0700 From: "Jeff Brasen via groups.io" To: CC: , , , , , Jeff Brasen Subject: [edk2-devel] [PATCH v4 3/3] DynamicTablesPkg: SSDT CPU _CPC generator Date: Mon, 19 Sep 2022 16:01:11 -0600 Message-ID: <7bd8126e9f99e06fe0dc647e00e1a955856db018.1663624166.git.jbrasen@nvidia.com> In-Reply-To: References: MIME-Version: 1.0 X-NVConfidentiality: public X-EOPAttributedMessage: 0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BN8NAM11FT039:EE_|SA1PR12MB7151:EE_ X-MS-Office365-Filtering-Correlation-Id: bd37e3be-4973-410d-2c66-08da9a8a83d8 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Message-Info: mtzBxaENVAIFx8+RDmNnSG0ySd/S/6YuZ3l9/1PcppusFVgQ6hzpHqh39GO87E6qXkVM3xAK+OKMCT0O6hayQhesE4gtUw/v2qaP3vXo9W9WXO4xOo4k/7aDcIVhWfmCGjo3PRIh8r3UVLzs8eaHMt1ABnbw4evPvzcxZjRJxJpU8lC/oan7tTuSbupBb3z/+lhccEZPtCydZYN8WjJtmZskm4T/ukBfJk05V2d8fxbpc+rHuJG6+G5wz9/kXPWGq/eeJEcSYPshxX1ca6s4Dv6KAUf+zoG7GUAODrr1k/bYgOxSngT/0I9TJUdT4UHz0wVZKahfWjU3RvmWDSJOz/xHwWs+7aFH9MkavbQ6WH4N/q3k/EaFwjy806CmksB0NuG2Eh/VnjMh4q9nAdjJtPrEmt4VbP5ZlhIyxMplzXv11hNF0XVNR3i9dLLuMFNAThKFSbxuu2ek2nv+Fw3Wcz21KTAYCN42gPkTfezcp084mmKbkS6LJ72dYINEvdEZW/VWvR9aMXa+9l3njJTvYscqQ2jNDiOZO8tGTgGgauJHqg7F2w2gPmHXy/P1+zxU9BQGCRvRrRmKmuFGnruRaacOKDDiPsEyn7tVV+TQMOuGQfz3iN93FV/sTxQ3LeiZ1HFE6BvR11IyKHK9/9rkm32uSHn8PsWjOkYWCdc02xS6qPZyPEeRyTUyiXkCLm8iRpYmTBQB8rpgZQ2lH1wMlR6nI8tWu/kFnJU3/VYJhHh05wwzzh12MayTu7MF/Hj9H5Gr5HYnhgHvTNbgQBjocw== X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 19 Sep 2022 22:01:33.2305 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: bd37e3be-4973-410d-2c66-08da9a8a83d8 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: BN8NAM11FT039.eop-nam11.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA1PR12MB7151 Precedence: Bulk List-Unsubscribe: List-Subscribe: List-Help: Sender: devel@edk2.groups.io List-Id: Mailing-List: list devel@edk2.groups.io; contact devel+owner@edk2.groups.io Reply-To: devel@edk2.groups.io,jbrasen@nvidia.com X-Gm-Message-State: dm93wz8uiyyvBCbtGshmf1x5x1787277AA= Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1663624897; bh=DfqF5NAZJBBrNXrX7aqCzi21qNYkGhES9fu3tXSTCIg=; h=CC:Content-Type:Date:From:Reply-To:Subject:To; b=fmUtfTxzZ4FyYXCE4liQfc2qC0KPi+UBxy9ccoxJePCDQWaNKqpMZVz5fg7dzVk/ZN+ ShT3au0pQU9m2ELyQulolCOh9OlvYlmNfS+Tw7BazPWHL5k/27XGgnUO6KXFVO8OWiyph OkVLGushjCIfkR+SyLXnH5/hucKFRf2UnPM= X-ZohoMail-DKIM: pass (identity @groups.io) X-ZM-MESSAGEID: 1663624898859100005 Content-Type: text/plain; charset="utf-8" Add code to use a token attached to GICC to generate _CPC object on cpus. Signed-off-by: Jeff Brasen --- .../SsdtCpuTopologyGenerator.c | 133 +++++++++++++++++- 1 file changed, 127 insertions(+), 6 deletions(-) diff --git a/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtCpuTopologyLibArm/Ss= dtCpuTopologyGenerator.c b/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtCpuTop= ologyLibArm/SsdtCpuTopologyGenerator.c index 8561f48e1f..22422aef75 100644 --- a/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtCpuTopologyLibArm/SsdtCpuTo= pologyGenerator.c +++ b/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtCpuTopologyLibArm/SsdtCpuTo= pologyGenerator.c @@ -76,6 +76,16 @@ GET_OBJECT_LIST ( CM_ARM_LPI_INFO ); =20 +/** + This macro expands to a function that retrieves the CPC + information from the Configuration Manager. +*/ +GET_OBJECT_LIST ( + EObjNameSpaceArm, + EArmObjCpcInfo, + CM_ARM_CPC_INFO + ); + /** Initialize the TokenTable. =20 One entry should be allocated for each CM_ARM_PROC_HIERARCHY_INFO @@ -229,6 +239,93 @@ WriteAslName ( return EFI_SUCCESS; } =20 +/** Create and add an _CPC Node to Cpu Node. + + For instance, transform an AML node from: + Device (C002) + { + Name (_UID, 2) + Name (_HID, "ACPI0007") + } + + To: + Device (C002) + { + Name (_UID, 2) + Name (_HID, "ACPI0007") + Name(_CPC, Package() + { + NumEntries, // Integer + Revision, // Integer + HighestPerformance, // Integer or Buffer (Res= ource Descriptor) + NominalPerformance, // Integer or Buffer (Res= ource Descriptor) + LowestNonlinearPerformance, // Integer or Buffer (Res= ource Descriptor) + LowestPerformance, // Integer or Buffer (Res= ource Descriptor) + GuaranteedPerformanceRegister, // Buffer (Resource Descr= iptor) + DesiredPerformanceRegister , // Buffer (Resource Descr= iptor) + MinimumPerformanceRegister , // Buffer (Resource Descr= iptor) + MaximumPerformanceRegister , // Buffer (Resource Descr= iptor) + PerformanceReductionToleranceRegister, // Buffer (Resource Descr= iptor) + TimeWindowRegister, // Buffer (Resource Descr= iptor) + CounterWraparoundTime, // Integer or Buffer (Res= ource Descriptor) + ReferencePerformanceCounterRegister, // Buffer (Resource Descr= iptor) + DeliveredPerformanceCounterRegister, // Buffer (Resource Descr= iptor) + PerformanceLimitedRegister, // Buffer (Resource Descr= iptor) + CPPCEnableRegister // Buffer (Resource Descr= iptor) + AutonomousSelectionEnable, // Integer or Buffer (Res= ource Descriptor) + AutonomousActivityWindowRegister, // Buffer (Resource Descr= iptor) + EnergyPerformancePreferenceRegister, // Buffer (Resource Descr= iptor) + ReferencePerformance // Integer or Buffer (Res= ource Descriptor) + LowestFrequency, // Integer or Buffer (Res= ource Descriptor) + NominalFrequency // Integer or Buffer (Res= ource Descriptor) + }) + } + + @param [in] Generator The SSDT Cpu Topology generator. + @param [in] CfgMgrProtocol Pointer to the Configuration Manager + Protocol Interface. + @param [in] ProcHierarchyNodeInfo CM_ARM_PROC_HIERARCHY_INFO describing + the Cpu. + @param [in] Node CPU Node to which the _CPC node is + attached. + + @retval EFI_SUCCESS The function completed successfully. + @retval EFI_INVALID_PARAMETER Invalid parameter. + @retval EFI_OUT_OF_RESOURCES Failed to allocate memory. +**/ +STATIC +EFI_STATUS +EFIAPI +CreateAmlCpcNode ( + IN ACPI_CPU_TOPOLOGY_GENERATOR *Generator, + IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL *CONST CfgMgrProtocol, + IN CM_ARM_GICC_INFO *GicCInfo, + IN AML_OBJECT_NODE_HANDLE *Node + ) +{ + EFI_STATUS Status; + CM_ARM_CPC_INFO *CpcInfo; + + Status =3D GetEArmObjCpcInfo ( + CfgMgrProtocol, + GicCInfo->CpcToken, + &CpcInfo, + NULL + ); + if (EFI_ERROR (Status)) { + ASSERT (0); + return Status; + } + + Status =3D AmlCreateCpcNode ( + CpcInfo, + Node, + NULL + ); + ASSERT_EFI_ERROR (Status); + return Status; +} + /** Create and add an _LPI method to Cpu/Cluster Node. =20 For instance, transform an AML node from: @@ -581,7 +678,20 @@ CreateAmlCpuFromProcHierarchy ( // CM_ARM_PROC_HIERARCHY_INFO, create an _LPI method returning them. if (ProcHierarchyNodeInfo->LpiToken !=3D CM_NULL_TOKEN) { Status =3D CreateAmlLpiMethod (Generator, ProcHierarchyNodeInfo, CpuNo= de); - ASSERT_EFI_ERROR (Status); + if (EFI_ERROR (Status)) { + ASSERT_EFI_ERROR (Status); + return Status; + } + } + + // If a CPC info is associated with the + // GicCinfo, create an _CPC method returning them. + if (GicCInfo->CpcToken !=3D CM_NULL_TOKEN) { + Status =3D CreateAmlCpcNode (Generator, CfgMgrProtocol, GicCInfo, CpuN= ode); + if (EFI_ERROR (Status)) { + ASSERT_EFI_ERROR (Status); + return Status; + } } =20 return Status; @@ -934,10 +1044,11 @@ CreateTopologyFromGicC ( IN AML_OBJECT_NODE_HANDLE ScopeNode ) { - EFI_STATUS Status; - CM_ARM_GICC_INFO *GicCInfo; - UINT32 GicCInfoCount; - UINT32 Index; + EFI_STATUS Status; + CM_ARM_GICC_INFO *GicCInfo; + UINT32 GicCInfoCount; + UINT32 Index; + AML_OBJECT_NODE_HANDLE CpuNode; =20 ASSERT (Generator !=3D NULL); ASSERT (CfgMgrProtocol !=3D NULL); @@ -961,12 +1072,22 @@ CreateTopologyFromGicC ( ScopeNode, &GicCInfo[Index], Index, - NULL + &CpuNode ); if (EFI_ERROR (Status)) { ASSERT (0); break; } + + // If a CPC info is associated with the + // GicCinfo, create an _CPC method returning them. + if (GicCInfo->CpcToken !=3D CM_NULL_TOKEN) { + Status =3D CreateAmlCpcNode (Generator, CfgMgrProtocol, &GicCInfo[In= dex], CpuNode); + if (EFI_ERROR (Status)) { + ASSERT_EFI_ERROR (Status); + break; + } + } } // for =20 return Status; --=20 2.25.1 -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#93970): https://edk2.groups.io/g/devel/message/93970 Mute This Topic: https://groups.io/mt/93792020/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-=3D-