[PATCH v3 08/31] coresight: etm4x: Remove the state_needs_restore flag

Mike Leach mike.leach at linaro.org
Tue Sep 30 08:58:50 PDT 2025


On Mon, 15 Sept 2025 at 11:33, Leo Yan <leo.yan at arm.com> wrote:
>
> When the restore flow is invoked, it means no error occurred during the
> save phase. Otherwise, if any errors happened while saving the context,
> the function would return an error and abort the suspend sequence.
>
> Therefore, the state_needs_restore flag is unnecessary. The save and
> restore functions are changed to check two conditions:
>
> 1) The global flag pm_save_enable is SELF_HOSTED mode;
> 2) The device is in active mode (non DISABLED).
>
> Reviewed-by: Yeoreum Yun <yeoreum.yun at arm.com>
> Signed-off-by: Leo Yan <leo.yan at arm.com>
> ---
>  drivers/hwtracing/coresight/coresight-etm4x-core.c | 14 ++++++++------
>  drivers/hwtracing/coresight/coresight-etm4x.h      |  2 --
>  2 files changed, 8 insertions(+), 8 deletions(-)
>
> diff --git a/drivers/hwtracing/coresight/coresight-etm4x-core.c b/drivers/hwtracing/coresight/coresight-etm4x-core.c
> index 2d2ef58393db10d058b3e29c5b270dd2d62e1a49..fbcd0fcd1992cd600d2eb8c95ae9a5adf0c287da 100644
> --- a/drivers/hwtracing/coresight/coresight-etm4x-core.c
> +++ b/drivers/hwtracing/coresight/coresight-etm4x-core.c
> @@ -1986,8 +1986,6 @@ static int __etm4_cpu_save(struct etmv4_drvdata *drvdata)
>                 goto out;
>         }
>
> -       drvdata->state_needs_restore = true;
> -
>         /*
>          * Power can be removed from the trace unit now. We do this to
>          * potentially save power on systems that respect the TRCPDCR_PU
> @@ -2005,11 +2003,14 @@ static int etm4_cpu_save(struct etmv4_drvdata *drvdata)
>  {
>         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) && drvdata->save_state)
> +       if (coresight_get_mode(drvdata->csdev))
>                 ret = __etm4_cpu_save(drvdata);
>         return ret;
>  }
> @@ -2099,8 +2100,6 @@ static void __etm4_cpu_restore(struct etmv4_drvdata *drvdata)
>         if (!drvdata->skip_power_up)
>                 etm4x_relaxed_write32(csa, state->trcpdcr, TRCPDCR);
>
> -       drvdata->state_needs_restore = false;
> -
>         /*
>          * As recommended by section 4.3.7 ("Synchronization when using the
>          * memory-mapped interface") of ARM IHI 0064D
> @@ -2126,7 +2125,10 @@ static void __etm4_cpu_restore(struct etmv4_drvdata *drvdata)
>
>  static void etm4_cpu_restore(struct etmv4_drvdata *drvdata)
>  {
> -       if (drvdata->state_needs_restore)
> +       if (pm_save_enable != PARAM_PM_SAVE_SELF_HOSTED)
> +               return;
> +
> +       if (coresight_get_mode(drvdata->csdev))
>                 __etm4_cpu_restore(drvdata);
>  }
>
> diff --git a/drivers/hwtracing/coresight/coresight-etm4x.h b/drivers/hwtracing/coresight/coresight-etm4x.h
> index b8796b4271025f6aba79fe3cd6e4d17d0b56952d..012c52fd19338133129752d35523dc102df24604 100644
> --- a/drivers/hwtracing/coresight/coresight-etm4x.h
> +++ b/drivers/hwtracing/coresight/coresight-etm4x.h
> @@ -980,7 +980,6 @@ struct etmv4_save_state {
>   *             in EL2. Otherwise, 0.
>   * @config:    structure holding configuration parameters.
>   * @save_state:        State to be preserved across power loss
> - * @state_needs_restore: True when there is context to restore after PM exit
>   * @skip_power_up: Indicates if an implementation can skip powering up
>   *                the trace unit.
>   * @paused:    Indicates if the trace unit is paused.
> @@ -1036,7 +1035,6 @@ struct etmv4_drvdata {
>         u64                             trfcr;
>         struct etmv4_config             config;
>         struct etmv4_save_state         *save_state;
> -       bool                            state_needs_restore;
>         bool                            skip_power_up;
>         bool                            paused;
>         DECLARE_BITMAP(arch_features, ETM4_IMPDEF_FEATURE_MAX);
>
> --
> 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