Skip to content

Commit

Permalink
NVDIMM Erase error handle not working in IPL Arm handling
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
mderkse1 authored and Nicholas E Bofferding committed Oct 9, 2019
1 parent daeac77 commit b221671
Show file tree
Hide file tree
Showing 2 changed files with 3 additions and 12 deletions.
6 changes: 3 additions & 3 deletions src/usr/isteps/nvdimm/nvdimm.C
Expand Up @@ -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;
Expand All @@ -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;
Expand All @@ -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");
/*@
Expand Down
9 changes: 0 additions & 9 deletions src/usr/isteps/nvdimm/runtime/nvdimm_rt.C
Expand Up @@ -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
Expand Down

0 comments on commit b221671

Please sign in to comment.