sh: SuperH Mobile Software Standby support for cpuidle
authorMagnus Damm <damm@igel.co.jp>
Mon, 17 Aug 2009 09:41:40 +0000 (09:41 +0000)
committerPaul Mundt <lethal@linux-sh.org>
Tue, 18 Aug 2009 01:17:32 +0000 (10:17 +0900)
This patch adds "SuperH Mobile Standby Mode [SF]" to the list
of cpuidle sleep modes. If the software latency requirements
from cpuidle are met together with fulfilled hardware
requirements then deep sleep modes can be entered.

Tested on sh7722 and sh7724 with "Sleep Mode", "Sleep Mode + SF"
and "Software Standby Mode + SF" together with a multimedia
work load and flood ping without packet drop.

Signed-off-by: Magnus Damm <damm@igel.co.jp>
Signed-off-by: Paul Mundt <lethal@linux-sh.org>
arch/sh/kernel/cpu/shmobile/cpuidle.c

index 4afdd97..1c504bd 100644 (file)
@@ -21,6 +21,7 @@
 static unsigned long cpuidle_mode[] = {
        SUSP_SH_SLEEP, /* regular sleep mode */
        SUSP_SH_SLEEP | SUSP_SH_SF, /* sleep mode + self refresh */
+       SUSP_SH_STANDBY | SUSP_SH_SF, /* software standby mode + self refresh */
 };
 
 static int cpuidle_sleep_enter(struct cpuidle_device *dev,
@@ -96,6 +97,16 @@ void sh_mobile_setup_cpuidle(void)
        state->flags |= CPUIDLE_FLAG_TIME_VALID;
        state->enter = cpuidle_sleep_enter;
 
+       state = &dev->states[i++];
+       snprintf(state->name, CPUIDLE_NAME_LEN, "C2");
+       strncpy(state->desc, "SuperH Mobile Standby Mode [SF]", CPUIDLE_DESC_LEN);
+       state->exit_latency = 2300;
+       state->target_residency = 1 * 2;
+       state->power_usage = 1;
+       state->flags = 0;
+       state->flags |= CPUIDLE_FLAG_TIME_VALID;
+       state->enter = cpuidle_sleep_enter;
+
        dev->state_count = i;
 
        cpuidle_register_device(dev);