Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at v5.0 85 lines 2.2 kB view raw
1/* SPDX-License-Identifier: GPL-2.0 */ 2/* 3 * Copyright (C) 2018 SiFive 4 * Copyright (C) 2018 Andes Technology Corporation 5 * 6 */ 7 8#ifndef _ASM_RISCV_PERF_EVENT_H 9#define _ASM_RISCV_PERF_EVENT_H 10 11#include <linux/perf_event.h> 12#include <linux/ptrace.h> 13#include <linux/interrupt.h> 14 15#define RISCV_BASE_COUNTERS 2 16 17/* 18 * The RISCV_MAX_COUNTERS parameter should be specified. 19 */ 20 21#ifdef CONFIG_RISCV_BASE_PMU 22#define RISCV_MAX_COUNTERS 2 23#endif 24 25#ifndef RISCV_MAX_COUNTERS 26#error "Please provide a valid RISCV_MAX_COUNTERS for the PMU." 27#endif 28 29/* 30 * These are the indexes of bits in counteren register *minus* 1, 31 * except for cycle. It would be coherent if it can directly mapped 32 * to counteren bit definition, but there is a *time* register at 33 * counteren[1]. Per-cpu structure is scarce resource here. 34 * 35 * According to the spec, an implementation can support counter up to 36 * mhpmcounter31, but many high-end processors has at most 6 general 37 * PMCs, we give the definition to MHPMCOUNTER8 here. 38 */ 39#define RISCV_PMU_CYCLE 0 40#define RISCV_PMU_INSTRET 1 41#define RISCV_PMU_MHPMCOUNTER3 2 42#define RISCV_PMU_MHPMCOUNTER4 3 43#define RISCV_PMU_MHPMCOUNTER5 4 44#define RISCV_PMU_MHPMCOUNTER6 5 45#define RISCV_PMU_MHPMCOUNTER7 6 46#define RISCV_PMU_MHPMCOUNTER8 7 47 48#define RISCV_OP_UNSUPP (-EOPNOTSUPP) 49 50struct cpu_hw_events { 51 /* # currently enabled events*/ 52 int n_events; 53 /* currently enabled events */ 54 struct perf_event *events[RISCV_MAX_COUNTERS]; 55 /* vendor-defined PMU data */ 56 void *platform; 57}; 58 59struct riscv_pmu { 60 struct pmu *pmu; 61 62 /* generic hw/cache events table */ 63 const int *hw_events; 64 const int (*cache_events)[PERF_COUNT_HW_CACHE_MAX] 65 [PERF_COUNT_HW_CACHE_OP_MAX] 66 [PERF_COUNT_HW_CACHE_RESULT_MAX]; 67 /* method used to map hw/cache events */ 68 int (*map_hw_event)(u64 config); 69 int (*map_cache_event)(u64 config); 70 71 /* max generic hw events in map */ 72 int max_events; 73 /* number total counters, 2(base) + x(general) */ 74 int num_counters; 75 /* the width of the counter */ 76 int counter_width; 77 78 /* vendor-defined PMU features */ 79 void *platform; 80 81 irqreturn_t (*handle_irq)(int irq_num, void *dev); 82 int irq; 83}; 84 85#endif /* _ASM_RISCV_PERF_EVENT_H */