From: Marc Zyngier <maz@kernel.org>
To: Marek Vasut <marex@denx.de>
Cc: linux-arm-kernel@lists.infradead.org,
Alexandre Torgue <alexandre.torgue@st.com>,
Jason Cooper <jason@lakedaemon.net>,
Linus Walleij <linus.walleij@linaro.org>,
Thomas Gleixner <tglx@linutronix.de>,
linux-gpio@vger.kernel.org
Subject: Re: [PATCH] irqchip/stm32: Retrigger both in eoi and unmask callbacks
Date: Tue, 24 Mar 2020 11:10:25 +0000 [thread overview]
Message-ID: <20200324111025.0523605a@why> (raw)
In-Reply-To: <20200323235132.530550-1-marex@denx.de>
On Tue, 24 Mar 2020 00:51:32 +0100
Marek Vasut <marex@denx.de> wrote:
> Sampling the IRQ line state in EOI and retriggering the interrupt to
> work around missing level-triggered interrupt support only works for
> non-threaded interrupts. Threaded interrupts must be retriggered the
> same way in unmask callback.
>
> Signed-off-by: Marek Vasut <marex@denx.de>
> Cc: Alexandre Torgue <alexandre.torgue@st.com>
> Cc: Jason Cooper <jason@lakedaemon.net>
> Cc: Linus Walleij <linus.walleij@linaro.org>
> Cc: Marc Zyngier <maz@kernel.org>,
> Cc: Thomas Gleixner <tglx@linutronix.de>
> Cc: linux-gpio@vger.kernel.org
> To: linux-arm-kernel@lists.infradead.org
> ---
> drivers/pinctrl/stm32/pinctrl-stm32.c | 18 ++++++++++++++----
> 1 file changed, 14 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/pinctrl/stm32/pinctrl-stm32.c b/drivers/pinctrl/stm32/pinctrl-stm32.c
> index 9ac9ecfc2f34..2dd4a4dd944c 100644
> --- a/drivers/pinctrl/stm32/pinctrl-stm32.c
> +++ b/drivers/pinctrl/stm32/pinctrl-stm32.c
> @@ -304,18 +304,22 @@ static const struct gpio_chip stm32_gpio_template = {
> .get_direction = stm32_gpio_get_direction,
> };
>
> -void stm32_gpio_irq_eoi(struct irq_data *d)
> +static void stm32_gpio_irq_trigger(struct irq_data *d)
> {
> struct stm32_gpio_bank *bank = d->domain->host_data;
> int level;
>
> - irq_chip_eoi_parent(d);
> -
> /* If level interrupt type then retrig */
> level = stm32_gpio_get(&bank->gpio_chip, d->hwirq);
> if ((level == 0 && bank->irq_type[d->hwirq] == IRQ_TYPE_LEVEL_LOW) ||
> (level == 1 && bank->irq_type[d->hwirq] == IRQ_TYPE_LEVEL_HIGH))
> irq_chip_retrigger_hierarchy(d);
> +}
> +
> +void stm32_gpio_irq_eoi(struct irq_data *d)
This should obviously be static. I'll amend it locally.
> +{
> + irq_chip_eoi_parent(d);
> + stm32_gpio_irq_trigger(d);
> };
>
> static int stm32_gpio_set_type(struct irq_data *d, unsigned int type)
> @@ -371,12 +375,18 @@ static void stm32_gpio_irq_release_resources(struct irq_data *irq_data)
> gpiochip_unlock_as_irq(&bank->gpio_chip, irq_data->hwirq);
> }
>
> +static void stm32_gpio_irq_unmask(struct irq_data *d)
> +{
> + irq_chip_unmask_parent(d);
> + stm32_gpio_irq_trigger(d);
> +}
> +
> static struct irq_chip stm32_gpio_irq_chip = {
> .name = "stm32gpio",
> .irq_eoi = stm32_gpio_irq_eoi,
> .irq_ack = irq_chip_ack_parent,
> .irq_mask = irq_chip_mask_parent,
> - .irq_unmask = irq_chip_unmask_parent,
> + .irq_unmask = stm32_gpio_irq_unmask,
> .irq_set_type = stm32_gpio_set_type,
> .irq_set_wake = irq_chip_set_wake_parent,
> .irq_request_resources = stm32_gpio_irq_request_resources,
I'll queue this for 5.7.
Thanks,
M.
--
Jazz is not dead. It just smells funny...
WARNING: multiple messages have this Message-ID (diff)
From: Marc Zyngier <maz@kernel.org>
To: Marek Vasut <marex@denx.de>
Cc: Alexandre Torgue <alexandre.torgue@st.com>,
Linus Walleij <linus.walleij@linaro.org>,
linux-gpio@vger.kernel.org, Thomas Gleixner <tglx@linutronix.de>,
linux-arm-kernel@lists.infradead.org,
Jason Cooper <jason@lakedaemon.net>
Subject: Re: [PATCH] irqchip/stm32: Retrigger both in eoi and unmask callbacks
Date: Tue, 24 Mar 2020 11:10:25 +0000 [thread overview]
Message-ID: <20200324111025.0523605a@why> (raw)
In-Reply-To: <20200323235132.530550-1-marex@denx.de>
On Tue, 24 Mar 2020 00:51:32 +0100
Marek Vasut <marex@denx.de> wrote:
> Sampling the IRQ line state in EOI and retriggering the interrupt to
> work around missing level-triggered interrupt support only works for
> non-threaded interrupts. Threaded interrupts must be retriggered the
> same way in unmask callback.
>
> Signed-off-by: Marek Vasut <marex@denx.de>
> Cc: Alexandre Torgue <alexandre.torgue@st.com>
> Cc: Jason Cooper <jason@lakedaemon.net>
> Cc: Linus Walleij <linus.walleij@linaro.org>
> Cc: Marc Zyngier <maz@kernel.org>,
> Cc: Thomas Gleixner <tglx@linutronix.de>
> Cc: linux-gpio@vger.kernel.org
> To: linux-arm-kernel@lists.infradead.org
> ---
> drivers/pinctrl/stm32/pinctrl-stm32.c | 18 ++++++++++++++----
> 1 file changed, 14 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/pinctrl/stm32/pinctrl-stm32.c b/drivers/pinctrl/stm32/pinctrl-stm32.c
> index 9ac9ecfc2f34..2dd4a4dd944c 100644
> --- a/drivers/pinctrl/stm32/pinctrl-stm32.c
> +++ b/drivers/pinctrl/stm32/pinctrl-stm32.c
> @@ -304,18 +304,22 @@ static const struct gpio_chip stm32_gpio_template = {
> .get_direction = stm32_gpio_get_direction,
> };
>
> -void stm32_gpio_irq_eoi(struct irq_data *d)
> +static void stm32_gpio_irq_trigger(struct irq_data *d)
> {
> struct stm32_gpio_bank *bank = d->domain->host_data;
> int level;
>
> - irq_chip_eoi_parent(d);
> -
> /* If level interrupt type then retrig */
> level = stm32_gpio_get(&bank->gpio_chip, d->hwirq);
> if ((level == 0 && bank->irq_type[d->hwirq] == IRQ_TYPE_LEVEL_LOW) ||
> (level == 1 && bank->irq_type[d->hwirq] == IRQ_TYPE_LEVEL_HIGH))
> irq_chip_retrigger_hierarchy(d);
> +}
> +
> +void stm32_gpio_irq_eoi(struct irq_data *d)
This should obviously be static. I'll amend it locally.
> +{
> + irq_chip_eoi_parent(d);
> + stm32_gpio_irq_trigger(d);
> };
>
> static int stm32_gpio_set_type(struct irq_data *d, unsigned int type)
> @@ -371,12 +375,18 @@ static void stm32_gpio_irq_release_resources(struct irq_data *irq_data)
> gpiochip_unlock_as_irq(&bank->gpio_chip, irq_data->hwirq);
> }
>
> +static void stm32_gpio_irq_unmask(struct irq_data *d)
> +{
> + irq_chip_unmask_parent(d);
> + stm32_gpio_irq_trigger(d);
> +}
> +
> static struct irq_chip stm32_gpio_irq_chip = {
> .name = "stm32gpio",
> .irq_eoi = stm32_gpio_irq_eoi,
> .irq_ack = irq_chip_ack_parent,
> .irq_mask = irq_chip_mask_parent,
> - .irq_unmask = irq_chip_unmask_parent,
> + .irq_unmask = stm32_gpio_irq_unmask,
> .irq_set_type = stm32_gpio_set_type,
> .irq_set_wake = irq_chip_set_wake_parent,
> .irq_request_resources = stm32_gpio_irq_request_resources,
I'll queue this for 5.7.
Thanks,
M.
--
Jazz is not dead. It just smells funny...
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
next prev parent reply other threads:[~2020-03-24 11:10 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-03-23 23:51 [PATCH] irqchip/stm32: Retrigger both in eoi and unmask callbacks Marek Vasut
2020-03-23 23:51 ` Marek Vasut
2020-03-24 11:10 ` Marc Zyngier [this message]
2020-03-24 11:10 ` Marc Zyngier
2020-03-29 20:26 ` [tip: irq/core] " tip-bot2 for Marek Vasut
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=20200324111025.0523605a@why \
--to=maz@kernel.org \
--cc=alexandre.torgue@st.com \
--cc=jason@lakedaemon.net \
--cc=linus.walleij@linaro.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-gpio@vger.kernel.org \
--cc=marex@denx.de \
--cc=tglx@linutronix.de \
/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.