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>
Cc: devel@edk2.groups.io, 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 10/11] DynamicTablesPkg: Add ArmScmiInfoLib
Date: Fri, 10 Nov 2023 10:11:17 +0100	[thread overview]
Message-ID: <854e6785-8449-411a-8b88-26bf5f985cc4@arm.com> (raw)
In-Reply-To: <ZUzB300hzy94ndYI@qc-i7.hemma.eciton.net>



On 11/9/23 12:26, Leif Lindholm wrote:
> On Thu, Nov 09, 2023 at 10:58:58 +0100, Pierre Gondois wrote:
>> Hello Leif,
>>
>> On 11/2/23 11:20, Pierre Gondois wrote:
>>>
>>>
>>> On 10/26/23 13:03, Leif Lindholm wrote:
>>>> On Wed, Oct 25, 2023 at 13:25:39 +0200, PierreGondois wrote:
>>>>> From: Pierre Gondois <pierre.gondois@arm.com>
>>>>>
>>>>> The SCP holds some power information that could be advertised
>>>>> through the _CPC object. The communication with the SCP is done
>>>>> through SCMI protocols (c.f. ArmScmiDxe).
>>>>>
>>>>> Use the SCMI protocols to query information and feed it to
>>>>> the DynamicTablesPkg.
>>>>
>>>> Couple of questions:
>>>> With a generic name like ArmScmiInfoLib, does is belong in ArmPkg or
>>>> MdeModulePkg?
>>>>
>>>> Or if it's more tightly integrated with DynamicTablesPkg (not
>>>> blatantly obvious from a quick skim below), should that be reflected
>>>> by the library name?
>>>
>>> The library is tight to the DynamicTablesPkg as it produces DynamicTablesPkg
>>> specific objects. It uses the SCMI interface to fetch information from the SCP.
>>> The ScmiProtocol resides in the ArmPkg, thus the name.
>>> Does the name 'ScmiInfoLib' sound better ?
>>
>> Should I keep ArmScmiInfoLib / ScmiInfoLib ?
> 
> I know it gets tedious with the long names, but if it's fully
> integrated with DynamicTablesPkg, then it's kind of important that the
> name does not imply it's generic; i.e., the name should be DynamicTable*.
> 
> If it helps clarify my thinking, my litmus test for this is I
> don't want to have to go searching through code to determine whether
> 
> #include <Library/ArmScmi*.h>
> 
> imports an Arm-specification header or a package-local helper.

Ok right, I'll rename it DynamicTablesScmiInfoLib then.

> 
>> Also I'm not sure if there is a change required to:
>>    [PATCH v2 01/11] ArmPkg/ArmScmiDxe: Rename PERFORMANCE_PROTOCOL_VERSION
>> regarding the spec. reference, cf. https://edk2.groups.io/g/devel/message/110515
> 
> I'm not sure I follow? A change in what way?

I was referring to your point about the fact some features might
be written against a specific SCMI spec. version, cf. the related thread.

