commit: http://blackfin.uclinux.org/git/?p=linux-kernel;a=commitdiff;h=c679d3590bb304ac2530cb461949e20efd734092
branch: http://blackfin.uclinux.org/git/?p=linux-kernel;a=shortlog;h=refs/heads/trunk

Signed-off-by: Steven Miao <[email protected]>
Signed-off-by: Bob Liu <[email protected]>
---
 arch/blackfin/include/asm/dpmc.h          |   26 --------------------------
 arch/blackfin/mach-bf609/hibernate.S      |    2 --
 arch/blackfin/mach-bf609/pm.c             |    3 ---
 arch/blackfin/mach-common/ints-priority.c |   21 +++++++++++++++++++++
 4 files changed, 21 insertions(+), 31 deletions(-)

diff --git a/arch/blackfin/include/asm/dpmc.h b/arch/blackfin/include/asm/dpmc.h
index 323d55a..b47399c 100644
--- a/arch/blackfin/include/asm/dpmc.h
+++ b/arch/blackfin/include/asm/dpmc.h
@@ -157,32 +157,6 @@
 
 	.endm
 
-	.macro bfin_sec_save
-	FP.H = hi(SEC_SCTL0);
-	FP.L = lo(SEC_SCTL0);
-
-	P2 = 140(Z);
-	LSETUP(.Lsave_begin, .Lsave_end) LC0=P2;
-.Lsave_begin:
-	R1 = [FP];
-	[--sp] = R1;
-.Lsave_end:
-	FP += 8;
-	.endm
-
-	.macro bfin_sec_restore
-	FP.H = hi(SEC_SCTL139);
-	FP.L = lo(SEC_SCTL139);
-
-	P2 = 140(Z);
-	LSETUP(.Lrestore_begin, .Lrestore_end) LC0=P2;
-.Lrestore_begin:
-	R0 = [sp++];
-	[FP] = R0;
-.Lrestore_end:
-	FP += -8;
-	.endm
-
 	.macro bfin_sys_mmr_save
 	/* Save system MMRs */
 	FP.H = hi(SYSMMR_BASE);
diff --git a/arch/blackfin/mach-bf609/hibernate.S b/arch/blackfin/mach-bf609/hibernate.S
index 08a98f4..baedd6e 100644
--- a/arch/blackfin/mach-bf609/hibernate.S
+++ b/arch/blackfin/mach-bf609/hibernate.S
@@ -33,7 +33,6 @@ ENDPROC(_enter_hibernate_mode)
 ENTRY(_bf609_hibernate)
 	bfin_cpu_reg_save;
 	bfin_core_mmr_save;
-	bfin_sec_save;
 
 	P0.H = _bf609_pm_data;
 	P0.L = _bf609_pm_data;
@@ -51,7 +50,6 @@ ENTRY(_bf609_hibernate)
 	call (P1);
 .Lpm_resume_here:
 
-	bfin_sec_restore;
 	bfin_core_mmr_restore;
 	bfin_cpu_reg_restore;
 
diff --git a/arch/blackfin/mach-bf609/pm.c b/arch/blackfin/mach-bf609/pm.c
index fefffa5..bbc5a79 100644
--- a/arch/blackfin/mach-bf609/pm.c
+++ b/arch/blackfin/mach-bf609/pm.c
@@ -197,8 +197,6 @@ void bfin_hibernate_syscontrol(void)
 #else
 # define SIC_SYSIRQ(irq)	((irq) - IVG15)
 #endif
-void bfin_sec_resume(void);
-
 void bfin_hibernate(unsigned long mask)
 {
 	bfin_write32(DPM0_WAKE_EN, 0x10);
@@ -209,7 +207,6 @@ void bfin_hibernate(unsigned long mask)
 	printk(KERN_DEBUG "hibernate: restore %x pgcnt %x\n", bfin_read32(DPM0_RESTORE0), bfin_read32(DPM0_PGCNTR));
 
 	bf609_hibernate();
-	bfin_sec_resume();
 }
 
 void bf609_cpu_pm_enter(suspend_state_t state)
diff --git a/arch/blackfin/mach-common/ints-priority.c b/arch/blackfin/mach-common/ints-priority.c
index 9d928b6..bf5dc5f 100644
--- a/arch/blackfin/mach-common/ints-priority.c
+++ b/arch/blackfin/mach-common/ints-priority.c
@@ -16,6 +16,7 @@
 #include <linux/seq_file.h>
 #include <linux/irq.h>
 #include <linux/sched.h>
+#include <linux/syscore_ops.h>
 #include <asm/delay.h>
 #ifdef CONFIG_IPIPE
 #include <linux/ipipe.h>
@@ -394,6 +395,25 @@ void handle_sec_fault(unsigned int irq, struct irq_desc *desc)
 
 	raw_spin_unlock(&desc->lock);
 }
+
+static int sec_suspend(void)
+{
+	return 0;
+}
+
+static void sec_resume(void)
+{
+	bfin_write_SEC_SCI(0, SEC_CCTL, SEC_CCTL_RESET);
+	udelay(100);
+	bfin_write_SEC_GCTL(SEC_GCTL_EN);
+	bfin_write_SEC_SCI(0, SEC_CCTL, SEC_CCTL_EN | SEC_CCTL_NMI_EN);
+}
+
+static struct syscore_ops sec_pm_syscore_ops = {
+	.suspend = sec_suspend,
+	.resume = sec_resume,
+};
+
 #endif
 
 #ifdef CONFIG_SMP
@@ -1419,6 +1439,7 @@ int __init init_arch_irq(void)
 	bfin_write_SEC_GCTL(SEC_GCTL_EN);
 	bfin_write_SEC_SCI(0, SEC_CCTL, SEC_CCTL_EN | SEC_CCTL_NMI_EN);
 	init_software_driven_irq();
+	register_syscore_ops(&sec_pm_syscore_ops);
 #endif
 	return 0;
 }
_______________________________________________
Linux-kernel-commits mailing list
[email protected]
https://blackfin.uclinux.org/mailman/listinfo/linux-kernel-commits

Reply via email to