linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
From: cwchoi00@gmail.com (Chanwoo Choi)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH V4 01/14] DMA: PL330: Add support runtime PM for PL330 DMAC
Date: Tue, 26 Jul 2011 15:03:27 +0900	[thread overview]
Message-ID: <4E2E58AF.4000409@gmail.com> (raw)
In-Reply-To: <1311557312-26107-2-git-send-email-boojin.kim@samsung.com>

Boojin Kim wrote:
> Signed-off-by: Boojin Kim <boojin.kim@samsung.com>
> ---
>  drivers/dma/pl330.c |   75 +++++++++++++++++++++++++++++++++++++++++++++++++-
>  1 files changed, 73 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/dma/pl330.c b/drivers/dma/pl330.c
> index 6abe1ec..b7ecf47 100644
> --- a/drivers/dma/pl330.c
> +++ b/drivers/dma/pl330.c
> @@ -17,6 +17,7 @@
>  #include <linux/interrupt.h>
>  #include <linux/amba/bus.h>
>  #include <linux/amba/pl330.h>
> +#include <linux/pm_runtime.h>
>  
>  #define NR_DEFAULT_DESC	16
>  
> @@ -83,6 +84,8 @@ struct dma_pl330_dmac {
>  
>  	/* Peripheral channels connected to this DMAC */
>  	struct dma_pl330_chan peripherals[0]; /* keep at end */
> +
> +	struct clk *clk;
>  };
>  
>  struct dma_pl330_desc {
> @@ -696,6 +699,30 @@ pl330_probe(struct amba_device *adev, const struct amba_id *id)
>  		goto probe_err1;
>  	}
>  
> +	pdmac->clk = clk_get(&adev->dev, "dma");
> +	if (IS_ERR(pdmac->clk)) {
> +		dev_err(&adev->dev, "Cannot get operation clock.\n");
> +		ret = -EINVAL;
> +		goto probe_err1;
> +	}
> +
> +	amba_set_drvdata(adev, pdmac);
> +
> +#ifdef CONFIG_PM_RUNTIME
> +	/* to use the runtime PM helper functions */
> +	pm_runtime_enable(&adev->dev);
> +
> +	/* enable the power domain */
> +	if (pm_runtime_get_sync(&adev->dev)) {
> +		dev_err(&adev->dev, "failed to get runtime pm\n");
> +		ret = -ENODEV;
> +		goto probe_err1;
> +	}
> +#else
> +	/* enable dma clk */
> +	clk_enable(pdmac->clk);
> +#endif
> +
>  	irq = adev->irq[0];
>  	ret = request_irq(irq, pl330_irq_handler, 0,
>  			dev_name(&adev->dev), pi);
> @@ -763,8 +790,6 @@ pl330_probe(struct amba_device *adev, const struct amba_id *id)
>  		goto probe_err4;
>  	}
>  
> -	amba_set_drvdata(adev, pdmac);
> -
>  	dev_info(&adev->dev,
>  		"Loaded driver for PL330 DMAC-%d\n", adev->periphid);
>  	dev_info(&adev->dev,
> @@ -825,6 +850,13 @@ static int __devexit pl330_remove(struct amba_device *adev)
>  	res = &adev->res;
>  	release_mem_region(res->start, resource_size(res));
>  
> +#ifdef CONFIG_PM_RUNTIME
> +	pm_runtime_put(&adev->dev);
> +	pm_runtime_disable(&adev->dev);
> +#else
> +	clk_disable(pdmac->clk);
> +#endif
> +
>  	kfree(pdmac);
>  
>  	return 0;
> @@ -838,10 +870,49 @@ static struct amba_id pl330_ids[] = {
>  	{ 0, 0 },
>  };
>  
> +#ifdef CONFIG_PM_RUNTIME
> +static int pl330_runtime_suspend(struct device *dev)
> +{
> +	struct dma_pl330_dmac *pdmac = dev_get_drvdata(dev);
> +
> +	if (!pdmac) {
> +		dev_err(dev, "failed to get dmac\n");
> +		return -ENODEV;
> +	}
> +
> +	clk_disable(pdmac->clk);
> +
> +	return 0;
> +}
> +
> +static int pl330_runtime_resume(struct device *dev)
> +{
> +	struct dma_pl330_dmac *pdmac = dev_get_drvdata(dev);
> +
> +	if (!pdmac) {
> +		dev_err(dev, "failed to get dmac\n");
> +		return -ENODEV;
> +	}
> +
> +	clk_enable(pdmac->clk);
> +
> +	return 0;
> +}
> +#else
> +#define pl330_runtime_suspend	NULL
> +#define pl330_runtime_resume	NULL
> +#endif /* CONFIG_PM_RUNTIME */
> +
> +static const struct dev_pm_ops pl330_pm_ops = {
> +	.runtime_suspend = pl330_runtime_suspend,
> +	.runtime_resume = pl330_runtime_resume,
> +};
> +
>  static struct amba_driver pl330_driver = {
>  	.drv = {
>  		.owner = THIS_MODULE,
>  		.name = "dma-pl330",
> +		.pm = &pl330_pm_ops,
>  	},
>  	.id_table = pl330_ids,
>  	.probe = pl330_probe,

I have a question for runtime PM of PL330 DMAC

This patch support runtime PM for PL330 DMAC, but the clock of "dma" is always on.
If the clock of "dma" is always on, additional power(10mA) is consumed. I tested it.

I think that the PL330 DMAC only turn on the clock of "dma" when using DMA.


Thanks,
Chanwoo Choi

  reply	other threads:[~2011-07-26  6:03 UTC|newest]

Thread overview: 73+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-07-25  1:28 [RESEND] [PATCH V4 0/14] To use DMA generic APIs for Samsung DMA Boojin Kim
2011-07-25  1:28 ` [PATCH V4 01/14] DMA: PL330: Add support runtime PM for PL330 DMAC Boojin Kim
2011-07-26  6:03   ` Chanwoo Choi [this message]
2011-07-25  1:28 ` [PATCH V4 02/14] DMA: PL330: Update PL330 DMA API driver Boojin Kim
2011-07-25  8:57   ` Jassi Brar
2011-07-25  9:48     ` Boojin Kim
2011-07-25  1:28 ` [PATCH V4 03/14] DMA: PL330: Support DMA_SLAVE_CONFIG command Boojin Kim
2011-07-25 10:26   ` Vinod Koul
2011-07-25 12:51     ` Boojin Kim
2011-07-25 13:48       ` Vinod Koul
2011-07-26 13:04         ` Boojin Kim
2011-07-26 13:12           ` Russell King - ARM Linux
2011-07-25  1:28 ` [PATCH V4 04/14] DMA: PL330: Add DMA_CYCLIC capability Boojin Kim
2011-07-25  9:27   ` Russell King - ARM Linux
2011-07-25 10:31     ` Boojin Kim
2011-07-25 10:36       ` Russell King - ARM Linux
2011-07-25 10:48         ` Vinod Koul
2011-07-25 10:57           ` Russell King - ARM Linux
2011-07-25 11:01             ` Vinod Koul
2011-07-25 11:39               ` Russell King - ARM Linux
2011-07-25 12:01                 ` Vinod Koul
2011-07-26  7:57                   ` [PATCH] Improve slave/cyclic DMA engine documentation (was: [PATCH V4 04/14] DMA: PL330: Add DMA_CYCLIC capability) Russell King - ARM Linux
2011-07-26  9:35                     ` Vinod Koul
2011-07-26 14:37                       ` Jassi Brar
2011-07-26 17:20                         ` Russell King - ARM Linux
2011-07-26 17:55                           ` Jassi Brar
2011-07-26 18:03                             ` Grant Likely
2011-07-26 18:16                             ` Russell King - ARM Linux
2011-07-27  2:38                             ` Vinod Koul
2011-07-27  9:01                       ` Russell King - ARM Linux
2011-07-27  9:06                         ` Koul, Vinod
2011-07-26 13:25                     ` Russell King - ARM Linux
2011-07-25 12:36           ` [PATCH V4 04/14] DMA: PL330: Add DMA_CYCLIC capability Boojin Kim
2011-07-25 12:34         ` Boojin Kim
2011-07-25 11:24   ` Jassi Brar
2011-07-26 12:28     ` Boojin Kim
2011-07-25  1:28 ` [PATCH V4 05/14] ARM: SAMSUNG: Update to use PL330-DMA driver Boojin Kim
2011-07-25 10:52   ` Vinod Koul
2011-07-25 11:31   ` Jassi Brar
2011-07-25  1:28 ` [PATCH V4 06/14] ARM: SAMSUNG: Add common DMA operations Boojin Kim
2011-07-25  9:36   ` Russell King - ARM Linux
2011-07-25  9:57     ` Boojin Kim
2011-07-25 11:51   ` Jassi Brar
2011-07-26  8:02     ` Russell King - ARM Linux
2011-07-26 17:43       ` Jassi Brar
2011-07-26 18:14         ` Russell King - ARM Linux
2011-07-26 19:54           ` Jassi Brar
2011-07-26  9:35     ` Boojin Kim
2011-07-27  1:33       ` Jassi Brar
2011-07-27  5:17         ` Boojin Kim
2011-07-27  7:57           ` Jassi Brar
2011-07-28  0:38             ` Boojin Kim
2011-07-25  1:28 ` [PATCH V4 07/14] ARM: EXYNOS4: Use generic DMA PL330 driver Boojin Kim
2011-07-25 11:59   ` Jassi Brar
2011-07-25 12:59     ` Boojin Kim
2011-07-25  1:28 ` [PATCH V4 08/14] ARM: S5PV210: " Boojin Kim
2011-07-25  1:28 ` [PATCH V4 09/14] ARM: S5PC100: " Boojin Kim
2011-07-25  1:28 ` [PATCH V4 10/14] ARM: S5P64X0: " Boojin Kim
2011-07-25  1:28 ` [PATCH V4 11/14] ARM: SAMSUNG: Remove S3C-PL330-DMA driver Boojin Kim
2011-07-25  1:28 ` [PATCH V4 12/14] spi/s3c64xx: Add support DMA engine API Boojin Kim
2011-07-25  9:40   ` Russell King - ARM Linux
2011-07-25 10:34     ` Boojin Kim
2011-07-25 11:17   ` Vinod Koul
2011-07-26  9:31     ` Boojin Kim
2011-07-26 10:14       ` Vinod Koul
2011-07-27  5:05         ` Boojin Kim
2011-07-25  1:28 ` [PATCH V4 13/14] ASoC: Samsung: Update DMA interface Boojin Kim
2011-07-25  1:28 ` [PATCH V4 14/14] ARM: SAMSUNG: Remove Samsung specific enum type for dma direction Boojin Kim
2011-07-25 12:08   ` Jassi Brar
2011-07-25 21:15     ` Grant Likely
2011-07-28  1:23       ` Boojin Kim
2011-07-25 10:17 ` [RESEND] [PATCH V4 0/14] To use DMA generic APIs for Samsung DMA Vinod Koul
2011-07-25 11:09   ` Vinod Koul

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=4E2E58AF.4000409@gmail.com \
    --to=cwchoi00@gmail.com \
    --cc=linux-arm-kernel@lists.infradead.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).