summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/include/usr/isteps/istep_reasoncodes.H2
-rw-r--r--src/include/usr/sbe/sbereasoncodes.H1
-rw-r--r--src/usr/isteps/istep07/call_mss_freq.C52
-rw-r--r--src/usr/sbe/sbe_update.C59
4 files changed, 90 insertions, 24 deletions
diff --git a/src/include/usr/isteps/istep_reasoncodes.H b/src/include/usr/isteps/istep_reasoncodes.H
index 256e6bbcf..201684a82 100644
--- a/src/include/usr/isteps/istep_reasoncodes.H
+++ b/src/include/usr/isteps/istep_reasoncodes.H
@@ -59,6 +59,7 @@ namespace ISTEP
MOD_SBE_THRESHOLD_FSM = 0x17,
MOD_SBE_EXTRACT_RC_HANDLER = 0x18,
MOD_HANDLE_SBE_REG_VALUE = 0x19,
+ MOD_SBE_PERFORM_UPDATE_CHECK = 0x1A,
};
/**
@@ -116,6 +117,7 @@ namespace ISTEP
RC_HWSV_COLLECT_SBE_RC = ISTEP_COMP_ID | 0x2F,
RC_PROC_EXTRACT_SBE_MAIN_ERROR = ISTEP_COMP_ID | 0x30,
RC_SBE_BOOTED_UNEXPECTED_SIDE_UPD = ISTEP_COMP_ID | 0x31,
+ RC_SBE_UPDATE_IN_MPIPL = ISTEP_COMP_ID | 0x32,
};
};
diff --git a/src/include/usr/sbe/sbereasoncodes.H b/src/include/usr/sbe/sbereasoncodes.H
index 335de7f71..57c21ce1d 100644
--- a/src/include/usr/sbe/sbereasoncodes.H
+++ b/src/include/usr/sbe/sbereasoncodes.H
@@ -104,6 +104,7 @@ enum sbeReasonCode
ERROR_FROM_XIP_DELETE = SBE_COMP_ID | 0x18,
ERROR_FROM_XIP_FIND = SBE_COMP_ID | 0x19,
SBE_MISMATCHED_HW_KEY_HASH = SBE_COMP_ID | 0x1A,
+ SBE_UPDATE_DURING_MPIPL = SBE_COMP_ID | 0x1B,
};
}; // end SBE
diff --git a/src/usr/isteps/istep07/call_mss_freq.C b/src/usr/isteps/istep07/call_mss_freq.C
index a30592847..252c82d43 100644
--- a/src/usr/isteps/istep07/call_mss_freq.C
+++ b/src/usr/isteps/istep07/call_mss_freq.C
@@ -72,6 +72,7 @@ void* call_mss_freq( void *io_pArgs )
{
IStepError l_StepError;
errlHndl_t l_err = NULL;
+
TRACDCOMP( ISTEPS_TRACE::g_trac_isteps_trace, "call_mss_freq entry" );
TARGETING::TargetHandleList l_membufTargetList;
@@ -201,23 +202,52 @@ void* call_mss_freq( void *io_pArgs )
" Original Nest: %d New Nest: %d"
" Original syncMode: %d New syncMode: %d",
l_originalNest, l_newNest, l_bootSyncMode, l_mcSyncMode );
+ if(l_sys->getAttr<TARGETING::ATTR_IS_MPIPL_HB>() == true)
+ {
- TARGETING::setFrequencyAttributes(l_sys,
- l_newNest);
-
- l_err = SBE::updateProcessorSbeSeeproms();
+ TRACFCOMP( ISTEPS_TRACE::g_trac_isteps_trace,
+ "Error: SBE update detected in MPIPL");
+
+ /*@
+ * @errortype
+ * @moduleid MOD_SBE_PERFORM_UPDATE_CHECK
+ * @reasoncode RC_SBE_UPDATE_IN_MPIPL
+ * @userdata1[0:31] original mc sync mode
+ * @userdata1[32:63] new mc sync mode
+ * @userdata2[0:31] original nest frequency
+ * @userdata2[32:63] new nest frequency
+ * @devdesc SBE cannot be reset during MPIPL
+ * @custdesc Illegal action during boot
+ */
+ l_err = new ErrlEntry(ERRL_SEV_INFORMATIONAL,
+ MOD_SBE_PERFORM_UPDATE_CHECK,
+ RC_SBE_UPDATE_IN_MPIPL,
+ TWO_UINT32_TO_UINT64(
+ TO_UINT32(l_bootSyncMode),
+ TO_UINT32(l_mcSyncMode)),
+ TWO_UINT32_TO_UINT64(
+ l_originalNest, l_newNest));
- if( l_err )
+ l_StepError.addErrorDetails( l_err );
+ errlCommit( l_err, ISTEP_COMP_ID );
+ }
+ else
{
- TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace,
+ TARGETING::setFrequencyAttributes(l_sys,
+ l_newNest);
+ l_err = SBE::updateProcessorSbeSeeproms();
+ if( l_err )
+ {
+ TRACFCOMP(ISTEPS_TRACE::g_trac_isteps_trace,
"call_mss_freq.C - Error calling updateProcessorSbeSeeproms");
- // Create IStep error log and cross reference to error
- // that occurred
- l_StepError.addErrorDetails( l_err );
+ // Create IStep error log and cross reference to error
+ // that occurred
+ l_StepError.addErrorDetails( l_err );
- // Commit Error
- errlCommit( l_err, ISTEP_COMP_ID );
+ // Commit Error
+ errlCommit( l_err, ISTEP_COMP_ID );
+ }
}
}
}
diff --git a/src/usr/sbe/sbe_update.C b/src/usr/sbe/sbe_update.C
index 6fe32951d..a5150abce 100644
--- a/src/usr/sbe/sbe_update.C
+++ b/src/usr/sbe/sbe_update.C
@@ -377,25 +377,58 @@ namespace SBE
/**********************************************/
if ((err == NULL) && (sbeState.update_actions & DO_UPDATE))
{
- err = performUpdateActions(sbeState);
- if (err)
+ // If update is needed, check to see if it's in MPIPL
+ if(sys->getAttr<TARGETING::ATTR_IS_MPIPL_HB>() == true)
{
TRACFCOMP( g_trac_sbe,
- INFO_MRK"updateProcessorSbeSeeproms(): "
- "performUpdateActions() Failed "
- "rc=0x%.4X, Target UID=0x%X",
- err->reasonCode(),
- TARGETING::get_huid(sbeState.target));
-
- // Don't break - handle error at the end of the loop,
+ INFO_MRK"updateProcessorSbeSeeproms(): "
+ "Skip SBE update during MPIPL "
+ ", Target UID=0x%X",
+ TARGETING::get_huid(sbeState.target));
+ /*@
+ * @errortype
+ * @moduleid SBE_UPDATE_SEEPROMS
+ * @reasoncode SBE_UPDATE_DURING_MPIPL
+ * @userdata1 Target huid id
+ * @userdata2[0:31] Update actions
+ * @userdata2[32:63] SEEPROM side to update
+ * @devdesc SBE update is being skipped
+ * during MPIPL
+ * @custdesc SBE is not being updated
+ */
+ err = new ErrlEntry(ERRL_SEV_INFORMATIONAL,
+ SBE_UPDATE_SEEPROMS,
+ SBE_UPDATE_DURING_MPIPL,
+ TARGETING::get_huid(sbeState.target),
+ TWO_UINT32_TO_UINT64(
+ TO_UINT32(sbeState.update_actions),
+ TO_UINT32(sbeState.seeprom_side_to_update)
+ )
+ );
+ err->collectTrace(SBE_COMP_NAME);
}
else
{
- // Target updated without failure, so set IPL_RESTART
- // flag, if necessary
- if (sbeState.update_actions & IPL_RESTART)
+ err = performUpdateActions(sbeState);
+ if (err)
+ {
+ TRACFCOMP( g_trac_sbe,
+ INFO_MRK"updateProcessorSbeSeeproms(): "
+ "performUpdateActions() Failed "
+ "rc=0x%.4X, Target UID=0x%X",
+ err->reasonCode(),
+ TARGETING::get_huid(sbeState.target));
+
+ //Don't break - handle error at the end of the loop,
+ }
+ else
{
- l_restartNeeded = true;
+ //Target updated without failure, so set IPL_RESTART
+ //flag, if necessary
+ if (sbeState.update_actions & IPL_RESTART)
+ {
+ l_restartNeeded = true;
+ }
}
}
OpenPOWER on IntegriCloud