diff options
author | Will Deacon <will.deacon@arm.com> | 2013-04-03 12:16:57 -0400 |
---|---|---|
committer | Russell King <rmk+kernel@arm.linux.org.uk> | 2013-04-03 12:39:07 -0400 |
commit | ae8a8b9553bd3906af74ff4e8d763904d20ab4e5 (patch) | |
tree | 85406316a071f016d2cfcb79b4f9ef686cfa011b /arch/arm/mm/proc-v7.S | |
parent | b00884802043d9102ecc2abfdc37a7b35b30e52a (diff) |
ARM: 7691/1: mm: kill unused TLB_CAN_READ_FROM_L1_CACHE and use ALT_SMP instead
Many ARMv7 cores have hardware page table walkers that can read the L1
cache. This is discoverable from the ID_MMFR3 register, although this
can be expensive to access from the low-level set_pte functions and is a
pain to cache, particularly with multi-cluster systems.
A useful observation is that the multi-processing extensions for ARMv7
require coherent table walks, meaning that we can make use of ALT_SMP
patching in proc-v7-* to patch away the cache flush safely for these
cores.
Reported-by: Albin Tonnerre <Albin.Tonnerre@arm.com>
Reviewed-by: Catalin Marinas <catalin.marinas@arm.com>
Signed-off-by: Will Deacon <will.deacon@arm.com>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Diffstat (limited to 'arch/arm/mm/proc-v7.S')
-rw-r--r-- | arch/arm/mm/proc-v7.S | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/arch/arm/mm/proc-v7.S b/arch/arm/mm/proc-v7.S index 3a3c015f8d5c..37716b0508e1 100644 --- a/arch/arm/mm/proc-v7.S +++ b/arch/arm/mm/proc-v7.S | |||
@@ -75,14 +75,14 @@ ENTRY(cpu_v7_do_idle) | |||
75 | ENDPROC(cpu_v7_do_idle) | 75 | ENDPROC(cpu_v7_do_idle) |
76 | 76 | ||
77 | ENTRY(cpu_v7_dcache_clean_area) | 77 | ENTRY(cpu_v7_dcache_clean_area) |
78 | #ifndef TLB_CAN_READ_FROM_L1_CACHE | 78 | ALT_SMP(mov pc, lr) @ MP extensions imply L1 PTW |
79 | ALT_UP(W(nop)) | ||
79 | dcache_line_size r2, r3 | 80 | dcache_line_size r2, r3 |
80 | 1: mcr p15, 0, r0, c7, c10, 1 @ clean D entry | 81 | 1: mcr p15, 0, r0, c7, c10, 1 @ clean D entry |
81 | add r0, r0, r2 | 82 | add r0, r0, r2 |
82 | subs r1, r1, r2 | 83 | subs r1, r1, r2 |
83 | bhi 1b | 84 | bhi 1b |
84 | dsb | 85 | dsb |
85 | #endif | ||
86 | mov pc, lr | 86 | mov pc, lr |
87 | ENDPROC(cpu_v7_dcache_clean_area) | 87 | ENDPROC(cpu_v7_dcache_clean_area) |
88 | 88 | ||