AST2500 I2C Controller got stuck in SRXD state

Jae Hyun Yoo jae.hyun.yoo at linux.intel.com
Wed Sep 4 07:51:07 AEST 2019


On 9/3/2019 2:45 PM, Tao Ren wrote:
> Hi,
> 
> I found the issue on Minipack (AST2500) BMC i2c-0: it's multi-master environment with BMC and Bridged-IC.
> 
> The BMC I2C controller got stuck in SLAVE_RX_DONE state because STOP condition is not detected during one BIC-to-BMC transfer.
> Because of this, all the subsequent I2C master transactions would fail with timeout.
> Here is BMC I2C state reported in I2CD14 Command/Status register:
> 
> - I2CD14[22:19] = 0100b  /* transfer state machine: SLAVE_RX_DONE */
> - I2CD14[18] = 1 /* sampled SCL line: high/idle */
> - I2CD14[17] = 1 /* sampled SDA line: high/idle */
> - I2CD14[16] = 0 /* bus is idle */
> 
> I'm suspecting it's caused by some flaws in BIC firmware, but can we do something in BMC side to recover the bus?
> For example:
> 
> 1) As Jae mentioned earlier, enable slave inactive timeout interrupt and reset bus when the interrupt is delivered?
> 
> 2) Check I2CD14[22:19] in aspeed_i2c_recover_bus() function and reset bus if needed?
> 

Hi Tao,

I made the slave inactive timeout support. Will submit it soon.

Cheers,
Jae

> 
> Thanks,
> 
> Tao
> 


More information about the openbmc mailing list