From: "Sami Mujawar" <sami.mujawar@arm.com>
To: Pierre Gondois <Pierre.Gondois@arm.com>,
"devel@edk2.groups.io" <devel@edk2.groups.io>
Cc: Ray Ni <ray.ni@intel.com>,
Leif Lindholm <quic_llindhol@quicinc.com>,
Ard Biesheuvel <ardb+tianocore@kernel.org>, nd <nd@arm.com>
Subject: Re: [edk2-devel] [PATCH v4 02/10] ArmPkg/ArmScmiDxe: Add PERFORMANCE_DESCRIBE_FASTCHANNEL support
Date: Wed, 24 Jan 2024 17:13:31 +0000 [thread overview]
Message-ID: <124A4E5E-724C-41D7-B217-661B89BA8688@arm.com> (raw)
In-Reply-To: <20231212092847.1253756-3-pierre.gondois@arm.com>
Hi Pierre,
Thank you for this patch.
These changes look good to me.
Reviewed-by: Sami Mujawar <sami.mujawar@arm.com>
Regards,
Sami Mujawar
On 12/12/2023, 09:29, "Pierre Gondois" <pierre.gondois@arm.com <mailto:pierre.gondois@arm.com>> wrote:
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 <mailto:quic_llindhol@quicinc.com>>
Signed-off-by: Pierre Gondois <pierre.gondois@arm.com <mailto: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/ <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/ <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 (#114335): https://edk2.groups.io/g/devel/message/114335
Mute This Topic: https://groups.io/mt/103127047/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-
next prev parent reply other threads:[~2024-01-24 17:13 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-12-12 9:28 [edk2-devel] [PATCH v4 00/10] DynamicTablesPkg: Enable _PSD/_CPC generation using SCMI PierreGondois
2023-12-12 9:28 ` [edk2-devel] [PATCH v4 01/10] ArmPkg/ArmScmiDxe: Rename PERFORMANCE_PROTOCOL_VERSION PierreGondois
2024-01-24 17:13 ` Sami Mujawar
2023-12-12 9:28 ` [edk2-devel] [PATCH v4 02/10] ArmPkg/ArmScmiDxe: Add PERFORMANCE_DESCRIBE_FASTCHANNEL support PierreGondois
2024-01-24 17:13 ` Sami Mujawar [this message]
2023-12-12 9:28 ` [edk2-devel] [PATCH v4 03/10] DynamicTablesPkg: Use new CPC revision macro PierreGondois
2024-01-24 17:13 ` Sami Mujawar
2023-12-12 9:28 ` [edk2-devel] [PATCH v4 04/10] DynamicTablesPkg: Rename AmlCpcInfo.h to AcpiObjects.h PierreGondois
2024-01-24 17:13 ` Sami Mujawar
2023-12-12 9:28 ` [edk2-devel] [PATCH v4 05/10] DynamicTablesPkg: Add CM_ARM_PSD_INFO object PierreGondois
2024-01-24 17:14 ` Sami Mujawar
2023-12-12 9:28 ` [edk2-devel] [PATCH v4 06/10] DynamicTablesPkg: Add PsdToken field to CM_ARM_GICC_INFO object PierreGondois
2024-01-24 17:15 ` Sami Mujawar
2023-12-12 9:28 ` [edk2-devel] [PATCH v4 07/10] DynamicTablesPkg: Add AmlCreatePsdNode() to generate _PSD PierreGondois
2024-01-24 17:24 ` Sami Mujawar
2023-12-12 9:28 ` [edk2-devel] [PATCH v4 08/10] DynamicTablesPkg: Generate _PSD in SsdtCpuTopologyGenerator PierreGondois
2024-01-24 17:15 ` Sami Mujawar
2023-12-12 9:28 ` [edk2-devel] [PATCH v4 09/10] DynamicTablesPkg: Add DynamicTablesScmiInfoLib PierreGondois
2024-01-25 10:57 ` Sami Mujawar
2023-12-12 9:28 ` [edk2-devel] [PATCH v4 10/10] DynamicTablesPkg: Remove check for _CPC field PierreGondois
2024-01-24 17:31 ` Sami Mujawar
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-list from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=124A4E5E-724C-41D7-B217-661B89BA8688@arm.com \
--to=devel@edk2.groups.io \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox