Commit d5e57bab authored by Leo Yan's avatar Leo Yan Committed by Suzuki K Poulose
Browse files

coresight: cti: Remove hw_enabled flag



The enable_req_count field already tracks whether the CTI device is
enabled.  A non-zero value indicates that the device is active, the
hw_enabled flag is redundant if so.

Remove hw_enabled and update cti_is_active() to check enable_req_count.
Replace open-coded enable_req_count checks with cti_is_active().

Reviewed-by: default avatarMike Leach <mike.leach@arm.com>
Signed-off-by: default avatarLeo Yan <leo.yan@arm.com>
Signed-off-by: default avatarSuzuki K Poulose <suzuki.poulose@arm.com>
Link: https://lore.kernel.org/r/20260226-arm_coresight_cti_refactor_v1-v2-7-b30fada3cfec@arm.com
parent daedb30f
Loading
Loading
Loading
Loading
+2 −9
Original line number Diff line number Diff line
@@ -81,7 +81,7 @@ static int cti_enable_hw(struct cti_drvdata *drvdata)
	guard(raw_spinlock_irqsave)(&drvdata->spinlock);

	/* no need to do anything if enabled */
	if (config->hw_enabled)
	if (cti_is_active(config))
		goto cti_state_unchanged;

	/* claim the device */
@@ -91,8 +91,6 @@ static int cti_enable_hw(struct cti_drvdata *drvdata)

	cti_write_all_hw_regs(drvdata);

	config->hw_enabled = true;

cti_state_unchanged:
	drvdata->config.enable_req_count++;
	return 0;
@@ -107,22 +105,17 @@ static int cti_disable_hw(struct cti_drvdata *drvdata)
	guard(raw_spinlock_irqsave)(&drvdata->spinlock);

	/* don't allow negative refcounts, return an error */
	if (!drvdata->config.enable_req_count)
	if (!cti_is_active(config))
		return -EINVAL;

	/* check refcount - disable on 0 */
	if (--drvdata->config.enable_req_count > 0)
		return 0;

	/* no need to do anything if disabled */
	if (!config->hw_enabled)
		return 0;

	CS_UNLOCK(drvdata->base);

	/* disable CTI */
	writel_relaxed(0, drvdata->base + CTICONTROL);
	config->hw_enabled = false;

	coresight_disclaim_device_unlocked(csdev);
	CS_LOCK(drvdata->base);
+1 −1
Original line number Diff line number Diff line
@@ -84,7 +84,7 @@ static ssize_t enable_show(struct device *dev,
	struct cti_drvdata *drvdata = dev_get_drvdata(dev->parent);

	scoped_guard(raw_spinlock_irqsave, &drvdata->spinlock)
		enable_req = drvdata->config.enable_req_count;
		enable_req = cti_is_active(&drvdata->config);

	return sprintf(buf, "%d\n", !!enable_req);
}
+1 −3
Original line number Diff line number Diff line
@@ -121,7 +121,6 @@ struct cti_device {
 * @nr_ctm_channels: number of available CTM channels - from ID register.
 * @asicctl_impl: true if asicctl is implemented.
 * @enable_req_count: CTI is enabled alongside >=1 associated devices.
 * @hw_enabled: true if hw is currently enabled.
 * @trig_in_use: bitfield of in triggers registered as in use.
 * @trig_out_use: bitfield of out triggers registered as in use.
 * @trig_out_filter: bitfield of out triggers that are blocked if filter
@@ -144,7 +143,6 @@ struct cti_config {

	/* cti enable control */
	int enable_req_count;
	bool hw_enabled;

	/* registered triggers and filtering */
	u32 trig_in_use;
@@ -236,7 +234,7 @@ const char *cti_plat_get_node_name(struct fwnode_handle *fwnode);
/* Check if a cti device is enabled */
static inline bool cti_is_active(struct cti_config *cfg)
{
	return cfg->hw_enabled;
	return !!cfg->enable_req_count;
}

#endif  /* _CORESIGHT_CORESIGHT_CTI_H */