commit: http://blackfin.uclinux.org/git/?p=linux-kernel;a=commitdiff;h=4e86ce60fd63b9deb9f3586ac0cff4cf72e371dc branch: http://blackfin.uclinux.org/git/?p=linux-kernel;a=shortlog;h=refs/heads/trunk
save context, save resume address switch stack to L1 scratchpad put ddr into self-refresh do hibernate Signed-off-by: Steven Miao <[email protected]> Signed-off-by: Bob Liu <[email protected]> --- arch/blackfin/mach-bf609/hibernate.S | 58 ++++++++++++++++++++++++++++++++++ arch/blackfin/mach-bf609/sleep.S | 14 -------- 2 files changed, 58 insertions(+), 14 deletions(-) diff --git a/arch/blackfin/mach-bf609/hibernate.S b/arch/blackfin/mach-bf609/hibernate.S new file mode 100644 index 0000000..23c8302 --- /dev/null +++ b/arch/blackfin/mach-bf609/hibernate.S @@ -0,0 +1,58 @@ +#include <linux/linkage.h> +#include <asm/blackfin.h> +#include <asm/dpmc.h> + +#define PM_STACK (COREA_L1_SCRATCH_START + L1_SCRATCH_LENGTH - 12) + +.section .l1.text +ENTRY(_enter_hibernate) + /* switch stack to L1 scratch, prepare for ddr srfr */ + P0.H = HI(PM_STACK); + P0.L = LO(PM_STACK); + SP = P0; + + call _bf609_ddr_sr; + call _bfin_hibernate_syscontrol; + + P0.H = HI(DPM0_CTL); + P0.L = LO(DPM0_CTL); + R3.H = HI(0x00000010); + R3.L = LO(0x00000010); + W[P0] = R3; + + SSYNC; +ENDPROC(_enter_hibernate_mode) + +.section .text +ENTRY(_bf609_hibernate) + bfin_cpu_reg_save; + bfin_core_mmr_save; + bfin_sec_save; + + P0.H = HI(0x10); + P0.L = LO(0x10); + R1.H = 0xDEAD; + R1.L = 0xBEEF; + R2.H = .Lpm_resume_here; + R2.L = .Lpm_resume_here; + [P0++] = R1; + [P0++] = R2; + [P0++] = SP; + + P1.H = _enter_hibernate; + P1.L = _enter_hibernate; + + call (P1); +.Lpm_resume_here: + + bfin_sec_restore; + bfin_core_mmr_restore; + bfin_cpu_reg_restore; + + [--sp] = RETI; /* Clear Global Interrupt Disable */ + SP += 4; + + RTS; + +ENDPROC(_bf609_hibernate) + diff --git a/arch/blackfin/mach-bf609/sleep.S b/arch/blackfin/mach-bf609/sleep.S deleted file mode 100644 index c785dab..0000000 --- a/arch/blackfin/mach-bf609/sleep.S +++ /dev/null @@ -1,14 +0,0 @@ -#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
