commit: http://blackfin.uclinux.org/git/?p=linux-kernel;a=commitdiff;h=243870523a5aadf993f47c40b02b71e386e830f7
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 |  220 ++++++++++++++++++++++++--------------
 1 files changed, 138 insertions(+), 82 deletions(-)

diff --git a/arch/blackfin/include/asm/dpmc.h b/arch/blackfin/include/asm/dpmc.h
index bd20ad3..bfd6c36 100644
--- a/arch/blackfin/include/asm/dpmc.h
+++ b/arch/blackfin/include/asm/dpmc.h
@@ -40,11 +40,25 @@
 #define PM_REGSET12 R7:0, P5:1
 #define PM_REGSET13 R7:0, P5:0
 
-#define _PM_PUSH(n, x, w, base) PM_REG##n = w[FP + ((x) - (base))];
+#define _PM_PUSH(n, x, w, base) \
+				[--sp] = (R7:0, P5:0);\
+				R0.L = ((x) - base); \
+				R1 = FP; \
+				R0 = R0 + R1; \
+				R1 = w[FP + ((x) - (base))]; \
+				call _pm_save_reg; \
+				(R7:0, P5:0) = [sp++];\
+				PM_REG##n = w[FP + ((x) - (base))];
 #define _PM_POP(n, x, w, base)  w[FP + ((x) - (base))] = PM_REG##n;
 #define PM_PUSH_SYNC(n)         [--sp] = (PM_REGSET##n);
 #define PM_POP_SYNC(n)          (PM_REGSET##n) = [sp++];
-#define PM_PUSH(n, x)           PM_REG##n = [FP++];
+#define PM_PUSH(n, x) \
+				[--sp] = (R7:0, P5:0);\
+				R0 = FP; \
+				R1 = [FP]; \
+				call _pm_save_reg; \
+				(R7:0, P5:0) = [sp++];\
+				PM_REG##n = [FP++];
 #define PM_POP(n, x)            [FP--] = PM_REG##n;
 #define PM_CORE_PUSH(n, x)      _PM_PUSH(n, x, , COREMMR_BASE)
 #define PM_CORE_POP(n, x)       _PM_POP(n, x, , COREMMR_BASE)
@@ -53,6 +67,7 @@
 #define PM_SYS_PUSH16(n, x)     _PM_PUSH(n, x, w, SYSMMR_BASE)
 #define PM_SYS_POP16(n, x)      _PM_POP(n, x, w, SYSMMR_BASE)
 
+
 	.macro bfin_cpu_reg_save
 	/*
 	 * Save the core regs early so we can blow them away when
@@ -156,6 +171,34 @@
 
 	.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;
+	R0 = FP;
+	call _pm_save_reg;
+.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);
@@ -250,6 +293,7 @@
 #endif
 	.endm
 
+
 	.macro bfin_sys_mmr_restore
 /* Restore System MMRs */
 	FP.H = hi(SYSMMR_BASE);
@@ -364,6 +408,47 @@
 	B2.L = lo(IMASK);
 	B3.L = lo(TCNTL);
 
+	/* Event Vectors */
+	FP = B1;
+	PM_PUSH(0, EVT2)
+	PM_PUSH(1, EVT3)
+	FP += 4;	/* EVT4 */
+	PM_PUSH(2, EVT5)
+	PM_PUSH(3, EVT6)
+	PM_PUSH(4, EVT7)
+	PM_PUSH(5, EVT8)
+	PM_PUSH_SYNC(5)
+
+	PM_PUSH(0, EVT9)
+	PM_PUSH(1, EVT10)
+	PM_PUSH(2, EVT11)
+	PM_PUSH(3, EVT12)
+	PM_PUSH(4, EVT13)
+	PM_PUSH(5, EVT14)
+	PM_PUSH(6, EVT15)
+
+	/* CEC */
+	FP = B2;
+	PM_PUSH(7, IMASK)
+	FP += 4;	/* IPEND */
+	PM_PUSH(8, ILAT)
+	PM_PUSH(9, IPRIO)
+
+	/* Core Timer */
+	FP = B3;
+	PM_PUSH(10, TCNTL)
+	PM_PUSH(11, TPERIOD)
+	PM_PUSH(12, TSCALE)
+	PM_PUSH(13, TCOUNT)
+	PM_PUSH_SYNC(13)
+
+	/* Misc non-contiguous registers */
+	FP = I0;
+	PM_CORE_PUSH(0, DMEM_CONTROL);
+	PM_CORE_PUSH(1, IMEM_CONTROL);
+	PM_CORE_PUSH(2, TBUFCTL);
+	PM_PUSH_SYNC(2)
+
 	/* DCPLB Addr */
 	FP = I1;
 	PM_PUSH(0, DCPLB_ADDR0)
@@ -443,46 +528,7 @@
 	PM_PUSH(5, ICPLB_DATA13)
 	PM_PUSH(6, ICPLB_DATA14)
 	PM_PUSH(7, ICPLB_DATA15)
