]> git.sur5r.net Git - u-boot/blobdiff - common/image-fit.c
libfdt: Bring in upstream stringlist functions
[u-boot] / common / image-fit.c
index 73ad34e491ba2fdeccaa3de11b6e4f8440bea122..d67678a6dd56bd57623e2a90820328125c89491a 100644 (file)
@@ -11,9 +11,9 @@
 
 #ifdef USE_HOSTCC
 #include "mkimage.h"
-#include <image.h>
 #include <time.h>
 #else
+#include <linux/compiler.h>
 #include <common.h>
 #include <errno.h>
 #include <mapmem.h>
@@ -21,6 +21,7 @@
 DECLARE_GLOBAL_DATA_PTR;
 #endif /* !USE_HOSTCC*/
 
+#include <image.h>
 #include <bootstage.h>
 #include <u-boot/crc.h>
 #include <u-boot/md5.h>
@@ -1456,7 +1457,7 @@ int fit_conf_get_prop_node(const void *fit, int noffset,
 void fit_conf_print(const void *fit, int noffset, const char *p)
 {
        char *desc;
-       char *uname;
+       const char *uname;
        int ret;
        int loadables_index;
 
@@ -1468,7 +1469,7 @@ void fit_conf_print(const void *fit, int noffset, const char *p)
        else
                printf("%s\n", desc);
 
-       uname = (char *)fdt_getprop(fit, noffset, FIT_KERNEL_PROP, NULL);
+       uname = fdt_getprop(fit, noffset, FIT_KERNEL_PROP, NULL);
        printf("%s  Kernel:       ", p);
        if (uname == NULL)
                printf("unavailable\n");
@@ -1476,26 +1477,23 @@ void fit_conf_print(const void *fit, int noffset, const char *p)
                printf("%s\n", uname);
 
        /* Optional properties */
-       uname = (char *)fdt_getprop(fit, noffset, FIT_RAMDISK_PROP, NULL);
+       uname = fdt_getprop(fit, noffset, FIT_RAMDISK_PROP, NULL);
        if (uname)
                printf("%s  Init Ramdisk: %s\n", p, uname);
 
-       uname = (char *)fdt_getprop(fit, noffset, FIT_FDT_PROP, NULL);
+       uname = fdt_getprop(fit, noffset, FIT_FDT_PROP, NULL);
        if (uname)
                printf("%s  FDT:          %s\n", p, uname);
 
-       uname = (char *)fdt_getprop(fit, noffset, FIT_FPGA_PROP, NULL);
+       uname = fdt_getprop(fit, noffset, FIT_FPGA_PROP, NULL);
        if (uname)
                printf("%s  FPGA:         %s\n", p, uname);
 
        /* Print out all of the specified loadables */
        for (loadables_index = 0;
-            fdt_get_string_index(fit, noffset,
-                       FIT_LOADABLE_PROP,
-                       loadables_index,
-                       (const char **)&uname) == 0;
-            loadables_index++)
-       {
+            uname = fdt_stringlist_get(fit, noffset, FIT_LOADABLE_PROP,
+                                       loadables_index, NULL), uname;
+            loadables_index++) {
                if (loadables_index == 0) {
                        printf("%s  Loadables:    ", p);
                } else {
@@ -1507,6 +1505,12 @@ void fit_conf_print(const void *fit, int noffset, const char *p)
 
 static int fit_image_select(const void *fit, int rd_noffset, int verify)
 {
+#if !defined(USE_HOSTCC) && defined(CONFIG_FIT_IMAGE_POST_PROCESS)
+       const void *data;
+       size_t size;
+       int ret;
+#endif
+
        fit_image_print(fit, rd_noffset, "   ");
 
        if (verify) {
@@ -1518,6 +1522,23 @@ static int fit_image_select(const void *fit, int rd_noffset, int verify)
                puts("OK\n");
        }
 
+#if !defined(USE_HOSTCC) && defined(CONFIG_FIT_IMAGE_POST_PROCESS)
+       ret = fit_image_get_data(fit, rd_noffset, &data, &size);
+       if (ret)
+               return ret;
+
+       /* perform any post-processing on the image data */
+       board_fit_image_post_process((void **)&data, &size);
+
+       /*
+        * update U-Boot's understanding of the "data" property start address
+        * and size according to the performed post-processing
+        */
+       ret = fdt_setprop((void *)fit, rd_noffset, FIT_DATA_PROP, data, size);
+       if (ret)
+               return ret;
+#endif
+
        return 0;
 }
 
@@ -1536,13 +1557,13 @@ int fit_get_node_from_config(bootm_headers_t *images, const char *prop_name,
        cfg_noffset = fit_conf_get_node(fit_hdr, images->fit_uname_cfg);
        if (cfg_noffset < 0) {
                debug("*  %s: no such config\n", prop_name);
-               return -ENOENT;
+               return -EINVAL;
        }
 
        noffset = fit_conf_get_prop_node(fit_hdr, cfg_noffset, prop_name);
        if (noffset < 0) {
                debug("*  %s: no '%s' in config\n", prop_name, prop_name);
-               return -ENOLINK;
+               return -ENOENT;
        }
 
        return noffset;
@@ -1688,7 +1709,8 @@ int fit_image_load(bootm_headers_t *images, ulong addr,
                  (image_type == IH_TYPE_KERNEL &&
                   fit_image_check_type(fit, noffset, IH_TYPE_KERNEL_NOLOAD));
 
-       os_ok = image_type == IH_TYPE_FLATDT || IH_TYPE_FPGA ||
+       os_ok = image_type == IH_TYPE_FLATDT ||
+               image_type == IH_TYPE_FPGA ||
                fit_image_check_os(fit, noffset, IH_OS_LINUX) ||
                fit_image_check_os(fit, noffset, IH_OS_U_BOOT) ||
                fit_image_check_os(fit, noffset, IH_OS_OPENRTOS);