configs: Resync with savedefconfig
[oweals/u-boot.git] / cmd / source.c
index a9831b6608581661c8f274abec93a283f679bc01..b6c709a3d25865f3340f8febd6656d918c3020f8 100644 (file)
@@ -1,8 +1,7 @@
+// SPDX-License-Identifier: GPL-2.0+
 /*
  * (C) Copyright 2001
  * Kyle Harris, kharris@nexus-tech.net
- *
- * SPDX-License-Identifier:    GPL-2.0+
  */
 
 /*
 
 #include <common.h>
 #include <command.h>
+#include <env.h>
 #include <image.h>
+#include <log.h>
 #include <malloc.h>
 #include <mapmem.h>
 #include <asm/byteorder.h>
 #include <asm/io.h>
 
-int
-source (ulong addr, const char *fit_uname)
+#if defined(CONFIG_FIT)
+/**
+ * get_default_image() - Return default property from /images
+ *
+ * Return: Pointer to value of default property (or NULL)
+ */
+static const char *get_default_image(const void *fit)
+{
+       int images_noffset;
+
+       images_noffset = fdt_path_offset(fit, FIT_IMAGES_PATH);
+       if (images_noffset < 0)
+               return NULL;
+
+       return fdt_getprop(fit, images_noffset, FIT_DEFAULT_PROP, NULL);
+}
+#endif
+
+int image_source_script(ulong addr, const char *fit_uname)
 {
        ulong           len;
-#if defined(CONFIG_IMAGE_FORMAT_LEGACY)
+#if defined(CONFIG_LEGACY_IMAGE_FORMAT)
        const image_header_t *hdr;
 #endif
        u32             *data;
@@ -44,7 +62,7 @@ source (ulong addr, const char *fit_uname)
 
        buf = map_sysmem(addr, 0);
        switch (genimg_get_format(buf)) {
-#if defined(CONFIG_IMAGE_FORMAT_LEGACY)
+#if defined(CONFIG_LEGACY_IMAGE_FORMAT)
        case IMAGE_FORMAT_LEGACY:
                hdr = buf;
 
@@ -88,17 +106,20 @@ source (ulong addr, const char *fit_uname)
 #endif
 #if defined(CONFIG_FIT)
        case IMAGE_FORMAT_FIT:
-               if (fit_uname == NULL) {
-                       puts ("No FIT subimage unit name\n");
-                       return 1;
-               }
-
                fit_hdr = buf;
                if (!fit_check_format (fit_hdr)) {
                        puts ("Bad FIT image format\n");
                        return 1;
                }
 
+               if (!fit_uname)
+                       fit_uname = get_default_image(fit_hdr);
+
+               if (!fit_uname) {
+                       puts("No FIT subimage unit name\n");
+                       return 1;
+               }
+
                /* get script component image node offset */
                noffset = fit_image_get_node (fit_hdr, fit_uname);
                if (noffset < 0) {
@@ -134,13 +155,14 @@ source (ulong addr, const char *fit_uname)
                return 1;
        }
 
-       debug ("** Script length: %ld\n", len);
+       debug("** Script length: %ld\n", len);
        return run_command_list((char *)data, len, 0);
 }
 
 /**************************************************/
 #if defined(CONFIG_CMD_SOURCE)
-static int do_source(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+static int do_source(struct cmd_tbl *cmdtp, int flag, int argc,
+                    char *const argv[])
 {
        ulong addr;
        int rcode;
@@ -149,19 +171,20 @@ static int do_source(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
        /* Find script image */
        if (argc < 2) {
                addr = CONFIG_SYS_LOAD_ADDR;
-               debug ("*  source: default load address = 0x%08lx\n", addr);
+               debug("*  source: default load address = 0x%08lx\n", addr);
 #if defined(CONFIG_FIT)
-       } else if (fit_parse_subimage (argv[1], load_addr, &addr, &fit_uname)) {
-               debug ("*  source: subimage '%s' from FIT image at 0x%08lx\n",
-                               fit_uname, addr);
+       } else if (fit_parse_subimage(argv[1], image_load_addr, &addr,
+                                     &fit_uname)) {
+               debug("*  source: subimage '%s' from FIT image at 0x%08lx\n",
+                     fit_uname, addr);
 #endif
        } else {
                addr = simple_strtoul(argv[1], NULL, 16);
-               debug ("*  source: cmdline image address = 0x%08lx\n", addr);
+               debug("*  source: cmdline image address = 0x%08lx\n", addr);
        }
 
        printf ("## Executing script at %08lx\n", addr);
-       rcode = source (addr, fit_uname);
+       rcode = image_source_script(addr, fit_uname);
        return rcode;
 }