--- /dev/null
+--- a/arch/mips/ralink/of.c
++++ b/arch/mips/ralink/of.c
+@@ -81,13 +81,23 @@
+
+ void __init plat_mem_setup(void)
+ {
++ void *dtb = NULL;
++
+ set_io_port_base(KSEG1);
+
+ /*
+ * Load the builtin devicetree. This causes the chosen node to be
+- * parsed resulting in our memory appearing
++ * parsed resulting in our memory appearing. fw_passed_dtb is used
++ * by CONFIG_MIPS_APPENDED_RAW_DTB as well.
+ */
+- __dt_setup_arch(&__image_dtb);
++ if (fw_passed_dtb)
++ dtb = (void *)fw_passed_dtb;
++ else if (__dtb_start != __dtb_end)
++ dtb = (void *)__dtb_start;
++ else
++ dtb = &__image_dtb;
++
++ __dt_setup_arch(dtb);
+
+ of_scan_flat_dt(early_init_dt_find_chosen, NULL);
+ if (chosen_dtb)