On 05/11/17 00:09, Brijesh Singh wrote: > Cc: Jordan Justen <jordan.l.jus...@intel.com> > Cc: Laszlo Ersek <ler...@redhat.com> > Contributed-under: TianoCore Contribution Agreement 1.0 > Signed-off-by: Brijesh Singh <brijesh.si...@amd.com> > --- > OvmfPkg/Library/QemuFwCfgLib/QemuFwCfgPeiLib.inf | 1 + > OvmfPkg/Library/QemuFwCfgLib/QemuFwCfgPei.c | 72 +++++++++++++++++++- > 2 files changed, 71 insertions(+), 2 deletions(-)
Reviewed-by: Laszlo Ersek <ler...@redhat.com> Thanks, Laszlo > diff --git a/OvmfPkg/Library/QemuFwCfgLib/QemuFwCfgPeiLib.inf > b/OvmfPkg/Library/QemuFwCfgLib/QemuFwCfgPeiLib.inf > index 4f966a85088a..b97b475c7cad 100644 > --- a/OvmfPkg/Library/QemuFwCfgLib/QemuFwCfgPeiLib.inf > +++ b/OvmfPkg/Library/QemuFwCfgLib/QemuFwCfgPeiLib.inf > @@ -47,4 +47,5 @@ [LibraryClasses] > DebugLib > IoLib > MemoryAllocationLib > + MemEncryptSevLib > > diff --git a/OvmfPkg/Library/QemuFwCfgLib/QemuFwCfgPei.c > b/OvmfPkg/Library/QemuFwCfgLib/QemuFwCfgPei.c > index ac05f4c347f3..1696512bccaf 100644 > --- a/OvmfPkg/Library/QemuFwCfgLib/QemuFwCfgPei.c > +++ b/OvmfPkg/Library/QemuFwCfgLib/QemuFwCfgPei.c > @@ -4,6 +4,7 @@ > > Copyright (C) 2013, Red Hat, Inc. > Copyright (c) 2011 - 2013, Intel Corporation. All rights reserved.<BR> > + Copyright (c) 2017, Advanced Micro Devices. All rights reserved.<BR> > > This program and the accompanying materials are licensed and made available > under the terms and conditions of the BSD License which accompanies this > @@ -14,8 +15,10 @@ > WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. > **/ > > +#include <Library/BaseLib.h> > #include <Library/DebugLib.h> > #include <Library/QemuFwCfgLib.h> > +#include <Library/MemEncryptSevLib.h> > > #include "QemuFwCfgLibInternal.h" > > @@ -76,8 +79,18 @@ QemuFwCfgInitialize ( > if ((Revision & FW_CFG_F_DMA) == 0) { > DEBUG ((DEBUG_INFO, "QemuFwCfg interface (IO Port) is supported.\n")); > } else { > - mQemuFwCfgDmaSupported = TRUE; > - DEBUG ((DEBUG_INFO, "QemuFwCfg interface (DMA) is supported.\n")); > + // > + // If SEV is enabled then we do not support DMA operations in PEI phase. > + // This is mainly because DMA in SEV guest requires using bounce buffer > + // (which need to allocate dynamic memory and allocating a PAGE size'd > + // buffer can be challenge in PEI phase) > + // > + if (InternalQemuFwCfgSevIsEnabled ()) { > + DEBUG ((DEBUG_INFO, "SEV: QemuFwCfg fallback to IO Port > interface.\n")); > + } else { > + mQemuFwCfgDmaSupported = TRUE; > + DEBUG ((DEBUG_INFO, "QemuFwCfg interface (DMA) is supported.\n")); > + } > } > return RETURN_SUCCESS; > } > @@ -114,3 +127,58 @@ InternalQemuFwCfgDmaIsAvailable ( > { > return mQemuFwCfgDmaSupported; > } > + > +/** > + > + Returns a boolean indicating whether SEV is enabled > + > + @retval TRUE SEV is enabled > + @retval FALSE SEV is disabled > +**/ > +BOOLEAN > +InternalQemuFwCfgSevIsEnabled ( > + VOID > + ) > +{ > + return MemEncryptSevIsEnabled (); > +} > + > +/** > + Allocate a bounce buffer for SEV DMA. > + > + @param[in] NumPage Number of pages. > + @param[out] Buffer Allocated DMA Buffer pointer > + > +**/ > +VOID > +InternalQemuFwCfgSevDmaAllocateBuffer ( > + IN UINT32 NumPages, > + OUT VOID **Buffer > + ) > +{ > + // > + // We should never reach here > + // > + ASSERT (FALSE); > + CpuDeadLoop (); > +} > + > +/** > + Free the DMA buffer allocated using InternalQemuFwCfgSevDmaAllocateBuffer > + > + @param[in] NumPage Number of pages. > + @param[in] Buffer DMA Buffer pointer > + > +**/ > +VOID > +InternalQemuFwCfgSevDmaFreeBuffer ( > + IN VOID *Buffer, > + IN UINT32 NumPages > + ) > +{ > + // > + // We should never reach here > + // > + ASSERT (FALSE); > + CpuDeadLoop (); > +} > _______________________________________________ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel