mirror of https://github.com/acidanthera/audk.git
IntelFsp2WrapperPkg: Implement FSP 2.4 MultiPhase wrapper handlers.
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>
This commit is contained in:
parent
d97ee3244d
commit
96f3efbd99
|
@ -23,6 +23,7 @@
|
|||
#include <Library/PerformanceLib.h>
|
||||
#include <Library/FspWrapperPlatformLib.h>
|
||||
#include <Library/FspWrapperHobProcessLib.h>
|
||||
#include <Library/FspWrapperMultiPhaseProcessLib.h>
|
||||
#include <Library/FspWrapperApiLib.h>
|
||||
#include <Library/FspMeasurementLib.h>
|
||||
|
||||
|
@ -35,6 +36,8 @@
|
|||
#include <Library/FspWrapperApiTestLib.h>
|
||||
#include <FspEas.h>
|
||||
#include <FspStatusCode.h>
|
||||
#include <FspGlobalData.h>
|
||||
#include <Library/FspCommonLib.h>
|
||||
|
||||
extern EFI_GUID gFspHobGuid;
|
||||
|
||||
|
@ -119,25 +122,39 @@ PeiFspMemoryInit (
|
|||
|
||||
TimeStampCounterStart = AsmReadTsc ();
|
||||
Status = CallFspMemoryInit (FspmUpdDataPtr, &FspHobListPtr);
|
||||
// Create hobs after memory initialization and not in temp RAM. Hence passing the recorded timestamp here
|
||||
PERF_START_EX (&gFspApiPerformanceGuid, "EventRec", NULL, TimeStampCounterStart, FSP_STATUS_CODE_MEMORY_INIT | FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_ENTRY);
|
||||
PERF_END_EX (&gFspApiPerformanceGuid, "EventRec", NULL, 0, FSP_STATUS_CODE_MEMORY_INIT | FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_EXIT);
|
||||
DEBUG ((DEBUG_INFO, "Total time spent executing FspMemoryInitApi: %d millisecond\n", DivU64x32 (GetTimeInNanoSecond (AsmReadTsc () - TimeStampCounterStart), 1000000)));
|
||||
|
||||
//
|
||||
// Reset the system if FSP API returned FSP_STATUS_RESET_REQUIRED status
|
||||
//
|
||||
if ((Status >= FSP_STATUS_RESET_REQUIRED_COLD) && (Status <= FSP_STATUS_RESET_REQUIRED_8)) {
|
||||
DEBUG ((DEBUG_INFO, "FspMemoryInitApi requested reset 0x%x\n", Status));
|
||||
DEBUG ((DEBUG_INFO, "FspMemoryInitApi requested reset %r\n", Status));
|
||||
CallFspWrapperResetSystem (Status);
|
||||
}
|
||||
|
||||
if (EFI_ERROR (Status)) {
|
||||
if ((Status != FSP_STATUS_VARIABLE_REQUEST) && EFI_ERROR (Status)) {
|
||||
DEBUG ((DEBUG_ERROR, "ERROR - Failed to execute FspMemoryInitApi(), Status = %r\n", Status));
|
||||
ASSERT_EFI_ERROR (Status);
|
||||
}
|
||||
|
||||
DEBUG ((DEBUG_INFO, "FspMemoryInit status: 0x%x\n", Status));
|
||||
ASSERT_EFI_ERROR (Status);
|
||||
DEBUG ((DEBUG_INFO, "FspMemoryInit status: %r\n", Status));
|
||||
if (Status == FSP_STATUS_VARIABLE_REQUEST) {
|
||||
//
|
||||
// call to Variable request handler
|
||||
//
|
||||
FspWrapperVariableRequestHandler (&FspHobListPtr, FspMultiPhaseMemInitApiIndex);
|
||||
}
|
||||
|
||||
//
|
||||
// See if MultiPhase process is required or not
|
||||
//
|
||||
FspWrapperMultiPhaseHandler (&FspHobListPtr, FspMultiPhaseMemInitApiIndex); // FspM MultiPhase
|
||||
|
||||
//
|
||||
// Create hobs after memory initialization and not in temp RAM. Hence passing the recorded timestamp here
|
||||
//
|
||||
PERF_START_EX (&gFspApiPerformanceGuid, "EventRec", NULL, TimeStampCounterStart, FSP_STATUS_CODE_MEMORY_INIT | FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_ENTRY);
|
||||
PERF_END_EX (&gFspApiPerformanceGuid, "EventRec", NULL, 0, FSP_STATUS_CODE_MEMORY_INIT | FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_EXIT);
|
||||
DEBUG ((DEBUG_INFO, "Total time spent executing FspMemoryInitApi: %d millisecond\n", DivU64x32 (GetTimeInNanoSecond (AsmReadTsc () - TimeStampCounterStart), 1000000)));
|
||||
|
||||
Status = TestFspMemoryInitApiOutput (FspmUpdDataPtr, &FspHobListPtr);
|
||||
if (EFI_ERROR (Status)) {
|
||||
|
|
|
@ -46,6 +46,7 @@
|
|||
FspWrapperApiLib
|
||||
FspWrapperApiTestLib
|
||||
FspMeasurementLib
|
||||
FspWrapperMultiPhaseProcessLib
|
||||
|
||||
[Packages]
|
||||
MdePkg/MdePkg.dec
|
||||
|
|
|
@ -21,6 +21,7 @@
|
|||
#include <Library/MemoryAllocationLib.h>
|
||||
#include <Library/FspWrapperPlatformLib.h>
|
||||
#include <Library/FspWrapperHobProcessLib.h>
|
||||
#include <Library/FspWrapperMultiPhaseProcessLib.h>
|
||||
#include <Library/TimerLib.h>
|
||||
#include <Library/PerformanceLib.h>
|
||||
#include <Library/FspWrapperApiLib.h>
|
||||
|
@ -36,6 +37,7 @@
|
|||
#include <Library/FspWrapperApiTestLib.h>
|
||||
#include <FspEas.h>
|
||||
#include <FspStatusCode.h>
|
||||
#include <FspGlobalData.h>
|
||||
|
||||
extern EFI_PEI_NOTIFY_DESCRIPTOR mS3EndOfPeiNotifyDesc;
|
||||
extern EFI_GUID gFspHobGuid;
|
||||
|
@ -318,23 +320,36 @@ PeiMemoryDiscoveredNotify (
|
|||
TimeStampCounterStart = AsmReadTsc ();
|
||||
PERF_START_EX (&gFspApiPerformanceGuid, "EventRec", NULL, 0, FSP_STATUS_CODE_SILICON_INIT | FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_ENTRY);
|
||||
Status = CallFspSiliconInit ((VOID *)FspsUpdDataPtr);
|
||||
PERF_END_EX (&gFspApiPerformanceGuid, "EventRec", NULL, 0, FSP_STATUS_CODE_SILICON_INIT | FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_EXIT);
|
||||
DEBUG ((DEBUG_INFO, "Total time spent executing FspSiliconInitApi: %d millisecond\n", DivU64x32 (GetTimeInNanoSecond (AsmReadTsc () - TimeStampCounterStart), 1000000)));
|
||||
|
||||
//
|
||||
// Reset the system if FSP API returned FSP_STATUS_RESET_REQUIRED status
|
||||
//
|
||||
if ((Status >= FSP_STATUS_RESET_REQUIRED_COLD) && (Status <= FSP_STATUS_RESET_REQUIRED_8)) {
|
||||
DEBUG ((DEBUG_INFO, "FspSiliconInitApi requested reset 0x%x\n", Status));
|
||||
DEBUG ((DEBUG_INFO, "FspSiliconInitApi requested reset %r\n", Status));
|
||||
CallFspWrapperResetSystem (Status);
|
||||
}
|
||||
|
||||
if (EFI_ERROR (Status)) {
|
||||
if ((Status != FSP_STATUS_VARIABLE_REQUEST) && EFI_ERROR (Status)) {
|
||||
DEBUG ((DEBUG_ERROR, "ERROR - Failed to execute FspSiliconInitApi(), Status = %r\n", Status));
|
||||
ASSERT_EFI_ERROR (Status);
|
||||
}
|
||||
|
||||
DEBUG ((DEBUG_INFO, "FspSiliconInit status: 0x%x\n", Status));
|
||||
ASSERT_EFI_ERROR (Status);
|
||||
DEBUG ((DEBUG_INFO, "FspSiliconInit status: %r\n", Status));
|
||||
|
||||
if (Status == FSP_STATUS_VARIABLE_REQUEST) {
|
||||
//
|
||||
// call to Variable request handler
|
||||
//
|
||||
FspWrapperVariableRequestHandler (&FspHobListPtr, FspMultiPhaseSiInitApiIndex);
|
||||
}
|
||||
|
||||
//
|
||||
// See if MultiPhase process is required or not
|
||||
//
|
||||
FspWrapperMultiPhaseHandler (&FspHobListPtr, FspMultiPhaseSiInitApiIndex); // FspS MultiPhase
|
||||
|
||||
PERF_END_EX (&gFspApiPerformanceGuid, "EventRec", NULL, 0, FSP_STATUS_CODE_SILICON_INIT | FSP_STATUS_CODE_COMMON_CODE | FSP_STATUS_CODE_API_EXIT);
|
||||
DEBUG ((DEBUG_INFO, "Total time spent executing FspSiliconInitApi: %d millisecond\n", DivU64x32 (GetTimeInNanoSecond (AsmReadTsc () - TimeStampCounterStart), 1000000)));
|
||||
|
||||
Status = TestFspSiliconInitApiOutput ((VOID *)NULL);
|
||||
if (RETURN_ERROR (Status)) {
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
# register TemporaryRamDonePpi to call TempRamExit API, and register MemoryDiscoveredPpi
|
||||
# notify to call FspSiliconInit API.
|
||||
#
|
||||
# Copyright (c) 2014 - 2021, Intel Corporation. All rights reserved.<BR>
|
||||
# Copyright (c) 2014 - 2022, Intel Corporation. All rights reserved.<BR>
|
||||
#
|
||||
# SPDX-License-Identifier: BSD-2-Clause-Patent
|
||||
#
|
||||
|
@ -46,6 +46,7 @@
|
|||
FspWrapperApiLib
|
||||
FspWrapperApiTestLib
|
||||
FspMeasurementLib
|
||||
FspWrapperMultiPhaseProcessLib
|
||||
|
||||
[Packages]
|
||||
MdePkg/MdePkg.dec
|
||||
|
|
Loading…
Reference in New Issue