diff --git a/target/linux/realtek/files-5.10/arch/mips/rtl838x/prom.c b/target/linux/realtek/files-5.10/arch/mips/rtl838x/prom.c
index 3390c043347ef259b7a5f5f6b6c101cbada61716..76e3ff7486e0b8c69371f4ebc6b76d5a4932db1f 100644
--- a/target/linux/realtek/files-5.10/arch/mips/rtl838x/prom.c
+++ b/target/linux/realtek/files-5.10/arch/mips/rtl838x/prom.c
@@ -18,6 +18,8 @@
 #include <asm/addrspace.h>
 #include <asm/page.h>
 #include <asm/cpu.h>
+#include <asm/smp-ops.h>
+#include <asm/mips-cps.h>
 
 #include <mach-rtl83xx.h>
 
@@ -179,5 +181,23 @@ void __init prom_init(void)
 
 	pr_info("SoC Type: %s\n", get_system_type());
 
+	/* Early detection of CMP support */
+	if(soc_info.family == RTL9310_FAMILY_ID) {
+		mips_cm_probe();
+		mips_cpc_probe();
+	}
+
 	prom_init_cmdline();
+
+#ifdef  CONFIG_MIPS_CPS
+	if (!register_cps_smp_ops()) {
+		return;
+	}
+#endif
+#ifdef CONFIG_MIPS_MT_SMP
+	if (!register_vsmp_smp_ops()) {
+		return;
+	}
+#endif
+	register_up_smp_ops();
 }