aboutsummaryrefslogtreecommitdiffstats
path: root/arch/sh/mm
diff options
context:
space:
mode:
authorPaul Mundt <lethal@linux-sh.org>2009-08-14 12:57:36 -0400
committerPaul Mundt <lethal@linux-sh.org>2009-08-14 12:57:36 -0400
commit43bc61d86f8ea6edef2e02d1dc47617883fa9a9c (patch)
tree4f7752888f2e9ca5dcfa9680edefea12aa4a6e8d /arch/sh/mm
parent0837f52463583f76670ab2350e0f1541cb0351f5 (diff)
sh: Add register alignment helpers for shared flushers.
This plugs in some register alignment helpers for the shared flushers, allowing them to also be used on SH-5. The main rationale here is that in the SH-5 case we have a variable ABI, where the pointer size may not equal the register width. This register extension is taken care of by the SH-5 code already today, and is otherwise unused on the SH-4 code. This combines the two and allows us to kill off the SH-5 implementation. Signed-off-by: Paul Mundt <lethal@linux-sh.org>
Diffstat (limited to 'arch/sh/mm')
-rw-r--r--arch/sh/mm/flush-sh4.c21
1 files changed, 12 insertions, 9 deletions
diff --git a/arch/sh/mm/flush-sh4.c b/arch/sh/mm/flush-sh4.c
index edefc53891a8..1b6b6a12a99b 100644
--- a/arch/sh/mm/flush-sh4.c
+++ b/arch/sh/mm/flush-sh4.c
@@ -10,10 +10,11 @@
10 */ 10 */
11void __weak __flush_wback_region(void *start, int size) 11void __weak __flush_wback_region(void *start, int size)
12{ 12{
13 unsigned long v, cnt, end; 13 reg_size_t aligned_start, v, cnt, end;
14 14
15 v = (unsigned long)start & ~(L1_CACHE_BYTES-1); 15 aligned_start = register_align(start);
16 end = ((unsigned long)start + size + L1_CACHE_BYTES-1) 16 v = aligned_start & ~(L1_CACHE_BYTES-1);
17 end = (aligned_start + size + L1_CACHE_BYTES-1)
17 & ~(L1_CACHE_BYTES-1); 18 & ~(L1_CACHE_BYTES-1);
18 cnt = (end - v) / L1_CACHE_BYTES; 19 cnt = (end - v) / L1_CACHE_BYTES;
19 20
@@ -52,10 +53,11 @@ void __weak __flush_wback_region(void *start, int size)
52 */ 53 */
53void __weak __flush_purge_region(void *start, int size) 54void __weak __flush_purge_region(void *start, int size)
54{ 55{
55 unsigned long v, cnt, end; 56 reg_size_t aligned_start, v, cnt, end;
56 57
57 v = (unsigned long)start & ~(L1_CACHE_BYTES-1); 58 aligned_start = register_align(start);
58 end = ((unsigned long)start + size + L1_CACHE_BYTES-1) 59 v = aligned_start & ~(L1_CACHE_BYTES-1);
60 end = (aligned_start + size + L1_CACHE_BYTES-1)
59 & ~(L1_CACHE_BYTES-1); 61 & ~(L1_CACHE_BYTES-1);
60 cnt = (end - v) / L1_CACHE_BYTES; 62 cnt = (end - v) / L1_CACHE_BYTES;
61 63
@@ -90,10 +92,11 @@ void __weak __flush_purge_region(void *start, int size)
90 */ 92 */
91void __weak __flush_invalidate_region(void *start, int size) 93void __weak __flush_invalidate_region(void *start, int size)
92{ 94{
93 unsigned long v, cnt, end; 95 reg_size_t aligned_start, v, cnt, end;
94 96
95 v = (unsigned long)start & ~(L1_CACHE_BYTES-1); 97 aligned_start = register_align(start);
96 end = ((unsigned long)start + size + L1_CACHE_BYTES-1) 98 v = aligned_start & ~(L1_CACHE_BYTES-1);
99 end = (aligned_start + size + L1_CACHE_BYTES-1)
97 & ~(L1_CACHE_BYTES-1); 100 & ~(L1_CACHE_BYTES-1);
98 cnt = (end - v) / L1_CACHE_BYTES; 101 cnt = (end - v) / L1_CACHE_BYTES;
99 102