2 #include <linux/linkage.h>
3 #include <asm/assembler.h>
4 #include <asm/memory.h>
5 //#include <asm/suspend.h>
7 #define _RKPM_SEELP_S_INCLUDE_
11 ENTRY(rkpm_slp_cpu_while_tst)
12 stmfd sp!, { r3 - r12, lr }
17 ldmfd sp!, { r3 - r12, pc }
19 ENDPROC(rkpm_slp_cpu_while_tst)
24 ENTRY(rkpm_slp_cpu_resume)
33 setmode PSR_I_BIT | PSR_F_BIT | SVC_MODE, r1 @ set SVC, irqs off
44 WFENE // ; wait if it.s locked
45 B cpu1loop // ; if any failure, loop
54 mcr p15, 0, r0, c7, c5, 0 @ invalidate I cache
55 mcr p15, 2, r0, c0, c0, 0
56 mrc p15, 1, r0, c0, c0, 0
59 and r2, r1, r0, lsr #13
63 and r3, r1, r0, lsr #3 @ NumWays - 1
64 add r2, r2, #1 @ NumSets
67 add r0, r0, #4 @ SetShift
70 add r4, r3, #1 @ NumWays
71 1: sub r2, r2, #1 @ NumSets--
72 mov r3, r4 @ Temp = NumWays
73 2: subs r3, r3, #1 @ Temp--
76 orr r5, r5, r6 @ Reg = (Temp<<WayShift)|(NumSets<<SetShift)
77 mcr p15, 0, r5, c7, c6, 2
85 ldr r1,=PM_BOOT_CODE_SP
86 mov sp, r1 //setting sp
92 adr r1,9b // boot ram base
93 ldr r5,8f // resume data offset ,from ram base
94 add r5,r5,r1 // resume data addr
97 ldr r3 ,[r5,#(RKPM_BOOTDATA_L2LTY_F*4)] // l2 resume flags
99 bne arm_errata__818325
100 ldr r3 ,[r5,#(RKPM_BOOTDATA_L2LTY*4)]
101 mcr p15, 1, r3, c9, c0, 2
104 ldr r3 ,[r5,#(RKPM_BOOTDATA_ARM_ERRATA_818325_F*4)]
107 ldr r3 ,[r5,#(RKPM_BOOTDATA_ARM_ERRATA_818325*4)]
108 mcreq p15, 0, r3, c15, c0, 1
111 ldr sp,[r5,#(RKPM_BOOTDATA_CPUSP*4)] //sp
113 ldr r3,[r5,#(RKPM_BOOTDATA_DDR_F*4)] //get SLP_DDR_NEED_RES ,if it is 1 ,ddr need to reusme
116 ldr r1,[r5,#(RKPM_BOOTDATA_DDRCODE*4)] // ddr resume code
117 ldr r0,[r5,#(RKPM_BOOTDATA_DDRDATA*4)] //ddr resume data
123 ldr r4, = (0xFF730000+0x18)
130 ldr pc, [r5,#(RKPM_BOOTDATA_CPUCODE*4)]
131 8: .long (RKPM_BOOT_CODE_OFFSET+RKPM_BOOT_CODE_SIZE)
132 ENDPROC(rkpm_slp_cpu_resume)