* [PATCH v4] Fix IRQ issue by setting IRQ_DISABLE_UNLAZY flag
@ 2023-05-02 10:29 Masahiro Honda
2023-05-03 8:09 ` Nuno Sá
0 siblings, 1 reply; 4+ messages in thread
From: Masahiro Honda @ 2023-05-02 10:29 UTC (permalink / raw)
To: Lars-Peter Clausen, Michael Hennerich, Jonathan Cameron
Cc: linux-iio, linux-kernel, Masahiro Honda
The Sigma-Delta ADCs supported by this driver can use SDO as an interrupt
line to indicate the completion of a conversion. However, some devices
cannot properly detect the completion of a conversion by an interrupt.
This is for the reason mentioned in the following commit.
commit e9849777d0e2 ("genirq: Add flag to force mask in
disable_irq[_nosync]()")
A read operation is performed by an extra interrupt before the completion
of a conversion. This patch fixes the issue by setting IRQ_DISABLE_UNLAZY
flag.
Signed-off-by: Masahiro Honda <honda@mechatrax.com>
---
v4:
- Remove the callback.
v3: https://lore.kernel.org/linux-iio/20230420102316.757-1-honda@mechatrax.com/
- Remove the Kconfig option.
v2: https://lore.kernel.org/linux-iio/20230414102744.150-1-honda@mechatrax.com/
- Rework commit message.
- Add a new entry in the Kconfig.
- Call irq_clear_status_flags(irq, IRQ_DISABLE_UNLAZY) when freeing the IRQ.
v1: https://lore.kernel.org/linux-iio/20230306044737.862-1-honda@mechatrax.com/
drivers/iio/adc/ad_sigma_delta.c | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/drivers/iio/adc/ad_sigma_delta.c b/drivers/iio/adc/ad_sigma_delta.c
index d8570f6207..7e21928707 100644
--- a/drivers/iio/adc/ad_sigma_delta.c
+++ b/drivers/iio/adc/ad_sigma_delta.c
@@ -584,6 +584,10 @@ static int devm_ad_sd_probe_trigger(struct device *dev, struct iio_dev *indio_de
init_completion(&sigma_delta->completion);
sigma_delta->irq_dis = true;
+
+ /* the IRQ core clears IRQ_DISABLE_UNLAZY flag when freeing an IRQ */
+ irq_set_status_flags(sigma_delta->spi->irq, IRQ_DISABLE_UNLAZY);
+
ret = devm_request_irq(dev, sigma_delta->spi->irq,
ad_sd_data_rdy_trig_poll,
sigma_delta->info->irq_flags | IRQF_NO_AUTOEN,
--
2.34.1
^ permalink raw reply related [flat|nested] 4+ messages in thread* Re: [PATCH v4] Fix IRQ issue by setting IRQ_DISABLE_UNLAZY flag
2023-05-02 10:29 [PATCH v4] Fix IRQ issue by setting IRQ_DISABLE_UNLAZY flag Masahiro Honda
@ 2023-05-03 8:09 ` Nuno Sá
2023-05-07 15:01 ` Jonathan Cameron
0 siblings, 1 reply; 4+ messages in thread
From: Nuno Sá @ 2023-05-03 8:09 UTC (permalink / raw)
To: Masahiro Honda, Lars-Peter Clausen, Michael Hennerich,
Jonathan Cameron
Cc: linux-iio, linux-kernel
On Tue, 2023-05-02 at 19:29 +0900, Masahiro Honda wrote:
> The Sigma-Delta ADCs supported by this driver can use SDO as an interrupt
> line to indicate the completion of a conversion. However, some devices
> cannot properly detect the completion of a conversion by an interrupt.
> This is for the reason mentioned in the following commit.
>
> commit e9849777d0e2 ("genirq: Add flag to force mask in
> disable_irq[_nosync]()")
>
> A read operation is performed by an extra interrupt before the completion
> of a conversion. This patch fixes the issue by setting IRQ_DISABLE_UNLAZY
> flag.
>
> Signed-off-by: Masahiro Honda <honda@mechatrax.com>
> ---
Reviewed-by: Nuno Sá <nuno.sa@analog.com>
> v4:
> - Remove the callback.
> v3:
> https://lore.kernel.org/linux-iio/20230420102316.757-1-honda@mechatrax.com/
> - Remove the Kconfig option.
> v2:
> https://lore.kernel.org/linux-iio/20230414102744.150-1-honda@mechatrax.com/
> - Rework commit message.
> - Add a new entry in the Kconfig.
> - Call irq_clear_status_flags(irq, IRQ_DISABLE_UNLAZY) when freeing the IRQ.
> v1:
> https://lore.kernel.org/linux-iio/20230306044737.862-1-honda@mechatrax.com/
>
> drivers/iio/adc/ad_sigma_delta.c | 4 ++++
> 1 file changed, 4 insertions(+)
>
> diff --git a/drivers/iio/adc/ad_sigma_delta.c
> b/drivers/iio/adc/ad_sigma_delta.c
> index d8570f6207..7e21928707 100644
> --- a/drivers/iio/adc/ad_sigma_delta.c
> +++ b/drivers/iio/adc/ad_sigma_delta.c
> @@ -584,6 +584,10 @@ static int devm_ad_sd_probe_trigger(struct device *dev,
> struct iio_dev *indio_de
> init_completion(&sigma_delta->completion);
>
> sigma_delta->irq_dis = true;
> +
> + /* the IRQ core clears IRQ_DISABLE_UNLAZY flag when freeing an IRQ */
> + irq_set_status_flags(sigma_delta->spi->irq, IRQ_DISABLE_UNLAZY);
> +
> ret = devm_request_irq(dev, sigma_delta->spi->irq,
> ad_sd_data_rdy_trig_poll,
> sigma_delta->info->irq_flags | IRQF_NO_AUTOEN,
^ permalink raw reply [flat|nested] 4+ messages in thread* Re: [PATCH v4] Fix IRQ issue by setting IRQ_DISABLE_UNLAZY flag
2023-05-03 8:09 ` Nuno Sá
@ 2023-05-07 15:01 ` Jonathan Cameron
2023-05-08 9:45 ` Masahiro Honda
0 siblings, 1 reply; 4+ messages in thread
From: Jonathan Cameron @ 2023-05-07 15:01 UTC (permalink / raw)
To: Nuno Sá
Cc: Masahiro Honda, Lars-Peter Clausen, Michael Hennerich, linux-iio,
linux-kernel
On Wed, 03 May 2023 10:09:28 +0200
Nuno Sá <noname.nuno@gmail.com> wrote:
Patch title should be something like the following so it's easy to see what
is affected when looking at a long list of patches.
iio: adc: ad_sigma_delta: Fix IRQ issue by setting IRQ_DISABLE_UNLAZY flag.
> On Tue, 2023-05-02 at 19:29 +0900, Masahiro Honda wrote:
> > The Sigma-Delta ADCs supported by this driver can use SDO as an interrupt
> > line to indicate the completion of a conversion. However, some devices
> > cannot properly detect the completion of a conversion by an interrupt.
> > This is for the reason mentioned in the following commit.
> >
> > commit e9849777d0e2 ("genirq: Add flag to force mask in
> > disable_irq[_nosync]()")
> >
> > A read operation is performed by an extra interrupt before the completion
> > of a conversion. This patch fixes the issue by setting IRQ_DISABLE_UNLAZY
> > flag.
> >
> > Signed-off-by: Masahiro Honda <honda@mechatrax.com>
> > ---
>
> Reviewed-by: Nuno Sá <nuno.sa@analog.com>
Fixes tag? We'll want to know how far to backport this. I assume it's
limited by the above commit as these drivers are older than that.
I'm also not totally sure what this 'looks like' for a user. What happens?
Fail to read, wrong value, lock up or something else? It would be helpful
to include that information in case anyone else runs into this.
Actual change looks right to me.
Thanks,
Jonathan
>
> > v4:
> > - Remove the callback.
> > v3:
> > https://lore.kernel.org/linux-iio/20230420102316.757-1-honda@mechatrax.com/
> > - Remove the Kconfig option.
> > v2:
> > https://lore.kernel.org/linux-iio/20230414102744.150-1-honda@mechatrax.com/
> > - Rework commit message.
> > - Add a new entry in the Kconfig.
> > - Call irq_clear_status_flags(irq, IRQ_DISABLE_UNLAZY) when freeing the IRQ.
> > v1:
> > https://lore.kernel.org/linux-iio/20230306044737.862-1-honda@mechatrax.com/
> >
> > drivers/iio/adc/ad_sigma_delta.c | 4 ++++
> > 1 file changed, 4 insertions(+)
> >
> > diff --git a/drivers/iio/adc/ad_sigma_delta.c
> > b/drivers/iio/adc/ad_sigma_delta.c
> > index d8570f6207..7e21928707 100644
> > --- a/drivers/iio/adc/ad_sigma_delta.c
> > +++ b/drivers/iio/adc/ad_sigma_delta.c
> > @@ -584,6 +584,10 @@ static int devm_ad_sd_probe_trigger(struct device *dev,
> > struct iio_dev *indio_de
> > init_completion(&sigma_delta->completion);
> >
> > sigma_delta->irq_dis = true;
> > +
> > + /* the IRQ core clears IRQ_DISABLE_UNLAZY flag when freeing an IRQ */
> > + irq_set_status_flags(sigma_delta->spi->irq, IRQ_DISABLE_UNLAZY);
> > +
> > ret = devm_request_irq(dev, sigma_delta->spi->irq,
> > ad_sd_data_rdy_trig_poll,
> > sigma_delta->info->irq_flags | IRQF_NO_AUTOEN,
>
^ permalink raw reply [flat|nested] 4+ messages in thread* Re: [PATCH v4] Fix IRQ issue by setting IRQ_DISABLE_UNLAZY flag
2023-05-07 15:01 ` Jonathan Cameron
@ 2023-05-08 9:45 ` Masahiro Honda
0 siblings, 0 replies; 4+ messages in thread
From: Masahiro Honda @ 2023-05-08 9:45 UTC (permalink / raw)
To: Jonathan Cameron
Cc: Nuno Sá, Lars-Peter Clausen, Michael Hennerich, linux-iio,
linux-kernel
Hi Jonathan,
Thank you for your advice.
On Sun, May 7, 2023 at 11:45 PM Jonathan Cameron <jic23@kernel.org> wrote:
>
> On Wed, 03 May 2023 10:09:28 +0200
> Nuno Sá <noname.nuno@gmail.com> wrote:
>
> Patch title should be something like the following so it's easy to see what
> is affected when looking at a long list of patches.
>
> iio: adc: ad_sigma_delta: Fix IRQ issue by setting IRQ_DISABLE_UNLAZY flag.
>
I'll fix the title.
>
> > On Tue, 2023-05-02 at 19:29 +0900, Masahiro Honda wrote:
> > > The Sigma-Delta ADCs supported by this driver can use SDO as an interrupt
> > > line to indicate the completion of a conversion. However, some devices
> > > cannot properly detect the completion of a conversion by an interrupt.
> > > This is for the reason mentioned in the following commit.
> > >
> > > commit e9849777d0e2 ("genirq: Add flag to force mask in
> > > disable_irq[_nosync]()")
> > >
> > > A read operation is performed by an extra interrupt before the completion
> > > of a conversion. This patch fixes the issue by setting IRQ_DISABLE_UNLAZY
> > > flag.
> > >
> > > Signed-off-by: Masahiro Honda <honda@mechatrax.com>
> > > ---
> >
> > Reviewed-by: Nuno Sá <nuno.sa@analog.com>
>
> Fixes tag? We'll want to know how far to backport this. I assume it's
> limited by the above commit as these drivers are older than that.
>
I'll try to add a fixes tag.
> I'm also not totally sure what this 'looks like' for a user. What happens?
> Fail to read, wrong value, lock up or something else? It would be helpful
> to include that information in case anyone else runs into this.
>
I'll add information to the commit message.
Regards,
Masahiro
> Actual change looks right to me.
>
> Thanks,
>
> Jonathan
>
>
> >
> > > v4:
> > > - Remove the callback.
> > > v3:
> > > https://lore.kernel.org/linux-iio/20230420102316.757-1-honda@mechatrax.com/
> > > - Remove the Kconfig option.
> > > v2:
> > > https://lore.kernel.org/linux-iio/20230414102744.150-1-honda@mechatrax.com/
> > > - Rework commit message.
> > > - Add a new entry in the Kconfig.
> > > - Call irq_clear_status_flags(irq, IRQ_DISABLE_UNLAZY) when freeing the IRQ.
> > > v1:
> > > https://lore.kernel.org/linux-iio/20230306044737.862-1-honda@mechatrax.com/
> > >
> > > drivers/iio/adc/ad_sigma_delta.c | 4 ++++
> > > 1 file changed, 4 insertions(+)
> > >
> > > diff --git a/drivers/iio/adc/ad_sigma_delta.c
> > > b/drivers/iio/adc/ad_sigma_delta.c
> > > index d8570f6207..7e21928707 100644
> > > --- a/drivers/iio/adc/ad_sigma_delta.c
> > > +++ b/drivers/iio/adc/ad_sigma_delta.c
> > > @@ -584,6 +584,10 @@ static int devm_ad_sd_probe_trigger(struct device *dev,
> > > struct iio_dev *indio_de
> > > init_completion(&sigma_delta->completion);
> > >
> > > sigma_delta->irq_dis = true;
> > > +
> > > + /* the IRQ core clears IRQ_DISABLE_UNLAZY flag when freeing an IRQ */
> > > + irq_set_status_flags(sigma_delta->spi->irq, IRQ_DISABLE_UNLAZY);
> > > +
> > > ret = devm_request_irq(dev, sigma_delta->spi->irq,
> > > ad_sd_data_rdy_trig_poll,
> > > sigma_delta->info->irq_flags | IRQF_NO_AUTOEN,
> >
>
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2023-05-08 9:46 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-05-02 10:29 [PATCH v4] Fix IRQ issue by setting IRQ_DISABLE_UNLAZY flag Masahiro Honda
2023-05-03 8:09 ` Nuno Sá
2023-05-07 15:01 ` Jonathan Cameron
2023-05-08 9:45 ` Masahiro Honda
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox