Hi,
On Sun, Oct 25, 2026 at 09:13:07PM +0800, Chao Xu wrote:
Before enable funnel, priority must be set. Changing the port priorities in real time is not supported.
If the priority control register is written when one or more of ports are enable, then the write is silently rejected.
Could you cite the relevant documentation in commit log?
The CoreSight SoC-600 TRM, section 9.11.2, PRIORITYCONTROL, a funnel rejects priority register writes whenever any port is enabled. The current sequence therefore prevent the configured priorities from taking effect.
Write the priority register before enabling the first port.
Signed-off-by: Chao Xu xuchao066@163.com
drivers/hwtracing/coresight/coresight-funnel.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/hwtracing/coresight/coresight-funnel.c b/drivers/hwtracing/coresight/coresight-funnel.c index af40814ce560..17f985798d7f 100644 --- a/drivers/hwtracing/coresight/coresight-funnel.c +++ b/drivers/hwtracing/coresight/coresight-funnel.c @@ -66,8 +66,8 @@ static int dynamic_funnel_enable_hw(struct funnel_drvdata *drvdata, int port) functl &= ~FUNNEL_HOLDTIME_MASK; functl |= FUNNEL_HOLDTIME; functl |= (1 << port);
- writel_relaxed(functl, drvdata->base + FUNNEL_FUNCTL); writel_relaxed(drvdata->priority, drvdata->base + FUNNEL_PRICTL);
- writel_relaxed(functl, drvdata->base + FUNNEL_FUNCTL);
Please move the priority write into the first port branch:
/* Claim the device only when we enable the first slave */ if (!(functl & FUNNEL_ENSx_MASK)) { rc = coresight_claim_device_unlocked(csdev); if (rc) goto done;
/* Update priorities while all ports are disabled */ writel_relaxed(drvdata->priority, drvdata->base + FUNNEL_PRICTL); }
Thanks, Leo