aboutsummaryrefslogtreecommitdiffstats
path: root/arch/sh/include
diff options
context:
space:
mode:
authorPaul Mundt <lethal@linux-sh.org>2009-07-22 06:20:49 -0400
committerPaul Mundt <lethal@linux-sh.org>2009-07-22 06:20:49 -0400
commit2277ab4a1df50e05bc732fe9488d4e902bb8399a (patch)
treef41cb47f15e02bbd1f79bf08ef7762d3bba934f6 /arch/sh/include
parentc0b96cf639aa1bfa8983f734d4225091aa813e00 (diff)
sh: Migrate from PG_mapped to PG_dcache_dirty.
This inverts the delayed dcache flush a bit to be more in line with other platforms. At the same time this also gives us the ability to do some more optimizations and cleanup. Now that the update_mmu_cache() callsite only tests for the bit, the implementation can gradually be split out and made generic, rather than relying on special implementations for each of the peculiar CPU types. SH7705 in 32kB mode and SH-4 still need slightly different handling, but this is something that can remain isolated in the varying page copy/clear routines. On top of that, SH-X3 is dcache coherent, so there is no need to bother with any of these tests in the PTEAEX version of update_mmu_cache(), so we kill that off too. Signed-off-by: Paul Mundt <lethal@linux-sh.org>
Diffstat (limited to 'arch/sh/include')
-rw-r--r--arch/sh/include/asm/page.h6
-rw-r--r--arch/sh/include/asm/pgtable.h7
-rw-r--r--arch/sh/include/cpu-sh3/cpu/cacheflush.h5
-rw-r--r--arch/sh/include/cpu-sh4/cpu/cacheflush.h2
4 files changed, 8 insertions, 12 deletions
diff --git a/arch/sh/include/asm/page.h b/arch/sh/include/asm/page.h
index 49592c780a6e..a31ab40040f0 100644
--- a/arch/sh/include/asm/page.h
+++ b/arch/sh/include/asm/page.h
@@ -50,6 +50,12 @@ extern unsigned long shm_align_mask;
50extern unsigned long max_low_pfn, min_low_pfn; 50extern unsigned long max_low_pfn, min_low_pfn;
51extern unsigned long memory_start, memory_end; 51extern unsigned long memory_start, memory_end;
52 52
53static inline unsigned long
54pages_do_alias(unsigned long addr1, unsigned long addr2)
55{
56 return (addr1 ^ addr2) & shm_align_mask;
57}
58
53extern void clear_page(void *to); 59extern void clear_page(void *to);
54extern void copy_page(void *to, void *from); 60extern void copy_page(void *to, void *from);
55 61
diff --git a/arch/sh/include/asm/pgtable.h b/arch/sh/include/asm/pgtable.h
index 2a011b18090b..d9f68f9c3cb3 100644
--- a/arch/sh/include/asm/pgtable.h
+++ b/arch/sh/include/asm/pgtable.h
@@ -133,13 +133,6 @@ typedef pte_t *pte_addr_t;
133 */ 133 */
134#define pgtable_cache_init() do { } while (0) 134#define pgtable_cache_init() do { } while (0)
135 135
136#if !defined(CONFIG_CACHE_OFF) && (defined(CONFIG_CPU_SH4) || \
137 defined(CONFIG_SH7705_CACHE_32KB))
138struct mm_struct;
139#define __HAVE_ARCH_PTEP_GET_AND_CLEAR
140pte_t ptep_get_and_clear(struct mm_struct *mm, unsigned long addr, pte_t *ptep);
141#endif
142
143struct vm_area_struct; 136struct vm_area_struct;
144extern void update_mmu_cache(struct vm_area_struct * vma, 137extern void update_mmu_cache(struct vm_area_struct * vma,
145 unsigned long address, pte_t pte); 138 unsigned long address, pte_t pte);
diff --git a/arch/sh/include/cpu-sh3/cpu/cacheflush.h b/arch/sh/include/cpu-sh3/cpu/cacheflush.h
index 1ac27aae6700..6485ad5649ad 100644
--- a/arch/sh/include/cpu-sh3/cpu/cacheflush.h
+++ b/arch/sh/include/cpu-sh3/cpu/cacheflush.h
@@ -15,10 +15,7 @@
15 * SH4. Unlike the SH4 this is a unified cache so we need to do some work 15 * SH4. Unlike the SH4 this is a unified cache so we need to do some work
16 * in mmap when 'exec'ing a new binary 16 * in mmap when 'exec'ing a new binary
17 */ 17 */
18 /* 32KB cache, 4kb PAGE sizes need to check bit 12 */ 18#define PG_dcache_dirty PG_arch_1
19#define CACHE_ALIAS 0x00001000
20
21#define PG_mapped PG_arch_1
22 19
23void flush_cache_all(void); 20void flush_cache_all(void);
24void flush_cache_mm(struct mm_struct *mm); 21void flush_cache_mm(struct mm_struct *mm);
diff --git a/arch/sh/include/cpu-sh4/cpu/cacheflush.h b/arch/sh/include/cpu-sh4/cpu/cacheflush.h
index 065306d376eb..3564f1722195 100644
--- a/arch/sh/include/cpu-sh4/cpu/cacheflush.h
+++ b/arch/sh/include/cpu-sh4/cpu/cacheflush.h
@@ -38,6 +38,6 @@ void flush_icache_user_range(struct vm_area_struct *vma, struct page *page,
38/* Initialization of P3 area for copy_user_page */ 38/* Initialization of P3 area for copy_user_page */
39void p3_cache_init(void); 39void p3_cache_init(void);
40 40
41#define PG_mapped PG_arch_1 41#define PG_dcache_dirty PG_arch_1
42 42
43#endif /* __ASM_CPU_SH4_CACHEFLUSH_H */ 43#endif /* __ASM_CPU_SH4_CACHEFLUSH_H */