From: Lars Poeschel <poeschel@lemonage.de>
To: Stephen Warren <swarren@wwwdotorg.org>
Cc: Tomasz Figa <tomasz.figa@gmail.com>,
Lars Poeschel <larsi@wh2.tu-dresden.de>,
grant.likely@linaro.org, linus.walleij@linaro.org,
linux-gpio@vger.kernel.org, linux-kernel@vger.kernel.org,
devicetree@vger.kernel.org, mark.rutland@arm.com,
ian.campbell@citrix.com, galak@codeaurora.org,
pawel.moll@arm.com,
Javier Martinez Canillas <javier.martinez@collabora.co.uk>,
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 v2] gpio: interrupt consistency check for OF GPIO IRQs
Date: Thu, 22 Aug 2013 11:01:30 +0200 [thread overview]
Message-ID: <201308221101.30316.poeschel@lemonage.de> (raw)
In-Reply-To: <521548E3.6010703@wwwdotorg.org>
On Thursday 22 August 2013 at 01:10:27, Stephen Warren wrote:
> On 08/21/2013 03:49 PM, Tomasz Figa wrote:
> >> diff --git a/drivers/gpio/gpiolib-of.c b/drivers/gpio/gpiolib-of.c
> >>
> >> +static void of_gpio_scan_irq_lines(const struct device_node *const
> >>
> >> + for (i = 0; i < intlen; i += intsize) {
> >> + /*
> >> + * Find out the local IRQ number. This corresponds to
> >> + * the GPIO line offset for a GPIO chip.
> >
> > I'm still not convinced that this assumption is correct. This code
> > will behave erraticaly in cases where it is not true, requesting
> > innocent GPIO pins.
Do you have an idea how we can destroy your doubts?
Either irq_chips nor irq_domains provide some sort of translation function
for this.
Is there a driver in the kernel that has different gpio- vs. irq-namespaces
where I can have a look at? How does platform code solve this translation?
The irq_to_gpio functions in include/linux/gpio.h seem deprecated. They
just return -EINVAL.
For me it seems, that there is no such device inside the kernel yet.
Correct me if I'm wrong. If such a device comes to surface, we're in
trouble. We will need some device-specific translation function then.
Is it the time to introduce an additional pointer for such a function now
and nobody uses it? Or wait until such a device arises and introduce the
pointer then?
> >> + */
> >> + if (irq_domain && irq_domain->ops->xlate)
> >> + irq_domain->ops->xlate(irq_domain, gcn,
> >> + intspec + i, intsize,
> >> + &hwirq, &type);
> >> + else
> >> + hwirq = intspec[0];
> >
> > Is it a correct fallback when irq_domain is NULL?
>
> Indeed this fallback is dangerous. The /only/ way to parse an IRQ
> specifier is with binding-specific knowledge, which is obtained by
> calling irq_domain->ops->xlate(). If the IRQ domain can't be found, this
> operation simply has to be deferred; we can't just guess and hope.
At least the of irq mapping code make this assumption also:
kernel/irq/irqdomain.c:483
It should be valid for us here too.
The additional assumption that I made is that if irq_domain == NULL (not
only xlate), that we can use intspec[0] either.
> >> +
> >> + hwirq = be32_to_cpu(hwirq);
> >
> > Is this conversion correct? I don't think hwirq could be big endian
> > here (unless running on a big endian CPU).
>
> I think that should be inside the else branch above.
No it has to be in both branches as it is. Device tree data is big endian.
The conversion is converting big endian data (from device tree in both
cases) to cpu endianess and not coverting TO big endian.
My test machine is a arm in little endian mode and it provided wrong values
if I did not do the conversion.
What I am a bit unsure about is if the xlate function is expecting the
intspec pointer to point to big endian device tree data or data already
converted to cpu endianess. For the standard xlate functions
irq_domain_xlate_[one|two|onetwo]cell it does not matter.
next prev parent reply other threads:[~2013-08-22 9:01 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-08-21 13:38 Lars Poeschel
2013-08-21 21:49 ` Tomasz Figa
2013-08-21 23:10 ` Stephen Warren
2013-08-21 23:27 ` Linus Walleij
2013-08-22 20:53 ` Stephen Warren
2013-08-23 9:51 ` Lars Poeschel
2013-08-23 18:38 ` Linus Walleij
2013-08-23 19:49 ` Stephen Warren
2013-08-29 18:51 ` Linus Walleij
2013-08-21 23:36 ` Linus Walleij
2013-08-22 21:10 ` Stephen Warren
2013-08-23 9:40 ` Lars Poeschel
2013-08-23 19:48 ` Stephen Warren
2013-08-26 10:30 ` Lars Poeschel
2013-08-23 18:45 ` Linus Walleij
2013-08-23 19:52 ` Stephen Warren
2013-08-23 19:55 ` Tomasz Figa
2013-08-23 20:55 ` Stephen Warren
2013-08-26 10:45 ` Lars Poeschel
2013-08-27 20:05 ` Stephen Warren
2013-08-29 19:00 ` Linus Walleij
2013-08-30 20:08 ` Stephen Warren
2013-09-02 9:43 ` Lars Poeschel
2013-09-03 12:28 ` Linus Walleij
2013-08-22 9:01 ` Lars Poeschel [this message]
2013-08-22 21:08 ` Stephen Warren
2013-08-22 22:30 ` Tomasz Figa
2013-08-22 13:16 ` Andreas Larsson
2013-08-26 10:56 ` Lars Poeschel
2013-08-26 11:29 ` Andreas Larsson
2013-08-26 14:04 ` Lars Poeschel
2013-08-27 6:06 ` Andreas Larsson
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=201308221101.30316.poeschel@lemonage.de \
--to=poeschel@lemonage.de \
--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=javier.martinez@collabora.co.uk \
--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=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
all inboxes | Powered by JetHome®