aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/mm/proc-v7.S
diff options
context:
space:
mode:
Diffstat (limited to 'arch/arm/mm/proc-v7.S')
-rw-r--r--arch/arm/mm/proc-v7.S395
1 files changed, 304 insertions, 91 deletions
diff --git a/arch/arm/mm/proc-v7.S b/arch/arm/mm/proc-v7.S
index 089c0b5e454..38c78253f76 100644
--- a/arch/arm/mm/proc-v7.S
+++ b/arch/arm/mm/proc-v7.S
@@ -58,9 +58,17 @@ ENDPROC(cpu_v7_proc_fin)
58 * to what would be the reset vector. 58 * to what would be the reset vector.
59 * 59 *
60 * - loc - location to jump to for soft reset 60 * - loc - location to jump to for soft reset
61 *
62 * This code must be executed using a flat identity mapping with
63 * caches disabled.
61 */ 64 */
62 .align 5 65 .align 5
63ENTRY(cpu_v7_reset) 66ENTRY(cpu_v7_reset)
67 mrc p15, 0, r1, c1, c0, 0 @ ctrl register
68 bic r1, r1, #0x1 @ ...............m
69 THUMB( bic r1, r1, #1 << 30 ) @ SCTLR.TE (Thumb exceptions)
70 mcr p15, 0, r1, c1, c0, 0 @ disable MMU
71 isb
64 mov pc, r0 72 mov pc, r0
65ENDPROC(cpu_v7_reset) 73ENDPROC(cpu_v7_reset)
66 74
@@ -168,13 +176,14 @@ ENTRY(cpu_v7_set_pte_ext)
168 ARM( str r3, [r0, #2048]! ) 176 ARM( str r3, [r0, #2048]! )
169 THUMB( add r0, r0, #2048 ) 177 THUMB( add r0, r0, #2048 )
170 THUMB( str r3, [r0] ) 178 THUMB( str r3, [r0] )
171 mcr p15, 0, r0, c7, c10, 1 @ flush_pte 179 mrc p15, 0, r3, c0, c1, 7 @ read ID_MMFR3
180 tst r3, #0xf << 20 @ check the coherent walk bits
181 mcreq p15, 0, r0, c7, c10, 1 @ flush_pte
172#endif 182#endif
173 mov pc, lr 183 mov pc, lr
174ENDPROC(cpu_v7_set_pte_ext) 184ENDPROC(cpu_v7_set_pte_ext)
175 185
176cpu_v7_name: 186 string cpu_v7_name, "ARMv7 Processor"
177 .ascii "ARMv7 Processor"
178 .align 187 .align
179 188
180 /* 189 /*
@@ -205,49 +214,254 @@ cpu_v7_name:
205 * NS1 = PRRR[19] = 1 - normal shareable property 214 * NS1 = PRRR[19] = 1 - normal shareable property
206 * NOS = PRRR[24+n] = 1 - not outer shareable 215 * NOS = PRRR[24+n] = 1 - not outer shareable
207 */ 216 */
208.equ PRRR, 0xff0a81a8 217.equ PRRR, 0xff0a89a8
209.equ NMRR, 0x40e040e0 218.equ NMRR, 0xc0e044e0
210 219
211/* Suspend/resume support: derived from arch/arm/mach-s5pv210/sleep.S */ 220/* Suspend/resume support: derived from arch/arm/mach-s5pv210/sleep.S */
221.local cpu_v7_debug_suspend_size
222#ifdef CONFIG_ARM_SAVE_DEBUG_CONTEXT
223/*
224 * Debug context:
225 * 8 CP14 registers
226 * 16x2 CP14 breakpoint registers (maximum)
227 * 16x2 CP14 watchpoint registers (maximum)
228 */
229.equ cpu_v7_debug_suspend_size, (4 * (8 + (16 * 2) + (16 * 2)))
230
231.macro save_brkpt cm
232 mrc p14, 0, r4, c0, \cm, 4
233 mrc p14, 0, r5, c0, \cm, 5
234 stmia r0!, {r4 - r5}
235.endm
236
237.macro restore_brkpt cm
238 ldmia r0!, {r4 - r5}
239 mcr p14, 0, r4, c0, \cm, 4
240 mcr p14, 0, r5, c0, \cm, 5
241.endm
242
243.macro save_wpt cm
244 mrc p14, 0, r4, c0, \cm, 6
245 mrc p14, 0, r5, c0, \cm, 7
246 stmia r0!, {r4 - r5}
247.endm
248
249.macro restore_wpt cm
250 ldmia r0!, {r4 - r5}
251 mcr p14, 0, r4, c0, \cm, 6
252 mcr p14, 0, r5, c0, \cm, 7
253.endm
254
255#else
256.equ cpu_v7_debug_suspend_size, 0
257#endif
258
212.globl cpu_v7_suspend_size 259.globl cpu_v7_suspend_size
213.equ cpu_v7_suspend_size, 4 * 9 260.equ cpu_v7_suspend_size, (4 * 10) + cpu_v7_debug_suspend_size
214#ifdef CONFIG_PM_SLEEP 261#ifdef CONFIG_PM_SLEEP
215ENTRY(cpu_v7_do_suspend) 262ENTRY(cpu_v7_do_suspend)
216 stmfd sp!, {r4 - r11, lr} 263 stmfd sp!, {r0, r3 - r11, lr}
264 mrc p15, 0, r3, c15, c0, 1 @ diag
217 mrc p15, 0, r4, c13, c0, 0 @ FCSE/PID 265 mrc p15, 0, r4, c13, c0, 0 @ FCSE/PID
218 mrc p15, 0, r5, c13, c0, 1 @ Context ID 266 mrc p15, 0, r5, c13, c0, 1 @ Context ID
219 mrc p15, 0, r6, c13, c0, 3 @ User r/o thread ID 267 mrc p15, 0, r6, c13, c0, 3 @ User r/o thread ID
220 stmia r0!, {r4 - r6} 268 stmia r0!, {r3 - r6}
221 mrc p15, 0, r6, c3, c0, 0 @ Domain ID 269 mrc p15, 0, r6, c3, c0, 0 @ Domain ID
222 mrc p15, 0, r7, c2, c0, 0 @ TTB 0 270 mrc p15, 0, r7, c2, c0, 0 @ TTB 0
223 mrc p15, 0, r8, c2, c0, 1 @ TTB 1 271 mrc p15, 0, r8, c2, c0, 1 @ TTB 1
224 mrc p15, 0, r9, c1, c0, 0 @ Control register 272 mrc p15, 0, r9, c1, c0, 0 @ Control register
225 mrc p15, 0, r10, c1, c0, 1 @ Auxiliary control register 273 mrc p15, 0, r10, c1, c0, 1 @ Auxiliary control register
226 mrc p15, 0, r11, c1, c0, 2 @ Co-processor access control 274 mrc p15, 0, r11, c1, c0, 2 @ Co-processor access control
227 stmia r0, {r6 - r11} 275 stmia r0!, {r6 - r11}
228 ldmfd sp!, {r4 - r11, pc} 276
277#ifdef CONFIG_ARM_SAVE_DEBUG_CONTEXT
278 /* Save CP14 debug controller context */
279
280 mrc p14, 0, r4, c0, c2, 2 @ DBGDSCRext
281 mrc p14, 0, r5, c0, c6, 0 @ DBGWFAR
282 mrc p14, 0, r6, c0, c7, 0 @ DBGVCR
283 mrc p14, 0, r7, c7, c9, 6 @ DBGCLAIMCLR
284 stmia r0!, {r4-r7}
285
286 mrc p14, 0, r4, c0, c10, 0 @ DBGDSCCR
287 mrc p14, 0, r5, c0, c11, 0 @ DBGDSMCR
288 stmia r0!, {r4-r5}
289
290 tst r4, #(1 << 29) @ DBGDSCRext.TXfull
291 mrcne p14, 0, r4, c0, c3, 2 @ DBGDTRTXext
292 strne r4, [r0], #4
293
294 tst r4, #(1 << 30) @ DBGDSCRext.RXfull
295 mrcne p14, 0, r4, c0, c0, 2 @ DBGDTRRXext
296 strne r4, [r0], #4
297
298 mrc p14, 0, r8, c0, c0, 0 @ read IDR
299 mov r3, r8, lsr #24
300 and r3, r3, #0xf @ r3 has the number of brkpt
301 rsb r3, r3, #0xf
302
303 /* r3 = (15 - #of brkpt) ;
304 switch offset = r3*12 - 4 = (r3*3 - 1)<<2
305 */
306 add r3, r3, r3, lsl #1
307 sub r3, r3, #1
308 add pc, pc, r3, lsl #2
309
310 save_brkpt c15
311 save_brkpt c14
312 save_brkpt c13
313 save_brkpt c12
314 save_brkpt c11
315 save_brkpt c10
316 save_brkpt c9
317 save_brkpt c8
318 save_brkpt c7
319 save_brkpt c6
320 save_brkpt c5
321 save_brkpt c4
322 save_brkpt c3
323 save_brkpt c2
324 save_brkpt c1
325 save_brkpt c0
326
327 mov r3, r8, lsr #28 @ r3 has the number of wpt
328 rsb r3, r3, #0xf
329
330 /* r3 = (15 - #of wpt) ;
331 switch offset = r3*12 - 4 = (r3*3 - 1)<<2
332 */
333 add r3, r3, r3, lsl #1
334 sub r3, r3, #1
335 add pc, pc, r3, lsl #2
336
337 save_wpt c15
338 save_wpt c14
339 save_wpt c13
340 save_wpt c12
341 save_wpt c11
342 save_wpt c10
343 save_wpt c9
344 save_wpt c8
345 save_wpt c7
346 save_wpt c6
347 save_wpt c5
348 save_wpt c4
349 save_wpt c3
350 save_wpt c2
351 save_wpt c1
352 save_wpt c0
353#endif
354 ldmfd sp!, {r0, r3 - r11, pc}
229ENDPROC(cpu_v7_do_suspend) 355ENDPROC(cpu_v7_do_suspend)
230 356
231ENTRY(cpu_v7_do_resume) 357ENTRY(cpu_v7_do_resume)
232 mov ip, #0 358 mov ip, #0
233 mcr p15, 0, ip, c8, c7, 0 @ invalidate TLBs 359 mcr p15, 0, ip, c8, c7, 0 @ invalidate TLBs
234 mcr p15, 0, ip, c7, c5, 0 @ invalidate I cache 360 mcr p15, 0, ip, c7, c5, 0 @ invalidate I cache
235 ldmia r0!, {r4 - r6} 361 ldmia r0!, {r3 - r6}
362#ifndef CONFIG_TRUSTED_FOUNDATIONS
363 mcr p15, 0, r3, c15, c0, 1 @ diag
364#endif
236 mcr p15, 0, r4, c13, c0, 0 @ FCSE/PID 365 mcr p15, 0, r4, c13, c0, 0 @ FCSE/PID
237 mcr p15, 0, r5, c13, c0, 1 @ Context ID 366 mcr p15, 0, r5, c13, c0, 1 @ Context ID
238 mcr p15, 0, r6, c13, c0, 3 @ User r/o thread ID 367 mcr p15, 0, r6, c13, c0, 3 @ User r/o thread ID
239 ldmia r0, {r6 - r11} 368 ldmia r0!, {r6 - r11}
240 mcr p15, 0, r6, c3, c0, 0 @ Domain ID 369 mcr p15, 0, r6, c3, c0, 0 @ Domain ID
241 mcr p15, 0, r7, c2, c0, 0 @ TTB 0 370 mcr p15, 0, r7, c2, c0, 0 @ TTB 0
242 mcr p15, 0, r8, c2, c0, 1 @ TTB 1 371 mcr p15, 0, r8, c2, c0, 1 @ TTB 1
243 mcr p15, 0, ip, c2, c0, 2 @ TTB control register 372 mcr p15, 0, ip, c2, c0, 2 @ TTB control register
244 mcr p15, 0, r10, c1, c0, 1 @ Auxiliary control register 373 mrc p15, 0, r4, c1, c0, 1 @ Read Auxiliary control register
374 teq r4, r10 @ Is it already set?
375 mcrne p15, 0, r10, c1, c0, 1 @ No, so write it
245 mcr p15, 0, r11, c1, c0, 2 @ Co-processor access control 376 mcr p15, 0, r11, c1, c0, 2 @ Co-processor access control
246 ldr r4, =PRRR @ PRRR 377 ldr r4, =PRRR @ PRRR
247 ldr r5, =NMRR @ NMRR 378 ldr r5, =NMRR @ NMRR
248 mcr p15, 0, r4, c10, c2, 0 @ write PRRR 379 mcr p15, 0, r4, c10, c2, 0 @ write PRRR
249 mcr p15, 0, r5, c10, c2, 1 @ write NMRR 380 mcr p15, 0, r5, c10, c2, 1 @ write NMRR
250 isb 381 isb
382
383#ifdef CONFIG_ARM_SAVE_DEBUG_CONTEXT
384 /* Restore CP14 debug controller context */
385
386 ldmia r0!, {r2 - r5}
387 mcr p14, 0, r3, c0, c6, 0 @ DBGWFAR
388 mcr p14, 0, r4, c0, c7, 0 @ DBGVCR
389 mcr p14, 0, r5, c7, c8, 6 @ DBGCLAIMSET
390
391 ldmia r0!, {r4-r5}
392 mcr p14, 0, r4, c0, c10, 0 @ DBGDSCCR
393 mcr p14, 0, r5, c0, c11, 0 @ DBGDSMCR
394
395 tst r2, #(1 << 29) @ DBGDSCRext.TXfull
396 ldrne r4, [r0], #4
397 mcrne p14, 0, r4, c0, c3, 2 @ DBGDTRTXext
398
399 tst r2, #(1 << 30) @ DBGDSCRext.RXfull
400 ldrne r4, [r0], #4
401 mcrne p14, 0, r4, c0, c0, 2 @ DBGDTRRXext
402
403 mrc p14, 0, r8, c0, c0, 0 @ read IDR
404 mov r3, r8, lsr #24
405 and r3, r3, #0xf @ r3 has the number of brkpt
406 rsb r3, r3, #0xf
407
408 /* r3 = (15 - #of wpt) ;
409 switch offset = r3*12 - 4 = (r3*3 - 1)<<2
410 */
411 add r3, r3, r3, lsl #1
412 sub r3, r3, #1
413 add pc, pc, r3, lsl #2
414
415 restore_brkpt c15
416 restore_brkpt c14
417 restore_brkpt c13
418 restore_brkpt c12
419 restore_brkpt c11
420 restore_brkpt c10
421 restore_brkpt c9
422 restore_brkpt c8
423 restore_brkpt c7
424 restore_brkpt c6
425 restore_brkpt c5
426 restore_brkpt c4
427 restore_brkpt c3
428 restore_brkpt c2
429 restore_brkpt c1
430 restore_brkpt c0
431
432 mov r3, r8, lsr #28 @ r3 has the number of wpt
433 rsb r3, r3, #0xf
434
435 /* r3 = (15 - #of wpt) ;
436 switch offset = r3*12 - 4 = (r3*3 - 1)<<2
437 */
438 add r3, r3, r3, lsl #1
439 sub r3, r3, #1
440 add pc, pc, r3, lsl #2
441
442start_restore_wpt:
443 restore_wpt c15
444 restore_wpt c14
445 restore_wpt c13
446 restore_wpt c12
447 restore_wpt c11
448 restore_wpt c10
449 restore_wpt c9
450 restore_wpt c8
451 restore_wpt c7
452 restore_wpt c6
453 restore_wpt c5
454 restore_wpt c4
455 restore_wpt c3
456 restore_wpt c2
457 restore_wpt c1
458 restore_wpt c0
459 isb
460
461 mcr p14, 0, r2, c0, c2, 2 @ DSCR
462 isb
463#endif
464 dsb
251 mov r0, r9 @ control register 465 mov r0, r9 @ control register
252 mov r2, r7, lsr #14 @ get TTB0 base 466 mov r2, r7, lsr #14 @ get TTB0 base
253 mov r2, r2, lsl #14 467 mov r2, r2, lsl #14
@@ -257,9 +471,6 @@ ENDPROC(cpu_v7_do_resume)
257cpu_resume_l1_flags: 471cpu_resume_l1_flags:
258 ALT_SMP(.long PMD_TYPE_SECT | PMD_SECT_AP_WRITE | PMD_FLAGS_SMP) 472 ALT_SMP(.long PMD_TYPE_SECT | PMD_SECT_AP_WRITE | PMD_FLAGS_SMP)
259 ALT_UP(.long PMD_TYPE_SECT | PMD_SECT_AP_WRITE | PMD_FLAGS_UP) 473 ALT_UP(.long PMD_TYPE_SECT | PMD_SECT_AP_WRITE | PMD_FLAGS_UP)
260#else
261#define cpu_v7_do_suspend 0
262#define cpu_v7_do_resume 0
263#endif 474#endif
264 475
265 __CPUINIT 476 __CPUINIT
@@ -270,22 +481,25 @@ cpu_resume_l1_flags:
270 * Initialise TLB, Caches, and MMU state ready to switch the MMU 481 * Initialise TLB, Caches, and MMU state ready to switch the MMU
271 * on. Return in r0 the new CP15 C1 control register setting. 482 * on. Return in r0 the new CP15 C1 control register setting.
272 * 483 *
273 * We automatically detect if we have a Harvard cache, and use the
274 * Harvard cache control instructions insead of the unified cache
275 * control instructions.
276 *
277 * This should be able to cover all ARMv7 cores. 484 * This should be able to cover all ARMv7 cores.
278 * 485 *
279 * It is assumed that: 486 * It is assumed that:
280 * - cache type register is implemented 487 * - cache type register is implemented
281 */ 488 */
489__v7_ca5mp_setup:
282__v7_ca9mp_setup: 490__v7_ca9mp_setup:
491 mov r10, #(1 << 0) @ TLB ops broadcasting
492 b 1f
493__v7_ca15mp_setup:
494 mov r10, #0
4951:
283#ifdef CONFIG_SMP 496#ifdef CONFIG_SMP
284 ALT_SMP(mrc p15, 0, r0, c1, c0, 1) 497 ALT_SMP(mrc p15, 0, r0, c1, c0, 1)
285 ALT_UP(mov r0, #(1 << 6)) @ fake it for UP 498 ALT_UP(mov r0, #(1 << 6)) @ fake it for UP
286 tst r0, #(1 << 6) @ SMP/nAMP mode enabled? 499 tst r0, #(1 << 6) @ SMP/nAMP mode enabled?
287 orreq r0, r0, #(1 << 6) | (1 << 0) @ Enable SMP/nAMP mode and 500 orreq r0, r0, #(1 << 6) @ Enable SMP/nAMP mode
288 mcreq p15, 0, r0, c1, c0, 1 @ TLB ops broadcasting 501 orreq r0, r0, r10 @ Enable CPU-specific SMP bits
502 mcreq p15, 0, r0, c1, c0, 1
289#endif 503#endif
290__v7_setup: 504__v7_setup:
291 adr r12, __v7_setup_stack @ the local stack 505 adr r12, __v7_setup_stack @ the local stack
@@ -332,6 +546,17 @@ __v7_setup:
3322: ldr r10, =0x00000c09 @ Cortex-A9 primary part number 5462: ldr r10, =0x00000c09 @ Cortex-A9 primary part number
333 teq r0, r10 547 teq r0, r10
334 bne 3f 548 bne 3f
549#ifndef CONFIG_TRUSTED_FOUNDATIONS
550 cmp r6, #0x10 @ power ctrl reg added r1p0
551 mrcge p15, 0, r10, c15, c0, 0 @ read power control register
552 orrge r10, r10, #1 @ enable dynamic clock gating
553 mcrge p15, 0, r10, c15, c0, 0 @ write power control register
554#ifdef CONFIG_ARM_ERRATA_720791
555 teq r5, #0x00100000 @ only present in r1p*
556 mrceq p15, 0, r10, c15, c0, 2 @ read "chicken power ctrl" reg
557 orreq r10, r10, #0x30 @ disable core clk gate on
558 mcreq p15, 0, r10, c15, c0, 2 @ instr-side waits
559#endif
335#ifdef CONFIG_ARM_ERRATA_742230 560#ifdef CONFIG_ARM_ERRATA_742230
336 cmp r6, #0x22 @ only present up to r2p2 561 cmp r6, #0x22 @ only present up to r2p2
337 mrcle p15, 0, r10, c15, c0, 1 @ read diagnostic register 562 mrcle p15, 0, r10, c15, c0, 1 @ read diagnostic register
@@ -351,6 +576,8 @@ __v7_setup:
351 teq r6, #0x20 @ present in r2p0 576 teq r6, #0x20 @ present in r2p0
352 teqne r6, #0x21 @ present in r2p1 577 teqne r6, #0x21 @ present in r2p1
353 teqne r6, #0x22 @ present in r2p2 578 teqne r6, #0x22 @ present in r2p2
579 teqne r6, #0x27 @ present in r2p7
580 teqne r6, #0x29 @ present in r2p9
354 mrceq p15, 0, r10, c15, c0, 1 @ read diagnostic register 581 mrceq p15, 0, r10, c15, c0, 1 @ read diagnostic register
355 orreq r10, r10, #1 << 6 @ set bit #6 582 orreq r10, r10, #1 << 6 @ set bit #6
356 mcreq p15, 0, r10, c15, c0, 1 @ write diagnostic register 583 mcreq p15, 0, r10, c15, c0, 1 @ write diagnostic register
@@ -361,11 +588,16 @@ __v7_setup:
361 orrlt r10, r10, #1 << 11 @ set bit #11 588 orrlt r10, r10, #1 << 11 @ set bit #11
362 mcrlt p15, 0, r10, c15, c0, 1 @ write diagnostic register 589 mcrlt p15, 0, r10, c15, c0, 1 @ write diagnostic register
363#endif 590#endif
591#ifdef CONFIG_ARM_ERRATA_752520
592 cmp r6, #0x29 @ present prior to r2p9
593 mrclt p15, 0, r10, c15, c0, 1 @ read diagnostic register
594 orrlt r10, r10, #1 << 20 @ set bit #20
595 mcrlt p15, 0, r10, c15, c0, 1 @ write diagnostic register
596#endif
597#endif
364 598
3653: mov r10, #0 5993: mov r10, #0
366#ifdef HARVARD_CACHE
367 mcr p15, 0, r10, c7, c5, 0 @ I+BTB cache invalidate 600 mcr p15, 0, r10, c7, c5, 0 @ I+BTB cache invalidate
368#endif
369 dsb 601 dsb
370#ifdef CONFIG_MMU 602#ifdef CONFIG_MMU
371 mcr p15, 0, r10, c8, c7, 0 @ invalidate I + D TLBs 603 mcr p15, 0, r10, c8, c7, 0 @ invalidate I + D TLBs
@@ -411,94 +643,75 @@ __v7_setup_stack:
411 643
412 __INITDATA 644 __INITDATA
413 645
414 .type v7_processor_functions, #object 646 @ define struct processor (see <asm/proc-fns.h> and proc-macros.S)
415ENTRY(v7_processor_functions) 647 define_processor_functions v7, dabort=v7_early_abort, pabort=v7_pabort, suspend=1
416 .word v7_early_abort
417 .word v7_pabort
418 .word cpu_v7_proc_init
419 .word cpu_v7_proc_fin
420 .word cpu_v7_reset
421 .word cpu_v7_do_idle
422 .word cpu_v7_dcache_clean_area
423 .word cpu_v7_switch_mm
424 .word cpu_v7_set_pte_ext
425 .word cpu_v7_suspend_size
426 .word cpu_v7_do_suspend
427 .word cpu_v7_do_resume
428 .size v7_processor_functions, . - v7_processor_functions
429 648
430 .section ".rodata" 649 .section ".rodata"
431 650
432 .type cpu_arch_name, #object 651 string cpu_arch_name, "armv7"
433cpu_arch_name: 652 string cpu_elf_name, "v7"
434 .asciz "armv7"
435 .size cpu_arch_name, . - cpu_arch_name
436
437 .type cpu_elf_name, #object
438cpu_elf_name:
439 .asciz "v7"
440 .size cpu_elf_name, . - cpu_elf_name
441 .align 653 .align
442 654
443 .section ".proc.info.init", #alloc, #execinstr 655 .section ".proc.info.init", #alloc, #execinstr
444 656
445 .type __v7_ca9mp_proc_info, #object 657 /*
446__v7_ca9mp_proc_info: 658 * Standard v7 proc info content
447 .long 0x410fc090 @ Required ID value 659 */
448 .long 0xff0ffff0 @ Mask for ID 660.macro __v7_proc initfunc, mm_mmuflags = 0, io_mmuflags = 0, hwcaps = 0
449 ALT_SMP(.long \ 661 ALT_SMP(.long PMD_TYPE_SECT | PMD_SECT_AP_WRITE | PMD_SECT_AP_READ | \
450 PMD_TYPE_SECT | \ 662 PMD_FLAGS_SMP | \mm_mmuflags)
451 PMD_SECT_AP_WRITE | \ 663 ALT_UP(.long PMD_TYPE_SECT | PMD_SECT_AP_WRITE | PMD_SECT_AP_READ | \
452 PMD_SECT_AP_READ | \ 664 PMD_FLAGS_UP | \mm_mmuflags)
453 PMD_FLAGS_SMP) 665 .long PMD_TYPE_SECT | PMD_SECT_XN | PMD_SECT_AP_WRITE | \
454 ALT_UP(.long \ 666 PMD_SECT_AP_READ | \io_mmuflags
455 PMD_TYPE_SECT | \ 667 W(b) \initfunc
456 PMD_SECT_AP_WRITE | \
457 PMD_SECT_AP_READ | \
458 PMD_FLAGS_UP)
459 .long PMD_TYPE_SECT | \
460 PMD_SECT_XN | \
461 PMD_SECT_AP_WRITE | \
462 PMD_SECT_AP_READ
463 W(b) __v7_ca9mp_setup
464 .long cpu_arch_name 668 .long cpu_arch_name
465 .long cpu_elf_name 669 .long cpu_elf_name
466 .long HWCAP_SWP|HWCAP_HALF|HWCAP_THUMB|HWCAP_FAST_MULT|HWCAP_EDSP|HWCAP_TLS 670 .long HWCAP_SWP | HWCAP_HALF | HWCAP_THUMB | HWCAP_FAST_MULT | \
671 HWCAP_EDSP | HWCAP_TLS | \hwcaps
467 .long cpu_v7_name 672 .long cpu_v7_name
468 .long v7_processor_functions 673 .long v7_processor_functions
469 .long v7wbi_tlb_fns 674 .long v7wbi_tlb_fns
470 .long v6_user_fns 675 .long v6_user_fns
471 .long v7_cache_fns 676 .long v7_cache_fns
677.endm
678
679 /*
680 * ARM Ltd. Cortex A5 processor.
681 */
682 .type __v7_ca5mp_proc_info, #object
683__v7_ca5mp_proc_info:
684 .long 0x410fc050
685 .long 0xff0ffff0
686 __v7_proc __v7_ca5mp_setup
687 .size __v7_ca5mp_proc_info, . - __v7_ca5mp_proc_info
688
689 /*
690 * ARM Ltd. Cortex A9 processor.
691 */
692 .type __v7_ca9mp_proc_info, #object
693__v7_ca9mp_proc_info:
694 .long 0x410fc090
695 .long 0xff0ffff0
696 __v7_proc __v7_ca9mp_setup
472 .size __v7_ca9mp_proc_info, . - __v7_ca9mp_proc_info 697 .size __v7_ca9mp_proc_info, . - __v7_ca9mp_proc_info
473 698
474 /* 699 /*
700 * ARM Ltd. Cortex A15 processor.
701 */
702 .type __v7_ca15mp_proc_info, #object
703__v7_ca15mp_proc_info:
704 .long 0x410fc0f0
705 .long 0xff0ffff0
706 __v7_proc __v7_ca15mp_setup, hwcaps = HWCAP_IDIV
707 .size __v7_ca15mp_proc_info, . - __v7_ca15mp_proc_info
708
709 /*
475 * Match any ARMv7 processor core. 710 * Match any ARMv7 processor core.
476 */ 711 */
477 .type __v7_proc_info, #object 712 .type __v7_proc_info, #object
478__v7_proc_info: 713__v7_proc_info:
479 .long 0x000f0000 @ Required ID value 714 .long 0x000f0000 @ Required ID value
480 .long 0x000f0000 @ Mask for ID 715 .long 0x000f0000 @ Mask for ID
481 ALT_SMP(.long \ 716 __v7_proc __v7_setup
482 PMD_TYPE_SECT | \
483 PMD_SECT_AP_WRITE | \
484 PMD_SECT_AP_READ | \
485 PMD_FLAGS_SMP)
486 ALT_UP(.long \
487 PMD_TYPE_SECT | \
488 PMD_SECT_AP_WRITE | \
489 PMD_SECT_AP_READ | \
490 PMD_FLAGS_UP)
491 .long PMD_TYPE_SECT | \
492 PMD_SECT_XN | \
493 PMD_SECT_AP_WRITE | \
494 PMD_SECT_AP_READ
495 W(b) __v7_setup
496 .long cpu_arch_name
497 .long cpu_elf_name
498 .long HWCAP_SWP|HWCAP_HALF|HWCAP_THUMB|HWCAP_FAST_MULT|HWCAP_EDSP|HWCAP_TLS
499 .long cpu_v7_name
500 .long v7_processor_functions
501 .long v7wbi_tlb_fns
502 .long v6_user_fns
503 .long v7_cache_fns
504 .size __v7_proc_info, . - __v7_proc_info 717 .size __v7_proc_info, . - __v7_proc_info