diff options
author | Ben Dooks <ben.dooks@codethink.co.uk> | 2013-02-12 13:59:57 -0500 |
---|---|---|
committer | Ben Dooks <ben.dooks@codethink.co.uk> | 2013-10-19 15:46:33 -0400 |
commit | 457c2403c513c74f60d5757fd11ae927e5554a38 (patch) | |
tree | d1625037ea6aee42fc8559ffb0c7b97619950cf4 | |
parent | d10d2d485497cdc62a7660cd981f8f1ae0dffe7d (diff) |
ARM: asm: Add ARM_BE8() assembly helper
Add ARM_BE8() helper to wrap any code conditional on being
compile when CONFIG_ARM_ENDIAN_BE8 is selected and convert
existing places where this is to use it.
Acked-by: Nicolas Pitre <nico@linaro.org>
Reviewed-by: Will Deacon <will.deacon@arm.com>
Signed-off-by: Ben Dooks <ben.dooks@codethink.co.uk>
-rw-r--r-- | arch/arm/boot/compressed/head.S | 8 | ||||
-rw-r--r-- | arch/arm/include/asm/assembler.h | 7 | ||||
-rw-r--r-- | arch/arm/kernel/entry-armv.S | 5 | ||||
-rw-r--r-- | arch/arm/kernel/entry-common.S | 4 | ||||
-rw-r--r-- | arch/arm/mm/abort-ev6.S | 5 | ||||
-rw-r--r-- | arch/arm/mm/proc-v6.S | 4 | ||||
-rw-r--r-- | arch/arm/mm/proc-v7.S | 4 |
7 files changed, 16 insertions, 21 deletions
diff --git a/arch/arm/boot/compressed/head.S b/arch/arm/boot/compressed/head.S index 75189f13cf54..c912c2a95de8 100644 --- a/arch/arm/boot/compressed/head.S +++ b/arch/arm/boot/compressed/head.S | |||
@@ -699,9 +699,7 @@ __armv4_mmu_cache_on: | |||
699 | mrc p15, 0, r0, c1, c0, 0 @ read control reg | 699 | mrc p15, 0, r0, c1, c0, 0 @ read control reg |
700 | orr r0, r0, #0x5000 @ I-cache enable, RR cache replacement | 700 | orr r0, r0, #0x5000 @ I-cache enable, RR cache replacement |
701 | orr r0, r0, #0x0030 | 701 | orr r0, r0, #0x0030 |
702 | #ifdef CONFIG_CPU_ENDIAN_BE8 | 702 | ARM_BE8( orr r0, r0, #1 << 25 ) @ big-endian page tables |
703 | orr r0, r0, #1 << 25 @ big-endian page tables | ||
704 | #endif | ||
705 | bl __common_mmu_cache_on | 703 | bl __common_mmu_cache_on |
706 | mov r0, #0 | 704 | mov r0, #0 |
707 | mcr p15, 0, r0, c8, c7, 0 @ flush I,D TLBs | 705 | mcr p15, 0, r0, c8, c7, 0 @ flush I,D TLBs |
@@ -728,9 +726,7 @@ __armv7_mmu_cache_on: | |||
728 | orr r0, r0, #1 << 22 @ U (v6 unaligned access model) | 726 | orr r0, r0, #1 << 22 @ U (v6 unaligned access model) |
729 | @ (needed for ARM1176) | 727 | @ (needed for ARM1176) |
730 | #ifdef CONFIG_MMU | 728 | #ifdef CONFIG_MMU |
731 | #ifdef CONFIG_CPU_ENDIAN_BE8 | 729 | ARM_BE8( orr r0, r0, #1 << 25 ) @ big-endian page tables |
732 | orr r0, r0, #1 << 25 @ big-endian page tables | ||
733 | #endif | ||
734 | mrcne p15, 0, r6, c2, c0, 2 @ read ttb control reg | 730 | mrcne p15, 0, r6, c2, c0, 2 @ read ttb control reg |
735 | orrne r0, r0, #1 @ MMU enabled | 731 | orrne r0, r0, #1 @ MMU enabled |
736 | movne r1, #0xfffffffd @ domain 0 = client | 732 | movne r1, #0xfffffffd @ domain 0 = client |
diff --git a/arch/arm/include/asm/assembler.h b/arch/arm/include/asm/assembler.h index fcc1b5bf6979..5c2285160575 100644 --- a/arch/arm/include/asm/assembler.h +++ b/arch/arm/include/asm/assembler.h | |||
@@ -53,6 +53,13 @@ | |||
53 | #define put_byte_3 lsl #0 | 53 | #define put_byte_3 lsl #0 |
54 | #endif | 54 | #endif |
55 | 55 | ||
56 | /* Select code for any configuration running in BE8 mode */ | ||
57 | #ifdef CONFIG_CPU_ENDIAN_BE8 | ||
58 | #define ARM_BE8(code...) code | ||
59 | #else | ||
60 | #define ARM_BE8(code...) | ||
61 | #endif | ||
62 | |||
56 | /* | 63 | /* |
57 | * Data preload for architectures that support it | 64 | * Data preload for architectures that support it |
58 | */ | 65 | */ |
diff --git a/arch/arm/kernel/entry-armv.S b/arch/arm/kernel/entry-armv.S index 9cbe70c8b0ef..55090fbb81a2 100644 --- a/arch/arm/kernel/entry-armv.S +++ b/arch/arm/kernel/entry-armv.S | |||
@@ -416,9 +416,8 @@ __und_usr: | |||
416 | bne __und_usr_thumb | 416 | bne __und_usr_thumb |
417 | sub r4, r2, #4 @ ARM instr at LR - 4 | 417 | sub r4, r2, #4 @ ARM instr at LR - 4 |
418 | 1: ldrt r0, [r4] | 418 | 1: ldrt r0, [r4] |
419 | #ifdef CONFIG_CPU_ENDIAN_BE8 | 419 | ARM_BE8(rev r0, r0) @ little endian instruction |
420 | rev r0, r0 @ little endian instruction | 420 | |
421 | #endif | ||
422 | @ r0 = 32-bit ARM instruction which caused the exception | 421 | @ r0 = 32-bit ARM instruction which caused the exception |
423 | @ r2 = PC value for the following instruction (:= regs->ARM_pc) | 422 | @ r2 = PC value for the following instruction (:= regs->ARM_pc) |
424 | @ r4 = PC value for the faulting instruction | 423 | @ r4 = PC value for the faulting instruction |
diff --git a/arch/arm/kernel/entry-common.S b/arch/arm/kernel/entry-common.S index bc6bd9683ba4..a2dcafdf1bc8 100644 --- a/arch/arm/kernel/entry-common.S +++ b/arch/arm/kernel/entry-common.S | |||
@@ -393,9 +393,7 @@ ENTRY(vector_swi) | |||
393 | #else | 393 | #else |
394 | USER( ldr r10, [lr, #-4] ) @ get SWI instruction | 394 | USER( ldr r10, [lr, #-4] ) @ get SWI instruction |
395 | #endif | 395 | #endif |
396 | #ifdef CONFIG_CPU_ENDIAN_BE8 | 396 | ARM_BE8(rev r10, r10) @ little endian instruction |
397 | rev r10, r10 @ little endian instruction | ||
398 | #endif | ||
399 | 397 | ||
400 | #elif defined(CONFIG_AEABI) | 398 | #elif defined(CONFIG_AEABI) |
401 | 399 | ||
diff --git a/arch/arm/mm/abort-ev6.S b/arch/arm/mm/abort-ev6.S index 80741992a9fc..3815a8262af0 100644 --- a/arch/arm/mm/abort-ev6.S +++ b/arch/arm/mm/abort-ev6.S | |||
@@ -38,9 +38,8 @@ ENTRY(v6_early_abort) | |||
38 | bne do_DataAbort | 38 | bne do_DataAbort |
39 | bic r1, r1, #1 << 11 @ clear bit 11 of FSR | 39 | bic r1, r1, #1 << 11 @ clear bit 11 of FSR |
40 | ldr r3, [r4] @ read aborted ARM instruction | 40 | ldr r3, [r4] @ read aborted ARM instruction |
41 | #ifdef CONFIG_CPU_ENDIAN_BE8 | 41 | ARM_BE8(rev r3, r3) |
42 | rev r3, r3 | 42 | |
43 | #endif | ||
44 | do_ldrd_abort tmp=ip, insn=r3 | 43 | do_ldrd_abort tmp=ip, insn=r3 |
45 | tst r3, #1 << 20 @ L = 0 -> write | 44 | tst r3, #1 << 20 @ L = 0 -> write |
46 | orreq r1, r1, #1 << 11 @ yes. | 45 | orreq r1, r1, #1 << 11 @ yes. |
diff --git a/arch/arm/mm/proc-v6.S b/arch/arm/mm/proc-v6.S index 1128064fddcb..45dc29f85d56 100644 --- a/arch/arm/mm/proc-v6.S +++ b/arch/arm/mm/proc-v6.S | |||
@@ -220,9 +220,7 @@ __v6_setup: | |||
220 | #endif /* CONFIG_MMU */ | 220 | #endif /* CONFIG_MMU */ |
221 | adr r5, v6_crval | 221 | adr r5, v6_crval |
222 | ldmia r5, {r5, r6} | 222 | ldmia r5, {r5, r6} |
223 | #ifdef CONFIG_CPU_ENDIAN_BE8 | 223 | ARM_BE8(orr r6, r6, #1 << 25) @ big-endian page tables |
224 | orr r6, r6, #1 << 25 @ big-endian page tables | ||
225 | #endif | ||
226 | mrc p15, 0, r0, c1, c0, 0 @ read control register | 224 | mrc p15, 0, r0, c1, c0, 0 @ read control register |
227 | bic r0, r0, r5 @ clear bits them | 225 | bic r0, r0, r5 @ clear bits them |
228 | orr r0, r0, r6 @ set them | 226 | orr r0, r0, r6 @ set them |
diff --git a/arch/arm/mm/proc-v7.S b/arch/arm/mm/proc-v7.S index c63d9bdee51e..60920f62fdf5 100644 --- a/arch/arm/mm/proc-v7.S +++ b/arch/arm/mm/proc-v7.S | |||
@@ -367,9 +367,7 @@ __v7_setup: | |||
367 | #endif | 367 | #endif |
368 | adr r5, v7_crval | 368 | adr r5, v7_crval |
369 | ldmia r5, {r5, r6} | 369 | ldmia r5, {r5, r6} |
370 | #ifdef CONFIG_CPU_ENDIAN_BE8 | 370 | ARM_BE8(orr r6, r6, #1 << 25) @ big-endian page tables |
371 | orr r6, r6, #1 << 25 @ big-endian page tables | ||
372 | #endif | ||
373 | #ifdef CONFIG_SWP_EMULATE | 371 | #ifdef CONFIG_SWP_EMULATE |
374 | orr r5, r5, #(1 << 10) @ set SW bit in "clear" | 372 | orr r5, r5, #(1 << 10) @ set SW bit in "clear" |
375 | bic r6, r6, #(1 << 10) @ clear it in "mmuset" | 373 | bic r6, r6, #(1 << 10) @ clear it in "mmuset" |