qianfan Zhao
		
	
	
		8461bfdca9
		
	
	
	
	hw: allwinner-i2c: Fix TWI_CNTR_INT_FLAG on SUN6i SoCs
		
			
			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 <qianfanguijin@163.com>
Reviewed-by: Strahinja Jankovic <strahinja.p.jankovic@gmail.com>
Tested-by: Strahinja Jankovic <strahinja.p.jankovic@gmail.com>
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
		
	
 
		2023-03-06 14:08:12 +00:00
	 
	
	
		 ..
	
	
	
		
			
			
			
			
			
			2023-03-06 14:08:12 +00:00
		 
	
		
			
			
			
			
			
			2023-01-23 13:32:38 +00:00
		 
	
		
			
			
			
			
			
			2022-10-24 11:20:15 +02:00
		 
	
		
			
			
			
			
			
			2023-01-23 13:32:38 +00:00
		 
	
		
			
			
			
			
			
			2022-05-11 16:50:01 +02:00
		 
	
		
			
			
			
			
			
			2023-03-02 13:57:50 +01:00
		 
	
		
			
			
			
			
			
			2020-09-18 14:12:32 -04:00
		 
	
		
			
			
			
			
			
			2020-09-18 14:12:32 -04:00
		 
	
		
			
			
			
			
			
			2023-01-12 17:15:09 +00:00
		 
	
		
			
			
			
			
			
			2019-08-16 13:31:52 +02:00
		 
	
		
			
			
			
			
			
			2022-07-14 16:24:38 +02:00
		 
	
		
			
			
			
			
			
			2020-09-18 14:12:32 -04:00
		 
	
		
			
			
			
			
			
			2020-04-29 08:01:52 +02:00
		 
	
		
			
			
			
			
			
			2019-02-27 21:06:08 -06:00
		 
	
		
			
			
			
			
			
			2020-09-18 14:12:32 -04:00