public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
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]
-=-=-=-=-=-=-=-=-=-=-=-



  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