diff options
author | Pierre Gondois <pierre.gondois@arm.com> | 2024-01-25 16:18:41 +0100 |
---|---|---|
committer | mergify[bot] <37929162+mergify[bot]@users.noreply.github.com> | 2024-01-29 16:47:03 +0000 |
commit | 9f0ebabb57cc9c0f34ab5d3bb879e97a1d431b7d (patch) | |
tree | 667074f6b0a898d735dd1f799342892b4197db01 /ArmPkg/Include | |
parent | 3630cdf6e7ffc9d93868f52a3bcddb3d2715c74c (diff) | |
download | edk2-9f0ebabb57cc9c0f34ab5d3bb879e97a1d431b7d.zip edk2-9f0ebabb57cc9c0f34ab5d3bb879e97a1d431b7d.tar.gz edk2-9f0ebabb57cc9c0f34ab5d3bb879e97a1d431b7d.tar.bz2 |
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')
-rw-r--r-- | ArmPkg/Include/Protocol/ArmScmiPerformanceProtocol.h | 88 |
1 files changed, 79 insertions, 9 deletions
diff --git a/ArmPkg/Include/Protocol/ArmScmiPerformanceProtocol.h b/ArmPkg/Include/Protocol/ArmScmiPerformanceProtocol.h index a28f0f7..c69efe7 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_ */
|