16#ifndef ZEPHYR_INCLUDE_ARCH_ARM64_PMUV3_H_
17#define ZEPHYR_INCLUDE_ARCH_ARM64_PMUV3_H_
100#define PMCR_N_SHIFT 11
102#define PMCR_N_MASK 0x1F
104#define PMCR_IDCODE_SHIFT 16
106#define PMCR_IDCODE_MASK 0xFF
108#define PMCR_IMP_SHIFT 24
110#define PMCR_IMP_MASK 0xFF
113#define PMUSERENR_EN BIT(0)
115#define PMUSERENR_SW BIT(1)
117#define PMUSERENR_CR BIT(2)
119#define PMUSERENR_ER BIT(3)
123int arch_pmu_init(
void);
124uint32_t arch_pmu_num_counters(
void);
127void arch_pmu_counter_enable(
uint32_t counter);
128void arch_pmu_counter_disable(
uint32_t counter);
129void arch_pmu_counter_enable_all(
void);
130void arch_pmu_counter_disable_all(
void);
132void arch_pmu_counter_reset(
uint32_t counter);
133void arch_pmu_counter_reset_all(
void);
135void arch_pmu_cycle_reset(
void);
136void arch_pmu_start(
void);
137void arch_pmu_stop(
void);
138bool arch_pmu_counter_overflow(
uint32_t counter);
139void arch_pmu_counter_clear_overflow(
uint32_t counter);
141#define pmu_init arch_pmu_init
142#define pmu_num_counters arch_pmu_num_counters
143#define pmu_get_info arch_pmu_get_info
144#define pmu_counter_config arch_pmu_counter_config
145#define pmu_counter_enable arch_pmu_counter_enable
146#define pmu_counter_disable arch_pmu_counter_disable
147#define pmu_counter_enable_all arch_pmu_counter_enable_all
148#define pmu_counter_disable_all arch_pmu_counter_disable_all
149#define pmu_counter_read arch_pmu_counter_read
150#define pmu_counter_reset arch_pmu_counter_reset
151#define pmu_counter_reset_all arch_pmu_counter_reset_all
152#define pmu_cycle_count arch_pmu_cycle_count
153#define pmu_cycle_reset arch_pmu_cycle_reset
154#define pmu_start arch_pmu_start
155#define pmu_stop arch_pmu_stop
156#define pmu_counter_overflow arch_pmu_counter_overflow
157#define pmu_counter_clear_overflow arch_pmu_counter_clear_overflow
const char * arch_pmu_event_name(uint32_t event)
Human-readable name for event, or "UNKNOWN".
pmu_evt_t
Arm architectural PMU event encoding (PMUv3, 0x00–0x1F).
Definition pmuv3.h:46
@ PMU_EVT_L1I_CACHE_REFILL
L1 instruction cache refill.
Definition pmuv3.h:48
@ PMU_EVT_MEM_ACCESS
Data memory access.
Definition pmuv3.h:59
@ PMU_EVT_TTBR_WRITE_RETIRED
Instruction architecturally executed (TTBR write).
Definition pmuv3.h:68
@ PMU_EVT_EXC_RETURN
Instruction architecturally executed (exception return).
Definition pmuv3.h:55
@ PMU_EVT_SW_INCR
Software increment.
Definition pmuv3.h:47
@ PMU_EVT_INST_SPEC
Instruction speculatively executed.
Definition pmuv3.h:67
@ PMU_EVT_BUS_ACCESS
Bus access.
Definition pmuv3.h:65
@ PMU_EVT_CPU_CYCLES
Cycle.
Definition pmuv3.h:57
@ PMU_EVT_L1D_CACHE
L1 data cache access.
Definition pmuv3.h:51
@ PMU_EVT_L1I_CACHE
L1 instruction cache access.
Definition pmuv3.h:60
@ PMU_EVT_L1D_CACHE_WB
L1 data cache write-back.
Definition pmuv3.h:61
@ PMU_EVT_BR_PRED
Predictable branch.
Definition pmuv3.h:58
@ PMU_EVT_MEMORY_ERROR
Local memory error.
Definition pmuv3.h:66
@ PMU_EVT_L2D_CACHE_WB
L2 data cache write-back.
Definition pmuv3.h:64
@ PMU_EVT_L2D_CACHE_REFILL
L2 data cache refill.
Definition pmuv3.h:63
@ PMU_EVT_L1D_CACHE_REFILL
L1 data cache refill.
Definition pmuv3.h:50
@ PMU_EVT_BUS_CYCLES
Bus cycle.
Definition pmuv3.h:69
@ PMU_EVT_L2D_CACHE
L2 data cache access.
Definition pmuv3.h:62
@ PMU_EVT_EXC_TAKEN
Exception taken.
Definition pmuv3.h:54
@ PMU_EVT_L1I_TLB_REFILL
L1 instruction TLB refill.
Definition pmuv3.h:49
@ PMU_EVT_L1D_TLB_REFILL
L1 data TLB refill.
Definition pmuv3.h:52
@ PMU_EVT_INST_RETIRED
Instruction architecturally executed.
Definition pmuv3.h:53
@ PMU_EVT_BR_MIS_PRED
Mispredicted or not-predicted branch.
Definition pmuv3.h:56
uint32_t arch_pmu_cpu_freq_mhz(void)
Calibrated CPU MHz from pmu_init (PMU cycle counter vs system timer).
__UINT32_TYPE__ uint32_t
Definition stdint.h:90
__UINT64_TYPE__ uint64_t
Definition stdint.h:91
Placeholder pmu_info_t when no arch supplement is present.
Definition pmu.h:28
PMU identification for the current logical CPU (after pmu_init).
Definition pmuv3.h:29
uint32_t implementer
PMU implementer code (Arm PMU identification register encoding).
Definition pmuv3.h:31
uint32_t idcode
PMU part number / ID code (Arm PMU identification register encoding).
Definition pmuv3.h:33