mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 10:40:15 +02:00 
			
		
		
		
	[ARM] cachetype: move definitions to separate header
Rather than pollute asm/cacheflush.h with the cache type definitions, move them to asm/cachetype.h, and include this new header where necessary. Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
This commit is contained in:
		
							parent
							
								
									0ba8b9b273
								
							
						
					
					
						commit
						46097c7dd8
					
				
					 7 changed files with 101 additions and 90 deletions
				
			
		| 
						 | 
					@ -444,94 +444,4 @@ static inline void flush_ioremap_region(unsigned long phys, void __iomem *virt,
 | 
				
			||||||
	dmac_inv_range(start, start + size);
 | 
						dmac_inv_range(start, start + size);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#define __cacheid_present(val)			(val != read_cpuid(CPUID_ID))
 | 
					 | 
				
			||||||
#define __cacheid_type_v7(val)			((val & (7 << 29)) == (4 << 29))
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define __cacheid_vivt_prev7(val)		((val & (15 << 25)) != (14 << 25))
 | 
					 | 
				
			||||||
#define __cacheid_vipt_prev7(val)		((val & (15 << 25)) == (14 << 25))
 | 
					 | 
				
			||||||
#define __cacheid_vipt_nonaliasing_prev7(val)	((val & (15 << 25 | 1 << 23)) == (14 << 25))
 | 
					 | 
				
			||||||
#define __cacheid_vipt_aliasing_prev7(val)	((val & (15 << 25 | 1 << 23)) == (14 << 25 | 1 << 23))
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define __cacheid_vivt(val)			(__cacheid_type_v7(val) ? 0 : __cacheid_vivt_prev7(val))
 | 
					 | 
				
			||||||
#define __cacheid_vipt(val)			(__cacheid_type_v7(val) ? 1 : __cacheid_vipt_prev7(val))
 | 
					 | 
				
			||||||
#define __cacheid_vipt_nonaliasing(val)		(__cacheid_type_v7(val) ? 1 : __cacheid_vipt_nonaliasing_prev7(val))
 | 
					 | 
				
			||||||
#define __cacheid_vipt_aliasing(val)		(__cacheid_type_v7(val) ? 0 : __cacheid_vipt_aliasing_prev7(val))
 | 
					 | 
				
			||||||
#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_VIVT) && defined(CONFIG_CPU_CACHE_VIPT)
 | 
					 | 
				
			||||||
/*
 | 
					 | 
				
			||||||
 * VIPT caches only
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
#define cache_is_vivt()			0
 | 
					 | 
				
			||||||
#define cache_is_vipt()			1
 | 
					 | 
				
			||||||
#define cache_is_vipt_nonaliasing()					\
 | 
					 | 
				
			||||||
	({								\
 | 
					 | 
				
			||||||
		unsigned int __val = read_cpuid(CPUID_CACHETYPE);	\
 | 
					 | 
				
			||||||
		__cacheid_vipt_nonaliasing(__val);			\
 | 
					 | 
				
			||||||
	})
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define cache_is_vipt_aliasing()					\
 | 
					 | 
				
			||||||
	({								\
 | 
					 | 
				
			||||||
		unsigned int __val = read_cpuid(CPUID_CACHETYPE);	\
 | 
					 | 
				
			||||||
		__cacheid_vipt_aliasing(__val);				\
 | 
					 | 
				
			||||||
	})
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define icache_is_vivt_asid_tagged()					\
 | 
					 | 
				
			||||||
	({								\
 | 
					 | 
				
			||||||
		unsigned int __val = read_cpuid(CPUID_CACHETYPE);	\
 | 
					 | 
				
			||||||
		__cacheid_vivt_asid_tagged_instr(__val);		\
 | 
					 | 
				
			||||||
	})
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#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);	\
 | 
					 | 
				
			||||||
		(!__cacheid_present(__val)) || __cacheid_vivt(__val);	\
 | 
					 | 
				
			||||||
	})
 | 
					 | 
				
			||||||
		
 | 
					 | 
				
			||||||
#define cache_is_vipt()							\
 | 
					 | 
				
			||||||
	({								\
 | 
					 | 
				
			||||||
		unsigned int __val = read_cpuid(CPUID_CACHETYPE);	\
 | 
					 | 
				
			||||||
		__cacheid_present(__val) && __cacheid_vipt(__val);	\
 | 
					 | 
				
			||||||
	})
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define cache_is_vipt_nonaliasing()					\
 | 
					 | 
				
			||||||
	({								\
 | 
					 | 
				
			||||||
		unsigned int __val = read_cpuid(CPUID_CACHETYPE);	\
 | 
					 | 
				
			||||||
		__cacheid_present(__val) &&				\
 | 
					 | 
				
			||||||
		 __cacheid_vipt_nonaliasing(__val);			\
 | 
					 | 
				
			||||||
	})
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define cache_is_vipt_aliasing()					\
 | 
					 | 
				
			||||||
	({								\
 | 
					 | 
				
			||||||
		unsigned int __val = read_cpuid(CPUID_CACHETYPE);	\
 | 
					 | 
				
			||||||
		__cacheid_present(__val) &&				\
 | 
					 | 
				
			||||||
		 __cacheid_vipt_aliasing(__val);			\
 | 
					 | 
				
			||||||
	})
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#define icache_is_vivt_asid_tagged()					\
 | 
					 | 
				
			||||||
	({								\
 | 
					 | 
				
			||||||
		unsigned int __val = read_cpuid(CPUID_CACHETYPE);	\
 | 
					 | 
				
			||||||
		__cacheid_present(__val) &&				\
 | 
					 | 
				
			||||||
		 __cacheid_vivt_asid_tagged_instr(__val);		\
 | 
					 | 
				
			||||||
	})
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#endif
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
							
								
								
									
										96
									
								
								arch/arm/include/asm/cachetype.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										96
									
								
								arch/arm/include/asm/cachetype.h
									
									
									
									
									
										Normal file
									
								
							| 
						 | 
					@ -0,0 +1,96 @@
 | 
				
			||||||
 | 
					#ifndef __ASM_ARM_CACHETYPE_H
 | 
				
			||||||
 | 
					#define __ASM_ARM_CACHETYPE_H
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <asm/cputype.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define __cacheid_present(val)			(val != read_cpuid_id())
 | 
				
			||||||
 | 
					#define __cacheid_type_v7(val)			((val & (7 << 29)) == (4 << 29))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define __cacheid_vivt_prev7(val)		((val & (15 << 25)) != (14 << 25))
 | 
				
			||||||
 | 
					#define __cacheid_vipt_prev7(val)		((val & (15 << 25)) == (14 << 25))
 | 
				
			||||||
 | 
					#define __cacheid_vipt_nonaliasing_prev7(val)	((val & (15 << 25 | 1 << 23)) == (14 << 25))
 | 
				
			||||||
 | 
					#define __cacheid_vipt_aliasing_prev7(val)	((val & (15 << 25 | 1 << 23)) == (14 << 25 | 1 << 23))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define __cacheid_vivt(val)			(__cacheid_type_v7(val) ? 0 : __cacheid_vivt_prev7(val))
 | 
				
			||||||
 | 
					#define __cacheid_vipt(val)			(__cacheid_type_v7(val) ? 1 : __cacheid_vipt_prev7(val))
 | 
				
			||||||
 | 
					#define __cacheid_vipt_nonaliasing(val)		(__cacheid_type_v7(val) ? 1 : __cacheid_vipt_nonaliasing_prev7(val))
 | 
				
			||||||
 | 
					#define __cacheid_vipt_aliasing(val)		(__cacheid_type_v7(val) ? 0 : __cacheid_vipt_aliasing_prev7(val))
 | 
				
			||||||
 | 
					#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_VIVT) && defined(CONFIG_CPU_CACHE_VIPT)
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * VIPT caches only
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					#define cache_is_vivt()			0
 | 
				
			||||||
 | 
					#define cache_is_vipt()			1
 | 
				
			||||||
 | 
					#define cache_is_vipt_nonaliasing()					\
 | 
				
			||||||
 | 
						({								\
 | 
				
			||||||
 | 
							unsigned int __val = read_cpuid_cachetype();		\
 | 
				
			||||||
 | 
							__cacheid_vipt_nonaliasing(__val);			\
 | 
				
			||||||
 | 
						})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define cache_is_vipt_aliasing()					\
 | 
				
			||||||
 | 
						({								\
 | 
				
			||||||
 | 
							unsigned int __val = read_cpuid_cachetype();		\
 | 
				
			||||||
 | 
							__cacheid_vipt_aliasing(__val);				\
 | 
				
			||||||
 | 
						})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define icache_is_vivt_asid_tagged()					\
 | 
				
			||||||
 | 
						({								\
 | 
				
			||||||
 | 
							unsigned int __val = read_cpuid_cachetype();		\
 | 
				
			||||||
 | 
							__cacheid_vivt_asid_tagged_instr(__val);		\
 | 
				
			||||||
 | 
						})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#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_cachetype();		\
 | 
				
			||||||
 | 
							(!__cacheid_present(__val)) || __cacheid_vivt(__val);	\
 | 
				
			||||||
 | 
						})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define cache_is_vipt()							\
 | 
				
			||||||
 | 
						({								\
 | 
				
			||||||
 | 
							unsigned int __val = read_cpuid_cachetype();		\
 | 
				
			||||||
 | 
							__cacheid_present(__val) && __cacheid_vipt(__val);	\
 | 
				
			||||||
 | 
						})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define cache_is_vipt_nonaliasing()					\
 | 
				
			||||||
 | 
						({								\
 | 
				
			||||||
 | 
							unsigned int __val = read_cpuid_cachetype();		\
 | 
				
			||||||
 | 
							__cacheid_present(__val) &&				\
 | 
				
			||||||
 | 
							 __cacheid_vipt_nonaliasing(__val);			\
 | 
				
			||||||
 | 
						})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define cache_is_vipt_aliasing()					\
 | 
				
			||||||
 | 
						({								\
 | 
				
			||||||
 | 
							unsigned int __val = read_cpuid_cachetype();		\
 | 
				
			||||||
 | 
							__cacheid_present(__val) &&				\
 | 
				
			||||||
 | 
							 __cacheid_vipt_aliasing(__val);			\
 | 
				
			||||||
 | 
						})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define icache_is_vivt_asid_tagged()					\
 | 
				
			||||||
 | 
						({								\
 | 
				
			||||||
 | 
							unsigned int __val = read_cpuid_cachetype();		\
 | 
				
			||||||
 | 
							__cacheid_present(__val) &&				\
 | 
				
			||||||
 | 
							 __cacheid_vivt_asid_tagged_instr(__val);		\
 | 
				
			||||||
 | 
						})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
| 
						 | 
					@ -15,6 +15,7 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <linux/compiler.h>
 | 
					#include <linux/compiler.h>
 | 
				
			||||||
#include <asm/cacheflush.h>
 | 
					#include <asm/cacheflush.h>
 | 
				
			||||||
 | 
					#include <asm/cachetype.h>
 | 
				
			||||||
#include <asm/proc-fns.h>
 | 
					#include <asm/proc-fns.h>
 | 
				
			||||||
#include <asm-generic/mm_hooks.h>
 | 
					#include <asm-generic/mm_hooks.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -32,6 +32,7 @@
 | 
				
			||||||
#include <asm/setup.h>
 | 
					#include <asm/setup.h>
 | 
				
			||||||
#include <asm/mach-types.h>
 | 
					#include <asm/mach-types.h>
 | 
				
			||||||
#include <asm/cacheflush.h>
 | 
					#include <asm/cacheflush.h>
 | 
				
			||||||
 | 
					#include <asm/cachetype.h>
 | 
				
			||||||
#include <asm/tlbflush.h>
 | 
					#include <asm/tlbflush.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <asm/mach/arch.h>
 | 
					#include <asm/mach/arch.h>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -16,6 +16,7 @@
 | 
				
			||||||
#include <asm/shmparam.h>
 | 
					#include <asm/shmparam.h>
 | 
				
			||||||
#include <asm/tlbflush.h>
 | 
					#include <asm/tlbflush.h>
 | 
				
			||||||
#include <asm/cacheflush.h>
 | 
					#include <asm/cacheflush.h>
 | 
				
			||||||
 | 
					#include <asm/cachetype.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include "mm.h"
 | 
					#include "mm.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -18,6 +18,7 @@
 | 
				
			||||||
#include <linux/pagemap.h>
 | 
					#include <linux/pagemap.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <asm/cacheflush.h>
 | 
					#include <asm/cacheflush.h>
 | 
				
			||||||
 | 
					#include <asm/cachetype.h>
 | 
				
			||||||
#include <asm/pgtable.h>
 | 
					#include <asm/pgtable.h>
 | 
				
			||||||
#include <asm/tlbflush.h>
 | 
					#include <asm/tlbflush.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -12,6 +12,7 @@
 | 
				
			||||||
#include <linux/pagemap.h>
 | 
					#include <linux/pagemap.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#include <asm/cacheflush.h>
 | 
					#include <asm/cacheflush.h>
 | 
				
			||||||
 | 
					#include <asm/cachetype.h>
 | 
				
			||||||
#include <asm/system.h>
 | 
					#include <asm/system.h>
 | 
				
			||||||
#include <asm/tlbflush.h>
 | 
					#include <asm/tlbflush.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue