summaryrefslogtreecommitdiffstats
path: root/ArmPkg/Include/Protocol/ArmScmiPerformanceProtocol.h
diff options
context:
space:
mode:
authorPierre Gondois <pierre.gondois@arm.com>2024-01-25 16:18:41 +0100
committermergify[bot] <37929162+mergify[bot]@users.noreply.github.com>2024-01-29 16:47:03 +0000
commit9f0ebabb57cc9c0f34ab5d3bb879e97a1d431b7d (patch)
tree667074f6b0a898d735dd1f799342892b4197db01 /ArmPkg/Include/Protocol/ArmScmiPerformanceProtocol.h
parent3630cdf6e7ffc9d93868f52a3bcddb3d2715c74c (diff)
downloadedk2-9f0ebabb57cc9c0f34ab5d3bb879e97a1d431b7d.tar.gz
edk2-9f0ebabb57cc9c0f34ab5d3bb879e97a1d431b7d.tar.bz2
edk2-9f0ebabb57cc9c0f34ab5d3bb879e97a1d431b7d.zip
ArmPkg/ArmScmiDxe: Add PERFORMANCE_DESCRIBE_FASTCHANNEL support
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> Acked-by: Ard Biesheuvel <ardb@kernel.org> Reviewed-by: Sami Mujawar <sami.mujawar@arm.com> Signed-off-by: Pierre Gondois <pierre.gondois@arm.com>
Diffstat (limited to 'ArmPkg/Include/Protocol/ArmScmiPerformanceProtocol.h')
-rw-r--r--ArmPkg/Include/Protocol/ArmScmiPerformanceProtocol.h88
1 files changed, 79 insertions, 9 deletions
diff --git a/ArmPkg/Include/Protocol/ArmScmiPerformanceProtocol.h b/ArmPkg/Include/Protocol/ArmScmiPerformanceProtocol.h
index a28f0f766e..c69efe7408 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_ */