From: Stephen Warren <swarren@wwwdotorg.org>
To: Linus Walleij <linus.walleij@linaro.org>
Cc: Lars Poeschel <poeschel@lemonage.de>,
Javier Martinez Canillas <javier.martinez@collabora.co.uk>,
Mark Brown <broonie@kernel.org>,
Lars Poeschel <larsi@wh2.tu-dresden.de>,
Grant Likely <grant.likely@linaro.org>,
"linux-gpio@vger.kernel.org" <linux-gpio@vger.kernel.org>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
"devicetree@vger.kernel.org" <devicetree@vger.kernel.org>,
Mark Rutland <mark.rutland@arm.com>,
Ian Campbell <ian.campbell@citrix.com>,
Kumar Gala <galak@codeaurora.org>,
Pawel Moll <pawel.moll@arm.com>,
Tomasz Figa <tomasz.figa@gmail.com>,
Enric Balletbo i Serra <eballetbo@gmail.com>,
Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>,
Santosh Shilimkar <santosh.shilimkar@ti.com>,
Kevin Hilman <khilman@linaro.org>, Balaji T K <balajitk@ti.com>,
Tony Lindgren <tony@atomide.com>,
Jon Hunter <jgchunter@gmail.com>,
joelf@ti.com, Laur
Subject: Re: [PATCH v3] gpio: interrupt consistency check for OF GPIO IRQs
Date: Mon, 23 Sep 2013 14:21:39 -0600 [thread overview]
Message-ID: <5240A2D3.20105@wwwdotorg.org> (raw)
In-Reply-To: <CACRpkdY=cgtf6_eypfAAv-fvmiNgAYyz4StTgDie5THsbrcumg@mail.gmail.com>
On 09/23/2013 02:01 PM, Linus Walleij wrote:
> On Mon, Sep 16, 2013 at 7:09 PM, Stephen Warren <swarren@wwwdotorg.org> wrote:
>
>> Put another way, I don't believe
>> there's any rule when writing DT bindings that states that bindings must
>> not describe the same pin as both a GPIO and an IRQ, although admittedly
>> that may be unusual.
>
> Actually I think you've won me over here.
>
> But I do not think that this shall be done at the expense of letting
> DT-based drivers do nasty things like setting up the same GPIO
> line as an IRQ (hammering the hardware to do that) and then
> request the same line to be an output line and drive it, for
> example.
>
> So the state of the GPIO line has to be tracked: if it is set as
> input and tied to an IRQ it should *not* be possible for the
> other code path to request it and set it as output. But it should
> be possible to set it as input again and read the value.
>
> Laurent deascribed exactly the latter usecase, which is OK.
>
>>> I agree with you that it would be the best if the only call would be
>>> request_irq and the chip driver programs the HW appropriately. It would be a
>>> dream, but unfortunately this is not possible at the moment. This is something
>>> that Linus pointed out very very early in this whole discussion. The gpio and
>>> irq frameworks don't share any information. The irq framework has no chance to
>>> program the HW, because it will never find the related gpio.
>>> For this to work the frameworks have to change (and possibly all drivers/board
>>> files/whatever using request_irq() and/or request_gpio()) have to change.
>>> That is something that I do not dare to do alone.
>>
>> This is a controller-specific issue, and has nothing to do with the GPIO
>> or IRQ frameworks. The driver for the combined irq/gpio_chip simply
>> needs to program the HW when the IRQ is requested or set up. The Tegra
>> driver already works this way, so there's actual proof that it is
>> possible to do this in practice.
>
> And how to you block the same line from being gpio_request()ed
> and set as output?
To be honest, I really don't think this problem is terribly likely to
occur, so I'm really not convinced that it's worth putting a lot of
effort into solving it.
If the problem does occur, it's trivial to see that this has happened by
looking at /proc/interrupts and /sys/kernel/debug/gpio, assuming the
system doesn't hang when this happens due to an interrupt storm, and if
it does, it should be pretty easy to track down the problematic register
write.
That said, I'm not outright against the kernel checking for this
situation. I think it'd work as follows:
The only code that knows the correlation between the IRQ and GPIO in
question is the combined gpio_chip/irq_chip driver. Everything /has/ to
be driven through that driver. In some cases, an IRQ may not be related
to any GPIO at all; there are certainly IRQ controllers which take
inputs directly from outside the chip, but have no GPIO functionality at
all on those signals.
That driver needs to maintain some state that indicates which of its
IRQs have been requested. Any time a GPIO request (I mean e.g.
set_output() not request_gpio)) comes in, the request needs to be
validated against that IRQ usage state. If there's a conflict, deny the
GPIO request.
Now, it's quite possible that the code to maintain this state and
perform the checks will be similar/common across multiple drivers. If
so, by all means implement the code somewhere common, and have the
various irq_chip/gpio_chip drivers call into it.
The main thing is that all of this has to be driven/controlled/enabled
by the gpio_chip/irq_chip driver itself, not as some global/blanket
feature of the GPIO or IRQ subsystems.
Perhaps rather than having the gpio_chip/irq_chip drivers physically
implement a function which calls this common code, they could set some
flags/data/... in the struct gpio_chip/irq_chip indicating that they
desire the core code that implements the error-checking to be enabled.
That might save some levels of stack. But the key is still that the
whole scenario is controlled by the end driver, not always assumed to
apply by the core code.
next prev parent reply other threads:[~2013-09-23 20:21 UTC|newest]
Thread overview: 53+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-08-26 14:07 [PATCH v3] gpio: interrupt consistency check for OF GPIO IRQs Lars Poeschel
2013-08-27 20:17 ` Stephen Warren
2013-08-27 20:38 ` Santosh Shilimkar
2013-08-29 19:26 ` Linus Walleij
2013-08-30 0:24 ` Javier Martinez Canillas
2013-08-30 19:55 ` Stephen Warren
2013-09-02 9:25 ` Lars Poeschel
2013-09-03 17:27 ` Stephen Warren
2013-09-04 9:05 ` Lars Poeschel
2013-09-04 20:16 ` Stephen Warren
2013-09-09 16:19 ` Mark Brown
2013-09-10 8:47 ` Lars Poeschel
2013-09-10 13:56 ` Javier Martinez Canillas
2013-09-10 19:52 ` Stephen Warren
2013-09-10 21:23 ` Javier Martinez Canillas
2013-09-11 5:24 ` Joel Fernandes
2013-09-10 19:53 ` Stephen Warren
2013-09-10 21:37 ` Mark Brown
2013-09-10 22:34 ` Stephen Warren
2013-09-11 0:52 ` Javier Martinez Canillas
2013-09-11 19:43 ` Stephen Warren
[not found] ` <5230C7F6.3080803-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org>
2013-09-16 16:03 ` Lars Poeschel
2013-09-16 17:09 ` Stephen Warren
[not found] ` <52373B34.4060709-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org>
2013-09-22 17:01 ` Javier Martinez Canillas
2013-09-23 20:01 ` Linus Walleij
2013-09-23 20:21 ` Stephen Warren [this message]
2013-09-24 8:31 ` Linus Walleij
[not found] ` <CACRpkdZ7E7MGppbkTiObvTDHdmphnbysMKVc1OZjsPXKVuKttQ-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2013-09-24 16:59 ` Stephen Warren
[not found] ` <5241C4DB.9090200-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org>
2013-10-11 8:16 ` Linus Walleij
2013-09-23 19:41 ` Linus Walleij
2013-09-23 19:53 ` Linus Walleij
2013-09-23 20:12 ` Stephen Warren
2013-09-24 8:26 ` Linus Walleij
[not found] ` <CACRpkdZKqW9veHzc1Rgj4oKsjGRATk+Sz8vJaP3EfT4de+bjQA-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2013-09-24 16:56 ` Stephen Warren
[not found] ` <20130909161924.GT29403-GFdadSzt00ze9xe1eoZjHA@public.gmane.org>
2013-11-11 18:28 ` Gerlando Falauto
2013-11-11 18:53 ` Stephen Warren
[not found] ` <528127B2.80109-3lzwWm7+Weoh9ZMKESR00Q@public.gmane.org>
2013-11-11 19:17 ` Gerlando Falauto
2013-11-11 19:33 ` Stephen Warren
2013-11-11 19:38 ` Tomasz Figa
2013-11-12 10:29 ` Linus Walleij
2013-09-03 12:43 ` Linus Walleij
2013-09-03 17:32 ` Stephen Warren
2013-08-30 19:53 ` Stephen Warren
2013-09-02 9:38 ` Lars Poeschel
2013-09-03 17:29 ` Stephen Warren
2013-09-04 9:21 ` Lars Poeschel
2013-09-04 20:18 ` Stephen Warren
2013-09-03 12:35 ` Linus Walleij
2013-09-03 17:29 ` Stephen Warren
2013-09-04 8:35 ` Lars Poeschel
2013-09-04 20:13 ` Stephen Warren
[not found] ` <CAK7N6vrEXVyLHpY-v+SJ668hC0wvHrWOgtviAQ+w5yis7p_E4Q@mail.gmail.com>
2013-09-03 17:22 ` Stephen Warren
2013-08-29 15:14 ` Strashko, Grygorii
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=5240A2D3.20105@wwwdotorg.org \
--to=swarren@wwwdotorg.org \
--cc=balajitk@ti.com \
--cc=broonie@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=eballetbo@gmail.com \
--cc=galak@codeaurora.org \
--cc=grant.likely@linaro.org \
--cc=ian.campbell@citrix.com \
--cc=javier.martinez@collabora.co.uk \
--cc=jgchunter@gmail.com \
--cc=joelf@ti.com \
--cc=khilman@linaro.org \
--cc=larsi@wh2.tu-dresden.de \
--cc=linus.walleij@linaro.org \
--cc=linux-gpio@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mark.rutland@arm.com \
--cc=pawel.moll@arm.com \
--cc=plagnioj@jcrosoft.com \
--cc=poeschel@lemonage.de \
--cc=santosh.shilimkar@ti.com \
--cc=tomasz.figa@gmail.com \
--cc=tony@atomide.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).