aboutsummaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
Diffstat (limited to 'arch')
-rw-r--r--arch/sh/include/cpu-sh2a/cpu/cacheflush.h30
-rw-r--r--arch/sh/mm/cache-sh2a.c17
-rw-r--r--arch/sh/mm/cache.c6
3 files changed, 19 insertions, 34 deletions
diff --git a/arch/sh/include/cpu-sh2a/cpu/cacheflush.h b/arch/sh/include/cpu-sh2a/cpu/cacheflush.h
deleted file mode 100644
index 32a529187a38..000000000000
--- a/arch/sh/include/cpu-sh2a/cpu/cacheflush.h
+++ /dev/null
@@ -1,30 +0,0 @@
1#ifndef __ASM_CPU_SH2A_CACHEFLUSH_H
2#define __ASM_CPU_SH2A_CACHEFLUSH_H
3
4/*
5 * Cache flushing:
6 *
7 * - flush_cache_all() flushes entire cache
8 * - flush_cache_mm(mm) flushes the specified mm context's cache lines
9 * - flush_cache_dup mm(mm) handles cache flushing when forking
10 * - flush_cache_page(mm, vmaddr, pfn) flushes a single page
11 * - flush_cache_range(vma, start, end) flushes a range of pages
12 *
13 * - flush_dcache_page(pg) flushes(wback&invalidates) a page for dcache
14 * - flush_icache_range(start, end) flushes(invalidates) a range for icache
15 * - flush_icache_page(vma, pg) flushes(invalidates) a page for icache
16 *
17 * Caches are indexed (effectively) by physical address on SH-2, so
18 * we don't need them.
19 */
20#define flush_cache_all() do { } while (0)
21#define flush_cache_mm(mm) do { } while (0)
22#define flush_cache_dup_mm(mm) do { } while (0)
23#define flush_cache_range(vma, start, end) do { } while (0)
24#define flush_cache_page(vma, vmaddr, pfn) do { } while (0)
25#define flush_dcache_page(page) do { } while (0)
26void flush_icache_range(unsigned long start, unsigned long end);
27#define flush_icache_page(vma,pg) do { } while (0)
28#define flush_cache_sigtramp(vaddr) do { } while (0)
29
30#endif /* __ASM_CPU_SH2A_CACHEFLUSH_H */
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)) {