> 
> I agree the name is too generic. I didn't flag it because it replaces
> a non-ideal thing with something that isn't any worse, and I'm trying
> to cut down on asking people to fix existing quirks when adding new
> features.
> 
> If you're happy to rename it while you're at it, I'm happy to take it.
> 
> Regards,
> 
> Leif
> 
>> Regards
>> Pierre
>>
>>>
>>>>
>>>> /
>>>>        Leif
>>>>
>>>>> Signed-off-by: Pierre Gondois <pierre.gondois@arm.com>
>>>>> ---
>>>>>     DynamicTablesPkg/DynamicTables.dsc.inc        |   1 +
>>>>>     DynamicTablesPkg/DynamicTablesPkg.dec         |   3 +
>>>>>     DynamicTablesPkg/DynamicTablesPkg.dsc         |   1 +
>>>>>     .../Include/Library/ArmScmiInfoLib.h          |  33 ++
>>>>>     .../Library/ArmScmiInfoLib/ArmScmiInfoLib.c   | 294 ++++++++++++++++++
>>>>>     .../Library/ArmScmiInfoLib/ArmScmiInfoLib.inf |  31 ++
>>>>>     6 files changed, 363 insertions(+)
>>>>>     create mode 100644 DynamicTablesPkg/Include/Library/ArmScmiInfoLib.h
>>>>>     create mode 100644 DynamicTablesPkg/Library/ArmScmiInfoLib/ArmScmiInfoLib.c
>>>>>     create mode 100644 DynamicTablesPkg/Library/ArmScmiInfoLib/ArmScmiInfoLib.inf
>>>>>
>>>>> diff --git a/DynamicTablesPkg/DynamicTables.dsc.inc b/DynamicTablesPkg/DynamicTables.dsc.inc
>>>>> index 9d4312c4e87d..be40ebc4b472 100644
>>>>> --- a/DynamicTablesPkg/DynamicTables.dsc.inc
>>>>> +++ b/DynamicTablesPkg/DynamicTables.dsc.inc
>>>>> @@ -15,6 +15,7 @@ [BuildOptions]
>>>>>     [LibraryClasses.common]
>>>>>       AcpiHelperLib|DynamicTablesPkg/Library/Common/AcpiHelperLib/AcpiHelperLib.inf
>>>>>       AmlLib|DynamicTablesPkg/Library/Common/AmlLib/AmlLib.inf
>>>>> +  ArmScmiInfoLib|DynamicTablesPkg/Library/ArmScmiInfoLib/ArmScmiInfoLib.inf
>>>>>       SsdtPcieSupportLib|DynamicTablesPkg/Library/Common/SsdtPcieSupportLib/SsdtPcieSupportLib.inf
>>>>>       SsdtSerialPortFixupLib|DynamicTablesPkg/Library/Common/SsdtSerialPortFixupLib/SsdtSerialPortFixupLib.inf
>>>>>       TableHelperLib|DynamicTablesPkg/Library/Common/TableHelperLib/TableHelperLib.inf
>>>>> diff --git a/DynamicTablesPkg/DynamicTablesPkg.dec b/DynamicTablesPkg/DynamicTablesPkg.dec
>>>>> index cfbcbb9569f1..26498e5fec53 100644
>>>>> --- a/DynamicTablesPkg/DynamicTablesPkg.dec
>>>>> +++ b/DynamicTablesPkg/DynamicTablesPkg.dec
>>>>> @@ -42,6 +42,9 @@ [LibraryClasses]
>>>>>       ##  @libraryclass  Defines a set of SMBIOS string helper methods.
>>>>>       SmbiosStringTableLib|Include/Library/SmbiosStringTableLib.h
>>>>> +  ##  @libraryclass  Defines a set of APIs to populate CmObj using SCMI.
>>>>> +  ArmScmiInfoLib|Include/Library/ArmScmiInfoLib.h
>>>>> +
>>>>>     [Protocols]
>>>>>       # Configuration Manager Protocol GUID
>>>>>       gEdkiiConfigurationManagerProtocolGuid = { 0xd85a4835, 0x5a82, 0x4894, { 0xac, 0x2, 0x70, 0x6f, 0x43, 0xd5, 0x97, 0x8e } }
>>>>> diff --git a/DynamicTablesPkg/DynamicTablesPkg.dsc b/DynamicTablesPkg/DynamicTablesPkg.dsc
>>>>> index bd5084a9008f..6ea86c9efdb0 100644
>>>>> --- a/DynamicTablesPkg/DynamicTablesPkg.dsc
>>>>> +++ b/DynamicTablesPkg/DynamicTablesPkg.dsc
>>>>> @@ -39,6 +39,7 @@ [LibraryClasses.ARM, LibraryClasses.AARCH64]
>>>>>       PL011UartLib|ArmPlatformPkg/Library/PL011UartLib/PL011UartLib.inf
>>>>>     [Components.common]
>>>>> +  DynamicTablesPkg/Library/ArmScmiInfoLib/ArmScmiInfoLib.inf
>>>>>       DynamicTablesPkg/Library/Common/AcpiHelperLib/AcpiHelperLib.inf
>>>>>       DynamicTablesPkg/Library/Common/AmlLib/AmlLib.inf
>>>>>       DynamicTablesPkg/Library/Common/SsdtPcieSupportLib/SsdtPcieSupportLib.inf
>>>>> diff --git a/DynamicTablesPkg/Include/Library/ArmScmiInfoLib.h b/DynamicTablesPkg/Include/Library/ArmScmiInfoLib.h
>>>>> new file mode 100644
>>>>> index 000000000000..8d3fb31df13c
>>>>> --- /dev/null
>>>>> +++ b/DynamicTablesPkg/Include/Library/ArmScmiInfoLib.h
>>>>> @@ -0,0 +1,33 @@
>>>>> +/** @file
>>>>> +  Arm SCMI Info Library.
>>>>> +
>>>>> +  Copyright (c) 2022 - 2023, Arm Limited. All rights reserved.<BR>
>>>>> +
>>>>> +  SPDX-License-Identifier: BSD-2-Clause-Patent
>>>>> +**/
>>>>> +
>>>>> +#ifndef ARM_SCMI_INFO_LIB_H_
>>>>> +#define ARM_SCMI_INFO_LIB_H_
>>>>> +
>>>>> +#include <ConfigurationManagerObject.h>
>>>>> +
>>>>> +/** Populate a AML_CPC_INFO object based on SCMI information.
>>>>> +
>>>>> +  @param[in]  DomainId    Identifier for the performance domain.
>>>>> +  @param[out] CpcInfo     If success, this structure was populated from
>>>>> +                          information queried to the SCP.
>>>>> +
>>>>> +  @retval EFI_SUCCESS             Success.
>>>>> +  @retval EFI_DEVICE_ERROR        Device error.
>>>>> +  @retval EFI_INVALID_PARAMETER   Invalid parameter.
>>>>> +  @retval EFI_TIMEOUT             Time out.
>>>>> +  @retval EFI_UNSUPPORTED         Unsupported.
>>>>> +**/
>>>>> +EFI_STATUS
>>>>> +EFIAPI
>>>>> +ArmScmiInfoGetFastChannel (
>>>>> +  IN  UINT32        DomainId,
>>>>> +  OUT AML_CPC_INFO  *CpcInfo
>>>>> +  );
>>>>> +
>>>>> +#endif // ARM_SCMI_INFO_LIB_H_
>>>>> diff --git a/DynamicTablesPkg/Library/ArmScmiInfoLib/ArmScmiInfoLib.c b/DynamicTablesPkg/Library/ArmScmiInfoLib/ArmScmiInfoLib.c
>>>>> new file mode 100644
>>>>> index 000000000000..c23bff63bb6f
>>>>> --- /dev/null
>>>>> +++ b/DynamicTablesPkg/Library/ArmScmiInfoLib/ArmScmiInfoLib.c
>>>>> @@ -0,0 +1,294 @@
>>>>> +/** @file
>>>>> +  Arm SCMI Info Library.
>>>>> +
>>>>> +  Copyright (c) 2022 - 2023, Arm Limited. All rights reserved.<BR>
>>>>> +
>>>>> +  Arm Functional Fixed Hardware Specification:
>>>>> +  - https://developer.arm.com/documentation/den0048/latest/
>>>>> +
>>>>> +  SPDX-License-Identifier: BSD-2-Clause-Patent
>>>>> +**/
>>>>> +
>>>>> +#include <Library/AcpiLib.h>
>>>>> +#include <Library/ArmScmiInfoLib.h>
>>>>> +#include <Library/DebugLib.h>
>>>>> +#include <Library/MemoryAllocationLib.h>
>>>>> +#include <Library/UefiBootServicesTableLib.h>
>>>>> +#include <Protocol/ArmScmi.h>
>>>>> +#include <Protocol/ArmScmiPerformanceProtocol.h>
>>>>> +
>>>>> +/** Arm FFH registers
>>>>> +
>>>>> +  Cf. Arm Functional Fixed Hardware Specification
>>>>> +  s3.2 Performance management and Collaborative Processor Performance Control
>>>>> +*/
>>>>> +#define ARM_FFH_DELIVERED_PERF_COUNTER_REGISTER  0x0
>>>>> +#define ARM_FFH_REFERENCE_PERF_COUNTER_REGISTER  0x1
>>>>> +
>>>>> +/// Arm SCMI performance protocol.
>>>>> +STATIC SCMI_PERFORMANCE_PROTOCOL  *ScmiPerfProtocol;
>>>>> +
>>>>> +/** Arm SCMI Info Library constructor.
>>>>> +
>>>>> +  @param  ImageHandle   Image of the loaded driver.
>>>>> +  @param  SystemTable   Pointer to the System Table.
>>>>> +
>>>>> +  @retval EFI_SUCCESS             Success.
>>>>> +  @retval EFI_DEVICE_ERROR        Device error.
>>>>> +  @retval EFI_INVALID_PARAMETER   Invalid parameter.
>>>>> +  @retval EFI_NOT_FOUND           Not Found
>>>>> +  @retval EFI_TIMEOUT             Timeout.
>>>>> +  @retval EFI_UNSUPPORTED         Unsupported.
>>>>> +**/
>>>>> +EFI_STATUS
>>>>> +EFIAPI
>>>>> +ArmScmiInfoLibConstructor (
>>>>> +  IN  EFI_HANDLE        ImageHandle,
>>>>> +  IN  EFI_SYSTEM_TABLE  *SystemTable
>>>>> +  )
>>>>> +{
>>>>> +  EFI_STATUS  Status;
>>>>> +  UINT32      Version;
>>>>> +
>>>>> +  Status = gBS->LocateProtocol (
>>>>> +                  &gArmScmiPerformanceProtocolGuid,
>>>>> +                  NULL,
>>>>> +                  (VOID **)&ScmiPerfProtocol
>>>>> +                  );
>>>>> +  if (EFI_ERROR (Status)) {
>>>>> +    return Status;
>>>>> +  }
>>>>> +
>>>>> +  Status = ScmiPerfProtocol->GetVersion (ScmiPerfProtocol, &Version);
>>>>> +  if (EFI_ERROR (Status)) {
>>>>> +    return Status;
>>>>> +  }
>>>>> +
>>>>> +  // FastChannels were added in SCMI v2.0 spec.
>>>>> +  if (Version < PERFORMANCE_PROTOCOL_VERSION_V2) {
>>>>> +    DEBUG ((DEBUG_ERROR, "ArmScmiInfoLib requires SCMI version > 2.0\n"));
>>>>> +    return EFI_UNSUPPORTED;
>>>>> +  }
>>>>> +
>>>>> +  return Status;
>>>>> +}
>>>>> +
>>>>> +/** Get the OPPs/performance states of a power domain.
>>>>> +
>>>>> +  This function is a wrapper around the SCMI PERFORMANCE_DESCRIBE_LEVELS
>>>>> +  command. The list of discrete performance states is returned in a buffer
>>>>> +  that must be freed by the caller.
>>>>> +
>>>>> +  @param[in]  DomainId        Identifier for the performance domain.
>>>>> +  @param[out] LevelArray      If success, pointer to the list of list of
>>>>> +                              performance state. This memory must be freed by
>>>>> +                              the caller.
>>>>> +  @param[out] LevelArrayCount If success, contains the number of states in
>>>>> +                              LevelArray.
>>>>> +
>>>>> +  @retval EFI_SUCCESS             Success.
>>>>> +  @retval EFI_DEVICE_ERROR        Device error.
>>>>> +  @retval EFI_INVALID_PARAMETER   Invalid parameter.
>>>>> +  @retval EFI_TIMEOUT             Time out.
>>>>> +  @retval EFI_UNSUPPORTED         Unsupported.
>>>>> +**/
>>>>> +STATIC
>>>>> +EFI_STATUS
>>>>> +EFIAPI
>>>>> +ArmScmiInfoDescribeLevels (
>>>>> +  IN  UINT32                  DomainId,
>>>>> +  OUT SCMI_PERFORMANCE_LEVEL  **LevelArray,
>>>>> +  OUT UINT32                  *LevelArrayCount
>>>>> +  )
>>>>> +{
>>>>> +  EFI_STATUS              Status;
>>>>> +  SCMI_PERFORMANCE_LEVEL  *Array;
>>>>> +  UINT32                  Count;
>>>>> +  UINT32                  Size;
>>>>> +
>>>>> +  if ((ScmiPerfProtocol == NULL)  ||
>>>>> +      (LevelArray == NULL)  ||
>>>>> +      (LevelArrayCount == NULL))
>>>>> +  {
>>>>> +    return EFI_INVALID_PARAMETER;
>>>>> +  }
>>>>> +
>>>>> +  // First call to get the number of levels.
>>>>> +  Size   = 0;
>>>>> +  Status = ScmiPerfProtocol->DescribeLevels (
>>>>> +                               ScmiPerfProtocol,
>>>>> +                               DomainId,
>>>>> +                               &Count,
>>>>> +                               &Size,
>>>>> +                               NULL
>>>>> +                               );
>>>>> +  if (Status != EFI_BUFFER_TOO_SMALL) {
>>>>> +    // EFI_SUCCESS is not a valid option.
>>>>> +    if (Status == EFI_SUCCESS) {
>>>>> +      return EFI_INVALID_PARAMETER;
>>>>> +    } else {
>>>>> +      return Status;
>>>>> +    }
>>>>> +  }
>>>>> +
>>>>> +  Array = AllocateZeroPool (Size);
>>>>> +  if (Array == NULL) {
>>>>> +    return EFI_OUT_OF_RESOURCES;
>>>>> +  }
>>>>> +
>>>>> +  // Second call to get the descriptions of the levels.
>>>>> +  Status = ScmiPerfProtocol->DescribeLevels (
>>>>> +                               ScmiPerfProtocol,
>>>>> +                               DomainId,
>>>>> +                               &Count,
>>>>> +                               &Size,
>>>>> +                               Array
>>>>> +                               );
>>>>> +  if (EFI_ERROR (Status)) {
>>>>> +    return Status;
>>>>> +  }
>>>>> +
>>>>> +  *LevelArray      = Array;
>>>>> +  *LevelArrayCount = Count;
>>>>> +
>>>>> +  return Status;
>>>>> +}
>>>>> +
>>>>> +/** Populate a AML_CPC_INFO object based on SCMI information.
>>>>> +
>>>>> +  @param[in]  DomainId    Identifier for the performance domain.
>>>>> +  @param[out] CpcInfo     If success, this structure was populated from
>>>>> +                          information queried to the SCP.
>>>>> +
>>>>> +  @retval EFI_SUCCESS             Success.
>>>>> +  @retval EFI_DEVICE_ERROR        Device error.
>>>>> +  @retval EFI_INVALID_PARAMETER   Invalid parameter.
>>>>> +  @retval EFI_TIMEOUT             Time out.
>>>>> +  @retval EFI_UNSUPPORTED         Unsupported.
>>>>> +**/
>>>>> +EFI_STATUS
>>>>> +EFIAPI
>>>>> +ArmScmiInfoGetFastChannel (
>>>>> +  IN  UINT32        DomainId,
>>>>> +  OUT AML_CPC_INFO  *CpcInfo
>>>>> +  )
>>>>> +{
>>>>> +  EFI_STATUS                          Status;
>>>>> +  SCMI_PERFORMANCE_FASTCHANNEL        FcLevelGet;
>>>>> +  SCMI_PERFORMANCE_FASTCHANNEL        FcLimitsSet;
>>>>> +  SCMI_PERFORMANCE_DOMAIN_ATTRIBUTES  DomainAttributes;
>>>>> +
>>>>> +  SCMI_PERFORMANCE_LEVEL  *LevelArray;
>>>>> +  UINT32                  LevelCount;
>>>>> +
>>>>> +  UINT64  FcLevelGetAddr;
>>>>> +  UINT64  FcLimitsMaxSetAddr;
>>>>> +  UINT64  FcLimitsMinSetAddr;
>>>>> +
>>>>> +  if ((ScmiPerfProtocol == NULL)  ||
>>>>> +      (CpcInfo == NULL))
>>>>> +  {
>>>>> +    return EFI_INVALID_PARAMETER;
>>>>> +  }
>>>>> +
>>>>> +  Status = ScmiPerfProtocol->DescribeFastchannel (
>>>>> +                               ScmiPerfProtocol,
>>>>> +                               DomainId,
>>>>> +                               ScmiMessageIdPerformanceLevelSet,
>>>>> +                               &FcLevelGet
>>>>> +                               );
>>>>> +  if (EFI_ERROR (Status)) {
>>>>> +    return Status;
>>>>> +  }
>>>>> +
>>>>> +  Status = ScmiPerfProtocol->DescribeFastchannel (
>>>>> +                               ScmiPerfProtocol,
>>>>> +                               DomainId,
>>>>> +                               ScmiMessageIdPerformanceLimitsSet,
>>>>> +                               &FcLimitsSet
>>>>> +                               );
>>>>> +  if (EFI_ERROR (Status)) {
>>>>> +    return Status;
>>>>> +  }
>>>>> +
>>>>> +  Status = ScmiPerfProtocol->GetDomainAttributes (
>>>>> +                               ScmiPerfProtocol,
>>>>> +                               DomainId,
>>>>> +                               &DomainAttributes
>>>>> +                               );
>>>>> +  if (EFI_ERROR (Status)) {
>>>>> +    return Status;
>>>>> +  }
>>>>> +
>>>>> +  Status = ArmScmiInfoDescribeLevels (DomainId, &LevelArray, &LevelCount);
>>>>> +  if (EFI_ERROR (Status)) {
>>>>> +    return Status;
>>>>> +  }
>>>>> +
>>>>> +  /* Do some safety checks.
>>>>> +     Only support FastChannels (and not doorbells) as this is
>>>>> +     the only mechanism supported by SCP.
>>>>> +     FcLimits[Get|Set] require 2 UINT32 values (max, then min) and
>>>>> +     FcLimits[Get|Set] require 1 UINT32 value (level).
>>>>> +  */
>>>>> +  if ((FcLevelGet.ChanSize != sizeof (UINT32))  ||
>>>>> +      ((FcLevelGet.Attributes & SCMI_PERF_FC_ATTRIB_HAS_DOORBELL) ==
>>>>> +       SCMI_PERF_FC_ATTRIB_HAS_DOORBELL) ||
>>>>> +      (FcLimitsSet.ChanSize != 2 * sizeof (UINT32)) ||
>>>>> +      ((FcLimitsSet.Attributes & SCMI_PERF_FC_ATTRIB_HAS_DOORBELL) ==
>>>>> +       SCMI_PERF_FC_ATTRIB_HAS_DOORBELL))
>>>>> +  {
>>>>> +    Status = EFI_INVALID_PARAMETER;
>>>>> +    goto exit_handler;
>>>>> +  }
>>>>> +
>>>>> +  FcLevelGetAddr = ((UINT64)FcLevelGet.ChanAddrHigh << 32) |
>>>>> +                   FcLevelGet.ChanAddrLow;
>>>>> +  FcLimitsMaxSetAddr = ((UINT64)FcLimitsSet.ChanAddrHigh << 32) |
>>>>> +                       FcLimitsSet.ChanAddrLow;
>>>>> +  FcLimitsMinSetAddr = FcLimitsMaxSetAddr + 0x4;
>>>>> +
>>>>> +  CpcInfo->Revision                          = EFI_ACPI_6_4_AML_CPC_REVISION_V3;
>>>>> +  CpcInfo->HighestPerformanceInteger         = LevelArray[LevelCount - 1].Level;
>>>>> +  CpcInfo->NominalPerformanceInteger         = DomainAttributes.SustainedPerfLevel;
>>>>> +  CpcInfo->LowestNonlinearPerformanceInteger = LevelArray[0].Level;
>>>>> +  CpcInfo->LowestPerformanceInteger          = LevelArray[0].Level;
>>>>> +
>>>>> +  CpcInfo->DesiredPerformanceRegister.AddressSpaceId    = EFI_ACPI_6_4_SYSTEM_MEMORY;
>>>>> +  CpcInfo->DesiredPerformanceRegister.RegisterBitWidth  = 32;
>>>>> +  CpcInfo->DesiredPerformanceRegister.RegisterBitOffset = 0;
>>>>> +  CpcInfo->DesiredPerformanceRegister.AccessSize        = EFI_ACPI_6_4_DWORD;
>>>>> +  CpcInfo->DesiredPerformanceRegister.Address           = FcLevelGetAddr;
>>>>> +
>>>>> +  CpcInfo->MinimumPerformanceRegister.AddressSpaceId    = EFI_ACPI_6_4_SYSTEM_MEMORY;
>>>>> +  CpcInfo->MinimumPerformanceRegister.RegisterBitWidth  = 32;
>>>>> +  CpcInfo->MinimumPerformanceRegister.RegisterBitOffset = 0;
>>>>> +  CpcInfo->MinimumPerformanceRegister.AccessSize        = EFI_ACPI_6_4_DWORD;
>>>>> +  CpcInfo->MinimumPerformanceRegister.Address           = FcLimitsMinSetAddr;
>>>>> +
>>>>> +  CpcInfo->MaximumPerformanceRegister.AddressSpaceId    = EFI_ACPI_6_4_SYSTEM_MEMORY;
>>>>> +  CpcInfo->MaximumPerformanceRegister.RegisterBitWidth  = 32;
>>>>> +  CpcInfo->MaximumPerformanceRegister.RegisterBitOffset = 0;
>>>>> +  CpcInfo->MaximumPerformanceRegister.AccessSize        = EFI_ACPI_6_4_DWORD;
>>>>> +  CpcInfo->MaximumPerformanceRegister.Address           = FcLimitsMaxSetAddr;
>>>>> +
>>>>> +  CpcInfo->ReferencePerformanceCounterRegister.AddressSpaceId    = EFI_ACPI_6_4_FUNCTIONAL_FIXED_HARDWARE;
>>>>> +  CpcInfo->ReferencePerformanceCounterRegister.RegisterBitWidth  = 0x40;
>>>>> +  CpcInfo->ReferencePerformanceCounterRegister.RegisterBitOffset = 0;
>>>>> +  CpcInfo->ReferencePerformanceCounterRegister.AccessSize        = ARM_FFH_REFERENCE_PERF_COUNTER_REGISTER;
>>>>> +  CpcInfo->ReferencePerformanceCounterRegister.Address           = 0x4;
>>>>> +
>>>>> +  CpcInfo->DeliveredPerformanceCounterRegister.AddressSpaceId    = EFI_ACPI_6_4_FUNCTIONAL_FIXED_HARDWARE;
>>>>> +  CpcInfo->DeliveredPerformanceCounterRegister.RegisterBitWidth  = 0x40;
>>>>> +  CpcInfo->DeliveredPerformanceCounterRegister.RegisterBitOffset = 0;
>>>>> +  CpcInfo->DeliveredPerformanceCounterRegister.AccessSize        = ARM_FFH_DELIVERED_PERF_COUNTER_REGISTER;
>>>>> +  CpcInfo->DeliveredPerformanceCounterRegister.Address           = 0x4;
>>>>> +
>>>>> +  // SCMI should advertise performance values on a unified scale. So frequency
>>>>> +  // values are not available. LowestFrequencyInteger and
>>>>> +  // NominalFrequencyInteger are populated in the ConfigurationManager.
>>>>> +
>>>>> +exit_handler:
>>>>> +  FreePool (LevelArray);
>>>>> +  return Status;
>>>>> +}
>>>>> diff --git a/DynamicTablesPkg/Library/ArmScmiInfoLib/ArmScmiInfoLib.inf b/DynamicTablesPkg/Library/ArmScmiInfoLib/ArmScmiInfoLib.inf
>>>>> new file mode 100644
>>>>> index 000000000000..aad3f0fa7b83
>>>>> --- /dev/null
>>>>> +++ b/DynamicTablesPkg/Library/ArmScmiInfoLib/ArmScmiInfoLib.inf
>>>>> @@ -0,0 +1,31 @@
>>>>> +## @file
>>>>> +#  Arm SCMI Info Library.
>>>>> +#
>>>>> +#  Copyright (c) 2022 - 2023, Arm Limited. All rights reserved.
>>>>> +#
>>>>> +#  SPDX-License-Identifier: BSD-2-Clause-Patent
>>>>> +##
>>>>> +
>>>>> +[Defines]
>>>>> +  INF_VERSION    = 0x0001001B
>>>>> +  BASE_NAME      = ArmScmiInfoLib
>>>>> +  FILE_GUID      = 1A7CDB04-9FFC-40DA-A87C-A5ACADAF8136
>>>>> +  VERSION_STRING = 1.0
>>>>> +  MODULE_TYPE    = DXE_DRIVER
>>>>> +  LIBRARY_CLASS  = ArmScmiInfoLib
>>>>> +  CONSTRUCTOR    = ArmScmiInfoLibConstructor
>>>>> +
>>>>> +[Sources]
>>>>> +  ArmScmiInfoLib.c
>>>>> +
>>>>> +[Packages]
>>>>> +  ArmPkg/ArmPkg.dec
>>>>> +  DynamicTablesPkg/DynamicTablesPkg.dec
>>>>> +  EmbeddedPkg/EmbeddedPkg.dec
>>>>> +  MdePkg/MdePkg.dec
>>>>> +
>>>>> +[Protocols]
>>>>> +  gArmScmiPerformanceProtocolGuid   ## CONSUMES
>>>>> +
>>>>> +[Depex]
>>>>> +  gArmScmiPerformanceProtocolGuid
>>>>> -- 
>>>>> 2.25.1
>>>>>
>>>>>
>>>>>
>>>>> 
>>>>>
>>>>>


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#111024): https://edk2.groups.io/g/devel/message/111024
Mute This Topic: https://groups.io/mt/102175821/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-



  reply	other threads:[~2023-11-10  9:11 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
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 [this message]
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=854e6785-8449-411a-8b88-26bf5f985cc4@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