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