Merge tag 'xilinx-for-v2020.10' of https://gitlab.denx.de/u-boot/custodians/u-boot...
[platform/kernel/u-boot.git] / common / image-fit.c
index 3d0cd56..d54eff9 100644 (file)
 #ifdef USE_HOSTCC
 #include "mkimage.h"
 #include <time.h>
+#include <linux/libfdt.h>
 #include <u-boot/crc.h>
 #else
 #include <linux/compiler.h>
 #include <linux/kconfig.h>
 #include <common.h>
 #include <errno.h>
+#include <log.h>
 #include <mapmem.h>
 #include <asm/io.h>
 #include <malloc.h>
@@ -30,6 +32,7 @@ DECLARE_GLOBAL_DATA_PTR;
 #include <u-boot/md5.h>
 #include <u-boot/sha1.h>
 #include <u-boot/sha256.h>
+#include <u-boot/sha512.h>
 
 /*****************************************************************************/
 /* New uImage format routines */
@@ -168,7 +171,7 @@ static void fit_image_print_data(const void *fit, int noffset, const char *p,
        int value_len;
        char *algo;
        const char *padding;
-       int required;
+       bool required;
        int ret, i;
 
        debug("%s  %s node:    '%s'\n", p, type,
@@ -179,8 +182,8 @@ static void fit_image_print_data(const void *fit, int noffset, const char *p,
                return;
        }
        printf("%s", algo);
-       keyname = fdt_getprop(fit, noffset, "key-name-hint", NULL);
-       required = fdt_getprop(fit, noffset, "required", NULL) != NULL;
+       keyname = fdt_getprop(fit, noffset, FIT_KEY_HINT, NULL);
+       required = fdt_getprop(fit, noffset, FIT_KEY_REQUIRED, NULL) != NULL;
        if (keyname)
                printf(":%s", keyname);
        if (required)
@@ -1204,6 +1207,14 @@ int calculate_hash(const void *data, int data_len, const char *algo,
                sha256_csum_wd((unsigned char *)data, data_len,
                               (unsigned char *)value, CHUNKSZ_SHA256);
                *value_len = SHA256_SUM_LEN;
+       } else if (IMAGE_ENABLE_SHA384 && strcmp(algo, "sha384") == 0) {
+               sha384_csum_wd((unsigned char *)data, data_len,
+                              (unsigned char *)value, CHUNKSZ_SHA384);
+               *value_len = SHA384_SUM_LEN;
+       } else if (IMAGE_ENABLE_SHA512 && strcmp(algo, "sha512") == 0) {
+               sha512_csum_wd((unsigned char *)data, data_len,
+                              (unsigned char *)value, CHUNKSZ_SHA512);
+               *value_len = SHA512_SUM_LEN;
        } else if (IMAGE_ENABLE_MD5 && strcmp(algo, "md5") == 0) {
                md5_wd((unsigned char *)data, data_len, value, CHUNKSZ_MD5);
                *value_len = 16;
@@ -1271,7 +1282,7 @@ int fit_image_verify_with_data(const void *fit, int image_noffset,
        int ret;
 
        /* Verify all required signatures */
-       if (IMAGE_ENABLE_VERIFY &&
+       if (FIT_IMAGE_ENABLE_VERIFY &&
            fit_image_verify_required_sigs(fit, image_noffset, data, size,
                                           gd_fdt_blob(), &verify_all)) {
                err_msg = "Unable to verify required signature";
@@ -1293,7 +1304,7 @@ int fit_image_verify_with_data(const void *fit, int image_noffset,
                                                 &err_msg))
                                goto error;
                        puts("+ ");
-               } else if (IMAGE_ENABLE_VERIFY && verify_all &&
+               } else if (FIT_IMAGE_ENABLE_VERIFY && verify_all &&
                                !strncmp(name, FIT_SIG_NODENAME,
                                        strlen(FIT_SIG_NODENAME))) {
                        ret = fit_image_check_sig(fit, noffset, data,
@@ -1933,7 +1944,7 @@ int fit_image_load(bootm_headers_t *images, ulong addr,
                if (image_type == IH_TYPE_KERNEL)
                        images->fit_uname_cfg = fit_base_uname_config;
 
-               if (IMAGE_ENABLE_VERIFY && images->verify) {
+               if (FIT_IMAGE_ENABLE_VERIFY && images->verify) {
                        puts("   Verifying Hash Integrity ... ");
                        if (fit_config_verify(fit, cfg_noffset)) {
                                puts("Bad Data Hash\n");
@@ -1951,7 +1962,7 @@ int fit_image_load(bootm_headers_t *images, ulong addr,
                fit_uname = fit_get_name(fit, noffset, NULL);
        }
        if (noffset < 0) {
-               puts("Could not find subimage node\n");
+               printf("Could not find subimage node type '%s'\n", prop_name);
                bootstage_error(bootstage_id + BOOTSTAGE_SUB_SUBNODE);
                return -ENOENT;
        }