ARM: ux500: get SCU base from device tree
authorLinus Walleij <linus.walleij@linaro.org>
Thu, 14 May 2015 07:46:40 +0000 (09:46 +0200)
committerLinus Walleij <linus.walleij@linaro.org>
Mon, 18 May 2015 13:06:40 +0000 (15:06 +0200)
The SMP startup/shutdown code relied on a static SCU base
address, let's get this from the device tree instead.

Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
arch/arm/mach-ux500/platsmp.c

index 1e13d0a8ad77ffb676577ed997de56ae02cf25d3..62b1de922bd8fdeaddc55aa13b295dc83b9a2120 100644 (file)
@@ -16,6 +16,8 @@
 #include <linux/device.h>
 #include <linux/smp.h>
 #include <linux/io.h>
+#include <linux/of.h>
+#include <linux/of_address.h>
 
 #include <asm/cacheflush.h>
 #include <asm/smp_plat.h>
@@ -122,8 +124,13 @@ static void __init wakeup_secondary(void)
 static void __init ux500_smp_init_cpus(void)
 {
        unsigned int i, ncores;
+       struct device_node *np;
 
-       scu_base = ioremap(U8500_SCU_BASE, 0x100);
+       np = of_find_compatible_node(NULL, NULL, "arm,cortex-a9-scu");
+       scu_base = of_iomap(np, 0);
+       of_node_put(np);
+       if (!scu_base)
+               return;
        backupram = ioremap(U8500_BACKUPRAM0_BASE, SZ_8K);
        ncores = scu_get_core_count(scu_base);