]> git.proxmox.com Git - mirror_edk2.git/commitdiff
IntelFsp2WrapperPkg: Implement FSP 2.4 MultiPhase wrapper handlers.
authorChasel Chiu <chasel.chiu@intel.com>
Wed, 10 Aug 2022 00:35:50 +0000 (17:35 -0700)
committermergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
Mon, 26 Sep 2022 20:22:44 +0000 (20:22 +0000)
REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3916

Implement MultiPhase wrapper handlers and only call to MultiPhase
handlers when FSP supports.

Cc: Nate DeSimone <nathaniel.l.desimone@intel.com>
Cc: Star Zeng <star.zeng@intel.com>
Signed-off-by: Chasel Chiu <chasel.chiu@intel.com>
Reviewed-by: Nate DeSimone <nathaniel.l.desimone@intel.com>
IntelFsp2WrapperPkg/FspmWrapperPeim/FspmWrapperPeim.c
IntelFsp2WrapperPkg/FspmWrapperPeim/FspmWrapperPeim.inf
IntelFsp2WrapperPkg/FspsWrapperPeim/FspsWrapperPeim.c
IntelFsp2WrapperPkg/FspsWrapperPeim/FspsWrapperPeim.inf

index ac27524d08780a3956bbf5df4f9ea6c14ebbae5b..ea206a79608877c33afa58d27d23187d3b207485 100644 (file)
@@ -23,6 +23,7 @@
 #include <Library/PerformanceLib.h>\r
 #include <Library/FspWrapperPlatformLib.h>\r
 #include <Library/FspWrapperHobProcessLib.h>\r
+#include <Library/FspWrapperMultiPhaseProcessLib.h>\r
 #include <Library/FspWrapperApiLib.h>\r
 #include <Library/FspMeasurementLib.h>\r
 \r
@@ -35,6 +36,8 @@
 #include <Library/FspWrapperApiTestLib.h>\r
 #include <FspEas.h>\r
 #include <FspStatusCode.h>\r
+#include <FspGlobalData.h>\r
+#include <Library/FspCommonLib.h>\r
 \r
 extern EFI_GUID  gFspHobGuid;\r
 \r
@@ -119,25 +122,39 @@ PeiFspMemoryInit (
 \r
   TimeStampCounterStart = AsmReadTsc ();\r
   Status                = CallFspMemoryInit (FspmUpdDataPtr, &FspHobListPtr);\r
-  // Create hobs after memory initialization and not in temp RAM. Hence passing the recorded timestamp here\r
-  PERF_START_EX (&gFspApiPerformanceGuid, "EventRec", NULL, TimeStampCounterStart, FSP_STATUS_CODE_MEMORY_INIT | FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_ENTRY);\r
-  PERF_END_EX (&gFspApiPerformanceGuid, "EventRec", NULL, 0, FSP_STATUS_CODE_MEMORY_INIT | FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_EXIT);\r
-  DEBUG ((DEBUG_INFO, "Total time spent executing FspMemoryInitApi: %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, "FspMemoryInitApi requested reset 0x%x\n", Status));\r
+    DEBUG ((DEBUG_INFO, "FspMemoryInitApi 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 FspMemoryInitApi(), Status = %r\n", Status));\r
+    ASSERT_EFI_ERROR (Status);\r
   }\r
 \r
-  DEBUG ((DEBUG_INFO, "FspMemoryInit status: 0x%x\n", Status));\r
-  ASSERT_EFI_ERROR (Status);\r
+  DEBUG ((DEBUG_INFO, "FspMemoryInit status: %r\n", Status));\r
+  if (Status == FSP_STATUS_VARIABLE_REQUEST) {\r
+    //\r
+    // call to Variable request handler\r
+    //\r
+    FspWrapperVariableRequestHandler (&FspHobListPtr, FspMultiPhaseMemInitApiIndex);\r
+  }\r
+\r
+  //\r
+  // See if MultiPhase process is required or not\r
+  //\r
+  FspWrapperMultiPhaseHandler (&FspHobListPtr, FspMultiPhaseMemInitApiIndex);    // FspM MultiPhase\r
+\r
+  //\r
+  // Create hobs after memory initialization and not in temp RAM. Hence passing the recorded timestamp here\r
+  //\r
+  PERF_START_EX (&gFspApiPerformanceGuid, "EventRec", NULL, TimeStampCounterStart, FSP_STATUS_CODE_MEMORY_INIT | FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_ENTRY);\r
+  PERF_END_EX (&gFspApiPerformanceGuid, "EventRec", NULL, 0, FSP_STATUS_CODE_MEMORY_INIT | FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_EXIT);\r
+  DEBUG ((DEBUG_INFO, "Total time spent executing FspMemoryInitApi: %d millisecond\n", DivU64x32 (GetTimeInNanoSecond (AsmReadTsc () - TimeStampCounterStart), 1000000)));\r
 \r
   Status = TestFspMemoryInitApiOutput (FspmUpdDataPtr, &FspHobListPtr);\r
   if (EFI_ERROR (Status)) {\r
index e2262d693c55eade41416ceb9ea7a329ac68743e..332509e0bcd2e2c7a5493083653ed057ac82ca5e 100644 (file)
@@ -46,6 +46,7 @@
   FspWrapperApiLib\r
   FspWrapperApiTestLib\r
   FspMeasurementLib\r
+  FspWrapperMultiPhaseProcessLib\r
 \r
 [Packages]\r
   MdePkg/MdePkg.dec\r
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
index 0598f85ab3ac238180a1a631ae2dfad56c8b1e13..f9c2ffca1c21a0eacd4182f343f628a14e30eefa 100644 (file)
@@ -6,7 +6,7 @@
 # register TemporaryRamDonePpi to call TempRamExit API, and register MemoryDiscoveredPpi\r
 # notify to call FspSiliconInit API.\r
 #\r
-#  Copyright (c) 2014 - 2021, Intel Corporation. All rights reserved.<BR>\r
+#  Copyright (c) 2014 - 2022, Intel Corporation. All rights reserved.<BR>\r
 #\r
 #  SPDX-License-Identifier: BSD-2-Clause-Patent\r
 #\r
@@ -46,6 +46,7 @@
   FspWrapperApiLib\r
   FspWrapperApiTestLib\r
   FspMeasurementLib\r
+  FspWrapperMultiPhaseProcessLib\r
 \r
 [Packages]\r
   MdePkg/MdePkg.dec\r