summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--OvmfPkg/ResetVector/Ia32/IntelTdx.asm13
-rw-r--r--OvmfPkg/ResetVector/Ia32/PageTables64.asm16
2 files changed, 28 insertions, 1 deletions
diff --git a/OvmfPkg/ResetVector/Ia32/IntelTdx.asm b/OvmfPkg/ResetVector/Ia32/IntelTdx.asm
index c6b86019df..7d775591a0 100644
--- a/OvmfPkg/ResetVector/Ia32/IntelTdx.asm
+++ b/OvmfPkg/ResetVector/Ia32/IntelTdx.asm
@@ -179,7 +179,7 @@ InitTdx:
;
; Modified: EAX, EDX
;
-; 0-NonTdx, 1-TdxBsp, 2-TdxAps
+; 0-NonTdx, 1-TdxBsp, 2-TdxAps, 3-TdxAps5Level
;
CheckTdxFeaturesBeforeBuildPagetables:
xor eax, eax
@@ -200,6 +200,17 @@ TdxPostBuildPageTables:
mov byte[TDX_WORK_AREA_PGTBL_READY], 1
OneTimeCallRet TdxPostBuildPageTables
+%if PG_5_LEVEL
+
+;
+; Set byte[TDX_WORK_AREA_PGTBL_READY] to 2
+;
+TdxPostBuildPageTables5Level:
+ mov byte[TDX_WORK_AREA_PGTBL_READY], 2
+ OneTimeCallRet TdxPostBuildPageTables5Level
+
+%endif
+
;
; Check if TDX is enabled
;
diff --git a/OvmfPkg/ResetVector/Ia32/PageTables64.asm b/OvmfPkg/ResetVector/Ia32/PageTables64.asm
index e15945da04..474d22dbfa 100644
--- a/OvmfPkg/ResetVector/Ia32/PageTables64.asm
+++ b/OvmfPkg/ResetVector/Ia32/PageTables64.asm
@@ -44,6 +44,7 @@ BITS 32
%define TDX_BSP 1
%define TDX_AP 2
+%define TDX_AP_5_LEVEL 3
;
; For OVMF, build some initial page tables at
@@ -214,6 +215,13 @@ SetCr3ForPageTables64:
je TdxBspInit
cmp eax, TDX_AP
je SetCr3
+%if PG_5_LEVEL
+ cmp eax, TDX_AP_5_LEVEL
+ jne CheckForSev
+ Enable5LevelPaging
+ jmp SetCr3
+CheckForSev:
+%endif
; Check whether the SEV is active and populate the SevEsWorkArea
OneTimeCall CheckSevFeatures
@@ -253,6 +261,14 @@ TdxBspInit:
; TDX BSP workflow
;
ClearOvmfPageTables
+%if PG_5_LEVEL
+ Check5LevelPaging Tdx4Level
+ CreatePageTables5Level 0
+ OneTimeCall TdxPostBuildPageTables5Level
+ Enable5LevelPaging
+ jmp SetCr3
+Tdx4Level:
+%endif
CreatePageTables4Level 0
OneTimeCall TdxPostBuildPageTables
jmp SetCr3