File Index
Files and directories
Sign in
FILE

misc.h

File preview with syntax highlighting.

linux-6.19.14/tools/testing/selftests/powerpc/pmu/sampling_tests/misc.h C
  1/* SPDX-License-Identifier: GPL-2.0-only */
  2/*
  3 * Copyright 2022, Athira Rajeev, IBM Corp.
  4 * Copyright 2022, Madhavan Srinivasan, IBM Corp.
  5 * Copyright 2022, Kajol Jain, IBM Corp.
  6 */
  7
  8#include <sys/stat.h>
  9#include "../event.h"
 10
 11#define POWER11 0x82
 12#define POWER10 0x80
 13#define POWER9  0x4e
 14#define PERF_POWER9_MASK        0x7f8ffffffffffff
 15#define PERF_POWER10_MASK       0x7ffffffffffffff
 16#define PERF_POWER11_MASK       PERF_POWER10_MASK
 17
 18#define MMCR0_FC56      0x00000010UL /* freeze counters 5 and 6 */
 19#define MMCR0_PMCCEXT   0x00000200UL /* PMCCEXT control */
 20#define MMCR1_RSQ       0x200000000000ULL /* radix scope qual field */
 21#define BHRB_DISABLE    0x2000000000ULL /* MMCRA BHRB DISABLE bit */
 22
 23extern int ev_mask_pmcxsel, ev_shift_pmcxsel;
 24extern int ev_mask_marked, ev_shift_marked;
 25extern int ev_mask_comb, ev_shift_comb;
 26extern int ev_mask_unit, ev_shift_unit;
 27extern int ev_mask_pmc, ev_shift_pmc;
 28extern int ev_mask_cache, ev_shift_cache;
 29extern int ev_mask_sample, ev_shift_sample;
 30extern int ev_mask_thd_sel, ev_shift_thd_sel;
 31extern int ev_mask_thd_start, ev_shift_thd_start;
 32extern int ev_mask_thd_stop, ev_shift_thd_stop;
 33extern int ev_mask_thd_cmp, ev_shift_thd_cmp;
 34extern int ev_mask_sm, ev_shift_sm;
 35extern int ev_mask_rsq, ev_shift_rsq;
 36extern int ev_mask_l2l3, ev_shift_l2l3;
 37extern int ev_mask_mmcr3_src, ev_shift_mmcr3_src;
 38extern int pvr;
 39extern u64 platform_extended_mask;
 40extern int check_pvr_for_sampling_tests(void);
 41extern int platform_check_for_tests(void);
 42extern int check_extended_regs_support(void);
 43extern u64 perf_get_platform_reg_mask(void);
 44
 45/*
 46 * Event code field extraction macro.
 47 * Raw event code is combination of multiple
 48 * fields. Macro to extract individual fields
 49 *
 50 * x - Raw event code value
 51 * y - Field to extract
 52 */
 53#define EV_CODE_EXTRACT(x, y)   \
 54	((x >> ev_shift_##y) & ev_mask_##y)
 55
 56void *event_sample_buf_mmap(int fd, int mmap_pages);
 57void *__event_read_samples(void *sample_buff, size_t *size, u64 *sample_count);
 58int collect_samples(void *sample_buff);
 59u64 *get_intr_regs(struct event *event, void *sample_buff);
 60u64 get_reg_value(u64 *intr_regs, char *register_name);
 61int get_thresh_cmp_val(struct event event);
 62bool check_for_generic_compat_pmu(void);
 63bool check_for_compat_mode(void);
 64
 65static inline int get_mmcr0_fc56(u64 mmcr0, int pmc)
 66{
 67	return (mmcr0 & MMCR0_FC56);
 68}
 69
 70static inline int get_mmcr0_pmccext(u64 mmcr0, int pmc)
 71{
 72	return (mmcr0 & MMCR0_PMCCEXT);
 73}
 74
 75static inline int get_mmcr0_pmao(u64 mmcr0, int pmc)
 76{
 77	return ((mmcr0 >> 7) & 0x1);
 78}
 79
 80static inline int get_mmcr0_cc56run(u64 mmcr0, int pmc)
 81{
 82	return ((mmcr0 >> 8) & 0x1);
 83}
 84
 85static inline int get_mmcr0_pmcjce(u64 mmcr0, int pmc)
 86{
 87	return ((mmcr0 >> 14) & 0x1);
 88}
 89
 90static inline int get_mmcr0_pmc1ce(u64 mmcr0, int pmc)
 91{
 92	return ((mmcr0 >> 15) & 0x1);
 93}
 94
 95static inline int get_mmcr0_pmae(u64 mmcr0, int pmc)
 96{
 97	return ((mmcr0 >> 27) & 0x1);
 98}
 99
100static inline int get_mmcr1_pmcxsel(u64 mmcr1, int pmc)
101{
102	return ((mmcr1 >> ((24 - (((pmc) - 1) * 8))) & 0xff));
103}
104
105static inline int get_mmcr1_unit(u64 mmcr1, int pmc)
106{
107	return ((mmcr1 >> ((60 - (4 * ((pmc) - 1))))) & 0xf);
108}
109
110static inline int get_mmcr1_comb(u64 mmcr1, int pmc)
111{
112	return ((mmcr1 >> (38 - ((pmc - 1) * 2))) & 0x3);
113}
114
115static inline int get_mmcr1_cache(u64 mmcr1, int pmc)
116{
117	return ((mmcr1 >> 46) & 0x3);
118}
119
120static inline int get_mmcr1_rsq(u64 mmcr1, int pmc)
121{
122	return mmcr1 & MMCR1_RSQ;
123}
124
125static inline int get_mmcr2_fcs(u64 mmcr2, int pmc)
126{
127	return ((mmcr2 & (1ull << (63 - (((pmc) - 1) * 9)))) >> (63 - (((pmc) - 1) * 9)));
128}
129
130static inline int get_mmcr2_fcp(u64 mmcr2, int pmc)
131{
132	return ((mmcr2 & (1ull << (62 - (((pmc) - 1) * 9)))) >> (62 - (((pmc) - 1) * 9)));
133}
134
135static inline int get_mmcr2_fcpc(u64 mmcr2, int pmc)
136{
137	return ((mmcr2 & (1ull << (61 - (((pmc) - 1) * 9)))) >> (61 - (((pmc) - 1) * 9)));
138}
139
140static inline int get_mmcr2_fcm1(u64 mmcr2, int pmc)
141{
142	return ((mmcr2 & (1ull << (60 - (((pmc) - 1) * 9)))) >> (60 - (((pmc) - 1) * 9)));
143}
144
145static inline int get_mmcr2_fcm0(u64 mmcr2, int pmc)
146{
147	return ((mmcr2 & (1ull << (59 - (((pmc) - 1) * 9)))) >> (59 - (((pmc) - 1) * 9)));
148}
149
150static inline int get_mmcr2_fcwait(u64 mmcr2, int pmc)
151{
152	return ((mmcr2 & (1ull << (58 - (((pmc) - 1) * 9)))) >> (58 - (((pmc) - 1) * 9)));
153}
154
155static inline int get_mmcr2_fch(u64 mmcr2, int pmc)
156{
157	return ((mmcr2 & (1ull << (57 - (((pmc) - 1) * 9)))) >> (57 - (((pmc) - 1) * 9)));
158}
159
160static inline int get_mmcr2_fcti(u64 mmcr2, int pmc)
161{
162	return ((mmcr2 & (1ull << (56 - (((pmc) - 1) * 9)))) >> (56 - (((pmc) - 1) * 9)));
163}
164
165static inline int get_mmcr2_fcta(u64 mmcr2, int pmc)
166{
167	return ((mmcr2 & (1ull << (55 - (((pmc) - 1) * 9)))) >> (55 - (((pmc) - 1) * 9)));
168}
169
170static inline int get_mmcr2_l2l3(u64 mmcr2, int pmc)
171{
172	if (have_hwcap2(PPC_FEATURE2_ARCH_3_1))
173		return ((mmcr2 & 0xf8) >> 3);
174	return 0;
175}
176
177static inline int get_mmcr3_src(u64 mmcr3, int pmc)
178{
179	if (!have_hwcap2(PPC_FEATURE2_ARCH_3_1))
180		return 0;
181	return ((mmcr3 >> ((49 - (15 * ((pmc) - 1))))) & 0x7fff);
182}
183
184static inline int get_mmcra_thd_cmp(u64 mmcra, int pmc)
185{
186	if (have_hwcap2(PPC_FEATURE2_ARCH_3_1))
187		return ((mmcra >> 45) & 0x7ff);
188	return ((mmcra >> 45) & 0x3ff);
189}
190
191static inline int get_mmcra_sm(u64 mmcra, int pmc)
192{
193	return ((mmcra >> 42) & 0x3);
194}
195
196static inline u64 get_mmcra_bhrb_disable(u64 mmcra, int pmc)
197{
198	if (have_hwcap2(PPC_FEATURE2_ARCH_3_1))
199		return mmcra & BHRB_DISABLE;
200	return 0;
201}
202
203static inline int get_mmcra_ifm(u64 mmcra, int pmc)
204{
205	return ((mmcra >> 30) & 0x3);
206}
207
208static inline int get_mmcra_thd_sel(u64 mmcra, int pmc)
209{
210	return ((mmcra >> 16) & 0x7);
211}
212
213static inline int get_mmcra_thd_start(u64 mmcra, int pmc)
214{
215	return ((mmcra >> 12) & 0xf);
216}
217
218static inline int get_mmcra_thd_stop(u64 mmcra, int pmc)
219{
220	return ((mmcra >> 8) & 0xf);
221}
222
223static inline int get_mmcra_rand_samp_elig(u64 mmcra, int pmc)
224{
225	return ((mmcra >> 4) & 0x7);
226}
227
228static inline int get_mmcra_sample_mode(u64 mmcra, int pmc)
229{
230	return ((mmcra >> 1) & 0x3);
231}
232
233static inline int get_mmcra_marked(u64 mmcra, int pmc)
234{
235	return mmcra & 0x1;
236}
~/ Read-only file preview.