On Mon, 20 Feb 2023 at 08:13, <[email protected]> wrote: > > From: qianfan Zhao <[email protected]> > > 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 <[email protected]>
Reviewed-by: Peter Maydell <[email protected]> thanks -- PMM
