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

Commit 0e89c08f authored by Mao Jinlong's avatar Mao Jinlong
Browse files

coresight: Replace functions for tpdm's clocks/regulators



Use command functions of coresight components to enable/disable
tpdm's clocks/regulators.

Change-Id: I4d8c570cd31c5f4162b602cea6f5c6d4e08448f0
Signed-off-by: default avatarMao Jinlong <jinlmao@codeaurora.org>
parent 4000d38b
Loading
Loading
Loading
Loading
+118 −163
Original line number Diff line number Diff line
@@ -268,45 +268,6 @@ struct tpdm_drvdata {

static void tpdm_init_default_data(struct tpdm_drvdata *drvdata);

static void tpdm_setup_disable(struct tpdm_drvdata *drvdata)
{
	int i;

	for (i = 0; i < drvdata->nr_tclk; i++)
		clk_disable_unprepare(drvdata->tclk[i]);
	for (i = 0; i < drvdata->nr_treg; i++)
		regulator_disable(drvdata->treg[i]);
}

int tpdm_setup_enable(struct tpdm_drvdata *drvdata)
{
	int ret;
	int i, j;

	for (i = 0; i < drvdata->nr_treg; i++) {
		ret = regulator_enable(drvdata->treg[i]);
		if (ret)
			goto err_regs;
	}

	for (j = 0; j < drvdata->nr_tclk; j++) {
		ret = clk_prepare_enable(drvdata->tclk[j]);
		if (ret)
			goto err_clks;
	}

	return 0;

err_clks:
	for (j--; j >= 0; j--)
		clk_disable_unprepare(drvdata->tclk[j]);
err_regs:
	for (i--; i >= 0; i--)
		regulator_disable(drvdata->treg[i]);

	return ret;
}

static void __tpdm_enable_gpr(struct tpdm_drvdata *drvdata)
{
	int i;
@@ -706,12 +667,6 @@ static int tpdm_enable(struct coresight_device *csdev,
		return ret;
	}

	ret = tpdm_setup_enable(drvdata);
	if (ret) {
		dev_err(drvdata->dev, "TPDM setup failed. Skipping enable\n");
		return ret;
	}

	mutex_lock(&drvdata->lock);
	__tpdm_enable(drvdata);
	drvdata->enable = true;
@@ -795,8 +750,6 @@ static void tpdm_disable(struct coresight_device *csdev,
	drvdata->enable = false;
	mutex_unlock(&drvdata->lock);

	tpdm_setup_disable(drvdata);

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

@@ -1024,14 +977,14 @@ static ssize_t bc_capture_mode_store(struct device *dev,
	if (!test_bit(TPDM_DS_BC, drvdata->enable_ds))
		return -EPERM;

	ret = tpdm_setup_enable(drvdata);
	ret = coresight_enable_reg_clk(drvdata->csdev);
	if (ret)
		return ret;

	mutex_lock(&drvdata->lock);
	if (!drvdata->enable) {
		mutex_unlock(&drvdata->lock);
		tpdm_setup_disable(drvdata);
		coresight_disable_reg_clk(drvdata->csdev);
		return -EPERM;
	}

@@ -1049,12 +1002,12 @@ static ssize_t bc_capture_mode_store(struct device *dev,
		drvdata->bc->capture_mode = TPDM_MODE_APB;
	} else {
		mutex_unlock(&drvdata->lock);
		tpdm_setup_disable(drvdata);
		coresight_disable_reg_clk(drvdata->csdev);
		return -EINVAL;
	}

	mutex_unlock(&drvdata->lock);
	tpdm_setup_disable(drvdata);
	coresight_disable_reg_clk(drvdata->csdev);
	return size;
}
static DEVICE_ATTR_RW(bc_capture_mode);
@@ -1121,14 +1074,14 @@ static ssize_t bc_reset_counters_store(struct device *dev,
	if (!test_bit(TPDM_DS_BC, drvdata->enable_ds))
		return -EPERM;

	ret = tpdm_setup_enable(drvdata);
	ret = coresight_enable_reg_clk(drvdata->csdev);
	if (ret)
		return ret;

	mutex_lock(&drvdata->lock);
	if (!drvdata->enable) {
		mutex_unlock(&drvdata->lock);
		tpdm_setup_disable(drvdata);
		coresight_disable_reg_clk(drvdata->csdev);
		return -EPERM;
	}

@@ -1141,7 +1094,7 @@ static ssize_t bc_reset_counters_store(struct device *dev,
	}

	mutex_unlock(&drvdata->lock);
	tpdm_setup_disable(drvdata);
	coresight_disable_reg_clk(drvdata->csdev);
	return size;
}
static DEVICE_ATTR_WO(bc_reset_counters);
@@ -1482,14 +1435,14 @@ static ssize_t bc_ovsr_show(struct device *dev,
	if (!test_bit(TPDM_DS_BC, drvdata->enable_ds))
		return -EPERM;

	ret = tpdm_setup_enable(drvdata);
	ret = coresight_enable_reg_clk(drvdata->csdev);
	if (ret)
		return ret;

	mutex_lock(&drvdata->lock);
	if (!drvdata->enable) {
		mutex_unlock(&drvdata->lock);
		tpdm_setup_disable(drvdata);
		coresight_disable_reg_clk(drvdata->csdev);
		return -EPERM;
	}

@@ -1497,7 +1450,7 @@ static ssize_t bc_ovsr_show(struct device *dev,
	val = tpdm_readl(drvdata, TPDM_BC_OVSR);
	TPDM_LOCK(drvdata);
	mutex_unlock(&drvdata->lock);
	tpdm_setup_disable(drvdata);
	coresight_disable_reg_clk(drvdata->csdev);
	return scnprintf(buf, PAGE_SIZE, "%lx\n", val);
}

@@ -1515,14 +1468,14 @@ static ssize_t bc_ovsr_store(struct device *dev,
	if (!test_bit(TPDM_DS_BC, drvdata->enable_ds))
		return -EPERM;

	ret = tpdm_setup_enable(drvdata);
	ret = coresight_enable_reg_clk(drvdata->csdev);
	if (ret)
		return ret;

	mutex_lock(&drvdata->lock);
	if (!drvdata->enable) {
		mutex_unlock(&drvdata->lock);
		tpdm_setup_disable(drvdata);
		coresight_disable_reg_clk(drvdata->csdev);
		return -EPERM;
	}

@@ -1532,7 +1485,7 @@ static ssize_t bc_ovsr_store(struct device *dev,
		TPDM_LOCK(drvdata);
	}
	mutex_unlock(&drvdata->lock);
	tpdm_setup_disable(drvdata);
	coresight_disable_reg_clk(drvdata->csdev);
	return size;
}
static DEVICE_ATTR_RW(bc_ovsr);
@@ -1548,14 +1501,14 @@ static ssize_t bc_counter_sel_show(struct device *dev,
	if (!test_bit(TPDM_DS_BC, drvdata->enable_ds))
		return -EPERM;

	ret = tpdm_setup_enable(drvdata);
	ret = coresight_enable_reg_clk(drvdata->csdev);
	if (ret)
		return ret;

	mutex_lock(&drvdata->lock);
	if (!drvdata->enable) {
		mutex_unlock(&drvdata->lock);
		tpdm_setup_disable(drvdata);
		coresight_disable_reg_clk(drvdata->csdev);
		return -EPERM;
	}

@@ -1563,7 +1516,7 @@ static ssize_t bc_counter_sel_show(struct device *dev,
	val = tpdm_readl(drvdata, TPDM_BC_SELR);
	TPDM_LOCK(drvdata);
	mutex_unlock(&drvdata->lock);
	tpdm_setup_disable(drvdata);
	coresight_disable_reg_clk(drvdata->csdev);
	return scnprintf(buf, PAGE_SIZE, "%lx\n", val);
}

@@ -1581,14 +1534,14 @@ static ssize_t bc_counter_sel_store(struct device *dev,
	if (!test_bit(TPDM_DS_BC, drvdata->enable_ds))
		return -EPERM;

	ret = tpdm_setup_enable(drvdata);
	ret = coresight_enable_reg_clk(drvdata->csdev);
	if (ret)
		return ret;

	mutex_lock(&drvdata->lock);
	if (!drvdata->enable || val >= drvdata->bc_counters_avail) {
		mutex_unlock(&drvdata->lock);
		tpdm_setup_disable(drvdata);
		coresight_disable_reg_clk(drvdata->csdev);
		return -EPERM;
	}

@@ -1596,7 +1549,7 @@ static ssize_t bc_counter_sel_store(struct device *dev,
	tpdm_writel(drvdata, val, TPDM_BC_SELR);
	TPDM_LOCK(drvdata);
	mutex_unlock(&drvdata->lock);
	tpdm_setup_disable(drvdata);
	coresight_disable_reg_clk(drvdata->csdev);
	return size;
}
static DEVICE_ATTR_RW(bc_counter_sel);
@@ -1612,14 +1565,14 @@ static ssize_t bc_count_val_lo_show(struct device *dev,
	if (!test_bit(TPDM_DS_BC, drvdata->enable_ds))
		return -EPERM;

	ret = tpdm_setup_enable(drvdata);
	ret = coresight_enable_reg_clk(drvdata->csdev);
	if (ret)
		return ret;

	mutex_lock(&drvdata->lock);
	if (!drvdata->enable) {
		mutex_unlock(&drvdata->lock);
		tpdm_setup_disable(drvdata);
		coresight_disable_reg_clk(drvdata->csdev);
		return -EPERM;
	}

@@ -1627,7 +1580,7 @@ static ssize_t bc_count_val_lo_show(struct device *dev,
	val = tpdm_readl(drvdata, TPDM_BC_CNTR_LO);
	TPDM_LOCK(drvdata);
	mutex_unlock(&drvdata->lock);
	tpdm_setup_disable(drvdata);
	coresight_disable_reg_clk(drvdata->csdev);
	return scnprintf(buf, PAGE_SIZE, "%lx\n", val);
}

@@ -1645,14 +1598,14 @@ static ssize_t bc_count_val_lo_store(struct device *dev,
	if (!test_bit(TPDM_DS_BC, drvdata->enable_ds))
		return -EPERM;

	ret = tpdm_setup_enable(drvdata);
	ret = coresight_enable_reg_clk(drvdata->csdev);
	if (ret)
		return ret;

	mutex_lock(&drvdata->lock);
	if (!drvdata->enable) {
		mutex_unlock(&drvdata->lock);
		tpdm_setup_disable(drvdata);
		coresight_disable_reg_clk(drvdata->csdev);
		return -EPERM;
	}

@@ -1663,7 +1616,7 @@ static ssize_t bc_count_val_lo_store(struct device *dev,
		/* Check if selected counter is disabled */
		if (BVAL(tpdm_readl(drvdata, TPDM_BC_CNTENSET), select)) {
			mutex_unlock(&drvdata->lock);
			tpdm_setup_disable(drvdata);
			coresight_disable_reg_clk(drvdata->csdev);
			return -EPERM;
		}

@@ -1671,7 +1624,7 @@ static ssize_t bc_count_val_lo_store(struct device *dev,
		TPDM_LOCK(drvdata);
	}
	mutex_unlock(&drvdata->lock);
	tpdm_setup_disable(drvdata);
	coresight_disable_reg_clk(drvdata->csdev);
	return size;
}
static DEVICE_ATTR_RW(bc_count_val_lo);
@@ -1687,14 +1640,14 @@ static ssize_t bc_count_val_hi_show(struct device *dev,
	if (!test_bit(TPDM_DS_BC, drvdata->enable_ds))
		return -EPERM;

	ret = tpdm_setup_enable(drvdata);
	ret = coresight_enable_reg_clk(drvdata->csdev);
	if (ret)
		return ret;

	mutex_lock(&drvdata->lock);
	if (!drvdata->enable) {
		mutex_unlock(&drvdata->lock);
		tpdm_setup_disable(drvdata);
		coresight_disable_reg_clk(drvdata->csdev);
		return -EPERM;
	}

@@ -1702,7 +1655,7 @@ static ssize_t bc_count_val_hi_show(struct device *dev,
	val = tpdm_readl(drvdata, TPDM_BC_CNTR_HI);
	TPDM_LOCK(drvdata);
	mutex_unlock(&drvdata->lock);
	tpdm_setup_disable(drvdata);
	coresight_disable_reg_clk(drvdata->csdev);
	return scnprintf(buf, PAGE_SIZE, "%lx\n", val);
}

@@ -1720,14 +1673,14 @@ static ssize_t bc_count_val_hi_store(struct device *dev,
	if (!test_bit(TPDM_DS_BC, drvdata->enable_ds))
		return -EPERM;

	ret = tpdm_setup_enable(drvdata);
	ret = coresight_enable_reg_clk(drvdata->csdev);
	if (ret)
		return ret;

	mutex_lock(&drvdata->lock);
	if (!drvdata->enable) {
		mutex_unlock(&drvdata->lock);
		tpdm_setup_disable(drvdata);
		coresight_disable_reg_clk(drvdata->csdev);
		return -EPERM;
	}

@@ -1738,7 +1691,7 @@ static ssize_t bc_count_val_hi_store(struct device *dev,
		/* Check if selected counter is disabled */
		if (BVAL(tpdm_readl(drvdata, TPDM_BC_CNTENSET), select)) {
			mutex_unlock(&drvdata->lock);
			tpdm_setup_disable(drvdata);
			coresight_disable_reg_clk(drvdata->csdev);
			return -EPERM;
		}

@@ -1746,7 +1699,7 @@ static ssize_t bc_count_val_hi_store(struct device *dev,
		TPDM_LOCK(drvdata);
	}
	mutex_unlock(&drvdata->lock);
	tpdm_setup_disable(drvdata);
	coresight_disable_reg_clk(drvdata->csdev);
	return size;
}
static DEVICE_ATTR_RW(bc_count_val_hi);
@@ -1763,14 +1716,14 @@ static ssize_t bc_shadow_val_lo_show(struct device *dev,
	if (!test_bit(TPDM_DS_BC, drvdata->enable_ds))
		return -EPERM;

	ret = tpdm_setup_enable(drvdata);
	ret = coresight_enable_reg_clk(drvdata->csdev);
	if (ret)
		return ret;

	mutex_lock(&drvdata->lock);
	if (!drvdata->enable) {
		mutex_unlock(&drvdata->lock);
		tpdm_setup_disable(drvdata);
		coresight_disable_reg_clk(drvdata->csdev);
		return -EPERM;
	}

@@ -1782,7 +1735,7 @@ static ssize_t bc_shadow_val_lo_show(struct device *dev,
	}
	TPDM_LOCK(drvdata);
	mutex_unlock(&drvdata->lock);
	tpdm_setup_disable(drvdata);
	coresight_disable_reg_clk(drvdata->csdev);
	return size;
}
static DEVICE_ATTR_RO(bc_shadow_val_lo);
@@ -1799,14 +1752,14 @@ static ssize_t bc_shadow_val_hi_show(struct device *dev,
	if (!test_bit(TPDM_DS_BC, drvdata->enable_ds))
		return -EPERM;

	ret = tpdm_setup_enable(drvdata);
	ret = coresight_enable_reg_clk(drvdata->csdev);
	if (ret)
		return ret;

	mutex_lock(&drvdata->lock);
	if (!drvdata->enable) {
		mutex_unlock(&drvdata->lock);
		tpdm_setup_disable(drvdata);
		coresight_disable_reg_clk(drvdata->csdev);
		return -EPERM;
	}

@@ -1817,7 +1770,7 @@ static ssize_t bc_shadow_val_hi_show(struct device *dev,
				  tpdm_readl(drvdata, TPDM_BC_SHADOW_HI(i)));
	TPDM_LOCK(drvdata);
	mutex_unlock(&drvdata->lock);
	tpdm_setup_disable(drvdata);
	coresight_disable_reg_clk(drvdata->csdev);
	return size;
}
static DEVICE_ATTR_RO(bc_shadow_val_hi);
@@ -1833,14 +1786,14 @@ static ssize_t bc_sw_inc_show(struct device *dev,
	if (!test_bit(TPDM_DS_BC, drvdata->enable_ds))
		return -EPERM;

	ret = tpdm_setup_enable(drvdata);
	ret = coresight_enable_reg_clk(drvdata->csdev);
	if (ret)
		return ret;

	mutex_lock(&drvdata->lock);
	if (!drvdata->enable) {
		mutex_unlock(&drvdata->lock);
		tpdm_setup_disable(drvdata);
		coresight_disable_reg_clk(drvdata->csdev);
		return -EPERM;
	}

@@ -1848,7 +1801,7 @@ static ssize_t bc_sw_inc_show(struct device *dev,
	val = tpdm_readl(drvdata, TPDM_BC_SWINC);
	TPDM_LOCK(drvdata);
	mutex_unlock(&drvdata->lock);
	tpdm_setup_disable(drvdata);
	coresight_disable_reg_clk(drvdata->csdev);
	return scnprintf(buf, PAGE_SIZE, "%lx\n", val);
}

@@ -1866,14 +1819,14 @@ static ssize_t bc_sw_inc_store(struct device *dev,
	if (!test_bit(TPDM_DS_BC, drvdata->enable_ds))
		return -EPERM;

	ret = tpdm_setup_enable(drvdata);
	ret = coresight_enable_reg_clk(drvdata->csdev);
	if (ret)
		return ret;

	mutex_lock(&drvdata->lock);
	if (!drvdata->enable) {
		mutex_unlock(&drvdata->lock);
		tpdm_setup_disable(drvdata);
		coresight_disable_reg_clk(drvdata->csdev);
		return -EPERM;
	}

@@ -1883,7 +1836,7 @@ static ssize_t bc_sw_inc_store(struct device *dev,
		TPDM_LOCK(drvdata);
	}
	mutex_unlock(&drvdata->lock);
	tpdm_setup_disable(drvdata);
	coresight_disable_reg_clk(drvdata->csdev);
	return size;
}
static DEVICE_ATTR_RW(bc_sw_inc);
@@ -1969,14 +1922,14 @@ static ssize_t tc_capture_mode_store(struct device *dev,
	if (!test_bit(TPDM_DS_TC, drvdata->enable_ds))
		return -EPERM;

	ret = tpdm_setup_enable(drvdata);
	ret = coresight_enable_reg_clk(drvdata->csdev);
	if (ret)
		return ret;

	mutex_lock(&drvdata->lock);
	if (!drvdata->enable) {
		mutex_unlock(&drvdata->lock);
		tpdm_setup_disable(drvdata);
		coresight_disable_reg_clk(drvdata->csdev);
		return -EPERM;
	}

@@ -1994,11 +1947,11 @@ static ssize_t tc_capture_mode_store(struct device *dev,
		drvdata->tc->capture_mode = TPDM_MODE_APB;
	} else {
		mutex_unlock(&drvdata->lock);
		tpdm_setup_disable(drvdata);
		coresight_disable_reg_clk(drvdata->csdev);
		return -EINVAL;
	}
	mutex_unlock(&drvdata->lock);
	tpdm_setup_disable(drvdata);
	coresight_disable_reg_clk(drvdata->csdev);
	return size;
}
static DEVICE_ATTR_RW(tc_capture_mode);
@@ -2033,14 +1986,14 @@ static ssize_t tc_retrieval_mode_store(struct device *dev,
	if (!test_bit(TPDM_DS_TC, drvdata->datasets))
		return -EPERM;

	ret = tpdm_setup_enable(drvdata);
	ret = coresight_enable_reg_clk(drvdata->csdev);
	if (ret)
		return ret;

	mutex_lock(&drvdata->lock);
	if (drvdata->enable) {
		mutex_unlock(&drvdata->lock);
		tpdm_setup_disable(drvdata);
		coresight_disable_reg_clk(drvdata->csdev);
		return -EPERM;
	}

@@ -2050,11 +2003,11 @@ static ssize_t tc_retrieval_mode_store(struct device *dev,
		drvdata->tc->retrieval_mode = TPDM_MODE_APB;
	} else {
		mutex_unlock(&drvdata->lock);
		tpdm_setup_disable(drvdata);
		coresight_disable_reg_clk(drvdata->csdev);
		return -EINVAL;
	}
	mutex_unlock(&drvdata->lock);
	tpdm_setup_disable(drvdata);
	coresight_disable_reg_clk(drvdata->csdev);
	return size;
}
static DEVICE_ATTR_RW(tc_retrieval_mode);
@@ -2073,14 +2026,14 @@ static ssize_t tc_reset_counters_store(struct device *dev,
	if (!test_bit(TPDM_DS_TC, drvdata->datasets))
		return -EPERM;

	ret = tpdm_setup_enable(drvdata);
	ret = coresight_enable_reg_clk(drvdata->csdev);
	if (ret)
		return ret;

	mutex_lock(&drvdata->lock);
	if (!drvdata->enable) {
		mutex_unlock(&drvdata->lock);
		tpdm_setup_disable(drvdata);
		coresight_disable_reg_clk(drvdata->csdev);
		return -EPERM;
	}

@@ -2092,7 +2045,7 @@ static ssize_t tc_reset_counters_store(struct device *dev,
		TPDM_LOCK(drvdata);
	}
	mutex_unlock(&drvdata->lock);
	tpdm_setup_disable(drvdata);
	coresight_disable_reg_clk(drvdata->csdev);
	return size;
}
static DEVICE_ATTR_WO(tc_reset_counters);
@@ -2412,14 +2365,14 @@ static ssize_t tc_ovsr_gp_show(struct device *dev,
	if (!test_bit(TPDM_DS_TC, drvdata->datasets))
		return -EPERM;

	ret = tpdm_setup_enable(drvdata);
	ret = coresight_enable_reg_clk(drvdata->csdev);
	if (ret)
		return ret;

	mutex_lock(&drvdata->lock);
	if (!drvdata->enable) {
		mutex_unlock(&drvdata->lock);
		tpdm_setup_disable(drvdata);
		coresight_disable_reg_clk(drvdata->csdev);
		return -EPERM;
	}

@@ -2427,7 +2380,7 @@ static ssize_t tc_ovsr_gp_show(struct device *dev,
	val = tpdm_readl(drvdata, TPDM_TC_OVSR_GP);
	TPDM_LOCK(drvdata);
	mutex_unlock(&drvdata->lock);
	tpdm_setup_disable(drvdata);
	coresight_disable_reg_clk(drvdata->csdev);
	return scnprintf(buf, PAGE_SIZE, "%lx\n", val);
}

@@ -2445,14 +2398,14 @@ static ssize_t tc_ovsr_gp_store(struct device *dev,
	if (!test_bit(TPDM_DS_TC, drvdata->enable_ds))
		return -EPERM;

	ret = tpdm_setup_enable(drvdata);
	ret = coresight_enable_reg_clk(drvdata->csdev);
	if (ret)
		return ret;

	mutex_lock(&drvdata->lock);
	if (!drvdata->enable) {
		mutex_unlock(&drvdata->lock);
		tpdm_setup_disable(drvdata);
		coresight_disable_reg_clk(drvdata->csdev);
		return -EPERM;
	}

@@ -2462,7 +2415,7 @@ static ssize_t tc_ovsr_gp_store(struct device *dev,
		TPDM_LOCK(drvdata);
	}
	mutex_unlock(&drvdata->lock);
	tpdm_setup_disable(drvdata);
	coresight_disable_reg_clk(drvdata->csdev);
	return size;
}
static DEVICE_ATTR_RW(tc_ovsr_gp);
@@ -2478,14 +2431,14 @@ static ssize_t tc_ovsr_impl_show(struct device *dev,
	if (!test_bit(TPDM_DS_TC, drvdata->enable_ds))
		return -EPERM;

	ret = tpdm_setup_enable(drvdata);
	ret = coresight_enable_reg_clk(drvdata->csdev);
	if (ret)
		return ret;

	mutex_lock(&drvdata->lock);
	if (!drvdata->enable) {
		mutex_unlock(&drvdata->lock);
		tpdm_setup_disable(drvdata);
		coresight_disable_reg_clk(drvdata->csdev);
		return -EPERM;
	}

@@ -2493,7 +2446,7 @@ static ssize_t tc_ovsr_impl_show(struct device *dev,
	val = tpdm_readl(drvdata, TPDM_TC_OVSR_IMPL);
	TPDM_LOCK(drvdata);
	mutex_unlock(&drvdata->lock);
	tpdm_setup_disable(drvdata);
	coresight_disable_reg_clk(drvdata->csdev);
	return scnprintf(buf, PAGE_SIZE, "%lx\n", val);
}

@@ -2511,14 +2464,14 @@ static ssize_t tc_ovsr_impl_store(struct device *dev,
	if (!test_bit(TPDM_DS_TC, drvdata->enable_ds))
		return -EPERM;

	ret = tpdm_setup_enable(drvdata);
	ret = coresight_enable_reg_clk(drvdata->csdev);
	if (ret)
		return ret;

	mutex_lock(&drvdata->lock);
	if (!drvdata->enable) {
		mutex_unlock(&drvdata->lock);
		tpdm_setup_disable(drvdata);
		coresight_disable_reg_clk(drvdata->csdev);
		return -EPERM;
	}

@@ -2528,7 +2481,7 @@ static ssize_t tc_ovsr_impl_store(struct device *dev,
		TPDM_LOCK(drvdata);
	}
	mutex_unlock(&drvdata->lock);
	tpdm_setup_disable(drvdata);
	coresight_disable_reg_clk(drvdata->csdev);
	return size;
}
static DEVICE_ATTR_RW(tc_ovsr_impl);
@@ -2544,14 +2497,14 @@ static ssize_t tc_counter_sel_show(struct device *dev,
	if (!test_bit(TPDM_DS_TC, drvdata->enable_ds))
		return -EPERM;

	ret = tpdm_setup_enable(drvdata);
	ret = coresight_enable_reg_clk(drvdata->csdev);
	if (ret)
		return ret;

	mutex_lock(&drvdata->lock);
	if (!drvdata->enable) {
		mutex_unlock(&drvdata->lock);
		tpdm_setup_disable(drvdata);
		coresight_disable_reg_clk(drvdata->csdev);
		return -EPERM;
	}

@@ -2559,7 +2512,7 @@ static ssize_t tc_counter_sel_show(struct device *dev,
	val = tpdm_readl(drvdata, TPDM_TC_SELR);
	TPDM_LOCK(drvdata);
	mutex_unlock(&drvdata->lock);
	tpdm_setup_disable(drvdata);
	coresight_disable_reg_clk(drvdata->csdev);
	return scnprintf(buf, PAGE_SIZE, "%lx\n", val);
}

@@ -2577,14 +2530,14 @@ static ssize_t tc_counter_sel_store(struct device *dev,
	if (!test_bit(TPDM_DS_TC, drvdata->enable_ds))
		return -EPERM;

	ret = tpdm_setup_enable(drvdata);
	ret = coresight_enable_reg_clk(drvdata->csdev);
	if (ret)
		return ret;

	mutex_lock(&drvdata->lock);
	if (!drvdata->enable) {
		mutex_unlock(&drvdata->lock);
		tpdm_setup_disable(drvdata);
		coresight_disable_reg_clk(drvdata->csdev);
		return -EPERM;
	}

@@ -2592,7 +2545,7 @@ static ssize_t tc_counter_sel_store(struct device *dev,
	tpdm_writel(drvdata, val, TPDM_TC_SELR);
	TPDM_LOCK(drvdata);
	mutex_unlock(&drvdata->lock);
	tpdm_setup_disable(drvdata);
	coresight_disable_reg_clk(drvdata->csdev);
	return size;
}
static DEVICE_ATTR_RW(tc_counter_sel);
@@ -2608,14 +2561,14 @@ static ssize_t tc_count_val_lo_show(struct device *dev,
	if (!test_bit(TPDM_DS_TC, drvdata->enable_ds))
		return -EPERM;

	ret = tpdm_setup_enable(drvdata);
	ret = coresight_enable_reg_clk(drvdata->csdev);
	if (ret)
		return ret;

	mutex_lock(&drvdata->lock);
	if (!drvdata->enable) {
		mutex_unlock(&drvdata->lock);
		tpdm_setup_disable(drvdata);
		coresight_disable_reg_clk(drvdata->csdev);
		return -EPERM;
	}

@@ -2623,7 +2576,7 @@ static ssize_t tc_count_val_lo_show(struct device *dev,
	val = tpdm_readl(drvdata, TPDM_TC_CNTR_LO);
	TPDM_LOCK(drvdata);
	mutex_unlock(&drvdata->lock);
	tpdm_setup_disable(drvdata);
	coresight_disable_reg_clk(drvdata->csdev);
	return scnprintf(buf, PAGE_SIZE, "%lx\n", val);
}

@@ -2641,14 +2594,14 @@ static ssize_t tc_count_val_lo_store(struct device *dev,
	if (!test_bit(TPDM_DS_TC, drvdata->enable_ds))
		return -EPERM;

	ret = tpdm_setup_enable(drvdata);
	ret = coresight_enable_reg_clk(drvdata->csdev);
	if (ret)
		return ret;

	mutex_lock(&drvdata->lock);
	if (!drvdata->enable) {
		mutex_unlock(&drvdata->lock);
		tpdm_setup_disable(drvdata);
		coresight_disable_reg_clk(drvdata->csdev);
		return -EPERM;
	}

@@ -2660,7 +2613,7 @@ static ssize_t tc_count_val_lo_store(struct device *dev,
		/* Check if selected counter is disabled */
		if (BVAL(tpdm_readl(drvdata, TPDM_TC_CNTENSET), select)) {
			mutex_unlock(&drvdata->lock);
			tpdm_setup_disable(drvdata);
			coresight_disable_reg_clk(drvdata->csdev);
			return -EPERM;
		}

@@ -2668,7 +2621,7 @@ static ssize_t tc_count_val_lo_store(struct device *dev,
		TPDM_LOCK(drvdata);
	}
	mutex_unlock(&drvdata->lock);
	tpdm_setup_disable(drvdata);
	coresight_disable_reg_clk(drvdata->csdev);
	return size;
}
static DEVICE_ATTR_RW(tc_count_val_lo);
@@ -2684,14 +2637,14 @@ static ssize_t tc_count_val_hi_show(struct device *dev,
	if (!test_bit(TPDM_DS_TC, drvdata->enable_ds))
		return -EPERM;

	ret = tpdm_setup_enable(drvdata);
	ret = coresight_enable_reg_clk(drvdata->csdev);
	if (ret)
		return ret;

	mutex_lock(&drvdata->lock);
	if (!drvdata->enable) {
		mutex_unlock(&drvdata->lock);
		tpdm_setup_disable(drvdata);
		coresight_disable_reg_clk(drvdata->csdev);
		return -EPERM;
	}

@@ -2699,7 +2652,7 @@ static ssize_t tc_count_val_hi_show(struct device *dev,
	val = tpdm_readl(drvdata, TPDM_TC_CNTR_HI);
	TPDM_LOCK(drvdata);
	mutex_unlock(&drvdata->lock);
	tpdm_setup_disable(drvdata);
	coresight_disable_reg_clk(drvdata->csdev);
	return scnprintf(buf, PAGE_SIZE, "%lx\n", val);
}

@@ -2717,14 +2670,14 @@ static ssize_t tc_count_val_hi_store(struct device *dev,
	if (!test_bit(TPDM_DS_TC, drvdata->enable_ds))
		return -EPERM;

	ret = tpdm_setup_enable(drvdata);
	ret = coresight_enable_reg_clk(drvdata->csdev);
	if (ret)
		return ret;

	mutex_lock(&drvdata->lock);
	if (!drvdata->enable) {
		mutex_unlock(&drvdata->lock);
		tpdm_setup_disable(drvdata);
		coresight_disable_reg_clk(drvdata->csdev);
		return -EPERM;
	}

@@ -2736,7 +2689,7 @@ static ssize_t tc_count_val_hi_store(struct device *dev,
		/* Check if selected counter is disabled */
		if (BVAL(tpdm_readl(drvdata, TPDM_TC_CNTENSET), select)) {
			mutex_unlock(&drvdata->lock);
			tpdm_setup_disable(drvdata);
			coresight_disable_reg_clk(drvdata->csdev);
			return -EPERM;
		}

@@ -2744,7 +2697,7 @@ static ssize_t tc_count_val_hi_store(struct device *dev,
		TPDM_LOCK(drvdata);
	}
	mutex_unlock(&drvdata->lock);
	tpdm_setup_disable(drvdata);
	coresight_disable_reg_clk(drvdata->csdev);
	return size;
}
static DEVICE_ATTR_RW(tc_count_val_hi);
@@ -2761,14 +2714,14 @@ static ssize_t tc_shadow_val_lo_show(struct device *dev,
	if (!test_bit(TPDM_DS_TC, drvdata->enable_ds))
		return -EPERM;

	ret = tpdm_setup_enable(drvdata);
	ret = coresight_enable_reg_clk(drvdata->csdev);
	if (ret)
		return ret;

	mutex_lock(&drvdata->lock);
	if (!drvdata->enable) {
		mutex_unlock(&drvdata->lock);
		tpdm_setup_disable(drvdata);
		coresight_disable_reg_clk(drvdata->csdev);
		return -EPERM;
	}

@@ -2780,7 +2733,7 @@ static ssize_t tc_shadow_val_lo_show(struct device *dev,
	}
	TPDM_LOCK(drvdata);
	mutex_unlock(&drvdata->lock);
	tpdm_setup_disable(drvdata);
	coresight_disable_reg_clk(drvdata->csdev);
	return size;
}
static DEVICE_ATTR_RO(tc_shadow_val_lo);
@@ -2797,14 +2750,14 @@ static ssize_t tc_shadow_val_hi_show(struct device *dev,
	if (!test_bit(TPDM_DS_TC, drvdata->enable_ds))
		return -EPERM;

	ret = tpdm_setup_enable(drvdata);
	ret = coresight_enable_reg_clk(drvdata->csdev);
	if (ret)
		return ret;

	mutex_lock(&drvdata->lock);
	if (!drvdata->enable) {
		mutex_unlock(&drvdata->lock);
		tpdm_setup_disable(drvdata);
		coresight_disable_reg_clk(drvdata->csdev);
		return -EPERM;
	}

@@ -2816,7 +2769,7 @@ static ssize_t tc_shadow_val_hi_show(struct device *dev,
	}
	TPDM_LOCK(drvdata);
	mutex_unlock(&drvdata->lock);
	tpdm_setup_disable(drvdata);
	coresight_disable_reg_clk(drvdata->csdev);
	return size;
}
static DEVICE_ATTR_RO(tc_shadow_val_hi);
@@ -2832,14 +2785,14 @@ static ssize_t tc_sw_inc_show(struct device *dev,
	if (!test_bit(TPDM_DS_TC, drvdata->enable_ds))
		return -EPERM;

	ret = tpdm_setup_enable(drvdata);
	ret = coresight_enable_reg_clk(drvdata->csdev);
	if (ret)
		return ret;

	mutex_lock(&drvdata->lock);
	if (!drvdata->enable) {
		mutex_unlock(&drvdata->lock);
		tpdm_setup_disable(drvdata);
		coresight_disable_reg_clk(drvdata->csdev);
		return -EPERM;
	}

@@ -2847,7 +2800,7 @@ static ssize_t tc_sw_inc_show(struct device *dev,
	val = tpdm_readl(drvdata, TPDM_TC_SWINC);
	TPDM_LOCK(drvdata);
	mutex_unlock(&drvdata->lock);
	tpdm_setup_disable(drvdata);
	coresight_disable_reg_clk(drvdata->csdev);
	return scnprintf(buf, PAGE_SIZE, "%lx\n", val);
}

@@ -2865,14 +2818,14 @@ static ssize_t tc_sw_inc_store(struct device *dev,
	if (!test_bit(TPDM_DS_TC, drvdata->enable_ds))
		return -EPERM;

	ret = tpdm_setup_enable(drvdata);
	ret = coresight_enable_reg_clk(drvdata->csdev);
	if (ret)
		return ret;

	mutex_lock(&drvdata->lock);
	if (!drvdata->enable) {
		mutex_unlock(&drvdata->lock);
		tpdm_setup_disable(drvdata);
		coresight_disable_reg_clk(drvdata->csdev);
		return -EPERM;
	}

@@ -2882,7 +2835,7 @@ static ssize_t tc_sw_inc_store(struct device *dev,
		TPDM_LOCK(drvdata);
	}
	mutex_unlock(&drvdata->lock);
	tpdm_setup_disable(drvdata);
	coresight_disable_reg_clk(drvdata->csdev);
	return size;
}
static DEVICE_ATTR_RW(tc_sw_inc);
@@ -4392,7 +4345,20 @@ static int tpdm_probe(struct amba_device *adev, const struct amba_id *id)
		return -EINVAL;
	}

	ret = tpdm_setup_enable(drvdata);
	desc = devm_kzalloc(dev, sizeof(*desc), GFP_KERNEL);
	if (!desc)
		return -ENOMEM;
	desc->type = CORESIGHT_DEV_TYPE_SOURCE;
	desc->subtype.source_subtype = CORESIGHT_DEV_SUBTYPE_SOURCE_PROC;
	desc->ops = &tpdm_cs_ops;
	desc->pdata = adev->dev.platform_data;
	desc->dev = &adev->dev;
	desc->groups = tpdm_attr_grps;
	drvdata->csdev = coresight_register(desc);
	if (IS_ERR(drvdata->csdev))
		return PTR_ERR(drvdata->csdev);

	ret = coresight_enable_reg_clk(drvdata->csdev);
	if (ret)
		return ret;

@@ -4411,8 +4377,10 @@ static int tpdm_probe(struct amba_device *adev, const struct amba_id *id)
	}

	ret = tpdm_datasets_alloc(drvdata);
	if (ret)
	if (ret) {
		coresight_unregister(drvdata->csdev);
		return ret;
	}

	tpdm_init_default_data(drvdata);

@@ -4423,23 +4391,10 @@ static int tpdm_probe(struct amba_device *adev, const struct amba_id *id)
	drvdata->bc_counters_avail = BMVAL(devid, 6, 10) + 1;
	drvdata->tc_counters_avail = BMVAL(devid, 4, 5) + 1;

	tpdm_setup_disable(drvdata);
	coresight_disable_reg_clk(drvdata->csdev);

	drvdata->traceid = traceid++;

	desc = devm_kzalloc(dev, sizeof(*desc), GFP_KERNEL);
	if (!desc)
		return -ENOMEM;
	desc->type = CORESIGHT_DEV_TYPE_SOURCE;
	desc->subtype.source_subtype = CORESIGHT_DEV_SUBTYPE_SOURCE_PROC;
	desc->ops = &tpdm_cs_ops;
	desc->pdata = adev->dev.platform_data;
	desc->dev = &adev->dev;
	desc->groups = tpdm_attr_grps;
	drvdata->csdev = coresight_register(desc);
	if (IS_ERR(drvdata->csdev))
		return PTR_ERR(drvdata->csdev);

	dev_dbg(drvdata->dev, "TPDM initialized\n");

	if (boot_enable)
+5 −4
Original line number Diff line number Diff line
@@ -112,14 +112,14 @@ static void coresight_reset_all_sink(void)
	bus_for_each_dev(&coresight_bustype, NULL, NULL, coresight_reset_sink);
}

void coresight_enable_reg_clk(struct coresight_device *csdev)
int coresight_enable_reg_clk(struct coresight_device *csdev)
{
	struct coresight_reg_clk *reg_clk = csdev->reg_clk;
	int ret;
	int i, j;

	if (IS_ERR_OR_NULL(reg_clk))
		return;
		return -EINVAL;

	for (i = 0; i < reg_clk->nr_reg; i++) {
		ret = regulator_enable(reg_clk->reg[i]);
@@ -133,14 +133,15 @@ void coresight_enable_reg_clk(struct coresight_device *csdev)
			goto err_clks;
	}

	return;

	return 0;
err_clks:
	for (j--; j >= 0; j--)
		clk_disable_unprepare(reg_clk->clk[j]);
err_regs:
	for (i--; i >= 0; i--)
		regulator_disable(reg_clk->reg[i]);

	return ret;
}
EXPORT_SYMBOL(coresight_enable_reg_clk);

+2 −2
Original line number Diff line number Diff line
@@ -298,7 +298,7 @@ extern int coresight_timeout(void __iomem *addr, u32 offset,
			     int position, int value);
extern void coresight_abort(void);
extern void coresight_disable_reg_clk(struct coresight_device *csdev);
extern void coresight_enable_reg_clk(struct coresight_device *csdev);
extern int coresight_enable_reg_clk(struct coresight_device *csdev);
#else
static inline struct coresight_device *
coresight_register(struct coresight_desc *desc) { return NULL; }
@@ -310,7 +310,7 @@ static inline int coresight_timeout(void __iomem *addr, u32 offset,
				     int position, int value) { return 1; }
static inline void coresight_abort(void) {}
static inline void coresight_disable_reg_clk(struct coresight_device *csdev) {}
static inline void coresight_enable_reg_clk(struct coresight_device *csdev) {}
static inline int coresight_enable_reg_clk(struct coresight_device *csdev) {}
#endif

#ifdef CONFIG_OF