Message ID | 1487758280-22801-1-git-send-email-a.hajda@samsung.com (mailing list archive) |
---|---|
State | Not Applicable |
Headers | show |
Hi, On 2017-02-22 11:11, Andrzej Hajda wrote: > 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 <a.hajda@samsung.com> With this patch TM2 board boots fine on linux-next from 21st Feb 2017 and maxcpus=1 in kernel command line. Tested-by: Marek Szyprowski <m.szyprowski@samsung.com> > --- > v2: > - removed doubled conditional > > drivers/i2c/busses/i2c-exynos5.c | 7 ++++++- > 1 file changed, 6 insertions(+), 1 deletion(-) > > diff --git a/drivers/i2c/busses/i2c-exynos5.c b/drivers/i2c/busses/i2c-exynos5.c > index bea6071..00e81e3 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++]; Best regards
Hi Andrzej, On Wed, Feb 22, 2017 at 11:11:20AM +0100, Andrzej Hajda wrote: > 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 <a.hajda@samsung.com> Looks good, Tested-by: Andi Shyti <andi.shyti@samsung.com> Reviewed-by: Andi Shyti <andi.shyti@samsung.com> Thanks, Andi -- To unsubscribe from this list: send the line "unsubscribe linux-samsung-soc" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Wed, Feb 22, 2017 at 11:11:20AM +0100, Andrzej Hajda wrote: > 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 <a.hajda@samsung.com> Applied to for-next (will be in this merge window), thanks!
diff --git a/drivers/i2c/busses/i2c-exynos5.c b/drivers/i2c/busses/i2c-exynos5.c index bea6071..00e81e3 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++];
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 <a.hajda@samsung.com> --- v2: - removed doubled conditional drivers/i2c/busses/i2c-exynos5.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-)