1 /* SPDX-License-Identifier: GPL-2.0 */ 2 #ifndef _M68KNOMMU_CACHEFLUSH_H 3 #define _M68KNOMMU_CACHEFLUSH_H 4 5 /* 6 * (C) Copyright 2000-2010, Greg Ungerer <gerg@snapgear.com> 7 */ 8 #include <linux/mm.h> 9 #include <asm/mcfsim.h> 10 11 #define flush_cache_all() __flush_cache_all() 12 #define flush_dcache_range(start, len) __flush_dcache_all() 13 #define flush_icache_range(start, len) __flush_icache_all() 14 15 void mcf_cache_push(void); 16 17 static inline void __clear_cache_all(void) 18 { 19 #ifdef CACHE_INVALIDATE 20 __asm__ __volatile__ ( 21 "movec %0, %%CACR\n\t" 22 "nop\n\t" 23 : : "r" (CACHE_INVALIDATE) ); 24 #endif 25 } 26 27 static inline void __flush_cache_all(void) 28 { 29 #ifdef CACHE_PUSH 30 mcf_cache_push(); 31 #endif 32 __clear_cache_all(); 33 } 34 35 /* 36 * Some ColdFire parts implement separate instruction and data caches, 37 * on those we should just flush the appropriate cache. If we don't need 38 * to do any specific flushing then this will be optimized away. 39 */ 40 static inline void __flush_icache_all(void) 41 { 42 #ifdef CACHE_INVALIDATEI 43 __asm__ __volatile__ ( 44 "movec %0, %%CACR\n\t" 45 "nop\n\t" 46 : : "r" (CACHE_INVALIDATEI) ); 47 #endif 48 } 49 50 static inline void __flush_dcache_all(void) 51 { 52 #ifdef CACHE_PUSH 53 mcf_cache_push(); 54 #endif 55 #ifdef CACHE_INVALIDATED 56 __asm__ __volatile__ ( 57 "movec %0, %%CACR\n\t" 58 "nop\n\t" 59 : : "r" (CACHE_INVALIDATED) ); 60 #else 61 /* Flush the write buffer */ 62 __asm__ __volatile__ ( "nop" ); 63 #endif 64 } 65 66 /* 67 * Push cache entries at supplied address. We want to write back any dirty 68 * data and then invalidate the cache lines associated with this address. 69 */ 70 static inline void cache_push(unsigned long paddr, int len) 71 { 72 __flush_cache_all(); 73 } 74 75 /* 76 * Clear cache entries at supplied address (that is don't write back any 77 * dirty data). 78 */ 79 static inline void cache_clear(unsigned long paddr, int len) 80 { 81 __clear_cache_all(); 82 } 83 84 #include <asm-generic/cacheflush.h> 85 86 #endif /* _M68KNOMMU_CACHEFLUSH_H */ 87
Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.