diff options
author | Russell King <rmk@dyn-67.arm.linux.org.uk> | 2008-08-10 13:08:10 -0400 |
---|---|---|
committer | Russell King <rmk+kernel@arm.linux.org.uk> | 2008-09-01 07:06:23 -0400 |
commit | 0ba8b9b273c45dd23f60ff700e265a0069b33758 (patch) | |
tree | cb6aef90464889a27215cf9b7204c11b12e7c628 | |
parent | b8e6c91c74e9f0279b7c51048779b3d62da60b88 (diff) |
[ARM] cputype: separate definitions, use them
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>
-rw-r--r-- | arch/arm/include/asm/cputype.h | 64 | ||||
-rw-r--r-- | arch/arm/include/asm/system.h | 58 | ||||
-rw-r--r-- | arch/arm/kernel/setup.c | 45 | ||||
-rw-r--r-- | arch/arm/mach-iop32x/iq31244.c | 4 | ||||
-rw-r--r-- | arch/arm/mach-ixp4xx/common-pci.c | 7 | ||||
-rw-r--r-- | arch/arm/mach-ixp4xx/include/mach/cpu.h | 9 | ||||
-rw-r--r-- | arch/arm/mach-omap2/id.c | 1 | ||||
-rw-r--r-- | arch/arm/mach-pxa/include/mach/hardware.h | 2 | ||||
-rw-r--r-- | arch/arm/mach-sa1100/cpu-sa1100.c | 4 | ||||
-rw-r--r-- | arch/arm/mach-sa1100/cpu-sa1110.c | 1 | ||||
-rw-r--r-- | arch/arm/mach-sa1100/include/mach/SA-1100.h | 16 | ||||
-rw-r--r-- | arch/arm/mach-sa1100/include/mach/hardware.h | 18 | ||||
-rw-r--r-- | arch/arm/mm/cache-xsc3l2.c | 3 | ||||
-rw-r--r-- | arch/arm/mm/ioremap.c | 1 | ||||
-rw-r--r-- | arch/arm/mm/mmap.c | 5 | ||||
-rw-r--r-- | arch/arm/mm/mmu.c | 1 | ||||
-rw-r--r-- | arch/arm/oprofile/op_model_xscale.c | 2 | ||||
-rw-r--r-- | drivers/watchdog/ixp4xx_wdt.c | 4 |
18 files changed, 131 insertions, 114 deletions
diff --git a/arch/arm/include/asm/cputype.h b/arch/arm/include/asm/cputype.h new file mode 100644 index 000000000000..7b9d27e749b8 --- /dev/null +++ b/arch/arm/include/asm/cputype.h | |||
@@ -0,0 +1,64 @@ | |||
1 | #ifndef __ASM_ARM_CPUTYPE_H | ||
2 | #define __ASM_ARM_CPUTYPE_H | ||
3 | |||
4 | #include <linux/stringify.h> | ||
5 | |||
6 | #define CPUID_ID 0 | ||
7 | #define CPUID_CACHETYPE 1 | ||
8 | #define CPUID_TCM 2 | ||
9 | #define CPUID_TLBTYPE 3 | ||
10 | |||
11 | #ifdef CONFIG_CPU_CP15 | ||
12 | #define read_cpuid(reg) \ | ||
13 | ({ \ | ||
14 | unsigned int __val; \ | ||
15 | asm("mrc p15, 0, %0, c0, c0, " __stringify(reg) \ | ||
16 | : "=r" (__val) \ | ||
17 | : \ | ||
18 | : "cc"); \ | ||
19 | __val; \ | ||
20 | }) | ||
21 | #else | ||
22 | extern unsigned int processor_id; | ||
23 | #define read_cpuid(reg) (processor_id) | ||
24 | #endif | ||
25 | |||
26 | /* | ||
27 | * The CPU ID never changes at run time, so we might as well tell the | ||
28 | * compiler that it's constant. Use this function to read the CPU ID | ||
29 | * rather than directly reading processor_id or read_cpuid() directly. | ||
30 | */ | ||
31 | static inline unsigned int __attribute_const__ read_cpuid_id(void) | ||
32 | { | ||
33 | return read_cpuid(CPUID_ID); | ||
34 | } | ||
35 | |||
36 | static inline unsigned int __attribute_const__ read_cpuid_cachetype(void) | ||
37 | { | ||
38 | return read_cpuid(CPUID_CACHETYPE); | ||
39 | } | ||
40 | |||
41 | /* | ||
42 | * Intel's XScale3 core supports some v6 features (supersections, L2) | ||
43 | * but advertises itself as v5 as it does not support the v6 ISA. For | ||
44 | * this reason, we need a way to explicitly test for this type of CPU. | ||
45 | */ | ||
46 | #ifndef CONFIG_CPU_XSC3 | ||
47 | #define cpu_is_xsc3() 0 | ||
48 | #else | ||
49 | static inline int cpu_is_xsc3(void) | ||
50 | { | ||
51 | if ((read_cpuid_id() & 0xffffe000) == 0x69056000) | ||
52 | return 1; | ||
53 | |||
54 | return 0; | ||
55 | } | ||
56 | #endif | ||
57 | |||
58 | #if !defined(CONFIG_CPU_XSCALE) && !defined(CONFIG_CPU_XSC3) | ||
59 | #define cpu_is_xscale() 0 | ||
60 | #else | ||
61 | #define cpu_is_xscale() 1 | ||
62 | #endif | ||
63 | |||
64 | #endif | ||
diff --git a/arch/arm/include/asm/system.h b/arch/arm/include/asm/system.h index 514af792a598..7aad78420f18 100644 --- a/arch/arm/include/asm/system.h +++ b/arch/arm/include/asm/system.h | |||
@@ -43,11 +43,6 @@ | |||
43 | #define CR_XP (1 << 23) /* Extended page tables */ | 43 | #define CR_XP (1 << 23) /* Extended page tables */ |
44 | #define CR_VE (1 << 24) /* Vectored interrupts */ | 44 | #define CR_VE (1 << 24) /* Vectored interrupts */ |
45 | 45 | ||
46 | #define CPUID_ID 0 | ||
47 | #define CPUID_CACHETYPE 1 | ||
48 | #define CPUID_TCM 2 | ||
49 | #define CPUID_TLBTYPE 3 | ||
50 | |||
51 | /* | 46 | /* |
52 | * This is used to ensure the compiler did actually allocate the register we | 47 | * This is used to ensure the compiler did actually allocate the register we |
53 | * asked it for some inline assembly sequences. Apparently we can't trust | 48 | * asked it for some inline assembly sequences. Apparently we can't trust |
@@ -61,36 +56,8 @@ | |||
61 | #ifndef __ASSEMBLY__ | 56 | #ifndef __ASSEMBLY__ |
62 | 57 | ||
63 | #include <linux/linkage.h> | 58 | #include <linux/linkage.h> |
64 | #include <linux/stringify.h> | ||
65 | #include <linux/irqflags.h> | 59 | #include <linux/irqflags.h> |
66 | 60 | ||
67 | #ifdef CONFIG_CPU_CP15 | ||
68 | #define read_cpuid(reg) \ | ||
69 | ({ \ | ||
70 | unsigned int __val; \ | ||
71 | asm("mrc p15, 0, %0, c0, c0, " __stringify(reg) \ | ||
72 | : "=r" (__val) \ | ||
73 | : \ | ||
74 | : "cc"); \ | ||
75 | __val; \ | ||
76 | }) | ||
77 | #else | ||
78 | extern unsigned int processor_id; | ||
79 | #define read_cpuid(reg) (processor_id) | ||
80 | #endif | ||
81 | |||
82 | /* | ||
83 | * The CPU ID never changes at run time, so we might as well tell the | ||
84 | * compiler that it's constant. Use this function to read the CPU ID | ||
85 | * rather than directly reading processor_id or read_cpuid() directly. | ||
86 | */ | ||
87 | static inline unsigned int read_cpuid_id(void) __attribute_const__; | ||
88 | |||
89 | static inline unsigned int read_cpuid_id(void) | ||
90 | { | ||
91 | return read_cpuid(CPUID_ID); | ||
92 | } | ||
93 | |||
94 | #define __exception __attribute__((section(".exception.text"))) | 61 | #define __exception __attribute__((section(".exception.text"))) |
95 | 62 | ||
96 | struct thread_info; | 63 | struct thread_info; |
@@ -131,31 +98,6 @@ extern void cpu_init(void); | |||
131 | void arm_machine_restart(char mode); | 98 | void arm_machine_restart(char mode); |
132 | extern void (*arm_pm_restart)(char str); | 99 | extern void (*arm_pm_restart)(char str); |
133 | 100 | ||
134 | /* | ||
135 | * Intel's XScale3 core supports some v6 features (supersections, L2) | ||
136 | * but advertises itself as v5 as it does not support the v6 ISA. For | ||
137 | * this reason, we need a way to explicitly test for this type of CPU. | ||
138 | */ | ||
139 | #ifndef CONFIG_CPU_XSC3 | ||
140 | #define cpu_is_xsc3() 0 | ||
141 | #else | ||
142 | static inline int cpu_is_xsc3(void) | ||
143 | { | ||
144 | extern unsigned int processor_id; | ||
145 | |||
146 | if ((processor_id & 0xffffe000) == 0x69056000) | ||
147 | return 1; | ||
148 | |||
149 | return 0; | ||
150 | } | ||
151 | #endif | ||
152 | |||
153 | #if !defined(CONFIG_CPU_XSCALE) && !defined(CONFIG_CPU_XSC3) | ||
154 | #define cpu_is_xscale() 0 | ||
155 | #else | ||
156 | #define cpu_is_xscale() 1 | ||
157 | #endif | ||
158 | |||
159 | #define UDBG_UNDEFINED (1 << 0) | 101 | #define UDBG_UNDEFINED (1 << 0) |
160 | #define UDBG_SYSCALL (1 << 1) | 102 | #define UDBG_SYSCALL (1 << 1) |
161 | #define UDBG_BADABORT (1 << 2) | 103 | #define UDBG_BADABORT (1 << 2) |
diff --git a/arch/arm/kernel/setup.c b/arch/arm/kernel/setup.c index 2ca7038b67a7..fb04703f2a8c 100644 --- a/arch/arm/kernel/setup.c +++ b/arch/arm/kernel/setup.c | |||
@@ -26,6 +26,7 @@ | |||
26 | #include <linux/fs.h> | 26 | #include <linux/fs.h> |
27 | 27 | ||
28 | #include <asm/cpu.h> | 28 | #include <asm/cpu.h> |
29 | #include <asm/cputype.h> | ||
29 | #include <asm/elf.h> | 30 | #include <asm/elf.h> |
30 | #include <asm/procinfo.h> | 31 | #include <asm/procinfo.h> |
31 | #include <asm/setup.h> | 32 | #include <asm/setup.h> |
@@ -280,9 +281,9 @@ static inline void dump_cache(const char *prefix, int cpu, unsigned int cache) | |||
280 | 281 | ||
281 | static void __init dump_cpu_info(int cpu) | 282 | static void __init dump_cpu_info(int cpu) |
282 | { | 283 | { |
283 | unsigned int info = read_cpuid(CPUID_CACHETYPE); | 284 | unsigned int info = read_cpuid_cachetype(); |
284 | 285 | ||
285 | if (info != processor_id) { | 286 | if (info != read_cpuid_id()) { |
286 | printk("CPU%u: D %s %s cache\n", cpu, cache_is_vivt() ? "VIVT" : "VIPT", | 287 | printk("CPU%u: D %s %s cache\n", cpu, cache_is_vivt() ? "VIVT" : "VIPT", |
287 | cache_types[CACHE_TYPE(info)]); | 288 | cache_types[CACHE_TYPE(info)]); |
288 | if (CACHE_S(info)) { | 289 | if (CACHE_S(info)) { |
@@ -301,15 +302,15 @@ int cpu_architecture(void) | |||
301 | { | 302 | { |
302 | int cpu_arch; | 303 | int cpu_arch; |
303 | 304 | ||
304 | if ((processor_id & 0x0008f000) == 0) { | 305 | if ((read_cpuid_id() & 0x0008f000) == 0) { |
305 | cpu_arch = CPU_ARCH_UNKNOWN; | 306 | cpu_arch = CPU_ARCH_UNKNOWN; |
306 | } else if ((processor_id & 0x0008f000) == 0x00007000) { | 307 | } else if ((read_cpuid_id() & 0x0008f000) == 0x00007000) { |
307 | cpu_arch = (processor_id & (1 << 23)) ? CPU_ARCH_ARMv4T : CPU_ARCH_ARMv3; | 308 | cpu_arch = (read_cpuid_id() & (1 << 23)) ? CPU_ARCH_ARMv4T : CPU_ARCH_ARMv3; |
308 | } else if ((processor_id & 0x00080000) == 0x00000000) { | 309 | } else if ((read_cpuid_id() & 0x00080000) == 0x00000000) { |
309 | cpu_arch = (processor_id >> 16) & 7; | 310 | cpu_arch = (read_cpuid_id() >> 16) & 7; |
310 | if (cpu_arch) | 311 | if (cpu_arch) |
311 | cpu_arch += CPU_ARCH_ARMv3; | 312 | cpu_arch += CPU_ARCH_ARMv3; |
312 | } else if ((processor_id & 0x000f0000) == 0x000f0000) { | 313 | } else if ((read_cpuid_id() & 0x000f0000) == 0x000f0000) { |
313 | unsigned int mmfr0; | 314 | unsigned int mmfr0; |
314 | 315 | ||
315 | /* Revised CPUID format. Read the Memory Model Feature | 316 | /* Revised CPUID format. Read the Memory Model Feature |
@@ -346,10 +347,10 @@ static void __init setup_processor(void) | |||
346 | * types. The linker builds this table for us from the | 347 | * types. The linker builds this table for us from the |
347 | * entries in arch/arm/mm/proc-*.S | 348 | * entries in arch/arm/mm/proc-*.S |
348 | */ | 349 | */ |
349 | list = lookup_processor_type(processor_id); | 350 | list = lookup_processor_type(read_cpuid_id()); |
350 | if (!list) { | 351 | if (!list) { |
351 | printk("CPU configuration botched (ID %08x), unable " | 352 | printk("CPU configuration botched (ID %08x), unable " |
352 | "to continue.\n", processor_id); | 353 | "to continue.\n", read_cpuid_id()); |
353 | while (1); | 354 | while (1); |
354 | } | 355 | } |
355 | 356 | ||
@@ -369,7 +370,7 @@ static void __init setup_processor(void) | |||
369 | #endif | 370 | #endif |
370 | 371 | ||
371 | printk("CPU: %s [%08x] revision %d (ARMv%s), cr=%08lx\n", | 372 | printk("CPU: %s [%08x] revision %d (ARMv%s), cr=%08lx\n", |
372 | cpu_name, processor_id, (int)processor_id & 15, | 373 | cpu_name, read_cpuid_id(), read_cpuid_id() & 15, |
373 | proc_arch[cpu_architecture()], cr_alignment); | 374 | proc_arch[cpu_architecture()], cr_alignment); |
374 | 375 | ||
375 | sprintf(init_utsname()->machine, "%s%c", list->arch_name, ENDIANNESS); | 376 | sprintf(init_utsname()->machine, "%s%c", list->arch_name, ENDIANNESS); |
@@ -922,7 +923,7 @@ static int c_show(struct seq_file *m, void *v) | |||
922 | int i; | 923 | int i; |
923 | 924 | ||
924 | seq_printf(m, "Processor\t: %s rev %d (%s)\n", | 925 | seq_printf(m, "Processor\t: %s rev %d (%s)\n", |
925 | cpu_name, (int)processor_id & 15, elf_platform); | 926 | cpu_name, read_cpuid_id() & 15, elf_platform); |
926 | 927 | ||
927 | #if defined(CONFIG_SMP) | 928 | #if defined(CONFIG_SMP) |
928 | for_each_online_cpu(i) { | 929 | for_each_online_cpu(i) { |
@@ -949,30 +950,30 @@ static int c_show(struct seq_file *m, void *v) | |||
949 | if (elf_hwcap & (1 << i)) | 950 | if (elf_hwcap & (1 << i)) |
950 | seq_printf(m, "%s ", hwcap_str[i]); | 951 | seq_printf(m, "%s ", hwcap_str[i]); |
951 | 952 | ||
952 | seq_printf(m, "\nCPU implementer\t: 0x%02x\n", processor_id >> 24); | 953 | seq_printf(m, "\nCPU implementer\t: 0x%02x\n", read_cpuid_id() >> 24); |
953 | seq_printf(m, "CPU architecture: %s\n", proc_arch[cpu_architecture()]); | 954 | seq_printf(m, "CPU architecture: %s\n", proc_arch[cpu_architecture()]); |
954 | 955 | ||
955 | if ((processor_id & 0x0008f000) == 0x00000000) { | 956 | if ((read_cpuid_id() & 0x0008f000) == 0x00000000) { |
956 | /* pre-ARM7 */ | 957 | /* pre-ARM7 */ |
957 | seq_printf(m, "CPU part\t: %07x\n", processor_id >> 4); | 958 | seq_printf(m, "CPU part\t: %07x\n", read_cpuid_id() >> 4); |
958 | } else { | 959 | } else { |
959 | if ((processor_id & 0x0008f000) == 0x00007000) { | 960 | if ((read_cpuid_id() & 0x0008f000) == 0x00007000) { |
960 | /* ARM7 */ | 961 | /* ARM7 */ |
961 | seq_printf(m, "CPU variant\t: 0x%02x\n", | 962 | seq_printf(m, "CPU variant\t: 0x%02x\n", |
962 | (processor_id >> 16) & 127); | 963 | (read_cpuid_id() >> 16) & 127); |
963 | } else { | 964 | } else { |
964 | /* post-ARM7 */ | 965 | /* post-ARM7 */ |
965 | seq_printf(m, "CPU variant\t: 0x%x\n", | 966 | seq_printf(m, "CPU variant\t: 0x%x\n", |
966 | (processor_id >> 20) & 15); | 967 | (read_cpuid_id() >> 20) & 15); |
967 | } | 968 | } |
968 | seq_printf(m, "CPU part\t: 0x%03x\n", | 969 | seq_printf(m, "CPU part\t: 0x%03x\n", |
969 | (processor_id >> 4) & 0xfff); | 970 | (read_cpuid_id() >> 4) & 0xfff); |
970 | } | 971 | } |
971 | seq_printf(m, "CPU revision\t: %d\n", processor_id & 15); | 972 | seq_printf(m, "CPU revision\t: %d\n", read_cpuid_id() & 15); |
972 | 973 | ||
973 | { | 974 | { |
974 | unsigned int cache_info = read_cpuid(CPUID_CACHETYPE); | 975 | unsigned int cache_info = read_cpuid_cachetype(); |
975 | if (cache_info != processor_id) { | 976 | if (cache_info != read_cpuid_id()) { |
976 | seq_printf(m, "Cache type\t: %s\n" | 977 | seq_printf(m, "Cache type\t: %s\n" |
977 | "Cache clean\t: %s\n" | 978 | "Cache clean\t: %s\n" |
978 | "Cache lockdown\t: %s\n" | 979 | "Cache lockdown\t: %s\n" |
diff --git a/arch/arm/mach-iop32x/iq31244.c b/arch/arm/mach-iop32x/iq31244.c index 082818aaa205..1845643ed635 100644 --- a/arch/arm/mach-iop32x/iq31244.c +++ b/arch/arm/mach-iop32x/iq31244.c | |||
@@ -27,6 +27,7 @@ | |||
27 | #include <linux/mtd/physmap.h> | 27 | #include <linux/mtd/physmap.h> |
28 | #include <linux/platform_device.h> | 28 | #include <linux/platform_device.h> |
29 | #include <mach/hardware.h> | 29 | #include <mach/hardware.h> |
30 | #include <asm/cputype.h> | ||
30 | #include <asm/io.h> | 31 | #include <asm/io.h> |
31 | #include <asm/irq.h> | 32 | #include <asm/irq.h> |
32 | #include <asm/mach/arch.h> | 33 | #include <asm/mach/arch.h> |
@@ -49,8 +50,7 @@ static int force_ep80219; | |||
49 | 50 | ||
50 | static int is_80219(void) | 51 | static int is_80219(void) |
51 | { | 52 | { |
52 | extern int processor_id; | 53 | return !!((read_cpuid_id() & 0xffffffe0) == 0x69052e20); |
53 | return !!((processor_id & 0xffffffe0) == 0x69052e20); | ||
54 | } | 54 | } |
55 | 55 | ||
56 | static int is_ep80219(void) | 56 | static int is_ep80219(void) |
diff --git a/arch/arm/mach-ixp4xx/common-pci.c b/arch/arm/mach-ixp4xx/common-pci.c index 192538a04575..f74a460d4a32 100644 --- a/arch/arm/mach-ixp4xx/common-pci.c +++ b/arch/arm/mach-ixp4xx/common-pci.c | |||
@@ -27,6 +27,7 @@ | |||
27 | #include <linux/device.h> | 27 | #include <linux/device.h> |
28 | #include <asm/dma-mapping.h> | 28 | #include <asm/dma-mapping.h> |
29 | 29 | ||
30 | #include <asm/cputype.h> | ||
30 | #include <asm/io.h> | 31 | #include <asm/io.h> |
31 | #include <asm/irq.h> | 32 | #include <asm/irq.h> |
32 | #include <asm/sizes.h> | 33 | #include <asm/sizes.h> |
@@ -366,15 +367,13 @@ void __init ixp4xx_adjust_zones(int node, unsigned long *zone_size, | |||
366 | 367 | ||
367 | void __init ixp4xx_pci_preinit(void) | 368 | void __init ixp4xx_pci_preinit(void) |
368 | { | 369 | { |
369 | unsigned long processor_id; | 370 | unsigned long cpuid = read_cpuid_id(); |
370 | |||
371 | asm("mrc p15, 0, %0, cr0, cr0, 0;" : "=r"(processor_id) :); | ||
372 | 371 | ||
373 | /* | 372 | /* |
374 | * Determine which PCI read method to use. | 373 | * Determine which PCI read method to use. |
375 | * Rev 0 IXP425 requires workaround. | 374 | * Rev 0 IXP425 requires workaround. |
376 | */ | 375 | */ |
377 | if (!(processor_id & 0xf) && cpu_is_ixp42x()) { | 376 | if (!(cpuid & 0xf) && cpu_is_ixp42x()) { |
378 | printk("PCI: IXP42x A0 silicon detected - " | 377 | printk("PCI: IXP42x A0 silicon detected - " |
379 | "PCI Non-Prefetch Workaround Enabled\n"); | 378 | "PCI Non-Prefetch Workaround Enabled\n"); |
380 | ixp4xx_pci_read = ixp4xx_pci_read_errata; | 379 | ixp4xx_pci_read = ixp4xx_pci_read_errata; |
diff --git a/arch/arm/mach-ixp4xx/include/mach/cpu.h b/arch/arm/mach-ixp4xx/include/mach/cpu.h index ff8aa2393bf9..51bd69c46d94 100644 --- a/arch/arm/mach-ixp4xx/include/mach/cpu.h +++ b/arch/arm/mach-ixp4xx/include/mach/cpu.h | |||
@@ -14,18 +14,19 @@ | |||
14 | #ifndef __ASM_ARCH_CPU_H__ | 14 | #ifndef __ASM_ARCH_CPU_H__ |
15 | #define __ASM_ARCH_CPU_H__ | 15 | #define __ASM_ARCH_CPU_H__ |
16 | 16 | ||
17 | extern unsigned int processor_id; | 17 | #include <asm/cputype.h> |
18 | |||
18 | /* Processor id value in CP15 Register 0 */ | 19 | /* Processor id value in CP15 Register 0 */ |
19 | #define IXP425_PROCESSOR_ID_VALUE 0x690541c0 | 20 | #define IXP425_PROCESSOR_ID_VALUE 0x690541c0 |
20 | #define IXP435_PROCESSOR_ID_VALUE 0x69054040 | 21 | #define IXP435_PROCESSOR_ID_VALUE 0x69054040 |
21 | #define IXP465_PROCESSOR_ID_VALUE 0x69054200 | 22 | #define IXP465_PROCESSOR_ID_VALUE 0x69054200 |
22 | #define IXP4XX_PROCESSOR_ID_MASK 0xfffffff0 | 23 | #define IXP4XX_PROCESSOR_ID_MASK 0xfffffff0 |
23 | 24 | ||
24 | #define cpu_is_ixp42x() ((processor_id & IXP4XX_PROCESSOR_ID_MASK) == \ | 25 | #define cpu_is_ixp42x() ((read_cpuid_id() & IXP4XX_PROCESSOR_ID_MASK) == \ |
25 | IXP425_PROCESSOR_ID_VALUE) | 26 | IXP425_PROCESSOR_ID_VALUE) |
26 | #define cpu_is_ixp43x() ((processor_id & IXP4XX_PROCESSOR_ID_MASK) == \ | 27 | #define cpu_is_ixp43x() ((read_cpuid_id() & IXP4XX_PROCESSOR_ID_MASK) == \ |
27 | IXP435_PROCESSOR_ID_VALUE) | 28 | IXP435_PROCESSOR_ID_VALUE) |
28 | #define cpu_is_ixp46x() ((processor_id & IXP4XX_PROCESSOR_ID_MASK) == \ | 29 | #define cpu_is_ixp46x() ((read_cpuid_id() & IXP4XX_PROCESSOR_ID_MASK) == \ |
29 | IXP465_PROCESSOR_ID_VALUE) | 30 | IXP465_PROCESSOR_ID_VALUE) |
30 | 31 | ||
31 | static inline u32 ixp4xx_read_feature_bits(void) | 32 | static inline u32 ixp4xx_read_feature_bits(void) |
diff --git a/arch/arm/mach-omap2/id.c b/arch/arm/mach-omap2/id.c index a5d4526ac4d6..2fd8a2d71e56 100644 --- a/arch/arm/mach-omap2/id.c +++ b/arch/arm/mach-omap2/id.c | |||
@@ -15,6 +15,7 @@ | |||
15 | #include <linux/kernel.h> | 15 | #include <linux/kernel.h> |
16 | #include <linux/init.h> | 16 | #include <linux/init.h> |
17 | 17 | ||
18 | #include <asm/cputype.h> | ||
18 | #include <asm/io.h> | 19 | #include <asm/io.h> |
19 | 20 | ||
20 | #include <mach/control.h> | 21 | #include <mach/control.h> |
diff --git a/arch/arm/mach-pxa/include/mach/hardware.h b/arch/arm/mach-pxa/include/mach/hardware.h index e89df4d0d239..a1a0a2ffd642 100644 --- a/arch/arm/mach-pxa/include/mach/hardware.h +++ b/arch/arm/mach-pxa/include/mach/hardware.h | |||
@@ -62,6 +62,8 @@ | |||
62 | 62 | ||
63 | #ifndef __ASSEMBLY__ | 63 | #ifndef __ASSEMBLY__ |
64 | 64 | ||
65 | #include <asm/cputype.h> | ||
66 | |||
65 | #ifdef CONFIG_PXA25x | 67 | #ifdef CONFIG_PXA25x |
66 | #define __cpu_is_pxa21x(id) \ | 68 | #define __cpu_is_pxa21x(id) \ |
67 | ({ \ | 69 | ({ \ |
diff --git a/arch/arm/mach-sa1100/cpu-sa1100.c b/arch/arm/mach-sa1100/cpu-sa1100.c index da3a898a6d66..f7fa03478efd 100644 --- a/arch/arm/mach-sa1100/cpu-sa1100.c +++ b/arch/arm/mach-sa1100/cpu-sa1100.c | |||
@@ -88,6 +88,8 @@ | |||
88 | #include <linux/init.h> | 88 | #include <linux/init.h> |
89 | #include <linux/cpufreq.h> | 89 | #include <linux/cpufreq.h> |
90 | 90 | ||
91 | #include <asm/cputype.h> | ||
92 | |||
91 | #include <mach/hardware.h> | 93 | #include <mach/hardware.h> |
92 | 94 | ||
93 | #include "generic.h" | 95 | #include "generic.h" |
@@ -240,7 +242,7 @@ static struct cpufreq_driver sa1100_driver = { | |||
240 | 242 | ||
241 | static int __init sa1100_dram_init(void) | 243 | static int __init sa1100_dram_init(void) |
242 | { | 244 | { |
243 | if ((processor_id & CPU_SA1100_MASK) == CPU_SA1100_ID) | 245 | if (cpu_is_sa1100()) |
244 | return cpufreq_register_driver(&sa1100_driver); | 246 | return cpufreq_register_driver(&sa1100_driver); |
245 | else | 247 | else |
246 | return -ENODEV; | 248 | return -ENODEV; |
diff --git a/arch/arm/mach-sa1100/cpu-sa1110.c b/arch/arm/mach-sa1100/cpu-sa1110.c index 029dbfbbafcf..78d8294756ac 100644 --- a/arch/arm/mach-sa1100/cpu-sa1110.c +++ b/arch/arm/mach-sa1100/cpu-sa1110.c | |||
@@ -25,6 +25,7 @@ | |||
25 | #include <linux/init.h> | 25 | #include <linux/init.h> |
26 | 26 | ||
27 | #include <mach/hardware.h> | 27 | #include <mach/hardware.h> |
28 | #include <asm/cputype.h> | ||
28 | #include <asm/mach-types.h> | 29 | #include <asm/mach-types.h> |
29 | #include <asm/io.h> | 30 | #include <asm/io.h> |
30 | #include <asm/system.h> | 31 | #include <asm/system.h> |
diff --git a/arch/arm/mach-sa1100/include/mach/SA-1100.h b/arch/arm/mach-sa1100/include/mach/SA-1100.h index 62aaf04a3906..4f7ea012e1e5 100644 --- a/arch/arm/mach-sa1100/include/mach/SA-1100.h +++ b/arch/arm/mach-sa1100/include/mach/SA-1100.h | |||
@@ -2054,19 +2054,3 @@ | |||
2054 | /* active display mode) */ | 2054 | /* active display mode) */ |
2055 | #define LCCR3_OutEnH (LCCR3_OEP*0) /* Output Enable active High */ | 2055 | #define LCCR3_OutEnH (LCCR3_OEP*0) /* Output Enable active High */ |
2056 | #define LCCR3_OutEnL (LCCR3_OEP*1) /* Output Enable active Low */ | 2056 | #define LCCR3_OutEnL (LCCR3_OEP*1) /* Output Enable active Low */ |
2057 | |||
2058 | #ifndef __ASSEMBLY__ | ||
2059 | extern unsigned int processor_id; | ||
2060 | #endif | ||
2061 | |||
2062 | #define CPU_REVISION (processor_id & 15) | ||
2063 | #define CPU_SA1110_A0 (0) | ||
2064 | #define CPU_SA1110_B0 (4) | ||
2065 | #define CPU_SA1110_B1 (5) | ||
2066 | #define CPU_SA1110_B2 (6) | ||
2067 | #define CPU_SA1110_B4 (8) | ||
2068 | |||
2069 | #define CPU_SA1100_ID (0x4401a110) | ||
2070 | #define CPU_SA1100_MASK (0xfffffff0) | ||
2071 | #define CPU_SA1110_ID (0x6901b110) | ||
2072 | #define CPU_SA1110_MASK (0xfffffff0) | ||
diff --git a/arch/arm/mach-sa1100/include/mach/hardware.h b/arch/arm/mach-sa1100/include/mach/hardware.h index 5976435f42c2..b70846c096aa 100644 --- a/arch/arm/mach-sa1100/include/mach/hardware.h +++ b/arch/arm/mach-sa1100/include/mach/hardware.h | |||
@@ -36,8 +36,26 @@ | |||
36 | #define io_v2p( x ) \ | 36 | #define io_v2p( x ) \ |
37 | ( (((x)&0x00ffffff) | (((x)&(0x30000000>>VIO_SHIFT))<<VIO_SHIFT)) + PIO_START ) | 37 | ( (((x)&0x00ffffff) | (((x)&(0x30000000>>VIO_SHIFT))<<VIO_SHIFT)) + PIO_START ) |
38 | 38 | ||
39 | #define CPU_SA1110_A0 (0) | ||
40 | #define CPU_SA1110_B0 (4) | ||
41 | #define CPU_SA1110_B1 (5) | ||
42 | #define CPU_SA1110_B2 (6) | ||
43 | #define CPU_SA1110_B4 (8) | ||
44 | |||
45 | #define CPU_SA1100_ID (0x4401a110) | ||
46 | #define CPU_SA1100_MASK (0xfffffff0) | ||
47 | #define CPU_SA1110_ID (0x6901b110) | ||
48 | #define CPU_SA1110_MASK (0xfffffff0) | ||
49 | |||
39 | #ifndef __ASSEMBLY__ | 50 | #ifndef __ASSEMBLY__ |
40 | 51 | ||
52 | #include <asm/cputype.h> | ||
53 | |||
54 | #define CPU_REVISION (read_cpuid_id() & 15) | ||
55 | |||
56 | #define cpu_is_sa1100() ((read_cpuid_id() & CPU_SA1100_MASK) == CPU_SA1100_ID) | ||
57 | #define cpu_is_sa1110() ((read_cpuid_id() & CPU_SA1110_MASK) == CPU_SA1110_ID) | ||
58 | |||
41 | # define __REG(x) (*((volatile unsigned long *)io_p2v(x))) | 59 | # define __REG(x) (*((volatile unsigned long *)io_p2v(x))) |
42 | # define __PREG(x) (io_v2p((unsigned long)&(x))) | 60 | # define __PREG(x) (io_v2p((unsigned long)&(x))) |
43 | 61 | ||
diff --git a/arch/arm/mm/cache-xsc3l2.c b/arch/arm/mm/cache-xsc3l2.c index 158bd96763d3..10b1bae1a258 100644 --- a/arch/arm/mm/cache-xsc3l2.c +++ b/arch/arm/mm/cache-xsc3l2.c | |||
@@ -18,10 +18,11 @@ | |||
18 | */ | 18 | */ |
19 | #include <linux/init.h> | 19 | #include <linux/init.h> |
20 | #include <linux/spinlock.h> | 20 | #include <linux/spinlock.h> |
21 | #include <linux/io.h> | ||
21 | 22 | ||
22 | #include <asm/system.h> | 23 | #include <asm/system.h> |
24 | #include <asm/cputype.h> | ||
23 | #include <asm/cacheflush.h> | 25 | #include <asm/cacheflush.h> |
24 | #include <asm/io.h> | ||
25 | 26 | ||
26 | #define CR_L2 (1 << 26) | 27 | #define CR_L2 (1 << 26) |
27 | 28 | ||
diff --git a/arch/arm/mm/ioremap.c b/arch/arm/mm/ioremap.c index b81dbf9ffb77..20e4454e452e 100644 --- a/arch/arm/mm/ioremap.c +++ b/arch/arm/mm/ioremap.c | |||
@@ -25,6 +25,7 @@ | |||
25 | #include <linux/mm.h> | 25 | #include <linux/mm.h> |
26 | #include <linux/vmalloc.h> | 26 | #include <linux/vmalloc.h> |
27 | 27 | ||
28 | #include <asm/cputype.h> | ||
28 | #include <asm/cacheflush.h> | 29 | #include <asm/cacheflush.h> |
29 | #include <asm/io.h> | 30 | #include <asm/io.h> |
30 | #include <asm/mmu_context.h> | 31 | #include <asm/mmu_context.h> |
diff --git a/arch/arm/mm/mmap.c b/arch/arm/mm/mmap.c index 3f6dc40b8353..28ead8393b5a 100644 --- a/arch/arm/mm/mmap.c +++ b/arch/arm/mm/mmap.c | |||
@@ -6,6 +6,7 @@ | |||
6 | #include <linux/mman.h> | 6 | #include <linux/mman.h> |
7 | #include <linux/shm.h> | 7 | #include <linux/shm.h> |
8 | #include <linux/sched.h> | 8 | #include <linux/sched.h> |
9 | #include <asm/cputype.h> | ||
9 | #include <asm/system.h> | 10 | #include <asm/system.h> |
10 | 11 | ||
11 | #define COLOUR_ALIGN(addr,pgoff) \ | 12 | #define COLOUR_ALIGN(addr,pgoff) \ |
@@ -37,8 +38,8 @@ arch_get_unmapped_area(struct file *filp, unsigned long addr, | |||
37 | * caches alias. This is indicated by bits 9 and 21 of the | 38 | * caches alias. This is indicated by bits 9 and 21 of the |
38 | * cache type register. | 39 | * cache type register. |
39 | */ | 40 | */ |
40 | cache_type = read_cpuid(CPUID_CACHETYPE); | 41 | cache_type = read_cpuid_cachetype(); |
41 | if (cache_type != read_cpuid(CPUID_ID)) { | 42 | if (cache_type != read_cpuid_id()) { |
42 | aliasing = (cache_type | cache_type >> 12) & (1 << 11); | 43 | aliasing = (cache_type | cache_type >> 12) & (1 << 11); |
43 | if (aliasing) | 44 | if (aliasing) |
44 | do_align = filp || flags & MAP_SHARED; | 45 | do_align = filp || flags & MAP_SHARED; |
diff --git a/arch/arm/mm/mmu.c b/arch/arm/mm/mmu.c index 25d9a11eb617..c2bbe3f311f0 100644 --- a/arch/arm/mm/mmu.c +++ b/arch/arm/mm/mmu.c | |||
@@ -15,6 +15,7 @@ | |||
15 | #include <linux/mman.h> | 15 | #include <linux/mman.h> |
16 | #include <linux/nodemask.h> | 16 | #include <linux/nodemask.h> |
17 | 17 | ||
18 | #include <asm/cputype.h> | ||
18 | #include <asm/mach-types.h> | 19 | #include <asm/mach-types.h> |
19 | #include <asm/setup.h> | 20 | #include <asm/setup.h> |
20 | #include <asm/sizes.h> | 21 | #include <asm/sizes.h> |
diff --git a/arch/arm/oprofile/op_model_xscale.c b/arch/arm/oprofile/op_model_xscale.c index 7c3289c2acd7..724ab9ce2526 100644 --- a/arch/arm/oprofile/op_model_xscale.c +++ b/arch/arm/oprofile/op_model_xscale.c | |||
@@ -22,7 +22,7 @@ | |||
22 | #include <linux/interrupt.h> | 22 | #include <linux/interrupt.h> |
23 | #include <linux/irq.h> | 23 | #include <linux/irq.h> |
24 | 24 | ||
25 | #include <asm/system.h> | 25 | #include <asm/cputype.h> |
26 | 26 | ||
27 | #include "op_counter.h" | 27 | #include "op_counter.h" |
28 | #include "op_arm_model.h" | 28 | #include "op_arm_model.h" |
diff --git a/drivers/watchdog/ixp4xx_wdt.c b/drivers/watchdog/ixp4xx_wdt.c index 8302ef005be7..147b4d5c63b3 100644 --- a/drivers/watchdog/ixp4xx_wdt.c +++ b/drivers/watchdog/ixp4xx_wdt.c | |||
@@ -174,10 +174,8 @@ static struct miscdevice ixp4xx_wdt_miscdev = { | |||
174 | static int __init ixp4xx_wdt_init(void) | 174 | static int __init ixp4xx_wdt_init(void) |
175 | { | 175 | { |
176 | int ret; | 176 | int ret; |
177 | unsigned long processor_id; | ||
178 | 177 | ||
179 | asm("mrc p15, 0, %0, cr0, cr0, 0;" : "=r"(processor_id) :); | 178 | if (!(read_cpuid_id() & 0xf) && !cpu_is_ixp46x()) { |
180 | if (!(processor_id & 0xf) && !cpu_is_ixp46x()) { | ||
181 | printk(KERN_ERR "IXP4XXX Watchdog: Rev. A0 IXP42x CPU detected" | 179 | printk(KERN_ERR "IXP4XXX Watchdog: Rev. A0 IXP42x CPU detected" |
182 | " - watchdog disabled\n"); | 180 | " - watchdog disabled\n"); |
183 | 181 | ||