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