From: "Russell King - ARM Linux admin" <linux@armlinux.org.uk>
To: "Hui Song" <hui.song_1@nxp.com>
Cc: Mark Rutland <mark.rutland@arm.com>,
"devicetree@vger.kernel.org" <devicetree@vger.kernel.org>,
"linux-gpio@vger.kernel.org" <linux-gpio@vger.kernel.org>,
Linus Walleij <linus.walleij@linaro.org>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
Li Yang <leoyang.li@nxp.com>,
Bartosz Golaszewski <bgolaszewski@baylibre.com>,
Rob Herring <robh+dt@kernel.org>, Shawn Guo <shawnguo@kernel.org>,
"linux-arm-kernel@lists.infradead.org"
<linux-arm-kernel@lists.infradead.org>
Subject: Re: [PATCH v6] gpio/mpc8xxx: change irq handler from chained to normal
Date: Wed, 9 Oct 2019 17:36:29 +0100 [thread overview]
Message-ID: <20191009163628.GH25745@shell.armlinux.org.uk> (raw)
Message-ID: <20191009163629.ghn5_8QwJoZuAhe6k7SSE95P_pzsOhbvHKXFE_dNw50@z> (raw)
In-Reply-To: <20191009083021.33529-1-hui.song_1@nxp.com>
On Wed, Oct 09, 2019 at 04:30:21PM +0800, Hui Song wrote:
> From: Song Hui <hui.song_1@nxp.com>
>
> More than one gpio controllers can share one interrupt, change the
> driver to request shared irq.
>
> While this will work, it will mess up userspace accounting of the number
> of interrupts per second in tools such as vmstat. The reason is that
> for every GPIO interrupt, /proc/interrupts records the count against GIC
> interrupt 68 or 69, as well as the GPIO itself. So, for every GPIO
> interrupt, the total number of interrupts that the system has seen
> increments by two
>
> Signed-off-by: Laurentiu Tudor <Laurentiu.Tudor@nxp.com>
> Signed-off-by: Alex Marginean <alexandru.marginean@nxp.com>
> Signed-off-by: Song Hui <hui.song_1@nxp.com>
> ---
> Changes in v6:
> - change request_irq to devm_request_irq and add commit message.
> Changes in v5:
> - add traverse every bit function.
> Changes in v4:
> - convert 'pr_err' to 'dev_err'.
> Changes in v3:
> - update the patch description.
> Changes in v2:
> - delete the compatible of ls1088a.
>
> drivers/gpio/gpio-mpc8xxx.c | 31 ++++++++++++++++++++-----------
> 1 file changed, 20 insertions(+), 11 deletions(-)
>
> diff --git a/drivers/gpio/gpio-mpc8xxx.c b/drivers/gpio/gpio-mpc8xxx.c
> index 16a47de..f0be284 100644
> --- a/drivers/gpio/gpio-mpc8xxx.c
> +++ b/drivers/gpio/gpio-mpc8xxx.c
> @@ -22,6 +22,7 @@
> #include <linux/irq.h>
> #include <linux/gpio/driver.h>
> #include <linux/bitops.h>
> +#include <linux/interrupt.h>
>
> #define MPC8XXX_GPIO_PINS 32
>
> @@ -127,20 +128,20 @@ static int mpc8xxx_gpio_to_irq(struct gpio_chip *gc, unsigned offset)
> return -ENXIO;
> }
>
> -static void mpc8xxx_gpio_irq_cascade(struct irq_desc *desc)
> +static irqreturn_t mpc8xxx_gpio_irq_cascade(int irq, void *data)
> {
> - struct mpc8xxx_gpio_chip *mpc8xxx_gc = irq_desc_get_handler_data(desc);
> - struct irq_chip *chip = irq_desc_get_chip(desc);
> + struct mpc8xxx_gpio_chip *mpc8xxx_gc = data;
> struct gpio_chip *gc = &mpc8xxx_gc->gc;
> unsigned int mask;
This needs to be "unsigned long mask;" for for_each_set_bit() not to
complain.
> + int i;
>
> mask = gc->read_reg(mpc8xxx_gc->regs + GPIO_IER)
> & gc->read_reg(mpc8xxx_gc->regs + GPIO_IMR);
> - if (mask)
> + for_each_set_bit(i, &mask, 32)
> generic_handle_irq(irq_linear_revmap(mpc8xxx_gc->irq,
> - 32 - ffs(mask)));
> - if (chip->irq_eoi)
> - chip->irq_eoi(&desc->irq_data);
> + 31 - i));
> +
> + return IRQ_HANDLED;
> }
>
> static void mpc8xxx_irq_unmask(struct irq_data *d)
> @@ -388,8 +389,8 @@ static int mpc8xxx_probe(struct platform_device *pdev)
>
> ret = gpiochip_add_data(gc, mpc8xxx_gc);
> if (ret) {
> - pr_err("%pOF: GPIO chip registration failed with status %d\n",
> - np, ret);
> + dev_err(&pdev->dev, "%pOF: GPIO chip registration failed with status %d\n",
> + np, ret);
> goto err;
> }
>
> @@ -409,8 +410,16 @@ static int mpc8xxx_probe(struct platform_device *pdev)
> if (devtype->gpio_dir_in_init)
> devtype->gpio_dir_in_init(gc);
>
> - irq_set_chained_handler_and_data(mpc8xxx_gc->irqn,
> - mpc8xxx_gpio_irq_cascade, mpc8xxx_gc);
> + ret = devm_request_irq(&pdev->dev, mpc8xxx_gc->irqn,
> + mpc8xxx_gpio_irq_cascade,
> + IRQF_NO_THREAD | IRQF_SHARED, "gpio-cascade",
> + mpc8xxx_gc);
> + if (ret) {
> + dev_err(&pdev->dev, "%s: failed to devm_request_irq(%d), ret = %d\n",
> + np->full_name, mpc8xxx_gc->irqn, ret);
> + goto err;
> + }
> +
> return 0;
> err:
> iounmap(mpc8xxx_gc->regs);
> --
> 2.9.5
>
>
> _______________________________________________
> linux-arm-kernel mailing list
> linux-arm-kernel@lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
>
--
RMK's Patch system: https://secure-web.cisco.com/1u1yH5XF9ZOox0jqsrnwRJ5a1pJOcqm5qbE3C2dUsPGkfudVKvva1K0PgdWoYmy5dOufZTE4Kw3f2LTs-6pVT9W22cGj0QQkiNNRrkfe6uH8MOOrD-AduBS4XkwSCUNdo_6YdeDtaUtiXRPvLDnRYwSVPeR_F5CQCaACnsONIYJmNLaiH5Y_9PxzzipIMnS37-DqJROtHtZlI5ZAl5jdkYGMX5FsnN19g-dfYKcTdT-7gYdpEfPLhQMQ0VXSS44FOQUnRRYMzICuYoaLB5PeTOBexrCIKczGqbdpcJ39mGB6J0Nm5wRRx-iWO2ZS-fj91fEQHFQ1hNNaryerh9U3RVXl3hRq1EROcv-jlatz3Kx-JtCh3QJgoiI8GzZRHb0GUsfggvORJPYpKjBduTqY_F3qqu1S9I2FEpZPEaEnUr5fE2rzrTArumzUGVXnHljpv62ZBfc4EC9rRSzYLfpMG5w/https%3A%2F%2Fwww.armlinux.org.uk%2Fdeveloper%2Fpatches%2F
FTTC broadband for 0.8mile line in suburbia: sync at 12.1Mbps down 622kbps up
According to speedtest.net: 11.9Mbps down 500kbps up
_______________________________________________
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:[~2019-10-13 0:13 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-10-09 8:30 [PATCH v6] gpio/mpc8xxx: change irq handler from chained to normal Hui Song
2019-10-09 16:33 ` Bartosz Golaszewski
2019-10-09 16:33 ` Bartosz Golaszewski
2019-10-09 16:36 ` Russell King - ARM Linux admin [this message]
2019-10-09 16:36 ` Russell King - ARM Linux admin
-- strict thread matches above, loose matches on Subject: below --
2019-09-27 3:15 Hui Song
2019-09-27 4:33 ` kbuild test robot
2019-09-27 4:53 ` kbuild test robot
2019-10-03 10:19 ` Linus Walleij
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=20191009163628.GH25745@shell.armlinux.org.uk \
--to=linux@armlinux.org.uk \
--cc=bgolaszewski@baylibre.com \
--cc=devicetree@vger.kernel.org \
--cc=hui.song_1@nxp.com \
--cc=leoyang.li@nxp.com \
--cc=linus.walleij@linaro.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-gpio@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mark.rutland@arm.com \
--cc=robh+dt@kernel.org \
--cc=shawnguo@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).