Skip to content

Commit 794efce

Browse files
mderkse1dcrowell77
authored andcommitted
Fix retry failure in nvdimmWriteData()
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>
1 parent a211800 commit 794efce

File tree

1 file changed

+6
-3
lines changed

1 file changed

+6
-3
lines changed

src/usr/isteps/nvdimm/nvdimmdd.C

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -922,6 +922,7 @@ errlHndl_t nvdimmWriteData( TARGETING::Target * i_target,
922922
ENTER_MRK"nvdimmWriteData()");
923923
errlHndl_t err = nullptr;
924924
errlHndl_t err_retryable = nullptr;
925+
size_t data_length;
925926
do
926927
{
927928
/***********************************************************/
@@ -931,13 +932,15 @@ errlHndl_t nvdimmWriteData( TARGETING::Target * i_target,
931932
retry <= NVDIMM_MAX_RETRIES;
932933
retry++)
933934
{
935+
data_length = i_dataLen;
936+
934937
// Do the actual data write
935938
if ( i_dataLen == sizeof(uint16_t) )
936939
{
937940
err = deviceOp( DeviceFW::WRITE,
938941
i_target,
939942
i_dataToWrite,
940-
i_dataLen,
943+
data_length,
941944
DeviceFW::I2C,
942945
I2C_SMBUS_RW_W_CMD_PARAMS(
943946
DeviceFW::I2C_SMBUS_WORD_NO_PEC,
@@ -954,7 +957,7 @@ errlHndl_t nvdimmWriteData( TARGETING::Target * i_target,
954957
err = deviceOp( DeviceFW::WRITE,
955958
i_target,
956959
i_dataToWrite,
957-
i_dataLen,
960+
data_length,
958961
DEVICE_I2C_ADDRESS_OFFSET(
959962
i_i2cInfo.port,
960963
i_i2cInfo.engine,
@@ -978,7 +981,7 @@ errlHndl_t nvdimmWriteData( TARGETING::Target * i_target,
978981
"Write Non-Retryable fail %d/%d/0x%X, "
979982
"ldl=%d, offset=0x%X, aS=%d, retry=%d",
980983
i_i2cInfo.port, i_i2cInfo.engine,
981-
i_i2cInfo.devAddr, i_dataLen,
984+
i_i2cInfo.devAddr, data_length,
982985
i_i2cInfo.offset, i_i2cInfo.addrSize, retry);
983986

984987
// Printing mux info separately, if combined, nothing is displayed

0 commit comments

Comments
 (0)