diff options
| author | Matthew Raybuck <matthew.raybuck@ibm.com> | 2019-08-14 08:34:10 -0500 |
|---|---|---|
| committer | Daniel M Crowell <dcrowell@us.ibm.com> | 2019-08-19 13:07:40 -0500 |
| commit | a2118008da065e69e8eab937bf725ea092e6f742 (patch) | |
| tree | 4ab9016e23fc9483e6f59525ec9b31c715e20cfb /src/usr/isteps | |
| parent | e28bd663f06590d1cea6e5cb8c53c1f47f1a7be8 (diff) | |
| download | blackbird-hostboot-a2118008da065e69e8eab937bf725ea092e6f742.tar.gz blackbird-hostboot-a2118008da065e69e8eab937bf725ea092e6f742.zip | |
Add attribute to force/skip BPM updates
Adds a new attribute ATTR_BPM_UPDATE_OVERRIDE to override the default
update behavior. Updates can be forced, skipped, and the firmware and
config portion of the updates can be individually forced or skipped.
Change-Id: I1d50ab60d18a0511466f1551108755ef9f70cf35
RTC:212448
Reviewed-on: http://rchgit01.rchland.ibm.com/gerrit1/82263
Reviewed-by: Roland Veloz <rveloz@us.ibm.com>
Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com>
Reviewed-by: Christian R Geddes <crgeddes@us.ibm.com>
Tested-by: Jenkins OP Build CI <op-jenkins+hostboot@us.ibm.com>
Tested-by: Jenkins OP HW <op-hw-jenkins+hostboot@us.ibm.com>
Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com>
Reviewed-by: Daniel M Crowell <dcrowell@us.ibm.com>
Diffstat (limited to 'src/usr/isteps')
| -rw-r--r-- | src/usr/isteps/nvdimm/bpm_update.C | 79 |
1 files changed, 72 insertions, 7 deletions
diff --git a/src/usr/isteps/nvdimm/bpm_update.C b/src/usr/isteps/nvdimm/bpm_update.C index 445ad0b63..09b9adf4c 100644 --- a/src/usr/isteps/nvdimm/bpm_update.C +++ b/src/usr/isteps/nvdimm/bpm_update.C @@ -33,10 +33,12 @@ #include <sys/time.h> #include <hbotcompid.H> #include <trace/interface.H> -#include <targeting/common/targetservice.H> #include <initservice/istepdispatcherif.H> #include <isteps/nvdimm/bpmreasoncodes.H> +#include <targeting/common/targetservice.H> +#include <attributeenums.H> + namespace NVDIMM { namespace BPM @@ -847,6 +849,17 @@ errlHndl_t Bpm::runUpdate(BpmFirmwareLidImage i_fwImage, break; } + // Get the sys target to check for attribute overrides. + TARGETING::Target* sys = nullptr; + TARGETING::targetService().getTopLevelTarget(sys); + + auto updateOverride = + sys->getAttr<TARGETING::ATTR_BPM_UPDATE_OVERRIDE>(); + + // Determine if updates are necessary and save that decision to + // influence attribute override behavior. + bool shouldPerformUpdate = true; + TRACFCOMP(g_trac_bpm, INFO_MRK"Bpm::runUpdate(): " "Firmware version on the BPM 0x%.4X, " "Firmware version of image 0x%.4X.", @@ -854,6 +867,21 @@ errlHndl_t Bpm::runUpdate(BpmFirmwareLidImage i_fwImage, if (i_fwImage.getVersion() == bpmFwVersion) { + shouldPerformUpdate = false; + if (updateOverride == TARGETING::BPM_UPDATE_BEHAVIOR_DEFAULT_ALL) + { + TRACFCOMP(g_trac_bpm, INFO_MRK"Bpm::runUpdate(): " + "Firmware version on the BPM matches the version in " + "the image. Skipping update."); + break; + } + } + + if (updateOverride == TARGETING::BPM_UPDATE_BEHAVIOR_SKIP_ALL) + { + TRACFCOMP(g_trac_bpm, INFO_MRK"Bpm::runUpdate(): " + "ATTR_BPM_UPDATE_OVERRIDE set to SKIP_ALL. " + "Skipping update."); break; } @@ -876,16 +904,53 @@ errlHndl_t Bpm::runUpdate(BpmFirmwareLidImage i_fwImage, break; } - errl = runConfigUpdates(i_configImage); - if (errl != nullptr) + uint16_t configOverrideFlag = (updateOverride & 0x00FF); + if ((shouldPerformUpdate + || (configOverrideFlag == TARGETING::BPM_UPDATE_BEHAVIOR_FORCE_CONFIG)) + && !(configOverrideFlag == TARGETING::BPM_UPDATE_BEHAVIOR_SKIP_CONFIG)) { - break; + if (configOverrideFlag == TARGETING::BPM_UPDATE_BEHAVIOR_FORCE_CONFIG) + { + TRACFCOMP(g_trac_bpm, INFO_MRK"Bpm::runUpdate(): " + "ATTR_BPM_UPDATE_OVERRIDE set to force config " + "portion of BPM updates. Running Config Update..."); + } + errl = runConfigUpdates(i_configImage); + if (errl != nullptr) + { + break; + } + } + else + { + TRACFCOMP(g_trac_bpm, INFO_MRK"Bpm::runUpdate(): " + "ATTR_BPM_UPDATE_OVERRIDE set to skip config " + "portion of BPM updates. Skipping Config Update..."); } - errl = runFirmwareUpdates(i_fwImage); - if (errl != nullptr) + uint16_t firmwareOverrideFlag = (updateOverride & 0xFF00); + if ((shouldPerformUpdate + || (firmwareOverrideFlag == TARGETING::BPM_UPDATE_BEHAVIOR_FORCE_FW)) + && !(firmwareOverrideFlag == TARGETING::BPM_UPDATE_BEHAVIOR_SKIP_FW)) { - break; + if (firmwareOverrideFlag == TARGETING::BPM_UPDATE_BEHAVIOR_FORCE_FW) + { + TRACFCOMP(g_trac_bpm, INFO_MRK"Bpm::runUpdate(): " + "ATTR_BPM_UPDATE_OVERRIDE set to force firmware " + "portion of BPM updates. Running Firmware Update..."); + } + + errl = runFirmwareUpdates(i_fwImage); + if (errl != nullptr) + { + break; + } + } + else + { + TRACFCOMP(g_trac_bpm, INFO_MRK"Bpm::runUpdate(): " + "ATTR_BPM_UPDATE_OVERRIDE set to skip firmware " + "portion of BPM updates. Skipping Firmware Update..."); } } while(0); |

