diff options
-rw-r--r-- | arch/arm/include/asm/cputype.h | 37 | ||||
-rw-r--r-- | arch/arm/include/asm/smp_scu.h | 2 | ||||
-rw-r--r-- | arch/arm/kernel/perf_event_cpu.c | 55 | ||||
-rw-r--r-- | arch/arm/kvm/guest.c | 8 | ||||
-rw-r--r-- | arch/arm/mach-exynos/mcpm-exynos.c | 4 | ||||
-rw-r--r-- | arch/arm/mach-exynos/platsmp.c | 4 | ||||
-rw-r--r-- | arch/arm/mach-exynos/pm.c | 11 | ||||
-rw-r--r-- | arch/arm/mach-vexpress/tc2_pm.c | 4 | ||||
-rw-r--r-- | arch/arm/mm/cache-l2x0.c | 2 | ||||
-rw-r--r-- | drivers/clocksource/arm_global_timer.c | 2 |
10 files changed, 66 insertions, 63 deletions
diff --git a/arch/arm/include/asm/cputype.h b/arch/arm/include/asm/cputype.h index 8c2b7321a478..963a2515906d 100644 --- a/arch/arm/include/asm/cputype.h +++ b/arch/arm/include/asm/cputype.h | |||
@@ -62,17 +62,18 @@ | |||
62 | #define ARM_CPU_IMP_ARM 0x41 | 62 | #define ARM_CPU_IMP_ARM 0x41 |
63 | #define ARM_CPU_IMP_INTEL 0x69 | 63 | #define ARM_CPU_IMP_INTEL 0x69 |
64 | 64 | ||
65 | #define ARM_CPU_PART_ARM1136 0xB360 | 65 | /* ARM implemented processors */ |
66 | #define ARM_CPU_PART_ARM1156 0xB560 | 66 | #define ARM_CPU_PART_ARM1136 0x4100b360 |
67 | #define ARM_CPU_PART_ARM1176 0xB760 | 67 | #define ARM_CPU_PART_ARM1156 0x4100b560 |
68 | #define ARM_CPU_PART_ARM11MPCORE 0xB020 | 68 | #define ARM_CPU_PART_ARM1176 0x4100b760 |
69 | #define ARM_CPU_PART_CORTEX_A8 0xC080 | 69 | #define ARM_CPU_PART_ARM11MPCORE 0x4100b020 |
70 | #define ARM_CPU_PART_CORTEX_A9 0xC090 | 70 | #define ARM_CPU_PART_CORTEX_A8 0x4100c080 |
71 | #define ARM_CPU_PART_CORTEX_A5 0xC050 | 71 | #define ARM_CPU_PART_CORTEX_A9 0x4100c090 |
72 | #define ARM_CPU_PART_CORTEX_A15 0xC0F0 | 72 | #define ARM_CPU_PART_CORTEX_A5 0x4100c050 |
73 | #define ARM_CPU_PART_CORTEX_A7 0xC070 | 73 | #define ARM_CPU_PART_CORTEX_A7 0x4100c070 |
74 | #define ARM_CPU_PART_CORTEX_A12 0xC0D0 | 74 | #define ARM_CPU_PART_CORTEX_A12 0x4100c0d0 |
75 | #define ARM_CPU_PART_CORTEX_A17 0xC0E0 | 75 | #define ARM_CPU_PART_CORTEX_A17 0x4100c0e0 |
76 | #define ARM_CPU_PART_CORTEX_A15 0x4100c0f0 | ||
76 | 77 | ||
77 | #define ARM_CPU_XSCALE_ARCH_MASK 0xe000 | 78 | #define ARM_CPU_XSCALE_ARCH_MASK 0xe000 |
78 | #define ARM_CPU_XSCALE_ARCH_V1 0x2000 | 79 | #define ARM_CPU_XSCALE_ARCH_V1 0x2000 |
@@ -171,14 +172,24 @@ static inline unsigned int __attribute_const__ read_cpuid_implementor(void) | |||
171 | return (read_cpuid_id() & 0xFF000000) >> 24; | 172 | return (read_cpuid_id() & 0xFF000000) >> 24; |
172 | } | 173 | } |
173 | 174 | ||
174 | static inline unsigned int __attribute_const__ read_cpuid_part_number(void) | 175 | /* |
176 | * The CPU part number is meaningless without referring to the CPU | ||
177 | * implementer: implementers are free to define their own part numbers | ||
178 | * which are permitted to clash with other implementer part numbers. | ||
179 | */ | ||
180 | static inline unsigned int __attribute_const__ read_cpuid_part(void) | ||
181 | { | ||
182 | return read_cpuid_id() & 0xff00fff0; | ||
183 | } | ||
184 | |||
185 | static inline unsigned int __attribute_const__ __deprecated read_cpuid_part_number(void) | ||
175 | { | 186 | { |
176 | return read_cpuid_id() & 0xFFF0; | 187 | return read_cpuid_id() & 0xFFF0; |
177 | } | 188 | } |
178 | 189 | ||
179 | static inline unsigned int __attribute_const__ xscale_cpu_arch_version(void) | 190 | static inline unsigned int __attribute_const__ xscale_cpu_arch_version(void) |
180 | { | 191 | { |
181 | return read_cpuid_part_number() & ARM_CPU_XSCALE_ARCH_MASK; | 192 | return read_cpuid_id() & ARM_CPU_XSCALE_ARCH_MASK; |
182 | } | 193 | } |
183 | 194 | ||
184 | static inline unsigned int __attribute_const__ read_cpuid_cachetype(void) | 195 | static inline unsigned int __attribute_const__ read_cpuid_cachetype(void) |
diff --git a/arch/arm/include/asm/smp_scu.h b/arch/arm/include/asm/smp_scu.h index 0393fbab8dd5..bfe163c40024 100644 --- a/arch/arm/include/asm/smp_scu.h +++ b/arch/arm/include/asm/smp_scu.h | |||
@@ -11,7 +11,7 @@ | |||
11 | 11 | ||
12 | static inline bool scu_a9_has_base(void) | 12 | static inline bool scu_a9_has_base(void) |
13 | { | 13 | { |
14 | return read_cpuid_part_number() == ARM_CPU_PART_CORTEX_A9; | 14 | return read_cpuid_part() == ARM_CPU_PART_CORTEX_A9; |
15 | } | 15 | } |
16 | 16 | ||
17 | static inline unsigned long scu_a9_get_base(void) | 17 | static inline unsigned long scu_a9_get_base(void) |
diff --git a/arch/arm/kernel/perf_event_cpu.c b/arch/arm/kernel/perf_event_cpu.c index af9e35e8836f..c02c2e8c877d 100644 --- a/arch/arm/kernel/perf_event_cpu.c +++ b/arch/arm/kernel/perf_event_cpu.c | |||
@@ -250,40 +250,39 @@ static struct platform_device_id cpu_pmu_plat_device_ids[] = { | |||
250 | static int probe_current_pmu(struct arm_pmu *pmu) | 250 | static int probe_current_pmu(struct arm_pmu *pmu) |
251 | { | 251 | { |
252 | int cpu = get_cpu(); | 252 | int cpu = get_cpu(); |
253 | unsigned long implementor = read_cpuid_implementor(); | ||
254 | unsigned long part_number = read_cpuid_part_number(); | ||
255 | int ret = -ENODEV; | 253 | int ret = -ENODEV; |
256 | 254 | ||
257 | pr_info("probing PMU on CPU %d\n", cpu); | 255 | pr_info("probing PMU on CPU %d\n", cpu); |
258 | 256 | ||
257 | switch (read_cpuid_part()) { | ||
259 | /* ARM Ltd CPUs. */ | 258 | /* ARM Ltd CPUs. */ |
260 | if (implementor == ARM_CPU_IMP_ARM) { | 259 | case ARM_CPU_PART_ARM1136: |
261 | switch (part_number) { | 260 | case ARM_CPU_PART_ARM1156: |
262 | case ARM_CPU_PART_ARM1136: | 261 | case ARM_CPU_PART_ARM1176: |
263 | case ARM_CPU_PART_ARM1156: | 262 | ret = armv6pmu_init(pmu); |
264 | case ARM_CPU_PART_ARM1176: | 263 | break; |
265 | ret = armv6pmu_init(pmu); | 264 | case ARM_CPU_PART_ARM11MPCORE: |
266 | break; | 265 | ret = armv6mpcore_pmu_init(pmu); |
267 | case ARM_CPU_PART_ARM11MPCORE: | 266 | break; |
268 | ret = armv6mpcore_pmu_init(pmu); | 267 | case ARM_CPU_PART_CORTEX_A8: |
269 | break; | 268 | ret = armv7_a8_pmu_init(pmu); |
270 | case ARM_CPU_PART_CORTEX_A8: | 269 | break; |
271 | ret = armv7_a8_pmu_init(pmu); | 270 | case ARM_CPU_PART_CORTEX_A9: |
272 | break; | 271 | ret = armv7_a9_pmu_init(pmu); |
273 | case ARM_CPU_PART_CORTEX_A9: | 272 | break; |
274 | ret = armv7_a9_pmu_init(pmu); | 273 | |
275 | break; | 274 | default: |
276 | } | 275 | if (read_cpuid_implementor() == ARM_CPU_IMP_INTEL) { |
277 | /* Intel CPUs [xscale]. */ | 276 | switch (xscale_cpu_arch_version()) { |
278 | } else if (implementor == ARM_CPU_IMP_INTEL) { | 277 | case ARM_CPU_XSCALE_ARCH_V1: |
279 | switch (xscale_cpu_arch_version()) { | 278 | ret = xscale1pmu_init(pmu); |
280 | case ARM_CPU_XSCALE_ARCH_V1: | 279 | break; |
281 | ret = xscale1pmu_init(pmu); | 280 | case ARM_CPU_XSCALE_ARCH_V2: |
282 | break; | 281 | ret = xscale2pmu_init(pmu); |
283 | case ARM_CPU_XSCALE_ARCH_V2: | 282 | break; |
284 | ret = xscale2pmu_init(pmu); | 283 | } |
285 | break; | ||
286 | } | 284 | } |
285 | break; | ||
287 | } | 286 | } |
288 | 287 | ||
289 | put_cpu(); | 288 | put_cpu(); |
diff --git a/arch/arm/kvm/guest.c b/arch/arm/kvm/guest.c index b23a59c1c522..70bf49b8b244 100644 --- a/arch/arm/kvm/guest.c +++ b/arch/arm/kvm/guest.c | |||
@@ -274,13 +274,7 @@ int kvm_arch_vcpu_ioctl_set_sregs(struct kvm_vcpu *vcpu, | |||
274 | 274 | ||
275 | int __attribute_const__ kvm_target_cpu(void) | 275 | int __attribute_const__ kvm_target_cpu(void) |
276 | { | 276 | { |
277 | unsigned long implementor = read_cpuid_implementor(); | 277 | switch (read_cpuid_part()) { |
278 | unsigned long part_number = read_cpuid_part_number(); | ||
279 | |||
280 | if (implementor != ARM_CPU_IMP_ARM) | ||
281 | return -EINVAL; | ||
282 | |||
283 | switch (part_number) { | ||
284 | case ARM_CPU_PART_CORTEX_A7: | 278 | case ARM_CPU_PART_CORTEX_A7: |
285 | return KVM_ARM_TARGET_CORTEX_A7; | 279 | return KVM_ARM_TARGET_CORTEX_A7; |
286 | case ARM_CPU_PART_CORTEX_A15: | 280 | case ARM_CPU_PART_CORTEX_A15: |
diff --git a/arch/arm/mach-exynos/mcpm-exynos.c b/arch/arm/mach-exynos/mcpm-exynos.c index 0d95bc8e49d8..a96b78f93f2b 100644 --- a/arch/arm/mach-exynos/mcpm-exynos.c +++ b/arch/arm/mach-exynos/mcpm-exynos.c | |||
@@ -196,7 +196,7 @@ static void exynos_power_down(void) | |||
196 | if (last_man && __mcpm_outbound_enter_critical(cpu, cluster)) { | 196 | if (last_man && __mcpm_outbound_enter_critical(cpu, cluster)) { |
197 | arch_spin_unlock(&exynos_mcpm_lock); | 197 | arch_spin_unlock(&exynos_mcpm_lock); |
198 | 198 | ||
199 | if (read_cpuid_part_number() == ARM_CPU_PART_CORTEX_A15) { | 199 | if (read_cpuid_part() == ARM_CPU_PART_CORTEX_A15) { |
200 | /* | 200 | /* |
201 | * On the Cortex-A15 we need to disable | 201 | * On the Cortex-A15 we need to disable |
202 | * L2 prefetching before flushing the cache. | 202 | * L2 prefetching before flushing the cache. |
@@ -291,7 +291,7 @@ static void __naked exynos_pm_power_up_setup(unsigned int affinity_level) | |||
291 | 291 | ||
292 | static void __init exynos_cache_off(void) | 292 | static void __init exynos_cache_off(void) |
293 | { | 293 | { |
294 | if (read_cpuid_part_number() == ARM_CPU_PART_CORTEX_A15) { | 294 | if (read_cpuid_part() == ARM_CPU_PART_CORTEX_A15) { |
295 | /* disable L2 prefetching on the Cortex-A15 */ | 295 | /* disable L2 prefetching on the Cortex-A15 */ |
296 | asm volatile( | 296 | asm volatile( |
297 | "mcr p15, 1, %0, c15, c0, 3\n\t" | 297 | "mcr p15, 1, %0, c15, c0, 3\n\t" |
diff --git a/arch/arm/mach-exynos/platsmp.c b/arch/arm/mach-exynos/platsmp.c index 1c8d31e39520..8dc1d3a3a8bf 100644 --- a/arch/arm/mach-exynos/platsmp.c +++ b/arch/arm/mach-exynos/platsmp.c | |||
@@ -188,7 +188,7 @@ static void __init exynos_smp_init_cpus(void) | |||
188 | void __iomem *scu_base = scu_base_addr(); | 188 | void __iomem *scu_base = scu_base_addr(); |
189 | unsigned int i, ncores; | 189 | unsigned int i, ncores; |
190 | 190 | ||
191 | if (read_cpuid_part_number() == ARM_CPU_PART_CORTEX_A9) | 191 | if (read_cpuid_part() == ARM_CPU_PART_CORTEX_A9) |
192 | ncores = scu_base ? scu_get_core_count(scu_base) : 1; | 192 | ncores = scu_base ? scu_get_core_count(scu_base) : 1; |
193 | else | 193 | else |
194 | /* | 194 | /* |
@@ -214,7 +214,7 @@ static void __init exynos_smp_prepare_cpus(unsigned int max_cpus) | |||
214 | 214 | ||
215 | exynos_sysram_init(); | 215 | exynos_sysram_init(); |
216 | 216 | ||
217 | if (read_cpuid_part_number() == ARM_CPU_PART_CORTEX_A9) | 217 | if (read_cpuid_part() == ARM_CPU_PART_CORTEX_A9) |
218 | scu_enable(scu_base_addr()); | 218 | scu_enable(scu_base_addr()); |
219 | 219 | ||
220 | /* | 220 | /* |
diff --git a/arch/arm/mach-exynos/pm.c b/arch/arm/mach-exynos/pm.c index 202ca73e49c4..67d383de614f 100644 --- a/arch/arm/mach-exynos/pm.c +++ b/arch/arm/mach-exynos/pm.c | |||
@@ -300,7 +300,7 @@ static int exynos_pm_suspend(void) | |||
300 | tmp = (S5P_USE_STANDBY_WFI0 | S5P_USE_STANDBY_WFE0); | 300 | tmp = (S5P_USE_STANDBY_WFI0 | S5P_USE_STANDBY_WFE0); |
301 | __raw_writel(tmp, S5P_CENTRAL_SEQ_OPTION); | 301 | __raw_writel(tmp, S5P_CENTRAL_SEQ_OPTION); |
302 | 302 | ||
303 | if (read_cpuid_part_number() == ARM_CPU_PART_CORTEX_A9) | 303 | if (read_cpuid_part() == ARM_CPU_PART_CORTEX_A9) |
304 | exynos_cpu_save_register(); | 304 | exynos_cpu_save_register(); |
305 | 305 | ||
306 | return 0; | 306 | return 0; |
@@ -334,7 +334,7 @@ static void exynos_pm_resume(void) | |||
334 | if (exynos_pm_central_resume()) | 334 | if (exynos_pm_central_resume()) |
335 | goto early_wakeup; | 335 | goto early_wakeup; |
336 | 336 | ||
337 | if (read_cpuid_part_number() == ARM_CPU_PART_CORTEX_A9) | 337 | if (read_cpuid_part() == ARM_CPU_PART_CORTEX_A9) |
338 | exynos_cpu_restore_register(); | 338 | exynos_cpu_restore_register(); |
339 | 339 | ||
340 | /* For release retention */ | 340 | /* For release retention */ |
@@ -353,7 +353,7 @@ static void exynos_pm_resume(void) | |||
353 | 353 | ||
354 | s3c_pm_do_restore_core(exynos_core_save, ARRAY_SIZE(exynos_core_save)); | 354 | s3c_pm_do_restore_core(exynos_core_save, ARRAY_SIZE(exynos_core_save)); |
355 | 355 | ||
356 | if (read_cpuid_part_number() == ARM_CPU_PART_CORTEX_A9) | 356 | if (read_cpuid_part() == ARM_CPU_PART_CORTEX_A9) |
357 | scu_enable(S5P_VA_SCU); | 357 | scu_enable(S5P_VA_SCU); |
358 | 358 | ||
359 | early_wakeup: | 359 | early_wakeup: |
@@ -440,15 +440,14 @@ static int exynos_cpu_pm_notifier(struct notifier_block *self, | |||
440 | case CPU_PM_ENTER: | 440 | case CPU_PM_ENTER: |
441 | if (cpu == 0) { | 441 | if (cpu == 0) { |
442 | exynos_pm_central_suspend(); | 442 | exynos_pm_central_suspend(); |
443 | if (read_cpuid_part_number() == ARM_CPU_PART_CORTEX_A9) | 443 | if (read_cpuid_part() == ARM_CPU_PART_CORTEX_A9) |
444 | exynos_cpu_save_register(); | 444 | exynos_cpu_save_register(); |
445 | } | 445 | } |
446 | break; | 446 | break; |
447 | 447 | ||
448 | case CPU_PM_EXIT: | 448 | case CPU_PM_EXIT: |
449 | if (cpu == 0) { | 449 | if (cpu == 0) { |
450 | if (read_cpuid_part_number() == | 450 | if (read_cpuid_part() == ARM_CPU_PART_CORTEX_A9) { |
451 | ARM_CPU_PART_CORTEX_A9) { | ||
452 | scu_enable(S5P_VA_SCU); | 451 | scu_enable(S5P_VA_SCU); |
453 | exynos_cpu_restore_register(); | 452 | exynos_cpu_restore_register(); |
454 | } | 453 | } |
diff --git a/arch/arm/mach-vexpress/tc2_pm.c b/arch/arm/mach-vexpress/tc2_pm.c index 54a9fff77c7d..2fb78b4648cb 100644 --- a/arch/arm/mach-vexpress/tc2_pm.c +++ b/arch/arm/mach-vexpress/tc2_pm.c | |||
@@ -152,7 +152,7 @@ static void tc2_pm_down(u64 residency) | |||
152 | if (last_man && __mcpm_outbound_enter_critical(cpu, cluster)) { | 152 | if (last_man && __mcpm_outbound_enter_critical(cpu, cluster)) { |
153 | arch_spin_unlock(&tc2_pm_lock); | 153 | arch_spin_unlock(&tc2_pm_lock); |
154 | 154 | ||
155 | if (read_cpuid_part_number() == ARM_CPU_PART_CORTEX_A15) { | 155 | if (read_cpuid_part() == ARM_CPU_PART_CORTEX_A15) { |
156 | /* | 156 | /* |
157 | * On the Cortex-A15 we need to disable | 157 | * On the Cortex-A15 we need to disable |
158 | * L2 prefetching before flushing the cache. | 158 | * L2 prefetching before flushing the cache. |
@@ -326,7 +326,7 @@ static void __naked tc2_pm_power_up_setup(unsigned int affinity_level) | |||
326 | static void __init tc2_cache_off(void) | 326 | static void __init tc2_cache_off(void) |
327 | { | 327 | { |
328 | pr_info("TC2: disabling cache during MCPM loopback test\n"); | 328 | pr_info("TC2: disabling cache during MCPM loopback test\n"); |
329 | if (read_cpuid_part_number() == ARM_CPU_PART_CORTEX_A15) { | 329 | if (read_cpuid_part() == ARM_CPU_PART_CORTEX_A15) { |
330 | /* disable L2 prefetching on the Cortex-A15 */ | 330 | /* disable L2 prefetching on the Cortex-A15 */ |
331 | asm volatile( | 331 | asm volatile( |
332 | "mcr p15, 1, %0, c15, c0, 3 \n\t" | 332 | "mcr p15, 1, %0, c15, c0, 3 \n\t" |
diff --git a/arch/arm/mm/cache-l2x0.c b/arch/arm/mm/cache-l2x0.c index 076172b69422..556df22e89bd 100644 --- a/arch/arm/mm/cache-l2x0.c +++ b/arch/arm/mm/cache-l2x0.c | |||
@@ -665,7 +665,7 @@ static int l2c310_cpu_enable_flz(struct notifier_block *nb, unsigned long act, v | |||
665 | static void __init l2c310_enable(void __iomem *base, u32 aux, unsigned num_lock) | 665 | static void __init l2c310_enable(void __iomem *base, u32 aux, unsigned num_lock) |
666 | { | 666 | { |
667 | unsigned rev = readl_relaxed(base + L2X0_CACHE_ID) & L2X0_CACHE_ID_PART_MASK; | 667 | unsigned rev = readl_relaxed(base + L2X0_CACHE_ID) & L2X0_CACHE_ID_PART_MASK; |
668 | bool cortex_a9 = read_cpuid_part_number() == ARM_CPU_PART_CORTEX_A9; | 668 | bool cortex_a9 = read_cpuid_part() == ARM_CPU_PART_CORTEX_A9; |
669 | 669 | ||
670 | if (rev >= L310_CACHE_ID_RTL_R2P0) { | 670 | if (rev >= L310_CACHE_ID_RTL_R2P0) { |
671 | if (cortex_a9) { | 671 | if (cortex_a9) { |
diff --git a/drivers/clocksource/arm_global_timer.c b/drivers/clocksource/arm_global_timer.c index 60e5a170c4d2..e6833771a716 100644 --- a/drivers/clocksource/arm_global_timer.c +++ b/drivers/clocksource/arm_global_timer.c | |||
@@ -250,7 +250,7 @@ static void __init global_timer_of_register(struct device_node *np) | |||
250 | * fire when the timer value is greater than or equal to. In previous | 250 | * fire when the timer value is greater than or equal to. In previous |
251 | * revisions the comparators fired when the timer value was equal to. | 251 | * revisions the comparators fired when the timer value was equal to. |
252 | */ | 252 | */ |
253 | if (read_cpuid_part_number() == ARM_CPU_PART_CORTEX_A9 | 253 | if (read_cpuid_part() == ARM_CPU_PART_CORTEX_A9 |
254 | && (read_cpuid_id() & 0xf0000f) < 0x200000) { | 254 | && (read_cpuid_id() & 0xf0000f) < 0x200000) { |
255 | pr_warn("global-timer: non support for this cpu version.\n"); | 255 | pr_warn("global-timer: non support for this cpu version.\n"); |
256 | return; | 256 | return; |