diff options
Diffstat (limited to 'arch')
-rw-r--r-- | arch/sh/include/cpu-sh2a/cpu/cacheflush.h | 30 | ||||
-rw-r--r-- | arch/sh/mm/cache-sh2a.c | 17 | ||||
-rw-r--r-- | arch/sh/mm/cache.c | 6 |
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) | ||
26 | void 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 | ||
18 | void __flush_wback_region(void *start, int size) | 18 | static 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 | ||
47 | void __flush_purge_region(void *start, int size) | 47 | static 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 | ||
68 | void __flush_invalidate_region(void *start, int size) | 68 | static 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 */ |
100 | void flush_icache_range(unsigned long start, unsigned long end) | 100 | static 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 | |||
131 | void __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)) { |