summaryrefslogtreecommitdiffstats
path: root/src/usr/isteps/expupd/expupd.C
diff options
context:
space:
mode:
Diffstat (limited to 'src/usr/isteps/expupd/expupd.C')
-rw-r--r--src/usr/isteps/expupd/expupd.C35
1 files changed, 32 insertions, 3 deletions
diff --git a/src/usr/isteps/expupd/expupd.C b/src/usr/isteps/expupd/expupd.C
index 74231b5a5..3f63ac191 100644
--- a/src/usr/isteps/expupd/expupd.C
+++ b/src/usr/isteps/expupd/expupd.C
@@ -132,6 +132,10 @@ void updateAll(IStepError& o_stepError)
TARGETING::TargetHandleList l_ocmbTargetList;
getAllChips(l_ocmbTargetList, TYPE_OCMB_CHIP);
+ Target* l_pTopLevel = nullptr;
+ targetService().getTopLevelTarget( l_pTopLevel );
+ assert(l_pTopLevel, "expupd::updateAll: no TopLevelTarget");
+
TRACFCOMP(g_trac_expupd, ENTER_MRK
"updateAll: %d ocmb chips found",
l_ocmbTargetList.size());
@@ -144,6 +148,18 @@ void updateAll(IStepError& o_stepError)
break;
}
+ // Check if we have any overrides to force our behavior
+ auto l_forced_behavior =
+ l_pTopLevel->getAttr<TARGETING::ATTR_OCMB_FW_UPDATE_OVERRIDE>();
+
+ // Exit now if told to
+ if( TARGETING::OCMB_FW_UPDATE_BEHAVIOR_PREVENT_UPDATE
+ == l_forced_behavior )
+ {
+ TRACFCOMP(g_trac_expupd, INFO_MRK "Skipping update due to override (PREVENT_UPDATE)");
+ break;
+ }
+
// Read explorer fw image from pnor
PNOR::SectionInfo_t l_pnorSectionInfo;
rawImageInfo_t l_imageInfo;
@@ -269,6 +285,14 @@ void updateAll(IStepError& o_stepError)
"updateAll: SHA512 hash for ocmb[0x%08x]"
" matches SHA512 hash of PNOR image.",
TARGETING::get_huid(l_ocmbTarget));
+
+ // Add every OCMB to the update list if told to
+ if( TARGETING::OCMB_FW_UPDATE_BEHAVIOR_FORCE_UPDATE
+ == l_forced_behavior )
+ {
+ TRACFCOMP(g_trac_expupd, INFO_MRK "Forcing update due to override (FORCE_UPDATE)");
+ l_flashUpdateList.push_back(l_ocmbTarget);
+ }
}
}
@@ -276,6 +300,14 @@ void updateAll(IStepError& o_stepError)
"updateAll: updating flash for %d OCMB chips",
l_flashUpdateList.size());
+ // Exit now if we were asked to only do the check portion
+ if( TARGETING::OCMB_FW_UPDATE_BEHAVIOR_CHECK_BUT_NO_UPDATE
+ == l_forced_behavior )
+ {
+ TRACFCOMP(g_trac_expupd, INFO_MRK "Skipping update due to override (CHECK_BUT_NO_UPDATE)");
+ break;
+ }
+
// update each explorer in the list of chips needing updates
for(const auto & l_ocmb : l_flashUpdateList)
{
@@ -344,9 +376,6 @@ void updateAll(IStepError& o_stepError)
{
TRACFCOMP(g_trac_expupd,
"updateAll: OCMB chip(s) was updated. Requesting reboot...");
- Target* l_pTopLevel = nullptr;
- targetService().getTopLevelTarget( l_pTopLevel );
- assert(l_pTopLevel, "expupd::updateAll: no TopLevelTarget");
auto l_reconfigAttr =
l_pTopLevel->getAttr<TARGETING::ATTR_RECONFIGURE_LOOP>();
l_reconfigAttr |= RECONFIGURE_LOOP_OCMB_FW_UPDATE;
OpenPOWER on IntegriCloud