aboutsummaryrefslogtreecommitdiffstats
path: root/arch/sh/include
diff options
context:
space:
mode:
authorPaul Mundt <lethal@linux-sh.org>2009-07-27 07:53:22 -0400
committerPaul Mundt <lethal@linux-sh.org>2009-07-27 07:53:22 -0400
commitdfff0fa65ab15db45acd64b3189787d37ab163cd (patch)
treec888641a25f83fb75a4886f6c1e63c44d889fed4 /arch/sh/include
parent2277ab4a1df50e05bc732fe9488d4e902bb8399a (diff)
sh: wire up clear_user_highpage() for sh4, convert sh7705.
This wires up clear_user_highpage() on SH-4 and subsequently converts the SH7705 32kB cache mode over to using it. Now that the SH-4 implementation handles all of the dcache purging directly in the aliasing case, there is no need to do this in the default clear_page() implementation. Signed-off-by: Paul Mundt <lethal@linux-sh.org>
Diffstat (limited to 'arch/sh/include')
-rw-r--r--arch/sh/include/asm/cacheflush.h2
-rw-r--r--arch/sh/include/asm/page.h12
-rw-r--r--arch/sh/include/asm/pgtable.h3
3 files changed, 11 insertions, 6 deletions
diff --git a/arch/sh/include/asm/cacheflush.h b/arch/sh/include/asm/cacheflush.h
index 4c5462daa74c..4e360114269d 100644
--- a/arch/sh/include/asm/cacheflush.h
+++ b/arch/sh/include/asm/cacheflush.h
@@ -49,7 +49,7 @@ static inline void flush_kernel_dcache_page(struct page *page)
49 flush_dcache_page(page); 49 flush_dcache_page(page);
50} 50}
51 51
52#if defined(CONFIG_CPU_SH4) && !defined(CONFIG_CACHE_OFF) 52#if (defined(CONFIG_CPU_SH4) || defined(CONFIG_SH7705_CACHE_32KB)) && !defined(CONFIG_CACHE_OFF)
53extern void copy_to_user_page(struct vm_area_struct *vma, 53extern void copy_to_user_page(struct vm_area_struct *vma,
54 struct page *page, unsigned long vaddr, void *dst, const void *src, 54 struct page *page, unsigned long vaddr, void *dst, const void *src,
55 unsigned long len); 55 unsigned long len);
diff --git a/arch/sh/include/asm/page.h b/arch/sh/include/asm/page.h
index a31ab40040f0..5208b7bfc24e 100644
--- a/arch/sh/include/asm/page.h
+++ b/arch/sh/include/asm/page.h
@@ -56,21 +56,25 @@ pages_do_alias(unsigned long addr1, unsigned long addr2)
56 return (addr1 ^ addr2) & shm_align_mask; 56 return (addr1 ^ addr2) & shm_align_mask;
57} 57}
58 58
59extern void clear_page(void *to); 59
60#define clear_page(page) memset((void *)(page), 0, PAGE_SIZE)
60extern void copy_page(void *to, void *from); 61extern void copy_page(void *to, void *from);
61 62
63struct page;
64struct vm_area_struct;
65
62#if !defined(CONFIG_CACHE_OFF) && defined(CONFIG_MMU) && \ 66#if !defined(CONFIG_CACHE_OFF) && defined(CONFIG_MMU) && \
63 (defined(CONFIG_CPU_SH5) || defined(CONFIG_CPU_SH4) || \ 67 (defined(CONFIG_CPU_SH5) || defined(CONFIG_CPU_SH4) || \
64 defined(CONFIG_SH7705_CACHE_32KB)) 68 defined(CONFIG_SH7705_CACHE_32KB))
65struct page;
66struct vm_area_struct;
67extern void clear_user_page(void *to, unsigned long address, struct page *page); 69extern void clear_user_page(void *to, unsigned long address, struct page *page);
68extern void copy_user_page(void *to, void *from, unsigned long address, 70extern void copy_user_page(void *to, void *from, unsigned long address,
69 struct page *page); 71 struct page *page);
70#if defined(CONFIG_CPU_SH4) 72#if defined(CONFIG_CPU_SH4) || defined(CONFIG_SH7705_CACHE_32KB)
71extern void copy_user_highpage(struct page *to, struct page *from, 73extern void copy_user_highpage(struct page *to, struct page *from,
72 unsigned long vaddr, struct vm_area_struct *vma); 74 unsigned long vaddr, struct vm_area_struct *vma);
73#define __HAVE_ARCH_COPY_USER_HIGHPAGE 75#define __HAVE_ARCH_COPY_USER_HIGHPAGE
76extern void clear_user_highpage(struct page *page, unsigned long vaddr);
77#define clear_user_highpage clear_user_highpage
74#endif 78#endif
75#else 79#else
76#define clear_user_page(page, vaddr, pg) clear_page(page) 80#define clear_user_page(page, vaddr, pg) clear_page(page)
diff --git a/arch/sh/include/asm/pgtable.h b/arch/sh/include/asm/pgtable.h
index d9f68f9c3cb3..bef3ab7fc09e 100644
--- a/arch/sh/include/asm/pgtable.h
+++ b/arch/sh/include/asm/pgtable.h
@@ -141,7 +141,8 @@ extern void paging_init(void);
141extern void page_table_range_init(unsigned long start, unsigned long end, 141extern void page_table_range_init(unsigned long start, unsigned long end,
142 pgd_t *pgd); 142 pgd_t *pgd);
143 143
144#if !defined(CONFIG_CACHE_OFF) && defined(CONFIG_CPU_SH4) && defined(CONFIG_MMU) 144#if !defined(CONFIG_CACHE_OFF) && (defined(CONFIG_CPU_SH4) || \
145 defined(CONFIG_SH7705_CACHE_32KB)) && defined(CONFIG_MMU)
145extern void kmap_coherent_init(void); 146extern void kmap_coherent_init(void);
146#else 147#else
147#define kmap_coherent_init() do { } while (0) 148#define kmap_coherent_init() do { } while (0)