]> git.sur5r.net Git - u-boot/blobdiff - arch/nds32/lib/bootm.c
rockchip: rk3368: mkimage: add support for the RK3368
[u-boot] / arch / nds32 / lib / bootm.c
index 65ae1eb7157ec6face1cbc24d02c407ab37c5f4c..21aadf284f11843d74b104ac4f0f0e074fe2dcf9 100644 (file)
@@ -3,20 +3,7 @@
  * Shawn Lin, Andes Technology Corporation <nobuhiro@andestech.com>
  * Macpaul Lin, Andes Technology Corporation <macpaul@andestech.com>
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.         See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307         USA
- *
+ * SPDX-License-Identifier:    GPL-2.0+
  */
 
 #include <common.h>
 #include <image.h>
 #include <u-boot/zlib.h>
 #include <asm/byteorder.h>
+#include <asm/bootm.h>
+#include <asm/setup.h>
 
 DECLARE_GLOBAL_DATA_PTR;
 
+int arch_fixup_fdt(void *blob)
+{
+       return 0;
+}
+
+
 #if defined(CONFIG_SETUP_MEMORY_TAGS) || \
        defined(CONFIG_CMDLINE_TAG) || \
        defined(CONFIG_INITRD_TAG) || \
@@ -80,6 +75,15 @@ int do_bootm_linux(int flag, int argc, char *argv[], bootm_headers_t *images)
        debug("## Transferring control to Linux (at address %08lx) ...\n",
               (ulong)theKernel);
 
+       if (IMAGE_ENABLE_OF_LIBFDT && images->ft_len) {
+#ifdef CONFIG_OF_LIBFDT
+               debug("using: FDT\n");
+               if (image_setup_linux(images)) {
+                       printf("FDT creation failed! hanging...");
+                       hang();
+               }
+#endif
+       } else if (BOOTM_ENABLE_TAGS) {
 #if defined(CONFIG_SETUP_MEMORY_TAGS) || \
        defined(CONFIG_CMDLINE_TAG) || \
        defined(CONFIG_INITRD_TAG) || \
@@ -114,16 +118,17 @@ int do_bootm_linux(int flag, int argc, char *argv[], bootm_headers_t *images)
                udc_disconnect();
        }
 #endif
-
+       }
        cleanup_before_linux();
-
-       theKernel(0, machid, bd->bi_boot_params);
+       if (IMAGE_ENABLE_OF_LIBFDT && images->ft_len)
+               theKernel(0, machid, (unsigned long)images->ft_addr);
+       else
+               theKernel(0, machid, bd->bi_boot_params);
        /* does not return */
 
        return 1;
 }
 
-
 #if defined(CONFIG_SETUP_MEMORY_TAGS) || \
        defined(CONFIG_CMDLINE_TAG) || \
        defined(CONFIG_INITRD_TAG) || \
@@ -143,7 +148,6 @@ static void setup_start_tag(bd_t *bd)
        params = tag_next(params);
 }
 
-
 #ifdef CONFIG_SETUP_MEMORY_TAGS
 static void setup_memory_tags(bd_t *bd)
 {
@@ -161,7 +165,6 @@ static void setup_memory_tags(bd_t *bd)
 }
 #endif /* CONFIG_SETUP_MEMORY_TAGS */
 
-
 static void setup_commandline_tag(bd_t *bd, char *commandline)
 {
        char *p;
@@ -189,7 +192,6 @@ static void setup_commandline_tag(bd_t *bd, char *commandline)
        params = tag_next(params);
 }
 
-
 #ifdef CONFIG_INITRD_TAG
 static void setup_initrd_tag(bd_t *bd, ulong initrd_start, ulong initrd_end)
 {
@@ -237,7 +239,6 @@ void setup_revision_tag(struct tag **in_params)
 }
 #endif  /* CONFIG_REVISION_TAG */
 
-
 static void setup_end_tag(bd_t *bd)
 {
        params->hdr.tag = ATAG_NONE;