]> git.proxmox.com Git - mirror_edk2.git/commitdiff
UefiCpuPkg: support single EFI_PEI_CORE_FV_LOCATION_PPI in PpiList
authorChasel Chiu <chasel.chiu@intel.com>
Wed, 4 Sep 2019 08:37:46 +0000 (16:37 +0800)
committerChasel Chiu <chasel.chiu@intel.com>
Thu, 5 Sep 2019 12:42:20 +0000 (20:42 +0800)
REF: https://bugzilla.tianocore.org/show_bug.cgi?id=2153

Current logic will skip searching EFI_PEI_CORE_FV_LOCATION_PPI when the
PPI in PpiList having EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST flag,
but platform may pass single PPI in PpiList that should be supported.

Changed the logic to verify PpiList first before checking
EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST flag.

Test: Verified both single EFI_PEI_CORE_FV_LOCATION_PPI and multiple
      PPIs in PpiList cases and both can boot with the PeiCore
      specified by EFI_PEI_CORE_FV_LOCATION_PPI.

Cc: Eric Dong <eric.dong@intel.com>
Cc: Ray Ni <ray.ni@intel.com>
Cc: Laszlo Ersek <lersek@redhat.com>
Signed-off-by: Chasel Chiu <chasel.chiu@intel.com>
Reviewed-by: Eric Dong <eric.dong@intel.com>
Reviewed-by: Ray Ni <ray.ni@intel.com>
Reviewed-by: Star Zeng <star.zeng@intel.com>
UefiCpuPkg/SecCore/SecMain.c

index 66c952b897fafdcbf2dbaca5713ddfac32a2ca0f..5d5e7f17dced59c9f2253d7b2b14d53cf7784d42 100644 (file)
@@ -238,9 +238,8 @@ SecStartupPhase2(
   // is enabled.\r
   //\r
   if (PpiList != NULL) {\r
-    for (Index = 0;\r
-      (PpiList[Index].Flags & EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST) != EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST;\r
-      Index++) {\r
+    Index = 0;\r
+    do {\r
       if (CompareGuid (PpiList[Index].Guid, &gEfiPeiCoreFvLocationPpiGuid) &&\r
           (((EFI_PEI_CORE_FV_LOCATION_PPI *) PpiList[Index].Ppi)->PeiCoreFvLocation != 0)\r
          ) {\r
@@ -256,12 +255,12 @@ SecStartupPhase2(
           break;\r
         } else {\r
           //\r
-          // PeiCore not found\r
+          // Invalid PeiCore FV provided by platform\r
           //\r
           CpuDeadLoop ();\r
         }\r
       }\r
-    }\r
+    } while ((PpiList[Index++].Flags & EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST) != EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST);\r
   }\r
   //\r
   // If EFI_PEI_CORE_FV_LOCATION_PPI not found, try to locate PeiCore from BFV.\r