* [PATCH v2 0/3] Add support to configure TPDM MCMB subunit
@ 2024-11-05 12:39 Mao Jinlong
2024-11-05 12:39 ` [PATCH v2 1/3] coresight-tpdm: Add MCMB dataset support Mao Jinlong
` (3 more replies)
0 siblings, 4 replies; 8+ messages in thread
From: Mao Jinlong @ 2024-11-05 12:39 UTC (permalink / raw)
To: Suzuki K Poulose, Mike Leach, James Clark, Alexander Shishkin
Cc: Mao Jinlong, coresight, linux-arm-kernel, linux-kernel,
linux-arm-msm
Introduction of TPDM MCMB(Multi-lane Continuous Multi Bit) subunit
MCMB (Multi-lane CMB) is a special form of CMB dataset type. MCMB
subunit has the same number and usage of registers as CMB subunit.
Just like the CMB subunit, the MCMB subunit must be configured prior
to enablement. This series adds support for TPDM to configure the
MCMB subunit.
Once this series patches are applied properly, the new tpdm nodes for
should be observed at the tpdm path /sys/bus/coresight/devices/tpdm*
which supports MCMB subunit. All sysfs files of CMB subunit TPDM are
included in MCMB subunit TPDM. On this basis, MCMB subunit TPDM will
have new sysfs files to select and enable the lane.
Changes in V2:
1. Use tdpm_data->cmb instead of (tpdm_has_cmb_dataset(tpdm_data) ||
tpdm_has_mcmb_dataset(tpdm_data)) for cmb dataset support.
2. Embed mcmb_dataset struct into cmb struct.
3. Update the date and version in sysfs-bus-coresight-devices-tpdm
Mao Jinlong (1):
coresight-tpdm: Add MCMB dataset support
Tao Zhang (2):
coresight-tpdm: Add support to select lane
coresight-tpdm: Add support to enable the lane for MCMB TPDM
.../testing/sysfs-bus-coresight-devices-tpdm | 15 +++
drivers/hwtracing/coresight/coresight-tpda.c | 7 +-
drivers/hwtracing/coresight/coresight-tpdm.c | 124 +++++++++++++++++-
drivers/hwtracing/coresight/coresight-tpdm.h | 33 +++--
4 files changed, 158 insertions(+), 21 deletions(-)
--
2.17.1
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH v2 1/3] coresight-tpdm: Add MCMB dataset support
2024-11-05 12:39 [PATCH v2 0/3] Add support to configure TPDM MCMB subunit Mao Jinlong
@ 2024-11-05 12:39 ` Mao Jinlong
2024-12-17 14:52 ` Suzuki K Poulose
2024-11-05 12:39 ` [PATCH v2 2/3] coresight-tpdm: Add support to select lane Mao Jinlong
` (2 subsequent siblings)
3 siblings, 1 reply; 8+ messages in thread
From: Mao Jinlong @ 2024-11-05 12:39 UTC (permalink / raw)
To: Suzuki K Poulose, Mike Leach, James Clark, Alexander Shishkin
Cc: Mao Jinlong, coresight, linux-arm-kernel, linux-kernel,
linux-arm-msm, Tao Zhang
MCMB (Multi-lane CMB) is a special form of CMB dataset type. MCMB
subunit TPDM has the same number and usage of registers as CMB
subunit TPDM. MCMB subunit can be enabled for data collection by
writing 1 to the first bit of CMB_CR register. The difference is
that MCMB subunit TPDM needs to select the lane and enable it in
using it.
Signed-off-by: Tao Zhang <quic_taozha@quicinc.com>
Signed-off-by: Mao Jinlong <quic_jinlmao@quicinc.com>
---
drivers/hwtracing/coresight/coresight-tpda.c | 7 ++--
drivers/hwtracing/coresight/coresight-tpdm.c | 44 +++++++++++++++++---
drivers/hwtracing/coresight/coresight-tpdm.h | 27 ++++++------
3 files changed, 57 insertions(+), 21 deletions(-)
diff --git a/drivers/hwtracing/coresight/coresight-tpda.c b/drivers/hwtracing/coresight/coresight-tpda.c
index bfca103f9f84..4b61b9840740 100644
--- a/drivers/hwtracing/coresight/coresight-tpda.c
+++ b/drivers/hwtracing/coresight/coresight-tpda.c
@@ -1,6 +1,6 @@
// SPDX-License-Identifier: GPL-2.0
/*
- * Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
+ * Copyright (c) 2023-2024 Qualcomm Innovation Center, Inc. All rights reserved.
*/
#include <linux/amba/bus.h>
@@ -68,11 +68,12 @@ static int tpdm_read_element_size(struct tpda_drvdata *drvdata,
int rc = -EINVAL;
struct tpdm_drvdata *tpdm_data = dev_get_drvdata(csdev->dev.parent);
- if (tpdm_has_dsb_dataset(tpdm_data)) {
+ if (tpdm_data->dsb) {
rc = fwnode_property_read_u32(dev_fwnode(csdev->dev.parent),
"qcom,dsb-element-bits", &drvdata->dsb_esize);
}
- if (tpdm_has_cmb_dataset(tpdm_data)) {
+
+ if (tpdm_data->cmb) {
rc = fwnode_property_read_u32(dev_fwnode(csdev->dev.parent),
"qcom,cmb-element-bits", &drvdata->cmb_esize);
}
diff --git a/drivers/hwtracing/coresight/coresight-tpdm.c b/drivers/hwtracing/coresight/coresight-tpdm.c
index b7d99e91ab84..0529858586c1 100644
--- a/drivers/hwtracing/coresight/coresight-tpdm.c
+++ b/drivers/hwtracing/coresight/coresight-tpdm.c
@@ -1,6 +1,6 @@
// SPDX-License-Identifier: GPL-2.0
/*
- * Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
+ * Copyright (c) 2023-2024 Qualcomm Innovation Center, Inc. All rights reserved.
*/
#include <linux/amba/bus.h>
@@ -21,6 +21,21 @@
DEFINE_CORESIGHT_DEVLIST(tpdm_devs, "tpdm");
+static bool tpdm_has_dsb_dataset(struct tpdm_drvdata *drvdata)
+{
+ return (drvdata->datasets & TPDM_PIDR0_DS_DSB);
+}
+
+static bool tpdm_has_cmb_dataset(struct tpdm_drvdata *drvdata)
+{
+ return (drvdata->datasets & TPDM_PIDR0_DS_CMB);
+}
+
+static bool tpdm_has_mcmb_dataset(struct tpdm_drvdata *drvdata)
+{
+ return (drvdata->datasets & TPDM_PIDR0_DS_MCMB);
+}
+
/* Read dataset array member with the index number */
static ssize_t tpdm_simple_dataset_show(struct device *dev,
struct device_attribute *attr,
@@ -198,7 +213,7 @@ static umode_t tpdm_cmb_is_visible(struct kobject *kobj,
struct device *dev = kobj_to_dev(kobj);
struct tpdm_drvdata *drvdata = dev_get_drvdata(dev->parent);
- if (drvdata && tpdm_has_cmb_dataset(drvdata))
+ if (drvdata && drvdata->cmb)
return attr->mode;
return 0;
@@ -246,8 +261,10 @@ static void tpdm_reset_datasets(struct tpdm_drvdata *drvdata)
drvdata->dsb->trig_type = false;
}
- if (drvdata->cmb)
+ if (drvdata->cmb) {
memset(drvdata->cmb, 0, sizeof(struct cmb_dataset));
+ drvdata->cmb->trig_ts = true;
+ }
}
static void set_dsb_mode(struct tpdm_drvdata *drvdata, u32 *val)
@@ -388,7 +405,7 @@ static void tpdm_enable_cmb(struct tpdm_drvdata *drvdata)
{
u32 val, i;
- if (!tpdm_has_cmb_dataset(drvdata))
+ if (!drvdata->cmb)
return;
/* Configure pattern registers */
@@ -415,6 +432,19 @@ static void tpdm_enable_cmb(struct tpdm_drvdata *drvdata)
val |= TPDM_CMB_CR_MODE;
else
val &= ~TPDM_CMB_CR_MODE;
+
+ if (tpdm_has_mcmb_dataset(drvdata)) {
+ val &= ~TPDM_CMB_CR_XTRIG_LNSEL;
+ /* Set the lane participates in tghe output pattern */
+ val |= FIELD_PREP(TPDM_CMB_CR_XTRIG_LNSEL,
+ drvdata->cmb->mcmb.trig_lane);
+
+ /* Set the enablement of the lane */
+ val &= ~TPDM_CMB_CR_E_LN;
+ val |= FIELD_PREP(TPDM_CMB_CR_E_LN,
+ drvdata->cmb->mcmb.lane_select);
+ }
+
/* Set the enable bit of CMB control register to 1 */
val |= TPDM_CMB_CR_ENA;
writel_relaxed(val, drvdata->base + TPDM_CMB_CR);
@@ -480,7 +510,7 @@ static void tpdm_disable_cmb(struct tpdm_drvdata *drvdata)
{
u32 val;
- if (!tpdm_has_cmb_dataset(drvdata))
+ if (!drvdata->cmb)
return;
val = readl_relaxed(drvdata->base + TPDM_CMB_CR);
@@ -542,12 +572,14 @@ static int tpdm_datasets_setup(struct tpdm_drvdata *drvdata)
if (!drvdata->dsb)
return -ENOMEM;
}
- if (tpdm_has_cmb_dataset(drvdata) && (!drvdata->cmb)) {
+ if ((tpdm_has_cmb_dataset(drvdata) || tpdm_has_mcmb_dataset(drvdata))
+ && (!drvdata->cmb)) {
drvdata->cmb = devm_kzalloc(drvdata->dev,
sizeof(*drvdata->cmb), GFP_KERNEL);
if (!drvdata->cmb)
return -ENOMEM;
}
+
tpdm_reset_datasets(drvdata);
return 0;
diff --git a/drivers/hwtracing/coresight/coresight-tpdm.h b/drivers/hwtracing/coresight/coresight-tpdm.h
index e08d212642e3..fd9153b92335 100644
--- a/drivers/hwtracing/coresight/coresight-tpdm.h
+++ b/drivers/hwtracing/coresight/coresight-tpdm.h
@@ -1,6 +1,6 @@
/* SPDX-License-Identifier: GPL-2.0 */
/*
- * Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
+ * Copyright (c) 2023-2024 Qualcomm Innovation Center, Inc. All rights reserved.
*/
#ifndef _CORESIGHT_CORESIGHT_TPDM_H
@@ -9,7 +9,7 @@
/* The max number of the datasets that TPDM supports */
#define TPDM_DATASETS 7
-/* CMB Subunit Registers */
+/* CMB/MCMB Subunit Registers */
#define TPDM_CMB_CR (0xA00)
/* CMB subunit timestamp insertion enable register */
#define TPDM_CMB_TIER (0xA04)
@@ -34,6 +34,10 @@
#define TPDM_CMB_TIER_XTRIG_TSENAB BIT(1)
/* For timestamp fo all trace */
#define TPDM_CMB_TIER_TS_ALL BIT(2)
+/* MCMB trigger lane select */
+#define TPDM_CMB_CR_XTRIG_LNSEL GENMASK(20, 18)
+/* MCMB lane enablement */
+#define TPDM_CMB_CR_E_LN GENMASK(17, 10)
/* Patten register number */
#define TPDM_CMB_MAX_PATT 2
@@ -112,11 +116,13 @@
* PERIPHIDR0[0] : Fix to 1 if ImplDef subunit present, else 0
* PERIPHIDR0[1] : Fix to 1 if DSB subunit present, else 0
* PERIPHIDR0[2] : Fix to 1 if CMB subunit present, else 0
+ * PERIPHIDR0[6] : Fix to 1 if MCMB subunit present, else 0
*/
#define TPDM_PIDR0_DS_IMPDEF BIT(0)
#define TPDM_PIDR0_DS_DSB BIT(1)
#define TPDM_PIDR0_DS_CMB BIT(2)
+#define TPDM_PIDR0_DS_MCMB BIT(6)
#define TPDM_DSB_MAX_LINES 256
/* MAX number of EDCR registers */
@@ -256,6 +262,9 @@ struct dsb_dataset {
* @patt_ts: Indicates if pattern match for timestamp is enabled.
* @trig_ts: Indicates if CTI trigger for timestamp is enabled.
* @ts_all: Indicates if timestamp is enabled for all packets.
+ * struct mcmb_dataset
+ * @mcmb_trig_lane: Save data for trigger lane
+ * @mcmb_lane_select: Save data for lane enablement
*/
struct cmb_dataset {
u32 trace_mode;
@@ -267,6 +276,10 @@ struct cmb_dataset {
bool patt_ts;
bool trig_ts;
bool ts_all;
+ struct {
+ u8 trig_lane;
+ u8 lane_select;
+ } mcmb;
};
/**
@@ -324,14 +337,4 @@ struct tpdm_dataset_attribute {
enum dataset_mem mem;
u32 idx;
};
-
-static bool tpdm_has_dsb_dataset(struct tpdm_drvdata *drvdata)
-{
- return (drvdata->datasets & TPDM_PIDR0_DS_DSB);
-}
-
-static bool tpdm_has_cmb_dataset(struct tpdm_drvdata *drvdata)
-{
- return (drvdata->datasets & TPDM_PIDR0_DS_CMB);
-}
#endif /* _CORESIGHT_CORESIGHT_TPDM_H */
--
2.17.1
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH v2 2/3] coresight-tpdm: Add support to select lane
2024-11-05 12:39 [PATCH v2 0/3] Add support to configure TPDM MCMB subunit Mao Jinlong
2024-11-05 12:39 ` [PATCH v2 1/3] coresight-tpdm: Add MCMB dataset support Mao Jinlong
@ 2024-11-05 12:39 ` Mao Jinlong
2024-12-17 14:54 ` Suzuki K Poulose
2024-11-05 12:39 ` [PATCH v2 3/3] coresight-tpdm: Add support to enable the lane for MCMB TPDM Mao Jinlong
2024-12-17 7:47 ` [PATCH v2 0/3] Add support to configure TPDM MCMB subunit Jinlong Mao
3 siblings, 1 reply; 8+ messages in thread
From: Mao Jinlong @ 2024-11-05 12:39 UTC (permalink / raw)
To: Suzuki K Poulose, Mike Leach, James Clark, Alexander Shishkin
Cc: Tao Zhang, coresight, linux-arm-kernel, linux-kernel,
linux-arm-msm, Mao Jinlong
From: Tao Zhang <quic_taozha@quicinc.com>
TPDM MCMB subunits supports up to 8 lanes CMB. For MCMB
configurations, the field "XTRIG_LNSEL" in CMB_CR register selects
which lane participates in the output pattern mach cross trigger
mechanism governed by the M_CMB_DXPR and M_CMB_XPMR regisers.
Signed-off-by: Tao Zhang <quic_taozha@quicinc.com>
Signed-off-by: Mao Jinlong <quic_jinlmao@quicinc.com>
---
.../testing/sysfs-bus-coresight-devices-tpdm | 8 +++
drivers/hwtracing/coresight/coresight-tpdm.c | 51 +++++++++++++++++++
drivers/hwtracing/coresight/coresight-tpdm.h | 3 ++
3 files changed, 62 insertions(+)
diff --git a/Documentation/ABI/testing/sysfs-bus-coresight-devices-tpdm b/Documentation/ABI/testing/sysfs-bus-coresight-devices-tpdm
index bf710ea6e0ef..e833edfec79e 100644
--- a/Documentation/ABI/testing/sysfs-bus-coresight-devices-tpdm
+++ b/Documentation/ABI/testing/sysfs-bus-coresight-devices-tpdm
@@ -257,3 +257,11 @@ Contact: Jinlong Mao (QUIC) <quic_jinlmao@quicinc.com>, Tao Zhang (QUIC) <quic_t
Description:
(RW) Set/Get the MSR(mux select register) for the CMB subunit
TPDM.
+
+What: /sys/bus/coresight/devices/<tpdm-name>/mcmb_trig_lane
+Date: Nov 2024
+KernelVersion 6.13
+Contact: Tao Zhang (QUIC) <quic_taozha@quicinc.com>
+Description:
+ (RW) Set/Get which lane participates in the output pattern
+ match cross trigger mechanism for the MCMB subunit TPDM.
diff --git a/drivers/hwtracing/coresight/coresight-tpdm.c b/drivers/hwtracing/coresight/coresight-tpdm.c
index 0529858586c1..2e4dc86b03ea 100644
--- a/drivers/hwtracing/coresight/coresight-tpdm.c
+++ b/drivers/hwtracing/coresight/coresight-tpdm.c
@@ -252,6 +252,18 @@ static umode_t tpdm_cmb_msr_is_visible(struct kobject *kobj,
return 0;
}
+static umode_t tpdm_mcmb_is_visible(struct kobject *kobj,
+ struct attribute *attr, int n)
+{
+ struct device *dev = kobj_to_dev(kobj);
+ struct tpdm_drvdata *drvdata = dev_get_drvdata(dev->parent);
+
+ if (drvdata && tpdm_has_mcmb_dataset(drvdata))
+ return attr->mode;
+
+ return 0;
+}
+
static void tpdm_reset_datasets(struct tpdm_drvdata *drvdata)
{
if (tpdm_has_dsb_dataset(drvdata)) {
@@ -1023,6 +1035,34 @@ static ssize_t cmb_trig_ts_store(struct device *dev,
}
static DEVICE_ATTR_RW(cmb_trig_ts);
+static ssize_t mcmb_trig_lane_show(struct device *dev,
+ struct device_attribute *attr,
+ char *buf)
+{
+ struct tpdm_drvdata *drvdata = dev_get_drvdata(dev->parent);
+
+ return sysfs_emit(buf, "%u\n",
+ (unsigned int)drvdata->cmb->mcmb.trig_lane);
+}
+
+static ssize_t mcmb_trig_lane_store(struct device *dev,
+ struct device_attribute *attr,
+ const char *buf,
+ size_t size)
+{
+ struct tpdm_drvdata *drvdata = dev_get_drvdata(dev->parent);
+ unsigned long val;
+
+ if ((kstrtoul(buf, 0, &val)) || (val >= TPDM_MCMB_MAX_LANES))
+ return -EINVAL;
+
+ guard(spinlock)(&drvdata->spinlock);
+ drvdata->cmb->mcmb.trig_lane = val;
+
+ return size;
+}
+static DEVICE_ATTR_RW(mcmb_trig_lane);
+
static struct attribute *tpdm_dsb_edge_attrs[] = {
&dev_attr_ctrl_idx.attr,
&dev_attr_ctrl_val.attr,
@@ -1185,6 +1225,11 @@ static struct attribute *tpdm_cmb_msr_attrs[] = {
NULL,
};
+static struct attribute *tpdm_mcmb_attrs[] = {
+ &dev_attr_mcmb_trig_lane.attr,
+ NULL,
+};
+
static struct attribute *tpdm_dsb_attrs[] = {
&dev_attr_dsb_mode.attr,
&dev_attr_dsb_trig_ts.attr,
@@ -1251,6 +1296,11 @@ static struct attribute_group tpdm_cmb_msr_grp = {
.name = "cmb_msr",
};
+static struct attribute_group tpdm_mcmb_attr_grp = {
+ .attrs = tpdm_mcmb_attrs,
+ .is_visible = tpdm_mcmb_is_visible,
+};
+
static const struct attribute_group *tpdm_attr_grps[] = {
&tpdm_attr_grp,
&tpdm_dsb_attr_grp,
@@ -1262,6 +1312,7 @@ static const struct attribute_group *tpdm_attr_grps[] = {
&tpdm_cmb_trig_patt_grp,
&tpdm_cmb_patt_grp,
&tpdm_cmb_msr_grp,
+ &tpdm_mcmb_attr_grp,
NULL,
};
diff --git a/drivers/hwtracing/coresight/coresight-tpdm.h b/drivers/hwtracing/coresight/coresight-tpdm.h
index fd9153b92335..aa9746b2e77f 100644
--- a/drivers/hwtracing/coresight/coresight-tpdm.h
+++ b/drivers/hwtracing/coresight/coresight-tpdm.h
@@ -45,6 +45,9 @@
/* MAX number of DSB MSR */
#define TPDM_CMB_MAX_MSR 32
+/* MAX lanes in the output pattern for MCMB configurations*/
+#define TPDM_MCMB_MAX_LANES 8
+
/* DSB Subunit Registers */
#define TPDM_DSB_CR (0x780)
#define TPDM_DSB_TIER (0x784)
--
2.17.1
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH v2 3/3] coresight-tpdm: Add support to enable the lane for MCMB TPDM
2024-11-05 12:39 [PATCH v2 0/3] Add support to configure TPDM MCMB subunit Mao Jinlong
2024-11-05 12:39 ` [PATCH v2 1/3] coresight-tpdm: Add MCMB dataset support Mao Jinlong
2024-11-05 12:39 ` [PATCH v2 2/3] coresight-tpdm: Add support to select lane Mao Jinlong
@ 2024-11-05 12:39 ` Mao Jinlong
2024-12-17 14:55 ` Suzuki K Poulose
2024-12-17 7:47 ` [PATCH v2 0/3] Add support to configure TPDM MCMB subunit Jinlong Mao
3 siblings, 1 reply; 8+ messages in thread
From: Mao Jinlong @ 2024-11-05 12:39 UTC (permalink / raw)
To: Suzuki K Poulose, Mike Leach, James Clark, Alexander Shishkin
Cc: Tao Zhang, coresight, linux-arm-kernel, linux-kernel,
linux-arm-msm, Mao Jinlong
From: Tao Zhang <quic_taozha@quicinc.com>
Add the sysfs file to set/get the enablement of the lane. For MCMB
configurations, the field "E_LN" in CMB_CR register is the
individual lane enables. MCMB lane N is enabled for trace
generation when M_CMB_CR.E=1 and M_CMB_CR.E_LN[N]=1. For lanes
that are not implemented on a given MCMB configuration, the
corresponding bits of this field read as 0 and ignore writes.
Signed-off-by: Tao Zhang <quic_taozha@quicinc.com>
Signed-off-by: Mao Jinlong <quic_jinlmao@quicinc.com>
---
.../testing/sysfs-bus-coresight-devices-tpdm | 7 +++++
drivers/hwtracing/coresight/coresight-tpdm.c | 29 +++++++++++++++++++
drivers/hwtracing/coresight/coresight-tpdm.h | 3 ++
3 files changed, 39 insertions(+)
diff --git a/Documentation/ABI/testing/sysfs-bus-coresight-devices-tpdm b/Documentation/ABI/testing/sysfs-bus-coresight-devices-tpdm
index e833edfec79e..fcc2a8f1f17f 100644
--- a/Documentation/ABI/testing/sysfs-bus-coresight-devices-tpdm
+++ b/Documentation/ABI/testing/sysfs-bus-coresight-devices-tpdm
@@ -265,3 +265,10 @@ Contact: Tao Zhang (QUIC) <quic_taozha@quicinc.com>
Description:
(RW) Set/Get which lane participates in the output pattern
match cross trigger mechanism for the MCMB subunit TPDM.
+
+What: /sys/bus/coresight/devices/<tpdm-name>/mcmb_lanes_select
+Date: Nov 2024
+KernelVersion 6.13
+Contact: Tao Zhang (QUIC) <quic_taozha@quicinc.com>
+Description:
+ (RW) Set/Get the enablement of the individual lane.
diff --git a/drivers/hwtracing/coresight/coresight-tpdm.c b/drivers/hwtracing/coresight/coresight-tpdm.c
index 2e4dc86b03ea..bb0d6505ec9f 100644
--- a/drivers/hwtracing/coresight/coresight-tpdm.c
+++ b/drivers/hwtracing/coresight/coresight-tpdm.c
@@ -1063,6 +1063,34 @@ static ssize_t mcmb_trig_lane_store(struct device *dev,
}
static DEVICE_ATTR_RW(mcmb_trig_lane);
+static ssize_t mcmb_lanes_select_show(struct device *dev,
+ struct device_attribute *attr,
+ char *buf)
+{
+ struct tpdm_drvdata *drvdata = dev_get_drvdata(dev->parent);
+
+ return sysfs_emit(buf, "%u\n",
+ (unsigned int)drvdata->cmb->mcmb.lane_select);
+}
+
+static ssize_t mcmb_lanes_select_store(struct device *dev,
+ struct device_attribute *attr,
+ const char *buf,
+ size_t size)
+{
+ struct tpdm_drvdata *drvdata = dev_get_drvdata(dev->parent);
+ unsigned long val;
+
+ if (kstrtoul(buf, 0, &val) || (val & ~TPDM_MCMB_E_LN_MASK))
+ return -EINVAL;
+
+ guard(spinlock)(&drvdata->spinlock);
+ drvdata->cmb->mcmb.lane_select = val & TPDM_MCMB_E_LN_MASK;
+
+ return size;
+}
+static DEVICE_ATTR_RW(mcmb_lanes_select);
+
static struct attribute *tpdm_dsb_edge_attrs[] = {
&dev_attr_ctrl_idx.attr,
&dev_attr_ctrl_val.attr,
@@ -1227,6 +1255,7 @@ static struct attribute *tpdm_cmb_msr_attrs[] = {
static struct attribute *tpdm_mcmb_attrs[] = {
&dev_attr_mcmb_trig_lane.attr,
+ &dev_attr_mcmb_lanes_select.attr,
NULL,
};
diff --git a/drivers/hwtracing/coresight/coresight-tpdm.h b/drivers/hwtracing/coresight/coresight-tpdm.h
index aa9746b2e77f..a80f3d680995 100644
--- a/drivers/hwtracing/coresight/coresight-tpdm.h
+++ b/drivers/hwtracing/coresight/coresight-tpdm.h
@@ -48,6 +48,9 @@
/* MAX lanes in the output pattern for MCMB configurations*/
#define TPDM_MCMB_MAX_LANES 8
+/* Filter bit 0~7 from the value for CR_E_LN */
+#define TPDM_MCMB_E_LN_MASK GENMASK(7, 0)
+
/* DSB Subunit Registers */
#define TPDM_DSB_CR (0x780)
#define TPDM_DSB_TIER (0x784)
--
2.17.1
^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH v2 0/3] Add support to configure TPDM MCMB subunit
2024-11-05 12:39 [PATCH v2 0/3] Add support to configure TPDM MCMB subunit Mao Jinlong
` (2 preceding siblings ...)
2024-11-05 12:39 ` [PATCH v2 3/3] coresight-tpdm: Add support to enable the lane for MCMB TPDM Mao Jinlong
@ 2024-12-17 7:47 ` Jinlong Mao
3 siblings, 0 replies; 8+ messages in thread
From: Jinlong Mao @ 2024-12-17 7:47 UTC (permalink / raw)
To: Suzuki K Poulose, Mike Leach, James Clark, Alexander Shishkin
Cc: coresight, linux-arm-kernel, linux-kernel, linux-arm-msm
On 2024/11/5 20:39, Mao Jinlong wrote:
> Introduction of TPDM MCMB(Multi-lane Continuous Multi Bit) subunit
> MCMB (Multi-lane CMB) is a special form of CMB dataset type. MCMB
> subunit has the same number and usage of registers as CMB subunit.
> Just like the CMB subunit, the MCMB subunit must be configured prior
> to enablement. This series adds support for TPDM to configure the
> MCMB subunit.
>
> Once this series patches are applied properly, the new tpdm nodes for
> should be observed at the tpdm path /sys/bus/coresight/devices/tpdm*
> which supports MCMB subunit. All sysfs files of CMB subunit TPDM are
> included in MCMB subunit TPDM. On this basis, MCMB subunit TPDM will
> have new sysfs files to select and enable the lane.
>
> Changes in V2:
> 1. Use tdpm_data->cmb instead of (tpdm_has_cmb_dataset(tpdm_data) ||
> tpdm_has_mcmb_dataset(tpdm_data)) for cmb dataset support.
> 2. Embed mcmb_dataset struct into cmb struct.
> 3. Update the date and version in sysfs-bus-coresight-devices-tpdm
>
> Mao Jinlong (1):
> coresight-tpdm: Add MCMB dataset support
>
> Tao Zhang (2):
> coresight-tpdm: Add support to select lane
> coresight-tpdm: Add support to enable the lane for MCMB TPDM
>
> .../testing/sysfs-bus-coresight-devices-tpdm | 15 +++
> drivers/hwtracing/coresight/coresight-tpda.c | 7 +-
> drivers/hwtracing/coresight/coresight-tpdm.c | 124 +++++++++++++++++-
> drivers/hwtracing/coresight/coresight-tpdm.h | 33 +++--
> 4 files changed, 158 insertions(+), 21 deletions(-)
Gentle reminder for the review.
>
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v2 1/3] coresight-tpdm: Add MCMB dataset support
2024-11-05 12:39 ` [PATCH v2 1/3] coresight-tpdm: Add MCMB dataset support Mao Jinlong
@ 2024-12-17 14:52 ` Suzuki K Poulose
0 siblings, 0 replies; 8+ messages in thread
From: Suzuki K Poulose @ 2024-12-17 14:52 UTC (permalink / raw)
To: Mao Jinlong, Mike Leach, James Clark, Alexander Shishkin
Cc: coresight, linux-arm-kernel, linux-kernel, linux-arm-msm,
Tao Zhang
On 05/11/2024 12:39, Mao Jinlong wrote:
> MCMB (Multi-lane CMB) is a special form of CMB dataset type. MCMB
> subunit TPDM has the same number and usage of registers as CMB
> subunit TPDM. MCMB subunit can be enabled for data collection by
> writing 1 to the first bit of CMB_CR register. The difference is
> that MCMB subunit TPDM needs to select the lane and enable it in
> using it.
>
> Signed-off-by: Tao Zhang <quic_taozha@quicinc.com>
> Signed-off-by: Mao Jinlong <quic_jinlmao@quicinc.com>
> ---
> drivers/hwtracing/coresight/coresight-tpda.c | 7 ++--
> drivers/hwtracing/coresight/coresight-tpdm.c | 44 +++++++++++++++++---
> drivers/hwtracing/coresight/coresight-tpdm.h | 27 ++++++------
> 3 files changed, 57 insertions(+), 21 deletions(-)
>
> diff --git a/drivers/hwtracing/coresight/coresight-tpda.c b/drivers/hwtracing/coresight/coresight-tpda.c
> index bfca103f9f84..4b61b9840740 100644
> --- a/drivers/hwtracing/coresight/coresight-tpda.c
> +++ b/drivers/hwtracing/coresight/coresight-tpda.c
> @@ -1,6 +1,6 @@
> // SPDX-License-Identifier: GPL-2.0
> /*
> - * Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
> + * Copyright (c) 2023-2024 Qualcomm Innovation Center, Inc. All rights reserved.
> */
>
> #include <linux/amba/bus.h>
> @@ -68,11 +68,12 @@ static int tpdm_read_element_size(struct tpda_drvdata *drvdata,
> int rc = -EINVAL;
> struct tpdm_drvdata *tpdm_data = dev_get_drvdata(csdev->dev.parent);
>
> - if (tpdm_has_dsb_dataset(tpdm_data)) {
> + if (tpdm_data->dsb) {
> rc = fwnode_property_read_u32(dev_fwnode(csdev->dev.parent),
> "qcom,dsb-element-bits", &drvdata->dsb_esize);
> }
> - if (tpdm_has_cmb_dataset(tpdm_data)) {
> +
> + if (tpdm_data->cmb) {
> rc = fwnode_property_read_u32(dev_fwnode(csdev->dev.parent),
> "qcom,cmb-element-bits", &drvdata->cmb_esize);
> }
> diff --git a/drivers/hwtracing/coresight/coresight-tpdm.c b/drivers/hwtracing/coresight/coresight-tpdm.c
> index b7d99e91ab84..0529858586c1 100644
> --- a/drivers/hwtracing/coresight/coresight-tpdm.c
> +++ b/drivers/hwtracing/coresight/coresight-tpdm.c
> @@ -1,6 +1,6 @@
> // SPDX-License-Identifier: GPL-2.0
> /*
> - * Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
> + * Copyright (c) 2023-2024 Qualcomm Innovation Center, Inc. All rights reserved.
> */
>
> #include <linux/amba/bus.h>
> @@ -21,6 +21,21 @@
>
> DEFINE_CORESIGHT_DEVLIST(tpdm_devs, "tpdm");
>
> +static bool tpdm_has_dsb_dataset(struct tpdm_drvdata *drvdata)
> +{
> + return (drvdata->datasets & TPDM_PIDR0_DS_DSB);
> +}
> +
> +static bool tpdm_has_cmb_dataset(struct tpdm_drvdata *drvdata)
> +{
> + return (drvdata->datasets & TPDM_PIDR0_DS_CMB);
> +}
> +
> +static bool tpdm_has_mcmb_dataset(struct tpdm_drvdata *drvdata)
> +{
> + return (drvdata->datasets & TPDM_PIDR0_DS_MCMB);
> +}
> +
> /* Read dataset array member with the index number */
> static ssize_t tpdm_simple_dataset_show(struct device *dev,
> struct device_attribute *attr,
> @@ -198,7 +213,7 @@ static umode_t tpdm_cmb_is_visible(struct kobject *kobj,
> struct device *dev = kobj_to_dev(kobj);
> struct tpdm_drvdata *drvdata = dev_get_drvdata(dev->parent);
>
> - if (drvdata && tpdm_has_cmb_dataset(drvdata))
> + if (drvdata && drvdata->cmb)
> return attr->mode;
>
> return 0;
> @@ -246,8 +261,10 @@ static void tpdm_reset_datasets(struct tpdm_drvdata *drvdata)
> drvdata->dsb->trig_type = false;
> }
>
> - if (drvdata->cmb)
> + if (drvdata->cmb) {
> memset(drvdata->cmb, 0, sizeof(struct cmb_dataset));
> + drvdata->cmb->trig_ts = true;
This looks like an unrelated change from the MCMB dataset. Is there an
explanation ? Is this a mistake ? If it is intended, please make it a
separate patch.
> + }
> }
>
> static void set_dsb_mode(struct tpdm_drvdata *drvdata, u32 *val)
> @@ -388,7 +405,7 @@ static void tpdm_enable_cmb(struct tpdm_drvdata *drvdata)
> {
> u32 val, i;
>
> - if (!tpdm_has_cmb_dataset(drvdata))
> + if (!drvdata->cmb)
> return;
>
> /* Configure pattern registers */
> @@ -415,6 +432,19 @@ static void tpdm_enable_cmb(struct tpdm_drvdata *drvdata)
> val |= TPDM_CMB_CR_MODE;
> else
> val &= ~TPDM_CMB_CR_MODE;
> +
> + if (tpdm_has_mcmb_dataset(drvdata)) {
> + val &= ~TPDM_CMB_CR_XTRIG_LNSEL;
> + /* Set the lane participates in tghe output pattern */
minor nit: typo "tghe" => "the"
> + val |= FIELD_PREP(TPDM_CMB_CR_XTRIG_LNSEL,
> + drvdata->cmb->mcmb.trig_lane);
> +
> + /* Set the enablement of the lane */
> + val &= ~TPDM_CMB_CR_E_LN;
> + val |= FIELD_PREP(TPDM_CMB_CR_E_LN,
> + drvdata->cmb->mcmb.lane_select);
> + }
> +
> /* Set the enable bit of CMB control register to 1 */
> val |= TPDM_CMB_CR_ENA;
> writel_relaxed(val, drvdata->base + TPDM_CMB_CR);
> @@ -480,7 +510,7 @@ static void tpdm_disable_cmb(struct tpdm_drvdata *drvdata)
> {
> u32 val;
>
> - if (!tpdm_has_cmb_dataset(drvdata))
> + if (!drvdata->cmb)
> return;
>
> val = readl_relaxed(drvdata->base + TPDM_CMB_CR);
> @@ -542,12 +572,14 @@ static int tpdm_datasets_setup(struct tpdm_drvdata *drvdata)
> if (!drvdata->dsb)
> return -ENOMEM;
> }
> - if (tpdm_has_cmb_dataset(drvdata) && (!drvdata->cmb)) {
> + if ((tpdm_has_cmb_dataset(drvdata) || tpdm_has_mcmb_dataset(drvdata))
> + && (!drvdata->cmb)) {
> drvdata->cmb = devm_kzalloc(drvdata->dev,
> sizeof(*drvdata->cmb), GFP_KERNEL);
> if (!drvdata->cmb)
> return -ENOMEM;
> }
> +
> tpdm_reset_datasets(drvdata);
>
> return 0;
> diff --git a/drivers/hwtracing/coresight/coresight-tpdm.h b/drivers/hwtracing/coresight/coresight-tpdm.h
> index e08d212642e3..fd9153b92335 100644
> --- a/drivers/hwtracing/coresight/coresight-tpdm.h
> +++ b/drivers/hwtracing/coresight/coresight-tpdm.h
> @@ -1,6 +1,6 @@
> /* SPDX-License-Identifier: GPL-2.0 */
> /*
> - * Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
> + * Copyright (c) 2023-2024 Qualcomm Innovation Center, Inc. All rights reserved.
> */
>
> #ifndef _CORESIGHT_CORESIGHT_TPDM_H
> @@ -9,7 +9,7 @@
> /* The max number of the datasets that TPDM supports */
> #define TPDM_DATASETS 7
>
> -/* CMB Subunit Registers */
> +/* CMB/MCMB Subunit Registers */
> #define TPDM_CMB_CR (0xA00)
> /* CMB subunit timestamp insertion enable register */
> #define TPDM_CMB_TIER (0xA04)
> @@ -34,6 +34,10 @@
> #define TPDM_CMB_TIER_XTRIG_TSENAB BIT(1)
> /* For timestamp fo all trace */
> #define TPDM_CMB_TIER_TS_ALL BIT(2)
> +/* MCMB trigger lane select */
> +#define TPDM_CMB_CR_XTRIG_LNSEL GENMASK(20, 18)
> +/* MCMB lane enablement */
> +#define TPDM_CMB_CR_E_LN GENMASK(17, 10)
Please could you move the CMB_CR related defintions together ?
i.e., closer to TPDM_CMB_CR_MODE
Suzuki
>
> /* Patten register number */
> #define TPDM_CMB_MAX_PATT 2
> @@ -112,11 +116,13 @@
> * PERIPHIDR0[0] : Fix to 1 if ImplDef subunit present, else 0
> * PERIPHIDR0[1] : Fix to 1 if DSB subunit present, else 0
> * PERIPHIDR0[2] : Fix to 1 if CMB subunit present, else 0
> + * PERIPHIDR0[6] : Fix to 1 if MCMB subunit present, else 0
> */
>
> #define TPDM_PIDR0_DS_IMPDEF BIT(0)
> #define TPDM_PIDR0_DS_DSB BIT(1)
> #define TPDM_PIDR0_DS_CMB BIT(2)
> +#define TPDM_PIDR0_DS_MCMB BIT(6)
>
> #define TPDM_DSB_MAX_LINES 256
> /* MAX number of EDCR registers */
> @@ -256,6 +262,9 @@ struct dsb_dataset {
> * @patt_ts: Indicates if pattern match for timestamp is enabled.
> * @trig_ts: Indicates if CTI trigger for timestamp is enabled.
> * @ts_all: Indicates if timestamp is enabled for all packets.
> + * struct mcmb_dataset
> + * @mcmb_trig_lane: Save data for trigger lane
> + * @mcmb_lane_select: Save data for lane enablement
> */
> struct cmb_dataset {
> u32 trace_mode;
> @@ -267,6 +276,10 @@ struct cmb_dataset {
> bool patt_ts;
> bool trig_ts;
> bool ts_all;
> + struct {
> + u8 trig_lane;
> + u8 lane_select;
> + } mcmb;
> };
>
> /**
> @@ -324,14 +337,4 @@ struct tpdm_dataset_attribute {
> enum dataset_mem mem;
> u32 idx;
> };
> -
> -static bool tpdm_has_dsb_dataset(struct tpdm_drvdata *drvdata)
> -{
> - return (drvdata->datasets & TPDM_PIDR0_DS_DSB);
> -}
> -
> -static bool tpdm_has_cmb_dataset(struct tpdm_drvdata *drvdata)
> -{
> - return (drvdata->datasets & TPDM_PIDR0_DS_CMB);
> -}
> #endif /* _CORESIGHT_CORESIGHT_TPDM_H */
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v2 2/3] coresight-tpdm: Add support to select lane
2024-11-05 12:39 ` [PATCH v2 2/3] coresight-tpdm: Add support to select lane Mao Jinlong
@ 2024-12-17 14:54 ` Suzuki K Poulose
0 siblings, 0 replies; 8+ messages in thread
From: Suzuki K Poulose @ 2024-12-17 14:54 UTC (permalink / raw)
To: Mao Jinlong, Mike Leach, James Clark, Alexander Shishkin
Cc: Tao Zhang, coresight, linux-arm-kernel, linux-kernel,
linux-arm-msm
On 05/11/2024 12:39, Mao Jinlong wrote:
> From: Tao Zhang <quic_taozha@quicinc.com>
>
> TPDM MCMB subunits supports up to 8 lanes CMB. For MCMB
> configurations, the field "XTRIG_LNSEL" in CMB_CR register selects
> which lane participates in the output pattern mach cross trigger
> mechanism governed by the M_CMB_DXPR and M_CMB_XPMR regisers.
>
> Signed-off-by: Tao Zhang <quic_taozha@quicinc.com>
> Signed-off-by: Mao Jinlong <quic_jinlmao@quicinc.com>
> ---
> .../testing/sysfs-bus-coresight-devices-tpdm | 8 +++
> drivers/hwtracing/coresight/coresight-tpdm.c | 51 +++++++++++++++++++
> drivers/hwtracing/coresight/coresight-tpdm.h | 3 ++
> 3 files changed, 62 insertions(+)
>
> diff --git a/Documentation/ABI/testing/sysfs-bus-coresight-devices-tpdm b/Documentation/ABI/testing/sysfs-bus-coresight-devices-tpdm
> index bf710ea6e0ef..e833edfec79e 100644
> --- a/Documentation/ABI/testing/sysfs-bus-coresight-devices-tpdm
> +++ b/Documentation/ABI/testing/sysfs-bus-coresight-devices-tpdm
> @@ -257,3 +257,11 @@ Contact: Jinlong Mao (QUIC) <quic_jinlmao@quicinc.com>, Tao Zhang (QUIC) <quic_t
> Description:
> (RW) Set/Get the MSR(mux select register) for the CMB subunit
> TPDM.
> +
> +What: /sys/bus/coresight/devices/<tpdm-name>/mcmb_trig_lane
> +Date: Nov 2024
> +KernelVersion 6.13
6.14
Suzuki
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v2 3/3] coresight-tpdm: Add support to enable the lane for MCMB TPDM
2024-11-05 12:39 ` [PATCH v2 3/3] coresight-tpdm: Add support to enable the lane for MCMB TPDM Mao Jinlong
@ 2024-12-17 14:55 ` Suzuki K Poulose
0 siblings, 0 replies; 8+ messages in thread
From: Suzuki K Poulose @ 2024-12-17 14:55 UTC (permalink / raw)
To: Mao Jinlong, Mike Leach, James Clark, Alexander Shishkin
Cc: Tao Zhang, coresight, linux-arm-kernel, linux-kernel,
linux-arm-msm
On 05/11/2024 12:39, Mao Jinlong wrote:
> From: Tao Zhang <quic_taozha@quicinc.com>
>
> Add the sysfs file to set/get the enablement of the lane. For MCMB
> configurations, the field "E_LN" in CMB_CR register is the
> individual lane enables. MCMB lane N is enabled for trace
> generation when M_CMB_CR.E=1 and M_CMB_CR.E_LN[N]=1. For lanes
> that are not implemented on a given MCMB configuration, the
> corresponding bits of this field read as 0 and ignore writes.
>
> Signed-off-by: Tao Zhang <quic_taozha@quicinc.com>
> Signed-off-by: Mao Jinlong <quic_jinlmao@quicinc.com>
> ---
> .../testing/sysfs-bus-coresight-devices-tpdm | 7 +++++
> drivers/hwtracing/coresight/coresight-tpdm.c | 29 +++++++++++++++++++
> drivers/hwtracing/coresight/coresight-tpdm.h | 3 ++
> 3 files changed, 39 insertions(+)
>
> diff --git a/Documentation/ABI/testing/sysfs-bus-coresight-devices-tpdm b/Documentation/ABI/testing/sysfs-bus-coresight-devices-tpdm
> index e833edfec79e..fcc2a8f1f17f 100644
> --- a/Documentation/ABI/testing/sysfs-bus-coresight-devices-tpdm
> +++ b/Documentation/ABI/testing/sysfs-bus-coresight-devices-tpdm
> @@ -265,3 +265,10 @@ Contact: Tao Zhang (QUIC) <quic_taozha@quicinc.com>
> Description:
> (RW) Set/Get which lane participates in the output pattern
> match cross trigger mechanism for the MCMB subunit TPDM.
> +
> +What: /sys/bus/coresight/devices/<tpdm-name>/mcmb_lanes_select
> +Date: Nov 2024
> +KernelVersion 6.13
6.14
Suzuki
> +Contact: Tao Zhang (QUIC) <quic_taozha@quicinc.com>
> +Description:
> + (RW) Set/Get the enablement of the individual lane.
> diff --git a/drivers/hwtracing/coresight/coresight-tpdm.c b/drivers/hwtracing/coresight/coresight-tpdm.c
> index 2e4dc86b03ea..bb0d6505ec9f 100644
> --- a/drivers/hwtracing/coresight/coresight-tpdm.c
> +++ b/drivers/hwtracing/coresight/coresight-tpdm.c
> @@ -1063,6 +1063,34 @@ static ssize_t mcmb_trig_lane_store(struct device *dev,
> }
> static DEVICE_ATTR_RW(mcmb_trig_lane);
>
> +static ssize_t mcmb_lanes_select_show(struct device *dev,
> + struct device_attribute *attr,
> + char *buf)
> +{
> + struct tpdm_drvdata *drvdata = dev_get_drvdata(dev->parent);
> +
> + return sysfs_emit(buf, "%u\n",
> + (unsigned int)drvdata->cmb->mcmb.lane_select);
> +}
> +
> +static ssize_t mcmb_lanes_select_store(struct device *dev,
> + struct device_attribute *attr,
> + const char *buf,
> + size_t size)
> +{
> + struct tpdm_drvdata *drvdata = dev_get_drvdata(dev->parent);
> + unsigned long val;
> +
> + if (kstrtoul(buf, 0, &val) || (val & ~TPDM_MCMB_E_LN_MASK))
> + return -EINVAL;
> +
> + guard(spinlock)(&drvdata->spinlock);
> + drvdata->cmb->mcmb.lane_select = val & TPDM_MCMB_E_LN_MASK;
> +
> + return size;
> +}
> +static DEVICE_ATTR_RW(mcmb_lanes_select);
> +
> static struct attribute *tpdm_dsb_edge_attrs[] = {
> &dev_attr_ctrl_idx.attr,
> &dev_attr_ctrl_val.attr,
> @@ -1227,6 +1255,7 @@ static struct attribute *tpdm_cmb_msr_attrs[] = {
>
> static struct attribute *tpdm_mcmb_attrs[] = {
> &dev_attr_mcmb_trig_lane.attr,
> + &dev_attr_mcmb_lanes_select.attr,
> NULL,
> };
>
> diff --git a/drivers/hwtracing/coresight/coresight-tpdm.h b/drivers/hwtracing/coresight/coresight-tpdm.h
> index aa9746b2e77f..a80f3d680995 100644
> --- a/drivers/hwtracing/coresight/coresight-tpdm.h
> +++ b/drivers/hwtracing/coresight/coresight-tpdm.h
> @@ -48,6 +48,9 @@
> /* MAX lanes in the output pattern for MCMB configurations*/
> #define TPDM_MCMB_MAX_LANES 8
>
> +/* Filter bit 0~7 from the value for CR_E_LN */
> +#define TPDM_MCMB_E_LN_MASK GENMASK(7, 0)
> +
> /* DSB Subunit Registers */
> #define TPDM_DSB_CR (0x780)
> #define TPDM_DSB_TIER (0x784)
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2024-12-17 14:57 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-11-05 12:39 [PATCH v2 0/3] Add support to configure TPDM MCMB subunit Mao Jinlong
2024-11-05 12:39 ` [PATCH v2 1/3] coresight-tpdm: Add MCMB dataset support Mao Jinlong
2024-12-17 14:52 ` Suzuki K Poulose
2024-11-05 12:39 ` [PATCH v2 2/3] coresight-tpdm: Add support to select lane Mao Jinlong
2024-12-17 14:54 ` Suzuki K Poulose
2024-11-05 12:39 ` [PATCH v2 3/3] coresight-tpdm: Add support to enable the lane for MCMB TPDM Mao Jinlong
2024-12-17 14:55 ` Suzuki K Poulose
2024-12-17 7:47 ` [PATCH v2 0/3] Add support to configure TPDM MCMB subunit Jinlong Mao
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).