diff options
author | Paul Mundt <lethal@linux-sh.org> | 2009-07-27 07:53:22 -0400 |
---|---|---|
committer | Paul Mundt <lethal@linux-sh.org> | 2009-07-27 07:53:22 -0400 |
commit | dfff0fa65ab15db45acd64b3189787d37ab163cd (patch) | |
tree | c888641a25f83fb75a4886f6c1e63c44d889fed4 /arch/sh/include | |
parent | 2277ab4a1df50e05bc732fe9488d4e902bb8399a (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.h | 2 | ||||
-rw-r--r-- | arch/sh/include/asm/page.h | 12 | ||||
-rw-r--r-- | arch/sh/include/asm/pgtable.h | 3 |
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) |
53 | extern void copy_to_user_page(struct vm_area_struct *vma, | 53 | extern 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 | ||
59 | extern void clear_page(void *to); | 59 | |
60 | #define clear_page(page) memset((void *)(page), 0, PAGE_SIZE) | ||
60 | extern void copy_page(void *to, void *from); | 61 | extern void copy_page(void *to, void *from); |
61 | 62 | ||
63 | struct page; | ||
64 | struct 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)) |
65 | struct page; | ||
66 | struct vm_area_struct; | ||
67 | extern void clear_user_page(void *to, unsigned long address, struct page *page); | 69 | extern void clear_user_page(void *to, unsigned long address, struct page *page); |
68 | extern void copy_user_page(void *to, void *from, unsigned long address, | 70 | extern 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) |
71 | extern void copy_user_highpage(struct page *to, struct page *from, | 73 | extern 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 |
76 | extern 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); | |||
141 | extern void page_table_range_init(unsigned long start, unsigned long end, | 141 | extern 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) | ||
145 | extern void kmap_coherent_init(void); | 146 | extern 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) |