[PATCH v3 17/31] coresight: etm4x: Remove redundant condition checks in save and restore

Mike Leach mike.leach at linaro.org
Thu Oct 2 05:57:38 PDT 2025


On Mon, 15 Sept 2025 at 11:34, Leo Yan <leo.yan at arm.com> wrote:
>
> Since a dedicated callback is now used to determine whether context save
> and restore operations are needed, performing the same check within the
> save and restore callbacks is redundant.
>
> The save and restore flows currently use two-level functions: the first
> level handles the condition check, while the second level performs the
> low level operations. As the checks are no longer necessary, simplify
> the logic into single-level functions.
>
> Signed-off-by: Leo Yan <leo.yan at arm.com>
> ---
>  drivers/hwtracing/coresight/coresight-etm4x-core.c | 35 ++--------------------
>  1 file changed, 3 insertions(+), 32 deletions(-)
>
> diff --git a/drivers/hwtracing/coresight/coresight-etm4x-core.c b/drivers/hwtracing/coresight/coresight-etm4x-core.c
> index 66aefdb002f075446572df9c4eed9093da19a066..b63433e80d305588c18b084408496690480a7af0 100644
> --- a/drivers/hwtracing/coresight/coresight-etm4x-core.c
> +++ b/drivers/hwtracing/coresight/coresight-etm4x-core.c
> @@ -1854,10 +1854,10 @@ static bool etm4_need_context_save_restore(struct coresight_device *csdev)
>         return false;
>  }
>
> -static int __etm4_cpu_save(struct etmv4_drvdata *drvdata)
> +static int etm4_cpu_save(struct coresight_device *csdev)
>  {
>         int ret = 0;
> -       struct coresight_device *csdev = drvdata->csdev;
> +       struct etmv4_drvdata *drvdata = dev_get_drvdata(csdev->dev.parent);
>         struct csdev_access *csa;
>         struct device *etm_dev;
>
> @@ -1905,40 +1905,11 @@ static int __etm4_cpu_save(struct etmv4_drvdata *drvdata)
>         return ret;
>  }
>
> -static int etm4_cpu_save(struct coresight_device *csdev)
> -{
> -       struct etmv4_drvdata *drvdata = dev_get_drvdata(csdev->dev.parent);
> -       int ret = 0;
> -
> -       if (pm_save_enable != PARAM_PM_SAVE_SELF_HOSTED)
> -               return 0;
> -
> -       /*
> -        * Save and restore the ETM Trace registers only if
> -        * the ETM is active.
> -        */
> -       if (coresight_get_mode(drvdata->csdev))
> -               ret = __etm4_cpu_save(drvdata);
> -       return ret;
> -}
> -
> -static void __etm4_cpu_restore(struct etmv4_drvdata *drvdata)
> -{
> -       if (WARN_ON(!drvdata->csdev))
> -               return;
> -
> -       etm4_enable_hw(drvdata, false);
> -}
> -
>  static void etm4_cpu_restore(struct coresight_device *csdev)
>  {
>         struct etmv4_drvdata *drvdata = dev_get_drvdata(csdev->dev.parent);
>
> -       if (pm_save_enable != PARAM_PM_SAVE_SELF_HOSTED)
> -               return;
> -
> -       if (coresight_get_mode(drvdata->csdev))
> -               __etm4_cpu_restore(drvdata);
> +       etm4_enable_hw(drvdata, false);
>  }
>
>  static const struct coresight_ops_source etm4_source_ops = {
>
> --
> 2.34.1
>

Reviewed-by: Mike Leach <mike.leach at linaro.org>
-- 
Mike Leach
Principal Engineer, ARM Ltd.
Manchester Design Centre. UK



More information about the linux-arm-kernel mailing list