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 D89589413A6 for ; Tue, 12 Dec 2023 09:29:47 +0000 (UTC) DKIM-Signature: a=rsa-sha256; bh=sToez4NVAh3joDcW50oGbM7DjUWiT4raYZXjz5DWBds=; 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=1702373386; v=1; b=eU5c2yHV1SFJaEQsKNDmEw5cMHmVnYP0cJLXBiePumkzBE3CPw905xZYWU/giZ/cvkJcb8pY kg2VWcdsDgfzgSrD5eZc2vN8z0lzQe/jIMBc373SWm5rjYq6inaDuFMidJkI4GgSzimQA3LO0Iq W48e3s12x1KKTy6SjNlwJSMM= X-Received: by 127.0.0.2 with SMTP id 9OeuYY7687511xmo0VdvU0Sn; Tue, 12 Dec 2023 01:29:46 -0800 X-Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by mx.groups.io with SMTP id smtpd.web11.13006.1702373385859962490 for ; Tue, 12 Dec 2023 01:29:46 -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 09685143D; Tue, 12 Dec 2023 01:30:32 -0800 (PST) X-Received: from e126645.arm.com (unknown [10.57.44.69]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id 288FC3F5A1; Tue, 12 Dec 2023 01:29:44 -0800 (PST) From: "PierreGondois" To: devel@edk2.groups.io Cc: Ray Ni , Sami Mujawar , Leif Lindholm , Ard Biesheuvel Subject: [edk2-devel] [PATCH v4 07/10] DynamicTablesPkg: Add AmlCreatePsdNode() to generate _PSD Date: Tue, 12 Dec 2023 10:28:44 +0100 Message-Id: <20231212092847.1253756-8-pierre.gondois@arm.com> In-Reply-To: <20231212092847.1253756-1-pierre.gondois@arm.com> References: <20231212092847.1253756-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: oKrU4j6xEnc22CCmKiDodsYGx7686176AA= 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=eU5c2yHV; 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 2483272480ee..2b370320d244 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) {=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 + 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 (#112374): https://edk2.groups.io/g/devel/message/112374 Mute This Topic: https://groups.io/mt/103127053/7686176 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io] -=-=-=-=-=-=-=-=-=-=-=-