OvmfPkg/QemuFlashFvbServices: factor out SetPcdFlashNvStorageBaseAddresses

Extract the dynamic setting of the
- PcdFlashNvStorageVariableBase64
- PcdFlashNvStorageFtwWorkingBase
- PcdFlashNvStorageFtwSpareBase
addresses to a helper function.

For now, the helper function is identical (duplicated) between the SMM
flash driver and the runtime DXE flash driver. In subsequent patches, this
will change.

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-3-lersek@redhat.com>
Acked-by: Leif Lindholm <leif@nuviainc.com>
This commit is contained in:
Laszlo Ersek 2020-03-10 23:27:36 +01:00 committed by mergify[bot]
parent d6961bb47a
commit cd99d07d53
4 changed files with 60 additions and 18 deletions

View File

@ -1051,24 +1051,7 @@ FvbInitialize (
MarkIoMemoryRangeForRuntimeAccess (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);
SetPcdFlashNvStorageBaseAddresses ();
FwhInstance = (EFI_FW_VOL_INSTANCE *)
(

View File

@ -190,4 +190,9 @@ MarkIoMemoryRangeForRuntimeAccess (
IN UINTN Length
);
VOID
SetPcdFlashNvStorageBaseAddresses (
VOID
);
#endif

View File

@ -216,3 +216,30 @@ MarkIoMemoryRangeForRuntimeAccess (
return Status;
}
VOID
SetPcdFlashNvStorageBaseAddresses (
VOID
)
{
RETURN_STATUS PcdStatus;
//
// 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);
}

View File

@ -74,3 +74,30 @@ MarkIoMemoryRangeForRuntimeAccess (
return EFI_SUCCESS;
}
VOID
SetPcdFlashNvStorageBaseAddresses (
VOID
)
{
RETURN_STATUS PcdStatus;
//
// 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);
}