summaryrefslogtreecommitdiffstats
path: root/src/usr/isteps/nvdimm/runtime/nvdimm_rt.C
diff options
context:
space:
mode:
Diffstat (limited to 'src/usr/isteps/nvdimm/runtime/nvdimm_rt.C')
-rw-r--r--src/usr/isteps/nvdimm/runtime/nvdimm_rt.C125
1 files changed, 65 insertions, 60 deletions
diff --git a/src/usr/isteps/nvdimm/runtime/nvdimm_rt.C b/src/usr/isteps/nvdimm/runtime/nvdimm_rt.C
index 76b38ce99..ac00f81b0 100644
--- a/src/usr/isteps/nvdimm/runtime/nvdimm_rt.C
+++ b/src/usr/isteps/nvdimm/runtime/nvdimm_rt.C
@@ -239,11 +239,11 @@ bool nvdimmArm(TargetHandleList &i_nvdimmTargetList)
break;
}
- // Clear ARM status register
- l_err = nvdimmWriteReg(l_nvdimm, NVDIMM_MGT_CMD0, ARM_CLEAR);
+ // Clear all CMD error status registers
+ l_err = nvdimmWriteReg(l_nvdimm, NVDIMM_MGT_CMD0, ARM_CLEAR_ALL);
if (l_err)
{
- TRACFCOMP(g_trac_nvdimm, ERR_MRK"nvdimmArm() nvdimm[%X] - error clearing ARM status register",
+ TRACFCOMP(g_trac_nvdimm, ERR_MRK"nvdimmArm() nvdimm[%X] - error clearing all status registers",
get_huid(l_nvdimm));
break;
}
@@ -423,7 +423,7 @@ bool nvdimmArm(TargetHandleList &i_nvdimmTargetList)
get_huid(l_nvdimm));
// Set NVDIMM Status flag to partial working, as error detected but data might persist
- nvdimmSetStatusFlag(l_nvdimm, NSTD_ERR_VAL_SR);
+ notifyNvdimmProtectionChange(l_nvdimm, NVDIMM_RISKY_HW_ERROR);
/*@
*@errortype
@@ -487,72 +487,77 @@ bool nvdimmArm(TargetHandleList &i_nvdimmTargetList)
return false;
}
- // Unmask MBACALFIR EventN and set to recoverable
- for (TargetHandleList::iterator it = i_nvdimmTargetList.begin();
- it != i_nvdimmTargetList.end();)
+ // Unmask firs if the arm completed successfully
+ if (o_arm_successful)
{
- TargetHandleList l_mcaList;
- getParentAffinityTargets(l_mcaList, *it, CLASS_UNIT, TYPE_MCA);
- assert(l_mcaList.size(), "nvdimmArm() failed to find parent MCA.");
-
- // Set MBACALFIR_ACTION0 to recoverable
- l_writeAddress = MBACALFIR_ACTION0_REG;
- l_writeData = 0;
- l_err = deviceRead(l_mcaList[0], &l_writeData, l_writeSize,
- DEVICE_SCOM_ADDRESS(l_writeAddress));
- if(l_err)
+ // Unmask MBACALFIR EventN and set to recoverable
+ for (TargetHandleList::iterator it = i_nvdimmTargetList.begin();
+ it != i_nvdimmTargetList.end();)
{
- TRACFCOMP(g_trac_nvdimm, "SCOM to address 0x%08x failed",
- l_writeAddress);
- errlCommit( l_err, NVDIMM_COMP_ID );
- }
+ TargetHandleList l_mcaList;
+ getParentAffinityTargets(l_mcaList, *it, CLASS_UNIT, TYPE_MCA);
+ assert(l_mcaList.size(), "nvdimmArm() failed to find parent MCA.");
+
+ // Set MBACALFIR_ACTION0 to recoverable
+ l_writeAddress = MBACALFIR_ACTION0_REG;
+ l_writeData = 0;
+ l_err = deviceRead(l_mcaList[0], &l_writeData, l_writeSize,
+ DEVICE_SCOM_ADDRESS(l_writeAddress));
+ if(l_err)
+ {
+ TRACFCOMP(g_trac_nvdimm, "SCOM to address 0x%08x failed",
+ l_writeAddress);
+ errlCommit( l_err, NVDIMM_COMP_ID );
+ }
- l_writeData &= MBACALFIR_EVENTN_AND_BIT;
- l_err = deviceWrite(l_mcaList[0], &l_writeData, l_writeSize,
+ l_writeData &= MBACALFIR_EVENTN_AND_BIT;
+ l_err = deviceWrite(l_mcaList[0], &l_writeData, l_writeSize,
+ DEVICE_SCOM_ADDRESS(l_writeAddress));
+ if(l_err)
+ {
+ TRACFCOMP(g_trac_nvdimm, "SCOM to address 0x%08x failed",
+ l_writeAddress);
+ errlCommit( l_err, NVDIMM_COMP_ID );
+ }
+
+ // Set MBACALFIR_ACTION1 to recoverable
+ l_writeAddress = MBACALFIR_ACTION1_REG;
+ l_writeData = 0;
+ l_err = deviceRead(l_mcaList[0], &l_writeData, l_writeSize,
DEVICE_SCOM_ADDRESS(l_writeAddress));
- if(l_err)
- {
- TRACFCOMP(g_trac_nvdimm, "SCOM to address 0x%08x failed",
- l_writeAddress);
- errlCommit( l_err, NVDIMM_COMP_ID );
- }
+ if(l_err)
+ {
+ TRACFCOMP(g_trac_nvdimm, "SCOM to address 0x%08x failed",
+ l_writeAddress);
+ errlCommit( l_err, NVDIMM_COMP_ID );
+ }
- // Set MBACALFIR_ACTION1 to recoverable
- l_writeAddress = MBACALFIR_ACTION1_REG;
- l_writeData = 0;
- l_err = deviceRead(l_mcaList[0], &l_writeData, l_writeSize,
- DEVICE_SCOM_ADDRESS(l_writeAddress));
- if(l_err)
- {
- TRACFCOMP(g_trac_nvdimm, "SCOM to address 0x%08x failed",
- l_writeAddress);
- errlCommit( l_err, NVDIMM_COMP_ID );
- }
+ l_writeData |= MBACALFIR_EVENTN_OR_BIT;
+ l_err = deviceWrite(l_mcaList[0], &l_writeData, l_writeSize,
+ DEVICE_SCOM_ADDRESS(l_writeAddress));
+ if(l_err)
+ {
+ TRACFCOMP(g_trac_nvdimm, "SCOM to address 0x%08x failed",
+ l_writeAddress);
+ errlCommit( l_err, NVDIMM_COMP_ID );
+ }
- l_writeData |= MBACALFIR_EVENTN_OR_BIT;
- l_err = deviceWrite(l_mcaList[0], &l_writeData, l_writeSize,
- DEVICE_SCOM_ADDRESS(l_writeAddress));
- if(l_err)
- {
- TRACFCOMP(g_trac_nvdimm, "SCOM to address 0x%08x failed",
- l_writeAddress);
- errlCommit( l_err, NVDIMM_COMP_ID );
- }
+ // Unmask MBACALFIR[8]
+ l_writeAddress = MBACALFIR_AND_MASK_REG;
+ l_writeData = MBACALFIR_UNMASK_BIT;
+ l_err = deviceWrite(l_mcaList[0], &l_writeData, l_writeSize,
+ DEVICE_SCOM_ADDRESS(l_writeAddress));
+ if(l_err)
+ {
+ TRACFCOMP(g_trac_nvdimm, "SCOM to address 0x%08x failed",
+ l_writeAddress);
+ errlCommit( l_err, NVDIMM_COMP_ID );
+ }
- // Unmask MBACALFIR[8]
- l_writeAddress = MBACALFIR_AND_MASK_REG;
- l_writeData = MBACALFIR_UNMASK_BIT;
- l_err = deviceWrite(l_mcaList[0], &l_writeData, l_writeSize,
- DEVICE_SCOM_ADDRESS(l_writeAddress));
- if(l_err)
- {
- TRACFCOMP(g_trac_nvdimm, "SCOM to address 0x%08x failed",
- l_writeAddress);
- errlCommit( l_err, NVDIMM_COMP_ID );
+ it++;
}
- it++;
}
TRACFCOMP(g_trac_nvdimm, EXIT_MRK"nvdimmArm() returning %d",
OpenPOWER on IntegriCloud