REF: https://bugzilla.tianocore.org/show_bug.cgi?id=3999 FspResetType will be either 32bit or 64 bit basing on the build type.
Cc: Nate DeSimone <nathaniel.l.desim...@intel.com> Cc: Star Zeng <star.z...@intel.com> Signed-off-by: Chasel Chiu <chasel.c...@intel.com> --- IntelFsp2Pkg/Library/BaseFspCommonLib/FspCommonLib.c | 10 +++++----- IntelFsp2Pkg/Include/FspEas/FspApi.h | 61 +++++++++++++++++++++++++++++++++---------------------------- IntelFsp2Pkg/Include/Library/FspCommonLib.h | 2 +- IntelFsp2Pkg/Include/Library/FspSwitchStackLib.h | 4 ++-- 4 files changed, 41 insertions(+), 36 deletions(-) diff --git a/IntelFsp2Pkg/Library/BaseFspCommonLib/FspCommonLib.c b/IntelFsp2Pkg/Library/BaseFspCommonLib/FspCommonLib.c index 67e08a9e7e..a22b0e7825 100644 --- a/IntelFsp2Pkg/Library/BaseFspCommonLib/FspCommonLib.c +++ b/IntelFsp2Pkg/Library/BaseFspCommonLib/FspCommonLib.c @@ -200,13 +200,13 @@ SetFspCoreStackPointer ( UINT32 StackContextLen; FspData = GetFspGlobalDataPointer (); - StackContextLen = sizeof(CONTEXT_STACK) / sizeof(UINTN); + StackContextLen = sizeof (CONTEXT_STACK) / sizeof (UINTN); // // Reserve space for the ContinuationFunc two parameters // - OldStack = (UINTN *)FspData->CoreStack; - NewStack = (UINTN *)NewStackTop - StackContextLen - 2; + OldStack = (UINTN *)FspData->CoreStack; + NewStack = (UINTN *)NewStackTop - StackContextLen - 2; FspData->CoreStack = (UINTN)NewStack; while (StackContextLen-- != 0) { *NewStack++ = *OldStack++; @@ -533,7 +533,7 @@ SetPhaseStatusCode ( VOID EFIAPI FspApiReturnStatusReset ( - IN UINT32 FspResetType + IN EFI_STATUS FspResetType ) { volatile BOOLEAN LoopUntilReset; @@ -546,7 +546,7 @@ FspApiReturnStatusReset ( /// calls the FSP API without honoring the reset request by FSP /// do { - SetFspApiReturnStatus ((EFI_STATUS)FspResetType); + SetFspApiReturnStatus (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 honor the reset request from FSP\n")); diff --git a/IntelFsp2Pkg/Include/FspEas/FspApi.h b/IntelFsp2Pkg/Include/FspEas/FspApi.h index b36bc2b9ae..5e47f475db 100644 --- a/IntelFsp2Pkg/Include/FspEas/FspApi.h +++ b/IntelFsp2Pkg/Include/FspEas/FspApi.h @@ -11,19 +11,24 @@ #define _FSP_API_H_ #include <Pi/PiStatusCode.h> +#include <Base.h> /// /// FSP Reset Status code -/// These are defined in FSP EAS v2.0 section 11.2.2 - OEM Status Code +/// These are defined in FSP EAS v2.4 section 13.2.2 - OEM Status Code /// @{ -#define FSP_STATUS_RESET_REQUIRED_COLD 0x40000001 -#define FSP_STATUS_RESET_REQUIRED_WARM 0x40000002 -#define FSP_STATUS_RESET_REQUIRED_3 0x40000003 -#define FSP_STATUS_RESET_REQUIRED_4 0x40000004 -#define FSP_STATUS_RESET_REQUIRED_5 0x40000005 -#define FSP_STATUS_RESET_REQUIRED_6 0x40000006 -#define FSP_STATUS_RESET_REQUIRED_7 0x40000007 -#define FSP_STATUS_RESET_REQUIRED_8 0x40000008 + +#define ENCODE_RESET_REQUEST(ResetType) \ + ((EFI_STATUS)((MAX_BIT >> 1) | (ResetType))) +#define FSP_STATUS_RESET_REQUIRED_COLD ENCODE_RESET_REQUEST(1) +#define FSP_STATUS_RESET_REQUIRED_WARM ENCODE_RESET_REQUEST(2) +#define FSP_STATUS_RESET_REQUIRED_3 ENCODE_RESET_REQUEST(3) +#define FSP_STATUS_RESET_REQUIRED_4 ENCODE_RESET_REQUEST(4) +#define FSP_STATUS_RESET_REQUIRED_5 ENCODE_RESET_REQUEST(5) +#define FSP_STATUS_RESET_REQUIRED_6 ENCODE_RESET_REQUEST(6) +#define FSP_STATUS_RESET_REQUIRED_7 ENCODE_RESET_REQUEST(7) +#define FSP_STATUS_RESET_REQUIRED_8 ENCODE_RESET_REQUEST(8) +#define FSP_STATUS_VARIABLE_REQUEST ENCODE_RESET_REQUEST(10) /// @} /// @@ -135,18 +140,18 @@ typedef struct { /// /// Revision of the structure is 2 for this version of the specification. /// - UINT8 Revision; - UINT8 Reserved[3]; + UINT8 Revision; + UINT8 Reserved[3]; /// /// Length of the structure in bytes. The current value for this field is 32. /// - UINT32 Length; + UINT32 Length; /// /// FspDebugHandler Optional debug handler for the bootloader to receive debug messages /// occurring during FSP execution. /// - EFI_PHYSICAL_ADDRESS FspDebugHandler; - UINT8 Reserved1[16]; + EFI_PHYSICAL_ADDRESS FspDebugHandler; + UINT8 Reserved1[16]; } FSPT_ARCH2_UPD; /// @@ -197,37 +202,37 @@ typedef struct { /// /// Revision of the structure is 3 for this version of the specification. /// - UINT8 Revision; - UINT8 Reserved[3]; + UINT8 Revision; + UINT8 Reserved[3]; /// /// Length of the structure in bytes. The current value for this field is 64. /// - UINT32 Length; + UINT32 Length; /// /// Pointer to the temporary stack base address to be /// consumed inside FspMemoryInit() API. /// - EFI_PHYSICAL_ADDRESS StackBase; + EFI_PHYSICAL_ADDRESS StackBase; /// /// Temporary stack size to be consumed inside /// FspMemoryInit() API. /// - UINT64 StackSize; + UINT64 StackSize; /// /// Size of memory to be reserved by FSP below "top /// of low usable memory" for bootloader usage. /// - UINT32 BootLoaderTolumSize; + UINT32 BootLoaderTolumSize; /// /// Current boot mode. /// - UINT32 BootMode; + UINT32 BootMode; /// /// Optional event handler for the bootloader to be informed of events occurring during FSP execution. /// This value is only valid if Revision is >= 2. /// - EFI_PHYSICAL_ADDRESS FspEventHandler; - UINT8 Reserved1[24]; + EFI_PHYSICAL_ADDRESS FspEventHandler; + UINT8 Reserved1[24]; } FSPM_ARCH2_UPD; /// @@ -266,18 +271,18 @@ typedef struct { /// /// Revision of the structure is 2 for this version of the specification. /// - UINT8 Revision; - UINT8 Reserved[3]; + UINT8 Revision; + UINT8 Reserved[3]; /// /// Length of the structure in bytes. The current value for this field is 32. /// - UINT32 Length; + UINT32 Length; /// /// FspEventHandler Optional event handler for the bootloader to be informed of events /// occurring during FSP execution. /// - EFI_PHYSICAL_ADDRESS FspEventHandler; - UINT8 Reserved1[16]; + EFI_PHYSICAL_ADDRESS FspEventHandler; + UINT8 Reserved1[16]; } FSPS_ARCH2_UPD; /// diff --git a/IntelFsp2Pkg/Include/Library/FspCommonLib.h b/IntelFsp2Pkg/Include/Library/FspCommonLib.h index b5e38568e2..13b67f8822 100644 --- a/IntelFsp2Pkg/Include/Library/FspCommonLib.h +++ b/IntelFsp2Pkg/Include/Library/FspCommonLib.h @@ -302,7 +302,7 @@ SetPhaseStatusCode ( VOID EFIAPI FspApiReturnStatusReset ( - IN UINT32 FspResetType + IN EFI_STATUS FspResetType ); #endif diff --git a/IntelFsp2Pkg/Include/Library/FspSwitchStackLib.h b/IntelFsp2Pkg/Include/Library/FspSwitchStackLib.h index f049361d78..ff66e48ae2 100644 --- a/IntelFsp2Pkg/Include/Library/FspSwitchStackLib.h +++ b/IntelFsp2Pkg/Include/Library/FspSwitchStackLib.h @@ -30,7 +30,7 @@ **/ -UINT32 +EFI_STATUS EFIAPI Pei2LoaderSwitchStack ( VOID @@ -46,7 +46,7 @@ Pei2LoaderSwitchStack ( **/ -UINT32 +EFI_STATUS EFIAPI Loader2PeiSwitchStack ( VOID -- 2.35.0.windows.1 -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#91518): https://edk2.groups.io/g/devel/message/91518 Mute This Topic: https://groups.io/mt/92476843/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-