linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Marc Zyngier <maz@kernel.org>
To: Joakim Zhang <qiangqing.zhang@nxp.com>
Cc: tglx@linutronix.de, jason@lakedaemon.net, shawnguo@kernel.org,
	s.hauer@pengutronix.de, kernel@pengutronix.de,
	festevam@gmail.com, linux-imx@nxp.com,
	linux-kernel@vger.kernel.org,
	linux-arm-kernel@lists.infradead.or
Subject: Re: [PATCH 2/2] irqchip: imx-intmux: add runtime PM support
Date: Fri, 17 Jul 2020 09:58:13 +0100	[thread overview]
Message-ID: <7fa10b6173147f57034b2ed95a19ca4f@kernel.org> (raw)
In-Reply-To: <20200716193244.31090-3-qiangqing.zhang@nxp.com>

On 2020-07-16 20:32, Joakim Zhang wrote:
> Add runtime PM support for intmux interrupt controller.

Same as the previous patch. The changes are significant enough
that you need to write a proper change log.

> 
> Signed-off-by: Joakim Zhang <qiangqing.zhang@nxp.com>
> ---
>  drivers/irqchip/irq-imx-intmux.c | 31 +++++++++++++++++++++++++------
>  1 file changed, 25 insertions(+), 6 deletions(-)
> 
> diff --git a/drivers/irqchip/irq-imx-intmux.c 
> b/drivers/irqchip/irq-imx-intmux.c
> index 6095f76c4f0d..a631815c7bb4 100644
> --- a/drivers/irqchip/irq-imx-intmux.c
> +++ b/drivers/irqchip/irq-imx-intmux.c
> @@ -53,6 +53,7 @@
>  #include <linux/of_irq.h>
>  #include <linux/of_platform.h>
>  #include <linux/spinlock.h>
> +#include <linux/pm_runtime.h>
> 
>  #define CHANIER(n)	(0x10 + (0x40 * n))
>  #define CHANIPR(n)	(0x20 + (0x40 * n))
> @@ -60,6 +61,7 @@
>  #define CHAN_MAX_NUM		0x8
> 
>  struct intmux_irqchip_data {
> +	struct irq_chip		chip;
>  	int			chanidx;
>  	int			irq;
>  	struct irq_domain	*domain;
> @@ -123,8 +125,10 @@ static struct irq_chip imx_intmux_irq_chip = {
>  static int imx_intmux_irq_map(struct irq_domain *h, unsigned int irq,
>  			      irq_hw_number_t hwirq)
>  {
> -	irq_set_chip_data(irq, h->host_data);
> -	irq_set_chip_and_handler(irq, &imx_intmux_irq_chip, 
> handle_level_irq);
> +	struct intmux_irqchip_data *data = h->host_data;
> +
> +	irq_set_chip_data(irq, data);
> +	irq_set_chip_and_handler(irq, &data->chip, handle_level_irq);
> 
>  	return 0;
>  }
> @@ -244,6 +248,10 @@ static int imx_intmux_probe(struct platform_device 
> *pdev)
>  			return -ENOMEM;
>  	}
> 
> +	pm_runtime_get_noresume(&pdev->dev);
> +	pm_runtime_set_active(&pdev->dev);
> +	pm_runtime_enable(&pdev->dev);
> +
>  	ret = clk_prepare_enable(data->ipg_clk);
>  	if (ret) {
>  		dev_err(&pdev->dev, "failed to enable ipg clk: %d\n", ret);
> @@ -251,6 +259,8 @@ static int imx_intmux_probe(struct platform_device 
> *pdev)
>  	}
> 
>  	for (i = 0; i < channum; i++) {
> +		data->irqchip_data[i].chip = imx_intmux_irq_chip;
> +		data->irqchip_data[i].chip.parent_device = &pdev->dev;

At some point, we will have to find a way to throw the parent_device
thing out of the irq_chip structure. This thing is a liability.
Nothing you can do about it for now though.

>  		data->irqchip_data[i].chanidx = i;
> 
>  		data->irqchip_data[i].irq = irq_of_parse_and_map(np, i);
> @@ -279,6 +289,12 @@ static int imx_intmux_probe(struct platform_device 
> *pdev)
> 
>  	platform_set_drvdata(pdev, data);
> 
> +	/*
> +	 * Let pm_runtime_put() disable clock.
> +	 * If CONFIG_PM is not enabled, the clock will stay powered.
> +	 */
> +	pm_runtime_put(&pdev->dev);
> +
>  	return 0;
>  out:
>  	clk_disable_unprepare(data->ipg_clk);
> @@ -300,7 +316,7 @@ static int imx_intmux_remove(struct platform_device 
> *pdev)
>  		irq_domain_remove(data->irqchip_data[i].domain);
>  	}
> 
> -	clk_disable_unprepare(data->ipg_clk);
> +	pm_runtime_disable(&pdev->dev);
> 
>  	return 0;
>  }
> @@ -322,7 +338,7 @@ static void imx_intmux_restore_regs(struct
> intmux_data *data)
>  		writel_relaxed(data->saved_reg[i], data->regs + CHANIER(i));
>  }
> 
> -static int imx_intmux_suspend(struct device *dev)
> +static int imx_intmux_runtime_suspend(struct device *dev)
>  {
>  	struct intmux_data *data = dev_get_drvdata(dev);
> 
> @@ -332,7 +348,7 @@ static int imx_intmux_suspend(struct device *dev)
>  	return 0;
>  }
> 
> -static int imx_intmux_resume(struct device *dev)
> +static int imx_intmux_runtime_resume(struct device *dev)

