]> git.proxmox.com Git - mirror_edk2.git/blobdiff - IntelFsp2WrapperPkg/FspsWrapperPeim/FspsWrapperPeim.c
IntelFsp2WrapperPkg: Implement FSP 2.4 MultiPhase wrapper handlers.
[mirror_edk2.git] / IntelFsp2WrapperPkg / FspsWrapperPeim / FspsWrapperPeim.c
index ee48dd69d36a6c61b18316d6b25a97dcbcae06b9..091ddb697a71949c32ba5b739d5def16e08a0c2e 100644 (file)
@@ -21,6 +21,7 @@
 #include <Library/MemoryAllocationLib.h>\r
 #include <Library/FspWrapperPlatformLib.h>\r
 #include <Library/FspWrapperHobProcessLib.h>\r
+#include <Library/FspWrapperMultiPhaseProcessLib.h>\r
 #include <Library/TimerLib.h>\r
 #include <Library/PerformanceLib.h>\r
 #include <Library/FspWrapperApiLib.h>\r
@@ -36,6 +37,7 @@
 #include <Library/FspWrapperApiTestLib.h>\r
 #include <FspEas.h>\r
 #include <FspStatusCode.h>\r
+#include <FspGlobalData.h>\r
 \r
 extern EFI_PEI_NOTIFY_DESCRIPTOR  mS3EndOfPeiNotifyDesc;\r
 extern EFI_GUID                   gFspHobGuid;\r
@@ -318,23 +320,36 @@ PeiMemoryDiscoveredNotify (
   TimeStampCounterStart = AsmReadTsc ();\r
   PERF_START_EX (&gFspApiPerformanceGuid, "EventRec", NULL, 0, FSP_STATUS_CODE_SILICON_INIT | FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_ENTRY);\r
   Status = CallFspSiliconInit ((VOID *)FspsUpdDataPtr);\r
-  PERF_END_EX (&gFspApiPerformanceGuid, "EventRec", NULL, 0, FSP_STATUS_CODE_SILICON_INIT | FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_EXIT);\r
-  DEBUG ((DEBUG_INFO, "Total time spent executing FspSiliconInitApi: %d millisecond\n", DivU64x32 (GetTimeInNanoSecond (AsmReadTsc () - TimeStampCounterStart), 1000000)));\r
 \r
   //\r
   // Reset the system if FSP API returned FSP_STATUS_RESET_REQUIRED status\r
   //\r
   if ((Status >= FSP_STATUS_RESET_REQUIRED_COLD) && (Status <= FSP_STATUS_RESET_REQUIRED_8)) {\r
-    DEBUG ((DEBUG_INFO, "FspSiliconInitApi requested reset 0x%x\n", Status));\r
+    DEBUG ((DEBUG_INFO, "FspSiliconInitApi requested reset %r\n", Status));\r
     CallFspWrapperResetSystem (Status);\r
   }\r
 \r
-  if (EFI_ERROR (Status)) {\r
+  if ((Status != FSP_STATUS_VARIABLE_REQUEST) && EFI_ERROR (Status)) {\r
     DEBUG ((DEBUG_ERROR, "ERROR - Failed to execute FspSiliconInitApi(), Status = %r\n", Status));\r
+    ASSERT_EFI_ERROR (Status);\r
   }\r
 \r
-  DEBUG ((DEBUG_INFO, "FspSiliconInit status: 0x%x\n", Status));\r
-  ASSERT_EFI_ERROR (Status);\r
+  DEBUG ((DEBUG_INFO, "FspSiliconInit status: %r\n", Status));\r
+\r
+  if (Status == FSP_STATUS_VARIABLE_REQUEST) {\r
+    //\r
+    // call to Variable request handler\r
+    //\r
+    FspWrapperVariableRequestHandler (&FspHobListPtr, FspMultiPhaseSiInitApiIndex);\r
+  }\r
+\r
+  //\r
+  // See if MultiPhase process is required or not\r
+  //\r
+  FspWrapperMultiPhaseHandler (&FspHobListPtr, FspMultiPhaseSiInitApiIndex);    // FspS MultiPhase\r
+\r
+  PERF_END_EX (&gFspApiPerformanceGuid, "EventRec", NULL, 0, FSP_STATUS_CODE_SILICON_INIT | FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_EXIT);\r
+  DEBUG ((DEBUG_INFO, "Total time spent executing FspSiliconInitApi: %d millisecond\n", DivU64x32 (GetTimeInNanoSecond (AsmReadTsc () - TimeStampCounterStart), 1000000)));\r
 \r
   Status = TestFspSiliconInitApiOutput ((VOID *)NULL);\r
   if (RETURN_ERROR (Status)) {\r