summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/usr/isteps/nvdimm/bpm_update.C30
1 files changed, 15 insertions, 15 deletions
diff --git a/src/usr/isteps/nvdimm/bpm_update.C b/src/usr/isteps/nvdimm/bpm_update.C
index 1208d7841..df0857a7f 100644
--- a/src/usr/isteps/nvdimm/bpm_update.C
+++ b/src/usr/isteps/nvdimm/bpm_update.C
@@ -734,9 +734,8 @@ errlHndl_t Bpm::issueCommand(const uint8_t i_command,
payloadHeaderDataSize,
TARGETING::get_huid(iv_nvdimm))
);
- errl->addPartCallout(iv_nvdimm,
- HWAS::BPM_PART_TYPE,
- HWAS::SRCI_PRIORITY_HIGH);
+ errl->addProcedureCallout(HWAS::EPUB_PRC_HB_CODE,
+ HWAS::SRCI_PRIORITY_HIGH);
errl->collectTrace(BPM_COMP_NAME);
nvdimmAddPage4Regs(iv_nvdimm,errl);
nvdimmAddVendorLog(iv_nvdimm, errl);
@@ -1254,6 +1253,9 @@ errlHndl_t Bpm::enterUpdateMode()
BPM_RC::BPM_START_UPDATE,
BPM_RC::BPM_ENTER_UPDATE_MODE,
TARGETING::get_huid(iv_nvdimm));
+ infoErrl->addPartCallout(iv_nvdimm,
+ HWAS::BPM_PART_TYPE,
+ HWAS::SRCI_PRIORITY_HIGH);
infoErrl->collectTrace(BPM_COMP_NAME);
nvdimmAddVendorLog(iv_nvdimm, infoErrl);
nvdimmAddPage4Regs(iv_nvdimm, infoErrl);
@@ -3749,9 +3751,16 @@ errlHndl_t Bpm::runConfigUpdates(BpmConfigLidImage i_configImage)
errl = updateConfig();
if (errl != nullptr)
{
- // If the config update fails for any reason we should erase the
- // firmware section so that subsequent IPLs/attempts will not think
- // that we have a fully valid image when we do not.
+ // We are returning with an error. Since the error is from the
+ // config part of the updates it's best to erase the firmware on the
+ // BPM so that updates will be attempted on it in the future.
+ // Because there isn't a way to determine the validity of the config
+ // section on the BPM we're completely reliant on what the firmware
+ // version reports to decide if we need to update or not. If we see
+ // that the firmware version matches the image but for some reason
+ // the config data wasn't updated properly we could believe we
+ // updated successfully when, in fact, we just left the BPM in a bad
+ // state.
if ( (iv_firmwareStartAddress == MAIN_PROGRAM_ADDRESS)
|| (iv_firmwareStartAddress == MAIN_PROGRAM_ADDRESS_ALT))
{
@@ -3887,15 +3896,6 @@ errlHndl_t Bpm::runFirmwareUpdates(BpmFirmwareLidImage i_image)
handleMultipleErrors(errl, exitErrl);
}
- // Reset controller and unlock encryption if necessary
- exitErrl = nvdimmResetController(iv_nvdimm);
- if (exitErrl != nullptr)
- {
- TRACFCOMP(g_trac_bpm, ERR_MRK"Bpm::runFirmwareUpdates() "
- "Couldn't reset NVDIMM controller.");
- handleMultipleErrors(errl, exitErrl);
- }
-
return errl;
}
OpenPOWER on IntegriCloud