aboutsummaryrefslogtreecommitdiffstats
path: root/arch/arm/kernel/perf_event_cpu.c
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2014-08-05 13:05:29 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2014-08-05 13:05:29 -0400
commitc489d98c8c81a898cfed6bec193cca2006f956aa (patch)
tree4cc9b571c9bb2380e6b11828cc843f3ceeb5dcf4 /arch/arm/kernel/perf_event_cpu.c
parentf67d251a87ccb288a3a164c5226c6ee9ce8ea53d (diff)
parentf15bdfe4fb264ac30d9c176f898cbd52cfd1ffa9 (diff)
Merge branch 'for-linus' of git://ftp.arm.linux.org.uk/~rmk/linux-arm
Pull ARM updates from Russell King: "Included in this update: - perf updates from Will Deacon: The main changes are callchain stability fixes from Jean Pihet and event mapping and PMU name rework from Mark Rutland The latter is preparatory work for enabling some code re-use with arm64 in the future. - updates for nommu from Uwe Kleine-König: Two different fixes for the same problem making some ARM nommu configurations not boot since 3.6-rc1. The problem is that user_addr_max returned the biggest available RAM address which makes some copy_from_user variants fail to read from XIP memory. - deprecate legacy OMAP DMA API, in preparation for it's removal. The popular drivers have been converted over, leaving a very small number of rarely used drivers, which hopefully can be converted during the next cycle with a bit more visibility (and hopefully people popping out of the woodwork to help test) - more tweaks for BE systems, particularly with the kernel image format. In connection with this, I've cleaned up the way we generate the linker script for the decompressor. - removal of hard-coded assumptions of the kernel stack size, making everywhere depend on the value of THREAD_SIZE_ORDER. - MCPM updates from Nicolas Pitre. - Make it easier for proper CPU part number checks (which should always include the vendor field). - Assembly code optimisation - use the "bx" instruction when returning from a function on ARMv6+ rather than "mov pc, reg". - Save the last kernel misaligned fault location and report it via the procfs alignment file. - Clean up the way we create the initial stack frame, which is a repeated pattern in several different locations. - Support for 8-byte get_user(), needed for some DRM implementations. - mcs locking from Will Deacon. - Save and restore a few more Cortex-A9 registers (for errata workarounds) - Fix various aspects of the SWP emulation, and the ELF hwcap for the SWP instruction. - Update LPAE logic for pte_write and pmd_write to make it more correct. - Support for Broadcom Brahma15 CPU cores. - ARM assembly crypto updates from Ard Biesheuvel" * 'for-linus' of git://ftp.arm.linux.org.uk/~rmk/linux-arm: (53 commits) ARM: add comments to the early page table remap code ARM: 8122/1: smp_scu: enable SCU standby support ARM: 8121/1: smp_scu: use macro for SCU enable bit ARM: 8120/1: crypto: sha512: add ARM NEON implementation ARM: 8119/1: crypto: sha1: add ARM NEON implementation ARM: 8118/1: crypto: sha1/make use of common SHA-1 structures ARM: 8113/1: remove remaining definitions of PLAT_PHYS_OFFSET from <mach/memory.h> ARM: 8111/1: Enable erratum 798181 for Broadcom Brahma-B15 ARM: 8110/1: do CPU-specific init for Broadcom Brahma15 cores ARM: 8109/1: mm: Modify pte_write and pmd_write logic for LPAE ARM: 8108/1: mm: Introduce {pte,pmd}_isset and {pte,pmd}_isclear ARM: hwcap: disable HWCAP_SWP if the CPU advertises it has exclusives ARM: SWP emulation: only initialise on ARMv7 CPUs ARM: SWP emulation: always enable when SMP is enabled ARM: 8103/1: save/restore Cortex-A9 CP15 registers on suspend/resume ARM: 8098/1: mcs lock: implement wfe-based polling for MCS locking ARM: 8091/2: add get_user() support for 8 byte types ARM: 8097/1: unistd.h: relocate comments back to place ARM: 8096/1: Describe required sort order for textofs-y (TEXT_OFFSET) ARM: 8090/1: add revision info for PL310 errata 588369 and 727915 ...
Diffstat (limited to 'arch/arm/kernel/perf_event_cpu.c')
-rw-r--r--arch/arm/kernel/perf_event_cpu.c66
1 files changed, 36 insertions, 30 deletions
diff --git a/arch/arm/kernel/perf_event_cpu.c b/arch/arm/kernel/perf_event_cpu.c
index af9e35e8836f..e6a6edbec613 100644
--- a/arch/arm/kernel/perf_event_cpu.c
+++ b/arch/arm/kernel/perf_event_cpu.c
@@ -233,14 +233,17 @@ static struct of_device_id cpu_pmu_of_device_ids[] = {
233 {.compatible = "arm,cortex-a7-pmu", .data = armv7_a7_pmu_init}, 233 {.compatible = "arm,cortex-a7-pmu", .data = armv7_a7_pmu_init},
234 {.compatible = "arm,cortex-a5-pmu", .data = armv7_a5_pmu_init}, 234 {.compatible = "arm,cortex-a5-pmu", .data = armv7_a5_pmu_init},
235 {.compatible = "arm,arm11mpcore-pmu", .data = armv6mpcore_pmu_init}, 235 {.compatible = "arm,arm11mpcore-pmu", .data = armv6mpcore_pmu_init},
236 {.compatible = "arm,arm1176-pmu", .data = armv6pmu_init}, 236 {.compatible = "arm,arm1176-pmu", .data = armv6_1176_pmu_init},
237 {.compatible = "arm,arm1136-pmu", .data = armv6pmu_init}, 237 {.compatible = "arm,arm1136-pmu", .data = armv6_1136_pmu_init},
238 {.compatible = "qcom,krait-pmu", .data = krait_pmu_init}, 238 {.compatible = "qcom,krait-pmu", .data = krait_pmu_init},
239 {}, 239 {},
240}; 240};
241 241
242static struct platform_device_id cpu_pmu_plat_device_ids[] = { 242static struct platform_device_id cpu_pmu_plat_device_ids[] = {
243 {.name = "arm-pmu"}, 243 {.name = "arm-pmu"},
244 {.name = "armv6-pmu"},
245 {.name = "armv7-pmu"},
246 {.name = "xscale-pmu"},
244 {}, 247 {},
245}; 248};
246 249
@@ -250,40 +253,43 @@ static struct platform_device_id cpu_pmu_plat_device_ids[] = {
250static int probe_current_pmu(struct arm_pmu *pmu) 253static int probe_current_pmu(struct arm_pmu *pmu)
251{ 254{
252 int cpu = get_cpu(); 255 int cpu = get_cpu();
253 unsigned long implementor = read_cpuid_implementor();
254 unsigned long part_number = read_cpuid_part_number();
255 int ret = -ENODEV; 256 int ret = -ENODEV;
256 257
257 pr_info("probing PMU on CPU %d\n", cpu); 258 pr_info("probing PMU on CPU %d\n", cpu);
258 259
260 switch (read_cpuid_part()) {
259 /* ARM Ltd CPUs. */ 261 /* ARM Ltd CPUs. */
260 if (implementor == ARM_CPU_IMP_ARM) { 262 case ARM_CPU_PART_ARM1136:
261 switch (part_number) { 263 ret = armv6_1136_pmu_init(pmu);
262 case ARM_CPU_PART_ARM1136: 264 break;
263 case ARM_CPU_PART_ARM1156: 265 case ARM_CPU_PART_ARM1156:
264 case ARM_CPU_PART_ARM1176: 266 ret = armv6_1156_pmu_init(pmu);
265 ret = armv6pmu_init(pmu); 267 break;
266 break; 268 case ARM_CPU_PART_ARM1176:
267 case ARM_CPU_PART_ARM11MPCORE: 269 ret = armv6_1176_pmu_init(pmu);
268 ret = armv6mpcore_pmu_init(pmu); 270 break;
269 break; 271 case ARM_CPU_PART_ARM11MPCORE:
270 case ARM_CPU_PART_CORTEX_A8: 272 ret = armv6mpcore_pmu_init(pmu);
271 ret = armv7_a8_pmu_init(pmu); 273 break;
272 break; 274 case ARM_CPU_PART_CORTEX_A8:
273 case ARM_CPU_PART_CORTEX_A9: 275 ret = armv7_a8_pmu_init(pmu);
274 ret = armv7_a9_pmu_init(pmu); 276 break;
275 break; 277 case ARM_CPU_PART_CORTEX_A9:
276 } 278 ret = armv7_a9_pmu_init(pmu);
277 /* Intel CPUs [xscale]. */ 279 break;
278 } else if (implementor == ARM_CPU_IMP_INTEL) { 280
279 switch (xscale_cpu_arch_version()) { 281 default:
280 case ARM_CPU_XSCALE_ARCH_V1: 282 if (read_cpuid_implementor() == ARM_CPU_IMP_INTEL) {
281 ret = xscale1pmu_init(pmu); 283 switch (xscale_cpu_arch_version()) {
282 break; 284 case ARM_CPU_XSCALE_ARCH_V1:
283 case ARM_CPU_XSCALE_ARCH_V2: 285 ret = xscale1pmu_init(pmu);
284 ret = xscale2pmu_init(pmu); 286 break;
285 break; 287 case ARM_CPU_XSCALE_ARCH_V2:
288 ret = xscale2pmu_init(pmu);
289 break;
290 }
286 } 291 }
292 break;
287 } 293 }
288 294
289 put_cpu(); 295 put_cpu();