From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail02.groups.io (mail02.groups.io [66.175.222.108]) by spool.mail.gandi.net (Postfix) with ESMTPS id CAD38D8094F for ; Thu, 25 Jan 2024 15:19:23 +0000 (UTC) DKIM-Signature: a=rsa-sha256; bh=s5LE9yoDJTTkCatVN8MuSkW4OiYxYTRxFIsEODhr7v8=; c=relaxed/simple; d=groups.io; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References:MIME-Version:Precedence:List-Subscribe:List-Help:Sender:List-Id:Mailing-List:Delivered-To:Reply-To:List-Unsubscribe-Post:List-Unsubscribe:Content-Transfer-Encoding; s=20140610; t=1706195962; v=1; b=SwDxhNq4NDznGN0IDX/f73QJJjWpbnRvmHVS8SEGwEXaWOeXMnxKmnr6Aa6O+iwPUS0fp9Q4 MbT/a1T6ZV4LRM9Yof9OcY4Ds5t+MNn+6mHUNxKT/iDImCfvUePCMYGgY12YoK8RgBZCseUu3lO s7lV58PC0QHOm20lWuh7po3E= X-Received: by 127.0.0.2 with SMTP id 8VqtYY7687511xQRdmtQCTRh; Thu, 25 Jan 2024 07:19:22 -0800 X-Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by mx.groups.io with SMTP id smtpd.web11.20307.1706195961916139752 for ; Thu, 25 Jan 2024 07:19:22 -0800 X-Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 213961476; Thu, 25 Jan 2024 07:20:06 -0800 (PST) X-Received: from e126645.arm.com (unknown [10.57.47.22]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id 9E9763F5A1; Thu, 25 Jan 2024 07:19:20 -0800 (PST) From: "PierreGondois" To: devel@edk2.groups.io Cc: Sami Mujawar , Leif Lindholm , Ard Biesheuvel , Pierre Gondois Subject: [edk2-devel] [PATCH v5 07/11] DynamicTablesPkg: Add AmlCreatePsdNode() to generate _PSD Date: Thu, 25 Jan 2024 16:18:46 +0100 Message-Id: <20240125151850.620749-8-pierre.gondois@arm.com> In-Reply-To: <20240125151850.620749-1-pierre.gondois@arm.com> References: <20240125151850.620749-1-pierre.gondois@arm.com> MIME-Version: 1.0 Precedence: Bulk 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,pierre.gondois@arm.com List-Unsubscribe-Post: List-Unsubscribe=One-Click List-Unsubscribe: X-Gm-Message-State: Lm9vzJuOAyEuZrOs6zy0dexxx7686176AA= Content-Transfer-Encoding: quoted-printable X-GND-Status: LEGIT Authentication-Results: spool.mail.gandi.net; dkim=pass header.d=groups.io header.s=20140610 header.b=SwDxhNq4; spf=pass (spool.mail.gandi.net: domain of bounce@groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce@groups.io; dmarc=fail reason="SPF not aligned (relaxed), DKIM not aligned (relaxed)" header.from=arm.com (policy=none) Add AmlCreatePsdNode() to the AmlLib to generate _PSD objects. _PSD objects allow to describe 'performance control, P-state or CPPC, logical processor dependency', Cf. ACPI 6.5, s8.4.5.5 _PSD (P-State Dependency). Signed-off-by: Pierre Gondois --- .../Include/Library/AmlLib/AmlLib.h | 35 +++- .../Common/AmlLib/CodeGen/AmlCodeGen.c | 188 +++++++++++++++++- 2 files changed, 221 insertions(+), 2 deletions(-) diff --git a/DynamicTablesPkg/Include/Library/AmlLib/AmlLib.h b/DynamicTabl= esPkg/Include/Library/AmlLib/AmlLib.h index 01e37b089897..82d546408418 100644 --- a/DynamicTablesPkg/Include/Library/AmlLib/AmlLib.h +++ b/DynamicTablesPkg/Include/Library/AmlLib/AmlLib.h @@ -1,7 +1,7 @@ /** @file=0D AML Lib.=0D =0D - Copyright (c) 2019 - 2021, Arm Limited. All rights reserved.
=0D + Copyright (c) 2019 - 2023, Arm Limited. All rights reserved.
=0D Copyright (C) 2023 Advanced Micro Devices, Inc. All rights reserved.
= =0D =0D SPDX-License-Identifier: BSD-2-Clause-Patent=0D @@ -1805,4 +1805,37 @@ AmlCodeGenInvokeMethod ( IN AML_NODE_HANDLE ParentNode=0D );=0D =0D +/** Create a _PSD node.=0D +=0D + Creates and optionally adds the following node=0D + Name(_PSD, Package()=0D + {=0D + NumEntries, // Integer=0D + Revision, // Integer=0D + Domain, // Integer=0D + CoordType, // Integer=0D + NumProc, // Integer=0D + })=0D +=0D + Cf. ACPI 6.5, s8.4.5.5 _PSD (P-State Dependency)=0D +=0D + @ingroup CodeGenApis=0D +=0D + @param [in] PsdInfo PsdInfo object=0D + @param [in] ParentNode If provided, set ParentNode as the parent=0D + of the node created.=0D + @param [out] NewPsdNode If success and provided, contains the created = node.=0D +=0D + @retval EFI_SUCCESS The function completed successfully.=0D + @retval EFI_INVALID_PARAMETER Invalid parameter.=0D + @retval EFI_OUT_OF_RESOURCES Failed to allocate memory.=0D +**/=0D +EFI_STATUS=0D +EFIAPI=0D +AmlCreatePsdNode (=0D + IN AML_PSD_INFO *PsdInfo,=0D + IN AML_NODE_HANDLE ParentNode OPTIONAL,=0D + OUT AML_OBJECT_NODE_HANDLE *NewPsdNode OPTIONAL=0D + );=0D +=0D #endif // AML_LIB_H_=0D diff --git a/DynamicTablesPkg/Library/Common/AmlLib/CodeGen/AmlCodeGen.c b/= DynamicTablesPkg/Library/Common/AmlLib/CodeGen/AmlCodeGen.c index 9040192f8c3c..6f3f46e3b1ed 100644 --- a/DynamicTablesPkg/Library/Common/AmlLib/CodeGen/AmlCodeGen.c +++ b/DynamicTablesPkg/Library/Common/AmlLib/CodeGen/AmlCodeGen.c @@ -1,7 +1,7 @@ /** @file=0D AML Code Generation.=0D =0D - Copyright (c) 2020 - 2022, Arm Limited. All rights reserved.
=0D + Copyright (c) 2020 - 2023, Arm Limited. All rights reserved.
=0D Copyright (C) 2023 - 2024, Advanced Micro Devices, Inc. All rights reser= ved.
=0D =0D SPDX-License-Identifier: BSD-2-Clause-Patent=0D @@ -4090,3 +4090,189 @@ exit_handler: FreePool (NodeStream);=0D return Status;=0D }=0D +=0D +/** Create a _PSD node.=0D +=0D + Creates and optionally adds the following node=0D + Name(_PSD, Package()=0D + {=0D + NumEntries, // Integer=0D + Revision, // Integer=0D + Domain, // Integer=0D + CoordType, // Integer=0D + NumProc, // Integer=0D + })=0D +=0D + Cf. ACPI 6.5, s8.4.5.5 _PSD (P-State Dependency)=0D +=0D + @ingroup CodeGenApis=0D +=0D + @param [in] PsdInfo PsdInfo object=0D + @param [in] ParentNode If provided, set ParentNode as the parent=0D + of the node created.=0D + @param [out] NewPsdNode If success and provided, contains the created = node.=0D +=0D + @retval EFI_SUCCESS The function completed successfully.=0D + @retval EFI_INVALID_PARAMETER Invalid parameter.=0D + @retval EFI_OUT_OF_RESOURCES Failed to allocate memory.=0D +**/=0D +EFI_STATUS=0D +EFIAPI=0D +AmlCreatePsdNode (=0D + IN AML_PSD_INFO *PsdInfo,=0D + IN AML_NODE_HANDLE ParentNode OPTIONAL,=0D + OUT AML_OBJECT_NODE_HANDLE *NewPsdNode OPTIONAL=0D + )=0D +{=0D + EFI_STATUS Status;=0D + AML_OBJECT_NODE_HANDLE PsdNode;=0D + AML_OBJECT_NODE_HANDLE PsdPackage;=0D + AML_OBJECT_NODE_HANDLE IntegerNode;=0D + UINT32 NumberOfEntries;=0D +=0D + if ((PsdInfo =3D=3D NULL) ||=0D + ((ParentNode =3D=3D NULL) && (NewPsdNode =3D=3D NULL)))=0D + {=0D + Status =3D EFI_INVALID_PARAMETER;=0D + ASSERT_EFI_ERROR (Status);=0D + return Status;=0D + }=0D +=0D + // Revision 3 per ACPI 6.5 specification=0D + if (PsdInfo->Revision =3D=3D EFI_ACPI_6_5_AML_PSD_REVISION) {=0D + // NumEntries 5 per ACPI 6.5 specification=0D + NumberOfEntries =3D 5;=0D + } else {=0D + Status =3D EFI_INVALID_PARAMETER;=0D + ASSERT_EFI_ERROR (Status);=0D + return Status;=0D + }=0D +=0D + if (((PsdInfo->CoordType !=3D ACPI_AML_COORD_TYPE_SW_ALL) &&=0D + (PsdInfo->CoordType !=3D ACPI_AML_COORD_TYPE_SW_ANY) &&=0D + (PsdInfo->CoordType !=3D ACPI_AML_COORD_TYPE_HW_ALL)) ||=0D + (PsdInfo->NumProc =3D=3D 0))=0D + {=0D + Status =3D EFI_INVALID_PARAMETER;=0D + ASSERT_EFI_ERROR (Status);=0D + return Status;=0D + }=0D +=0D + Status =3D AmlCodeGenNamePackage ("_PSD", NULL, &PsdNode);=0D + if (EFI_ERROR (Status)) {=0D + ASSERT_EFI_ERROR (Status);=0D + return Status;=0D + }=0D +=0D + // Get the Package object node of the _PSD node,=0D + // which is the 2nd fixed argument (i.e. index 1).=0D + PsdPackage =3D (AML_OBJECT_NODE_HANDLE)AmlGetFixedArgument (=0D + PsdNode,=0D + EAmlParseIndexTerm1=0D + );=0D + if ((PsdPackage =3D=3D NULL) = ||=0D + (AmlGetNodeType ((AML_NODE_HANDLE)PsdPackage) !=3D EAmlNodeObject) = ||=0D + (!AmlNodeHasOpCode (PsdPackage, AML_PACKAGE_OP, 0)))=0D + {=0D + Status =3D EFI_INVALID_PARAMETER;=0D + ASSERT_EFI_ERROR (Status);=0D + goto error_handler;=0D + }=0D +=0D + // NumEntries=0D + Status =3D AmlCodeGenInteger (NumberOfEntries, &IntegerNode);=0D + if (EFI_ERROR (Status)) {=0D + ASSERT_EFI_ERROR (Status);=0D + goto error_handler;=0D + }=0D +=0D + Status =3D AmlVarListAddTail (=0D + (AML_NODE_HANDLE)PsdPackage,=0D + (AML_NODE_HANDLE)IntegerNode=0D + );=0D + if (EFI_ERROR (Status)) {=0D + ASSERT_EFI_ERROR (Status);=0D + FreePool (IntegerNode);=0D + goto error_handler;=0D + }=0D +=0D + // Revision=0D + Status =3D AmlCodeGenInteger (PsdInfo->Revision, &IntegerNode);=0D + if (EFI_ERROR (Status)) {=0D + ASSERT_EFI_ERROR (Status);=0D + goto error_handler;=0D + }=0D +=0D + Status =3D AmlVarListAddTail (=0D + (AML_NODE_HANDLE)PsdPackage,=0D + (AML_NODE_HANDLE)IntegerNode=0D + );=0D + if (EFI_ERROR (Status)) {=0D + ASSERT_EFI_ERROR (Status);=0D + FreePool (IntegerNode);=0D + goto error_handler;=0D + }=0D +=0D + // Domain=0D + Status =3D AmlCodeGenInteger (PsdInfo->Domain, &IntegerNode);=0D + if (EFI_ERROR (Status)) {=0D + ASSERT_EFI_ERROR (Status);=0D + goto error_handler;=0D + }=0D +=0D + Status =3D AmlVarListAddTail (=0D + (AML_NODE_HANDLE)PsdPackage,=0D + (AML_NODE_HANDLE)IntegerNode=0D + );=0D + if (EFI_ERROR (Status)) {=0D + ASSERT_EFI_ERROR (Status);=0D + FreePool (IntegerNode);=0D + goto error_handler;=0D + }=0D +=0D + // CoordType=0D + Status =3D AmlCodeGenInteger (PsdInfo->CoordType, &IntegerNode);=0D + if (EFI_ERROR (Status)) {=0D + ASSERT_EFI_ERROR (Status);=0D + goto error_handler;=0D + }=0D +=0D + Status =3D AmlVarListAddTail (=0D + (AML_NODE_HANDLE)PsdPackage,=0D + (AML_NODE_HANDLE)IntegerNode=0D + );=0D + if (EFI_ERROR (Status)) {=0D + ASSERT_EFI_ERROR (Status);=0D + FreePool (IntegerNode);=0D + goto error_handler;=0D + }=0D +=0D + // Num Processors=0D + Status =3D AmlCodeGenInteger (PsdInfo->NumProc, &IntegerNode);=0D + if (EFI_ERROR (Status)) {=0D + ASSERT_EFI_ERROR (Status);=0D + goto error_handler;=0D + }=0D +=0D + Status =3D AmlVarListAddTail (=0D + (AML_NODE_HANDLE)PsdPackage,=0D + (AML_NODE_HANDLE)IntegerNode=0D + );=0D + if (EFI_ERROR (Status)) {=0D + ASSERT_EFI_ERROR (Status);=0D + FreePool (IntegerNode);=0D + goto error_handler;=0D + }=0D +=0D + Status =3D LinkNode (PsdNode, ParentNode, NewPsdNode);=0D + if (EFI_ERROR (Status)) {=0D + ASSERT_EFI_ERROR (Status);=0D + goto error_handler;=0D + }=0D +=0D + return Status;=0D +=0D +error_handler:=0D + AmlDeleteTree ((AML_NODE_HANDLE)PsdNode);=0D + return Status;=0D +}=0D --=20 2.25.1 -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#114417): https://edk2.groups.io/g/devel/message/114417 Mute This Topic: https://groups.io/mt/103955504/7686176 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io] -=-=-=-=-=-=-=-=-=-=-=-