From: Javier Martinez Canillas <martinez.javier@gmail.com>
To: Christoph Fritz <chf.fritz@googlemail.com>
Cc: "Benoît Cousson" <b-cousson@ti.com>,
"Tony Lindgren" <tony@atomide.com>,
"Russell King" <linux@arm.linux.org.uk>,
"linux-omap@vger.kernel.org" <linux-omap@vger.kernel.org>,
"devicetree-discuss@lists.ozlabs.org"
<devicetree-discuss@lists.ozlabs.org>,
"linux-arm-kernel@lists.infradead.org"
<linux-arm-kernel@lists.infradead.org>,
"Tarun Kanti DebBarma" <tarun.kanti@ti.com>,
"Daniel Mack" <daniel@zonque.org>,
"Hans J. Koch" <hjk@hansjkoch.de>,
"Jon Hunter" <jon-hunter@ti.com>
Subject: Re: [RFC][BUG] arm/dts: OMAP3: set #interrupt-cells to two
Date: Sat, 30 Mar 2013 14:18:19 +0100 [thread overview]
Message-ID: <CAAwP0s35J-edpvFv08xjjpwaezQBYNvMNhhXL-UacsuUtSt4ZA@mail.gmail.com> (raw)
In-Reply-To: <1364631689.3767.7.camel@mars>
On Sat, Mar 30, 2013 at 9:21 AM, Christoph Fritz
<chf.fritz@googlemail.com> wrote:
> This patch sets gpio #interrupt-cells from a falsely acquired '1' to '2'
> referring to Documentation/devicetree/bindings/gpio/gpio-omap.txt:
>
> The first cell is the GPIO number.
> The second cell is used to specify flags:
> bits[3:0] trigger type and level flags:
> 1 = low-to-high edge triggered.
> 2 = high-to-low edge triggered.
> 4 = active high level-sensitive.
> 8 = active low level-sensitive.
>
> But using this trigger cell in a board specific devicetree leads to a
> non-starting kernel. This is due to not yet enabled gpio-clocks while
> kernel/irq/irqdomain.c tries to set this trigger-flag (from the second
> interrupt-cell) to gpio-irq-controller.
>
> Any ideas?
Hi Christoph,
A call to gpio_request() to enable the GPIO bank is needed before
using a GPIO as an IRQ source, otherwise accesses to the GPIO bank
registers fails making the kernel to hang. Jon's (added as cc)
"gpio/omap: warn if bank is not enabled on setting irq type" patch [1]
fixes the issue by warning and returning -EINVAL.
This patch will make the kernel to boot but the call to request_irq()
will fail of course. For now, the only solution is to call
gpio_request() before request_irq() in your platform code or device
driver. There is an on going discussion about what's the better way to
address this but we still haven't found a good solution to this
problem, you can see the last email for this discussion here [2]
Also, even when calling gpio_request() before request_irq() this won't
work. When specifying the trigger/level flags on the second cell for
an GPIO-IRQ, this is not set on the IORESOURCE_IRQ struct resource.
The IRQ flag is set on of_irq_to_resource() but it just does:
r->flags = IORESOURCE_IRQ;
and then the call stack is irq_to_parse_and_map() ->
irq_set_irq_type() -> __irq_set_trigger() -> chip->irq_set_type() ->
(drivers/gpio/gpio-omap.c) gpio_irq_type().
So, even when gpio_irq_type() receive the correct flags, this are not
returned neither stored on the flags member of the IORESOURCE_IRQ
struct resource that passed to the drivers in their struct
platform_device.
I have on my TODO to better investigate if this behavior is
intentional or is a bug in the interrupt core but didn't have time to
work on this yet. A relevant discussion about this is here [3].
> ---
> arch/arm/boot/dts/omap3.dtsi | 12 ++++++------
> 1 file changed, 6 insertions(+), 6 deletions(-)
>
> diff --git a/arch/arm/boot/dts/omap3.dtsi b/arch/arm/boot/dts/omap3.dtsi
> index 1997b41..e8e6b8f 100644
> --- a/arch/arm/boot/dts/omap3.dtsi
> +++ b/arch/arm/boot/dts/omap3.dtsi
> @@ -99,7 +99,7 @@
> gpio-controller;
> #gpio-cells = <2>;
> interrupt-controller;
> - #interrupt-cells = <1>;
> + #interrupt-cells = <2>;
> };
>
> gpio2: gpio@49050000 {
> @@ -108,7 +108,7 @@
> gpio-controller;
> #gpio-cells = <2>;
> interrupt-controller;
> - #interrupt-cells = <1>;
> + #interrupt-cells = <2>;
> };
>
> gpio3: gpio@49052000 {
> @@ -117,7 +117,7 @@
> gpio-controller;
> #gpio-cells = <2>;
> interrupt-controller;
> - #interrupt-cells = <1>;
> + #interrupt-cells = <2>;
> };
>
> gpio4: gpio@49054000 {
> @@ -126,7 +126,7 @@
> gpio-controller;
> #gpio-cells = <2>;
> interrupt-controller;
> - #interrupt-cells = <1>;
> + #interrupt-cells = <2>;
> };
>
> gpio5: gpio@49056000 {
> @@ -135,7 +135,7 @@
> gpio-controller;
> #gpio-cells = <2>;
> interrupt-controller;
> - #interrupt-cells = <1>;
> + #interrupt-cells = <2>;
> };
>
> gpio6: gpio@49058000 {
> @@ -144,7 +144,7 @@
> gpio-controller;
> #gpio-cells = <2>;
> interrupt-controller;
> - #interrupt-cells = <1>;
> + #interrupt-cells = <2>;
> };
>
> uart1: serial@4806a000 {
> --
> 1.7.10.4
>
>
>
By the way, Jon has already sent a "ARM: dts: OMAP3+: Correct gpio
#interrupts-cells property" patch [4] that changes #interrupt-cells to
<2> for all OMAP platforms.
Best regards,
Javier
[1]: https://patchwork.kernel.org/patch/2202511/
[2]: http://www.spinics.net/lists/linux-omap/msg89247.html
[3]: https://patchwork.kernel.org/patch/2194911/
[4]: https://patchwork.kernel.org/patch/2278081/
next prev parent reply other threads:[~2013-03-30 13:18 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-03-30 8:21 [RFC][BUG] arm/dts: OMAP3: set #interrupt-cells to two Christoph Fritz
2013-03-30 13:18 ` Javier Martinez Canillas [this message]
2013-04-01 16:41 ` Christoph Fritz
2013-04-01 20:05 ` Javier Martinez Canillas
2013-04-02 15:55 ` Christoph Fritz
2013-04-02 16:38 ` Jon Hunter
2013-04-13 17:42 ` Christoph Fritz
2013-04-13 18:30 ` Javier Martinez Canillas
2013-04-13 18:59 ` Christoph Fritz
2013-04-13 21:40 ` Javier Martinez Canillas
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=CAAwP0s35J-edpvFv08xjjpwaezQBYNvMNhhXL-UacsuUtSt4ZA@mail.gmail.com \
--to=martinez.javier@gmail.com \
--cc=b-cousson@ti.com \
--cc=chf.fritz@googlemail.com \
--cc=daniel@zonque.org \
--cc=devicetree-discuss@lists.ozlabs.org \
--cc=hjk@hansjkoch.de \
--cc=jon-hunter@ti.com \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-omap@vger.kernel.org \
--cc=linux@arm.linux.org.uk \
--cc=tarun.kanti@ti.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).