diff options
| author | Paul Mundt <lethal@linux-sh.org> | 2009-08-14 23:38:29 -0400 |
|---|---|---|
| committer | Paul Mundt <lethal@linux-sh.org> | 2009-08-14 23:38:29 -0400 |
| commit | a58e1a2ab4f6334c50dfbda83d3a5c6e0b2b4bee (patch) | |
| tree | 6c9470da2d4da8579ca534a6037da193c74cc9cd | |
| parent | 109b44a82a7a8ae32d7fb257480f92f2d96f0daf (diff) | |
sh: Convert SH-2A to new cacheflush interface.
Signed-off-by: Paul Mundt <lethal@linux-sh.org>
| -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)) { |
