|
@@ -80,7 +80,8 @@ do_bootm_linux(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[],
|
|
ulong cmd_start, cmd_end, bootmap_base;
|
|
ulong cmd_start, cmd_end, bootmap_base;
|
|
bd_t *kbd;
|
|
bd_t *kbd;
|
|
ulong ep = 0;
|
|
ulong ep = 0;
|
|
- void (*kernel)(bd_t *, ulong, ulong, ulong, ulong);
|
|
|
|
|
|
+ void (*kernel)(bd_t *, ulong r4, ulong r5, ulong r6,
|
|
|
|
+ ulong r7, ulong r8, ulong r9);
|
|
int ret;
|
|
int ret;
|
|
ulong of_size = 0;
|
|
ulong of_size = 0;
|
|
struct lmb *lmb = images->lmb;
|
|
struct lmb *lmb = images->lmb;
|
|
@@ -166,8 +167,8 @@ do_bootm_linux(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[],
|
|
puts ("Could not find kernel entry point!\n");
|
|
puts ("Could not find kernel entry point!\n");
|
|
goto error;
|
|
goto error;
|
|
}
|
|
}
|
|
- kernel = (void (*)(bd_t *, ulong, ulong, ulong, ulong))ep;
|
|
|
|
-
|
|
|
|
|
|
+ kernel = (void (*)(bd_t *, ulong, ulong, ulong,
|
|
|
|
+ ulong, ulong, ulong))ep;
|
|
/* find ramdisk */
|
|
/* find ramdisk */
|
|
ret = boot_get_ramdisk (argc, argv, images, IH_ARCH_PPC,
|
|
ret = boot_get_ramdisk (argc, argv, images, IH_ARCH_PPC,
|
|
&rd_data_start, &rd_data_end);
|
|
&rd_data_start, &rd_data_end);
|
|
@@ -282,14 +283,23 @@ do_bootm_linux(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[],
|
|
if (of_flat_tree) { /* device tree; boot new style */
|
|
if (of_flat_tree) { /* device tree; boot new style */
|
|
/*
|
|
/*
|
|
* Linux Kernel Parameters (passing device tree):
|
|
* Linux Kernel Parameters (passing device tree):
|
|
- * r3: pointer to the fdt, followed by the board info data
|
|
|
|
- * r4: physical pointer to the kernel itself
|
|
|
|
- * r5: NULL
|
|
|
|
- * r6: NULL
|
|
|
|
- * r7: NULL
|
|
|
|
|
|
+ * r3: pointer to the fdt
|
|
|
|
+ * r4: 0
|
|
|
|
+ * r5: 0
|
|
|
|
+ * r6: epapr magic
|
|
|
|
+ * r7: size of IMA in bytes
|
|
|
|
+ * r8: 0
|
|
|
|
+ * r9: 0
|
|
*/
|
|
*/
|
|
|
|
+#if defined(CONFIG_85xx) || defined(CONFIG_440)
|
|
|
|
+ #define EPAPR_MAGIC (0x45504150)
|
|
|
|
+#else
|
|
|
|
+ #define EPAPR_MAGIC (0x65504150)
|
|
|
|
+#endif
|
|
|
|
+
|
|
debug (" Booting using OF flat tree...\n");
|
|
debug (" Booting using OF flat tree...\n");
|
|
- (*kernel) ((bd_t *)of_flat_tree, (ulong)kernel, 0, 0, 0);
|
|
|
|
|
|
+ (*kernel) ((bd_t *)of_flat_tree, 0, 0, EPAPR_MAGIC,
|
|
|
|
+ CFG_BOOTMAPSZ, 0, 0);
|
|
/* does not return */
|
|
/* does not return */
|
|
} else
|
|
} else
|
|
#endif
|
|
#endif
|
|
@@ -301,9 +311,12 @@ do_bootm_linux(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[],
|
|
* r5: initrd_end - unused if r4 is 0
|
|
* r5: initrd_end - unused if r4 is 0
|
|
* r6: Start of command line string
|
|
* r6: Start of command line string
|
|
* r7: End of command line string
|
|
* r7: End of command line string
|
|
|
|
+ * r8: 0
|
|
|
|
+ * r9: 0
|
|
*/
|
|
*/
|
|
debug (" Booting using board info...\n");
|
|
debug (" Booting using board info...\n");
|
|
- (*kernel) (kbd, initrd_start, initrd_end, cmd_start, cmd_end);
|
|
|
|
|
|
+ (*kernel) (kbd, initrd_start, initrd_end,
|
|
|
|
+ cmd_start, cmd_end, 0, 0);
|
|
/* does not return */
|
|
/* does not return */
|
|
}
|
|
}
|
|
return ;
|
|
return ;
|