public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
* [edk2-devel] [PATCH v3 00/11] DynamicTablesPkg: Enable _PSD/_CPC generation using SCMI
@ 2023-11-21 16:49 PierreGondois
  2023-11-21 16:49 ` [edk2-devel] [PATCH v3 01/11] ArmPkg/ArmScmiDxe: Rename PERFORMANCE_PROTOCOL_VERSION PierreGondois
                   ` (10 more replies)
  0 siblings, 11 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

v1:
- https://edk2.groups.io/g/devel/message/104115
v2:
- https://edk2.groups.io/g/devel/message/104115
- Rebase patches on latest version.
v3:
[PATCH 01/11] ArmPkg/ArmScmiDxe: Rename PERFORMANCE_PROTOCOL_VERSION
- Note the referenced spec spec is SCMI v3.2
[PATCH 02/11] ArmPkg/ArmScmiDxe: Add PERFORMANCE_DESCRIBE_FASTCHANNEL support
- Note the referenced spec spec is SCMI v3.2
- Move SCMI_MESSAGE_ID_PERFORMANCE enum definition out of #pragma pack(1)
[PATCH 03/11] MdePkg/Acpi65: Add _PSD/_CPC/State Coordination Types macros
- Macros used to be added to ACPI 6.4 definition file, move them to the
  latest ACPI 6.5 definition file
[PATCH 10/11] DynamicTablesPkg: Add DynamicTablesScmiInfoLib
- Renamed ArmScmiInfoLib to DynamicTablesScmiInfoLib
[PATCH 11/11] DynamicTablesPkg: Remove check for _CPC field
- Add warning when missing one of the bypassed field
All patches:
- Rebase on latest master
- Use ACPI 6.5 definitions instead of 6.4 previously

The SCMI performance protocol allows to query the Operating Performance
Points (OPPs) available for each performance domain. Each OPP has a
specific frequency/power consumption/performance.

On Device Tree (DT) based platforms, the SCMI protocol is directly
available from the OS.
On ACPI based platforms, the _PSD objects allows to identify CPUs
belonging
to the same performance domain. CPUs belonging to the same performance
domain have the same frequency. The _CPC object allows to
describe/control the performance level/frequency of a CPU (i.e. its
frequency).

This patchset:
- Add support for 'DescribeFastchannel' SCMI performance protocol
- Add a object to the DynamicTablesPkg to describe the PSD information
- Allows to generate _PSD objects in the SsdtCpuTopologyGenerator
- Add a ArmScmiInfoLib library populating DynamicTablesPkg CPC objects,
  relying on the SCMI protocol to fetch the relevant information

A patchset for Juno-r2 platforms will be submitted to demonstrate
this functionality.

Pierre Gondois (11):
  ArmPkg/ArmScmiDxe: Rename PERFORMANCE_PROTOCOL_VERSION
  ArmPkg/ArmScmiDxe: Add PERFORMANCE_DESCRIBE_FASTCHANNEL support
  MdePkg/Acpi65: Add _PSD/_CPC/State Coordination Types macros
  DynamicTablesPkg: Use new CPC revision macro
  DynamicTablesPkg: Rename AmlCpcInfo.h to AcpiObjects.h
  DynamicTablesPkg: Add CM_ARM_PSD_INFO object
  DynamicTablesPkg: Add PsdToken field to CM_ARM_GICC_INFO object
  DynamicTablesPkg: Add AmlCreatePsdNode() to generate _PSD
  DynamicTablesPkg: Generate _PSD in SsdtCpuTopologyGenerator
  DynamicTablesPkg: Add DynamicTablesScmiInfoLib
  DynamicTablesPkg: Remove check for _CPC field

 .../ArmScmiDxe/ScmiPerformanceProtocol.c      |  80 ++++-
 .../Protocol/ArmScmiPerformanceProtocol.h     | 101 +++++-
 DynamicTablesPkg/DynamicTables.dsc.inc        |   1 +
 DynamicTablesPkg/DynamicTablesPkg.dec         |   3 +
 DynamicTablesPkg/DynamicTablesPkg.dsc         |   1 +
 .../Include/{AmlCpcInfo.h => AcpiObjects.h}   |  20 ++
 .../Include/ArmNameSpaceObjects.h             |  17 +-
 .../Include/Library/AmlLib/AmlLib.h           |  37 ++-
 .../Library/DynamicTablesScmiInfoLib.h        |  33 ++
 .../SsdtCpuTopologyGenerator.c                |  96 ++++++
 .../Common/AmlLib/CodeGen/AmlCodeGen.c        | 221 ++++++++++++-
 .../ConfigurationManagerObjectParser.c        |  14 +-
 .../DynamicTablesScmiInfoLib.c                | 297 ++++++++++++++++++
 .../DynamicTablesScmiInfoLib.inf              |  31 ++
 MdePkg/Include/IndustryStandard/Acpi65.h      |  23 ++
 15 files changed, 945 insertions(+), 30 deletions(-)
 rename DynamicTablesPkg/Include/{AmlCpcInfo.h => AcpiObjects.h} (88%)
 create mode 100644 DynamicTablesPkg/Include/Library/DynamicTablesScmiInfoLib.h
 create mode 100644 DynamicTablesPkg/Library/DynamicTablesScmiInfoLib/DynamicTablesScmiInfoLib.c
 create mode 100644 DynamicTablesPkg/Library/DynamicTablesScmiInfoLib/DynamicTablesScmiInfoLib.inf

-- 
2.25.1



-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#111567): https://edk2.groups.io/g/devel/message/111567
Mute This Topic: https://groups.io/mt/102732014/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

* [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

* [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

* [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

* [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

* 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

* 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

* 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

end of thread, other threads:[~2023-11-30  1:07 UTC | newest]

Thread overview: 18+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
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 17:02   ` Leif Lindholm
2023-11-21 16:49 ` [edk2-devel] [PATCH v3 02/11] ArmPkg/ArmScmiDxe: Add PERFORMANCE_DESCRIBE_FASTCHANNEL support PierreGondois
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
2023-11-27  8:36       ` PierreGondois
2023-11-30  1:07         ` Ni, Ray
2023-11-21 16:50 ` [edk2-devel] [PATCH v3 04/11] DynamicTablesPkg: Use new CPC revision macro PierreGondois
2023-11-21 16:50 ` [edk2-devel] [PATCH v3 05/11] DynamicTablesPkg: Rename AmlCpcInfo.h to AcpiObjects.h PierreGondois
2023-11-21 16:50 ` [edk2-devel] [PATCH v3 06/11] DynamicTablesPkg: Add CM_ARM_PSD_INFO object PierreGondois
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 ` [edk2-devel] [PATCH v3 08/11] DynamicTablesPkg: Add AmlCreatePsdNode() to generate _PSD PierreGondois
2023-11-21 16:50 ` [edk2-devel] [PATCH v3 09/11] DynamicTablesPkg: Generate _PSD in SsdtCpuTopologyGenerator PierreGondois
2023-11-21 16:50 ` [edk2-devel] [PATCH v3 10/11] DynamicTablesPkg: Add DynamicTablesScmiInfoLib 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

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox