IntelFsp2WrapperPkg: Save FspHobListPtr right after FspMemoryInit exits
Save FspHobList pointer to HOB right after FspMemoryInit exits so that FspHobList pointer is available when performing platform related reset in CallFspWrapperResetSystem(). Some platforms may consume FSP HOBs prior to performing platform related reset. Signed-off-by: Du Lin <du.lin@intel.com>
This commit is contained in:
parent
1cc78814cd
commit
da6504e5cc
|
@ -124,6 +124,17 @@ PeiFspMemoryInit (
|
|||
TimeStampCounterStart = AsmReadTsc ();
|
||||
Status = CallFspMemoryInit (FspmUpdDataPtr, &FspHobListPtr);
|
||||
|
||||
//
|
||||
// FspHobList is not complete at this moment.
|
||||
// Save FspHobList pointer to hob, so that it can be got later
|
||||
//
|
||||
HobData = BuildGuidHob (
|
||||
&gFspHobGuid,
|
||||
sizeof (VOID *)
|
||||
);
|
||||
ASSERT (HobData != NULL);
|
||||
CopyMem (HobData, &FspHobListPtr, sizeof (FspHobListPtr));
|
||||
|
||||
//
|
||||
// Reset the system if FSP API returned FSP_STATUS_RESET_REQUIRED status
|
||||
//
|
||||
|
@ -167,17 +178,6 @@ PeiFspMemoryInit (
|
|||
|
||||
PostFspmHobProcess (FspHobListPtr);
|
||||
|
||||
//
|
||||
// FspHobList is not complete at this moment.
|
||||
// Save FspHobList pointer to hob, so that it can be got later
|
||||
//
|
||||
HobData = BuildGuidHob (
|
||||
&gFspHobGuid,
|
||||
sizeof (VOID *)
|
||||
);
|
||||
ASSERT (HobData != NULL);
|
||||
CopyMem (HobData, &FspHobListPtr, sizeof (FspHobListPtr));
|
||||
|
||||
return Status;
|
||||
}
|
||||
|
||||
|
|
|
@ -38,11 +38,16 @@
|
|||
FspWrapperPlatformLib
|
||||
PeiServicesLib
|
||||
FspWrapperPlatformMultiPhaseLib
|
||||
BaseMemoryLib
|
||||
HobLib
|
||||
|
||||
[Ppis]
|
||||
gEfiPeiReadOnlyVariable2PpiGuid
|
||||
gEdkiiPeiVariablePpiGuid
|
||||
|
||||
[Guids]
|
||||
gFspHobGuid ## CONSUMES
|
||||
|
||||
[Pcd]
|
||||
gIntelFsp2WrapperTokenSpaceGuid.PcdFspmBaseAddress ## CONSUMES
|
||||
gIntelFsp2WrapperTokenSpaceGuid.PcdFspsBaseAddress ## CONSUMES
|
||||
|
|
|
@ -17,6 +17,8 @@
|
|||
#include <Ppi/Variable.h>
|
||||
#include <Library/PeiServicesLib.h>
|
||||
#include <Library/FspWrapperPlatformMultiPhaseLib.h>
|
||||
#include <Library/BaseMemoryLib.h>
|
||||
#include <Library/HobLib.h>
|
||||
|
||||
/**
|
||||
Execute 32-bit FSP API entry code.
|
||||
|
@ -156,6 +158,8 @@ FspWrapperVariableRequestHandler (
|
|||
EDKII_PEI_VARIABLE_PPI *VariablePpi;
|
||||
BOOLEAN WriteVariableSupport;
|
||||
FSP_MULTI_PHASE_COMPLETE_VARIABLE_REQUEST_PARAMS CompleteVariableRequestParams;
|
||||
VOID *GuidHob;
|
||||
VOID *HobData;
|
||||
|
||||
WriteVariableSupport = TRUE;
|
||||
Status = PeiServicesLocatePpi (
|
||||
|
@ -288,6 +292,16 @@ FspWrapperVariableRequestHandler (
|
|||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Refresh FspHobList pointer stored in HOB.
|
||||
//
|
||||
GuidHob = GetFirstGuidHob (&gFspHobGuid);
|
||||
ASSERT (GuidHob != NULL);
|
||||
if (GuidHob != NULL) {
|
||||
HobData = GET_GUID_HOB_DATA (GuidHob);
|
||||
CopyMem (HobData, FspHobListPtr, sizeof (*FspHobListPtr));
|
||||
}
|
||||
|
||||
//
|
||||
// Reset the system if FSP API returned FSP_STATUS_RESET_REQUIRED status
|
||||
//
|
||||
|
@ -321,6 +335,8 @@ FspWrapperMultiPhaseHandler (
|
|||
FSP_MULTI_PHASE_GET_NUMBER_OF_PHASES_PARAMS FspMultiPhaseGetNumber;
|
||||
UINT32 Index;
|
||||
UINT32 NumOfPhases;
|
||||
VOID *GuidHob;
|
||||
VOID *HobData;
|
||||
|
||||
//
|
||||
// Query FSP for the number of phases supported.
|
||||
|
@ -352,6 +368,16 @@ FspWrapperMultiPhaseHandler (
|
|||
FspMultiPhaseParams.MultiPhaseParamPtr = NULL;
|
||||
Status = CallFspMultiPhaseEntry (&FspMultiPhaseParams, FspHobListPtr, ComponentIndex);
|
||||
|
||||
//
|
||||
// Refresh FspHobList pointer stored in HOB.
|
||||
//
|
||||
GuidHob = GetFirstGuidHob (&gFspHobGuid);
|
||||
ASSERT (GuidHob != NULL);
|
||||
if (GuidHob != NULL) {
|
||||
HobData = GET_GUID_HOB_DATA (GuidHob);
|
||||
CopyMem (HobData, FspHobListPtr, sizeof (*FspHobListPtr));
|
||||
}
|
||||
|
||||
if (Status == FSP_STATUS_VARIABLE_REQUEST) {
|
||||
//
|
||||
// call to Variable request handler
|
||||
|
|
Loading…
Reference in New Issue