commit: http://blackfin.uclinux.org/git/?p=linux-kernel;a=commitdiff;h=d25e55c03c045b3e94c43465eb815510311f6032 branch: http://blackfin.uclinux.org/git/?p=linux-kernel;a=shortlog;h=refs/heads/trunk
add bf609 cpu pm implementation in sleep.S tweak Makefile Signed-off-by: Steven Miao <[email protected]> Signed-off-by: Bob Liu <[email protected]> --- arch/blackfin/mach-bf609/Makefile | 2 +- arch/blackfin/mach-bf609/include/mach/pm.h | 2 ++ arch/blackfin/mach-bf609/pm.c | 9 +++++++-- arch/blackfin/mach-bf609/sleep.S | 14 ++++++++++++++ 4 files changed, 24 insertions(+), 3 deletions(-) diff --git a/arch/blackfin/mach-bf609/Makefile b/arch/blackfin/mach-bf609/Makefile index 91a66bb..04a32f2 100644 --- a/arch/blackfin/mach-bf609/Makefile +++ b/arch/blackfin/mach-bf609/Makefile @@ -3,4 +3,4 @@ # obj-y := dma.o clock.o -obj-$(CONFIG_PM) += pm.o +obj-$(CONFIG_PM) += pm.o sleep.o diff --git a/arch/blackfin/mach-bf609/include/mach/pm.h b/arch/blackfin/mach-bf609/include/mach/pm.h index cc37980..4a687cd 100644 --- a/arch/blackfin/mach-bf609/include/mach/pm.h +++ b/arch/blackfin/mach-bf609/include/mach/pm.h @@ -25,4 +25,6 @@ extern struct bfin_cpu_pm_fns *bfin_cpu_pm; extern int bfin609_pm_enter(suspend_state_t state); extern int bf609_pm_prepare(void); extern void bf609_pm_finish(void); + +extern void bf609_hibernate(void); #endif diff --git a/arch/blackfin/mach-bf609/pm.c b/arch/blackfin/mach-bf609/pm.c index 3c5d0e3..3a63a09 100644 --- a/arch/blackfin/mach-bf609/pm.c +++ b/arch/blackfin/mach-bf609/pm.c @@ -25,6 +25,8 @@ void bfin_deepsleep(unsigned long mask) { uint32_t dpm0_ctl; + bfin_write32(DPM0_WAKE_EN, mask); + dpm0_ctl = bfin_read32(DPM0_CTL); dpm0_ctl |= 0x00000004; bfin_write32(DPM0_CTL, dpm0_ctl); @@ -39,7 +41,7 @@ void bfin_hibernate(unsigned long mask) dpm0_ctl = bfin_read32(DPM0_CTL); dpm0_ctl |= 0x00000010; bfin_write32(DPM0_CTL, dpm0_ctl); - bfin_cpu_suspend(); + bf609_hibernate(); } void bf609_ddr_sr(void) @@ -87,7 +89,10 @@ void bf609_ddr_sr_exit(void) void bf609_cpu_pm_enter(suspend_state_t state) { - bfin_deepsleep(0xffff); + if (state == PM_SUSPEND_STANDBY) + bfin_deepsleep(0xffff); + else + bfin_hibernate(0xffff); } int bf609_cpu_pm_prepare(void) diff --git a/arch/blackfin/mach-bf609/sleep.S b/arch/blackfin/mach-bf609/sleep.S new file mode 100644 index 0000000..c785dab --- /dev/null +++ b/arch/blackfin/mach-bf609/sleep.S @@ -0,0 +1,14 @@ +#include <linux/linkage.h> +#include <asm/blackfin.h> +#include <asm/dpmc.h> + +.section .text +ENTRY(_bf609_hibernate) + bfin_cpu_reg_save; + idle; + +.Lpm_resume_here: + + bfin_cpu_reg_restore; +ENDPROC(_bf609_hibernate) +
_______________________________________________ Linux-kernel-commits mailing list [email protected] https://blackfin.uclinux.org/mailman/listinfo/linux-kernel-commits
