diff options
Diffstat (limited to 'arch')
-rw-r--r-- | arch/arm/plat-s5p/sleep.S | 44 |
1 files changed, 38 insertions, 6 deletions
diff --git a/arch/arm/plat-s5p/sleep.S b/arch/arm/plat-s5p/sleep.S index 0fd591bfc9fd..006bd01eda02 100644 --- a/arch/arm/plat-s5p/sleep.S +++ b/arch/arm/plat-s5p/sleep.S | |||
@@ -23,9 +23,18 @@ | |||
23 | */ | 23 | */ |
24 | 24 | ||
25 | #include <linux/linkage.h> | 25 | #include <linux/linkage.h> |
26 | #include <asm/assembler.h> | 26 | #include <asm/asm-offsets.h> |
27 | #include <asm/hardware/cache-l2x0.h> | ||
27 | 28 | ||
28 | .text | 29 | /* |
30 | * The following code is located into the .data section. This is to | ||
31 | * allow l2x0_regs_phys to be accessed with a relative load while we | ||
32 | * can't rely on any MMU translation. We could have put l2x0_regs_phys | ||
33 | * in the .text section as well, but some setups might insist on it to | ||
34 | * be truly read-only. (Reference from: arch/arm/kernel/sleep.S) | ||
35 | */ | ||
36 | .data | ||
37 | .align | ||
29 | 38 | ||
30 | /* | 39 | /* |
31 | * sleep magic, to allow the bootloader to check for an valid | 40 | * sleep magic, to allow the bootloader to check for an valid |
@@ -39,11 +48,34 @@ | |||
39 | * s3c_cpu_resume | 48 | * s3c_cpu_resume |
40 | * | 49 | * |
41 | * resume code entry for bootloader to call | 50 | * resume code entry for bootloader to call |
42 | * | ||
43 | * we must put this code here in the data segment as we have no | ||
44 | * other way of restoring the stack pointer after sleep, and we | ||
45 | * must not write to the code segment (code is read-only) | ||
46 | */ | 51 | */ |
47 | 52 | ||
48 | ENTRY(s3c_cpu_resume) | 53 | ENTRY(s3c_cpu_resume) |
54 | #ifdef CONFIG_CACHE_L2X0 | ||
55 | adr r0, l2x0_regs_phys | ||
56 | ldr r0, [r0] | ||
57 | ldr r1, [r0, #L2X0_R_PHY_BASE] | ||
58 | ldr r2, [r1, #L2X0_CTRL] | ||
59 | tst r2, #0x1 | ||
60 | bne resume_l2on | ||
61 | ldr r2, [r0, #L2X0_R_AUX_CTRL] | ||
62 | str r2, [r1, #L2X0_AUX_CTRL] | ||
63 | ldr r2, [r0, #L2X0_R_TAG_LATENCY] | ||
64 | str r2, [r1, #L2X0_TAG_LATENCY_CTRL] | ||
65 | ldr r2, [r0, #L2X0_R_DATA_LATENCY] | ||
66 | str r2, [r1, #L2X0_DATA_LATENCY_CTRL] | ||
67 | ldr r2, [r0, #L2X0_R_PREFETCH_CTRL] | ||
68 | str r2, [r1, #L2X0_PREFETCH_CTRL] | ||
69 | ldr r2, [r0, #L2X0_R_PWR_CTRL] | ||
70 | str r2, [r1, #L2X0_POWER_CTRL] | ||
71 | mov r2, #1 | ||
72 | str r2, [r1, #L2X0_CTRL] | ||
73 | resume_l2on: | ||
74 | #endif | ||
49 | b cpu_resume | 75 | b cpu_resume |
76 | ENDPROC(s3c_cpu_resume) | ||
77 | #ifdef CONFIG_CACHE_L2X0 | ||
78 | .globl l2x0_regs_phys | ||
79 | l2x0_regs_phys: | ||
80 | .long 0 | ||
81 | #endif | ||