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
next prev parent 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).