[PATCH 07/24] gtrace: Parse RISC-V Trace encoder config from perf event

From: Zane Leung

Date: Thu Oct 22 2026 - 23:18:14 EST


Parse the hardware trace encoder configurations (timestamp, context,
syncmode, and syncmax) from perf event attributes when operating
in GTRACE_COMPONENT_MODE_PERF.

Signed-off-by: Zane Leung <liangzhen@xxxxxxxxxxxxxxxxxx>
---
.../hwtracing/gtrace/rvtrace-encoder-core.c | 20 +++++++++++++++++++
1 file changed, 20 insertions(+)

diff --git a/drivers/hwtracing/gtrace/rvtrace-encoder-core.c b/drivers/hwtracing/gtrace/rvtrace-encoder-core.c
index 01925ebdfbde..817535ff9558 100644
--- a/drivers/hwtracing/gtrace/rvtrace-encoder-core.c
+++ b/drivers/hwtracing/gtrace/rvtrace-encoder-core.c
@@ -140,13 +140,33 @@ static int rvtrace_encoder_probe(struct gtrace_component *comp)
return 0;
}

+static void rvtrace_encoder_parse_event_config(struct rvtrace_encoder_priv *priv,
+ struct perf_event *event)
+{
+ u64 config = event->attr.config;
+ enum rvtrace_encoder_syncmode syncmode;
+
+ if (priv->has_context)
+ priv->context = config & BIT(GTRACE_PMU_ATTR_CFG_CONTEXT_SHIFT);
+
+ syncmode = FIELD_GET(GTRACE_PMU_ATTR_CFG_SYNCMODE_MASK, config);
+ if (priv->syncmode_hw[syncmode]) {
+ priv->syncmode = syncmode;
+ priv->syncmax = FIELD_GET(GTRACE_PMU_ATTR_CFG_SYNCMAX_MASK, config);
+ }
+}
+
static int rvtrace_encoder_start(struct gtrace_component *comp)
{
struct rvtrace_encoder_priv *priv = dev_get_drvdata(&comp->dev);
struct gtrace_platform_data *pdata = comp->pdata;
+ struct gtrace_path *path = comp->path;
int ret;
u32 val;

+ if (path->mode == GTRACE_COMPONENT_MODE_PERF)
+ rvtrace_encoder_parse_event_config(priv, path->event);
+
if (priv->srcbits)
rvtrace_encoder_set_srcid(pdata, priv->srcbits);

--
2.34.1