From: Min M Xu <[email protected]> BZ: https://bugzilla.tianocore.org/show_bug.cgi?id=3918
Td guest should use MpInitLibUp, other guest use the MpInitLib. So in SecMain.c different PPI is installed according to the working guest type. Cc: Eric Dong <[email protected]> Cc: Ray Ni <[email protected]> Cc: Brijesh Singh <[email protected]> Cc: Erdem Aktas <[email protected]> Cc: James Bottomley <[email protected]> Cc: Jiewen Yao <[email protected]> Cc: Tom Lendacky <[email protected]> Cc: Gerd Hoffmann <[email protected]> Signed-off-by: Min Xu <[email protected]> --- OvmfPkg/Sec/SecMain.c | 34 ++++++++++++++++++++++++++++++++-- OvmfPkg/Sec/SecMain.inf | 2 ++ 2 files changed, 34 insertions(+), 2 deletions(-) diff --git a/OvmfPkg/Sec/SecMain.c b/OvmfPkg/Sec/SecMain.c index 89371361cd05..1167d22a68cc 100644 --- a/OvmfPkg/Sec/SecMain.c +++ b/OvmfPkg/Sec/SecMain.c @@ -28,6 +28,7 @@ #include <Library/LocalApicLib.h> #include <Library/CpuExceptionHandlerLib.h> #include <Ppi/TemporaryRamSupport.h> +#include <Ppi/MpInitLibDep.h> #include <Library/PlatformInitLib.h> #include <Library/CcProbeLib.h> #include "AmdSev.h" @@ -61,12 +62,30 @@ EFI_PEI_TEMPORARY_RAM_SUPPORT_PPI mTemporaryRamSupportPpi = { TemporaryRamMigration }; -EFI_PEI_PPI_DESCRIPTOR mPrivateDispatchTable[] = { +EFI_PEI_PPI_DESCRIPTOR mPrivateDispatchTableMp[] = { + { + (EFI_PEI_PPI_DESCRIPTOR_PPI), + &gEfiTemporaryRamSupportPpiGuid, + &mTemporaryRamSupportPpi + }, { (EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST), + &gEfiPeiMpInitLibMpDepPpiGuid, + NULL + }, +}; + +EFI_PEI_PPI_DESCRIPTOR mPrivateDispatchTableUp[] = { + { + (EFI_PEI_PPI_DESCRIPTOR_PPI), &gEfiTemporaryRamSupportPpiGuid, &mTemporaryRamSupportPpi }, + { + (EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST), + &gEfiPeiMpInitLibUpDepPpiGuid, + NULL + }, }; // @@ -936,6 +955,7 @@ SecStartupPhase2 ( EFI_SEC_PEI_HAND_OFF *SecCoreData; EFI_FIRMWARE_VOLUME_HEADER *BootFv; EFI_PEI_CORE_ENTRY_POINT PeiCoreEntryPoint; + EFI_PEI_PPI_DESCRIPTOR *EfiPeiPpiDescriptor; SecCoreData = (EFI_SEC_PEI_HAND_OFF *)Context; @@ -948,10 +968,20 @@ SecStartupPhase2 ( SecCoreData->BootFirmwareVolumeBase = BootFv; SecCoreData->BootFirmwareVolumeSize = (UINTN)BootFv->FvLength; + // + // Td guest is required to use the MpInitLibUp (unique-processor version). + // Other guests use the MpInitLib (multi-processor version). + // + if (CcProbe () == CcGuestTypeIntelTdx) { + EfiPeiPpiDescriptor = (EFI_PEI_PPI_DESCRIPTOR *)&mPrivateDispatchTableUp; + } else { + EfiPeiPpiDescriptor = (EFI_PEI_PPI_DESCRIPTOR *)&mPrivateDispatchTableMp; + } + // // Transfer the control to the PEI core // - (*PeiCoreEntryPoint)(SecCoreData, (EFI_PEI_PPI_DESCRIPTOR *)&mPrivateDispatchTable); + (*PeiCoreEntryPoint)(SecCoreData, EfiPeiPpiDescriptor); // // If we get here then the PEI Core returned, which is not recoverable. diff --git a/OvmfPkg/Sec/SecMain.inf b/OvmfPkg/Sec/SecMain.inf index 1557b5f4a84e..561a840f29c5 100644 --- a/OvmfPkg/Sec/SecMain.inf +++ b/OvmfPkg/Sec/SecMain.inf @@ -59,6 +59,8 @@ [Ppis] gEfiTemporaryRamSupportPpiGuid # PPI ALWAYS_PRODUCED + gEfiPeiMpInitLibMpDepPpiGuid + gEfiPeiMpInitLibUpDepPpiGuid [Pcd] gUefiCpuPkgTokenSpaceGuid.PcdSevEsWorkAreaBase -- 2.29.2.windows.2 -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#89566): https://edk2.groups.io/g/devel/message/89566 Mute This Topic: https://groups.io/mt/90946718/21656 Group Owner: [email protected] Unsubscribe: https://edk2.groups.io/g/devel/unsub [[email protected]] -=-=-=-=-=-=-=-=-=-=-=-
