mirror of https://github.com/acidanthera/audk.git
DynamicTablesPkg: Generate _PSD in SsdtCpuTopologyGenerator
Make use of the newly added AmlCreatePsdNode() to generate _PSD objects. _PSD objects allow to describe 'performance control, P-state or CPPC, logical processor dependency', Cf. ACPI 6.4, s8.4.5.5 _PSD (P-State Dependency). Reviewed-by: Sami Mujawar <sami.mujawar@arm.com> Signed-off-by: Pierre Gondois <pierre.gondois@arm.com>
This commit is contained in:
parent
3344495489
commit
fc04cfd119
|
@ -42,6 +42,7 @@ Requirements:
|
|||
- EArmObjCmRef (OPTIONAL)
|
||||
- EArmObjLpiInfo (OPTIONAL)
|
||||
- GetEArmObjEtInfo (OPTIONAL)
|
||||
- EArmObjPsdInfo (OPTIONAL)
|
||||
*/
|
||||
|
||||
/** This macro expands to a function that retrieves the GIC
|
||||
|
@ -103,6 +104,16 @@ GET_OBJECT_LIST (
|
|||
CM_ARM_ET_INFO
|
||||
);
|
||||
|
||||
/**
|
||||
This macro expands to a function that retrieves the PSD
|
||||
information from the Configuration Manager.
|
||||
*/
|
||||
GET_OBJECT_LIST (
|
||||
EObjNameSpaceArm,
|
||||
EArmObjPsdInfo,
|
||||
CM_ARM_PSD_INFO
|
||||
);
|
||||
|
||||
/** Initialize the TokenTable.
|
||||
|
||||
One entry should be allocated for each CM_ARM_PROC_HIERARCHY_INFO
|
||||
|
@ -256,6 +267,75 @@ WriteAslName (
|
|||
return EFI_SUCCESS;
|
||||
}
|
||||
|
||||
/** Create and add an _PSD Node to Cpu Node.
|
||||
|
||||
For instance, transform an AML node from:
|
||||
Device (C002)
|
||||
{
|
||||
Name (_UID, 2)
|
||||
Name (_HID, "ACPI0007")
|
||||
}
|
||||
|
||||
To:
|
||||
Device (C002)
|
||||
{
|
||||
Name (_UID, 2)
|
||||
Name (_HID, "ACPI0007")
|
||||
Name (_PSD, Package()
|
||||
{
|
||||
NumEntries, // Integer
|
||||
Revision, // Integer
|
||||
Domain, // Integer
|
||||
CoordType, // Integer
|
||||
NumProcessors, // Integer
|
||||
})
|
||||
}
|
||||
|
||||
@param [in] Generator The SSDT Cpu Topology generator.
|
||||
@param [in] CfgMgrProtocol Pointer to the Configuration Manager
|
||||
Protocol Interface.
|
||||
@param [in] GicCInfo Pointer to the CM_ARM_GICC_INFO object
|
||||
describing the Cpu.
|
||||
@param [in] Node CPU Node to which the _CPC node is
|
||||
attached.
|
||||
|
||||
@retval EFI_SUCCESS The function completed successfully.
|
||||
@retval EFI_INVALID_PARAMETER Invalid parameter.
|
||||
@retval EFI_OUT_OF_RESOURCES Failed to allocate memory.
|
||||
**/
|
||||
STATIC
|
||||
EFI_STATUS
|
||||
EFIAPI
|
||||
CreateAmlPsdNode (
|
||||
IN ACPI_CPU_TOPOLOGY_GENERATOR *Generator,
|
||||
IN CONST EDKII_CONFIGURATION_MANAGER_PROTOCOL *CONST CfgMgrProtocol,
|
||||
IN CM_ARM_GICC_INFO *GicCInfo,
|
||||
IN AML_OBJECT_NODE_HANDLE *Node
|
||||
)
|
||||
{
|
||||
EFI_STATUS Status;
|
||||
CM_ARM_PSD_INFO *PsdInfo;
|
||||
|
||||
Status = GetEArmObjPsdInfo (
|
||||
CfgMgrProtocol,
|
||||
GicCInfo->PsdToken,
|
||||
&PsdInfo,
|
||||
NULL
|
||||
);
|
||||
if (EFI_ERROR (Status)) {
|
||||
ASSERT_EFI_ERROR (Status);
|
||||
return Status;
|
||||
}
|
||||
|
||||
Status = AmlCreatePsdNode (
|
||||
PsdInfo,
|
||||
Node,
|
||||
NULL
|
||||
);
|
||||
ASSERT_EFI_ERROR (Status);
|
||||
return Status;
|
||||
}
|
||||
|
||||
/** Create and add an _CPC Node to Cpu Node.
|
||||
|
||||
For instance, transform an AML node from:
|
||||
|
@ -842,6 +922,14 @@ CreateAmlCpuFromProcHierarchy (
|
|||
}
|
||||
}
|
||||
|
||||
if (GicCInfo->PsdToken != CM_NULL_TOKEN) {
|
||||
Status = CreateAmlPsdNode (Generator, CfgMgrProtocol, GicCInfo, CpuNode);
|
||||
if (EFI_ERROR (Status)) {
|
||||
ASSERT_EFI_ERROR (Status);
|
||||
return Status;
|
||||
}
|
||||
}
|
||||
|
||||
// If a CPC info is associated with the
|
||||
// GicCinfo, create an _CPC method returning them.
|
||||
if (GicCInfo->CpcToken != CM_NULL_TOKEN) {
|
||||
|
@ -1299,6 +1387,14 @@ CreateTopologyFromGicC (
|
|||
break;
|
||||
}
|
||||
|
||||
if (GicCInfo->PsdToken != CM_NULL_TOKEN) {
|
||||
Status = CreateAmlPsdNode (Generator, CfgMgrProtocol, GicCInfo, CpuNode);
|
||||
if (EFI_ERROR (Status)) {
|
||||
ASSERT_EFI_ERROR (Status);
|
||||
return Status;
|
||||
}
|
||||
}
|
||||
|
||||
// If a CPC info is associated with the
|
||||
// GicCinfo, create an _CPC method returning them.
|
||||
if (GicCInfo[Index].CpcToken != CM_NULL_TOKEN) {
|
||||
|
|
Loading…
Reference in New Issue