diff options
Diffstat (limited to 'arch/arm/include/asm/cacheflush.h')
| -rw-r--r-- | arch/arm/include/asm/cacheflush.h | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/arch/arm/include/asm/cacheflush.h b/arch/arm/include/asm/cacheflush.h index e4448e16046d..e1489c54cd12 100644 --- a/arch/arm/include/asm/cacheflush.h +++ b/arch/arm/include/asm/cacheflush.h | |||
| @@ -49,6 +49,13 @@ | |||
| 49 | * | 49 | * |
| 50 | * Unconditionally clean and invalidate the entire cache. | 50 | * Unconditionally clean and invalidate the entire cache. |
| 51 | * | 51 | * |
| 52 | * flush_kern_louis() | ||
| 53 | * | ||
| 54 | * Flush data cache levels up to the level of unification | ||
| 55 | * inner shareable and invalidate the I-cache. | ||
| 56 | * Only needed from v7 onwards, falls back to flush_cache_all() | ||
| 57 | * for all other processor versions. | ||
| 58 | * | ||
| 52 | * flush_user_all() | 59 | * flush_user_all() |
| 53 | * | 60 | * |
| 54 | * Clean and invalidate all user space cache entries | 61 | * Clean and invalidate all user space cache entries |
| @@ -97,6 +104,7 @@ | |||
| 97 | struct cpu_cache_fns { | 104 | struct cpu_cache_fns { |
| 98 | void (*flush_icache_all)(void); | 105 | void (*flush_icache_all)(void); |
| 99 | void (*flush_kern_all)(void); | 106 | void (*flush_kern_all)(void); |
| 107 | void (*flush_kern_louis)(void); | ||
| 100 | void (*flush_user_all)(void); | 108 | void (*flush_user_all)(void); |
| 101 | void (*flush_user_range)(unsigned long, unsigned long, unsigned int); | 109 | void (*flush_user_range)(unsigned long, unsigned long, unsigned int); |
| 102 | 110 | ||
| @@ -119,6 +127,7 @@ extern struct cpu_cache_fns cpu_cache; | |||
| 119 | 127 | ||
| 120 | #define __cpuc_flush_icache_all cpu_cache.flush_icache_all | 128 | #define __cpuc_flush_icache_all cpu_cache.flush_icache_all |
| 121 | #define __cpuc_flush_kern_all cpu_cache.flush_kern_all | 129 | #define __cpuc_flush_kern_all cpu_cache.flush_kern_all |
| 130 | #define __cpuc_flush_kern_louis cpu_cache.flush_kern_louis | ||
| 122 | #define __cpuc_flush_user_all cpu_cache.flush_user_all | 131 | #define __cpuc_flush_user_all cpu_cache.flush_user_all |
| 123 | #define __cpuc_flush_user_range cpu_cache.flush_user_range | 132 | #define __cpuc_flush_user_range cpu_cache.flush_user_range |
| 124 | #define __cpuc_coherent_kern_range cpu_cache.coherent_kern_range | 133 | #define __cpuc_coherent_kern_range cpu_cache.coherent_kern_range |
| @@ -139,6 +148,7 @@ extern struct cpu_cache_fns cpu_cache; | |||
| 139 | 148 | ||
| 140 | extern void __cpuc_flush_icache_all(void); | 149 | extern void __cpuc_flush_icache_all(void); |
| 141 | extern void __cpuc_flush_kern_all(void); | 150 | extern void __cpuc_flush_kern_all(void); |
| 151 | extern void __cpuc_flush_kern_louis(void); | ||
| 142 | extern void __cpuc_flush_user_all(void); | 152 | extern void __cpuc_flush_user_all(void); |
| 143 | extern void __cpuc_flush_user_range(unsigned long, unsigned long, unsigned int); | 153 | extern void __cpuc_flush_user_range(unsigned long, unsigned long, unsigned int); |
| 144 | extern void __cpuc_coherent_kern_range(unsigned long, unsigned long); | 154 | extern void __cpuc_coherent_kern_range(unsigned long, unsigned long); |
| @@ -204,6 +214,11 @@ static inline void __flush_icache_all(void) | |||
| 204 | __flush_icache_preferred(); | 214 | __flush_icache_preferred(); |
| 205 | } | 215 | } |
| 206 | 216 | ||
| 217 | /* | ||
| 218 | * Flush caches up to Level of Unification Inner Shareable | ||
| 219 | */ | ||
| 220 | #define flush_cache_louis() __cpuc_flush_kern_louis() | ||
| 221 | |||
| 207 | #define flush_cache_all() __cpuc_flush_kern_all() | 222 | #define flush_cache_all() __cpuc_flush_kern_all() |
| 208 | 223 | ||
| 209 | static inline void vivt_flush_cache_mm(struct mm_struct *mm) | 224 | static inline void vivt_flush_cache_mm(struct mm_struct *mm) |
