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
|
; Modified: EAX, EDX
|
||||||
;
|
;
|
||||||
; 0-NonTdx, 1-TdxBsp, 2-TdxAps
|
; 0-NonTdx, 1-TdxBsp, 2-TdxAps, 3-TdxAps5Level
|
||||||
;
|
;
|
||||||
CheckTdxFeaturesBeforeBuildPagetables:
|
CheckTdxFeaturesBeforeBuildPagetables:
|
||||||
xor eax, eax
|
xor eax, eax
|
||||||
|
@ -200,6 +200,17 @@ TdxPostBuildPageTables:
|
||||||
mov byte[TDX_WORK_AREA_PGTBL_READY], 1
|
mov byte[TDX_WORK_AREA_PGTBL_READY], 1
|
||||||
OneTimeCallRet TdxPostBuildPageTables
|
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
|
; Check if TDX is enabled
|
||||||
;
|
;
|
||||||
|
|
|
@ -44,6 +44,7 @@ BITS 32
|
||||||
|
|
||||||
%define TDX_BSP 1
|
%define TDX_BSP 1
|
||||||
%define TDX_AP 2
|
%define TDX_AP 2
|
||||||
|
%define TDX_AP_5_LEVEL 3
|
||||||
|
|
||||||
;
|
;
|
||||||
; For OVMF, build some initial page tables at
|
; For OVMF, build some initial page tables at
|
||||||
|
@ -214,6 +215,13 @@ SetCr3ForPageTables64:
|
||||||
je TdxBspInit
|
je TdxBspInit
|
||||||
cmp eax, TDX_AP
|
cmp eax, TDX_AP
|
||||||
je SetCr3
|
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
|
; Check whether the SEV is active and populate the SevEsWorkArea
|
||||||
OneTimeCall CheckSevFeatures
|
OneTimeCall CheckSevFeatures
|
||||||
|
@ -253,6 +261,14 @@ TdxBspInit:
|
||||||
; TDX BSP workflow
|
; TDX BSP workflow
|
||||||
;
|
;
|
||||||
ClearOvmfPageTables
|
ClearOvmfPageTables
|
||||||
|
%if PG_5_LEVEL
|
||||||
|
Check5LevelPaging Tdx4Level
|
||||||
|
CreatePageTables5Level 0
|
||||||
|
OneTimeCall TdxPostBuildPageTables5Level
|
||||||
|
Enable5LevelPaging
|
||||||
|
jmp SetCr3
|
||||||
|
Tdx4Level:
|
||||||
|
%endif
|
||||||
CreatePageTables4Level 0
|
CreatePageTables4Level 0
|
||||||
OneTimeCall TdxPostBuildPageTables
|
OneTimeCall TdxPostBuildPageTables
|
||||||
jmp SetCr3
|
jmp SetCr3
|
||||||
|
|
Loading…
Reference in New Issue