All of lore.kernel.org
 help / color / mirror / Atom feed
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

WARNING: multiple messages have this Message-ID (diff)
From: jon-hunter@ti.com (Jon Hunter)
To: linux-arm-kernel@lists.infradead.org
Subject: [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

  reply	other threads:[~2013-02-28 20:49 UTC|newest]

Thread overview: 190+ 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 ` Benoit Cousson
2012-02-15 16:04 ` [PATCH 1/5] gpio/omap: Remove bank->id information and misc cleanup Benoit Cousson
2012-02-15 16:04   ` Benoit Cousson
2012-02-16  5:53   ` DebBarma, Tarun Kanti
2012-02-16  5:53     ` DebBarma, Tarun Kanti
2012-02-16  9:33     ` Cousson, Benoit
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-15 16:04   ` Benoit Cousson
2012-02-16  5:41   ` DebBarma, Tarun Kanti
2012-02-16  5:41     ` DebBarma, Tarun Kanti
2012-02-16  6:35     ` Grant Likely
2012-02-16  6:35       ` Grant Likely
2012-02-16  7:11       ` DebBarma, Tarun Kanti
2012-02-16  7:11         ` DebBarma, Tarun Kanti
2012-02-16  6:37     ` Shubhrajyoti
2012-02-16  6:37       ` Shubhrajyoti
2012-02-16  8:56       ` Cousson, Benoit
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-15 16:04   ` Benoit Cousson
2012-02-22 14:23   ` Rob Herring
2012-02-22 14:23     ` Rob Herring
2012-02-22 14:31     ` Cousson, Benoit
2012-02-22 14:31       ` Cousson, Benoit
2012-02-22 17:23       ` Rob Herring
2012-02-22 17:23         ` Rob Herring
2012-02-22 18:29         ` Stephen Warren
2012-02-22 18:29           ` Stephen Warren
2012-02-24 15:30           ` Cousson, Benoit
2012-02-24 15:30             ` Cousson, Benoit
2013-02-26 10:01             ` Javier Martinez Canillas
2013-02-26 10:01               ` Javier Martinez Canillas
2013-02-26 16:33               ` Stephen Warren
2013-02-26 16:33                 ` Stephen Warren
2013-02-26 22:40               ` Jon Hunter
2013-02-26 22:40                 ` Jon Hunter
2013-02-26 22:44                 ` Stephen Warren
2013-02-26 22:44                   ` Stephen Warren
2013-02-26 23:01                   ` Jon Hunter
2013-02-26 23:01                     ` Jon Hunter
2013-02-26 23:06                     ` Stephen Warren
2013-02-26 23:06                       ` Stephen Warren
2013-02-26 23:45                       ` Jon Hunter
2013-02-26 23:45                         ` Jon Hunter
2013-02-27  0:13                         ` Stephen Warren
2013-02-27  0:13                           ` Stephen Warren
2013-02-27  1:07                           ` Jon Hunter
2013-02-27  1:07                             ` Jon Hunter
2013-02-27  3:57                             ` Javier Martinez Canillas
2013-02-27  3:57                               ` Javier Martinez Canillas
2013-02-27 17:50                               ` Stephen Warren
2013-02-27 17:50                                 ` Stephen Warren
2013-02-27 20:05                                 ` Javier Martinez Canillas
2013-02-27 20:05                                   ` Javier Martinez Canillas
2013-02-27 23:16                               ` Jon Hunter
2013-02-27 23:16                                 ` Jon Hunter
2013-02-28 12:17                                 ` Javier Martinez Canillas
2013-02-28 12:17                                   ` Javier Martinez Canillas
2013-02-28 20:49                                   ` Jon Hunter [this message]
2013-02-28 20:49                                     ` Jon Hunter
     [not found]                     ` <512D3EC2.6050408-l0cyMroinI0@public.gmane.org>
2013-03-02 20:05                       ` Grant Likely
2013-03-02 20:05                         ` Grant Likely
2013-03-07 23:14                         ` Jon Hunter
2013-03-07 23:14                           ` Jon Hunter
2013-03-15 11:21                           ` Javier Martinez Canillas
2013-03-15 11:21                             ` Javier Martinez Canillas
2013-03-22  8:10                             ` Linus Walleij
2013-03-22  8:10                               ` Linus Walleij
2013-03-22 15:33                               ` Stephen Warren
2013-03-22 15:33                                 ` Stephen Warren
2013-03-22 22:52                                 ` Jon Hunter
2013-03-22 22:52                                   ` Jon Hunter
2013-03-27 13:52                                   ` Linus Walleij
2013-03-27 13:52                                     ` Linus Walleij
2013-03-27 16:09                                     ` Stephen Warren
2013-03-27 16:09                                       ` Stephen Warren
2013-03-27 20:55                                       ` Linus Walleij
2013-03-27 20:55                                         ` Linus Walleij
2013-03-29 17:01                                         ` Stephen Warren
2013-03-29 17:01                                           ` Stephen Warren
2013-04-10 18:12                                           ` Linus Walleij
2013-04-10 18:12                                             ` Linus Walleij
2013-04-10 20:29                                             ` Stephen Warren
2013-04-10 20:29                                               ` Stephen Warren
2013-04-10 21:28                                               ` Linus Walleij
2013-04-10 21:28                                                 ` Linus Walleij
2013-04-11 20:30                                                 ` Stephen Warren
2013-04-11 20:30                                                   ` Stephen Warren
2013-04-11 22:16                                                   ` Linus Walleij
2013-04-11 22:16                                                     ` Linus Walleij
2013-04-11 22:47                                                     ` Stephen Warren
2013-04-11 22:47                                                       ` Stephen Warren
2013-04-14  1:35                                                       ` Javier Martinez Canillas
2013-04-14  1:35                                                         ` Javier Martinez Canillas
2013-04-14 20:53                                                         ` Linus Walleij
2013-04-14 20:53                                                           ` Linus Walleij
2013-04-15 11:25                                                           ` Javier Martinez Canillas
2013-04-15 11:25                                                             ` Javier Martinez Canillas
2013-04-15 16:58                                                           ` Stephen Warren
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:40                                                               ` Jon Hunter
2013-04-15 21:44                                                               ` Jon Hunter
2013-04-15 21:44                                                                 ` Jon Hunter
2013-04-15 22:16                                                               ` Stephen Warren
2013-04-15 22:16                                                                 ` Stephen Warren
2013-04-15 23:04                                                                 ` Jon Hunter
2013-04-15 23:04                                                                   ` Jon Hunter
2013-04-16 18:40                                                                   ` Stephen Warren
2013-04-16 18:40                                                                     ` Stephen Warren
2013-04-16 19:27                                                                     ` Jon Hunter
2013-04-16 19:27                                                                       ` Jon Hunter
2013-04-16 21:57                                                                       ` Jon Hunter
2013-04-16 21:57                                                                         ` Jon Hunter
2013-04-16 22:11                                                                       ` Stephen Warren
2013-04-16 22:11                                                                         ` Stephen Warren
2013-04-16 23:14                                                                         ` Jon Hunter
2013-04-16 23:14                                                                           ` Jon Hunter
2013-04-17  0:41                                                                           ` Javier Martinez Canillas
2013-04-17  0:41                                                                             ` Javier Martinez Canillas
2013-04-17  2:00                                                                             ` Jon Hunter
2013-04-17  2:00                                                                               ` Jon Hunter
2013-04-17  7:55                                                                               ` Javier Martinez Canillas
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:25                                                                                     ` Jon Hunter
2013-04-17 13:42                                                                                     ` Javier Martinez Canillas
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 13:52                                                                                           ` Jon Hunter
2013-04-17 14:21                                                                                           ` Javier Martinez Canillas
2013-04-17 14:21                                                                                             ` Javier Martinez Canillas
2013-04-17 16:18                                                                                           ` Javier Martinez Canillas
2013-04-17 16:18                                                                                             ` Javier Martinez Canillas
2013-04-26  7:31                                                                             ` Linus Walleij
2013-04-26  7:31                                                                               ` Linus Walleij
2013-04-26 21:31                                                                               ` Jon Hunter
2013-04-26 21:31                                                                                 ` Jon Hunter
2013-06-11 21:25                                                                                 ` Grant Likely
2013-06-11 21:25                                                                                   ` Grant Likely
2013-06-12  9:43                                                                                   ` Linus Walleij
2013-06-12  9:43                                                                                     ` Linus Walleij
2013-04-17 15:41                                                                           ` Stephen Warren
2013-04-17 15:41                                                                             ` Stephen Warren
2013-04-26  7:27                                                                             ` Linus Walleij
2013-04-26  7:27                                                                               ` Linus Walleij
2013-04-26 21:25                                                                               ` Jon Hunter
2013-04-26 21:25                                                                                 ` Jon Hunter
     [not found]                                                                                 ` <517AF0C1.60009-l0cyMroinI0@public.gmane.org>
2013-05-03 14:35                                                                                   ` Linus Walleij
2013-05-03 14:35                                                                                     ` Linus Walleij
2013-04-26  7:11                                                               ` Linus Walleij
2013-04-26  7:11                                                                 ` Linus Walleij
2013-04-26  6:59                                                             ` Linus Walleij
2013-04-26  6:59                                                               ` Linus Walleij
2013-04-15 16:53                                                         ` Stephen Warren
2013-04-15 16:53                                                           ` Stephen Warren
2013-04-15 20:00                                                           ` Jon Hunter
2013-04-15 20:00                                                             ` Jon Hunter
2013-04-11 22:49                                                     ` Javier Martinez Canillas
2013-04-11 22:49                                                       ` Javier Martinez Canillas
2013-04-11 22:51                                                     ` Stephen Warren
2013-04-11 22:51                                                       ` Stephen Warren
2013-04-10 21:44                                               ` Arnd Bergmann
2013-04-10 21:44                                                 ` Arnd Bergmann
2013-02-27  3:33                 ` Javier Martinez Canillas
2013-02-27  3:33                   ` Javier Martinez Canillas
2013-02-27 17:47                   ` Stephen Warren
2013-02-27 17:47                     ` Stephen Warren
2013-02-27 20:00                     ` Javier Martinez Canillas
2013-02-27 20:00                       ` Javier Martinez Canillas
2013-02-26 23:08               ` Jon Hunter
2013-02-26 23:08                 ` Jon Hunter
2013-02-27  3:47                 ` Javier Martinez Canillas
2013-02-27  3:47                   ` Javier Martinez Canillas
2013-02-27 20:13                   ` Jon Hunter
2013-02-27 20:13                     ` Jon Hunter
2013-02-27 23:41   ` Linus Walleij
2013-02-27 23:41     ` Linus Walleij
2013-02-28 13:04     ` Benoit Cousson
2013-02-28 13:04       ` Benoit Cousson
2013-03-01  0:09       ` Linus Walleij
2013-03-01  0:09         ` Linus Walleij
2013-03-01  0:42         ` Jon Hunter
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   ` Benoit Cousson
2012-02-15 16:04 ` [PATCH 5/5] arm/dts: OMAP3: " Benoit Cousson
2012-02-15 16:04   ` 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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.