12 #include <linux/sched.h>
14 #include <linux/slab.h>
31 bfin_pm_standby_setup();
37 # ifdef CONFIG_PM_BFIN_SLEEP_DEEPER
45 bfin_pm_standby_restore();
100 #if defined(CONFIG_BFIN_EXTMEM_WRITEBACK) || defined(CONFIG_BFIN_L2_WRITEBACK)
104 static void flushinv_all_dcache(
void)
106 register u32 way, bank, subbank,
set;
110 for (bank = 0; bank < 2; ++bank) {
111 if (!(dmem_ctl & (1 << (
DMC1_P - bank))))
114 for (way = 0; way < 2; ++way)
115 for (subbank = 0; subbank < 4; ++subbank)
116 for (
set = 0;
set < 64; ++
set) {
128 if ((status & 0x3) != 0x3)
132 addr = (status & 0xFFFFC800) | (subbank << 12) | (
set << 5);
135 __asm__ __volatile__(
"FLUSHINV[%0];" : :
"a"(addr));
149 if (memptr ==
NULL) {
150 panic(
"bf53x_suspend_l1_mem malloc failed");
158 #ifdef CONFIG_PM_BFIN_WAKE_PH6
161 #ifdef CONFIG_PM_BFIN_WAKE_GP
166 ret = blackfin_dma_suspend();
173 bfin_gpio_pm_hibernate_suspend();
179 #if defined(CONFIG_BFIN_EXTMEM_WRITEBACK) || defined(CONFIG_BFIN_L2_WRITEBACK)
180 flushinv_all_dcache();
201 bfin_gpio_pm_hibernate_restore();
202 blackfin_dma_resume();
258 #ifdef CONFIG_BFIN_PM_WAKEUP_TIME_BENCH
259 void bfin_pm_end(
void)
271 :
"=d,a" (cycle2),
"=d,a" (cycle),
"=d,a" (usec) : :
"CC"
274 usec64 = ((
u64)cycle2 << 32) + cycle;
280 pr_info(
"PM: resume of kernel completes after %ld msec %03ld usec\n",
286 .enter = bfin_pm_enter,
287 .valid = bfin_pm_valid,
288 #ifdef CONFIG_BFIN_PM_WAKEUP_TIME_BENCH
293 static int __init bfin_pm_init(
void)