From: Sizhe Liu <liusizhe5@huawei.com>
To: <rostedt@goodmis.org>, <mhiramat@kernel.org>,
<mathieu.desnoyers@efficios.com>, <corbet@lwn.net>,
<skhan@linuxfoundation.org>, <bhelgaas@google.com>,
<yangyccccc@gmail.com>, <jic23@kernel.org>,
<john.g.garry@oracle.com>, <will@kernel.org>,
<james.clark@linaro.org>, <mike.leach@arm.com>,
<leo.yan@linux.dev>, <peterz@infradead.org>, <mingo@redhat.com>,
<acme@kernel.org>, <namhyung@kernel.org>, <mark.rutland@arm.com>,
<alexander.shishkin@linux.intel.com>, <jolsa@kernel.org>,
<irogers@google.com>, <adrian.hunter@intel.com>,
<wangyushan12@huawei.com>, <wuzongyu1@huawei.com>
Cc: <linux-kernel@vger.kernel.org>, <linux-pci@vger.kernel.org>,
<linux-perf-users@vger.kernel.org>,
<linux-arm-kernel@lists.infradead.org>,
<linux-doc@vger.kernel.org>, <linuxarm@huawei.com>,
<prime.zeng@hisilicon.com>, <liusizhe5@huawei.com>
Subject: [PATCH v3 7/8] hwtracing: hisi_ptt: Add pattern PMU config for trace format selection
Date: Thu, 3 Sep 2026 15:52:40 +0800 [thread overview]
Message-ID: <20260903075241.1445338-8-liusizhe5@huawei.com> (raw)
In-Reply-To: <20260903075241.1445338-1-liusizhe5@huawei.com>
Introduce a `pattern` PMU config field (config:36-39) that controls
which TLP header format the hardware traces. bit[3:1] are reserved for
future extension and only bit0 is used currently:
- pattern=0 (default, compatibility mode): the driver sets bit[8] of
HISI_PTT_TRACE_CTRL so the hardware traces the data in compatibility
mode.
- pattern=1: the driver clears bit[8] of HISI_PTT_TRACE_CTRL so the
hardware traces the data pattern including some bitfields of the TLP
header defined in PCIe r6.4 sec 2.2.1.2.
Note that bit[8] of HISI_PTT_TRACE_CTRL is inverted with respect to the
`pattern` value: bit[8]=1 selects the legacy format, bit[8]=0 selects
the new format. Bit[11:9] is still reserved, which is consistent with the
PMU config field. The driver validates the 4-bit value in
hisi_ptt_trace_valid_pattern() and applies it in hisi_ptt_trace_start().
Document the new parameter in Documentation/trace/hisi-ptt.rst.
Reviewed-by: Yushan Wang <wangyushan12@huawei.com>
Signed-off-by: Sizhe Liu <liusizhe5@huawei.com>
---
Documentation/trace/hisi-ptt.rst | 25 +++++++++++++++++++++++--
drivers/hwtracing/ptt/hisi_ptt.c | 25 ++++++++++++++++++++++++-
drivers/hwtracing/ptt/hisi_ptt.h | 4 ++++
3 files changed, 51 insertions(+), 3 deletions(-)
diff --git a/Documentation/trace/hisi-ptt.rst b/Documentation/trace/hisi-ptt.rst
index f6a2655f99e5..c95eaa12f4d3 100644
--- a/Documentation/trace/hisi-ptt.rst
+++ b/Documentation/trace/hisi-ptt.rst
@@ -255,7 +255,28 @@ directly from the TLP header.
DW2 [ Header DW2 ]
DW3 [ Header DW3 ]
-5. Memory Management
+5. Trace pattern
+-----------------
+
+You can control whether the trace is taken with the new version of the
+TLP header format by specifying the `pattern` parameter. The default
+value is 0, which means the legacy format is used for backward
+compatibility. The parameter value is 4 bit and bit[3:1] are currently
+reserved for extension. Current supported values are shown below:
+
+- 4'b0000: legacy trace format
+ DW2 and DW3 are printed with generic field names only, and
+ no message-type-basedfield decoding.
+- 4'b0001: trace format v1
+ DW2 and DW3 are decoded according to the TLP message type (MWr,
+ Msg, Atomic, IO, CPL, Cfg) with detailed field names. It is recommended to
+ use trace format v1 when the current PCIe link generation is higher than
+ PCIe 6.0.
+
+For trace data recorded by an older tracer without the `pattern` parameter,
+the decoder will work as `pattern` forced to 0.
+
+6. Memory Management
--------------------
The traced TLP headers will be written to the memory allocated
@@ -274,7 +295,7 @@ will commit the AUX buffer first and then apply for a new one with
the same size. The size of AUX buffer is default to 16MiB. User can
adjust the size by specifying the `-m` parameter of the perf command.
-6. Decoding
+7. Decoding
-----------
You can decode the traced data with `perf report -D` command (currently
diff --git a/drivers/hwtracing/ptt/hisi_ptt.c b/drivers/hwtracing/ptt/hisi_ptt.c
index 52f168f8b459..b63985c2b30e 100644
--- a/drivers/hwtracing/ptt/hisi_ptt.c
+++ b/drivers/hwtracing/ptt/hisi_ptt.c
@@ -232,6 +232,10 @@ static int hisi_ptt_trace_start(struct hisi_ptt *hisi_ptt)
val |= FIELD_PREP(HISI_PTT_TRACE_CTRL_TARGET_SEL, hisi_ptt->trace_ctrl.filter);
if (!hisi_ptt->trace_ctrl.is_port)
val |= HISI_PTT_TRACE_CTRL_FILTER_MODE;
+ if (!ctrl->pattern)
+ val |= HISI_PTT_TRACE_CTRL_PATTERN;
+ else
+ val &= ~HISI_PTT_TRACE_CTRL_PATTERN;
ctrl->started = true;
@@ -806,12 +810,14 @@ PMU_FORMAT_ATTR(filter, "config:0-19");
PMU_FORMAT_ATTR(direction, "config:20-23");
PMU_FORMAT_ATTR(type, "config:24-31");
PMU_FORMAT_ATTR(format, "config:32-35");
+PMU_FORMAT_ATTR(pattern, "config:36-39");
static struct attribute *hisi_ptt_pmu_format_attrs[] = {
&format_attr_filter.attr,
&format_attr_direction.attr,
&format_attr_type.attr,
&format_attr_format.attr,
+ &format_attr_pattern.attr,
NULL
};
@@ -941,6 +947,15 @@ static int hisi_ptt_trace_valid_format(u32 val)
return -EINVAL;
}
+static int hisi_ptt_trace_valid_pattern(u32 val)
+{
+ /* Currently only bit0 is used, bit[3:1] are reserved for extension. */
+ if (val <= 1)
+ return 0;
+
+ return -EINVAL;
+}
+
static int hisi_ptt_trace_valid_filter(struct hisi_ptt *hisi_ptt, u64 config)
{
unsigned long val, port_mask = hisi_ptt->port_mask;
@@ -991,6 +1006,9 @@ static void hisi_ptt_pmu_init_configs(struct hisi_ptt *hisi_ptt, struct perf_eve
val = FIELD_GET(HISI_PTT_PMU_FORMAT_MASK, event->attr.config);
ctrl->format = val;
+
+ val = FIELD_GET(HISI_PTT_PMU_PATTERN_MASK, event->attr.config);
+ ctrl->pattern = val;
}
static int hisi_ptt_pmu_event_init(struct perf_event *event)
@@ -1025,7 +1043,12 @@ static int hisi_ptt_pmu_event_init(struct perf_event *event)
return ret;
val = FIELD_GET(HISI_PTT_PMU_FORMAT_MASK, event->attr.config);
- return hisi_ptt_trace_valid_format(val);
+ ret = hisi_ptt_trace_valid_format(val);
+ if (ret < 0)
+ return ret;
+
+ val = FIELD_GET(HISI_PTT_PMU_PATTERN_MASK, event->attr.config);
+ return hisi_ptt_trace_valid_pattern(val);
}
static void *hisi_ptt_pmu_setup_aux(struct perf_event *event, void **pages,
diff --git a/drivers/hwtracing/ptt/hisi_ptt.h b/drivers/hwtracing/ptt/hisi_ptt.h
index 46030aa88081..584f65ba1e32 100644
--- a/drivers/hwtracing/ptt/hisi_ptt.h
+++ b/drivers/hwtracing/ptt/hisi_ptt.h
@@ -41,6 +41,7 @@
#define HISI_PTT_TRACE_CTRL_RST BIT(1)
#define HISI_PTT_TRACE_CTRL_RXTX_SEL GENMASK(3, 2)
#define HISI_PTT_TRACE_CTRL_TYPE_SEL GENMASK(7, 4)
+#define HISI_PTT_TRACE_CTRL_PATTERN BIT(8)
#define HISI_PTT_TRACE_CTRL_DATA_FORMAT BIT(14)
#define HISI_PTT_TRACE_CTRL_FILTER_MODE BIT(15)
#define HISI_PTT_TRACE_CTRL_TARGET_SEL GENMASK(31, 16)
@@ -89,6 +90,7 @@
#define HISI_PTT_PMU_DIRECTION_MASK GENMASK(23, 20)
#define HISI_PTT_PMU_TYPE_MASK GENMASK(31, 24)
#define HISI_PTT_PMU_FORMAT_MASK GENMASK(35, 32)
+#define HISI_PTT_PMU_PATTERN_MASK GENMASK(39, 36)
/**
* struct hisi_ptt_tune_desc - Describe tune event for PTT tune
@@ -127,6 +129,7 @@ struct hisi_ptt_dma_buffer {
* @filter: filter value for tracing the TLP headers
* @format: format of the TLP headers to trace
* @type: type of the TLP headers to trace
+ * @pattern: pattern of the TLP headers to trace
*/
struct hisi_ptt_trace_ctrl {
struct hisi_ptt_dma_buffer *trace_buf;
@@ -139,6 +142,7 @@ struct hisi_ptt_trace_ctrl {
u32 filter:16;
u32 format:1;
u32 type:4;
+ u32 pattern:1;
};
/*
--
2.33.0
next prev parent reply other threads:[~2026-09-03 7:53 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-03 7:52 [PATCH v3 0/8] Enhance TLP packet decoder with field-level parsing and versioning Sizhe Liu
2026-09-03 7:52 ` [PATCH v3 1/8] perf hisi-ptt: Abstract trace data buf and offset Sizhe Liu
2026-09-03 7:52 ` [PATCH v3 2/8] perf hisi-ptt: Complete the field names for 4DW and 8DW packets Sizhe Liu
2026-09-03 7:52 ` [PATCH v3 3/8] perf hisi-ptt: Extract the raw data printing part Sizhe Liu
2026-09-03 7:52 ` [PATCH v3 4/8] perf hisi-ptt: Merge 4DW and 8DW HEAD0 printing Sizhe Liu
2026-09-03 7:52 ` [PATCH v3 5/8] perf hisi-ptt: Add parsing of supported message types Sizhe Liu
2026-09-03 7:52 ` [PATCH v3 6/8] perf hisi-ptt: Add field-level parsing for header DW2/DW3 Sizhe Liu
2026-09-03 7:52 ` Sizhe Liu [this message]
2026-09-03 7:52 ` [PATCH v3 8/8] perf hisi-ptt: Pass pattern version to decoder for compatibility Sizhe Liu
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260903075241.1445338-8-liusizhe5@huawei.com \
--to=liusizhe5@huawei.com \
--cc=acme@kernel.org \
--cc=adrian.hunter@intel.com \
--cc=alexander.shishkin@linux.intel.com \
--cc=bhelgaas@google.com \
--cc=corbet@lwn.net \
--cc=irogers@google.com \
--cc=james.clark@linaro.org \
--cc=jic23@kernel.org \
--cc=john.g.garry@oracle.com \
--cc=jolsa@kernel.org \
--cc=leo.yan@linux.dev \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-doc@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pci@vger.kernel.org \
--cc=linux-perf-users@vger.kernel.org \
--cc=linuxarm@huawei.com \
--cc=mark.rutland@arm.com \
--cc=mathieu.desnoyers@efficios.com \
--cc=mhiramat@kernel.org \
--cc=mike.leach@arm.com \
--cc=mingo@redhat.com \
--cc=namhyung@kernel.org \
--cc=peterz@infradead.org \
--cc=prime.zeng@hisilicon.com \
--cc=rostedt@goodmis.org \
--cc=skhan@linuxfoundation.org \
--cc=wangyushan12@huawei.com \
--cc=will@kernel.org \
--cc=wuzongyu1@huawei.com \
--cc=yangyccccc@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.