Skip to content

Commit

Permalink
Fix retry failure in nvdimmWriteData()
Browse files Browse the repository at this point in the history
Need to create a local variable for i_dataLen,
because deviceOp will alter the i_dataLen value
on failure (ie NACK).

Change-Id: If73efb77a1ba918fbc1bb7decd8fb46a5d2014b9
Reviewed-on: http://rchgit01.rchland.ibm.com/gerrit1/82344
Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com>
Tested-by: Jenkins OP Build CI <op-jenkins+hostboot@us.ibm.com>
Tested-by: Jenkins OP HW <op-hw-jenkins+hostboot@us.ibm.com>
Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com>
Reviewed-by: TSUNG K YEUNG <tyeung@us.ibm.com>
Reviewed-by: Matthew Raybuck <matthew.raybuck@ibm.com>
Reviewed-by: Daniel M Crowell <dcrowell@us.ibm.com>
  • Loading branch information
mderkse1 authored and dcrowell77 committed Aug 19, 2019
1 parent a211800 commit 794efce
Showing 1 changed file with 6 additions and 3 deletions.
9 changes: 6 additions & 3 deletions src/usr/isteps/nvdimm/nvdimmdd.C
Expand Up @@ -922,6 +922,7 @@ errlHndl_t nvdimmWriteData( TARGETING::Target * i_target,
ENTER_MRK"nvdimmWriteData()");
errlHndl_t err = nullptr;
errlHndl_t err_retryable = nullptr;
size_t data_length;
do
{
/***********************************************************/
Expand All @@ -931,13 +932,15 @@ errlHndl_t nvdimmWriteData( TARGETING::Target * i_target,
retry <= NVDIMM_MAX_RETRIES;
retry++)
{
data_length = i_dataLen;

// Do the actual data write
if ( i_dataLen == sizeof(uint16_t) )
{
err = deviceOp( DeviceFW::WRITE,
i_target,
i_dataToWrite,
i_dataLen,
data_length,
DeviceFW::I2C,
I2C_SMBUS_RW_W_CMD_PARAMS(
DeviceFW::I2C_SMBUS_WORD_NO_PEC,
Expand All @@ -954,7 +957,7 @@ errlHndl_t nvdimmWriteData( TARGETING::Target * i_target,
err = deviceOp( DeviceFW::WRITE,
i_target,
i_dataToWrite,
i_dataLen,
data_length,
DEVICE_I2C_ADDRESS_OFFSET(
i_i2cInfo.port,
i_i2cInfo.engine,
Expand All @@ -978,7 +981,7 @@ errlHndl_t nvdimmWriteData( TARGETING::Target * i_target,
"Write Non-Retryable fail %d/%d/0x%X, "
"ldl=%d, offset=0x%X, aS=%d, retry=%d",
i_i2cInfo.port, i_i2cInfo.engine,
i_i2cInfo.devAddr, i_dataLen,
i_i2cInfo.devAddr, data_length,
i_i2cInfo.offset, i_i2cInfo.addrSize, retry);

// Printing mux info separately, if combined, nothing is displayed
Expand Down

0 comments on commit 794efce

Please sign in to comment.