* [edk2-devel] [PATCH v3 01/11] ArmPkg/ArmScmiDxe: Rename PERFORMANCE_PROTOCOL_VERSION
2023-11-21 16:49 [edk2-devel] [PATCH v3 00/11] DynamicTablesPkg: Enable _PSD/_CPC generation using SCMI PierreGondois
@ 2023-11-21 16:49 ` PierreGondois
2023-11-21 17:02 ` Leif Lindholm
2023-11-21 16:49 ` [edk2-devel] [PATCH v3 02/11] ArmPkg/ArmScmiDxe: Add PERFORMANCE_DESCRIBE_FASTCHANNEL support PierreGondois
` (9 subsequent siblings)
10 siblings, 1 reply; 18+ messages in thread
From: PierreGondois @ 2023-11-21 16:49 UTC (permalink / raw)
To: devel
Cc: Ard Biesheuvel, Leif Lindholm, Sami Mujawar, Michael D Kinney,
Liming Gao
Rename PERFORMANCE_PROTOCOL_VERSION to reflect the different
versions of the protocol. The macro is neither used in edk2 nor
in edk2-platforms.
Signed-off-by: Pierre Gondois <pierre.gondois@arm.com>
---
.../Include/Protocol/ArmScmiPerformanceProtocol.h | 13 ++++++++-----
1 file changed, 8 insertions(+), 5 deletions(-)
diff --git a/ArmPkg/Include/Protocol/ArmScmiPerformanceProtocol.h b/ArmPkg/Include/Protocol/ArmScmiPerformanceProtocol.h
index 7e548e4765c2..a28f0f766e37 100644
--- a/ArmPkg/Include/Protocol/ArmScmiPerformanceProtocol.h
+++ b/ArmPkg/Include/Protocol/ArmScmiPerformanceProtocol.h
@@ -1,12 +1,12 @@
/** @file
- Copyright (c) 2017-2021, Arm Limited. All rights reserved.
+ Copyright (c) 2017-2023, Arm Limited. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent
- System Control and Management Interface V1.0
- http://infocenter.arm.com/help/topic/com.arm.doc.den0056a/
- DEN0056A_System_Control_and_Management_Interface.pdf
+ System Control and Management Interface V3.2, latest version at:
+ - https://developer.arm.com/documentation/den0056/latest/
+
**/
#ifndef ARM_SCMI_PERFORMANCE_PROTOCOL_H_
@@ -14,7 +14,10 @@
#include <Protocol/ArmScmi.h>
-#define PERFORMANCE_PROTOCOL_VERSION 0x10000
+/// Arm Scmi performance protocol versions.
+#define PERFORMANCE_PROTOCOL_VERSION_V1 0x10000
+#define PERFORMANCE_PROTOCOL_VERSION_V2 0x20000
+#define PERFORMANCE_PROTOCOL_VERSION_V3 0x30000
#define ARM_SCMI_PERFORMANCE_PROTOCOL_GUID { \
0x9b8ba84, 0x3dd3, 0x49a6, {0xa0, 0x5a, 0x31, 0x34, 0xa5, 0xf0, 0x7b, 0xad} \
--
2.25.1
-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#111568): https://edk2.groups.io/g/devel/message/111568
Mute This Topic: https://groups.io/mt/102732016/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-
^ permalink raw reply related [flat|nested] 18+ messages in thread
* Re: [edk2-devel] [PATCH v3 01/11] ArmPkg/ArmScmiDxe: Rename PERFORMANCE_PROTOCOL_VERSION
2023-11-21 16:49 ` [edk2-devel] [PATCH v3 01/11] ArmPkg/ArmScmiDxe: Rename PERFORMANCE_PROTOCOL_VERSION PierreGondois
@ 2023-11-21 17:02 ` Leif Lindholm
0 siblings, 0 replies; 18+ messages in thread
From: Leif Lindholm @ 2023-11-21 17:02 UTC (permalink / raw)
To: Pierre Gondois
Cc: devel, Ard Biesheuvel, Sami Mujawar, Michael D Kinney, Liming Gao
On Tue, Nov 21, 2023 at 17:49:57 +0100, Pierre Gondois wrote:
> Rename PERFORMANCE_PROTOCOL_VERSION to reflect the different
> versions of the protocol. The macro is neither used in edk2 nor
> in edk2-platforms.
>
> Signed-off-by: Pierre Gondois <pierre.gondois@arm.com>
Reviewed-by: Leif Lindholm <quic_llindhol@quicinc.com>
> ---
> .../Include/Protocol/ArmScmiPerformanceProtocol.h | 13 ++++++++-----
> 1 file changed, 8 insertions(+), 5 deletions(-)
>
> diff --git a/ArmPkg/Include/Protocol/ArmScmiPerformanceProtocol.h b/ArmPkg/Include/Protocol/ArmScmiPerformanceProtocol.h
> index 7e548e4765c2..a28f0f766e37 100644
> --- a/ArmPkg/Include/Protocol/ArmScmiPerformanceProtocol.h
> +++ b/ArmPkg/Include/Protocol/ArmScmiPerformanceProtocol.h
> @@ -1,12 +1,12 @@
> /** @file
>
> - Copyright (c) 2017-2021, Arm Limited. All rights reserved.
> + Copyright (c) 2017-2023, Arm Limited. All rights reserved.
>
> SPDX-License-Identifier: BSD-2-Clause-Patent
>
> - System Control and Management Interface V1.0
> - http://infocenter.arm.com/help/topic/com.arm.doc.den0056a/
> - DEN0056A_System_Control_and_Management_Interface.pdf
> + System Control and Management Interface V3.2, latest version at:
> + - https://developer.arm.com/documentation/den0056/latest/
> +
> **/
>
> #ifndef ARM_SCMI_PERFORMANCE_PROTOCOL_H_
> @@ -14,7 +14,10 @@
>
> #include <Protocol/ArmScmi.h>
>
> -#define PERFORMANCE_PROTOCOL_VERSION 0x10000
> +/// Arm Scmi performance protocol versions.
> +#define PERFORMANCE_PROTOCOL_VERSION_V1 0x10000
> +#define PERFORMANCE_PROTOCOL_VERSION_V2 0x20000
> +#define PERFORMANCE_PROTOCOL_VERSION_V3 0x30000
>
> #define ARM_SCMI_PERFORMANCE_PROTOCOL_GUID { \
> 0x9b8ba84, 0x3dd3, 0x49a6, {0xa0, 0x5a, 0x31, 0x34, 0xa5, 0xf0, 0x7b, 0xad} \
> --
> 2.25.1
>
-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#111584): https://edk2.groups.io/g/devel/message/111584
Mute This Topic: https://groups.io/mt/102732016/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/leave/12367111/7686176/1913456212/xyzzy [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-
^ permalink raw reply [flat|nested] 18+ messages in thread
* [edk2-devel] [PATCH v3 02/11] ArmPkg/ArmScmiDxe: Add PERFORMANCE_DESCRIBE_FASTCHANNEL support
2023-11-21 16:49 [edk2-devel] [PATCH v3 00/11] DynamicTablesPkg: Enable _PSD/_CPC generation using SCMI PierreGondois
2023-11-21 16:49 ` [edk2-devel] [PATCH v3 01/11] ArmPkg/ArmScmiDxe: Rename PERFORMANCE_PROTOCOL_VERSION PierreGondois
@ 2023-11-21 16:49 ` PierreGondois
2023-11-21 16:49 ` [edk2-devel] [PATCH v3 03/11] MdePkg/Acpi65: Add _PSD/_CPC/State Coordination Types macros PierreGondois
` (8 subsequent siblings)
10 siblings, 0 replies; 18+ messages in thread
From: PierreGondois @ 2023-11-21 16:49 UTC (permalink / raw)
To: devel
Cc: Ard Biesheuvel, Leif Lindholm, Sami Mujawar, Michael D Kinney,
Liming Gao
The PERFORMANCE_DESCRIBE_FASTCHANNEL Scmi command is available
since SCMI v2.0 and allows to query information about the supported
fast-channels of the Scmi performance protocol.
Add support for this command.
Also move SCMI_MESSAGE_ID_PERFORMANCE enum definition up in the file
to use it in SCMI_PERFORMANCE_DESCRIBE_FASTCHANNEL function
declaration.
Reviewed-by: Leif Lindholm <quic_llindhol@quicinc.com>
Signed-off-by: Pierre Gondois <pierre.gondois@arm.com>
---
.../ArmScmiDxe/ScmiPerformanceProtocol.c | 80 +++++++++++++++--
.../Protocol/ArmScmiPerformanceProtocol.h | 88 +++++++++++++++++--
2 files changed, 154 insertions(+), 14 deletions(-)
diff --git a/ArmPkg/Drivers/ArmScmiDxe/ScmiPerformanceProtocol.c b/ArmPkg/Drivers/ArmScmiDxe/ScmiPerformanceProtocol.c
index 0f89808fbdf9..91efce4bf22d 100644
--- a/ArmPkg/Drivers/ArmScmiDxe/ScmiPerformanceProtocol.c
+++ b/ArmPkg/Drivers/ArmScmiDxe/ScmiPerformanceProtocol.c
@@ -1,12 +1,12 @@
/** @file
- Copyright (c) 2017-2021, Arm Limited. All rights reserved.<BR>
+ Copyright (c) 2017-2023, Arm Limited. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent
- System Control and Management Interface V1.0
- http://infocenter.arm.com/help/topic/com.arm.doc.den0056a/
- DEN0056A_System_Control_and_Management_Interface.pdf
+ System Control and Management Interface V3.2, latest version at:
+ - https://developer.arm.com/documentation/den0056/latest/
+
**/
#include <Library/BaseMemoryLib.h>
@@ -416,6 +416,75 @@ PerformanceLevelGet (
return EFI_SUCCESS;
}
+/** Discover the attributes of the FastChannel for the specified
+ performance domain and the specified message.
+
+ @param[in] This A Pointer to SCMI_PERFORMANCE_PROTOCOL Instance.
+ @param[in] DomainId Identifier for the performance domain.
+ @param[in] MessageId Message Id of the FastChannel to discover.
+ Must be one of:
+ - PERFORMANCE_LIMITS_SET
+ - PERFORMANCE_LIMITS_GET
+ - PERFORMANCE_LEVEL_SET
+ - PERFORMANCE_LEVEL_GET
+ @param[out] FastChannel If success, contains the FastChannel description.
+
+ @retval EFI_SUCCESS Performance level got successfully.
+ @retval EFI_DEVICE_ERROR SCP returns an SCMI error.
+ @retval EFI_INVALID_PARAMETER Invalid parameter.
+ @retval EFI_TIMEOUT Time out.
+ @retval EFI_UNSUPPORTED Unsupported.
+**/
+EFI_STATUS
+DescribeFastchannel (
+ IN SCMI_PERFORMANCE_PROTOCOL *This,
+ IN UINT32 DomainId,
+ IN SCMI_MESSAGE_ID_PERFORMANCE MessageId,
+ OUT SCMI_PERFORMANCE_FASTCHANNEL *FastChannel
+ )
+{
+ EFI_STATUS Status;
+ SCMI_COMMAND Cmd;
+ UINT32 PayloadLength;
+ UINT32 *ReturnValues;
+ UINT32 *MessageParams;
+
+ if ((This == NULL) ||
+ (FastChannel == NULL))
+ {
+ return EFI_INVALID_PARAMETER;
+ }
+
+ Status = ScmiCommandGetPayload (&MessageParams);
+ if (EFI_ERROR (Status)) {
+ return Status;
+ }
+
+ *MessageParams++ = DomainId;
+ *MessageParams = MessageId;
+
+ Cmd.ProtocolId = ScmiProtocolIdPerformance;
+ Cmd.MessageId = ScmiMessageIdPerformanceDescribeFastchannel;
+ PayloadLength = sizeof (DomainId) + sizeof (MessageId);
+
+ Status = ScmiCommandExecute (
+ &Cmd,
+ &PayloadLength,
+ &ReturnValues
+ );
+ if (EFI_ERROR (Status)) {
+ return Status;
+ }
+
+ CopyMem (
+ FastChannel,
+ ReturnValues,
+ sizeof (SCMI_PERFORMANCE_FASTCHANNEL)
+ );
+
+ return Status;
+}
+
// Instance of the SCMI performance management protocol.
STATIC CONST SCMI_PERFORMANCE_PROTOCOL PerformanceProtocol = {
PerformanceGetVersion,
@@ -425,7 +494,8 @@ STATIC CONST SCMI_PERFORMANCE_PROTOCOL PerformanceProtocol = {
PerformanceLimitsSet,
PerformanceLimitsGet,
PerformanceLevelSet,
- PerformanceLevelGet
+ PerformanceLevelGet,
+ DescribeFastchannel,
};
/** Initialize performance management protocol and install on a given Handle.
diff --git a/ArmPkg/Include/Protocol/ArmScmiPerformanceProtocol.h b/ArmPkg/Include/Protocol/ArmScmiPerformanceProtocol.h
index a28f0f766e37..c69efe7408e1 100644
--- a/ArmPkg/Include/Protocol/ArmScmiPerformanceProtocol.h
+++ b/ArmPkg/Include/Protocol/ArmScmiPerformanceProtocol.h
@@ -79,8 +79,58 @@ typedef struct {
UINT32 RangeMin;
} SCMI_PERFORMANCE_LIMITS;
+/// Doorbell Support bit.
+#define SCMI_PERF_FC_ATTRIB_HAS_DOORBELL BIT0
+
+/// Performance protocol describe fastchannel
+typedef struct {
+ /// Attributes.
+ UINT32 Attributes;
+
+ /// Rate limit.
+ UINT32 RateLimit;
+
+ /// Lower 32 bits of the FastChannel address.
+ UINT32 ChanAddrLow;
+
+ /// Higher 32 bits of the FastChannel address.
+ UINT32 ChanAddrHigh;
+
+ /// Size of the FastChannel in bytes.
+ UINT32 ChanSize;
+
+ /// Lower 32 bits of the doorbell address.
+ UINT32 DoorbellAddrLow;
+
+ /// Higher 32 bits of the doorbell address.
+ UINT32 DoorbellAddrHigh;
+
+ /// Mask of lower 32 bits to set when writing to the doorbell register.
+ UINT32 DoorbellSetMaskLow;
+
+ /// Mask of higher 32 bits to set when writing to the doorbell register.
+ UINT32 DoorbellSetMaskHigh;
+
+ /// Mask of lower 32 bits to preserve when writing to the doorbell register.
+ UINT32 DoorbellPreserveMaskLow;
+
+ /// Mask of higher 32 bits to preserve when writing to the doorbell register.
+ UINT32 DoorbellPreserveMaskHigh;
+} SCMI_PERFORMANCE_FASTCHANNEL;
+
#pragma pack()
+/// SCMI Message Ids for the Performance Protocol.
+typedef enum {
+ ScmiMessageIdPerformanceDomainAttributes = 0x3,
+ ScmiMessageIdPerformanceDescribeLevels = 0x4,
+ ScmiMessageIdPerformanceLimitsSet = 0x5,
+ ScmiMessageIdPerformanceLimitsGet = 0x6,
+ ScmiMessageIdPerformanceLevelSet = 0x7,
+ ScmiMessageIdPerformanceLevelGet = 0x8,
+ ScmiMessageIdPerformanceDescribeFastchannel = 0xB,
+} SCMI_MESSAGE_ID_PERFORMANCE;
+
/** Return version of the performance management protocol supported by SCP.
firmware.
@@ -238,6 +288,34 @@ EFI_STATUS
OUT UINT32 *Level
);
+/** Discover the attributes of the FastChannel for the specified
+ performance domain and the specified message.
+
+ @param[in] This A Pointer to SCMI_PERFORMANCE_PROTOCOL Instance.
+ @param[in] DomainId Identifier for the performance domain.
+ @param[in] MessageId Message Id of the FastChannel to discover.
+ Must be one of:
+ - PERFORMANCE_LIMITS_SET
+ - PERFORMANCE_LIMITS_GET
+ - PERFORMANCE_LEVEL_SET
+ - PERFORMANCE_LEVEL_GET
+ @param[out] FastChannel If success, contains the FastChannel description.
+
+ @retval EFI_SUCCESS Performance level got successfully.
+ @retval EFI_DEVICE_ERROR SCP returns an SCMI error.
+ @retval EFI_INVALID_PARAMETER Invalid parameter.
+ @retval EFI_TIMEOUT Time out.
+ @retval EFI_UNSUPPORTED Unsupported.
+**/
+typedef
+EFI_STATUS
+(EFIAPI *SCMI_PERFORMANCE_DESCRIBE_FASTCHANNEL)(
+ IN SCMI_PERFORMANCE_PROTOCOL *This,
+ IN UINT32 DomainId,
+ IN SCMI_MESSAGE_ID_PERFORMANCE MessageId,
+ OUT SCMI_PERFORMANCE_FASTCHANNEL *FastChannel
+ );
+
typedef struct _SCMI_PERFORMANCE_PROTOCOL {
SCMI_PERFORMANCE_GET_VERSION GetVersion;
SCMI_PERFORMANCE_GET_ATTRIBUTES GetProtocolAttributes;
@@ -247,15 +325,7 @@ typedef struct _SCMI_PERFORMANCE_PROTOCOL {
SCMI_PERFORMANCE_LIMITS_GET LimitsGet;
SCMI_PERFORMANCE_LEVEL_SET LevelSet;
SCMI_PERFORMANCE_LEVEL_GET LevelGet;
+ SCMI_PERFORMANCE_DESCRIBE_FASTCHANNEL DescribeFastchannel;
} SCMI_PERFORMANCE_PROTOCOL;
-typedef enum {
- ScmiMessageIdPerformanceDomainAttributes = 0x3,
- ScmiMessageIdPerformanceDescribeLevels = 0x4,
- ScmiMessageIdPerformanceLimitsSet = 0x5,
- ScmiMessageIdPerformanceLimitsGet = 0x6,
- ScmiMessageIdPerformanceLevelSet = 0x7,
- ScmiMessageIdPerformanceLevelGet = 0x8,
-} SCMI_MESSAGE_ID_PERFORMANCE;
-
#endif /* ARM_SCMI_PERFORMANCE_PROTOCOL_H_ */
--
2.25.1
-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#111569): https://edk2.groups.io/g/devel/message/111569
Mute This Topic: https://groups.io/mt/102732017/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [edk2-devel] [PATCH v3 03/11] MdePkg/Acpi65: Add _PSD/_CPC/State Coordination Types macros
2023-11-21 16:49 [edk2-devel] [PATCH v3 00/11] DynamicTablesPkg: Enable _PSD/_CPC generation using SCMI PierreGondois
2023-11-21 16:49 ` [edk2-devel] [PATCH v3 01/11] ArmPkg/ArmScmiDxe: Rename PERFORMANCE_PROTOCOL_VERSION PierreGondois
2023-11-21 16:49 ` [edk2-devel] [PATCH v3 02/11] ArmPkg/ArmScmiDxe: Add PERFORMANCE_DESCRIBE_FASTCHANNEL support PierreGondois
@ 2023-11-21 16:49 ` PierreGondois
2023-11-22 0:03 ` Ni, Ray
2023-11-21 16:50 ` [edk2-devel] [PATCH v3 04/11] DynamicTablesPkg: Use new CPC revision macro PierreGondois
` (7 subsequent siblings)
10 siblings, 1 reply; 18+ messages in thread
From: PierreGondois @ 2023-11-21 16:49 UTC (permalink / raw)
To: devel
Cc: Ard Biesheuvel, Leif Lindholm, Sami Mujawar, Michael D Kinney,
Liming Gao
Add macros for:
- _PSD version
- _CPC version
- C-state/T-state/P-state Coordination Types
These objects were present in previous ACPI specification version,
but are only added to the latest availbable version (6.5).
Signed-off-by: Pierre Gondois <pierre.gondois@arm.com>
---
MdePkg/Include/IndustryStandard/Acpi65.h | 23 +++++++++++++++++++++++
1 file changed, 23 insertions(+)
diff --git a/MdePkg/Include/IndustryStandard/Acpi65.h b/MdePkg/Include/IndustryStandard/Acpi65.h
index d79d0b2b5f9c..ec7c34e8e190 100644
--- a/MdePkg/Include/IndustryStandard/Acpi65.h
+++ b/MdePkg/Include/IndustryStandard/Acpi65.h
@@ -18,6 +18,29 @@
//
#pragma pack(1)
+///
+/// C-state/T-state/P-state Coordination Types
+/// Cf. s8.3 Power, Performance, and Throttling State Dependencies
+///
+#define EFI_ACPI_6_5_AML_STATE_COORD_TYPE_SW_ALL 0xFC
+#define EFI_ACPI_6_5_AML_STATE_COORD_TYPE_SW_ANY 0xFD
+#define EFI_ACPI_6_5_AML_STATE_COORD_TYPE_HW_ALL 0xFE
+
+///
+/// _PSD Revision
+/// Cf. s8.4.5.5 _PSD (P-State Dependency)
+///
+#define EFI_ACPI_6_5_AML_PSD_REVISION_V0 0
+
+///
+/// _CPC Revision
+/// Cf. s8.4.6.1 _CPC (Continuous Performance Control)
+///
+#define EFI_ACPI_6_5_AML_CPC_REVISION_V0 0
+#define EFI_ACPI_6_5_AML_CPC_REVISION_V1 1
+#define EFI_ACPI_6_5_AML_CPC_REVISION_V2 2
+#define EFI_ACPI_6_5_AML_CPC_REVISION_V3 3
+
///
/// ACPI 6.5 Generic Address Space definition
///
--
2.25.1
-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#111570): https://edk2.groups.io/g/devel/message/111570
Mute This Topic: https://groups.io/mt/102732018/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-
^ permalink raw reply related [flat|nested] 18+ messages in thread
* Re: [edk2-devel] [PATCH v3 03/11] MdePkg/Acpi65: Add _PSD/_CPC/State Coordination Types macros
2023-11-21 16:49 ` [edk2-devel] [PATCH v3 03/11] MdePkg/Acpi65: Add _PSD/_CPC/State Coordination Types macros PierreGondois
@ 2023-11-22 0:03 ` Ni, Ray
2023-11-22 7:54 ` PierreGondois
0 siblings, 1 reply; 18+ messages in thread
From: Ni, Ray @ 2023-11-22 0:03 UTC (permalink / raw)
To: devel@edk2.groups.io, pierre.gondois@arm.com
Cc: Ard Biesheuvel, Leif Lindholm, Sami Mujawar, Kinney, Michael D,
Gao, Liming
These ACPI methods were there since long ago.
Why do you only add the related definitions to 65.h?
> Cf. s8.3 Power, Performance, and Throttling State Dependencies
What does "Cf. s8.3" mean?
Thanks,
Ray
> -----Original Message-----
> From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of
> PierreGondois
> Sent: Wednesday, November 22, 2023 12:50 AM
> To: devel@edk2.groups.io
> Cc: Ard Biesheuvel <ardb+tianocore@kernel.org>; Leif Lindholm
> <quic_llindhol@quicinc.com>; Sami Mujawar <sami.mujawar@arm.com>;
> Kinney, Michael D <michael.d.kinney@intel.com>; Gao, Liming
> <gaoliming@byosoft.com.cn>
> Subject: [edk2-devel] [PATCH v3 03/11] MdePkg/Acpi65: Add
> _PSD/_CPC/State Coordination Types macros
>
> Add macros for:
> - _PSD version
> - _CPC version
> - C-state/T-state/P-state Coordination Types
>
> These objects were present in previous ACPI specification version,
> but are only added to the latest availbable version (6.5).
>
> Signed-off-by: Pierre Gondois <pierre.gondois@arm.com>
> ---
> MdePkg/Include/IndustryStandard/Acpi65.h | 23
> +++++++++++++++++++++++
> 1 file changed, 23 insertions(+)
>
> diff --git a/MdePkg/Include/IndustryStandard/Acpi65.h
> b/MdePkg/Include/IndustryStandard/Acpi65.h
> index d79d0b2b5f9c..ec7c34e8e190 100644
> --- a/MdePkg/Include/IndustryStandard/Acpi65.h
> +++ b/MdePkg/Include/IndustryStandard/Acpi65.h
> @@ -18,6 +18,29 @@
> //
>
> #pragma pack(1)
>
>
>
> +///
>
> +/// C-state/T-state/P-state Coordination Types
>
> +/// Cf. s8.3 Power, Performance, and Throttling State Dependencies
>
> +///
>
> +#define EFI_ACPI_6_5_AML_STATE_COORD_TYPE_SW_ALL 0xFC
>
> +#define EFI_ACPI_6_5_AML_STATE_COORD_TYPE_SW_ANY 0xFD
>
> +#define EFI_ACPI_6_5_AML_STATE_COORD_TYPE_HW_ALL 0xFE
>
> +
>
> +///
>
> +/// _PSD Revision
>
> +/// Cf. s8.4.5.5 _PSD (P-State Dependency)
>
> +///
>
> +#define EFI_ACPI_6_5_AML_PSD_REVISION_V0 0
>
> +
>
> +///
>
> +/// _CPC Revision
>
> +/// Cf. s8.4.6.1 _CPC (Continuous Performance Control)
>
> +///
>
> +#define EFI_ACPI_6_5_AML_CPC_REVISION_V0 0
>
> +#define EFI_ACPI_6_5_AML_CPC_REVISION_V1 1
>
> +#define EFI_ACPI_6_5_AML_CPC_REVISION_V2 2
>
> +#define EFI_ACPI_6_5_AML_CPC_REVISION_V3 3
>
> +
>
> ///
>
> /// ACPI 6.5 Generic Address Space definition
>
> ///
>
> --
> 2.25.1
>
>
>
> -=-=-=-=-=-=
> Groups.io Links: You receive all messages sent to this group.
> View/Reply Online (#111570):
> https://edk2.groups.io/g/devel/message/111570
> Mute This Topic: https://groups.io/mt/102732018/1712937
> Group Owner: devel+owner@edk2.groups.io
> Unsubscribe: https://edk2.groups.io/g/devel/unsub [ray.ni@intel.com]
> -=-=-=-=-=-=
>
-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#111590): https://edk2.groups.io/g/devel/message/111590
Mute This Topic: https://groups.io/mt/102732018/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/leave/12367111/7686176/1913456212/xyzzy [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [edk2-devel] [PATCH v3 03/11] MdePkg/Acpi65: Add _PSD/_CPC/State Coordination Types macros
2023-11-22 0:03 ` Ni, Ray
@ 2023-11-22 7:54 ` PierreGondois
2023-11-27 8:36 ` PierreGondois
0 siblings, 1 reply; 18+ messages in thread
From: PierreGondois @ 2023-11-22 7:54 UTC (permalink / raw)
To: Ni, Ray, devel@edk2.groups.io
Cc: Ard Biesheuvel, Leif Lindholm, Sami Mujawar, Kinney, Michael D,
Gao, Liming
Hello Ray,
On 11/22/23 01:03, Ni, Ray wrote:
> These ACPI methods were there since long ago.
> Why do you only add the related definitions to 65.h?
I have only added the definitions to the latest ACPI definition file
(i.e. 6.5) because:
- as it was not defined before, I assumed it was not used previously
in edk2 and definitions for older ACPI spec versions might not be
necessary (i.e. no need to use EFI_ACPI_6_4_xxx definition if
EFI_ACPI_6_5_xxx is available)
- this present patch-set only requires the latest definitions
Do you want to have definitions for all spec. versions ?
>
>> Cf. s8.3 Power, Performance, and Throttling State Dependencies
>
> What does "Cf. s8.3" mean?
I used s8.3 for 'section 8.3' (in the ACPI 6.5 spec),
>
> Thanks,
> Ray
>> -----Original Message-----
>> From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of
>> PierreGondois
>> Sent: Wednesday, November 22, 2023 12:50 AM
>> To: devel@edk2.groups.io
>> Cc: Ard Biesheuvel <ardb+tianocore@kernel.org>; Leif Lindholm
>> <quic_llindhol@quicinc.com>; Sami Mujawar <sami.mujawar@arm.com>;
>> Kinney, Michael D <michael.d.kinney@intel.com>; Gao, Liming
>> <gaoliming@byosoft.com.cn>
>> Subject: [edk2-devel] [PATCH v3 03/11] MdePkg/Acpi65: Add
>> _PSD/_CPC/State Coordination Types macros
>>
>> Add macros for:
>> - _PSD version
>> - _CPC version
>> - C-state/T-state/P-state Coordination Types
>>
>> These objects were present in previous ACPI specification version,
>> but are only added to the latest availbable version (6.5).
>>
>> Signed-off-by: Pierre Gondois <pierre.gondois@arm.com>
>> ---
>> MdePkg/Include/IndustryStandard/Acpi65.h | 23
>> +++++++++++++++++++++++
>> 1 file changed, 23 insertions(+)
>>
>> diff --git a/MdePkg/Include/IndustryStandard/Acpi65.h
>> b/MdePkg/Include/IndustryStandard/Acpi65.h
>> index d79d0b2b5f9c..ec7c34e8e190 100644
>> --- a/MdePkg/Include/IndustryStandard/Acpi65.h
>> +++ b/MdePkg/Include/IndustryStandard/Acpi65.h
>> @@ -18,6 +18,29 @@
>> //
>>
>> #pragma pack(1)
>>
>>
>>
>> +///
>>
>> +/// C-state/T-state/P-state Coordination Types
>>
>> +/// Cf. s8.3 Power, Performance, and Throttling State Dependencies
>>
>> +///
>>
>> +#define EFI_ACPI_6_5_AML_STATE_COORD_TYPE_SW_ALL 0xFC
>>
>> +#define EFI_ACPI_6_5_AML_STATE_COORD_TYPE_SW_ANY 0xFD
>>
>> +#define EFI_ACPI_6_5_AML_STATE_COORD_TYPE_HW_ALL 0xFE
>>
>> +
>>
>> +///
>>
>> +/// _PSD Revision
>>
>> +/// Cf. s8.4.5.5 _PSD (P-State Dependency)
>>
>> +///
>>
>> +#define EFI_ACPI_6_5_AML_PSD_REVISION_V0 0
>>
>> +
>>
>> +///
>>
>> +/// _CPC Revision
>>
>> +/// Cf. s8.4.6.1 _CPC (Continuous Performance Control)
>>
>> +///
>>
>> +#define EFI_ACPI_6_5_AML_CPC_REVISION_V0 0
>>
>> +#define EFI_ACPI_6_5_AML_CPC_REVISION_V1 1
>>
>> +#define EFI_ACPI_6_5_AML_CPC_REVISION_V2 2
>>
>> +#define EFI_ACPI_6_5_AML_CPC_REVISION_V3 3
Also a personal note, I realize this doesn't really make sense to define
versions like this, as there is only one revision for ACPI 6.5. This should
be instead:
#define EFI_ACPI_6_5_AML_CPC_REVISION 3
(same comment for EFI_ACPI_6_5_AML_PSD_REVISION_V0 above)
Regards,
Pierre
-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#111598): https://edk2.groups.io/g/devel/message/111598
Mute This Topic: https://groups.io/mt/102732018/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [edk2-devel] [PATCH v3 03/11] MdePkg/Acpi65: Add _PSD/_CPC/State Coordination Types macros
2023-11-22 7:54 ` PierreGondois
@ 2023-11-27 8:36 ` PierreGondois
2023-11-30 1:07 ` Ni, Ray
0 siblings, 1 reply; 18+ messages in thread
From: PierreGondois @ 2023-11-27 8:36 UTC (permalink / raw)
To: Ni, Ray, devel@edk2.groups.io
Cc: Ard Biesheuvel, Leif Lindholm, Sami Mujawar, Kinney, Michael D,
Gao, Liming
Hello Ray,
Is the patch acceptable as it is ? Or is there something to modify
before I send a new version ?
Regards,
Pierre
On 11/22/23 08:54, Pierre Gondois wrote:
> Hello Ray,
>
> On 11/22/23 01:03, Ni, Ray wrote:
>> These ACPI methods were there since long ago.
>> Why do you only add the related definitions to 65.h?
>
> I have only added the definitions to the latest ACPI definition file
> (i.e. 6.5) because:
> - as it was not defined before, I assumed it was not used previously
> in edk2 and definitions for older ACPI spec versions might not be
> necessary (i.e. no need to use EFI_ACPI_6_4_xxx definition if
> EFI_ACPI_6_5_xxx is available)
> - this present patch-set only requires the latest definitions
>
> Do you want to have definitions for all spec. versions ?
>
>>
>>> Cf. s8.3 Power, Performance, and Throttling State Dependencies
>>
>> What does "Cf. s8.3" mean?
>
> I used s8.3 for 'section 8.3' (in the ACPI 6.5 spec),
>
>>
>> Thanks,
>> Ray
>>> -----Original Message-----
>>> From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of
>>> PierreGondois
>>> Sent: Wednesday, November 22, 2023 12:50 AM
>>> To: devel@edk2.groups.io
>>> Cc: Ard Biesheuvel <ardb+tianocore@kernel.org>; Leif Lindholm
>>> <quic_llindhol@quicinc.com>; Sami Mujawar <sami.mujawar@arm.com>;
>>> Kinney, Michael D <michael.d.kinney@intel.com>; Gao, Liming
>>> <gaoliming@byosoft.com.cn>
>>> Subject: [edk2-devel] [PATCH v3 03/11] MdePkg/Acpi65: Add
>>> _PSD/_CPC/State Coordination Types macros
>>>
>>> Add macros for:
>>> - _PSD version
>>> - _CPC version
>>> - C-state/T-state/P-state Coordination Types
>>>
>>> These objects were present in previous ACPI specification version,
>>> but are only added to the latest availbable version (6.5).
>>>
>>> Signed-off-by: Pierre Gondois <pierre.gondois@arm.com>
>>> ---
>>> MdePkg/Include/IndustryStandard/Acpi65.h | 23
>>> +++++++++++++++++++++++
>>> 1 file changed, 23 insertions(+)
>>>
>>> diff --git a/MdePkg/Include/IndustryStandard/Acpi65.h
>>> b/MdePkg/Include/IndustryStandard/Acpi65.h
>>> index d79d0b2b5f9c..ec7c34e8e190 100644
>>> --- a/MdePkg/Include/IndustryStandard/Acpi65.h
>>> +++ b/MdePkg/Include/IndustryStandard/Acpi65.h
>>> @@ -18,6 +18,29 @@
>>> //
>>>
>>> #pragma pack(1)
>>>
>>>
>>>
>>> +///
>>>
>>> +/// C-state/T-state/P-state Coordination Types
>>>
>>> +/// Cf. s8.3 Power, Performance, and Throttling State Dependencies
>>>
>>> +///
>>>
>>> +#define EFI_ACPI_6_5_AML_STATE_COORD_TYPE_SW_ALL 0xFC
>>>
>>> +#define EFI_ACPI_6_5_AML_STATE_COORD_TYPE_SW_ANY 0xFD
>>>
>>> +#define EFI_ACPI_6_5_AML_STATE_COORD_TYPE_HW_ALL 0xFE
>>>
>>> +
>>>
>>> +///
>>>
>>> +/// _PSD Revision
>>>
>>> +/// Cf. s8.4.5.5 _PSD (P-State Dependency)
>>>
>>> +///
>>>
>>> +#define EFI_ACPI_6_5_AML_PSD_REVISION_V0 0
>>>
>>> +
>>>
>>> +///
>>>
>>> +/// _CPC Revision
>>>
>>> +/// Cf. s8.4.6.1 _CPC (Continuous Performance Control)
>>>
>>> +///
>>>
>>> +#define EFI_ACPI_6_5_AML_CPC_REVISION_V0 0
>>>
>>> +#define EFI_ACPI_6_5_AML_CPC_REVISION_V1 1
>>>
>>> +#define EFI_ACPI_6_5_AML_CPC_REVISION_V2 2
>>>
>>> +#define EFI_ACPI_6_5_AML_CPC_REVISION_V3 3
>
> Also a personal note, I realize this doesn't really make sense to define
> versions like this, as there is only one revision for ACPI 6.5. This should
> be instead:
>
> #define EFI_ACPI_6_5_AML_CPC_REVISION 3
>
> (same comment for EFI_ACPI_6_5_AML_PSD_REVISION_V0 above)
>
> Regards,
> Pierre
-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#111732): https://edk2.groups.io/g/devel/message/111732
Mute This Topic: https://groups.io/mt/102732018/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [edk2-devel] [PATCH v3 03/11] MdePkg/Acpi65: Add _PSD/_CPC/State Coordination Types macros
2023-11-27 8:36 ` PierreGondois
@ 2023-11-30 1:07 ` Ni, Ray
0 siblings, 0 replies; 18+ messages in thread
From: Ni, Ray @ 2023-11-30 1:07 UTC (permalink / raw)
To: Pierre Gondois, devel@edk2.groups.io
Cc: Ard Biesheuvel, Leif Lindholm, Sami Mujawar, Kinney, Michael D,
Gao, Liming
I suggest you add the definition to the specific Acpi##.h where ## is the APCI spec version when these definitions were added.
Since the newer Acpi##.h includes older Acpi##.h, the definitions would be naturally included even if user includes Acpi65.h.
The macro name does not have to carry the ACPI version. So this can avoid newer Acpi##.h to define macros again.
For example:
#define EFI_ACPI_PROCESSOR_STATE_COORD_TYPE_SW_ALL 0xFC
Thanks,
Ray
> -----Original Message-----
> From: Pierre Gondois <pierre.gondois@arm.com>
> Sent: Monday, November 27, 2023 4:36 PM
> To: Ni, Ray <ray.ni@intel.com>; devel@edk2.groups.io
> Cc: Ard Biesheuvel <ardb+tianocore@kernel.org>; Leif Lindholm
> <quic_llindhol@quicinc.com>; Sami Mujawar <sami.mujawar@arm.com>;
> Kinney, Michael D <michael.d.kinney@intel.com>; Gao, Liming
> <gaoliming@byosoft.com.cn>
> Subject: Re: [edk2-devel] [PATCH v3 03/11] MdePkg/Acpi65: Add
> _PSD/_CPC/State Coordination Types macros
>
> Hello Ray,
> Is the patch acceptable as it is ? Or is there something to modify
> before I send a new version ?
>
> Regards,
> Pierre
>
> On 11/22/23 08:54, Pierre Gondois wrote:
> > Hello Ray,
> >
> > On 11/22/23 01:03, Ni, Ray wrote:
> >> These ACPI methods were there since long ago.
> >> Why do you only add the related definitions to 65.h?
> >
> > I have only added the definitions to the latest ACPI definition file
> > (i.e. 6.5) because:
> > - as it was not defined before, I assumed it was not used previously
> > in edk2 and definitions for older ACPI spec versions might not be
> > necessary (i.e. no need to use EFI_ACPI_6_4_xxx definition if
> > EFI_ACPI_6_5_xxx is available)
> > - this present patch-set only requires the latest definitions
> >
> > Do you want to have definitions for all spec. versions ?
> >
> >>
> >>> Cf. s8.3 Power, Performance, and Throttling State Dependencies
> >>
> >> What does "Cf. s8.3" mean?
> >
> > I used s8.3 for 'section 8.3' (in the ACPI 6.5 spec),
> >
> >>
> >> Thanks,
> >> Ray
> >>> -----Original Message-----
> >>> From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of
> >>> PierreGondois
> >>> Sent: Wednesday, November 22, 2023 12:50 AM
> >>> To: devel@edk2.groups.io
> >>> Cc: Ard Biesheuvel <ardb+tianocore@kernel.org>; Leif Lindholm
> >>> <quic_llindhol@quicinc.com>; Sami Mujawar
> <sami.mujawar@arm.com>;
> >>> Kinney, Michael D <michael.d.kinney@intel.com>; Gao, Liming
> >>> <gaoliming@byosoft.com.cn>
> >>> Subject: [edk2-devel] [PATCH v3 03/11] MdePkg/Acpi65: Add
> >>> _PSD/_CPC/State Coordination Types macros
> >>>
> >>> Add macros for:
> >>> - _PSD version
> >>> - _CPC version
> >>> - C-state/T-state/P-state Coordination Types
> >>>
> >>> These objects were present in previous ACPI specification version,
> >>> but are only added to the latest availbable version (6.5).
> >>>
> >>> Signed-off-by: Pierre Gondois <pierre.gondois@arm.com>
> >>> ---
> >>> MdePkg/Include/IndustryStandard/Acpi65.h | 23
> >>> +++++++++++++++++++++++
> >>> 1 file changed, 23 insertions(+)
> >>>
> >>> diff --git a/MdePkg/Include/IndustryStandard/Acpi65.h
> >>> b/MdePkg/Include/IndustryStandard/Acpi65.h
> >>> index d79d0b2b5f9c..ec7c34e8e190 100644
> >>> --- a/MdePkg/Include/IndustryStandard/Acpi65.h
> >>> +++ b/MdePkg/Include/IndustryStandard/Acpi65.h
> >>> @@ -18,6 +18,29 @@
> >>> //
> >>>
> >>> #pragma pack(1)
> >>>
> >>>
> >>>
> >>> +///
> >>>
> >>> +/// C-state/T-state/P-state Coordination Types
> >>>
> >>> +/// Cf. s8.3 Power, Performance, and Throttling State Dependencies
> >>>
> >>> +///
> >>>
> >>> +#define EFI_ACPI_6_5_AML_STATE_COORD_TYPE_SW_ALL 0xFC
> >>>
> >>> +#define EFI_ACPI_6_5_AML_STATE_COORD_TYPE_SW_ANY 0xFD
> >>>
> >>> +#define EFI_ACPI_6_5_AML_STATE_COORD_TYPE_HW_ALL 0xFE
> >>>
> >>> +
> >>>
> >>> +///
> >>>
> >>> +/// _PSD Revision
> >>>
> >>> +/// Cf. s8.4.5.5 _PSD (P-State Dependency)
> >>>
> >>> +///
> >>>
> >>> +#define EFI_ACPI_6_5_AML_PSD_REVISION_V0 0
> >>>
> >>> +
> >>>
> >>> +///
> >>>
> >>> +/// _CPC Revision
> >>>
> >>> +/// Cf. s8.4.6.1 _CPC (Continuous Performance Control)
> >>>
> >>> +///
> >>>
> >>> +#define EFI_ACPI_6_5_AML_CPC_REVISION_V0 0
> >>>
> >>> +#define EFI_ACPI_6_5_AML_CPC_REVISION_V1 1
> >>>
> >>> +#define EFI_ACPI_6_5_AML_CPC_REVISION_V2 2
> >>>
> >>> +#define EFI_ACPI_6_5_AML_CPC_REVISION_V3 3
> >
> > Also a personal note, I realize this doesn't really make sense to define
> > versions like this, as there is only one revision for ACPI 6.5. This should
> > be instead:
> >
> > #define EFI_ACPI_6_5_AML_CPC_REVISION 3
> >
> > (same comment for EFI_ACPI_6_5_AML_PSD_REVISION_V0 above)
> >
> > Regards,
> > Pierre
-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#111872): https://edk2.groups.io/g/devel/message/111872
Mute This Topic: https://groups.io/mt/102732018/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/leave/12367111/7686176/1913456212/xyzzy [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-
^ permalink raw reply [flat|nested] 18+ messages in thread
* [edk2-devel] [PATCH v3 04/11] DynamicTablesPkg: Use new CPC revision macro
2023-11-21 16:49 [edk2-devel] [PATCH v3 00/11] DynamicTablesPkg: Enable _PSD/_CPC generation using SCMI PierreGondois
` (2 preceding siblings ...)
2023-11-21 16:49 ` [edk2-devel] [PATCH v3 03/11] MdePkg/Acpi65: Add _PSD/_CPC/State Coordination Types macros PierreGondois
@ 2023-11-21 16:50 ` PierreGondois
2023-11-21 16:50 ` [edk2-devel] [PATCH v3 05/11] DynamicTablesPkg: Rename AmlCpcInfo.h to AcpiObjects.h PierreGondois
` (6 subsequent siblings)
10 siblings, 0 replies; 18+ messages in thread
From: PierreGondois @ 2023-11-21 16:50 UTC (permalink / raw)
To: devel
Cc: Ard Biesheuvel, Leif Lindholm, Sami Mujawar, Michael D Kinney,
Liming Gao
Make use of the newly added CPC revision macro.
Signed-off-by: Pierre Gondois <pierre.gondois@arm.com>
---
DynamicTablesPkg/Library/Common/AmlLib/CodeGen/AmlCodeGen.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/DynamicTablesPkg/Library/Common/AmlLib/CodeGen/AmlCodeGen.c b/DynamicTablesPkg/Library/Common/AmlLib/CodeGen/AmlCodeGen.c
index a6db34fb970f..1ff8430c29c3 100644
--- a/DynamicTablesPkg/Library/Common/AmlLib/CodeGen/AmlCodeGen.c
+++ b/DynamicTablesPkg/Library/Common/AmlLib/CodeGen/AmlCodeGen.c
@@ -3523,7 +3523,7 @@ AmlCreateCpcNode (
}
// Revision 3 per ACPI 6.4 specification
- if (CpcInfo->Revision == 3) {
+ if (CpcInfo->Revision == EFI_ACPI_6_5_AML_CPC_REVISION_V3) {
// NumEntries 23 per ACPI 6.4 specification
NumberOfEntries = 23;
} else {
--
2.25.1
-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#111571): https://edk2.groups.io/g/devel/message/111571
Mute This Topic: https://groups.io/mt/102732020/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [edk2-devel] [PATCH v3 05/11] DynamicTablesPkg: Rename AmlCpcInfo.h to AcpiObjects.h
2023-11-21 16:49 [edk2-devel] [PATCH v3 00/11] DynamicTablesPkg: Enable _PSD/_CPC generation using SCMI PierreGondois
` (3 preceding siblings ...)
2023-11-21 16:50 ` [edk2-devel] [PATCH v3 04/11] DynamicTablesPkg: Use new CPC revision macro PierreGondois
@ 2023-11-21 16:50 ` PierreGondois
2023-11-21 16:50 ` [edk2-devel] [PATCH v3 06/11] DynamicTablesPkg: Add CM_ARM_PSD_INFO object PierreGondois
` (5 subsequent siblings)
10 siblings, 0 replies; 18+ messages in thread
From: PierreGondois @ 2023-11-21 16:50 UTC (permalink / raw)
To: devel
Cc: Ard Biesheuvel, Leif Lindholm, Sami Mujawar, Michael D Kinney,
Liming Gao
The DynamicTables framework uses the AmlLib to generate some
Aml objects. It is done by using structured known by both
frameworks, e.g. the AML_CPC_INFO/CM_ARM_CPC_INFO structures.
To prepare adding similar structures (e.g. representing _PSD
information), rename AmlCpcInfo.h to AcpiObjects.h. This new
file will contain all the structures used by the AmlLib and
the DynamicTables framework.
Signed-off-by: Pierre Gondois <pierre.gondois@arm.com>
---
DynamicTablesPkg/Include/{AmlCpcInfo.h => AcpiObjects.h} | 0
DynamicTablesPkg/Include/ArmNameSpaceObjects.h | 2 +-
DynamicTablesPkg/Include/Library/AmlLib/AmlLib.h | 2 +-
DynamicTablesPkg/Library/Common/AmlLib/CodeGen/AmlCodeGen.c | 2 +-
4 files changed, 3 insertions(+), 3 deletions(-)
rename DynamicTablesPkg/Include/{AmlCpcInfo.h => AcpiObjects.h} (100%)
diff --git a/DynamicTablesPkg/Include/AmlCpcInfo.h b/DynamicTablesPkg/Include/AcpiObjects.h
similarity index 100%
rename from DynamicTablesPkg/Include/AmlCpcInfo.h
rename to DynamicTablesPkg/Include/AcpiObjects.h
diff --git a/DynamicTablesPkg/Include/ArmNameSpaceObjects.h b/DynamicTablesPkg/Include/ArmNameSpaceObjects.h
index 8c00bdac20bb..453cc3fe83fa 100644
--- a/DynamicTablesPkg/Include/ArmNameSpaceObjects.h
+++ b/DynamicTablesPkg/Include/ArmNameSpaceObjects.h
@@ -13,7 +13,7 @@
#ifndef ARM_NAMESPACE_OBJECTS_H_
#define ARM_NAMESPACE_OBJECTS_H_
-#include <AmlCpcInfo.h>
+#include <AcpiObjects.h>
#include <StandardNameSpaceObjects.h>
#pragma pack(1)
diff --git a/DynamicTablesPkg/Include/Library/AmlLib/AmlLib.h b/DynamicTablesPkg/Include/Library/AmlLib/AmlLib.h
index 71e8539b306c..be78c00b6109 100644
--- a/DynamicTablesPkg/Include/Library/AmlLib/AmlLib.h
+++ b/DynamicTablesPkg/Include/Library/AmlLib/AmlLib.h
@@ -36,7 +36,7 @@
@}
*/
-#include <AmlCpcInfo.h>
+#include <AcpiObjects.h>
#include <IndustryStandard/Acpi.h>
#ifndef AML_HANDLE
diff --git a/DynamicTablesPkg/Library/Common/AmlLib/CodeGen/AmlCodeGen.c b/DynamicTablesPkg/Library/Common/AmlLib/CodeGen/AmlCodeGen.c
index 1ff8430c29c3..89ca2c8a92e7 100644
--- a/DynamicTablesPkg/Library/Common/AmlLib/CodeGen/AmlCodeGen.c
+++ b/DynamicTablesPkg/Library/Common/AmlLib/CodeGen/AmlCodeGen.c
@@ -11,7 +11,7 @@
#include <AcpiTableGenerator.h>
#include <AmlCoreInterface.h>
-#include <AmlCpcInfo.h>
+#include <AcpiObjects.h>
#include <AmlEncoding/Aml.h>
#include <Api/AmlApiHelper.h>
#include <CodeGen/AmlResourceDataCodeGen.h>
--
2.25.1
-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#111572): https://edk2.groups.io/g/devel/message/111572
Mute This Topic: https://groups.io/mt/102732022/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [edk2-devel] [PATCH v3 06/11] DynamicTablesPkg: Add CM_ARM_PSD_INFO object
2023-11-21 16:49 [edk2-devel] [PATCH v3 00/11] DynamicTablesPkg: Enable _PSD/_CPC generation using SCMI PierreGondois
` (4 preceding siblings ...)
2023-11-21 16:50 ` [edk2-devel] [PATCH v3 05/11] DynamicTablesPkg: Rename AmlCpcInfo.h to AcpiObjects.h PierreGondois
@ 2023-11-21 16:50 ` PierreGondois
2023-11-21 16:50 ` [edk2-devel] [PATCH v3 07/11] DynamicTablesPkg: Add PsdToken field to CM_ARM_GICC_INFO object PierreGondois
` (4 subsequent siblings)
10 siblings, 0 replies; 18+ messages in thread
From: PierreGondois @ 2023-11-21 16:50 UTC (permalink / raw)
To: devel
Cc: Ard Biesheuvel, Leif Lindholm, Sami Mujawar, Michael D Kinney,
Liming Gao
Add an object describing _PSD information, cf. ACPI 6.5,
s8.4.5.5 _PSD (P-State Dependency).
Also add the corresponding CmObjParser.
Signed-off-by: Pierre Gondois <pierre.gondois@arm.com>
---
DynamicTablesPkg/Include/AcpiObjects.h | 20 +++++++++++++++++++
.../Include/ArmNameSpaceObjects.h | 10 ++++++++++
.../ConfigurationManagerObjectParser.c | 11 ++++++++++
3 files changed, 41 insertions(+)
diff --git a/DynamicTablesPkg/Include/AcpiObjects.h b/DynamicTablesPkg/Include/AcpiObjects.h
index 8981c229544a..2bdabb2724bd 100644
--- a/DynamicTablesPkg/Include/AcpiObjects.h
+++ b/DynamicTablesPkg/Include/AcpiObjects.h
@@ -1,6 +1,7 @@
/** @file
Copyright (c) 2022, NVIDIA CORPORATION & AFFILIATES. All rights reserved.<BR>
+ Copyright (c) 2022 - 2023, Arm Limited. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
@@ -119,6 +120,25 @@ typedef struct AmlCpcInfo {
UINT32 NominalFrequencyInteger;
} AML_CPC_INFO;
+/** A structure that describes a
+ P-State Dependency (PSD) Info.
+
+ Cf. ACPI 6.5, s8.4.5.5 _PSD (P-State Dependency).
+*/
+typedef struct AmlPsdInfo {
+ /// Revision.
+ UINT8 Revision;
+
+ /// Domain Id.
+ UINT32 Domain;
+
+ /// Coordination type.
+ UINT32 CoordType;
+
+ /// Number of processors belonging to the Domain.
+ UINT32 NumProc;
+} AML_PSD_INFO;
+
#pragma pack()
#endif //AML_CPC_INFO_H_
diff --git a/DynamicTablesPkg/Include/ArmNameSpaceObjects.h b/DynamicTablesPkg/Include/ArmNameSpaceObjects.h
index 453cc3fe83fa..3748cb7c8085 100644
--- a/DynamicTablesPkg/Include/ArmNameSpaceObjects.h
+++ b/DynamicTablesPkg/Include/ArmNameSpaceObjects.h
@@ -72,6 +72,7 @@ typedef enum ArmObjectID {
EArmObjPccSubspaceType4Info, ///< 47 - Pcc Subspace Type 4 Info
EArmObjPccSubspaceType5Info, ///< 48 - Pcc Subspace Type 5 Info
EArmObjEtInfo, ///< 49 - Embedded Trace Extension/Module Info
+ EArmObjPsdInfo, ///< 50 - P-State Dependency (PSD) Info
EArmObjMax
} EARM_OBJECT_ID;
@@ -1327,6 +1328,15 @@ typedef struct CmArmEtInfo {
ARM_ET_TYPE EtType;
} CM_ARM_ET_INFO;
+/** A structure that describes a
+ P-State Dependency (PSD) Info.
+
+ Cf. ACPI 6.5, s8.4.5.5 _PSD (P-State Dependency).
+
+ ID: EArmObjPsdInfo
+*/
+typedef AML_PSD_INFO CM_ARM_PSD_INFO;
+
#pragma pack()
#endif // ARM_NAMESPACE_OBJECTS_H_
diff --git a/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c b/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c
index ce494816ed88..cceff56756fc 100644
--- a/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c
+++ b/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c
@@ -669,6 +669,15 @@ STATIC CONST CM_OBJ_PARSER CmArmEtInfo[] = {
{ "EtType", sizeof (ARM_ET_TYPE), "0x%x", NULL }
};
+/** A parser for EArmObjPsdInfo.
+*/
+STATIC CONST CM_OBJ_PARSER CmArmPsdInfoParser[] = {
+ { "Revision", 1, "0x%llx", NULL },
+ { "DomainId", 4, "0x%x", NULL },
+ { "CoordType", 4, "0x%x", NULL },
+ { "NumProc", 4, "0x%x", NULL },
+};
+
/** A parser for Arm namespace objects.
*/
STATIC CONST CM_OBJ_PARSER_ARRAY ArmNamespaceObjectParser[] = {
@@ -767,6 +776,8 @@ STATIC CONST CM_OBJ_PARSER_ARRAY ArmNamespaceObjectParser[] = {
ARRAY_SIZE (CmArmPccSubspaceType5InfoParser) },
{ "EArmObjEtInfo", CmArmEtInfo,
ARRAY_SIZE (CmArmEtInfo) },
+ { "EArmObjPsdInfo", CmArmPsdInfoParser,
+ ARRAY_SIZE (CmArmPsdInfoParser) },
{ "EArmObjMax", NULL, 0 },
};
--
2.25.1
-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#111573): https://edk2.groups.io/g/devel/message/111573
Mute This Topic: https://groups.io/mt/102732024/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [edk2-devel] [PATCH v3 07/11] DynamicTablesPkg: Add PsdToken field to CM_ARM_GICC_INFO object
2023-11-21 16:49 [edk2-devel] [PATCH v3 00/11] DynamicTablesPkg: Enable _PSD/_CPC generation using SCMI PierreGondois
` (5 preceding siblings ...)
2023-11-21 16:50 ` [edk2-devel] [PATCH v3 06/11] DynamicTablesPkg: Add CM_ARM_PSD_INFO object PierreGondois
@ 2023-11-21 16:50 ` PierreGondois
2023-11-21 16:50 ` [edk2-devel] [PATCH v3 08/11] DynamicTablesPkg: Add AmlCreatePsdNode() to generate _PSD PierreGondois
` (3 subsequent siblings)
10 siblings, 0 replies; 18+ messages in thread
From: PierreGondois @ 2023-11-21 16:50 UTC (permalink / raw)
To: devel
Cc: Ard Biesheuvel, Leif Lindholm, Sami Mujawar, Michael D Kinney,
Liming Gao
The _PSD object (cf. ACPI 6.5, s8.4.5.5 _PSD (P-State Dependency)
allows to describe CPU's power state dependencies. Add a PsdToken
field to the CM_ARM_GICC_INFO object so that interdependent CPUs
can reference the same CM_ARM_PSD_INFO object.
Signed-off-by: Pierre Gondois <pierre.gondois@arm.com>
---
DynamicTablesPkg/Include/ArmNameSpaceObjects.h | 5 +++++
.../Common/TableHelperLib/ConfigurationManagerObjectParser.c | 3 ++-
2 files changed, 7 insertions(+), 1 deletion(-)
diff --git a/DynamicTablesPkg/Include/ArmNameSpaceObjects.h b/DynamicTablesPkg/Include/ArmNameSpaceObjects.h
index 3748cb7c8085..3805c5824773 100644
--- a/DynamicTablesPkg/Include/ArmNameSpaceObjects.h
+++ b/DynamicTablesPkg/Include/ArmNameSpaceObjects.h
@@ -218,6 +218,11 @@ typedef struct CmArmGicCInfo {
i.e. a token referencing a CM_ARM_ET_INFO object.
*/
CM_OBJECT_TOKEN EtToken;
+
+ /** Optional field: Reference Token for the Psd info of this processor.
+ i.e. a token referencing a CM_ARM_PSD_INFO object.
+ */
+ CM_OBJECT_TOKEN PsdToken;
} CM_ARM_GICC_INFO;
/** A structure that describes the
diff --git a/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c b/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c
index cceff56756fc..178e1821393d 100644
--- a/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c
+++ b/DynamicTablesPkg/Library/Common/TableHelperLib/ConfigurationManagerObjectParser.c
@@ -85,7 +85,8 @@ STATIC CONST CM_OBJ_PARSER CmArmGicCInfoParser[] = {
{ "AffinityFlags", 4, "0x%x", NULL },
{ "CpcToken", sizeof (CM_OBJECT_TOKEN), "0x%p", NULL },
{ "TRBEInterrupt", 2, "0x%x", NULL },
- { "EtToken", sizeof (CM_OBJECT_TOKEN), "0x%p", NULL }
+ { "EtToken", sizeof (CM_OBJECT_TOKEN), "0x%p", NULL },
+ { "PsdToken", sizeof (CM_OBJECT_TOKEN), "0x%p", NULL },
};
/** A parser for EArmObjGicDInfo.
--
2.25.1
-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#111574): https://edk2.groups.io/g/devel/message/111574
Mute This Topic: https://groups.io/mt/102732026/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [edk2-devel] [PATCH v3 08/11] DynamicTablesPkg: Add AmlCreatePsdNode() to generate _PSD
2023-11-21 16:49 [edk2-devel] [PATCH v3 00/11] DynamicTablesPkg: Enable _PSD/_CPC generation using SCMI PierreGondois
` (6 preceding siblings ...)
2023-11-21 16:50 ` [edk2-devel] [PATCH v3 07/11] DynamicTablesPkg: Add PsdToken field to CM_ARM_GICC_INFO object PierreGondois
@ 2023-11-21 16:50 ` PierreGondois
2023-11-21 16:50 ` [edk2-devel] [PATCH v3 09/11] DynamicTablesPkg: Generate _PSD in SsdtCpuTopologyGenerator PierreGondois
` (2 subsequent siblings)
10 siblings, 0 replies; 18+ messages in thread
From: PierreGondois @ 2023-11-21 16:50 UTC (permalink / raw)
To: devel
Cc: Ard Biesheuvel, Leif Lindholm, Sami Mujawar, Michael D Kinney,
Liming Gao
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.gondois@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 be78c00b6109..fb1b0e24faf3 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>
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
@@ -1628,4 +1628,37 @@ AmlAddNameStringToNamedPackage (
IN AML_OBJECT_NODE_HANDLE NamedNode
);
+/** 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 89ca2c8a92e7..a96d2b8a048a 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>
SPDX-License-Identifier: BSD-2-Clause-Patent
**/
@@ -3849,3 +3849,189 @@ exit_handler:
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_V0) {
+ // NumEntries 5 per ACPI 6.5 specification
+ NumberOfEntries = 5;
+ } else {
+ Status = EFI_INVALID_PARAMETER;
+ ASSERT_EFI_ERROR (Status);
+ return Status;
+ }
+
+ if (((PsdInfo->CoordType != EFI_ACPI_6_5_AML_STATE_COORD_TYPE_SW_ALL) &&
+ (PsdInfo->CoordType != EFI_ACPI_6_5_AML_STATE_COORD_TYPE_SW_ANY) &&
+ (PsdInfo->CoordType != EFI_ACPI_6_5_AML_STATE_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);
+ return Status;
+ }
+
+ Status = AmlVarListAddTail (
+ (AML_NODE_HANDLE)PsdPackage,
+ (AML_NODE_HANDLE)IntegerNode
+ );
+ if (EFI_ERROR (Status)) {
+ ASSERT_EFI_ERROR (Status);
+ FreePool (IntegerNode);
+ return Status;
+ }
+
+ // Revision
+ Status = AmlCodeGenInteger (PsdInfo->Revision, &IntegerNode);
+ if (EFI_ERROR (Status)) {
+ ASSERT_EFI_ERROR (Status);
+ return Status;
+ }
+
+ Status = AmlVarListAddTail (
+ (AML_NODE_HANDLE)PsdPackage,
+ (AML_NODE_HANDLE)IntegerNode
+ );
+ if (EFI_ERROR (Status)) {
+ ASSERT_EFI_ERROR (Status);
+ FreePool (IntegerNode);
+ return Status;
+ }
+
+ // Domain
+ Status = AmlCodeGenInteger (PsdInfo->Domain, &IntegerNode);
+ if (EFI_ERROR (Status)) {
+ ASSERT_EFI_ERROR (Status);
+ return Status;
+ }
+
+ Status = AmlVarListAddTail (
+ (AML_NODE_HANDLE)PsdPackage,
+ (AML_NODE_HANDLE)IntegerNode
+ );
+ if (EFI_ERROR (Status)) {
+ ASSERT_EFI_ERROR (Status);
+ FreePool (IntegerNode);
+ return Status;
+ }
+
+ // CoordType
+ Status = AmlCodeGenInteger (PsdInfo->CoordType, &IntegerNode);
+ if (EFI_ERROR (Status)) {
+ ASSERT_EFI_ERROR (Status);
+ return Status;
+ }
+
+ Status = AmlVarListAddTail (
+ (AML_NODE_HANDLE)PsdPackage,
+ (AML_NODE_HANDLE)IntegerNode
+ );
+ if (EFI_ERROR (Status)) {
+ ASSERT_EFI_ERROR (Status);
+ FreePool (IntegerNode);
+ return Status;
+ }
+
+ // Num Processors
+ Status = AmlCodeGenInteger (PsdInfo->NumProc, &IntegerNode);
+ if (EFI_ERROR (Status)) {
+ ASSERT_EFI_ERROR (Status);
+ return Status;
+ }
+
+ Status = AmlVarListAddTail (
+ (AML_NODE_HANDLE)PsdPackage,
+ (AML_NODE_HANDLE)IntegerNode
+ );
+ if (EFI_ERROR (Status)) {
+ ASSERT_EFI_ERROR (Status);
+ FreePool (IntegerNode);
+ return Status;
+ }
+
+ 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 (#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]
-=-=-=-=-=-=-=-=-=-=-=-
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [edk2-devel] [PATCH v3 09/11] DynamicTablesPkg: Generate _PSD in SsdtCpuTopologyGenerator
2023-11-21 16:49 [edk2-devel] [PATCH v3 00/11] DynamicTablesPkg: Enable _PSD/_CPC generation using SCMI PierreGondois
` (7 preceding siblings ...)
2023-11-21 16:50 ` [edk2-devel] [PATCH v3 08/11] DynamicTablesPkg: Add AmlCreatePsdNode() to generate _PSD PierreGondois
@ 2023-11-21 16:50 ` PierreGondois
2023-11-21 16:50 ` [edk2-devel] [PATCH v3 10/11] DynamicTablesPkg: Add DynamicTablesScmiInfoLib PierreGondois
2023-11-21 16:50 ` [edk2-devel] [PATCH v3 11/11] DynamicTablesPkg: Remove check for _CPC field PierreGondois
10 siblings, 0 replies; 18+ messages in thread
From: PierreGondois @ 2023-11-21 16:50 UTC (permalink / raw)
To: devel
Cc: Ard Biesheuvel, Leif Lindholm, Sami Mujawar, Michael D Kinney,
Liming Gao
Make use of the newly added AmlCreatePsdNode() to generate
_PSD objects.
_PSD objects allow to describe 'performance control, P-state
or CPPC, logical processor dependency', Cf. ACPI 6.4,
s8.4.5.5 _PSD (P-State Dependency).
Signed-off-by: Pierre Gondois <pierre.gondois@arm.com>
---
.../SsdtCpuTopologyGenerator.c | 96 +++++++++++++++++++
1 file changed, 96 insertions(+)
diff --git a/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtCpuTopologyLibArm/SsdtCpuTopologyGenerator.c b/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtCpuTopologyLibArm/SsdtCpuTopologyGenerator.c
index 8228c7845ac0..ebcf9fb4e482 100644
--- a/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtCpuTopologyLibArm/SsdtCpuTopologyGenerator.c
+++ b/DynamicTablesPkg/Library/Acpi/Arm/AcpiSsdtCpuTopologyLibArm/SsdtCpuTopologyGenerator.c
@@ -42,6 +42,7 @@ Requirements:
- EArmObjCmRef (OPTIONAL)
- EArmObjLpiInfo (OPTIONAL)
- GetEArmObjEtInfo (OPTIONAL)
+ - EArmObjPsdInfo (OPTIONAL)
*/
/** This macro expands to a function that retrieves the GIC
@@ -103,6 +104,16 @@ GET_OBJECT_LIST (
CM_ARM_ET_INFO
);
+/**
+ This macro expands to a function that retrieves the PSD
+ information from the Configuration Manager.
+*/
+GET_OBJECT_LIST (
+ EObjNameSpaceArm,
+ EArmObjPsdInfo,
+ CM_ARM_PSD_INFO
+ );
+
/** Initialize the TokenTable.
One entry should be allocated for each CM_ARM_PROC_HIERARCHY_INFO
@@ -256,6 +267,75 @@ WriteAslName (
return EFI_SUCCESS;
}
+/** Create and add an _PSD Node to Cpu Node.
+
+ For instance, transform an AML node from:
+ Device (C002)
+ {
+ Name (_UID, 2)
+ Name (_HID, "ACPI0007")
+ }
+
+ To:
+ Device (C002)
+ {
+ Name (_UID, 2)
+ Name (_HID, "ACPI0007")
+ Name (_PSD, Package()
+ {
+ NumEntries, // Integer
+ Revision, // Integer
+ Domain, // Integer
+ CoordType, // Integer
+ NumProcessors, // Integer
+ })
+ }
+
+ @param [in] Generator The SSDT Cpu Topology generator.
+ @param [in] CfgMgrProtocol Pointer to the Configuration Manager
+ Protocol Interface.
+ @param [in] GicCInfo Pointer to the CM_ARM_GICC_INFO object
+ describing the Cpu.
+ @param [in] Node CPU Node to which the _CPC node is
+ attached.
+
+ @retval EFI_SUCCESS The function completed successfully.
+ @retval EFI_INVALID_PARAMETER Invalid parameter.
+ @retval EFI_OUT_OF_RESOURCES Failed to allocate memory.
+**/
+STATIC
+EFI_STATUS
+EFIAPI
+CreateAmlPsdNode (
+ IN ACPI_CPU_TOPOLOGY_GENERATOR *Generator,
+ IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL *CONST CfgMgrProtocol,
+ IN CM_ARM_GICC_INFO *GicCInfo,
+ IN AML_OBJECT_NODE_HANDLE *Node
+ )
+{
+ EFI_STATUS Status;
+ CM_ARM_PSD_INFO *PsdInfo;
+
+ Status = GetEArmObjPsdInfo (
+ CfgMgrProtocol,
+ GicCInfo->PsdToken,
+ &PsdInfo,
+ NULL
+ );
+ if (EFI_ERROR (Status)) {
+ ASSERT_EFI_ERROR (Status);
+ return Status;
+ }
+
+ Status = AmlCreatePsdNode (
+ PsdInfo,
+ Node,
+ NULL
+ );
+ ASSERT_EFI_ERROR (Status);
+ return Status;
+}
+
/** Create and add an _CPC Node to Cpu Node.
For instance, transform an AML node from:
@@ -839,6 +919,14 @@ CreateAmlCpuFromProcHierarchy (
}
}
+ if (GicCInfo->PsdToken != CM_NULL_TOKEN) {
+ Status = CreateAmlPsdNode (Generator, CfgMgrProtocol, GicCInfo, CpuNode);
+ if (EFI_ERROR (Status)) {
+ ASSERT_EFI_ERROR (Status);
+ return Status;
+ }
+ }
+
// If a CPC info is associated with the
// GicCinfo, create an _CPC method returning them.
if (GicCInfo->CpcToken != CM_NULL_TOKEN) {
@@ -1296,6 +1384,14 @@ CreateTopologyFromGicC (
break;
}
+ if (GicCInfo->PsdToken != CM_NULL_TOKEN) {
+ Status = CreateAmlPsdNode (Generator, CfgMgrProtocol, GicCInfo, CpuNode);
+ if (EFI_ERROR (Status)) {
+ ASSERT_EFI_ERROR (Status);
+ return Status;
+ }
+ }
+
// If a CPC info is associated with the
// GicCinfo, create an _CPC method returning them.
if (GicCInfo[Index].CpcToken != CM_NULL_TOKEN) {
--
2.25.1
-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#111576): https://edk2.groups.io/g/devel/message/111576
Mute This Topic: https://groups.io/mt/102732032/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [edk2-devel] [PATCH v3 10/11] DynamicTablesPkg: Add DynamicTablesScmiInfoLib
2023-11-21 16:49 [edk2-devel] [PATCH v3 00/11] DynamicTablesPkg: Enable _PSD/_CPC generation using SCMI PierreGondois
` (8 preceding siblings ...)
2023-11-21 16:50 ` [edk2-devel] [PATCH v3 09/11] DynamicTablesPkg: Generate _PSD in SsdtCpuTopologyGenerator PierreGondois
@ 2023-11-21 16:50 ` PierreGondois
2023-11-21 17:05 ` Leif Lindholm
2023-11-21 16:50 ` [edk2-devel] [PATCH v3 11/11] DynamicTablesPkg: Remove check for _CPC field PierreGondois
10 siblings, 1 reply; 18+ messages in thread
From: PierreGondois @ 2023-11-21 16:50 UTC (permalink / raw)
To: devel
Cc: Ard Biesheuvel, Leif Lindholm, Sami Mujawar, Michael D Kinney,
Liming Gao
The SCP holds some power information that could be advertised
through the _CPC object. The communication with the SCP is done
through SCMI protocols (c.f. ArmScmiDxe).
Use the SCMI protocols to query information and feed it to
the DynamicTablesPkg.
Signed-off-by: Pierre Gondois <pierre.gondois@arm.com>
---
DynamicTablesPkg/DynamicTables.dsc.inc | 1 +
DynamicTablesPkg/DynamicTablesPkg.dec | 3 +
DynamicTablesPkg/DynamicTablesPkg.dsc | 1 +
.../Library/DynamicTablesScmiInfoLib.h | 33 ++
.../DynamicTablesScmiInfoLib.c | 297 ++++++++++++++++++
.../DynamicTablesScmiInfoLib.inf | 31 ++
6 files changed, 366 insertions(+)
create mode 100644 DynamicTablesPkg/Include/Library/DynamicTablesScmiInfoLib.h
create mode 100644 DynamicTablesPkg/Library/DynamicTablesScmiInfoLib/DynamicTablesScmiInfoLib.c
create mode 100644 DynamicTablesPkg/Library/DynamicTablesScmiInfoLib/DynamicTablesScmiInfoLib.inf
diff --git a/DynamicTablesPkg/DynamicTables.dsc.inc b/DynamicTablesPkg/DynamicTables.dsc.inc
index 9d4312c4e87d..41947012b92b 100644
--- a/DynamicTablesPkg/DynamicTables.dsc.inc
+++ b/DynamicTablesPkg/DynamicTables.dsc.inc
@@ -15,6 +15,7 @@ [BuildOptions]
[LibraryClasses.common]
AcpiHelperLib|DynamicTablesPkg/Library/Common/AcpiHelperLib/AcpiHelperLib.inf
AmlLib|DynamicTablesPkg/Library/Common/AmlLib/AmlLib.inf
+ DynamicTablesScmiInfoLib|DynamicTablesPkg/Library/DynamicTablesScmiInfoLib/DynamicTablesScmiInfoLib.inf
SsdtPcieSupportLib|DynamicTablesPkg/Library/Common/SsdtPcieSupportLib/SsdtPcieSupportLib.inf
SsdtSerialPortFixupLib|DynamicTablesPkg/Library/Common/SsdtSerialPortFixupLib/SsdtSerialPortFixupLib.inf
TableHelperLib|DynamicTablesPkg/Library/Common/TableHelperLib/TableHelperLib.inf
diff --git a/DynamicTablesPkg/DynamicTablesPkg.dec b/DynamicTablesPkg/DynamicTablesPkg.dec
index cfbcbb9569f1..aa422ce9f6fd 100644
--- a/DynamicTablesPkg/DynamicTablesPkg.dec
+++ b/DynamicTablesPkg/DynamicTablesPkg.dec
@@ -42,6 +42,9 @@ [LibraryClasses]
## @libraryclass Defines a set of SMBIOS string helper methods.
SmbiosStringTableLib|Include/Library/SmbiosStringTableLib.h
+ ## @libraryclass Defines a set of APIs to populate CmObj using SCMI.
+ DynamicTablesScmiInfoLib|Include/Library/DynamicTablesScmiInfoLib.h
+
[Protocols]
# Configuration Manager Protocol GUID
gEdkiiConfigurationManagerProtocolGuid = { 0xd85a4835, 0x5a82, 0x4894, { 0xac, 0x2, 0x70, 0x6f, 0x43, 0xd5, 0x97, 0x8e } }
diff --git a/DynamicTablesPkg/DynamicTablesPkg.dsc b/DynamicTablesPkg/DynamicTablesPkg.dsc
index bd5084a9008f..853ea2a1e4c2 100644
--- a/DynamicTablesPkg/DynamicTablesPkg.dsc
+++ b/DynamicTablesPkg/DynamicTablesPkg.dsc
@@ -39,6 +39,7 @@ [LibraryClasses.ARM, LibraryClasses.AARCH64]
PL011UartLib|ArmPlatformPkg/Library/PL011UartLib/PL011UartLib.inf
[Components.common]
+ DynamicTablesPkg/Library/DynamicTablesScmiInfoLib/DynamicTablesScmiInfoLib.inf
DynamicTablesPkg/Library/Common/AcpiHelperLib/AcpiHelperLib.inf
DynamicTablesPkg/Library/Common/AmlLib/AmlLib.inf
DynamicTablesPkg/Library/Common/SsdtPcieSupportLib/SsdtPcieSupportLib.inf
diff --git a/DynamicTablesPkg/Include/Library/DynamicTablesScmiInfoLib.h b/DynamicTablesPkg/Include/Library/DynamicTablesScmiInfoLib.h
new file mode 100644
index 000000000000..ff6b47d51fe8
--- /dev/null
+++ b/DynamicTablesPkg/Include/Library/DynamicTablesScmiInfoLib.h
@@ -0,0 +1,33 @@
+/** @file
+ Arm SCMI Info Library.
+
+ Copyright (c) 2022 - 2023, Arm Limited. All rights reserved.<BR>
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#ifndef ARM_SCMI_INFO_LIB_H_
+#define ARM_SCMI_INFO_LIB_H_
+
+#include <ConfigurationManagerObject.h>
+
+/** Populate a AML_CPC_INFO object based on SCMI information.
+
+ @param[in] DomainId Identifier for the performance domain.
+ @param[out] CpcInfo If success, this structure was populated from
+ information queried to the SCP.
+
+ @retval EFI_SUCCESS Success.
+ @retval EFI_DEVICE_ERROR Device error.
+ @retval EFI_INVALID_PARAMETER Invalid parameter.
+ @retval EFI_TIMEOUT Time out.
+ @retval EFI_UNSUPPORTED Unsupported.
+**/
+EFI_STATUS
+EFIAPI
+DynamicTablesScmiInfoGetFastChannel (
+ IN UINT32 DomainId,
+ OUT AML_CPC_INFO *CpcInfo
+ );
+
+#endif // ARM_SCMI_INFO_LIB_H_
diff --git a/DynamicTablesPkg/Library/DynamicTablesScmiInfoLib/DynamicTablesScmiInfoLib.c b/DynamicTablesPkg/Library/DynamicTablesScmiInfoLib/DynamicTablesScmiInfoLib.c
new file mode 100644
index 000000000000..b59da3d6bb51
--- /dev/null
+++ b/DynamicTablesPkg/Library/DynamicTablesScmiInfoLib/DynamicTablesScmiInfoLib.c
@@ -0,0 +1,297 @@
+/** @file
+ Arm SCMI Info Library.
+
+ Copyright (c) 2022 - 2023, Arm Limited. All rights reserved.<BR>
+
+ Arm Functional Fixed Hardware Specification:
+ - https://developer.arm.com/documentation/den0048/latest/
+
+ SPDX-License-Identifier: BSD-2-Clause-Patent
+**/
+
+#include <Library/AcpiLib.h>
+#include <Library/DynamicTablesScmiInfoLib.h>
+#include <Library/DebugLib.h>
+#include <Library/MemoryAllocationLib.h>
+#include <Library/UefiBootServicesTableLib.h>
+#include <Protocol/ArmScmi.h>
+#include <Protocol/ArmScmiPerformanceProtocol.h>
+
+/** Arm FFH registers
+
+ Cf. Arm Functional Fixed Hardware Specification
+ s3.2 Performance management and Collaborative Processor Performance Control
+*/
+#define ARM_FFH_DELIVERED_PERF_COUNTER_REGISTER 0x0
+#define ARM_FFH_REFERENCE_PERF_COUNTER_REGISTER 0x1
+
+/// Arm SCMI performance protocol.
+STATIC SCMI_PERFORMANCE_PROTOCOL *ScmiPerfProtocol;
+
+/** Arm SCMI Info Library constructor.
+
+ @param ImageHandle Image of the loaded driver.
+ @param SystemTable Pointer to the System Table.
+
+ @retval EFI_SUCCESS Success.
+ @retval EFI_DEVICE_ERROR Device error.
+ @retval EFI_INVALID_PARAMETER Invalid parameter.
+ @retval EFI_NOT_FOUND Not Found
+ @retval EFI_TIMEOUT Timeout.
+ @retval EFI_UNSUPPORTED Unsupported.
+**/
+EFI_STATUS
+EFIAPI
+DynamicTablesScmiInfoLibConstructor (
+ IN EFI_HANDLE ImageHandle,
+ IN EFI_SYSTEM_TABLE *SystemTable
+ )
+{
+ EFI_STATUS Status;
+ UINT32 Version;
+
+ Status = gBS->LocateProtocol (
+ &gArmScmiPerformanceProtocolGuid,
+ NULL,
+ (VOID **)&ScmiPerfProtocol
+ );
+ if (EFI_ERROR (Status)) {
+ return Status;
+ }
+
+ Status = ScmiPerfProtocol->GetVersion (ScmiPerfProtocol, &Version);
+ if (EFI_ERROR (Status)) {
+ return Status;
+ }
+
+ // FastChannels were added in SCMI v2.0 spec.
+ if (Version < PERFORMANCE_PROTOCOL_VERSION_V2) {
+ DEBUG ((
+ DEBUG_ERROR,
+ "DynamicTablesScmiInfoLib requires SCMI version > 2.0\n"
+ ));
+ return EFI_UNSUPPORTED;
+ }
+
+ return Status;
+}
+
+/** Get the OPPs/performance states of a power domain.
+
+ This function is a wrapper around the SCMI PERFORMANCE_DESCRIBE_LEVELS
+ command. The list of discrete performance states is returned in a buffer
+ that must be freed by the caller.
+
+ @param[in] DomainId Identifier for the performance domain.
+ @param[out] LevelArray If success, pointer to the list of list of
+ performance state. This memory must be freed by
+ the caller.
+ @param[out] LevelArrayCount If success, contains the number of states in
+ LevelArray.
+
+ @retval EFI_SUCCESS Success.
+ @retval EFI_DEVICE_ERROR Device error.
+ @retval EFI_INVALID_PARAMETER Invalid parameter.
+ @retval EFI_TIMEOUT Time out.
+ @retval EFI_UNSUPPORTED Unsupported.
+**/
+STATIC
+EFI_STATUS
+EFIAPI
+DynamicTablesScmiInfoDescribeLevels (
+ IN UINT32 DomainId,
+ OUT SCMI_PERFORMANCE_LEVEL **LevelArray,
+ OUT UINT32 *LevelArrayCount
+ )
+{
+ EFI_STATUS Status;
+ SCMI_PERFORMANCE_LEVEL *Array;
+ UINT32 Count;
+ UINT32 Size;
+
+ if ((ScmiPerfProtocol == NULL) ||
+ (LevelArray == NULL) ||
+ (LevelArrayCount == NULL))
+ {
+ return EFI_INVALID_PARAMETER;
+ }
+
+ // First call to get the number of levels.
+ Size = 0;
+ Status = ScmiPerfProtocol->DescribeLevels (
+ ScmiPerfProtocol,
+ DomainId,
+ &Count,
+ &Size,
+ NULL
+ );
+ if (Status != EFI_BUFFER_TOO_SMALL) {
+ // EFI_SUCCESS is not a valid option.
+ if (Status == EFI_SUCCESS) {
+ return EFI_INVALID_PARAMETER;
+ } else {
+ return Status;
+ }
+ }
+
+ Array = AllocateZeroPool (Size);
+ if (Array == NULL) {
+ return EFI_OUT_OF_RESOURCES;
+ }
+
+ // Second call to get the descriptions of the levels.
+ Status = ScmiPerfProtocol->DescribeLevels (
+ ScmiPerfProtocol,
+ DomainId,
+ &Count,
+ &Size,
+ Array
+ );
+ if (EFI_ERROR (Status)) {
+ return Status;
+ }
+
+ *LevelArray = Array;
+ *LevelArrayCount = Count;
+
+ return Status;
+}
+
+/** Populate a AML_CPC_INFO object based on SCMI information.
+
+ @param[in] DomainId Identifier for the performance domain.
+ @param[out] CpcInfo If success, this structure was populated from
+ information queried to the SCP.
+
+ @retval EFI_SUCCESS Success.
+ @retval EFI_DEVICE_ERROR Device error.
+ @retval EFI_INVALID_PARAMETER Invalid parameter.
+ @retval EFI_TIMEOUT Time out.
+ @retval EFI_UNSUPPORTED Unsupported.
+**/
+EFI_STATUS
+EFIAPI
+DynamicTablesScmiInfoGetFastChannel (
+ IN UINT32 DomainId,
+ OUT AML_CPC_INFO *CpcInfo
+ )
+{
+ EFI_STATUS Status;
+ SCMI_PERFORMANCE_FASTCHANNEL FcLevelGet;
+ SCMI_PERFORMANCE_FASTCHANNEL FcLimitsSet;
+ SCMI_PERFORMANCE_DOMAIN_ATTRIBUTES DomainAttributes;
+
+ SCMI_PERFORMANCE_LEVEL *LevelArray;
+ UINT32 LevelCount;
+
+ UINT64 FcLevelGetAddr;
+ UINT64 FcLimitsMaxSetAddr;
+ UINT64 FcLimitsMinSetAddr;
+
+ if ((ScmiPerfProtocol == NULL) ||
+ (CpcInfo == NULL))
+ {
+ return EFI_INVALID_PARAMETER;
+ }
+
+ Status = ScmiPerfProtocol->DescribeFastchannel (
+ ScmiPerfProtocol,
+ DomainId,
+ ScmiMessageIdPerformanceLevelSet,
+ &FcLevelGet
+ );
+ if (EFI_ERROR (Status)) {
+ return Status;
+ }
+
+ Status = ScmiPerfProtocol->DescribeFastchannel (
+ ScmiPerfProtocol,
+ DomainId,
+ ScmiMessageIdPerformanceLimitsSet,
+ &FcLimitsSet
+ );
+ if (EFI_ERROR (Status)) {
+ return Status;
+ }
+
+ Status = ScmiPerfProtocol->GetDomainAttributes (
+ ScmiPerfProtocol,
+ DomainId,
+ &DomainAttributes
+ );
+ if (EFI_ERROR (Status)) {
+ return Status;
+ }
+
+ Status = DynamicTablesScmiInfoDescribeLevels (DomainId, &LevelArray, &LevelCount);
+ if (EFI_ERROR (Status)) {
+ return Status;
+ }
+
+ /* Do some safety checks.
+ Only support FastChannels (and not doorbells) as this is
+ the only mechanism supported by SCP.
+ FcLimits[Get|Set] require 2 UINT32 values (max, then min) and
+ FcLimits[Get|Set] require 1 UINT32 value (level).
+ */
+ if ((FcLevelGet.ChanSize != sizeof (UINT32)) ||
+ ((FcLevelGet.Attributes & SCMI_PERF_FC_ATTRIB_HAS_DOORBELL) ==
+ SCMI_PERF_FC_ATTRIB_HAS_DOORBELL) ||
+ (FcLimitsSet.ChanSize != 2 * sizeof (UINT32)) ||
+ ((FcLimitsSet.Attributes & SCMI_PERF_FC_ATTRIB_HAS_DOORBELL) ==
+ SCMI_PERF_FC_ATTRIB_HAS_DOORBELL))
+ {
+ Status = EFI_INVALID_PARAMETER;
+ goto exit_handler;
+ }
+
+ FcLevelGetAddr = ((UINT64)FcLevelGet.ChanAddrHigh << 32) |
+ FcLevelGet.ChanAddrLow;
+ FcLimitsMaxSetAddr = ((UINT64)FcLimitsSet.ChanAddrHigh << 32) |
+ FcLimitsSet.ChanAddrLow;
+ FcLimitsMinSetAddr = FcLimitsMaxSetAddr + 0x4;
+
+ CpcInfo->Revision = EFI_ACPI_6_5_AML_CPC_REVISION_V3;
+ CpcInfo->HighestPerformanceInteger = LevelArray[LevelCount - 1].Level;
+ CpcInfo->NominalPerformanceInteger = DomainAttributes.SustainedPerfLevel;
+ CpcInfo->LowestNonlinearPerformanceInteger = LevelArray[0].Level;
+ CpcInfo->LowestPerformanceInteger = LevelArray[0].Level;
+
+ CpcInfo->DesiredPerformanceRegister.AddressSpaceId = EFI_ACPI_6_5_SYSTEM_MEMORY;
+ CpcInfo->DesiredPerformanceRegister.RegisterBitWidth = 32;
+ CpcInfo->DesiredPerformanceRegister.RegisterBitOffset = 0;
+ CpcInfo->DesiredPerformanceRegister.AccessSize = EFI_ACPI_6_5_DWORD;
+ CpcInfo->DesiredPerformanceRegister.Address = FcLevelGetAddr;
+
+ CpcInfo->MinimumPerformanceRegister.AddressSpaceId = EFI_ACPI_6_5_SYSTEM_MEMORY;
+ CpcInfo->MinimumPerformanceRegister.RegisterBitWidth = 32;
+ CpcInfo->MinimumPerformanceRegister.RegisterBitOffset = 0;
+ CpcInfo->MinimumPerformanceRegister.AccessSize = EFI_ACPI_6_5_DWORD;
+ CpcInfo->MinimumPerformanceRegister.Address = FcLimitsMinSetAddr;
+
+ CpcInfo->MaximumPerformanceRegister.AddressSpaceId = EFI_ACPI_6_5_SYSTEM_MEMORY;
+ CpcInfo->MaximumPerformanceRegister.RegisterBitWidth = 32;
+ CpcInfo->MaximumPerformanceRegister.RegisterBitOffset = 0;
+ CpcInfo->MaximumPerformanceRegister.AccessSize = EFI_ACPI_6_5_DWORD;
+ CpcInfo->MaximumPerformanceRegister.Address = FcLimitsMaxSetAddr;
+
+ CpcInfo->ReferencePerformanceCounterRegister.AddressSpaceId = EFI_ACPI_6_5_FUNCTIONAL_FIXED_HARDWARE;
+ CpcInfo->ReferencePerformanceCounterRegister.RegisterBitWidth = 0x40;
+ CpcInfo->ReferencePerformanceCounterRegister.RegisterBitOffset = 0;
+ CpcInfo->ReferencePerformanceCounterRegister.AccessSize = ARM_FFH_REFERENCE_PERF_COUNTER_REGISTER;
+ CpcInfo->ReferencePerformanceCounterRegister.Address = 0x4;
+
+ CpcInfo->DeliveredPerformanceCounterRegister.AddressSpaceId = EFI_ACPI_6_5_FUNCTIONAL_FIXED_HARDWARE;
+ CpcInfo->DeliveredPerformanceCounterRegister.RegisterBitWidth = 0x40;
+ CpcInfo->DeliveredPerformanceCounterRegister.RegisterBitOffset = 0;
+ CpcInfo->DeliveredPerformanceCounterRegister.AccessSize = ARM_FFH_DELIVERED_PERF_COUNTER_REGISTER;
+ CpcInfo->DeliveredPerformanceCounterRegister.Address = 0x4;
+
+ // SCMI should advertise performance values on a unified scale. So frequency
+ // values are not available. LowestFrequencyInteger and
+ // NominalFrequencyInteger are populated in the ConfigurationManager.
+
+exit_handler:
+ FreePool (LevelArray);
+ return Status;
+}
diff --git a/DynamicTablesPkg/Library/DynamicTablesScmiInfoLib/DynamicTablesScmiInfoLib.inf b/DynamicTablesPkg/Library/DynamicTablesScmiInfoLib/DynamicTablesScmiInfoLib.inf
new file mode 100644
index 000000000000..d49277f82bc3
--- /dev/null
+++ b/DynamicTablesPkg/Library/DynamicTablesScmiInfoLib/DynamicTablesScmiInfoLib.inf
@@ -0,0 +1,31 @@
+## @file
+# Arm SCMI Info Library.
+#
+# Copyright (c) 2022 - 2023, Arm Limited. All rights reserved.
+#
+# SPDX-License-Identifier: BSD-2-Clause-Patent
+##
+
+[Defines]
+ INF_VERSION = 0x0001001B
+ BASE_NAME = DynamicTablesScmiInfoLib
+ FILE_GUID = 1A7CDB04-9FFC-40DA-A87C-A5ACADAF8136
+ VERSION_STRING = 1.0
+ MODULE_TYPE = DXE_DRIVER
+ LIBRARY_CLASS = DynamicTablesScmiInfoLib
+ CONSTRUCTOR = DynamicTablesScmiInfoLibConstructor
+
+[Sources]
+ DynamicTablesScmiInfoLib.c
+
+[Packages]
+ ArmPkg/ArmPkg.dec
+ DynamicTablesPkg/DynamicTablesPkg.dec
+ EmbeddedPkg/EmbeddedPkg.dec
+ MdePkg/MdePkg.dec
+
+[Protocols]
+ gArmScmiPerformanceProtocolGuid ## CONSUMES
+
+[Depex]
+ gArmScmiPerformanceProtocolGuid
--
2.25.1
-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#111577): https://edk2.groups.io/g/devel/message/111577
Mute This Topic: https://groups.io/mt/102732033/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-
^ permalink raw reply related [flat|nested] 18+ messages in thread
* Re: [edk2-devel] [PATCH v3 10/11] DynamicTablesPkg: Add DynamicTablesScmiInfoLib
2023-11-21 16:50 ` [edk2-devel] [PATCH v3 10/11] DynamicTablesPkg: Add DynamicTablesScmiInfoLib PierreGondois
@ 2023-11-21 17:05 ` Leif Lindholm
0 siblings, 0 replies; 18+ messages in thread
From: Leif Lindholm @ 2023-11-21 17:05 UTC (permalink / raw)
To: Pierre Gondois
Cc: devel, Ard Biesheuvel, Sami Mujawar, Michael D Kinney, Liming Gao
On Tue, Nov 21, 2023 at 17:50:06 +0100, Pierre Gondois wrote:
> The SCP holds some power information that could be advertised
> through the _CPC object. The communication with the SCP is done
> through SCMI protocols (c.f. ArmScmiDxe).
>
> Use the SCMI protocols to query information and feed it to
> the DynamicTablesPkg.
>
> Signed-off-by: Pierre Gondois <pierre.gondois@arm.com>
Acked-by: Leif Lindholm <quic_llindhol@quicinc.com>
/
Leif
> ---
> DynamicTablesPkg/DynamicTables.dsc.inc | 1 +
> DynamicTablesPkg/DynamicTablesPkg.dec | 3 +
> DynamicTablesPkg/DynamicTablesPkg.dsc | 1 +
> .../Library/DynamicTablesScmiInfoLib.h | 33 ++
> .../DynamicTablesScmiInfoLib.c | 297 ++++++++++++++++++
> .../DynamicTablesScmiInfoLib.inf | 31 ++
> 6 files changed, 366 insertions(+)
> create mode 100644 DynamicTablesPkg/Include/Library/DynamicTablesScmiInfoLib.h
> create mode 100644 DynamicTablesPkg/Library/DynamicTablesScmiInfoLib/DynamicTablesScmiInfoLib.c
> create mode 100644 DynamicTablesPkg/Library/DynamicTablesScmiInfoLib/DynamicTablesScmiInfoLib.inf
>
> diff --git a/DynamicTablesPkg/DynamicTables.dsc.inc b/DynamicTablesPkg/DynamicTables.dsc.inc
> index 9d4312c4e87d..41947012b92b 100644
> --- a/DynamicTablesPkg/DynamicTables.dsc.inc
> +++ b/DynamicTablesPkg/DynamicTables.dsc.inc
> @@ -15,6 +15,7 @@ [BuildOptions]
> [LibraryClasses.common]
> AcpiHelperLib|DynamicTablesPkg/Library/Common/AcpiHelperLib/AcpiHelperLib.inf
> AmlLib|DynamicTablesPkg/Library/Common/AmlLib/AmlLib.inf
> + DynamicTablesScmiInfoLib|DynamicTablesPkg/Library/DynamicTablesScmiInfoLib/DynamicTablesScmiInfoLib.inf
> SsdtPcieSupportLib|DynamicTablesPkg/Library/Common/SsdtPcieSupportLib/SsdtPcieSupportLib.inf
> SsdtSerialPortFixupLib|DynamicTablesPkg/Library/Common/SsdtSerialPortFixupLib/SsdtSerialPortFixupLib.inf
> TableHelperLib|DynamicTablesPkg/Library/Common/TableHelperLib/TableHelperLib.inf
> diff --git a/DynamicTablesPkg/DynamicTablesPkg.dec b/DynamicTablesPkg/DynamicTablesPkg.dec
> index cfbcbb9569f1..aa422ce9f6fd 100644
> --- a/DynamicTablesPkg/DynamicTablesPkg.dec
> +++ b/DynamicTablesPkg/DynamicTablesPkg.dec
> @@ -42,6 +42,9 @@ [LibraryClasses]
> ## @libraryclass Defines a set of SMBIOS string helper methods.
> SmbiosStringTableLib|Include/Library/SmbiosStringTableLib.h
>
> + ## @libraryclass Defines a set of APIs to populate CmObj using SCMI.
> + DynamicTablesScmiInfoLib|Include/Library/DynamicTablesScmiInfoLib.h
> +
> [Protocols]
> # Configuration Manager Protocol GUID
> gEdkiiConfigurationManagerProtocolGuid = { 0xd85a4835, 0x5a82, 0x4894, { 0xac, 0x2, 0x70, 0x6f, 0x43, 0xd5, 0x97, 0x8e } }
> diff --git a/DynamicTablesPkg/DynamicTablesPkg.dsc b/DynamicTablesPkg/DynamicTablesPkg.dsc
> index bd5084a9008f..853ea2a1e4c2 100644
> --- a/DynamicTablesPkg/DynamicTablesPkg.dsc
> +++ b/DynamicTablesPkg/DynamicTablesPkg.dsc
> @@ -39,6 +39,7 @@ [LibraryClasses.ARM, LibraryClasses.AARCH64]
> PL011UartLib|ArmPlatformPkg/Library/PL011UartLib/PL011UartLib.inf
>
> [Components.common]
> + DynamicTablesPkg/Library/DynamicTablesScmiInfoLib/DynamicTablesScmiInfoLib.inf
> DynamicTablesPkg/Library/Common/AcpiHelperLib/AcpiHelperLib.inf
> DynamicTablesPkg/Library/Common/AmlLib/AmlLib.inf
> DynamicTablesPkg/Library/Common/SsdtPcieSupportLib/SsdtPcieSupportLib.inf
> diff --git a/DynamicTablesPkg/Include/Library/DynamicTablesScmiInfoLib.h b/DynamicTablesPkg/Include/Library/DynamicTablesScmiInfoLib.h
> new file mode 100644
> index 000000000000..ff6b47d51fe8
> --- /dev/null
> +++ b/DynamicTablesPkg/Include/Library/DynamicTablesScmiInfoLib.h
> @@ -0,0 +1,33 @@
> +/** @file
> + Arm SCMI Info Library.
> +
> + Copyright (c) 2022 - 2023, Arm Limited. All rights reserved.<BR>
> +
> + SPDX-License-Identifier: BSD-2-Clause-Patent
> +**/
> +
> +#ifndef ARM_SCMI_INFO_LIB_H_
> +#define ARM_SCMI_INFO_LIB_H_
> +
> +#include <ConfigurationManagerObject.h>
> +
> +/** Populate a AML_CPC_INFO object based on SCMI information.
> +
> + @param[in] DomainId Identifier for the performance domain.
> + @param[out] CpcInfo If success, this structure was populated from
> + information queried to the SCP.
> +
> + @retval EFI_SUCCESS Success.
> + @retval EFI_DEVICE_ERROR Device error.
> + @retval EFI_INVALID_PARAMETER Invalid parameter.
> + @retval EFI_TIMEOUT Time out.
> + @retval EFI_UNSUPPORTED Unsupported.
> +**/
> +EFI_STATUS
> +EFIAPI
> +DynamicTablesScmiInfoGetFastChannel (
> + IN UINT32 DomainId,
> + OUT AML_CPC_INFO *CpcInfo
> + );
> +
> +#endif // ARM_SCMI_INFO_LIB_H_
> diff --git a/DynamicTablesPkg/Library/DynamicTablesScmiInfoLib/DynamicTablesScmiInfoLib.c b/DynamicTablesPkg/Library/DynamicTablesScmiInfoLib/DynamicTablesScmiInfoLib.c
> new file mode 100644
> index 000000000000..b59da3d6bb51
> --- /dev/null
> +++ b/DynamicTablesPkg/Library/DynamicTablesScmiInfoLib/DynamicTablesScmiInfoLib.c
> @@ -0,0 +1,297 @@
> +/** @file
> + Arm SCMI Info Library.
> +
> + Copyright (c) 2022 - 2023, Arm Limited. All rights reserved.<BR>
> +
> + Arm Functional Fixed Hardware Specification:
> + - https://developer.arm.com/documentation/den0048/latest/
> +
> + SPDX-License-Identifier: BSD-2-Clause-Patent
> +**/
> +
> +#include <Library/AcpiLib.h>
> +#include <Library/DynamicTablesScmiInfoLib.h>
> +#include <Library/DebugLib.h>
> +#include <Library/MemoryAllocationLib.h>
> +#include <Library/UefiBootServicesTableLib.h>
> +#include <Protocol/ArmScmi.h>
> +#include <Protocol/ArmScmiPerformanceProtocol.h>
> +
> +/** Arm FFH registers
> +
> + Cf. Arm Functional Fixed Hardware Specification
> + s3.2 Performance management and Collaborative Processor Performance Control
> +*/
> +#define ARM_FFH_DELIVERED_PERF_COUNTER_REGISTER 0x0
> +#define ARM_FFH_REFERENCE_PERF_COUNTER_REGISTER 0x1
> +
> +/// Arm SCMI performance protocol.
> +STATIC SCMI_PERFORMANCE_PROTOCOL *ScmiPerfProtocol;
> +
> +/** Arm SCMI Info Library constructor.
> +
> + @param ImageHandle Image of the loaded driver.
> + @param SystemTable Pointer to the System Table.
> +
> + @retval EFI_SUCCESS Success.
> + @retval EFI_DEVICE_ERROR Device error.
> + @retval EFI_INVALID_PARAMETER Invalid parameter.
> + @retval EFI_NOT_FOUND Not Found
> + @retval EFI_TIMEOUT Timeout.
> + @retval EFI_UNSUPPORTED Unsupported.
> +**/
> +EFI_STATUS
> +EFIAPI
> +DynamicTablesScmiInfoLibConstructor (
> + IN EFI_HANDLE ImageHandle,
> + IN EFI_SYSTEM_TABLE *SystemTable
> + )
> +{
> + EFI_STATUS Status;
> + UINT32 Version;
> +
> + Status = gBS->LocateProtocol (
> + &gArmScmiPerformanceProtocolGuid,
> + NULL,
> + (VOID **)&ScmiPerfProtocol
> + );
> + if (EFI_ERROR (Status)) {
> + return Status;
> + }
> +
> + Status = ScmiPerfProtocol->GetVersion (ScmiPerfProtocol, &Version);
> + if (EFI_ERROR (Status)) {
> + return Status;
> + }
> +
> + // FastChannels were added in SCMI v2.0 spec.
> + if (Version < PERFORMANCE_PROTOCOL_VERSION_V2) {
> + DEBUG ((
> + DEBUG_ERROR,
> + "DynamicTablesScmiInfoLib requires SCMI version > 2.0\n"
> + ));
> + return EFI_UNSUPPORTED;
> + }
> +
> + return Status;
> +}
> +
> +/** Get the OPPs/performance states of a power domain.
> +
> + This function is a wrapper around the SCMI PERFORMANCE_DESCRIBE_LEVELS
> + command. The list of discrete performance states is returned in a buffer
> + that must be freed by the caller.
> +
> + @param[in] DomainId Identifier for the performance domain.
> + @param[out] LevelArray If success, pointer to the list of list of
> + performance state. This memory must be freed by
> + the caller.
> + @param[out] LevelArrayCount If success, contains the number of states in
> + LevelArray.
> +
> + @retval EFI_SUCCESS Success.
> + @retval EFI_DEVICE_ERROR Device error.
> + @retval EFI_INVALID_PARAMETER Invalid parameter.
> + @retval EFI_TIMEOUT Time out.
> + @retval EFI_UNSUPPORTED Unsupported.
> +**/
> +STATIC
> +EFI_STATUS
> +EFIAPI
> +DynamicTablesScmiInfoDescribeLevels (
> + IN UINT32 DomainId,
> + OUT SCMI_PERFORMANCE_LEVEL **LevelArray,
> + OUT UINT32 *LevelArrayCount
> + )
> +{
> + EFI_STATUS Status;
> + SCMI_PERFORMANCE_LEVEL *Array;
> + UINT32 Count;
> + UINT32 Size;
> +
> + if ((ScmiPerfProtocol == NULL) ||
> + (LevelArray == NULL) ||
> + (LevelArrayCount == NULL))
> + {
> + return EFI_INVALID_PARAMETER;
> + }
> +
> + // First call to get the number of levels.
> + Size = 0;
> + Status = ScmiPerfProtocol->DescribeLevels (
> + ScmiPerfProtocol,
> + DomainId,
> + &Count,
> + &Size,
> + NULL
> + );
> + if (Status != EFI_BUFFER_TOO_SMALL) {
> + // EFI_SUCCESS is not a valid option.
> + if (Status == EFI_SUCCESS) {
> + return EFI_INVALID_PARAMETER;
> + } else {
> + return Status;
> + }
> + }
> +
> + Array = AllocateZeroPool (Size);
> + if (Array == NULL) {
> + return EFI_OUT_OF_RESOURCES;
> + }
> +
> + // Second call to get the descriptions of the levels.
> + Status = ScmiPerfProtocol->DescribeLevels (
> + ScmiPerfProtocol,
> + DomainId,
> + &Count,
> + &Size,
> + Array
> + );
> + if (EFI_ERROR (Status)) {
> + return Status;
> + }
> +
> + *LevelArray = Array;
> + *LevelArrayCount = Count;
> +
> + return Status;
> +}
> +
> +/** Populate a AML_CPC_INFO object based on SCMI information.
> +
> + @param[in] DomainId Identifier for the performance domain.
> + @param[out] CpcInfo If success, this structure was populated from
> + information queried to the SCP.
> +
> + @retval EFI_SUCCESS Success.
> + @retval EFI_DEVICE_ERROR Device error.
> + @retval EFI_INVALID_PARAMETER Invalid parameter.
> + @retval EFI_TIMEOUT Time out.
> + @retval EFI_UNSUPPORTED Unsupported.
> +**/
> +EFI_STATUS
> +EFIAPI
> +DynamicTablesScmiInfoGetFastChannel (
> + IN UINT32 DomainId,
> + OUT AML_CPC_INFO *CpcInfo
> + )
> +{
> + EFI_STATUS Status;
> + SCMI_PERFORMANCE_FASTCHANNEL FcLevelGet;
> + SCMI_PERFORMANCE_FASTCHANNEL FcLimitsSet;
> + SCMI_PERFORMANCE_DOMAIN_ATTRIBUTES DomainAttributes;
> +
> + SCMI_PERFORMANCE_LEVEL *LevelArray;
> + UINT32 LevelCount;
> +
> + UINT64 FcLevelGetAddr;
> + UINT64 FcLimitsMaxSetAddr;
> + UINT64 FcLimitsMinSetAddr;
> +
> + if ((ScmiPerfProtocol == NULL) ||
> + (CpcInfo == NULL))
> + {
> + return EFI_INVALID_PARAMETER;
> + }
> +
> + Status = ScmiPerfProtocol->DescribeFastchannel (
> + ScmiPerfProtocol,
> + DomainId,
> + ScmiMessageIdPerformanceLevelSet,
> + &FcLevelGet
> + );
> + if (EFI_ERROR (Status)) {
> + return Status;
> + }
> +
> + Status = ScmiPerfProtocol->DescribeFastchannel (
> + ScmiPerfProtocol,
> + DomainId,
> + ScmiMessageIdPerformanceLimitsSet,
> + &FcLimitsSet
> + );
> + if (EFI_ERROR (Status)) {
> + return Status;
> + }
> +
> + Status = ScmiPerfProtocol->GetDomainAttributes (
> + ScmiPerfProtocol,
> + DomainId,
> + &DomainAttributes
> + );
> + if (EFI_ERROR (Status)) {
> + return Status;
> + }
> +
> + Status = DynamicTablesScmiInfoDescribeLevels (DomainId, &LevelArray, &LevelCount);
> + if (EFI_ERROR (Status)) {
> + return Status;
> + }
> +
> + /* Do some safety checks.
> + Only support FastChannels (and not doorbells) as this is
> + the only mechanism supported by SCP.
> + FcLimits[Get|Set] require 2 UINT32 values (max, then min) and
> + FcLimits[Get|Set] require 1 UINT32 value (level).
> + */
> + if ((FcLevelGet.ChanSize != sizeof (UINT32)) ||
> + ((FcLevelGet.Attributes & SCMI_PERF_FC_ATTRIB_HAS_DOORBELL) ==
> + SCMI_PERF_FC_ATTRIB_HAS_DOORBELL) ||
> + (FcLimitsSet.ChanSize != 2 * sizeof (UINT32)) ||
> + ((FcLimitsSet.Attributes & SCMI_PERF_FC_ATTRIB_HAS_DOORBELL) ==
> + SCMI_PERF_FC_ATTRIB_HAS_DOORBELL))
> + {
> + Status = EFI_INVALID_PARAMETER;
> + goto exit_handler;
> + }
> +
> + FcLevelGetAddr = ((UINT64)FcLevelGet.ChanAddrHigh << 32) |
> + FcLevelGet.ChanAddrLow;
> + FcLimitsMaxSetAddr = ((UINT64)FcLimitsSet.ChanAddrHigh << 32) |
> + FcLimitsSet.ChanAddrLow;
> + FcLimitsMinSetAddr = FcLimitsMaxSetAddr + 0x4;
> +
> + CpcInfo->Revision = EFI_ACPI_6_5_AML_CPC_REVISION_V3;
> + CpcInfo->HighestPerformanceInteger = LevelArray[LevelCount - 1].Level;
> + CpcInfo->NominalPerformanceInteger = DomainAttributes.SustainedPerfLevel;
> + CpcInfo->LowestNonlinearPerformanceInteger = LevelArray[0].Level;
> + CpcInfo->LowestPerformanceInteger = LevelArray[0].Level;
> +
> + CpcInfo->DesiredPerformanceRegister.AddressSpaceId = EFI_ACPI_6_5_SYSTEM_MEMORY;
> + CpcInfo->DesiredPerformanceRegister.RegisterBitWidth = 32;
> + CpcInfo->DesiredPerformanceRegister.RegisterBitOffset = 0;
> + CpcInfo->DesiredPerformanceRegister.AccessSize = EFI_ACPI_6_5_DWORD;
> + CpcInfo->DesiredPerformanceRegister.Address = FcLevelGetAddr;
> +
> + CpcInfo->MinimumPerformanceRegister.AddressSpaceId = EFI_ACPI_6_5_SYSTEM_MEMORY;
> + CpcInfo->MinimumPerformanceRegister.RegisterBitWidth = 32;
> + CpcInfo->MinimumPerformanceRegister.RegisterBitOffset = 0;
> + CpcInfo->MinimumPerformanceRegister.AccessSize = EFI_ACPI_6_5_DWORD;
> + CpcInfo->MinimumPerformanceRegister.Address = FcLimitsMinSetAddr;
> +
> + CpcInfo->MaximumPerformanceRegister.AddressSpaceId = EFI_ACPI_6_5_SYSTEM_MEMORY;
> + CpcInfo->MaximumPerformanceRegister.RegisterBitWidth = 32;
> + CpcInfo->MaximumPerformanceRegister.RegisterBitOffset = 0;
> + CpcInfo->MaximumPerformanceRegister.AccessSize = EFI_ACPI_6_5_DWORD;
> + CpcInfo->MaximumPerformanceRegister.Address = FcLimitsMaxSetAddr;
> +
> + CpcInfo->ReferencePerformanceCounterRegister.AddressSpaceId = EFI_ACPI_6_5_FUNCTIONAL_FIXED_HARDWARE;
> + CpcInfo->ReferencePerformanceCounterRegister.RegisterBitWidth = 0x40;
> + CpcInfo->ReferencePerformanceCounterRegister.RegisterBitOffset = 0;
> + CpcInfo->ReferencePerformanceCounterRegister.AccessSize = ARM_FFH_REFERENCE_PERF_COUNTER_REGISTER;
> + CpcInfo->ReferencePerformanceCounterRegister.Address = 0x4;
> +
> + CpcInfo->DeliveredPerformanceCounterRegister.AddressSpaceId = EFI_ACPI_6_5_FUNCTIONAL_FIXED_HARDWARE;
> + CpcInfo->DeliveredPerformanceCounterRegister.RegisterBitWidth = 0x40;
> + CpcInfo->DeliveredPerformanceCounterRegister.RegisterBitOffset = 0;
> + CpcInfo->DeliveredPerformanceCounterRegister.AccessSize = ARM_FFH_DELIVERED_PERF_COUNTER_REGISTER;
> + CpcInfo->DeliveredPerformanceCounterRegister.Address = 0x4;
> +
> + // SCMI should advertise performance values on a unified scale. So frequency
> + // values are not available. LowestFrequencyInteger and
> + // NominalFrequencyInteger are populated in the ConfigurationManager.
> +
> +exit_handler:
> + FreePool (LevelArray);
> + return Status;
> +}
> diff --git a/DynamicTablesPkg/Library/DynamicTablesScmiInfoLib/DynamicTablesScmiInfoLib.inf b/DynamicTablesPkg/Library/DynamicTablesScmiInfoLib/DynamicTablesScmiInfoLib.inf
> new file mode 100644
> index 000000000000..d49277f82bc3
> --- /dev/null
> +++ b/DynamicTablesPkg/Library/DynamicTablesScmiInfoLib/DynamicTablesScmiInfoLib.inf
> @@ -0,0 +1,31 @@
> +## @file
> +# Arm SCMI Info Library.
> +#
> +# Copyright (c) 2022 - 2023, Arm Limited. All rights reserved.
> +#
> +# SPDX-License-Identifier: BSD-2-Clause-Patent
> +##
> +
> +[Defines]
> + INF_VERSION = 0x0001001B
> + BASE_NAME = DynamicTablesScmiInfoLib
> + FILE_GUID = 1A7CDB04-9FFC-40DA-A87C-A5ACADAF8136
> + VERSION_STRING = 1.0
> + MODULE_TYPE = DXE_DRIVER
> + LIBRARY_CLASS = DynamicTablesScmiInfoLib
> + CONSTRUCTOR = DynamicTablesScmiInfoLibConstructor
> +
> +[Sources]
> + DynamicTablesScmiInfoLib.c
> +
> +[Packages]
> + ArmPkg/ArmPkg.dec
> + DynamicTablesPkg/DynamicTablesPkg.dec
> + EmbeddedPkg/EmbeddedPkg.dec
> + MdePkg/MdePkg.dec
> +
> +[Protocols]
> + gArmScmiPerformanceProtocolGuid ## CONSUMES
> +
> +[Depex]
> + gArmScmiPerformanceProtocolGuid
> --
> 2.25.1
>
-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#111586): https://edk2.groups.io/g/devel/message/111586
Mute This Topic: https://groups.io/mt/102732033/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/leave/12367111/7686176/1913456212/xyzzy [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-
^ permalink raw reply [flat|nested] 18+ messages in thread
* [edk2-devel] [PATCH v3 11/11] DynamicTablesPkg: Remove check for _CPC field
2023-11-21 16:49 [edk2-devel] [PATCH v3 00/11] DynamicTablesPkg: Enable _PSD/_CPC generation using SCMI PierreGondois
` (9 preceding siblings ...)
2023-11-21 16:50 ` [edk2-devel] [PATCH v3 10/11] DynamicTablesPkg: Add DynamicTablesScmiInfoLib PierreGondois
@ 2023-11-21 16:50 ` PierreGondois
10 siblings, 0 replies; 18+ messages in thread
From: PierreGondois @ 2023-11-21 16:50 UTC (permalink / raw)
To: devel
Cc: Ard Biesheuvel, Leif Lindholm, Sami Mujawar, Michael D Kinney,
Liming Gao
When generating _CPC objects, some fields are mandatory by spec [1].
Some fields cannot be supported by a the Juno platform, which is used
to test the _CPC generation. Therefore, don't prevent the generation
of _CPC objects if the fields below are missing, and let the OS handle
the missing information.
_CPC fields that are exempted from checks:
- PerformanceLimitedRegister
- ReferencePerformanceCounterRegister
- DeliveredPerformanceCounterRegister
Also warn if one of the following optional fields is missing:
- HighestPerformance[Buffer|Integer]
- NominalPerformance[Buffer|Integer]
[1] Cf. non-optional fields in:
ACPI 6.5, s8.4.6.1 '_CPC (Continuous Performance Control)'
Signed-off-by: Pierre Gondois <pierre.gondois@arm.com>
---
.../Common/AmlLib/CodeGen/AmlCodeGen.c | 29 ++++++++++++++++---
1 file changed, 25 insertions(+), 4 deletions(-)
diff --git a/DynamicTablesPkg/Library/Common/AmlLib/CodeGen/AmlCodeGen.c b/DynamicTablesPkg/Library/Common/AmlLib/CodeGen/AmlCodeGen.c
index a96d2b8a048a..9b72c4408016 100644
--- a/DynamicTablesPkg/Library/Common/AmlLib/CodeGen/AmlCodeGen.c
+++ b/DynamicTablesPkg/Library/Common/AmlLib/CodeGen/AmlCodeGen.c
@@ -3531,6 +3531,21 @@ AmlCreateCpcNode (
return EFI_INVALID_PARAMETER;
}
+ // The following fields are theoretically mandatory, but not supported
+ // by some platforms. Just warn if they are missing:
+ // - PerformanceLimitedRegister
+ // - ReferencePerformanceCounterRegister
+ // - DeliveredPerformanceCounterRegister
+ if (IsNullGenericAddress (&CpcInfo->PerformanceLimitedRegister) ||
+ IsNullGenericAddress (&CpcInfo->ReferencePerformanceCounterRegister) ||
+ IsNullGenericAddress (&CpcInfo->DeliveredPerformanceCounterRegister)) {
+ DEBUG ((
+ DEBUG_WARN,
+ "Missing PerformanceLimited|ReferencePerformanceCounter|"
+ "DeliveredPerformanceCounter field in _CPC object\n"
+ ));
+ }
+
if ((IsNullGenericAddress (&CpcInfo->HighestPerformanceBuffer) &&
(CpcInfo->HighestPerformanceInteger == 0)) ||
(IsNullGenericAddress (&CpcInfo->NominalPerformanceBuffer) &&
@@ -3539,13 +3554,19 @@ AmlCreateCpcNode (
(CpcInfo->LowestNonlinearPerformanceInteger == 0)) ||
(IsNullGenericAddress (&CpcInfo->LowestPerformanceBuffer) &&
(CpcInfo->LowestPerformanceInteger == 0)) ||
- IsNullGenericAddress (&CpcInfo->DesiredPerformanceRegister) ||
- IsNullGenericAddress (&CpcInfo->ReferencePerformanceCounterRegister) ||
- IsNullGenericAddress (&CpcInfo->DeliveredPerformanceCounterRegister) ||
- IsNullGenericAddress (&CpcInfo->PerformanceLimitedRegister))
+ IsNullGenericAddress (&CpcInfo->DesiredPerformanceRegister))
{
ASSERT (0);
return EFI_INVALID_PARAMETER;
+ } else if ((IsNullGenericAddress (&CpcInfo->HighestPerformanceBuffer) &&
+ (CpcInfo->HighestPerformanceInteger == 0)) ||
+ (IsNullGenericAddress (&CpcInfo->NominalPerformanceBuffer) &&
+ (CpcInfo->NominalPerformanceInteger == 0)))
+ {
+ DEBUG ((
+ DEBUG_WARN,
+ "Missing Reference|Delivered performance field in _CPC object\n"
+ ));
}
CpcPackage = NULL;
--
2.25.1
-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#111578): https://edk2.groups.io/g/devel/message/111578
Mute This Topic: https://groups.io/mt/102732035/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-
^ permalink raw reply related [flat|nested] 18+ messages in thread