/* SPDX-License-Identifier: GPL-2.0 */
/*
* Copyright (C) 2012 ARM Ltd.
*/
#ifndef __PERF_ARM_PMUV3_H
#define __PERF_ARM_PMUV3_H
#define ARMV8_PMU_MAX_GENERAL_COUNTERS 31
#define ARMV8_PMU_CYCLE_IDX 31
#define ARMV8_PMU_INSTR_IDX 32 /* Not accessible from AArch32 */
/*
* Common architectural and microarchitectural event numbers.
*/
#define ARMV8_PMUV3_PERFCTR_SW_INCR 0 x0000
#define ARMV8_PMUV3_PERFCTR_L1I_CACHE_REFILL 0 x0001
#define ARMV8_PMUV3_PERFCTR_L1I_TLB_REFILL 0 x0002
#define ARMV8_PMUV3_PERFCTR_L1D_CACHE_REFILL 0 x0003
#define ARMV8_PMUV3_PERFCTR_L1D_CACHE 0 x0004
#define ARMV8_PMUV3_PERFCTR_L1D_TLB_REFILL 0 x0005
#define ARMV8_PMUV3_PERFCTR_LD_RETIRED 0 x0006
#define ARMV8_PMUV3_PERFCTR_ST_RETIRED 0 x0007
#define ARMV8_PMUV3_PERFCTR_INST_RETIRED 0 x0008
#define ARMV8_PMUV3_PERFCTR_EXC_TAKEN 0 x0009
#define ARMV8_PMUV3_PERFCTR_EXC_RETURN 0 x000A
#define ARMV8_PMUV3_PERFCTR_CID_WRITE_RETIRED 0 x000B
#define ARMV8_PMUV3_PERFCTR_PC_WRITE_RETIRED 0 x000C
#define ARMV8_PMUV3_PERFCTR_BR_IMMED_RETIRED 0 x000D
#define ARMV8_PMUV3_PERFCTR_BR_RETURN_RETIRED 0 x000E
#define ARMV8_PMUV3_PERFCTR_UNALIGNED_LDST_RETIRED 0 x000F
#define ARMV8_PMUV3_PERFCTR_BR_MIS_PRED 0 x0010
#define ARMV8_PMUV3_PERFCTR_CPU_CYCLES 0 x0011
#define ARMV8_PMUV3_PERFCTR_BR_PRED 0 x0012
#define ARMV8_PMUV3_PERFCTR_MEM_ACCESS 0 x0013
#define ARMV8_PMUV3_PERFCTR_L1I_CACHE 0 x0014
#define ARMV8_PMUV3_PERFCTR_L1D_CACHE_WB 0 x0015
#define ARMV8_PMUV3_PERFCTR_L2D_CACHE 0 x0016
#define ARMV8_PMUV3_PERFCTR_L2D_CACHE_REFILL 0 x0017
#define ARMV8_PMUV3_PERFCTR_L2D_CACHE_WB 0 x0018
#define ARMV8_PMUV3_PERFCTR_BUS_ACCESS 0 x0019
#define ARMV8_PMUV3_PERFCTR_MEMORY_ERROR 0 x001A
#define ARMV8_PMUV3_PERFCTR_INST_SPEC 0 x001B
#define ARMV8_PMUV3_PERFCTR_TTBR_WRITE_RETIRED 0 x001C
#define ARMV8_PMUV3_PERFCTR_BUS_CYCLES 0 x001D
#define ARMV8_PMUV3_PERFCTR_CHAIN 0 x001E
#define ARMV8_PMUV3_PERFCTR_L1D_CACHE_ALLOCATE 0 x001F
#define ARMV8_PMUV3_PERFCTR_L2D_CACHE_ALLOCATE 0 x0020
#define ARMV8_PMUV3_PERFCTR_BR_RETIRED 0 x0021
#define ARMV8_PMUV3_PERFCTR_BR_MIS_PRED_RETIRED 0 x0022
#define ARMV8_PMUV3_PERFCTR_STALL_FRONTEND 0 x0023
#define ARMV8_PMUV3_PERFCTR_STALL_BACKEND 0 x0024
#define ARMV8_PMUV3_PERFCTR_L1D_TLB 0 x0025
#define ARMV8_PMUV3_PERFCTR_L1I_TLB 0 x0026
#define ARMV8_PMUV3_PERFCTR_L2I_CACHE 0 x0027
#define ARMV8_PMUV3_PERFCTR_L2I_CACHE_REFILL 0 x0028
#define ARMV8_PMUV3_PERFCTR_L3D_CACHE_ALLOCATE 0 x0029
#define ARMV8_PMUV3_PERFCTR_L3D_CACHE_REFILL 0 x002A
#define ARMV8_PMUV3_PERFCTR_L3D_CACHE 0 x002B
#define ARMV8_PMUV3_PERFCTR_L3D_CACHE_WB 0 x002C
#define ARMV8_PMUV3_PERFCTR_L2D_TLB_REFILL 0 x002D
#define ARMV8_PMUV3_PERFCTR_L2I_TLB_REFILL 0 x002E
#define ARMV8_PMUV3_PERFCTR_L2D_TLB 0 x002F
#define ARMV8_PMUV3_PERFCTR_L2I_TLB 0 x0030
#define ARMV8_PMUV3_PERFCTR_REMOTE_ACCESS 0 x0031
#define ARMV8_PMUV3_PERFCTR_LL_CACHE 0 x0032
#define ARMV8_PMUV3_PERFCTR_LL_CACHE_MISS 0 x0033
#define ARMV8_PMUV3_PERFCTR_DTLB_WALK 0 x0034
#define ARMV8_PMUV3_PERFCTR_ITLB_WALK 0 x0035
#define ARMV8_PMUV3_PERFCTR_LL_CACHE_RD 0 x0036
#define ARMV8_PMUV3_PERFCTR_LL_CACHE_MISS_RD 0 x0037
#define ARMV8_PMUV3_PERFCTR_REMOTE_ACCESS_RD 0 x0038
#define ARMV8_PMUV3_PERFCTR_L1D_CACHE_LMISS_RD 0 x0039
#define ARMV8_PMUV3_PERFCTR_OP_RETIRED 0 x003A
#define ARMV8_PMUV3_PERFCTR_OP_SPEC 0 x003B
#define ARMV8_PMUV3_PERFCTR_STALL 0 x003C
#define ARMV8_PMUV3_PERFCTR_STALL_SLOT_BACKEND 0 x003D
#define ARMV8_PMUV3_PERFCTR_STALL_SLOT_FRONTEND 0 x003E
#define ARMV8_PMUV3_PERFCTR_STALL_SLOT 0 x003F
/* Statistical profiling extension microarchitectural events */
#define ARMV8_SPE_PERFCTR_SAMPLE_POP 0 x4000
#define ARMV8_SPE_PERFCTR_SAMPLE_FEED 0 x4001
#define ARMV8_SPE_PERFCTR_SAMPLE_FILTRATE 0 x4002
#define ARMV8_SPE_PERFCTR_SAMPLE_COLLISION 0 x4003
/* AMUv1 architecture events */
#define ARMV8_AMU_PERFCTR_CNT_CYCLES 0 x4004
#define ARMV8_AMU_PERFCTR_STALL_BACKEND_MEM 0 x4005
/* long-latency read miss events */
#define ARMV8_PMUV3_PERFCTR_L1I_CACHE_LMISS 0 x4006
#define ARMV8_PMUV3_PERFCTR_L2D_CACHE_LMISS_RD 0 x4009
#define ARMV8_PMUV3_PERFCTR_L2I_CACHE_LMISS 0 x400A
#define ARMV8_PMUV3_PERFCTR_L3D_CACHE_LMISS_RD 0 x400B
/* Trace buffer events */
#define ARMV8_PMUV3_PERFCTR_TRB_WRAP 0 x400C
#define ARMV8_PMUV3_PERFCTR_TRB_TRIG 0 x400E
/* Trace unit events */
#define ARMV8_PMUV3_PERFCTR_TRCEXTOUT0 0 x4010
#define ARMV8_PMUV3_PERFCTR_TRCEXTOUT1 0 x4011
#define ARMV8_PMUV3_PERFCTR_TRCEXTOUT2 0 x4012
#define ARMV8_PMUV3_PERFCTR_TRCEXTOUT3 0 x4013
#define ARMV8_PMUV3_PERFCTR_CTI_TRIGOUT4 0 x4018
#define ARMV8_PMUV3_PERFCTR_CTI_TRIGOUT5 0 x4019
#define ARMV8_PMUV3_PERFCTR_CTI_TRIGOUT6 0 x401A
#define ARMV8_PMUV3_PERFCTR_CTI_TRIGOUT7 0 x401B
/* additional latency from alignment events */
#define ARMV8_PMUV3_PERFCTR_LDST_ALIGN_LAT 0 x4020
#define ARMV8_PMUV3_PERFCTR_LD_ALIGN_LAT 0 x4021
#define ARMV8_PMUV3_PERFCTR_ST_ALIGN_LAT 0 x4022
/* Armv8.5 Memory Tagging Extension events */
#define ARMV8_MTE_PERFCTR_MEM_ACCESS_CHECKED 0 x4024
#define ARMV8_MTE_PERFCTR_MEM_ACCESS_CHECKED_RD 0 x4025
#define ARMV8_MTE_PERFCTR_MEM_ACCESS_CHECKED_WR 0 x4026
/* ARMv8 recommended implementation defined event types */
#define ARMV8_IMPDEF_PERFCTR_L1D_CACHE_RD 0 x0040
#define ARMV8_IMPDEF_PERFCTR_L1D_CACHE_WR 0 x0041
#define ARMV8_IMPDEF_PERFCTR_L1D_CACHE_REFILL_RD 0 x0042
#define ARMV8_IMPDEF_PERFCTR_L1D_CACHE_REFILL_WR 0 x0043
#define ARMV8_IMPDEF_PERFCTR_L1D_CACHE_REFILL_INNER 0 x0044
#define ARMV8_IMPDEF_PERFCTR_L1D_CACHE_REFILL_OUTER 0 x0045
#define ARMV8_IMPDEF_PERFCTR_L1D_CACHE_WB_VICTIM 0 x0046
#define ARMV8_IMPDEF_PERFCTR_L1D_CACHE_WB_CLEAN 0 x0047
#define ARMV8_IMPDEF_PERFCTR_L1D_CACHE_INVAL 0 x0048
#define ARMV8_IMPDEF_PERFCTR_L1D_TLB_REFILL_RD 0 x004C
#define ARMV8_IMPDEF_PERFCTR_L1D_TLB_REFILL_WR 0 x004D
#define ARMV8_IMPDEF_PERFCTR_L1D_TLB_RD 0 x004E
#define ARMV8_IMPDEF_PERFCTR_L1D_TLB_WR 0 x004F
#define ARMV8_IMPDEF_PERFCTR_L2D_CACHE_RD 0 x0050
#define ARMV8_IMPDEF_PERFCTR_L2D_CACHE_WR 0 x0051
#define ARMV8_IMPDEF_PERFCTR_L2D_CACHE_REFILL_RD 0 x0052
#define ARMV8_IMPDEF_PERFCTR_L2D_CACHE_REFILL_WR 0 x0053
#define ARMV8_IMPDEF_PERFCTR_L2D_CACHE_WB_VICTIM 0 x0056
#define ARMV8_IMPDEF_PERFCTR_L2D_CACHE_WB_CLEAN 0 x0057
#define ARMV8_IMPDEF_PERFCTR_L2D_CACHE_INVAL 0 x0058
#define ARMV8_IMPDEF_PERFCTR_L2D_TLB_REFILL_RD 0 x005C
#define ARMV8_IMPDEF_PERFCTR_L2D_TLB_REFILL_WR 0 x005D
#define ARMV8_IMPDEF_PERFCTR_L2D_TLB_RD 0 x005E
#define ARMV8_IMPDEF_PERFCTR_L2D_TLB_WR 0 x005F
#define ARMV8_IMPDEF_PERFCTR_BUS_ACCESS_RD 0 x0060
#define ARMV8_IMPDEF_PERFCTR_BUS_ACCESS_WR 0 x0061
#define ARMV8_IMPDEF_PERFCTR_BUS_ACCESS_SHARED 0 x0062
#define ARMV8_IMPDEF_PERFCTR_BUS_ACCESS_NOT_SHARED 0 x0063
#define ARMV8_IMPDEF_PERFCTR_BUS_ACCESS_NORMAL 0 x0064
#define ARMV8_IMPDEF_PERFCTR_BUS_ACCESS_PERIPH 0 x0065
#define ARMV8_IMPDEF_PERFCTR_MEM_ACCESS_RD 0 x0066
#define ARMV8_IMPDEF_PERFCTR_MEM_ACCESS_WR 0 x0067
#define ARMV8_IMPDEF_PERFCTR_UNALIGNED_LD_SPEC 0 x0068
#define ARMV8_IMPDEF_PERFCTR_UNALIGNED_ST_SPEC 0 x0069
#define ARMV8_IMPDEF_PERFCTR_UNALIGNED_LDST_SPEC 0 x006A
#define ARMV8_IMPDEF_PERFCTR_LDREX_SPEC 0 x006C
#define ARMV8_IMPDEF_PERFCTR_STREX_PASS_SPEC 0 x006D
#define ARMV8_IMPDEF_PERFCTR_STREX_FAIL_SPEC 0 x006E
#define ARMV8_IMPDEF_PERFCTR_STREX_SPEC 0 x006F
#define ARMV8_IMPDEF_PERFCTR_LD_SPEC 0 x0070
#define ARMV8_IMPDEF_PERFCTR_ST_SPEC 0 x0071
#define ARMV8_IMPDEF_PERFCTR_LDST_SPEC 0 x0072
#define ARMV8_IMPDEF_PERFCTR_DP_SPEC 0 x0073
#define ARMV8_IMPDEF_PERFCTR_ASE_SPEC 0 x0074
#define ARMV8_IMPDEF_PERFCTR_VFP_SPEC 0 x0075
#define ARMV8_IMPDEF_PERFCTR_PC_WRITE_SPEC 0 x0076
#define ARMV8_IMPDEF_PERFCTR_CRYPTO_SPEC 0 x0077
#define ARMV8_IMPDEF_PERFCTR_BR_IMMED_SPEC 0 x0078
#define ARMV8_IMPDEF_PERFCTR_BR_RETURN_SPEC 0 x0079
#define ARMV8_IMPDEF_PERFCTR_BR_INDIRECT_SPEC 0 x007A
#define ARMV8_IMPDEF_PERFCTR_ISB_SPEC 0 x007C
#define ARMV8_IMPDEF_PERFCTR_DSB_SPEC 0 x007D
#define ARMV8_IMPDEF_PERFCTR_DMB_SPEC 0 x007E
#define ARMV8_IMPDEF_PERFCTR_EXC_UNDEF 0 x0081
#define ARMV8_IMPDEF_PERFCTR_EXC_SVC 0 x0082
#define ARMV8_IMPDEF_PERFCTR_EXC_PABORT 0 x0083
#define ARMV8_IMPDEF_PERFCTR_EXC_DABORT 0 x0084
#define ARMV8_IMPDEF_PERFCTR_EXC_IRQ 0 x0086
#define ARMV8_IMPDEF_PERFCTR_EXC_FIQ 0 x0087
#define ARMV8_IMPDEF_PERFCTR_EXC_SMC 0 x0088
#define ARMV8_IMPDEF_PERFCTR_EXC_HVC 0 x008A
#define ARMV8_IMPDEF_PERFCTR_EXC_TRAP_PABORT 0 x008B
#define ARMV8_IMPDEF_PERFCTR_EXC_TRAP_DABORT 0 x008C
#define ARMV8_IMPDEF_PERFCTR_EXC_TRAP_OTHER 0 x008D
#define ARMV8_IMPDEF_PERFCTR_EXC_TRAP_IRQ 0 x008E
#define ARMV8_IMPDEF_PERFCTR_EXC_TRAP_FIQ 0 x008F
#define ARMV8_IMPDEF_PERFCTR_RC_LD_SPEC 0 x0090
#define ARMV8_IMPDEF_PERFCTR_RC_ST_SPEC 0 x0091
#define ARMV8_IMPDEF_PERFCTR_L3D_CACHE_RD 0 x00A0
#define ARMV8_IMPDEF_PERFCTR_L3D_CACHE_WR 0 x00A1
#define ARMV8_IMPDEF_PERFCTR_L3D_CACHE_REFILL_RD 0 x00A2
#define ARMV8_IMPDEF_PERFCTR_L3D_CACHE_REFILL_WR 0 x00A3
#define ARMV8_IMPDEF_PERFCTR_L3D_CACHE_WB_VICTIM 0 x00A6
#define ARMV8_IMPDEF_PERFCTR_L3D_CACHE_WB_CLEAN 0 x00A7
#define ARMV8_IMPDEF_PERFCTR_L3D_CACHE_INVAL 0 x00A8
/*
* Per-CPU PMCR: config reg
*/
#define ARMV8_PMU_PMCR_E (1 << 0 ) /* Enable all counters */
#define ARMV8_PMU_PMCR_P (1 << 1 ) /* Reset all counters */
#define ARMV8_PMU_PMCR_C (1 << 2 ) /* Cycle counter reset */
#define ARMV8_PMU_PMCR_D (1 << 3 ) /* CCNT counts every 64th cpu cycle */
#define ARMV8_PMU_PMCR_X (1 << 4 ) /* Export to ETM */
#define ARMV8_PMU_PMCR_DP (1 << 5 ) /* Disable CCNT if non-invasive debug*/
#define ARMV8_PMU_PMCR_LC (1 << 6 ) /* Overflow on 64 bit cycle counter */
#define ARMV8_PMU_PMCR_LP (1 << 7 ) /* Long event counter enable */
#define ARMV8_PMU_PMCR_N GENMASK(15 , 11 ) /* Number of counters supported */
/* Mask for writable bits */
#define ARMV8_PMU_PMCR_MASK (ARMV8_PMU_PMCR_E | ARMV8_PMU_PMCR_P | \
ARMV8_PMU_PMCR_C | ARMV8_PMU_PMCR_D | \
ARMV8_PMU_PMCR_X | ARMV8_PMU_PMCR_DP | \
ARMV8_PMU_PMCR_LC | ARMV8_PMU_PMCR_LP)
/*
* PMOVSR: counters overflow flag status reg
*/
#define ARMV8_PMU_OVSR_P GENMASK(30 , 0 )
#define ARMV8_PMU_OVSR_C BIT(31 )
#define ARMV8_PMU_OVSR_F BIT_ULL(32 ) /* arm64 only */
/* Mask for writable bits is both P and C fields */
#define ARMV8_PMU_OVERFLOWED_MASK (ARMV8_PMU_OVSR_P | ARMV8_PMU_OVSR_C | \
ARMV8_PMU_OVSR_F)
/*
* PMXEVTYPER: Event selection reg
*/
#define ARMV8_PMU_EVTYPE_EVENT GENMASK(15 , 0 ) /* Mask for EVENT bits */
#define ARMV8_PMU_EVTYPE_TH GENMASK_ULL(43 , 32 ) /* arm64 only */
#define ARMV8_PMU_EVTYPE_TC GENMASK_ULL(63 , 61 ) /* arm64 only */
/*
* Event filters for PMUv3
*/
#define ARMV8_PMU_EXCLUDE_EL1 (1 U << 31 )
#define ARMV8_PMU_EXCLUDE_EL0 (1 U << 30 )
#define ARMV8_PMU_EXCLUDE_NS_EL1 (1 U << 29 )
#define ARMV8_PMU_EXCLUDE_NS_EL0 (1 U << 28 )
#define ARMV8_PMU_INCLUDE_EL2 (1 U << 27 )
#define ARMV8_PMU_EXCLUDE_EL3 (1 U << 26 )
/*
* PMUSERENR: user enable reg
*/
#define ARMV8_PMU_USERENR_EN (1 << 0 ) /* PMU regs can be accessed at EL0 */
#define ARMV8_PMU_USERENR_SW (1 << 1 ) /* PMSWINC can be written at EL0 */
#define ARMV8_PMU_USERENR_CR (1 << 2 ) /* Cycle counter can be read at EL0 */
#define ARMV8_PMU_USERENR_ER (1 << 3 ) /* Event counter can be read at EL0 */
#define ARMV8_PMU_USERENR_UEN (1 << 4 ) /* Fine grained per counter access at EL0 */
/* Mask for writable bits */
#define ARMV8_PMU_USERENR_MASK (ARMV8_PMU_USERENR_EN | ARMV8_PMU_USERENR_SW | \
ARMV8_PMU_USERENR_CR | ARMV8_PMU_USERENR_ER)
/* PMMIR_EL1.SLOTS mask */
#define ARMV8_PMU_SLOTS GENMASK(7 , 0 )
#define ARMV8_PMU_BUS_SLOTS GENMASK(15 , 8 )
#define ARMV8_PMU_BUS_WIDTH GENMASK(19 , 16 )
#define ARMV8_PMU_THWIDTH GENMASK(23 , 20 )
/*
* This code is really good
*/
#define PMEVN_CASE(n, case_macro) \
case n: case_macro(n); break
#define PMEVN_SWITCH(x, case_macro) \
do { \
switch (x) { \
PMEVN_CASE(0 , case_macro); \
PMEVN_CASE(1 , case_macro); \
PMEVN_CASE(2 , case_macro); \
PMEVN_CASE(3 , case_macro); \
PMEVN_CASE(4 , case_macro); \
PMEVN_CASE(5 , case_macro); \
PMEVN_CASE(6 , case_macro); \
PMEVN_CASE(7 , case_macro); \
PMEVN_CASE(8 , case_macro); \
PMEVN_CASE(9 , case_macro); \
PMEVN_CASE(10 , case_macro); \
PMEVN_CASE(11 , case_macro); \
PMEVN_CASE(12 , case_macro); \
PMEVN_CASE(13 , case_macro); \
PMEVN_CASE(14 , case_macro); \
PMEVN_CASE(15 , case_macro); \
PMEVN_CASE(16 , case_macro); \
PMEVN_CASE(17 , case_macro); \
PMEVN_CASE(18 , case_macro); \
PMEVN_CASE(19 , case_macro); \
PMEVN_CASE(20 , case_macro); \
PMEVN_CASE(21 , case_macro); \
PMEVN_CASE(22 , case_macro); \
PMEVN_CASE(23 , case_macro); \
PMEVN_CASE(24 , case_macro); \
PMEVN_CASE(25 , case_macro); \
PMEVN_CASE(26 , case_macro); \
PMEVN_CASE(27 , case_macro); \
PMEVN_CASE(28 , case_macro); \
PMEVN_CASE(29 , case_macro); \
PMEVN_CASE(30 , case_macro); \
default : WARN(1 , "Invalid PMEV* index\n" ); \
} \
} while (0 )
#include <asm /arm_pmuv3.h>
#endif
Messung V0.5 in Prozent C=96 H=96 G=95
¤ Dauer der Verarbeitung: 0.10 Sekunden
(vorverarbeitet am 2026-06-07)
¤
*© Formatika GbR, Deutschland