On 10/21/2019 5:16 AM, Wolfram Sang wrote:
spin_lock(&bus->lock);
irq_received = readl(bus->base + ASPEED_I2C_INTR_STS_REG);
+ if (!irq_received)
+ return IRQ_NONE;
+
/* Ack all interrupts except for Rx done */
writel(irq_received & ~ASPEED_I2CD_INTR_RX_DONE,
bus->base + ASPEED_I2C_INTR_STS_REG);
I think it's a right fix for the issue. At least, we need to prevent
any driver state corruption. The state machine would run correctly if
we filtering the garbage interrupt out.
Just unlock the spinlock before you return...
Thanks Wolfram!
Peter also pointed it out, and Eddie made a patch which includes the
spin_unlock.
Hi Eddie,
Can you please submit your patch into 'i2c-next' upstream?
Thanks,
Jae