From: "Sami Mujawar" <sami.mujawar@arm.com>
To: Pierre.Gondois@arm.com, devel@edk2.groups.io,
Alexei.Fedorov@arm.com, nd <nd@arm.com>
Subject: Re: [PATCH v2 18/21] DynamicTablesPkg: AML code generation for a _LPI object
Date: Fri, 8 Oct 2021 15:24:42 +0100 [thread overview]
Message-ID: <40da6ea6-b7c8-4297-430e-9093a120538f@arm.com> (raw)
In-Reply-To: <20211007153210.26608-19-Pierre.Gondois@arm.com>
Hi Pierre,
Thank you for this patch.
Reviewed-by: Sami Mujawar <sami.mujawar@arm.com>
Regards,
Sami Mujawar
On 07/10/2021 04:32 PM, Pierre.Gondois@arm.com wrote:
> From: Pierre Gondois <Pierre.Gondois@arm.com>
>
> _LPI object provides a method to describe Low Power Idle
> states that define the local power states for each node
> in a hierarchical processor topology.
>
> Therefore, add AmlCreateLpiNode() to generate code for a
> _LPI object.
>
> AmlCreateLpiNode ("_LPI", 0, 1, ParentNode, &LpiNode) is
> equivalent of the following ASL code:
> Name (_LPI, Package (
> 0, // Revision
> 1, // LevelId
> 0 // Count
> ))
>
> Signed-off-by: Pierre Gondois <Pierre.Gondois@arm.com>
> ---
> .../Include/Library/AmlLib/AmlLib.h | 44 ++++++
> .../Common/AmlLib/CodeGen/AmlCodeGen.c | 133 ++++++++++++++++++
> 2 files changed, 177 insertions(+)
>
> diff --git a/DynamicTablesPkg/Include/Library/AmlLib/AmlLib.h b/DynamicTablesPkg/Include/Library/AmlLib/AmlLib.h
> index 7740aac24470..40c45073d303 100644
> --- a/DynamicTablesPkg/Include/Library/AmlLib/AmlLib.h
> +++ b/DynamicTablesPkg/Include/Library/AmlLib/AmlLib.h
> @@ -672,6 +672,50 @@ AmlCodeGenMethodRetNameString (
> OUT AML_OBJECT_NODE_HANDLE * NewObjectNode OPTIONAL
> );
>
> +/** Create a _LPI name.
> +
> + AmlCreateLpiNode ("_LPI", 0, 1, ParentNode, &LpiNode) is
> + equivalent of the following ASL code:
> + Name (_LPI, Package (
> + 0, // Revision
> + 1, // LevelId
> + 0 // Count
> + ))
> +
> + This function doesn't define any LPI state. As shown above, the count
> + of _LPI state is set to 0.
> + The AmlAddLpiState () function must be used to add LPI states.
> +
> + Cf ACPI 6.3 specification, s8.4.4 "Lower Power Idle States".
> +
> + @ingroup CodeGenApis
> +
> + @param [in] LpiNameString The new LPI 's object name.
> + Must be a NULL-terminated ASL NameString
> + e.g.: "_LPI", "DEV0.PLPI", etc.
> + The input string is copied.
> + @param [in] Revision Revision number of the _LPI states.
> + @param [in] LevelId A platform defined number that identifies the
> + level of hierarchy of the processor node to
> + which the LPI states apply.
> + @param [in] ParentNode If provided, set ParentNode as the parent
> + of the node created.
> + @param [out] NewLpiNode If success, 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
> +AmlCreateLpiNode (
> + IN CONST CHAR8 * LpiNameString,
> + IN UINT16 Revision,
> + IN UINT64 LevelId,
> + IN AML_NODE_HANDLE ParentNode, OPTIONAL
> + OUT AML_OBJECT_NODE_HANDLE * NewLpiNode OPTIONAL
> + );
> +
> // DEPRECATED APIS
> #ifndef DISABLE_NEW_DEPRECATED_INTERFACES
>
> diff --git a/DynamicTablesPkg/Library/Common/AmlLib/CodeGen/AmlCodeGen.c b/DynamicTablesPkg/Library/Common/AmlLib/CodeGen/AmlCodeGen.c
> index 67474094b975..2223e4bcfef9 100644
> --- a/DynamicTablesPkg/Library/Common/AmlLib/CodeGen/AmlCodeGen.c
> +++ b/DynamicTablesPkg/Library/Common/AmlLib/CodeGen/AmlCodeGen.c
> @@ -1442,3 +1442,136 @@ error_handler:
> }
> return Status;
> }
> +
> +/** Create a _LPI name.
> +
> + AmlCreateLpiNode ("_LPI", 0, 1, ParentNode, &LpiNode) is
> + equivalent of the following ASL code:
> + Name (_LPI, Package (
> + 0, // Revision
> + 1, // LevelId
> + 0 // Count
> + ))
> +
> + This function doesn't define any LPI state. As shown above, the count
> + of _LPI state is set to 0.
> + The AmlAddLpiState () function allows to add LPI states.
> +
> + Cf ACPI 6.3 specification, s8.4.4 "Lower Power Idle States".
> +
> + @param [in] LpiNameString The new LPI 's object name.
> + Must be a NULL-terminated ASL NameString
> + e.g.: "_LPI", "DEV0.PLPI", etc.
> + The input string is copied.
> + @param [in] Revision Revision number of the _LPI states.
> + @param [in] LevelId A platform defined number that identifies the
> + level of hierarchy of the processor node to
> + which the LPI states apply.
> + @param [in] ParentNode If provided, set ParentNode as the parent
> + of the node created.
> + @param [out] NewLpiNode If success, 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
> +AmlCreateLpiNode (
> + IN CONST CHAR8 * LpiNameString,
> + IN UINT16 Revision,
> + IN UINT64 LevelId,
> + IN AML_NODE_HANDLE ParentNode, OPTIONAL
> + OUT AML_OBJECT_NODE_HANDLE * NewLpiNode OPTIONAL
> + )
> +{
> + EFI_STATUS Status;
> + AML_OBJECT_NODE_HANDLE PackageNode;
> + AML_OBJECT_NODE_HANDLE IntegerNode;
> +
> + if ((LpiNameString == NULL) ||
> + ((ParentNode == NULL) && (NewLpiNode == NULL))) {
> + ASSERT (0);
> + return EFI_INVALID_PARAMETER;
> + }
> +
> + IntegerNode = NULL;
> +
> + Status = AmlCodeGenPackage (&PackageNode);
> + if (EFI_ERROR (Status)) {
> + ASSERT (0);
> + return Status;
> + }
> +
> + // Create and attach Revision
> + Status = AmlCodeGenInteger (Revision, &IntegerNode);
> + if (EFI_ERROR (Status)) {
> + ASSERT (0);
> + IntegerNode = NULL;
> + goto error_handler;
> + }
> +
> + Status = AmlVarListAddTail (
> + (AML_NODE_HANDLE)PackageNode,
> + (AML_NODE_HANDLE)IntegerNode
> + );
> + if (EFI_ERROR (Status)) {
> + ASSERT (0);
> + goto error_handler;
> + }
> +
> + IntegerNode = NULL;
> +
> + // Create and attach LevelId
> + Status = AmlCodeGenInteger (LevelId, &IntegerNode);
> + if (EFI_ERROR (Status)) {
> + ASSERT (0);
> + IntegerNode = NULL;
> + goto error_handler;
> + }
> +
> + Status = AmlVarListAddTail (
> + (AML_NODE_HANDLE)PackageNode,
> + (AML_NODE_HANDLE)IntegerNode
> + );
> + if (EFI_ERROR (Status)) {
> + ASSERT (0);
> + goto error_handler;
> + }
> +
> + IntegerNode = NULL;
> +
> + // Create and attach Count. No LPI state is added, so 0.
> + Status = AmlCodeGenInteger (0, &IntegerNode);
> + if (EFI_ERROR (Status)) {
> + ASSERT (0);
> + IntegerNode = NULL;
> + goto error_handler;
> + }
> +
> + Status = AmlVarListAddTail (
> + (AML_NODE_HANDLE)PackageNode,
> + (AML_NODE_HANDLE)IntegerNode
> + );
> + if (EFI_ERROR (Status)) {
> + ASSERT (0);
> + goto error_handler;
> + }
> +
> + IntegerNode = NULL;
> +
> + Status = AmlCodeGenName (LpiNameString, PackageNode, ParentNode, NewLpiNode);
> + if (EFI_ERROR (Status)) {
> + ASSERT (0);
> + goto error_handler;
> + }
> +
> + return Status;
> +
> +error_handler:
> + AmlDeleteTree ((AML_NODE_HANDLE)PackageNode);
> + if (IntegerNode != NULL) {
> + AmlDeleteTree ((AML_NODE_HANDLE)IntegerNode);
> + }
> + return Status;
> +}
IMPORTANT NOTICE: The contents of this email and any attachments are confidential and may also be privileged. If you are not the intended recipient, please notify the sender immediately and do not disclose the contents to any other person, use it for any purpose, or store or copy the information in any medium. Thank you.
next prev parent reply other threads:[~2021-10-08 14:24 UTC|newest]
Thread overview: 38+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-10-07 15:31 [PATCH v2 00/21] Create a SSDT CPU topology generator PierreGondois
2021-10-07 15:31 ` [PATCH v2 01/21] DynamicTablesPkg: Remove unnecessary includes PierreGondois
2021-10-08 14:06 ` Sami Mujawar
2021-10-07 15:31 ` [PATCH v2 02/21] DynamicTablesPkg: Add missing parameter check PierreGondois
2021-10-08 14:06 ` Sami Mujawar
2021-10-07 15:31 ` [PATCH v2 03/21] DynamicTablesPkg: Add AddSsdtAcpiHeader() PierreGondois
2021-10-08 14:06 ` Sami Mujawar
2021-10-07 15:31 ` [PATCH v2 04/21] DynamicTablesPkg: Add AmlRdSetEndTagChecksum() PierreGondois
2021-10-08 14:06 ` Sami Mujawar
2021-10-07 15:31 ` [PATCH v2 05/21] DynamicTablesPkg: Add AmlSetRdListCheckSum() PierreGondois
2021-10-08 14:06 ` Sami Mujawar
2021-10-07 15:31 ` [PATCH v2 06/21] DynamicTablesPkg: Set EndTag's Checksum if RdList is modified PierreGondois
2021-10-08 14:06 ` Sami Mujawar
2021-10-07 15:31 ` [PATCH v2 07/21] DynamicTablesPkg: Clear pointer in node creation fcts PierreGondois
2021-10-08 14:06 ` Sami Mujawar
2021-10-07 15:31 ` [PATCH v2 08/21] DynamicTablesPkg: Update error handling for node creation PierreGondois
2021-10-08 14:06 ` Sami Mujawar
2021-10-07 15:31 ` [PATCH v2 09/21] DynamicTablesPkg: Make AmlNodeGetIntegerValue public PierreGondois
2021-10-07 15:31 ` [PATCH v2 10/21] DynamicTablesPkg: AML Code generation for Register() PierreGondois
2021-10-07 15:32 ` [PATCH v2 11/21] DynamicTablesPkg: AML Code generation for Resource data EndTag PierreGondois
2021-10-08 14:07 ` Sami Mujawar
2021-10-07 15:32 ` [PATCH v2 12/21] DynamicTablesPkg: AML code generation for a Package PierreGondois
2021-10-08 14:06 ` Sami Mujawar
2021-10-07 15:32 ` [PATCH v2 13/21] DynamicTablesPkg: Helper function to compute package length PierreGondois
2021-10-07 15:32 ` [PATCH v2 14/21] DynamicTablesPkg: AML code generation for a ResourceTemplate PierreGondois
2021-10-08 14:07 ` Sami Mujawar
2021-10-07 15:32 ` [PATCH v2 15/21] DynamicTablesPkg: AML code generation for a Method PierreGondois
2021-10-08 14:07 ` Sami Mujawar
2021-10-07 15:32 ` [PATCH v2 16/21] DynamicTablesPkg: AML code generation to Return a NameString PierreGondois
2021-10-08 13:28 ` Sami Mujawar
2021-10-07 15:32 ` [PATCH v2 17/21] DynamicTablesPkg: AML code generation for a Method returning a NS PierreGondois
2021-10-08 14:17 ` Sami Mujawar
2021-10-07 15:32 ` [PATCH v2 18/21] DynamicTablesPkg: AML code generation for a _LPI object PierreGondois
2021-10-08 14:24 ` Sami Mujawar [this message]
2021-10-07 15:32 ` [PATCH v2 19/21] DynamicTablesPkg: AML code generation to add an _LPI state PierreGondois
2021-10-08 14:29 ` Sami Mujawar
2021-10-07 15:32 ` [PATCH v2 20/21] DynamicTablesPkg: Add CM_ARM_LPI_INFO object PierreGondois
2021-10-07 15:32 ` [PATCH v2 21/21] DynamicTablesPkg: SSDT CPU topology and LPI state generator PierreGondois
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-list from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=40da6ea6-b7c8-4297-430e-9093a120538f@arm.com \
--to=devel@edk2.groups.io \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox