Commit f132076c authored by Mao Han's avatar Mao Han Committed by Guo Ren

csky: Init pmu as a device

This patch change the csky pmu initialization from arch init to
device init. The pmu can be configued with information from
device tree(pmu device name, irq number and etc.).
Signed-off-by: default avatarMao Han <han_mao@c-sky.com>
Signed-off-by: default avatarGuo Ren <guoren@kernel.org>
parent 3158d289
......@@ -949,7 +949,7 @@ static int csky_pmu_add(struct perf_event *event, int flags)
return 0;
}
int __init init_hw_perf_events(void)
int init_hw_perf_events(void)
{
csky_pmu.pmu = (struct pmu) {
.pmu_enable = csky_pmu_enable,
......@@ -1028,4 +1028,50 @@ int __init init_hw_perf_events(void)
return perf_pmu_register(&csky_pmu.pmu, "cpu", PERF_TYPE_RAW);
}
arch_initcall(init_hw_perf_events);
int csky_pmu_device_probe(struct platform_device *pdev,
const struct of_device_id *of_table)
{
int ret;
ret = init_hw_perf_events();
if (ret) {
pr_notice("[perf] failed to probe PMU!\n");
return ret;
}
return ret;
}
const static struct of_device_id csky_pmu_of_device_ids[] = {
{.compatible = "csky,csky-pmu"},
{},
};
static int csky_pmu_dev_probe(struct platform_device *pdev)
{
return csky_pmu_device_probe(pdev, csky_pmu_of_device_ids);
}
static struct platform_driver csky_pmu_driver = {
.driver = {
.name = "csky-pmu",
.of_match_table = csky_pmu_of_device_ids,
},
.probe = csky_pmu_dev_probe,
};
static int __init csky_pmu_probe(void)
{
int ret;
ret = platform_driver_register(&csky_pmu_driver);
if (ret)
pr_notice("[perf] PMU initialization failed\n");
else
pr_notice("[perf] PMU initialization done\n");
return ret;
}
device_initcall(csky_pmu_probe);
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment