aboutsummaryrefslogtreecommitdiff
path: root/arch/arm/mach-s3c6400/include/mach/system.h
diff options
context:
space:
mode:
Diffstat (limited to 'arch/arm/mach-s3c6400/include/mach/system.h')
-rw-r--r--arch/arm/mach-s3c6400/include/mach/system.h22
1 files changed, 21 insertions, 1 deletions
diff --git a/arch/arm/mach-s3c6400/include/mach/system.h b/arch/arm/mach-s3c6400/include/mach/system.h
index 652bbc403f0..3165f509780 100644
--- a/arch/arm/mach-s3c6400/include/mach/system.h
+++ b/arch/arm/mach-s3c6400/include/mach/system.h
@@ -11,9 +11,29 @@
#ifndef __ASM_ARCH_SYSTEM_H
#define __ASM_ARCH_SYSTEM_H __FILE__
+#include <linux/io.h>
+#include <mach/map.h>
+
+#include <plat/regs-sys.h>
+#include <plat/regs-syscon-power.h>
+
static void arch_idle(void)
{
- /* nothing here yet */
+ unsigned long flags;
+ u32 mode;
+
+ /* ensure that if we execute the cpu idle sequence that we
+ * go into idle mode instead of powering off. */
+
+ local_irq_save(flags);
+ mode = __raw_readl(S3C64XX_PWR_CFG);
+ mode &= ~S3C64XX_PWRCFG_CFG_WFI_MASK;
+ mode |= S3C64XX_PWRCFG_CFG_WFI_IDLE;
+ __raw_writel(mode, S3C64XX_PWR_CFG);
+
+ local_irq_restore(flags);
+
+ cpu_do_idle();
}
static void arch_reset(char mode)