I2C bus stuck/hangs

Hello,

I am facing I2C bus stuck/hanging issue on Rock Pi S i2c1. The rock pi is master and is communicating with a microcontroller slave. Whenever there is some interruption in i2c communication such as MCU restart, the i2c bus hangs and does not resolve until reboot.

Although the microcontroller is handling i2c bus issues and resets its i2c peripheral in such conditions.

I am using Debian Buster latest image from Radxa Downloads. One thing I should add is that this problem never occurs on Armbian.

dmesg output when this problem happens:

[ 532.655488] rk3x-i2c ff050000.i2c: irq in STATE_IDLE, ipd = 0xb0
[ 533.666998] rk3x-i2c ff050000.i2c: timeout, ipd: 0x81, state: 3
[ 533.680332] rk3x-i2c ff050000.i2c: irq in STATE_IDLE, ipd = 0xb0
[ 534.690960] rk3x-i2c ff050000.i2c: timeout, ipd: 0x81, state: 3
[ 534.705165] rk3x-i2c ff050000.i2c: irq in STATE_IDLE, ipd = 0xb0
[ 535.719102] rk3x-i2c ff050000.i2c: timeout, ipd: 0x81, state: 3
[ 535.733401] rk3x-i2c ff050000.i2c: irq in STATE_IDLE, ipd = 0xb0
[ 536.747064] rk3x-i2c ff050000.i2c: timeout, ipd: 0x81, state: 3
[ 536.760990] rk3x-i2c ff050000.i2c: irq in STATE_IDLE, ipd = 0xb0
[ 537.775020] rk3x-i2c ff050000.i2c: timeout, ipd: 0x81, state: 3
[ 537.788316] rk3x-i2c ff050000.i2c: irq in STATE_IDLE, ipd = 0xb0
[ 538.803066] rk3x-i2c ff050000.i2c: timeout, ipd: 0x81, state: 3
[ 538.817181] rk3x-i2c ff050000.i2c: irq in STATE_IDLE, ipd = 0xb0
[ 539.835024] rk3x-i2c ff050000.i2c: timeout, ipd: 0x81, state: 3
[ 539.848923] rk3x-i2c ff050000.i2c: irq in STATE_IDLE, ipd = 0xb0
[ 540.866968] rk3x-i2c ff050000.i2c: timeout, ipd: 0x81, state: 3
[ 540.880194] rk3x-i2c ff050000.i2c: irq in STATE_IDLE, ipd = 0xb0
[ 541.891005] rk3x-i2c ff050000.i2c: timeout, ipd: 0x81, state: 3
[ 541.891770] rk3x-i2c ff050000.i2c: irq in STATE_IDLE, ipd = 0xb0
[ 542.890890] rk3x-i2c ff050000.i2c: timeout, ipd: 0x80, state: 1
[ 543.890947] rk3x-i2c ff050000.i2c: timeout, ipd: 0x81, state: 3
[ 543.891700] rk3x-i2c ff050000.i2c: irq in STATE_IDLE, ipd = 0xb0
[ 544.891022] rk3x-i2c ff050000.i2c: timeout, ipd: 0x80, state: 1
[ 545.890920] rk3x-i2c ff050000.i2c: timeout, ipd: 0x81, state: 3
[ 545.891686] rk3x-i2c ff050000.i2c: irq in STATE_IDLE, ipd = 0xb0
[ 546.890953] rk3x-i2c ff050000.i2c: timeout, ipd: 0x80, state: 1
[ 547.890940] rk3x-i2c ff050000.i2c: timeout, ipd: 0x81, state: 3
[ 547.891764] rk3x-i2c ff050000.i2c: irq in STATE_IDLE, ipd = 0xb0
[ 548.895070] rk3x-i2c ff050000.i2c: timeout, ipd: 0x80, state: 1
[ 549.894856] rk3x-i2c ff050000.i2c: timeout, ipd: 0x81, state: 3
[ 549.895536] rk3x-i2c ff050000.i2c: unexpected irq in STOP: 0x90
[ 550.894953] rk3x-i2c ff050000.i2c: timeout, ipd: 0x80, state: 4
[ 551.894936] rk3x-i2c ff050000.i2c: timeout, ipd: 0x81, state: 3
[ 551.895714] rk3x-i2c ff050000.i2c: irq in STATE_IDLE, ipd = 0xb0
[ 552.907072] rk3x-i2c ff050000.i2c: timeout, ipd: 0x80, state: 1
[ 553.918868] rk3x-i2c ff050000.i2c: timeout, ipd: 0x81, state: 3
[ 553.932057] rk3x-i2c ff050000.i2c: irq in STATE_IDLE, ipd = 0xb0