FaultTolerantWritePei consumes:
- PcdFlashNvStorageFtwWorkingBase,
- PcdFlashNvStorageFtwSpareBase.
VariablePei consumes:
- PcdFlashNvStorageVariableBase64.
Due to the previous patches in this series, the above PCDs are available
in the PEI phase, in the SMM_REQUIRE build.
FaultTolerantWritePei produces a GUID-ed HOB with
FAULT_TOLERANT_WRITE_LAST_WRITE_DATA as contents. It also installs a Null
PPI that carries the same gEdkiiFaultTolerantWriteGuid as the HOB.
VariablePei depends on the Null PPI mentioned above with a DEPEX, consumes
the HOB (which is safe due to the DEPEX), and produces
EFI_PEI_READ_ONLY_VARIABLE2_PPI.
This enables read-only access to non-volatile UEFI variables in the PEI
phase, in the SMM_REQUIRE build.
For now, the DxeLoadCore() function in
"MdeModulePkg/Core/DxeIplPeim/DxeLoad.c" will not access the
"MemoryTypeInformation" variable, because OVMF's PlatformPei always
produces the MemoryTypeInformation HOB.
(Note: when the boot mode is BOOT_ON_S3_RESUME, PlatformPei doesn't build
the HOB, but that's in sync with DxeLoadCore() also not looking for either
the HOB or the UEFI variable.)
Cc: Ard Biesheuvel <ard.biesheuvel@linaro.org>
Cc: Jordan Justen <jordan.l.justen@intel.com>
Cc: Philippe Mathieu-Daudé <philmd@redhat.com>
Ref: https://bugzilla.tianocore.org/show_bug.cgi?id=386
Signed-off-by: Laszlo Ersek <lersek@redhat.com>
Message-Id: <
20200310222739.26717-5-lersek@redhat.com>
Acked-by: Leif Lindholm <leif@nuviainc.com>
!endif\r
}\r
!if $(SMM_REQUIRE) == TRUE\r
+ MdeModulePkg/Universal/FaultTolerantWritePei/FaultTolerantWritePei.inf\r
+ MdeModulePkg/Universal/Variable/Pei/VariablePei.inf\r
OvmfPkg/SmmAccess/SmmAccessPei.inf\r
!endif\r
UefiCpuPkg/CpuMpPei/CpuMpPei.inf\r
INF MdeModulePkg/Core/DxeIplPeim/DxeIpl.inf\r
INF UefiCpuPkg/Universal/Acpi/S3Resume2Pei/S3Resume2Pei.inf\r
!if $(SMM_REQUIRE) == TRUE\r
+INF MdeModulePkg/Universal/FaultTolerantWritePei/FaultTolerantWritePei.inf\r
+INF MdeModulePkg/Universal/Variable/Pei/VariablePei.inf\r
INF OvmfPkg/SmmAccess/SmmAccessPei.inf\r
!endif\r
INF UefiCpuPkg/CpuMpPei/CpuMpPei.inf\r
!endif\r
}\r
!if $(SMM_REQUIRE) == TRUE\r
+ MdeModulePkg/Universal/FaultTolerantWritePei/FaultTolerantWritePei.inf\r
+ MdeModulePkg/Universal/Variable/Pei/VariablePei.inf\r
OvmfPkg/SmmAccess/SmmAccessPei.inf\r
!endif\r
UefiCpuPkg/CpuMpPei/CpuMpPei.inf\r
INF MdeModulePkg/Core/DxeIplPeim/DxeIpl.inf\r
INF UefiCpuPkg/Universal/Acpi/S3Resume2Pei/S3Resume2Pei.inf\r
!if $(SMM_REQUIRE) == TRUE\r
+INF MdeModulePkg/Universal/FaultTolerantWritePei/FaultTolerantWritePei.inf\r
+INF MdeModulePkg/Universal/Variable/Pei/VariablePei.inf\r
INF OvmfPkg/SmmAccess/SmmAccessPei.inf\r
!endif\r
INF UefiCpuPkg/CpuMpPei/CpuMpPei.inf\r
!endif\r
}\r
!if $(SMM_REQUIRE) == TRUE\r
+ MdeModulePkg/Universal/FaultTolerantWritePei/FaultTolerantWritePei.inf\r
+ MdeModulePkg/Universal/Variable/Pei/VariablePei.inf\r
OvmfPkg/SmmAccess/SmmAccessPei.inf\r
!endif\r
UefiCpuPkg/CpuMpPei/CpuMpPei.inf\r
INF MdeModulePkg/Core/DxeIplPeim/DxeIpl.inf\r
INF UefiCpuPkg/Universal/Acpi/S3Resume2Pei/S3Resume2Pei.inf\r
!if $(SMM_REQUIRE) == TRUE\r
+INF MdeModulePkg/Universal/FaultTolerantWritePei/FaultTolerantWritePei.inf\r
+INF MdeModulePkg/Universal/Variable/Pei/VariablePei.inf\r
INF OvmfPkg/SmmAccess/SmmAccessPei.inf\r
!endif\r
INF UefiCpuPkg/CpuMpPei/CpuMpPei.inf\r