diff options
author | Nick Bofferding <bofferdn@us.ibm.com> | 2018-08-01 08:41:47 -0500 |
---|---|---|
committer | Daniel M. Crowell <dcrowell@us.ibm.com> | 2018-08-02 14:43:33 -0500 |
commit | 9350ecec4bd2fc9de9a1fbc87cbbdbb2a082a211 (patch) | |
tree | d89c2eba53208e20e82ec8e0660d7101c68f4409 /src/usr/i2c/i2c.C | |
parent | 864d9b80ebf96b48746fccbc751d471198c2e4b3 (diff) | |
download | talos-hostboot-9350ecec4bd2fc9de9a1fbc87cbbdbb2a082a211.tar.gz talos-hostboot-9350ecec4bd2fc9de9a1fbc87cbbdbb2a082a211.zip |
i2c: Don't wait for SDA to go high before sending slave stop command
Previous enhancements to restricting the times slave stop commands run were
overly aggressive, resulting in I2C arbitration issues on various ports
during I2C reset operations. This change inhibits waiting for SDA to be
high before sending the slave stop command, yet retains the wait for SCL to
go high.
Change-Id: Ia4dcd865324505e067165342d2c1ddced59d8882
CQ: SW439908
Reviewed-on: http://rchgit01.rchland.ibm.com/gerrit1/63691
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: ILYA SMIRNOV <ismirno@us.ibm.com>
Reviewed-by: Michael Baiocchi <mbaiocch@us.ibm.com>
Reviewed-by: Daniel M. Crowell <dcrowell@us.ibm.com>
Diffstat (limited to 'src/usr/i2c/i2c.C')
-rwxr-xr-x | src/usr/i2c/i2c.C | 10 |
1 files changed, 4 insertions, 6 deletions
diff --git a/src/usr/i2c/i2c.C b/src/usr/i2c/i2c.C index 3b1510fed..db93bb2d7 100755 --- a/src/usr/i2c/i2c.C +++ b/src/usr/i2c/i2c.C @@ -2864,7 +2864,7 @@ errlHndl_t i2cSendSlaveStop ( TARGETING::Target * i_target, continue; } - // Look for clock line (SCL) and data line (SDA) to be high + // Look for clock line (SCL) to be high // such that the 'stop' command will work status_reg.value = 0x0ull; size_t delay_ns = 0; @@ -2885,8 +2885,7 @@ errlHndl_t i2cSendSlaveStop ( TARGETING::Target * i_target, break; } - if ( (status_reg.scl_input_level != 0) - && (status_reg.sda_input_level != 0) ) + if (status_reg.scl_input_level != 0) { break; } @@ -2906,20 +2905,19 @@ errlHndl_t i2cSendSlaveStop ( TARGETING::Target * i_target, if ( delay_ns > I2C_RESET_POLL_DELAY_TOTAL_NS ) { - // We don't see both clock and data lines high; in this case + // We don't see clock line high; in this case // it's not likely for a slave stop command to work. One // possible nasty side-effect of attempting slave stop is the // I2C master can become indefinitely busy and prevent writes // to the mode register from completing. Just continue to the // next port. TRACFCOMP( g_trac_i2c, ERR_MRK"i2cSendSlaveStop(): " - "Not seeing both SCL (%d) and SDA (%d) high " + "Not seeing SCL (%d) high " "after %d ns of polling (max=%d). " "Full status register = 0x%.16llX. " "Inhibiting sending slave stop to e%/p% for " "HUID 0x%08X.", status_reg.scl_input_level, - status_reg.sda_input_level, delay_ns, I2C_RESET_POLL_DELAY_TOTAL_NS, status_reg.value, |