Hi Leo,
The CTI PM code was initially set up before the CTI was a helper device.
If the core bound CTIs, which are helpers to the core bound ETMs, are disabled as part of the path disable helpers, then I think the CTI specific PM code might be redundant.
If it is not, then should this not hook into the generic PM code in coresight-core.c?
Regards
Mike
On Mon, 15 Sept 2025 at 11:34, Leo Yan leo.yan@arm.com wrote:
The PM notifier needs to access the driver data, so it is only safe to register PM notifier after data initialization.
For this reason, move cti_pm_setup() to a later point, specifically after 'drvdata->csdev' has been set up.
Signed-off-by: Leo Yan leo.yan@arm.com
drivers/hwtracing/coresight/coresight-cti-core.c | 22 +++++++++------------- 1 file changed, 9 insertions(+), 13 deletions(-)
diff --git a/drivers/hwtracing/coresight/coresight-cti-core.c b/drivers/hwtracing/coresight/coresight-cti-core.c index ba4635dfc2e30b4e9ae4972f91bdc6647975b719..b2ddbe12be8d6140a3098797d6d1cc4393259b3a 100644 --- a/drivers/hwtracing/coresight/coresight-cti-core.c +++ b/drivers/hwtracing/coresight/coresight-cti-core.c @@ -926,17 +926,12 @@ static int cti_probe(struct amba_device *adev, const struct amba_id *id) if (!cti_desc.name) return -ENOMEM;
/* setup CPU power management handling for CPU bound CTI devices. */
ret = cti_pm_setup(drvdata);
if (ret)
return ret;
/* create dynamic attributes for connections */ ret = cti_create_cons_sysfs(dev, drvdata); if (ret) { dev_err(dev, "%s: create dynamic sysfs entries failed\n", cti_desc.name);
goto pm_release;
return ret; } /* set up coresight component description */
@@ -950,9 +945,14 @@ static int cti_probe(struct amba_device *adev, const struct amba_id *id)
coresight_clear_self_claim_tag(&cti_desc.access); drvdata->csdev = coresight_register(&cti_desc);
if (IS_ERR(drvdata->csdev)) {
ret = PTR_ERR(drvdata->csdev);
goto pm_release;
if (IS_ERR(drvdata->csdev))
return PTR_ERR(drvdata->csdev);
/* setup CPU power management handling for CPU bound CTI devices. */
ret = cti_pm_setup(drvdata);
if (ret) {
coresight_unregister(drvdata->csdev);
return ret; } /* add to list of CTI devices */
@@ -970,10 +970,6 @@ static int cti_probe(struct amba_device *adev, const struct amba_id *id) pm_runtime_put(&adev->dev); dev_info(&drvdata->csdev->dev, "CTI initialized\n"); return 0;
-pm_release:
cti_pm_release(drvdata);
return ret;
}
static struct amba_cs_uci_id uci_id_cti[] = {
-- 2.34.1