diff options
author | Eric Dong <eric.dong@intel.com> | 2017-10-26 10:28:23 +0800 |
---|---|---|
committer | Eric Dong <eric.dong@intel.com> | 2017-10-27 09:34:37 +0800 |
commit | bf5a306ab5e0b1829b1d59180bc010648f09a32e (patch) | |
tree | fcec62404f8e95c44e0ba9e65ae207996f6389d5 /UefiCpuPkg | |
parent | c0cbaaf69348e8c389dc31f696857e25424b408b (diff) | |
download | edk2-bf5a306ab5e0b1829b1d59180bc010648f09a32e.zip edk2-bf5a306ab5e0b1829b1d59180bc010648f09a32e.tar.gz edk2-bf5a306ab5e0b1829b1d59180bc010648f09a32e.tar.bz2 |
UefiCpuPkg/CpuFeatures: Export HOB if CPU initialized in PEI
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>
Diffstat (limited to 'UefiCpuPkg')
-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 b0b186d..16c8f37 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 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
|