[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <CAMRc=MfB6yN7NHwB+DJRWLREUeZCeSM=2c3-mx4VR2e4JxhiMA@mail.gmail.com>
Date: Wed, 6 Sep 2023 17:08:21 +0200
From: Bartosz Golaszewski <brgl@...ev.pl>
To: Daniel Mack <daniel@...que.org>
Cc: linux-gpio@...r.kernel.org, manikanta.guntupalli@....com,
linux-kernel@...r.kernel.org, stable@...nel.org
Subject: Re: [PATCH] gpio: zynq: restore zynq_gpio_irq_reqres/zynq_gpio_irq_relres
callbacks
On Fri, Sep 1, 2023 at 2:34 PM Daniel Mack <daniel@...que.org> wrote:
>
> Commit f56914393537 ("gpio: zynq: fix zynqmp_gpio not an immutable chip
> warning") ditched the open-coded resource allocation handlers in favor
> of the generic ones. These generic handlers don't maintain the PM
> runtime anymore, which causes a regression in that level IRQs are no
> longer reported.
>
> Restore the original handlers to fix this.
>
> Signed-off-by: Daniel Mack <daniel@...que.org>
> Fixes: f56914393537 ("gpio: zynq: fix zynqmp_gpio not an immutable chip warning")
> Cc: stable@...nel.org
> ---
> drivers/gpio/gpio-zynq.c | 26 ++++++++++++++++++++++++--
> 1 file changed, 24 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/gpio/gpio-zynq.c b/drivers/gpio/gpio-zynq.c
> index 0a7264aabe48..324e942c0650 100644
> --- a/drivers/gpio/gpio-zynq.c
> +++ b/drivers/gpio/gpio-zynq.c
> @@ -575,6 +575,26 @@ static int zynq_gpio_set_wake(struct irq_data *data, unsigned int on)
> return 0;
> }
>
> +static int zynq_gpio_irq_reqres(struct irq_data *d)
> +{
> + struct gpio_chip *chip = irq_data_get_irq_chip_data(d);
> + int ret;
> +
> + ret = pm_runtime_resume_and_get(chip->parent);
> + if (ret < 0)
> + return ret;
> +
> + return gpiochip_reqres_irq(chip, d->hwirq);
> +}
> +
> +static void zynq_gpio_irq_relres(struct irq_data *d)
> +{
> + struct gpio_chip *chip = irq_data_get_irq_chip_data(d);
> +
> + gpiochip_relres_irq(chip, d->hwirq);
> + pm_runtime_put(chip->parent);
> +}
> +
> /* irq chip descriptor */
> static const struct irq_chip zynq_gpio_level_irqchip = {
> .name = DRIVER_NAME,
> @@ -584,9 +604,10 @@ static const struct irq_chip zynq_gpio_level_irqchip = {
> .irq_unmask = zynq_gpio_irq_unmask,
> .irq_set_type = zynq_gpio_set_irq_type,
> .irq_set_wake = zynq_gpio_set_wake,
> + .irq_request_resources = zynq_gpio_irq_reqres,
> + .irq_release_resources = zynq_gpio_irq_relres,
> .flags = IRQCHIP_EOI_THREADED | IRQCHIP_EOI_IF_HANDLED |
> IRQCHIP_MASK_ON_SUSPEND | IRQCHIP_IMMUTABLE,
> - GPIOCHIP_IRQ_RESOURCE_HELPERS,
> };
>
> static const struct irq_chip zynq_gpio_edge_irqchip = {
> @@ -597,8 +618,9 @@ static const struct irq_chip zynq_gpio_edge_irqchip = {
> .irq_unmask = zynq_gpio_irq_unmask,
> .irq_set_type = zynq_gpio_set_irq_type,
> .irq_set_wake = zynq_gpio_set_wake,
> + .irq_request_resources = zynq_gpio_irq_reqres,
> + .irq_release_resources = zynq_gpio_irq_relres,
> .flags = IRQCHIP_MASK_ON_SUSPEND | IRQCHIP_IMMUTABLE,
> - GPIOCHIP_IRQ_RESOURCE_HELPERS,
> };
>
> static void zynq_gpio_handle_bank_irq(struct zynq_gpio *gpio,
> --
> 2.41.0
>
Thanks Thorsten for bringing it to my attention.
Daniel: please use scripts/get_maintainers.pl when sending patches.
This was sent neither to my email address from the MAINTAINERS file
nor to my linaro address.
Other than that, this looks good, applied for fixes.
Bartosz
Powered by blists - more mailing lists