From: grant.likely@linaro.org (Grant Likely)
To: linux-arm-kernel@lists.infradead.org
Subject: How to create IRQ mappings in a GPIO driver that doesn't control its IRQ domain ?
Date: Wed, 24 Jul 2013 21:24:46 +0100 [thread overview]
Message-ID: <20130724202446.6CAF23E1313@localhost> (raw)
In-Reply-To: <1624911.6TtmtVmU1T@avalon>
On Wed, 24 Jul 2013 01:21:44 +0200, Laurent Pinchart <laurent.pinchart@ideasonboard.com> wrote:
> Hello,
>
> I'm running into an issue on several Renesas SoC with IRQ domains and GPIOs.
>
> On sh73a0, r8a73a4 and r8a7740, GPIOs and external interrupts are handled by
> two separate IP cores, namely the PFC (Pin Function Controller) and INTC
> (Interrupt Controller). The former is handled by the sh-pfc driver
> (drivers/pinctrl/sh-pfc) and the later by the irq-renesas-intc-irqpin driver
> (drivers/irqchip), referred to below as the irqpin driver.
>
> The sh73a0, for instance, has 32 external interrupt lines that are multiplexed
> on pins usable as GPIOs. Both the GPIO and external interrupt functions are
> usable at the same time, which allows reading the state of the interrupt
> lines.
>
> These external interrupts are for MMC/SD support, among other devices. In this
> specific case the MMC/SD Card Detect signal is wired to one of the external
> interrupt signals, and the corresponding GPIO is passed to the MMC/SD
> controller driver. Depending on other configuration parameters the driver can
> then either poll the Card Detect signal, or register an interrupt handler to
> detect changes in the signal state. This features is implemented by the MMC/SD
> core, which call gpio_to_irq() on the GPIO to retrieve the corresponding IRQ
> number.
>
> On non-DT systems the external IRQs are statically mapped at a known offset.
> The sh-pfc driver, to implement the gpio_to_irq() function (through its
> gpiochip .to_irq() handler), simply searches a SoC-specific lookup table for
> the fixed IRQ number associated with a given GPIO.
>
> However, on DT systems, IRQs are mapped dynamically on demand. The irqpin
> driver registers a simple IRQ domain, and the irq_create_mapping() function
> can then be used to map a given IRQ, specified as an offset in the domain.
> This is where the problem appears, as the irqchip .to_irq() function is
> implemented in the sh-pfc driver, which doesn't have access to the IRQ domain
> registered by the irqpin driver.
>
> I could hack around this by exporting a function in the irqpin driver that
> would map an IRQ, and call that function from the sh-pfc driver. I'd rather
> avoid that solution as it would add a direct dependency between the two
> drivers.
Well, the gpio controller really does need to know what irq is
associated with a GPIO line. If the gpio controller driver doesn't have
direct access to that information, then it needs to have a hook to set
it up.
In the past, I've seen gpio controllers have an interrupts property
specifying which interrupts it is connected to and can use for GPIO
events. That seems like a resonable scenario in this regard, but if
GPIOS are 1:1 mapped to irqs, then it means a lot of interrupt entries
need to appear in the GPIO node. The other option is to add a hook
directly to the gpio driver so that it knows to use a specific irq
controller; but that feels wrong. Thought it may be a bit verbose, the
addition of an interrupts property to the GPIO controller node is
probably what is wanted.
There has also been a trend to make gpio controllers also interrupt
controllers if they support being used directly as irq inputs, but that
doesn't really help your problem. :-)
g.
next prev parent reply other threads:[~2013-07-24 20:24 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-07-23 23:21 How to create IRQ mappings in a GPIO driver that doesn't control its IRQ domain ? Laurent Pinchart
2013-07-24 20:24 ` Grant Likely [this message]
2013-07-25 9:42 ` Laurent Pinchart
2013-07-25 9:20 ` Linus Walleij
2013-07-25 9:45 ` Laurent Pinchart
2013-07-25 13:15 ` Mark Brown
2013-07-25 13:21 ` Linus Walleij
2013-07-25 13:53 ` Mark Brown
2013-07-25 13:22 ` Laurent Pinchart
2013-07-25 13:55 ` Mark Brown
2013-07-28 5:00 ` Grant Likely
2013-07-31 11:14 ` Laurent Pinchart
2013-07-25 13:19 ` Linus Walleij
2013-07-28 10:07 ` Tomasz Figa
2013-07-31 11:11 ` Laurent Pinchart
2013-07-31 11:29 ` Tomasz Figa
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=20130724202446.6CAF23E1313@localhost \
--to=grant.likely@linaro.org \
--cc=linux-arm-kernel@lists.infradead.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).