diff options
Diffstat (limited to 'arch/xtensa/include/asm/cacheflush.h')
| -rw-r--r-- | arch/xtensa/include/asm/cacheflush.h | 40 | 
1 files changed, 25 insertions, 15 deletions
diff --git a/arch/xtensa/include/asm/cacheflush.h b/arch/xtensa/include/asm/cacheflush.h index 127cd48883c..555a98a1845 100644 --- a/arch/xtensa/include/asm/cacheflush.h +++ b/arch/xtensa/include/asm/cacheflush.h @@ -1,18 +1,14 @@  /* - * include/asm-xtensa/cacheflush.h - *   * This file is subject to the terms and conditions of the GNU General Public   * License.  See the file "COPYING" in the main directory of this archive   * for more details.   * - * (C) 2001 - 2007 Tensilica Inc. + * (C) 2001 - 2013 Tensilica Inc.   */  #ifndef _XTENSA_CACHEFLUSH_H  #define _XTENSA_CACHEFLUSH_H -#ifdef __KERNEL__ -  #include <linux/mm.h>  #include <asm/processor.h>  #include <asm/page.h> @@ -51,7 +47,6 @@ extern void __invalidate_icache_page(unsigned long);  extern void __invalidate_icache_range(unsigned long, unsigned long);  extern void __invalidate_dcache_range(unsigned long, unsigned long); -  #if XCHAL_DCACHE_IS_WRITEBACK  extern void __flush_invalidate_dcache_all(void);  extern void __flush_dcache_page(unsigned long); @@ -87,9 +82,22 @@ static inline void __invalidate_icache_page_alias(unsigned long virt,   * (see also Documentation/cachetlb.txt)   */ -#if (DCACHE_WAY_SIZE > PAGE_SIZE) +#if (DCACHE_WAY_SIZE > PAGE_SIZE) || defined(CONFIG_SMP) + +#ifdef CONFIG_SMP +void flush_cache_all(void); +void flush_cache_range(struct vm_area_struct*, ulong, ulong); +void flush_icache_range(unsigned long start, unsigned long end); +void flush_cache_page(struct vm_area_struct*, +			     unsigned long, unsigned long); +#else +#define flush_cache_all local_flush_cache_all +#define flush_cache_range local_flush_cache_range +#define flush_icache_range local_flush_icache_range +#define flush_cache_page  local_flush_cache_page +#endif -#define flush_cache_all()						\ +#define local_flush_cache_all()						\  	do {								\  		__flush_invalidate_dcache_all();			\  		__invalidate_icache_all();				\ @@ -103,9 +111,11 @@ static inline void __invalidate_icache_page_alias(unsigned long virt,  #define ARCH_IMPLEMENTS_FLUSH_DCACHE_PAGE 1  extern void flush_dcache_page(struct page*); -extern void flush_cache_range(struct vm_area_struct*, ulong, ulong); -extern void flush_cache_page(struct vm_area_struct*, -			     unsigned long, unsigned long); + +void local_flush_cache_range(struct vm_area_struct *vma, +		unsigned long start, unsigned long end); +void local_flush_cache_page(struct vm_area_struct *vma, +		unsigned long address, unsigned long pfn);  #else @@ -119,13 +129,14 @@ extern void flush_cache_page(struct vm_area_struct*,  #define ARCH_IMPLEMENTS_FLUSH_DCACHE_PAGE 0  #define flush_dcache_page(page)				do { } while (0) -#define flush_cache_page(vma,addr,pfn)			do { } while (0) -#define flush_cache_range(vma,start,end)		do { } while (0) +#define flush_icache_range local_flush_icache_range +#define flush_cache_page(vma, addr, pfn)		do { } while (0) +#define flush_cache_range(vma, start, end)		do { } while (0)  #endif  /* Ensure consistency between data and instruction cache. */ -#define flush_icache_range(start,end) 					\ +#define local_flush_icache_range(start, end)				\  	do {								\  		__flush_dcache_range(start, (end) - (start));		\  		__invalidate_icache_range(start,(end) - (start));	\ @@ -253,5 +264,4 @@ static inline void flush_invalidate_dcache_unaligned(u32 addr, u32 size)  	}  } -#endif /* __KERNEL__ */  #endif /* _XTENSA_CACHEFLUSH_H */  | 
