Re: [PATCH v3 05/11] coresight-tpdm: Add nodes to set trigger timestamp and type

Suzuki K Poulose
2023-04-01T09:31:02Z

On 23/03/2023 06:04, Tao Zhang wrote:
> The nodes are needed to set or show the trigger timestamp and
> trigger type. This change is to add these nodes to achieve these
> function.
>
> Signed-off-by: Tao Zhang <quic_taozha@quicinc.com>
> ---
> .../ABI/testing/sysfs-bus-coresight-devices-tpdm | 24 ++++++
> drivers/hwtracing/coresight/coresight-tpdm.c | 95 ++++++++++++++++++++++
> 2 files changed, 119 insertions(+)
>
> diff --git a/Documentation/ABI/testing/sysfs-bus-coresight-devices-tpdm b/Documentation/ABI/testing/sysfs-bus-coresight-devices-tpdm
> index 4a58e64..27ce681 100644
> --- a/Documentation/ABI/testing/sysfs-bus-coresight-devices-tpdm
> +++ b/Documentation/ABI/testing/sysfs-bus-coresight-devices-tpdm
> @@ -11,3 +11,27 @@ 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>/dsb_trig_type
> +Date: March 2023
> +KernelVersion 6.3
> +Contact: Jinlong Mao (QUIC) <quic_jinlmao@quicinc.com>, Tao Zhang (QUIC) <quic_taozha@quicinc.com>
> +Description:
> + (Write) Set the trigger type of DSB tpdm. Read the trigger
> + type of DSB tpdm.
> +
> + Accepts only one of the 2 values - 0 or 1.
> + 0 : Set the DSB trigger type to false
> + 1 : Set the DSB trigger type to true
> +
> +What: /sys/bus/coresight/devices/<tpdm-name>/dsb_trig_ts
> +Date: March 2023
> +KernelVersion 6.3
> +Contact: Jinlong Mao (QUIC) <quic_jinlmao@quicinc.com>, Tao Zhang (QUIC) <quic_taozha@quicinc.com>
> +Description:
> + (Write) Set the trigger timestamp of DSB tpdm. Read the
> + trigger timestamp of DSB tpdm.
> +
> + Accepts only one of the 2 values - 0 or 1.
> + 0 : Set the DSB trigger type to false
> + 1 : Set the DSB trigger type to true
> diff --git a/drivers/hwtracing/coresight/coresight-tpdm.c b/drivers/hwtracing/coresight/coresight-tpdm.c
> index 104638d..e28cf10 100644
> --- a/drivers/hwtracing/coresight/coresight-tpdm.c
> +++ b/drivers/hwtracing/coresight/coresight-tpdm.c
> @@ -20,6 +20,19 @@
>
> DEFINE_CORESIGHT_DEVLIST(tpdm_devs, "tpdm");
>
> +static umode_t tpdm_dsb_is_visible(struct kobject *kobj,
> + struct attribute *attr, int n)

minor nit: alignment. extra tabs

> +{
> + struct device *dev = kobj_to_dev(kobj);
> + struct tpdm_drvdata *drvdata = dev_get_drvdata(dev->parent);
> +
> + if (drvdata)
> + if (drvdata->datasets & TPDM_PIDR0_DS_DSB)
> + return attr->mode;

minor nit:
if (drvdata && drvdata->dataset & TPDM_PIDR0_DS_DSB) ?

> +
> + return 0;
> +}
> +
> static int tpdm_init_datasets(struct tpdm_drvdata *drvdata)
> {
> if (drvdata->datasets & TPDM_PIDR0_DS_DSB) {
> @@ -237,8 +250,90 @@ static struct attribute_group tpdm_attr_grp = {
> .attrs = tpdm_attrs,
> };
>
> +static ssize_t dsb_trig_type_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->dsb->trig_type);
> +}
> +
> +/*
> + * value 0: set trigger type as enablement
> + * value 1: set trigger type as disablement
> + */

minor nit: The above looks confusing.

/*
* Trigger type (boolean):
* false - Disable trigger type.
* true - Enable trigger type.
*/

> +static ssize_t dsb_trig_type_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 & ~1UL))
> + return -EINVAL;
> +
> + spin_lock(&drvdata->spinlock);
> + if (val)
> + drvdata->dsb->trig_type = true;
> + else
> + drvdata->dsb->trig_type = false;
> + spin_unlock(&drvdata->spinlock);
> + return size;
> +}
> +static DEVICE_ATTR_RW(dsb_trig_type);
> +
> +static ssize_t dsb_trig_ts_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->dsb->trig_ts);
> +}
> +
> +/*
> + * value 0: set trigger timestamp as enablement
> + * value 1: set trigger timestamp as disablement
> + */

Same as above.

Otherwise looks good to me

Suzuki