Add dual FSP binaries support.
authorMa, Maurice <maurice.ma@intel.com>
Wed, 29 Apr 2015 03:50:20 +0000 (03:50 +0000)
committerjyao1 <jyao1@Edk2>
Wed, 29 Apr 2015 03:50:20 +0000 (03:50 +0000)
There are two FSP images at different locations in a flash (one factory version is read only and other in updatable version)
TempRamInit, FspMemoryInit and TempRamExit are executed from factory version and FspSiliconInit/NotifyPhase will be executed from updatable version.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: "Ma, Maurice" <maurice.ma@intel.com>
Reviewed-by: "Yao, Jiewen" <Jiewen.Yao@intel.com>
git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@17249 6f19259b-4bc3-4df7-8a09-765794883524

IntelFspWrapperPkg/FspInitPei/FspInitPei.inf
IntelFspWrapperPkg/FspInitPei/FspInitPeiV2.c
IntelFspWrapperPkg/FspNotifyDxe/FspNotifyDxe.c
IntelFspWrapperPkg/FspNotifyDxe/FspNotifyDxe.inf
IntelFspWrapperPkg/IntelFspWrapperPkg.dec

index 97e8813..cde101b 100644 (file)
@@ -81,6 +81,7 @@
 [Pcd]\r
   gFspWrapperTokenSpaceGuid.PcdPeiTemporaryRamStackSize       ## CONSUMES\r
   gFspWrapperTokenSpaceGuid.PcdFlashFvFspBase                 ## CONSUMES\r
+  gFspWrapperTokenSpaceGuid.PcdFlashFvSecondFspBase           ## CONSUMES\r
   gFspWrapperTokenSpaceGuid.PcdFlashFvFspSize                 ## CONSUMES\r
   gFspWrapperTokenSpaceGuid.PcdMaxUpdRegionSize               ## CONSUMES\r
   gFspWrapperTokenSpaceGuid.PcdFspApiVersion                  ## CONSUMES\r
index f11015e..35a994e 100644 (file)
@@ -261,7 +261,11 @@ PeiMemoryDiscoveredNotify (
   VOID                      *FspHobList;\r
   EFI_HOB_GUID_TYPE         *GuidHob;\r
 \r
-  FspHeader = FspFindFspHeader (PcdGet32 (PcdFlashFvFspBase));\r
+  if (PcdGet32 (PcdFlashFvSecondFspBase) == 0) {\r
+    FspHeader = FspFindFspHeader (PcdGet32 (PcdFlashFvFspBase));\r
+  } else {\r
+    FspHeader = FspFindFspHeader (PcdGet32 (PcdFlashFvSecondFspBase));\r
+  }\r
   if (FspHeader == NULL) {\r
     return EFI_DEVICE_ERROR;\r
   }\r
index 859b267..f8e8e82 100644 (file)
@@ -120,7 +120,11 @@ FspDxeEntryPoint (
   VOID       *Registration;\r
   EFI_EVENT  ProtocolNotifyEvent;\r
 \r
-  mFspHeader = FspFindFspHeader (PcdGet32 (PcdFlashFvFspBase));\r
+  if (PcdGet32 (PcdFlashFvSecondFspBase) == 0) {\r
+    mFspHeader = FspFindFspHeader (PcdGet32 (PcdFlashFvFspBase));\r
+  } else {\r
+    mFspHeader = FspFindFspHeader (PcdGet32 (PcdFlashFvSecondFspBase));\r
+  }\r
   DEBUG ((DEBUG_INFO, "FspHeader - 0x%x\n", mFspHeader));\r
   if (mFspHeader == NULL) {\r
     return EFI_DEVICE_ERROR;\r
index 3b819d9..8175dbd 100644 (file)
@@ -49,6 +49,7 @@
 \r
 [Pcd]\r
   gFspWrapperTokenSpaceGuid.PcdFlashFvFspBase       ## CONSUMES\r
+  gFspWrapperTokenSpaceGuid.PcdFlashFvSecondFspBase ## CONSUMES\r
   gFspWrapperTokenSpaceGuid.PcdFlashFvFspSize       ## CONSUMES\r
 \r
 [Depex]\r
index bfed1cc..1fc8e2c 100644 (file)
   ## Provides the size of the BIOS Flash Device.\r
   gFspWrapperTokenSpaceGuid.PcdFlashCodeCacheSize|0x00200000|UINT32|0x10000002\r
 \r
-  ## Indicates the base address of the FSP binary.\r
+  ## Indicates the base address of the factory FSP binary.\r
   gFspWrapperTokenSpaceGuid.PcdFlashFvFspBase|0xFFF80000|UINT32|0x10000003\r
-  ## Provides the size of the FSP binary.\r
+  ## Indicates the base address of the updatable FSP binary to support Dual FSP.\r
+  #  There could be two FSP images at different locations in a flash - \r
+  #  one factory version (default) and updatable version (updatable).\r
+  #  TempRamInit, FspMemoryInit and TempRamExit are always executed from factory version.\r
+  #  FspSiliconInit and NotifyPhase can be executed from updatable version if it is available,\r
+  #  FspSiliconInit and NotifyPhase are executed from factory version if there is no updateable version,\r
+  #  PcdFlashFvFspBase is base address of factory FSP, and PcdFlashFvSecondFspBase\r
+  #  is base address of updatable FSP. If PcdFlashFvSecondFspBase is 0, that means\r
+  #  there is no updatable FSP.\r
+  gFspWrapperTokenSpaceGuid.PcdFlashFvSecondFspBase|0x00000000|UINT32|0x10000008\r
+  ## Provides the size of the factory FSP binary.\r
   gFspWrapperTokenSpaceGuid.PcdFlashFvFspSize|0x00048000|UINT32|0x10000004\r
+  ## Provides the size of the updatable FSP binary to support Dual FSP.\r
+  gFspWrapperTokenSpaceGuid.PcdFlashFvSecondFspSize|0x00000000|UINT32|0x10000009\r
 \r
   ## Indicates the base address of the first Microcode Patch in the Microcode Region\r
   gFspWrapperTokenSpaceGuid.PcdCpuMicrocodePatchAddress|0x0|UINT64|0x10000005\r