summaryrefslogtreecommitdiffstats
path: root/UefiCpuPkg
diff options
context:
space:
mode:
Diffstat (limited to 'UefiCpuPkg')
-rw-r--r--UefiCpuPkg/CpuFeatures/CpuFeaturesDxe.c20
-rw-r--r--UefiCpuPkg/CpuFeatures/CpuFeaturesDxe.inf1
-rw-r--r--UefiCpuPkg/CpuFeatures/CpuFeaturesPei.c6
-rw-r--r--UefiCpuPkg/CpuFeatures/CpuFeaturesPei.inf1
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