AST2500 I2C Controller got stuck in SRXD state

Tao Ren taoren at fb.com
Wed Sep 4 07:45:28 AEST 2019


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?


Thanks,

Tao


More information about the openbmc mailing list