]> git.proxmox.com Git - mirror_edk2.git/commitdiff
OvmfPkg/Sec: Install MpInitLibDepLib PPIs in SecMain.c
authorMin M Xu <min.m.xu@intel.com>
Sat, 7 May 2022 01:36:21 +0000 (09:36 +0800)
committermergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
Wed, 11 May 2022 08:40:53 +0000 (08:40 +0000)
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 <eric.dong@intel.com>
Cc: Ray Ni <ray.ni@intel.com>
Cc: Brijesh Singh <brijesh.singh@amd.com>
Cc: Erdem Aktas <erdemaktas@google.com>
Cc: James Bottomley <jejb@linux.ibm.com>
Cc: Jiewen Yao <jiewen.yao@intel.com>
Cc: Tom Lendacky <thomas.lendacky@amd.com>
Cc: Gerd Hoffmann <kraxel@redhat.com>
Signed-off-by: Min Xu <min.m.xu@intel.com>
Tested-by: Tom Lendacky <thomas.lendacky@amd.com>
Acked-by: Gerd Hoffmann <kraxel@redhat.com>
Acked-by: Jiewen Yao <jiewen.yao@intel.com>
Reviewed-by: Ray Ni <ray.ni@intel.com>
OvmfPkg/Sec/SecMain.c
OvmfPkg/Sec/SecMain.inf

index 89371361cd05ce906a31ea849679d837ee181247..1167d22a68cc0e75268fd2f1a4cddfc993592ab2 100644 (file)
@@ -28,6 +28,7 @@
 #include <Library/LocalApicLib.h>\r
 #include <Library/CpuExceptionHandlerLib.h>\r
 #include <Ppi/TemporaryRamSupport.h>\r
+#include <Ppi/MpInitLibDep.h>\r
 #include <Library/PlatformInitLib.h>\r
 #include <Library/CcProbeLib.h>\r
 #include "AmdSev.h"\r
@@ -61,12 +62,30 @@ EFI_PEI_TEMPORARY_RAM_SUPPORT_PPI  mTemporaryRamSupportPpi = {
   TemporaryRamMigration\r
 };\r
 \r
-EFI_PEI_PPI_DESCRIPTOR  mPrivateDispatchTable[] = {\r
+EFI_PEI_PPI_DESCRIPTOR  mPrivateDispatchTableMp[] = {\r
+  {\r
+    (EFI_PEI_PPI_DESCRIPTOR_PPI),\r
+    &gEfiTemporaryRamSupportPpiGuid,\r
+    &mTemporaryRamSupportPpi\r
+  },\r
   {\r
     (EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST),\r
+    &gEfiPeiMpInitLibMpDepPpiGuid,\r
+    NULL\r
+  },\r
+};\r
+\r
+EFI_PEI_PPI_DESCRIPTOR  mPrivateDispatchTableUp[] = {\r
+  {\r
+    (EFI_PEI_PPI_DESCRIPTOR_PPI),\r
     &gEfiTemporaryRamSupportPpiGuid,\r
     &mTemporaryRamSupportPpi\r
   },\r
+  {\r
+    (EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST),\r
+    &gEfiPeiMpInitLibUpDepPpiGuid,\r
+    NULL\r
+  },\r
 };\r
 \r
 //\r
@@ -936,6 +955,7 @@ SecStartupPhase2 (
   EFI_SEC_PEI_HAND_OFF        *SecCoreData;\r
   EFI_FIRMWARE_VOLUME_HEADER  *BootFv;\r
   EFI_PEI_CORE_ENTRY_POINT    PeiCoreEntryPoint;\r
+  EFI_PEI_PPI_DESCRIPTOR      *EfiPeiPpiDescriptor;\r
 \r
   SecCoreData = (EFI_SEC_PEI_HAND_OFF *)Context;\r
 \r
@@ -948,10 +968,20 @@ SecStartupPhase2 (
   SecCoreData->BootFirmwareVolumeBase = BootFv;\r
   SecCoreData->BootFirmwareVolumeSize = (UINTN)BootFv->FvLength;\r
 \r
+  //\r
+  // Td guest is required to use the MpInitLibUp (unique-processor version).\r
+  // Other guests use the MpInitLib (multi-processor version).\r
+  //\r
+  if (CcProbe () == CcGuestTypeIntelTdx) {\r
+    EfiPeiPpiDescriptor = (EFI_PEI_PPI_DESCRIPTOR *)&mPrivateDispatchTableUp;\r
+  } else {\r
+    EfiPeiPpiDescriptor = (EFI_PEI_PPI_DESCRIPTOR *)&mPrivateDispatchTableMp;\r
+  }\r
+\r
   //\r
   // Transfer the control to the PEI core\r
   //\r
-  (*PeiCoreEntryPoint)(SecCoreData, (EFI_PEI_PPI_DESCRIPTOR *)&mPrivateDispatchTable);\r
+  (*PeiCoreEntryPoint)(SecCoreData, EfiPeiPpiDescriptor);\r
 \r
   //\r
   // If we get here then the PEI Core returned, which is not recoverable.\r
index 1557b5f4a84e9bce22ea96b3cb6e269b5b331610..561a840f29c5c8dc7fe29ed48f1f2887bab06d46 100644 (file)
@@ -59,6 +59,8 @@
 \r
 [Ppis]\r
   gEfiTemporaryRamSupportPpiGuid                # PPI ALWAYS_PRODUCED\r
+  gEfiPeiMpInitLibMpDepPpiGuid\r
+  gEfiPeiMpInitLibUpDepPpiGuid\r
 \r
 [Pcd]\r
   gUefiCpuPkgTokenSpaceGuid.PcdSevEsWorkAreaBase\r