summaryrefslogtreecommitdiffstats
path: root/sbe/sbefw/sbecmdprocessor.C
diff options
context:
space:
mode:
Diffstat (limited to 'sbe/sbefw/sbecmdprocessor.C')
-rw-r--r--sbe/sbefw/sbecmdprocessor.C27
1 files changed, 25 insertions, 2 deletions
diff --git a/sbe/sbefw/sbecmdprocessor.C b/sbe/sbefw/sbecmdprocessor.C
index 72796579..afeeebdb 100644
--- a/sbe/sbefw/sbecmdprocessor.C
+++ b/sbe/sbefw/sbecmdprocessor.C
@@ -17,6 +17,9 @@
#include "sbeerrorcodes.H"
#include "sbeHostUtils.H"
#include "sbeHostMsg.H"
+#include "sbecmdiplcontrol.H"
+#include "sberegaccess.H"
+#include "sbestates.H"
/////////////////////////////////////////////////////////////////////
@@ -55,7 +58,7 @@ void sbeHandlePsuResponse (const uint32_t i_rc)
break;
}
break;
-
+
case SBE_SEC_OS_FAILURE:
// Set primary and secondary status
g_sbeSbe2PsuRespHdr.setStatus(SBE_PRI_GENERIC_EXECUTION_FAILURE, i_rc);
@@ -71,7 +74,7 @@ void sbeHandlePsuResponse (const uint32_t i_rc)
break;
}
break;
-
+
case SBE_SEC_OPERATION_SUCCESSFUL:
// Services code successfully executed the chipOp.
SBE_INFO(SBE_FUNC"PSU ChipOp Done");
@@ -210,6 +213,26 @@ void sbeSyncCommandProcessor_routine(void *i_pArg)
uint32_t l_rc = SBE_SEC_OPERATION_SUCCESSFUL;
uint16_t l_primStatus = SBE_PRI_OPERATION_SUCCESSFUL;
+ // Check the destination bit
+ if(true == SbeRegAccess::theSbeRegAccess().isDestBitRuntime())
+ {
+ SBE_DEBUG(SBE_FUNC"Destination bit tells us to go to runtime");
+ (void)SbeRegAccess::theSbeRegAccess().
+ updateSbeState(SBE_STATE_RUNTIME);
+ }
+
+ else if(true == SbeRegAccess::theSbeRegAccess().isIstepMode())
+ {
+ SBE_DEBUG(SBE_FUNC"Continuous IPL mode not set, will wait for "
+ "commands...");
+ (void)SbeRegAccess::theSbeRegAccess().
+ updateSbeState(SBE_STATE_ISTEP);
+ }
+ else
+ {
+ sbeDoContinuousIpl();
+ }
+
// Wait for new command processing
int l_rcPk = pk_semaphore_pend (
&g_sbeSemCmdProcess, PK_WAIT_FOREVER);
OpenPOWER on IntegriCloud