diff options
author | Russell King <rmk+kernel@arm.linux.org.uk> | 2013-03-09 10:49:32 -0500 |
---|---|---|
committer | Russell King <rmk+kernel@arm.linux.org.uk> | 2013-03-09 10:49:32 -0500 |
commit | 73a09d212ec65b7068a283e6034fa05649d3d075 (patch) | |
tree | 07e08fb552afd3e0a239e103b9f9cf571593316b | |
parent | 6dbe51c251a327e012439c4772097a13df43c5b8 (diff) | |
parent | 6ebd4d038dbb626a43d87db3007e71f92f49d7b3 (diff) |
Merge branch 'for-next' of git://git.pengutronix.de/git/ukl/linux into devel-stable
Conflicts:
arch/arm/include/asm/cputype.h
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
-rw-r--r-- | arch/arm/Kconfig | 3 | ||||
-rw-r--r-- | arch/arm/include/asm/cp15.h | 16 | ||||
-rw-r--r-- | arch/arm/include/asm/cputype.h | 61 | ||||
-rw-r--r-- | arch/arm/include/asm/glue-df.h | 20 | ||||
-rw-r--r-- | arch/arm/kernel/head-common.S | 9 | ||||
-rw-r--r-- | arch/arm/kernel/head-nommu.S | 8 | ||||
-rw-r--r-- | arch/arm/kernel/setup.c | 2 | ||||
-rw-r--r-- | arch/arm/kernel/smp_scu.c | 2 | ||||
-rw-r--r-- | arch/arm/mach-omap2/id.c | 4 | ||||
-rw-r--r-- | arch/arm/mach-omap2/omap-smp.c | 2 | ||||
-rw-r--r-- | arch/arm/mm/Kconfig | 9 | ||||
-rw-r--r-- | arch/arm/mm/alignment.c | 2 | ||||
-rw-r--r-- | arch/arm/mm/mmu.c | 17 |
13 files changed, 115 insertions, 40 deletions
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index 5b714695b01b..dedf02b6f322 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig | |||
@@ -1684,8 +1684,9 @@ config SCHED_HRTICK | |||
1684 | def_bool HIGH_RES_TIMERS | 1684 | def_bool HIGH_RES_TIMERS |
1685 | 1685 | ||
1686 | config THUMB2_KERNEL | 1686 | config THUMB2_KERNEL |
1687 | bool "Compile the kernel in Thumb-2 mode" | 1687 | bool "Compile the kernel in Thumb-2 mode" if !CPU_THUMBONLY |
1688 | depends on CPU_V7 && !CPU_V6 && !CPU_V6K | 1688 | depends on CPU_V7 && !CPU_V6 && !CPU_V6K |
1689 | default y if CPU_THUMBONLY | ||
1689 | select AEABI | 1690 | select AEABI |
1690 | select ARM_ASM_UNIFIED | 1691 | select ARM_ASM_UNIFIED |
1691 | select ARM_UNWIND | 1692 | select ARM_UNWIND |
diff --git a/arch/arm/include/asm/cp15.h b/arch/arm/include/asm/cp15.h index 5ef4d8015a60..1f3262e99d81 100644 --- a/arch/arm/include/asm/cp15.h +++ b/arch/arm/include/asm/cp15.h | |||
@@ -42,6 +42,8 @@ | |||
42 | #define vectors_high() (0) | 42 | #define vectors_high() (0) |
43 | #endif | 43 | #endif |
44 | 44 | ||
45 | #ifdef CONFIG_CPU_CP15 | ||
46 | |||
45 | extern unsigned long cr_no_alignment; /* defined in entry-armv.S */ | 47 | extern unsigned long cr_no_alignment; /* defined in entry-armv.S */ |
46 | extern unsigned long cr_alignment; /* defined in entry-armv.S */ | 48 | extern unsigned long cr_alignment; /* defined in entry-armv.S */ |
47 | 49 | ||
@@ -82,6 +84,18 @@ static inline void set_copro_access(unsigned int val) | |||
82 | isb(); | 84 | isb(); |
83 | } | 85 | } |
84 | 86 | ||
85 | #endif | 87 | #else /* ifdef CONFIG_CPU_CP15 */ |
88 | |||
89 | /* | ||
90 | * cr_alignment and cr_no_alignment are tightly coupled to cp15 (at least in the | ||
91 | * minds of the developers). Yielding 0 for machines without a cp15 (and making | ||
92 | * it read-only) is fine for most cases and saves quite some #ifdeffery. | ||
93 | */ | ||
94 | #define cr_no_alignment UL(0) | ||
95 | #define cr_alignment UL(0) | ||
96 | |||
97 | #endif /* ifdef CONFIG_CPU_CP15 / else */ | ||
98 | |||
99 | #endif /* ifndef __ASSEMBLY__ */ | ||
86 | 100 | ||
87 | #endif | 101 | #endif |
diff --git a/arch/arm/include/asm/cputype.h b/arch/arm/include/asm/cputype.h index ad41ec2471e8..7652712d1d14 100644 --- a/arch/arm/include/asm/cputype.h +++ b/arch/arm/include/asm/cputype.h | |||
@@ -38,6 +38,24 @@ | |||
38 | #define MPIDR_AFFINITY_LEVEL(mpidr, level) \ | 38 | #define MPIDR_AFFINITY_LEVEL(mpidr, level) \ |
39 | ((mpidr >> (MPIDR_LEVEL_BITS * level)) & MPIDR_LEVEL_MASK) | 39 | ((mpidr >> (MPIDR_LEVEL_BITS * level)) & MPIDR_LEVEL_MASK) |
40 | 40 | ||
41 | #define ARM_CPU_IMP_ARM 0x41 | ||
42 | #define ARM_CPU_IMP_INTEL 0x69 | ||
43 | |||
44 | #define ARM_CPU_PART_ARM1136 0xB360 | ||
45 | #define ARM_CPU_PART_ARM1156 0xB560 | ||
46 | #define ARM_CPU_PART_ARM1176 0xB760 | ||
47 | #define ARM_CPU_PART_ARM11MPCORE 0xB020 | ||
48 | #define ARM_CPU_PART_CORTEX_A8 0xC080 | ||
49 | #define ARM_CPU_PART_CORTEX_A9 0xC090 | ||
50 | #define ARM_CPU_PART_CORTEX_A5 0xC050 | ||
51 | #define ARM_CPU_PART_CORTEX_A15 0xC0F0 | ||
52 | #define ARM_CPU_PART_CORTEX_A7 0xC070 | ||
53 | |||
54 | #define ARM_CPU_XSCALE_ARCH_MASK 0xe000 | ||
55 | #define ARM_CPU_XSCALE_ARCH_V1 0x2000 | ||
56 | #define ARM_CPU_XSCALE_ARCH_V2 0x4000 | ||
57 | #define ARM_CPU_XSCALE_ARCH_V3 0x6000 | ||
58 | |||
41 | extern unsigned int processor_id; | 59 | extern unsigned int processor_id; |
42 | 60 | ||
43 | #ifdef CONFIG_CPU_CP15 | 61 | #ifdef CONFIG_CPU_CP15 |
@@ -50,6 +68,7 @@ extern unsigned int processor_id; | |||
50 | : "cc"); \ | 68 | : "cc"); \ |
51 | __val; \ | 69 | __val; \ |
52 | }) | 70 | }) |
71 | |||
53 | #define read_cpuid_ext(ext_reg) \ | 72 | #define read_cpuid_ext(ext_reg) \ |
54 | ({ \ | 73 | ({ \ |
55 | unsigned int __val; \ | 74 | unsigned int __val; \ |
@@ -59,29 +78,24 @@ extern unsigned int processor_id; | |||
59 | : "cc"); \ | 78 | : "cc"); \ |
60 | __val; \ | 79 | __val; \ |
61 | }) | 80 | }) |
62 | #else | ||
63 | #define read_cpuid(reg) (processor_id) | ||
64 | #define read_cpuid_ext(reg) 0 | ||
65 | #endif | ||
66 | 81 | ||
67 | #define ARM_CPU_IMP_ARM 0x41 | 82 | #else /* ifdef CONFIG_CPU_CP15 */ |
68 | #define ARM_CPU_IMP_INTEL 0x69 | ||
69 | 83 | ||
70 | #define ARM_CPU_PART_ARM1136 0xB360 | 84 | /* |
71 | #define ARM_CPU_PART_ARM1156 0xB560 | 85 | * read_cpuid and read_cpuid_ext should only ever be called on machines that |
72 | #define ARM_CPU_PART_ARM1176 0xB760 | 86 | * have cp15 so warn on other usages. |
73 | #define ARM_CPU_PART_ARM11MPCORE 0xB020 | 87 | */ |
74 | #define ARM_CPU_PART_CORTEX_A8 0xC080 | 88 | #define read_cpuid(reg) \ |
75 | #define ARM_CPU_PART_CORTEX_A9 0xC090 | 89 | ({ \ |
76 | #define ARM_CPU_PART_CORTEX_A5 0xC050 | 90 | WARN_ON_ONCE(1); \ |
77 | #define ARM_CPU_PART_CORTEX_A15 0xC0F0 | 91 | 0; \ |
78 | #define ARM_CPU_PART_CORTEX_A7 0xC070 | 92 | }) |
79 | 93 | ||
80 | #define ARM_CPU_XSCALE_ARCH_MASK 0xe000 | 94 | #define read_cpuid_ext(reg) read_cpuid(reg) |
81 | #define ARM_CPU_XSCALE_ARCH_V1 0x2000 | 95 | |
82 | #define ARM_CPU_XSCALE_ARCH_V2 0x4000 | 96 | #endif /* ifdef CONFIG_CPU_CP15 / else */ |
83 | #define ARM_CPU_XSCALE_ARCH_V3 0x6000 | ||
84 | 97 | ||
98 | #ifdef CONFIG_CPU_CP15 | ||
85 | /* | 99 | /* |
86 | * The CPU ID never changes at run time, so we might as well tell the | 100 | * The CPU ID never changes at run time, so we might as well tell the |
87 | * compiler that it's constant. Use this function to read the CPU ID | 101 | * compiler that it's constant. Use this function to read the CPU ID |
@@ -92,6 +106,15 @@ static inline unsigned int __attribute_const__ read_cpuid_id(void) | |||
92 | return read_cpuid(CPUID_ID); | 106 | return read_cpuid(CPUID_ID); |
93 | } | 107 | } |
94 | 108 | ||
109 | #else /* ifdef CONFIG_CPU_CP15 */ | ||
110 | |||
111 | static inline unsigned int __attribute_const__ read_cpuid_id(void) | ||
112 | { | ||
113 | return processor_id; | ||
114 | } | ||
115 | |||
116 | #endif /* ifdef CONFIG_CPU_CP15 / else */ | ||
117 | |||
95 | static inline unsigned int __attribute_const__ read_cpuid_implementor(void) | 118 | static inline unsigned int __attribute_const__ read_cpuid_implementor(void) |
96 | { | 119 | { |
97 | return (read_cpuid_id() & 0xFF000000) >> 24; | 120 | return (read_cpuid_id() & 0xFF000000) >> 24; |
diff --git a/arch/arm/include/asm/glue-df.h b/arch/arm/include/asm/glue-df.h index 8cacbcda76da..b6e9f2c108b5 100644 --- a/arch/arm/include/asm/glue-df.h +++ b/arch/arm/include/asm/glue-df.h | |||
@@ -18,12 +18,12 @@ | |||
18 | * ================ | 18 | * ================ |
19 | * | 19 | * |
20 | * We have the following to choose from: | 20 | * We have the following to choose from: |
21 | * arm6 - ARM6 style | ||
22 | * arm7 - ARM7 style | 21 | * arm7 - ARM7 style |
23 | * v4_early - ARMv4 without Thumb early abort handler | 22 | * v4_early - ARMv4 without Thumb early abort handler |
24 | * v4t_late - ARMv4 with Thumb late abort handler | 23 | * v4t_late - ARMv4 with Thumb late abort handler |
25 | * v4t_early - ARMv4 with Thumb early abort handler | 24 | * v4t_early - ARMv4 with Thumb early abort handler |
26 | * v5tej_early - ARMv5 with Thumb and Java early abort handler | 25 | * v5t_early - ARMv5 with Thumb early abort handler |
26 | * v5tj_early - ARMv5 with Thumb and Java early abort handler | ||
27 | * xscale - ARMv5 with Thumb with Xscale extensions | 27 | * xscale - ARMv5 with Thumb with Xscale extensions |
28 | * v6_early - ARMv6 generic early abort handler | 28 | * v6_early - ARMv6 generic early abort handler |
29 | * v7_early - ARMv7 generic early abort handler | 29 | * v7_early - ARMv7 generic early abort handler |
@@ -39,19 +39,19 @@ | |||
39 | # endif | 39 | # endif |
40 | #endif | 40 | #endif |
41 | 41 | ||
42 | #ifdef CONFIG_CPU_ABRT_LV4T | 42 | #ifdef CONFIG_CPU_ABRT_EV4 |
43 | # ifdef CPU_DABORT_HANDLER | 43 | # ifdef CPU_DABORT_HANDLER |
44 | # define MULTI_DABORT 1 | 44 | # define MULTI_DABORT 1 |
45 | # else | 45 | # else |
46 | # define CPU_DABORT_HANDLER v4t_late_abort | 46 | # define CPU_DABORT_HANDLER v4_early_abort |
47 | # endif | 47 | # endif |
48 | #endif | 48 | #endif |
49 | 49 | ||
50 | #ifdef CONFIG_CPU_ABRT_EV4 | 50 | #ifdef CONFIG_CPU_ABRT_LV4T |
51 | # ifdef CPU_DABORT_HANDLER | 51 | # ifdef CPU_DABORT_HANDLER |
52 | # define MULTI_DABORT 1 | 52 | # define MULTI_DABORT 1 |
53 | # else | 53 | # else |
54 | # define CPU_DABORT_HANDLER v4_early_abort | 54 | # define CPU_DABORT_HANDLER v4t_late_abort |
55 | # endif | 55 | # endif |
56 | #endif | 56 | #endif |
57 | 57 | ||
@@ -63,19 +63,19 @@ | |||
63 | # endif | 63 | # endif |
64 | #endif | 64 | #endif |
65 | 65 | ||
66 | #ifdef CONFIG_CPU_ABRT_EV5TJ | 66 | #ifdef CONFIG_CPU_ABRT_EV5T |
67 | # ifdef CPU_DABORT_HANDLER | 67 | # ifdef CPU_DABORT_HANDLER |
68 | # define MULTI_DABORT 1 | 68 | # define MULTI_DABORT 1 |
69 | # else | 69 | # else |
70 | # define CPU_DABORT_HANDLER v5tj_early_abort | 70 | # define CPU_DABORT_HANDLER v5t_early_abort |
71 | # endif | 71 | # endif |
72 | #endif | 72 | #endif |
73 | 73 | ||
74 | #ifdef CONFIG_CPU_ABRT_EV5T | 74 | #ifdef CONFIG_CPU_ABRT_EV5TJ |
75 | # ifdef CPU_DABORT_HANDLER | 75 | # ifdef CPU_DABORT_HANDLER |
76 | # define MULTI_DABORT 1 | 76 | # define MULTI_DABORT 1 |
77 | # else | 77 | # else |
78 | # define CPU_DABORT_HANDLER v5t_early_abort | 78 | # define CPU_DABORT_HANDLER v5tj_early_abort |
79 | # endif | 79 | # endif |
80 | #endif | 80 | #endif |
81 | 81 | ||
diff --git a/arch/arm/kernel/head-common.S b/arch/arm/kernel/head-common.S index 854bd22380d3..5b391a689b47 100644 --- a/arch/arm/kernel/head-common.S +++ b/arch/arm/kernel/head-common.S | |||
@@ -98,8 +98,9 @@ __mmap_switched: | |||
98 | str r9, [r4] @ Save processor ID | 98 | str r9, [r4] @ Save processor ID |
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 | bic r4, r0, #CR_A @ Clear 'A' bit | 101 | cmp r7, #0 |
102 | stmia r7, {r0, r4} @ Save control register values | 102 | bicne r4, r0, #CR_A @ Clear 'A' bit |
103 | stmneia r7, {r0, r4} @ Save control register values | ||
103 | b start_kernel | 104 | b start_kernel |
104 | ENDPROC(__mmap_switched) | 105 | ENDPROC(__mmap_switched) |
105 | 106 | ||
@@ -113,7 +114,11 @@ __mmap_switched_data: | |||
113 | .long processor_id @ r4 | 114 | .long processor_id @ r4 |
114 | .long __machine_arch_type @ r5 | 115 | .long __machine_arch_type @ r5 |
115 | .long __atags_pointer @ r6 | 116 | .long __atags_pointer @ r6 |
117 | #ifdef CONFIG_CPU_CP15 | ||
116 | .long cr_alignment @ r7 | 118 | .long cr_alignment @ r7 |
119 | #else | ||
120 | .long 0 @ r7 | ||
121 | #endif | ||
117 | .long init_thread_union + THREAD_START_SP @ sp | 122 | .long init_thread_union + THREAD_START_SP @ sp |
118 | .size __mmap_switched_data, . - __mmap_switched_data | 123 | .size __mmap_switched_data, . - __mmap_switched_data |
119 | 124 | ||
diff --git a/arch/arm/kernel/head-nommu.S b/arch/arm/kernel/head-nommu.S index 2c228a07e58c..6a2e09c952c7 100644 --- a/arch/arm/kernel/head-nommu.S +++ b/arch/arm/kernel/head-nommu.S | |||
@@ -32,15 +32,21 @@ | |||
32 | * numbers for r1. | 32 | * numbers for r1. |
33 | * | 33 | * |
34 | */ | 34 | */ |
35 | .arm | ||
36 | 35 | ||
37 | __HEAD | 36 | __HEAD |
37 | |||
38 | #ifdef CONFIG_CPU_THUMBONLY | ||
39 | .thumb | ||
40 | ENTRY(stext) | ||
41 | #else | ||
42 | .arm | ||
38 | ENTRY(stext) | 43 | ENTRY(stext) |
39 | 44 | ||
40 | THUMB( adr r9, BSYM(1f) ) @ Kernel is always entered in ARM. | 45 | THUMB( adr r9, BSYM(1f) ) @ Kernel is always entered in ARM. |
41 | THUMB( bx r9 ) @ If this is a Thumb-2 kernel, | 46 | THUMB( bx r9 ) @ If this is a Thumb-2 kernel, |
42 | THUMB( .thumb ) @ switch to Thumb now. | 47 | THUMB( .thumb ) @ switch to Thumb now. |
43 | THUMB(1: ) | 48 | THUMB(1: ) |
49 | #endif | ||
44 | 50 | ||
45 | setmode PSR_F_BIT | PSR_I_BIT | SVC_MODE, r9 @ ensure svc mode | 51 | setmode PSR_F_BIT | PSR_I_BIT | SVC_MODE, r9 @ ensure svc mode |
46 | @ and irqs disabled | 52 | @ and irqs disabled |
diff --git a/arch/arm/kernel/setup.c b/arch/arm/kernel/setup.c index 3f6cbb2e3eda..1cc9e1796415 100644 --- a/arch/arm/kernel/setup.c +++ b/arch/arm/kernel/setup.c | |||
@@ -291,10 +291,10 @@ static int cpu_has_aliasing_icache(unsigned int arch) | |||
291 | 291 | ||
292 | static void __init cacheid_init(void) | 292 | static void __init cacheid_init(void) |
293 | { | 293 | { |
294 | unsigned int cachetype = read_cpuid_cachetype(); | ||
295 | unsigned int arch = cpu_architecture(); | 294 | unsigned int arch = cpu_architecture(); |
296 | 295 | ||
297 | if (arch >= CPU_ARCH_ARMv6) { | 296 | if (arch >= CPU_ARCH_ARMv6) { |
297 | unsigned int cachetype = read_cpuid_cachetype(); | ||
298 | if ((cachetype & (7 << 29)) == 4 << 29) { | 298 | if ((cachetype & (7 << 29)) == 4 << 29) { |
299 | /* ARMv7 register format */ | 299 | /* ARMv7 register format */ |
300 | arch = CPU_ARCH_ARMv7; | 300 | arch = CPU_ARCH_ARMv7; |
diff --git a/arch/arm/kernel/smp_scu.c b/arch/arm/kernel/smp_scu.c index 45eac87ed66a..5bc1a63284e3 100644 --- a/arch/arm/kernel/smp_scu.c +++ b/arch/arm/kernel/smp_scu.c | |||
@@ -41,7 +41,7 @@ void scu_enable(void __iomem *scu_base) | |||
41 | 41 | ||
42 | #ifdef CONFIG_ARM_ERRATA_764369 | 42 | #ifdef CONFIG_ARM_ERRATA_764369 |
43 | /* Cortex-A9 only */ | 43 | /* Cortex-A9 only */ |
44 | if ((read_cpuid(CPUID_ID) & 0xff0ffff0) == 0x410fc090) { | 44 | if ((read_cpuid_id() & 0xff0ffff0) == 0x410fc090) { |
45 | scu_ctrl = __raw_readl(scu_base + 0x30); | 45 | scu_ctrl = __raw_readl(scu_base + 0x30); |
46 | if (!(scu_ctrl & 1)) | 46 | if (!(scu_ctrl & 1)) |
47 | __raw_writel(scu_ctrl | 0x1, scu_base + 0x30); | 47 | __raw_writel(scu_ctrl | 0x1, scu_base + 0x30); |
diff --git a/arch/arm/mach-omap2/id.c b/arch/arm/mach-omap2/id.c index 8a68f1ec66b9..577298ed5a44 100644 --- a/arch/arm/mach-omap2/id.c +++ b/arch/arm/mach-omap2/id.c | |||
@@ -300,7 +300,7 @@ void __init omap3xxx_check_revision(void) | |||
300 | * If the processor type is Cortex-A8 and the revision is 0x0 | 300 | * If the processor type is Cortex-A8 and the revision is 0x0 |
301 | * it means its Cortex r0p0 which is 3430 ES1.0. | 301 | * it means its Cortex r0p0 which is 3430 ES1.0. |
302 | */ | 302 | */ |
303 | cpuid = read_cpuid(CPUID_ID); | 303 | cpuid = read_cpuid_id(); |
304 | if ((((cpuid >> 4) & 0xfff) == 0xc08) && ((cpuid & 0xf) == 0x0)) { | 304 | if ((((cpuid >> 4) & 0xfff) == 0xc08) && ((cpuid & 0xf) == 0x0)) { |
305 | omap_revision = OMAP3430_REV_ES1_0; | 305 | omap_revision = OMAP3430_REV_ES1_0; |
306 | cpu_rev = "1.0"; | 306 | cpu_rev = "1.0"; |
@@ -460,7 +460,7 @@ void __init omap4xxx_check_revision(void) | |||
460 | * Use ARM register to detect the correct ES version | 460 | * Use ARM register to detect the correct ES version |
461 | */ | 461 | */ |
462 | if (!rev && (hawkeye != 0xb94e) && (hawkeye != 0xb975)) { | 462 | if (!rev && (hawkeye != 0xb94e) && (hawkeye != 0xb975)) { |
463 | idcode = read_cpuid(CPUID_ID); | 463 | idcode = read_cpuid_id(); |
464 | rev = (idcode & 0xf) - 1; | 464 | rev = (idcode & 0xf) - 1; |
465 | } | 465 | } |
466 | 466 | ||
diff --git a/arch/arm/mach-omap2/omap-smp.c b/arch/arm/mach-omap2/omap-smp.c index d9727218dd0a..7f5626d8fd3e 100644 --- a/arch/arm/mach-omap2/omap-smp.c +++ b/arch/arm/mach-omap2/omap-smp.c | |||
@@ -209,7 +209,7 @@ static void __init omap4_smp_init_cpus(void) | |||
209 | unsigned int i = 0, ncores = 1, cpu_id; | 209 | unsigned int i = 0, ncores = 1, cpu_id; |
210 | 210 | ||
211 | /* Use ARM cpuid check here, as SoC detection will not work so early */ | 211 | /* Use ARM cpuid check here, as SoC detection will not work so early */ |
212 | cpu_id = read_cpuid(CPUID_ID) & CPU_MASK; | 212 | cpu_id = read_cpuid_id() & CPU_MASK; |
213 | if (cpu_id == CPU_CORTEX_A9) { | 213 | if (cpu_id == CPU_CORTEX_A9) { |
214 | /* | 214 | /* |
215 | * Currently we can't call ioremap here because | 215 | * Currently we can't call ioremap here because |
diff --git a/arch/arm/mm/Kconfig b/arch/arm/mm/Kconfig index 025d17328730..cb812a13e299 100644 --- a/arch/arm/mm/Kconfig +++ b/arch/arm/mm/Kconfig | |||
@@ -397,6 +397,13 @@ config CPU_V7 | |||
397 | select CPU_PABRT_V7 | 397 | select CPU_PABRT_V7 |
398 | select CPU_TLB_V7 if MMU | 398 | select CPU_TLB_V7 if MMU |
399 | 399 | ||
400 | config CPU_THUMBONLY | ||
401 | bool | ||
402 | # There are no CPUs available with MMU that don't implement an ARM ISA: | ||
403 | depends on !MMU | ||
404 | help | ||
405 | Select this if your CPU doesn't support the 32 bit ARM instructions. | ||
406 | |||
400 | # Figure out what processor architecture version we should be using. | 407 | # Figure out what processor architecture version we should be using. |
401 | # This defines the compiler instruction set which depends on the machine type. | 408 | # This defines the compiler instruction set which depends on the machine type. |
402 | config CPU_32v3 | 409 | config CPU_32v3 |
@@ -608,7 +615,7 @@ config ARCH_DMA_ADDR_T_64BIT | |||
608 | bool | 615 | bool |
609 | 616 | ||
610 | config ARM_THUMB | 617 | config ARM_THUMB |
611 | bool "Support Thumb user binaries" | 618 | bool "Support Thumb user binaries" if !CPU_THUMBONLY |
612 | depends on CPU_ARM720T || CPU_ARM740T || CPU_ARM920T || CPU_ARM922T || CPU_ARM925T || CPU_ARM926T || CPU_ARM940T || CPU_ARM946E || CPU_ARM1020 || CPU_ARM1020E || CPU_ARM1022 || CPU_ARM1026 || CPU_XSCALE || CPU_XSC3 || CPU_MOHAWK || CPU_V6 || CPU_V6K || CPU_V7 || CPU_FEROCEON | 619 | depends on CPU_ARM720T || CPU_ARM740T || CPU_ARM920T || CPU_ARM922T || CPU_ARM925T || CPU_ARM926T || CPU_ARM940T || CPU_ARM946E || CPU_ARM1020 || CPU_ARM1020E || CPU_ARM1022 || CPU_ARM1026 || CPU_XSCALE || CPU_XSC3 || CPU_MOHAWK || CPU_V6 || CPU_V6K || CPU_V7 || CPU_FEROCEON |
613 | default y | 620 | default y |
614 | help | 621 | help |
diff --git a/arch/arm/mm/alignment.c b/arch/arm/mm/alignment.c index db26e2e543f4..6f4585b89078 100644 --- a/arch/arm/mm/alignment.c +++ b/arch/arm/mm/alignment.c | |||
@@ -961,12 +961,14 @@ static int __init alignment_init(void) | |||
961 | return -ENOMEM; | 961 | return -ENOMEM; |
962 | #endif | 962 | #endif |
963 | 963 | ||
964 | #ifdef CONFIG_CPU_CP15 | ||
964 | if (cpu_is_v6_unaligned()) { | 965 | if (cpu_is_v6_unaligned()) { |
965 | cr_alignment &= ~CR_A; | 966 | cr_alignment &= ~CR_A; |
966 | cr_no_alignment &= ~CR_A; | 967 | cr_no_alignment &= ~CR_A; |
967 | set_cr(cr_alignment); | 968 | set_cr(cr_alignment); |
968 | ai_usermode = safe_usermode(ai_usermode, false); | 969 | ai_usermode = safe_usermode(ai_usermode, false); |
969 | } | 970 | } |
971 | #endif | ||
970 | 972 | ||
971 | hook_fault_code(FAULT_CODE_ALIGNMENT, do_alignment, SIGBUS, BUS_ADRALN, | 973 | hook_fault_code(FAULT_CODE_ALIGNMENT, do_alignment, SIGBUS, BUS_ADRALN, |
972 | "alignment exception"); | 974 | "alignment exception"); |
diff --git a/arch/arm/mm/mmu.c b/arch/arm/mm/mmu.c index e95a996ab78f..c6d45c87540e 100644 --- a/arch/arm/mm/mmu.c +++ b/arch/arm/mm/mmu.c | |||
@@ -112,6 +112,7 @@ static struct cachepolicy cache_policies[] __initdata = { | |||
112 | } | 112 | } |
113 | }; | 113 | }; |
114 | 114 | ||
115 | #ifdef CONFIG_CPU_CP15 | ||
115 | /* | 116 | /* |
116 | * These are useful for identifying cache coherency | 117 | * These are useful for identifying cache coherency |
117 | * problems by allowing the cache or the cache and | 118 | * problems by allowing the cache or the cache and |
@@ -210,6 +211,22 @@ void adjust_cr(unsigned long mask, unsigned long set) | |||
210 | } | 211 | } |
211 | #endif | 212 | #endif |
212 | 213 | ||
214 | #else /* ifdef CONFIG_CPU_CP15 */ | ||
215 | |||
216 | static int __init early_cachepolicy(char *p) | ||
217 | { | ||
218 | pr_warning("cachepolicy kernel parameter not supported without cp15\n"); | ||
219 | } | ||
220 | early_param("cachepolicy", early_cachepolicy); | ||
221 | |||
222 | static int __init noalign_setup(char *__unused) | ||
223 | { | ||
224 | pr_warning("noalign kernel parameter not supported without cp15\n"); | ||
225 | } | ||
226 | __setup("noalign", noalign_setup); | ||
227 | |||
228 | #endif /* ifdef CONFIG_CPU_CP15 / else */ | ||
229 | |||
213 | #define PROT_PTE_DEVICE L_PTE_PRESENT|L_PTE_YOUNG|L_PTE_DIRTY|L_PTE_XN | 230 | #define PROT_PTE_DEVICE L_PTE_PRESENT|L_PTE_YOUNG|L_PTE_DIRTY|L_PTE_XN |
214 | #define PROT_SECT_DEVICE PMD_TYPE_SECT|PMD_SECT_AP_WRITE | 231 | #define PROT_SECT_DEVICE PMD_TYPE_SECT|PMD_SECT_AP_WRITE |
215 | 232 | ||