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:
@@ -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);
|
||||
|
@@ -1,7 +1,7 @@
|
||||
## @file
|
||||
# Register CPU Features Library DXE instance.
|
||||
#
|
||||
# Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>
|
||||
# Copyright (c) 2017 - 2019, Intel Corporation. All rights reserved.<BR>
|
||||
# This program and the accompanying materials
|
||||
# are licensed and made available under the terms and conditions of the BSD License
|
||||
# which accompanies this distribution. The full text of the license may be found at
|
||||
@@ -56,9 +56,8 @@
|
||||
[Pcd]
|
||||
gUefiCpuPkgTokenSpaceGuid.PcdCpuS3DataAddress ## CONSUMES
|
||||
gUefiCpuPkgTokenSpaceGuid.PcdCpuFeaturesSupport ## CONSUMES
|
||||
gUefiCpuPkgTokenSpaceGuid.PcdCpuFeaturesUserConfiguration ## CONSUMES
|
||||
gUefiCpuPkgTokenSpaceGuid.PcdCpuFeaturesCapability ## PRODUCES
|
||||
gUefiCpuPkgTokenSpaceGuid.PcdCpuFeaturesSetting ## PRODUCES
|
||||
gUefiCpuPkgTokenSpaceGuid.PcdCpuFeaturesSetting ## PRODUCES ## CONSUMES
|
||||
|
||||
[Depex]
|
||||
gEfiMpServiceProtocolGuid AND gEdkiiCpuFeaturesSetDoneGuid
|
||||
|
@@ -1,7 +1,7 @@
|
||||
## @file
|
||||
# Register CPU Features Library PEI instance.
|
||||
#
|
||||
# Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>
|
||||
# Copyright (c) 2017 - 2019, Intel Corporation. All rights reserved.<BR>
|
||||
# This program and the accompanying materials
|
||||
# are licensed and made available under the terms and conditions of the BSD License
|
||||
# which accompanies this distribution. The full text of the license may be found at
|
||||
@@ -56,9 +56,8 @@
|
||||
[Pcd]
|
||||
gUefiCpuPkgTokenSpaceGuid.PcdCpuS3DataAddress ## CONSUMES
|
||||
gUefiCpuPkgTokenSpaceGuid.PcdCpuFeaturesSupport ## CONSUMES
|
||||
gUefiCpuPkgTokenSpaceGuid.PcdCpuFeaturesUserConfiguration ## CONSUMES
|
||||
gUefiCpuPkgTokenSpaceGuid.PcdCpuFeaturesCapability ## PRODUCES
|
||||
gUefiCpuPkgTokenSpaceGuid.PcdCpuFeaturesSetting ## PRODUCES
|
||||
gUefiCpuPkgTokenSpaceGuid.PcdCpuFeaturesSetting ## CONSUMES ## PRODUCES
|
||||
|
||||
[Depex]
|
||||
gEfiPeiMpServicesPpiGuid AND gEdkiiCpuFeaturesSetDoneGuid
|
||||
|
@@ -1,7 +1,7 @@
|
||||
/** @file
|
||||
CPU Register Table Library definitions.
|
||||
|
||||
Copyright (c) 2017, Intel Corporation. All rights reserved.<BR>
|
||||
Copyright (c) 2017 - 2019, Intel Corporation. All rights reserved.<BR>
|
||||
This program and the accompanying materials
|
||||
are licensed and made available under the terms and conditions of the BSD License
|
||||
which accompanies this distribution. The full text of the license may be found at
|
||||
@@ -83,7 +83,6 @@ typedef struct {
|
||||
CPU_FEATURES_INIT_ORDER *InitOrder;
|
||||
UINT8 *SupportPcd;
|
||||
UINT8 *CapabilityPcd;
|
||||
UINT8 *ConfigurationPcd;
|
||||
UINT8 *SettingPcd;
|
||||
|
||||
UINT32 NumberOfCpus;
|
||||
|
Reference in New Issue
Block a user