]> git.proxmox.com Git - mirror_edk2.git/commitdiff
UefiCpuPkg/CpuFeatures: Export HOB if CPU initialized in PEI
authorEric Dong <eric.dong@intel.com>
Thu, 26 Oct 2017 02:28:23 +0000 (10:28 +0800)
committerEric Dong <eric.dong@intel.com>
Fri, 27 Oct 2017 01:34:37 +0000 (09:34 +0800)
In current implementation, CPU initialized can be done in PEI
or DXE phase. PEI uses CpuFeaturesPei and Dxe uses CpuFeaturesDxe.
If CPU initialized in PEI phase, CpuFeaturesDxe driver will
not be used. This driver will install gEdkiiCpuFeaturesInitDoneGuid
protocol after it initializes the CPU.

Some drivers depend on this protocol to dispatch themselves. If
CpuFeaturesDxe not been used, these drivers will not be dispatched.

This patch fix the above issue. If Cpu initialized in PEI
phase, it also report a guid HOB for CpuFeaturesDxe.
CpuFeaturesDxe will check this HOB first. If it found this
HOB, it just install gEdkiiCpuFeaturesInitDoneGuid protocol,
else it will also do the CPU initialization.

Cc: Ruiyu Ni <ruiyu.ni@intel.com>
Cc: Laszlo Ersek <lersek@redhat.com>
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Eric Dong <eric.dong@intel.com>
Reviewed-by: Ruiyu Ni <ruiyu.ni@intel.com>
Reviewed-by: Laszlo Ersek <lersek@redhat.com>
UefiCpuPkg/CpuFeatures/CpuFeaturesDxe.c
UefiCpuPkg/CpuFeatures/CpuFeaturesDxe.inf
UefiCpuPkg/CpuFeatures/CpuFeaturesPei.c
UefiCpuPkg/CpuFeatures/CpuFeaturesPei.inf

index b0b186d36d6d4e2affe24db47bc14130b6648490..16c8f37fd04a2c3238f6c88429a2a0d9413573b0 100644 (file)
@@ -19,6 +19,7 @@
 #include <Library/UefiLib.h>\r
 #include <Library/UefiBootServicesTableLib.h>\r
 #include <Library/RegisterCpuFeaturesLib.h>\r
+#include <Library/HobLib.h>\r
 \r
 #include <Protocol/SmmConfiguration.h>\r
 #include <Guid/CpuFeaturesInitDone.h>\r
@@ -101,6 +102,25 @@ CpuFeaturesDxeInitialize (
   )\r
 {\r
   VOID        *Registration;\r
+  EFI_STATUS  Status;\r
+  EFI_HANDLE  Handle;\r
+\r
+  if (GetFirstGuidHob (&gEdkiiCpuFeaturesInitDoneGuid) != NULL) {\r
+    //\r
+    // Try to find HOB first. This HOB exist means CPU features have \r
+    // been initialized by CpuFeaturesPei driver, just install \r
+    // gEdkiiCpuFeaturesInitDoneGuid.\r
+    //\r
+    Handle = NULL;\r
+    Status = gBS->InstallProtocolInterface (\r
+                    &Handle,\r
+                    &gEdkiiCpuFeaturesInitDoneGuid,\r
+                    EFI_NATIVE_INTERFACE,\r
+                    NULL\r
+                    );\r
+    ASSERT_EFI_ERROR (Status);\r
+    return Status;\r
+  }\r
 \r
   if (PcdGetBool (PcdCpuFeaturesInitAfterSmmRelocation)) {\r
     //\r
index 175e8a9797af5c976668b233044b2102daf436b4..b1733bee20c02da2a62e7430f3ef57886a172569 100644 (file)
@@ -33,6 +33,7 @@
   UefiDriverEntryPoint\r
   UefiBootServicesTableLib\r
   RegisterCpuFeaturesLib\r
+  HobLib\r
 \r
 [Sources]\r
   CpuFeaturesDxe.c\r
index b052d554a91985bce7d0946200fb9d359d340447..72ee19b4507eb40745493970d0d625110e9e1e13 100644 (file)
@@ -18,6 +18,7 @@
 #include <Library/DebugLib.h>\r
 #include <Library/PeiServicesLib.h>\r
 #include <Library/RegisterCpuFeaturesLib.h>\r
+#include <Library/HobLib.h>\r
 \r
 #include <Guid/CpuFeaturesInitDone.h>\r
 \r
@@ -70,6 +71,11 @@ CpuFeaturesPeimInitialize (
   Status = PeiServicesInstallPpi(&mPeiCpuFeaturesInitDonePpiDesc);\r
   ASSERT_EFI_ERROR (Status);\r
 \r
+  //\r
+  // Build HOB to let CpuFeatureDxe driver skip the initialization process.\r
+  //\r
+  BuildGuidHob (&gEdkiiCpuFeaturesInitDoneGuid, 0);\r
+\r
   return EFI_SUCCESS;\r
 }\r
 \r
index dd4b388c9adc5bd25be69dab8703c7897a57098d..e617c5bd5f6b2cb644370e0b98a5f0801ddfddba 100644 (file)
@@ -32,6 +32,7 @@
   PeimEntryPoint\r
   PeiServicesLib\r
   RegisterCpuFeaturesLib\r
+  HobLib\r
 \r
 [Sources]\r
   CpuFeaturesPei.c\r