Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 132f04bd authored by Mulu He's avatar Mulu He Committed by Gerrit - the friendly Code Review server
Browse files

coresight: tpdm: Add reset datasets interface



Add reset datasets interface for user space reset all datasets to
initial status.

Change-Id: Iea653d7a0ee13b06d0672593ac5bcbafec25f8f2
Signed-off-by: default avatarMulu He <muluhe@codeaurora.org>
parent 292276ff
Loading
Loading
Loading
Loading
+54 −0
Original line number Diff line number Diff line
@@ -272,6 +272,8 @@ struct tpdm_drvdata {
	bool			msr_fix_req;
};

static void tpdm_init_default_data(struct tpdm_drvdata *drvdata);

static void tpdm_setup_disable(struct tpdm_drvdata *drvdata)
{
	int i;
@@ -897,6 +899,57 @@ static ssize_t tpdm_store_enable_datasets(struct device *dev,
static DEVICE_ATTR(enable_datasets, 0644,
		   tpdm_show_enable_datasets, tpdm_store_enable_datasets);

static ssize_t reset_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, 10, &val);
	if (ret)
		return ret;

	mutex_lock(&drvdata->lock);
	/* Reset all datasets to ZERO */
	if (drvdata->gpr != NULL)
		memset(drvdata->gpr, 0, sizeof(struct gpr_dataset));

	if (drvdata->bc != NULL)
		memset(drvdata->bc, 0, sizeof(struct bc_dataset));

	if (drvdata->dsb != NULL)
		memset(drvdata->dsb, 0, sizeof(struct dsb_dataset));

	if (drvdata->cmb != NULL) {
		if (drvdata->cmb->mcmb != NULL)
			memset(drvdata->cmb->mcmb, 0,
				sizeof(struct mcmb_dataset));

		memset(drvdata->cmb, 0, sizeof(struct cmb_dataset));
	}
	/* Init the default data */
	tpdm_init_default_data(drvdata);

	/* Disable tpdm if enabled */
	if (drvdata->enable) {
		__tpdm_disable(drvdata);
		drvdata->enable = false;
	}

	mutex_unlock(&drvdata->lock);

	if (drvdata->enable) {
		tpdm_setup_disable(drvdata);
		dev_info(drvdata->dev, "TPDM tracing disabled\n");
	}

	return size;
}
static DEVICE_ATTR_WO(reset);

static ssize_t tpdm_show_gp_regs(struct device *dev,
				 struct device_attribute *attr,
				 char *buf)
@@ -4208,6 +4261,7 @@ static struct attribute_group tpdm_cmb_attr_grp = {
static struct attribute *tpdm_attrs[] = {
	&dev_attr_available_datasets.attr,
	&dev_attr_enable_datasets.attr,
	&dev_attr_reset.attr,
	&dev_attr_gp_regs.attr,
	NULL,
};