* [Patch v2 00/11] Core support for Cortex-A5 and Cortex-A15
@ 2011-06-08 12:30 Will Deacon
2011-06-08 12:30 ` [Patch v2 01/11] arm: Convert v7 proc infos into a common macro Will Deacon
` (10 more replies)
0 siblings, 11 replies; 18+ messages in thread
From: Will Deacon @ 2011-06-08 12:30 UTC (permalink / raw)
To: linux-arm-kernel
Hi,
This is version 2 of the patch series originally posted here:
http://lists.infradead.org/pipermail/linux-arm-kernel/2011-June/052141.html
Changes from v1 include:
* Removal of HWCAP_VFPv4D16
* Dynamic detection of VFPv4
* Updates to hwcap_str array
* Some spelling fixes
Tested on Realview-PBX (Cortex-A9) without regressions. Also tested on
Cortex-A5 (w/ NEON) and Cortex-A15 (w/ NEON).
Feedback welcome.
Will
Pawel Moll (2):
arm: Convert v7 proc infos into a common macro
arm: Add Cortex A5 proc info
Will Deacon (9):
ARM: hwcaps: use shifts instead of hardcoded constants
ARM: hwcaps: add new HWCAP defines for ARMv7-A
ARM: proc: reorder macro parameters for __v7_proc macro
ARM: proc: add proc info for Cortex-A15MP using classic page tables
ARM: vfp: add VFPv4 capability detection and populate elf_hwcap
ARM: perf: remove confusing comment from v7 perf events backend
ARM: perf: add PMUv2 common event definitions
ARM: perf: add support for the Cortex-A5 PMU
ARM: perf: add support for the Cortex-A15 PMU
arch/arm/include/asm/hwcap.h | 36 ++--
arch/arm/include/asm/perf_event.h | 2 +
arch/arm/kernel/perf_event.c | 6 +
arch/arm/kernel/perf_event_v7.c | 344 ++++++++++++++++++++++++++++++++++--
arch/arm/kernel/setup.c | 4 +
arch/arm/mm/proc-v7.S | 98 ++++++-----
arch/arm/vfp/vfpmodule.c | 6 +-
7 files changed, 413 insertions(+), 83 deletions(-)
^ permalink raw reply [flat|nested] 18+ messages in thread
* [Patch v2 01/11] arm: Convert v7 proc infos into a common macro
2011-06-08 12:30 [Patch v2 00/11] Core support for Cortex-A5 and Cortex-A15 Will Deacon
@ 2011-06-08 12:30 ` Will Deacon
2011-06-08 12:30 ` [Patch v2 02/11] arm: Add Cortex A5 proc info Will Deacon
` (9 subsequent siblings)
10 siblings, 0 replies; 18+ messages in thread
From: Will Deacon @ 2011-06-08 12:30 UTC (permalink / raw)
To: linux-arm-kernel
From: Pawel Moll <pawel.moll@arm.com>
As most of the proc info content is common across all v7
processors, this patch converts existing A9 and generic v7
descriptions into a macro (allowing extra flags in future).
Signed-off-by: Pawel Moll <pawel.moll@arm.com>
---
arch/arm/mm/proc-v7.S | 67 +++++++++++++++++-------------------------------
1 files changed, 24 insertions(+), 43 deletions(-)
diff --git a/arch/arm/mm/proc-v7.S b/arch/arm/mm/proc-v7.S
index b3b566e..d5245d4 100644
--- a/arch/arm/mm/proc-v7.S
+++ b/arch/arm/mm/proc-v7.S
@@ -436,33 +436,36 @@ cpu_elf_name:
.section ".proc.info.init", #alloc, #execinstr
- .type __v7_ca9mp_proc_info, #object
-__v7_ca9mp_proc_info:
- .long 0x410fc090 @ Required ID value
- .long 0xff0ffff0 @ Mask for ID
- ALT_SMP(.long \
- PMD_TYPE_SECT | \
- PMD_SECT_AP_WRITE | \
- PMD_SECT_AP_READ | \
- PMD_FLAGS_SMP)
- ALT_UP(.long \
- PMD_TYPE_SECT | \
- PMD_SECT_AP_WRITE | \
- PMD_SECT_AP_READ | \
- PMD_FLAGS_UP)
- .long PMD_TYPE_SECT | \
- PMD_SECT_XN | \
- PMD_SECT_AP_WRITE | \
- PMD_SECT_AP_READ
- W(b) __v7_ca9mp_setup
+ /*
+ * Standard v7 proc info content
+ */
+.macro __v7_proc initfunc, mm_mmuflags = 0, io_mmuflags = 0, hwcaps = 0
+ ALT_SMP(.long PMD_TYPE_SECT | PMD_SECT_AP_WRITE | PMD_SECT_AP_READ | \
+ PMD_FLAGS_SMP | \mm_mmuflags)
+ ALT_UP(.long PMD_TYPE_SECT | PMD_SECT_AP_WRITE | PMD_SECT_AP_READ | \
+ PMD_FLAGS_UP | \mm_mmuflags)
+ .long PMD_TYPE_SECT | PMD_SECT_XN | PMD_SECT_AP_WRITE | \
+ PMD_SECT_AP_READ | \io_mmuflags
+ W(b) \initfunc
.long cpu_arch_name
.long cpu_elf_name
- .long HWCAP_SWP|HWCAP_HALF|HWCAP_THUMB|HWCAP_FAST_MULT|HWCAP_EDSP|HWCAP_TLS
+ .long HWCAP_SWP | HWCAP_HALF | HWCAP_THUMB | HWCAP_FAST_MULT | \
+ HWCAP_EDSP | HWCAP_TLS | \hwcaps
.long cpu_v7_name
.long v7_processor_functions
.long v7wbi_tlb_fns
.long v6_user_fns
.long v7_cache_fns
+.endm
+
+ /*
+ * ARM Ltd. Cortex A9 processor.
+ */
+ .type __v7_ca9mp_proc_info, #object
+__v7_ca9mp_proc_info:
+ .long 0x410fc090
+ .long 0xff0ffff0
+ __v7_proc __v7_ca9mp_setup
.size __v7_ca9mp_proc_info, . - __v7_ca9mp_proc_info
/*
@@ -472,27 +475,5 @@ __v7_ca9mp_proc_info:
__v7_proc_info:
.long 0x000f0000 @ Required ID value
.long 0x000f0000 @ Mask for ID
- ALT_SMP(.long \
- PMD_TYPE_SECT | \
- PMD_SECT_AP_WRITE | \
- PMD_SECT_AP_READ | \
- PMD_FLAGS_SMP)
- ALT_UP(.long \
- PMD_TYPE_SECT | \
- PMD_SECT_AP_WRITE | \
- PMD_SECT_AP_READ | \
- PMD_FLAGS_UP)
- .long PMD_TYPE_SECT | \
- PMD_SECT_XN | \
- PMD_SECT_AP_WRITE | \
- PMD_SECT_AP_READ
- W(b) __v7_setup
- .long cpu_arch_name
- .long cpu_elf_name
- .long HWCAP_SWP|HWCAP_HALF|HWCAP_THUMB|HWCAP_FAST_MULT|HWCAP_EDSP|HWCAP_TLS
- .long cpu_v7_name
- .long v7_processor_functions
- .long v7wbi_tlb_fns
- .long v6_user_fns
- .long v7_cache_fns
+ __v7_proc __v7_setup
.size __v7_proc_info, . - __v7_proc_info
--
1.7.0.4
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [Patch v2 02/11] arm: Add Cortex A5 proc info
2011-06-08 12:30 [Patch v2 00/11] Core support for Cortex-A5 and Cortex-A15 Will Deacon
2011-06-08 12:30 ` [Patch v2 01/11] arm: Convert v7 proc infos into a common macro Will Deacon
@ 2011-06-08 12:30 ` Will Deacon
2011-06-08 12:30 ` [Patch v2 03/11] ARM: hwcaps: use shifts instead of hardcoded constants Will Deacon
` (8 subsequent siblings)
10 siblings, 0 replies; 18+ messages in thread
From: Will Deacon @ 2011-06-08 12:30 UTC (permalink / raw)
To: linux-arm-kernel
From: Pawel Moll <pawel.moll@arm.com>
This patch adds processor info for ARM Ltd. Cortex A5,
which has SCU initialisation procedure identical to A9.
Signed-off-by: Pawel Moll <pawel.moll@arm.com>
---
arch/arm/mm/proc-v7.S | 11 +++++++++++
1 files changed, 11 insertions(+), 0 deletions(-)
diff --git a/arch/arm/mm/proc-v7.S b/arch/arm/mm/proc-v7.S
index d5245d4..7f482c2 100644
--- a/arch/arm/mm/proc-v7.S
+++ b/arch/arm/mm/proc-v7.S
@@ -273,6 +273,7 @@ cpu_resume_l1_flags:
* It is assumed that:
* - cache type register is implemented
*/
+__v7_ca5mp_setup:
__v7_ca9mp_setup:
#ifdef CONFIG_SMP
ALT_SMP(mrc p15, 0, r0, c1, c0, 1)
@@ -459,6 +460,16 @@ cpu_elf_name:
.endm
/*
+ * ARM Ltd. Cortex A5 processor.
+ */
+ .type __v7_ca5mp_proc_info, #object
+__v7_ca5mp_proc_info:
+ .long 0x410fc050
+ .long 0xff0ffff0
+ __v7_proc __v7_ca5mp_setup
+ .size __v7_ca5mp_proc_info, . - __v7_ca5mp_proc_info
+
+ /*
* ARM Ltd. Cortex A9 processor.
*/
.type __v7_ca9mp_proc_info, #object
--
1.7.0.4
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [Patch v2 03/11] ARM: hwcaps: use shifts instead of hardcoded constants
2011-06-08 12:30 [Patch v2 00/11] Core support for Cortex-A5 and Cortex-A15 Will Deacon
2011-06-08 12:30 ` [Patch v2 01/11] arm: Convert v7 proc infos into a common macro Will Deacon
2011-06-08 12:30 ` [Patch v2 02/11] arm: Add Cortex A5 proc info Will Deacon
@ 2011-06-08 12:30 ` Will Deacon
2011-06-13 13:55 ` Sergei Shtylyov
2011-06-08 12:30 ` [Patch v2 04/11] ARM: hwcaps: add new HWCAP defines for ARMv7-A Will Deacon
` (7 subsequent siblings)
10 siblings, 1 reply; 18+ messages in thread
From: Will Deacon @ 2011-06-08 12:30 UTC (permalink / raw)
To: linux-arm-kernel
The HWCAP numbers are defined as constants, each one being a power of 2.
This has become slightly unwieldy now that we have reached 32k.
This patch changes the HWCAP defines to use (1 << n) instead of coding
the constant directly. The values remain unchanged.
Signed-off-by: Will Deacon <will.deacon@arm.com>
---
arch/arm/include/asm/hwcap.h | 32 ++++++++++++++++----------------
1 files changed, 16 insertions(+), 16 deletions(-)
diff --git a/arch/arm/include/asm/hwcap.h b/arch/arm/include/asm/hwcap.h
index c1062c3..81512db 100644
--- a/arch/arm/include/asm/hwcap.h
+++ b/arch/arm/include/asm/hwcap.h
@@ -4,22 +4,22 @@
/*
* HWCAP flags - for elf_hwcap (in kernel) and AT_HWCAP
*/
-#define HWCAP_SWP 1
-#define HWCAP_HALF 2
-#define HWCAP_THUMB 4
-#define HWCAP_26BIT 8 /* Play it safe */
-#define HWCAP_FAST_MULT 16
-#define HWCAP_FPA 32
-#define HWCAP_VFP 64
-#define HWCAP_EDSP 128
-#define HWCAP_JAVA 256
-#define HWCAP_IWMMXT 512
-#define HWCAP_CRUNCH 1024
-#define HWCAP_THUMBEE 2048
-#define HWCAP_NEON 4096
-#define HWCAP_VFPv3 8192
-#define HWCAP_VFPv3D16 16384
-#define HWCAP_TLS 32768
+#define HWCAP_SWP (1 << 0)
+#define HWCAP_HALF (1 << 1)
+#define HWCAP_THUMB (1 << 2)
+#define HWCAP_26BIT (1 << 3) /* Play it safe */
+#define HWCAP_FAST_MULT (1 << 4)
+#define HWCAP_FPA (1 << 5)
+#define HWCAP_VFP (1 << 6)
+#define HWCAP_EDSP (1 << 7)
+#define HWCAP_JAVA (1 << 8)
+#define HWCAP_IWMMXT (1 << 9)
+#define HWCAP_CRUNCH (1 << 10)
+#define HWCAP_THUMBEE (1 << 11)
+#define HWCAP_NEON (1 << 12)
+#define HWCAP_VFPv3 (1 << 13)
+#define HWCAP_VFPv3D16 (1 << 14)
+#define HWCAP_TLS (1 << 15)
#if defined(__KERNEL__) && !defined(__ASSEMBLY__)
/*
--
1.7.0.4
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [Patch v2 04/11] ARM: hwcaps: add new HWCAP defines for ARMv7-A
2011-06-08 12:30 [Patch v2 00/11] Core support for Cortex-A5 and Cortex-A15 Will Deacon
` (2 preceding siblings ...)
2011-06-08 12:30 ` [Patch v2 03/11] ARM: hwcaps: use shifts instead of hardcoded constants Will Deacon
@ 2011-06-08 12:30 ` Will Deacon
2011-06-08 12:30 ` [Patch v2 05/11] ARM: proc: reorder macro parameters for __v7_proc macro Will Deacon
` (6 subsequent siblings)
10 siblings, 0 replies; 18+ messages in thread
From: Will Deacon @ 2011-06-08 12:30 UTC (permalink / raw)
To: linux-arm-kernel
Modern ARMv7-A cores can optionally implement these new hardware
features:
- VFPv4:
The latest version of the ARMv7 vector floating-point extensions,
including hardware support for fused multiple accumulate. D16 or D32
variants may be implemented.
- Integer divide:
The SDIV and UDIV instructions provide signed and unsigned integer
division in hardware. When implemented, these instructions may be
available in either both Thumb and ARM, or Thumb only.
This patch adds new HWCAP defines to describe these new features. The
integer divide capabilities are split into two bits for ARM and Thumb
respectively. Whilst HWCAP_IDIVA should never be set if HWCAP_IDIVT is
clear, separating the bits makes it easier to interpret from userspace.
Signed-off-by: Will Deacon <will.deacon@arm.com>
---
arch/arm/include/asm/hwcap.h | 4 ++++
arch/arm/kernel/setup.c | 4 ++++
2 files changed, 8 insertions(+), 0 deletions(-)
diff --git a/arch/arm/include/asm/hwcap.h b/arch/arm/include/asm/hwcap.h
index 81512db..c93a22a 100644
--- a/arch/arm/include/asm/hwcap.h
+++ b/arch/arm/include/asm/hwcap.h
@@ -20,6 +20,10 @@
#define HWCAP_VFPv3 (1 << 13)
#define HWCAP_VFPv3D16 (1 << 14)
#define HWCAP_TLS (1 << 15)
+#define HWCAP_VFPv4 (1 << 16)
+#define HWCAP_IDIVA (1 << 17)
+#define HWCAP_IDIVT (1 << 18)
+#define HWCAP_IDIV (HWCAP_IDIVA | HWCAP_IDIVT)
#if defined(__KERNEL__) && !defined(__ASSEMBLY__)
/*
diff --git a/arch/arm/kernel/setup.c b/arch/arm/kernel/setup.c
index ed11fb0..699df68 100644
--- a/arch/arm/kernel/setup.c
+++ b/arch/arm/kernel/setup.c
@@ -977,6 +977,10 @@ static const char *hwcap_str[] = {
"neon",
"vfpv3",
"vfpv3d16",
+ "tls",
+ "vfpv4",
+ "idiva",
+ "idivt",
NULL
};
--
1.7.0.4
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [Patch v2 05/11] ARM: proc: reorder macro parameters for __v7_proc macro
2011-06-08 12:30 [Patch v2 00/11] Core support for Cortex-A5 and Cortex-A15 Will Deacon
` (3 preceding siblings ...)
2011-06-08 12:30 ` [Patch v2 04/11] ARM: hwcaps: add new HWCAP defines for ARMv7-A Will Deacon
@ 2011-06-08 12:30 ` Will Deacon
2011-06-08 12:30 ` [Patch v2 06/11] ARM: proc: add proc info for Cortex-A15MP using classic page tables Will Deacon
` (5 subsequent siblings)
10 siblings, 0 replies; 18+ messages in thread
From: Will Deacon @ 2011-06-08 12:30 UTC (permalink / raw)
To: linux-arm-kernel
The __v7_proc macro takes paramaters for mmu flags, io flags and hwcaps.
Since hwcaps tend to change more often between cores than the other
parameters, change the ordering so we don't have to provide empty values
for the flag arguments in the common case.
Signed-off-by: Will Deacon <will.deacon@arm.com>
---
arch/arm/mm/proc-v7.S | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/arch/arm/mm/proc-v7.S b/arch/arm/mm/proc-v7.S
index 7f482c2..b22d98d 100644
--- a/arch/arm/mm/proc-v7.S
+++ b/arch/arm/mm/proc-v7.S
@@ -440,7 +440,7 @@ cpu_elf_name:
/*
* Standard v7 proc info content
*/
-.macro __v7_proc initfunc, mm_mmuflags = 0, io_mmuflags = 0, hwcaps = 0
+.macro __v7_proc initfunc, hwcaps = 0, mm_mmuflags = 0, io_mmuflags = 0
ALT_SMP(.long PMD_TYPE_SECT | PMD_SECT_AP_WRITE | PMD_SECT_AP_READ | \
PMD_FLAGS_SMP | \mm_mmuflags)
ALT_UP(.long PMD_TYPE_SECT | PMD_SECT_AP_WRITE | PMD_SECT_AP_READ | \
--
1.7.0.4
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [Patch v2 06/11] ARM: proc: add proc info for Cortex-A15MP using classic page tables
2011-06-08 12:30 [Patch v2 00/11] Core support for Cortex-A5 and Cortex-A15 Will Deacon
` (4 preceding siblings ...)
2011-06-08 12:30 ` [Patch v2 05/11] ARM: proc: reorder macro parameters for __v7_proc macro Will Deacon
@ 2011-06-08 12:30 ` Will Deacon
2011-06-08 12:30 ` [Patch v2 07/11] ARM: vfp: add VFPv4 capability detection and populate elf_hwcap Will Deacon
` (4 subsequent siblings)
10 siblings, 0 replies; 18+ messages in thread
From: Will Deacon @ 2011-06-08 12:30 UTC (permalink / raw)
To: linux-arm-kernel
Multicore implementations of the Cortex-A15 require bit 6 of the
auxiliary control register to be set in order for cache and TLB
maintenance operations to be broadcast between CPUs.
This patch adds a new proc_info structure for Cortex-A15, which enables
the SMP bit during setup and includes the new HWCAP for integer
division.
Signed-off-by: Will Deacon <will.deacon@arm.com>
---
arch/arm/mm/proc-v7.S | 20 ++++++++++++++++++--
1 files changed, 18 insertions(+), 2 deletions(-)
diff --git a/arch/arm/mm/proc-v7.S b/arch/arm/mm/proc-v7.S
index b22d98d..4937744 100644
--- a/arch/arm/mm/proc-v7.S
+++ b/arch/arm/mm/proc-v7.S
@@ -275,12 +275,18 @@ cpu_resume_l1_flags:
*/
__v7_ca5mp_setup:
__v7_ca9mp_setup:
+ mov r10, #(1 << 0) @ TLB ops broadcasting
+ b 1f
+__v7_ca15mp_setup:
+ mov r10, #0
+1:
#ifdef CONFIG_SMP
ALT_SMP(mrc p15, 0, r0, c1, c0, 1)
ALT_UP(mov r0, #(1 << 6)) @ fake it for UP
tst r0, #(1 << 6) @ SMP/nAMP mode enabled?
- orreq r0, r0, #(1 << 6) | (1 << 0) @ Enable SMP/nAMP mode and
- mcreq p15, 0, r0, c1, c0, 1 @ TLB ops broadcasting
+ orreq r0, r0, #(1 << 6) @ Enable SMP/nAMP mode
+ orreq r0, r0, r10 @ Enable CPU-specific SMP bits
+ mcreq p15, 0, r0, c1, c0, 1
#endif
__v7_setup:
adr r12, __v7_setup_stack @ the local stack
@@ -480,6 +486,16 @@ __v7_ca9mp_proc_info:
.size __v7_ca9mp_proc_info, . - __v7_ca9mp_proc_info
/*
+ * ARM Ltd. Cortex A15 processor.
+ */
+ .type __v7_ca15mp_proc_info, #object
+__v7_ca15mp_proc_info:
+ .long 0x410fc0f0
+ .long 0xff0ffff0
+ __v7_proc __v7_ca15mp_setup, HWCAP_IDIV
+ .size __v7_ca15mp_proc_info, . - __v7_ca15mp_proc_info
+
+ /*
* Match any ARMv7 processor core.
*/
.type __v7_proc_info, #object
--
1.7.0.4
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [Patch v2 07/11] ARM: vfp: add VFPv4 capability detection and populate elf_hwcap
2011-06-08 12:30 [Patch v2 00/11] Core support for Cortex-A5 and Cortex-A15 Will Deacon
` (5 preceding siblings ...)
2011-06-08 12:30 ` [Patch v2 06/11] ARM: proc: add proc info for Cortex-A15MP using classic page tables Will Deacon
@ 2011-06-08 12:30 ` Will Deacon
2011-06-08 12:30 ` [Patch v2 08/11] ARM: perf: remove confusing comment from v7 perf events backend Will Deacon
` (3 subsequent siblings)
10 siblings, 0 replies; 18+ messages in thread
From: Will Deacon @ 2011-06-08 12:30 UTC (permalink / raw)
To: linux-arm-kernel
The presence of VFPv4 cannot be detected simply by looking at the FPSID
subarchitecture field, as a value >= 2 signifies the architecture as
VFPv3 or later.
This patch reads from MVFR1 to check whether or not the fused multiple
accumulate instructions are supported. Since these are introduced with
VFPv4, this tells us what we need to know.
Signed-off-by: Will Deacon <will.deacon@arm.com>
---
arch/arm/vfp/vfpmodule.c | 6 ++++--
1 files changed, 4 insertions(+), 2 deletions(-)
diff --git a/arch/arm/vfp/vfpmodule.c b/arch/arm/vfp/vfpmodule.c
index f25e7ec..650d90b 100644
--- a/arch/arm/vfp/vfpmodule.c
+++ b/arch/arm/vfp/vfpmodule.c
@@ -582,7 +582,6 @@ static int __init vfp_init(void)
elf_hwcap |= HWCAP_VFPv3D16;
}
#endif
-#ifdef CONFIG_NEON
/*
* Check for the presence of the Advanced SIMD
* load/store instructions, integer and single
@@ -590,10 +589,13 @@ static int __init vfp_init(void)
* for NEON if the hardware has the MVFR registers.
*/
if ((read_cpuid_id() & 0x000f0000) == 0x000f0000) {
+#ifdef CONFIG_NEON
if ((fmrx(MVFR1) & 0x000fff00) == 0x00011100)
elf_hwcap |= HWCAP_NEON;
- }
#endif
+ if ((fmrx(MVFR1) & 0xf0000000) == 0x10000000)
+ elf_hwcap |= HWCAP_VFPv4;
+ }
}
return 0;
}
--
1.7.0.4
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [Patch v2 08/11] ARM: perf: remove confusing comment from v7 perf events backend
2011-06-08 12:30 [Patch v2 00/11] Core support for Cortex-A5 and Cortex-A15 Will Deacon
` (6 preceding siblings ...)
2011-06-08 12:30 ` [Patch v2 07/11] ARM: vfp: add VFPv4 capability detection and populate elf_hwcap Will Deacon
@ 2011-06-08 12:30 ` Will Deacon
2011-06-08 12:30 ` [Patch v2 09/11] ARM: perf: add PMUv2 common event definitions Will Deacon
` (2 subsequent siblings)
10 siblings, 0 replies; 18+ messages in thread
From: Will Deacon @ 2011-06-08 12:30 UTC (permalink / raw)
To: linux-arm-kernel
The comment about measuring TLB misses and refills in the ARMv7 perf
backend makes little sense and refers loosely to raw counters that
should be used instead.
This patch removes the comments to avoid any confusion.
Signed-off-by: Will Deacon <will.deacon@arm.com>
---
arch/arm/kernel/perf_event_v7.c | 10 ----------
1 files changed, 0 insertions(+), 10 deletions(-)
diff --git a/arch/arm/kernel/perf_event_v7.c b/arch/arm/kernel/perf_event_v7.c
index 4960686..554eba3 100644
--- a/arch/arm/kernel/perf_event_v7.c
+++ b/arch/arm/kernel/perf_event_v7.c
@@ -207,11 +207,6 @@ static const unsigned armv7_a8_perf_cache_map[PERF_COUNT_HW_CACHE_MAX]
},
},
[C(DTLB)] = {
- /*
- * Only ITLB misses and DTLB refills are supported.
- * If users want the DTLB refills misses a raw counter
- * must be used.
- */
[C(OP_READ)] = {
[C(RESULT_ACCESS)] = CACHE_OP_UNSUPPORTED,
[C(RESULT_MISS)] = ARMV7_PERFCTR_DTLB_REFILL,
@@ -323,11 +318,6 @@ static const unsigned armv7_a9_perf_cache_map[PERF_COUNT_HW_CACHE_MAX]
},
},
[C(DTLB)] = {
- /*
- * Only ITLB misses and DTLB refills are supported.
- * If users want the DTLB refills misses a raw counter
- * must be used.
- */
[C(OP_READ)] = {
[C(RESULT_ACCESS)] = CACHE_OP_UNSUPPORTED,
[C(RESULT_MISS)] = ARMV7_PERFCTR_DTLB_REFILL,
--
1.7.0.4
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [Patch v2 09/11] ARM: perf: add PMUv2 common event definitions
2011-06-08 12:30 [Patch v2 00/11] Core support for Cortex-A5 and Cortex-A15 Will Deacon
` (7 preceding siblings ...)
2011-06-08 12:30 ` [Patch v2 08/11] ARM: perf: remove confusing comment from v7 perf events backend Will Deacon
@ 2011-06-08 12:30 ` Will Deacon
2011-06-08 13:02 ` Jean Pihet
2011-06-08 12:30 ` [Patch v2 10/11] ARM: perf: add support for the Cortex-A5 PMU Will Deacon
2011-06-08 12:30 ` [Patch v2 11/11] ARM: perf: add support for the Cortex-A15 PMU Will Deacon
10 siblings, 1 reply; 18+ messages in thread
From: Will Deacon @ 2011-06-08 12:30 UTC (permalink / raw)
To: linux-arm-kernel
The PMUv2 specification reserves a number of event encodings
for common events.
This patch adds these events to the common event enumeration
in preparation for PMUv2 cores, such as Cortex-A15.
Cc: Jean Pihet <jean.pihet@newoldbits.com>
Signed-off-by: Will Deacon <will.deacon@arm.com>
---
arch/arm/kernel/perf_event_v7.c | 35 +++++++++++++++++++++++++----------
1 files changed, 25 insertions(+), 10 deletions(-)
diff --git a/arch/arm/kernel/perf_event_v7.c b/arch/arm/kernel/perf_event_v7.c
index 554eba3..01b1145 100644
--- a/arch/arm/kernel/perf_event_v7.c
+++ b/arch/arm/kernel/perf_event_v7.c
@@ -17,17 +17,23 @@
*/
#ifdef CONFIG_CPU_V7
-/* Common ARMv7 event types */
+/*
+ * Common ARMv7 event types
+ *
+ * Note: An implementation may not be able to count all of these events
+ * but the encodings are considered to be `reserved' in the case that
+ * they are not available.
+ */
enum armv7_perf_types {
ARMV7_PERFCTR_PMNC_SW_INCR = 0x00,
ARMV7_PERFCTR_IFETCH_MISS = 0x01,
ARMV7_PERFCTR_ITLB_MISS = 0x02,
- ARMV7_PERFCTR_DCACHE_REFILL = 0x03,
- ARMV7_PERFCTR_DCACHE_ACCESS = 0x04,
+ ARMV7_PERFCTR_DCACHE_REFILL = 0x03, /* L1 */
+ ARMV7_PERFCTR_DCACHE_ACCESS = 0x04, /* L1 */
ARMV7_PERFCTR_DTLB_REFILL = 0x05,
ARMV7_PERFCTR_DREAD = 0x06,
ARMV7_PERFCTR_DWRITE = 0x07,
-
+ ARMV7_PERFCTR_INSTR_EXECUTED = 0x08,
ARMV7_PERFCTR_EXC_TAKEN = 0x09,
ARMV7_PERFCTR_EXC_EXECUTED = 0x0A,
ARMV7_PERFCTR_CID_WRITE = 0x0B,
@@ -39,21 +45,30 @@ enum armv7_perf_types {
*/
ARMV7_PERFCTR_PC_WRITE = 0x0C,
ARMV7_PERFCTR_PC_IMM_BRANCH = 0x0D,
+ ARMV7_PERFCTR_PC_PROC_RETURN = 0x0E,
ARMV7_PERFCTR_UNALIGNED_ACCESS = 0x0F,
+
+ /* These events are defined by the PMUv2 supplement (ARM DDI 0457A). */
ARMV7_PERFCTR_PC_BRANCH_MIS_PRED = 0x10,
ARMV7_PERFCTR_CLOCK_CYCLES = 0x11,
-
- ARMV7_PERFCTR_PC_BRANCH_MIS_USED = 0x12,
+ ARMV7_PERFCTR_PC_BRANCH_PRED = 0x12,
+ ARMV7_PERFCTR_MEM_ACCESS = 0x13,
+ ARMV7_PERFCTR_L1_ICACHE_ACCESS = 0x14,
+ ARMV7_PERFCTR_L1_DCACHE_WB = 0x15,
+ ARMV7_PERFCTR_L2_DCACHE_ACCESS = 0x16,
+ ARMV7_PERFCTR_L2_DCACHE_REFILL = 0x17,
+ ARMV7_PERFCTR_L2_DCACHE_WB = 0x18,
+ ARMV7_PERFCTR_BUS_ACCESS = 0x19,
+ ARMV7_PERFCTR_MEMORY_ERROR = 0x1A,
+ ARMV7_PERFCTR_INSTR_SPEC = 0x1B,
+ ARMV7_PERFCTR_TTBR_WRITE = 0x1C,
+ ARMV7_PERFCTR_BUS_CYCLES = 0x1D,
ARMV7_PERFCTR_CPU_CYCLES = 0xFF
};
/* ARMv7 Cortex-A8 specific event types */
enum armv7_a8_perf_types {
- ARMV7_PERFCTR_INSTR_EXECUTED = 0x08,
-
- ARMV7_PERFCTR_PC_PROC_RETURN = 0x0E,
-
ARMV7_PERFCTR_WRITE_BUFFER_FULL = 0x40,
ARMV7_PERFCTR_L2_STORE_MERGED = 0x41,
ARMV7_PERFCTR_L2_STORE_BUFF = 0x42,
--
1.7.0.4
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [Patch v2 10/11] ARM: perf: add support for the Cortex-A5 PMU
2011-06-08 12:30 [Patch v2 00/11] Core support for Cortex-A5 and Cortex-A15 Will Deacon
` (8 preceding siblings ...)
2011-06-08 12:30 ` [Patch v2 09/11] ARM: perf: add PMUv2 common event definitions Will Deacon
@ 2011-06-08 12:30 ` Will Deacon
2011-06-08 12:30 ` [Patch v2 11/11] ARM: perf: add support for the Cortex-A15 PMU Will Deacon
10 siblings, 0 replies; 18+ messages in thread
From: Will Deacon @ 2011-06-08 12:30 UTC (permalink / raw)
To: linux-arm-kernel
This patch adds support for the Cortex-A5 PMU to the ARMv7 perf-event
backend.
Signed-off-by: Will Deacon <will.deacon@arm.com>
---
arch/arm/include/asm/perf_event.h | 1 +
arch/arm/kernel/perf_event.c | 3 +
arch/arm/kernel/perf_event_v7.c | 146 +++++++++++++++++++++++++++++++++++++
3 files changed, 150 insertions(+), 0 deletions(-)
diff --git a/arch/arm/include/asm/perf_event.h b/arch/arm/include/asm/perf_event.h
index c4aa4e8..207bd3c 100644
--- a/arch/arm/include/asm/perf_event.h
+++ b/arch/arm/include/asm/perf_event.h
@@ -24,6 +24,7 @@ enum arm_perf_pmu_ids {
ARM_PERF_PMU_ID_V6MP,
ARM_PERF_PMU_ID_CA8,
ARM_PERF_PMU_ID_CA9,
+ ARM_PERF_PMU_ID_CA5,
ARM_NUM_PMU_IDS,
};
diff --git a/arch/arm/kernel/perf_event.c b/arch/arm/kernel/perf_event.c
index d53c0ab..df4e517 100644
--- a/arch/arm/kernel/perf_event.c
+++ b/arch/arm/kernel/perf_event.c
@@ -660,6 +660,9 @@ init_hw_perf_events(void)
case 0xC090: /* Cortex-A9 */
armpmu = armv7_a9_pmu_init();
break;
+ case 0xC050: /* Cortex-A5 */
+ armpmu = armv7_a5_pmu_init();
+ break;
}
/* Intel CPUs [xscale]. */
} else if (0x69 == implementor) {
diff --git a/arch/arm/kernel/perf_event_v7.c b/arch/arm/kernel/perf_event_v7.c
index 01b1145..db1d6c4 100644
--- a/arch/arm/kernel/perf_event_v7.c
+++ b/arch/arm/kernel/perf_event_v7.c
@@ -153,6 +153,21 @@ enum armv7_a9_perf_types {
ARMV7_PERFCTR_PLE_RQST_PROG = 0xA5
};
+/* ARMv7 Cortex-A5 specific event types */
+enum armv7_a5_perf_types {
+ ARMV7_PERFCTR_IRQ_TAKEN = 0x86,
+ ARMV7_PERFCTR_FIQ_TAKEN = 0x87,
+
+ ARMV7_PERFCTR_EXT_MEM_RQST = 0xc0,
+ ARMV7_PERFCTR_NC_EXT_MEM_RQST = 0xc1,
+ ARMV7_PERFCTR_PREFETCH_LINEFILL = 0xc2,
+ ARMV7_PERFCTR_PREFETCH_LINEFILL_DROP = 0xc3,
+ ARMV7_PERFCTR_ENTER_READ_ALLOC = 0xc4,
+ ARMV7_PERFCTR_READ_ALLOC = 0xc5,
+
+ ARMV7_PERFCTR_STALL_SB_FULL = 0xc9,
+};
+
/*
* Cortex-A8 HW events mapping
*
@@ -379,6 +394,122 @@ static const unsigned armv7_a9_perf_cache_map[PERF_COUNT_HW_CACHE_MAX]
};
/*
+ * Cortex-A5 HW events mapping
+ */
+static const unsigned armv7_a5_perf_map[PERF_COUNT_HW_MAX] = {
+ [PERF_COUNT_HW_CPU_CYCLES] = ARMV7_PERFCTR_CPU_CYCLES,
+ [PERF_COUNT_HW_INSTRUCTIONS] = ARMV7_PERFCTR_INSTR_EXECUTED,
+ [PERF_COUNT_HW_CACHE_REFERENCES] = HW_OP_UNSUPPORTED,
+ [PERF_COUNT_HW_CACHE_MISSES] = HW_OP_UNSUPPORTED,
+ [PERF_COUNT_HW_BRANCH_INSTRUCTIONS] = ARMV7_PERFCTR_PC_WRITE,
+ [PERF_COUNT_HW_BRANCH_MISSES] = ARMV7_PERFCTR_PC_BRANCH_MIS_PRED,
+ [PERF_COUNT_HW_BUS_CYCLES] = HW_OP_UNSUPPORTED,
+};
+
+static const unsigned armv7_a5_perf_cache_map[PERF_COUNT_HW_CACHE_MAX]
+ [PERF_COUNT_HW_CACHE_OP_MAX]
+ [PERF_COUNT_HW_CACHE_RESULT_MAX] = {
+ [C(L1D)] = {
+ [C(OP_READ)] = {
+ [C(RESULT_ACCESS)]
+ = ARMV7_PERFCTR_DCACHE_ACCESS,
+ [C(RESULT_MISS)]
+ = ARMV7_PERFCTR_DCACHE_REFILL,
+ },
+ [C(OP_WRITE)] = {
+ [C(RESULT_ACCESS)]
+ = ARMV7_PERFCTR_DCACHE_ACCESS,
+ [C(RESULT_MISS)]
+ = ARMV7_PERFCTR_DCACHE_REFILL,
+ },
+ [C(OP_PREFETCH)] = {
+ [C(RESULT_ACCESS)]
+ = ARMV7_PERFCTR_PREFETCH_LINEFILL,
+ [C(RESULT_MISS)]
+ = ARMV7_PERFCTR_PREFETCH_LINEFILL_DROP,
+ },
+ },
+ [C(L1I)] = {
+ [C(OP_READ)] = {
+ [C(RESULT_ACCESS)] = ARMV7_PERFCTR_L1_ICACHE_ACCESS,
+ [C(RESULT_MISS)] = ARMV7_PERFCTR_IFETCH_MISS,
+ },
+ [C(OP_WRITE)] = {
+ [C(RESULT_ACCESS)] = ARMV7_PERFCTR_L1_ICACHE_ACCESS,
+ [C(RESULT_MISS)] = ARMV7_PERFCTR_IFETCH_MISS,
+ },
+ /*
+ * The prefetch counters don't differentiate between the I
+ * side and the D side.
+ */
+ [C(OP_PREFETCH)] = {
+ [C(RESULT_ACCESS)]
+ = ARMV7_PERFCTR_PREFETCH_LINEFILL,
+ [C(RESULT_MISS)]
+ = ARMV7_PERFCTR_PREFETCH_LINEFILL_DROP,
+ },
+ },
+ [C(LL)] = {
+ [C(OP_READ)] = {
+ [C(RESULT_ACCESS)] = CACHE_OP_UNSUPPORTED,
+ [C(RESULT_MISS)] = CACHE_OP_UNSUPPORTED,
+ },
+ [C(OP_WRITE)] = {
+ [C(RESULT_ACCESS)] = CACHE_OP_UNSUPPORTED,
+ [C(RESULT_MISS)] = CACHE_OP_UNSUPPORTED,
+ },
+ [C(OP_PREFETCH)] = {
+ [C(RESULT_ACCESS)] = CACHE_OP_UNSUPPORTED,
+ [C(RESULT_MISS)] = CACHE_OP_UNSUPPORTED,
+ },
+ },
+ [C(DTLB)] = {
+ [C(OP_READ)] = {
+ [C(RESULT_ACCESS)] = CACHE_OP_UNSUPPORTED,
+ [C(RESULT_MISS)] = ARMV7_PERFCTR_DTLB_REFILL,
+ },
+ [C(OP_WRITE)] = {
+ [C(RESULT_ACCESS)] = CACHE_OP_UNSUPPORTED,
+ [C(RESULT_MISS)] = ARMV7_PERFCTR_DTLB_REFILL,
+ },
+ [C(OP_PREFETCH)] = {
+ [C(RESULT_ACCESS)] = CACHE_OP_UNSUPPORTED,
+ [C(RESULT_MISS)] = CACHE_OP_UNSUPPORTED,
+ },
+ },
+ [C(ITLB)] = {
+ [C(OP_READ)] = {
+ [C(RESULT_ACCESS)] = CACHE_OP_UNSUPPORTED,
+ [C(RESULT_MISS)] = ARMV7_PERFCTR_ITLB_MISS,
+ },
+ [C(OP_WRITE)] = {
+ [C(RESULT_ACCESS)] = CACHE_OP_UNSUPPORTED,
+ [C(RESULT_MISS)] = ARMV7_PERFCTR_ITLB_MISS,
+ },
+ [C(OP_PREFETCH)] = {
+ [C(RESULT_ACCESS)] = CACHE_OP_UNSUPPORTED,
+ [C(RESULT_MISS)] = CACHE_OP_UNSUPPORTED,
+ },
+ },
+ [C(BPU)] = {
+ [C(OP_READ)] = {
+ [C(RESULT_ACCESS)] = ARMV7_PERFCTR_PC_BRANCH_PRED,
+ [C(RESULT_MISS)]
+ = ARMV7_PERFCTR_PC_BRANCH_MIS_PRED,
+ },
+ [C(OP_WRITE)] = {
+ [C(RESULT_ACCESS)] = ARMV7_PERFCTR_PC_BRANCH_PRED,
+ [C(RESULT_MISS)]
+ = ARMV7_PERFCTR_PC_BRANCH_MIS_PRED,
+ },
+ [C(OP_PREFETCH)] = {
+ [C(RESULT_ACCESS)] = CACHE_OP_UNSUPPORTED,
+ [C(RESULT_MISS)] = CACHE_OP_UNSUPPORTED,
+ },
+ },
+};
+
+/*
* Perf Events counters
*/
enum armv7_counters {
@@ -910,6 +1041,16 @@ static const struct arm_pmu *__init armv7_a9_pmu_init(void)
armv7pmu.num_events = armv7_read_num_pmnc_events();
return &armv7pmu;
}
+
+static const struct arm_pmu *__init armv7_a5_pmu_init(void)
+{
+ armv7pmu.id = ARM_PERF_PMU_ID_CA5;
+ armv7pmu.name = "ARMv7 Cortex-A5";
+ armv7pmu.cache_map = &armv7_a5_perf_cache_map;
+ armv7pmu.event_map = &armv7_a5_perf_map;
+ armv7pmu.num_events = armv7_read_num_pmnc_events();
+ return &armv7pmu;
+}
#else
static const struct arm_pmu *__init armv7_a8_pmu_init(void)
{
@@ -920,4 +1061,9 @@ static const struct arm_pmu *__init armv7_a9_pmu_init(void)
{
return NULL;
}
+
+static const struct arm_pmu *__init armv7_a5_pmu_init(void)
+{
+ return NULL;
+}
#endif /* CONFIG_CPU_V7 */
--
1.7.0.4
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [Patch v2 11/11] ARM: perf: add support for the Cortex-A15 PMU
2011-06-08 12:30 [Patch v2 00/11] Core support for Cortex-A5 and Cortex-A15 Will Deacon
` (9 preceding siblings ...)
2011-06-08 12:30 ` [Patch v2 10/11] ARM: perf: add support for the Cortex-A5 PMU Will Deacon
@ 2011-06-08 12:30 ` Will Deacon
10 siblings, 0 replies; 18+ messages in thread
From: Will Deacon @ 2011-06-08 12:30 UTC (permalink / raw)
To: linux-arm-kernel
This patch adds support for the Cortex-A15 PMU to the ARMv7
perf-event backend.
Signed-off-by: Will Deacon <will.deacon@arm.com>
---
arch/arm/include/asm/perf_event.h | 1 +
arch/arm/kernel/perf_event.c | 3 +
arch/arm/kernel/perf_event_v7.c | 153 +++++++++++++++++++++++++++++++++++++
3 files changed, 157 insertions(+), 0 deletions(-)
diff --git a/arch/arm/include/asm/perf_event.h b/arch/arm/include/asm/perf_event.h
index 207bd3c..0f8e382 100644
--- a/arch/arm/include/asm/perf_event.h
+++ b/arch/arm/include/asm/perf_event.h
@@ -25,6 +25,7 @@ enum arm_perf_pmu_ids {
ARM_PERF_PMU_ID_CA8,
ARM_PERF_PMU_ID_CA9,
ARM_PERF_PMU_ID_CA5,
+ ARM_PERF_PMU_ID_CA15,
ARM_NUM_PMU_IDS,
};
diff --git a/arch/arm/kernel/perf_event.c b/arch/arm/kernel/perf_event.c
index df4e517..262ea67 100644
--- a/arch/arm/kernel/perf_event.c
+++ b/arch/arm/kernel/perf_event.c
@@ -663,6 +663,9 @@ init_hw_perf_events(void)
case 0xC050: /* Cortex-A5 */
armpmu = armv7_a5_pmu_init();
break;
+ case 0xC0F0: /* Cortex-A15 */
+ armpmu = armv7_a15_pmu_init();
+ break;
}
/* Intel CPUs [xscale]. */
} else if (0x69 == implementor) {
diff --git a/arch/arm/kernel/perf_event_v7.c b/arch/arm/kernel/perf_event_v7.c
index db1d6c4..9633178 100644
--- a/arch/arm/kernel/perf_event_v7.c
+++ b/arch/arm/kernel/perf_event_v7.c
@@ -168,6 +168,24 @@ enum armv7_a5_perf_types {
ARMV7_PERFCTR_STALL_SB_FULL = 0xc9,
};
+/* ARMv7 Cortex-A15 specific event types */
+enum armv7_a15_perf_types {
+ ARMV7_PERFCTR_L1_DCACHE_READ_ACCESS = 0x40,
+ ARMV7_PERFCTR_L1_DCACHE_WRITE_ACCESS = 0x41,
+ ARMV7_PERFCTR_L1_DCACHE_READ_REFILL = 0x42,
+ ARMV7_PERFCTR_L1_DCACHE_WRITE_REFILL = 0x43,
+
+ ARMV7_PERFCTR_L1_DTLB_READ_REFILL = 0x4C,
+ ARMV7_PERFCTR_L1_DTLB_WRITE_REFILL = 0x4D,
+
+ ARMV7_PERFCTR_L2_DCACHE_READ_ACCESS = 0x50,
+ ARMV7_PERFCTR_L2_DCACHE_WRITE_ACCESS = 0x51,
+ ARMV7_PERFCTR_L2_DCACHE_READ_REFILL = 0x52,
+ ARMV7_PERFCTR_L2_DCACHE_WRITE_REFILL = 0x53,
+
+ ARMV7_PERFCTR_SPEC_PC_WRITE = 0x76,
+};
+
/*
* Cortex-A8 HW events mapping
*
@@ -510,6 +528,126 @@ static const unsigned armv7_a5_perf_cache_map[PERF_COUNT_HW_CACHE_MAX]
};
/*
+ * Cortex-A15 HW events mapping
+ */
+static const unsigned armv7_a15_perf_map[PERF_COUNT_HW_MAX] = {
+ [PERF_COUNT_HW_CPU_CYCLES] = ARMV7_PERFCTR_CPU_CYCLES,
+ [PERF_COUNT_HW_INSTRUCTIONS] = ARMV7_PERFCTR_INSTR_EXECUTED,
+ [PERF_COUNT_HW_CACHE_REFERENCES] = HW_OP_UNSUPPORTED,
+ [PERF_COUNT_HW_CACHE_MISSES] = HW_OP_UNSUPPORTED,
+ [PERF_COUNT_HW_BRANCH_INSTRUCTIONS] = ARMV7_PERFCTR_SPEC_PC_WRITE,
+ [PERF_COUNT_HW_BRANCH_MISSES] = ARMV7_PERFCTR_PC_BRANCH_MIS_PRED,
+ [PERF_COUNT_HW_BUS_CYCLES] = ARMV7_PERFCTR_BUS_CYCLES,
+};
+
+static const unsigned armv7_a15_perf_cache_map[PERF_COUNT_HW_CACHE_MAX]
+ [PERF_COUNT_HW_CACHE_OP_MAX]
+ [PERF_COUNT_HW_CACHE_RESULT_MAX] = {
+ [C(L1D)] = {
+ [C(OP_READ)] = {
+ [C(RESULT_ACCESS)]
+ = ARMV7_PERFCTR_L1_DCACHE_READ_ACCESS,
+ [C(RESULT_MISS)]
+ = ARMV7_PERFCTR_L1_DCACHE_READ_REFILL,
+ },
+ [C(OP_WRITE)] = {
+ [C(RESULT_ACCESS)]
+ = ARMV7_PERFCTR_L1_DCACHE_WRITE_ACCESS,
+ [C(RESULT_MISS)]
+ = ARMV7_PERFCTR_L1_DCACHE_WRITE_REFILL,
+ },
+ [C(OP_PREFETCH)] = {
+ [C(RESULT_ACCESS)] = CACHE_OP_UNSUPPORTED,
+ [C(RESULT_MISS)] = CACHE_OP_UNSUPPORTED,
+ },
+ },
+ [C(L1I)] = {
+ /*
+ * Not all performance counters differentiate between read
+ * and write accesses/misses so we're not always strictly
+ * correct, but it's the best we can do. Writes and reads get
+ * combined in these cases.
+ */
+ [C(OP_READ)] = {
+ [C(RESULT_ACCESS)] = ARMV7_PERFCTR_L1_ICACHE_ACCESS,
+ [C(RESULT_MISS)] = ARMV7_PERFCTR_IFETCH_MISS,
+ },
+ [C(OP_WRITE)] = {
+ [C(RESULT_ACCESS)] = ARMV7_PERFCTR_L1_ICACHE_ACCESS,
+ [C(RESULT_MISS)] = ARMV7_PERFCTR_IFETCH_MISS,
+ },
+ [C(OP_PREFETCH)] = {
+ [C(RESULT_ACCESS)] = CACHE_OP_UNSUPPORTED,
+ [C(RESULT_MISS)] = CACHE_OP_UNSUPPORTED,
+ },
+ },
+ [C(LL)] = {
+ [C(OP_READ)] = {
+ [C(RESULT_ACCESS)]
+ = ARMV7_PERFCTR_L2_DCACHE_READ_ACCESS,
+ [C(RESULT_MISS)]
+ = ARMV7_PERFCTR_L2_DCACHE_READ_REFILL,
+ },
+ [C(OP_WRITE)] = {
+ [C(RESULT_ACCESS)]
+ = ARMV7_PERFCTR_L2_DCACHE_WRITE_ACCESS,
+ [C(RESULT_MISS)]
+ = ARMV7_PERFCTR_L2_DCACHE_WRITE_REFILL,
+ },
+ [C(OP_PREFETCH)] = {
+ [C(RESULT_ACCESS)] = CACHE_OP_UNSUPPORTED,
+ [C(RESULT_MISS)] = CACHE_OP_UNSUPPORTED,
+ },
+ },
+ [C(DTLB)] = {
+ [C(OP_READ)] = {
+ [C(RESULT_ACCESS)] = CACHE_OP_UNSUPPORTED,
+ [C(RESULT_MISS)]
+ = ARMV7_PERFCTR_L1_DTLB_READ_REFILL,
+ },
+ [C(OP_WRITE)] = {
+ [C(RESULT_ACCESS)] = CACHE_OP_UNSUPPORTED,
+ [C(RESULT_MISS)]
+ = ARMV7_PERFCTR_L1_DTLB_WRITE_REFILL,
+ },
+ [C(OP_PREFETCH)] = {
+ [C(RESULT_ACCESS)] = CACHE_OP_UNSUPPORTED,
+ [C(RESULT_MISS)] = CACHE_OP_UNSUPPORTED,
+ },
+ },
+ [C(ITLB)] = {
+ [C(OP_READ)] = {
+ [C(RESULT_ACCESS)] = CACHE_OP_UNSUPPORTED,
+ [C(RESULT_MISS)] = ARMV7_PERFCTR_ITLB_MISS,
+ },
+ [C(OP_WRITE)] = {
+ [C(RESULT_ACCESS)] = CACHE_OP_UNSUPPORTED,
+ [C(RESULT_MISS)] = ARMV7_PERFCTR_ITLB_MISS,
+ },
+ [C(OP_PREFETCH)] = {
+ [C(RESULT_ACCESS)] = CACHE_OP_UNSUPPORTED,
+ [C(RESULT_MISS)] = CACHE_OP_UNSUPPORTED,
+ },
+ },
+ [C(BPU)] = {
+ [C(OP_READ)] = {
+ [C(RESULT_ACCESS)] = ARMV7_PERFCTR_PC_BRANCH_PRED,
+ [C(RESULT_MISS)]
+ = ARMV7_PERFCTR_PC_BRANCH_MIS_PRED,
+ },
+ [C(OP_WRITE)] = {
+ [C(RESULT_ACCESS)] = ARMV7_PERFCTR_PC_BRANCH_PRED,
+ [C(RESULT_MISS)]
+ = ARMV7_PERFCTR_PC_BRANCH_MIS_PRED,
+ },
+ [C(OP_PREFETCH)] = {
+ [C(RESULT_ACCESS)] = CACHE_OP_UNSUPPORTED,
+ [C(RESULT_MISS)] = CACHE_OP_UNSUPPORTED,
+ },
+ },
+};
+
+/*
* Perf Events counters
*/
enum armv7_counters {
@@ -1051,6 +1189,16 @@ static const struct arm_pmu *__init armv7_a5_pmu_init(void)
armv7pmu.num_events = armv7_read_num_pmnc_events();
return &armv7pmu;
}
+
+static const struct arm_pmu *__init armv7_a15_pmu_init(void)
+{
+ armv7pmu.id = ARM_PERF_PMU_ID_CA15;
+ armv7pmu.name = "ARMv7 Cortex-A15";
+ armv7pmu.cache_map = &armv7_a15_perf_cache_map;
+ armv7pmu.event_map = &armv7_a15_perf_map;
+ armv7pmu.num_events = armv7_read_num_pmnc_events();
+ return &armv7pmu;
+}
#else
static const struct arm_pmu *__init armv7_a8_pmu_init(void)
{
@@ -1066,4 +1214,9 @@ static const struct arm_pmu *__init armv7_a5_pmu_init(void)
{
return NULL;
}
+
+static const struct arm_pmu *__init armv7_a15_pmu_init(void)
+{
+ return NULL;
+}
#endif /* CONFIG_CPU_V7 */
--
1.7.0.4
^ permalink raw reply related [flat|nested] 18+ messages in thread
* [Patch v2 09/11] ARM: perf: add PMUv2 common event definitions
2011-06-08 12:30 ` [Patch v2 09/11] ARM: perf: add PMUv2 common event definitions Will Deacon
@ 2011-06-08 13:02 ` Jean Pihet
2011-06-08 13:08 ` Will Deacon
0 siblings, 1 reply; 18+ messages in thread
From: Jean Pihet @ 2011-06-08 13:02 UTC (permalink / raw)
To: linux-arm-kernel
Hi Will,
On Wed, Jun 8, 2011 at 2:30 PM, Will Deacon <will.deacon@arm.com> wrote:
> The PMUv2 specification reserves a number of event encodings
> for common events.
>
> This patch adds these events to the common event enumeration
> in preparation for PMUv2 cores, such as Cortex-A15.
>
> Cc: Jean Pihet <jean.pihet@newoldbits.com>
> Signed-off-by: Will Deacon <will.deacon@arm.com>
The change looks good, here is the acked-by FWIW:
Signed-off-by: Jean Pihet <j-pihet@ti.com>
...
Regards,
Jean
^ permalink raw reply [flat|nested] 18+ messages in thread
* [Patch v2 09/11] ARM: perf: add PMUv2 common event definitions
2011-06-08 13:02 ` Jean Pihet
@ 2011-06-08 13:08 ` Will Deacon
2011-06-08 13:12 ` Jean Pihet
0 siblings, 1 reply; 18+ messages in thread
From: Will Deacon @ 2011-06-08 13:08 UTC (permalink / raw)
To: linux-arm-kernel
On Wed, Jun 08, 2011 at 02:02:41PM +0100, Jean Pihet wrote:
> Hi Will,
>
> On Wed, Jun 8, 2011 at 2:30 PM, Will Deacon <will.deacon@arm.com> wrote:
> > The PMUv2 specification reserves a number of event encodings
> > for common events.
> >
> > This patch adds these events to the common event enumeration
> > in preparation for PMUv2 cores, such as Cortex-A15.
> >
> > Cc: Jean Pihet <jean.pihet@newoldbits.com>
> > Signed-off-by: Will Deacon <will.deacon@arm.com>
>
> The change looks good, here is the acked-by FWIW:
> Signed-off-by: Jean Pihet <j-pihet@ti.com>
Cheers Jean, I'll add your Ack (rather than S-O-B).
Will
^ permalink raw reply [flat|nested] 18+ messages in thread
* [Patch v2 09/11] ARM: perf: add PMUv2 common event definitions
2011-06-08 13:08 ` Will Deacon
@ 2011-06-08 13:12 ` Jean Pihet
0 siblings, 0 replies; 18+ messages in thread
From: Jean Pihet @ 2011-06-08 13:12 UTC (permalink / raw)
To: linux-arm-kernel
On Wed, Jun 8, 2011 at 3:08 PM, Will Deacon <will.deacon@arm.com> wrote:
> On Wed, Jun 08, 2011 at 02:02:41PM +0100, Jean Pihet wrote:
>> Hi Will,
>>
>> On Wed, Jun 8, 2011 at 2:30 PM, Will Deacon <will.deacon@arm.com> wrote:
>> > The PMUv2 specification reserves a number of event encodings
>> > for common events.
>> >
>> > This patch adds these events to the common event enumeration
>> > in preparation for PMUv2 cores, such as Cortex-A15.
>> >
>> > Cc: Jean Pihet <jean.pihet@newoldbits.com>
>> > Signed-off-by: Will Deacon <will.deacon@arm.com>
>>
>> The change looks good, here is the acked-by FWIW:
>> Signed-off-by: Jean Pihet <j-pihet@ti.com>
>
> Cheers Jean, I'll add your Ack (rather than S-O-B).
Yes sorry about the wrong copy-paste ;p
Thanks,
Jean
>
> Will
>
^ permalink raw reply [flat|nested] 18+ messages in thread
* [Patch v2 03/11] ARM: hwcaps: use shifts instead of hardcoded constants
2011-06-08 12:30 ` [Patch v2 03/11] ARM: hwcaps: use shifts instead of hardcoded constants Will Deacon
@ 2011-06-13 13:55 ` Sergei Shtylyov
2011-06-13 14:10 ` Will Deacon
0 siblings, 1 reply; 18+ messages in thread
From: Sergei Shtylyov @ 2011-06-13 13:55 UTC (permalink / raw)
To: linux-arm-kernel
Hello.
On 08-06-2011 16:30, Will Deacon wrote:
> The HWCAP numbers are defined as constants, each one being a power of 2.
> This has become slightly unwieldy now that we have reached 32k.
> This patch changes the HWCAP defines to use (1<< n) instead of coding
> the constant directly. The values remain unchanged.
Perhaps it's better to use BIT(n) macro instead?
> Signed-off-by: Will Deacon <will.deacon@arm.com>
WBR, Sergei
^ permalink raw reply [flat|nested] 18+ messages in thread
* [Patch v2 03/11] ARM: hwcaps: use shifts instead of hardcoded constants
2011-06-13 13:55 ` Sergei Shtylyov
@ 2011-06-13 14:10 ` Will Deacon
2011-06-13 14:22 ` Russell King - ARM Linux
0 siblings, 1 reply; 18+ messages in thread
From: Will Deacon @ 2011-06-13 14:10 UTC (permalink / raw)
To: linux-arm-kernel
Sergei,
On Mon, Jun 13, 2011 at 02:55:16PM +0100, Sergei Shtylyov wrote:
> Hello.
>
> On 08-06-2011 16:30, Will Deacon wrote:
>
> > The HWCAP numbers are defined as constants, each one being a power of 2.
> > This has become slightly unwieldy now that we have reached 32k.
>
> > This patch changes the HWCAP defines to use (1<< n) instead of coding
> > the constant directly. The values remain unchanged.
>
> Perhaps it's better to use BIT(n) macro instead?
That has the downside of breaking userspace, unless we export linux/bitops.h
and remove the __KERNEL__ guards around the BIT macro.
Will
^ permalink raw reply [flat|nested] 18+ messages in thread
* [Patch v2 03/11] ARM: hwcaps: use shifts instead of hardcoded constants
2011-06-13 14:10 ` Will Deacon
@ 2011-06-13 14:22 ` Russell King - ARM Linux
0 siblings, 0 replies; 18+ messages in thread
From: Russell King - ARM Linux @ 2011-06-13 14:22 UTC (permalink / raw)
To: linux-arm-kernel
On Mon, Jun 13, 2011 at 03:10:13PM +0100, Will Deacon wrote:
> Sergei,
>
> On Mon, Jun 13, 2011 at 02:55:16PM +0100, Sergei Shtylyov wrote:
> > Hello.
> >
> > On 08-06-2011 16:30, Will Deacon wrote:
> >
> > > The HWCAP numbers are defined as constants, each one being a power of 2.
> > > This has become slightly unwieldy now that we have reached 32k.
> >
> > > This patch changes the HWCAP defines to use (1<< n) instead of coding
> > > the constant directly. The values remain unchanged.
> >
> > Perhaps it's better to use BIT(n) macro instead?
>
> That has the downside of breaking userspace, unless we export linux/bitops.h
> and remove the __KERNEL__ guards around the BIT macro.
And potentially break userspace programs which also have a BIT() macro.
No, we need to keep using plain C for exported definitions.
^ permalink raw reply [flat|nested] 18+ messages in thread
end of thread, other threads:[~2011-06-13 14:22 UTC | newest]
Thread overview: 18+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-06-08 12:30 [Patch v2 00/11] Core support for Cortex-A5 and Cortex-A15 Will Deacon
2011-06-08 12:30 ` [Patch v2 01/11] arm: Convert v7 proc infos into a common macro Will Deacon
2011-06-08 12:30 ` [Patch v2 02/11] arm: Add Cortex A5 proc info Will Deacon
2011-06-08 12:30 ` [Patch v2 03/11] ARM: hwcaps: use shifts instead of hardcoded constants Will Deacon
2011-06-13 13:55 ` Sergei Shtylyov
2011-06-13 14:10 ` Will Deacon
2011-06-13 14:22 ` Russell King - ARM Linux
2011-06-08 12:30 ` [Patch v2 04/11] ARM: hwcaps: add new HWCAP defines for ARMv7-A Will Deacon
2011-06-08 12:30 ` [Patch v2 05/11] ARM: proc: reorder macro parameters for __v7_proc macro Will Deacon
2011-06-08 12:30 ` [Patch v2 06/11] ARM: proc: add proc info for Cortex-A15MP using classic page tables Will Deacon
2011-06-08 12:30 ` [Patch v2 07/11] ARM: vfp: add VFPv4 capability detection and populate elf_hwcap Will Deacon
2011-06-08 12:30 ` [Patch v2 08/11] ARM: perf: remove confusing comment from v7 perf events backend Will Deacon
2011-06-08 12:30 ` [Patch v2 09/11] ARM: perf: add PMUv2 common event definitions Will Deacon
2011-06-08 13:02 ` Jean Pihet
2011-06-08 13:08 ` Will Deacon
2011-06-08 13:12 ` Jean Pihet
2011-06-08 12:30 ` [Patch v2 10/11] ARM: perf: add support for the Cortex-A5 PMU Will Deacon
2011-06-08 12:30 ` [Patch v2 11/11] ARM: perf: add support for the Cortex-A15 PMU Will Deacon
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).