aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRussell King <rmk+kernel@arm.linux.org.uk>2014-04-13 14:43:26 -0400
committerRussell King <rmk+kernel@arm.linux.org.uk>2014-06-02 04:20:18 -0400
commit0aeb3408ca9773283b0ae63771c4b17f39e204df (patch)
treecfd151a26e9c3b2a4859f983f2db8a345630e269
parent3cb099f0894c06359dd6495dec81359591d06207 (diff)
ARM: remove global cr_no_alignment
cr_no_alignment is really only used by the alignment code. Since we no longer change the setting of cr_alignment after boot, we can localise this to alignment.c Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
-rw-r--r--arch/arm/include/asm/cp15.h8
-rw-r--r--arch/arm/kernel/entry-armv.S3
-rw-r--r--arch/arm/kernel/head-common.S3
-rw-r--r--arch/arm/mm/alignment.c3
-rw-r--r--arch/arm/mm/init.c1
5 files changed, 7 insertions, 11 deletions
diff --git a/arch/arm/include/asm/cp15.h b/arch/arm/include/asm/cp15.h
index ebae45d7f017..c3f11524f10c 100644
--- a/arch/arm/include/asm/cp15.h
+++ b/arch/arm/include/asm/cp15.h
@@ -49,7 +49,6 @@
49 49
50#ifdef CONFIG_CPU_CP15 50#ifdef CONFIG_CPU_CP15
51 51
52extern unsigned long cr_no_alignment; /* defined in entry-armv.S */
53extern unsigned long cr_alignment; /* defined in entry-armv.S */ 52extern unsigned long cr_alignment; /* defined in entry-armv.S */
54 53
55static inline unsigned long get_cr(void) 54static inline unsigned long get_cr(void)
@@ -102,11 +101,10 @@ static inline void set_copro_access(unsigned int val)
102#else /* ifdef CONFIG_CPU_CP15 */ 101#else /* ifdef CONFIG_CPU_CP15 */
103 102
104/* 103/*
105 * cr_alignment and cr_no_alignment are tightly coupled to cp15 (at least in the 104 * cr_alignment is tightly coupled to cp15 (at least in the minds of the
106 * minds of the developers). Yielding 0 for machines without a cp15 (and making 105 * developers). Yielding 0 for machines without a cp15 (and making it
107 * it read-only) is fine for most cases and saves quite some #ifdeffery. 106 * read-only) is fine for most cases and saves quite some #ifdeffery.
108 */ 107 */
109#define cr_no_alignment UL(0)
110#define cr_alignment UL(0) 108#define cr_alignment UL(0)
111 109
112static inline unsigned long get_cr(void) 110static inline unsigned long get_cr(void)
diff --git a/arch/arm/kernel/entry-armv.S b/arch/arm/kernel/entry-armv.S
index 1879e8dd2acc..cac5b88216e6 100644
--- a/arch/arm/kernel/entry-armv.S
+++ b/arch/arm/kernel/entry-armv.S
@@ -1143,11 +1143,8 @@ __vectors_start:
1143 .data 1143 .data
1144 1144
1145 .globl cr_alignment 1145 .globl cr_alignment
1146 .globl cr_no_alignment
1147cr_alignment: 1146cr_alignment:
1148 .space 4 1147 .space 4
1149cr_no_alignment:
1150 .space 4
1151 1148
1152#ifdef CONFIG_MULTI_IRQ_HANDLER 1149#ifdef CONFIG_MULTI_IRQ_HANDLER
1153 .globl handle_arch_irq 1150 .globl handle_arch_irq
diff --git a/arch/arm/kernel/head-common.S b/arch/arm/kernel/head-common.S
index c96ecacb2021..572a38335c96 100644
--- a/arch/arm/kernel/head-common.S
+++ b/arch/arm/kernel/head-common.S
@@ -99,8 +99,7 @@ __mmap_switched:
99 str r1, [r5] @ Save machine type 99 str r1, [r5] @ Save machine type
100 str r2, [r6] @ Save atags pointer 100 str r2, [r6] @ Save atags pointer
101 cmp r7, #0 101 cmp r7, #0
102 bicne r4, r0, #CR_A @ Clear 'A' bit 102 strne r0, [r7] @ Save control register values
103 stmneia r7, {r0, r4} @ Save control register values
104 b start_kernel 103 b start_kernel
105ENDPROC(__mmap_switched) 104ENDPROC(__mmap_switched)
106 105
diff --git a/arch/arm/mm/alignment.c b/arch/arm/mm/alignment.c
index 054e995d2f5b..b8cb1a2688a0 100644
--- a/arch/arm/mm/alignment.c
+++ b/arch/arm/mm/alignment.c
@@ -82,6 +82,7 @@ static unsigned long ai_word;
82static unsigned long ai_dword; 82static unsigned long ai_dword;
83static unsigned long ai_multi; 83static unsigned long ai_multi;
84static int ai_usermode; 84static int ai_usermode;
85static unsigned long cr_no_alignment;
85 86
86core_param(alignment, ai_usermode, int, 0600); 87core_param(alignment, ai_usermode, int, 0600);
87 88
@@ -979,6 +980,8 @@ static int __init alignment_init(void)
979 ai_usermode = safe_usermode(ai_usermode, false); 980 ai_usermode = safe_usermode(ai_usermode, false);
980 } 981 }
981 982
983 cr_no_alignment = get_cr() & ~CR_A;
984
982 hook_fault_code(FAULT_CODE_ALIGNMENT, do_alignment, SIGBUS, BUS_ADRALN, 985 hook_fault_code(FAULT_CODE_ALIGNMENT, do_alignment, SIGBUS, BUS_ADRALN,
983 "alignment exception"); 986 "alignment exception");
984 987
diff --git a/arch/arm/mm/init.c b/arch/arm/mm/init.c
index 94332b1ad4bc..13ce33e096b5 100644
--- a/arch/arm/mm/init.c
+++ b/arch/arm/mm/init.c
@@ -40,7 +40,6 @@
40#ifdef CONFIG_CPU_CP15_MMU 40#ifdef CONFIG_CPU_CP15_MMU
41unsigned long __init __clear_cr(unsigned long mask) 41unsigned long __init __clear_cr(unsigned long mask)
42{ 42{
43 cr_no_alignment = cr_no_alignment & ~mask;
44 cr_alignment = cr_alignment & ~mask; 43 cr_alignment = cr_alignment & ~mask;
45 return cr_alignment; 44 return cr_alignment;
46} 45}