Allow the itb file to declare to u-boot that its hash should not be
checked automatically on bootm or iminfo.  This allows an image to
either be checked automatically or to include a script which may
check it otherwise (such as after part of the itb has been relocated
to RAM by the script).

Signed-off-by: Joe Hershberger <joe.hershber...@ni.com>
---
 common/image.c  | 41 +++++++++++++++++++++++++++++++++++++++++
 include/image.h |  4 ++++
 2 files changed, 45 insertions(+)

diff --git a/common/image.c b/common/image.c
index 4252e63..948ce0d 100644
--- a/common/image.c
+++ b/common/image.c
@@ -2494,6 +2494,36 @@ int fit_image_hash_get_value(const void *fit, int 
noffset, uint8_t **value,
        return 0;
 }
 
+#ifndef USE_HOSTCC
+/**
+ * fit_image_hash_get_ignore - get hash ignore flag
+ * @fit: pointer to the FIT format image header
+ * @noffset: hash node offset
+ * @ignore: pointer to an int, will hold hash ignore flag
+ *
+ * fit_image_hash_get_ignore() finds hash ignore property in a given hash node.
+ * If the property is found and non-zero, the hash algorithm is not verified by
+ * u-boot automatically.
+ *
+ * returns:
+ *     0, on ignore not found
+ *     value, on ignore found
+ */
+int fit_image_hash_get_ignore(const void *fit, int noffset, int *ignore)
+{
+       int len;
+       int *value;
+
+       value = (int *)fdt_getprop(fit, noffset, FIT_IGNORE_PROP, &len);
+       if (value == NULL || len != sizeof(int))
+               *ignore = 0;
+       else
+               *ignore = *value;
+
+       return 0;
+}
+#endif
+
 /**
  * fit_set_timestamp - set node timestamp property
  * @fit: pointer to the FIT format image header
@@ -2757,6 +2787,9 @@ int fit_image_check_hashes(const void *fit, int 
image_noffset)
        char            *algo;
        uint8_t         *fit_value;
        int             fit_value_len;
+#ifndef USE_HOSTCC
+       int             ignore;
+#endif
        uint8_t         value[FIT_MAX_HASH_LEN];
        int             value_len;
        int             noffset;
@@ -2793,6 +2826,14 @@ int fit_image_check_hashes(const void *fit, int 
image_noffset)
                        }
                        printf("%s", algo);
 
+#ifndef USE_HOSTCC
+                       fit_image_hash_get_ignore(fit, noffset, &ignore);
+                       if (ignore) {
+                               printf("-skipped ");
+                               continue;
+                       }
+#endif
+
                        if (fit_image_hash_get_value(fit, noffset, &fit_value,
                                                        &fit_value_len)) {
                                err_msg = " error!\nCan't get hash value "
diff --git a/include/image.h b/include/image.h
index aa9daa2..8e9daf3 100644
--- a/include/image.h
+++ b/include/image.h
@@ -510,6 +510,7 @@ static inline int image_check_target_arch(const 
image_header_t *hdr)
 #define FIT_HASH_NODENAME      "hash"
 #define FIT_ALGO_PROP          "algo"
 #define FIT_VALUE_PROP         "value"
+#define FIT_IGNORE_PROP                "uboot-ignore"
 
 /* image node */
 #define FIT_DATA_PROP          "data"
@@ -594,6 +595,9 @@ int fit_image_get_data(const void *fit, int noffset,
 int fit_image_hash_get_algo(const void *fit, int noffset, char **algo);
 int fit_image_hash_get_value(const void *fit, int noffset, uint8_t **value,
                                int *value_len);
+#ifndef USE_HOSTCC
+int fit_image_hash_get_ignore(const void *fit, int noffset, int *ignore);
+#endif
 
 int fit_set_timestamp(void *fit, int noffset, time_t timestamp);
 int fit_set_hashes(void *fit);
-- 
1.7.11.5

_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to