diff options
Diffstat (limited to 'arch/arm/kernel/setup.c')
| -rw-r--r-- | arch/arm/kernel/setup.c | 20 | 
1 files changed, 19 insertions, 1 deletions
diff --git a/arch/arm/kernel/setup.c b/arch/arm/kernel/setup.c index e514c76043b..10fce616e99 100644 --- a/arch/arm/kernel/setup.c +++ b/arch/arm/kernel/setup.c @@ -29,6 +29,8 @@  #include <linux/fs.h>  #include <linux/proc_fs.h>  #include <linux/memblock.h> +#include <linux/bug.h> +#include <linux/compiler.h>  #include <asm/unified.h>  #include <asm/cpu.h> @@ -42,6 +44,7 @@  #include <asm/cacheflush.h>  #include <asm/cachetype.h>  #include <asm/tlbflush.h> +#include <asm/system.h>  #include <asm/prom.h>  #include <asm/mach/arch.h> @@ -115,6 +118,13 @@ struct outer_cache_fns outer_cache __read_mostly;  EXPORT_SYMBOL(outer_cache);  #endif +/* + * Cached cpu_architecture() result for use by assembler code. + * C code should use the cpu_architecture() function instead of accessing this + * variable directly. + */ +int __cpu_architecture __read_mostly = CPU_ARCH_UNKNOWN; +  struct stack {  	u32 irq[3];  	u32 abt[3]; @@ -210,7 +220,7 @@ static const char *proc_arch[] = {  	"?(17)",  }; -int cpu_architecture(void) +static int __get_cpu_architecture(void)  {  	int cpu_arch; @@ -243,6 +253,13 @@ int cpu_architecture(void)  	return cpu_arch;  } +int __pure cpu_architecture(void) +{ +	BUG_ON(__cpu_architecture == CPU_ARCH_UNKNOWN); + +	return __cpu_architecture; +} +  static int cpu_has_aliasing_icache(unsigned int arch)  {  	int aliasing_icache; @@ -414,6 +431,7 @@ static void __init setup_processor(void)  	}  	cpu_name = list->cpu_name; +	__cpu_architecture = __get_cpu_architecture();  #ifdef MULTI_CPU  	processor = *list->proc;  |