]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
coresight: cti: Remove hw_enabled flag
authorLeo Yan <leo.yan@arm.com>
Thu, 26 Feb 2026 09:23:55 +0000 (09:23 +0000)
committerSuzuki K Poulose <suzuki.poulose@arm.com>
Tue, 3 Mar 2026 10:23:46 +0000 (10:23 +0000)
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: Mike Leach <mike.leach@arm.com>
Signed-off-by: Leo Yan <leo.yan@arm.com>
Signed-off-by: Suzuki K Poulose <suzuki.poulose@arm.com>
Link: https://lore.kernel.org/r/20260226-arm_coresight_cti_refactor_v1-v2-7-b30fada3cfec@arm.com
drivers/hwtracing/coresight/coresight-cti-core.c
drivers/hwtracing/coresight/coresight-cti-sysfs.c
drivers/hwtracing/coresight/coresight-cti.h

index 5ac36f0776181559a87b3ee37d6c9076882576b5..2f4c9362709a90b12a1aeb5016905b7d4474b912 100644 (file)
@@ -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);
index 9ab586a5c9a4fd2a64c542aaaaa625e2299edd62..9ef44956ebdc7781717d773fa014165989df2048 100644 (file)
@@ -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);
 }
index 8754cb5def7918f03235343844467af8410b75a8..c5f9e79fabc608f5a95e7e4d8b0cbe1c853d584a 100644 (file)
@@ -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 */