sh: move the hp6xx pm code
authorMagnus Damm <damm@igel.co.jp>
Thu, 4 Dec 2008 13:45:03 +0000 (22:45 +0900)
committerPaul Mundt <lethal@linux-sh.org>
Mon, 22 Dec 2008 09:43:52 +0000 (18:43 +0900)
Move the not-so-generic pm code from arch/sh/kernel/pm.c to the
platform directory together with the rest of the hp6xx pm code.

This is done to let non-hp6xx platforms enable CONFIG_PM.

Signed-off-by: Magnus Damm <damm@igel.co.jp>
Signed-off-by: Paul Mundt <lethal@linux-sh.org>
arch/sh/boards/mach-hp6xx/pm.c
arch/sh/include/asm/pm.h [deleted file]
arch/sh/kernel/Makefile_32
arch/sh/kernel/Makefile_64
arch/sh/kernel/pm.c [deleted file]

index 64af1f2..d936c1a 100644 (file)
 #include <linux/suspend.h>
 #include <linux/errno.h>
 #include <linux/time.h>
+#include <linux/delay.h>
+#include <linux/gfp.h>
 #include <asm/io.h>
 #include <asm/hd64461.h>
 #include <mach/hp6xx.h>
 #include <cpu/dac.h>
-#include <asm/pm.h>
+#include <asm/freq.h>
+#include <asm/watchdog.h>
+
+#define INTR_OFFSET    0x600
 
 #define STBCR          0xffffff82
 #define STBCR2         0xffffff88
 
