From: "Leif Lindholm" <quic_llindhol@quicinc.com>
To: Pierre Gondois <pierre.gondois@arm.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: Thu, 9 Nov 2023 11:26:23 +0000 [thread overview]
Message-ID: <ZUzB300hzy94ndYI@qc-i7.hemma.eciton.net> (raw)
In-Reply-To: <9b023970-ea98-4c7b-b7e3-98b44f391d97@arm.com>
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.
> 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 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 (#110966): https://edk2.groups.io/g/devel/message/110966
Mute This Topic: https://groups.io/mt/102175821/7686176
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/leave/12367111/7686176/1913456212/xyzzy [rebecca@openfw.io]
-=-=-=-=-=-=-=-=-=-=-=-
next prev parent reply other threads:[~2023-11-09 11:26 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 [this message]
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=ZUzB300hzy94ndYI@qc-i7.hemma.eciton.net \
--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