IntelFsp2Pkg-BaseFspCommonLib: Add funtion to return the reset required status

Added new funtion in FSPCommonLib to update the FSP API return status with
the requested return status and return the control to the boot loader.

Cc: Giri P Mudusuru <giri.p.mudusuru@intel.com>
Cc: Jiewen Yao <jiewen.yao@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Satya Yarlagadda <satya.p.yarlagadda@intel.com>
Reviewed-by: Giri P Mudusuru <giri.p.mudusuru@intel.com>
Reviewed-by: Jiewen Yao <jiewen.yao@intel.com>
This commit is contained in:
Yarlagadda, Satya P 2016-06-24 10:38:02 +08:00 committed by Jiewen Yao
parent fda7cd4f25
commit 6b5677e1bb
3 changed files with 41 additions and 0 deletions

View File

@ -309,4 +309,15 @@ GetFspCarSize (
VOID
);
/**
This function updates the return status of the FSP API with requested reset type and returns to Boot Loader.
@param[in] FspResetType Reset type that needs to returned as API return status
**/
VOID
EFIAPI
FspApiReturnStatusReset (
IN UINT32 FspResetType
);
#endif

View File

@ -28,6 +28,7 @@
[LibraryClasses]
BaseMemoryLib
FspSwitchStackLib
[Pcd]
gIntelFsp2PkgTokenSpaceGuid.PcdGlobalDataPointerAddress ## CONSUMES

View File

@ -18,6 +18,7 @@
#include <FspGlobalData.h>
#include <FspEas.h>
#include <FspDataTable.h>
#include <Library/FspSwitchStackLib.h>
#pragma pack(1)
@ -544,3 +545,31 @@ GetFspCarSize (
}
return CarSize;
}
/**
This function updates the return status of the FSP API with requested reset type and returns to Boot Loader.
@param[in] FspResetType Reset type that needs to returned as API return status
**/
VOID
EFIAPI
FspApiReturnStatusReset (
IN UINT32 FspResetType
)
{
volatile BOOLEAN LoopUntilReset;
LoopUntilReset = TRUE;
DEBUG ((DEBUG_INFO, "FSP returning control to Bootloader with reset required return status %x\n",FspResetType));
///
/// Below code is not an infinite loop.The control will go back to API calling function in BootLoader each time BootLoader
/// calls the FSP API without honoring the reset request by FSP
///
do {
SetFspApiReturnStatus ((EFI_STATUS)FspResetType);
Pei2LoaderSwitchStack ();
DEBUG ((DEBUG_ERROR, "!!!ERROR: FSP has requested BootLoader for reset. But BootLoader has not honored the reset\n"));
DEBUG ((DEBUG_ERROR, "!!!ERROR: Please add support in BootLoader to honour the reset request from FSP\n"));
} while (LoopUntilReset);
}