From: Suzuki K Poulose <suzuki.poul...@arm.com>

commit 93dd64404cbe63b0afba371acd8db36e84b286c7 upstream.

TRCVMIDCTRL1 is only implemented only if the TRCIDR4.NUMVMIDC > 4.
We must not touch the register otherwise.

Cc: sta...@vger.kernel.org
Cc: Mathieu Poirier <mathieu.poir...@linaro.org>
Cc: Mike Leach <mike.le...@linaro.org>
Signed-off-by: Suzuki K Poulose <suzuki.poul...@arm.com>
Signed-off-by: Mathieu Poirier <mathieu.poir...@linaro.org>
Link: 
https://lore.kernel.org/r/20201127175256.1092685-4-mathieu.poir...@linaro.org
Signed-off-by: Greg Kroah-Hartman <gre...@linuxfoundation.org>

---
 drivers/hwtracing/coresight/coresight-etm4x-core.c |    9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

--- a/drivers/hwtracing/coresight/coresight-etm4x-core.c
+++ b/drivers/hwtracing/coresight/coresight-etm4x-core.c
@@ -193,7 +193,8 @@ static int etm4_enable_hw(struct etmv4_d
                writeq_relaxed(config->vmid_val[i],
                               drvdata->base + TRCVMIDCVRn(i));
        writel_relaxed(config->vmid_mask0, drvdata->base + TRCVMIDCCTLR0);
-       writel_relaxed(config->vmid_mask1, drvdata->base + TRCVMIDCCTLR1);
+       if (drvdata->numvmidc > 4)
+               writel_relaxed(config->vmid_mask1, drvdata->base + 
TRCVMIDCCTLR1);
 
        if (!drvdata->skip_power_up) {
                /*
@@ -1243,7 +1244,8 @@ static int etm4_cpu_save(struct etmv4_dr
        state->trccidcctlr1 = readl(drvdata->base + TRCCIDCCTLR1);
 
        state->trcvmidcctlr0 = readl(drvdata->base + TRCVMIDCCTLR0);
-       state->trcvmidcctlr1 = readl(drvdata->base + TRCVMIDCCTLR1);
+       if (drvdata->numvmidc > 4)
+               state->trcvmidcctlr1 = readl(drvdata->base + TRCVMIDCCTLR1);
 
        state->trcclaimset = readl(drvdata->base + TRCCLAIMCLR);
 
@@ -1353,7 +1355,8 @@ static void etm4_cpu_restore(struct etmv
        writel_relaxed(state->trccidcctlr1, drvdata->base + TRCCIDCCTLR1);
 
        writel_relaxed(state->trcvmidcctlr0, drvdata->base + TRCVMIDCCTLR0);
-       writel_relaxed(state->trcvmidcctlr1, drvdata->base + TRCVMIDCCTLR1);
+       if (drvdata->numvmidc > 4)
+               writel_relaxed(state->trcvmidcctlr1, drvdata->base + 
TRCVMIDCCTLR1);
 
        writel_relaxed(state->trcclaimset, drvdata->base + TRCCLAIMSET);
 


Reply via email to