From: paul@pwsan.com (Paul Walmsley)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 20/22] OMAP4 powerdomain: Support LOWPOWERSTATECHANGE for powerdomains
Date: Tue, 18 May 2010 20:19:01 -0600 [thread overview]
Message-ID: <20100519021900.19716.68006.stgit@localhost.localdomain> (raw)
In-Reply-To: <20100519021800.19716.8938.stgit@localhost.localdomain>
From: Rajendra Nayak <rnayak@ti.com>
Some powerdomains in OMAP4 support a direct transition from one sleep
state to another deeper sleep state without having to wakeup the
powerdomain. This patch adds an api in the powerdomain framework to
set the LOWPOWERSTATECHANGE bit in PWRSTCTRL register.
Signed-off-by: Rajendra Nayak <rnayak@ti.com>
Signed-off-by: Paul Walmsley <paul@pwsan.com>
---
arch/arm/mach-omap2/powerdomain.c | 28 +++++++++++++++++++++++++
arch/arm/mach-omap2/powerdomains44xx.h | 9 ++++++++
arch/arm/plat-omap/include/plat/powerdomain.h | 6 +++++
3 files changed, 43 insertions(+), 0 deletions(-)
diff --git a/arch/arm/mach-omap2/powerdomain.c b/arch/arm/mach-omap2/powerdomain.c
index 4a91d38..f9f0bca 100644
--- a/arch/arm/mach-omap2/powerdomain.c
+++ b/arch/arm/mach-omap2/powerdomain.c
@@ -980,6 +980,34 @@ bool pwrdm_has_hdwr_sar(struct powerdomain *pwrdm)
}
/**
+ * pwrdm_set_lowpwrstchange - Request a low power state change
+ * @pwrdm: struct powerdomain *
+ *
+ * Allows a powerdomain to transtion to a lower power sleep state
+ * from an existing sleep state without waking up the powerdomain.
+ * Returns -EINVAL if the powerdomain pointer is null or if the
+ * powerdomain does not support LOWPOWERSTATECHANGE, or returns 0
+ * upon success.
+ */
+int pwrdm_set_lowpwrstchange(struct powerdomain *pwrdm)
+{
+ if (!pwrdm)
+ return -EINVAL;
+
+ if (!(pwrdm->flags & PWRDM_HAS_LOWPOWERSTATECHANGE))
+ return -EINVAL;
+
+ pr_debug("powerdomain: %s: setting LOWPOWERSTATECHANGE bit\n",
+ pwrdm->name);
+
+ prm_rmw_mod_reg_bits(OMAP4430_LOWPOWERSTATECHANGE_MASK,
+ (1 << OMAP4430_LOWPOWERSTATECHANGE_SHIFT),
+ pwrdm->prcm_offs, pwrstctrl_reg_offs);
+
+ return 0;
+}
+
+/**
* pwrdm_wait_transition - wait for powerdomain power transition to finish
* @pwrdm: struct powerdomain * to wait for
*
diff --git a/arch/arm/mach-omap2/powerdomains44xx.h b/arch/arm/mach-omap2/powerdomains44xx.h
index ad5a265..c721951 100644
--- a/arch/arm/mach-omap2/powerdomains44xx.h
+++ b/arch/arm/mach-omap2/powerdomains44xx.h
@@ -54,6 +54,7 @@ static struct powerdomain core_44xx_pwrdm = {
[3] = PWRDM_POWER_ON, /* ducati_l2ram */
[4] = PWRDM_POWER_ON, /* ducati_unicache */
},
+ .flags = PWRDM_HAS_LOWPOWERSTATECHANGE,
};
/* gfx_44xx_pwrdm: 3D accelerator power domain */
@@ -69,6 +70,7 @@ static struct powerdomain gfx_44xx_pwrdm = {
.pwrsts_mem_on = {
[0] = PWRDM_POWER_ON, /* gfx_mem */
},
+ .flags = PWRDM_HAS_LOWPOWERSTATECHANGE,
};
/* abe_44xx_pwrdm: Audio back end power domain */
@@ -87,6 +89,7 @@ static struct powerdomain abe_44xx_pwrdm = {
[0] = PWRDM_POWER_ON, /* aessmem */
[1] = PWRDM_POWER_ON, /* periphmem */
},
+ .flags = PWRDM_HAS_LOWPOWERSTATECHANGE,
};
/* dss_44xx_pwrdm: Display subsystem power domain */
@@ -103,6 +106,7 @@ static struct powerdomain dss_44xx_pwrdm = {
.pwrsts_mem_on = {
[0] = PWRDM_POWER_ON, /* dss_mem */
},
+ .flags = PWRDM_HAS_LOWPOWERSTATECHANGE,
};
/* tesla_44xx_pwrdm: Tesla processor power domain */
@@ -123,6 +127,7 @@ static struct powerdomain tesla_44xx_pwrdm = {
[1] = PWRDM_POWER_ON, /* tesla_l1 */
[2] = PWRDM_POWER_ON, /* tesla_l2 */
},
+ .flags = PWRDM_HAS_LOWPOWERSTATECHANGE,
};
/* wkup_44xx_pwrdm: Wake-up power domain */
@@ -227,6 +232,7 @@ static struct powerdomain ivahd_44xx_pwrdm = {
[2] = PWRDM_POWER_ON, /* tcm1_mem */
[3] = PWRDM_POWER_ON, /* tcm2_mem */
},
+ .flags = PWRDM_HAS_LOWPOWERSTATECHANGE,
};
/* cam_44xx_pwrdm: Camera subsystem power domain */
@@ -242,6 +248,7 @@ static struct powerdomain cam_44xx_pwrdm = {
.pwrsts_mem_on = {
[0] = PWRDM_POWER_ON, /* cam_mem */
},
+ .flags = PWRDM_HAS_LOWPOWERSTATECHANGE,
};
/* l3init_44xx_pwrdm: L3 initators pheripherals power domain */
@@ -258,6 +265,7 @@ static struct powerdomain l3init_44xx_pwrdm = {
.pwrsts_mem_on = {
[0] = PWRDM_POWER_ON, /* l3init_bank1 */
},
+ .flags = PWRDM_HAS_LOWPOWERSTATECHANGE,
};
/* l4per_44xx_pwrdm: Target peripherals power domain */
@@ -276,6 +284,7 @@ static struct powerdomain l4per_44xx_pwrdm = {
[0] = PWRDM_POWER_ON, /* nonretained_bank */
[1] = PWRDM_POWER_ON, /* retained_bank */
},
+ .flags = PWRDM_HAS_LOWPOWERSTATECHANGE,
};
/*
diff --git a/arch/arm/plat-omap/include/plat/powerdomain.h b/arch/arm/plat-omap/include/plat/powerdomain.h
index e7cc7e6..fb6ec74 100644
--- a/arch/arm/plat-omap/include/plat/powerdomain.h
+++ b/arch/arm/plat-omap/include/plat/powerdomain.h
@@ -50,6 +50,12 @@
* in MEM bank 1 position. This is
* true for OMAP3430
*/
+#define PWRDM_HAS_LOWPOWERSTATECHANGE (1 << 2) /*
+ * support to transition from a
+ * sleep state to a lower sleep
+ * state without waking up the
+ * powerdomain
+ */
/*
* Number of memory banks that are power-controllable. On OMAP4430, the
next prev parent reply other threads:[~2010-05-19 2:19 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-05-19 2:18 [PATCH 00/22] OMAP PRCM/clock/powerdomain/hwmod: remaining patches for 2.6.35 Paul Walmsley
2010-05-19 2:18 ` [PATCH 01/22] OMAP4: hwmod: Replace module & device offsets by absolute clkctrl address Paul Walmsley
2010-05-19 2:18 ` [PATCH 02/22] OMAP: CM: Move MAX_MODULE_READY_TIME to cm.h Paul Walmsley
2010-05-19 2:18 ` [PATCH 03/22] OMAP4: hwmod & CM: Implement the omap4_cm_wait_module_ready function Paul Walmsley
2010-05-19 2:18 ` [PATCH 04/22] OMAP4: hwmod: Replace OCPIF_HAS_IDLEST by HWMOD_NO_IDLEST Paul Walmsley
2010-05-19 2:18 ` [PATCH 05/22] OMAP: hwmod: Fix wrong pointer iteration in oh->slaves Paul Walmsley
2010-05-19 2:18 ` [PATCH 06/22] OMAP: hwmod: Remove IS_ERR check with omap_clk_get_by_name return value Paul Walmsley
2010-05-19 2:18 ` [PATCH 07/22] OMAP: hwmod: Replace WARN by pr_warning if clock lookup failed Paul Walmsley
2010-05-21 10:00 ` Sergei Shtylyov
2010-05-21 10:16 ` Benoit Cousson
2010-05-19 2:18 ` [PATCH 08/22] OMAP: hwmod: Do not exit the iteration if one clock init failed Paul Walmsley
2010-05-19 2:18 ` [PATCH 09/22] OMAP: hwmod: Rename hwmod name for the MPU Paul Walmsley
2010-05-19 2:18 ` [PATCH 10/22] OMAP: hwmod: Replace WARN by pr_warning for clockdomain check Paul Walmsley
2010-05-21 10:02 ` Sergei Shtylyov
2010-05-21 10:23 ` Sergei Shtylyov
2010-05-21 10:41 ` Benoit Cousson
2010-05-19 2:18 ` [PATCH 11/22] OMAP4: CM: Remove non-functional registers in ES1.0 Paul Walmsley
2010-05-19 2:18 ` [PATCH 12/22] OMAP4: PRM: Remove MPU internal code name and apply PRCM naming convention Paul Walmsley
2010-05-19 2:18 ` [PATCH 13/22] OMAP4: PRCM: Remove duplicate definition of base addresses Paul Walmsley
2010-05-19 2:18 ` [PATCH 14/22] OMAP4: PRCM: Add offset defines for all PRM registers Paul Walmsley
2010-05-19 2:18 ` [PATCH 15/22] OMAP4: PRCM: Add offset defines for all CM registers Paul Walmsley
2010-05-19 2:18 ` [PATCH 16/22] OMAP4 clock: Support clk_set_parent Paul Walmsley
2010-05-19 2:18 ` [PATCH 17/22] OMAP: timers: Fix clock source names for OMAP4 Paul Walmsley
2010-05-19 2:18 ` [PATCH 18/22] OMAP4 powerdomain: Fix pwrsts flags for ALWAYS ON domains Paul Walmsley
2010-05-19 2:19 ` [PATCH 19/22] OMAP3 clock: add support for setting the divider for sys_clkout2 using clk_set_rate Paul Walmsley
2010-05-19 2:19 ` Paul Walmsley [this message]
2010-05-19 2:19 ` [PATCH 21/22] OMAP powerdomain, hwmod, omap_device: add some credits Paul Walmsley
2010-05-19 2:19 ` [PATCH 22/22] OMAP2 clock: fix recursive spinlock attempt when CONFIG_CPU_FREQ=y Paul Walmsley
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=20100519021900.19716.68006.stgit@localhost.localdomain \
--to=paul@pwsan.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).