Zephyr Project API 4.4.99
A Scalable Open Source RTOS
Loading...
Searching...
No Matches
pmuv3.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2026 Advanced Micro Devices, Inc.
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 */
6
15
16#ifndef ZEPHYR_INCLUDE_ARCH_ARM64_PMUV3_H_
17#define ZEPHYR_INCLUDE_ARCH_ARM64_PMUV3_H_
18
19#include <zephyr/sys/util.h>
20#include <stdint.h>
21
22#ifdef __cplusplus
23extern "C" {
24#endif
25
35
39typedef struct pmu_info pmu_info_t;
40
71
73#define PMCR_E BIT(0)
75#define PMCR_P BIT(1)
77#define PMCR_C BIT(2)
79#define PMCR_D BIT(3)
81#define PMCR_X BIT(4)
83#define PMCR_DP BIT(5)
90#define PMCR_LC BIT(6)
97#define PMCR_LP BIT(7)
98
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
111
113#define PMUSERENR_EN BIT(0)
115#define PMUSERENR_SW BIT(1)
117#define PMUSERENR_CR BIT(2)
119#define PMUSERENR_ER BIT(3)
120
122
123int arch_pmu_init(void);
124uint32_t arch_pmu_num_counters(void);
125void arch_pmu_get_info(pmu_info_t *info);
126int arch_pmu_counter_config(uint32_t counter, pmu_evt_t event);
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);
131uint64_t arch_pmu_counter_read(uint32_t counter);
132void arch_pmu_counter_reset(uint32_t counter);
133void arch_pmu_counter_reset_all(void);
134uint64_t arch_pmu_cycle_count(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);
140
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
158
160
165
168
170const char *arch_pmu_event_name(uint32_t event);
171
173
174#ifdef __cplusplus
175}
176#endif
177
178#endif /* ZEPHYR_INCLUDE_ARCH_ARM64_PMUV3_H_ */
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
Misc utilities.