diff options
Diffstat (limited to 'target/linux/cns21xx/patches-2.6.36/001-arm-use-cache-alignment-from-asm-cahce-h.patch')
| -rw-r--r-- | target/linux/cns21xx/patches-2.6.36/001-arm-use-cache-alignment-from-asm-cahce-h.patch | 438 | 
1 files changed, 438 insertions, 0 deletions
diff --git a/target/linux/cns21xx/patches-2.6.36/001-arm-use-cache-alignment-from-asm-cahce-h.patch b/target/linux/cns21xx/patches-2.6.36/001-arm-use-cache-alignment-from-asm-cahce-h.patch new file mode 100644 index 000000000..096062ce6 --- /dev/null +++ b/target/linux/cns21xx/patches-2.6.36/001-arm-use-cache-alignment-from-asm-cahce-h.patch @@ -0,0 +1,438 @@ +From 248d9a5b63bba72bfc316b8a48c6163fce5acc22 Mon Sep 17 00:00:00 2001 +From: Paulius Zaleckas <paulius.zaleckas@gmail.com> +Date: Thu, 18 Feb 2010 21:53:01 +0200 +Subject: [PATCH] ARM: Use cache alignment from asm/cache.h + +Make code more optimal for ARM variants with +different cache line size. + +Signed-off-by: Paulius Zaleckas <paulius.zaleckas@gmail.com> +--- + arch/arm/boot/compressed/head.S    |   11 ++++++----- + arch/arm/include/asm/dma-mapping.h |    2 +- + arch/arm/kernel/entry-armv.S       |   31 ++++++++++++++++--------------- + arch/arm/kernel/entry-common.S     |    7 ++++--- + arch/arm/kernel/head.S             |    3 ++- + arch/arm/kernel/vmlinux.lds.S      |    5 +++-- + arch/arm/lib/copy_page.S           |    2 +- + arch/arm/lib/memchr.S              |    3 ++- + arch/arm/lib/memset.S              |    3 ++- + arch/arm/lib/memzero.S             |    3 ++- + arch/arm/lib/strchr.S              |    3 ++- + arch/arm/lib/strncpy_from_user.S   |    3 ++- + arch/arm/lib/strnlen_user.S        |    3 ++- + arch/arm/lib/strrchr.S             |    3 ++- + arch/arm/mm/abort-ev4.S            |    3 ++- + arch/arm/mm/abort-nommu.S          |    3 ++- + 16 files changed, 51 insertions(+), 37 deletions(-) + +--- a/arch/arm/boot/compressed/head.S ++++ b/arch/arm/boot/compressed/head.S +@@ -9,6 +9,7 @@ +  * published by the Free Software Foundation. +  */ + #include <linux/linkage.h> ++#include <asm/cache.h> +  + /* +  * Debugging stuff +@@ -349,7 +350,7 @@ params:		ldr	r0, =0x10000100		@ params_p +  * This routine must preserve: +  *  r4, r5, r6, r7, r8 +  */ +-		.align	5 ++		.align	L1_CACHE_SHIFT + cache_on:	mov	r3, #8			@ cache_on function + 		b	call_cache_fn +  +@@ -537,7 +538,7 @@ __common_mmu_cache_on: + 		mcr	p15, 0, r3, c2, c0, 0	@ load page table pointer + 		mcr	p15, 0, r1, c3, c0, 0	@ load domain access control + 		b	1f +-		.align	5			@ cache line aligned ++		.align	L1_CACHE_SHIFT		@ cache line aligned + 1:		mcr	p15, 0, r0, c1, c0, 0	@ load control register + 		mrc	p15, 0, r0, c1, c0, 0	@ and read it back to + 		sub	pc, lr, r0, lsr #32	@ properly flush pipeline +@@ -556,7 +557,7 @@ __common_mmu_cache_on: +  * r8     = atags pointer +  * r9-r12,r14 = corrupted +  */ +-		.align	5 ++		.align	L1_CACHE_SHIFT + reloc_start:	add	r9, r5, r0 + 		sub	r9, r9, #128		@ do not copy the stack + 		debug_reloc_start +@@ -786,7 +787,7 @@ proc_types: +  * This routine must preserve: +  *  r4, r6, r7 +  */ +-		.align	5 ++		.align	L1_CACHE_SHIFT + cache_off:	mov	r3, #12			@ cache_off function + 		b	call_cache_fn +  +@@ -861,7 +862,7 @@ __armv3_mmu_cache_off: +  * This routine must preserve: +  *  r0, r4, r5, r6, r7 +  */ +-		.align	5 ++		.align	L1_CACHE_SHIFT + cache_clean_flush: + 		mov	r3, #16 + 		b	call_cache_fn +--- a/arch/arm/kernel/entry-armv.S ++++ b/arch/arm/kernel/entry-armv.S +@@ -23,6 +23,7 @@ + #include <asm/unwind.h> + #include <asm/unistd.h> + #include <asm/tls.h> ++#include <asm/cache.h> +  + #include "entry-header.S" +  +@@ -165,7 +166,7 @@ ENDPROC(__und_invalid) + 	stmia	r5, {r0 - r4} + 	.endm +  +-	.align	5 ++	.align	L1_CACHE_SHIFT + __dabt_svc: + 	svc_entry +  +@@ -213,7 +214,7 @@ __dabt_svc: +  UNWIND(.fnend		) + ENDPROC(__dabt_svc) +  +-	.align	5 ++	.align	L1_CACHE_SHIFT + __irq_svc: + 	svc_entry +  +@@ -257,7 +258,7 @@ svc_preempt: + 	b	1b + #endif +  +-	.align	5 ++	.align	L1_CACHE_SHIFT + __und_svc: + #ifdef CONFIG_KPROBES + 	@ If a kprobe is about to simulate a "stmdb sp..." instruction, +@@ -303,7 +304,7 @@ __und_svc: +  UNWIND(.fnend		) + ENDPROC(__und_svc) +  +-	.align	5 ++	.align	L1_CACHE_SHIFT + __pabt_svc: + 	svc_entry +  +@@ -339,7 +340,7 @@ __pabt_svc: +  UNWIND(.fnend		) + ENDPROC(__pabt_svc) +  +-	.align	5 ++	.align	L1_CACHE_SHIFT + .LCcralign: + 	.word	cr_alignment + #ifdef MULTI_DABORT +@@ -412,7 +413,7 @@ ENDPROC(__pabt_svc) + #endif + 	.endm +  +-	.align	5 ++	.align	L1_CACHE_SHIFT + __dabt_usr: + 	usr_entry + 	kuser_cmpxchg_check +@@ -444,7 +445,7 @@ __dabt_usr: +  UNWIND(.fnend		) + ENDPROC(__dabt_usr) +  +-	.align	5 ++	.align	L1_CACHE_SHIFT + __irq_usr: + 	usr_entry + 	kuser_cmpxchg_check +@@ -473,7 +474,7 @@ ENDPROC(__irq_usr) +  + 	.ltorg +  +-	.align	5 ++	.align	L1_CACHE_SHIFT + __und_usr: + 	usr_entry +  +@@ -689,7 +690,7 @@ __und_usr_unknown: + 	b	do_undefinstr + ENDPROC(__und_usr_unknown) +  +-	.align	5 ++	.align	L1_CACHE_SHIFT + __pabt_usr: + 	usr_entry +  +@@ -803,7 +804,7 @@ ENDPROC(__switch_to) + #endif + 	.endm +  +-	.align	5 ++	.align	L1_CACHE_SHIFT + 	.globl	__kuser_helper_start + __kuser_helper_start: +  +@@ -843,7 +844,7 @@ __kuser_memory_barrier:				@ 0xffff0fa0 + 	smp_dmb + 	usr_ret	lr +  +-	.align	5 ++	.align	L1_CACHE_SHIFT +  + /* +  * Reference prototype: +@@ -973,7 +974,7 @@ kuser_cmpxchg_fixup: +  + #endif +  +-	.align	5 ++	.align	L1_CACHE_SHIFT +  + /* +  * Reference prototype: +@@ -1051,7 +1052,7 @@ __kuser_helper_end: +  * of which is copied into r0 for the mode specific abort handler. +  */ + 	.macro	vector_stub, name, mode, correction=0 +-	.align	5 ++	.align	L1_CACHE_SHIFT +  + vector_\name: + 	.if \correction +@@ -1182,7 +1183,7 @@ __stubs_start: + 	.long	__und_invalid			@  e + 	.long	__und_invalid			@  f +  +-	.align	5 ++	.align	L1_CACHE_SHIFT +  + /*============================================================================= +  * Undefined FIQs +@@ -1212,7 +1213,7 @@ vector_addrexcptn: +  * We group all the following data together to optimise +  * for CPUs with separate I & D caches. +  */ +-	.align	5 ++	.align	L1_CACHE_SHIFT +  + .LCvswi: + 	.word	vector_swi +--- a/arch/arm/kernel/entry-common.S ++++ b/arch/arm/kernel/entry-common.S +@@ -10,13 +10,14 @@ +  + #include <asm/unistd.h> + #include <asm/ftrace.h> ++#include <asm/cache.h> + #include <mach/entry-macro.S> + #include <asm/unwind.h> +  + #include "entry-header.S" +  +  +-	.align	5 ++	.align	L1_CACHE_SHIFT + /* +  * This is the fast syscall return path.  We do as little as +  * possible here, and this includes saving r0 back into the SVC +@@ -221,7 +222,7 @@ ftrace_stub: + #define A710(code...) + #endif +  +-	.align	5 ++	.align	L1_CACHE_SHIFT + ENTRY(vector_swi) + 	sub	sp, sp, #S_FRAME_SIZE + 	stmia	sp, {r0 - r12}			@ Calling r0 - r12 +@@ -354,7 +355,7 @@ __sys_trace_return: + 	bl	syscall_trace + 	b	ret_slow_syscall +  +-	.align	5 ++	.align	L1_CACHE_SHIFT + #ifdef CONFIG_ALIGNMENT_TRAP + 	.type	__cr_alignment, #object + __cr_alignment: +--- a/arch/arm/kernel/head.S ++++ b/arch/arm/kernel/head.S +@@ -21,6 +21,7 @@ + #include <asm/memory.h> + #include <asm/thread_info.h> + #include <asm/system.h> ++#include <asm/cache.h> +  + #if (PHYS_OFFSET & 0x001fffff) + #error "PHYS_OFFSET must be at an even 2MiB boundary!" +@@ -192,7 +193,7 @@ ENDPROC(__enable_mmu) +  * +  * other registers depend on the function called upon completion +  */ +-	.align	5 ++	.align	L1_CACHE_SHIFT + __turn_mmu_on: + 	mov	r0, r0 + 	mcr	p15, 0, r0, c1, c0, 0		@ write control reg +--- a/arch/arm/kernel/vmlinux.lds.S ++++ b/arch/arm/kernel/vmlinux.lds.S +@@ -7,6 +7,7 @@ + #include <asm/thread_info.h> + #include <asm/memory.h> + #include <asm/page.h> ++#include <asm/cache.h> + 	 + OUTPUT_ARCH(arm) + ENTRY(stext) +--- a/arch/arm/lib/copy_page.S ++++ b/arch/arm/lib/copy_page.S +@@ -17,7 +17,7 @@ + #define COPY_COUNT (PAGE_SZ / (2 * L1_CACHE_BYTES) PLD( -1 )) +  + 		.text +-		.align	5 ++		.align	L1_CACHE_SHIFT + /* +  * StrongARM optimised copy_page routine +  * now 1.78bytes/cycle, was 1.60 bytes/cycle (50MHz bus -> 89MB/s) +--- a/arch/arm/lib/memchr.S ++++ b/arch/arm/lib/memchr.S +@@ -11,9 +11,10 @@ +  */ + #include <linux/linkage.h> + #include <asm/assembler.h> ++#include <asm/cache.h> +  + 	.text +-	.align	5 ++	.align	L1_CACHE_SHIFT + ENTRY(memchr) + 1:	subs	r2, r2, #1 + 	bmi	2f +--- a/arch/arm/lib/memset.S ++++ b/arch/arm/lib/memset.S +@@ -11,9 +11,10 @@ +  */ + #include <linux/linkage.h> + #include <asm/assembler.h> ++#include <asm/cache.h> +  + 	.text +-	.align	5 ++	.align	L1_CACHE_SHIFT + 	.word	0 +  + 1:	subs	r2, r2, #4		@ 1 do we have enough +--- a/arch/arm/lib/memzero.S ++++ b/arch/arm/lib/memzero.S +@@ -9,9 +9,10 @@ +  */ + #include <linux/linkage.h> + #include <asm/assembler.h> ++#include <asm/cache.h> +  + 	.text +-	.align	5 ++	.align	L1_CACHE_SHIFT + 	.word	0 + /* +  * Align the pointer in r0.  r3 contains the number of bytes that we are +--- a/arch/arm/lib/strchr.S ++++ b/arch/arm/lib/strchr.S +@@ -11,9 +11,10 @@ +  */ + #include <linux/linkage.h> + #include <asm/assembler.h> ++#include <asm/cache.h> +  + 		.text +-		.align	5 ++		.align	L1_CACHE_SHIFT + ENTRY(strchr) + 		and	r1, r1, #0xff + 1:		ldrb	r2, [r0], #1 +--- a/arch/arm/lib/strncpy_from_user.S ++++ b/arch/arm/lib/strncpy_from_user.S +@@ -10,9 +10,10 @@ + #include <linux/linkage.h> + #include <asm/assembler.h> + #include <asm/errno.h> ++#include <asm/cache.h> +  + 	.text +-	.align	5 ++	.align	L1_CACHE_SHIFT +  + /* +  * Copy a string from user space to kernel space. +--- a/arch/arm/lib/strnlen_user.S ++++ b/arch/arm/lib/strnlen_user.S +@@ -10,9 +10,10 @@ + #include <linux/linkage.h> + #include <asm/assembler.h> + #include <asm/errno.h> ++#include <asm/cache.h> +  + 	.text +-	.align	5 ++	.align	L1_CACHE_SHIFT +  + /* Prototype: unsigned long __strnlen_user(const char *str, long n) +  * Purpose  : get length of a string in user memory +--- a/arch/arm/lib/strrchr.S ++++ b/arch/arm/lib/strrchr.S +@@ -11,9 +11,10 @@ +  */ + #include <linux/linkage.h> + #include <asm/assembler.h> ++#include <asm/cache.h> +  + 		.text +-		.align	5 ++		.align	L1_CACHE_SHIFT + ENTRY(strrchr) + 		mov	r3, #0 + 1:		ldrb	r2, [r0], #1 +--- a/arch/arm/mm/abort-ev4.S ++++ b/arch/arm/mm/abort-ev4.S +@@ -1,5 +1,6 @@ + #include <linux/linkage.h> + #include <asm/assembler.h> ++#include <asm/cache.h> + /* +  * Function: v4_early_abort +  * +@@ -17,7 +18,7 @@ +  * abort here if the I-TLB and D-TLB aren't seeing the same +  * picture.  Unfortunately, this does happen.  We live with it. +  */ +-	.align	5 ++	.align	L1_CACHE_SHIFT + ENTRY(v4_early_abort) + 	mrc	p15, 0, r1, c5, c0, 0		@ get FSR + 	mrc	p15, 0, r0, c6, c0, 0		@ get FAR +--- a/arch/arm/mm/abort-nommu.S ++++ b/arch/arm/mm/abort-nommu.S +@@ -1,5 +1,6 @@ + #include <linux/linkage.h> + #include <asm/assembler.h> ++#include <asm/cache.h> + /* +  * Function: nommu_early_abort +  * +@@ -12,7 +13,7 @@ +  * Note: There is no FSR/FAR on !CPU_CP15_MMU cores. +  *       Just fill zero into the registers. +  */ +-	.align	5 ++	.align	L1_CACHE_SHIFT + ENTRY(nommu_early_abort) + 	mov	r0, #0				@ clear r0, r1 (no FSR/FAR) + 	mov	r1, #0  | 
