On Mon, 20 Feb 2023 at 08:13, <qianfangui...@163.com> wrote: > > From: qianfan Zhao <qianfangui...@163.com> > > TWI_CNTR_INT_FLAG is W1C(write 1 to clear and write 0 has non-effect) > register on SUN6i based SoCs, we should lower interrupt when the guest > set this bit. > > The linux kernel will hang in irq handler(mv64xxx_i2c_intr) if no > device connected on the i2c bus, next is the trace log: > > allwinner_i2c_write write CNTR(0x0c): 0xc4 A_ACK BUS_EN INT_EN > allwinner_i2c_write write CNTR(0x0c): 0xcc A_ACK INT_FLAG BUS_EN INT_EN > allwinner_i2c_read read CNTR(0x0c): 0xcc A_ACK INT_FLAG BUS_EN INT_EN > allwinner_i2c_read read STAT(0x10): 0x20 STAT_M_ADDR_WR_NACK > allwinner_i2c_write write CNTR(0x0c): 0x54 A_ACK M_STP BUS_EN > allwinner_i2c_write write CNTR(0x0c): 0x4c A_ACK INT_FLAG BUS_EN > allwinner_i2c_read read CNTR(0x0c): 0x4c A_ACK INT_FLAG BUS_EN > allwinner_i2c_read read STAT(0x10): 0xf8 STAT_IDLE > allwinner_i2c_write write CNTR(0x0c): 0x54 A_ACK M_STP BUS_EN > allwinner_i2c_write write CNTR(0x0c): 0x4c A_ACK INT_FLAG BUS_EN > allwinner_i2c_read read CNTR(0x0c): 0x4c A_ACK INT_FLAG BUS_EN > allwinner_i2c_read read STAT(0x10): 0xf8 STAT_IDLE > ... > > Fix it. > > Signed-off-by: qianfan Zhao <qianfangui...@163.com>
Reviewed-by: Peter Maydell <peter.mayd...@linaro.org> thanks -- PMM