On 03/09/18 17:06, Brijesh Singh wrote: > Commit:24e4ad7 (OvmfPkg: Add AmdSevDxe driver) added a driver which runs > early in DXE phase and clears the C-bit from NonExistent entry -- which > is later split and accommodate the flash MMIO. When SMM is enabled, we > build two sets of page tables; first page table is used when executing > code in non SMM mode (SMM-less-pgtable) and second page table is used > when we are executing code in SMM mode (SMM-pgtable). > > During boot time, AmdSevDxe driver clears the C-bit from the > SMM-less-pgtable. But when SMM is enabled, Qemu Flash services are used > from SMM mode. > > In this patch we explicitly clear the C-bit from Qemu flash MMIO range > before we probe the flash. When OVMF is built with SMM_REQUIRE then > call to initialize the flash services happen after the SMM-pgtable is > created and processor has served the first SMI. At this time we will > have access to the SMM-pgtable. > > Cc: Jordan Justen <jordan.l.jus...@intel.com> > Cc: Laszlo Ersek <ler...@redhat.com> > Cc: Ard Biesheuvel <ard.biesheu...@linaro.org> > Contributed-under: TianoCore Contribution Agreement 1.1 > Signed-off-by: Brijesh Singh <brijesh.si...@amd.com> > --- > > Changes since v2: > - rename BeforeFlashProbe() -> QemuFlashBeforeProbe() > - add new file to define Smm specific QemuFlashBeforeProbe() > - update commit message and comment in the code > > Patch is also available at > url: github.com/codomania/edk2.git > branch: smm-v3 > > > OvmfPkg/QemuFlashFvbServicesRuntimeDxe/FvbServicesSmm.inf | 2 + > OvmfPkg/QemuFlashFvbServicesRuntimeDxe/QemuFlash.h | 7 +++ > OvmfPkg/QemuFlashFvbServicesRuntimeDxe/QemuFlash.c | 8 +++ > OvmfPkg/QemuFlashFvbServicesRuntimeDxe/QemuFlashDxe.c | 12 +++++ > OvmfPkg/QemuFlashFvbServicesRuntimeDxe/QemuFlashSmm.c | 54 > ++++++++++++++++++++ > 5 files changed, 83 insertions(+)
[ler...@redhat.com: trivial coding style improvements]: > diff --git a/OvmfPkg/QemuFlashFvbServicesRuntimeDxe/QemuFlash.c > b/OvmfPkg/QemuFlashFvbServicesRuntimeDxe/QemuFlash.c > index 3f057918298d..462d9c0322f4 100644 > --- a/OvmfPkg/QemuFlashFvbServicesRuntimeDxe/QemuFlash.c > +++ b/OvmfPkg/QemuFlashFvbServicesRuntimeDxe/QemuFlash.c > @@ -249,7 +249,8 @@ QemuFlashInitialize ( > // > QemuFlashBeforeProbe ( > (EFI_PHYSICAL_ADDRESS)(UINTN) mFlashBase, > - mFdBlockSize, mFdBlockCount > + mFdBlockSize, > + mFdBlockCount > ); > > if (!QemuFlashDetected ()) { > diff --git a/OvmfPkg/QemuFlashFvbServicesRuntimeDxe/QemuFlashSmm.c > b/OvmfPkg/QemuFlashFvbServicesRuntimeDxe/QemuFlashSmm.c > index 193fcec3690e..8999ad8d0d2b 100644 > --- a/OvmfPkg/QemuFlashFvbServicesRuntimeDxe/QemuFlashSmm.c > +++ b/OvmfPkg/QemuFlashFvbServicesRuntimeDxe/QemuFlashSmm.c > @@ -31,14 +31,14 @@ QemuFlashBeforeProbe ( > > ASSERT (FeaturePcdGet (PcdSmmSmramRequire)); > > - if (!MemEncryptSevIsEnabled()) { > + if (!MemEncryptSevIsEnabled ()) { > return; > } > > // > - // When SEV is enabled, AmdSevDxe runs early in DXE phase and clears the > C-bit > - // from the NonExistent entry -- which is later split and accommodate the > - // flash MMIO but the driver runs in non SMM context hence it cleared the > + // When SEV is enabled, AmdSevDxe runs early in DXE phase and clears the > + // C-bit from the NonExistent entry -- which is later split and accommodate > + // the flash MMIO but the driver runs in non SMM context hence it cleared > the > // flash ranges from non SMM page table. When SMM is enabled, the flash > // services are accessed from the SMM mode hence we explicitly clear the > // C-bit on flash ranges from SMM page table. Reviewed-by: Laszlo Ersek <ler...@redhat.com> Commit e4a1d5a7c4e4. Thanks Brijesh! Laszlo _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel