5#define SNRT_NUM_PERF_CNTS \
6 (sizeof(((perf_regs_t){}).perf_cnt) / sizeof(((perf_regs_t){}).perf_cnt[0]))
15typedef snitch_cluster_peripheral_reg__perf_regs_t perf_regs_t;
22inline volatile perf_regs_t* snrt_perf_counters() {
23 return (
volatile perf_regs_t*)snrt_cluster_perf_counters_addr();
33inline void snrt_cfg_perf_counter(uint32_t perf_cnt, uint16_t metric,
35 snrt_perf_counters()->perf_cnt_sel[perf_cnt].f.hart = hart;
36 snrt_perf_counters()->perf_cnt_sel[perf_cnt].f.metric = metric;
44inline void snrt_start_perf_counter(uint32_t perf_cnt) {
45 snrt_perf_counters()->perf_cnt_en[perf_cnt].f.enable = 0x1;
53inline void snrt_stop_perf_counter(uint32_t perf_cnt) {
54 snrt_perf_counters()->perf_cnt_en[perf_cnt].f.enable = 0x0;
62inline void snrt_reset_perf_counter(uint32_t perf_cnt) {
63 snrt_perf_counters()->perf_cnt[perf_cnt].f.perf_counter = 0x0;
73inline uint32_t snrt_get_perf_counter(uint32_t perf_cnt) {
74 return snrt_perf_counters()->perf_cnt[perf_cnt].f.perf_counter;