From: "Marek Behún" <kabel@kernel.org>
To: Bartosz Golaszewski <brgl@bgdev.pl>,
Andy Shevchenko <andy.shevchenko@gmail.com>
Cc: linux-gpio@vger.kernel.org
Subject: Re: how to request gpiochip line which is only valid as an interrupt?
Date: Tue, 11 Jun 2024 11:03:05 +0200 [thread overview]
Message-ID: <20240611110305.0f0c5b1f@dellmb> (raw)
In-Reply-To: <20240610160155.5ca7e0d7@dellmb>
On Mon, 10 Jun 2024 16:01:55 +0200
Marek Behún <kabel@kernel.org> wrote:
> Hello Bartosz,
>
> I would like to ask you if you could find some time to look at
>
> [PATCH v11 6/8] platform: cznic: turris-omnia-mcu: Add support for
> MCU provided TRNG
>
> https://lore.kernel.org/soc/20240605161851.13911-7-kabel@kernel.org/
>
> Andy Shevchenko added you to that conversation asking you about how to
> correctly do the following part:
>
> irq = gpiod_to_irq(gpiochip_get_desc(&mcu->gc, irq_idx));
>
> I am writing this to give some more light into the problem. What is
> going on:
> - the turris-omnia-mcu driver provides a gpio chip with interrupts
> - some lines are gpio + irq, but some lines are interrupt only
> - later, after the gpiochip is registered, another part of the
> turris-omnia-mcu driver wants to use one interrupt only line
>
> To use the gpiod_to_irq() function, I need gpio descriptor for that
> line. I can get that with gpiochip_get_desc(), since this is within the
> driver, I have access to the gpiochip. But this is semantically a
> little weird, because
>
> 1. gpiochip_get_desc() is supposed to be used by gpio driver, not
> consumer (and the trng part of the turris-omnia-mcu code is a
> consumer of the gpio)
>
> 2. reference counting?
>
> Looking at gpiolib, maybe the better function to use would be
> gpiochip_request_own_desc(). This also is defined in
> include/gpio/driver.c instead of include/gpio/consumer.c, but at least
> it's name suggests that it is used by code that also owns the
> gpiochip...
>
> One problem is that gpiochip_request_own_desc() won't work, because the
> gpiochip initializes valid masks for both gpios and irqs, and the
> gpiochip_request_own_desc() function calls gpiod_request_commit(),
> which executes the following code
>
> if (guard.gc->request) {
> offset = gpio_chip_hwgpio(desc);
> if (gpiochip_line_is_valid(guard.gc, offset))
> ret = guard.gc->request(guard.gc, offset);
> else
> ret = -EINVAL;
> ...
> }
>
> So if a gpiochip line is not valid GPIO, only valid IRQchip line, then
> the GPIO cannot be requested, even for interrupts.
>
> What is the proper solution here?
>
> Thank you
>
> Marek
Bart, Andy,
it seems that if I write the mcu DT node interrupt property which
refers to self, i.e.:
mcu: system-controller@2a {
...
interrupts-extended = <&gpio1 11 IRQ_TYPE_NONE>,
<&mcu 13 IRQ_TYPE_NONE>;
interrupt-names = "irq", "trng";
...
};
it seems to work and I can use
irq = fwnode_irq_get_byname(dev_fwnode(dev), "trng");
even if this is called from the mcu probe method.
Do you think this is a proper solution?
I find it a little bit weird that the mcu DT node refers to itself in
it's interrupt properties.
Marek
next prev parent reply other threads:[~2024-06-11 9:03 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-06-10 14:01 how to request gpiochip line which is only valid as an interrupt? Marek Behún
2024-06-11 9:03 ` Marek Behún [this message]
2024-06-11 19:22 ` Bartosz Golaszewski
2024-06-12 8:55 ` Marek Behún
2024-06-12 9:03 ` Marek Behún
2024-06-12 12:30 ` Bartosz Golaszewski
2024-06-12 13:32 ` Marek Behún
2024-06-12 9:19 ` Marek Behún
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=20240611110305.0f0c5b1f@dellmb \
--to=kabel@kernel.org \
--cc=andy.shevchenko@gmail.com \
--cc=brgl@bgdev.pl \
--cc=linux-gpio@vger.kernel.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).