The MIPS CPC (Cluster Power Controller) is setup during boot and can take
its configuration from the devicetree. This is currently not possible
because the cpc probing happens before dt initialization. Call order
during startup is:
setup_arch()
prom_init() <- our function
mips_cpc_probe()
smp_stuff()
arch_mem_init()
device_tree_init() <- our function
unflatten_and_copy_device_tree()
To avoid ugly hacking and support a clean devicetree relocate the cps/smp
stuff to device_tree_init(). This is basically the same location as in
generic mips initialization.
Signed-off-by: Markus Stockhausen <markus.stockhausen@gmx.de>
Signed-off-by: Sebastian Gottschall <s.gottschall@dd-wrt.com>
Link: https://github.com/openwrt/openwrt/pull/18888
Signed-off-by: Robert Marko <robimarko@gmail.com>
}
initial_boot_params = (void *)fdt;
unflatten_and_copy_device_tree();
+
+ /* delay cpc & smp probing to allow devicetree access */
+ mips_cpc_probe();
+
+ if (!register_cps_smp_ops())
+ return;
+
+#ifdef CONFIG_MIPS_MT_SMP
+ if (cpu_has_mipsmt) {
+ rtl_smp_ops = vsmp_smp_ops;
+ rtl_smp_ops.init_secondary = rtl_init_secondary;
+ register_smp_ops(&rtl_smp_ops);
+ return;
+ }
+#endif
+
+ register_up_smp_ops();
}
void __init identify_rtl9302(void)
fw_arg2 = 0;
fw_init_cmdline();
-
- mips_cpc_probe();
-
- if (!register_cps_smp_ops())
- return;
-
-#ifdef CONFIG_MIPS_MT_SMP
- if (cpu_has_mipsmt) {
- rtl_smp_ops = vsmp_smp_ops;
- rtl_smp_ops.init_secondary = rtl_init_secondary;
- register_smp_ops(&rtl_smp_ops);
- return;
- }
-#endif
-
- register_up_smp_ops();
}