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)
|
- EArmObjCmRef (OPTIONAL)
|
||||||
- EArmObjLpiInfo (OPTIONAL)
|
- EArmObjLpiInfo (OPTIONAL)
|
||||||
- GetEArmObjEtInfo (OPTIONAL)
|
- GetEArmObjEtInfo (OPTIONAL)
|
||||||
|
- EArmObjPsdInfo (OPTIONAL)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/** This macro expands to a function that retrieves the GIC
|
/** This macro expands to a function that retrieves the GIC
|
||||||
|
@ -103,6 +104,16 @@ GET_OBJECT_LIST (
|
||||||
CM_ARM_ET_INFO
|
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.
|
/** Initialize the TokenTable.
|
||||||
|
|
||||||
One entry should be allocated for each CM_ARM_PROC_HIERARCHY_INFO
|
One entry should be allocated for each CM_ARM_PROC_HIERARCHY_INFO
|
||||||
|
@ -256,6 +267,75 @@ WriteAslName (
|
||||||
return EFI_SUCCESS;
|
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.
|
/** Create and add an _CPC Node to Cpu Node.
|
||||||
|
|
||||||
For instance, transform an AML node from:
|
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
|
// If a CPC info is associated with the
|
||||||
// GicCinfo, create an _CPC method returning them.
|
// GicCinfo, create an _CPC method returning them.
|
||||||
if (GicCInfo->CpcToken != CM_NULL_TOKEN) {
|
if (GicCInfo->CpcToken != CM_NULL_TOKEN) {
|
||||||
|
@ -1299,6 +1387,14 @@ CreateTopologyFromGicC (
|
||||||
break;
|
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
|
// If a CPC info is associated with the
|
||||||
// GicCinfo, create an _CPC method returning them.
|
// GicCinfo, create an _CPC method returning them.
|
||||||
if (GicCInfo[Index].CpcToken != CM_NULL_TOKEN) {
|
if (GicCInfo[Index].CpcToken != CM_NULL_TOKEN) {
|
||||||
|
|
Loading…
Reference in New Issue