From nobody Sat Feb 7 08:13:52 2026 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+93436+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 1662563732349940.4950404069872; Wed, 7 Sep 2022 08:15:32 -0700 (PDT) Return-Path: X-Received: by 127.0.0.2 with SMTP id oMggYY1788612xaib1UpvoiQ; Wed, 07 Sep 2022 08:15:32 -0700 X-Received: from NAM02-SN1-obe.outbound.protection.outlook.com (NAM02-SN1-obe.outbound.protection.outlook.com [40.107.96.67]) by mx.groups.io with SMTP id smtpd.web09.8991.1662563731035541897 for ; Wed, 07 Sep 2022 08:15:31 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=PQTV2dhldBDyjhKXhazV5/r+21xaN4iL7hGcp8Hnm5Wcq4wSYwBEhwgxaiy0uxYiCMnV0FdMgF3atCopLu6TFxb10DjS7tcFa1DPMEsLTiQ+5RjA7dcyG2tbDWb/vHC5reF9lvlBkGCWCHIqrZ9Mx/v/nwAIpGdJPOPbdzJU5Df7c/nTsNC+MBqDF6sjhXqAQ2rU4HpiFHYBbah3xVn7wsmlLLQfZ8n6bRFtxQ8BCpqST2b/kYk4wbQzwn9zD1whF0o5N4G5tdw72H6RtizDMO0UfcybqKxX9G8dx2TK3PfYGETrt1jP9bs3tZGqfURWoOriXEKX4ea73fkNscDesA== 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=DQhSrPt0vyZAvXKR2TuWO9+uVAl8MNaAuMc4UbKgL4M=; b=aS2kK3zDrwA4ht7uNywDPetpRGQr3HFGKZGaSulYK27obUi7mgIatcWikVgQ7dg6Fib67EyI6KkpYuIGR7pZzJ+m6cI1WAGfBj3VBGbxvx+UyfK4xwJwqFSShb3Ju3VMwyzbpYYLyyh7aHg8Yrp7ZZKmvYeOyE7Y/ObF2BNpoBFY7aZUXncL7VSnWNK58NS85lgE/Jgzr/c2WWFX5Dql7SFNcV0++7NdL5OxuAzsplZQ/moBfAYY7CyyvEP8+OihX101JOqypf3r1fKYMIEcJ6Jdb+XirUVY3GdmustpSlopxqLxmBcO8tGLLJCer+SuUJF+WmfksnVk99RCPWsVpg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass (sender ip is 12.22.5.235) smtp.rcpttodomain=arm.com 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 MW4PR03CA0107.namprd03.prod.outlook.com (2603:10b6:303:b7::22) by DM6PR12MB4220.namprd12.prod.outlook.com (2603:10b6:5:21d::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5588.16; Wed, 7 Sep 2022 15:15:28 +0000 X-Received: from CO1NAM11FT113.eop-nam11.prod.protection.outlook.com (2603:10b6:303:b7:cafe::71) by MW4PR03CA0107.outlook.office365.com (2603:10b6:303:b7::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5588.12 via Frontend Transport; Wed, 7 Sep 2022 15:15:28 +0000 X-MS-Exchange-Authentication-Results: spf=pass (sender IP is 12.22.5.235) 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+93436+1787277+3901457@groups.io; helo=mail02.groups.io; Received-SPF: Pass (protection.outlook.com: domain of nvidia.com designates 12.22.5.235 as permitted sender) receiver=protection.outlook.com; client-ip=12.22.5.235; helo=mail.nvidia.com; pr=C X-Received: from mail.nvidia.com (12.22.5.235) by CO1NAM11FT113.mail.protection.outlook.com (10.13.174.180) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.5612.13 via Frontend Transport; Wed, 7 Sep 2022 15:15:27 +0000 X-Received: from drhqmail202.nvidia.com (10.126.190.181) by DRHQMAIL107.nvidia.com (10.27.9.16) with Microsoft SMTP Server (TLS) id 15.0.1497.38; Wed, 7 Sep 2022 15:15:27 +0000 X-Received: from drhqmail202.nvidia.com (10.126.190.181) 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; Wed, 7 Sep 2022 08:15:26 -0700 X-Received: from localhost.localdomain (10.127.8.10) by mail.nvidia.com (10.126.190.181) with Microsoft SMTP Server id 15.2.986.29 via Frontend Transport; Wed, 7 Sep 2022 08:15:26 -0700 From: "Jeff Brasen via groups.io" To: CC: , , , Jeff Brasen Subject: [edk2-devel] [PATCH 3/3] DynamicTablesPkg: SSDT CPU _CPC generator Date: Wed, 7 Sep 2022 09:15:19 -0600 Message-ID: <6bca55eda775212fa16aa8a45e82bb981f1ee8df.1662563529.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: CO1NAM11FT113:EE_|DM6PR12MB4220:EE_ X-MS-Office365-Filtering-Correlation-Id: fad78639-986f-47bb-b468-08da90e3cbe1 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam-Message-Info: XvO/PH1Q4On0XEqlCOUmyvanVqyx50pOnqI7Z2kEqMt1aXtehiBq8w0JuOO1z3ZlZDIvMA4g4wgxVbLIZEhqxHCGGgDyitOw0jzJY7JybBK+BFFd4Z4VU6Y0Teb2Hugc6shqJN9vPPJslKvNfPHUeKvM0DKp5z3iVUAS+U4ENCYBm8OfikaljGClAmYiuTbGk4BsnVRDoNIyEDRwSUpqqEkqiIkdG1JZuMW3gQJWFrESkQU/dJRZoYU7ZkszoIE/gR8p/2PLO5S0ZBF8cqiy1HF6cFpggEQtob7SVH0W8561uwJgEO4ew+j/bhTOBM1QFD5GNRBoWz2noGUr2lmetw1zoDWmWa/oCjW3ujfp0Ot5qbIw7mQf7URLIAfEiODh6xZbLUKmyrO2iTBl04wXtTx9XAo/CGFFdYGKf6DohZcP+lidNgJK93KcCJB+pBxZ+50kQ9M3B2Zi6fRdbfXlk62AqIeS4WWbb/0Uo0DgM7vDe6R99M0WqXk1mCgyQDv+/BM6EiTxkZV8IUv9uExRBsSbsYoFEbzzucjGuj6UnXKf++CStYNrvajPYVaEQqSWxkaF5K/P0XJWk/8+p9NfKCoKkvdK2rA1HPWalHXT8vtddGxeN48jl6tcTLmpunUFm1E48vMnuCOeDYRMB8QjHJQE+d70J4lCsLdA3uaqtsay+uOxckdUsjjDZ1GLAzTWfLPEtvlA4Mc5hFj7AOI5eT8m+nRChrN1uGfMa2ONOUxF2tJwbTaZj6aisFR+ogdx0DpggQl4zUM/8fkd0dlIsSoAykN2PFMzLcqVSWaxk15OMKppdFhbWvudOUmm8tb89IZA+cbRjPMY+d+6sGimoQ== X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-OriginalArrivalTime: 07 Sep 2022 15:15:27.7795 (UTC) X-MS-Exchange-CrossTenant-Network-Message-Id: fad78639-986f-47bb-b468-08da90e3cbe1 X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-OriginalAttributedTenantConnectingIp: TenantId=43083d15-7273-40c1-b7db-39efd9ccc17a;Ip=[12.22.5.235];Helo=[mail.nvidia.com] X-MS-Exchange-CrossTenant-AuthSource: CO1NAM11FT113.eop-nam11.prod.protection.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Anonymous X-MS-Exchange-CrossTenant-FromEntityHeader: HybridOnPrem X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR12MB4220 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: 8ESq4xq1jp2Mr7miyrQ95utEx1787277AA= Content-Transfer-Encoding: quoted-printable DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=groups.io; q=dns/txt; s=20140610; t=1662563732; bh=9B9AkJqxWj0I13S2CxRbRY5tC7duv+opYBM0X+GiFPc=; h=CC:Content-Type:Date:From:Reply-To:Subject:To; b=UYUhDwc9QdhTFF1L9RFm2BMEKirfnc+zwSFjz6gXbztJtvAIcgG1Hhrswx+L4ejrKgp 09jlsmqIf3Z0QVfFG3z7RVHIvphwLpjOzvLyRGmEtXc31WtLy7tlv/jF1BjfdV1lSMGxC /vdgTzPRORIYmwGoEx5rgYBjJU3RtBdihYk= X-ZohoMail-DKIM: pass (identity @groups.io) X-ZM-MESSAGEID: 1662563733515100001 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 | 211 +++++++++++++++++- 1 file changed, 206 insertions(+), 5 deletions(-) diff --git a/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtCpuTopologyLibArm/Ss= dtCpuTopologyGenerator.c b/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtCpuTop= ologyLibArm/SsdtCpuTopologyGenerator.c index 8561f48e1f..ba1f1bd436 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,182 @@ WriteAslName ( return EFI_SUCCESS; } =20 +/** 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_3_GENERIC_ADDRESS_STRUCTURE *Address + ) +{ + if ((Address =3D=3D NULL) || + ((Address->AddressSpaceId =3D=3D EFI_ACPI_6_3_SYSTEM_MEMORY) && + (Address->Address =3D=3D 0x0))) + { + return TRUE; + } + + return FALSE; +} + +/** 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 ( + IsNullGenericAddress (&CpcInfo->HighestPerformanceBuffer) ? + NULL : + &CpcInfo->HighestPerformanceBuffer, + CpcInfo->HighestPerformanceInteger, + IsNullGenericAddress (&CpcInfo->NominalPerformanceBuffer) ? + NULL : + &CpcInfo->NominalPerformanceBuffer, + CpcInfo->NominalPerformanceInteger, + IsNullGenericAddress (&CpcInfo->LowestNonlinearPerformanceBuf= fer) ? + NULL : + &CpcInfo->LowestNonlinearPerformanceBuffer, + CpcInfo->LowestNonlinearPerformanceInteger, + IsNullGenericAddress (&CpcInfo->LowestPerformanceBuffer) ? + NULL : + &CpcInfo->LowestPerformanceBuffer, + CpcInfo->LowestPerformanceInteger, + IsNullGenericAddress (&CpcInfo->GuaranteedPerformanceRegister= ) ? + NULL : + &CpcInfo->GuaranteedPerformanceRegister, + IsNullGenericAddress (&CpcInfo->DesiredPerformanceRegister) ? + NULL : + &CpcInfo->DesiredPerformanceRegister, + IsNullGenericAddress (&CpcInfo->MinimumPerformanceRegister) ? + NULL : + &CpcInfo->MinimumPerformanceRegister, + IsNullGenericAddress (&CpcInfo->MaximumPerformanceRegister) ? + NULL : + &CpcInfo->MaximumPerformanceRegister, + IsNullGenericAddress (&CpcInfo->PerformanceReductionTolerance= Register) ? + NULL : + &CpcInfo->PerformanceReductionToleranceRegister, + IsNullGenericAddress (&CpcInfo->TimeWindowRegister) ? + NULL : + &CpcInfo->TimeWindowRegister, + IsNullGenericAddress (&CpcInfo->CounterWraparoundTimeBuffer) ? + NULL : + &CpcInfo->CounterWraparoundTimeBuffer, + CpcInfo->CounterWraparoundTimeInteger, + &CpcInfo->ReferencePerformanceCounterRegister, + &CpcInfo->DeliveredPerformanceCounterRegister, + &CpcInfo->PerformanceLimitedRegister, + IsNullGenericAddress (&CpcInfo->CPPCEnableRegister) ? + NULL : + &CpcInfo->CPPCEnableRegister, + IsNullGenericAddress (&CpcInfo->AutonomousSelectionEnableBuff= er) ? + NULL : + &CpcInfo->AutonomousSelectionEnableBuffer, + CpcInfo->AutonomousSelectionEnableInteger, + IsNullGenericAddress (&CpcInfo->AutonomousActivityWindowRegis= ter) ? + NULL : + &CpcInfo->AutonomousActivityWindowRegister, + IsNullGenericAddress (&CpcInfo->EnergyPerformancePreferenceRe= gister) ? + NULL : + &CpcInfo->EnergyPerformancePreferenceRegister, + IsNullGenericAddress (&CpcInfo->ReferencePerformanceBuffer) ? + NULL : + &CpcInfo->ReferencePerformanceBuffer, + CpcInfo->ReferencePerformanceInteger, + IsNullGenericAddress (&CpcInfo->LowestFrequencyBuffer) ? + NULL : + &CpcInfo->LowestFrequencyBuffer, + CpcInfo->LowestFrequencyInteger, + IsNullGenericAddress (&CpcInfo->NominalFrequencyBuffer) ? + NULL : + &CpcInfo->NominalFrequencyBuffer, + CpcInfo->NominalFrequencyInteger, + 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: @@ -584,6 +770,13 @@ CreateAmlCpuFromProcHierarchy ( ASSERT_EFI_ERROR (Status); } =20 + // 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); + ASSERT_EFI_ERROR (Status); + } + return Status; } =20 @@ -934,10 +1127,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 +1155,19 @@ 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); + ASSERT_EFI_ERROR (Status); + } } // 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 (#93436): https://edk2.groups.io/g/devel/message/93436 Mute This Topic: https://groups.io/mt/93527135/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-