|
@@ -459,15 +459,19 @@ static inline void flush_ioremap_region(unsigned long phys, void __iomem *virt,
|
|
|
#define __cacheid_vivt_asid_tagged_instr(val) (__cacheid_type_v7(val) ? ((val & (3 << 14)) == (1 << 14)) : 0)
|
|
|
|
|
|
#if defined(CONFIG_CPU_CACHE_VIVT) && !defined(CONFIG_CPU_CACHE_VIPT)
|
|
|
-
|
|
|
+/*
|
|
|
+ * VIVT caches only
|
|
|
+ */
|
|
|
#define cache_is_vivt() 1
|
|
|
#define cache_is_vipt() 0
|
|
|
#define cache_is_vipt_nonaliasing() 0
|
|
|
#define cache_is_vipt_aliasing() 0
|
|
|
#define icache_is_vivt_asid_tagged() 0
|
|
|
|
|
|
-#elif defined(CONFIG_CPU_CACHE_VIPT)
|
|
|
-
|
|
|
+#elif !defined(CONFIG_CPU_CACHE_VIVT) && defined(CONFIG_CPU_CACHE_VIPT)
|
|
|
+/*
|
|
|
+ * VIPT caches only
|
|
|
+ */
|
|
|
#define cache_is_vivt() 0
|
|
|
#define cache_is_vipt() 1
|
|
|
#define cache_is_vipt_nonaliasing() \
|
|
@@ -489,7 +493,12 @@ static inline void flush_ioremap_region(unsigned long phys, void __iomem *virt,
|
|
|
})
|
|
|
|
|
|
#else
|
|
|
-
|
|
|
+/*
|
|
|
+ * VIVT or VIPT caches. Note that this is unreliable since ARM926
|
|
|
+ * and V6 CPUs satisfy the "(val & (15 << 25)) == (14 << 25)" test.
|
|
|
+ * There's no way to tell from the CacheType register what type (!)
|
|
|
+ * the cache is.
|
|
|
+ */
|
|
|
#define cache_is_vivt() \
|
|
|
({ \
|
|
|
unsigned int __val = read_cpuid(CPUID_CACHETYPE); \
|