]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
coresight: Convert tag clear function to take a struct csdev_access
authorJames Clark <james.clark@linaro.org>
Tue, 25 Mar 2025 11:58:46 +0000 (11:58 +0000)
committerSuzuki K Poulose <suzuki.poulose@arm.com>
Wed, 30 Apr 2025 13:58:18 +0000 (14:58 +0100)
The self hosted claim tag will be reset on device probe in a later
commit. We'll want to do this before coresight_register() is called so
won't have a coresight_device and have to use csdev_access instead.

Also make them public and create locked and unlocked versions for
later use.

These look functions look like they set the whole tags register as one
value, but they only set and clear the self hosted bit using a SET/CLR
bits mechanism so also rename the functions to reflect this better.

Reviewed-by: Leo Yan <leo.yan@arm.com>
Reviewed-by: Yeoreum Yun <yeoreum.yun@arm.com>
Signed-off-by: James Clark <james.clark@linaro.org>
Signed-off-by: Suzuki K Poulose <suzuki.poulose@arm.com>
Link: https://lore.kernel.org/r/20250325-james-coresight-claim-tags-v4-1-dfbd3822b2e5@linaro.org
drivers/hwtracing/coresight/coresight-core.c
include/linux/coresight.h

index d3523f0262af829c69fe709b72eedaa7ba34d150..17f931f7e6165c901bce36b925a3cf8ef216fb44 100644 (file)
@@ -129,34 +129,45 @@ coresight_find_out_connection(struct coresight_device *csdev,
        return ERR_PTR(-ENODEV);
 }
 
-static inline u32 coresight_read_claim_tags(struct coresight_device *csdev)
+static inline u32 coresight_read_claim_tags_unlocked(struct coresight_device *csdev)
 {
        return csdev_access_relaxed_read32(&csdev->access, CORESIGHT_CLAIMCLR);
 }
 
 static inline bool coresight_is_claimed_self_hosted(struct coresight_device *csdev)
 {
-       return coresight_read_claim_tags(csdev) == CORESIGHT_CLAIM_SELF_HOSTED;
+       return coresight_read_claim_tags_unlocked(csdev) == CORESIGHT_CLAIM_SELF_HOSTED;
 }
 
 static inline bool coresight_is_claimed_any(struct coresight_device *csdev)
 {
-       return coresight_read_claim_tags(csdev) != 0;
+       return coresight_read_claim_tags_unlocked(csdev) != 0;
 }
 
-static inline void coresight_set_claim_tags(struct coresight_device *csdev)
+static inline void coresight_set_self_claim_tag_unlocked(struct coresight_device *csdev)
 {
        csdev_access_relaxed_write32(&csdev->access, CORESIGHT_CLAIM_SELF_HOSTED,
                                     CORESIGHT_CLAIMSET);
        isb();
 }
 
-static inline void coresight_clear_claim_tags(struct coresight_device *csdev)
+void coresight_clear_self_claim_tag(struct csdev_access *csa)
 {
-       csdev_access_relaxed_write32(&csdev->access, CORESIGHT_CLAIM_SELF_HOSTED,
+       if (csa->io_mem)
+               CS_UNLOCK(csa->base);
+       coresight_clear_self_claim_tag_unlocked(csa);
+       if (csa->io_mem)
+               CS_LOCK(csa->base);
+}
+EXPORT_SYMBOL_GPL(coresight_clear_self_claim_tag);
+
+void coresight_clear_self_claim_tag_unlocked(struct csdev_access *csa)
+{
+       csdev_access_relaxed_write32(csa, CORESIGHT_CLAIM_SELF_HOSTED,
                                     CORESIGHT_CLAIMCLR);
        isb();
 }
+EXPORT_SYMBOL_GPL(coresight_clear_self_claim_tag_unlocked);
 
 /*
  * coresight_claim_device_unlocked : Claim the device for self-hosted usage
@@ -176,11 +187,11 @@ int coresight_claim_device_unlocked(struct coresight_device *csdev)
        if (coresight_is_claimed_any(csdev))
                return -EBUSY;
 
-       coresight_set_claim_tags(csdev);
+       coresight_set_self_claim_tag_unlocked(csdev);
        if (coresight_is_claimed_self_hosted(csdev))
                return 0;
-       /* There was a race setting the tags, clean up and fail */
-       coresight_clear_claim_tags(csdev);
+       /* There was a race setting the tag, clean up and fail */
+       coresight_clear_self_claim_tag_unlocked(&csdev->access);
        return -EBUSY;
 }
 EXPORT_SYMBOL_GPL(coresight_claim_device_unlocked);
@@ -201,7 +212,7 @@ int coresight_claim_device(struct coresight_device *csdev)
 EXPORT_SYMBOL_GPL(coresight_claim_device);
 
 /*
- * coresight_disclaim_device_unlocked : Clear the claim tags for the device.
+ * coresight_disclaim_device_unlocked : Clear the claim tag for the device.
  * Called with CS_UNLOCKed for the component.
  */
 void coresight_disclaim_device_unlocked(struct coresight_device *csdev)
@@ -211,7 +222,7 @@ void coresight_disclaim_device_unlocked(struct coresight_device *csdev)
                return;
 
        if (coresight_is_claimed_self_hosted(csdev))
-               coresight_clear_claim_tags(csdev);
+               coresight_clear_self_claim_tag_unlocked(&csdev->access);
        else
                /*
                 * The external agent may have not honoured our claim
index cfcf6e4707ed942bebd695b5a5bfe022fc09a6af..b89692d9ceace42096975cf3ccf683791c1c9bf5 100644 (file)
@@ -685,7 +685,8 @@ extern int coresight_timeout_action(struct csdev_access *csa, u32 offset,
 
 extern int coresight_claim_device(struct coresight_device *csdev);
 extern int coresight_claim_device_unlocked(struct coresight_device *csdev);
-
+void coresight_clear_self_claim_tag(struct csdev_access *csa);
+void coresight_clear_self_claim_tag_unlocked(struct csdev_access *csa);
 extern void coresight_disclaim_device(struct coresight_device *csdev);
 extern void coresight_disclaim_device_unlocked(struct coresight_device *csdev);
 extern char *coresight_alloc_device_name(struct coresight_dev_list *devs,