mirror of https://github.com/acidanthera/audk.git
OvmfPkg/ResetVector: wire up 5-level paging for TDX
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 <kraxel@redhat.com> Message-Id: <20240301074402.98625-9-kraxel@redhat.com> Reviewed-by: Laszlo Ersek <lersek@redhat.com> [lersek@redhat.com: move "CheckForSev:" label into "%if PG_5_LEVEL" scope, as discussed with Gerd] Cc: Jiewen Yao <jiewen.yao@intel.com> Cc: Oliver Steffen <osteffen@redhat.com> Cc: Michael Roth <michael.roth@amd.com> Cc: Erdem Aktas <erdemaktas@google.com> Cc: Min Xu <min.m.xu@intel.com> Cc: Ard Biesheuvel <ardb+tianocore@kernel.org> Cc: Tom Lendacky <thomas.lendacky@amd.com> [lersek@redhat.com: turn the "Cc:" message headers from Gerd's on-list posting into "Cc:" tags in the commit message, in order to pacify "PatchCheck.py"]
This commit is contained in:
parent
318b0d714a
commit
275d0a39c4
|
@ -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
|
||||
;
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue