Merge tag 'cleanup-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/arm...
[firefly-linux-kernel-4.4.55.git] / arch / arm / mach-mvebu / platsmp.c
index 2e4508a9baf68da9ee601d034f2b9eda8d86253b..f9c09b75d4d7fd26dda62686290ba5b6d23b5529 100644 (file)
 #include "pmsu.h"
 #include "coherency.h"
 
+static struct clk *__init get_cpu_clk(int cpu)
+{
+       struct clk *cpu_clk;
+       struct device_node *np = of_get_cpu_node(cpu, NULL);
+
+       if (WARN(!np, "missing cpu node\n"))
+               return NULL;
+       cpu_clk = of_clk_get(np, 0);
+       if (WARN_ON(IS_ERR(cpu_clk)))
+               return NULL;
+       return cpu_clk;
+}
+
 void __init set_secondary_cpus_clock(void)
 {
-       int thiscpu;
+       int thiscpu, cpu;
        unsigned long rate;
-       struct clk *cpu_clk = NULL;
-       struct device_node *np = NULL;
+       struct clk *cpu_clk;
 
        thiscpu = smp_processor_id();
-       for_each_node_by_type(np, "cpu") {
-               int err;
-               int cpu;
-
-               err = of_property_read_u32(np, "reg", &cpu);
-               if (WARN_ON(err))
-                       return;
-
-               if (cpu == thiscpu) {
-                       cpu_clk = of_clk_get(np, 0);
-                       break;
-               }
-       }
-       if (WARN_ON(IS_ERR(cpu_clk)))
+       cpu_clk = get_cpu_clk(thiscpu);
+       if (!cpu_clk)
                return;
        clk_prepare_enable(cpu_clk);
        rate = clk_get_rate(cpu_clk);
 
        /* set all the other CPU clk to the same rate than the boot CPU */
-       for_each_node_by_type(np, "cpu") {
-               int err;
-               int cpu;
-
-               err = of_property_read_u32(np, "reg", &cpu);
-               if (WARN_ON(err))
+       for_each_possible_cpu(cpu) {
+               if (cpu == thiscpu)
+                       continue;
+               cpu_clk = get_cpu_clk(cpu);
+               if (!cpu_clk)
                        return;
-
-               if (cpu != thiscpu) {
-                       cpu_clk = of_clk_get(np, 0);
-                       clk_set_rate(cpu_clk, rate);
-               }
+               clk_set_rate(cpu_clk, rate);
        }
 }