IntelFsp2WrapperPkg: Support FSP Dispatch mode
REF: https://bugzilla.tianocore.org/show_bug.cgi?id=1300 Provides PCD selection for FSP Wrapper to support Dispatch mode. Also PcdFspmBaseAddress should support Dynamic for recovery scenario (multiple FSP-M binary in flash) Test: Verified on internal platform and both API and DISPATCH modes booted successfully. Cc: Jiewen Yao <Jiewen.yao@intel.com> Cc: Desimone Nathaniel L <nathaniel.l.desimone@intel.com> Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Chasel Chiu <chasel.chiu@intel.com>
This commit is contained in:
		@@ -3,7 +3,7 @@
 | 
				
			|||||||
  register TemporaryRamDonePpi to call TempRamExit API, and register MemoryDiscoveredPpi
 | 
					  register TemporaryRamDonePpi to call TempRamExit API, and register MemoryDiscoveredPpi
 | 
				
			||||||
  notify to call FspSiliconInit API.
 | 
					  notify to call FspSiliconInit API.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  Copyright (c) 2014 - 2017, Intel Corporation. All rights reserved.<BR>
 | 
					  Copyright (c) 2014 - 2018, Intel Corporation. All rights reserved.<BR>
 | 
				
			||||||
  This program and the accompanying materials
 | 
					  This program and the accompanying materials
 | 
				
			||||||
  are licensed and made available under the terms and conditions of the BSD License
 | 
					  are licensed and made available under the terms and conditions of the BSD License
 | 
				
			||||||
  which accompanies this distribution.  The full text of the license may be found at
 | 
					  which accompanies this distribution.  The full text of the license may be found at
 | 
				
			||||||
