Skip to content

Commit

Permalink
OvmfPkg/ResetVector: wire up 5-level paging for TDX
Browse files Browse the repository at this point in the history
BSP workflow is quite simliar to the non-coco case.

TDX_WORK_AREA_PGTBL_READY is used to record the paging mode:
  1 == 4-level paging
  2 == 5-level paging

APs will look at TDX_WORK_AREA_PGTBL_READY to figure whenever
they should enable 5-level paging or not.

Signed-off-by: Gerd Hoffmann <[email protected]>
Message-Id: <[email protected]>
Reviewed-by: Laszlo Ersek <[email protected]>
[[email protected]: move "CheckForSev:" label into "%if PG_5_LEVEL" scope,
 as discussed with Gerd]
Cc: Jiewen Yao <[email protected]>
Cc: Oliver Steffen <[email protected]>
Cc: Michael Roth <[email protected]>
Cc: Erdem Aktas <[email protected]>
Cc: Min Xu <[email protected]>
Cc: Ard Biesheuvel <[email protected]>
Cc: Tom Lendacky <[email protected]>
[[email protected]: turn the "Cc:" message headers from Gerd's on-list
 posting into "Cc:" tags in the commit message, in order to pacify
 "PatchCheck.py"]
  • Loading branch information
kraxel authored and mergify[bot] committed Mar 1, 2024
1 parent 318b0d7 commit 275d0a3
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 1 deletion.
13 changes: 12 additions & 1 deletion OvmfPkg/ResetVector/Ia32/IntelTdx.asm
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
;
Expand Down
16 changes: 16 additions & 0 deletions OvmfPkg/ResetVector/Ia32/PageTables64.asm
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand Down

0 comments on commit 275d0a3

Please sign in to comment.