ARM: imx: Do L2 errata only if the L2 cache isn't enabled
authorDirk Behme <dirk.behme@de.bosch.com>
Fri, 19 Feb 2016 06:50:12 +0000 (07:50 +0100)
committerShawn Guo <shawnguo@kernel.org>
Sun, 28 Feb 2016 07:55:26 +0000 (15:55 +0800)
All the generic L2 cache handling code is encapsulated by a
check if the L2 cache is enabled. If it's enabled already, the code
is skipped. The write to the L2-Cache controller from non-secure
world causes an imprecise external abort. This is needed in
scenarios where one of the cores runs an other OS, e.g. an RTOS.

For the i.MX6 specific L2 cache handling we missed this check.
Add it.

Signed-off-by: Marcel Grosshans <MarcelViktor.Grosshans@de.bosch.com>
Signed-off-by: Dirk Behme <dirk.behme@de.bosch.com>
Signed-off-by: Shawn Guo <shawnguo@kernel.org>
arch/arm/mach-imx/system.c

index 93d4a9a393531677dc0d2e5fbb833b69abe8e068..105d1ce4ed9d1400da09d476c03761e2de5c982e 100644 (file)
@@ -106,6 +106,9 @@ void __init imx_init_l2cache(void)
                goto out;
        }
 
+       if (readl_relaxed(l2x0_base + L2X0_CTRL) & L2X0_CTRL_EN)
+               goto skip_if_enabled;
+
        /* Configure the L2 PREFETCH and POWER registers */
        val = readl_relaxed(l2x0_base + L310_PREFETCH_CTRL);
        val |= 0x70800000;
@@ -122,6 +125,7 @@ void __init imx_init_l2cache(void)
                val &= ~(1 << 30 | 1 << 23);
        writel_relaxed(val, l2x0_base + L310_PREFETCH_CTRL);
 
+skip_if_enabled:
        iounmap(l2x0_base);
        of_node_put(np);