[PATCH v4 05/10] coresight-tpdm: Add integration test support

Greg Kroah-Hartman gregkh at linuxfoundation.org
Thu Mar 24 05:28:03 PDT 2022


On Thu, Mar 24, 2022 at 08:17:29PM +0800, Mao Jinlong wrote:
> Integration test for tpdm can help to generate the data for
> verification of the topology during TPDM software bring up.
> 
> Sample:
> echo 1 > /sys/bus/coresight/devices/tmc_etf0/enable_sink
> echo 1 > /sys/bus/coresight/devices/tpdm1/enable_source
> echo 1 > /sys/bus/coresight/devices/tpdm1/integration_test
> echo 2 > /sys/bus/coresight/devices/tpdm1/integration_test
> cat /dev/tmc_etf0 > /data/etf-tpdm1.bin
> 
> Signed-off-by: Tao Zhang <quic_taozha at quicinc.com>
> Signed-off-by: Mao Jinlong <quic_jinlmao at quicinc.com>
> ---
>  drivers/hwtracing/coresight/Kconfig          |  9 ++++
>  drivers/hwtracing/coresight/coresight-tpdm.c | 56 +++++++++++++++++++-
>  drivers/hwtracing/coresight/coresight-tpdm.h |  8 +++
>  3 files changed, 72 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/hwtracing/coresight/Kconfig b/drivers/hwtracing/coresight/Kconfig
> index 5c506a1cd08f..60248fef4089 100644
> --- a/drivers/hwtracing/coresight/Kconfig
> +++ b/drivers/hwtracing/coresight/Kconfig
> @@ -214,4 +214,13 @@ config CORESIGHT_TPDM
>  	  To compile this driver as a module, choose M here: the module will be
>  	  called coresight-tpdm.
>  
> +config CORESIGHT_TPDM_INTEGRATION_TEST
> +	bool "Enable CoreSight Integration Test For TPDM"
> +	depends on CORESIGHT_TPDM
> +	help
> +	  This option adds support for the CoreSight integration test on this
> +	  devie. Coresight architecture provides integration control modes of
> +	  operation to facilitate integration testing and software bringup
> +	  and/or to instrument topology discovery. The TPDM utilizes integration
> +	  mode to accomplish integration testing and software bringup.

Why is this a Kconfig option?  Why would you never not want this?

>  endif
> diff --git a/drivers/hwtracing/coresight/coresight-tpdm.c b/drivers/hwtracing/coresight/coresight-tpdm.c
> index a8d257a591f3..cddd398be0cd 100644
> --- a/drivers/hwtracing/coresight/coresight-tpdm.c
> +++ b/drivers/hwtracing/coresight/coresight-tpdm.c
> @@ -124,7 +124,60 @@ static void tpdm_init_default_data(struct tpdm_drvdata *drvdata)
>  			__set_bit(i, drvdata->datasets);
>  	}
>  	CS_LOCK(drvdata->base);
> - }
> +}
> +
> +#ifdef CONFIG_CORESIGHT_TPDM_INTEGRATION_TEST

Try to keep #ifdefs out of .c files please.

> +static ssize_t integration_test_store(struct device *dev,
> +					  struct device_attribute *attr,
> +					  const char *buf,
> +					  size_t size)
> +{
> +	int i, ret = 0;
> +	unsigned long val;
> +	struct tpdm_drvdata *drvdata = dev_get_drvdata(dev->parent);
> +
> +	ret = kstrtoul(buf, 10, &val);
> +	if (ret)
> +		return ret;
> +
> +	if (val != 1 && val != 2)
> +		return -EINVAL;
> +
> +	if (!drvdata->enable)
> +		return -EINVAL;
> +
> +	if (val == 1)
> +		val = ATBCNTRL_VAL_64;
> +	else
> +		val = ATBCNTRL_VAL_32;
> +	CS_UNLOCK(drvdata->base);
> +	writel_relaxed(0x1, drvdata->base + TPDM_ITCNTRL);
> +
> +	for (i = 1; i < 5; i++)
> +		writel_relaxed(val, drvdata->base + TPDM_ITATBCNTRL);
> +
> +	writel_relaxed(0, drvdata->base + TPDM_ITCNTRL);
> +	CS_LOCK(drvdata->base);
> +	return size;
> +}
> +static DEVICE_ATTR_WO(integration_test);
> +#endif /* CORESIGHT_TPDM_INTEGRATION_TEST */
> +
> +static struct attribute *tpdm_attrs[] = {
> +#ifdef CONFIG_CORESIGHT_TPDM_INTEGRATION_TEST
> +	&dev_attr_integration_test.attr,
> +#endif /* CORESIGHT_TPDM_INTEGRATION_TEST */
> +	NULL,
> +};
> +
> +static struct attribute_group tpdm_attr_grp = {
> +	.attrs = tpdm_attrs,
> +};
> +
> +static const struct attribute_group *tpdm_attr_grps[] = {
> +	&tpdm_attr_grp,
> +	NULL,
> +};

ATTRIBUTE_GROUPS()?

thanks,

greg k-h



More information about the linux-arm-kernel mailing list