OvmfPkg/TdxDxe: Support 5-level paging for ResetVector

Since OVMF already supports 5-level paging, the ResetVector
needs to handle the case.

Cc: Gerd Hoffmann <kraxel@redhat.com>
Cc: Min Xu <min.m.xu@intel.com>
Cc: Jiewen Yao <jiewen.yao@intel.com>
Cc: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
Signed-off-by: Ceping Sun <cepingx.sun@intel.com>
This commit is contained in:
Ceping Sun
2024-04-02 07:13:40 +08:00
committed by Liming Gao
parent 406f42cb74
commit 92c714f8b7
2 changed files with 20 additions and 1 deletions

View File

@@ -75,3 +75,4 @@
gUefiOvmfPkgTokenSpaceGuid.PcdOvmfWorkAreaSize
gUefiOvmfPkgTokenSpaceGuid.PcdOvmfSecPageTablesBase
gUefiOvmfPkgTokenSpaceGuid.PcdOvmfSecPageTablesSize
gEfiMdeModulePkgTokenSpaceGuid.PcdUse5LevelPageTable

View File

@@ -25,8 +25,13 @@ STACK_TOP:
SECTION .text
%define TDX_WORK_AREA_MAILBOX_GDTR (FixedPcdGet32 (PcdOvmfWorkAreaBase) + 128)
%define PT_ADDR(Offset) (FixedPcdGet32 (PcdOvmfSecPageTablesBase) + (Offset))
%define TDX_WORK_AREA_PGTBL_READY (FixedPcdGet32 (PcdOvmfWorkAreaBase) + 4)
%define PG_5_LEVEL (FixedPcdGetBool (PcdUse5LevelPageTable))
%define PT_ADDR(Offset) (FixedPcdGet32 (PcdOvmfSecPageTablesBase) + (Offset))
%define TDX_BSP 1
%define TDX_AP 2
%define TDX_AP_5_LEVEL 3
BITS 64
@@ -174,6 +179,19 @@ RestoreCr0:
RestoreCr4:
mov eax, 0x40
mov cr4, eax
%if PG_5_LEVEL
mov al, byte[TDX_WORK_AREA_PGTBL_READY]
inc eax
cmp eax, TDX_AP_5_LEVEL
jne SetCr3
SetCr4La57:
; set la57 bit in cr4
mov eax, cr4
bts eax, 12
mov cr4, eax
%endif
SetCr3:
;
; Can use the boot page tables since it's reserved