diff options
-rw-r--r-- | src/include/usr/isteps/istep_reasoncodes.H | 2 | ||||
-rw-r--r-- | src/include/usr/sbe/sbereasoncodes.H | 1 | ||||
-rw-r--r-- | src/usr/isteps/istep07/call_mss_freq.C | 52 | ||||
-rw-r--r-- | src/usr/sbe/sbe_update.C | 59 |
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; + } } } |