You just introduced these two functions, and rename them immediately?

>  {
>  	struct intmux_data *data = dev_get_drvdata(dev);
>  	int ret;
> @@ -349,7 +365,10 @@ static int imx_intmux_resume(struct device *dev)
>  #endif
> 
>  static const struct dev_pm_ops imx_intmux_pm_ops = {
> -	SET_NOIRQ_SYSTEM_SLEEP_PM_OPS(imx_intmux_suspend, imx_intmux_resume)
> +	SET_NOIRQ_SYSTEM_SLEEP_PM_OPS(pm_runtime_force_suspend,
> +				      pm_runtime_force_resume)
> +	SET_RUNTIME_PM_OPS(imx_intmux_runtime_suspend,
> +			   imx_intmux_runtime_resume, NULL)
>  };
> 
>  static const struct of_device_id imx_intmux_id[] = {

I think you'd might as well squash the two patches together.
Splitting the two serves little purpose.

Thanks,

         M.
-- 
Jazz is not dead. It just smells funny...

  reply	other threads:[~2020-07-17  8:58 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-07-16 19:32 [PATCH 0/2] irqchip: imx-intmux: add PM support Joakim Zhang
2020-07-16 19:32 ` [PATCH 1/2] irqchip: imx-intmux: add system " Joakim Zhang
2020-07-17  1:27   ` kernel test robot
2020-07-17  6:40   ` kernel test robot
2020-07-17  8:41   ` Marc Zyngier
2020-07-17 10:40   ` kernel test robot
2020-07-16 19:32 ` [PATCH 2/2] irqchip: imx-intmux: add runtime " Joakim Zhang
2020-07-17  8:58   ` Marc Zyngier [this message]
2020-07-17 10:48     ` Joakim Zhang

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=7fa10b6173147f57034b2ed95a19ca4f@kernel.org \
    --to=maz@kernel.org \
    --cc=festevam@gmail.com \
    --cc=jason@lakedaemon.net \
    --cc=kernel@pengutronix.de \
    --cc=linux-arm-kernel@lists.infradead.or \
    --cc=linux-imx@nxp.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=qiangqing.zhang@nxp.com \
    --cc=s.hauer@pengutronix.de \
    --cc=shawnguo@kernel.org \
    --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 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).