]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
coresight: etm4x: Do not hardcode IOMEM access for register restore
authorSuzuki K Poulose <suzuki.poulose@arm.com>
Fri, 12 Apr 2024 14:26:59 +0000 (15:26 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sun, 16 Jun 2024 11:39:37 +0000 (13:39 +0200)
[ Upstream commit 1e7ba33fa591de1cf60afffcabb45600b3607025 ]

When we restore the register state for ETM4x, while coming back
from CPU idle, we hardcode IOMEM access. This is wrong and could
blow up for an ETM with system instructions access (and for ETE).

Fixes: f5bd523690d2 ("coresight: etm4x: Convert all register accesses")
Reported-by: Yabin Cui <yabinc@google.com>
Reviewed-by: Mike Leach <mike.leach@linaro.org>
Signed-off-by: Suzuki K Poulose <suzuki.poulose@arm.com>
Tested-by: Yabin Cui <yabinc@google.com>
Link: https://lore.kernel.org/r/20240412142702.2882478-2-suzuki.poulose@arm.com
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/hwtracing/coresight/coresight-etm4x-core.c

index 3f5e9400222e7cf8cbd0bef731f5cd9636fffaab..07f1c0ff899613c1c23659ecbead040380a09478 100644 (file)
@@ -1697,8 +1697,10 @@ static void etm4_cpu_restore(struct etmv4_drvdata *drvdata)
 {
        int i;
        struct etmv4_save_state *state = drvdata->save_state;
-       struct csdev_access tmp_csa = CSDEV_ACCESS_IOMEM(drvdata->base);
-       struct csdev_access *csa = &tmp_csa;
+       struct csdev_access *csa = &drvdata->csdev->access;
+
+       if (WARN_ON(!drvdata->csdev))
+               return;
 
        etm4_cs_unlock(drvdata, csa);
        etm4x_relaxed_write32(csa, state->trcclaimset, TRCCLAIMSET);