From: Javier Martinez Canillas <javier.martinez@collabora.co.uk>
To: Linus Walleij <linus.walleij@linaro.org>
Cc: Stephen Warren <swarren@wwwdotorg.org>,
Lars Poeschel <larsi@wh2.tu-dresden.de>,
Lars Poeschel <poeschel@lemonage.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>
Subject: Re: [PATCH v3] gpio: interrupt consistency check for OF GPIO IRQs
Date: Fri, 30 Aug 2013 02:24:23 +0200 [thread overview]
Message-ID: <521FE637.3010805@collabora.co.uk> (raw)
In-Reply-To: <CACRpkdaWPQTPw8u+97iV8MRB1fdeS40kd242pJd3UE9Ler4kRQ@mail.gmail.com>
On 08/29/2013 09:26 PM, Linus Walleij wrote:
> On Tue, Aug 27, 2013 at 10:17 PM, Stephen Warren <swarren@wwwdotorg.org> wrote:
>> On 08/26/2013 08:07 AM, Lars Poeschel wrote:
>>>
>>> Currently the kernel is ambigously treating GPIOs and interrupts
>>> from a GPIO controller: GPIOs and interrupts are treated as
>>> orthogonal. This unfortunately makes it unclear how to actually
>>> retrieve and request a GPIO line or interrupt from a GPIO
>>> controller in the device tree probe path.
>>
>> I still think that this patch is the wrong approach. Instead, the logic
>> should be hooked into gpio_request() and request_irq(). This patch only
>> addresses DT, and ignores anything else, hence doesn't seem like the
>> right level of abstraction to plug in, since the issue is not related to DT.
>
> We tried to do it that way, and it exploded. See commit
> b4419e1a15905191661ffe75ba2f9e649f5d565e
> "gpio/omap: auto request GPIO as input if used as IRQ via DT"
>
> Here request_irq() augmented through its irqdomain to
> issue gpio_request_one().
>
> Why was this patch reverted? It seems this is what has not
> managed to reach the audience here.
>
The mentioned patch also broke some ancient platforms that have not been (and
probably never will) migrated to DT like OMAP1.
So, after trying to add this logic by using a custom irq domain .map function
handler for the OMAP GPIO driver I agree with Linus that is better to provide a
solution at the Device Tree level to not affect platforms that are still using
legacy boot.
Legacy boot don't need a fix since it does not have this issue. Platform code
just request the GPIO and do the setup (gpio_direction_input) before the drivers
call to request_irq().
> It turns out some drivers were already doing this:
>
> request_gpio(gpio);
> gpio_direction_input(gpio);
> request_irq(gpio_to_irq(gpio));
>
> Looks perfectly valid right?
>
> Not so: after the above change, we tried to request the
> GPIO a *second time* in the GPIO driver's irq map function,
> and of course it failed, as it was already taken.
>
> So saying that it should be done in the request_irq()
> function is imposing this other semantic on the kernel
> instead: you must *NOT* request the GPIO with
> request_gpio() if you're going to use it as an IRQ.
>
> (Also, it force us to implement the same code in each
> and every driver, but that is a lesser problem.)
>
> I don't quite understand what is so hard around this.
> We cannot get away from restricting the semantics in
> some way, if gpio-controllers shall also be interrupt-controllers,
> the current patch is the least intrusive I've seen so far.
>
We have been trying to solve this issue for a few months by now and Linus'
approach seems to be the most sensible solution to me.
Drivers that request an IRQ and assume that platform code will request and setup
the GPIO have been broken since the boards using these drivers were migrated to
DT (e.g: smsc911x on OMAP2+ boards). I know is really hard to agree on the
better approach to solve this but it would be great if we can find a solution
and fix these broken platforms.
> And I don't even think this is a Linux problem, handing
> out the same resource with two hands is ambigous and is
> going to cause problems with any operating system.
> It is better to restrict this and say in the binding doc that
> the gpio line cannot be <&gpio n> assigned when there
> is an interrupt on the same line.
>
Indeed, if a driver wants to manually request a GPIO to be used as an IRQ, then
the DT binding for that driver should not use a gpio as "interrupt-parent" and
should leave the driver to handle this manually.
On the other hand, if a driver just calls request_irq() and it does not know if
the IRQ is a real interrupt line from an interrupt controller or a GPIO line
acting as an IRQ, then the DT binding should just have a required
"interrupt-parent" property to define the phandle for the interrupt controller
used which could or could not be a GPIO controller.
> We can start out by printing warnings when we fail to
> request the corresponding GPIO for an interrupt line
> though, it will be annoying enough and a kind of
> compromise.
>
If the GPIO pin is first requested because it is described to be an IRQ in a DT
and then a driver tries to request the same GPIO pin, then there is a bug in
either the DT or the driver IMHO. The same assumption is made with platform code
right now when using legacy boot, I don't understand why is different for the DT
case.
> Or it has to be the GPIO input hogs.
>
> Yours,
> Linus Walleij
>
Thanks a lot and best regards,
Javier
next prev parent reply other threads:[~2013-08-30 0:24 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 [this message]
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
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=521FE637.3010805@collabora.co.uk \
--to=javier.martinez@collabora.co.uk \
--cc=balajitk@ti.com \
--cc=devicetree@vger.kernel.org \
--cc=eballetbo@gmail.com \
--cc=galak@codeaurora.org \
--cc=grant.likely@linaro.org \
--cc=ian.campbell@citrix.com \
--cc=jgchunter@gmail.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=swarren@wwwdotorg.org \
--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).