Commit c95c2733 authored by James Clark's avatar James Clark Committed by Suzuki K Poulose
Browse files

coresight: Add a helper for getting csdev->mode



Now that mode is in struct coresight_device accesses can be wrapped.

Signed-off-by: default avatarJames Clark <james.clark@arm.com>
Link: https://lore.kernel.org/r/20240129154050.569566-12-james.clark@arm.com


Signed-off-by: default avatarSuzuki K Poulose <suzuki.poulose@arm.com>
parent d724f652
Loading
Loading
Loading
Loading
+5 −5
Original line number Diff line number Diff line
@@ -148,12 +148,12 @@ static int etb_enable_sysfs(struct coresight_device *csdev)
	spin_lock_irqsave(&drvdata->spinlock, flags);

	/* Don't messup with perf sessions. */
	if (local_read(&csdev->mode) == CS_MODE_PERF) {
	if (coresight_get_mode(csdev) == CS_MODE_PERF) {
		ret = -EBUSY;
		goto out;
	}

	if (local_read(&csdev->mode) == CS_MODE_DISABLED) {
	if (coresight_get_mode(csdev) == CS_MODE_DISABLED) {
		ret = etb_enable_hw(drvdata);
		if (ret)
			goto out;
@@ -179,7 +179,7 @@ static int etb_enable_perf(struct coresight_device *csdev, void *data)
	spin_lock_irqsave(&drvdata->spinlock, flags);

	/* No need to continue if the component is already in used by sysFS. */
	if (local_read(&drvdata->csdev->mode) == CS_MODE_SYSFS) {
	if (coresight_get_mode(drvdata->csdev) == CS_MODE_SYSFS) {
		ret = -EBUSY;
		goto out;
	}
@@ -361,7 +361,7 @@ static int etb_disable(struct coresight_device *csdev)
	}

	/* Complain if we (somehow) got out of sync */
	WARN_ON_ONCE(local_read(&csdev->mode) == CS_MODE_DISABLED);
	WARN_ON_ONCE(coresight_get_mode(csdev) == CS_MODE_DISABLED);
	etb_disable_hw(drvdata);
	/* Dissociate from monitored process. */
	drvdata->pid = -1;
@@ -588,7 +588,7 @@ static void etb_dump(struct etb_drvdata *drvdata)
	unsigned long flags;

	spin_lock_irqsave(&drvdata->spinlock, flags);
	if (local_read(&drvdata->csdev->mode) == CS_MODE_SYSFS) {
	if (coresight_get_mode(drvdata->csdev) == CS_MODE_SYSFS) {
		__etb_disable_hw(drvdata);
		etb_dump_hw(drvdata);
		__etb_enable_hw(drvdata);
+3 −3
Original line number Diff line number Diff line
@@ -676,7 +676,7 @@ static void etm_disable(struct coresight_device *csdev,
	 * change its status.  As such we can read the status here without
	 * fearing it will change under us.
	 */
	mode = local_read(&csdev->mode);
	mode = coresight_get_mode(csdev);

	switch (mode) {
	case CS_MODE_DISABLED:
@@ -727,7 +727,7 @@ static int etm_starting_cpu(unsigned int cpu)
		etmdrvdata[cpu]->os_unlock = true;
	}

	if (local_read(&etmdrvdata[cpu]->csdev->mode))
	if (coresight_get_mode(etmdrvdata[cpu]->csdev))
		etm_enable_hw(etmdrvdata[cpu]);
	spin_unlock(&etmdrvdata[cpu]->spinlock);
	return 0;
@@ -739,7 +739,7 @@ static int etm_dying_cpu(unsigned int cpu)
		return 0;

	spin_lock(&etmdrvdata[cpu]->spinlock);
	if (local_read(&etmdrvdata[cpu]->csdev->mode))
	if (coresight_get_mode(etmdrvdata[cpu]->csdev))
		etm_disable_hw(etmdrvdata[cpu]);
	spin_unlock(&etmdrvdata[cpu]->spinlock);
	return 0;
+2 −2
Original line number Diff line number Diff line
@@ -722,7 +722,7 @@ static ssize_t cntr_val_show(struct device *dev,
	struct etm_drvdata *drvdata = dev_get_drvdata(dev->parent);
	struct etm_config *config = &drvdata->config;

	if (!local_read(&drvdata->csdev->mode)) {
	if (!coresight_get_mode(drvdata->csdev)) {
		spin_lock(&drvdata->spinlock);
		for (i = 0; i < drvdata->nr_cntr; i++)
			ret += sprintf(buf, "counter %d: %x\n",
@@ -941,7 +941,7 @@ static ssize_t seq_curr_state_show(struct device *dev,
	struct etm_drvdata *drvdata = dev_get_drvdata(dev->parent);
	struct etm_config *config = &drvdata->config;

	if (!local_read(&drvdata->csdev->mode)) {
	if (!coresight_get_mode(drvdata->csdev)) {
		val = config->seq_curr_state;
		goto out;
	}
+4 −4
Original line number Diff line number Diff line
@@ -1007,7 +1007,7 @@ static void etm4_disable(struct coresight_device *csdev,
	 * change its status.  As such we can read the status here without
	 * fearing it will change under us.
	 */
	mode = local_read(&csdev->mode);
	mode = coresight_get_mode(csdev);

	switch (mode) {
	case CS_MODE_DISABLED:
@@ -1659,7 +1659,7 @@ static int etm4_starting_cpu(unsigned int cpu)
	if (!etmdrvdata[cpu]->os_unlock)
		etm4_os_unlock(etmdrvdata[cpu]);

	if (local_read(&etmdrvdata[cpu]->csdev->mode))
	if (coresight_get_mode(etmdrvdata[cpu]->csdev))
		etm4_enable_hw(etmdrvdata[cpu]);
	spin_unlock(&etmdrvdata[cpu]->spinlock);
	return 0;
@@ -1671,7 +1671,7 @@ static int etm4_dying_cpu(unsigned int cpu)
		return 0;

	spin_lock(&etmdrvdata[cpu]->spinlock);
	if (local_read(&etmdrvdata[cpu]->csdev->mode))
	if (coresight_get_mode(etmdrvdata[cpu]->csdev))
		etm4_disable_hw(etmdrvdata[cpu]);
	spin_unlock(&etmdrvdata[cpu]->spinlock);
	return 0;
@@ -1829,7 +1829,7 @@ static int etm4_cpu_save(struct etmv4_drvdata *drvdata)
	 * Save and restore the ETM Trace registers only if
	 * the ETM is active.
	 */
	if (local_read(&drvdata->csdev->mode) && drvdata->save_state)
	if (coresight_get_mode(drvdata->csdev) && drvdata->save_state)
		ret = __etm4_cpu_save(drvdata);
	return ret;
}
+7 −7
Original line number Diff line number Diff line
@@ -262,7 +262,7 @@ static void stm_disable(struct coresight_device *csdev,
	 * change its status.  As such we can read the status here without
	 * fearing it will change under us.
	 */
	if (local_read(&csdev->mode) == CS_MODE_SYSFS) {
	if (coresight_get_mode(csdev) == CS_MODE_SYSFS) {
		spin_lock(&drvdata->spinlock);
		stm_disable_hw(drvdata);
		spin_unlock(&drvdata->spinlock);
@@ -369,7 +369,7 @@ static long stm_generic_set_options(struct stm_data *stm_data,
{
	struct stm_drvdata *drvdata = container_of(stm_data,
						   struct stm_drvdata, stm);
	if (!(drvdata && local_read(&drvdata->csdev->mode)))
	if (!(drvdata && coresight_get_mode(drvdata->csdev)))
		return -EINVAL;

	if (channel >= drvdata->numsp)
@@ -404,7 +404,7 @@ static ssize_t notrace stm_generic_packet(struct stm_data *stm_data,
						   struct stm_drvdata, stm);
	unsigned int stm_flags;

	if (!(drvdata && local_read(&drvdata->csdev->mode)))
	if (!(drvdata && coresight_get_mode(drvdata->csdev)))
		return -EACCES;

	if (channel >= drvdata->numsp)
@@ -511,7 +511,7 @@ static ssize_t port_select_show(struct device *dev,
	struct stm_drvdata *drvdata = dev_get_drvdata(dev->parent);
	unsigned long val;

	if (!local_read(&drvdata->csdev->mode)) {
	if (!coresight_get_mode(drvdata->csdev)) {
		val = drvdata->stmspscr;
	} else {
		spin_lock(&drvdata->spinlock);
@@ -537,7 +537,7 @@ static ssize_t port_select_store(struct device *dev,
	spin_lock(&drvdata->spinlock);
	drvdata->stmspscr = val;

	if (local_read(&drvdata->csdev->mode)) {
	if (coresight_get_mode(drvdata->csdev)) {
		CS_UNLOCK(drvdata->base);
		/* Process as per ARM's TRM recommendation */
		stmsper = readl_relaxed(drvdata->base + STMSPER);
@@ -558,7 +558,7 @@ static ssize_t port_enable_show(struct device *dev,
	struct stm_drvdata *drvdata = dev_get_drvdata(dev->parent);
	unsigned long val;

	if (!local_read(&drvdata->csdev->mode)) {
	if (!coresight_get_mode(drvdata->csdev)) {
		val = drvdata->stmsper;
	} else {
		spin_lock(&drvdata->spinlock);
@@ -584,7 +584,7 @@ static ssize_t port_enable_store(struct device *dev,
	spin_lock(&drvdata->spinlock);
	drvdata->stmsper = val;

	if (local_read(&drvdata->csdev->mode)) {
	if (coresight_get_mode(drvdata->csdev)) {
		CS_UNLOCK(drvdata->base);
		writel_relaxed(drvdata->stmsper, drvdata->base + STMSPER);
		CS_LOCK(drvdata->base);
Loading