]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
coresight: Clear self hosted claim tag on probe
authorJames Clark <james.clark@linaro.org>
Tue, 25 Mar 2025 11:58:50 +0000 (11:58 +0000)
committerSuzuki K Poulose <suzuki.poulose@arm.com>
Wed, 30 Apr 2025 13:58:19 +0000 (14:58 +0100)
This can be left behind from a crashed kernel after a kexec so clear it
when probing each device. Clearing the self hosted bit even when claimed
externally is harmless, so do it unconditionally.

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-5-dfbd3822b2e5@linaro.org
drivers/hwtracing/coresight/coresight-catu.c
drivers/hwtracing/coresight/coresight-cti-core.c
drivers/hwtracing/coresight/coresight-etb10.c
drivers/hwtracing/coresight/coresight-etm3x-core.c
drivers/hwtracing/coresight/coresight-etm4x-core.c
drivers/hwtracing/coresight/coresight-funnel.c
drivers/hwtracing/coresight/coresight-replicator.c
drivers/hwtracing/coresight/coresight-tmc-core.c

index d4e2e175e077006949c7ba9d224c83e9a96e0dd0..775c5d19af8d543737a382fd057dfa9e8d499a14 100644 (file)
@@ -567,6 +567,7 @@ static int __catu_probe(struct device *dev, struct resource *res)
        catu_desc.subtype.helper_subtype = CORESIGHT_DEV_SUBTYPE_HELPER_CATU;
        catu_desc.ops = &catu_ops;
 
+       coresight_clear_self_claim_tag(&catu_desc.access);
        drvdata->csdev = coresight_register(&catu_desc);
        if (IS_ERR(drvdata->csdev))
                ret = PTR_ERR(drvdata->csdev);
index 80f6265e3740ca92e014aa22d33219611e6716a7..8fb30dd73fd20ae613a45b1a467f457a046a9412 100644 (file)
@@ -931,6 +931,8 @@ static int cti_probe(struct amba_device *adev, const struct amba_id *id)
        cti_desc.ops = &cti_ops;
        cti_desc.groups = drvdata->ctidev.con_groups;
        cti_desc.dev = dev;
+
+       coresight_clear_self_claim_tag(&cti_desc.access);
        drvdata->csdev = coresight_register(&cti_desc);
        if (IS_ERR(drvdata->csdev)) {
                ret = PTR_ERR(drvdata->csdev);
index 7948597d483d2bb6b3bd4e644de78133206df2c3..2bfcb669aa845880bc51a4feaa4a206989a924f0 100644 (file)
@@ -772,6 +772,8 @@ static int etb_probe(struct amba_device *adev, const struct amba_id *id)
        desc.pdata = pdata;
        desc.dev = dev;
        desc.groups = coresight_etb_groups;
+
+       coresight_clear_self_claim_tag(&desc.access);
        drvdata->csdev = coresight_register(&desc);
        if (IS_ERR(drvdata->csdev))
                return PTR_ERR(drvdata->csdev);
index cfd463ac715cf0cebe7b928fc5096d194494fc29..1c6204e1442211be6f3d7ca34bd2251ba796601b 100644 (file)
@@ -764,6 +764,7 @@ static void etm_init_arch_data(void *info)
        drvdata->nr_ext_out = BMVAL(etmccr, 20, 22);
        drvdata->nr_ctxid_cmp = BMVAL(etmccr, 24, 25);
 
+       coresight_clear_self_claim_tag_unlocked(&drvdata->csa);
        etm_set_pwrdwn(drvdata);
        etm_clr_pwrup(drvdata);
        CS_LOCK(drvdata->csa.base);
index 2b8f10463840209a603d89f1e5d8fce3a2286db1..2d399d2ec44cd5bc599caae8a35aa80e81e99063 100644 (file)
@@ -1372,6 +1372,8 @@ static void etm4_init_arch_data(void *info)
        drvdata->nrseqstate = FIELD_GET(TRCIDR5_NUMSEQSTATE_MASK, etmidr5);
        /* NUMCNTR, bits[30:28] number of counters available for tracing */
        drvdata->nr_cntr = FIELD_GET(TRCIDR5_NUMCNTR_MASK, etmidr5);
+
+       coresight_clear_self_claim_tag_unlocked(csa);
        etm4_cs_lock(drvdata, csa);
        cpu_detect_trace_filtering(drvdata);
 }
index 124fc2e26cfb1af9a23ec19d20c00b912a8583cf..b1922dbe9292b02c91ca5730998e59ecdb08fdc7 100644 (file)
@@ -255,6 +255,7 @@ static int funnel_probe(struct device *dev, struct resource *res)
                drvdata->base = base;
                desc.groups = coresight_funnel_groups;
                desc.access = CSDEV_ACCESS_IOMEM(base);
+               coresight_clear_self_claim_tag(&desc.access);
        }
 
        dev_set_drvdata(dev, drvdata);
index 572dcd2bac16d9f56679dbe444ce6a067e06a25e..1edcce1e5279ac676ac393cf75892c02ea3ab7de 100644 (file)
@@ -284,6 +284,7 @@ static int replicator_probe(struct device *dev, struct resource *res)
        desc.pdata = dev->platform_data;
        desc.dev = dev;
 
+       coresight_clear_self_claim_tag(&desc.access);
        drvdata->csdev = coresight_register(&desc);
        if (IS_ERR(drvdata->csdev)) {
                ret = PTR_ERR(drvdata->csdev);
index 455b1c9b15682c9e028fe8e018998287b926f1d4..bc99f519751e8859a5bc1bcefc64cf39e2a85120 100644 (file)
@@ -869,6 +869,7 @@ static int __tmc_probe(struct device *dev, struct resource *res)
        dev->platform_data = pdata;
        desc.pdata = pdata;
 
+       coresight_clear_self_claim_tag(&desc.access);
        drvdata->csdev = coresight_register(&desc);
        if (IS_ERR(drvdata->csdev)) {
                ret = PTR_ERR(drvdata->csdev);