Hi Pierre,

Thank you for the updated patch.

Reviewed-by: Sami Mujawar <sami.muja...@arm.com>

Regards,

Sami Mujawar

On 25/01/2024, 15:19, "Pierre Gondois" <pierre.gond...@arm.com 
<mailto:pierre.gond...@arm.com>> wrote:


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 <pierre.gond...@arm.com 
<mailto:pierre.gond...@arm.com>>
---
.../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/DynamicTablesPkg/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


AML Lib.






- Copyright (c) 2019 - 2021, Arm Limited. All rights reserved.<BR>


+ Copyright (c) 2019 - 2023, Arm Limited. All rights reserved.<BR>


Copyright (C) 2023 Advanced Micro Devices, Inc. All rights reserved.<BR>






SPDX-License-Identifier: BSD-2-Clause-Patent


@@ -1805,4 +1805,37 @@ AmlCodeGenInvokeMethod (
IN AML_NODE_HANDLE ParentNode


);






+/** Create a _PSD node.


+


+ Creates and optionally adds the following node


+ Name(_PSD, Package()


+ {


+ NumEntries, // Integer


+ Revision, // Integer


+ Domain, // Integer


+ CoordType, // Integer


+ NumProc, // Integer


+ })


+


+ Cf. ACPI 6.5, s8.4.5.5 _PSD (P-State Dependency)


+


+ @ingroup CodeGenApis


+


+ @param [in] PsdInfo PsdInfo object


+ @param [in] ParentNode If provided, set ParentNode as the parent


+ of the node created.


+ @param [out] NewPsdNode 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


+AmlCreatePsdNode (


+ IN AML_PSD_INFO *PsdInfo,


+ IN AML_NODE_HANDLE ParentNode OPTIONAL,


+ OUT AML_OBJECT_NODE_HANDLE *NewPsdNode OPTIONAL


+ );


+


#endif // AML_LIB_H_


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


AML Code Generation.






- Copyright (c) 2020 - 2022, Arm Limited. All rights reserved.<BR>


+ Copyright (c) 2020 - 2023, Arm Limited. All rights reserved.<BR>


Copyright (C) 2023 - 2024, Advanced Micro Devices, Inc. All rights reserved.<BR>






SPDX-License-Identifier: BSD-2-Clause-Patent


@@ -4090,3 +4090,189 @@ exit_handler:
FreePool (NodeStream);


return Status;


}


+


+/** Create a _PSD node.


+


+ Creates and optionally adds the following node


+ Name(_PSD, Package()


+ {


+ NumEntries, // Integer


+ Revision, // Integer


+ Domain, // Integer


+ CoordType, // Integer


+ NumProc, // Integer


+ })


+


+ Cf. ACPI 6.5, s8.4.5.5 _PSD (P-State Dependency)


+


+ @ingroup CodeGenApis


+


+ @param [in] PsdInfo PsdInfo object


+ @param [in] ParentNode If provided, set ParentNode as the parent


+ of the node created.


+ @param [out] NewPsdNode 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


+AmlCreatePsdNode (


+ IN AML_PSD_INFO *PsdInfo,


+ IN AML_NODE_HANDLE ParentNode OPTIONAL,


+ OUT AML_OBJECT_NODE_HANDLE *NewPsdNode OPTIONAL


+ )


+{


+ EFI_STATUS Status;


+ AML_OBJECT_NODE_HANDLE PsdNode;


+ AML_OBJECT_NODE_HANDLE PsdPackage;


+ AML_OBJECT_NODE_HANDLE IntegerNode;


+ UINT32 NumberOfEntries;


+


+ if ((PsdInfo == NULL) ||


+ ((ParentNode == NULL) && (NewPsdNode == NULL)))


+ {


+ Status = EFI_INVALID_PARAMETER;


+ ASSERT_EFI_ERROR (Status);


+ return Status;


+ }


+


+ // Revision 3 per ACPI 6.5 specification


+ if (PsdInfo->Revision == EFI_ACPI_6_5_AML_PSD_REVISION) {


+ // NumEntries 5 per ACPI 6.5 specification


+ NumberOfEntries = 5;


+ } else {


+ Status = EFI_INVALID_PARAMETER;


+ ASSERT_EFI_ERROR (Status);


+ return Status;


+ }


+


+ if (((PsdInfo->CoordType != ACPI_AML_COORD_TYPE_SW_ALL) &&


+ (PsdInfo->CoordType != ACPI_AML_COORD_TYPE_SW_ANY) &&


+ (PsdInfo->CoordType != ACPI_AML_COORD_TYPE_HW_ALL)) ||


+ (PsdInfo->NumProc == 0))


+ {


+ Status = EFI_INVALID_PARAMETER;


+ ASSERT_EFI_ERROR (Status);


+ return Status;


+ }


+


+ Status = AmlCodeGenNamePackage ("_PSD", NULL, &PsdNode);


+ if (EFI_ERROR (Status)) {


+ ASSERT_EFI_ERROR (Status);


+ return Status;


+ }


+


+ // Get the Package object node of the _PSD node,


+ // which is the 2nd fixed argument (i.e. index 1).


+ PsdPackage = (AML_OBJECT_NODE_HANDLE)AmlGetFixedArgument (


+ PsdNode,


+ EAmlParseIndexTerm1


+ );


+ if ((PsdPackage == NULL) ||


+ (AmlGetNodeType ((AML_NODE_HANDLE)PsdPackage) != EAmlNodeObject) ||


+ (!AmlNodeHasOpCode (PsdPackage, AML_PACKAGE_OP, 0)))


+ {


+ Status = EFI_INVALID_PARAMETER;


+ ASSERT_EFI_ERROR (Status);


+ goto error_handler;


+ }


+


+ // NumEntries


+ Status = AmlCodeGenInteger (NumberOfEntries, &IntegerNode);


+ if (EFI_ERROR (Status)) {


+ ASSERT_EFI_ERROR (Status);


+ goto error_handler;


+ }


+


+ Status = AmlVarListAddTail (


+ (AML_NODE_HANDLE)PsdPackage,


+ (AML_NODE_HANDLE)IntegerNode


+ );


+ if (EFI_ERROR (Status)) {


+ ASSERT_EFI_ERROR (Status);


+ FreePool (IntegerNode);


+ goto error_handler;


+ }


+


+ // Revision


+ Status = AmlCodeGenInteger (PsdInfo->Revision, &IntegerNode);


+ if (EFI_ERROR (Status)) {


+ ASSERT_EFI_ERROR (Status);


+ goto error_handler;


+ }


+


+ Status = AmlVarListAddTail (


+ (AML_NODE_HANDLE)PsdPackage,


+ (AML_NODE_HANDLE)IntegerNode


+ );


+ if (EFI_ERROR (Status)) {


+ ASSERT_EFI_ERROR (Status);


+ FreePool (IntegerNode);


+ goto error_handler;


+ }


+


+ // Domain


+ Status = AmlCodeGenInteger (PsdInfo->Domain, &IntegerNode);


+ if (EFI_ERROR (Status)) {


+ ASSERT_EFI_ERROR (Status);


+ goto error_handler;


+ }


+


+ Status = AmlVarListAddTail (


+ (AML_NODE_HANDLE)PsdPackage,


+ (AML_NODE_HANDLE)IntegerNode


+ );


+ if (EFI_ERROR (Status)) {


+ ASSERT_EFI_ERROR (Status);


+ FreePool (IntegerNode);


+ goto error_handler;


+ }


+


+ // CoordType


+ Status = AmlCodeGenInteger (PsdInfo->CoordType, &IntegerNode);


+ if (EFI_ERROR (Status)) {


+ ASSERT_EFI_ERROR (Status);


+ goto error_handler;


+ }


+


+ Status = AmlVarListAddTail (


+ (AML_NODE_HANDLE)PsdPackage,


+ (AML_NODE_HANDLE)IntegerNode


+ );


+ if (EFI_ERROR (Status)) {


+ ASSERT_EFI_ERROR (Status);


+ FreePool (IntegerNode);


+ goto error_handler;


+ }


+


+ // Num Processors


+ Status = AmlCodeGenInteger (PsdInfo->NumProc, &IntegerNode);


+ if (EFI_ERROR (Status)) {


+ ASSERT_EFI_ERROR (Status);


+ goto error_handler;


+ }


+


+ Status = AmlVarListAddTail (


+ (AML_NODE_HANDLE)PsdPackage,


+ (AML_NODE_HANDLE)IntegerNode


+ );


+ if (EFI_ERROR (Status)) {


+ ASSERT_EFI_ERROR (Status);


+ FreePool (IntegerNode);


+ goto error_handler;


+ }


+


+ Status = LinkNode (PsdNode, ParentNode, NewPsdNode);


+ if (EFI_ERROR (Status)) {


+ ASSERT_EFI_ERROR (Status);


+ goto error_handler;


+ }


+


+ return Status;


+


+error_handler:


+ AmlDeleteTree ((AML_NODE_HANDLE)PsdNode);


+ return Status;


+}


-- 
2.25.1







-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#114575): https://edk2.groups.io/g/devel/message/114575
Mute This Topic: https://groups.io/mt/103955504/21656
Group Owner: devel+ow...@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-


Reply via email to