@@ -65,7 +65,7 @@ PeiFspMemoryInit (
 | 
				
			|||||||
  FspHobListPtr = NULL;
 | 
					  FspHobListPtr = NULL;
 | 
				
			||||||
  FspmUpdDataPtr = NULL;
 | 
					  FspmUpdDataPtr = NULL;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  FspmHeaderPtr = (FSP_INFO_HEADER *)FspFindFspHeader (PcdGet32 (PcdFspmBaseAddress));
 | 
					  FspmHeaderPtr = (FSP_INFO_HEADER *) FspFindFspHeader (PcdGet32 (PcdFspmBaseAddress));
 | 
				
			||||||
  DEBUG ((DEBUG_INFO, "FspmHeaderPtr - 0x%x\n", FspmHeaderPtr));
 | 
					  DEBUG ((DEBUG_INFO, "FspmHeaderPtr - 0x%x\n", FspmHeaderPtr));
 | 
				
			||||||
  if (FspmHeaderPtr == NULL) {
 | 
					  if (FspmHeaderPtr == NULL) {
 | 
				
			||||||
    return EFI_DEVICE_ERROR;
 | 
					    return EFI_DEVICE_ERROR;
 | 
				
			||||||
@@ -155,8 +155,20 @@ FspmWrapperInit (
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
  EFI_STATUS           Status;
 | 
					  EFI_STATUS           Status;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  Status = EFI_SUCCESS;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if (FixedPcdGet8 (PcdFspModeSelection) == 1) {
 | 
				
			||||||
    Status = PeiFspMemoryInit ();
 | 
					    Status = PeiFspMemoryInit ();
 | 
				
			||||||
    ASSERT_EFI_ERROR (Status);
 | 
					    ASSERT_EFI_ERROR (Status);
 | 
				
			||||||
 | 
					  } else {
 | 
				
			||||||
 | 
					    PeiServicesInstallFvInfoPpi (
 | 
				
			||||||
 | 
					      NULL,
 | 
				
			||||||
 | 
					      (VOID *)(UINTN) PcdGet32 (PcdFspmBaseAddress),
 | 
				
			||||||
 | 
					      (UINT32)((EFI_FIRMWARE_VOLUME_HEADER *) (UINTN) PcdGet32 (PcdFspmBaseAddress))->FvLength,
 | 
				
			||||||
 | 
					      NULL,
 | 
				
			||||||
 | 
					      NULL
 | 
				
			||||||
 | 
					      );
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  return Status;
 | 
					  return Status;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -6,7 +6,7 @@
 | 
				
			|||||||
# register TemporaryRamDonePpi to call TempRamExit API, and register MemoryDiscoveredPpi
 | 
					# register TemporaryRamDonePpi to call TempRamExit API, and register MemoryDiscoveredPpi
 | 
				
			||||||
# notify to call FspSiliconInit API.
 | 
					# notify to call FspSiliconInit API.
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
#  Copyright (c) 2014 - 2017, Intel Corporation. All rights reserved.<BR>
 | 
					#  Copyright (c) 2014 - 2018, Intel Corporation. All rights reserved.<BR>
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
#  This program and the accompanying materials
 | 
					#  This program and the accompanying materials
 | 
				
			||||||
#  are licensed and made available under the terms and conditions of the BSD License
 | 
					#  are licensed and made available under the terms and conditions of the BSD License
 | 
				
			||||||
@@ -61,6 +61,7 @@
 | 
				
			|||||||
[Pcd]
 | 
					[Pcd]
 | 
				
			||||||
  gIntelFsp2WrapperTokenSpaceGuid.PcdFspmBaseAddress     ## CONSUMES
 | 
					  gIntelFsp2WrapperTokenSpaceGuid.PcdFspmBaseAddress     ## CONSUMES
 | 
				
			||||||
  gIntelFsp2WrapperTokenSpaceGuid.PcdFspmUpdDataAddress  ## CONSUMES
 | 
					  gIntelFsp2WrapperTokenSpaceGuid.PcdFspmUpdDataAddress  ## CONSUMES
 | 
				
			||||||
 | 
					  gIntelFsp2WrapperTokenSpaceGuid.PcdFspModeSelection    ## CONSUMES
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[Sources]
 | 
					[Sources]
 | 
				
			||||||
  FspmWrapperPeim.c
 | 
					  FspmWrapperPeim.c
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -3,7 +3,7 @@
 | 
				
			|||||||
  register TemporaryRamDonePpi to call TempRamExit API, and register MemoryDiscoveredPpi
 | 
					  register TemporaryRamDonePpi to call TempRamExit API, and register MemoryDiscoveredPpi
 | 
				
			||||||
  notify to call FspSiliconInit API.
 | 
					  notify to call FspSiliconInit API.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  Copyright (c) 2014 - 2017, Intel Corporation. All rights reserved.<BR>
 | 
					  Copyright (c) 2014 - 2018, Intel Corporation. All rights reserved.<BR>
 | 
				
			||||||
  This program and the accompanying materials
 | 
					  This program and the accompanying materials
 | 
				
			||||||
  are licensed and made available under the terms and conditions of the BSD License
 | 
					  are licensed and made available under the terms and conditions of the BSD License
 | 
				
			||||||
  which accompanies this distribution.  The full text of the license may be found at
 | 
					  which accompanies this distribution.  The full text of the license may be found at
 | 
				
			||||||
@@ -349,7 +349,17 @@ FspsWrapperPeimEntryPoint (
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
  DEBUG ((DEBUG_INFO, "FspsWrapperPeimEntryPoint\n"));
 | 
					  DEBUG ((DEBUG_INFO, "FspsWrapperPeimEntryPoint\n"));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if (FixedPcdGet8 (PcdFspModeSelection) == 1) {
 | 
				
			||||||
    FspsWrapperInit ();
 | 
					    FspsWrapperInit ();
 | 
				
			||||||
 | 
					  } else {
 | 
				
			||||||
 | 
					    PeiServicesInstallFvInfoPpi (
 | 
				
			||||||
 | 
					      NULL,
 | 
				
			||||||
 | 
					      (VOID *)(UINTN) PcdGet32 (PcdFspsBaseAddress),
 | 
				
			||||||
 | 
					      (UINT32)((EFI_FIRMWARE_VOLUME_HEADER *) (UINTN) PcdGet32 (PcdFspsBaseAddress))->FvLength,
 | 
				
			||||||
 | 
					      NULL,
 | 
				
			||||||
 | 
					      NULL
 | 
				
			||||||
 | 
					      );
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  return EFI_SUCCESS;
 | 
					  return EFI_SUCCESS;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -6,7 +6,7 @@
 | 
				
			|||||||
# register TemporaryRamDonePpi to call TempRamExit API, and register MemoryDiscoveredPpi
 | 
					# register TemporaryRamDonePpi to call TempRamExit API, and register MemoryDiscoveredPpi
 | 
				
			||||||
# notify to call FspSiliconInit API.
 | 
					# notify to call FspSiliconInit API.
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
#  Copyright (c) 2014 - 2017, Intel Corporation. All rights reserved.<BR>
 | 
					#  Copyright (c) 2014 - 2018, Intel Corporation. All rights reserved.<BR>
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
#  This program and the accompanying materials
 | 
					#  This program and the accompanying materials
 | 
				
			||||||
#  are licensed and made available under the terms and conditions of the BSD License
 | 
					#  are licensed and made available under the terms and conditions of the BSD License
 | 
				
			||||||
@@ -68,6 +68,7 @@
 | 
				
			|||||||
[Pcd]
 | 
					[Pcd]
 | 
				
			||||||
  gIntelFsp2WrapperTokenSpaceGuid.PcdFspsBaseAddress     ## CONSUMES
 | 
					  gIntelFsp2WrapperTokenSpaceGuid.PcdFspsBaseAddress     ## CONSUMES
 | 
				
			||||||
  gIntelFsp2WrapperTokenSpaceGuid.PcdFspsUpdDataAddress  ## CONSUMES
 | 
					  gIntelFsp2WrapperTokenSpaceGuid.PcdFspsUpdDataAddress  ## CONSUMES
 | 
				
			||||||
 | 
					  gIntelFsp2WrapperTokenSpaceGuid.PcdFspModeSelection    ## CONSUMES
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[Guids]
 | 
					[Guids]
 | 
				
			||||||
  gFspHobGuid                           ## CONSUMES ## HOB
 | 
					  gFspHobGuid                           ## CONSUMES ## HOB
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -71,9 +71,8 @@
 | 
				
			|||||||
  ## Indicate the PEI memory size platform want to report
 | 
					  ## Indicate the PEI memory size platform want to report
 | 
				
			||||||
  gIntelFsp2WrapperTokenSpaceGuid.PcdPeiRecoveryMinMemSize|0x3000000|UINT32|0x40000005
 | 
					  gIntelFsp2WrapperTokenSpaceGuid.PcdPeiRecoveryMinMemSize|0x3000000|UINT32|0x40000005
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  ## This is the base address of FSP-T/M/S
 | 
					  ## This is the base address of FSP-T
 | 
				
			||||||
  gIntelFsp2WrapperTokenSpaceGuid.PcdFsptBaseAddress|0x00000000|UINT32|0x00000300
 | 
					  gIntelFsp2WrapperTokenSpaceGuid.PcdFsptBaseAddress|0x00000000|UINT32|0x00000300
 | 
				
			||||||
  gIntelFsp2WrapperTokenSpaceGuid.PcdFspmBaseAddress|0x00000000|UINT32|0x00000301
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
  ## This PCD indicates if FSP APIs are skipped from FSP wrapper.<BR><BR>
 | 
					  ## This PCD indicates if FSP APIs are skipped from FSP wrapper.<BR><BR>
 | 
				
			||||||
  #  If a bit is set, that means this FSP API is skipped.<BR>
 | 
					  #  If a bit is set, that means this FSP API is skipped.<BR>
 | 
				
			||||||
@@ -93,7 +92,17 @@
 | 
				
			|||||||
  # @Prompt Skip FSP API from FSP wrapper.
 | 
					  # @Prompt Skip FSP API from FSP wrapper.
 | 
				
			||||||
  gIntelFsp2WrapperTokenSpaceGuid.PcdSkipFspApi|0x00000000|UINT32|0x40000009
 | 
					  gIntelFsp2WrapperTokenSpaceGuid.PcdSkipFspApi|0x00000000|UINT32|0x40000009
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  ## This PCD decides how Wrapper code utilizes FSP
 | 
				
			||||||
 | 
					  # 0: DISPATCH mode (FSP Wrapper will load PeiCore from FSP without calling FSP API)
 | 
				
			||||||
 | 
					  # 1: API mode (FSP Wrapper will call FSP API)
 | 
				
			||||||
 | 
					  #
 | 
				
			||||||
 | 
					  gIntelFsp2WrapperTokenSpaceGuid.PcdFspModeSelection|0x00000001|UINT8|0x4000000A
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[PcdsFixedAtBuild, PcdsPatchableInModule,PcdsDynamic,PcdsDynamicEx]
 | 
					[PcdsFixedAtBuild, PcdsPatchableInModule,PcdsDynamic,PcdsDynamicEx]
 | 
				
			||||||
 | 
					  #
 | 
				
			||||||
 | 
					  ## These are the base address of FSP-M/S
 | 
				
			||||||
 | 
					  #
 | 
				
			||||||
 | 
					  gIntelFsp2WrapperTokenSpaceGuid.PcdFspmBaseAddress|0x00000000|UINT32|0x00001000
 | 
				
			||||||
  gIntelFsp2WrapperTokenSpaceGuid.PcdFspsBaseAddress|0x00000000|UINT32|0x00001001
 | 
					  gIntelFsp2WrapperTokenSpaceGuid.PcdFspsBaseAddress|0x00000000|UINT32|0x00001001
 | 
				
			||||||
  #
 | 
					  #
 | 
				
			||||||
  # To provide flexibility for platform to pre-allocate FSP UPD buffer
 | 
					  # To provide flexibility for platform to pre-allocate FSP UPD buffer
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user