diff options
Diffstat (limited to 'arch/arm/mm')
-rw-r--r-- | arch/arm/mm/Kconfig | 3 | ||||
-rw-r--r-- | arch/arm/mm/cache-feroceon-l2.c | 4 | ||||
-rw-r--r-- | arch/arm/mm/dma-mapping.c | 3 | ||||
-rw-r--r-- | arch/arm/mm/mmu.c | 10 | ||||
-rw-r--r-- | arch/arm/mm/proc-macros.S | 19 | ||||
-rw-r--r-- | arch/arm/mm/proc-v7-2level.S | 7 | ||||
-rw-r--r-- | arch/arm/mm/proc-v7.S | 11 |
7 files changed, 31 insertions, 26 deletions
diff --git a/arch/arm/mm/Kconfig b/arch/arm/mm/Kconfig index 1f8fed94c2a4..ca8ecdee47d8 100644 --- a/arch/arm/mm/Kconfig +++ b/arch/arm/mm/Kconfig | |||
@@ -446,7 +446,6 @@ config CPU_32v5 | |||
446 | 446 | ||
447 | config CPU_32v6 | 447 | config CPU_32v6 |
448 | bool | 448 | bool |
449 | select CPU_USE_DOMAINS if CPU_V6 && MMU | ||
450 | select TLS_REG_EMUL if !CPU_32v6K && !MMU | 449 | select TLS_REG_EMUL if !CPU_32v6K && !MMU |
451 | 450 | ||
452 | config CPU_32v6K | 451 | config CPU_32v6K |
@@ -671,7 +670,7 @@ config ARM_VIRT_EXT | |||
671 | 670 | ||
672 | config SWP_EMULATE | 671 | config SWP_EMULATE |
673 | bool "Emulate SWP/SWPB instructions" | 672 | bool "Emulate SWP/SWPB instructions" |
674 | depends on !CPU_USE_DOMAINS && CPU_V7 | 673 | depends on CPU_V7 |
675 | default y if SMP | 674 | default y if SMP |
676 | select HAVE_PROC_CPU if PROC_FS | 675 | select HAVE_PROC_CPU if PROC_FS |
677 | help | 676 | help |
diff --git a/arch/arm/mm/cache-feroceon-l2.c b/arch/arm/mm/cache-feroceon-l2.c index 48bc3c0a87ce..aae891820f8f 100644 --- a/arch/arm/mm/cache-feroceon-l2.c +++ b/arch/arm/mm/cache-feroceon-l2.c | |||
@@ -331,7 +331,9 @@ static void __init enable_l2(void) | |||
331 | enable_icache(); | 331 | enable_icache(); |
332 | if (d) | 332 | if (d) |
333 | enable_dcache(); | 333 | enable_dcache(); |
334 | } | 334 | } else |
335 | pr_err(FW_BUG | ||
336 | "Feroceon L2: bootloader left the L2 cache on!\n"); | ||
335 | } | 337 | } |
336 | 338 | ||
337 | void __init feroceon_l2_init(int __l2_wt_override) | 339 | void __init feroceon_l2_init(int __l2_wt_override) |
diff --git a/arch/arm/mm/dma-mapping.c b/arch/arm/mm/dma-mapping.c index 11b3914660d2..c9c6acdf90cc 100644 --- a/arch/arm/mm/dma-mapping.c +++ b/arch/arm/mm/dma-mapping.c | |||
@@ -284,9 +284,6 @@ static void __dma_free_buffer(struct page *page, size_t size) | |||
284 | } | 284 | } |
285 | 285 | ||
286 | #ifdef CONFIG_MMU | 286 | #ifdef CONFIG_MMU |
287 | #ifdef CONFIG_HUGETLB_PAGE | ||
288 | #warning ARM Coherent DMA allocator does not (yet) support huge TLB | ||
289 | #endif | ||
290 | 287 | ||
291 | static void *__alloc_from_contiguous(struct device *dev, size_t size, | 288 | static void *__alloc_from_contiguous(struct device *dev, size_t size, |
292 | pgprot_t prot, struct page **ret_page, | 289 | pgprot_t prot, struct page **ret_page, |
diff --git a/arch/arm/mm/mmu.c b/arch/arm/mm/mmu.c index a623cb3ad012..b68c6b22e1c8 100644 --- a/arch/arm/mm/mmu.c +++ b/arch/arm/mm/mmu.c | |||
@@ -516,6 +516,16 @@ static void __init build_mem_type_table(void) | |||
516 | s2_device_pgprot = mem_types[MT_DEVICE].prot_pte_s2; | 516 | s2_device_pgprot = mem_types[MT_DEVICE].prot_pte_s2; |
517 | 517 | ||
518 | /* | 518 | /* |
519 | * We don't use domains on ARMv6 (since this causes problems with | ||
520 | * v6/v7 kernels), so we must use a separate memory type for user | ||
521 | * r/o, kernel r/w to map the vectors page. | ||
522 | */ | ||
523 | #ifndef CONFIG_ARM_LPAE | ||
524 | if (cpu_arch == CPU_ARCH_ARMv6) | ||
525 | vecs_pgprot |= L_PTE_MT_VECTORS; | ||
526 | #endif | ||
527 | |||
528 | /* | ||
519 | * ARMv6 and above have extended page tables. | 529 | * ARMv6 and above have extended page tables. |
520 | */ | 530 | */ |
521 | if (cpu_arch >= CPU_ARCH_ARMv6 && (cr & CR_XP)) { | 531 | if (cpu_arch >= CPU_ARCH_ARMv6 && (cr & CR_XP)) { |
diff --git a/arch/arm/mm/proc-macros.S b/arch/arm/mm/proc-macros.S index e3c48a3fe063..ee1d80593958 100644 --- a/arch/arm/mm/proc-macros.S +++ b/arch/arm/mm/proc-macros.S | |||
@@ -112,13 +112,9 @@ | |||
112 | * 100x 1 0 1 r/o no acc | 112 | * 100x 1 0 1 r/o no acc |
113 | * 10x0 1 0 1 r/o no acc | 113 | * 10x0 1 0 1 r/o no acc |
114 | * 1011 0 0 1 r/w no acc | 114 | * 1011 0 0 1 r/w no acc |
115 | * 110x 0 1 0 r/w r/o | ||
116 | * 11x0 0 1 0 r/w r/o | ||
117 | * 1111 0 1 1 r/w r/w | ||
118 | * | ||
119 | * If !CONFIG_CPU_USE_DOMAINS, the following permissions are changed: | ||
120 | * 110x 1 1 1 r/o r/o | 115 | * 110x 1 1 1 r/o r/o |
121 | * 11x0 1 1 1 r/o r/o | 116 | * 11x0 1 1 1 r/o r/o |
117 | * 1111 0 1 1 r/w r/w | ||
122 | */ | 118 | */ |
123 | .macro armv6_mt_table pfx | 119 | .macro armv6_mt_table pfx |
124 | \pfx\()_mt_table: | 120 | \pfx\()_mt_table: |
@@ -137,7 +133,7 @@ | |||
137 | .long PTE_EXT_TEX(2) @ L_PTE_MT_DEV_NONSHARED | 133 | .long PTE_EXT_TEX(2) @ L_PTE_MT_DEV_NONSHARED |
138 | .long 0x00 @ unused | 134 | .long 0x00 @ unused |
139 | .long 0x00 @ unused | 135 | .long 0x00 @ unused |
140 | .long 0x00 @ unused | 136 | .long PTE_CACHEABLE | PTE_BUFFERABLE | PTE_EXT_APX @ L_PTE_MT_VECTORS |
141 | .endm | 137 | .endm |
142 | 138 | ||
143 | .macro armv6_set_pte_ext pfx | 139 | .macro armv6_set_pte_ext pfx |
@@ -158,24 +154,21 @@ | |||
158 | 154 | ||
159 | tst r1, #L_PTE_USER | 155 | tst r1, #L_PTE_USER |
160 | orrne r3, r3, #PTE_EXT_AP1 | 156 | orrne r3, r3, #PTE_EXT_AP1 |
161 | #ifdef CONFIG_CPU_USE_DOMAINS | ||
162 | @ allow kernel read/write access to read-only user pages | ||
163 | tstne r3, #PTE_EXT_APX | 157 | tstne r3, #PTE_EXT_APX |
164 | bicne r3, r3, #PTE_EXT_APX | PTE_EXT_AP0 | 158 | |
165 | #endif | 159 | @ user read-only -> kernel read-only |
160 | bicne r3, r3, #PTE_EXT_AP0 | ||
166 | 161 | ||
167 | tst r1, #L_PTE_XN | 162 | tst r1, #L_PTE_XN |
168 | orrne r3, r3, #PTE_EXT_XN | 163 | orrne r3, r3, #PTE_EXT_XN |
169 | 164 | ||
170 | orr r3, r3, r2 | 165 | eor r3, r3, r2 |
171 | 166 | ||
172 | tst r1, #L_PTE_YOUNG | 167 | tst r1, #L_PTE_YOUNG |
173 | tstne r1, #L_PTE_PRESENT | 168 | tstne r1, #L_PTE_PRESENT |
174 | moveq r3, #0 | 169 | moveq r3, #0 |
175 | #ifndef CONFIG_CPU_USE_DOMAINS | ||
176 | tstne r1, #L_PTE_NONE | 170 | tstne r1, #L_PTE_NONE |
177 | movne r3, #0 | 171 | movne r3, #0 |
178 | #endif | ||
179 | 172 | ||
180 | str r3, [r0] | 173 | str r3, [r0] |
181 | mcr p15, 0, r0, c7, c10, 1 @ flush_pte | 174 | mcr p15, 0, r0, c7, c10, 1 @ flush_pte |
diff --git a/arch/arm/mm/proc-v7-2level.S b/arch/arm/mm/proc-v7-2level.S index bdd3be4be77a..1f52915f2b28 100644 --- a/arch/arm/mm/proc-v7-2level.S +++ b/arch/arm/mm/proc-v7-2level.S | |||
@@ -90,21 +90,14 @@ ENTRY(cpu_v7_set_pte_ext) | |||
90 | 90 | ||
91 | tst r1, #L_PTE_USER | 91 | tst r1, #L_PTE_USER |
92 | orrne r3, r3, #PTE_EXT_AP1 | 92 | orrne r3, r3, #PTE_EXT_AP1 |
93 | #ifdef CONFIG_CPU_USE_DOMAINS | ||
94 | @ allow kernel read/write access to read-only user pages | ||
95 | tstne r3, #PTE_EXT_APX | ||
96 | bicne r3, r3, #PTE_EXT_APX | PTE_EXT_AP0 | ||
97 | #endif | ||
98 | 93 | ||
99 | tst r1, #L_PTE_XN | 94 | tst r1, #L_PTE_XN |
100 | orrne r3, r3, #PTE_EXT_XN | 95 | orrne r3, r3, #PTE_EXT_XN |
101 | 96 | ||
102 | tst r1, #L_PTE_YOUNG | 97 | tst r1, #L_PTE_YOUNG |
103 | tstne r1, #L_PTE_VALID | 98 | tstne r1, #L_PTE_VALID |
104 | #ifndef CONFIG_CPU_USE_DOMAINS | ||
105 | eorne r1, r1, #L_PTE_NONE | 99 | eorne r1, r1, #L_PTE_NONE |
106 | tstne r1, #L_PTE_NONE | 100 | tstne r1, #L_PTE_NONE |
107 | #endif | ||
108 | moveq r3, #0 | 101 | moveq r3, #0 |
109 | 102 | ||
110 | ARM( str r3, [r0, #2048]! ) | 103 | ARM( str r3, [r0, #2048]! ) |
diff --git a/arch/arm/mm/proc-v7.S b/arch/arm/mm/proc-v7.S index 74f6033e76dd..195731d3813b 100644 --- a/arch/arm/mm/proc-v7.S +++ b/arch/arm/mm/proc-v7.S | |||
@@ -192,6 +192,7 @@ __v7_cr7mp_setup: | |||
192 | mov r10, #(1 << 0) @ Cache/TLB ops broadcasting | 192 | mov r10, #(1 << 0) @ Cache/TLB ops broadcasting |
193 | b 1f | 193 | b 1f |
194 | __v7_ca7mp_setup: | 194 | __v7_ca7mp_setup: |
195 | __v7_ca12mp_setup: | ||
195 | __v7_ca15mp_setup: | 196 | __v7_ca15mp_setup: |
196 | mov r10, #0 | 197 | mov r10, #0 |
197 | 1: | 198 | 1: |
@@ -484,6 +485,16 @@ __v7_ca7mp_proc_info: | |||
484 | .size __v7_ca7mp_proc_info, . - __v7_ca7mp_proc_info | 485 | .size __v7_ca7mp_proc_info, . - __v7_ca7mp_proc_info |
485 | 486 | ||
486 | /* | 487 | /* |
488 | * ARM Ltd. Cortex A12 processor. | ||
489 | */ | ||
490 | .type __v7_ca12mp_proc_info, #object | ||
491 | __v7_ca12mp_proc_info: | ||
492 | .long 0x410fc0d0 | ||
493 | .long 0xff0ffff0 | ||
494 | __v7_proc __v7_ca12mp_setup | ||
495 | .size __v7_ca12mp_proc_info, . - __v7_ca12mp_proc_info | ||
496 | |||
497 | /* | ||
487 | * ARM Ltd. Cortex A15 processor. | 498 | * ARM Ltd. Cortex A15 processor. |
488 | */ | 499 | */ |
489 | .type __v7_ca15mp_proc_info, #object | 500 | .type __v7_ca15mp_proc_info, #object |