From: Jon Hunter <jon-hunter@ti.com>
To: Javier Martinez Canillas <martinez.javier@gmail.com>
Cc: Stephen Warren <swarren@wwwdotorg.org>,
Stephen Warren <swarren@nvidia.com>,
Kevin Hilman <khilman@deeprootsystems.com>,
"devicetree-discuss@lists.ozlabs.org"
<devicetree-discuss@lists.ozlabs.org>,
"linux-omap@vger.kernel.org" <linux-omap@vger.kernel.org>,
"linux-arm-kernel@lists.infradead.org"
<linux-arm-kernel@lists.infradead.org>,
Linus Walleij <linus.walleij@linaro.org>,
Grant Likely <grant.likely@secretlab.ca>
Subject: Re: [PATCH 3/5] gpio/omap: Add DT support to GPIO driver
Date: Thu, 28 Feb 2013 14:49:03 -0600 [thread overview]
Message-ID: <512FC2BF.3030106@ti.com> (raw)
In-Reply-To: <CAAwP0s0ncaZx4F6KuLGihyrykRssyFtb5euCNRutriANH=z4Ng@mail.gmail.com>
On 02/28/2013 06:17 AM, Javier Martinez Canillas wrote:
> On Thu, Feb 28, 2013 at 12:16 AM, Jon Hunter <jon-hunter@ti.com> wrote:
>>
>> On 02/26/2013 09:57 PM, Javier Martinez Canillas wrote:
>>
>> [snip]
>>
>>> Something like that would definitely solve the GPIO request issue but
>>> we still have the issue that the current OMAP GPIO controller binding
>>> does not support #interrupt-cells = <2>.
>>>
>>> So, we can't pass the trigger type and level flags for an IRQ-GPIO
>>> when using an GPIO controller as the interrupt-parent for a device
>>> node.
>>>
>>> Do you have any comments on that issue?
>>
>> Can you elaborate a bit more on why you say this is not supported?
>>
>> I have been playing with this today on an omap board and if I set the
>> #interrupt-cells = <2>, then I do see that irq_domain_xlate_onetwocell()
>> is called and the irq number and flags read as expected. Following which
>> I then see it will call the omap_irq_type() to set type. So AFAICT it works.
>>
>
> Yes, it does.
>
> I (wrongly) assumed that it was not working since the GPIO OMAP
> binding documentation says that #interrupt-cells should be <2> but all
> OMAP2+ DTs use <1> instead. Also, when trying to change to <2> I had
> the kernel hang.
>
> But it was indeed that the GPIO bank was not enabled before calling
> gpio_irq_type() and this made the kernel to hang. Your patch fixed the
> issue and allowed me to find the cause.
>
> The problem was that when using the DT hack of defining the GPIO in
> the ethernet chip regulator, the calls to
> irq_domain_xlate_onetwocell() and gpio_irq_type() were made before the
> call to gpio_request_one() so the GPIO bank was not enabled.
>
> If gpio_request() is called in gpmc_probe_dt(), then the GPIO bank is
> enabled and gpio_irq_type() succeeds.
>
> So, it was just me being stupid and don't understanding the implementation.
No problem. Glad we are on the same page :-)
>> Please note I do see that when the SMC driver calls request_irq() in
>> smc_drv_probe() it is also settings the trigger type to
>> IRQ_TYPE_EDGE_RISING (default). So if you are setting to low-level
>> sensitive in DT, then this is being overwritten. We could fix this by
>> setting SMC_IRQ_FLAGS to -1 for OMAP.
>>
>
> Please note that I'm using a SMSC 911x chip and not a SMSC 91x, so the
> driver is not smc91x but smc911x. It has the same behaviour though
> (IRQ flags overwritten somehow), just to be sure that we are on the
> same page.
>
> I don't know if just setting SMC_IRQ_FLAGS to -1 will be enough to fix
> the smc91x since request_irq() is just passing whatever value is in
> irq_flags.
>
> By looking at the two drivers (smc91x and smsc911x) it seems that the
> only difference on how they manage the flags is that smc91x does:
>
> unsigned long irq_flags = SMC_IRQ_FLAGS;
> ...
> if (irq_flags == -1 || ires->flags & IRQF_TRIGGER_MASK)
> irq_flags = ires->flags & IRQF_TRIGGER_MASK;
>
> while smsc911x driver's probe function uses the flags from the
> resource unconditionally:
>
> irq_flags = irq_res->flags & IRQF_TRIGGER_MASK;
>
> So, at the end both will set irq_flags to whatever is on the
> IORESOURCE_IRQ struct resource flags member.
Actually, that's not the case for smc91x. By default SMC_IRQ_FLAGS != -1
(for omap) and so it will not set irq_flags to ires->flags &
IRQF_TRIGGER_MASK. However, if I force irq_flags to be -1, then I see
that irq_flags are to 0.
> The real problem is irq_flags to be 0 instead of the value defined on
> the second cell of the "interrupts" property.
So the resource flags for each irq is set in
of_irq_to_resource() which just does ...
r->start = r->end = irq;
r->flags = IORESOURCE_IRQ;
r->name = name ? name : dev->full_name;
of_irq_to_resource() calls irq_to_parse_and_map() which eventually just
calls irq_set_irq_type() but type/flags is not returned and not populated.
I am wondering if this is intentional. The irq_type is being correctly
configured by irq_set_irq_type() when of_irq_to_resource() is called. In
the smc driver, if irq_flags are 0, then when request_irq() is called
the trigger type will not be set again (which is ok). __setup_irq has
the following ...
/* Setup the type (level, edge polarity) if configured: */
if (new->flags & IRQF_TRIGGER_MASK) {
ret = __irq_set_trigger(desc, irq,
new->flags & IRQF_TRIGGER_MASK);
Cheers
Jon
next prev parent reply other threads:[~2013-02-28 20:49 UTC|newest]
Thread overview: 95+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-02-15 16:04 [PATCH 0/5] gpio/omap: Cleanup and adaptation to Device Tree Benoit Cousson
2012-02-15 16:04 ` [PATCH 1/5] gpio/omap: Remove bank->id information and misc cleanup Benoit Cousson
2012-02-16 5:53 ` DebBarma, Tarun Kanti
2012-02-16 9:33 ` Cousson, Benoit
2012-02-15 16:04 ` [PATCH 2/5] gpio/omap: Use devm_ API and add request_mem_region Benoit Cousson
2012-02-16 5:41 ` DebBarma, Tarun Kanti
2012-02-16 6:35 ` Grant Likely
2012-02-16 7:11 ` DebBarma, Tarun Kanti
2012-02-16 6:37 ` Shubhrajyoti
2012-02-16 8:56 ` Cousson, Benoit
2012-02-15 16:04 ` [PATCH 3/5] gpio/omap: Add DT support to GPIO driver Benoit Cousson
2012-02-22 14:23 ` Rob Herring
2012-02-22 14:31 ` Cousson, Benoit
2012-02-22 17:23 ` Rob Herring
2012-02-22 18:29 ` Stephen Warren
2012-02-24 15:30 ` Cousson, Benoit
2013-02-26 10:01 ` Javier Martinez Canillas
2013-02-26 16:33 ` Stephen Warren
2013-02-26 22:40 ` Jon Hunter
2013-02-26 22:44 ` Stephen Warren
2013-02-26 23:01 ` Jon Hunter
2013-02-26 23:06 ` Stephen Warren
2013-02-26 23:45 ` Jon Hunter
2013-02-27 0:13 ` Stephen Warren
2013-02-27 1:07 ` Jon Hunter
2013-02-27 3:57 ` Javier Martinez Canillas
2013-02-27 17:50 ` Stephen Warren
2013-02-27 20:05 ` Javier Martinez Canillas
2013-02-27 23:16 ` Jon Hunter
2013-02-28 12:17 ` Javier Martinez Canillas
2013-02-28 20:49 ` Jon Hunter [this message]
[not found] ` <512D3EC2.6050408-l0cyMroinI0@public.gmane.org>
2013-03-02 20:05 ` Grant Likely
2013-03-07 23:14 ` Jon Hunter
2013-03-15 11:21 ` Javier Martinez Canillas
2013-03-22 8:10 ` Linus Walleij
2013-03-22 15:33 ` Stephen Warren
2013-03-22 22:52 ` Jon Hunter
2013-03-27 13:52 ` Linus Walleij
2013-03-27 16:09 ` Stephen Warren
2013-03-27 20:55 ` Linus Walleij
2013-03-29 17:01 ` Stephen Warren
2013-04-10 18:12 ` Linus Walleij
2013-04-10 20:29 ` Stephen Warren
2013-04-10 21:28 ` Linus Walleij
2013-04-11 20:30 ` Stephen Warren
2013-04-11 22:16 ` Linus Walleij
2013-04-11 22:47 ` Stephen Warren
2013-04-14 1:35 ` Javier Martinez Canillas
2013-04-14 20:53 ` Linus Walleij
2013-04-15 11:25 ` Javier Martinez Canillas
2013-04-15 16:58 ` Stephen Warren
[not found] ` <516C73C6.5050409@ti.co m>
2013-04-15 21:40 ` Jon Hunter
2013-04-15 21:44 ` Jon Hunter
2013-04-15 22:16 ` Stephen Warren
2013-04-15 23:04 ` Jon Hunter
2013-04-16 18:40 ` Stephen Warren
2013-04-16 19:27 ` Jon Hunter
2013-04-16 21:57 ` Jon Hunter
2013-04-16 22:11 ` Stephen Warren
2013-04-16 23:14 ` Jon Hunter
2013-04-17 0:41 ` Javier Martinez Canillas
2013-04-17 2:00 ` Jon Hunter
2013-04-17 7:55 ` Javier Martinez Canillas
[not found] ` <CAAwP0s2M2pnSydyDvh_rejFO=w8bCo4WE5PkxrYuk0HQDixc-Q-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2013-04-17 13:25 ` Jon Hunter
2013-04-17 13:42 ` Javier Martinez Canillas
[not found] ` <CAAwP0s2DsJAWuXWvPAkzCT0T0AG_OvMEw2sADW6LqSi1Ofd_Zw-JsoAwUIsXosN+BqQ9rBEUg@public.gmane.org>
2013-04-17 13:52 ` Jon Hunter
2013-04-17 14:21 ` Javier Martinez Canillas
2013-04-17 16:18 ` Javier Martinez Canillas
2013-04-26 7:31 ` Linus Walleij
2013-04-26 21:31 ` Jon Hunter
2013-06-11 21:25 ` Grant Likely
2013-06-12 9:43 ` Linus Walleij
2013-04-17 15:41 ` Stephen Warren
2013-04-26 7:27 ` Linus Walleij
2013-04-26 21:25 ` Jon Hunter
[not found] ` <517AF0C1.60009-l0cyMroinI0@public.gmane.org>
2013-05-03 14:35 ` Linus Walleij
2013-04-26 7:11 ` Linus Walleij
2013-04-26 6:59 ` Linus Walleij
2013-04-15 16:53 ` Stephen Warren
2013-04-15 20:00 ` Jon Hunter
2013-04-11 22:49 ` Javier Martinez Canillas
2013-04-11 22:51 ` Stephen Warren
2013-04-10 21:44 ` Arnd Bergmann
2013-02-27 3:33 ` Javier Martinez Canillas
2013-02-27 17:47 ` Stephen Warren
2013-02-27 20:00 ` Javier Martinez Canillas
2013-02-26 23:08 ` Jon Hunter
2013-02-27 3:47 ` Javier Martinez Canillas
2013-02-27 20:13 ` Jon Hunter
2013-02-27 23:41 ` Linus Walleij
2013-02-28 13:04 ` Benoit Cousson
2013-03-01 0:09 ` Linus Walleij
2013-03-01 0:42 ` Jon Hunter
2012-02-15 16:04 ` [PATCH 4/5] arm/dts: OMAP4: Add gpio nodes Benoit Cousson
2012-02-15 16:04 ` [PATCH 5/5] arm/dts: OMAP3: " Benoit Cousson
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=512FC2BF.3030106@ti.com \
--to=jon-hunter@ti.com \
--cc=devicetree-discuss@lists.ozlabs.org \
--cc=grant.likely@secretlab.ca \
--cc=khilman@deeprootsystems.com \
--cc=linus.walleij@linaro.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-omap@vger.kernel.org \
--cc=martinez.javier@gmail.com \
--cc=swarren@nvidia.com \
--cc=swarren@wwwdotorg.org \
/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).