diff options
author | Glenn Elliott <gelliott@cs.unc.edu> | 2012-03-04 19:47:13 -0500 |
---|---|---|
committer | Glenn Elliott <gelliott@cs.unc.edu> | 2012-03-04 19:47:13 -0500 |
commit | c71c03bda1e86c9d5198c5d83f712e695c4f2a1e (patch) | |
tree | ecb166cb3e2b7e2adb3b5e292245fefd23381ac8 /arch/arm/mm/proc-v6.S | |
parent | ea53c912f8a86a8567697115b6a0d8152beee5c8 (diff) | |
parent | 6a00f206debf8a5c8899055726ad127dbeeed098 (diff) |
Merge branch 'mpi-master' into wip-k-fmlpwip-k-fmlp
Conflicts:
litmus/sched_cedf.c
Diffstat (limited to 'arch/arm/mm/proc-v6.S')
-rw-r--r-- | arch/arm/mm/proc-v6.S | 121 |
1 files changed, 78 insertions, 43 deletions
diff --git a/arch/arm/mm/proc-v6.S b/arch/arm/mm/proc-v6.S index 22aac8515196..1d2b8451bf25 100644 --- a/arch/arm/mm/proc-v6.S +++ b/arch/arm/mm/proc-v6.S | |||
@@ -30,13 +30,10 @@ | |||
30 | #define TTB_RGN_WT (2 << 3) | 30 | #define TTB_RGN_WT (2 << 3) |
31 | #define TTB_RGN_WB (3 << 3) | 31 | #define TTB_RGN_WB (3 << 3) |
32 | 32 | ||
33 | #ifndef CONFIG_SMP | 33 | #define TTB_FLAGS_UP TTB_RGN_WBWA |
34 | #define TTB_FLAGS TTB_RGN_WBWA | 34 | #define PMD_FLAGS_UP PMD_SECT_WB |
35 | #define PMD_FLAGS PMD_SECT_WB | 35 | #define TTB_FLAGS_SMP TTB_RGN_WBWA|TTB_S |
36 | #else | 36 | #define PMD_FLAGS_SMP PMD_SECT_WBWA|PMD_SECT_S |
37 | #define TTB_FLAGS TTB_RGN_WBWA|TTB_S | ||
38 | #define PMD_FLAGS PMD_SECT_WBWA|PMD_SECT_S | ||
39 | #endif | ||
40 | 37 | ||
41 | ENTRY(cpu_v6_proc_init) | 38 | ENTRY(cpu_v6_proc_init) |
42 | mov pc, lr | 39 | mov pc, lr |
@@ -97,7 +94,8 @@ ENTRY(cpu_v6_switch_mm) | |||
97 | #ifdef CONFIG_MMU | 94 | #ifdef CONFIG_MMU |
98 | mov r2, #0 | 95 | mov r2, #0 |
99 | ldr r1, [r1, #MM_CONTEXT_ID] @ get mm->context.id | 96 | ldr r1, [r1, #MM_CONTEXT_ID] @ get mm->context.id |
100 | orr r0, r0, #TTB_FLAGS | 97 | ALT_SMP(orr r0, r0, #TTB_FLAGS_SMP) |
98 | ALT_UP(orr r0, r0, #TTB_FLAGS_UP) | ||
101 | mcr p15, 0, r2, c7, c5, 6 @ flush BTAC/BTB | 99 | mcr p15, 0, r2, c7, c5, 6 @ flush BTAC/BTB |
102 | mcr p15, 0, r2, c7, c10, 4 @ drain write buffer | 100 | mcr p15, 0, r2, c7, c10, 4 @ drain write buffer |
103 | mcr p15, 0, r0, c2, c0, 0 @ set TTB 0 | 101 | mcr p15, 0, r0, c2, c0, 0 @ set TTB 0 |
@@ -123,6 +121,53 @@ ENTRY(cpu_v6_set_pte_ext) | |||
123 | #endif | 121 | #endif |
124 | mov pc, lr | 122 | mov pc, lr |
125 | 123 | ||
124 | /* Suspend/resume support: taken from arch/arm/mach-s3c64xx/sleep.S */ | ||
125 | .globl cpu_v6_suspend_size | ||
126 | .equ cpu_v6_suspend_size, 4 * 8 | ||
127 | #ifdef CONFIG_PM_SLEEP | ||
128 | ENTRY(cpu_v6_do_suspend) | ||
129 | stmfd sp!, {r4 - r11, lr} | ||
130 | mrc p15, 0, r4, c13, c0, 0 @ FCSE/PID | ||
131 | mrc p15, 0, r5, c13, c0, 1 @ Context ID | ||
132 | mrc p15, 0, r6, c3, c0, 0 @ Domain ID | ||
133 | mrc p15, 0, r7, c2, c0, 0 @ Translation table base 0 | ||
134 | mrc p15, 0, r8, c2, c0, 1 @ Translation table base 1 | ||
135 | mrc p15, 0, r9, c1, c0, 1 @ auxiliary control register | ||
136 | mrc p15, 0, r10, c1, c0, 2 @ co-processor access control | ||
137 | mrc p15, 0, r11, c1, c0, 0 @ control register | ||
138 | stmia r0, {r4 - r11} | ||
139 | ldmfd sp!, {r4- r11, pc} | ||
140 | ENDPROC(cpu_v6_do_suspend) | ||
141 | |||
142 | ENTRY(cpu_v6_do_resume) | ||
143 | mov ip, #0 | ||
144 | mcr p15, 0, ip, c7, c14, 0 @ clean+invalidate D cache | ||
145 | mcr p15, 0, ip, c7, c5, 0 @ invalidate I cache | ||
146 | mcr p15, 0, ip, c7, c15, 0 @ clean+invalidate cache | ||
147 | mcr p15, 0, ip, c7, c10, 4 @ drain write buffer | ||
148 | ldmia r0, {r4 - r11} | ||
149 | mcr p15, 0, r4, c13, c0, 0 @ FCSE/PID | ||
150 | mcr p15, 0, r5, c13, c0, 1 @ Context ID | ||
151 | mcr p15, 0, r6, c3, c0, 0 @ Domain ID | ||
152 | mcr p15, 0, r7, c2, c0, 0 @ Translation table base 0 | ||
153 | mcr p15, 0, r8, c2, c0, 1 @ Translation table base 1 | ||
154 | mcr p15, 0, r9, c1, c0, 1 @ auxiliary control register | ||
155 | mcr p15, 0, r10, c1, c0, 2 @ co-processor access control | ||
156 | mcr p15, 0, ip, c2, c0, 2 @ TTB control register | ||
157 | mcr p15, 0, ip, c7, c5, 4 @ ISB | ||
158 | mov r0, r11 @ control register | ||
159 | mov r2, r7, lsr #14 @ get TTB0 base | ||
160 | mov r2, r2, lsl #14 | ||
161 | ldr r3, cpu_resume_l1_flags | ||
162 | b cpu_resume_mmu | ||
163 | ENDPROC(cpu_v6_do_resume) | ||
164 | cpu_resume_l1_flags: | ||
165 | ALT_SMP(.long PMD_TYPE_SECT | PMD_SECT_AP_WRITE | PMD_FLAGS_SMP) | ||
166 | ALT_UP(.long PMD_TYPE_SECT | PMD_SECT_AP_WRITE | PMD_FLAGS_UP) | ||
167 | #else | ||
168 | #define cpu_v6_do_suspend 0 | ||
169 | #define cpu_v6_do_resume 0 | ||
170 | #endif | ||
126 | 171 | ||
127 | 172 | ||
128 | .type cpu_v6_name, #object | 173 | .type cpu_v6_name, #object |
@@ -130,14 +175,9 @@ cpu_v6_name: | |||
130 | .asciz "ARMv6-compatible processor" | 175 | .asciz "ARMv6-compatible processor" |
131 | .size cpu_v6_name, . - cpu_v6_name | 176 | .size cpu_v6_name, . - cpu_v6_name |
132 | 177 | ||
133 | .type cpu_pj4_name, #object | ||
134 | cpu_pj4_name: | ||
135 | .asciz "Marvell PJ4 processor" | ||
136 | .size cpu_pj4_name, . - cpu_pj4_name | ||
137 | |||
138 | .align | 178 | .align |
139 | 179 | ||
140 | __INIT | 180 | __CPUINIT |
141 | 181 | ||
142 | /* | 182 | /* |
143 | * __v6_setup | 183 | * __v6_setup |
@@ -156,9 +196,11 @@ cpu_pj4_name: | |||
156 | */ | 196 | */ |
157 | __v6_setup: | 197 | __v6_setup: |
158 | #ifdef CONFIG_SMP | 198 | #ifdef CONFIG_SMP |
159 | mrc p15, 0, r0, c1, c0, 1 @ Enable SMP/nAMP mode | 199 | ALT_SMP(mrc p15, 0, r0, c1, c0, 1) @ Enable SMP/nAMP mode |
200 | ALT_UP(nop) | ||
160 | orr r0, r0, #0x20 | 201 | orr r0, r0, #0x20 |
161 | mcr p15, 0, r0, c1, c0, 1 | 202 | ALT_SMP(mcr p15, 0, r0, c1, c0, 1) |
203 | ALT_UP(nop) | ||
162 | #endif | 204 | #endif |
163 | 205 | ||
164 | mov r0, #0 | 206 | mov r0, #0 |
@@ -169,8 +211,11 @@ __v6_setup: | |||
169 | #ifdef CONFIG_MMU | 211 | #ifdef CONFIG_MMU |
170 | mcr p15, 0, r0, c8, c7, 0 @ invalidate I + D TLBs | 212 | mcr p15, 0, r0, c8, c7, 0 @ invalidate I + D TLBs |
171 | mcr p15, 0, r0, c2, c0, 2 @ TTB control register | 213 | mcr p15, 0, r0, c2, c0, 2 @ TTB control register |
172 | orr r4, r4, #TTB_FLAGS | 214 | ALT_SMP(orr r4, r4, #TTB_FLAGS_SMP) |
173 | mcr p15, 0, r4, c2, c0, 1 @ load TTB1 | 215 | ALT_UP(orr r4, r4, #TTB_FLAGS_UP) |
216 | ALT_SMP(orr r8, r8, #TTB_FLAGS_SMP) | ||
217 | ALT_UP(orr r8, r8, #TTB_FLAGS_UP) | ||
218 | mcr p15, 0, r8, c2, c0, 1 @ load TTB1 | ||
174 | #endif /* CONFIG_MMU */ | 219 | #endif /* CONFIG_MMU */ |
175 | adr r5, v6_crval | 220 | adr r5, v6_crval |
176 | ldmia r5, {r5, r6} | 221 | ldmia r5, {r5, r6} |
@@ -192,6 +237,8 @@ __v6_setup: | |||
192 | v6_crval: | 237 | v6_crval: |
193 | crval clear=0x01e0fb7f, mmuset=0x00c0387d, ucset=0x00c0187c | 238 | crval clear=0x01e0fb7f, mmuset=0x00c0387d, ucset=0x00c0187c |
194 | 239 | ||
240 | __INITDATA | ||
241 | |||
195 | .type v6_processor_functions, #object | 242 | .type v6_processor_functions, #object |
196 | ENTRY(v6_processor_functions) | 243 | ENTRY(v6_processor_functions) |
197 | .word v6_early_abort | 244 | .word v6_early_abort |
@@ -203,8 +250,13 @@ ENTRY(v6_processor_functions) | |||
203 | .word cpu_v6_dcache_clean_area | 250 | .word cpu_v6_dcache_clean_area |
204 | .word cpu_v6_switch_mm | 251 | .word cpu_v6_switch_mm |
205 | .word cpu_v6_set_pte_ext | 252 | .word cpu_v6_set_pte_ext |
253 | .word cpu_v6_suspend_size | ||
254 | .word cpu_v6_do_suspend | ||
255 | .word cpu_v6_do_resume | ||
206 | .size v6_processor_functions, . - v6_processor_functions | 256 | .size v6_processor_functions, . - v6_processor_functions |
207 | 257 | ||
258 | .section ".rodata" | ||
259 | |||
208 | .type cpu_arch_name, #object | 260 | .type cpu_arch_name, #object |
209 | cpu_arch_name: | 261 | cpu_arch_name: |
210 | .asciz "armv6" | 262 | .asciz "armv6" |
@@ -225,10 +277,16 @@ cpu_elf_name: | |||
225 | __v6_proc_info: | 277 | __v6_proc_info: |
226 | .long 0x0007b000 | 278 | .long 0x0007b000 |
227 | .long 0x0007f000 | 279 | .long 0x0007f000 |
228 | .long PMD_TYPE_SECT | \ | 280 | ALT_SMP(.long \ |
281 | PMD_TYPE_SECT | \ | ||
282 | PMD_SECT_AP_WRITE | \ | ||
283 | PMD_SECT_AP_READ | \ | ||
284 | PMD_FLAGS_SMP) | ||
285 | ALT_UP(.long \ | ||
286 | PMD_TYPE_SECT | \ | ||
229 | PMD_SECT_AP_WRITE | \ | 287 | PMD_SECT_AP_WRITE | \ |
230 | PMD_SECT_AP_READ | \ | 288 | PMD_SECT_AP_READ | \ |
231 | PMD_FLAGS | 289 | PMD_FLAGS_UP) |
232 | .long PMD_TYPE_SECT | \ | 290 | .long PMD_TYPE_SECT | \ |
233 | PMD_SECT_XN | \ | 291 | PMD_SECT_XN | \ |
234 | PMD_SECT_AP_WRITE | \ | 292 | PMD_SECT_AP_WRITE | \ |
@@ -244,26 +302,3 @@ __v6_proc_info: | |||
244 | .long v6_user_fns | 302 | .long v6_user_fns |
245 | .long v6_cache_fns | 303 | .long v6_cache_fns |
246 | .size __v6_proc_info, . - __v6_proc_info | 304 | .size __v6_proc_info, . - __v6_proc_info |
247 | |||
248 | .type __pj4_v6_proc_info, #object | ||
249 | __pj4_v6_proc_info: | ||
250 | .long 0x560f5810 | ||
251 | .long 0xff0ffff0 | ||
252 | .long PMD_TYPE_SECT | \ | ||
253 | PMD_SECT_AP_WRITE | \ | ||
254 | PMD_SECT_AP_READ | \ | ||
255 | PMD_FLAGS | ||
256 | .long PMD_TYPE_SECT | \ | ||
257 | PMD_SECT_XN | \ | ||
258 | PMD_SECT_AP_WRITE | \ | ||
259 | PMD_SECT_AP_READ | ||
260 | b __v6_setup | ||
261 | .long cpu_arch_name | ||
262 | .long cpu_elf_name | ||
263 | .long HWCAP_SWP|HWCAP_HALF|HWCAP_THUMB|HWCAP_FAST_MULT|HWCAP_EDSP|HWCAP_TLS | ||
264 | .long cpu_pj4_name | ||
265 | .long v6_processor_functions | ||
266 | .long v6wbi_tlb_fns | ||
267 | .long v6_user_fns | ||
268 | .long v6_cache_fns | ||
269 | .size __pj4_v6_proc_info, . - __pj4_v6_proc_info | ||