cns21xx: add initial support for the Cavium CNS21xx SoC
[oweals/openwrt.git] / target / linux / cns21xx / patches-2.6.36 / 001-arm-use-cache-alignment-from-asm-cahce-h.patch
1 From 248d9a5b63bba72bfc316b8a48c6163fce5acc22 Mon Sep 17 00:00:00 2001
2 From: Paulius Zaleckas <paulius.zaleckas@gmail.com>
3 Date: Thu, 18 Feb 2010 21:53:01 +0200
4 Subject: [PATCH] ARM: Use cache alignment from asm/cache.h
5
6 Make code more optimal for ARM variants with
7 different cache line size.
8
9 Signed-off-by: Paulius Zaleckas <paulius.zaleckas@gmail.com>
10 ---
11  arch/arm/boot/compressed/head.S    |   11 ++++++-----
12  arch/arm/include/asm/dma-mapping.h |    2 +-
13  arch/arm/kernel/entry-armv.S       |   31 ++++++++++++++++---------------
14  arch/arm/kernel/entry-common.S     |    7 ++++---
15  arch/arm/kernel/head.S             |    3 ++-
16  arch/arm/kernel/vmlinux.lds.S      |    5 +++--
17  arch/arm/lib/copy_page.S           |    2 +-
18  arch/arm/lib/memchr.S              |    3 ++-
19  arch/arm/lib/memset.S              |    3 ++-
20  arch/arm/lib/memzero.S             |    3 ++-
21  arch/arm/lib/strchr.S              |    3 ++-
22  arch/arm/lib/strncpy_from_user.S   |    3 ++-
23  arch/arm/lib/strnlen_user.S        |    3 ++-
24  arch/arm/lib/strrchr.S             |    3 ++-
25  arch/arm/mm/abort-ev4.S            |    3 ++-
26  arch/arm/mm/abort-nommu.S          |    3 ++-
27  16 files changed, 51 insertions(+), 37 deletions(-)
28
29 --- a/arch/arm/boot/compressed/head.S
30 +++ b/arch/arm/boot/compressed/head.S
31 @@ -9,6 +9,7 @@
32   * published by the Free Software Foundation.
33   */
34  #include <linux/linkage.h>
35 +#include <asm/cache.h>
36  
37  /*
38   * Debugging stuff
39 @@ -349,7 +350,7 @@ params:             ldr     r0, =0x10000100         @ params_p
40   * This routine must preserve:
41   *  r4, r5, r6, r7, r8
42   */
43 -               .align  5
44 +               .align  L1_CACHE_SHIFT
45  cache_on:      mov     r3, #8                  @ cache_on function
46                 b       call_cache_fn
47  
48 @@ -537,7 +538,7 @@ __common_mmu_cache_on:
49                 mcr     p15, 0, r3, c2, c0, 0   @ load page table pointer
50                 mcr     p15, 0, r1, c3, c0, 0   @ load domain access control
51                 b       1f
52 -               .align  5                       @ cache line aligned
53 +               .align  L1_CACHE_SHIFT          @ cache line aligned
54  1:             mcr     p15, 0, r0, c1, c0, 0   @ load control register
55                 mrc     p15, 0, r0, c1, c0, 0   @ and read it back to
56                 sub     pc, lr, r0, lsr #32     @ properly flush pipeline
57 @@ -556,7 +557,7 @@ __common_mmu_cache_on:
58   * r8     = atags pointer
59   * r9-r12,r14 = corrupted
60   */
61 -               .align  5
62 +               .align  L1_CACHE_SHIFT
63  reloc_start:   add     r9, r5, r0
64                 sub     r9, r9, #128            @ do not copy the stack
65                 debug_reloc_start
66 @@ -786,7 +787,7 @@ proc_types:
67   * This routine must preserve:
68   *  r4, r6, r7
69   */
70 -               .align  5
71 +               .align  L1_CACHE_SHIFT
72  cache_off:     mov     r3, #12                 @ cache_off function
73                 b       call_cache_fn
74  
75 @@ -861,7 +862,7 @@ __armv3_mmu_cache_off:
76   * This routine must preserve:
77   *  r0, r4, r5, r6, r7
78   */
79 -               .align  5
80 +               .align  L1_CACHE_SHIFT
81  cache_clean_flush:
82                 mov     r3, #16
83                 b       call_cache_fn
84 --- a/arch/arm/kernel/entry-armv.S
85 +++ b/arch/arm/kernel/entry-armv.S
86 @@ -23,6 +23,7 @@
87  #include <asm/unwind.h>
88  #include <asm/unistd.h>
89  #include <asm/tls.h>
90 +#include <asm/cache.h>
91  
92  #include "entry-header.S"
93  
94 @@ -165,7 +166,7 @@ ENDPROC(__und_invalid)
95         stmia   r5, {r0 - r4}
96         .endm
97  
98 -       .align  5
99 +       .align  L1_CACHE_SHIFT
100  __dabt_svc:
101         svc_entry
102  
103 @@ -213,7 +214,7 @@ __dabt_svc:
104   UNWIND(.fnend         )
105  ENDPROC(__dabt_svc)
106  
107 -       .align  5
108 +       .align  L1_CACHE_SHIFT
109  __irq_svc:
110         svc_entry
111  
112 @@ -257,7 +258,7 @@ svc_preempt:
113         b       1b
114  #endif
115  
116 -       .align  5
117 +       .align  L1_CACHE_SHIFT
118  __und_svc:
119  #ifdef CONFIG_KPROBES
120         @ If a kprobe is about to simulate a "stmdb sp..." instruction,
121 @@ -303,7 +304,7 @@ __und_svc:
122   UNWIND(.fnend         )
123  ENDPROC(__und_svc)
124  
125 -       .align  5
126 +       .align  L1_CACHE_SHIFT
127  __pabt_svc:
128         svc_entry
129  
130 @@ -339,7 +340,7 @@ __pabt_svc:
131   UNWIND(.fnend         )
132  ENDPROC(__pabt_svc)
133  
134 -       .align  5
135 +       .align  L1_CACHE_SHIFT
136  .LCcralign:
137         .word   cr_alignment
138  #ifdef MULTI_DABORT
139 @@ -412,7 +413,7 @@ ENDPROC(__pabt_svc)
140  #endif
141         .endm
142  
143 -       .align  5
144 +       .align  L1_CACHE_SHIFT
145  __dabt_usr:
146         usr_entry
147         kuser_cmpxchg_check
148 @@ -444,7 +445,7 @@ __dabt_usr:
149   UNWIND(.fnend         )
150  ENDPROC(__dabt_usr)
151  
152 -       .align  5
153 +       .align  L1_CACHE_SHIFT
154  __irq_usr:
155         usr_entry
156         kuser_cmpxchg_check
157 @@ -473,7 +474,7 @@ ENDPROC(__irq_usr)
158  
159         .ltorg
160  
161 -       .align  5
162 +       .align  L1_CACHE_SHIFT
163  __und_usr:
164         usr_entry
165  
166 @@ -689,7 +690,7 @@ __und_usr_unknown:
167         b       do_undefinstr
168  ENDPROC(__und_usr_unknown)
169  
170 -       .align  5
171 +       .align  L1_CACHE_SHIFT
172  __pabt_usr:
173         usr_entry
174  
175 @@ -803,7 +804,7 @@ ENDPROC(__switch_to)
176  #endif
177         .endm
178  
179 -       .align  5
180 +       .align  L1_CACHE_SHIFT
181         .globl  __kuser_helper_start
182  __kuser_helper_start:
183  
184 @@ -843,7 +844,7 @@ __kuser_memory_barrier:                             @ 0xffff0fa0
185         smp_dmb
186         usr_ret lr
187  
188 -       .align  5
189 +       .align  L1_CACHE_SHIFT
190  
191  /*
192   * Reference prototype:
193 @@ -973,7 +974,7 @@ kuser_cmpxchg_fixup:
194  
195  #endif
196  
197 -       .align  5
198 +       .align  L1_CACHE_SHIFT
199  
200  /*
201   * Reference prototype:
202 @@ -1051,7 +1052,7 @@ __kuser_helper_end:
203   * of which is copied into r0 for the mode specific abort handler.
204   */
205         .macro  vector_stub, name, mode, correction=0
206 -       .align  5
207 +       .align  L1_CACHE_SHIFT
208  
209  vector_\name:
210         .if \correction
211 @@ -1182,7 +1183,7 @@ __stubs_start:
212         .long   __und_invalid                   @  e
213         .long   __und_invalid                   @  f
214  
215 -       .align  5
216 +       .align  L1_CACHE_SHIFT
217  
218  /*=============================================================================
219   * Undefined FIQs
220 @@ -1212,7 +1213,7 @@ vector_addrexcptn:
221   * We group all the following data together to optimise
222   * for CPUs with separate I & D caches.
223   */
224 -       .align  5
225 +       .align  L1_CACHE_SHIFT
226  
227  .LCvswi:
228         .word   vector_swi
229 --- a/arch/arm/kernel/entry-common.S
230 +++ b/arch/arm/kernel/entry-common.S
231 @@ -10,13 +10,14 @@
232  
233  #include <asm/unistd.h>
234  #include <asm/ftrace.h>
235 +#include <asm/cache.h>
236  #include <mach/entry-macro.S>
237  #include <asm/unwind.h>
238  
239  #include "entry-header.S"
240  
241  
242 -       .align  5
243 +       .align  L1_CACHE_SHIFT
244  /*
245   * This is the fast syscall return path.  We do as little as
246   * possible here, and this includes saving r0 back into the SVC
247 @@ -221,7 +222,7 @@ ftrace_stub:
248  #define A710(code...)
249  #endif
250  
251 -       .align  5
252 +       .align  L1_CACHE_SHIFT
253  ENTRY(vector_swi)
254         sub     sp, sp, #S_FRAME_SIZE
255         stmia   sp, {r0 - r12}                  @ Calling r0 - r12
256 @@ -354,7 +355,7 @@ __sys_trace_return:
257         bl      syscall_trace
258         b       ret_slow_syscall
259  
260 -       .align  5
261 +       .align  L1_CACHE_SHIFT
262  #ifdef CONFIG_ALIGNMENT_TRAP
263         .type   __cr_alignment, #object
264  __cr_alignment:
265 --- a/arch/arm/kernel/head.S
266 +++ b/arch/arm/kernel/head.S
267 @@ -21,6 +21,7 @@
268  #include <asm/memory.h>
269  #include <asm/thread_info.h>
270  #include <asm/system.h>
271 +#include <asm/cache.h>
272  
273  #if (PHYS_OFFSET & 0x001fffff)
274  #error "PHYS_OFFSET must be at an even 2MiB boundary!"
275 @@ -192,7 +193,7 @@ ENDPROC(__enable_mmu)
276   *
277   * other registers depend on the function called upon completion
278   */
279 -       .align  5
280 +       .align  L1_CACHE_SHIFT
281  __turn_mmu_on:
282         mov     r0, r0
283         mcr     p15, 0, r0, c1, c0, 0           @ write control reg
284 --- a/arch/arm/kernel/vmlinux.lds.S
285 +++ b/arch/arm/kernel/vmlinux.lds.S
286 @@ -7,6 +7,7 @@
287  #include <asm/thread_info.h>
288  #include <asm/memory.h>
289  #include <asm/page.h>
290 +#include <asm/cache.h>
291         
292  OUTPUT_ARCH(arm)
293  ENTRY(stext)
294 --- a/arch/arm/lib/copy_page.S
295 +++ b/arch/arm/lib/copy_page.S
296 @@ -17,7 +17,7 @@
297  #define COPY_COUNT (PAGE_SZ / (2 * L1_CACHE_BYTES) PLD( -1 ))
298  
299                 .text
300 -               .align  5
301 +               .align  L1_CACHE_SHIFT
302  /*
303   * StrongARM optimised copy_page routine
304   * now 1.78bytes/cycle, was 1.60 bytes/cycle (50MHz bus -> 89MB/s)
305 --- a/arch/arm/lib/memchr.S
306 +++ b/arch/arm/lib/memchr.S
307 @@ -11,9 +11,10 @@
308   */
309  #include <linux/linkage.h>
310  #include <asm/assembler.h>
311 +#include <asm/cache.h>
312  
313         .text
314 -       .align  5
315 +       .align  L1_CACHE_SHIFT
316  ENTRY(memchr)
317  1:     subs    r2, r2, #1
318         bmi     2f
319 --- a/arch/arm/lib/memset.S
320 +++ b/arch/arm/lib/memset.S
321 @@ -11,9 +11,10 @@
322   */
323  #include <linux/linkage.h>
324  #include <asm/assembler.h>
325 +#include <asm/cache.h>
326  
327         .text
328 -       .align  5
329 +       .align  L1_CACHE_SHIFT
330         .word   0
331  
332  1:     subs    r2, r2, #4              @ 1 do we have enough
333 --- a/arch/arm/lib/memzero.S
334 +++ b/arch/arm/lib/memzero.S
335 @@ -9,9 +9,10 @@
336   */
337  #include <linux/linkage.h>
338  #include <asm/assembler.h>
339 +#include <asm/cache.h>
340  
341         .text
342 -       .align  5
343 +       .align  L1_CACHE_SHIFT
344         .word   0
345  /*
346   * Align the pointer in r0.  r3 contains the number of bytes that we are
347 --- a/arch/arm/lib/strchr.S
348 +++ b/arch/arm/lib/strchr.S
349 @@ -11,9 +11,10 @@
350   */
351  #include <linux/linkage.h>
352  #include <asm/assembler.h>
353 +#include <asm/cache.h>
354  
355                 .text
356 -               .align  5
357 +               .align  L1_CACHE_SHIFT
358  ENTRY(strchr)
359                 and     r1, r1, #0xff
360  1:             ldrb    r2, [r0], #1
361 --- a/arch/arm/lib/strncpy_from_user.S
362 +++ b/arch/arm/lib/strncpy_from_user.S
363 @@ -10,9 +10,10 @@
364  #include <linux/linkage.h>
365  #include <asm/assembler.h>
366  #include <asm/errno.h>
367 +#include <asm/cache.h>
368  
369         .text
370 -       .align  5
371 +       .align  L1_CACHE_SHIFT
372  
373  /*
374   * Copy a string from user space to kernel space.
375 --- a/arch/arm/lib/strnlen_user.S
376 +++ b/arch/arm/lib/strnlen_user.S
377 @@ -10,9 +10,10 @@
378  #include <linux/linkage.h>
379  #include <asm/assembler.h>
380  #include <asm/errno.h>
381 +#include <asm/cache.h>
382  
383         .text
384 -       .align  5
385 +       .align  L1_CACHE_SHIFT
386  
387  /* Prototype: unsigned long __strnlen_user(const char *str, long n)
388   * Purpose  : get length of a string in user memory
389 --- a/arch/arm/lib/strrchr.S
390 +++ b/arch/arm/lib/strrchr.S
391 @@ -11,9 +11,10 @@
392   */
393  #include <linux/linkage.h>
394  #include <asm/assembler.h>
395 +#include <asm/cache.h>
396  
397                 .text
398 -               .align  5
399 +               .align  L1_CACHE_SHIFT
400  ENTRY(strrchr)
401                 mov     r3, #0
402  1:             ldrb    r2, [r0], #1
403 --- a/arch/arm/mm/abort-ev4.S
404 +++ b/arch/arm/mm/abort-ev4.S
405 @@ -1,5 +1,6 @@
406  #include <linux/linkage.h>
407  #include <asm/assembler.h>
408 +#include <asm/cache.h>
409  /*
410   * Function: v4_early_abort
411   *
412 @@ -17,7 +18,7 @@
413   * abort here if the I-TLB and D-TLB aren't seeing the same
414   * picture.  Unfortunately, this does happen.  We live with it.
415   */
416 -       .align  5
417 +       .align  L1_CACHE_SHIFT
418  ENTRY(v4_early_abort)
419         mrc     p15, 0, r1, c5, c0, 0           @ get FSR
420         mrc     p15, 0, r0, c6, c0, 0           @ get FAR
421 --- a/arch/arm/mm/abort-nommu.S
422 +++ b/arch/arm/mm/abort-nommu.S
423 @@ -1,5 +1,6 @@
424  #include <linux/linkage.h>
425  #include <asm/assembler.h>
426 +#include <asm/cache.h>
427  /*
428   * Function: nommu_early_abort
429   *
430 @@ -12,7 +13,7 @@
431   * Note: There is no FSR/FAR on !CPU_CP15_MMU cores.
432   *       Just fill zero into the registers.
433   */
434 -       .align  5
435 +       .align  L1_CACHE_SHIFT
436  ENTRY(nommu_early_abort)
437         mov     r0, #0                          @ clear r0, r1 (no FSR/FAR)
438         mov     r1, #0