|
@@ -49,6 +49,13 @@
|
|
*
|
|
*
|
|
* Unconditionally clean and invalidate the entire cache.
|
|
* Unconditionally clean and invalidate the entire cache.
|
|
*
|
|
*
|
|
|
|
+ * flush_kern_louis()
|
|
|
|
+ *
|
|
|
|
+ * Flush data cache levels up to the level of unification
|
|
|
|
+ * inner shareable and invalidate the I-cache.
|
|
|
|
+ * Only needed from v7 onwards, falls back to flush_cache_all()
|
|
|
|
+ * for all other processor versions.
|
|
|
|
+ *
|
|
* flush_user_all()
|
|
* flush_user_all()
|
|
*
|
|
*
|
|
* Clean and invalidate all user space cache entries
|
|
* Clean and invalidate all user space cache entries
|
|
@@ -97,6 +104,7 @@
|
|
struct cpu_cache_fns {
|
|
struct cpu_cache_fns {
|
|
void (*flush_icache_all)(void);
|
|
void (*flush_icache_all)(void);
|
|
void (*flush_kern_all)(void);
|
|
void (*flush_kern_all)(void);
|
|
|
|
+ void (*flush_kern_louis)(void);
|
|
void (*flush_user_all)(void);
|
|
void (*flush_user_all)(void);
|
|
void (*flush_user_range)(unsigned long, unsigned long, unsigned int);
|
|
void (*flush_user_range)(unsigned long, unsigned long, unsigned int);
|
|
|
|
|
|
@@ -119,6 +127,7 @@ extern struct cpu_cache_fns cpu_cache;
|
|
|
|
|
|
#define __cpuc_flush_icache_all cpu_cache.flush_icache_all
|
|
#define __cpuc_flush_icache_all cpu_cache.flush_icache_all
|
|
#define __cpuc_flush_kern_all cpu_cache.flush_kern_all
|
|
#define __cpuc_flush_kern_all cpu_cache.flush_kern_all
|
|
|
|
+#define __cpuc_flush_kern_louis cpu_cache.flush_kern_louis
|
|
#define __cpuc_flush_user_all cpu_cache.flush_user_all
|
|
#define __cpuc_flush_user_all cpu_cache.flush_user_all
|
|
#define __cpuc_flush_user_range cpu_cache.flush_user_range
|
|
#define __cpuc_flush_user_range cpu_cache.flush_user_range
|
|
#define __cpuc_coherent_kern_range cpu_cache.coherent_kern_range
|
|
#define __cpuc_coherent_kern_range cpu_cache.coherent_kern_range
|
|
@@ -139,6 +148,7 @@ extern struct cpu_cache_fns cpu_cache;
|
|
|
|
|
|
extern void __cpuc_flush_icache_all(void);
|
|
extern void __cpuc_flush_icache_all(void);
|
|
extern void __cpuc_flush_kern_all(void);
|
|
extern void __cpuc_flush_kern_all(void);
|
|
|
|
+extern void __cpuc_flush_kern_louis(void);
|
|
extern void __cpuc_flush_user_all(void);
|
|
extern void __cpuc_flush_user_all(void);
|
|
extern void __cpuc_flush_user_range(unsigned long, unsigned long, unsigned int);
|
|
extern void __cpuc_flush_user_range(unsigned long, unsigned long, unsigned int);
|
|
extern void __cpuc_coherent_kern_range(unsigned long, unsigned long);
|
|
extern void __cpuc_coherent_kern_range(unsigned long, unsigned long);
|
|
@@ -204,6 +214,11 @@ static inline void __flush_icache_all(void)
|
|
__flush_icache_preferred();
|
|
__flush_icache_preferred();
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+/*
|
|
|
|
+ * Flush caches up to Level of Unification Inner Shareable
|
|
|
|
+ */
|
|
|
|
+#define flush_cache_louis() __cpuc_flush_kern_louis()
|
|
|
|
+
|
|
#define flush_cache_all() __cpuc_flush_kern_all()
|
|
#define flush_cache_all() __cpuc_flush_kern_all()
|
|
|
|
|
|
static inline void vivt_flush_cache_mm(struct mm_struct *mm)
|
|
static inline void vivt_flush_cache_mm(struct mm_struct *mm)
|