xref: /openbmc/linux/drivers/cxl/pmu.h (revision 1ad3f701)
1*1ad3f701SJonathan Cameron /* SPDX-License-Identifier: GPL-2.0-only */
2*1ad3f701SJonathan Cameron /*
3*1ad3f701SJonathan Cameron  * Copyright(c) 2023 Huawei
4*1ad3f701SJonathan Cameron  * CXL Specification rev 3.0 Setion 8.2.7 (CPMU Register Interface)
5*1ad3f701SJonathan Cameron  */
6*1ad3f701SJonathan Cameron #ifndef CXL_PMU_H
7*1ad3f701SJonathan Cameron #define CXL_PMU_H
8*1ad3f701SJonathan Cameron #include <linux/device.h>
9*1ad3f701SJonathan Cameron 
10*1ad3f701SJonathan Cameron enum cxl_pmu_type {
11*1ad3f701SJonathan Cameron 	CXL_PMU_MEMDEV,
12*1ad3f701SJonathan Cameron };
13*1ad3f701SJonathan Cameron 
14*1ad3f701SJonathan Cameron #define CXL_PMU_REGMAP_SIZE 0xe00 /* Table 8-32 CXL 3.0 specification */
15*1ad3f701SJonathan Cameron struct cxl_pmu {
16*1ad3f701SJonathan Cameron 	struct device dev;
17*1ad3f701SJonathan Cameron 	void __iomem *base;
18*1ad3f701SJonathan Cameron 	int assoc_id;
19*1ad3f701SJonathan Cameron 	int index;
20*1ad3f701SJonathan Cameron 	enum cxl_pmu_type type;
21*1ad3f701SJonathan Cameron };
22*1ad3f701SJonathan Cameron 
23*1ad3f701SJonathan Cameron #define to_cxl_pmu(dev) container_of(dev, struct cxl_pmu, dev)
24*1ad3f701SJonathan Cameron struct cxl_pmu_regs;
25*1ad3f701SJonathan Cameron int devm_cxl_pmu_add(struct device *parent, struct cxl_pmu_regs *regs,
26*1ad3f701SJonathan Cameron 		     int assoc_id, int idx, enum cxl_pmu_type type);
27*1ad3f701SJonathan Cameron 
28*1ad3f701SJonathan Cameron #endif
29