mirror of https://github.com/acidanthera/audk.git
DynamicTablesPkg: Exempt some _CPC field from checks
When generating _CPC objects, some fields are mandatory by spec [1]. Some fields cannot be supported by a the Juno platform, which is used to test the _CPC generation. Therefore, rely on the PcdDevelopmentPlatformRelaxations Pcd to either: - warn about the missing fields and and let the OS handle the missing information - consider the missing fields as an error _CPC fields that are exempted from checks when the Pcd is set: - PerformanceLimitedRegister - ReferencePerformanceCounterRegister - DeliveredPerformanceCounterRegister [1] Cf. non-optional fields in: ACPI 6.5, s8.4.6.1 '_CPC (Continuous Performance Control)' Signed-off-by: Pierre Gondois <pierre.gondois@arm.com> Reviewed-by: Sami Mujawar <sami.mujawar@arm.com>
This commit is contained in:
parent
dec9d35738
commit
dc33394701
|
@ -71,6 +71,9 @@
|
|||
BaseLib
|
||||
MemoryAllocationLib
|
||||
|
||||
[FixedPcd]
|
||||
gEdkiiDynamicTablesPkgTokenSpaceGuid.PcdDevelopmentPlatformRelaxations
|
||||
|
||||
[BuildOptions]
|
||||
*_*_*_CC_FLAGS = -DAML_HANDLE
|
||||
|
||||
|
|
|
@ -3532,6 +3532,29 @@ AmlCreateCpcNode (
|
|||
return EFI_INVALID_PARAMETER;
|
||||
}
|
||||
|
||||
/// The following fields are theoretically mandatory, but not supported
|
||||
/// by some platforms.
|
||||
/// - PerformanceLimitedRegister
|
||||
/// - ReferencePerformanceCounterRegister
|
||||
/// - DeliveredPerformanceCounterRegister
|
||||
/// Warn if BIT0 in PcdDevelopmentPlatformRelaxations is set, otherwise
|
||||
/// return an error.
|
||||
if (IsNullGenericAddress (&CpcInfo->PerformanceLimitedRegister) ||
|
||||
IsNullGenericAddress (&CpcInfo->ReferencePerformanceCounterRegister) ||
|
||||
IsNullGenericAddress (&CpcInfo->DeliveredPerformanceCounterRegister))
|
||||
{
|
||||
if ((PcdGet64 (PcdDevelopmentPlatformRelaxations) & BIT0) != 0) {
|
||||
DEBUG ((
|
||||
DEBUG_WARN,
|
||||
"Missing PerformanceLimited|ReferencePerformanceCounter|"
|
||||
"DeliveredPerformanceCounter field in _CPC object\n"
|
||||
));
|
||||
} else {
|
||||
ASSERT (0);
|
||||
return EFI_INVALID_PARAMETER;
|
||||
}
|
||||
}
|
||||
|
||||
if ((IsNullGenericAddress (&CpcInfo->HighestPerformanceBuffer) &&
|
||||
(CpcInfo->HighestPerformanceInteger == 0)) ||
|
||||
(IsNullGenericAddress (&CpcInfo->NominalPerformanceBuffer) &&
|
||||
|
@ -3540,10 +3563,7 @@ AmlCreateCpcNode (
|
|||
(CpcInfo->LowestNonlinearPerformanceInteger == 0)) ||
|
||||
(IsNullGenericAddress (&CpcInfo->LowestPerformanceBuffer) &&
|
||||
(CpcInfo->LowestPerformanceInteger == 0)) ||
|
||||
IsNullGenericAddress (&CpcInfo->DesiredPerformanceRegister) ||
|
||||
IsNullGenericAddress (&CpcInfo->ReferencePerformanceCounterRegister) ||
|
||||
IsNullGenericAddress (&CpcInfo->DeliveredPerformanceCounterRegister) ||
|
||||
IsNullGenericAddress (&CpcInfo->PerformanceLimitedRegister))
|
||||
IsNullGenericAddress (&CpcInfo->DesiredPerformanceRegister))
|
||||
{
|
||||
ASSERT (0);
|
||||
return EFI_INVALID_PARAMETER;
|
||||
|
|
Loading…
Reference in New Issue