diff options
author | Robert Lippert <rlippert@google.com> | 2015-03-27 16:32:13 -0700 |
---|---|---|
committer | Daniel M. Crowell <dcrowell@us.ibm.com> | 2017-02-14 09:12:49 -0500 |
commit | 28bfab63a26982fe32b7711729ee79f58aaa623a (patch) | |
tree | 0eb7a9102a32b938028baf8dab0193161a0a9cb8 /src/usr/i2c | |
parent | 0782948ce7cf6c1da9d2c5a66929891ac5f85625 (diff) | |
download | talos-hostboot-28bfab63a26982fe32b7711729ee79f58aaa623a.tar.gz talos-hostboot-28bfab63a26982fe32b7711729ee79f58aaa623a.zip |
i2c: only send 1 master stop in FORCE_UNLOCK reset mode
The existing code path would send 2 master stops, one in
i2cForceResetAndUnlock() and another in i2cSendSlaveStop().
The one in i2cSendSlaveStop() can cause IPL failures if the
VSPD voltage is not online for a centaur I2C port because
it requires checking that the I2C bus is "free" (pulled up)
before reporting success.
Change-Id: I435f4e738d1c000e23167221a42f6747f0dce93b
Signed-off-by: Robert Lippert <rlippert@google.com>
Signed-off-by: William A. Kennington III <wak@google.com>
Reviewed-on: http://ralgit01.raleigh.ibm.com/gerrit1/36263
Tested-by: Jenkins Server <pfd-jenkins+hostboot@us.ibm.com>
Tested-by: FSP CI Jenkins <fsp-CI-jenkins+hostboot@us.ibm.com>
Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com>
Diffstat (limited to 'src/usr/i2c')
-rwxr-xr-x | src/usr/i2c/i2c.C | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/src/usr/i2c/i2c.C b/src/usr/i2c/i2c.C index 7e134a5bc..d8cde876e 100755 --- a/src/usr/i2c/i2c.C +++ b/src/usr/i2c/i2c.C @@ -6,6 +6,7 @@ /* OpenPOWER HostBoot Project */ /* */ /* Contributors Listed Below - COPYRIGHT 2011,2017 */ +/* [+] Google Inc. */ /* [+] International Business Machines Corp. */ /* */ /* */ @@ -2723,12 +2724,13 @@ errlHndl_t i2cReset ( TARGETING::Target * i_target, // So just commit the log here and let the function continue. errlCommit( err, I2C_COMP_ID ); } - } + } else { - // Part of doing the I2C Master reset is also sending a stop - // command to the slave device. - err = i2cSendSlaveStop( i_target, - i_args ); + // Part of doing the I2C Master reset is also sending a stop + // command to the slave device. + err = i2cSendSlaveStop( i_target, + i_args ); + } if( err ) { |