From: khilman@ti.com (Kevin Hilman)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 18/25] OMAP4: suspend: Add MPUSS power domain RETENTION support
Date: Wed, 14 Sep 2011 17:27:29 -0700 [thread overview]
Message-ID: <87ty8e8xam.fsf@ti.com> (raw)
In-Reply-To: 1315144466-9395-19-git-send-email-santosh.shilimkar@ti.com
Santosh Shilimkar <santosh.shilimkar@ti.com> writes:
> This patch adds MPUSS(MPU Sub System) power domain
> CSWR(Close Switch Retention) support to system wide suspend.
> For both MPUSS RET support, CPUs are programmed to OFF state.
is 'both' in the wrong place in this sentence? I think you meant:
For MPUSS retention support, both CPUs are programmed to OFF state.
> Signed-off-by: Santosh Shilimkar <santosh.shilimkar@ti.com>
> Cc: Kevin Hilman <khilman@ti.com>
> ---
> arch/arm/mach-omap2/omap-mpuss-lowpower.c | 16 +++++++
> arch/arm/mach-omap2/pm44xx.c | 71 +++++++++++++++++++++++++++--
> 2 files changed, 82 insertions(+), 5 deletions(-)
>
> diff --git a/arch/arm/mach-omap2/omap-mpuss-lowpower.c b/arch/arm/mach-omap2/omap-mpuss-lowpower.c
> index 9d68abf..9f632fe 100644
> --- a/arch/arm/mach-omap2/omap-mpuss-lowpower.c
> +++ b/arch/arm/mach-omap2/omap-mpuss-lowpower.c
> @@ -66,6 +66,7 @@ struct omap4_cpu_pm_info {
> };
>
> static DEFINE_PER_CPU(struct omap4_cpu_pm_info, omap4_pm_info);
> +static struct powerdomain *mpuss_pd;
>
> /*
> * Program the wakeup routine address for the CPU0 and CPU1
> @@ -140,6 +141,13 @@ static void scu_pwrst_prepare(unsigned int cpu_id, unsigned int cpu_state)
> * of OMAP4 MPUSS subsystem
> * @cpu : CPU ID
> * @power_state: Low power state.
> + *
> + * MPUSS states for the context save:
> + * save_state =
> + * 0 - Nothing lost and no need to save: MPUSS INACTIVE
> + * 1 - CPUx L1 and logic lost: MPUSS CSWR
> + * 2 - CPUx L1 and logic lost + GIC lost: MPUSS OSWR
> + * 3 - CPUx L1 and logic lost + GIC + L2 lost: DEVICE OFF
> */
> int omap4_enter_lowpower(unsigned int cpu, unsigned int power_state)
> {
> @@ -169,6 +177,7 @@ int omap4_enter_lowpower(unsigned int cpu, unsigned int power_state)
> return -ENXIO;
> }
>
> + pwrdm_clear_all_prev_pwrst(mpuss_pd);
> clear_cpu_prev_pwrst(cpu);
> set_cpu_next_pwrst(cpu, power_state);
> set_cpu_wakeup_addr(cpu, virt_to_phys(omap4_cpu_resume));
> @@ -270,6 +279,13 @@ int __init omap4_mpuss_init(void)
> /* Initialise CPU1 power domain state to ON */
> pwrdm_set_next_pwrst(pm_info->pwrdm, PWRDM_POWER_ON);
>
> + mpuss_pd = pwrdm_lookup("mpu_pwrdm");
> + if (!mpuss_pd) {
> + pr_err("Failed to lookup MPUSS power domain\n");
> + return -ENODEV;
> + }
> + pwrdm_clear_all_prev_pwrst(mpuss_pd);
> +
> /* Save device type on scratchpad for low level code to use */
> if (omap_type() != OMAP2_DEVICE_TYPE_GP)
> __raw_writel(1, sar_base + OMAP_TYPE_OFFSET);
> diff --git a/arch/arm/mach-omap2/pm44xx.c b/arch/arm/mach-omap2/pm44xx.c
> index 4f39de5..63e8f9b 100644
> --- a/arch/arm/mach-omap2/pm44xx.c
> +++ b/arch/arm/mach-omap2/pm44xx.c
> @@ -1,8 +1,9 @@
> /*
> * OMAP4 Power Management Routines
> *
> - * Copyright (C) 2010 Texas Instruments, Inc.
> + * Copyright (C) 2010-2011 Texas Instruments, Inc.
> * Rajendra Nayak <rnayak@ti.com>
> + * Santosh Shilimkar <santosh.shilimkar@ti.com>
> *
> * This program is free software; you can redistribute it and/or modify
> * it under the terms of the GNU General Public License version 2 as
> @@ -16,9 +17,11 @@
> #include <linux/err.h>
> #include <linux/slab.h>
>
> +#include <mach/omap4-common.h>
> +
> #include "powerdomain.h"
> #include "clockdomain.h"
> -#include <mach/omap4-common.h>
> +#include "pm.h"
>
> struct power_state {
> struct powerdomain *pwrdm;
> @@ -34,7 +37,48 @@ static LIST_HEAD(pwrst_list);
> #ifdef CONFIG_SUSPEND
> static int omap4_pm_suspend(void)
> {
> - omap_do_wfi();
> + struct power_state *pwrst;
> + int state, ret = 0;
> + u32 cpu_id = smp_processor_id();
> +
> + /* Save current powerdomain state */
> + list_for_each_entry(pwrst, &pwrst_list, node) {
> + pwrst->saved_state = pwrdm_read_next_pwrst(pwrst->pwrdm);
> + }
> +
> + /* Set targeted power domain states by suspend */
> + list_for_each_entry(pwrst, &pwrst_list, node) {
> + omap_set_pwrdm_state(pwrst->pwrdm, pwrst->next_state);
> + }
> +
> + /*
> + * For MPUSS to hit power domain retention(CSWR or OSWR),
> + * CPU0 and CPU1 power domain needs to be in OFF or DORMANT
s/domain needs/domains need/
> + * state. For MPUSS to reach off-mode. CPU0 and CPU1 power domain
> + * should be in off state.
nit: please be consistent with naming of power states (e.g. OFF vs. off)
> + * Only master CPU followes suspend path. All other CPUs follow
> + * cpu-hotplug path in system wide suspend. On OMAP4, CPU power
> + * domain CSWR is not supported by hardware.
I think this sentence belongs a little earlier. E.g. something like
...CPU0 and CPU1 power domains need to be in OFF or DORMANT state, since
CPU power domain CSWR is not supported by hardware.
> + * More details can be found in OMAP4430 TRM section 4.3.4.2.
> + */
> + omap4_enter_lowpower(cpu_id, PWRDM_POWER_OFF);
> +
> + /* Restore next powerdomain state */
> + list_for_each_entry(pwrst, &pwrst_list, node) {
> + state = pwrdm_read_prev_pwrst(pwrst->pwrdm);
> + if (state > pwrst->next_state) {
> + pr_info("Powerdomain (%s) didn't enter "
> + "target state %d\n",
> + pwrst->pwrdm->name, pwrst->next_state);
> + ret = -1;
> + }
> + omap_set_pwrdm_state(pwrst->pwrdm, pwrst->saved_state);
> + }
> + if (ret)
> + pr_err("Could not enter target state in pm_suspend\n");
Without more details, this isn't terribly useful. I'd suggest just
making the per-state one above pr_err().
> + else
> + pr_err("Successfully put all powerdomains to target state\n");
and this one pr_info.
> return 0;
> }
>
> @@ -97,14 +141,31 @@ static int __init pwrdms_setup(struct powerdomain *pwrdm, void *unused)
> if (!pwrdm->pwrsts)
> return 0;
>
> + /*
> + * Skip CPU0 and CPU1 power domains. CPU1 is programmed
> + * through hotplug path and CPU0 explicitly programmed
> + * further down in the code path
> + */
> + if ((!strcmp(pwrdm->name, "cpu0_pwrdm")) ||
> + (!strcmp(pwrdm->name, "cpu1_pwrdm")))
or just one compare using strncmp(pwrdm->name, "cpu", 3)
> + return 0;
> +
> + /*
> + * FIXME: Remove this check when core retention is supported
> + * Only MPUSS power domain is added in the list.
> + */
> + if (strcmp(pwrdm->name, "mpu_pwrdm"))
> + return 0;
> +
> pwrst = kmalloc(sizeof(struct power_state), GFP_ATOMIC);
> if (!pwrst)
> return -ENOMEM;
> +
> pwrst->pwrdm = pwrdm;
> - pwrst->next_state = PWRDM_POWER_ON;
> + pwrst->next_state = PWRDM_POWER_RET;
> list_add(&pwrst->node, &pwrst_list);
>
> - return pwrdm_set_next_pwrst(pwrst->pwrdm, pwrst->next_state);
> + return omap_set_pwrdm_state(pwrst->pwrdm, pwrst->next_state);
> }
>
> /**
Kevin
next prev parent reply other threads:[~2011-09-15 0:27 UTC|newest]
Thread overview: 119+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-09-04 13:54 [PATCH 00/25] OMAP4: PM: suspend, CPU-hotplug and CPUilde support Santosh Shilimkar
2011-09-04 13:54 ` [PATCH 01/25] ARM: mm: Add strongly ordered descriptor support Santosh Shilimkar
2011-09-13 20:23 ` Tony Lindgren
2011-09-14 5:36 ` Shilimkar, Santosh
2011-09-04 13:54 ` [PATCH 02/25] OMAP4: Redefine mandatory barriers for OMAP to include interconnect barriers Santosh Shilimkar
2011-09-13 20:27 ` Tony Lindgren
2011-09-14 5:39 ` Shilimkar, Santosh
2011-09-14 10:24 ` Santosh
2011-09-15 17:17 ` Kevin Hilman
2011-09-15 17:24 ` Shilimkar, Santosh
2011-09-15 17:53 ` Tony Lindgren
2011-09-15 18:22 ` Shilimkar, Santosh
2011-09-15 19:43 ` Tony Lindgren
2011-09-15 20:00 ` Shilimkar, Santosh
2011-09-16 12:01 ` Shilimkar, Santosh
2011-09-04 13:54 ` [PATCH 03/25] OMAP4: PM: Use custom omap_do_wfi() for suspend and default idle Santosh Shilimkar
2011-09-04 13:54 ` [PATCH 04/25] OMAP4: Remove un-used do_wfi() macro Santosh Shilimkar
2011-09-04 13:54 ` [PATCH 05/25] OMAP4: Use WARN_ON() instead of BUG_ON() with graceful exit Santosh Shilimkar
2011-09-05 10:11 ` Sergei Shtylyov
2011-09-05 10:42 ` Santosh
2011-09-05 10:47 ` Russell King - ARM Linux
2011-09-05 10:51 ` Santosh
2011-09-08 18:51 ` Jean Pihet
2011-09-04 13:54 ` [PATCH 06/25] OMAP4: Export omap4_get_base*() rather than global address pointers Santosh Shilimkar
2011-09-04 13:54 ` [PATCH 07/25] OMAP4: PM: Add SAR RAM support Santosh Shilimkar
2011-09-04 13:54 ` [PATCH 08/25] OMAP4: PM: Keep static dep between MPUSS-EMIF and MPUSS-L3 and DUCATI-L3 Santosh Shilimkar
2011-09-08 18:06 ` Kevin Hilman
2011-09-09 4:21 ` Santosh
2011-09-04 13:54 ` [PATCH 09/25] OMAP4: PM: Avoid omap4_pm_init() on OMAP4430 ES1.0 Santosh Shilimkar
2011-09-04 13:54 ` [PATCH 10/25] OMAP4: PM: Initialise all the clockdomains to supported states Santosh Shilimkar
2011-09-04 13:54 ` [PATCH 11/25] OMAP: Add Secure HAL and monitor mode API infrastructure Santosh Shilimkar
2011-09-08 18:58 ` Jean Pihet
2011-09-09 4:22 ` Santosh
2011-09-04 13:54 ` [PATCH 12/25] OMAP: Add support to allocate the memory for secure RAM Santosh Shilimkar
2011-09-08 19:19 ` Jean Pihet
2011-09-09 9:43 ` Santosh
2011-09-09 12:54 ` Jean Pihet
2011-09-09 14:09 ` Shilimkar, Santosh
2011-09-04 13:54 ` [PATCH 13/25] OMAP4: PM: Add WakeupGen module as OMAP gic_arch_extn Santosh Shilimkar
2011-09-08 18:27 ` Kevin Hilman
2011-09-09 4:29 ` Santosh
2011-09-09 7:19 ` Thomas Gleixner
2011-09-09 8:07 ` Santosh
2011-09-09 8:18 ` Thomas Gleixner
2011-09-09 9:05 ` Santosh
2011-09-12 7:56 ` Thomas Gleixner
2011-09-12 8:44 ` Santosh
2011-09-08 19:16 ` Jean Pihet
2011-09-09 4:23 ` Santosh
2011-09-13 20:36 ` Tony Lindgren
2011-09-14 5:34 ` Shilimkar, Santosh
2011-09-14 15:21 ` Tony Lindgren
2011-09-14 16:49 ` Santosh
2011-09-14 17:08 ` Tony Lindgren
2011-09-14 17:13 ` Santosh
2011-09-14 17:18 ` Tony Lindgren
2011-09-14 17:21 ` Santosh
2011-09-14 17:22 ` Santosh
2011-09-14 19:04 ` Tony Lindgren
2011-09-15 2:57 ` Santosh
2011-09-15 9:36 ` Cousson, Benoit
2011-09-15 12:02 ` Shilimkar, Santosh
2011-09-15 13:29 ` Woodruff, Richard
2011-09-04 13:54 ` [PATCH 14/25] OMAP4: PM: Add CPUX OFF mode support Santosh Shilimkar
2011-09-08 19:39 ` Jean Pihet
2011-09-09 9:59 ` Santosh
2011-09-09 8:04 ` Shawn Guo
2011-09-09 8:09 ` Santosh
2011-09-09 14:13 ` Shawn Guo
2011-09-09 14:11 ` Shilimkar, Santosh
2011-09-09 15:27 ` Shawn Guo
2011-09-09 16:59 ` Santosh
2011-09-09 18:34 ` Kevin Hilman
2011-09-10 3:39 ` Shilimkar, Santosh
2011-09-09 23:34 ` Shawn Guo
2011-09-10 3:38 ` Shilimkar, Santosh
2011-09-10 4:54 ` Shawn Guo
2011-09-10 5:51 ` Santosh
2011-09-12 21:06 ` Kevin Hilman
2011-09-13 5:39 ` Santosh
2011-09-13 17:33 ` Kevin Hilman
2011-09-14 5:26 ` Shilimkar, Santosh
2011-09-04 13:54 ` [PATCH 15/25] OMAP4: Remove __INIT from omap_secondary_startup() to re-use it for hotplug Santosh Shilimkar
2011-09-04 13:54 ` [PATCH 16/25] OMAP4: PM: Program CPU1 to hit OFF when off-lined Santosh Shilimkar
2011-09-12 21:12 ` Kevin Hilman
2011-09-13 5:35 ` Santosh
2011-09-04 13:54 ` [PATCH 17/25] OMAP4: PM: CPU1 wakeup workaround from Low power modes Santosh Shilimkar
2011-09-04 13:54 ` [PATCH 18/25] OMAP4: suspend: Add MPUSS power domain RETENTION support Santosh Shilimkar
2011-09-15 0:27 ` Kevin Hilman [this message]
2011-09-15 3:19 ` Santosh
2011-09-04 13:54 ` [PATCH 19/25] OMAP4: PM: Add WakeupGen and secure GIC low power support Santosh Shilimkar
2011-09-04 13:54 ` [PATCH 20/25] OMAP4: PM: Add L2X0 cache lowpower support Santosh Shilimkar
2011-09-05 14:01 ` Lorenzo Pieralisi
2011-09-05 14:13 ` Santosh
2011-09-16 17:23 ` Kevin Hilman
2011-09-18 8:46 ` Santosh
2011-09-04 13:54 ` [PATCH 21/25] OMAP4: PM: Add MPUSS power domain OSWR support Santosh Shilimkar
2011-09-12 18:52 ` Kevin Hilman
2011-09-13 5:37 ` Santosh
2011-09-13 7:39 ` Jean Pihet
2011-09-13 8:25 ` Santosh
2011-09-04 13:54 ` [PATCH 22/25] OMAP4: PM: Add power domain statistics support Santosh Shilimkar
2011-09-05 10:08 ` Sergei Shtylyov
2011-09-05 10:43 ` Santosh
2011-09-04 13:54 ` [PATCH 23/25] OMAP4: PM: Add CPUidle support Santosh Shilimkar
2011-09-16 17:45 ` Kevin Hilman
2011-09-18 8:47 ` Santosh
2011-09-04 13:54 ` [PATCH 24/25] OMAP4: cpuidle: Switch to gptimer from twd in deeper C-states Santosh Shilimkar
2011-09-16 17:51 ` Kevin Hilman
2011-09-18 8:48 ` Santosh
2011-09-04 13:54 ` [PATCH 25/25] OMAP3: CPUidle: Make use of CPU PM notifiers Santosh Shilimkar
2011-09-08 17:57 ` Kevin Hilman
2011-09-09 4:20 ` Santosh
2011-09-09 7:17 ` Santosh
2011-09-08 20:15 ` [PATCH 00/25] OMAP4: PM: suspend, CPU-hotplug and CPUilde support Jean Pihet
2011-09-09 4:25 ` Santosh
2011-09-20 11:24 ` Vishwanath Sripathy
2011-09-20 11:37 ` Santosh
2011-09-20 11:57 ` Santosh
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=87ty8e8xam.fsf@ti.com \
--to=khilman@ti.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).