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 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.