xref: /openbmc/linux/drivers/iommu/intel/perfmon.h (revision a6a5006dad572a53b5df3f47e1471d207ae9ba49)
1*a6a5006dSKan Liang /* SPDX-License-Identifier: GPL-2.0 */
2*a6a5006dSKan Liang 
3*a6a5006dSKan Liang /*
4*a6a5006dSKan Liang  * PERFCFGOFF_REG, PERFFRZOFF_REG
5*a6a5006dSKan Liang  * PERFOVFOFF_REG, PERFCNTROFF_REG
6*a6a5006dSKan Liang  */
7*a6a5006dSKan Liang #define IOMMU_PMU_NUM_OFF_REGS			4
8*a6a5006dSKan Liang #define IOMMU_PMU_OFF_REGS_STEP			4
9*a6a5006dSKan Liang 
10*a6a5006dSKan Liang #define IOMMU_PMU_CFG_OFFSET			0x100
11*a6a5006dSKan Liang #define IOMMU_PMU_CFG_CNTRCAP_OFFSET		0x80
12*a6a5006dSKan Liang #define IOMMU_PMU_CFG_CNTREVCAP_OFFSET		0x84
13*a6a5006dSKan Liang #define IOMMU_PMU_CFG_SIZE			0x8
14*a6a5006dSKan Liang #define IOMMU_PMU_CFG_FILTERS_OFFSET		0x4
15*a6a5006dSKan Liang 
16*a6a5006dSKan Liang #define IOMMU_PMU_CAP_REGS_STEP			8
17*a6a5006dSKan Liang 
18*a6a5006dSKan Liang #define iommu_cntrcap_pcc(p)			((p) & 0x1)
19*a6a5006dSKan Liang #define iommu_cntrcap_cw(p)			(((p) >> 8) & 0xff)
20*a6a5006dSKan Liang #define iommu_cntrcap_ios(p)			(((p) >> 16) & 0x1)
21*a6a5006dSKan Liang #define iommu_cntrcap_egcnt(p)			(((p) >> 28) & 0xf)
22*a6a5006dSKan Liang 
23*a6a5006dSKan Liang #define iommu_event_select(p)			((p) & 0xfffffff)
24*a6a5006dSKan Liang #define iommu_event_group(p)			(((p) >> 28) & 0xf)
25*a6a5006dSKan Liang 
26*a6a5006dSKan Liang #ifdef CONFIG_INTEL_IOMMU_PERF_EVENTS
27*a6a5006dSKan Liang int alloc_iommu_pmu(struct intel_iommu *iommu);
28*a6a5006dSKan Liang void free_iommu_pmu(struct intel_iommu *iommu);
29*a6a5006dSKan Liang #else
30*a6a5006dSKan Liang static inline int
31*a6a5006dSKan Liang alloc_iommu_pmu(struct intel_iommu *iommu)
32*a6a5006dSKan Liang {
33*a6a5006dSKan Liang 	return 0;
34*a6a5006dSKan Liang }
35*a6a5006dSKan Liang 
36*a6a5006dSKan Liang static inline void
37*a6a5006dSKan Liang free_iommu_pmu(struct intel_iommu *iommu)
38*a6a5006dSKan Liang {
39*a6a5006dSKan Liang }
40*a6a5006dSKan Liang #endif /* CONFIG_INTEL_IOMMU_PERF_EVENTS */
41