2021-05-27 12:06:23

by Qii Wang (王琪)

[permalink] [raw]
Subject: [PATCH] i2c: mediatek: Disable i2c start_en and clear intr_stat brfore reset

From: Qii Wang <[email protected]>

The i2c controller driver do dma reset after transfer timeout,
but sometimes dma reset will trigger an unexpected DMA_ERR irq.
It will cause the i2c controller to continuously send interrupts
to the system and cause soft lock-up. So we need to disable i2c
start_en and clear intr_stat to stop i2c controller before dma
reset when transfer timeout.

Signed-off-by: Qii Wang <[email protected]>
---
drivers/i2c/busses/i2c-mt65xx.c | 5 +++++
1 file changed, 5 insertions(+)

diff --git a/drivers/i2c/busses/i2c-mt65xx.c b/drivers/i2c/busses/i2c-mt65xx.c
index ea337ba..bfd80b2 100644
--- a/drivers/i2c/busses/i2c-mt65xx.c
+++ b/drivers/i2c/busses/i2c-mt65xx.c
@@ -479,6 +479,11 @@ static void mtk_i2c_clock_disable(struct mtk_i2c *i2c)
static void mtk_i2c_init_hw(struct mtk_i2c *i2c)
{
u16 control_reg;
+ u16 intr_stat_reg;
+
+ mtk_i2c_writew(i2c, I2C_CHN_CLR_FLAG, OFFSET_START);
+ intr_stat_reg = mtk_i2c_readw(i2c, OFFSET_INTR_STAT);
+ mtk_i2c_writew(i2c, intr_stat_reg, OFFSET_INTR_STAT);

if (i2c->dev_comp->apdma_sync) {
writel(I2C_DMA_WARM_RST, i2c->pdmabase + OFFSET_RST);
--
1.9.1


2021-05-27 20:23:56

by Wolfram Sang

[permalink] [raw]
Subject: Re: [PATCH] i2c: mediatek: Disable i2c start_en and clear intr_stat brfore reset

On Thu, May 27, 2021 at 08:04:04PM +0800, [email protected] wrote:
> From: Qii Wang <[email protected]>
>
> The i2c controller driver do dma reset after transfer timeout,
> but sometimes dma reset will trigger an unexpected DMA_ERR irq.
> It will cause the i2c controller to continuously send interrupts
> to the system and cause soft lock-up. So we need to disable i2c
> start_en and clear intr_stat to stop i2c controller before dma
> reset when transfer timeout.
>
> Signed-off-by: Qii Wang <[email protected]>

Is there a suitable Fixes tag for this?


Attachments:
(No filename) (584.00 B)
signature.asc (849.00 B)
Download all attachments

2021-05-28 07:07:47

by Qii Wang (王琪)

[permalink] [raw]
Subject: Re: [PATCH] i2c: mediatek: Disable i2c start_en and clear intr_stat brfore reset

On Thu, 2021-05-27 at 22:14 +0200, Wolfram Sang wrote:
> On Thu, May 27, 2021 at 08:04:04PM +0800, [email protected] wrote:
> > From: Qii Wang <[email protected]>
> >
> > The i2c controller driver do dma reset after transfer timeout,
> > but sometimes dma reset will trigger an unexpected DMA_ERR irq.
> > It will cause the i2c controller to continuously send interrupts
> > to the system and cause soft lock-up. So we need to disable i2c
> > start_en and clear intr_stat to stop i2c controller before dma
> > reset when transfer timeout.
> >
> > Signed-off-by: Qii Wang <[email protected]>
>
> Is there a suitable Fixes tag for this?
>

Can you help to add the following tag, thanks
Fixes: aafced673c06("i2c: mediatek: move dma reset before i2c reset")

2021-05-28 08:15:44

by Wolfram Sang

[permalink] [raw]
Subject: Re: [PATCH] i2c: mediatek: Disable i2c start_en and clear intr_stat brfore reset

On Fri, May 28, 2021 at 09:37:43AM +0800, Qii Wang wrote:
> On Thu, 2021-05-27 at 22:14 +0200, Wolfram Sang wrote:
> > On Thu, May 27, 2021 at 08:04:04PM +0800, [email protected] wrote:
> > > From: Qii Wang <[email protected]>
> > >
> > > The i2c controller driver do dma reset after transfer timeout,
> > > but sometimes dma reset will trigger an unexpected DMA_ERR irq.
> > > It will cause the i2c controller to continuously send interrupts
> > > to the system and cause soft lock-up. So we need to disable i2c
> > > start_en and clear intr_stat to stop i2c controller before dma
> > > reset when transfer timeout.
> > >
> > > Signed-off-by: Qii Wang <[email protected]>
> >
> > Is there a suitable Fixes tag for this?
> >
>
> Can you help to add the following tag, thanks
> Fixes: aafced673c06("i2c: mediatek: move dma reset before i2c reset")

Added this tag and applied to for-current, thanks!


Attachments:
(No filename) (939.00 B)
signature.asc (849.00 B)
Download all attachments