diff options
-rw-r--r-- | arch/arm/include/asm/cache.h | 16 | ||||
-rw-r--r-- | arch/arm/include/asm/page.h | 7 | ||||
-rw-r--r-- | arch/arm/mm/proc-v7.S | 36 |
3 files changed, 41 insertions, 18 deletions
diff --git a/arch/arm/include/asm/cache.h b/arch/arm/include/asm/cache.h index cb7a9e97fd7e..feaa75f0013e 100644 --- a/arch/arm/include/asm/cache.h +++ b/arch/arm/include/asm/cache.h | |||
@@ -7,4 +7,20 @@ | |||
7 | #define L1_CACHE_SHIFT 5 | 7 | #define L1_CACHE_SHIFT 5 |
8 | #define L1_CACHE_BYTES (1 << L1_CACHE_SHIFT) | 8 | #define L1_CACHE_BYTES (1 << L1_CACHE_SHIFT) |
9 | 9 | ||
10 | /* | ||
11 | * Memory returned by kmalloc() may be used for DMA, so we must make | ||
12 | * sure that all such allocations are cache aligned. Otherwise, | ||
13 | * unrelated code may cause parts of the buffer to be read into the | ||
14 | * cache before the transfer is done, causing old data to be seen by | ||
15 | * the CPU. | ||
16 | */ | ||
17 | #define ARCH_KMALLOC_MINALIGN L1_CACHE_BYTES | ||
18 | |||
19 | /* | ||
20 | * With EABI on ARMv5 and above we must have 64-bit aligned slab pointers. | ||
21 | */ | ||
22 | #if defined(CONFIG_AEABI) && (__LINUX_ARM_ARCH__ >= 5) | ||
23 | #define ARCH_SLAB_MINALIGN 8 | ||
24 | #endif | ||
25 | |||
10 | #endif | 26 | #endif |
diff --git a/arch/arm/include/asm/page.h b/arch/arm/include/asm/page.h index e6eb8a67b807..7b522770f29d 100644 --- a/arch/arm/include/asm/page.h +++ b/arch/arm/include/asm/page.h | |||
@@ -202,13 +202,6 @@ typedef struct page *pgtable_t; | |||
202 | (((current->personality & READ_IMPLIES_EXEC) ? VM_EXEC : 0) | \ | 202 | (((current->personality & READ_IMPLIES_EXEC) ? VM_EXEC : 0) | \ |
203 | VM_READ | VM_WRITE | VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC) | 203 | VM_READ | VM_WRITE | VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC) |
204 | 204 | ||
205 | /* | ||
206 | * With EABI on ARMv5 and above we must have 64-bit aligned slab pointers. | ||
207 | */ | ||
208 | #if defined(CONFIG_AEABI) && (__LINUX_ARM_ARCH__ >= 5) | ||
209 | #define ARCH_SLAB_MINALIGN 8 | ||
210 | #endif | ||
211 | |||
212 | #include <asm-generic/page.h> | 205 | #include <asm-generic/page.h> |
213 | 206 | ||
214 | #endif | 207 | #endif |
diff --git a/arch/arm/mm/proc-v7.S b/arch/arm/mm/proc-v7.S index 3397f1e64d76..a08d9d2380d3 100644 --- a/arch/arm/mm/proc-v7.S +++ b/arch/arm/mm/proc-v7.S | |||
@@ -184,23 +184,37 @@ __v7_setup: | |||
184 | stmia r12, {r0-r5, r7, r9, r11, lr} | 184 | stmia r12, {r0-r5, r7, r9, r11, lr} |
185 | bl v7_flush_dcache_all | 185 | bl v7_flush_dcache_all |
186 | ldmia r12, {r0-r5, r7, r9, r11, lr} | 186 | ldmia r12, {r0-r5, r7, r9, r11, lr} |
187 | |||
188 | mrc p15, 0, r0, c0, c0, 0 @ read main ID register | ||
189 | and r10, r0, #0xff000000 @ ARM? | ||
190 | teq r10, #0x41000000 | ||
191 | bne 2f | ||
192 | and r5, r0, #0x00f00000 @ variant | ||
193 | and r6, r0, #0x0000000f @ revision | ||
194 | orr r0, r6, r5, lsr #20-4 @ combine variant and revision | ||
195 | |||
187 | #ifdef CONFIG_ARM_ERRATA_430973 | 196 | #ifdef CONFIG_ARM_ERRATA_430973 |
188 | mrc p15, 0, r10, c1, c0, 1 @ read aux control register | 197 | teq r5, #0x00100000 @ only present in r1p* |
189 | orr r10, r10, #(1 << 6) @ set IBE to 1 | 198 | mrceq p15, 0, r10, c1, c0, 1 @ read aux control register |
190 | mcr p15, 0, r10, c1, c0, 1 @ write aux control register | 199 | orreq r10, r10, #(1 << 6) @ set IBE to 1 |
200 | mcreq p15, 0, r10, c1, c0, 1 @ write aux control register | ||
191 | #endif | 201 | #endif |
192 | #ifdef CONFIG_ARM_ERRATA_458693 | 202 | #ifdef CONFIG_ARM_ERRATA_458693 |
193 | mrc p15, 0, r10, c1, c0, 1 @ read aux control register | 203 | teq r0, #0x20 @ only present in r2p0 |
194 | orr r10, r10, #(1 << 5) @ set L1NEON to 1 | 204 | mrceq p15, 0, r10, c1, c0, 1 @ read aux control register |
195 | orr r10, r10, #(1 << 9) @ set PLDNOP to 1 | 205 | orreq r10, r10, #(1 << 5) @ set L1NEON to 1 |
196 | mcr p15, 0, r10, c1, c0, 1 @ write aux control register | 206 | orreq r10, r10, #(1 << 9) @ set PLDNOP to 1 |
207 | mcreq p15, 0, r10, c1, c0, 1 @ write aux control register | ||
197 | #endif | 208 | #endif |
198 | #ifdef CONFIG_ARM_ERRATA_460075 | 209 | #ifdef CONFIG_ARM_ERRATA_460075 |
199 | mrc p15, 1, r10, c9, c0, 2 @ read L2 cache aux ctrl register | 210 | teq r0, #0x20 @ only present in r2p0 |
200 | orr r10, r10, #(1 << 22) @ set the Write Allocate disable bit | 211 | mrceq p15, 1, r10, c9, c0, 2 @ read L2 cache aux ctrl register |
201 | mcr p15, 1, r10, c9, c0, 2 @ write the L2 cache aux ctrl register | 212 | tsteq r10, #1 << 22 |
213 | orreq r10, r10, #(1 << 22) @ set the Write Allocate disable bit | ||
214 | mcreq p15, 1, r10, c9, c0, 2 @ write the L2 cache aux ctrl register | ||
202 | #endif | 215 | #endif |
203 | mov r10, #0 | 216 | |
217 | 2: mov r10, #0 | ||
204 | #ifdef HARVARD_CACHE | 218 | #ifdef HARVARD_CACHE |
205 | mcr p15, 0, r10, c7, c5, 0 @ I+BTB cache invalidate | 219 | mcr p15, 0, r10, c7, c5, 0 @ I+BTB cache invalidate |
206 | #endif | 220 | #endif |