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.S65
1 files changed, 54 insertions, 11 deletions
diff --git a/arch/arm/mm/proc-v7.S b/arch/arm/mm/proc-v7.S
index 2c73a7301ff7..7ef3ad05df39 100644
--- a/arch/arm/mm/proc-v7.S
+++ b/arch/arm/mm/proc-v7.S
@@ -98,9 +98,11 @@ ENTRY(cpu_v7_do_suspend)
98 mrc p15, 0, r4, c13, c0, 0 @ FCSE/PID 98 mrc p15, 0, r4, c13, c0, 0 @ FCSE/PID
99 mrc p15, 0, r5, c13, c0, 3 @ User r/o thread ID 99 mrc p15, 0, r5, c13, c0, 3 @ User r/o thread ID
100 stmia r0!, {r4 - r5} 100 stmia r0!, {r4 - r5}
101#ifdef CONFIG_MMU
101 mrc p15, 0, r6, c3, c0, 0 @ Domain ID 102 mrc p15, 0, r6, c3, c0, 0 @ Domain ID
102 mrc p15, 0, r7, c2, c0, 1 @ TTB 1 103 mrc p15, 0, r7, c2, c0, 1 @ TTB 1
103 mrc p15, 0, r11, c2, c0, 2 @ TTB control register 104 mrc p15, 0, r11, c2, c0, 2 @ TTB control register
105#endif
104 mrc p15, 0, r8, c1, c0, 0 @ Control register 106 mrc p15, 0, r8, c1, c0, 0 @ Control register
105 mrc p15, 0, r9, c1, c0, 1 @ Auxiliary control register 107 mrc p15, 0, r9, c1, c0, 1 @ Auxiliary control register
106 mrc p15, 0, r10, c1, c0, 2 @ Co-processor access control 108 mrc p15, 0, r10, c1, c0, 2 @ Co-processor access control
@@ -110,13 +112,14 @@ ENDPROC(cpu_v7_do_suspend)
110 112
111ENTRY(cpu_v7_do_resume) 113ENTRY(cpu_v7_do_resume)
112 mov ip, #0 114 mov ip, #0
113 mcr p15, 0, ip, c8, c7, 0 @ invalidate TLBs
114 mcr p15, 0, ip, c7, c5, 0 @ invalidate I cache 115 mcr p15, 0, ip, c7, c5, 0 @ invalidate I cache
115 mcr p15, 0, ip, c13, c0, 1 @ set reserved context ID 116 mcr p15, 0, ip, c13, c0, 1 @ set reserved context ID
116 ldmia r0!, {r4 - r5} 117 ldmia r0!, {r4 - r5}
117 mcr p15, 0, r4, c13, c0, 0 @ FCSE/PID 118 mcr p15, 0, r4, c13, c0, 0 @ FCSE/PID
118 mcr p15, 0, r5, c13, c0, 3 @ User r/o thread ID 119 mcr p15, 0, r5, c13, c0, 3 @ User r/o thread ID
119 ldmia r0, {r6 - r11} 120 ldmia r0, {r6 - r11}
121#ifdef CONFIG_MMU
122 mcr p15, 0, ip, c8, c7, 0 @ invalidate TLBs
120 mcr p15, 0, r6, c3, c0, 0 @ Domain ID 123 mcr p15, 0, r6, c3, c0, 0 @ Domain ID
121#ifndef CONFIG_ARM_LPAE 124#ifndef CONFIG_ARM_LPAE
122 ALT_SMP(orr r1, r1, #TTB_FLAGS_SMP) 125 ALT_SMP(orr r1, r1, #TTB_FLAGS_SMP)
@@ -125,14 +128,15 @@ ENTRY(cpu_v7_do_resume)
125 mcr p15, 0, r1, c2, c0, 0 @ TTB 0 128 mcr p15, 0, r1, c2, c0, 0 @ TTB 0
126 mcr p15, 0, r7, c2, c0, 1 @ TTB 1 129 mcr p15, 0, r7, c2, c0, 1 @ TTB 1
127 mcr p15, 0, r11, c2, c0, 2 @ TTB control register 130 mcr p15, 0, r11, c2, c0, 2 @ TTB control register
128 mrc p15, 0, r4, c1, c0, 1 @ Read Auxiliary control register
129 teq r4, r9 @ Is it already set?
130 mcrne p15, 0, r9, c1, c0, 1 @ No, so write it
131 mcr p15, 0, r10, c1, c0, 2 @ Co-processor access control
132 ldr r4, =PRRR @ PRRR 131 ldr r4, =PRRR @ PRRR
133 ldr r5, =NMRR @ NMRR 132 ldr r5, =NMRR @ NMRR
134 mcr p15, 0, r4, c10, c2, 0 @ write PRRR 133 mcr p15, 0, r4, c10, c2, 0 @ write PRRR
135 mcr p15, 0, r5, c10, c2, 1 @ write NMRR 134 mcr p15, 0, r5, c10, c2, 1 @ write NMRR
135#endif /* CONFIG_MMU */
136 mrc p15, 0, r4, c1, c0, 1 @ Read Auxiliary control register
137 teq r4, r9 @ Is it already set?
138 mcrne p15, 0, r9, c1, c0, 1 @ No, so write it
139 mcr p15, 0, r10, c1, c0, 2 @ Co-processor access control
136 isb 140 isb
137 dsb 141 dsb
138 mov r0, r8 @ control register 142 mov r0, r8 @ control register
@@ -140,6 +144,29 @@ ENTRY(cpu_v7_do_resume)
140ENDPROC(cpu_v7_do_resume) 144ENDPROC(cpu_v7_do_resume)
141#endif 145#endif
142 146
147#ifdef CONFIG_CPU_PJ4B
148 globl_equ cpu_pj4b_switch_mm, cpu_v7_switch_mm
149 globl_equ cpu_pj4b_set_pte_ext, cpu_v7_set_pte_ext
150 globl_equ cpu_pj4b_proc_init, cpu_v7_proc_init
151 globl_equ cpu_pj4b_proc_fin, cpu_v7_proc_fin
152 globl_equ cpu_pj4b_reset, cpu_v7_reset
153#ifdef CONFIG_PJ4B_ERRATA_4742
154ENTRY(cpu_pj4b_do_idle)
155 dsb @ WFI may enter a low-power mode
156 wfi
157 dsb @barrier
158 mov pc, lr
159ENDPROC(cpu_pj4b_do_idle)
160#else
161 globl_equ cpu_pj4b_do_idle, cpu_v7_do_idle
162#endif
163 globl_equ cpu_pj4b_dcache_clean_area, cpu_v7_dcache_clean_area
164 globl_equ cpu_pj4b_do_suspend, cpu_v7_do_suspend
165 globl_equ cpu_pj4b_do_resume, cpu_v7_do_resume
166 globl_equ cpu_pj4b_suspend_size, cpu_v7_suspend_size
167
168#endif
169
143 __CPUINIT 170 __CPUINIT
144 171
145/* 172/*
@@ -155,7 +182,8 @@ ENDPROC(cpu_v7_do_resume)
155 */ 182 */
156__v7_ca5mp_setup: 183__v7_ca5mp_setup:
157__v7_ca9mp_setup: 184__v7_ca9mp_setup:
158 mov r10, #(1 << 0) @ TLB ops broadcasting 185__v7_cr7mp_setup:
186 mov r10, #(1 << 0) @ Cache/TLB ops broadcasting
159 b 1f 187 b 1f
160__v7_ca7mp_setup: 188__v7_ca7mp_setup:
161__v7_ca15mp_setup: 189__v7_ca15mp_setup:
@@ -350,6 +378,9 @@ __v7_setup_stack:
350 378
351 @ define struct processor (see <asm/proc-fns.h> and proc-macros.S) 379 @ define struct processor (see <asm/proc-fns.h> and proc-macros.S)
352 define_processor_functions v7, dabort=v7_early_abort, pabort=v7_pabort, suspend=1 380 define_processor_functions v7, dabort=v7_early_abort, pabort=v7_pabort, suspend=1
381#ifdef CONFIG_CPU_PJ4B
382 define_processor_functions pj4b, dabort=v7_early_abort, pabort=v7_pabort, suspend=1
383#endif
353 384
354 .section ".rodata" 385 .section ".rodata"
355 386
@@ -362,7 +393,7 @@ __v7_setup_stack:
362 /* 393 /*
363 * Standard v7 proc info content 394 * Standard v7 proc info content
364 */ 395 */
365.macro __v7_proc initfunc, mm_mmuflags = 0, io_mmuflags = 0, hwcaps = 0 396.macro __v7_proc initfunc, mm_mmuflags = 0, io_mmuflags = 0, hwcaps = 0, proc_fns = v7_processor_functions
366 ALT_SMP(.long PMD_TYPE_SECT | PMD_SECT_AP_WRITE | PMD_SECT_AP_READ | \ 397 ALT_SMP(.long PMD_TYPE_SECT | PMD_SECT_AP_WRITE | PMD_SECT_AP_READ | \
367 PMD_SECT_AF | PMD_FLAGS_SMP | \mm_mmuflags) 398 PMD_SECT_AF | PMD_FLAGS_SMP | \mm_mmuflags)
368 ALT_UP(.long PMD_TYPE_SECT | PMD_SECT_AP_WRITE | PMD_SECT_AP_READ | \ 399 ALT_UP(.long PMD_TYPE_SECT | PMD_SECT_AP_WRITE | PMD_SECT_AP_READ | \
@@ -375,7 +406,7 @@ __v7_setup_stack:
375 .long HWCAP_SWP | HWCAP_HALF | HWCAP_THUMB | HWCAP_FAST_MULT | \ 406 .long HWCAP_SWP | HWCAP_HALF | HWCAP_THUMB | HWCAP_FAST_MULT | \
376 HWCAP_EDSP | HWCAP_TLS | \hwcaps 407 HWCAP_EDSP | HWCAP_TLS | \hwcaps
377 .long cpu_v7_name 408 .long cpu_v7_name
378 .long v7_processor_functions 409 .long \proc_fns
379 .long v7wbi_tlb_fns 410 .long v7wbi_tlb_fns
380 .long v6_user_fns 411 .long v6_user_fns
381 .long v7_cache_fns 412 .long v7_cache_fns
@@ -407,12 +438,24 @@ __v7_ca9mp_proc_info:
407 /* 438 /*
408 * Marvell PJ4B processor. 439 * Marvell PJ4B processor.
409 */ 440 */
441#ifdef CONFIG_CPU_PJ4B
410 .type __v7_pj4b_proc_info, #object 442 .type __v7_pj4b_proc_info, #object
411__v7_pj4b_proc_info: 443__v7_pj4b_proc_info:
412 .long 0x562f5840 444 .long 0x560f5800
413 .long 0xfffffff0 445 .long 0xff0fff00
414 __v7_proc __v7_pj4b_setup 446 __v7_proc __v7_pj4b_setup, proc_fns = pj4b_processor_functions
415 .size __v7_pj4b_proc_info, . - __v7_pj4b_proc_info 447 .size __v7_pj4b_proc_info, . - __v7_pj4b_proc_info
448#endif
449
450 /*
451 * ARM Ltd. Cortex R7 processor.
452 */
453 .type __v7_cr7mp_proc_info, #object
454__v7_cr7mp_proc_info:
455 .long 0x410fc170
456 .long 0xff0ffff0
457 __v7_proc __v7_cr7mp_setup
458 .size __v7_cr7mp_proc_info, . - __v7_cr7mp_proc_info
416 459
417 /* 460 /*
418 * ARM Ltd. Cortex A7 processor. 461 * ARM Ltd. Cortex A7 processor.