summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/usr/isteps/nvdimm/runtime/nvdimm_rt.C65
1 files changed, 48 insertions, 17 deletions
diff --git a/src/usr/isteps/nvdimm/runtime/nvdimm_rt.C b/src/usr/isteps/nvdimm/runtime/nvdimm_rt.C
index a9f630c74..76b38ce99 100644
--- a/src/usr/isteps/nvdimm/runtime/nvdimm_rt.C
+++ b/src/usr/isteps/nvdimm/runtime/nvdimm_rt.C
@@ -1096,8 +1096,16 @@ bool nvDimmCheckBadFlashBlockPercentage(TargetHandle_t i_nvDimm,
const uint8_t i_maxPercentageAllowed,
uint8_t &o_badFlashBlockPercentage)
{
+ // Cache the HUID of the NVDIMM
+ uint32_t l_nvDimmHuid = get_huid( i_nvDimm );
+
+ TRACFCOMP(g_trac_nvdimm, ENTER_MRK"nvDimmCheckBadFlashBlockPercentage(): "
+ "NVDIMM(0x%.4X), max bad flash blocks allowed(%d)",
+ l_nvDimmHuid,
+ i_maxPercentageAllowed);
+
// The status of the check on the bad block percentage
- bool l_didBadFlashBlockPercentageCheckPass(false);
+ bool l_didBadFlashBlockPercentageCheckPass(true);
// The retrieved flash block percentage from register, initialize to zero
o_badFlashBlockPercentage = 0;
@@ -1105,9 +1113,6 @@ bool nvDimmCheckBadFlashBlockPercentage(TargetHandle_t i_nvDimm,
// Handle to catch any errors
errlHndl_t l_err(nullptr);
- // Cache the HUID of the NVDIMM
- uint32_t l_nvDimmHuid = get_huid( i_nvDimm );
-
// Retrieve the percentage of bad blocks and validate
TRACDCOMP(g_trac_nvdimm, INFO_MRK"nvDimmCheckBadFlashBlockPercentage(): "
"Reading NVDIMM(0x%.8X) percentage of bad blocks from "
@@ -1152,11 +1157,13 @@ bool nvDimmCheckBadFlashBlockPercentage(TargetHandle_t i_nvDimm,
{
TRACFCOMP(g_trac_nvdimm, ERR_MRK"nvDimmCheckBadFlashBlockPercentage(): "
"FAIL: For NVDIMM (0x%.8X), the percentage of bad "
- "flash blocks (%d) exceeds the maximum percentage "
- "of bad flash blocks allowed (%d), marking this "
- "as a fail",
+ "flash blocks (%d), read from register "
+ "FLASH_BAD_BLK_PCT(0x%.4X), exceeds the maximum "
+ "percentage of bad flash blocks allowed (%d), marking "
+ "this as a fail",
l_nvDimmHuid,
o_badFlashBlockPercentage,
+ FLASH_BAD_BLK_PCT,
i_maxPercentageAllowed);
// Set up the fail state, so caller can determine that the fail was
@@ -1183,6 +1190,10 @@ bool nvDimmCheckBadFlashBlockPercentage(TargetHandle_t i_nvDimm,
} // end if (l_badFlashBlockPercentage > i_maxPercentageAllowed)
} // end if (l_err) ... else
+ TRACFCOMP(g_trac_nvdimm, EXIT_MRK"nvDimmCheckBadFlashBlockPercentage(): "
+ "Returning %s",
+ l_didBadFlashBlockPercentageCheckPass == true ? "true" : "false" );
+
return l_didBadFlashBlockPercentageCheckPass;
}
@@ -1212,8 +1223,16 @@ bool nvDimmCheckFlashErrorCount(TargetHandle_t i_nvDimm,
const uint32_t i_maxFlashErrorsAllowed,
uint32_t &o_readFlashErrorCount)
{
+ // Cache the HUID of the NVDIMM
+ uint32_t l_nvDimmHuid = get_huid( i_nvDimm );
+
+ TRACFCOMP(g_trac_nvdimm, ENTER_MRK"nvDimmCheckFlashErrorCount(): "
+ "NVDIMM(0x%.4X), max flash errors allowed(%d)",
+ l_nvDimmHuid,
+ i_maxFlashErrorsAllowed);
+
// The status of the check on the flash error count
- bool l_didFlashErrorCountCheckPass(false);
+ bool l_didFlashErrorCountCheckPass(true);
// The retrieved flash error count from register, initialize to zero
o_readFlashErrorCount = 0;
@@ -1221,9 +1240,6 @@ bool nvDimmCheckFlashErrorCount(TargetHandle_t i_nvDimm,
// Handle to catch any errors
errlHndl_t l_err(nullptr);
- // Cache the HUID of the NVDIMM
- uint32_t l_nvDimmHuid = get_huid( i_nvDimm );
-
// The retrieved flash error count from a register
uint8_t l_readFlashErrorCountByte(0);
@@ -1291,12 +1307,17 @@ bool nvDimmCheckFlashErrorCount(TargetHandle_t i_nvDimm,
if (o_readFlashErrorCount > i_maxFlashErrorsAllowed)
{
TRACFCOMP(g_trac_nvdimm, ERR_MRK"nvDimmCheckFlashErrorCount(): "
- "FAIL: For NVDIMM (0x%.8X), the flash error "
- "count (%d) exceeds the maximum number of flash "
- "errors allowed (%d), marking this as a fail",
- l_nvDimmHuid,
- o_readFlashErrorCount,
- i_maxFlashErrorsAllowed);
+ "FAIL: For NVDIMM (0x%.8X), the flash error count (%d), "
+ "read from registers FLASH_ERROR_COUNT0(0x%.4X), "
+ "FLASH_ERROR_COUNT1(0x%.4X) and FLASH_ERROR_COUNT2(0x%.4X), "
+ "exceeds the maximum number of flash "
+ "errors allowed (%d), marking this as a fail",
+ l_nvDimmHuid,
+ o_readFlashErrorCount,
+ FLASH_ERROR_COUNT0,
+ FLASH_ERROR_COUNT1,
+ FLASH_ERROR_COUNT2,
+ i_maxFlashErrorsAllowed);
// Set up the fail state, so caller can determine that the fail was
// due to error count exceeding the max errors allowed.
@@ -1321,6 +1342,10 @@ bool nvDimmCheckFlashErrorCount(TargetHandle_t i_nvDimm,
}
} // end if (o_readFlashErrorCount)
+ TRACFCOMP(g_trac_nvdimm, EXIT_MRK"nvDimmCheckFlashErrorCount(): "
+ "Returning %s",
+ l_didFlashErrorCountCheckPass == true ? "true" : "false" );
+
return l_didFlashErrorCountCheckPass;
}
@@ -1488,6 +1513,12 @@ bool nvDimmNvmCheckHealthStatus(const TargetHandleList &i_nvDimmTargetList)
l_err->collectTrace(NVDIMM_COMP_NAME);
nvdimmAddVendorLog(l_nvDimm, l_err);
+ // Add a DIMM callout
+ l_err->addHwCallout( l_nvDimm,
+ HWAS::SRCI_PRIORITY_HIGH,
+ HWAS::NO_DECONFIG,
+ HWAS::GARD_NULL );
+
// Collect the error
errlCommit(l_err, NVDIMM_COMP_ID);
OpenPOWER on IntegriCloud