Below:

> -----Original Message-----
> From: Tom Lendacky <thomas.lenda...@amd.com>
> Sent: Thursday, February 29, 2024 12:20 AM
> To: Yao, Jiewen <jiewen....@intel.com>; devel@edk2.groups.io
> Cc: Ard Biesheuvel <ardb+tianoc...@kernel.org>; Aktas, Erdem
> <erdemak...@google.com>; Gerd Hoffmann <kra...@redhat.com>; Laszlo Ersek
> <ler...@redhat.com>; Liming Gao <gaolim...@byosoft.com.cn>; Kinney, Michael
> D <michael.d.kin...@intel.com>; Xu, Min M <min.m...@intel.com>; Liu,
> Zhiguang <zhiguang....@intel.com>; Kumar, Rahul R <rahul.r.ku...@intel.com>;
> Ni, Ray <ray...@intel.com>; Michael Roth <michael.r...@amd.com>
> Subject: Re: [PATCH v2 00/23] Provide SEV-SNP support for running under an
> SVSM
> 
> On 2/28/24 00:14, Yao, Jiewen wrote:
> > Some feedback:
> >
> > 1) 0002-MdePkg-GHCB-APIC-ID-retrieval-support-definitions
> >
> > MdePkg only contains the definition in the standard.
> >
> > Question: Is EFI_APIC_IDS_GUID definition in some AMD/SVSM specification?
> 
> The structure is documented in the GHCB specification, but the GUID is not.
> 
> Is the request to move the GUID to someplace other than MdePkg?

[Jiewen] Right. If the GUID is NOT in GHCB spec, then it should be in other 
place, such as OvmfPkg.


> 
> >
> > 2) 0012-UefiCpuPkg-CcSvsmLib-Create-the-CcSvsmLib-library-to-support-an-
> SVSM
> >
> > I am not sure the position of SVSM.
> > If the SVSM interface is AMD specific, the it should be AmdSvsmLib.
> 
> I believe TDX is also looking at the SVSM for TDX partitioning, but I'm
> not certain of that.
> 
> > If the SVSM interface is generic, then we should define everything in a 
> > generic
> way.
> >
> > It is very confusing to mix a generic CcSvsm lib with AMD specific
> <Register/Amd/Ghcb.h>.
> 
> I can certainly change the name to be AMD specific fow now. It can always
> be changed to something else later if need be, much like VmgExitLib was
> changed to CcExitLib.

[Jiewen] Yes, Intel is planning for SVSM. But it is NOT ready yet.
It is hard for me to discuss it now.

Maybe, please help me understand:
Is CcSvsmLib a generic library / common protocol between OVMF and Coconut-SVSM? 
- Option 1
Or is CcSvsmLib an implementation specific library, and the current API cannot 
be shared with Intel TDX in future? - Option 2

I notice that some API is for option 1 - CcSvsmIsSvsmPresent().
But some API is for option 2 - CcSvsmSnpGetVmpl(), CcSvsmSnpGetCaa(), 
CcSvsmSnpPvalidate(), CcSvsmSnpVmsaRmpAdjust().

How do you plan if TDX need to support SVSM later?
How do you plan if we need to add some generic interaction between OVMF and 
coconut-SVSM, such as vTPM?



