]> git.sur5r.net Git - u-boot/blobdiff - arch/nios2/lib/bootm.c
cmd_dasa_sim.c: Fix GCC 4.6 build warnings
[u-boot] / arch / nios2 / lib / bootm.c
index 5d25edf80d29a10c4cfbc19f92d8abe8359de7d1..f32be52108212477507b51b163fbe0563a0e7874 100644 (file)
 
 #define NIOS_MAGIC 0x534f494e /* enable command line and initrd passing */
 
-int do_bootm_linux(int flag, int argc, char *argv[], bootm_headers_t *images)
+int do_bootm_linux(int flag, int argc, char * const argv[], bootm_headers_t *images)
 {
        void (*kernel)(int, int, int, char *) = (void *)images->ep;
        char *commandline = getenv("bootargs");
        ulong initrd_start = images->rd_start;
        ulong initrd_end = images->rd_end;
+       char *of_flat_tree = NULL;
+#if defined(CONFIG_OF_LIBFDT)
+       /* did generic code already find a device tree? */
+       if (images->ft_len)
+               of_flat_tree = images->ft_addr;
+#endif
+       if (!of_flat_tree && argc > 3)
+               of_flat_tree = (char *)simple_strtoul(argv[3], NULL, 16);
+       if (of_flat_tree)
+               initrd_end = (ulong)of_flat_tree;
 
        if ((flag != 0) && (flag != BOOTM_STATE_OS_GO))
                return 1;
@@ -45,6 +55,15 @@ int do_bootm_linux(int flag, int argc, char *argv[], bootm_headers_t *images)
 
        debug("bootargs=%s @ 0x%lx\n", commandline, (ulong)&commandline);
        debug("initrd=0x%lx-0x%lx\n", (ulong)initrd_start, (ulong)initrd_end);
+       /* kernel parameters passing
+        * r4 : NIOS magic
+        * r5 : initrd start
+        * r6 : initrd end or fdt
+        * r7 : kernel command line
+        * fdt is passed to kernel via r6, the same as initrd_end. fdt will be
+        * verified with fdt magic. when both initrd and fdt are used at the
+        * same time, fdt must follow immediately after initrd.
+        */
        kernel(NIOS_MAGIC, initrd_start, initrd_end, commandline);
        /* does not return */