summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatt Derksen <mderkse1@us.ibm.com>2019-10-02 13:24:01 -0500
committerNicholas E Bofferding <bofferdn@us.ibm.com>2019-10-09 09:28:36 -0500
commitb221671e58f5acf1d088e31d3706b11ed7602f3d (patch)
treeefe709cf2173278945e702771c8b63ec3019abad
parentdaeac77bf15f92df9a6a86ec45a9f370e219a234 (diff)
downloadtalos-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.C6
-rw-r--r--src/usr/isteps/nvdimm/runtime/nvdimm_rt.C9
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
OpenPOWER on IntegriCloud