1 // SPDX-License-Identifier: GPL-2.0-only
2 /* Copyright(c) 2023 Huawei. All rights reserved. */
4 #include <linux/device.h>
5 #include <linux/slab.h>
12 static void cxl_pmu_release(struct device *dev)
14 struct cxl_pmu *pmu = to_cxl_pmu(dev);
19 const struct device_type cxl_pmu_type = {
21 .release = cxl_pmu_release,
24 static void remove_dev(void *dev)
29 int devm_cxl_pmu_add(struct device *parent, struct cxl_pmu_regs *regs,
30 int assoc_id, int index, enum cxl_pmu_type type)
36 pmu = kzalloc(sizeof(*pmu), GFP_KERNEL);
40 pmu->assoc_id = assoc_id;
43 pmu->base = regs->pmu;
45 device_initialize(dev);
46 device_set_pm_not_required(dev);
48 dev->bus = &cxl_bus_type;
49 dev->type = &cxl_pmu_type;
52 rc = dev_set_name(dev, "pmu_mem%d.%d", assoc_id, index);
62 return devm_add_action_or_reset(parent, remove_dev, dev);
65 put_device(&pmu->dev);
68 EXPORT_SYMBOL_NS_GPL(devm_cxl_pmu_add, CXL);