All of lore.kernel.org
 help / color / mirror / Atom feed
From: Krzysztof Kozlowski <k.kozlowski@samsung.com>
To: "Rafael J. Wysocki" <rjw@rjwysocki.net>,
	Len Brown <len.brown@intel.com>, Pavel Machek <pavel@ucw.cz>,
	Russell King <linux@arm.linux.org.uk>,
	Dan Williams <dan.j.williams@intel.com>,
	Vinod Koul <vinod.koul@intel.com>,
	Ulf Hansson <ulf.hansson@linaro.org>,
	Alan Stern <stern@rowland.harvard.edu>,
	linux-pm@vger.kernel.org, linux-kernel@vger.kernel.org,
	dmaengine@vger.kernel.org, Lars-Peter Clausen <lars@metafoo.de>,
	Michal Simek <michal.simek@xilinx.com>
Cc: Kevin Hilman <khilman@kernel.org>,
	Laurent Pinchart <laurent.pinchart@ideasonboard.com>,
	Kyungmin Park <kyungmin.park@samsung.com>,
	Marek Szyprowski <m.szyprowski@samsung.com>,
	Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>,
	Krzysztof Kozlowski <k.kozlowski@samsung.com>
Subject: [PATCH v10 3/5] amba: Don't unprepare the clocks if device driver wants IRQ safe runtime PM
Date: Thu, 06 Nov 2014 09:36:48 +0100	[thread overview]
Message-ID: <1415263010-7992-4-git-send-email-k.kozlowski@samsung.com> (raw)
In-Reply-To: <1415263010-7992-1-git-send-email-k.kozlowski@samsung.com>

The AMBA bus driver defines runtime Power Management functions which
disable and unprepare AMBA bus clock. This is problematic for runtime PM
because unpreparing a clock might sleep so it is not interrupt safe.

However some drivers may want to implement runtime PM functions in
interrupt-safe way (see pm_runtime_irq_safe()). In such case the AMBA
bus driver should only disable/enable the clock in runtime suspend and
resume callbacks.

Detect the device driver behavior during runtime suspend. During runtime
resume deal with clocks according to stored value.

Signed-off-by: Krzysztof Kozlowski <k.kozlowski@samsung.com>
---
 drivers/amba/bus.c       | 17 +++++++++++++----
 include/linux/amba/bus.h |  1 +
 2 files changed, 14 insertions(+), 4 deletions(-)

diff --git a/drivers/amba/bus.c b/drivers/amba/bus.c
index 47bbdc1b5be3..356f906c6966 100644
--- a/drivers/amba/bus.c
+++ b/drivers/amba/bus.c
@@ -95,8 +95,14 @@ static int amba_pm_runtime_suspend(struct device *dev)
 	struct amba_device *pcdev = to_amba_device(dev);
 	int ret = pm_generic_runtime_suspend(dev);
 
-	if (ret == 0 && dev->driver)
-		clk_disable_unprepare(pcdev->pclk);
+	if (ret == 0 && dev->driver) {
+		pcdev->irq_safe = dev->power.irq_safe;
+
+		if (pcdev->irq_safe)
+			clk_disable(pcdev->pclk);
+		else
+			clk_disable_unprepare(pcdev->pclk);
+	}
 
 	return ret;
 }
@@ -107,7 +113,10 @@ static int amba_pm_runtime_resume(struct device *dev)
 	int ret;
 
 	if (dev->driver) {
-		ret = clk_prepare_enable(pcdev->pclk);
+		if (pcdev->irq_safe)
+			ret = clk_enable(pcdev->pclk);
+		else
+			ret = clk_prepare_enable(pcdev->pclk);
 		/* Failure is probably fatal to the system, but... */
 		if (ret)
 			return ret;
@@ -115,7 +124,7 @@ static int amba_pm_runtime_resume(struct device *dev)
 
 	return pm_generic_runtime_resume(dev);
 }
