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