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 00BA37803CC for ; Tue, 21 Nov 2023 16:50:44 +0000 (UTC) DKIM-Signature: a=rsa-sha256; bh=XuP9SZ84HBqaViFyi0se8vuIHDdqv6v8zVRjbb6xltc=; 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=1700585443; v=1; b=DakNotelxjVRsxj41V4JaqgPdX/qO217FeJmth3o2RvtdbdZUjKCAA4IziC0zxbF4rUn1LhU srv/gkzxM1I0qSaw8CEmXXAxIG9KtGzBv+H0DP7MdQMyAsypCESAEgfwazIf6Qn+rMs/XRzaoFA rwWmIElZ3/3R/m8KcSfA121c= X-Received: by 127.0.0.2 with SMTP id 11UVYY7687511xkCIoSFFqt9; Tue, 21 Nov 2023 08:50:43 -0800 X-Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by mx.groups.io with SMTP id smtpd.web11.46803.1700585443037446923 for ; Tue, 21 Nov 2023 08:50:43 -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 81AD6169C; Tue, 21 Nov 2023 08:51:29 -0800 (PST) X-Received: from e126645.nice.arm.com (unknown [172.31.20.19]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id 47A403F6C4; Tue, 21 Nov 2023 08:50:41 -0800 (PST) From: "PierreGondois" To: devel@edk2.groups.io Cc: Ard Biesheuvel , Leif Lindholm , Sami Mujawar , Michael D Kinney , Liming Gao Subject: [edk2-devel] [PATCH v3 08/11] DynamicTablesPkg: Add AmlCreatePsdNode() to generate _PSD Date: Tue, 21 Nov 2023 17:50:04 +0100 Message-Id: <20231121165007.1546858-9-pierre.gondois@arm.com> In-Reply-To: <20231121165007.1546858-1-pierre.gondois@arm.com> References: <20231121165007.1546858-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: uizxzJTCGTfwdPgsKPu2m3zex7686176AA= 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=DakNotel; dmarc=fail reason="SPF not aligned (relaxed), DKIM not aligned (relaxed)" header.from=arm.com (policy=none); spf=pass (spool.mail.gandi.net: domain of bounce@groups.io designates 66.175.222.108 as permitted sender) smtp.mailfrom=bounce@groups.io 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 be78c00b6109..fb1b0e24faf3 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 =0D SPDX-License-Identifier: BSD-2-Clause-Patent=0D **/=0D @@ -1628,4 +1628,37 @@ AmlAddNameStringToNamedPackage ( IN AML_OBJECT_NODE_HANDLE NamedNode=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 89ca2c8a92e7..a96d2b8a048a 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 =0D SPDX-License-Identifier: BSD-2-Clause-Patent=0D **/=0D @@ -3849,3 +3849,189 @@ exit_handler: =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_V0) {=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 EFI_ACPI_6_5_AML_STATE_COORD_TYPE_SW_ALL) = &&=0D + (PsdInfo->CoordType !=3D EFI_ACPI_6_5_AML_STATE_COORD_TYPE_SW_ANY) = &&=0D + (PsdInfo->CoordType !=3D EFI_ACPI_6_5_AML_STATE_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 + return Status;=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 + return Status;=0D + }=0D +=0D + // Revision=0D + Status =3D AmlCodeGenInteger (PsdInfo->Revision, &IntegerNode);=0D + if (EFI_ERROR (Status)) {=0D + ASSERT_EFI_ERROR (Status);=0D + return Status;=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 + return Status;=0D + }=0D +=0D + // Domain=0D + Status =3D AmlCodeGenInteger (PsdInfo->Domain, &IntegerNode);=0D + if (EFI_ERROR (Status)) {=0D + ASSERT_EFI_ERROR (Status);=0D + return Status;=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 + return Status;=0D + }=0D +=0D + // CoordType=0D + Status =3D AmlCodeGenInteger (PsdInfo->CoordType, &IntegerNode);=0D + if (EFI_ERROR (Status)) {=0D + ASSERT_EFI_ERROR (Status);=0D + return Status;=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 + return Status;=0D + }=0D +=0D + // Num Processors=0D + Status =3D AmlCodeGenInteger (PsdInfo->NumProc, &IntegerNode);=0D + if (EFI_ERROR (Status)) {=0D + ASSERT_EFI_ERROR (Status);=0D + return Status;=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 + return Status;=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 (#111575): https://edk2.groups.io/g/devel/message/111575 Mute This Topic: https://groups.io/mt/102732028/7686176 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io] -=-=-=-=-=-=-=-=-=-=-=-