All of lore.kernel.org
 help / color / mirror / Atom feed
From: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
To: gregkh@linuxfoundation.org
Cc: linus.walleij@linaro.org, mika.westerberg@linux.intel.com,
	stable@vger.kernel.org
Subject: Re: FAILED: patch "[PATCH] gpio: pca953x: Set IRQ type when handle Intel Galileo Gen 2" failed to apply to 5.10-stable tree
Date: Fri, 12 Mar 2021 14:13:12 +0200	[thread overview]
Message-ID: <YEta2IUohT5m28Oi@smile.fi.intel.com> (raw)
In-Reply-To: <161548729112453@kroah.com>

On Thu, Mar 11, 2021 at 07:28:11PM +0100, gregkh@linuxfoundation.org wrote:
> 
> The patch below does not apply to the 5.10-stable tree.
> If someone wants it applied there, or to any other stable or longterm
> tree, then please email the backport, including the original git commit
> id to <stable@vger.kernel.org>.

This is strange. I have just cherry-picked it clean on top of v5.10.23.

> ------------------ original commit in Linus's tree ------------------
> 
> From eb441337c7147514ab45036cadf09c3a71e4ce31 Mon Sep 17 00:00:00 2001
> From: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
> Date: Thu, 25 Feb 2021 18:33:20 +0200
> Subject: [PATCH] gpio: pca953x: Set IRQ type when handle Intel Galileo Gen 2
> MIME-Version: 1.0
> Content-Type: text/plain; charset=UTF-8
> Content-Transfer-Encoding: 8bit
> 
> The commit 0ea683931adb ("gpio: dwapb: Convert driver to using the
> GPIO-lib-based IRQ-chip") indeliberately made a regression on how
> IRQ line from GPIO I²C expander is handled. I.e. it reveals that
> the quirk for Intel Galileo Gen 2 misses the part of setting IRQ type
> which previously was predefined by gpio-dwapb driver. Now, we have to
> reorganize the approach to call necessary parts, which can be done via
> ACPI_GPIO_QUIRK_ABSOLUTE_NUMBER quirk.
> 
> Without this fix and with above mentioned change the kernel hangs
> on the first IRQ event with:
> 
>     gpio gpiochip3: Persistence not supported for GPIO 1
>     irq 32, desc: 62f8fb50, depth: 0, count: 0, unhandled: 0
>     ->handle_irq():  41c7b0ab, handle_bad_irq+0x0/0x40
>     ->irq_data.chip(): e03f1e72, 0xc2539218
>     ->action(): 0ecc7e6f
>     ->action->handler(): 8a3db21e, irq_default_primary_handler+0x0/0x10
>        IRQ_NOPROBE set
>     unexpected IRQ trap at vector 20
> 
> Fixes: ba8c90c61847 ("gpio: pca953x: Override IRQ for one of the expanders on Galileo Gen 2")
> Depends-on: 0ea683931adb ("gpio: dwapb: Convert driver to using the GPIO-lib-based IRQ-chip")
> Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
> Acked-by: Mika Westerberg <mika.westerberg@linux.intel.com>
> Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
> 
> diff --git a/drivers/gpio/gpio-pca953x.c b/drivers/gpio/gpio-pca953x.c
> index 5ea09fd01544..c91d05651596 100644
> --- a/drivers/gpio/gpio-pca953x.c
> +++ b/drivers/gpio/gpio-pca953x.c
> @@ -113,8 +113,29 @@ MODULE_DEVICE_TABLE(i2c, pca953x_id);
>  #ifdef CONFIG_GPIO_PCA953X_IRQ
>  
>  #include <linux/dmi.h>
> -#include <linux/gpio.h>
> -#include <linux/list.h>
> +
> +static const struct acpi_gpio_params pca953x_irq_gpios = { 0, 0, true };
> +
> +static const struct acpi_gpio_mapping pca953x_acpi_irq_gpios[] = {
> +	{ "irq-gpios", &pca953x_irq_gpios, 1, ACPI_GPIO_QUIRK_ABSOLUTE_NUMBER },
> +	{ }
> +};
> +
> +static int pca953x_acpi_get_irq(struct device *dev)
> +{
> +	int ret;
> +
> +	ret = devm_acpi_dev_add_driver_gpios(dev, pca953x_acpi_irq_gpios);
> +	if (ret)
> +		dev_warn(dev, "can't add GPIO ACPI mapping\n");
> +
> +	ret = acpi_dev_gpio_irq_get_by(ACPI_COMPANION(dev), "irq-gpios", 0);
> +	if (ret < 0)
> +		return ret;
> +
> +	dev_info(dev, "ACPI interrupt quirk (IRQ %d)\n", ret);
> +	return ret;
> +}
>  
>  static const struct dmi_system_id pca953x_dmi_acpi_irq_info[] = {
>  	{
> @@ -133,59 +154,6 @@ static const struct dmi_system_id pca953x_dmi_acpi_irq_info[] = {
>  	},
>  	{}
>  };
> -
> -#ifdef CONFIG_ACPI
> -static int pca953x_acpi_get_pin(struct acpi_resource *ares, void *data)
> -{
> -	struct acpi_resource_gpio *agpio;
> -	int *pin = data;
> -
> -	if (acpi_gpio_get_irq_resource(ares, &agpio))
> -		*pin = agpio->pin_table[0];
> -	return 1;
> -}
> -
> -static int pca953x_acpi_find_pin(struct device *dev)
> -{
> -	struct acpi_device *adev = ACPI_COMPANION(dev);
> -	int pin = -ENOENT, ret;
> -	LIST_HEAD(r);
> -
> -	ret = acpi_dev_get_resources(adev, &r, pca953x_acpi_get_pin, &pin);
> -	acpi_dev_free_resource_list(&r);
> -	if (ret < 0)
> -		return ret;
> -
> -	return pin;
> -}
> -#else
> -static inline int pca953x_acpi_find_pin(struct device *dev) { return -ENXIO; }
> -#endif
> -
> -static int pca953x_acpi_get_irq(struct device *dev)
> -{
> -	int pin, ret;
> -
> -	pin = pca953x_acpi_find_pin(dev);
> -	if (pin < 0)
> -		return pin;
> -
> -	dev_info(dev, "Applying ACPI interrupt quirk (GPIO %d)\n", pin);
> -
> -	if (!gpio_is_valid(pin))
> -		return -EINVAL;
> -
> -	ret = gpio_request(pin, "pca953x interrupt");
> -	if (ret)
> -		return ret;
> -
> -	ret = gpio_to_irq(pin);
> -
> -	/* When pin is used as an IRQ, no need to keep it requested */
> -	gpio_free(pin);
> -
> -	return ret;
> -}
>  #endif
>  
>  static const struct acpi_device_id pca953x_acpi_ids[] = {
> 

-- 
With Best Regards,
Andy Shevchenko



  reply	other threads:[~2021-03-12 12:14 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-03-11 18:28 FAILED: patch "[PATCH] gpio: pca953x: Set IRQ type when handle Intel Galileo Gen 2" failed to apply to 5.10-stable tree gregkh
2021-03-12 12:13 ` Andy Shevchenko [this message]
2021-03-12 12:26   ` Greg KH
2021-03-12 12:35     ` Andy Shevchenko

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=YEta2IUohT5m28Oi@smile.fi.intel.com \
    --to=andriy.shevchenko@linux.intel.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=linus.walleij@linaro.org \
    --cc=mika.westerberg@linux.intel.com \
    --cc=stable@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.