diff --git a/OvmfPkg/ResetVector/Ia32/AmdSev.asm b/OvmfPkg/ResetVector/Ia32/AmdSev.asm index 043c88a7ab..23e4c5ebbe 100644 --- a/OvmfPkg/ResetVector/Ia32/AmdSev.asm +++ b/OvmfPkg/ResetVector/Ia32/AmdSev.asm @@ -154,10 +154,6 @@ SevEsUnexpectedRespTerminate: ; If SEV-ES is enabled then initialize and make the GHCB page shared SevClearPageEncMaskForGhcbPage: - ; Check if SEV is enabled - cmp byte[WORK_AREA_GUEST_TYPE], 1 - jnz SevClearPageEncMaskForGhcbPageExit - ; Check if SEV-ES is enabled mov ecx, 1 bt [SEV_ES_WORK_AREA_STATUS_MSR], ecx @@ -195,20 +191,12 @@ pageTableEntries4kLoop: SevClearPageEncMaskForGhcbPageExit: OneTimeCallRet SevClearPageEncMaskForGhcbPage -; Check if SEV is enabled, and get the C-bit mask above 31. +; Get the C-bit mask above 31. ; Modified: EDX ; ; The value is returned in the EDX GetSevCBitMaskAbove31: - xor edx, edx - - ; Check if SEV is enabled - cmp byte[WORK_AREA_GUEST_TYPE], 1 - jnz GetSevCBitMaskAbove31Exit - mov edx, dword[SEV_ES_WORK_AREA_ENC_MASK + 4] - -GetSevCBitMaskAbove31Exit: OneTimeCallRet GetSevCBitMaskAbove31 %endif diff --git a/OvmfPkg/ResetVector/Ia32/PageTables64.asm b/OvmfPkg/ResetVector/Ia32/PageTables64.asm index 166e80293c..84a7b4efc0 100644 --- a/OvmfPkg/ResetVector/Ia32/PageTables64.asm +++ b/OvmfPkg/ResetVector/Ia32/PageTables64.asm @@ -118,15 +118,26 @@ SetCr3ForPageTables64: ; Check whether the SEV is active and populate the SevEsWorkArea OneTimeCall CheckSevFeatures + cmp byte[WORK_AREA_GUEST_TYPE], 1 + jz SevInit + ; + ; normal (non-CoCo) workflow + ; + ClearOvmfPageTables + CreatePageTables4Level 0 + jmp SetCr3 + +SevInit: + ; + ; SEV workflow + ; + ClearOvmfPageTables ; If SEV is enabled, the C-bit position is always above 31. ; The mask will be saved in the EDX and applied during the ; the page table build below. OneTimeCall GetSevCBitMaskAbove31 - - ClearOvmfPageTables CreatePageTables4Level edx - ; Clear the C-bit from the GHCB page if the SEV-ES is enabled. OneTimeCall SevClearPageEncMaskForGhcbPage jmp SetCr3