summaryrefslogtreecommitdiffstats
path: root/ArmPlatformPkg
diff options
context:
space:
mode:
authorArd Biesheuvel <ard.biesheuvel@linaro.org>2017-11-01 12:57:26 +0000
committerArd Biesheuvel <ard.biesheuvel@linaro.org>2017-11-05 16:19:00 +0000
commit3909c4a1934460d4c18f2a0c827d3d6d37781b7a (patch)
tree1d12c612b1089597645c17b6adf6c8cd9592d2fd /ArmPlatformPkg
parentb1832e16ddced2c3d191307c9bc56806d713f27e (diff)
downloadedk2-3909c4a1934460d4c18f2a0c827d3d6d37781b7a.tar.gz
edk2-3909c4a1934460d4c18f2a0c827d3d6d37781b7a.tar.bz2
edk2-3909c4a1934460d4c18f2a0c827d3d6d37781b7a.zip
ArmPlatformPkg/PlatformPeim: allow PlatformPeiLib to set the boot mode
The current interdepencies between the PrePeiCore SEC module, the platform PEIM and ArmPlatformLib is a bit awkward: due to the fact that ArmPlatformLib is also used by SEC modules, we cannot use PEI specific facilities in the implementation of ArmPlatformGetBootMode. However, given that we call that library function /after/ invoking PlatformPeiLib, there is no way for that library to set the boot mode other than resorting to tricks like notification callbacks on arbitrary unrelated events. ArmPlatformLib should probably be phased out anyway, given its quirky nature, but for now, let's fix this particular issue by deferring the call to PlatformPeim() to after the point where we set the boot mode by calling ArmPlatformGetBootMode (). While we're at it, clean up the code slightly by using PeiServicesLib instead of doing double pointer dereferencing. Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org> Reviewed-by: Leif Lindholm <leif.lindholm@linaro.org>
Diffstat (limited to 'ArmPlatformPkg')
-rw-r--r--ArmPlatformPkg/PlatformPei/PlatformPeim.c12
-rw-r--r--ArmPlatformPkg/PlatformPei/PlatformPeim.inf1
2 files changed, 8 insertions, 5 deletions
diff --git a/ArmPlatformPkg/PlatformPei/PlatformPeim.c b/ArmPlatformPkg/PlatformPei/PlatformPeim.c
index e4535250c2..14f301e947 100644
--- a/ArmPlatformPkg/PlatformPei/PlatformPeim.c
+++ b/ArmPlatformPkg/PlatformPei/PlatformPeim.c
@@ -83,21 +83,23 @@ InitializePlatformPeim (
)
{
EFI_STATUS Status;
- UINTN BootMode;
+ EFI_BOOT_MODE BootMode;
DEBUG ((EFI_D_LOAD | EFI_D_INFO, "Platform PEIM Loaded\n"));
+ Status = PeiServicesSetBootMode (ArmPlatformGetBootMode ());
+ ASSERT_EFI_ERROR (Status);
+
PlatformPeim ();
- BootMode = ArmPlatformGetBootMode ();
- Status = (**PeiServices).SetBootMode (PeiServices, (UINT8) BootMode);
+ Status = PeiServicesGetBootMode (&BootMode);
ASSERT_EFI_ERROR (Status);
- Status = (**PeiServices).InstallPpi (PeiServices, &mPpiListBootMode);
+ Status = PeiServicesInstallPpi (&mPpiListBootMode);
ASSERT_EFI_ERROR (Status);
if (BootMode == BOOT_IN_RECOVERY_MODE) {
- Status = (**PeiServices).InstallPpi (PeiServices, &mPpiListRecoveryBootMode);
+ Status = PeiServicesInstallPpi (&mPpiListRecoveryBootMode);
ASSERT_EFI_ERROR (Status);
}
diff --git a/ArmPlatformPkg/PlatformPei/PlatformPeim.inf b/ArmPlatformPkg/PlatformPei/PlatformPeim.inf
index f466c1412a..21701cdc07 100644
--- a/ArmPlatformPkg/PlatformPei/PlatformPeim.inf
+++ b/ArmPlatformPkg/PlatformPei/PlatformPeim.inf
@@ -43,6 +43,7 @@
HobLib
ArmPlatformLib
PlatformPeiLib
+ PeiServicesLib
[Ppis]
gEfiPeiMasterBootModePpiGuid # PPI ALWAYS_PRODUCED