... only check them. When OVMF is built with
-D SMM_REQUIRE
or with
-D MEM_VARSTORE_EMU_ENABLE=FALSE
then the PCDs are set during the PEI phase, as part of
FaultTolerantWritePei's startup (in FlashNvStorageAddressLib's
constructor).
Cc: Jordan Justen <jordan.l.justen@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Laszlo Ersek <lersek@redhat.com>
---
OvmfPkg/QemuFlashFvbServicesRuntimeDxe/FwBlockService.c | 58 ++++++++++++++------
1 file changed, 40 insertions(+), 18 deletions(-)
diff --git a/OvmfPkg/QemuFlashFvbServicesRuntimeDxe/FwBlockService.c b/OvmfPkg/QemuFlashFvbServicesRuntimeDxe/FwBlockService.c
index ff27c1100c01..62419a8fdf08 100644
--- a/OvmfPkg/QemuFlashFvbServicesRuntimeDxe/FwBlockService.c
+++ b/OvmfPkg/QemuFlashFvbServicesRuntimeDxe/FwBlockService.c
@@ -1093,24 +1093,46 @@ FvbInitialize (
MarkMemoryRangeForRuntimeAccess (BaseAddress, Length);
- //
- // Set several PCD values to point to flash
- //
- PcdStatus = PcdSet64S (
- PcdFlashNvStorageVariableBase64,
- (UINTN) PcdGet32 (PcdOvmfFlashNvStorageVariableBase)
- );
- ASSERT_RETURN_ERROR (PcdStatus);
- PcdStatus = PcdSet32S (
- PcdFlashNvStorageFtwWorkingBase,
- PcdGet32 (PcdOvmfFlashNvStorageFtwWorkingBase)
- );
- ASSERT_RETURN_ERROR (PcdStatus);
- PcdStatus = PcdSet32S (
- PcdFlashNvStorageFtwSpareBase,
- PcdGet32 (PcdOvmfFlashNvStorageFtwSpareBase)
- );
- ASSERT_RETURN_ERROR (PcdStatus);
+ if (!FeaturePcdGet (PcdSmmSmramRequire) &&
+ FeaturePcdGet (PcdMemVarstoreEmuEnable)) {
+ //
+ // This build is suitable for both flash and in-memory emulated variables,
+ // and we happen to have found flash. Set several PCD values to point to
+ // flash.
+ //
+ PcdStatus = PcdSet64S (
+ PcdFlashNvStorageVariableBase64,
+ PcdGet32 (PcdOvmfFlashNvStorageVariableBase)
+ );
+ ASSERT_RETURN_ERROR (PcdStatus);
+ PcdStatus = PcdSet32S (
+ PcdFlashNvStorageFtwWorkingBase,
+ PcdGet32 (PcdOvmfFlashNvStorageFtwWorkingBase)
+ );
+ ASSERT_RETURN_ERROR (PcdStatus);
+ PcdStatus = PcdSet32S (
+ PcdFlashNvStorageFtwSpareBase,
+ PcdGet32 (PcdOvmfFlashNvStorageFtwSpareBase)
+ );
+ ASSERT_RETURN_ERROR (PcdStatus);
+ } else {
+ //
+ // This build is suitable for flash variables only. Double-check several
+ // PCDs that point to the flash.
+ //
+ ASSERT (
+ (PcdGet64 (PcdFlashNvStorageVariableBase64) ==
+ PcdGet32 (PcdOvmfFlashNvStorageVariableBase))
+ );
+ ASSERT (
+ (PcdGet32 (PcdFlashNvStorageFtwWorkingBase) ==
+ PcdGet32 (PcdOvmfFlashNvStorageFtwWorkingBase))
+ );
+ ASSERT (
+ (PcdGet32 (PcdFlashNvStorageFtwSpareBase) ==
+ PcdGet32 (PcdOvmfFlashNvStorageFtwSpareBase))
+ );
+ }
FwhInstance = (EFI_FW_VOL_INSTANCE *)
(
--
2.9.3
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel