Add asm/cputype.h, moving functions and definitions from asm/system.h there. Convert all users of 'processor_id' to the more efficient read_cpuid_id() function. Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>tirimbino
parent
b8e6c91c74
commit
0ba8b9b273
@ -0,0 +1,64 @@ |
||||
#ifndef __ASM_ARM_CPUTYPE_H |
||||
#define __ASM_ARM_CPUTYPE_H |
||||
|
||||
#include <linux/stringify.h> |
||||
|
||||
#define CPUID_ID 0 |
||||
#define CPUID_CACHETYPE 1 |
||||
#define CPUID_TCM 2 |
||||
#define CPUID_TLBTYPE 3 |
||||
|
||||
#ifdef CONFIG_CPU_CP15 |
||||
#define read_cpuid(reg) \ |
||||
({ \
|
||||
unsigned int __val; \
|
||||
asm("mrc p15, 0, %0, c0, c0, " __stringify(reg) \
|
||||
: "=r" (__val) \
|
||||
: \
|
||||
: "cc"); \
|
||||
__val; \
|
||||
}) |
||||
#else |
||||
extern unsigned int processor_id; |
||||
#define read_cpuid(reg) (processor_id) |
||||
#endif |
||||
|
||||
/*
|
||||
* The CPU ID never changes at run time, so we might as well tell the |
||||
* compiler that it's constant. Use this function to read the CPU ID |
||||
* rather than directly reading processor_id or read_cpuid() directly. |
||||
*/ |
||||
static inline unsigned int __attribute_const__ read_cpuid_id(void) |
||||
{ |
||||
return read_cpuid(CPUID_ID); |
||||
} |
||||
|
||||
static inline unsigned int __attribute_const__ read_cpuid_cachetype(void) |
||||
{ |
||||
return read_cpuid(CPUID_CACHETYPE); |
||||
} |
||||
|
||||
/*
|
||||
* Intel's XScale3 core supports some v6 features (supersections, L2) |
||||
* but advertises itself as v5 as it does not support the v6 ISA. For |
||||
* this reason, we need a way to explicitly test for this type of CPU. |
||||
*/ |
||||
#ifndef CONFIG_CPU_XSC3 |
||||
#define cpu_is_xsc3() 0 |
||||
#else |
||||
static inline int cpu_is_xsc3(void) |
||||
{ |
||||
if ((read_cpuid_id() & 0xffffe000) == 0x69056000) |
||||
return 1; |
||||
|
||||
return 0; |
||||
} |
||||
#endif |
||||
|
||||
#if !defined(CONFIG_CPU_XSCALE) && !defined(CONFIG_CPU_XSC3) |
||||
#define cpu_is_xscale() 0 |
||||
#else |
||||
#define cpu_is_xscale() 1 |
||||
#endif |
||||
|
||||
#endif |
Loading…
Reference in new issue