[PATCH v3 20/31] coresight: cti: Register PM notifier after data initialization

Mike Leach mike.leach at linaro.org
Fri Oct 3 02:38:24 PDT 2025


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 at 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 at 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
>


-- 
Mike Leach
Principal Engineer, ARM Ltd.
Manchester Design Centre. UK



More information about the linux-arm-kernel mailing list