[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
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
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
## 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