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



  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