Re: [PATCH] coresight: fix trace ID search skipping pass-through NoC devices
flat view
From: Jie Gan <hidden>
Date: 2026-09-02 08:35:34
Also in:
lkml
On 9/2/2026 4:22 PM, Leo Yan wrote:
Hi Jie, On Mon, Aug 17, 2026 at 04:50:15PM +0800, Jie Gan wrote: [...]quoted
@@ -953,8 +953,12 @@ int coresight_path_assign_trace_id(struct coresight_path *path, /* Assign a trace ID to the path for the first device that wants to do it */ trace_id = coresight_get_trace_id(nd->csdev, mode, sink); - /* 0 means the device has no ID assignment, so keep searching */ - if (trace_id == 0) + /* + * 0 means the device has no ID assignment, and -EOPNOTSUPP + * means the device explicitly declines to assign one (e.g. a + * pass-through NoC) - in both cases keep searching downstream. + */ + if (trace_id == 0 || trace_id == -EOPNOTSUPP) continue;Based on IS_VALID_CS_TRACE_ID(), I see 0 is for no ID assignment, could you improve a bit tnoc.c instead? If so, We don't need to add a new error for the same purpose.
Hi Leo, Thanks for the suggestion. I will fix this in the TNOC driver. I agree that there is no need to use additional error codes to report the failure. I will post the new fix patch after below patch[1] to be applied to avoid conflict. [1] https://lore.kernel.org/all/20260710-fix-tracenoc-probe-issue-v6-2-41eb36fef8d9@oss.qualcomm.com/ (local) Thanks, Jie
quoted hunk ↗ jump to hunk
---8<---diff --git a/drivers/hwtracing/coresight/coresight-tnoc.c b/drivers/hwtracing/coresight/coresight-tnoc.c index 9e8de4323d28..bf221c1e5c48 100644 --- a/drivers/hwtracing/coresight/coresight-tnoc.c +++ b/drivers/hwtracing/coresight/coresight-tnoc.c@@ -51,8 +51,8 @@ static void trace_noc_enable_hw(struct trace_noc_drvdata *drvdata) { u32 val; - /* No valid ATID, simply enable the unit */ - if (drvdata->atid == -EOPNOTSUPP) { + /* 0 means no ID assignment, simply enable the unit */ + if (!drvdata->atid) { writel(TRACE_NOC_CTRL_PORTEN, drvdata->base + TRACE_NOC_CTRL); return; }@@ -130,10 +130,8 @@ static int trace_noc_init_default_data(struct trace_noc_drvdata *drvdata) { int atid; - if (!dev_is_amba(drvdata->dev)) { - drvdata->atid = -EOPNOTSUPP; + if (!dev_is_amba(drvdata->dev)) return 0; - } atid = coresight_trace_id_get_system_id(); if (atid < 0)