diff options
author | Matt Derksen <mderkse1@us.ibm.com> | 2019-08-16 12:38:34 -0500 |
---|---|---|
committer | Daniel M Crowell <dcrowell@us.ibm.com> | 2019-08-19 15:02:34 -0500 |
commit | 794efce0c21613f12b67db9a7e52d162976d4d4a (patch) | |
tree | 61c4f7f40cb8d66640f799e9d642b4bf3f1592f4 /src | |
parent | a2118008da065e69e8eab937bf725ea092e6f742 (diff) | |
download | talos-hostboot-794efce0c21613f12b67db9a7e52d162976d4d4a.tar.gz talos-hostboot-794efce0c21613f12b67db9a7e52d162976d4d4a.zip |
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>
Diffstat (limited to 'src')
-rwxr-xr-x | src/usr/isteps/nvdimm/nvdimmdd.C | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/src/usr/isteps/nvdimm/nvdimmdd.C b/src/usr/isteps/nvdimm/nvdimmdd.C index ce6fa65d8..875c217d4 100755 --- a/src/usr/isteps/nvdimm/nvdimmdd.C +++ b/src/usr/isteps/nvdimm/nvdimmdd.C @@ -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 { /***********************************************************/ @@ -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, @@ -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, @@ -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 |