-#endif
+#endif /* CONFIG_PM */
 
 static const struct dev_pm_ops amba_pm = {
 	.suspend	= pm_generic_suspend,
diff --git a/include/linux/amba/bus.h b/include/linux/amba/bus.h
index ac02f9bd63dc..c4bae79851fb 100644
--- a/include/linux/amba/bus.h
+++ b/include/linux/amba/bus.h
@@ -32,6 +32,7 @@ struct amba_device {
 	struct clk		*pclk;
 	unsigned int		periphid;
 	unsigned int		irq[AMBA_NR_IRQS];
+	unsigned int		irq_safe:1;
 };
 
 struct amba_driver {
-- 
1.9.1


  parent reply	other threads:[~2014-11-06  8:38 UTC|newest]

Thread overview: 31+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-11-06  8:36 [PATCH v10 0/5] amba/dmaengine: pl330: add Power Management support Krzysztof Kozlowski
2014-11-06  8:36 ` [PATCH v10 1/5] PM / Runtime: Allow accessing irq_safe if no PM_RUNTIME Krzysztof Kozlowski
2014-11-06 10:00   ` Ulf Hansson
2014-11-06 22:51   ` Rafael J. Wysocki
2014-11-07  8:06     ` Krzysztof Kozlowski
2014-11-07 14:50       ` Alan Stern
2014-11-07 14:50         ` Alan Stern
2014-11-07 23:45         ` Rafael J. Wysocki
2014-11-10 14:11         ` Ulf Hansson
2014-11-10 16:36           ` Alan Stern
2014-11-10 16:36             ` Alan Stern
2014-11-10 18:35             ` Ulf Hansson
2014-11-10 18:59               ` Alan Stern
2014-11-12  8:56                 ` Krzysztof Kozlowski
2014-11-12 10:39                 ` Ulf Hansson
2014-11-12 10:44                   ` Krzysztof Kozlowski
2014-11-12 16:34                   ` Alan Stern
2014-11-13 10:22                     ` Ulf Hansson
2014-11-13 15:55                       ` Alan Stern
2014-11-10 13:38       ` Ulf Hansson
2014-11-10 13:43   ` Srikanth K
2014-11-10 13:43     ` Srikanth K
2014-11-06  8:36 ` [PATCH v10 2/5] amba: Add helpers for (un)preparing AMBA clock Krzysztof Kozlowski
2014-11-06  8:36 ` Krzysztof Kozlowski [this message]
2014-11-06 10:03   ` [PATCH v10 3/5] amba: Don't unprepare the clocks if device driver wants IRQ safe runtime PM Ulf Hansson
2014-11-06 22:52   ` Rafael J. Wysocki
2014-11-07  8:01     ` Krzysztof Kozlowski
2014-11-07 23:52       ` Rafael J. Wysocki
2014-11-06  8:36 ` [PATCH v10 4/5] dmaengine: pl330: add Power Management support Krzysztof Kozlowski
2014-11-06 12:45   ` Vinod Koul
2014-11-06  8:36 ` [PATCH v10 5/5] amba: Remove unused amba_pclk_enable/disable macros Krzysztof Kozlowski

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=1415263010-7992-4-git-send-email-k.kozlowski@samsung.com \
    --to=k.kozlowski@samsung.com \
    --cc=b.zolnierkie@samsung.com \
    --cc=dan.j.williams@intel.com \
    --cc=dmaengine@vger.kernel.org \
    --cc=khilman@kernel.org \
    --cc=kyungmin.park@samsung.com \
    --cc=lars@metafoo.de \
    --cc=laurent.pinchart@ideasonboard.com \
    --cc=len.brown@intel.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-pm@vger.kernel.org \
    --cc=linux@arm.linux.org.uk \
    --cc=m.szyprowski@samsung.com \
    --cc=michal.simek@xilinx.com \
    --cc=pavel@ucw.cz \
    --cc=rjw@rjwysocki.net \
    --cc=stern@rowland.harvard.edu \
    --cc=ulf.hansson@linaro.org \
    --cc=vinod.koul@intel.com \
    /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.