162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 262306a36Sopenharmony_ci 362306a36Sopenharmony_ci/* 462306a36Sopenharmony_ci * PERFCFGOFF_REG, PERFFRZOFF_REG 562306a36Sopenharmony_ci * PERFOVFOFF_REG, PERFCNTROFF_REG 662306a36Sopenharmony_ci */ 762306a36Sopenharmony_ci#define IOMMU_PMU_NUM_OFF_REGS 4 862306a36Sopenharmony_ci#define IOMMU_PMU_OFF_REGS_STEP 4 962306a36Sopenharmony_ci 1062306a36Sopenharmony_ci#define IOMMU_PMU_FILTER_REQUESTER_ID 0x01 1162306a36Sopenharmony_ci#define IOMMU_PMU_FILTER_DOMAIN 0x02 1262306a36Sopenharmony_ci#define IOMMU_PMU_FILTER_PASID 0x04 1362306a36Sopenharmony_ci#define IOMMU_PMU_FILTER_ATS 0x08 1462306a36Sopenharmony_ci#define IOMMU_PMU_FILTER_PAGE_TABLE 0x10 1562306a36Sopenharmony_ci 1662306a36Sopenharmony_ci#define IOMMU_PMU_FILTER_EN BIT(31) 1762306a36Sopenharmony_ci 1862306a36Sopenharmony_ci#define IOMMU_PMU_CFG_OFFSET 0x100 1962306a36Sopenharmony_ci#define IOMMU_PMU_CFG_CNTRCAP_OFFSET 0x80 2062306a36Sopenharmony_ci#define IOMMU_PMU_CFG_CNTREVCAP_OFFSET 0x84 2162306a36Sopenharmony_ci#define IOMMU_PMU_CFG_SIZE 0x8 2262306a36Sopenharmony_ci#define IOMMU_PMU_CFG_FILTERS_OFFSET 0x4 2362306a36Sopenharmony_ci 2462306a36Sopenharmony_ci#define IOMMU_PMU_CAP_REGS_STEP 8 2562306a36Sopenharmony_ci 2662306a36Sopenharmony_ci#define iommu_cntrcap_pcc(p) ((p) & 0x1) 2762306a36Sopenharmony_ci#define iommu_cntrcap_cw(p) (((p) >> 8) & 0xff) 2862306a36Sopenharmony_ci#define iommu_cntrcap_ios(p) (((p) >> 16) & 0x1) 2962306a36Sopenharmony_ci#define iommu_cntrcap_egcnt(p) (((p) >> 28) & 0xf) 3062306a36Sopenharmony_ci 3162306a36Sopenharmony_ci#define IOMMU_EVENT_CFG_EGI_SHIFT 8 3262306a36Sopenharmony_ci#define IOMMU_EVENT_CFG_ES_SHIFT 32 3362306a36Sopenharmony_ci#define IOMMU_EVENT_CFG_INT BIT_ULL(1) 3462306a36Sopenharmony_ci 3562306a36Sopenharmony_ci#define iommu_event_select(p) ((p) & 0xfffffff) 3662306a36Sopenharmony_ci#define iommu_event_group(p) (((p) >> 28) & 0xf) 3762306a36Sopenharmony_ci 3862306a36Sopenharmony_ci#ifdef CONFIG_INTEL_IOMMU_PERF_EVENTS 3962306a36Sopenharmony_ciint alloc_iommu_pmu(struct intel_iommu *iommu); 4062306a36Sopenharmony_civoid free_iommu_pmu(struct intel_iommu *iommu); 4162306a36Sopenharmony_civoid iommu_pmu_register(struct intel_iommu *iommu); 4262306a36Sopenharmony_civoid iommu_pmu_unregister(struct intel_iommu *iommu); 4362306a36Sopenharmony_ci#else 4462306a36Sopenharmony_cistatic inline int 4562306a36Sopenharmony_cialloc_iommu_pmu(struct intel_iommu *iommu) 4662306a36Sopenharmony_ci{ 4762306a36Sopenharmony_ci return 0; 4862306a36Sopenharmony_ci} 4962306a36Sopenharmony_ci 5062306a36Sopenharmony_cistatic inline void 5162306a36Sopenharmony_cifree_iommu_pmu(struct intel_iommu *iommu) 5262306a36Sopenharmony_ci{ 5362306a36Sopenharmony_ci} 5462306a36Sopenharmony_ci 5562306a36Sopenharmony_cistatic inline void 5662306a36Sopenharmony_ciiommu_pmu_register(struct intel_iommu *iommu) 5762306a36Sopenharmony_ci{ 5862306a36Sopenharmony_ci} 5962306a36Sopenharmony_ci 6062306a36Sopenharmony_cistatic inline void 6162306a36Sopenharmony_ciiommu_pmu_unregister(struct intel_iommu *iommu) 6262306a36Sopenharmony_ci{ 6362306a36Sopenharmony_ci} 6462306a36Sopenharmony_ci#endif /* CONFIG_INTEL_IOMMU_PERF_EVENTS */ 65