On 6/20/2023 4:49 PM, Greg Kroah-Hartman wrote:
On Tue, Jun 20, 2023 at 04:31:59PM +0800, Tao Zhang wrote:
On 6/20/2023 3:37 PM, Greg Kroah-Hartman wrote:
On Tue, Jun 20, 2023 at 03:32:37PM +0800, Tao Zhang wrote:
Add the nodes to set value for DSB edge control and DSB edge
control mask. Each DSB subunit TPDM has maximum of n(n<16) EDCR
resgisters to configure edge control. DSB edge detection control
00: Rising edge detection
01: Falling edge detection
10: Rising and falling edge detection (toggle detection)
And each DSB subunit TPDM has maximum of m(m<8) ECDMR registers to
configure mask. Eight 32 bit registers providing DSB interface
edge detection mask control.

Signed-off-by: Tao Zhang <quic_taozha@quicinc.com>
---
  .../ABI/testing/sysfs-bus-coresight-devices-tpdm   |  32 +++++
  drivers/hwtracing/coresight/coresight-tpdm.c       | 143 ++++++++++++++++++++-
  drivers/hwtracing/coresight/coresight-tpdm.h       |  22 ++++
  3 files changed, 196 insertions(+), 1 deletion(-)

diff --git a/Documentation/ABI/testing/sysfs-bus-coresight-devices-tpdm b/Documentation/ABI/testing/sysfs-bus-coresight-devices-tpdm
index 2a82cd0..34189e4a 100644
--- a/Documentation/ABI/testing/sysfs-bus-coresight-devices-tpdm
+++ b/Documentation/ABI/testing/sysfs-bus-coresight-devices-tpdm
@@ -60,3 +60,35 @@ Description:
  		Bit[3] : Set to 0 for low performance mode.
  				 Set to 1 for high performance mode.
  		Bit[4:8] : Select byte lane for high performance mode.
+
+What:		/sys/bus/coresight/devices/<tpdm-name>/dsb_edge_ctrl
+Date:		March 2023
+KernelVersion	6.5
+Contact:	Jinlong Mao (QUIC) <quic_jinlmao@quicinc.com>, Tao Zhang (QUIC) <quic_taozha@quicinc.com>
+Description:
+		Read/Write a set of the edge control registers of the DSB
+		in TPDM.
+
+		Expected format is the following:
+		<integer1> <integer2> <integer3>
sysfs is "one value", not 3.  Please never have to parse a sysfs file.
Do you mean sysfs file can only accept "one value"?
Yes.

Hi Greg,


I‘d like to clarify the usage of this sysfs file again.

In the current design, three integers will be written to "dsb_edge_ctrl" to configure DSB edge detection.

Integer #1: The start number of edge detection which needs to be configured.

Integer #2: The end number of edge detection which needs to be configured.

Integer #3: The type of the edge detection needs to be configured.

Below is an example.

echo 0x3 0x25 0x1 > dsb_edge_ctrl

It will configure edge detection #3 to #37 as "falling edge detection".

Since these three integers are interrelated and written to achieve the same function, can we use these three integers as "one tuple" here?


Best,

Tao


I see that more than one value are written to the sysfs file
"trigout_attach".
Then someone missed that and it needs to be fixed.

+static ssize_t dsb_edge_ctrl_show(struct device *dev,
+				       struct device_attribute *attr,
+				       char *buf)
+{
+	struct tpdm_drvdata *drvdata = dev_get_drvdata(dev->parent);
+	ssize_t size = 0;
+	unsigned long bytes;
+	int i;
+
+	spin_lock(&drvdata->spinlock);
+	for (i = 0; i < TPDM_DSB_MAX_EDCR; i++) {
+		bytes = sysfs_emit_at(buf, size,
+				  "Index:0x%x Val:0x%x\n", i,
Again, no, one value, no "string" needed to parse anything.
I also see other sysfs files can be read more than one value in other
drivers.
Again, they are broken, please send patches to fix them.

Is this "one value" limitation the usage rule of Linux sysfs system?
Yes.

thanks,

greg k-h