From: "PierreGondois" <pierre.gondois@arm.com>
To: Leif Lindholm <quic_llindhol@quicinc.com>, devel@edk2.groups.io
Cc: Sami Mujawar <sami.mujawar@arm.com>,
Ard Biesheuvel <ardb+tianocore@kernel.org>,
Michael D Kinney <michael.d.kinney@intel.com>,
Liming Gao <gaoliming@byosoft.com.cn>
Subject: Re: [edk2-devel] [PATCH v2 02/11] ArmPkg/ArmScmiDxe: Add PERFORMANCE_DESCRIBE_FASTCHANNEL support
Date: Thu, 2 Nov 2023 11:19:54 +0100 [thread overview]
Message-ID: <731fa125-5a47-40d2-8062-d2ff8011cc23@arm.com> (raw)
In-Reply-To: <ZTpBhAZ5XqSYb40I@qc-i7.hemma.eciton.net>
On 10/26/23 12:37, Leif Lindholm wrote:
> On Wed, Oct 25, 2023 at 13:25:31 +0200, PierreGondois wrote:
>> From: Pierre Gondois <pierre.gondois@arm.com>
>
> Sidebar: I think if you correct your name in your git config, the
> above tag will drop out.
Ok I will check.
>
>> 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.
>>
>> Signed-off-by: Pierre Gondois <pierre.gondois@arm.com>
>> ---
>> .../ArmScmiDxe/ScmiPerformanceProtocol.c | 80 +++++++++++++++--
>> .../Protocol/ArmScmiPerformanceProtocol.h | 90 ++++++++++++++++---
>> 2 files changed, 155 insertions(+), 15 deletions(-)
>>
>> diff --git a/ArmPkg/Drivers/ArmScmiDxe/ScmiPerformanceProtocol.c b/ArmPkg/Drivers/ArmScmiDxe/ScmiPerformanceProtocol.c
>> index 0f89808fbdf9..1d87339209fd 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, latest version:
>> + - 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 8e8e05d5a5f6..088182945a06 100644
>> --- a/ArmPkg/Include/Protocol/ArmScmiPerformanceProtocol.h
>> +++ b/ArmPkg/Include/Protocol/ArmScmiPerformanceProtocol.h
>> @@ -14,7 +14,7 @@
>>
>> #include <Protocol/ArmScmi.h>
>>
>> -/// Arm Scmi performance protocol versions.
>> +/// Arm SCMI performance protocol versions.
>> #define PERFORMANCE_PROTOCOL_VERSION_V1 0x10000
>> #define PERFORMANCE_PROTOCOL_VERSION_V2 0x20000
>> #define PERFORMANCE_PROTOCOL_VERSION_V3 0x30000
>> @@ -79,6 +79,56 @@ 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;
>> +
>> +/// 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;
>
> This struct appears to move in the code at the same time as having an
> entry added to it. This seems superficially unmotivated.
> However it is also moved to inside the pack(1) block, which makes no
> sense for an enum.
Yes right, I will move it out of the pack(1) section.
The reason to move the SCMI_MESSAGE_ID_PERFORMANCE definition up in the file
was that the SCMI_PERFORMANCE_DESCRIBE_FASTCHANNEL interface added in this
patch takes a SCMI_MESSAGE_ID_PERFORMANCE parameter as an argument, so the
enum needs to be defined before.
I can add a comment about this in the commit message.
Regards,
Pierre
>
> /
> Leif
>
>> +
>> #pragma pack()
>>
>> /** Return version of the performance management protocol supported by SCP.
>> @@ -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 (#110513): https://edk2.groups.io/g/devel/message/110513
Mute This Topic: https://groups.io/mt/102175812/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:[~2023-11-02 10:19 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-10-25 11:25 [edk2-devel] [PATCH v2 00/11] DynamicTablesPkg: Enable _PSD/_CPC generation using SCMI PierreGondois
2023-10-25 11:25 ` [edk2-devel] [PATCH v2 01/11] ArmPkg/ArmScmiDxe: Rename PERFORMANCE_PROTOCOL_VERSION PierreGondois
2023-10-26 10:05 ` Leif Lindholm
2023-11-02 10:20 ` PierreGondois
2023-11-10 9:11 ` PierreGondois
2023-11-10 15:25 ` Leif Lindholm
2023-10-25 11:25 ` [edk2-devel] [PATCH v2 02/11] ArmPkg/ArmScmiDxe: Add PERFORMANCE_DESCRIBE_FASTCHANNEL support PierreGondois
2023-10-26 10:37 ` Leif Lindholm
2023-11-02 10:19 ` PierreGondois [this message]
2023-11-02 13:32 ` Leif Lindholm
2023-10-25 11:25 ` [edk2-devel] [PATCH v2 03/11] MdePkg/Acpi64: Add _PSD/_CPC/State Coordination Types macros PierreGondois
2023-10-25 11:25 ` [edk2-devel] [PATCH v2 04/11] DynamicTablesPkg: Use new CPC revision macro PierreGondois
2023-10-25 11:25 ` [edk2-devel] [PATCH v2 05/11] DynamicTablesPkg: Rename AmlCpcInfo.h to AcpiObjects.h PierreGondois
2023-10-25 11:25 ` [edk2-devel] [PATCH v2 06/11] DynamicTablesPkg: Add CM_ARM_PSD_INFO object PierreGondois
2023-10-25 11:25 ` [edk2-devel] [PATCH v2 07/11] DynamicTablesPkg: Add PsdToken field to CM_ARM_GICC_INFO object PierreGondois
2023-10-26 10:45 ` Leif Lindholm
2023-11-02 10:20 ` PierreGondois
2023-10-25 11:25 ` [edk2-devel] [PATCH v2 08/11] DynamicTablesPkg: Add AmlCreatePsdNode() to generate _PSD PierreGondois
2023-10-25 11:25 ` [edk2-devel] [PATCH v2 09/11] DynamicTablesPkg: Generate _PSD in SsdtCpuTopologyGenerator PierreGondois
2023-10-25 11:25 ` [edk2-devel] [PATCH v2 10/11] DynamicTablesPkg: Add ArmScmiInfoLib PierreGondois
2023-10-26 11:03 ` Leif Lindholm
2023-11-02 10:20 ` PierreGondois
2023-11-09 9:58 ` PierreGondois
2023-11-09 11:26 ` Leif Lindholm
2023-11-10 9:11 ` PierreGondois
2023-10-25 11:25 ` [edk2-devel] [PATCH v2 11/11] DynamicTablesPkg: Remove check for _CPC field PierreGondois
2023-10-26 11:05 ` Leif Lindholm
2023-11-02 10:20 ` PierreGondois
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=731fa125-5a47-40d2-8062-d2ff8011cc23@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