From: "Westerberg, Mika" <mika.westerberg@intel.com>
To: "Zheng, Qi" <qi.zheng@intel.com>
Cc: "Zha, Qipeng" <qipeng.zha@intel.com>,
"linux-gpio@vger.kernel.org" <linux-gpio@vger.kernel.org>,
"linus.walleij@linaro.org" <linus.walleij@linaro.org>
Subject: Re: [PATCH 2/3] pinctrl:Intel: clear interrupt status for every IRQ setup
Date: Mon, 14 Mar 2016 10:44:57 +0200 [thread overview]
Message-ID: <20160314084457.GX1796@lahna.fi.intel.com> (raw)
In-Reply-To: <0DD381DBF8F68D419C32ACFCEB28EB2521D10345@SHSMSX101.ccr.corp.intel.com>
On Mon, Mar 14, 2016 at 03:24:06AM +0200, Zheng, Qi wrote:
>
> On Sat, Mar 12, 2016 at 01:06:01AM +0800, Qipeng Zha wrote:
> > There is one unexpected GPIO interrupt coming in below scenario.
> > 1. GPIO X is going to be used as falling edge interrupt.
> > 2. Before request_irq call, this GPIO X interrupt was masked.
> > 3. But the IRQ mode may be set for some mode in default (by BIOS).
> > 4. Toggle GPIO X from high to low.
> > 5. The GPIO X interrupt status will be set even if it was masked.
> > 6. Register the interrupt for GPIO X, the interrupt will be unmasked.
> > 7. Even if no change on GPIO X afterwards, but one GPIO X interrupt
> > will be triggered because the interrupt status was set.
> >
> > To avoid above issue, the interrupt status need clear before request_irq.
> >
> > Signed-off-by: Qi Zheng <qi.zheng@intel.com>
> > Signed-off-by: Qipeng Zha <qipeng.zha@intel.com>
> > ---
> > drivers/pinctrl/intel/pinctrl-intel.c | 2 ++
> > 1 file changed, 2 insertions(+)
> >
> > diff --git a/drivers/pinctrl/intel/pinctrl-intel.c
> > b/drivers/pinctrl/intel/pinctrl-intel.c
> > index ded5378..d6fe659 100644
> > --- a/drivers/pinctrl/intel/pinctrl-intel.c
> > +++ b/drivers/pinctrl/intel/pinctrl-intel.c
> > @@ -773,6 +773,8 @@ static int intel_gpio_irq_type(struct irq_data *d, unsigned type)
> > return -EPERM;
> > }
> >
> > + intel_gpio_irq_ack(d);
>
> > If the pin toggles right here, we still have the same issue, no?
>
> Yes. But it is very short time from here to the place IRQ got enabled.
That is still a race.
> To me, it is the only available platform dependent interface to do the "ACK" in the flow of request_irq.
> Maybe you have other better option here?
>
> > We should check in the interrupt handler whether the interrupt is actually enabled which I think we do already. Maybe that code has bug somewhere?
>
> The check in the interrupt handler can't distinguish if the interrupt status was set before or after the request_irq.
> On the Broxton RVP, one unexpected GPIO interrupt was captured during our GPIO unit test program.
> This issue can be fixed by this patch.
Drivers need to deal with the fact that they might get spurious
interrupts from time to time. You need to check in the interrupt handler
if the interrupt was from the device you are driving or not.
request_irq() enables the interrupt line and if the pin is already in
a state that triggers an interrupt, the driver interrupt handler will
be called.
next prev parent reply other threads:[~2016-03-14 8:45 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-03-11 17:06 [PATCH 1/3] pinctrl: Intel: add RX invertion config Qipeng Zha
2016-03-11 9:38 ` Mika Westerberg
2016-03-14 1:10 ` Zheng, Qi
2016-03-14 8:50 ` Westerberg, Mika
2016-03-14 8:56 ` Zheng, Qi
2016-03-14 12:26 ` Linus Walleij
2016-03-15 2:17 ` Zheng, Qi
2016-03-16 12:27 ` Linus Walleij
2016-03-16 13:34 ` Daniel Vetter
[not found] ` <20160316133412.GN14170-dv86pmgwkMBes7Z6vYuT8azUEOm+Xw19@public.gmane.org>
2016-03-17 14:41 ` Linus Walleij
2016-03-17 15:14 ` [Intel-gfx] " Jani Nikula
2016-03-11 17:06 ` [PATCH 2/3] pinctrl:Intel: clear interrupt status for every IRQ setup Qipeng Zha
2016-03-11 9:45 ` Mika Westerberg
2016-03-14 1:24 ` Zheng, Qi
2016-03-14 8:44 ` Westerberg, Mika [this message]
2016-03-14 9:02 ` Zheng, Qi
2016-03-14 9:20 ` Westerberg, Mika
2016-03-14 12:40 ` Linus Walleij
2016-03-14 12:54 ` Westerberg, Mika
2016-03-14 13:00 ` Westerberg, Mika
2016-03-14 14:26 ` Westerberg, Mika
2016-03-15 5:17 ` Zheng, Qi
2016-03-11 17:06 ` [PATCH 3/3] pinctrl:Intel: make the high level interrupt working Qipeng Zha
2016-03-11 9:49 ` Mika Westerberg
2016-03-14 1:26 ` Zheng, Qi
2016-03-14 1:40 ` Zheng, Qi
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20160314084457.GX1796@lahna.fi.intel.com \
--to=mika.westerberg@intel.com \
--cc=linus.walleij@linaro.org \
--cc=linux-gpio@vger.kernel.org \
--cc=qi.zheng@intel.com \
--cc=qipeng.zha@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).