aboutsummaryrefslogtreecommitdiffstats
path: root/arch/sh/mm
diff options
context:
space:
mode:
Diffstat (limited to 'arch/sh/mm')
-rw-r--r--arch/sh/mm/cache-sh2a.c17
-rw-r--r--arch/sh/mm/cache.c6
2 files changed, 19 insertions, 4 deletions
diff --git a/arch/sh/mm/cache-sh2a.c b/arch/sh/mm/cache-sh2a.c
index 24d86a794065..96a41872dfd3 100644
--- a/arch/sh/mm/cache-sh2a.c
+++ b/arch/sh/mm/cache-sh2a.c
@@ -15,7 +15,7 @@
15#include <asm/cacheflush.h> 15#include <asm/cacheflush.h>
16#include <asm/io.h> 16#include <asm/io.h>
17 17
18void __flush_wback_region(void *start, int size) 18static void sh2a__flush_wback_region(void *start, int size)
19{ 19{
20 unsigned long v; 20 unsigned long v;
21 unsigned long begin, end; 21 unsigned long begin, end;
@@ -44,7 +44,7 @@ void __flush_wback_region(void *start, int size)
44 local_irq_restore(flags); 44 local_irq_restore(flags);
45} 45}
46 46
47void __flush_purge_region(void *start, int size) 47static void sh2a__flush_purge_region(void *start, int size)
48{ 48{
49 unsigned long v; 49 unsigned long v;
50 unsigned long begin, end; 50 unsigned long begin, end;
@@ -65,7 +65,7 @@ void __flush_purge_region(void *start, int size)
65 local_irq_restore(flags); 65 local_irq_restore(flags);
66} 66}
67 67
68void __flush_invalidate_region(void *start, int size) 68static void sh2a__flush_invalidate_region(void *start, int size)
69{ 69{
70 unsigned long v; 70 unsigned long v;
71 unsigned long begin, end; 71 unsigned long begin, end;
@@ -97,7 +97,7 @@ void __flush_invalidate_region(void *start, int size)
97} 97}
98 98
99/* WBack O-Cache and flush I-Cache */ 99/* WBack O-Cache and flush I-Cache */
100void flush_icache_range(unsigned long start, unsigned long end) 100static void sh2a_flush_icache_range(unsigned long start, unsigned long end)
101{ 101{
102 unsigned long v; 102 unsigned long v;
103 unsigned long flags; 103 unsigned long flags;
@@ -127,3 +127,12 @@ void flush_icache_range(unsigned long start, unsigned long end)
127 back_to_cached(); 127 back_to_cached();
128 local_irq_restore(flags); 128 local_irq_restore(flags);
129} 129}
130
131void __init sh2a_cache_init(void)
132{
133 flush_icache_range = sh2a_flush_icache_range;
134
135 __flush_wback_region = sh2a__flush_wback_region;
136 __flush_purge_region = sh2a__flush_purge_region;
137 __flush_invalidate_region = sh2a__flush_invalidate_region;
138}
diff --git a/arch/sh/mm/cache.c b/arch/sh/mm/cache.c
index 5ac299d6604e..b56cce408912 100644
--- a/arch/sh/mm/cache.c
+++ b/arch/sh/mm/cache.c
@@ -250,6 +250,12 @@ void __init cpu_cache_init(void)
250 sh2_cache_init(); 250 sh2_cache_init();
251 } 251 }
252 252
253 if (boot_cpu_data.family == CPU_FAMILY_SH2A) {
254 extern void __weak sh2a_cache_init(void);
255
256 sh2a_cache_init();
257 }
258
253 if ((boot_cpu_data.family == CPU_FAMILY_SH4) || 259 if ((boot_cpu_data.family == CPU_FAMILY_SH4) ||
254 (boot_cpu_data.family == CPU_FAMILY_SH4A) || 260 (boot_cpu_data.family == CPU_FAMILY_SH4A) ||
255 (boot_cpu_data.family == CPU_FAMILY_SH4AL_DSP)) { 261 (boot_cpu_data.family == CPU_FAMILY_SH4AL_DSP)) {