diff options
-rw-r--r-- | UefiCpuPkg/CpuFeatures/CpuFeaturesDxe.c | 20 | ||||
-rw-r--r-- | UefiCpuPkg/CpuFeatures/CpuFeaturesDxe.inf | 1 | ||||
-rw-r--r-- | UefiCpuPkg/CpuFeatures/CpuFeaturesPei.c | 6 | ||||
-rw-r--r-- | UefiCpuPkg/CpuFeatures/CpuFeaturesPei.inf | 1 |
4 files changed, 28 insertions, 0 deletions
diff --git a/UefiCpuPkg/CpuFeatures/CpuFeaturesDxe.c b/UefiCpuPkg/CpuFeatures/CpuFeaturesDxe.c index b0b186d36d..16c8f37fd0 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,25 @@ 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 Status;
+ }
if (PcdGetBool (PcdCpuFeaturesInitAfterSmmRelocation)) {
//
diff --git a/UefiCpuPkg/CpuFeatures/CpuFeaturesDxe.inf b/UefiCpuPkg/CpuFeatures/CpuFeaturesDxe.inf index 175e8a9797..b1733bee20 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 b052d554a9..72ee19b450 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 dd4b388c9a..e617c5bd5f 100644 --- a/UefiCpuPkg/CpuFeatures/CpuFeaturesPei.inf +++ b/UefiCpuPkg/CpuFeatures/CpuFeaturesPei.inf @@ -32,6 +32,7 @@ PeimEntryPoint
PeiServicesLib
RegisterCpuFeaturesLib
+ HobLib
[Sources]
CpuFeaturesPei.c
|