-
-	/* Event Vectors */
-	FP = B1;
-	PM_PUSH(8, EVT2)
-	PM_PUSH(9, EVT3)
-	FP += 4;	/* EVT4 */
-	PM_PUSH(10, EVT5)
-	PM_PUSH(11, EVT6)
-	PM_PUSH(12, EVT7)
-	PM_PUSH(13, EVT8)
-	PM_PUSH_SYNC(13)
-	PM_PUSH(0, EVT9)
-	PM_PUSH(1, EVT10)
-	PM_PUSH(2, EVT11)
-	PM_PUSH(3, EVT12)
-	PM_PUSH(4, EVT13)
-	PM_PUSH(5, EVT14)
-	PM_PUSH(6, EVT15)
-
-	/* CEC */
-	FP = B2;
-	PM_PUSH(7, IMASK)
-	FP += 4;	/* IPEND */
-	PM_PUSH(8, ILAT)
-	PM_PUSH(9, IPRIO)
-
-	/* Core Timer */
-	FP = B3;
-	PM_PUSH(10, TCNTL)
-	PM_PUSH(11, TPERIOD)
-	PM_PUSH(12, TSCALE)
-	PM_PUSH(13, TCOUNT)
-	PM_PUSH_SYNC(13)
-
-	/* Misc non-contiguous registers */
-	FP = I0;
-	PM_CORE_PUSH(0, DMEM_CONTROL);
-	PM_CORE_PUSH(1, IMEM_CONTROL);
-	PM_CORE_PUSH(2, TBUFCTL);
-	PM_PUSH_SYNC(2)
+	PM_PUSH_SYNC(7)
 	.endm
 
 	.macro bfin_core_mmr_restore
@@ -504,48 +550,9 @@
 	B2.L = lo(IPRIO);
 	B3.L = lo(TCOUNT);
 
-	/* Misc non-contiguous registers */
-	FP = I0;
-	PM_POP_SYNC(2)
-	PM_CORE_POP(2, TBUFCTL)
-	PM_CORE_POP(1, IMEM_CONTROL)
-	PM_CORE_POP(0, DMEM_CONTROL)
-
-	/* Core Timer */
-	PM_POP_SYNC(13)
-	FP = B3;
-	PM_POP(13, TCOUNT)
-	PM_POP(12, TSCALE)
-	PM_POP(11, TPERIOD)
-	PM_POP(10, TCNTL)
-
-	/* CEC */
-	FP = B2;
-	PM_POP(9, IPRIO)
-	PM_POP(8, ILAT)
-	FP += -4;	/* IPEND */
-	PM_POP(7, IMASK)
-
-	/* Event Vectors */
-	FP = B1;
-	PM_POP(6, EVT15)
-	PM_POP(5, EVT14)
-	PM_POP(4, EVT13)
-	PM_POP(3, EVT12)
-	PM_POP(2, EVT11)
-	PM_POP(1, EVT10)
-	PM_POP(0, EVT9)
-	PM_POP_SYNC(13)
-	PM_POP(13, EVT8)
-	PM_POP(12, EVT7)
-	PM_POP(11, EVT6)
-	PM_POP(10, EVT5)
-	FP += -4;	/* EVT4 */
-	PM_POP(9, EVT3)
-	PM_POP(8, EVT2)
-
 	/* ICPLB Data */
 	FP = B0;
+	PM_POP_SYNC(7)
 	PM_POP(7, ICPLB_DATA15)
 	PM_POP(6, ICPLB_DATA14)
 	PM_POP(5, ICPLB_DATA13)
@@ -623,6 +630,55 @@
 	PM_POP(2, DCPLB_ADDR2)
 	PM_POP(1, DCPLB_ADDR1)
 	PM_POP(0, DCPLB_ADDR0)
+
+
+	/* Misc non-contiguous registers */
+
+	/* icache & dcache will enable later 
+	   drop IMEM_CONTROL, DMEM_CONTROL pop
+	*/
+	FP = I0;
+	PM_POP_SYNC(2)
+	PM_CORE_POP(2, TBUFCTL)
+	PM_CORE_POP(1, IMEM_CONTROL)
+	PM_CORE_POP(0, DMEM_CONTROL)
+
+	/* Core Timer */
+	FP = B3;
+	R0 = 0x1;
+	[FP - 0xC] = R0;
+
+	PM_POP_SYNC(13)
+	FP = B3;
+	PM_POP(13, TCOUNT)
+	PM_POP(12, TSCALE)
+	PM_POP(11, TPERIOD)
+	PM_POP(10, TCNTL)
+
+	/* CEC */
+	FP = B2;
+	PM_POP(9, IPRIO)
+	PM_POP(8, ILAT)
+	FP += -4;	/* IPEND */
+	PM_POP(7, IMASK)
+
+	/* Event Vectors */
+	FP = B1;
+	PM_POP(6, EVT15)
+	PM_POP(5, EVT14)
+	PM_POP(4, EVT13)
+	PM_POP(3, EVT12)
+	PM_POP(2, EVT11)
+	PM_POP(1, EVT10)
+	PM_POP(0, EVT9)
+	PM_POP_SYNC(5)
+	PM_POP(5, EVT8)
+	PM_POP(4, EVT7)
+	PM_POP(3, EVT6)
+	PM_POP(2, EVT5)
+	FP += -4;	/* EVT4 */
+	PM_POP(1, EVT3)
+	PM_POP(0, EVT2)
 	.endm
 #endif
 
_______________________________________________
Linux-kernel-commits mailing list
[email protected]
https://blackfin.uclinux.org/mailman/listinfo/linux-kernel-commits

Reply via email to