diff options
author | Matt Derksen <mderkse1@us.ibm.com> | 2019-10-02 13:24:01 -0500 |
---|---|---|
committer | Nicholas E Bofferding <bofferdn@us.ibm.com> | 2019-10-09 09:28:36 -0500 |
commit | b221671e58f5acf1d088e31d3706b11ed7602f3d (patch) | |
tree | efe709cf2173278945e702771c8b63ec3019abad | |
parent | daeac77bf15f92df9a6a86ec45a9f370e219a234 (diff) | |
download | talos-hostboot-b221671e58f5acf1d088e31d3706b11ed7602f3d.tar.gz talos-hostboot-b221671e58f5acf1d088e31d3706b11ed7602f3d.zip |
NVDIMM Erase error handle not working in IPL Arm handling
NVDIMM erase error handling is failing because
nvdimmDisarm() checks ATTR_NVDIMM_ARMED before
disarming the nvdimm. Disarming an nvdimm
that is already disarmed should not be harmful.
Also erase error should correctly set the error
status as 0x01 (memory unable to preserve future content)
Change-Id: I8a710343478691c87f1570fd30074c2543d3373c
CQ: SW477541
Reviewed-on: http://rchgit01.rchland.ibm.com/gerrit1/84662
Reviewed-by: TSUNG K YEUNG <tyeung@us.ibm.com>
Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com>
Reviewed-by: Corey V Swenson <cswenson@us.ibm.com>
Tested-by: Jenkins OP Build CI <op-jenkins+hostboot@us.ibm.com>
Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com>
Tested-by: Jenkins OP HW <op-hw-jenkins+hostboot@us.ibm.com>
Reviewed-by: Nicholas E Bofferding <bofferdn@us.ibm.com>
-rw-r--r-- | src/usr/isteps/nvdimm/nvdimm.C | 6 | ||||
-rw-r--r-- | src/usr/isteps/nvdimm/runtime/nvdimm_rt.C | 9 |
2 files changed, 3 insertions, 12 deletions
diff --git a/src/usr/isteps/nvdimm/nvdimm.C b/src/usr/isteps/nvdimm/nvdimm.C index bf2af1cde..b8f9ad355 100644 --- a/src/usr/isteps/nvdimm/nvdimm.C +++ b/src/usr/isteps/nvdimm/nvdimm.C @@ -1402,7 +1402,7 @@ errlHndl_t nvdimmEraseCheck(Target *i_nvdimm, bool i_statusOnly) l_err = nvdimmReadReg ( i_nvdimm, ERASE_STATUS, l_data); if (l_err) { - nvdimmSetStatusFlag(i_nvdimm, NSTD_ERR); + nvdimmSetStatusFlag(i_nvdimm, NSTD_VAL_DISARMED); TRACFCOMP(g_trac_nvdimm, ERR_MRK"nvdimm[%X], failed to read erase status", get_huid(i_nvdimm)); break; @@ -1421,7 +1421,7 @@ errlHndl_t nvdimmEraseCheck(Target *i_nvdimm, bool i_statusOnly) l_err = nvdimmValidImage( i_nvdimm, l_valid ); if (l_err) { - nvdimmSetStatusFlag(i_nvdimm, NSTD_ERR); + nvdimmSetStatusFlag(i_nvdimm, NSTD_VAL_DISARMED); TRACFCOMP(g_trac_nvdimm, ERR_MRK"nvdimm[%X] Failed to detect valid image", get_huid(i_nvdimm)); break; @@ -1430,7 +1430,7 @@ errlHndl_t nvdimmEraseCheck(Target *i_nvdimm, bool i_statusOnly) if ( (l_data & ERASE_ERROR) || l_valid ) { - nvdimmSetStatusFlag(i_nvdimm, NSTD_ERR); + nvdimmSetStatusFlag(i_nvdimm, NSTD_VAL_DISARMED); TRACFCOMP(g_trac_nvdimm, ERR_MRK"nvdimm[%X] NVDimm Erase failed due to error (ERASE_STATUS: 0x%02X, Image %s)", get_huid(i_nvdimm), l_data, l_valid?"not erased":"erased"); /*@ diff --git a/src/usr/isteps/nvdimm/runtime/nvdimm_rt.C b/src/usr/isteps/nvdimm/runtime/nvdimm_rt.C index defcdd626..b0e20d46e 100644 --- a/src/usr/isteps/nvdimm/runtime/nvdimm_rt.C +++ b/src/usr/isteps/nvdimm/runtime/nvdimm_rt.C @@ -844,15 +844,6 @@ bool nvdimmDisarm(TargetHandleList &i_nvdimmTargetList) for (auto const l_nvdimm : i_nvdimmTargetList) { - // skip if the nvdimm is already disarmed - ATTR_NVDIMM_ARMED_type l_armed_state = {}; - l_armed_state = l_nvdimm->getAttr<ATTR_NVDIMM_ARMED>(); - if (!l_armed_state.armed) - { - TRACFCOMP(g_trac_nvdimm, "nvdimmDisarm() nvdimm[%X] called when already disarmed", get_huid(l_nvdimm)); - continue; - } - l_err = NVDIMM::nvdimmChangeArmState(l_nvdimm, DISARM_TRIGGER); // If we run into any error here we will just // commit the error log and move on. Let the |