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
|
BaseLib
|
||||||
MemoryAllocationLib
|
MemoryAllocationLib
|
||||||
|
|
||||||
|
[FixedPcd]
|
||||||
|
gEdkiiDynamicTablesPkgTokenSpaceGuid.PcdDevelopmentPlatformRelaxations
|
||||||
|
|
||||||
[BuildOptions]
|
[BuildOptions]
|
||||||
*_*_*_CC_FLAGS = -DAML_HANDLE
|
*_*_*_CC_FLAGS = -DAML_HANDLE
|
||||||
|
|
||||||
|
|
|
@ -3532,6 +3532,29 @@ AmlCreateCpcNode (
|
||||||
return EFI_INVALID_PARAMETER;
|
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) &&
|
if ((IsNullGenericAddress (&CpcInfo->HighestPerformanceBuffer) &&
|
||||||
(CpcInfo->HighestPerformanceInteger == 0)) ||
|
(CpcInfo->HighestPerformanceInteger == 0)) ||
|
||||||
(IsNullGenericAddress (&CpcInfo->NominalPerformanceBuffer) &&
|
(IsNullGenericAddress (&CpcInfo->NominalPerformanceBuffer) &&
|
||||||
|
@ -3540,10 +3563,7 @@ AmlCreateCpcNode (
|
||||||
(CpcInfo->LowestNonlinearPerformanceInteger == 0)) ||
|
(CpcInfo->LowestNonlinearPerformanceInteger == 0)) ||
|
||||||
(IsNullGenericAddress (&CpcInfo->LowestPerformanceBuffer) &&
|
(IsNullGenericAddress (&CpcInfo->LowestPerformanceBuffer) &&
|
||||||
(CpcInfo->LowestPerformanceInteger == 0)) ||
|
(CpcInfo->LowestPerformanceInteger == 0)) ||
|
||||||
IsNullGenericAddress (&CpcInfo->DesiredPerformanceRegister) ||
|
IsNullGenericAddress (&CpcInfo->DesiredPerformanceRegister))
|
||||||
IsNullGenericAddress (&CpcInfo->ReferencePerformanceCounterRegister) ||
|
|
||||||
IsNullGenericAddress (&CpcInfo->DeliveredPerformanceCounterRegister) ||
|
|
||||||
IsNullGenericAddress (&CpcInfo->PerformanceLimitedRegister))
|
|
||||||
{
|
{
|
||||||
ASSERT (0);
|
ASSERT (0);
|
||||||
return EFI_INVALID_PARAMETER;
|
return EFI_INVALID_PARAMETER;
|
||||||
|
|
Loading…
Reference in New Issue