[U-Boot] [PATCH v2 2/3] fit: allow fit to call hardware accelerated hash
Ben Whitten
ben.whitten at gmail.com
Wed Jun 6 16:03:57 UTC 2018
Move to calling the abstraction which allows for hardware acceleration.
We also remove unneeded defines and only include objects if required.
Signed-off-by: Ben Whitten <ben.whitten at lairdtech.com>
---
common/hash.c | 4 ++++
common/image-fit.c | 27 +++++++++------------------
include/image.h | 42 ++++++++++++++++++++++--------------------
lib/Makefile | 5 ++++-
4 files changed, 39 insertions(+), 39 deletions(-)
diff --git a/common/hash.c b/common/hash.c
index d2f4b3f..ceee124 100644
--- a/common/hash.c
+++ b/common/hash.c
@@ -85,6 +85,7 @@ static int hash_finish_sha256(struct hash_algo *algo, void *ctx, void
}
#endif
+#if defined(CONFIG_CRC32)
static int hash_init_crc32(struct hash_algo *algo, void **ctxp)
{
uint32_t *ctx = malloc(sizeof(uint32_t));
@@ -110,6 +111,7 @@ static int hash_finish_crc32(struct hash_algo *algo, void *ctx, void *dest_buf,
free(ctx);
return 0;
}
+#endif
/*
* These are the hash algorithms we support. If we have hardware acceleration
@@ -159,6 +161,7 @@ static struct hash_algo hash_algo[] = {
#endif
},
#endif
+#ifdef CONFIG_CRC32
{
.name = "crc32",
.digest_size = 4,
@@ -168,6 +171,7 @@ static struct hash_algo hash_algo[] = {
.hash_update = hash_update_crc32,
.hash_finish = hash_finish_crc32,
},
+#endif
#ifdef CONFIG_MD5
{
.name = "md5",
diff --git a/common/image-fit.c b/common/image-fit.c
index 8c15ed1..7d8c961 100644
--- a/common/image-fit.c
+++ b/common/image-fit.c
@@ -1082,26 +1082,17 @@ int fit_set_timestamp(void *fit, int noffset, time_t timestamp)
int calculate_hash(const void *data, int data_len, const char *algo,
uint8_t *value, int *value_len)
{
- if (IMAGE_ENABLE_CRC32 && strcmp(algo, "crc32") == 0) {
- *((uint32_t *)value) = crc32_wd(0, data, data_len,
- CHUNKSZ_CRC32);
- *((uint32_t *)value) = cpu_to_uimage(*((uint32_t *)value));
- *value_len = 4;
- } else if (IMAGE_ENABLE_SHA1 && strcmp(algo, "sha1") == 0) {
- sha1_csum_wd((unsigned char *)data, data_len,
- (unsigned char *)value, CHUNKSZ_SHA1);
- *value_len = 20;
- } else if (IMAGE_ENABLE_SHA256 && strcmp(algo, "sha256") == 0) {
- sha256_csum_wd((unsigned char *)data, data_len,
- (unsigned char *)value, CHUNKSZ_SHA256);
- *value_len = SHA256_SUM_LEN;
- } else if (IMAGE_ENABLE_MD5 && strcmp(algo, "md5") == 0) {
- md5_wd((unsigned char *)data, data_len, value, CHUNKSZ_MD5);
- *value_len = 16;
- } else {
+ struct hash_algo *hash_algo;
+ int ret;
+
+ ret = hash_lookup_algo(algo, &hash_algo);
+ if (ret) {
debug("Unsupported hash alogrithm\n");
- return -1;
}
+ hash_algo->hash_func_ws((unsigned char *)data, data_len,
+ (unsigned char *)value, hash_algo->chunk_size);
+ *value_len = hash_algo->digest_size;
+
return 0;
}
diff --git a/include/image.h b/include/image.h
index a5a5807..16bc097 100644
--- a/include/image.h
+++ b/include/image.h
@@ -32,6 +32,7 @@ struct fdt_region;
#define CONFIG_FIT_ENABLE_SHA256_SUPPORT
#define CONFIG_SHA1
#define CONFIG_SHA256
+#define CONFIG_CRC32
#define CONFIG_MD5
#define IMAGE_ENABLE_IGNORE 0
@@ -58,38 +59,39 @@ struct fdt_region;
#include <fdt_support.h>
# ifdef CONFIG_SPL_BUILD
# ifdef CONFIG_SPL_CRC32_SUPPORT
-# define IMAGE_ENABLE_CRC32 1
+# define CONFIG_CRC32
+# else
+# undef CONFIG_CRC32
# endif
# ifdef CONFIG_SPL_MD5_SUPPORT
-# define IMAGE_ENABLE_MD5 1
+# define CONFIG_MD5
+# else
+# undef CONFIG_MD5
# endif
# ifdef CONFIG_SPL_SHA1_SUPPORT
-# define IMAGE_ENABLE_SHA1 1
+# define CONFIG_SHA1
+# else
+# undef CONFIG_SHA1
# endif
# else
+# ifndef CONFIG_CRC32
# define CONFIG_CRC32 /* FIT images need CRC32 support */
-# define IMAGE_ENABLE_CRC32 1
-# define IMAGE_ENABLE_MD5 1
-# define IMAGE_ENABLE_SHA1 1
+# endif
+# ifndef CONFIG_MD5
+# define CONFIG_MD5
+# endif
+# ifndef CONFIG_SHA1
+# define CONFIG_SHA1
+# endif
# endif
-#ifndef IMAGE_ENABLE_CRC32
-#define IMAGE_ENABLE_CRC32 0
-#endif
-
-#ifndef IMAGE_ENABLE_MD5
-#define IMAGE_ENABLE_MD5 0
-#endif
-
-#ifndef IMAGE_ENABLE_SHA1
-#define IMAGE_ENABLE_SHA1 0
-#endif
-
#if defined(CONFIG_FIT_ENABLE_SHA256_SUPPORT) || \
defined(CONFIG_SPL_SHA256_SUPPORT)
-#define IMAGE_ENABLE_SHA256 1
+#ifndef CONFIG_SHA256
+#define CONFIG_SHA256
+#endif
#else
-#define IMAGE_ENABLE_SHA256 0
+#undef CONFIG_SHA256
#endif
#endif /* IMAGE_ENABLE_FIT */
diff --git a/lib/Makefile b/lib/Makefile
index 5c4aa73..5b40444 100644
--- a/lib/Makefile
+++ b/lib/Makefile
@@ -24,6 +24,7 @@ obj-$(CONFIG_USB_TTY) += circbuf.o
obj-y += crc7.o
obj-y += crc8.o
obj-y += crc16.o
+obj-$(CONFIG_CRC32) += crc32.o
obj-$(CONFIG_ERRNO_STR) += errno_str.o
obj-$(CONFIG_FIT) += fdtdec_common.o
obj-$(CONFIG_TEST_FDTDEC) += fdtdec_test.o
@@ -61,6 +62,8 @@ obj-$(CONFIG_$(SPL_TPL_)OF_CONTROL) += fdtdec_common.o
obj-$(CONFIG_$(SPL_TPL_)OF_CONTROL) += fdtdec.o
endif
+
+
ifdef CONFIG_SPL_BUILD
obj-$(CONFIG_SPL_YMODEM_SUPPORT) += crc16.o
obj-$(CONFIG_SPL_NET_SUPPORT) += net_utils.o
@@ -71,7 +74,7 @@ obj-y += errno.o
obj-y += display_options.o
CFLAGS_display_options.o := $(if $(BUILD_TAG),-DBUILD_TAG='"$(BUILD_TAG)"')
obj-$(CONFIG_BCH) += bch.o
-obj-y += crc32.o
+obj-$(CONFIG_$(SPL_TPL_)CRC32_SUPPORT) += crc32.o
obj-$(CONFIG_CRC32C) += crc32c.o
obj-y += ctype.o
obj-y += div64.o
--
2.7.4
More information about the U-Boot
mailing list