diff options
author | Eric Dong <eric.dong@intel.com> | 2019-02-12 15:22:48 +0800 |
---|---|---|
committer | Eric Dong <eric.dong@intel.com> | 2019-04-04 14:11:01 +0800 |
commit | 6214ffb41079525875af3adc7f437a0fe8dbd09d (patch) | |
tree | 24296ede63c73553828cf35f9d5daa1b6b1b7140 /UefiCpuPkg/Library | |
parent | 79be3d27517c525e26351b0057f22de811592917 (diff) | |
download | edk2-6214ffb41079525875af3adc7f437a0fe8dbd09d.tar.gz edk2-6214ffb41079525875af3adc7f437a0fe8dbd09d.tar.bz2 edk2-6214ffb41079525875af3adc7f437a0fe8dbd09d.zip |
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>
Diffstat (limited to 'UefiCpuPkg/Library')
4 files changed, 24 insertions, 66 deletions
diff --git a/UefiCpuPkg/Library/RegisterCpuFeaturesLib/CpuFeaturesInitialize.c b/UefiCpuPkg/Library/RegisterCpuFeaturesLib/CpuFeaturesInitialize.c index bae92b89a6..9ce6830276 100644 --- a/UefiCpuPkg/Library/RegisterCpuFeaturesLib/CpuFeaturesInitialize.c +++ b/UefiCpuPkg/Library/RegisterCpuFeaturesLib/CpuFeaturesInitialize.c @@ -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);
}
@@ -54,48 +59,6 @@ SetSettingPcd ( }
/**
- 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.
@param[in, out] CpuInfo The pointer to CPU 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);
diff --git a/UefiCpuPkg/Library/RegisterCpuFeaturesLib/DxeRegisterCpuFeaturesLib.inf b/UefiCpuPkg/Library/RegisterCpuFeaturesLib/DxeRegisterCpuFeaturesLib.inf index 362e0c6cd1..a3c7466091 100644 --- a/UefiCpuPkg/Library/RegisterCpuFeaturesLib/DxeRegisterCpuFeaturesLib.inf +++ b/UefiCpuPkg/Library/RegisterCpuFeaturesLib/DxeRegisterCpuFeaturesLib.inf @@ -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
diff --git a/UefiCpuPkg/Library/RegisterCpuFeaturesLib/PeiRegisterCpuFeaturesLib.inf b/UefiCpuPkg/Library/RegisterCpuFeaturesLib/PeiRegisterCpuFeaturesLib.inf index fdfef98293..c4d7ff12fa 100644 --- a/UefiCpuPkg/Library/RegisterCpuFeaturesLib/PeiRegisterCpuFeaturesLib.inf +++ b/UefiCpuPkg/Library/RegisterCpuFeaturesLib/PeiRegisterCpuFeaturesLib.inf @@ -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
diff --git a/UefiCpuPkg/Library/RegisterCpuFeaturesLib/RegisterCpuFeatures.h b/UefiCpuPkg/Library/RegisterCpuFeaturesLib/RegisterCpuFeatures.h index 21dd5773a6..83d6d7f81e 100644 --- a/UefiCpuPkg/Library/RegisterCpuFeaturesLib/RegisterCpuFeatures.h +++ b/UefiCpuPkg/Library/RegisterCpuFeaturesLib/RegisterCpuFeatures.h @@ -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;
|