The following flash-related base addresses:
- PcdFlashNvStorageVariableBase64,
- PcdFlashNvStorageFtwWorkingBase,
- PcdFlashNvStorageFtwSpareBase,
are always set to constant (invariable) values in the "-D SMM_REQUIRE"
build of OVMF. (That's because in the SMM build, actual pflash is a hard
requirement, and the RAM-based emulation is never available.)
Set said PCDs statically, at build. This will allow us to depend on their
values in the PEI phase.
When SMM_REQUIRE is FALSE, this change has no effect (confirmed by report
file comparison).
When SMM_REQUIRE is TRUE, the report file shows the following changes:
- "PcdOvmfFlashNvStorageFtwSpareBase" and
"PcdOvmfFlashNvStorageFtwWorkingBase" are no longer consumed by any
module directly,
- for "PcdFlashNvStorageFtwSpareBase", "PcdFlashNvStorageFtwWorkingBase"
and "PcdFlashNvStorageVariableBase64", the access method changes from
DYN to FIXED,
- for the latter PCDs, the zero (dynamic default) values are replaced with
the desired constants.
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-4-lersek@redhat.com>
Acked-by: Leif Lindholm <leif@nuviainc.com>
SET gUefiOvmfPkgTokenSpaceGuid.PcdOvmfFlashNvStorageFtwSpareBase = gUefiOvmfPkgTokenSpaceGuid.PcdOvmfFlashNvStorageFtwWorkingBase + gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingSize\r
SET gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareSize = $(VARS_SPARE_SIZE)\r
\r
+!if $(SMM_REQUIRE) == TRUE\r
+SET gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableBase64 = gUefiOvmfPkgTokenSpaceGuid.PcdOvmfFlashNvStorageVariableBase\r
+SET gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingBase = gUefiOvmfPkgTokenSpaceGuid.PcdOvmfFlashNvStorageFtwWorkingBase\r
+SET gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareBase = gUefiOvmfPkgTokenSpaceGuid.PcdOvmfFlashNvStorageFtwSpareBase\r
+!endif\r
+\r
DEFINE MEMFD_BASE_ADDRESS = 0x800000\r
# ($(SMM_REQUIRE) == FALSE)\r
gEfiMdeModulePkgTokenSpaceGuid.PcdEmuVariableNvStoreReserved|0\r
\r
+!if $(SMM_REQUIRE) == FALSE\r
gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableBase64|0\r
gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingBase|0\r
gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareBase|0\r
+!endif\r
gEfiMdeModulePkgTokenSpaceGuid.PcdPciDisableBusEnumeration|FALSE\r
gEfiMdeModulePkgTokenSpaceGuid.PcdVideoHorizontalResolution|800\r
gEfiMdeModulePkgTokenSpaceGuid.PcdVideoVerticalResolution|600\r
# ($(SMM_REQUIRE) == FALSE)\r
gEfiMdeModulePkgTokenSpaceGuid.PcdEmuVariableNvStoreReserved|0\r
\r
+!if $(SMM_REQUIRE) == FALSE\r
gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableBase64|0\r
gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingBase|0\r
gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareBase|0\r
+!endif\r
gEfiMdeModulePkgTokenSpaceGuid.PcdPciDisableBusEnumeration|FALSE\r
gEfiMdeModulePkgTokenSpaceGuid.PcdVideoHorizontalResolution|800\r
gEfiMdeModulePkgTokenSpaceGuid.PcdVideoVerticalResolution|600\r
# ($(SMM_REQUIRE) == FALSE)\r
gEfiMdeModulePkgTokenSpaceGuid.PcdEmuVariableNvStoreReserved|0\r
\r
+!if $(SMM_REQUIRE) == FALSE\r
gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableBase64|0\r
gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingBase|0\r
gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareBase|0\r
+!endif\r
gEfiMdeModulePkgTokenSpaceGuid.PcdPciDisableBusEnumeration|FALSE\r
gEfiMdeModulePkgTokenSpaceGuid.PcdVideoHorizontalResolution|800\r
gEfiMdeModulePkgTokenSpaceGuid.PcdVideoVerticalResolution|600\r
gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingSize\r
gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareSize\r
gUefiOvmfPkgTokenSpaceGuid.PcdOvmfFlashNvStorageVariableBase\r
- gUefiOvmfPkgTokenSpaceGuid.PcdOvmfFlashNvStorageFtwWorkingBase\r
- gUefiOvmfPkgTokenSpaceGuid.PcdOvmfFlashNvStorageFtwSpareBase\r
gUefiOvmfPkgTokenSpaceGuid.PcdOvmfFlashNvStorageEventLogSize\r
gUefiOvmfPkgTokenSpaceGuid.PcdOvmfFdBaseAddress\r
gUefiOvmfPkgTokenSpaceGuid.PcdOvmfFirmwareFdSize\r
gUefiOvmfPkgTokenSpaceGuid.PcdOvmfFirmwareBlockSize\r
\r
[Pcd]\r
- gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwWorkingBase\r
- gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageFtwSpareBase\r
- gEfiMdeModulePkgTokenSpaceGuid.PcdFlashNvStorageVariableBase64\r
gUefiOvmfPkgTokenSpaceGuid.PcdOvmfFlashVariablesEnable\r
\r
[FeaturePcd]\r
VOID\r
)\r
{\r
- RETURN_STATUS PcdStatus;\r
-\r
//\r
- // Set several PCD values to point to flash\r
+ // Do nothing.\r
//\r
- PcdStatus = PcdSet64S (\r
- PcdFlashNvStorageVariableBase64,\r
- (UINTN) PcdGet32 (PcdOvmfFlashNvStorageVariableBase)\r
- );\r
- ASSERT_RETURN_ERROR (PcdStatus);\r
- PcdStatus = PcdSet32S (\r
- PcdFlashNvStorageFtwWorkingBase,\r
- PcdGet32 (PcdOvmfFlashNvStorageFtwWorkingBase)\r
- );\r
- ASSERT_RETURN_ERROR (PcdStatus);\r
- PcdStatus = PcdSet32S (\r
- PcdFlashNvStorageFtwSpareBase,\r
- PcdGet32 (PcdOvmfFlashNvStorageFtwSpareBase)\r
- );\r
- ASSERT_RETURN_ERROR (PcdStatus);\r
}\r