> 
> Thanks,
> Tom
> 
> >
> >
> > Thank you
> > Yao, Jiewen
> >
> >> -----Original Message-----
> >> From: Tom Lendacky <thomas.lenda...@amd.com>
> >> Sent: Friday, February 23, 2024 1:30 AM
> >> To: devel@edk2.groups.io
> >> Cc: Ard Biesheuvel <ardb+tianoc...@kernel.org>; Aktas, Erdem
> >> <erdemak...@google.com>; Gerd Hoffmann <kra...@redhat.com>; Yao,
> Jiewen
> >> <jiewen....@intel.com>; Laszlo Ersek <ler...@redhat.com>; Liming Gao
> >> <gaolim...@byosoft.com.cn>; Kinney, Michael D
> <michael.d.kin...@intel.com>;
> >> Xu, Min M <min.m...@intel.com>; Liu, Zhiguang <zhiguang....@intel.com>;
> >> Kumar, Rahul R <rahul.r.ku...@intel.com>; Ni, Ray <ray...@intel.com>;
> Michael
> >> Roth <michael.r...@amd.com>
> >> Subject: [PATCH v2 00/23] Provide SEV-SNP support for running under an SVSM
> >>
> >>
> >> BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=4654
> >>
> >> This series adds SEV-SNP support for running OVMF under an Secure VM
> >> Service Module (SVSM) at a less privileged VM Privilege Level (VMPL).
> >> By running at a less priviledged VMPL, the SVSM can be used to provide
> >> services, e.g. a virtual TPM, for the guest OS within the SEV-SNP
> >> confidential VM (CVM) rather than trust such services from the hypervisor.
> >>
> >> Currently, OVMF expects to run at the highest VMPL, VMPL0, and there are
> >> certain SNP related operations that require that VMPL level. Specifically,
> >> the PVALIDATE instruction and the RMPADJUST instruction when setting the
> >> the VMSA attribute of a page (used when starting APs).
> >>
> >> If OVMF is to run at a less privileged VMPL, e.g. VMPL2, then it must
> >> use an SVSM (which is running at VMPL0) to perform the operations that
> >> it is no longer able to perform.
> >>
> >> When running under an SVSM, OVMF must know the APIC IDs of the vCPUs
> that
> >> it will be starting. As a result, the GHCB APIC ID retrieval action must
> >> be performed. Since this service can also work with SEV-SNP running at
> >> VMPL0, the patches to make use of this feature are near the beginning of
> >> the series.
> >>
> >> How OVMF interacts with and uses the SVSM is documented in the SVSM
> >> specification [1] and the GHCB specification [2].
> >>
> >> This support creates a new CcSvsmLib library that is used by MpInitLib.
> >> This requires an update to the edk2-platform DSC files to add the new
> >> library. The edk2-platform change would be needed after patch 12, but
> >> before patch 15.
> >>
> >> This series introduces support to run OVMF under an SVSM. It consists
> >> of:
> >>    - Retrieving the list of vCPU APIC IDs and starting up all APs without
> >>      performing a broadcast SIPI
> >>    - Reorganizing the page state change support to not directly use the
> >>      GHCB buffer since an SVSM will use the calling area buffer, instead
> >>    - Detecting the presence of an SVSM
> >>    - When not running at VMPL0, invoking the SVSM for page validation and
> >>      VMSA page creation/deletion
> >>    - Detecting and allowing OVMF to run in a VMPL other than 0 when an
> >>      SVSM is present
> >>
> >> The series is based off of commit:
> >>
> >>    2ca8d5597443 ("UefiCpuPkg/PiSmmCpuDxeSmm: Check BspIndex first
> before
> >> lock cmpxchg")
> >>
> >> [1] https://www.amd.com/content/dam/amd/en/documents/epyc-technical-
> >> docs/specifications/58019.pdf
> >> [2] https://www.amd.com/content/dam/amd/en/documents/epyc-technical-
> >> docs/specifications/56421.pdf
> >>
> >> ---
> >>
> >> Changes in v2:
> >> - Move the APIC IDs retrieval support to the beginning of the patch series
> >>      - Use a GUIDed HOB to hold the APIC ID list instead of a PCD
> >> - Split up Page State Change reorganization into multiple patches
> >> - Created CcSvsmLib library instead of extending CcExitLib
> >>      - This will require a corresponding update to edk2-platform DSC files
> >>      - Removed Ray Ni's Acked-by since it is not a minor change
> >> - Variable name changes and other misc changes
> >>
> >> Tom Lendacky (23):
> >>    OvmfPkg/BaseMemEncryptLib: Fix error check from AsmRmpAdjust()
> >>    MdePkg: GHCB APIC ID retrieval support definitions
> >>    OvmfPkg/PlatformPei: Retrieve APIC IDs from the hypervisor
> >>    UefiCpuPkg/MpInitLib: Always use AP Create if PcdSevSnpApicIds is set
> >>    OvmfPkg/BaseMemEncryptSevLib: Fix uncrustify errors
> >>    OvmfPkg/BaseMemEncryptSevLib: Calculate memory size for Page State
> >>      Change
> >>    MdePkg: Avoid hardcoded value for number of Page State Change entries
> >>    OvmfPkg/BaseMemEncryptSevLib: Re-organize page state change support
> >>    OvmfPkg/BaseMemEncryptSevLib: Maximize Page State Change efficiency
> >>    MdePkg/Register/Amd: Define the SVSM related information
> >>    MdePkg/BaseLib: Add a new VMGEXIT instruction invocation for SVSM
> >>    UefiCpuPkg/CcSvsmLib: Create the CcSvsmLib library to support an SVSM
> >>    UefiPayloadPkg: Prepare UefiPayloadPkg to use the CcSvsmLib library
> >>    Ovmfpkg/CcSvsmLib: Create CcSvsmLib to handle SVSM related services
> >>    UefiCpuPkg/MpInitLib: Use CcSvsmSnpVmsaRmpAdjust() to set/clear VMSA
> >>    OvmfPkg/BaseMemEncryptSevLib: Use CcSvsmSnpPvalidate() to validate
> >>      pages
> >>    OvmfPkg: Create a calling area used to communicate with the SVSM
> >>    OvmfPkg/CcSvsmLib: Add support for the SVSM_CORE_PVALIDATE call
> >>    OvmfPkg/BaseMemEncryptSevLib: Maximize Page State Change efficiency
> >>    OvmfPkg/CcSvsmLib: Add support for the SVSM create/delete vCPU calls
> >>    UefiCpuPkg/MpInitLib: AP creation support under an SVSM
> >>    Ovmfpkg/CcExitLib: Provide SVSM discovery support
> >>    OvmfPkg/BaseMemEncryptLib: Check for presence of an SVSM when not at
> >>      VMPL0
> >>
> >>   MdePkg/MdePkg.dec                                                     |  
> >>  5 +-
> >>   OvmfPkg/OvmfPkg.dec                                                   |  
> >>  4 +
> >>   UefiCpuPkg/UefiCpuPkg.dec                                             |  
> >>  5 +-
> >>   OvmfPkg/AmdSev/AmdSevX64.dsc                                          |  
> >>  1 +
> >>   OvmfPkg/Bhyve/BhyveX64.dsc                                            |  
> >>  1 +
> >>   OvmfPkg/CloudHv/CloudHvX64.dsc                                        |  
> >>  1 +
> >>   OvmfPkg/IntelTdx/IntelTdxX64.dsc                                      |  
> >>  1 +
> >>   OvmfPkg/Microvm/MicrovmX64.dsc                                        |  
> >>  1 +
> >>   OvmfPkg/OvmfPkgIa32.dsc                                               |  
> >>  1 +
> >>   OvmfPkg/OvmfPkgIa32X64.dsc                                            |  
> >>  3 +-
> >>   OvmfPkg/OvmfPkgX64.dsc                                                |  
> >>  1 +
> >>   OvmfPkg/OvmfXen.dsc                                                   |  
> >>  1 +
> >>   UefiCpuPkg/UefiCpuPkg.dsc                                             |  
> >>  4 +-
> >>   UefiPayloadPkg/UefiPayloadPkg.dsc                                     |  
> >>  1 +
> >>   OvmfPkg/AmdSev/AmdSevX64.fdf                                          |  
> >>  9 +-
> >>   OvmfPkg/OvmfPkgX64.fdf                                                |  
> >>  3 +
> >>   MdePkg/Library/BaseLib/BaseLib.inf                                    |  
> >>  2 +
> >>   OvmfPkg/Library/BaseMemEncryptSevLib/DxeMemEncryptSevLib.inf          |
> 3
> >> +-
> >>   OvmfPkg/Library/BaseMemEncryptSevLib/PeiMemEncryptSevLib.inf          |
> 3 +-
> >>   OvmfPkg/Library/BaseMemEncryptSevLib/SecMemEncryptSevLib.inf          |
> 3
> >> +-
> >>   OvmfPkg/Library/CcExitLib/CcExitLib.inf                               |  
> >>  3 +-
> >>   OvmfPkg/Library/CcExitLib/SecCcExitLib.inf                            |  
> >>  3 +-
> >>   OvmfPkg/Library/CcSvsmLib/CcSvsmLib.inf                               |  
> >> 38 ++
> >>   OvmfPkg/PlatformPei/PlatformPei.inf                                   |  
> >>  3 +
> >>   OvmfPkg/ResetVector/ResetVector.inf                                   |  
> >>  2 +
> >>   UefiCpuPkg/Library/CcSvsmLibNull/CcSvsmLibNull.inf                    |  
> >> 27 ++
> >>   UefiCpuPkg/Library/MpInitLib/DxeMpInitLib.inf                         |  
> >>  2 +
> >>   UefiCpuPkg/Library/MpInitLib/PeiMpInitLib.inf                         |  
> >>  2 +
> >>   MdePkg/Include/Library/BaseLib.h                                      |  
> >> 39 ++
> >>   MdePkg/Include/Register/Amd/Fam17Msr.h                                |  
> >> 19 +-
> >>   MdePkg/Include/Register/Amd/Ghcb.h                                    |  
> >> 23 +-
> >>   MdePkg/Include/Register/Amd/Msr.h                                     |  
> >>  3 +-
> >>   MdePkg/Include/Register/Amd/Svsm.h                                    | 
> >> 101 ++++
> >>   MdePkg/Include/Register/Amd/SvsmMsr.h                                 |  
> >> 35 ++
> >>   OvmfPkg/Include/WorkArea.h                                            |  
> >>  9 +-
> >>   OvmfPkg/Library/BaseMemEncryptSevLib/X64/SnpPageStateChange.h         |
> 6
> >> +-
> >>   UefiCpuPkg/Include/Library/CcSvsmLib.h                                | 
> >> 101 ++++
> >>   UefiCpuPkg/Library/MpInitLib/MpLib.h                                  |  
> >> 29 +-
> >>   OvmfPkg/Library/BaseMemEncryptSevLib/X64/DxeSnpSystemRamValidate.c
> |
> >> 11 +-
> >>   OvmfPkg/Library/BaseMemEncryptSevLib/X64/PeiDxeVirtualMemory.c        |
> 27
> >> +-
> >>   OvmfPkg/Library/BaseMemEncryptSevLib/X64/PeiSnpSystemRamValidate.c
> |
> >> 22 +-
> >>   OvmfPkg/Library/BaseMemEncryptSevLib/X64/SecSnpSystemRamValidate.c
> |
> >> 31 +-
> >>
> OvmfPkg/Library/BaseMemEncryptSevLib/X64/SnpPageStateChangeInternal.c |
> >> 206 ++++----
> >>   OvmfPkg/Library/CcExitLib/CcExitVcHandler.c                           |  
> >> 29 +-
> >>   OvmfPkg/Library/CcSvsmLib/CcSvsmLib.c                                 | 
> >> 500
> >> ++++++++++++++++++++
> >>   OvmfPkg/PlatformPei/AmdSev.c                                          | 
> >> 102 +++-
> >>   UefiCpuPkg/Library/CcSvsmLibNull/CcSvsmLibNull.c                      | 
> >> 108 +++++
> >>   UefiCpuPkg/Library/MpInitLib/Ia32/AmdSev.c                            |  
> >> 21 +-
> >>   UefiCpuPkg/Library/MpInitLib/MpLib.c                                  |  
> >>  9 +-
> >>   UefiCpuPkg/Library/MpInitLib/X64/AmdSev.c                             | 
> >> 134 ++++--
> >>   MdePkg/Library/BaseLib/Ia32/VmgExitSvsm.nasm                          |  
> >> 39 ++
> >>   MdePkg/Library/BaseLib/X64/VmgExitSvsm.nasm                           |  
> >> 94 ++++
> >>   OvmfPkg/ResetVector/ResetVector.nasmb                                 |  
> >>  6 +-
> >>   OvmfPkg/ResetVector/X64/OvmfSevMetadata.asm                           |  
> >> 11 +-
> >>   UefiCpuPkg/Library/CcSvsmLibNull/CcSvsmLibNull.uni                    |  
> >> 13 +
> >>   55 files changed, 1628 insertions(+), 233 deletions(-)
> >>   create mode 100644 OvmfPkg/Library/CcSvsmLib/CcSvsmLib.inf
> >>   create mode 100644 UefiCpuPkg/Library/CcSvsmLibNull/CcSvsmLibNull.inf
> >>   create mode 100644 MdePkg/Include/Register/Amd/Svsm.h
> >>   create mode 100644 MdePkg/Include/Register/Amd/SvsmMsr.h
> >>   create mode 100644 UefiCpuPkg/Include/Library/CcSvsmLib.h
> >>   create mode 100644 OvmfPkg/Library/CcSvsmLib/CcSvsmLib.c
> >>   create mode 100644 UefiCpuPkg/Library/CcSvsmLibNull/CcSvsmLibNull.c
> >>   create mode 100644 MdePkg/Library/BaseLib/Ia32/VmgExitSvsm.nasm
> >>   create mode 100644 MdePkg/Library/BaseLib/X64/VmgExitSvsm.nasm
> >>   create mode 100644 UefiCpuPkg/Library/CcSvsmLibNull/CcSvsmLibNull.uni
> >>
> >> --
> >> 2.42.0
> >


-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#116169): https://edk2.groups.io/g/devel/message/116169
Mute This Topic: https://groups.io/mt/104512925/21656
Group Owner: devel+ow...@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com]
-=-=-=-=-=-=-=-=-=-=-=-


Reply via email to