UefiCpuPkg/RegisterCpuFeaturesLib: Optimize PCD

PcdCpuFeaturesUserConfiguration.

Merge PcdCpuFeaturesUserConfiguration into PcdCpuFeaturesSetting.
Use PcdCpuFeaturesSetting as input for the user input feature setting
Use PcdCpuFeaturesSetting as output for the final CPU feature setting

BZ:https://bugzilla.tianocore.org/show_bug.cgi?id=1375

Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Eric Dong <eric.dong@intel.com>
Reviewed-by: Ray Ni <ray.ni@intel.com>
This commit is contained in:
Eric Dong
2019-02-12 15:22:48 +08:00
parent 79be3d2751
commit 6214ffb410
5 changed files with 27 additions and 72 deletions

View File

@@ -21,16 +21,21 @@ CHAR16 *mRegisterTypeStr[] = {L"MSR", L"CR", L"MMIO", L"CACHE", L"SEMAP", L"INVA
Worker function to save PcdCpuFeaturesCapability.
@param[in] SupportedFeatureMask The pointer to CPU feature bits mask buffer
@param[in] FeatureMaskSize CPU feature bits mask buffer size.
**/
VOID
SetCapabilityPcd (
IN UINT8 *SupportedFeatureMask
IN UINT8 *SupportedFeatureMask,
IN UINT32 FeatureMaskSize
)
{
EFI_STATUS Status;
UINTN BitMaskSize;
BitMaskSize = PcdGetSize (PcdCpuFeaturesCapability);
ASSERT (FeatureMaskSize == BitMaskSize);
Status = PcdSetPtrS (PcdCpuFeaturesCapability, &BitMaskSize, SupportedFeatureMask);
ASSERT_EFI_ERROR (Status);
}
@@ -53,48 +58,6 @@ SetSettingPcd (
ASSERT_EFI_ERROR (Status);
}
/**
Worker function to get PcdCpuFeaturesSupport.
@return The pointer to CPU feature bits mask buffer.
**/
UINT8 *
GetSupportPcd (
VOID
)
{
UINT8 *SupportBitMask;
SupportBitMask = AllocateCopyPool (
PcdGetSize (PcdCpuFeaturesSupport),
PcdGetPtr (PcdCpuFeaturesSupport)
);
ASSERT (SupportBitMask != NULL);
return SupportBitMask;
}
/**
Worker function to get PcdCpuFeaturesUserConfiguration.
@return The pointer to CPU feature bits mask buffer.
**/
UINT8 *
GetConfigurationPcd (
VOID
)
{
UINT8 *SupportBitMask;
SupportBitMask = AllocateCopyPool (
PcdGetSize (PcdCpuFeaturesUserConfiguration),
PcdGetPtr (PcdCpuFeaturesUserConfiguration)
);
ASSERT (SupportBitMask != NULL);
return SupportBitMask;
}
/**
Collects CPU type and feature information.
@@ -287,7 +250,6 @@ CpuInitDataInitialize (
// Get support and configuration PCDs
//
CpuFeaturesData->SupportPcd = GetSupportPcd ();
CpuFeaturesData->ConfigurationPcd = GetConfigurationPcd ();
}
/**
@@ -323,14 +285,14 @@ SupportedMaskOr (
**/
VOID
SupportedMaskAnd (
IN UINT8 *SupportedFeatureMask,
IN UINT8 *AndFeatureBitMask
IN UINT8 *SupportedFeatureMask,
IN CONST UINT8 *AndFeatureBitMask
)
{
UINTN Index;
UINTN BitMaskSize;
UINT8 *Data1;
UINT8 *Data2;
CONST UINT8 *Data2;
BitMaskSize = PcdGetSize (PcdCpuFeaturesSupport);
Data1 = SupportedFeatureMask;
@@ -610,16 +572,9 @@ AnalysisProcessorFeatures (
//
// Calculate the last setting
//
CpuFeaturesData->SettingPcd = AllocateCopyPool (CpuFeaturesData->BitMaskSize, CpuFeaturesData->CapabilityPcd);
ASSERT (CpuFeaturesData->SettingPcd != NULL);
SupportedMaskAnd (CpuFeaturesData->SettingPcd, CpuFeaturesData->ConfigurationPcd);
//
// Save PCDs and display CPU PCDs
//
SetCapabilityPcd (CpuFeaturesData->CapabilityPcd);
SetSettingPcd (CpuFeaturesData->SettingPcd);
SupportedMaskAnd (CpuFeaturesData->SettingPcd, PcdGetPtr (PcdCpuFeaturesSetting));
//
// Dump the last CPU feature list
@@ -643,14 +598,20 @@ AnalysisProcessorFeatures (
}
DEBUG ((DEBUG_INFO, "PcdCpuFeaturesSupport:\n"));
DumpCpuFeatureMask (CpuFeaturesData->SupportPcd);
DEBUG ((DEBUG_INFO, "PcdCpuFeaturesUserConfiguration:\n"));
DumpCpuFeatureMask (CpuFeaturesData->ConfigurationPcd);
DEBUG ((DEBUG_INFO, "PcdCpuFeaturesCapability:\n"));
DumpCpuFeatureMask (CpuFeaturesData->CapabilityPcd);
DEBUG ((DEBUG_INFO, "PcdCpuFeaturesSetting:\n"));
DEBUG ((DEBUG_INFO, "Origin PcdCpuFeaturesSetting:\n"));
DumpCpuFeatureMask (PcdGetPtr (PcdCpuFeaturesSetting));
DEBUG ((DEBUG_INFO, "Final PcdCpuFeaturesSetting:\n"));
DumpCpuFeatureMask (CpuFeaturesData->SettingPcd);
);
//
// Save PCDs and display CPU PCDs
//
SetCapabilityPcd (CpuFeaturesData->CapabilityPcd, CpuFeaturesData->BitMaskSize);
SetSettingPcd (CpuFeaturesData->SettingPcd);
for (ProcessorNumber = 0; ProcessorNumber < NumberOfCpus; ProcessorNumber++) {
CpuInitOrder = &CpuFeaturesData->InitOrder[ProcessorNumber];
Entry = GetFirstNode (&CpuFeaturesData->FeatureList);