[PATCH v2 23/28] coresight: Control path during CPU idle
Leo Yan
leo.yan at arm.com
Tue Jul 1 07:53:48 PDT 2025
Control links and helpers on an activated path during CPU idle. Since
coresight_disable_path_from() does not handle a source device's
helpers, explicitly disable them alongside the source device.
Signed-off-by: Leo Yan <leo.yan at arm.com>
---
drivers/hwtracing/coresight/coresight-core.c | 27 +++++++++++++++++++++++++--
1 file changed, 25 insertions(+), 2 deletions(-)
diff --git a/drivers/hwtracing/coresight/coresight-core.c b/drivers/hwtracing/coresight/coresight-core.c
index b1c122d1c4164e3ca6f1aaad0bd24917032626be..7693a0eade1a8de6d0960d66f6de682b5d5aff17 100644
--- a/drivers/hwtracing/coresight/coresight-core.c
+++ b/drivers/hwtracing/coresight/coresight-core.c
@@ -458,8 +458,15 @@ static bool coresight_need_save_restore_source(struct coresight_device *csdev)
static int coresight_save_source(struct coresight_device *csdev)
{
- if (csdev && source_ops(csdev)->save)
- return source_ops(csdev)->save(csdev);
+ int ret;
+
+ if (csdev && source_ops(csdev)->save) {
+ ret = source_ops(csdev)->save(csdev);
+ if (ret)
+ return ret;
+
+ coresight_disable_helpers(csdev, NULL);
+ }
/* Return success if callback is not supported */
return 0;
@@ -1662,17 +1669,33 @@ static int coresight_cpu_pm_notify(struct notifier_block *nb, unsigned long cmd,
{
unsigned int cpu = smp_processor_id();
struct coresight_device *source = per_cpu(csdev_source, cpu);
+ struct coresight_path *path;
if (!coresight_need_save_restore_source(source))
return NOTIFY_OK;
+ /*
+ * When run at here, the source device mode is enabled.
+ * The activated path pointer must not be NULL.
+ */
+ path = per_cpu(csdev_cpu_path, source->cpu);
+ if (WARN_ON(!path))
+ return NOTIFY_BAD;
+
switch (cmd) {
case CPU_PM_ENTER:
if (coresight_save_source(source))
return NOTIFY_BAD;
+
+ coresight_disable_path_from(path, NULL, true);
break;
case CPU_PM_EXIT:
case CPU_PM_ENTER_FAILED:
+ if (_coresight_enable_path(path,
+ coresight_get_mode(source),
+ NULL, true))
+ return NOTIFY_BAD;
+
coresight_restore_source(source);
break;
default:
--
2.34.1
More information about the linux-arm-kernel
mailing list