summaryrefslogtreecommitdiffstats
path: root/IntelFsp2Pkg/Library
diff options
context:
space:
mode:
authorYarlagadda, Satya P <satya.p.yarlagadda@intel.com>2016-06-24 10:38:02 +0800
committerJiewen Yao <jiewen.yao@intel.com>2016-06-27 11:47:48 +0800
commit6b5677e1bb62c289fba7848bbfde08220fc37ba1 (patch)
treeedc4bfc9c691cc0a920769f97650be899223c91a /IntelFsp2Pkg/Library
parentfda7cd4f25f831f93b71c3264143618b3cebfb33 (diff)
downloadedk2-6b5677e1bb62c289fba7848bbfde08220fc37ba1.tar.gz
edk2-6b5677e1bb62c289fba7848bbfde08220fc37ba1.tar.bz2
edk2-6b5677e1bb62c289fba7848bbfde08220fc37ba1.zip
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>
Diffstat (limited to 'IntelFsp2Pkg/Library')
-rw-r--r--IntelFsp2Pkg/Library/BaseFspCommonLib/BaseFspCommonLib.inf1
-rw-r--r--IntelFsp2Pkg/Library/BaseFspCommonLib/FspCommonLib.c29
2 files changed, 30 insertions, 0 deletions
diff --git a/IntelFsp2Pkg/Library/BaseFspCommonLib/BaseFspCommonLib.inf b/IntelFsp2Pkg/Library/BaseFspCommonLib/BaseFspCommonLib.inf
index 0b0741b1c6..df8803a036 100644
--- a/IntelFsp2Pkg/Library/BaseFspCommonLib/BaseFspCommonLib.inf
+++ b/IntelFsp2Pkg/Library/BaseFspCommonLib/BaseFspCommonLib.inf
@@ -28,6 +28,7 @@
[LibraryClasses]
BaseMemoryLib
+ FspSwitchStackLib
[Pcd]
gIntelFsp2PkgTokenSpaceGuid.PcdGlobalDataPointerAddress ## CONSUMES
diff --git a/IntelFsp2Pkg/Library/BaseFspCommonLib/FspCommonLib.c b/IntelFsp2Pkg/Library/BaseFspCommonLib/FspCommonLib.c
index 151b189343..0c5f0b306e 100644
--- a/IntelFsp2Pkg/Library/BaseFspCommonLib/FspCommonLib.c
+++ b/IntelFsp2Pkg/Library/BaseFspCommonLib/FspCommonLib.c
@@ -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);
+}