]> git.ipfire.org Git - thirdparty/openwrt.git/commitdiff
realtek: relocate mips cpc probing 18888/head
authorMarkus Stockhausen <markus.stockhausen@gmx.de>
Fri, 23 May 2025 17:21:28 +0000 (13:21 -0400)
committerRobert Marko <robimarko@gmail.com>
Sat, 24 May 2025 19:20:58 +0000 (21:20 +0200)
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>
target/linux/realtek/files-6.6/arch/mips/rtl838x/prom.c

index 03993ec01d4026bb3fe9e02543756b6db25f0bd5..045298724751ef238b8cdfed14f8002d6910c18e 100644 (file)
@@ -76,6 +76,23 @@ void __init device_tree_init(void)
        }
        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)
@@ -205,20 +222,4 @@ void __init prom_init(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();
 }