Message ID | 20230726092350.3432837-1-carlos.song@nxp.com |
---|---|
State | Changes Requested |
Delegated to: | Andi Shyti |
Headers | show |
Series | [v3] i2c: imx-lpi2c: directly return ISR when detect a NACK | expand |
Hi Carlos, On Wed, Jul 26, 2023 at 05:23:50PM +0800, carlos.song@nxp.com wrote: > From: Carlos Song <carlos.song@nxp.com> > > A NACK flag in ISR means i2c bus error. In such condition, > there is no need to do read/write operation. > > In this patch, i2c will check MSR_NDF, MSR_RDF and MSR_TDF > flag in turn, it's making mutually exclusive NACK/read/write. > So when a NACK is received(MSR_NDF), i2c will return ISR > directly and then stop i2c transfer. Very good, thank you! > Fixes: a55fa9d0e42e ("i2c: imx-lpi2c: add low power i2c bus driver") One last little question here. I want to know if this is actually fixing something or cleaning the exit path. What I mean is: can the device ever send an NDF along with an RDF or TDF? If not, this "Fixes:" tag should be removed and this patch can be considered a cleanup. Otherwise would be nice to know what failure are you fixing. I'm just trying to understand here :) Andi
> -----Original Message----- > From: Andi Shyti <andi.shyti@kernel.org> > Sent: Wednesday, July 26, 2023 10:52 PM > To: Carlos Song <carlos.song@nxp.com> > Cc: Aisheng Dong <aisheng.dong@nxp.com>; shawnguo@kernel.org; > s.hauer@pengutronix.de; kernel@pengutronix.de; festevam@gmail.com; Clark > Wang <xiaoning.wang@nxp.com>; Bough Chen <haibo.chen@nxp.com>; > dl-linux-imx <linux-imx@nxp.com>; linux-i2c@vger.kernel.org; > linux-arm-kernel@lists.infradead.org; linux-kernel@vger.kernel.org > Subject: [EXT] Re: [PATCH v3] i2c: imx-lpi2c: directly return ISR when detect a > NACK > > Caution: This is an external email. Please take care when clicking links or > opening attachments. When in doubt, report the message using the 'Report this > email' button > > > Hi Carlos, > > On Wed, Jul 26, 2023 at 05:23:50PM +0800, carlos.song@nxp.com wrote: > > From: Carlos Song <carlos.song@nxp.com> > > > > A NACK flag in ISR means i2c bus error. In such condition, there is no > > need to do read/write operation. > > > > In this patch, i2c will check MSR_NDF, MSR_RDF and MSR_TDF flag in > > turn, it's making mutually exclusive NACK/read/write. > > So when a NACK is received(MSR_NDF), i2c will return ISR directly and > > then stop i2c transfer. > > Very good, thank you! > > > Fixes: a55fa9d0e42e ("i2c: imx-lpi2c: add low power i2c bus driver") > > One last little question here. I want to know if this is actually fixing something or > cleaning the exit path. What I mean is: > can the device ever send an NDF along with an RDF or TDF? > > If not, this "Fixes:" tag should be removed and this patch can be considered a > cleanup. Otherwise would be nice to know what failure are you fixing. > > I'm just trying to understand here :) > > Andi Hi, Andi, Yes, no failure to fix just a cleanup. I will remove it and resend v4.
diff --git a/drivers/i2c/busses/i2c-imx-lpi2c.c b/drivers/i2c/busses/i2c-imx-lpi2c.c index c3287c887c6f..636ad3247982 100644 --- a/drivers/i2c/busses/i2c-imx-lpi2c.c +++ b/drivers/i2c/busses/i2c-imx-lpi2c.c @@ -514,14 +514,12 @@ static irqreturn_t lpi2c_imx_isr(int irq, void *dev_id) temp = readl(lpi2c_imx->base + LPI2C_MSR); temp &= enabled; - if (temp & MSR_RDF) - lpi2c_imx_read_rxfifo(lpi2c_imx); - - if (temp & MSR_TDF) - lpi2c_imx_write_txfifo(lpi2c_imx); - if (temp & MSR_NDF) complete(&lpi2c_imx->complete); + else if (temp & MSR_RDF) + lpi2c_imx_read_rxfifo(lpi2c_imx); + else if (temp & MSR_TDF) + lpi2c_imx_write_txfifo(lpi2c_imx); return IRQ_HANDLED; }