summaryrefslogtreecommitdiffstats
path: root/IntelFsp2Pkg/FspNotifyPhase
diff options
context:
space:
mode:
Diffstat (limited to 'IntelFsp2Pkg/FspNotifyPhase')
-rw-r--r--IntelFsp2Pkg/FspNotifyPhase/FspNotifyPhasePeim.c59
-rw-r--r--IntelFsp2Pkg/FspNotifyPhase/FspNotifyPhasePeim.inf3
2 files changed, 38 insertions, 24 deletions
diff --git a/IntelFsp2Pkg/FspNotifyPhase/FspNotifyPhasePeim.c b/IntelFsp2Pkg/FspNotifyPhase/FspNotifyPhasePeim.c
index 52435fa0b2..cbea3a7eaa 100644
--- a/IntelFsp2Pkg/FspNotifyPhase/FspNotifyPhasePeim.c
+++ b/IntelFsp2Pkg/FspNotifyPhase/FspNotifyPhasePeim.c
@@ -48,6 +48,12 @@ CONST EFI_PEI_PPI_DESCRIPTOR gEndOfPeiSignalPpi = {
NULL
};
+CONST EFI_PEI_PPI_DESCRIPTOR gFspReadyForNotifyPhasePpi = {
+ (EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST),
+ &gFspReadyForNotifyPhasePpiGuid,
+ NULL
+};
+
/**
This function waits for FSP notify.
@@ -88,13 +94,15 @@ WaitForNotify (
//
FspWaitForNotify ();
- //
- // Should not come here
- //
- while (TRUE) {
- DEBUG ((DEBUG_ERROR, "No FSP API should be called after FSP is DONE!\n"));
- SetFspApiReturnStatus (EFI_UNSUPPORTED);
- Pei2LoaderSwitchStack ();
+ if (GetFspGlobalDataPointer ()->FspMode == FSP_IN_API_MODE) {
+ //
+ // Should not come here
+ //
+ while (TRUE) {
+ DEBUG ((DEBUG_ERROR, "No FSP API should be called after FSP is DONE!\n"));
+ SetFspApiReturnStatus (EFI_UNSUPPORTED);
+ Pei2LoaderSwitchStack ();
+ }
}
return EFI_SUCCESS;
@@ -121,22 +129,27 @@ FspNotifyPhasePeimEntryPoint (
DEBUG ((DEBUG_INFO | DEBUG_INIT, "The entry of FspNotificationPeim\n"));
- //
- // Locate old DXE IPL PPI
- //
- Status = PeiServicesLocatePpi (
- &gEfiDxeIplPpiGuid,
- 0,
- &OldDescriptor,
- &OldDxeIplPpi
- );
- ASSERT_EFI_ERROR (Status);
-
- //
- // Re-install the DXE IPL PPI to wait for notify
- //
- Status = PeiServicesReInstallPpi (OldDescriptor, &mInstallDxeIplPpi);
- ASSERT_EFI_ERROR (Status);
+ if (GetFspGlobalDataPointer ()->FspMode == FSP_IN_API_MODE) {
+ //
+ // Locate old DXE IPL PPI
+ //
+ Status = PeiServicesLocatePpi (
+ &gEfiDxeIplPpiGuid,
+ 0,
+ &OldDescriptor,
+ &OldDxeIplPpi
+ );
+ ASSERT_EFI_ERROR (Status);
+
+ //
+ // Re-install the DXE IPL PPI to wait for notify
+ //
+ Status = PeiServicesReInstallPpi (OldDescriptor, &mInstallDxeIplPpi);
+ ASSERT_EFI_ERROR (Status);
+ } else {
+ Status = PeiServicesInstallPpi (&gFspReadyForNotifyPhasePpi);
+ ASSERT_EFI_ERROR (Status);
+ }
return EFI_SUCCESS;
}
diff --git a/IntelFsp2Pkg/FspNotifyPhase/FspNotifyPhasePeim.inf b/IntelFsp2Pkg/FspNotifyPhase/FspNotifyPhasePeim.inf
index a0bc37580d..b0f6768cfa 100644
--- a/IntelFsp2Pkg/FspNotifyPhase/FspNotifyPhasePeim.inf
+++ b/IntelFsp2Pkg/FspNotifyPhase/FspNotifyPhasePeim.inf
@@ -1,7 +1,7 @@
## @file
# Component information file for the FSP notify phase PEI module.
#
-# Copyright (c) 2016 - 2017, Intel Corporation. All rights reserved.
+# Copyright (c) 2016 - 2018, Intel Corporation. All rights reserved.
# This program and the accompanying materials
# are licensed and made available under the terms and conditions of the BSD License
# which accompanies this distribution. The full text of the license may be found at
@@ -37,6 +37,7 @@
[Ppis]
gEfiDxeIplPpiGuid ## PRODUCES
gEfiEndOfPeiSignalPpiGuid ## PRODUCES
+ gFspReadyForNotifyPhasePpiGuid ## PRODUCES
[Protocols]
gEfiPciEnumerationCompleteProtocolGuid ## PRODUCES