+#define STBCR_STBY     0x80
+#define STBCR_MSTP2    0x04
+
+#define MCR            0xffffff68
+#define RTCNT          0xffffff70
+
+#define MCR_RMODE      2
+#define MCR_RFSH       4
+
+extern u8 wakeup_start;
+extern u8 wakeup_end;
+
+static void pm_enter(void)
+{
+       u8 stbcr, csr;
+       u16 frqcr, mcr;
+       u32 vbr_new, vbr_old;
+
+       set_bl_bit();
+
+       /* set wdt */
+       csr = sh_wdt_read_csr();
+       csr &= ~WTCSR_TME;
+       csr |= WTCSR_CKS_4096;
+       sh_wdt_write_csr(csr);
+       csr = sh_wdt_read_csr();
+       sh_wdt_write_cnt(0);
+
+       /* disable PLL1 */
+       frqcr = ctrl_inw(FRQCR);
+       frqcr &= ~(FRQCR_PLLEN | FRQCR_PSTBY);
+       ctrl_outw(frqcr, FRQCR);
+
+       /* enable standby */
+       stbcr = ctrl_inb(STBCR);
+       ctrl_outb(stbcr | STBCR_STBY | STBCR_MSTP2, STBCR);
+
+       /* set self-refresh */
+       mcr = ctrl_inw(MCR);
+       ctrl_outw(mcr & ~MCR_RFSH, MCR);
+
+       /* set interrupt handler */
+       asm volatile("stc vbr, %0" : "=r" (vbr_old));
+       vbr_new = get_zeroed_page(GFP_ATOMIC);
+       udelay(50);
+       memcpy((void*)(vbr_new + INTR_OFFSET),
+              &wakeup_start, &wakeup_end - &wakeup_start);
+       asm volatile("ldc %0, vbr" : : "r" (vbr_new));
+
+       ctrl_outw(0, RTCNT);
+       ctrl_outw(mcr | MCR_RFSH | MCR_RMODE, MCR);
+
+       cpu_sleep();
+
+       asm volatile("ldc %0, vbr" : : "r" (vbr_old));
+
+       free_page(vbr_new);
+
+       /* enable PLL1 */
+       frqcr = ctrl_inw(FRQCR);
+       frqcr |= FRQCR_PSTBY;
+       ctrl_outw(frqcr, FRQCR);
+       udelay(50);
+       frqcr |= FRQCR_PLLEN;
+       ctrl_outw(frqcr, FRQCR);
+
+       ctrl_outb(stbcr, STBCR);
+
+       clear_bl_bit();
+}
+
 static int hp6x0_pm_enter(suspend_state_t state)
 {
        u8 stbcr, stbcr2;
diff --git a/arch/sh/include/asm/pm.h b/arch/sh/include/asm/pm.h
deleted file mode 100644 (file)
index 56fdbd6..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-/*
- * This file is subject to the terms and conditions of the GNU General Public
- * License.  See the file "COPYING" in the main directory of this archive
- * for more details.
- *
- * Copyright 2006 (c) Andriy Skulysh <askulysh@gmail.com>
- *
- */
-#ifndef __ASM_SH_PM_H
-#define __ASM_SH_PM_H
-
-extern u8 wakeup_start;
-extern u8 wakeup_end;
-
-void pm_enter(void);
-
-#endif
index d9df9e5..10a34c3 100644 (file)
@@ -25,7 +25,6 @@ obj-$(CONFIG_MODULES)         += sh_ksyms_32.o module.o
 obj-$(CONFIG_EARLY_PRINTK)     += early_printk.o
 obj-$(CONFIG_KEXEC)            += machine_kexec.o relocate_kernel.o
 obj-$(CONFIG_CRASH_DUMP)       += crash_dump.o
-obj-$(CONFIG_PM)               += pm.o
 obj-$(CONFIG_STACKTRACE)       += stacktrace.o
 obj-$(CONFIG_IO_TRAPPED)       += io_trapped.o
 obj-$(CONFIG_KPROBES)          += kprobes.o
index 4304b25..ae4afc0 100644 (file)
@@ -15,7 +15,6 @@ obj-$(CONFIG_MODULES)         += sh_ksyms_64.o module.o
 obj-$(CONFIG_EARLY_PRINTK)     += early_printk.o
 obj-$(CONFIG_KEXEC)            += machine_kexec.o relocate_kernel.o
 obj-$(CONFIG_CRASH_DUMP)       += crash_dump.o
-obj-$(CONFIG_PM)               += pm.o
 obj-$(CONFIG_STACKTRACE)       += stacktrace.o
 obj-$(CONFIG_IO_TRAPPED)       += io_trapped.o
 obj-$(CONFIG_GENERIC_GPIO)     += gpio.o
diff --git a/arch/sh/kernel/pm.c b/arch/sh/kernel/pm.c
deleted file mode 100644 (file)
index 10ab62c..0000000
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * Generic Power Management Routine
- *
- * Copyright (c) 2006 Andriy Skulysh <askulsyh@gmail.com>
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License.
- */
-#include <linux/suspend.h>
-#include <linux/delay.h>
-#include <linux/gfp.h>
-#include <asm/freq.h>
-#include <asm/io.h>
-#include <asm/watchdog.h>
-#include <asm/pm.h>
-
-#define INTR_OFFSET    0x600
-
-#define STBCR          0xffffff82
-#define STBCR2         0xffffff88
-
-#define STBCR_STBY     0x80
-#define STBCR_MSTP2    0x04
-
-#define MCR            0xffffff68
-#define RTCNT          0xffffff70
-
-#define MCR_RMODE      2
-#define MCR_RFSH       4
-
-void pm_enter(void)
-{
-       u8 stbcr, csr;
-       u16 frqcr, mcr;
-       u32 vbr_new, vbr_old;
-
-       set_bl_bit();
-
-       /* set wdt */
-       csr = sh_wdt_read_csr();
-       csr &= ~WTCSR_TME;
-       csr |= WTCSR_CKS_4096;
-       sh_wdt_write_csr(csr);
-       csr = sh_wdt_read_csr();
-       sh_wdt_write_cnt(0);
-
-       /* disable PLL1 */
-       frqcr = ctrl_inw(FRQCR);
-       frqcr &= ~(FRQCR_PLLEN | FRQCR_PSTBY);
-       ctrl_outw(frqcr, FRQCR);
-
-       /* enable standby */
-       stbcr = ctrl_inb(STBCR);
-       ctrl_outb(stbcr | STBCR_STBY | STBCR_MSTP2, STBCR);
-
-       /* set self-refresh */
-       mcr = ctrl_inw(MCR);
-       ctrl_outw(mcr & ~MCR_RFSH, MCR);
-
-       /* set interrupt handler */
-       asm volatile("stc vbr, %0" : "=r" (vbr_old));
-       vbr_new = get_zeroed_page(GFP_ATOMIC);
-       udelay(50);
-       memcpy((void*)(vbr_new + INTR_OFFSET),
-              &wakeup_start, &wakeup_end - &wakeup_start);
-       asm volatile("ldc %0, vbr" : : "r" (vbr_new));
-
-       ctrl_outw(0, RTCNT);
-       ctrl_outw(mcr | MCR_RFSH | MCR_RMODE, MCR);
-
-       cpu_sleep();
-
-       asm volatile("ldc %0, vbr" : : "r" (vbr_old));
-
-       free_page(vbr_new);
-
-       /* enable PLL1 */
-       frqcr = ctrl_inw(FRQCR);
-       frqcr |= FRQCR_PSTBY;
-       ctrl_outw(frqcr, FRQCR);
-       udelay(50);
-       frqcr |= FRQCR_PLLEN;
-       ctrl_outw(frqcr, FRQCR);
-
-       ctrl_outb(stbcr, STBCR);
-
-       clear_bl_bit();
-}