coresight-tpdm: Add reset node to TPDM node
authorTao Zhang <quic_taozha@quicinc.com>
Thu, 28 Sep 2023 06:29:39 +0000 (14:29 +0800)
committerSuzuki K Poulose <suzuki.poulose@arm.com>
Thu, 16 Nov 2023 11:35:27 +0000 (11:35 +0000)
TPDM device need a node to reset the configurations and status of
it. This change provides a node to reset the configurations and
disable the TPDM if it has been enabled.

Signed-off-by: Tao Zhang <quic_taozha@quicinc.com>
Signed-off-by: Suzuki K Poulose <suzuki.poulose@arm.com>
Link: https://lore.kernel.org/r/1695882586-10306-7-git-send-email-quic_taozha@quicinc.com
Documentation/ABI/testing/sysfs-bus-coresight-devices-tpdm
drivers/hwtracing/coresight/coresight-tpdm.c

index 4a58e649550d580980e6a35985110f12508399dd..ef8b5a6bd4ac4ca31a20c080f5731ae9aa963f6c 100644 (file)
@@ -11,3 +11,13 @@ Description:
                Accepts only one of the 2 values -  1 or 2.
                1 : Generate 64 bits data
                2 : Generate 32 bits data
+
+What:          /sys/bus/coresight/devices/<tpdm-name>/reset_dataset
+Date:          March 2023
+KernelVersion  6.7
+Contact:       Jinlong Mao (QUIC) <quic_jinlmao@quicinc.com>, Tao Zhang (QUIC) <quic_taozha@quicinc.com>
+Description:
+               (Write) Reset the dataset of the tpdm.
+
+               Accepts only one value -  1.
+               1 : Reset the dataset of the tpdm
index 951ad4d9b76fb29f5d47a7576f3089730b3e4910..9c65e4c01128ced43062a5bccd9977bb5e5a4627 100644 (file)
@@ -162,6 +162,27 @@ static int tpdm_datasets_setup(struct tpdm_drvdata *drvdata)
        return 0;
 }
 
+static ssize_t reset_dataset_store(struct device *dev,
+                                  struct device_attribute *attr,
+                                  const char *buf,
+                                  size_t size)
+{
+       int ret = 0;
+       unsigned long val;
+       struct tpdm_drvdata *drvdata = dev_get_drvdata(dev->parent);
+
+       ret = kstrtoul(buf, 0, &val);
+       if (ret || val != 1)
+               return -EINVAL;
+
+       spin_lock(&drvdata->spinlock);
+       tpdm_reset_datasets(drvdata);
+       spin_unlock(&drvdata->spinlock);
+
+       return size;
+}
+static DEVICE_ATTR_WO(reset_dataset);
+
 /*
  * value 1: 64 bits test data
  * value 2: 32 bits test data
@@ -202,6 +223,7 @@ static ssize_t integration_test_store(struct device *dev,
 static DEVICE_ATTR_WO(integration_test);
 
 static struct attribute *tpdm_attrs[] = {
+       &dev_attr_reset_dataset.attr,
        &dev_attr_integration_test.attr,
        NULL,
 };