[PATCH v2 08/28] coresight: etm4x: Remove the state_needs_restore flag
Yeoreum Yun
yeoreum.yun at arm.com
Wed Jul 2 04:19:42 PDT 2025
LGTM.
Reviewed-by: Yeoreum Yun <yeoreum.yun at arm.com>
> 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).
>
> 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 6cd76a2527cf11752963a7cb1b3b0e9a8be241f0..1faf8614366f38eea4909152558fe8e69730bde4 100644
> --- a/drivers/hwtracing/coresight/coresight-etm4x-core.c
> +++ b/drivers/hwtracing/coresight/coresight-etm4x-core.c
> @@ -1981,8 +1981,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
> @@ -2000,11 +1998,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;
> }
> @@ -2093,8 +2094,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
> @@ -2120,7 +2119,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 4d32605a84ce91eae2101cd83cad5f5317e2638a..06438ed1071478cd5c1a143c6ef58a926d6992fb 100644
> --- a/drivers/hwtracing/coresight/coresight-etm4x.h
> +++ b/drivers/hwtracing/coresight/coresight-etm4x.h
> @@ -978,7 +978,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.
> @@ -1032,7 +1031,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
>
--
Sincerely,
Yeoreum Yun
More information about the linux-arm-kernel
mailing list