On 16/03/2026 10:29, Jie Gan wrote:
Hi Suzuki,
On 3/16/2026 5:32 PM, Suzuki K Poulose wrote:
On 16/03/2026 07:23, Jie Gan wrote:
Save the trace ID in drvdata during TPDM enablement and expose it to userspace to support trace data parsing.
The TPDM device’s trace ID corresponds to the trace ID allocated to the connected TPDA device.
Signed-off-by: Jie Gan jie.gan@oss.qualcomm.com
Changes in V2:
- Use sysfs_emit instead of sprintf.
Link to V1 - https://lore.kernel.org/all/20260306-add-traceid-show- for-tpdm-v1-1-0658a8edb972@oss.qualcomm.com/
Why is this patch required even ? For each TPDM there is a single
It's taking effort to retrieve the trace ID of the TPDA device because it's not a source device. The trace ID is required to identify the origin of the trace data and is essential for parsing the received data.
port in a single TPDA in the system where it can reach and that is fixed for a platform. Can we not get this from there ? Also, there is not TraceID technically for a TPDM, right ? It is all a property
Yes, we dont allocate trace ID for a TPDM device. The TraceID is allocated to the TPDA device.
Now if you combine both your responses, don't you think they contradict each other ?
Also, the TraceID we show is *not valid* if the TPDM was never enabled. So this is inconsistent, isn't it ? Unless we return an error in this case
Suzuki
Thanks, Jie
of the TPDA ?
Suzuki
drivers/hwtracing/coresight/coresight-tpdm.c | 31 +++++++++++++++++
- +++++++++-
drivers/hwtracing/coresight/coresight-tpdm.h | 2 ++ 2 files changed, 32 insertions(+), 1 deletion(-)
diff --git a/drivers/hwtracing/coresight/coresight-tpdm.c b/drivers/ hwtracing/coresight/coresight-tpdm.c index da77bdaad0a4..774a63def817 100644 --- a/drivers/hwtracing/coresight/coresight-tpdm.c +++ b/drivers/hwtracing/coresight/coresight-tpdm.c @@ -481,7 +481,7 @@ static void __tpdm_enable(struct tpdm_drvdata *drvdata) static int tpdm_enable(struct coresight_device *csdev, struct perf_event *event, enum cs_mode mode, - __maybe_unused struct coresight_path *path) + struct coresight_path *path) { struct tpdm_drvdata *drvdata = dev_get_drvdata(csdev->dev.parent); @@ -497,6 +497,7 @@ static int tpdm_enable(struct coresight_device *csdev, struct perf_event *event, } __tpdm_enable(drvdata); + drvdata->traceid = path->trace_id; drvdata->enable = true; spin_unlock(&drvdata->spinlock); @@ -693,6 +694,26 @@ static struct attribute_group tpdm_attr_grp = { .attrs = tpdm_attrs, }; +static ssize_t traceid_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + unsigned long val; + struct tpdm_drvdata *drvdata = dev_get_drvdata(dev->parent);
+ val = drvdata->traceid; + return sysfs_emit(buf, "%#lx\n", val); +} +static DEVICE_ATTR_RO(traceid);
+static struct attribute *traceid_attrs[] = { + &dev_attr_traceid.attr, + NULL, +};
+static struct attribute_group traceid_attr_grp = { + .attrs = traceid_attrs, +};
static ssize_t dsb_mode_show(struct device *dev, struct device_attribute *attr, char *buf) @@ -1367,6 +1388,12 @@ static const struct attribute_group *tpdm_attr_grps[] = { &tpdm_cmb_patt_grp, &tpdm_cmb_msr_grp, &tpdm_mcmb_attr_grp, + &traceid_attr_grp, + NULL, +};
+static const struct attribute_group *static_tpdm_attr_grps[] = { + &traceid_attr_grp, NULL, }; @@ -1425,6 +1452,8 @@ static int tpdm_probe(struct device *dev, struct resource *res) desc.access = CSDEV_ACCESS_IOMEM(base); if (res) desc.groups = tpdm_attr_grps; + else + desc.groups = static_tpdm_attr_grps;
> drvdata->csdev = coresight_register(&desc);> if (IS_ERR(drvdata->csdev))
return PTR_ERR(drvdata->csdev); diff --git a/drivers/hwtracing/coresight/coresight-tpdm.h b/drivers/ hwtracing/coresight/coresight-tpdm.h index 2867f3ab8186..befecbb896f4 100644 --- a/drivers/hwtracing/coresight/coresight-tpdm.h +++ b/drivers/hwtracing/coresight/coresight-tpdm.h @@ -300,6 +300,7 @@ struct cmb_dataset { * @cmb Specifics associated to TPDM CMB. * @dsb_msr_num Number of MSR supported by DSB TPDM * @cmb_msr_num Number of MSR supported by CMB TPDM
- @traceid trace ID of the path.
*/ struct tpdm_drvdata { @@ -313,6 +314,7 @@ struct tpdm_drvdata { struct cmb_dataset *cmb; u32 dsb_msr_num; u32 cmb_msr_num; + u8 traceid; }; /* Enumerate members of various datasets */
base-commit: b84a0ebe421ca56995ff78b66307667b62b3a900 change-id: 20260316-add-traceid-show-for-tpdm-88d040651f00
Best regards,