18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */ 28c2ecf20Sopenharmony_ci/* 38c2ecf20Sopenharmony_ci * Copyright (C) 2012 ARM Ltd. 48c2ecf20Sopenharmony_ci */ 58c2ecf20Sopenharmony_ci 68c2ecf20Sopenharmony_ci#ifndef __ASM_PERF_EVENT_H 78c2ecf20Sopenharmony_ci#define __ASM_PERF_EVENT_H 88c2ecf20Sopenharmony_ci 98c2ecf20Sopenharmony_ci#include <asm/stack_pointer.h> 108c2ecf20Sopenharmony_ci#include <asm/ptrace.h> 118c2ecf20Sopenharmony_ci 128c2ecf20Sopenharmony_ci#define ARMV8_PMU_MAX_COUNTERS 32 138c2ecf20Sopenharmony_ci#define ARMV8_PMU_COUNTER_MASK (ARMV8_PMU_MAX_COUNTERS - 1) 148c2ecf20Sopenharmony_ci 158c2ecf20Sopenharmony_ci/* 168c2ecf20Sopenharmony_ci * Common architectural and microarchitectural event numbers. 178c2ecf20Sopenharmony_ci */ 188c2ecf20Sopenharmony_ci#define ARMV8_PMUV3_PERFCTR_SW_INCR 0x00 198c2ecf20Sopenharmony_ci#define ARMV8_PMUV3_PERFCTR_L1I_CACHE_REFILL 0x01 208c2ecf20Sopenharmony_ci#define ARMV8_PMUV3_PERFCTR_L1I_TLB_REFILL 0x02 218c2ecf20Sopenharmony_ci#define ARMV8_PMUV3_PERFCTR_L1D_CACHE_REFILL 0x03 228c2ecf20Sopenharmony_ci#define ARMV8_PMUV3_PERFCTR_L1D_CACHE 0x04 238c2ecf20Sopenharmony_ci#define ARMV8_PMUV3_PERFCTR_L1D_TLB_REFILL 0x05 248c2ecf20Sopenharmony_ci#define ARMV8_PMUV3_PERFCTR_LD_RETIRED 0x06 258c2ecf20Sopenharmony_ci#define ARMV8_PMUV3_PERFCTR_ST_RETIRED 0x07 268c2ecf20Sopenharmony_ci#define ARMV8_PMUV3_PERFCTR_INST_RETIRED 0x08 278c2ecf20Sopenharmony_ci#define ARMV8_PMUV3_PERFCTR_EXC_TAKEN 0x09 288c2ecf20Sopenharmony_ci#define ARMV8_PMUV3_PERFCTR_EXC_RETURN 0x0A 298c2ecf20Sopenharmony_ci#define ARMV8_PMUV3_PERFCTR_CID_WRITE_RETIRED 0x0B 308c2ecf20Sopenharmony_ci#define ARMV8_PMUV3_PERFCTR_PC_WRITE_RETIRED 0x0C 318c2ecf20Sopenharmony_ci#define ARMV8_PMUV3_PERFCTR_BR_IMMED_RETIRED 0x0D 328c2ecf20Sopenharmony_ci#define ARMV8_PMUV3_PERFCTR_BR_RETURN_RETIRED 0x0E 338c2ecf20Sopenharmony_ci#define ARMV8_PMUV3_PERFCTR_UNALIGNED_LDST_RETIRED 0x0F 348c2ecf20Sopenharmony_ci#define ARMV8_PMUV3_PERFCTR_BR_MIS_PRED 0x10 358c2ecf20Sopenharmony_ci#define ARMV8_PMUV3_PERFCTR_CPU_CYCLES 0x11 368c2ecf20Sopenharmony_ci#define ARMV8_PMUV3_PERFCTR_BR_PRED 0x12 378c2ecf20Sopenharmony_ci#define ARMV8_PMUV3_PERFCTR_MEM_ACCESS 0x13 388c2ecf20Sopenharmony_ci#define ARMV8_PMUV3_PERFCTR_L1I_CACHE 0x14 398c2ecf20Sopenharmony_ci#define ARMV8_PMUV3_PERFCTR_L1D_CACHE_WB 0x15 408c2ecf20Sopenharmony_ci#define ARMV8_PMUV3_PERFCTR_L2D_CACHE 0x16 418c2ecf20Sopenharmony_ci#define ARMV8_PMUV3_PERFCTR_L2D_CACHE_REFILL 0x17 428c2ecf20Sopenharmony_ci#define ARMV8_PMUV3_PERFCTR_L2D_CACHE_WB 0x18 438c2ecf20Sopenharmony_ci#define ARMV8_PMUV3_PERFCTR_BUS_ACCESS 0x19 448c2ecf20Sopenharmony_ci#define ARMV8_PMUV3_PERFCTR_MEMORY_ERROR 0x1A 458c2ecf20Sopenharmony_ci#define ARMV8_PMUV3_PERFCTR_INST_SPEC 0x1B 468c2ecf20Sopenharmony_ci#define ARMV8_PMUV3_PERFCTR_TTBR_WRITE_RETIRED 0x1C 478c2ecf20Sopenharmony_ci#define ARMV8_PMUV3_PERFCTR_BUS_CYCLES 0x1D 488c2ecf20Sopenharmony_ci#define ARMV8_PMUV3_PERFCTR_CHAIN 0x1E 498c2ecf20Sopenharmony_ci#define ARMV8_PMUV3_PERFCTR_L1D_CACHE_ALLOCATE 0x1F 508c2ecf20Sopenharmony_ci#define ARMV8_PMUV3_PERFCTR_L2D_CACHE_ALLOCATE 0x20 518c2ecf20Sopenharmony_ci#define ARMV8_PMUV3_PERFCTR_BR_RETIRED 0x21 528c2ecf20Sopenharmony_ci#define ARMV8_PMUV3_PERFCTR_BR_MIS_PRED_RETIRED 0x22 538c2ecf20Sopenharmony_ci#define ARMV8_PMUV3_PERFCTR_STALL_FRONTEND 0x23 548c2ecf20Sopenharmony_ci#define ARMV8_PMUV3_PERFCTR_STALL_BACKEND 0x24 558c2ecf20Sopenharmony_ci#define ARMV8_PMUV3_PERFCTR_L1D_TLB 0x25 568c2ecf20Sopenharmony_ci#define ARMV8_PMUV3_PERFCTR_L1I_TLB 0x26 578c2ecf20Sopenharmony_ci#define ARMV8_PMUV3_PERFCTR_L2I_CACHE 0x27 588c2ecf20Sopenharmony_ci#define ARMV8_PMUV3_PERFCTR_L2I_CACHE_REFILL 0x28 598c2ecf20Sopenharmony_ci#define ARMV8_PMUV3_PERFCTR_L3D_CACHE_ALLOCATE 0x29 608c2ecf20Sopenharmony_ci#define ARMV8_PMUV3_PERFCTR_L3D_CACHE_REFILL 0x2A 618c2ecf20Sopenharmony_ci#define ARMV8_PMUV3_PERFCTR_L3D_CACHE 0x2B 628c2ecf20Sopenharmony_ci#define ARMV8_PMUV3_PERFCTR_L3D_CACHE_WB 0x2C 638c2ecf20Sopenharmony_ci#define ARMV8_PMUV3_PERFCTR_L2D_TLB_REFILL 0x2D 648c2ecf20Sopenharmony_ci#define ARMV8_PMUV3_PERFCTR_L2I_TLB_REFILL 0x2E 658c2ecf20Sopenharmony_ci#define ARMV8_PMUV3_PERFCTR_L2D_TLB 0x2F 668c2ecf20Sopenharmony_ci#define ARMV8_PMUV3_PERFCTR_L2I_TLB 0x30 678c2ecf20Sopenharmony_ci#define ARMV8_PMUV3_PERFCTR_REMOTE_ACCESS 0x31 688c2ecf20Sopenharmony_ci#define ARMV8_PMUV3_PERFCTR_LL_CACHE 0x32 698c2ecf20Sopenharmony_ci#define ARMV8_PMUV3_PERFCTR_LL_CACHE_MISS 0x33 708c2ecf20Sopenharmony_ci#define ARMV8_PMUV3_PERFCTR_DTLB_WALK 0x34 718c2ecf20Sopenharmony_ci#define ARMV8_PMUV3_PERFCTR_ITLB_WALK 0x35 728c2ecf20Sopenharmony_ci#define ARMV8_PMUV3_PERFCTR_LL_CACHE_RD 0x36 738c2ecf20Sopenharmony_ci#define ARMV8_PMUV3_PERFCTR_LL_CACHE_MISS_RD 0x37 748c2ecf20Sopenharmony_ci#define ARMV8_PMUV3_PERFCTR_REMOTE_ACCESS_RD 0x38 758c2ecf20Sopenharmony_ci#define ARMV8_PMUV3_PERFCTR_L1D_CACHE_LMISS_RD 0x39 768c2ecf20Sopenharmony_ci#define ARMV8_PMUV3_PERFCTR_OP_RETIRED 0x3A 778c2ecf20Sopenharmony_ci#define ARMV8_PMUV3_PERFCTR_OP_SPEC 0x3B 788c2ecf20Sopenharmony_ci#define ARMV8_PMUV3_PERFCTR_STALL 0x3C 798c2ecf20Sopenharmony_ci#define ARMV8_PMUV3_PERFCTR_STALL_SLOT_BACKEND 0x3D 808c2ecf20Sopenharmony_ci#define ARMV8_PMUV3_PERFCTR_STALL_SLOT_FRONTEND 0x3E 818c2ecf20Sopenharmony_ci#define ARMV8_PMUV3_PERFCTR_STALL_SLOT 0x3F 828c2ecf20Sopenharmony_ci 838c2ecf20Sopenharmony_ci/* Statistical profiling extension microarchitectural events */ 848c2ecf20Sopenharmony_ci#define ARMV8_SPE_PERFCTR_SAMPLE_POP 0x4000 858c2ecf20Sopenharmony_ci#define ARMV8_SPE_PERFCTR_SAMPLE_FEED 0x4001 868c2ecf20Sopenharmony_ci#define ARMV8_SPE_PERFCTR_SAMPLE_FILTRATE 0x4002 878c2ecf20Sopenharmony_ci#define ARMV8_SPE_PERFCTR_SAMPLE_COLLISION 0x4003 888c2ecf20Sopenharmony_ci 898c2ecf20Sopenharmony_ci/* AMUv1 architecture events */ 908c2ecf20Sopenharmony_ci#define ARMV8_AMU_PERFCTR_CNT_CYCLES 0x4004 918c2ecf20Sopenharmony_ci#define ARMV8_AMU_PERFCTR_STALL_BACKEND_MEM 0x4005 928c2ecf20Sopenharmony_ci 938c2ecf20Sopenharmony_ci/* long-latency read miss events */ 948c2ecf20Sopenharmony_ci#define ARMV8_PMUV3_PERFCTR_L1I_CACHE_LMISS 0x4006 958c2ecf20Sopenharmony_ci#define ARMV8_PMUV3_PERFCTR_L2D_CACHE_LMISS_RD 0x4009 968c2ecf20Sopenharmony_ci#define ARMV8_PMUV3_PERFCTR_L2I_CACHE_LMISS 0x400A 978c2ecf20Sopenharmony_ci#define ARMV8_PMUV3_PERFCTR_L3D_CACHE_LMISS_RD 0x400B 988c2ecf20Sopenharmony_ci 998c2ecf20Sopenharmony_ci/* additional latency from alignment events */ 1008c2ecf20Sopenharmony_ci#define ARMV8_PMUV3_PERFCTR_LDST_ALIGN_LAT 0x4020 1018c2ecf20Sopenharmony_ci#define ARMV8_PMUV3_PERFCTR_LD_ALIGN_LAT 0x4021 1028c2ecf20Sopenharmony_ci#define ARMV8_PMUV3_PERFCTR_ST_ALIGN_LAT 0x4022 1038c2ecf20Sopenharmony_ci 1048c2ecf20Sopenharmony_ci/* Armv8.5 Memory Tagging Extension events */ 1058c2ecf20Sopenharmony_ci#define ARMV8_MTE_PERFCTR_MEM_ACCESS_CHECKED 0x4024 1068c2ecf20Sopenharmony_ci#define ARMV8_MTE_PERFCTR_MEM_ACCESS_CHECKED_RD 0x4025 1078c2ecf20Sopenharmony_ci#define ARMV8_MTE_PERFCTR_MEM_ACCESS_CHECKED_WR 0x4026 1088c2ecf20Sopenharmony_ci 1098c2ecf20Sopenharmony_ci/* ARMv8 recommended implementation defined event types */ 1108c2ecf20Sopenharmony_ci#define ARMV8_IMPDEF_PERFCTR_L1D_CACHE_RD 0x40 1118c2ecf20Sopenharmony_ci#define ARMV8_IMPDEF_PERFCTR_L1D_CACHE_WR 0x41 1128c2ecf20Sopenharmony_ci#define ARMV8_IMPDEF_PERFCTR_L1D_CACHE_REFILL_RD 0x42 1138c2ecf20Sopenharmony_ci#define ARMV8_IMPDEF_PERFCTR_L1D_CACHE_REFILL_WR 0x43 1148c2ecf20Sopenharmony_ci#define ARMV8_IMPDEF_PERFCTR_L1D_CACHE_REFILL_INNER 0x44 1158c2ecf20Sopenharmony_ci#define ARMV8_IMPDEF_PERFCTR_L1D_CACHE_REFILL_OUTER 0x45 1168c2ecf20Sopenharmony_ci#define ARMV8_IMPDEF_PERFCTR_L1D_CACHE_WB_VICTIM 0x46 1178c2ecf20Sopenharmony_ci#define ARMV8_IMPDEF_PERFCTR_L1D_CACHE_WB_CLEAN 0x47 1188c2ecf20Sopenharmony_ci#define ARMV8_IMPDEF_PERFCTR_L1D_CACHE_INVAL 0x48 1198c2ecf20Sopenharmony_ci 1208c2ecf20Sopenharmony_ci#define ARMV8_IMPDEF_PERFCTR_L1D_TLB_REFILL_RD 0x4C 1218c2ecf20Sopenharmony_ci#define ARMV8_IMPDEF_PERFCTR_L1D_TLB_REFILL_WR 0x4D 1228c2ecf20Sopenharmony_ci#define ARMV8_IMPDEF_PERFCTR_L1D_TLB_RD 0x4E 1238c2ecf20Sopenharmony_ci#define ARMV8_IMPDEF_PERFCTR_L1D_TLB_WR 0x4F 1248c2ecf20Sopenharmony_ci#define ARMV8_IMPDEF_PERFCTR_L2D_CACHE_RD 0x50 1258c2ecf20Sopenharmony_ci#define ARMV8_IMPDEF_PERFCTR_L2D_CACHE_WR 0x51 1268c2ecf20Sopenharmony_ci#define ARMV8_IMPDEF_PERFCTR_L2D_CACHE_REFILL_RD 0x52 1278c2ecf20Sopenharmony_ci#define ARMV8_IMPDEF_PERFCTR_L2D_CACHE_REFILL_WR 0x53 1288c2ecf20Sopenharmony_ci 1298c2ecf20Sopenharmony_ci#define ARMV8_IMPDEF_PERFCTR_L2D_CACHE_WB_VICTIM 0x56 1308c2ecf20Sopenharmony_ci#define ARMV8_IMPDEF_PERFCTR_L2D_CACHE_WB_CLEAN 0x57 1318c2ecf20Sopenharmony_ci#define ARMV8_IMPDEF_PERFCTR_L2D_CACHE_INVAL 0x58 1328c2ecf20Sopenharmony_ci 1338c2ecf20Sopenharmony_ci#define ARMV8_IMPDEF_PERFCTR_L2D_TLB_REFILL_RD 0x5C 1348c2ecf20Sopenharmony_ci#define ARMV8_IMPDEF_PERFCTR_L2D_TLB_REFILL_WR 0x5D 1358c2ecf20Sopenharmony_ci#define ARMV8_IMPDEF_PERFCTR_L2D_TLB_RD 0x5E 1368c2ecf20Sopenharmony_ci#define ARMV8_IMPDEF_PERFCTR_L2D_TLB_WR 0x5F 1378c2ecf20Sopenharmony_ci#define ARMV8_IMPDEF_PERFCTR_BUS_ACCESS_RD 0x60 1388c2ecf20Sopenharmony_ci#define ARMV8_IMPDEF_PERFCTR_BUS_ACCESS_WR 0x61 1398c2ecf20Sopenharmony_ci#define ARMV8_IMPDEF_PERFCTR_BUS_ACCESS_SHARED 0x62 1408c2ecf20Sopenharmony_ci#define ARMV8_IMPDEF_PERFCTR_BUS_ACCESS_NOT_SHARED 0x63 1418c2ecf20Sopenharmony_ci#define ARMV8_IMPDEF_PERFCTR_BUS_ACCESS_NORMAL 0x64 1428c2ecf20Sopenharmony_ci#define ARMV8_IMPDEF_PERFCTR_BUS_ACCESS_PERIPH 0x65 1438c2ecf20Sopenharmony_ci#define ARMV8_IMPDEF_PERFCTR_MEM_ACCESS_RD 0x66 1448c2ecf20Sopenharmony_ci#define ARMV8_IMPDEF_PERFCTR_MEM_ACCESS_WR 0x67 1458c2ecf20Sopenharmony_ci#define ARMV8_IMPDEF_PERFCTR_UNALIGNED_LD_SPEC 0x68 1468c2ecf20Sopenharmony_ci#define ARMV8_IMPDEF_PERFCTR_UNALIGNED_ST_SPEC 0x69 1478c2ecf20Sopenharmony_ci#define ARMV8_IMPDEF_PERFCTR_UNALIGNED_LDST_SPEC 0x6A 1488c2ecf20Sopenharmony_ci 1498c2ecf20Sopenharmony_ci#define ARMV8_IMPDEF_PERFCTR_LDREX_SPEC 0x6C 1508c2ecf20Sopenharmony_ci#define ARMV8_IMPDEF_PERFCTR_STREX_PASS_SPEC 0x6D 1518c2ecf20Sopenharmony_ci#define ARMV8_IMPDEF_PERFCTR_STREX_FAIL_SPEC 0x6E 1528c2ecf20Sopenharmony_ci#define ARMV8_IMPDEF_PERFCTR_STREX_SPEC 0x6F 1538c2ecf20Sopenharmony_ci#define ARMV8_IMPDEF_PERFCTR_LD_SPEC 0x70 1548c2ecf20Sopenharmony_ci#define ARMV8_IMPDEF_PERFCTR_ST_SPEC 0x71 1558c2ecf20Sopenharmony_ci#define ARMV8_IMPDEF_PERFCTR_LDST_SPEC 0x72 1568c2ecf20Sopenharmony_ci#define ARMV8_IMPDEF_PERFCTR_DP_SPEC 0x73 1578c2ecf20Sopenharmony_ci#define ARMV8_IMPDEF_PERFCTR_ASE_SPEC 0x74 1588c2ecf20Sopenharmony_ci#define ARMV8_IMPDEF_PERFCTR_VFP_SPEC 0x75 1598c2ecf20Sopenharmony_ci#define ARMV8_IMPDEF_PERFCTR_PC_WRITE_SPEC 0x76 1608c2ecf20Sopenharmony_ci#define ARMV8_IMPDEF_PERFCTR_CRYPTO_SPEC 0x77 1618c2ecf20Sopenharmony_ci#define ARMV8_IMPDEF_PERFCTR_BR_IMMED_SPEC 0x78 1628c2ecf20Sopenharmony_ci#define ARMV8_IMPDEF_PERFCTR_BR_RETURN_SPEC 0x79 1638c2ecf20Sopenharmony_ci#define ARMV8_IMPDEF_PERFCTR_BR_INDIRECT_SPEC 0x7A 1648c2ecf20Sopenharmony_ci 1658c2ecf20Sopenharmony_ci#define ARMV8_IMPDEF_PERFCTR_ISB_SPEC 0x7C 1668c2ecf20Sopenharmony_ci#define ARMV8_IMPDEF_PERFCTR_DSB_SPEC 0x7D 1678c2ecf20Sopenharmony_ci#define ARMV8_IMPDEF_PERFCTR_DMB_SPEC 0x7E 1688c2ecf20Sopenharmony_ci 1698c2ecf20Sopenharmony_ci#define ARMV8_IMPDEF_PERFCTR_EXC_UNDEF 0x81 1708c2ecf20Sopenharmony_ci#define ARMV8_IMPDEF_PERFCTR_EXC_SVC 0x82 1718c2ecf20Sopenharmony_ci#define ARMV8_IMPDEF_PERFCTR_EXC_PABORT 0x83 1728c2ecf20Sopenharmony_ci#define ARMV8_IMPDEF_PERFCTR_EXC_DABORT 0x84 1738c2ecf20Sopenharmony_ci 1748c2ecf20Sopenharmony_ci#define ARMV8_IMPDEF_PERFCTR_EXC_IRQ 0x86 1758c2ecf20Sopenharmony_ci#define ARMV8_IMPDEF_PERFCTR_EXC_FIQ 0x87 1768c2ecf20Sopenharmony_ci#define ARMV8_IMPDEF_PERFCTR_EXC_SMC 0x88 1778c2ecf20Sopenharmony_ci 1788c2ecf20Sopenharmony_ci#define ARMV8_IMPDEF_PERFCTR_EXC_HVC 0x8A 1798c2ecf20Sopenharmony_ci#define ARMV8_IMPDEF_PERFCTR_EXC_TRAP_PABORT 0x8B 1808c2ecf20Sopenharmony_ci#define ARMV8_IMPDEF_PERFCTR_EXC_TRAP_DABORT 0x8C 1818c2ecf20Sopenharmony_ci#define ARMV8_IMPDEF_PERFCTR_EXC_TRAP_OTHER 0x8D 1828c2ecf20Sopenharmony_ci#define ARMV8_IMPDEF_PERFCTR_EXC_TRAP_IRQ 0x8E 1838c2ecf20Sopenharmony_ci#define ARMV8_IMPDEF_PERFCTR_EXC_TRAP_FIQ 0x8F 1848c2ecf20Sopenharmony_ci#define ARMV8_IMPDEF_PERFCTR_RC_LD_SPEC 0x90 1858c2ecf20Sopenharmony_ci#define ARMV8_IMPDEF_PERFCTR_RC_ST_SPEC 0x91 1868c2ecf20Sopenharmony_ci 1878c2ecf20Sopenharmony_ci#define ARMV8_IMPDEF_PERFCTR_L3D_CACHE_RD 0xA0 1888c2ecf20Sopenharmony_ci#define ARMV8_IMPDEF_PERFCTR_L3D_CACHE_WR 0xA1 1898c2ecf20Sopenharmony_ci#define ARMV8_IMPDEF_PERFCTR_L3D_CACHE_REFILL_RD 0xA2 1908c2ecf20Sopenharmony_ci#define ARMV8_IMPDEF_PERFCTR_L3D_CACHE_REFILL_WR 0xA3 1918c2ecf20Sopenharmony_ci 1928c2ecf20Sopenharmony_ci#define ARMV8_IMPDEF_PERFCTR_L3D_CACHE_WB_VICTIM 0xA6 1938c2ecf20Sopenharmony_ci#define ARMV8_IMPDEF_PERFCTR_L3D_CACHE_WB_CLEAN 0xA7 1948c2ecf20Sopenharmony_ci#define ARMV8_IMPDEF_PERFCTR_L3D_CACHE_INVAL 0xA8 1958c2ecf20Sopenharmony_ci 1968c2ecf20Sopenharmony_ci/* 1978c2ecf20Sopenharmony_ci * Per-CPU PMCR: config reg 1988c2ecf20Sopenharmony_ci */ 1998c2ecf20Sopenharmony_ci#define ARMV8_PMU_PMCR_E (1 << 0) /* Enable all counters */ 2008c2ecf20Sopenharmony_ci#define ARMV8_PMU_PMCR_P (1 << 1) /* Reset all counters */ 2018c2ecf20Sopenharmony_ci#define ARMV8_PMU_PMCR_C (1 << 2) /* Cycle counter reset */ 2028c2ecf20Sopenharmony_ci#define ARMV8_PMU_PMCR_D (1 << 3) /* CCNT counts every 64th cpu cycle */ 2038c2ecf20Sopenharmony_ci#define ARMV8_PMU_PMCR_X (1 << 4) /* Export to ETM */ 2048c2ecf20Sopenharmony_ci#define ARMV8_PMU_PMCR_DP (1 << 5) /* Disable CCNT if non-invasive debug*/ 2058c2ecf20Sopenharmony_ci#define ARMV8_PMU_PMCR_LC (1 << 6) /* Overflow on 64 bit cycle counter */ 2068c2ecf20Sopenharmony_ci#define ARMV8_PMU_PMCR_LP (1 << 7) /* Long event counter enable */ 2078c2ecf20Sopenharmony_ci#define ARMV8_PMU_PMCR_N_SHIFT 11 /* Number of counters supported */ 2088c2ecf20Sopenharmony_ci#define ARMV8_PMU_PMCR_N_MASK 0x1f 2098c2ecf20Sopenharmony_ci#define ARMV8_PMU_PMCR_MASK 0xff /* Mask for writable bits */ 2108c2ecf20Sopenharmony_ci 2118c2ecf20Sopenharmony_ci/* 2128c2ecf20Sopenharmony_ci * PMOVSR: counters overflow flag status reg 2138c2ecf20Sopenharmony_ci */ 2148c2ecf20Sopenharmony_ci#define ARMV8_PMU_OVSR_MASK 0xffffffff /* Mask for writable bits */ 2158c2ecf20Sopenharmony_ci#define ARMV8_PMU_OVERFLOWED_MASK ARMV8_PMU_OVSR_MASK 2168c2ecf20Sopenharmony_ci 2178c2ecf20Sopenharmony_ci/* 2188c2ecf20Sopenharmony_ci * PMXEVTYPER: Event selection reg 2198c2ecf20Sopenharmony_ci */ 2208c2ecf20Sopenharmony_ci#define ARMV8_PMU_EVTYPE_MASK 0xc800ffff /* Mask for writable bits */ 2218c2ecf20Sopenharmony_ci#define ARMV8_PMU_EVTYPE_EVENT 0xffff /* Mask for EVENT bits */ 2228c2ecf20Sopenharmony_ci 2238c2ecf20Sopenharmony_ci/* 2248c2ecf20Sopenharmony_ci * Event filters for PMUv3 2258c2ecf20Sopenharmony_ci */ 2268c2ecf20Sopenharmony_ci#define ARMV8_PMU_EXCLUDE_EL1 (1U << 31) 2278c2ecf20Sopenharmony_ci#define ARMV8_PMU_EXCLUDE_EL0 (1U << 30) 2288c2ecf20Sopenharmony_ci#define ARMV8_PMU_INCLUDE_EL2 (1U << 27) 2298c2ecf20Sopenharmony_ci 2308c2ecf20Sopenharmony_ci/* 2318c2ecf20Sopenharmony_ci * PMUSERENR: user enable reg 2328c2ecf20Sopenharmony_ci */ 2338c2ecf20Sopenharmony_ci#define ARMV8_PMU_USERENR_MASK 0xf /* Mask for writable bits */ 2348c2ecf20Sopenharmony_ci#define ARMV8_PMU_USERENR_EN (1 << 0) /* PMU regs can be accessed at EL0 */ 2358c2ecf20Sopenharmony_ci#define ARMV8_PMU_USERENR_SW (1 << 1) /* PMSWINC can be written at EL0 */ 2368c2ecf20Sopenharmony_ci#define ARMV8_PMU_USERENR_CR (1 << 2) /* Cycle counter can be read at EL0 */ 2378c2ecf20Sopenharmony_ci#define ARMV8_PMU_USERENR_ER (1 << 3) /* Event counter can be read at EL0 */ 2388c2ecf20Sopenharmony_ci 2398c2ecf20Sopenharmony_ci/* PMMIR_EL1.SLOTS mask */ 2408c2ecf20Sopenharmony_ci#define ARMV8_PMU_SLOTS_MASK 0xff 2418c2ecf20Sopenharmony_ci 2428c2ecf20Sopenharmony_ci#ifdef CONFIG_PERF_EVENTS 2438c2ecf20Sopenharmony_cistruct pt_regs; 2448c2ecf20Sopenharmony_ciextern unsigned long perf_instruction_pointer(struct pt_regs *regs); 2458c2ecf20Sopenharmony_ciextern unsigned long perf_misc_flags(struct pt_regs *regs); 2468c2ecf20Sopenharmony_ci#define perf_misc_flags(regs) perf_misc_flags(regs) 2478c2ecf20Sopenharmony_ci#define perf_arch_bpf_user_pt_regs(regs) ®s->user_regs 2488c2ecf20Sopenharmony_ci#endif 2498c2ecf20Sopenharmony_ci 2508c2ecf20Sopenharmony_ci#define perf_arch_fetch_caller_regs(regs, __ip) { \ 2518c2ecf20Sopenharmony_ci (regs)->pc = (__ip); \ 2528c2ecf20Sopenharmony_ci (regs)->regs[29] = (unsigned long) __builtin_frame_address(0); \ 2538c2ecf20Sopenharmony_ci (regs)->sp = current_stack_pointer; \ 2548c2ecf20Sopenharmony_ci (regs)->pstate = PSR_MODE_EL1h; \ 2558c2ecf20Sopenharmony_ci} 2568c2ecf20Sopenharmony_ci 2578c2ecf20Sopenharmony_ci#endif 258