mirror of
https://github.com/acidanthera/audk.git
synced 2025-04-08 17:05:09 +02:00
OvmfPkg: Add AMD SEV-ES DebugVirtualization feature support
The SEV-ES DebugVirtualization feature enables type B swapping of debug registers on #VMEXIT and makes #DB and DR7 intercepts unnecessary and unwanted. When DebugVirtualization is enabled, this stops booting if interaction from the HV. Add new API to PEI, SEC, DXE. This does not change the existing behaviour yet. Cc: Ard Biesheuvel <ardb+tianocore@kernel.org> Cc: Erdem Aktas <erdemaktas@google.com> Cc: Gerd Hoffmann <kraxel@redhat.com> Cc: Jiewen Yao <jiewen.yao@intel.com> Cc: Michael Roth <michael.roth@amd.com> Cc: Min Xu <min.m.xu@intel.com> Reviewed-by: Tom Lendacky <thomas.lendacky@amd.com> Signed-off-by: Alexey Kardashevskiy <aik@amd.com> --- Changes: v5: * "rb" from Tom v4: * s/DebugSwap/DebugVirtualization/
This commit is contained in:
parent
3f28aa2fb0
commit
9f06feb5d2
@ -166,6 +166,18 @@ MemEncryptSevGetEncryptionMask (
|
||||
VOID
|
||||
);
|
||||
|
||||
/**
|
||||
Returns a boolean to indicate whether DebugVirtualization is enabled.
|
||||
|
||||
@retval TRUE DebugVirtualization is enabled
|
||||
@retval FALSE DebugVirtualization is not enabled
|
||||
**/
|
||||
BOOLEAN
|
||||
EFIAPI
|
||||
MemEncryptSevEsDebugVirtualizationIsEnabled (
|
||||
VOID
|
||||
);
|
||||
|
||||
/**
|
||||
Returns the encryption state of the specified virtual address range.
|
||||
|
||||
|
@ -40,19 +40,25 @@ AmdMemEncryptionAttrCheck (
|
||||
IN CONFIDENTIAL_COMPUTING_GUEST_ATTR Attr
|
||||
)
|
||||
{
|
||||
UINT64 CurrentLevel;
|
||||
|
||||
CurrentLevel = CurrentAttr & CCAttrTypeMask;
|
||||
|
||||
switch (Attr) {
|
||||
case CCAttrAmdSev:
|
||||
//
|
||||
// SEV is automatically enabled if SEV-ES or SEV-SNP is active.
|
||||
//
|
||||
return CurrentAttr >= CCAttrAmdSev;
|
||||
return CurrentLevel >= CCAttrAmdSev;
|
||||
case CCAttrAmdSevEs:
|
||||
//
|
||||
// SEV-ES is automatically enabled if SEV-SNP is active.
|
||||
//
|
||||
return CurrentAttr >= CCAttrAmdSevEs;
|
||||
return CurrentLevel >= CCAttrAmdSevEs;
|
||||
case CCAttrAmdSevSnp:
|
||||
return CurrentAttr == CCAttrAmdSevSnp;
|
||||
return CurrentLevel == CCAttrAmdSevSnp;
|
||||
case CCAttrFeatureAmdSevEsDebugVirtualization:
|
||||
return !!(CurrentAttr & CCAttrFeatureAmdSevEsDebugVirtualization);
|
||||
default:
|
||||
return FALSE;
|
||||
}
|
||||
@ -159,3 +165,18 @@ MemEncryptSevGetEncryptionMask (
|
||||
|
||||
return mSevEncryptionMask;
|
||||
}
|
||||
|
||||
/**
|
||||
Returns a boolean to indicate whether DebugVirtualization is enabled.
|
||||
|
||||
@retval TRUE DebugVirtualization is enabled
|
||||
@retval FALSE DebugVirtualization is not enabled
|
||||
**/
|
||||
BOOLEAN
|
||||
EFIAPI
|
||||
MemEncryptSevEsDebugVirtualizationIsEnabled (
|
||||
VOID
|
||||
)
|
||||
{
|
||||
return ConfidentialComputingGuestHas (CCAttrFeatureAmdSevEsDebugVirtualization);
|
||||
}
|
||||
|
@ -141,3 +141,18 @@ MemEncryptSevGetEncryptionMask (
|
||||
|
||||
return SevEsWorkArea->EncryptionMask;
|
||||
}
|
||||
|
||||
/**
|
||||
Returns a boolean to indicate whether DebugVirtualization is enabled.
|
||||
|
||||
@retval TRUE DebugVirtualization is enabled
|
||||
@retval FALSE DebugVirtualization is not enabled
|
||||
**/
|
||||
BOOLEAN
|
||||
EFIAPI
|
||||
MemEncryptSevEsDebugVirtualizationIsEnabled (
|
||||
VOID
|
||||
)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
@ -142,6 +142,21 @@ MemEncryptSevGetEncryptionMask (
|
||||
return SevEsWorkArea->EncryptionMask;
|
||||
}
|
||||
|
||||
/**
|
||||
Returns a boolean to indicate whether DebugVirtualization is enabled.
|
||||
|
||||
@retval TRUE DebugVirtualization is enabled
|
||||
@retval FALSE DebugVirtualization is not enabled
|
||||
**/
|
||||
BOOLEAN
|
||||
EFIAPI
|
||||
MemEncryptSevEsDebugVirtualizationIsEnabled (
|
||||
VOID
|
||||
)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/**
|
||||
Locate the page range that covers the initial (pre-SMBASE-relocation) SMRAM
|
||||
Save State Map.
|
||||
|
@ -1609,6 +1609,10 @@ Dr7WriteExit (
|
||||
UINT64 *Register;
|
||||
UINT64 Status;
|
||||
|
||||
if (MemEncryptSevEsDebugVirtualizationIsEnabled ()) {
|
||||
return UnsupportedExit (Ghcb, Regs, InstructionData);
|
||||
}
|
||||
|
||||
Ext = &InstructionData->Ext;
|
||||
SevEsData = (SEV_ES_PER_CPU_DATA *)(Ghcb + 1);
|
||||
|
||||
@ -1659,6 +1663,10 @@ Dr7ReadExit (
|
||||
SEV_ES_PER_CPU_DATA *SevEsData;
|
||||
UINT64 *Register;
|
||||
|
||||
if (MemEncryptSevEsDebugVirtualizationIsEnabled ()) {
|
||||
return UnsupportedExit (Ghcb, Regs, InstructionData);
|
||||
}
|
||||
|
||||
Ext = &InstructionData->Ext;
|
||||
SevEsData = (SEV_ES_PER_CPU_DATA *)(Ghcb + 1);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user