OvmfPkg: TdxDxe: Fix AsmRelocateApMailBoxLoop

In TDX, Application Processor busy-loops on Mailbox for OS to issue
MpProtectedModeWakeupCommandWakeup command to UEFI.  As the AP acking to
it, it clears the command member according to ACPI spec 6.4, 5.2.12.19
Multiprocessor Wakeup Structure: "The application processor need clear the
command to Noop(0) as the acknowledgement that the command is received."
However, AsmRelocateApMailBoxLoop wrongly clears WakeupVector.  Correctly
clear command instead of WakeupVector.

Without this patch, TD guest kernel fails to boot APs.

Fixes: fae5c1464d ("OvmfPkg: Add TdxDxe driver")

Cc: Min Xu <min.m.xu@intel.com>
Signed-off-by: Isaku Yamahata <isaku.yamahata@intel.com>
Reviewed-by: Jiewen Yao <jiewen.yao@intel.com>
Reviewed-by: Min Xu <min.m.xu@intel.com>
This commit is contained in:
Isaku Yamahata 2022-05-24 15:53:46 +08:00 committed by mergify[bot]
parent a21a3438f7
commit 9c733f0b90
1 changed files with 1 additions and 1 deletions

View File

@ -69,7 +69,7 @@ MailBoxWakeUp:
mov rax, [rbx + WakeupVectorOffset] mov rax, [rbx + WakeupVectorOffset]
; OS sends a wakeup command for a given APIC ID, firmware is supposed to reset ; OS sends a wakeup command for a given APIC ID, firmware is supposed to reset
; the command field back to zero as acknowledgement. ; the command field back to zero as acknowledgement.
mov qword [rbx + WakeupVectorOffset], 0 mov qword [rbx + CommandOffset], 0
jmp rax jmp rax
MailBoxSleep: MailBoxSleep:
jmp $ jmp $