29cb3cd208
There are SoCs where attempting to enter a low power state is ignored, and the CPU continues executing instructions with all state preserved. It is over-complex at that point to disable the MMU just to call the resume path. Instead, allow the suspend finisher to return error codes to abort suspend in this circumstance, where the cpu_suspend internals will then unwind the saved state on the stack. Also omit the tlb flush as no changes to the page tables will have happened. Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
41 lines
1.1 KiB
C
41 lines
1.1 KiB
C
/*
|
|
* Copyright (c) 2005 Richard Purdie
|
|
*
|
|
* 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
|
|
* published by the Free Software Foundation.
|
|
*
|
|
*/
|
|
|
|
#include <linux/suspend.h>
|
|
|
|
struct pxa_cpu_pm_fns {
|
|
int save_count;
|
|
void (*save)(unsigned long *);
|
|
void (*restore)(unsigned long *);
|
|
int (*valid)(suspend_state_t state);
|
|
void (*enter)(suspend_state_t state);
|
|
int (*prepare)(void);
|
|
void (*finish)(void);
|
|
};
|
|
|
|
extern struct pxa_cpu_pm_fns *pxa_cpu_pm_fns;
|
|
|
|
/* sleep.S */
|
|
extern int pxa25x_finish_suspend(unsigned long);
|
|
extern int pxa27x_finish_suspend(unsigned long);
|
|
|
|
extern int pxa_pm_enter(suspend_state_t state);
|
|
extern int pxa_pm_prepare(void);
|
|
extern void pxa_pm_finish(void);
|
|
|
|
/* NOTE: this is for PM debugging on Lubbock, it's really a big
|
|
* ugly, but let's keep the crap minimum here, instead of direct
|
|
* accessing the LUBBOCK CPLD registers in arch/arm/mach-pxa/pm.c
|
|
*/
|
|
#ifdef CONFIG_ARCH_LUBBOCK
|
|
extern void lubbock_set_hexled(uint32_t value);
|
|
#else
|
|
#define lubbock_set_hexled(x)
|
|
#endif
|