summaryrefslogtreecommitdiffstats
path: root/OvmfPkg/QemuFlashFvbServicesRuntimeDxe/QemuFlash.c
diff options
context:
space:
mode:
authorTom Lendacky <thomas.lendacky@amd.com>2021-01-23 07:57:44 -0600
committermergify[bot] <37929162+mergify[bot]@users.noreply.github.com>2021-01-26 00:25:16 +0000
commit3a3501862f73095059bb05cc28147c8e899488f2 (patch)
tree757d7a380dbdd94d18866f204b37c15adba09f8c /OvmfPkg/QemuFlashFvbServicesRuntimeDxe/QemuFlash.c
parent96a9acfc527964dc5ab7298862a0cd8aa5fffc6a (diff)
downloadedk2-3a3501862f73095059bb05cc28147c8e899488f2.tar.gz
edk2-3a3501862f73095059bb05cc28147c8e899488f2.tar.bz2
edk2-3a3501862f73095059bb05cc28147c8e899488f2.zip
OvmfPkg/QemuFlashFvbServicesRuntimeDxe: Use physical address with SEV-ES
BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=3183 Under SEV-ES, a write to the flash device is done using a direct VMGEXIT to perform an MMIO write. The address provided to the MMIO write must be the physical address of the MMIO write destitnation. During boot, OVMF runs with an identity mapped pagetable structure so that VA == PA and the VMGEXIT MMIO write destination is just the virtual address of the flash area address being written. However, when the UEFI SetVirtualAddressMap() API is invoked, an identity mapped pagetable structure may not be in place and using the virtual address for the flash area address is no longer valid. This results in writes to the flash not being performed successfully. This can be seen by attempting to change the boot order under Linux. The update will appear to be performed, based on the output of the command. But rebooting the guest will show that the new boot order has not been set. To remedy this, save the value of the flash base physical address before converting the address as part of SetVirtualAddressMap(). The physical address can then be calculated by obtaining the offset of the MMIO target virtual address relative to the flash base virtual address and adding that to the original flash base physical address. The resulting value produces a successful MMIO write during runtime services. Fixes: 437eb3f7a8db7681afe0e6064d3a8edb12abb766 Cc: Jordan Justen <jordan.l.justen@intel.com> Cc: Laszlo Ersek <lersek@redhat.com> Cc: Ard Biesheuvel <ardb+tianocore@kernel.org> Signed-off-by: Tom Lendacky <thomas.lendacky@amd.com> Message-Id: <84a5f9161541db5aa3b57c96b737afbcb4b6189d.1611410263.git.thomas.lendacky@amd.com> [lersek@redhat.com: SetVitualAddressMap() -> SetVirtualAddressMap() typo fix, in both the commit message and the code comment] Reviewed-by: Laszlo Ersek <lersek@redhat.com>
Diffstat (limited to 'OvmfPkg/QemuFlashFvbServicesRuntimeDxe/QemuFlash.c')
0 files changed, 0 insertions, 0 deletions