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)
committerSuzuki K Poulose <suzuki.poulose@arm.com>
Mon, 22 Apr 2024 10:23:47 +0000 (11:23 +0100)
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
drivers/hwtracing/coresight/coresight-etm4x-core.c

index 06a9b94b8c13e02ad85e7b805768bad44ca9b05f..b9c6c544d7597f609249c59e7fd6344adbd443d4 100644 (file)
@@ -1843,8 +1843,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);