~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/arch/arm/mm/proc-v7.S

Version: ~ [ linux-6.12-rc7 ] ~ [ linux-6.11.7 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.60 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.116 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.171 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.229 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.285 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.323 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.12 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

Diff markup

Differences between /arch/arm/mm/proc-v7.S (Version linux-6.12-rc7) and /arch/m68k/mm/proc-v7.S (Version linux-6.7.12)


  1 /* SPDX-License-Identifier: GPL-2.0-only */       
  2 /*                                                
  3  *  linux/arch/arm/mm/proc-v7.S                   
  4  *                                                
  5  *  Copyright (C) 2001 Deep Blue Solutions Ltd    
  6  *                                                
  7  *  This is the "shell" of the ARMv7 processor    
  8  */                                               
  9 #include <linux/arm-smccc.h>                      
 10 #include <linux/cfi_types.h>                      
 11 #include <linux/init.h>                           
 12 #include <linux/linkage.h>                        
 13 #include <linux/pgtable.h>                        
 14 #include <asm/assembler.h>                        
 15 #include <asm/asm-offsets.h>                      
 16 #include <asm/hwcap.h>                            
 17 #include <asm/pgtable-hwdef.h>                    
 18 #include <asm/page.h>                             
 19                                                   
 20 #include "proc-macros.S"                          
 21                                                   
 22 #ifdef CONFIG_ARM_LPAE                            
 23 #include "proc-v7-3level.S"                       
 24 #else                                             
 25 #include "proc-v7-2level.S"                       
 26 #endif                                            
 27                                                   
 28 .arch armv7-a                                     
 29                                                   
 30 SYM_TYPED_FUNC_START(cpu_v7_proc_init)            
 31         ret     lr                                
 32 SYM_FUNC_END(cpu_v7_proc_init)                    
 33                                                   
 34 SYM_TYPED_FUNC_START(cpu_v7_proc_fin)             
 35         mrc     p15, 0, r0, c1, c0, 0             
 36         bic     r0, r0, #0x1000                   
 37         bic     r0, r0, #0x0006                   
 38         mcr     p15, 0, r0, c1, c0, 0             
 39         ret     lr                                
 40 SYM_FUNC_END(cpu_v7_proc_fin)                     
 41                                                   
 42 /*                                                
 43  *      cpu_v7_reset(loc, hyp)                    
 44  *                                                
 45  *      Perform a soft reset of the system.  P    
 46  *      same state as it would be if it had be    
 47  *      to what would be the reset vector.        
 48  *                                                
 49  *      - loc   - location to jump to for soft    
 50  *      - hyp   - indicate if restart occurs i    
 51  *                                                
 52  *      This code must be executed using a fla    
 53  *      caches disabled.                          
 54  */                                               
 55         .align  5                                 
 56         .pushsection    .idmap.text, "ax"         
 57 SYM_TYPED_FUNC_START(cpu_v7_reset)                
 58         mrc     p15, 0, r2, c1, c0, 0             
 59         bic     r2, r2, #0x1                      
 60  THUMB( bic     r2, r2, #1 << 30 )                
 61         mcr     p15, 0, r2, c1, c0, 0             
 62         isb                                       
 63 #ifdef CONFIG_ARM_VIRT_EXT                        
 64         teq     r1, #0                            
 65         bne     __hyp_soft_restart                
 66 #endif                                            
 67         bx      r0                                
 68 SYM_FUNC_END(cpu_v7_reset)                        
 69         .popsection                               
 70                                                   
 71 /*                                                
 72  *      cpu_v7_do_idle()                          
 73  *                                                
 74  *      Idle the processor (eg, wait for inter    
 75  *                                                
 76  *      IRQs are already disabled.                
 77  */                                               
 78 SYM_TYPED_FUNC_START(cpu_v7_do_idle)              
 79         dsb                                       
 80         wfi                                       
 81         ret     lr                                
 82 SYM_FUNC_END(cpu_v7_do_idle)                      
 83                                                   
 84 SYM_TYPED_FUNC_START(cpu_v7_dcache_clean_area)    
 85         ALT_SMP(W(nop))                 @ MP e    
 86         ALT_UP_B(1f)                              
 87         ret     lr                                
 88 1:      dcache_line_size r2, r3                   
 89 2:      mcr     p15, 0, r0, c7, c10, 1            
 90         add     r0, r0, r2                        
 91         subs    r1, r1, r2                        
 92         bhi     2b                                
 93         dsb     ishst                             
 94         ret     lr                                
 95 SYM_FUNC_END(cpu_v7_dcache_clean_area)            
 96                                                   
 97 #ifdef CONFIG_ARM_PSCI                            
 98         .arch_extension sec                       
 99 SYM_TYPED_FUNC_START(cpu_v7_smc_switch_mm)        
100         stmfd   sp!, {r0 - r3}                    
101         movw    r0, #:lower16:ARM_SMCCC_ARCH_W    
102         movt    r0, #:upper16:ARM_SMCCC_ARCH_W    
103         smc     #0                                
104         ldmfd   sp!, {r0 - r3}                    
105         b       cpu_v7_switch_mm                  
106 SYM_FUNC_END(cpu_v7_smc_switch_mm)                
107         .arch_extension virt                      
108 SYM_TYPED_FUNC_START(cpu_v7_hvc_switch_mm)        
109         stmfd   sp!, {r0 - r3}                    
110         movw    r0, #:lower16:ARM_SMCCC_ARCH_W    
111         movt    r0, #:upper16:ARM_SMCCC_ARCH_W    
112         hvc     #0                                
113         ldmfd   sp!, {r0 - r3}                    
114         b       cpu_v7_switch_mm                  
115 SYM_FUNC_END(cpu_v7_hvc_switch_mm)                
116 #endif                                            
117                                                   
118 SYM_TYPED_FUNC_START(cpu_v7_iciallu_switch_mm)    
119         mov     r3, #0                            
120         mcr     p15, 0, r3, c7, c5, 0             
121         b       cpu_v7_switch_mm                  
122 SYM_FUNC_END(cpu_v7_iciallu_switch_mm)            
123 SYM_TYPED_FUNC_START(cpu_v7_bpiall_switch_mm)     
124         mov     r3, #0                            
125         mcr     p15, 0, r3, c7, c5, 6             
126         b       cpu_v7_switch_mm                  
127 SYM_FUNC_END(cpu_v7_bpiall_switch_mm)             
128                                                   
129         string  cpu_v7_name, "ARMv7 Processor"    
130         .align                                    
131                                                   
132 /* Suspend/resume support: derived from arch/a    
133 .globl  cpu_v7_suspend_size                       
134 .equ    cpu_v7_suspend_size, 4 * 9                
135 #ifdef CONFIG_ARM_CPU_SUSPEND                     
136 SYM_TYPED_FUNC_START(cpu_v7_do_suspend)           
137         stmfd   sp!, {r4 - r11, lr}               
138         mrc     p15, 0, r4, c13, c0, 0  @ FCSE    
139         mrc     p15, 0, r5, c13, c0, 3  @ User    
140         stmia   r0!, {r4 - r5}                    
141 #ifdef CONFIG_MMU                                 
142         mrc     p15, 0, r6, c3, c0, 0   @ Doma    
143 #ifdef CONFIG_ARM_LPAE                            
144         mrrc    p15, 1, r5, r7, c2      @ TTB     
145 #else                                             
146         mrc     p15, 0, r7, c2, c0, 1   @ TTB     
147 #endif                                            
148         mrc     p15, 0, r11, c2, c0, 2  @ TTB     
149 #endif                                            
150         mrc     p15, 0, r8, c1, c0, 0   @ Cont    
151         mrc     p15, 0, r9, c1, c0, 1   @ Auxi    
152         mrc     p15, 0, r10, c1, c0, 2  @ Co-p    
153         stmia   r0, {r5 - r11}                    
154         ldmfd   sp!, {r4 - r11, pc}               
155 SYM_FUNC_END(cpu_v7_do_suspend)                   
156                                                   
157 SYM_TYPED_FUNC_START(cpu_v7_do_resume)            
158         mov     ip, #0                            
159         mcr     p15, 0, ip, c7, c5, 0   @ inva    
160         mcr     p15, 0, ip, c13, c0, 1  @ set     
161         ldmia   r0!, {r4 - r5}                    
162         mcr     p15, 0, r4, c13, c0, 0  @ FCSE    
163         mcr     p15, 0, r5, c13, c0, 3  @ User    
164         ldmia   r0, {r5 - r11}                    
165 #ifdef CONFIG_MMU                                 
166         mcr     p15, 0, ip, c8, c7, 0   @ inva    
167         mcr     p15, 0, r6, c3, c0, 0   @ Doma    
168 #ifdef CONFIG_ARM_LPAE                            
169         mcrr    p15, 0, r1, ip, c2      @ TTB     
170         mcrr    p15, 1, r5, r7, c2      @ TTB     
171 #else                                             
172         ALT_SMP(orr     r1, r1, #TTB_FLAGS_SMP    
173         ALT_UP(orr      r1, r1, #TTB_FLAGS_UP)    
174         mcr     p15, 0, r1, c2, c0, 0   @ TTB     
175         mcr     p15, 0, r7, c2, c0, 1   @ TTB     
176 #endif                                            
177         mcr     p15, 0, r11, c2, c0, 2  @ TTB     
178         ldr     r4, =PRRR               @ PRRR    
179         ldr     r5, =NMRR               @ NMRR    
180         mcr     p15, 0, r4, c10, c2, 0  @ writ    
181         mcr     p15, 0, r5, c10, c2, 1  @ writ    
182 #endif  /* CONFIG_MMU */                          
183         mrc     p15, 0, r4, c1, c0, 1   @ Read    
184         teq     r4, r9                  @ Is i    
185         mcrne   p15, 0, r9, c1, c0, 1   @ No,     
186         mcr     p15, 0, r10, c1, c0, 2  @ Co-p    
187         isb                                       
188         dsb                                       
189         mov     r0, r8                  @ cont    
190         b       cpu_resume_mmu                    
191 SYM_FUNC_END(cpu_v7_do_resume)                    
192 #endif                                            
193                                                   
194 .globl  cpu_ca9mp_suspend_size                    
195 .equ    cpu_ca9mp_suspend_size, cpu_v7_suspend    
196 #ifdef CONFIG_ARM_CPU_SUSPEND                     
197 SYM_TYPED_FUNC_START(cpu_ca9mp_do_suspend)        
198         stmfd   sp!, {r4 - r5}                    
199         mrc     p15, 0, r4, c15, c0, 1            
200         mrc     p15, 0, r5, c15, c0, 0            
201         stmia   r0!, {r4 - r5}                    
202         ldmfd   sp!, {r4 - r5}                    
203         b       cpu_v7_do_suspend                 
204 SYM_FUNC_END(cpu_ca9mp_do_suspend)                
205                                                   
206 SYM_TYPED_FUNC_START(cpu_ca9mp_do_resume)         
207         ldmia   r0!, {r4 - r5}                    
208         mrc     p15, 0, r10, c15, c0, 1           
209         teq     r4, r10                           
210         mcrne   p15, 0, r4, c15, c0, 1            
211         mrc     p15, 0, r10, c15, c0, 0           
212         teq     r5, r10                           
213         mcrne   p15, 0, r5, c15, c0, 0            
214         b       cpu_v7_do_resume                  
215 SYM_FUNC_END(cpu_ca9mp_do_resume)                 
216 #endif                                            
217                                                   
218 #ifdef CONFIG_CPU_PJ4B                            
219         globl_equ       cpu_pj4b_switch_mm,       
220         globl_equ       cpu_pj4b_set_pte_ext,     
221         globl_equ       cpu_pj4b_proc_init,       
222         globl_equ       cpu_pj4b_proc_fin,        
223         globl_equ       cpu_pj4b_reset,           
224 #ifdef CONFIG_PJ4B_ERRATA_4742                    
225 SYM_TYPED_FUNC_START(cpu_pj4b_do_idle)            
226         dsb                                       
227         wfi                                       
228         dsb                                       
229         ret     lr                                
230 SYM_FUNC_END(cpu_pj4b_do_idle)                    
231 #else                                             
232         globl_equ       cpu_pj4b_do_idle,         
233 #endif                                            
234         globl_equ       cpu_pj4b_dcache_clean_    
235 #ifdef CONFIG_ARM_CPU_SUSPEND                     
236 SYM_TYPED_FUNC_START(cpu_pj4b_do_suspend)         
237         stmfd   sp!, {r6 - r10}                   
238         mrc     p15, 1, r6, c15, c1, 0  @ save    
239         mrc     p15, 1, r7, c15, c2, 0  @ save    
240         mrc     p15, 1, r8, c15, c1, 2  @ save    
241         mrc     p15, 1, r9, c15, c1, 1  @ save    
242         mrc     p15, 0, r10, c9, c14, 0  @ sav    
243         stmia   r0!, {r6 - r10}                   
244         ldmfd   sp!, {r6 - r10}                   
245         b cpu_v7_do_suspend                       
246 SYM_FUNC_END(cpu_pj4b_do_suspend)                 
247                                                   
248 SYM_TYPED_FUNC_START(cpu_pj4b_do_resume)          
249         ldmia   r0!, {r6 - r10}                   
250         mcr     p15, 1, r6, c15, c1, 0  @ rest    
251         mcr     p15, 1, r7, c15, c2, 0  @ rest    
252         mcr     p15, 1, r8, c15, c1, 2  @ rest    
253         mcr     p15, 1, r9, c15, c1, 1  @ rest    
254         mcr     p15, 0, r10, c9, c14, 0  @ res    
255         b cpu_v7_do_resume                        
256 SYM_FUNC_END(cpu_pj4b_do_resume)                  
257 #endif                                            
258 .globl  cpu_pj4b_suspend_size                     
259 .equ    cpu_pj4b_suspend_size, cpu_v7_suspend_    
260                                                   
261 #endif                                            
262                                                   
263         @                                         
264         @ Invoke the v7_invalidate_l1() functi    
265         @ rules, and so it may corrupt registe    
266         @                                         
267         .macro  do_invalidate_l1                  
268         mov     r6, r1                            
269         mov     r7, r2                            
270         mov     r10, lr                           
271         bl      v7_invalidate_l1                  
272         mov     r1, r6                            
273         mov     r2, r7                            
274         mov     lr, r10                           
275         .endm                                     
276                                                   
277 /*                                                
278  *      __v7_setup                                
279  *                                                
280  *      Initialise TLB, Caches, and MMU state     
281  *      on.  Return in r0 the new CP15 C1 cont    
282  *                                                
283  *      r1, r2, r4, r5, r9, r13 must be preser    
284  *      r4: TTBR0 (low word)                      
285  *      r5: TTBR0 (high word if LPAE)             
286  *      r8: TTBR1                                 
287  *      r9: Main ID register                      
288  *                                                
289  *      This should be able to cover all ARMv7    
290  *                                                
291  *      It is assumed that:                       
292  *      - cache type register is implemented      
293  */                                               
294 __v7_ca5mp_setup:                                 
295 __v7_ca9mp_setup:                                 
296 __v7_cr7mp_setup:                                 
297 __v7_cr8mp_setup:                                 
298         do_invalidate_l1                          
299         mov     r10, #(1 << 0)                    
300         b       1f                                
301 __v7_ca7mp_setup:                                 
302 __v7_ca12mp_setup:                                
303 __v7_ca15mp_setup:                                
304 __v7_b15mp_setup:                                 
305 __v7_ca17mp_setup:                                
306         do_invalidate_l1                          
307         mov     r10, #0                           
308 1:                                                
309 #ifdef CONFIG_SMP                                 
310         orr     r10, r10, #(1 << 6)               
311         ALT_SMP(mrc     p15, 0, r0, c1, c0, 1)    
312         ALT_UP(mov      r0, r10)                  
313         orr     r10, r10, r0                      
314         teq     r10, r0                           
315         mcrne   p15, 0, r10, c1, c0, 1            
316 #endif                                            
317         b       __v7_setup_cont                   
318                                                   
319 /*                                                
320  * Errata:                                        
321  *  r0, r10 available for use                     
322  *  r1, r2, r4, r5, r9, r13: must be preserved    
323  *  r3: contains MIDR rX number in bits 23-20     
324  *  r6: contains MIDR rXpY as 8-bit XY number     
325  *  r9: MIDR                                      
326  */                                               
327 __ca8_errata:                                     
328 #if defined(CONFIG_ARM_ERRATA_430973) && !defi    
329         teq     r3, #0x00100000                   
330         mrceq   p15, 0, r0, c1, c0, 1             
331         orreq   r0, r0, #(1 << 6)                 
332         mcreq   p15, 0, r0, c1, c0, 1             
333 #endif                                            
334 #ifdef CONFIG_ARM_ERRATA_458693                   
335         teq     r6, #0x20                         
336         mrceq   p15, 0, r0, c1, c0, 1             
337         orreq   r0, r0, #(1 << 5)                 
338         orreq   r0, r0, #(1 << 9)                 
339         mcreq   p15, 0, r0, c1, c0, 1             
340 #endif                                            
341 #ifdef CONFIG_ARM_ERRATA_460075                   
342         teq     r6, #0x20                         
343         mrceq   p15, 1, r0, c9, c0, 2             
344         tsteq   r0, #1 << 22                      
345         orreq   r0, r0, #(1 << 22)                
346         mcreq   p15, 1, r0, c9, c0, 2             
347 #endif                                            
348         b       __errata_finish                   
349                                                   
350 __ca9_errata:                                     
351 #ifdef CONFIG_ARM_ERRATA_742230                   
352         cmp     r6, #0x22                         
353         mrcle   p15, 0, r0, c15, c0, 1            
354         orrle   r0, r0, #1 << 4                   
355         mcrle   p15, 0, r0, c15, c0, 1            
356 #endif                                            
357 #ifdef CONFIG_ARM_ERRATA_742231                   
358         teq     r6, #0x20                         
359         teqne   r6, #0x21                         
360         teqne   r6, #0x22                         
361         mrceq   p15, 0, r0, c15, c0, 1            
362         orreq   r0, r0, #1 << 12                  
363         orreq   r0, r0, #1 << 22                  
364         mcreq   p15, 0, r0, c15, c0, 1            
365 #endif                                            
366 #ifdef CONFIG_ARM_ERRATA_743622                   
367         teq     r3, #0x00200000                   
368         mrceq   p15, 0, r0, c15, c0, 1            
369         orreq   r0, r0, #1 << 6                   
370         mcreq   p15, 0, r0, c15, c0, 1            
371 #endif                                            
372 #if defined(CONFIG_ARM_ERRATA_751472) && defin    
373         ALT_SMP(cmp r6, #0x30)                    
374         ALT_UP_B(1f)                              
375         mrclt   p15, 0, r0, c15, c0, 1            
376         orrlt   r0, r0, #1 << 11                  
377         mcrlt   p15, 0, r0, c15, c0, 1            
378 1:                                                
379 #endif                                            
380         b       __errata_finish                   
381                                                   
382 __ca15_errata:                                    
383 #ifdef CONFIG_ARM_ERRATA_773022                   
384         cmp     r6, #0x4                          
385         mrcle   p15, 0, r0, c1, c0, 1             
386         orrle   r0, r0, #1 << 1                   
387         mcrle   p15, 0, r0, c1, c0, 1             
388 #endif                                            
389         b       __errata_finish                   
390                                                   
391 __ca12_errata:                                    
392 #ifdef CONFIG_ARM_ERRATA_818325_852422            
393         mrc     p15, 0, r10, c15, c0, 1           
394         orr     r10, r10, #1 << 12                
395         mcr     p15, 0, r10, c15, c0, 1           
396 #endif                                            
397 #ifdef CONFIG_ARM_ERRATA_821420                   
398         mrc     p15, 0, r10, c15, c0, 2           
399         orr     r10, r10, #1 << 1                 
400         mcr     p15, 0, r10, c15, c0, 2           
401 #endif                                            
402 #ifdef CONFIG_ARM_ERRATA_825619                   
403         mrc     p15, 0, r10, c15, c0, 1           
404         orr     r10, r10, #1 << 24                
405         mcr     p15, 0, r10, c15, c0, 1           
406 #endif                                            
407 #ifdef CONFIG_ARM_ERRATA_857271                   
408         mrc     p15, 0, r10, c15, c0, 1           
409         orr     r10, r10, #3 << 10                
410         mcr     p15, 0, r10, c15, c0, 1           
411 #endif                                            
412         b       __errata_finish                   
413                                                   
414 __ca17_errata:                                    
415 #ifdef CONFIG_ARM_ERRATA_852421                   
416         cmp     r6, #0x12                         
417         mrcle   p15, 0, r10, c15, c0, 1           
418         orrle   r10, r10, #1 << 24                
419         mcrle   p15, 0, r10, c15, c0, 1           
420 #endif                                            
421 #ifdef CONFIG_ARM_ERRATA_852423                   
422         cmp     r6, #0x12                         
423         mrcle   p15, 0, r10, c15, c0, 1           
424         orrle   r10, r10, #1 << 12                
425         mcrle   p15, 0, r10, c15, c0, 1           
426 #endif                                            
427 #ifdef CONFIG_ARM_ERRATA_857272                   
428         mrc     p15, 0, r10, c15, c0, 1           
429         orr     r10, r10, #3 << 10                
430         mcr     p15, 0, r10, c15, c0, 1           
431 #endif                                            
432         b       __errata_finish                   
433                                                   
434 __v7_pj4b_setup:                                  
435 #ifdef CONFIG_CPU_PJ4B                            
436                                                   
437 /* Auxiliary Debug Modes Control 1 Register */    
438 #define PJ4B_STATIC_BP (1 << 2) /* Enable Stat    
439 #define PJ4B_INTER_PARITY (1 << 8) /* Disable     
440 #define PJ4B_CLEAN_LINE (1 << 16) /* Disable d    
441                                                   
442 /* Auxiliary Debug Modes Control 2 Register */    
443 #define PJ4B_FAST_LDR (1 << 23) /* Disable fas    
444 #define PJ4B_SNOOP_DATA (1 << 25) /* Do not in    
445 #define PJ4B_CWF (1 << 27) /* Disable Critical    
446 #define PJ4B_OUTSDNG_NC (1 << 29) /* Disable o    
447 #define PJ4B_L1_REP_RR (1 << 30) /* L1 replace    
448 #define PJ4B_AUX_DBG_CTRL2 (PJ4B_SNOOP_DATA |     
449                             PJ4B_OUTSDNG_NC |     
450                                                   
451 /* Auxiliary Functional Modes Control Register    
452 #define PJ4B_SMP_CFB (1 << 1) /* Set SMP mode.    
453 #define PJ4B_L1_PAR_CHK (1 << 2) /* Support L1    
454 #define PJ4B_BROADCAST_CACHE (1 << 8) /* Broad    
455                                                   
456 /* Auxiliary Debug Modes Control 0 Register */    
457 #define PJ4B_WFI_WFE (1 << 22) /* WFI/WFE - se    
458                                                   
459         /* Auxiliary Debug Modes Control 1 Reg    
460         mrc     p15, 1, r0, c15, c1, 1            
461         orr     r0, r0, #PJ4B_CLEAN_LINE          
462         orr     r0, r0, #PJ4B_INTER_PARITY        
463         bic     r0, r0, #PJ4B_STATIC_BP           
464         mcr     p15, 1, r0, c15, c1, 1            
465                                                   
466         /* Auxiliary Debug Modes Control 2 Reg    
467         mrc     p15, 1, r0, c15, c1, 2            
468         bic     r0, r0, #PJ4B_FAST_LDR            
469         orr     r0, r0, #PJ4B_AUX_DBG_CTRL2       
470         mcr     p15, 1, r0, c15, c1, 2            
471                                                   
472         /* Auxiliary Functional Modes Control     
473         mrc     p15, 1, r0, c15, c2, 0            
474 #ifdef CONFIG_SMP                                 
475         orr     r0, r0, #PJ4B_SMP_CFB             
476 #endif                                            
477         orr     r0, r0, #PJ4B_L1_PAR_CHK          
478         orr     r0, r0, #PJ4B_BROADCAST_CACHE     
479         mcr     p15, 1, r0, c15, c2, 0            
480                                                   
481         /* Auxiliary Debug Modes Control 0 Reg    
482         mrc     p15, 1, r0, c15, c1, 0            
483         orr     r0, r0, #PJ4B_WFI_WFE             
484         mcr     p15, 1, r0, c15, c1, 0            
485                                                   
486 #endif /* CONFIG_CPU_PJ4B */                      
487                                                   
488 __v7_setup:                                       
489         do_invalidate_l1                          
490                                                   
491 __v7_setup_cont:                                  
492         and     r0, r9, #0xff000000               
493         teq     r0, #0x41000000                   
494         bne     __errata_finish                   
495         and     r3, r9, #0x00f00000               
496         and     r6, r9, #0x0000000f               
497         orr     r6, r6, r3, lsr #20-4             
498         ubfx    r0, r9, #4, #12                   
499                                                   
500         /* Cortex-A8 Errata */                    
501         ldr     r10, =0x00000c08                  
502         teq     r0, r10                           
503         beq     __ca8_errata                      
504                                                   
505         /* Cortex-A9 Errata */                    
506         ldr     r10, =0x00000c09                  
507         teq     r0, r10                           
508         beq     __ca9_errata                      
509                                                   
510         /* Cortex-A12 Errata */                   
511         ldr     r10, =0x00000c0d                  
512         teq     r0, r10                           
513         beq     __ca12_errata                     
514                                                   
515         /* Cortex-A17 Errata */                   
516         ldr     r10, =0x00000c0e                  
517         teq     r0, r10                           
518         beq     __ca17_errata                     
519                                                   
520         /* Cortex-A15 Errata */                   
521         ldr     r10, =0x00000c0f                  
522         teq     r0, r10                           
523         beq     __ca15_errata                     
524                                                   
525 __errata_finish:                                  
526         mov     r10, #0                           
527         mcr     p15, 0, r10, c7, c5, 0            
528 #ifdef CONFIG_MMU                                 
529         mcr     p15, 0, r10, c8, c7, 0            
530         v7_ttb_setup r10, r4, r5, r8, r3          
531         ldr     r3, =PRRR                         
532         ldr     r6, =NMRR                         
533         mcr     p15, 0, r3, c10, c2, 0            
534         mcr     p15, 0, r6, c10, c2, 1            
535 #endif                                            
536         dsb                                       
537 #ifndef CONFIG_ARM_THUMBEE                        
538         mrc     p15, 0, r0, c0, c1, 0             
539         and     r0, r0, #(0xf << 12)              
540         teq     r0, #(1 << 12)                    
541         bne     1f                                
542         mov     r3, #0                            
543         mcr     p14, 6, r3, c1, c0, 0             
544         mrc     p14, 6, r0, c0, c0, 0             
545         orr     r0, r0, #1                        
546         mcr     p14, 6, r0, c0, c0, 0             
547 1:                                                
548 #endif                                            
549         adr     r3, v7_crval                      
550         ldmia   r3, {r3, r6}                      
551  ARM_BE8(orr    r6, r6, #1 << 25)                 
552 #ifdef CONFIG_SWP_EMULATE                         
553         orr     r3, r3, #(1 << 10)                
554         bic     r6, r6, #(1 << 10)                
555 #endif                                            
556         mrc     p15, 0, r0, c1, c0, 0             
557         bic     r0, r0, r3                        
558         orr     r0, r0, r6                        
559  THUMB( orr     r0, r0, #1 << 30        )         
560         ret     lr                                
561 ENDPROC(__v7_setup)                               
562                                                   
563         __INITDATA                                
564                                                   
565         .weak cpu_v7_bugs_init                    
566                                                   
567         @ define struct processor (see <asm/pr    
568         define_processor_functions v7, dabort=    
569                                                   
570 #ifdef CONFIG_HARDEN_BRANCH_PREDICTOR             
571         @ generic v7 bpiall on context switch     
572         globl_equ       cpu_v7_bpiall_proc_ini    
573         globl_equ       cpu_v7_bpiall_proc_fin    
574         globl_equ       cpu_v7_bpiall_reset,      
575         globl_equ       cpu_v7_bpiall_do_idle,    
576         globl_equ       cpu_v7_bpiall_dcache_c    
577         globl_equ       cpu_v7_bpiall_set_pte_    
578         globl_equ       cpu_v7_bpiall_suspend_    
579 #ifdef CONFIG_ARM_CPU_SUSPEND                     
580         globl_equ       cpu_v7_bpiall_do_suspe    
581         globl_equ       cpu_v7_bpiall_do_resum    
582 #endif                                            
583         define_processor_functions v7_bpiall,     
584                                                   
585 #define HARDENED_BPIALL_PROCESSOR_FUNCTIONS v7    
586 #else                                             
587 #define HARDENED_BPIALL_PROCESSOR_FUNCTIONS v7    
588 #endif                                            
589                                                   
590 #ifndef CONFIG_ARM_LPAE                           
591         @ Cortex-A8 - always needs bpiall swit    
592         globl_equ       cpu_ca8_proc_init,        
593         globl_equ       cpu_ca8_proc_fin,         
594         globl_equ       cpu_ca8_reset,            
595         globl_equ       cpu_ca8_do_idle,          
596         globl_equ       cpu_ca8_dcache_clean_a    
597         globl_equ       cpu_ca8_set_pte_ext,      
598         globl_equ       cpu_ca8_switch_mm,        
599         globl_equ       cpu_ca8_suspend_size,     
600 #ifdef CONFIG_ARM_CPU_SUSPEND                     
601         globl_equ       cpu_ca8_do_suspend,       
602         globl_equ       cpu_ca8_do_resume,        
603 #endif                                            
604         define_processor_functions ca8, dabort    
605                                                   
606         @ Cortex-A9 - needs more registers pre    
607         @ and bpiall switch_mm for hardening      
608         globl_equ       cpu_ca9mp_proc_init,      
609         globl_equ       cpu_ca9mp_proc_fin,       
610         globl_equ       cpu_ca9mp_reset,          
611         globl_equ       cpu_ca9mp_do_idle,        
612         globl_equ       cpu_ca9mp_dcache_clean    
613 #ifdef CONFIG_HARDEN_BRANCH_PREDICTOR             
614         globl_equ       cpu_ca9mp_switch_mm,      
615 #else                                             
616         globl_equ       cpu_ca9mp_switch_mm,      
617 #endif                                            
618         globl_equ       cpu_ca9mp_set_pte_ext,    
619         define_processor_functions ca9mp, dabo    
620 #endif                                            
621                                                   
622         @ Cortex-A15 - needs iciallu switch_mm    
623         globl_equ       cpu_ca15_proc_init,       
624         globl_equ       cpu_ca15_proc_fin,        
625         globl_equ       cpu_ca15_reset,           
626         globl_equ       cpu_ca15_do_idle,         
627         globl_equ       cpu_ca15_dcache_clean_    
628 #ifdef CONFIG_HARDEN_BRANCH_PREDICTOR             
629         globl_equ       cpu_ca15_switch_mm,       
630 #else                                             
631         globl_equ       cpu_ca15_switch_mm,       
632 #endif                                            
633         globl_equ       cpu_ca15_set_pte_ext,     
634         globl_equ       cpu_ca15_suspend_size,    
635         globl_equ       cpu_ca15_do_suspend,      
636         globl_equ       cpu_ca15_do_resume,       
637         define_processor_functions ca15, dabor    
638 #ifdef CONFIG_CPU_PJ4B                            
639         define_processor_functions pj4b, dabor    
640 #endif                                            
641                                                   
642         .section ".rodata"                        
643                                                   
644         string  cpu_arch_name, "armv7"            
645         string  cpu_elf_name, "v7"                
646         .align                                    
647                                                   
648         .section ".proc.info.init", "a"           
649                                                   
650         /*                                        
651          * Standard v7 proc info content          
652          */                                       
653 .macro __v7_proc name, initfunc, mm_mmuflags =    
654         ALT_SMP(.long   PMD_TYPE_SECT | PMD_SE    
655                         PMD_SECT_AF | PMD_FLAG    
656         ALT_UP(.long    PMD_TYPE_SECT | PMD_SE    
657                         PMD_SECT_AF | PMD_FLAG    
658         .long   PMD_TYPE_SECT | PMD_SECT_AP_WR    
659                 PMD_SECT_AP_READ | PMD_SECT_AF    
660         initfn  \initfunc, \name                  
661         .long   cpu_arch_name                     
662         .long   cpu_elf_name                      
663         .long   HWCAP_SWP | HWCAP_HALF | HWCAP    
664                 HWCAP_EDSP | HWCAP_TLS | \hwca    
665         .long   cpu_v7_name                       
666         .long   \proc_fns                         
667         .long   v7wbi_tlb_fns                     
668         .long   v6_user_fns                       
669         .long   \cache_fns                        
670 .endm                                             
671                                                   
672 #ifndef CONFIG_ARM_LPAE                           
673         /*                                        
674          * ARM Ltd. Cortex A5 processor.          
675          */                                       
676         .type   __v7_ca5mp_proc_info, #object     
677 __v7_ca5mp_proc_info:                             
678         .long   0x410fc050                        
679         .long   0xff0ffff0                        
680         __v7_proc __v7_ca5mp_proc_info, __v7_c    
681         .size   __v7_ca5mp_proc_info, . - __v7    
682                                                   
683         /*                                        
684          * ARM Ltd. Cortex A9 processor.          
685          */                                       
686         .type   __v7_ca9mp_proc_info, #object     
687 __v7_ca9mp_proc_info:                             
688         .long   0x410fc090                        
689         .long   0xff0ffff0                        
690         __v7_proc __v7_ca9mp_proc_info, __v7_c    
691         .size   __v7_ca9mp_proc_info, . - __v7    
692                                                   
693         /*                                        
694          * ARM Ltd. Cortex A8 processor.          
695          */                                       
696         .type   __v7_ca8_proc_info, #object       
697 __v7_ca8_proc_info:                               
698         .long   0x410fc080                        
699         .long   0xff0ffff0                        
700         __v7_proc __v7_ca8_proc_info, __v7_set    
701         .size   __v7_ca8_proc_info, . - __v7_c    
702                                                   
703 #endif  /* CONFIG_ARM_LPAE */                     
704                                                   
705         /*                                        
706          * Marvell PJ4B processor.                
707          */                                       
708 #ifdef CONFIG_CPU_PJ4B                            
709         .type   __v7_pj4b_proc_info, #object      
710 __v7_pj4b_proc_info:                              
711         .long   0x560f5800                        
712         .long   0xff0fff00                        
713         __v7_proc __v7_pj4b_proc_info, __v7_pj    
714         .size   __v7_pj4b_proc_info, . - __v7_    
715 #endif                                            
716                                                   
717         /*                                        
718          * ARM Ltd. Cortex R7 processor.          
719          */                                       
720         .type   __v7_cr7mp_proc_info, #object     
721 __v7_cr7mp_proc_info:                             
722         .long   0x410fc170                        
723         .long   0xff0ffff0                        
724         __v7_proc __v7_cr7mp_proc_info, __v7_c    
725         .size   __v7_cr7mp_proc_info, . - __v7    
726                                                   
727         /*                                        
728          * ARM Ltd. Cortex R8 processor.          
729          */                                       
730         .type   __v7_cr8mp_proc_info, #object     
731 __v7_cr8mp_proc_info:                             
732         .long   0x410fc180                        
733         .long   0xff0ffff0                        
734         __v7_proc __v7_cr8mp_proc_info, __v7_c    
735         .size   __v7_cr8mp_proc_info, . - __v7    
736                                                   
737         /*                                        
738          * ARM Ltd. Cortex A7 processor.          
739          */                                       
740         .type   __v7_ca7mp_proc_info, #object     
741 __v7_ca7mp_proc_info:                             
742         .long   0x410fc070                        
743         .long   0xff0ffff0                        
744         __v7_proc __v7_ca7mp_proc_info, __v7_c    
745         .size   __v7_ca7mp_proc_info, . - __v7    
746                                                   
747         /*                                        
748          * ARM Ltd. Cortex A12 processor.         
749          */                                       
750         .type   __v7_ca12mp_proc_info, #object    
751 __v7_ca12mp_proc_info:                            
752         .long   0x410fc0d0                        
753         .long   0xff0ffff0                        
754         __v7_proc __v7_ca12mp_proc_info, __v7_    
755         .size   __v7_ca12mp_proc_info, . - __v    
756                                                   
757         /*                                        
758          * ARM Ltd. Cortex A15 processor.         
759          */                                       
760         .type   __v7_ca15mp_proc_info, #object    
761 __v7_ca15mp_proc_info:                            
762         .long   0x410fc0f0                        
763         .long   0xff0ffff0                        
764         __v7_proc __v7_ca15mp_proc_info, __v7_    
765         .size   __v7_ca15mp_proc_info, . - __v    
766                                                   
767         /*                                        
768          * Broadcom Corporation Brahma-B15 pro    
769          */                                       
770         .type   __v7_b15mp_proc_info, #object     
771 __v7_b15mp_proc_info:                             
772         .long   0x420f00f0                        
773         .long   0xff0ffff0                        
774         __v7_proc __v7_b15mp_proc_info, __v7_b    
775         .size   __v7_b15mp_proc_info, . - __v7    
776                                                   
777         /*                                        
778          * ARM Ltd. Cortex A17 processor.         
779          */                                       
780         .type   __v7_ca17mp_proc_info, #object    
781 __v7_ca17mp_proc_info:                            
782         .long   0x410fc0e0                        
783         .long   0xff0ffff0                        
784         __v7_proc __v7_ca17mp_proc_info, __v7_    
785         .size   __v7_ca17mp_proc_info, . - __v    
786                                                   
787         /* ARM Ltd. Cortex A73 processor */       
788         .type   __v7_ca73_proc_info, #object      
789 __v7_ca73_proc_info:                              
790         .long   0x410fd090                        
791         .long   0xff0ffff0                        
792         __v7_proc __v7_ca73_proc_info, __v7_se    
793         .size   __v7_ca73_proc_info, . - __v7_    
794                                                   
795         /* ARM Ltd. Cortex A75 processor */       
796         .type   __v7_ca75_proc_info, #object      
797 __v7_ca75_proc_info:                              
798         .long   0x410fd0a0                        
799         .long   0xff0ffff0                        
800         __v7_proc __v7_ca75_proc_info, __v7_se    
801         .size   __v7_ca75_proc_info, . - __v7_    
802                                                   
803         /*                                        
804          * Qualcomm Inc. Krait processors.        
805          */                                       
806         .type   __krait_proc_info, #object        
807 __krait_proc_info:                                
808         .long   0x510f0400              @ Requ    
809         .long   0xff0ffc00              @ Mask    
810         /*                                        
811          * Some Krait processors don't indicat    
812          * instructions in the ARM instruction    
813          * do support them. They also don't in    
814          * instructions even though they actua    
815          */                                       
816         __v7_proc __krait_proc_info, __v7_setu    
817         .size   __krait_proc_info, . - __krait    
818                                                   
819         /*                                        
820          * Match any ARMv7 processor core.        
821          */                                       
822         .type   __v7_proc_info, #object           
823 __v7_proc_info:                                   
824         .long   0x000f0000              @ Requ    
825         .long   0x000f0000              @ Mask    
826         __v7_proc __v7_proc_info, __v7_setup      
827         .size   __v7_proc_info, . - __v7_proc_    
                                                      

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php