From: Andrzej Hajda Date: Wed, 22 Feb 2017 10:11:20 +0000 (+0100) Subject: i2c: exynos5: disable fifo-almost-empty irq signal when necessary X-Git-Url: http://git.maquefel.me/?a=commitdiff_plain;h=fd1c9c8568439198a66f42108a9b01854e25346e;p=linux.git i2c: exynos5: disable fifo-almost-empty irq signal when necessary Fifo-almost-empty irq signal should be disabled as soon as possible, to avoid unnecessary interrupt storm. The best moment is when there is no more data to feed fifo. This patch fixes system stalls caused by IRQ storm. Signed-off-by: Andrzej Hajda Tested-by: Marek Szyprowski Tested-by: Andi Shyti Reviewed-by: Andi Shyti Signed-off-by: Wolfram Sang --- diff --git a/drivers/i2c/busses/i2c-exynos5.c b/drivers/i2c/busses/i2c-exynos5.c index bea607149972d..00e81e3564ff5 100644 --- a/drivers/i2c/busses/i2c-exynos5.c +++ b/drivers/i2c/busses/i2c-exynos5.c @@ -502,8 +502,13 @@ static irqreturn_t exynos5_i2c_irq(int irqno, void *dev_id) fifo_level = HSI2C_TX_FIFO_LVL(fifo_status); len = i2c->variant->fifo_depth - fifo_level; - if (len > (i2c->msg->len - i2c->msg_ptr)) + if (len > (i2c->msg->len - i2c->msg_ptr)) { + u32 int_en = readl(i2c->regs + HSI2C_INT_ENABLE); + + int_en &= ~HSI2C_INT_TX_ALMOSTEMPTY_EN; + writel(int_en, i2c->regs + HSI2C_INT_ENABLE); len = i2c->msg->len - i2c->msg_ptr; + } while (len > 0) { byte = i2c->msg->buf[i2c->msg_ptr++];