patch-2.4.22 linux-2.4.22/arch/arm/mach-sa1100/pm.c
Next file: linux-2.4.22/arch/arm/mach-sa1100/sa1111-pcibuf.c
Previous file: linux-2.4.22/arch/arm/mach-sa1100/pcipool.h
Back to the patch index
Back to the overall index
- Lines: 86
- Date:
2003-08-25 04:44:39.000000000 -0700
- Orig file:
linux-2.4.21/arch/arm/mach-sa1100/pm.c
- Orig date:
2002-08-02 17:39:42.000000000 -0700
diff -urN linux-2.4.21/arch/arm/mach-sa1100/pm.c linux-2.4.22/arch/arm/mach-sa1100/pm.c
@@ -18,11 +18,13 @@
* 2001-08-29: Nicolas Pitre <nico@cam.org>
* Cleaned up, pushed platform dependent stuff
* in the platform specific files.
+ *
+ * 2002-05-27: Nicolas Pitre Killed sleep.h and the kmalloced save array.
+ * Storage is local on the stack now.
*/
#include <linux/config.h>
#include <linux/init.h>
#include <linux/pm.h>
-#include <linux/slab.h>
#include <linux/sched.h>
#include <linux/interrupt.h>
#include <linux/sysctl.h>
@@ -33,7 +35,6 @@
#include <asm/system.h>
#include <asm/leds.h>
-#include "sleep.h"
/*
* Debug macros
@@ -43,20 +44,32 @@
extern void sa1100_cpu_suspend(void);
extern void sa1100_cpu_resume(void);
-extern unsigned long *sleep_save; /* virtual address */
-extern unsigned long sleep_save_p; /* physical address */
-
#define SAVE(x) sleep_save[SLEEP_SAVE_##x] = x
#define RESTORE(x) x = sleep_save[SLEEP_SAVE_##x]
+/*
+ * List of global SA11x0 peripheral registers to preserve.
+ * More ones like CP and general purpose register values are preserved
+ * with the stack location in sleep.S.
+ */
+enum { SLEEP_SAVE_START = 0,
+
+ SLEEP_SAVE_OSCR, SLEEP_SAVE_OIER,
+ SLEEP_SAVE_OSMR0, SLEEP_SAVE_OSMR1, SLEEP_SAVE_OSMR2, SLEEP_SAVE_OSMR3,
+
+ SLEEP_SAVE_GPDR, SLEEP_SAVE_GRER, SLEEP_SAVE_GFER, SLEEP_SAVE_GAFR,
+ SLEEP_SAVE_PPDR, SLEEP_SAVE_PPSR, SLEEP_SAVE_PPAR, SLEEP_SAVE_PSDR,
+
+ SLEEP_SAVE_ICMR,
+ SLEEP_SAVE_Ser1SDCR0,
+
+ SLEEP_SAVE_SIZE
+};
+
+
int pm_do_suspend(void)
{
- /* set up pointer to sleep parameters */
- sleep_save = kmalloc(SLEEP_SAVE_SIZE*sizeof(long), GFP_ATOMIC);
- if (!sleep_save)
- return -ENOMEM;
-
- sleep_save_p = virt_to_phys(sleep_save);
+ unsigned long sleep_save[SLEEP_SAVE_SIZE];
cli();
@@ -144,8 +157,6 @@
sti();
- kfree (sleep_save);
-
/*
* Restore the CPU frequency settings.
*/
@@ -156,6 +167,11 @@
return 0;
}
+unsigned long sleep_phys_sp(void *sp)
+{
+ return virt_to_phys(sp);
+}
+
#ifdef CONFIG_SYSCTL
/*
* ARGH! ACPI people defined CTL_ACPI in linux/acpi.h rather than
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)