Reviewed-by: Ruiyu Ni <ruiyu...@intel.com>

-----Original Message-----
From: Dong, Eric 
Sent: Wednesday, October 25, 2017 3:59 PM
To: edk2-devel@lists.01.org
Cc: Ni, Ruiyu <ruiyu...@intel.com>; Laszlo Ersek <ler...@redhat.com>
Subject: [Patch] UefiCpuPkg/CpuFeatures: Export HOB if CPU initialized in PEI.

In current implementation, CPU initialized can be done in PEI or DXE phase. PEI 
uses CpuFeaturesPie 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...@intel.com>
Cc: Laszlo Ersek <ler...@redhat.com>
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Eric Dong <eric.d...@intel.com>
---
 UefiCpuPkg/CpuFeatures/CpuFeaturesDxe.c   | 19 +++++++++++++++++++
 UefiCpuPkg/CpuFeatures/CpuFeaturesDxe.inf |  1 +
 UefiCpuPkg/CpuFeatures/CpuFeaturesPei.c   |  6 ++++++
 UefiCpuPkg/CpuFeatures/CpuFeaturesPei.inf |  1 +
 4 files changed, 27 insertions(+)

diff --git a/UefiCpuPkg/CpuFeatures/CpuFeaturesDxe.c 
b/UefiCpuPkg/CpuFeatures/CpuFeaturesDxe.c
index b0b186d..6c0ae9d 100644
--- a/UefiCpuPkg/CpuFeatures/CpuFeaturesDxe.c
+++ b/UefiCpuPkg/CpuFeatures/CpuFeaturesDxe.c
@@ -19,6 +19,7 @@
 #include <Library/UefiLib.h>
 #include <Library/UefiBootServicesTableLib.h>
 #include <Library/RegisterCpuFeaturesLib.h>
+#include <Library/HobLib.h>
 
 #include <Protocol/SmmConfiguration.h>
 #include <Guid/CpuFeaturesInitDone.h>
@@ -101,6 +102,24 @@ CpuFeaturesDxeInitialize (
   )
 {
   VOID        *Registration;
+  EFI_STATUS  Status;
+  EFI_HANDLE  Handle;
+
+  if (GetFirstGuidHob (&gEdkiiCpuFeaturesInitDoneGuid) != NULL) {
+    //
+    // Try to find HOB first. This HOB exist means CPU features have 
+    // been initialized by CpuFeaturesPei driver, just install 
gEdkiiCpuFeaturesInitDoneGuid.
+    //
+    Handle = NULL;
+    Status = gBS->InstallProtocolInterface (
+                    &Handle,
+                    &gEdkiiCpuFeaturesInitDoneGuid,
+                    EFI_NATIVE_INTERFACE,
+                    NULL
+                    );
+    ASSERT_EFI_ERROR (Status);
+    return EFI_SUCCESS;
+  }
 
   if (PcdGetBool (PcdCpuFeaturesInitAfterSmmRelocation)) {
     //
diff --git a/UefiCpuPkg/CpuFeatures/CpuFeaturesDxe.inf 
b/UefiCpuPkg/CpuFeatures/CpuFeaturesDxe.inf
index 175e8a9..b1733be 100644
--- a/UefiCpuPkg/CpuFeatures/CpuFeaturesDxe.inf
+++ b/UefiCpuPkg/CpuFeatures/CpuFeaturesDxe.inf
@@ -33,6 +33,7 @@
   UefiDriverEntryPoint
   UefiBootServicesTableLib
   RegisterCpuFeaturesLib
+  HobLib
 
 [Sources]
   CpuFeaturesDxe.c
diff --git a/UefiCpuPkg/CpuFeatures/CpuFeaturesPei.c 
b/UefiCpuPkg/CpuFeatures/CpuFeaturesPei.c
index b052d55..72ee19b 100644
--- a/UefiCpuPkg/CpuFeatures/CpuFeaturesPei.c
+++ b/UefiCpuPkg/CpuFeatures/CpuFeaturesPei.c
@@ -18,6 +18,7 @@
 #include <Library/DebugLib.h>
 #include <Library/PeiServicesLib.h>
 #include <Library/RegisterCpuFeaturesLib.h>
+#include <Library/HobLib.h>
 
 #include <Guid/CpuFeaturesInitDone.h>
 
@@ -70,6 +71,11 @@ CpuFeaturesPeimInitialize (
   Status = PeiServicesInstallPpi(&mPeiCpuFeaturesInitDonePpiDesc);
   ASSERT_EFI_ERROR (Status);
 
+  //
+  // Build HOB to let CpuFeatureDxe driver skip the initialization process.
+  //
+  BuildGuidHob (&gEdkiiCpuFeaturesInitDoneGuid, 0);
+
   return EFI_SUCCESS;
 }
 
diff --git a/UefiCpuPkg/CpuFeatures/CpuFeaturesPei.inf 
b/UefiCpuPkg/CpuFeatures/CpuFeaturesPei.inf
index dd4b388..e617c5b 100644
--- a/UefiCpuPkg/CpuFeatures/CpuFeaturesPei.inf
+++ b/UefiCpuPkg/CpuFeatures/CpuFeaturesPei.inf
@@ -32,6 +32,7 @@
   PeimEntryPoint
   PeiServicesLib
   RegisterCpuFeaturesLib
+  HobLib
 
 [Sources]
   CpuFeaturesPei.c
--
2.7.0.windows.1

_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to