u-boot.lists.denx.de archive mirror
 help / color / mirror / Atom feed
* [PATCH v5 00/29] image: Reduce #ifdefs and ad-hoc defines in image code (Part B)
@ 2021-09-26  1:43 Simon Glass
  2021-09-26  1:43 ` [PATCH v5 01/29] compiler: Rename host_build() to tools_build() Simon Glass
                   ` (25 more replies)
  0 siblings, 26 replies; 90+ messages in thread
From: Simon Glass @ 2021-09-26  1:43 UTC (permalink / raw)
  To: U-Boot Mailing List
  Cc: Alexandru Gagniuc, Andre Przywara, Rasmus Villemoes,
	Robert Marko, Masahiro Yamada, Tom Rini, Simon Glass,
	Alexander Graf, Joe Hershberger, Marek Vasut, Masahiro Yamada

Much of the image-handling code predates the introduction of Kconfig and
has quite a few #ifdefs in it. It also uses its own IMAGE_... defines to
help reduce the #ifdefs, which is unnecessary now that we can use
IS_ENABLED() et al.

The image code is also where quite a bit of code is shared with the host
tools. At present this uses a lot of checks of USE_HOSTCC.

This series introduces more 'tools' Kconfig options and a way to use
CONFIG_IS_ENABLED() to check them. This works in a similar way to SPL, so

   CONFIG_IS_ENABLED(FIT)

will evaluate to true on the host build (USE_HOSTCC) if CONFIG_TOOLS_FIT
is enabled. This allows quite a bit of clean-up of the image.h header file
and many of the image C files.

The 'tools' Kconfig options should help to solve a more general problem in
that we mostly want the host tools to build with all features enabled, no
matter which features the 'target' build actually uses. This is a pain to
arrange at present, but with 'host' Kconfigs, we can just define them all
to y.

There are cases where the host tools do not have features which are
present on the target, for example environment and physical addressing.
To help with this, some of the core image code is split out into
image-board.c and image-host.c files.

Even with these changes, some #ifdefs remain (down from about 100 to
about 40 in common/image*). But the code is somewhat easier to follow and
there are fewer build paths.

Note: The original version of this series met with resistance and resulted
in another series that went in first. That did make some improvements
but the fundamental problem of sharing code with tools remains. It seems
like a good time to get this one in, before further refactoring happens.
It was a significant effort to rebase this series on -next and I hope not
to do it again.

This series is available at u-boot-dm/host-working

Changes in v5:
- Add a new patch to rename host_build() to tools_build()
- Add new patch to bring back SPL_ versions of SHA
- Avoid preprocessor in a few more places
- Drop I_WANT_MD5
- Drop changes to tools/Makefile since they already use TOOLS_ Kconfigs
- Drop rd_load since it is not used
- Fix up tools/Makefile to have the correct condition
- Rebase to next
- Update commit message
- Update commit message to indicate that the code is in a separate file
- Use TOOLS_ instead of HOST_

Changes in v2:
- Add SPL_ Kconfigs also, since otherwise hashing algorithms drop from SPL
- All patches rebased to -next
- Consider selecting a raw FDT to be success
- Correct comment about USE_HOSTCC being undefined in CONFIG_VAL()
- Correct logic for the non-FIT case
- Drop unnecessary setting of rd_len, etc.
- Fix up comment to put an underscore after every CONFIG

Simon Glass (29):
  compiler: Rename host_build() to tools_build()
  kconfig: Add tools support to CONFIG_IS_ENABLED()
  image: Add Kconfig options for FIT in the tools build
  spl: cypto: Bring back SPL_ versions of SHA
  hash: Use Kconfig to enable hashing in host tools and SPL
  hash: Drop some #ifdefs in hash.c
  image: Drop IMAGE_ENABLE_FIT
  image: Drop IMAGE_ENABLE_OF_LIBFDT
  image: Use Kconfig to enable CONFIG_FIT_VERBOSE on host
  image: Use Kconfig to enable FIT_RSASSA_PSS on host
  image: Use the correct checks for CRC32
  image: Drop IMAGE_BOOT_GET_CMDLINE
  image: Drop IMAGE_OF_BOARD_SETUP
  image: Drop IMAGE_OF_SYSTEM_SETUP
  image: Drop IMAGE_ENABLE_IGNORE
  efi: Correct dependency on FIT_SIGNATURE
  image: Drop IMAGE_ENABLE_SIGN/VERIFY defines
  image: Drop IMAGE_ENABLE_EN/DECRYPT defines
  image: Tidy up fit_unsupported_reset()
  image: Drop unnecessary #ifdefs from image.h
  image: Drop #ifdefs for fit_print_contents()
  image: Drop most #ifdefs in image-board.c
  image: Reduce variable scope in boot_get_ramdisk()
  image: Split up boot_get_ramdisk()
  image: Remove #ifdefs from select_ramdisk()
  image: Remove some #ifdefs from image-fit and image-fit-sig
  image: Reduce variable scope in boot_get_fdt()
  image: Split up boot_get_fdt()
  image: Remove #ifdefs from select_fdt()

 arch/arc/lib/bootm.c           |   2 +-
 arch/arm/lib/bootm.c           |   4 +-
 arch/arm/mach-imx/hab.c        |   2 +-
 arch/microblaze/lib/bootm.c    |   2 +-
 arch/nds32/lib/bootm.c         |   4 +-
 arch/riscv/lib/bootm.c         |   4 +-
 board/synopsys/hsdk/hsdk.c     |   2 +-
 common/Kconfig.boot            |  10 +
 common/bootm.c                 |  14 +-
 common/bootm_os.c              |   8 +
 common/hash.c                  | 108 +++++-----
 common/image-board.c           | 359 +++++++++++++++++----------------
 common/image-cipher.c          |   6 +-
 common/image-fdt.c             | 275 +++++++++++++------------
 common/image-fit-sig.c         |   7 +-
 common/image-fit.c             |  36 ++--
 common/image.c                 |  14 +-
 common/spl/Kconfig             |  13 +-
 include/compiler.h             |   5 +-
 include/fdt_support.h          |   2 +-
 include/image.h                | 127 ++----------
 include/linux/kconfig.h        |  13 +-
 include/u-boot/aes.h           |   8 +-
 include/u-boot/hash-checksum.h |   5 +-
 include/u-boot/rsa.h           |   2 -
 lib/Kconfig                    |  66 +++++-
 lib/Makefile                   |   4 +-
 lib/efi_loader/Kconfig         |   2 +-
 lib/hash-checksum.c            |   2 +-
 lib/lmb.c                      |   2 +-
 lib/rsa/rsa-sign.c             |   5 +-
 lib/rsa/rsa-verify.c           |  16 +-
 tools/Kconfig                  |  92 +++++++++
 tools/Makefile                 |   2 +-
 tools/image-host.c             |   6 +-
 35 files changed, 675 insertions(+), 554 deletions(-)

-- 
2.33.0.685.g46640cef36-goog


^ permalink raw reply	[flat|nested] 90+ messages in thread

* [PATCH v5 01/29] compiler: Rename host_build() to tools_build()
  2021-09-26  1:43 [PATCH v5 00/29] image: Reduce #ifdefs and ad-hoc defines in image code (Part B) Simon Glass
@ 2021-09-26  1:43 ` Simon Glass
  2021-10-05 18:09   ` Alex G.
  2021-10-09  1:39   ` Tom Rini
  2021-09-26  1:43 ` [PATCH v5 02/29] kconfig: Add tools support to CONFIG_IS_ENABLED() Simon Glass
                   ` (24 subsequent siblings)
  25 siblings, 2 replies; 90+ messages in thread
From: Simon Glass @ 2021-09-26  1:43 UTC (permalink / raw)
  To: U-Boot Mailing List
  Cc: Alexandru Gagniuc, Andre Przywara, Rasmus Villemoes,
	Robert Marko, Masahiro Yamada, Tom Rini, Simon Glass

With the new TOOLS_LIBCRYPTO and some other changes, it seems that we are
heading towards calling this a tools build rather than a host build,
although of course it does happen on the host.

I cannot think of anything built by the host which cannot be described as
a tool, so rename this function.

Signed-off-by: Simon Glass <sjg@chromium.org>
---

Changes in v5:
- Add a new patch to rename host_build() to tools_build()

 common/image-fit.c |  8 ++++----
 common/image.c     | 12 ++++++------
 include/compiler.h |  5 +++--
 3 files changed, 13 insertions(+), 12 deletions(-)

diff --git a/common/image-fit.c b/common/image-fit.c
index 5a0a0cc2007..6f8e67e4158 100644
--- a/common/image-fit.c
+++ b/common/image-fit.c
@@ -509,7 +509,7 @@ void fit_image_print(const void *fit, int image_noffset, const char *p)
 
 	ret = fit_image_get_data_and_size(fit, image_noffset, &data, &size);
 
-	if (!host_build()) {
+	if (!tools_build()) {
 		printf("%s  Data Start:   ", p);
 		if (ret) {
 			printf("unavailable\n");
@@ -1845,7 +1845,7 @@ int fit_conf_get_node(const void *fit, const char *conf_uname)
 	if (conf_uname == NULL) {
 		/* get configuration unit name from the default property */
 		debug("No configuration specified, trying default...\n");
-		if (!host_build() && IS_ENABLED(CONFIG_MULTI_DTB_FIT)) {
+		if (!tools_build() && IS_ENABLED(CONFIG_MULTI_DTB_FIT)) {
 			noffset = fit_find_config_node(fit);
 			if (noffset < 0)
 				return noffset;
@@ -2093,7 +2093,7 @@ int fit_image_load(bootm_headers_t *images, ulong addr,
 	}
 
 	bootstage_mark(bootstage_id + BOOTSTAGE_SUB_CHECK_ARCH);
-	if (!host_build() && IS_ENABLED(CONFIG_SANDBOX)) {
+	if (!tools_build() && IS_ENABLED(CONFIG_SANDBOX)) {
 		if (!fit_image_check_target_arch(fit, noffset)) {
 			puts("Unsupported Architecture\n");
 			bootstage_error(bootstage_id + BOOTSTAGE_SUB_CHECK_ARCH);
@@ -2158,7 +2158,7 @@ int fit_image_load(bootm_headers_t *images, ulong addr,
 	}
 
 	/* perform any post-processing on the image data */
-	if (!host_build() && IS_ENABLED(CONFIG_FIT_IMAGE_POST_PROCESS))
+	if (!tools_build() && IS_ENABLED(CONFIG_FIT_IMAGE_POST_PROCESS))
 		board_fit_image_post_process(fit, noffset, &buf, &size);
 
 	len = (ulong)size;
diff --git a/common/image.c b/common/image.c
index 2f2fd052c50..66685b4ba99 100644
--- a/common/image.c
+++ b/common/image.c
@@ -460,11 +460,11 @@ int image_decomp(int comp, ulong load, ulong image_start, int type,
 			ret = -ENOSPC;
 		break;
 	case IH_COMP_GZIP:
-		if (!host_build() && CONFIG_IS_ENABLED(GZIP))
+		if (!tools_build() && CONFIG_IS_ENABLED(GZIP))
 			ret = gunzip(load_buf, unc_len, image_buf, &image_len);
 		break;
 	case IH_COMP_BZIP2:
-		if (!host_build() && CONFIG_IS_ENABLED(BZIP2)) {
+		if (!tools_build() && CONFIG_IS_ENABLED(BZIP2)) {
 			uint size = unc_len;
 
 			/*
@@ -478,7 +478,7 @@ int image_decomp(int comp, ulong load, ulong image_start, int type,
 		}
 		break;
 	case IH_COMP_LZMA:
-		if (!host_build() && CONFIG_IS_ENABLED(LZMA)) {
+		if (!tools_build() && CONFIG_IS_ENABLED(LZMA)) {
 			SizeT lzma_len = unc_len;
 
 			ret = lzmaBuffToBuffDecompress(load_buf, &lzma_len,
@@ -487,7 +487,7 @@ int image_decomp(int comp, ulong load, ulong image_start, int type,
 		}
 		break;
 	case IH_COMP_LZO:
-		if (!host_build() && CONFIG_IS_ENABLED(LZO)) {
+		if (!tools_build() && CONFIG_IS_ENABLED(LZO)) {
 			size_t size = unc_len;
 
 			ret = lzop_decompress(image_buf, image_len, load_buf, &size);
@@ -495,7 +495,7 @@ int image_decomp(int comp, ulong load, ulong image_start, int type,
 		}
 		break;
 	case IH_COMP_LZ4:
-		if (!host_build() && CONFIG_IS_ENABLED(LZ4)) {
+		if (!tools_build() && CONFIG_IS_ENABLED(LZ4)) {
 			size_t size = unc_len;
 
 			ret = ulz4fn(image_buf, image_len, load_buf, &size);
@@ -503,7 +503,7 @@ int image_decomp(int comp, ulong load, ulong image_start, int type,
 		}
 		break;
 	case IH_COMP_ZSTD:
-		if (!host_build() && CONFIG_IS_ENABLED(ZSTD)) {
+		if (!tools_build() && CONFIG_IS_ENABLED(ZSTD)) {
 			struct abuf in, out;
 
 			abuf_init_set(&in, image_buf, image_len);
diff --git a/include/compiler.h b/include/compiler.h
index 6b0d3bf5374..8cf11792e24 100644
--- a/include/compiler.h
+++ b/include/compiler.h
@@ -155,11 +155,12 @@ typedef unsigned long int uintptr_t;
 #endif
 
 /**
- * host_build() - check if we are building for the host
+ * tools_build() - check if we are building host tools
  *
  * @return true if building for the host, false if for a target
  */
-static inline bool host_build(void) {
+static inline bool tools_build(void)
+{
 #ifdef USE_HOSTCC
 	return true;
 #else
-- 
2.33.0.685.g46640cef36-goog


^ permalink raw reply related	[flat|nested] 90+ messages in thread

* [PATCH v5 02/29] kconfig: Add tools support to CONFIG_IS_ENABLED()
  2021-09-26  1:43 [PATCH v5 00/29] image: Reduce #ifdefs and ad-hoc defines in image code (Part B) Simon Glass
  2021-09-26  1:43 ` [PATCH v5 01/29] compiler: Rename host_build() to tools_build() Simon Glass
@ 2021-09-26  1:43 ` Simon Glass
  2021-09-27 16:11   ` Alex G.
                     ` (3 more replies)
  2021-09-26  1:43 ` [PATCH v5 03/29] image: Add Kconfig options for FIT in the tools build Simon Glass
                   ` (23 subsequent siblings)
  25 siblings, 4 replies; 90+ messages in thread
From: Simon Glass @ 2021-09-26  1:43 UTC (permalink / raw)
  To: U-Boot Mailing List
  Cc: Alexandru Gagniuc, Andre Przywara, Rasmus Villemoes,
	Robert Marko, Masahiro Yamada, Tom Rini, Simon Glass,
	Masahiro Yamada

At present we must separately test for the host build for many options,
since we force them to be enabled. For example, CONFIG_FIT is always
enabled in the host tools, even if CONFIG_FIT is not enabled by the
board itself.

It would be more convenient if we could use, for example,
CONFIG_IS_ENABLED(FIT) and get CONFIG_HOST_FIT, when building for the
host. Add support for this.

With this and the tools_build() function, we should be able to remove all
the #ifdefs currently needed in code that is build by tools and targets.

This will be even nicer when we move to using CONFIG(xxx) everywhere,
since all the #ifdef and IS_ENABLED/CONFIG_IS_ENABLED stuff will go away.

Signed-off-by: Simon Glass <sjg@chromium.org>
Suggested-by: Rasmus Villemoes <rasmus.villemoes@prevas.dk> # b4f73886
---

Changes in v5:
- Update commit message
- Use TOOLS_ instead of HOST_

Changes in v2:
- Correct comment about USE_HOSTCC being undefined in CONFIG_VAL()
- Fix up comment to put an underscore after every CONFIG

 include/linux/kconfig.h | 13 ++++++++++---
 1 file changed, 10 insertions(+), 3 deletions(-)

diff --git a/include/linux/kconfig.h b/include/linux/kconfig.h
index d109ed3119e..a1d1a298426 100644
--- a/include/linux/kconfig.h
+++ b/include/linux/kconfig.h
@@ -31,11 +31,14 @@
 	(config_enabled(option))
 
 /*
- * U-Boot add-on: Helper macros to reference to different macros
- * (CONFIG_ or CONFIG_SPL_ prefixed), depending on the build context.
+ * U-Boot add-on: Helper macros to reference to different macros (prefixed by
+ * CONFIG_, CONFIG_SPL_, CONFIG_TPL_ or CONFIG_TOOLS_), depending on the build
+ * context.
  */
 
-#if defined(CONFIG_TPL_BUILD)
+#ifdef USE_HOSTCC
+#define _CONFIG_PREFIX TOOLS_
+#elif defined(CONFIG_TPL_BUILD)
 #define _CONFIG_PREFIX TPL_
 #elif defined(CONFIG_SPL_BUILD)
 #define _CONFIG_PREFIX SPL_
@@ -49,6 +52,7 @@
 
 /*
  * CONFIG_VAL(FOO) evaluates to the value of
+ *  CONFIG_TOOLS_FOO if USE_HOSTCC is defined,
  *  CONFIG_FOO if CONFIG_SPL_BUILD is undefined,
  *  CONFIG_SPL_FOO if CONFIG_SPL_BUILD is defined.
  *  CONFIG_TPL_FOO if CONFIG_TPL_BUILD is defined.
@@ -76,18 +80,21 @@
 
 /*
  * CONFIG_IS_ENABLED(FOO) expands to
+ *  1 if USE_HOSTCC is defined and CONFIG_TOOLS_FOO is set to 'y',
  *  1 if CONFIG_SPL_BUILD is undefined and CONFIG_FOO is set to 'y',
  *  1 if CONFIG_SPL_BUILD is defined and CONFIG_SPL_FOO is set to 'y',
  *  1 if CONFIG_TPL_BUILD is defined and CONFIG_TPL_FOO is set to 'y',
  *  0 otherwise.
  *
  * CONFIG_IS_ENABLED(FOO, (abc)) expands to
+ *  abc if USE_HOSTCC is defined and CONFIG_TOOLS_FOO is set to 'y',
  *  abc if CONFIG_SPL_BUILD is undefined and CONFIG_FOO is set to 'y',
  *  abc if CONFIG_SPL_BUILD is defined and CONFIG_SPL_FOO is set to 'y',
  *  abc if CONFIG_TPL_BUILD is defined and CONFIG_TPL_FOO is set to 'y',
  *  nothing otherwise.
  *
  * CONFIG_IS_ENABLED(FOO, (abc), (def)) expands to
+ *  abc if USE_HOSTCC is defined and CONFIG_TOOLS_FOO is set to 'y',
  *  abc if CONFIG_SPL_BUILD is undefined and CONFIG_FOO is set to 'y',
  *  abc if CONFIG_SPL_BUILD is defined and CONFIG_SPL_FOO is set to 'y',
  *  abc if CONFIG_TPL_BUILD is defined and CONFIG_TPL_FOO is set to 'y',
-- 
2.33.0.685.g46640cef36-goog


^ permalink raw reply related	[flat|nested] 90+ messages in thread

* [PATCH v5 03/29] image: Add Kconfig options for FIT in the tools build
  2021-09-26  1:43 [PATCH v5 00/29] image: Reduce #ifdefs and ad-hoc defines in image code (Part B) Simon Glass
  2021-09-26  1:43 ` [PATCH v5 01/29] compiler: Rename host_build() to tools_build() Simon Glass
  2021-09-26  1:43 ` [PATCH v5 02/29] kconfig: Add tools support to CONFIG_IS_ENABLED() Simon Glass
@ 2021-09-26  1:43 ` Simon Glass
  2021-10-05 18:17   ` Alex G.
                     ` (2 more replies)
  2021-09-26  1:43 ` [PATCH v5 04/29] spl: cypto: Bring back SPL_ versions of SHA Simon Glass
                   ` (22 subsequent siblings)
  25 siblings, 3 replies; 90+ messages in thread
From: Simon Glass @ 2021-09-26  1:43 UTC (permalink / raw)
  To: U-Boot Mailing List
  Cc: Alexandru Gagniuc, Andre Przywara, Rasmus Villemoes,
	Robert Marko, Masahiro Yamada, Tom Rini, Simon Glass,
	Joe Hershberger, Marek Vasut

In preparation for enabling CONFIG_IS_ENABLED() on the host build, add
some options to enable the various FIT options expected in these tools.
This will ensure that the code builds correctly when CONFIG_TOOLS_xxx
is distinct from CONFIG_xxx.

Drop some #ifdefs which are immediately unnecessary (many more are in
later patches).

Signed-off-by: Simon Glass <sjg@chromium.org>
---

Changes in v5:
- Drop changes to tools/Makefile since they already use TOOLS_ Kconfigs
- Use TOOLS_ instead of HOST_

 common/image-fit-sig.c |  3 ++-
 common/image-fit.c     |  4 ++--
 tools/Kconfig          | 25 +++++++++++++++++++++++++
 3 files changed, 29 insertions(+), 3 deletions(-)

diff --git a/common/image-fit-sig.c b/common/image-fit-sig.c
index b979cd2a4b6..e95e64bd2fe 100644
--- a/common/image-fit-sig.c
+++ b/common/image-fit-sig.c
@@ -72,11 +72,12 @@ static int fit_image_setup_verify(struct image_sign_info *info,
 	char *algo_name;
 	const char *padding_name;
 
+#ifndef USE_HOSTCC
 	if (fdt_totalsize(fit) > CONFIG_FIT_SIGNATURE_MAX_SIZE) {
 		*err_msgp = "Total size too large";
 		return 1;
 	}
-
+#endif
 	if (fit_image_hash_get_algo(fit, noffset, &algo_name)) {
 		*err_msgp = "Can't get hash algo property";
 		return -1;
diff --git a/common/image-fit.c b/common/image-fit.c
index 6f8e67e4158..17c6d4e7813 100644
--- a/common/image-fit.c
+++ b/common/image-fit.c
@@ -170,7 +170,7 @@ int fit_get_subimage_count(const void *fit, int images_noffset)
 	return count;
 }
 
-#if CONFIG_IS_ENABLED(FIT_PRINT) || CONFIG_IS_ENABLED(SPL_FIT_PRINT)
+#if CONFIG_IS_ENABLED(FIT_PRINT)
 /**
  * fit_image_print_data() - prints out the hash node details
  * @fit: pointer to the FIT format image header
@@ -578,7 +578,7 @@ void fit_image_print(const void *fit, int image_noffset, const char *p)
 #else
 void fit_print_contents(const void *fit) { }
 void fit_image_print(const void *fit, int image_noffset, const char *p) { }
-#endif /* CONFIG_IS_ENABLED(FIR_PRINT) || CONFIG_IS_ENABLED(SPL_FIT_PRINT) */
+#endif /* CONFIG_IS_ENABLED(FIT_PRINT) */
 
 /**
  * fit_get_desc - get node description property
diff --git a/tools/Kconfig b/tools/Kconfig
index d6f82cd949b..ea986ab0479 100644
--- a/tools/Kconfig
+++ b/tools/Kconfig
@@ -20,4 +20,29 @@ config TOOLS_LIBCRYPTO
 	  This selection does not affect target features, such as runtime FIT
 	  signature verification.
 
+config TOOLS_FIT
+	def_bool y
+	help
+	  Enable FIT support in the tools builds.
+
+config TOOLS_FIT_FULL_CHECK
+	def_bool y
+	help
+	  Do a full check of the FIT before using it in the tools builds
+
+config TOOLS_FIT_PRINT
+	def_bool y
+	help
+	  Print the content of the FIT verbosely in the tools builds
+
+config TOOLS_FIT_SIGNATURE
+	def_bool y
+	help
+	  Enable signature verification of FIT uImages in the tools builds
+
+config TOOLS_FIT_SIGNATURE_MAX_SIZE
+	hex
+	depends on TOOLS_FIT_SIGNATURE
+	default 0x10000000
+
 endmenu
-- 
2.33.0.685.g46640cef36-goog


^ permalink raw reply related	[flat|nested] 90+ messages in thread

* [PATCH v5 04/29] spl: cypto: Bring back SPL_ versions of SHA
  2021-09-26  1:43 [PATCH v5 00/29] image: Reduce #ifdefs and ad-hoc defines in image code (Part B) Simon Glass
                   ` (2 preceding siblings ...)
  2021-09-26  1:43 ` [PATCH v5 03/29] image: Add Kconfig options for FIT in the tools build Simon Glass
@ 2021-09-26  1:43 ` Simon Glass
  2021-10-05 18:19   ` Alex G.
  2021-10-09  1:39   ` Tom Rini
  2021-09-26  1:43 ` [PATCH v5 05/29] hash: Use Kconfig to enable hashing in host tools and SPL Simon Glass
                   ` (21 subsequent siblings)
  25 siblings, 2 replies; 90+ messages in thread
From: Simon Glass @ 2021-09-26  1:43 UTC (permalink / raw)
  To: U-Boot Mailing List
  Cc: Alexandru Gagniuc, Andre Przywara, Rasmus Villemoes,
	Robert Marko, Masahiro Yamada, Tom Rini, Simon Glass

Unfortunately these were removed by mistake. This means that adding hash
support to SPL brings in all software algorithms, with a substantial
increase in code size.

The origin of the problem was renaming them to SPL_FIT_xxx and then these
were removed altogether in a later commit.

Add them back. This aligns with CONFIG_MD5, for example, which has an SPL
variant.

Signed-off-by: Simon Glass <sjg@chromium.org>
Fixes: f5bc9c25f31 ("image: Rename SPL_SHAxxx_SUPPORT to SPL_FIT_SHAxxx")
Fixes: eb5171ddec9 ("common: Remove unused CONFIG_FIT_SHAxxx selectors")
---
For now this has no effect but the next patch updates hash.c to deal with
this condition for both SPL and tools.

Changes in v5:
- Add new patch to bring back SPL_ versions of SHA

 lib/Kconfig | 43 ++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 42 insertions(+), 1 deletion(-)

diff --git a/lib/Kconfig b/lib/Kconfig
index 034af724b5d..7899e756f99 100644
--- a/lib/Kconfig
+++ b/lib/Kconfig
@@ -373,7 +373,6 @@ config SHA256
 	  The SHA256 algorithm produces a 256-bit (32-byte) hash value
 	  (digest).
 
-
 config SHA512
 	bool "Enable SHA512 support"
 	help
@@ -399,6 +398,48 @@ config SHA_HW_ACCEL
 	  hashing algorithms. This affects the 'hash' command and also the
 	  hash_lookup_algo() function.
 
+if SPL
+
+config SPL_SHA1
+	bool "Enable SHA1 support in SPL"
+	default y if SHA1
+	help
+	  This option enables support of hashing using SHA1 algorithm.
+	  The hash is calculated in software.
+	  The SHA1 algorithm produces a 160-bit (20-byte) hash value
+	  (digest).
+
+config SPL_SHA256
+	bool "Enable SHA256 support in SPL"
+	default y if SHA256
+	help
+	  This option enables support of hashing using SHA256 algorithm.
+	  The hash is calculated in software.
+	  The SHA256 algorithm produces a 256-bit (32-byte) hash value
+	  (digest).
+
+config SPL_SHA512
+	bool "Enable SHA512 support in SPL"
+	default y if SHA512
+	help
+	  This option enables support of hashing using SHA512 algorithm.
+	  The hash is calculated in software.
+	  The SHA512 algorithm produces a 512-bit (64-byte) hash value
+	  (digest).
+
+config SPL_SHA384
+	bool "Enable SHA384 support in SPL"
+	default y if SHA384
+	select SPL_SHA512
+	help
+	  This option enables support of hashing using SHA384 algorithm.
+	  The hash is calculated in software. This is also selects SHA512,
+	  because these implementations share the bulk of the code..
+	  The SHA384 algorithm produces a 384-bit (48-byte) hash value
+	  (digest).
+
+endif
+
 if SHA_HW_ACCEL
 
 config SHA512_HW_ACCEL
-- 
2.33.0.685.g46640cef36-goog


^ permalink raw reply related	[flat|nested] 90+ messages in thread

* [PATCH v5 05/29] hash: Use Kconfig to enable hashing in host tools and SPL
  2021-09-26  1:43 [PATCH v5 00/29] image: Reduce #ifdefs and ad-hoc defines in image code (Part B) Simon Glass
                   ` (3 preceding siblings ...)
  2021-09-26  1:43 ` [PATCH v5 04/29] spl: cypto: Bring back SPL_ versions of SHA Simon Glass
@ 2021-09-26  1:43 ` Simon Glass
  2021-09-27 15:53   ` Alex G.
                     ` (2 more replies)
  2021-09-26  1:43 ` [PATCH v5 06/29] hash: Drop some #ifdefs in hash.c Simon Glass
                   ` (20 subsequent siblings)
  25 siblings, 3 replies; 90+ messages in thread
From: Simon Glass @ 2021-09-26  1:43 UTC (permalink / raw)
  To: U-Boot Mailing List
  Cc: Alexandru Gagniuc, Andre Przywara, Rasmus Villemoes,
	Robert Marko, Masahiro Yamada, Tom Rini, Simon Glass,
	Joe Hershberger

At present when building host tools, we force CONFIG_SHAxxx to be enabled
regardless of the board Kconfig setting. This is done in the image.h
header file.

For SPL we currently just assume the algorithm is desired if U-Boot proper
enables it.

Clean this up by adding new Kconfig options to enable hashing on the host,
relying on CONFIG_IS_ENABLED() to deal with the different builds.

Add new SPL Kconfigs for hardware-accelerated hashing, to maintain the
current settings.

This allows us to drop the image.h code and the I_WANT_MD5 hack.

Signed-off-by: Simon Glass <sjg@chromium.org>
---

Changes in v5:
- Drop I_WANT_MD5
- Use TOOLS_ instead of HOST_

Changes in v2:
- Add SPL_ Kconfigs also, since otherwise hashing algorithms drop from SPL

 common/hash.c   | 49 +++++++++++++++++++++++--------------------------
 include/image.h |  5 -----
 lib/Kconfig     | 18 ++++++++++++++++++
 tools/Kconfig   | 25 +++++++++++++++++++++++++
 4 files changed, 66 insertions(+), 31 deletions(-)

diff --git a/common/hash.c b/common/hash.c
index 6277fe65b3e..0fe65c959d0 100644
--- a/common/hash.c
+++ b/common/hash.c
@@ -25,6 +25,7 @@
 #else
 #include "mkimage.h"
 #include <time.h>
+#include <linux/kconfig.h>
 #endif /* !USE_HOSTCC*/
 
 #include <hash.h>
@@ -41,7 +42,7 @@ DECLARE_GLOBAL_DATA_PTR;
 
 static void reloc_update(void);
 
-#if defined(CONFIG_SHA1) && !defined(CONFIG_SHA_PROG_HW_ACCEL)
+#if CONFIG_IS_ENABLED(SHA1) && !CONFIG_IS_ENABLED(SHA_PROG_HW_ACCEL)
 static int hash_init_sha1(struct hash_algo *algo, void **ctxp)
 {
 	sha1_context *ctx = malloc(sizeof(sha1_context));
@@ -69,7 +70,7 @@ static int hash_finish_sha1(struct hash_algo *algo, void *ctx, void *dest_buf,
 }
 #endif
 
-#if defined(CONFIG_SHA256) && !defined(CONFIG_SHA_PROG_HW_ACCEL)
+#if CONFIG_IS_ENABLED(SHA256) && !CONFIG_IS_ENABLED(SHA_PROG_HW_ACCEL)
 static int hash_init_sha256(struct hash_algo *algo, void **ctxp)
 {
 	sha256_context *ctx = malloc(sizeof(sha256_context));
@@ -97,7 +98,7 @@ static int hash_finish_sha256(struct hash_algo *algo, void *ctx, void
 }
 #endif
 
-#if defined(CONFIG_SHA384) && !defined(CONFIG_SHA_PROG_HW_ACCEL)
+#if CONFIG_IS_ENABLED(SHA384) && !CONFIG_IS_ENABLED(SHA_PROG_HW_ACCEL)
 static int hash_init_sha384(struct hash_algo *algo, void **ctxp)
 {
 	sha512_context *ctx = malloc(sizeof(sha512_context));
@@ -125,7 +126,7 @@ static int hash_finish_sha384(struct hash_algo *algo, void *ctx, void
 }
 #endif
 
-#if defined(CONFIG_SHA512) && !defined(CONFIG_SHA_PROG_HW_ACCEL)
+#if CONFIG_IS_ENABLED(SHA512) && !CONFIG_IS_ENABLED(SHA_PROG_HW_ACCEL)
 static int hash_init_sha512(struct hash_algo *algo, void **ctxp)
 {
 	sha512_context *ctx = malloc(sizeof(sha512_context));
@@ -207,18 +208,13 @@ static int hash_finish_crc32(struct hash_algo *algo, void *ctx, void *dest_buf,
 	return 0;
 }
 
-#ifdef USE_HOSTCC
-# define I_WANT_MD5	1
-#else
-# define I_WANT_MD5	CONFIG_IS_ENABLED(MD5)
-#endif
 /*
  * These are the hash algorithms we support.  If we have hardware acceleration
  * is enable we will use that, otherwise a software version of the algorithm.
  * Note that algorithm names must be in lower case.
  */
 static struct hash_algo hash_algo[] = {
-#if I_WANT_MD5
+#if CONFIG_IS_ENABLED(MD5)
 	{
 		.name		= "md5",
 		.digest_size	= MD5_SUM_LEN,
@@ -226,17 +222,17 @@ static struct hash_algo hash_algo[] = {
 		.hash_func_ws	= md5_wd,
 	},
 #endif
-#ifdef CONFIG_SHA1
+#if CONFIG_IS_ENABLED(SHA1)
 	{
 		.name 		= "sha1",
 		.digest_size	= SHA1_SUM_LEN,
 		.chunk_size	= CHUNKSZ_SHA1,
-#ifdef CONFIG_SHA_HW_ACCEL
+#if CONFIG_IS_ENABLED(SHA_HW_ACCEL)
 		.hash_func_ws	= hw_sha1,
 #else
 		.hash_func_ws	= sha1_csum_wd,
 #endif
-#ifdef CONFIG_SHA_PROG_HW_ACCEL
+#if CONFIG_IS_ENABLED(SHA_PROG_HW_ACCEL)
 		.hash_init	= hw_sha_init,
 		.hash_update	= hw_sha_update,
 		.hash_finish	= hw_sha_finish,
@@ -247,17 +243,17 @@ static struct hash_algo hash_algo[] = {
 #endif
 	},
 #endif
-#ifdef CONFIG_SHA256
+#if CONFIG_IS_ENABLED(SHA256)
 	{
 		.name		= "sha256",
 		.digest_size	= SHA256_SUM_LEN,
 		.chunk_size	= CHUNKSZ_SHA256,
-#ifdef CONFIG_SHA_HW_ACCEL
+#if CONFIG_IS_ENABLED(SHA_HW_ACCEL)
 		.hash_func_ws	= hw_sha256,
 #else
 		.hash_func_ws	= sha256_csum_wd,
 #endif
-#ifdef CONFIG_SHA_PROG_HW_ACCEL
+#if CONFIG_IS_ENABLED(SHA_PROG_HW_ACCEL)
 		.hash_init	= hw_sha_init,
 		.hash_update	= hw_sha_update,
 		.hash_finish	= hw_sha_finish,
@@ -268,17 +264,17 @@ static struct hash_algo hash_algo[] = {
 #endif
 	},
 #endif
-#ifdef CONFIG_SHA384
+#if CONFIG_IS_ENABLED(SHA384)
 	{
 		.name		= "sha384",
 		.digest_size	= SHA384_SUM_LEN,
 		.chunk_size	= CHUNKSZ_SHA384,
-#ifdef CONFIG_SHA512_HW_ACCEL
+#if CONFIG_IS_ENABLED(SHA512_HW_ACCEL)
 		.hash_func_ws	= hw_sha384,
 #else
 		.hash_func_ws	= sha384_csum_wd,
 #endif
-#if defined(CONFIG_SHA512_HW_ACCEL) && defined(CONFIG_SHA_PROG_HW_ACCEL)
+#if CONFIG_IS_ENABLED(SHA512_HW_ACCEL) && CONFIG_IS_ENABLED(SHA_PROG_HW_ACCEL)
 		.hash_init	= hw_sha_init,
 		.hash_update	= hw_sha_update,
 		.hash_finish	= hw_sha_finish,
@@ -289,17 +285,17 @@ static struct hash_algo hash_algo[] = {
 #endif
 	},
 #endif
-#ifdef CONFIG_SHA512
+#if CONFIG_IS_ENABLED(SHA512)
 	{
 		.name		= "sha512",
 		.digest_size	= SHA512_SUM_LEN,
 		.chunk_size	= CHUNKSZ_SHA512,
-#ifdef CONFIG_SHA512_HW_ACCEL
+#if CONFIG_IS_ENABLED(SHA512_HW_ACCEL)
 		.hash_func_ws	= hw_sha512,
 #else
 		.hash_func_ws	= sha512_csum_wd,
 #endif
-#if defined(CONFIG_SHA512_HW_ACCEL) && defined(CONFIG_SHA_PROG_HW_ACCEL)
+#if CONFIG_IS_ENABLED(SHA512_HW_ACCEL) && CONFIG_IS_ENABLED(SHA_PROG_HW_ACCEL)
 		.hash_init	= hw_sha_init,
 		.hash_update	= hw_sha_update,
 		.hash_finish	= hw_sha_finish,
@@ -331,9 +327,9 @@ static struct hash_algo hash_algo[] = {
 };
 
 /* Try to minimize code size for boards that don't want much hashing */
-#if defined(CONFIG_SHA256) || defined(CONFIG_CMD_SHA1SUM) || \
-	defined(CONFIG_CRC32_VERIFY) || defined(CONFIG_CMD_HASH) || \
-	defined(CONFIG_SHA384) || defined(CONFIG_SHA512)
+#if CONFIG_IS_ENABLED(SHA256) || CONFIG_IS_ENABLED(CMD_SHA1SUM) || \
+	CONFIG_IS_ENABLED(CRC32_VERIFY) || CONFIG_IS_ENABLED(CMD_HASH) || \
+	CONFIG_IS_ENABLED(SHA384) || CONFIG_IS_ENABLED(SHA512)
 #define multi_hash()	1
 #else
 #define multi_hash()	0
@@ -438,7 +434,8 @@ int hash_block(const char *algo_name, const void *data, unsigned int len,
 	return 0;
 }
 
-#if defined(CONFIG_CMD_HASH) || defined(CONFIG_CMD_SHA1SUM) || defined(CONFIG_CMD_CRC32)
+#if !defined(CONFIG_SPL_BUILD) && (defined(CONFIG_CMD_HASH) || \
+	defined(CONFIG_CMD_SHA1SUM) || defined(CONFIG_CMD_CRC32))
 /**
  * store_result: Store the resulting sum to an address or variable
  *
diff --git a/include/image.h b/include/image.h
index 73a763a6936..03857f4b500 100644
--- a/include/image.h
+++ b/include/image.h
@@ -31,11 +31,6 @@ struct fdt_region;
 #define IMAGE_ENABLE_OF_LIBFDT	1
 #define CONFIG_FIT_VERBOSE	1 /* enable fit_format_{error,warning}() */
 #define CONFIG_FIT_RSASSA_PSS 1
-#define CONFIG_MD5
-#define CONFIG_SHA1
-#define CONFIG_SHA256
-#define CONFIG_SHA384
-#define CONFIG_SHA512
 
 #define IMAGE_ENABLE_IGNORE	0
 #define IMAGE_INDENT_STRING	""
diff --git a/lib/Kconfig b/lib/Kconfig
index 7899e756f99..64765acfa61 100644
--- a/lib/Kconfig
+++ b/lib/Kconfig
@@ -438,6 +438,24 @@ config SPL_SHA384
 	  The SHA384 algorithm produces a 384-bit (48-byte) hash value
 	  (digest).
 
+config SPL_SHA_HW_ACCEL
+	bool "Enable hardware acceleration for SHA hash functions"
+	default y if SHA_HW_ACCEL
+	help
+	  This option enables hardware acceleration for the SHA1 and SHA256
+	  hashing algorithms. This affects the 'hash' command and also the
+	  hash_lookup_algo() function.
+
+config SPL_SHA_PROG_HW_ACCEL
+	bool "Enable Progressive hashing support using hardware in SPL"
+	depends on SHA_PROG_HW_ACCEL
+	default y
+	help
+	  This option enables hardware-acceleration for SHA progressive
+	  hashing.
+	  Data can be streamed in a block at a time and the hashing is
+	  performed in hardware.
+
 endif
 
 if SHA_HW_ACCEL
diff --git a/tools/Kconfig b/tools/Kconfig
index ea986ab0479..6ffc2c0aa31 100644
--- a/tools/Kconfig
+++ b/tools/Kconfig
@@ -45,4 +45,29 @@ config TOOLS_FIT_SIGNATURE_MAX_SIZE
 	depends on TOOLS_FIT_SIGNATURE
 	default 0x10000000
 
+config TOOLS_MD5
+	def_bool y
+	help
+	  Enable MD5 support in the tools builds
+
+config TOOLS_SHA1
+	def_bool y
+	help
+	  Enable SHA1 support in the tools builds
+
+config TOOLS_SHA256
+	def_bool y
+	help
+	  Enable SHA256 support in the tools builds
+
+config TOOLS_SHA384
+	def_bool y
+	help
+	  Enable SHA384 support in the tools builds
+
+config TOOLS_SHA512
+	def_bool y
+	help
+	  Enable SHA512 support in the tools builds
+
 endmenu
-- 
2.33.0.685.g46640cef36-goog


^ permalink raw reply related	[flat|nested] 90+ messages in thread

* [PATCH v5 06/29] hash: Drop some #ifdefs in hash.c
  2021-09-26  1:43 [PATCH v5 00/29] image: Reduce #ifdefs and ad-hoc defines in image code (Part B) Simon Glass
                   ` (4 preceding siblings ...)
  2021-09-26  1:43 ` [PATCH v5 05/29] hash: Use Kconfig to enable hashing in host tools and SPL Simon Glass
@ 2021-09-26  1:43 ` Simon Glass
  2021-10-05 18:24   ` Alex G.
  2021-10-09  1:39   ` Tom Rini
  2021-09-26  1:43 ` [PATCH v5 07/29] image: Drop IMAGE_ENABLE_FIT Simon Glass
                   ` (19 subsequent siblings)
  25 siblings, 2 replies; 90+ messages in thread
From: Simon Glass @ 2021-09-26  1:43 UTC (permalink / raw)
  To: U-Boot Mailing List
  Cc: Alexandru Gagniuc, Andre Przywara, Rasmus Villemoes,
	Robert Marko, Masahiro Yamada, Tom Rini, Simon Glass,
	Joe Hershberger

We can use the __maybe_unused attribute to avoid some of the #ifdefs in
this file. Update the functions accordingly.

Note: The actual hashing interface is still a mess, with four separate
combinations and lots of #ifdefs. This should really use a driver
approach, e.g. as is done with partition drivers.

Signed-off-by: Simon Glass <sjg@chromium.org>
---

Changes in v5:
- Rebase to next

 common/hash.c | 54 ++++++++++++++++++++++++---------------------------
 1 file changed, 25 insertions(+), 29 deletions(-)

diff --git a/common/hash.c b/common/hash.c
index 0fe65c959d0..e92f9a9594f 100644
--- a/common/hash.c
+++ b/common/hash.c
@@ -24,6 +24,7 @@
 #include <u-boot/crc.h>
 #else
 #include "mkimage.h"
+#include <linux/compiler_attributes.h>
 #include <time.h>
 #include <linux/kconfig.h>
 #endif /* !USE_HOSTCC*/
@@ -42,8 +43,7 @@ DECLARE_GLOBAL_DATA_PTR;
 
 static void reloc_update(void);
 
-#if CONFIG_IS_ENABLED(SHA1) && !CONFIG_IS_ENABLED(SHA_PROG_HW_ACCEL)
-static int hash_init_sha1(struct hash_algo *algo, void **ctxp)
+static int __maybe_unused hash_init_sha1(struct hash_algo *algo, void **ctxp)
 {
 	sha1_context *ctx = malloc(sizeof(sha1_context));
 	sha1_starts(ctx);
@@ -51,15 +51,16 @@ static int hash_init_sha1(struct hash_algo *algo, void **ctxp)
 	return 0;
 }
 
-static int hash_update_sha1(struct hash_algo *algo, void *ctx, const void *buf,
-			    unsigned int size, int is_last)
+static int __maybe_unused hash_update_sha1(struct hash_algo *algo, void *ctx,
+					   const void *buf, unsigned int size,
+					   int is_last)
 {
 	sha1_update((sha1_context *)ctx, buf, size);
 	return 0;
 }
 
-static int hash_finish_sha1(struct hash_algo *algo, void *ctx, void *dest_buf,
-			    int size)
+static int __maybe_unused hash_finish_sha1(struct hash_algo *algo, void *ctx,
+					   void *dest_buf, int size)
 {
 	if (size < algo->digest_size)
 		return -1;
@@ -68,10 +69,8 @@ static int hash_finish_sha1(struct hash_algo *algo, void *ctx, void *dest_buf,
 	free(ctx);
 	return 0;
 }
-#endif
 
-#if CONFIG_IS_ENABLED(SHA256) && !CONFIG_IS_ENABLED(SHA_PROG_HW_ACCEL)
-static int hash_init_sha256(struct hash_algo *algo, void **ctxp)
+static int __maybe_unused hash_init_sha256(struct hash_algo *algo, void **ctxp)
 {
 	sha256_context *ctx = malloc(sizeof(sha256_context));
 	sha256_starts(ctx);
@@ -79,15 +78,16 @@ static int hash_init_sha256(struct hash_algo *algo, void **ctxp)
 	return 0;
 }
 
-static int hash_update_sha256(struct hash_algo *algo, void *ctx,
-			      const void *buf, unsigned int size, int is_last)
+static int __maybe_unused hash_update_sha256(struct hash_algo *algo, void *ctx,
+					     const void *buf, uint size,
+					     int is_last)
 {
 	sha256_update((sha256_context *)ctx, buf, size);
 	return 0;
 }
 
-static int hash_finish_sha256(struct hash_algo *algo, void *ctx, void
-			      *dest_buf, int size)
+static int __maybe_unused hash_finish_sha256(struct hash_algo *algo, void *ctx,
+					     void *dest_buf, int size)
 {
 	if (size < algo->digest_size)
 		return -1;
@@ -96,10 +96,8 @@ static int hash_finish_sha256(struct hash_algo *algo, void *ctx, void
 	free(ctx);
 	return 0;
 }
-#endif
 
-#if CONFIG_IS_ENABLED(SHA384) && !CONFIG_IS_ENABLED(SHA_PROG_HW_ACCEL)
-static int hash_init_sha384(struct hash_algo *algo, void **ctxp)
+static int __maybe_unused hash_init_sha384(struct hash_algo *algo, void **ctxp)
 {
 	sha512_context *ctx = malloc(sizeof(sha512_context));
 	sha384_starts(ctx);
@@ -107,15 +105,16 @@ static int hash_init_sha384(struct hash_algo *algo, void **ctxp)
 	return 0;
 }
 
-static int hash_update_sha384(struct hash_algo *algo, void *ctx,
-			      const void *buf, unsigned int size, int is_last)
+static int __maybe_unused hash_update_sha384(struct hash_algo *algo, void *ctx,
+					     const void *buf, uint size,
+					     int is_last)
 {
 	sha384_update((sha512_context *)ctx, buf, size);
 	return 0;
 }
 
-static int hash_finish_sha384(struct hash_algo *algo, void *ctx, void
-			      *dest_buf, int size)
+static int __maybe_unused hash_finish_sha384(struct hash_algo *algo, void *ctx,
+					     void *dest_buf, int size)
 {
 	if (size < algo->digest_size)
 		return -1;
@@ -124,10 +123,8 @@ static int hash_finish_sha384(struct hash_algo *algo, void *ctx, void
 	free(ctx);
 	return 0;
 }
-#endif
 
-#if CONFIG_IS_ENABLED(SHA512) && !CONFIG_IS_ENABLED(SHA_PROG_HW_ACCEL)
-static int hash_init_sha512(struct hash_algo *algo, void **ctxp)
+static int __maybe_unused hash_init_sha512(struct hash_algo *algo, void **ctxp)
 {
 	sha512_context *ctx = malloc(sizeof(sha512_context));
 	sha512_starts(ctx);
@@ -135,15 +132,16 @@ static int hash_init_sha512(struct hash_algo *algo, void **ctxp)
 	return 0;
 }
 
-static int hash_update_sha512(struct hash_algo *algo, void *ctx,
-			      const void *buf, unsigned int size, int is_last)
+static int __maybe_unused hash_update_sha512(struct hash_algo *algo, void *ctx,
+					     const void *buf, uint size,
+					     int is_last)
 {
 	sha512_update((sha512_context *)ctx, buf, size);
 	return 0;
 }
 
-static int hash_finish_sha512(struct hash_algo *algo, void *ctx, void
-			      *dest_buf, int size)
+static int __maybe_unused hash_finish_sha512(struct hash_algo *algo, void *ctx,
+					     void *dest_buf, int size)
 {
 	if (size < algo->digest_size)
 		return -1;
@@ -152,8 +150,6 @@ static int hash_finish_sha512(struct hash_algo *algo, void *ctx, void
 	free(ctx);
 	return 0;
 }
-#endif
-
 
 static int hash_init_crc16_ccitt(struct hash_algo *algo, void **ctxp)
 {
-- 
2.33.0.685.g46640cef36-goog


^ permalink raw reply related	[flat|nested] 90+ messages in thread

* [PATCH v5 07/29] image: Drop IMAGE_ENABLE_FIT
  2021-09-26  1:43 [PATCH v5 00/29] image: Reduce #ifdefs and ad-hoc defines in image code (Part B) Simon Glass
                   ` (5 preceding siblings ...)
  2021-09-26  1:43 ` [PATCH v5 06/29] hash: Drop some #ifdefs in hash.c Simon Glass
@ 2021-09-26  1:43 ` Simon Glass
  2021-10-05 18:26   ` Alex G.
  2021-10-09  1:39   ` Tom Rini
  2021-09-26  1:43 ` [PATCH v5 08/29] image: Drop IMAGE_ENABLE_OF_LIBFDT Simon Glass
                   ` (18 subsequent siblings)
  25 siblings, 2 replies; 90+ messages in thread
From: Simon Glass @ 2021-09-26  1:43 UTC (permalink / raw)
  To: U-Boot Mailing List
  Cc: Alexandru Gagniuc, Andre Przywara, Rasmus Villemoes,
	Robert Marko, Masahiro Yamada, Tom Rini, Simon Glass,
	Joe Hershberger, Marek Vasut

Make use of the host Kconfig for FIT. With this we can use
CONFIG_IS_ENABLED(FIT) directly in the host build, so drop the unnecessary
indirection.

Signed-off-by: Simon Glass <sjg@chromium.org>
---

Changes in v5:
- Rebase to next

 arch/arm/mach-imx/hab.c |  2 +-
 common/bootm.c          | 10 +++++-----
 common/image-board.c    | 16 ++++++++--------
 common/image.c          |  2 +-
 include/fdt_support.h   |  2 +-
 include/image.h         | 17 ++++++++---------
 6 files changed, 24 insertions(+), 25 deletions(-)

diff --git a/arch/arm/mach-imx/hab.c b/arch/arm/mach-imx/hab.c
index cc39e6bf569..55317abba23 100644
--- a/arch/arm/mach-imx/hab.c
+++ b/arch/arm/mach-imx/hab.c
@@ -591,7 +591,7 @@ static ulong get_image_ivt_offset(ulong img_addr)
 		return (image_get_image_size((image_header_t *)img_addr)
 			+ 0x1000 - 1)  & ~(0x1000 - 1);
 #endif
-#if IMAGE_ENABLE_FIT
+#if CONFIG_IS_ENABLED(FIT)
 	case IMAGE_FORMAT_FIT:
 		return (fit_get_size(buf) + 0x1000 - 1)  & ~(0x1000 - 1);
 #endif
diff --git a/common/bootm.c b/common/bootm.c
index fe17d1da9e5..8d614fe140e 100644
--- a/common/bootm.c
+++ b/common/bootm.c
@@ -115,7 +115,7 @@ static int bootm_find_os(struct cmd_tbl *cmdtp, int flag, int argc,
 		images.os.arch = image_get_arch(os_hdr);
 		break;
 #endif
-#if IMAGE_ENABLE_FIT
+#if CONFIG_IS_ENABLED(FIT)
 	case IMAGE_FORMAT_FIT:
 		if (fit_image_get_type(images.fit_hdr_os,
 				       images.fit_noffset_os,
@@ -187,7 +187,7 @@ static int bootm_find_os(struct cmd_tbl *cmdtp, int flag, int argc,
 		/* Kernel entry point is the setup.bin */
 	} else if (images.legacy_hdr_valid) {
 		images.ep = image_get_ep(&images.legacy_hdr_os_copy);
-#if IMAGE_ENABLE_FIT
+#if CONFIG_IS_ENABLED(FIT)
 	} else if (images.fit_uname_os) {
 		int ret;
 
@@ -295,7 +295,7 @@ int bootm_find_images(int flag, int argc, char *const argv[], ulong start,
 		set_working_fdt_addr(map_to_sysmem(images.ft_addr));
 #endif
 
-#if IMAGE_ENABLE_FIT
+#if CONFIG_IS_ENABLED(FIT)
 	if (IS_ENABLED(CONFIG_FPGA)) {
 		/* find bitstreams */
 		ret = boot_get_fpga(argc, argv, &images, IH_ARCH_DEFAULT,
@@ -858,7 +858,7 @@ static const void *boot_get_kernel(struct cmd_tbl *cmdtp, int flag, int argc,
 	const void *buf;
 	const char	*fit_uname_config = NULL;
 	const char	*fit_uname_kernel = NULL;
-#if IMAGE_ENABLE_FIT
+#if CONFIG_IS_ENABLED(FIT)
 	int		os_noffset;
 #endif
 
@@ -916,7 +916,7 @@ static const void *boot_get_kernel(struct cmd_tbl *cmdtp, int flag, int argc,
 		bootstage_mark(BOOTSTAGE_ID_DECOMP_IMAGE);
 		break;
 #endif
-#if IMAGE_ENABLE_FIT
+#if CONFIG_IS_ENABLED(FIT)
 	case IMAGE_FORMAT_FIT:
 		os_noffset = fit_image_load(images, img_addr,
 				&fit_uname_kernel, &fit_uname_config,
diff --git a/common/image-board.c b/common/image-board.c
index c13d0493ca3..c699232ba13 100644
--- a/common/image-board.c
+++ b/common/image-board.c
@@ -282,7 +282,7 @@ int genimg_get_format(const void *img_addr)
 	if (image_check_magic(hdr))
 		return IMAGE_FORMAT_LEGACY;
 #endif
-#if IMAGE_ENABLE_FIT || IMAGE_ENABLE_OF_LIBFDT
+#if CONFIG_IS_ENABLED(FIT) || IMAGE_ENABLE_OF_LIBFDT
 	if (fdt_check_header(img_addr) == 0)
 		return IMAGE_FORMAT_FIT;
 #endif
@@ -307,7 +307,7 @@ int genimg_get_format(const void *img_addr)
  */
 int genimg_has_config(bootm_headers_t *images)
 {
-#if IMAGE_ENABLE_FIT
+#if CONFIG_IS_ENABLED(FIT)
 	if (images->fit_uname_cfg)
 		return 1;
 #endif
@@ -348,7 +348,7 @@ int boot_get_ramdisk(int argc, char *const argv[], bootm_headers_t *images,
 #ifdef CONFIG_SUPPORT_RAW_INITRD
 	char *end;
 #endif
-#if IMAGE_ENABLE_FIT
+#if CONFIG_IS_ENABLED(FIT)
 	const char	*fit_uname_config = images->fit_uname_cfg;
 	const char	*fit_uname_ramdisk = NULL;
 	ulong		default_addr;
@@ -380,7 +380,7 @@ int boot_get_ramdisk(int argc, char *const argv[], bootm_headers_t *images,
 		rd_len = 0;
 		rd_data = 0;
 	} else if (select || genimg_has_config(images)) {
-#if IMAGE_ENABLE_FIT
+#if CONFIG_IS_ENABLED(FIT)
 		if (select) {
 			/*
 			 * If the init ramdisk comes from the FIT image and
@@ -409,7 +409,7 @@ int boot_get_ramdisk(int argc, char *const argv[], bootm_headers_t *images,
 				debug("*  ramdisk: cmdline image address = 0x%08lx\n",
 				      rd_addr);
 			}
-#if IMAGE_ENABLE_FIT
+#if CONFIG_IS_ENABLED(FIT)
 		} else {
 			/* use FIT configuration provided in first bootm
 			 * command argument. If the property is not defined,
@@ -450,7 +450,7 @@ int boot_get_ramdisk(int argc, char *const argv[], bootm_headers_t *images,
 			rd_load = image_get_load(rd_hdr);
 			break;
 #endif
-#if IMAGE_ENABLE_FIT
+#if CONFIG_IS_ENABLED(FIT)
 		case IMAGE_FORMAT_FIT:
 			rd_noffset = fit_image_load(images,
 						    rd_addr, &fit_uname_ramdisk,
@@ -623,14 +623,14 @@ error:
 int boot_get_setup(bootm_headers_t *images, u8 arch,
 		   ulong *setup_start, ulong *setup_len)
 {
-#if IMAGE_ENABLE_FIT
+#if CONFIG_IS_ENABLED(FIT)
 	return boot_get_setup_fit(images, arch, setup_start, setup_len);
 #else
 	return -ENOENT;
 #endif
 }
 
-#if IMAGE_ENABLE_FIT
+#if CONFIG_IS_ENABLED(FIT)
 #if defined(CONFIG_FPGA)
 int boot_get_fpga(int argc, char *const argv[], bootm_headers_t *images,
 		  u8 arch, const ulong *ld_start, ulong * const ld_len)
diff --git a/common/image.c b/common/image.c
index 66685b4ba99..59b5e70ccae 100644
--- a/common/image.c
+++ b/common/image.c
@@ -18,7 +18,7 @@
 #include <status_led.h>
 #endif
 
-#if IMAGE_ENABLE_FIT || IMAGE_ENABLE_OF_LIBFDT
+#if CONFIG_IS_ENABLED(FIT) || IMAGE_ENABLE_OF_LIBFDT
 #include <linux/libfdt.h>
 #include <fdt_support.h>
 #endif
diff --git a/include/fdt_support.h b/include/fdt_support.h
index f6f46bb8e9c..48d0ff0ad3c 100644
--- a/include/fdt_support.h
+++ b/include/fdt_support.h
@@ -7,7 +7,7 @@
 #ifndef __FDT_SUPPORT_H
 #define __FDT_SUPPORT_H
 
-#ifdef CONFIG_OF_LIBFDT
+#if !defined(USE_HOSTCC) && defined(CONFIG_OF_LIBFDT)
 
 #include <asm/u-boot.h>
 #include <linux/libfdt.h>
diff --git a/include/image.h b/include/image.h
index 03857f4b500..6c229212cb1 100644
--- a/include/image.h
+++ b/include/image.h
@@ -25,9 +25,9 @@ struct fdt_region;
 
 #ifdef USE_HOSTCC
 #include <sys/types.h>
+#include <linux/kconfig.h>
 
 /* new uImage format support enabled on host */
-#define IMAGE_ENABLE_FIT	1
 #define IMAGE_ENABLE_OF_LIBFDT	1
 #define CONFIG_FIT_VERBOSE	1 /* enable fit_format_{error,warning}() */
 #define CONFIG_FIT_RSASSA_PSS 1
@@ -46,16 +46,15 @@ struct fdt_region;
 #define IMAGE_ENABLE_IGNORE	1
 #define IMAGE_INDENT_STRING	"   "
 
-#define IMAGE_ENABLE_FIT	CONFIG_IS_ENABLED(FIT)
 #define IMAGE_ENABLE_OF_LIBFDT	CONFIG_IS_ENABLED(OF_LIBFDT)
 
 #endif /* USE_HOSTCC */
 
-#if IMAGE_ENABLE_FIT
+#if CONFIG_IS_ENABLED(FIT)
 #include <hash.h>
 #include <linux/libfdt.h>
 #include <fdt_support.h>
-#endif /* IMAGE_ENABLE_FIT */
+#endif /* FIT */
 
 #ifdef CONFIG_SYS_BOOT_GET_CMDLINE
 # define IMAGE_BOOT_GET_CMDLINE		1
@@ -328,7 +327,7 @@ typedef struct bootm_headers {
 	image_header_t	legacy_hdr_os_copy;	/* header copy */
 	ulong		legacy_hdr_valid;
 
-#if IMAGE_ENABLE_FIT
+#if CONFIG_IS_ENABLED(FIT)
 	const char	*fit_uname_cfg;	/* configuration node unit name */
 
 	void		*fit_hdr_os;	/* os FIT image header */
@@ -983,7 +982,7 @@ int booti_setup(ulong image, ulong *relocated_addr, ulong *size,
 
 #define FIT_MAX_HASH_LEN	HASH_MAX_DIGEST_SIZE
 
-#if IMAGE_ENABLE_FIT
+#if CONFIG_IS_ENABLED(FIT)
 /* cmdline argument format parsing */
 int fit_parse_conf(const char *spec, ulong addr_curr,
 		ulong *addr, const char **conf_name);
@@ -1157,7 +1156,7 @@ int fit_conf_get_prop_node(const void *fit, int noffset,
 
 int fit_check_ramdisk(const void *fit, int os_noffset,
 		uint8_t arch, int verify);
-#endif /* IMAGE_ENABLE_FIT */
+#endif /* FIT */
 
 int calculate_hash(const void *data, int data_len, const char *algo,
 			uint8_t *value, int *value_len);
@@ -1180,7 +1179,7 @@ int calculate_hash(const void *data, int data_len, const char *algo,
 # define FIT_IMAGE_ENABLE_VERIFY	CONFIG_IS_ENABLED(FIT_SIGNATURE)
 #endif
 
-#if IMAGE_ENABLE_FIT
+#if CONFIG_IS_ENABLED(FIT)
 #ifdef USE_HOSTCC
 void *image_get_host_blob(void);
 void image_set_host_blob(void *host_blob);
@@ -1335,7 +1334,7 @@ struct crypto_algo *image_get_crypto_algo(const char *full_name);
  */
 struct padding_algo *image_get_padding_algo(const char *name);
 
-#if IMAGE_ENABLE_FIT
+#if CONFIG_IS_ENABLED(FIT)
 
 /**
  * fit_image_verify_required_sigs() - Verify signatures marked as 'required'
-- 
2.33.0.685.g46640cef36-goog


^ permalink raw reply related	[flat|nested] 90+ messages in thread

* [PATCH v5 08/29] image: Drop IMAGE_ENABLE_OF_LIBFDT
  2021-09-26  1:43 [PATCH v5 00/29] image: Reduce #ifdefs and ad-hoc defines in image code (Part B) Simon Glass
                   ` (6 preceding siblings ...)
  2021-09-26  1:43 ` [PATCH v5 07/29] image: Drop IMAGE_ENABLE_FIT Simon Glass
@ 2021-09-26  1:43 ` Simon Glass
  2021-10-05 18:27   ` Alex G.
  2021-10-09  1:40   ` Tom Rini
  2021-09-26  1:43 ` [PATCH v5 09/29] image: Use Kconfig to enable CONFIG_FIT_VERBOSE on host Simon Glass
                   ` (17 subsequent siblings)
  25 siblings, 2 replies; 90+ messages in thread
From: Simon Glass @ 2021-09-26  1:43 UTC (permalink / raw)
  To: U-Boot Mailing List
  Cc: Alexandru Gagniuc, Andre Przywara, Rasmus Villemoes,
	Robert Marko, Masahiro Yamada, Tom Rini, Simon Glass,
	Joe Hershberger, Marek Vasut

Add a host Kconfig for OF_LIBFDT. With this we can use
CONFIG_IS_ENABLED(OF_LIBFDT) directly in the host build, so drop the
unnecessary indirection.

Signed-off-by: Simon Glass <sjg@chromium.org>
---

Changes in v5:
- Use TOOLS_ instead of HOST_

 arch/arc/lib/bootm.c        | 2 +-
 arch/arm/lib/bootm.c        | 4 ++--
 arch/microblaze/lib/bootm.c | 2 +-
 arch/nds32/lib/bootm.c      | 4 ++--
 arch/riscv/lib/bootm.c      | 4 ++--
 board/synopsys/hsdk/hsdk.c  | 2 +-
 common/bootm.c              | 4 ++--
 common/image-board.c        | 8 ++++----
 common/image.c              | 2 +-
 include/image.h             | 3 ---
 lib/lmb.c                   | 2 +-
 tools/Kconfig               | 5 +++++
 12 files changed, 22 insertions(+), 20 deletions(-)

diff --git a/arch/arc/lib/bootm.c b/arch/arc/lib/bootm.c
index 41408c2b460..ed6c5dfa584 100644
--- a/arch/arc/lib/bootm.c
+++ b/arch/arc/lib/bootm.c
@@ -63,7 +63,7 @@ static void boot_jump_linux(bootm_headers_t *images, int flag)
 	       "(fake run for tracing)" : "");
 	bootstage_mark_name(BOOTSTAGE_ID_BOOTM_HANDOFF, "start_kernel");
 
-	if (IMAGE_ENABLE_OF_LIBFDT && images->ft_len) {
+	if (CONFIG_IS_ENABLED(OF_LIBFDT) && images->ft_len) {
 		r0 = 2;
 		r2 = (unsigned int)images->ft_addr;
 	} else {
diff --git a/arch/arm/lib/bootm.c b/arch/arm/lib/bootm.c
index dd6a69315ac..a59a5e6c0ea 100644
--- a/arch/arm/lib/bootm.c
+++ b/arch/arm/lib/bootm.c
@@ -199,7 +199,7 @@ static void boot_prep_linux(bootm_headers_t *images)
 {
 	char *commandline = env_get("bootargs");
 
-	if (IMAGE_ENABLE_OF_LIBFDT && images->ft_len) {
+	if (CONFIG_IS_ENABLED(OF_LIBFDT) && images->ft_len) {
 #ifdef CONFIG_OF_LIBFDT
 		debug("using: FDT\n");
 		if (image_setup_linux(images)) {
@@ -356,7 +356,7 @@ static void boot_jump_linux(bootm_headers_t *images, int flag)
 	bootstage_mark(BOOTSTAGE_ID_RUN_OS);
 	announce_and_cleanup(fake);
 
-	if (IMAGE_ENABLE_OF_LIBFDT && images->ft_len)
+	if (CONFIG_IS_ENABLED(OF_LIBFDT) && images->ft_len)
 		r2 = (unsigned long)images->ft_addr;
 	else
 		r2 = gd->bd->bi_boot_params;
diff --git a/arch/microblaze/lib/bootm.c b/arch/microblaze/lib/bootm.c
index 3a6da6e29ff..12ea32488e6 100644
--- a/arch/microblaze/lib/bootm.c
+++ b/arch/microblaze/lib/bootm.c
@@ -75,7 +75,7 @@ static void boot_jump_linux(bootm_headers_t *images, int flag)
 
 static void boot_prep_linux(bootm_headers_t *images)
 {
-	if (IMAGE_ENABLE_OF_LIBFDT && images->ft_len) {
+	if (CONFIG_IS_ENABLED(OF_LIBFDT) && images->ft_len) {
 		debug("using: FDT\n");
 		if (image_setup_linux(images)) {
 			printf("FDT creation failed! hanging...");
diff --git a/arch/nds32/lib/bootm.c b/arch/nds32/lib/bootm.c
index 1c7f7856999..71ebfb4225b 100644
--- a/arch/nds32/lib/bootm.c
+++ b/arch/nds32/lib/bootm.c
@@ -69,7 +69,7 @@ int do_bootm_linux(int flag, int argc, char *argv[], bootm_headers_t *images)
 	debug("## Transferring control to Linux (at address %08lx) ...\n",
 	       (ulong)theKernel);
 
-	if (IMAGE_ENABLE_OF_LIBFDT && images->ft_len) {
+	if (CONFIG_IS_ENABLED(OF_LIBFDT) && images->ft_len) {
 #ifdef CONFIG_OF_LIBFDT
 		debug("using: FDT\n");
 		if (image_setup_linux(images)) {
@@ -110,7 +110,7 @@ int do_bootm_linux(int flag, int argc, char *argv[], bootm_headers_t *images)
 #endif
 	}
 	cleanup_before_linux();
-	if (IMAGE_ENABLE_OF_LIBFDT && images->ft_len)
+	if (CONFIG_IS_ENABLED(OF_LIBFDT) && images->ft_len)
 		theKernel(0, machid, (unsigned long)images->ft_addr);
 	else
 		theKernel(0, machid, bd->bi_boot_params);
diff --git a/arch/riscv/lib/bootm.c b/arch/riscv/lib/bootm.c
index ff1bdf71318..2e1e286c8ef 100644
--- a/arch/riscv/lib/bootm.c
+++ b/arch/riscv/lib/bootm.c
@@ -64,7 +64,7 @@ static void announce_and_cleanup(int fake)
 
 static void boot_prep_linux(bootm_headers_t *images)
 {
-	if (IMAGE_ENABLE_OF_LIBFDT && images->ft_len) {
+	if (CONFIG_IS_ENABLED(OF_LIBFDT) && images->ft_len) {
 #ifdef CONFIG_OF_LIBFDT
 		debug("using: FDT\n");
 		if (image_setup_linux(images)) {
@@ -96,7 +96,7 @@ static void boot_jump_linux(bootm_headers_t *images, int flag)
 	announce_and_cleanup(fake);
 
 	if (!fake) {
-		if (IMAGE_ENABLE_OF_LIBFDT && images->ft_len) {
+		if (CONFIG_IS_ENABLED(OF_LIBFDT) && images->ft_len) {
 #ifdef CONFIG_SMP
 			ret = smp_call_function(images->ep,
 						(ulong)images->ft_addr, 0, 0);
diff --git a/board/synopsys/hsdk/hsdk.c b/board/synopsys/hsdk/hsdk.c
index 892b94bb083..226fbba6296 100644
--- a/board/synopsys/hsdk/hsdk.c
+++ b/board/synopsys/hsdk/hsdk.c
@@ -871,7 +871,7 @@ int board_prep_linux(bootm_headers_t *images)
 	if (env_common.core_mask.val == ALL_CPU_MASK)
 		return 0;
 
-	if (!IMAGE_ENABLE_OF_LIBFDT || !images->ft_len) {
+	if (!CONFIG_IS_ENABLED(OF_LIBFDT) || !images->ft_len) {
 		pr_err("WARN: core_mask setup will work properly only with external DTB!\n");
 		return 0;
 	}
diff --git a/common/bootm.c b/common/bootm.c
index 8d614fe140e..4482f84b40a 100644
--- a/common/bootm.c
+++ b/common/bootm.c
@@ -271,7 +271,7 @@ int bootm_find_images(int flag, int argc, char *const argv[], ulong start,
 		return 1;
 	}
 
-#if IMAGE_ENABLE_OF_LIBFDT
+#if CONFIG_IS_ENABLED(OF_LIBFDT)
 	/* find flattened device tree */
 	ret = boot_get_fdt(flag, argc, argv, IH_ARCH_DEFAULT, &images,
 			   &images.ft_addr, &images.ft_len);
@@ -706,7 +706,7 @@ int do_bootm_states(struct cmd_tbl *cmdtp, int flag, int argc,
 		}
 	}
 #endif
-#if IMAGE_ENABLE_OF_LIBFDT && defined(CONFIG_LMB)
+#if CONFIG_IS_ENABLED(OF_LIBFDT) && defined(CONFIG_LMB)
 	if (!ret && (states & BOOTM_STATE_FDT)) {
 		boot_fdt_add_mem_rsv_regions(&images->lmb, images->ft_addr);
 		ret = boot_relocate_fdt(&images->lmb, &images->ft_addr,
diff --git a/common/image-board.c b/common/image-board.c
index c699232ba13..a9a6011ce02 100644
--- a/common/image-board.c
+++ b/common/image-board.c
@@ -282,7 +282,7 @@ int genimg_get_format(const void *img_addr)
 	if (image_check_magic(hdr))
 		return IMAGE_FORMAT_LEGACY;
 #endif
-#if CONFIG_IS_ENABLED(FIT) || IMAGE_ENABLE_OF_LIBFDT
+#if CONFIG_IS_ENABLED(FIT) || CONFIG_IS_ENABLED(OF_LIBFDT)
 	if (fdt_check_header(img_addr) == 0)
 		return IMAGE_FORMAT_FIT;
 #endif
@@ -895,7 +895,7 @@ int image_setup_linux(bootm_headers_t *images)
 	struct lmb *lmb = &images->lmb;
 	int ret;
 
-	if (IMAGE_ENABLE_OF_LIBFDT)
+	if (CONFIG_IS_ENABLED(OF_LIBFDT))
 		boot_fdt_add_mem_rsv_regions(lmb, *of_flat_tree);
 
 	if (IMAGE_BOOT_GET_CMDLINE) {
@@ -907,13 +907,13 @@ int image_setup_linux(bootm_headers_t *images)
 		}
 	}
 
-	if (IMAGE_ENABLE_OF_LIBFDT) {
+	if (CONFIG_IS_ENABLED(OF_LIBFDT)) {
 		ret = boot_relocate_fdt(lmb, of_flat_tree, &of_size);
 		if (ret)
 			return ret;
 	}
 
-	if (IMAGE_ENABLE_OF_LIBFDT && of_size) {
+	if (CONFIG_IS_ENABLED(OF_LIBFDT) && of_size) {
 		ret = image_setup_libfdt(images, *of_flat_tree, of_size, lmb);
 		if (ret)
 			return ret;
diff --git a/common/image.c b/common/image.c
index 59b5e70ccae..5b77113bea3 100644
--- a/common/image.c
+++ b/common/image.c
@@ -18,7 +18,7 @@
 #include <status_led.h>
 #endif
 
-#if CONFIG_IS_ENABLED(FIT) || IMAGE_ENABLE_OF_LIBFDT
+#if CONFIG_IS_ENABLED(FIT) || CONFIG_IS_ENABLED(OF_LIBFDT)
 #include <linux/libfdt.h>
 #include <fdt_support.h>
 #endif
diff --git a/include/image.h b/include/image.h
index 6c229212cb1..f09eb9de516 100644
--- a/include/image.h
+++ b/include/image.h
@@ -28,7 +28,6 @@ struct fdt_region;
 #include <linux/kconfig.h>
 
 /* new uImage format support enabled on host */
-#define IMAGE_ENABLE_OF_LIBFDT	1
 #define CONFIG_FIT_VERBOSE	1 /* enable fit_format_{error,warning}() */
 #define CONFIG_FIT_RSASSA_PSS 1
 
@@ -46,8 +45,6 @@ struct fdt_region;
 #define IMAGE_ENABLE_IGNORE	1
 #define IMAGE_INDENT_STRING	"   "
 
-#define IMAGE_ENABLE_OF_LIBFDT	CONFIG_IS_ENABLED(OF_LIBFDT)
-
 #endif /* USE_HOSTCC */
 
 #if CONFIG_IS_ENABLED(FIT)
diff --git a/lib/lmb.c b/lib/lmb.c
index 793647724c3..676b3a0bda6 100644
--- a/lib/lmb.c
+++ b/lib/lmb.c
@@ -153,7 +153,7 @@ static void lmb_reserve_common(struct lmb *lmb, void *fdt_blob)
 	arch_lmb_reserve(lmb);
 	board_lmb_reserve(lmb);
 
-	if (IMAGE_ENABLE_OF_LIBFDT && fdt_blob)
+	if (CONFIG_IS_ENABLED(OF_LIBFDT) && fdt_blob)
 		boot_fdt_add_mem_rsv_regions(lmb, fdt_blob);
 }
 
diff --git a/tools/Kconfig b/tools/Kconfig
index 6ffc2c0aa31..747d221803f 100644
--- a/tools/Kconfig
+++ b/tools/Kconfig
@@ -50,6 +50,11 @@ config TOOLS_MD5
 	help
 	  Enable MD5 support in the tools builds
 
+config TOOLS_OF_LIBFDT
+	def_bool y
+	help
+	  Enable libfdt support in the tools builds
+
 config TOOLS_SHA1
 	def_bool y
 	help
-- 
2.33.0.685.g46640cef36-goog


^ permalink raw reply related	[flat|nested] 90+ messages in thread

* [PATCH v5 09/29] image: Use Kconfig to enable CONFIG_FIT_VERBOSE on host
  2021-09-26  1:43 [PATCH v5 00/29] image: Reduce #ifdefs and ad-hoc defines in image code (Part B) Simon Glass
                   ` (7 preceding siblings ...)
  2021-09-26  1:43 ` [PATCH v5 08/29] image: Drop IMAGE_ENABLE_OF_LIBFDT Simon Glass
@ 2021-09-26  1:43 ` Simon Glass
  2021-10-05 18:29   ` Alex G.
  2021-10-09  1:40   ` Tom Rini
  2021-09-26  1:43 ` [PATCH v5 10/29] image: Use Kconfig to enable FIT_RSASSA_PSS " Simon Glass
                   ` (16 subsequent siblings)
  25 siblings, 2 replies; 90+ messages in thread
From: Simon Glass @ 2021-09-26  1:43 UTC (permalink / raw)
  To: U-Boot Mailing List
  Cc: Alexandru Gagniuc, Andre Przywara, Rasmus Villemoes,
	Robert Marko, Masahiro Yamada, Tom Rini, Simon Glass,
	Joe Hershberger, Marek Vasut

Add a host Kconfig for FIT_VERBOSE. With this we can use
CONFIG_IS_ENABLED(FIT_VERBOSE) directly in the host build, so drop the
forcing of this in the image.h header.

Signed-off-by: Simon Glass <sjg@chromium.org>
---

Changes in v5:
- Use TOOLS_ instead of HOST_

 include/image.h | 5 ++---
 tools/Kconfig   | 5 +++++
 2 files changed, 7 insertions(+), 3 deletions(-)

diff --git a/include/image.h b/include/image.h
index f09eb9de516..6efbef06e64 100644
--- a/include/image.h
+++ b/include/image.h
@@ -28,7 +28,6 @@ struct fdt_region;
 #include <linux/kconfig.h>
 
 /* new uImage format support enabled on host */
-#define CONFIG_FIT_VERBOSE	1 /* enable fit_format_{error,warning}() */
 #define CONFIG_FIT_RSASSA_PSS 1
 
 #define IMAGE_ENABLE_IGNORE	0
@@ -1458,7 +1457,7 @@ int fit_image_cipher_get_algo(const void *fit, int noffset, char **algo);
 
 struct cipher_algo *image_get_cipher_algo(const char *full_name);
 
-#ifdef CONFIG_FIT_VERBOSE
+#if CONFIG_IS_ENABLED(FIT_VERBOSE)
 #define fit_unsupported(msg)	printf("! %s:%d " \
 				"FIT images not supported for '%s'\n", \
 				__FILE__, __LINE__, (msg))
@@ -1470,7 +1469,7 @@ struct cipher_algo *image_get_cipher_algo(const char *full_name);
 #else
 #define fit_unsupported(msg)
 #define fit_unsupported_reset(msg)
-#endif /* CONFIG_FIT_VERBOSE */
+#endif /* FIT_VERBOSE */
 #endif /* CONFIG_FIT */
 
 #if !defined(USE_HOSTCC)
diff --git a/tools/Kconfig b/tools/Kconfig
index 747d221803f..9d1c0efd40c 100644
--- a/tools/Kconfig
+++ b/tools/Kconfig
@@ -45,6 +45,11 @@ config TOOLS_FIT_SIGNATURE_MAX_SIZE
 	depends on TOOLS_FIT_SIGNATURE
 	default 0x10000000
 
+config TOOLS_FIT_VERBOSE
+	def_bool y
+	help
+	  Support verbose FIT output in the tools builds
+
 config TOOLS_MD5
 	def_bool y
 	help
-- 
2.33.0.685.g46640cef36-goog


^ permalink raw reply related	[flat|nested] 90+ messages in thread

* [PATCH v5 10/29] image: Use Kconfig to enable FIT_RSASSA_PSS on host
  2021-09-26  1:43 [PATCH v5 00/29] image: Reduce #ifdefs and ad-hoc defines in image code (Part B) Simon Glass
                   ` (8 preceding siblings ...)
  2021-09-26  1:43 ` [PATCH v5 09/29] image: Use Kconfig to enable CONFIG_FIT_VERBOSE on host Simon Glass
@ 2021-09-26  1:43 ` Simon Glass
  2021-10-05 18:32   ` Alex G.
  2021-10-09  1:40   ` Tom Rini
  2021-09-26  1:43 ` [PATCH v5 11/29] image: Use the correct checks for CRC32 Simon Glass
                   ` (15 subsequent siblings)
  25 siblings, 2 replies; 90+ messages in thread
From: Simon Glass @ 2021-09-26  1:43 UTC (permalink / raw)
  To: U-Boot Mailing List
  Cc: Alexandru Gagniuc, Andre Przywara, Rasmus Villemoes,
	Robert Marko, Masahiro Yamada, Tom Rini, Simon Glass,
	Joe Hershberger, Marek Vasut

Add a host Kconfig for FIT_RSASSA_PSS. With this we can use
CONFIG_IS_ENABLED(FIT_RSASSA_PSS) directly in the host build, so drop the
forcing of this in the image.h header.

Drop the #ifdef around padding_pss_verify() too since it is not needed.
Use the compiler to check the config where possible, instead of the
preprocessor.

Signed-off-by: Simon Glass <sjg@chromium.org>
---

Changes in v5:
- Avoid preprocessor in a few more places
- Use TOOLS_ instead of HOST_

 include/image.h      |  3 ---
 include/u-boot/rsa.h |  2 --
 lib/rsa/rsa-sign.c   |  5 ++---
 lib/rsa/rsa-verify.c | 16 +++-------------
 tools/Kconfig        |  5 +++++
 5 files changed, 10 insertions(+), 21 deletions(-)

diff --git a/include/image.h b/include/image.h
index 6efbef06e64..dc872ef5b24 100644
--- a/include/image.h
+++ b/include/image.h
@@ -27,9 +27,6 @@ struct fdt_region;
 #include <sys/types.h>
 #include <linux/kconfig.h>
 
-/* new uImage format support enabled on host */
-#define CONFIG_FIT_RSASSA_PSS 1
-
 #define IMAGE_ENABLE_IGNORE	0
 #define IMAGE_INDENT_STRING	""
 
diff --git a/include/u-boot/rsa.h b/include/u-boot/rsa.h
index 89a9c4caa0a..7556aa5b4b7 100644
--- a/include/u-boot/rsa.h
+++ b/include/u-boot/rsa.h
@@ -103,11 +103,9 @@ int padding_pkcs_15_verify(struct image_sign_info *info,
 			   uint8_t *msg, int msg_len,
 			   const uint8_t *hash, int hash_len);
 
-#ifdef CONFIG_FIT_RSASSA_PSS
 int padding_pss_verify(struct image_sign_info *info,
 		       uint8_t *msg, int msg_len,
 		       const uint8_t *hash, int hash_len);
-#endif /* CONFIG_FIT_RSASSA_PSS */
 
 #define RSA_DEFAULT_PADDING_NAME		"pkcs-1.5"
 
diff --git a/lib/rsa/rsa-sign.c b/lib/rsa/rsa-sign.c
index c27a784c429..0579e5294ee 100644
--- a/lib/rsa/rsa-sign.c
+++ b/lib/rsa/rsa-sign.c
@@ -401,15 +401,14 @@ static int rsa_sign_with_key(EVP_PKEY *pkey, struct padding_algo *padding_algo,
 		goto err_sign;
 	}
 
-#ifdef CONFIG_FIT_RSASSA_PSS
-	if (padding_algo && !strcmp(padding_algo->name, "pss")) {
+	if (CONFIG_IS_ENABLED(FIT_RSASSA_PSS) && padding_algo &&
+	    !strcmp(padding_algo->name, "pss")) {
 		if (EVP_PKEY_CTX_set_rsa_padding(ckey,
 						 RSA_PKCS1_PSS_PADDING) <= 0) {
 			ret = rsa_err("Signer padding setup failed");
 			goto err_sign;
 		}
 	}
-#endif /* CONFIG_FIT_RSASSA_PSS */
 
 	for (i = 0; i < region_count; i++) {
 		if (!EVP_DigestSignUpdate(context, region[i].data,
diff --git a/lib/rsa/rsa-verify.c b/lib/rsa/rsa-verify.c
index ad6d33d043a..9e522d210d7 100644
--- a/lib/rsa/rsa-verify.c
+++ b/lib/rsa/rsa-verify.c
@@ -102,7 +102,6 @@ U_BOOT_PADDING_ALGO(pkcs_15) = {
 };
 #endif
 
-#ifdef CONFIG_FIT_RSASSA_PSS
 static void u32_i2osp(uint32_t val, uint8_t *buf)
 {
 	buf[0] = (uint8_t)((val >> 24) & 0xff);
@@ -311,9 +310,6 @@ U_BOOT_PADDING_ALGO(pss) = {
 };
 #endif
 
-#endif
-
-#if CONFIG_IS_ENABLED(FIT_SIGNATURE) || CONFIG_IS_ENABLED(RSA_VERIFY_WITH_PKEY)
 /**
  * rsa_verify_key() - Verify a signature against some data using RSA Key
  *
@@ -385,9 +381,7 @@ static int rsa_verify_key(struct image_sign_info *info,
 
 	return 0;
 }
-#endif
 
-#if CONFIG_IS_ENABLED(RSA_VERIFY_WITH_PKEY)
 /**
  * rsa_verify_with_pkey() - Verify a signature against some data using
  * only modulus and exponent as RSA key properties.
@@ -408,6 +402,9 @@ int rsa_verify_with_pkey(struct image_sign_info *info,
 	struct key_prop *prop;
 	int ret;
 
+	if (!CONFIG_IS_ENABLED(RSA_VERIFY_WITH_PKEY))
+		return -EACCES;
+
 	/* Public key is self-described to fill key_prop */
 	ret = rsa_gen_key_prop(info->key, info->keylen, &prop);
 	if (ret) {
@@ -422,13 +419,6 @@ int rsa_verify_with_pkey(struct image_sign_info *info,
 
 	return ret;
 }
-#else
-int rsa_verify_with_pkey(struct image_sign_info *info,
-			 const void *hash, uint8_t *sig, uint sig_len)
-{
-	return -EACCES;
-}
-#endif
 
 #if CONFIG_IS_ENABLED(FIT_SIGNATURE)
 /**
diff --git a/tools/Kconfig b/tools/Kconfig
index 9d1c0efd40c..8685c800f93 100644
--- a/tools/Kconfig
+++ b/tools/Kconfig
@@ -35,6 +35,11 @@ config TOOLS_FIT_PRINT
 	help
 	  Print the content of the FIT verbosely in the tools builds
 
+config TOOLS_FIT_RSASSA_PSS
+	def_bool y
+	help
+	  Support the rsassa-pss signature scheme in the tools builds
+
 config TOOLS_FIT_SIGNATURE
 	def_bool y
 	help
-- 
2.33.0.685.g46640cef36-goog


^ permalink raw reply related	[flat|nested] 90+ messages in thread

* [PATCH v5 11/29] image: Use the correct checks for CRC32
  2021-09-26  1:43 [PATCH v5 00/29] image: Reduce #ifdefs and ad-hoc defines in image code (Part B) Simon Glass
                   ` (9 preceding siblings ...)
  2021-09-26  1:43 ` [PATCH v5 10/29] image: Use Kconfig to enable FIT_RSASSA_PSS " Simon Glass
@ 2021-09-26  1:43 ` Simon Glass
  2021-10-05 18:34   ` Alex G.
  2021-10-09  1:40   ` Tom Rini
  2021-09-26  1:43 ` [PATCH v5 12/29] image: Drop IMAGE_BOOT_GET_CMDLINE Simon Glass
                   ` (14 subsequent siblings)
  25 siblings, 2 replies; 90+ messages in thread
From: Simon Glass @ 2021-09-26  1:43 UTC (permalink / raw)
  To: U-Boot Mailing List
  Cc: Alexandru Gagniuc, Andre Przywara, Rasmus Villemoes,
	Robert Marko, Masahiro Yamada, Tom Rini, Simon Glass,
	Joe Hershberger, Marek Vasut

Add a host Kconfig for CRC32. With this we can use CONFIG_IS_ENABLED(CRC32)
directly in the host build, so drop the unnecessary indirection.

Add a few more conditions to SPL_CRC32 to avoid build failures as well as
TPL_CRC32. Also update hash.c to make crc32 optional and to actually take
notice of SPL_CRC32.

Signed-off-by: Simon Glass <sjg@chromium.org>
---

Changes in v5:
- Rebase to next
- Use TOOLS_ instead of HOST_

 common/hash.c      | 13 ++++++++-----
 common/spl/Kconfig | 13 ++++++++++++-
 lib/Kconfig        |  5 +++++
 lib/Makefile       |  4 +---
 tools/Kconfig      |  5 +++++
 5 files changed, 31 insertions(+), 9 deletions(-)

diff --git a/common/hash.c b/common/hash.c
index e92f9a9594f..b4b01c193b6 100644
--- a/common/hash.c
+++ b/common/hash.c
@@ -178,7 +178,7 @@ static int hash_finish_crc16_ccitt(struct hash_algo *algo, void *ctx,
 	return 0;
 }
 
-static int hash_init_crc32(struct hash_algo *algo, void **ctxp)
+static int __maybe_unused hash_init_crc32(struct hash_algo *algo, void **ctxp)
 {
 	uint32_t *ctx = malloc(sizeof(uint32_t));
 	*ctx = 0;
@@ -186,15 +186,16 @@ static int hash_init_crc32(struct hash_algo *algo, void **ctxp)
 	return 0;
 }
 
-static int hash_update_crc32(struct hash_algo *algo, void *ctx,
-			     const void *buf, unsigned int size, int is_last)
+static int __maybe_unused hash_update_crc32(struct hash_algo *algo, void *ctx,
+					    const void *buf, unsigned int size,
+					    int is_last)
 {
 	*((uint32_t *)ctx) = crc32(*((uint32_t *)ctx), buf, size);
 	return 0;
 }
 
-static int hash_finish_crc32(struct hash_algo *algo, void *ctx, void *dest_buf,
-			     int size)
+static int __maybe_unused hash_finish_crc32(struct hash_algo *algo, void *ctx,
+					    void *dest_buf, int size)
 {
 	if (size < algo->digest_size)
 		return -1;
@@ -311,6 +312,7 @@ static struct hash_algo hash_algo[] = {
 		.hash_update	= hash_update_crc16_ccitt,
 		.hash_finish	= hash_finish_crc16_ccitt,
 	},
+#if CONFIG_IS_ENABLED(CRC32)
 	{
 		.name		= "crc32",
 		.digest_size	= 4,
@@ -320,6 +322,7 @@ static struct hash_algo hash_algo[] = {
 		.hash_update	= hash_update_crc32,
 		.hash_finish	= hash_finish_crc32,
 	},
+#endif
 };
 
 /* Try to minimize code size for boards that don't want much hashing */
diff --git a/common/spl/Kconfig b/common/spl/Kconfig
index 34f6fc2cfad..91bb6c89fb4 100644
--- a/common/spl/Kconfig
+++ b/common/spl/Kconfig
@@ -419,7 +419,8 @@ config SYS_MMCSD_RAW_MODE_EMMC_BOOT_PARTITION
 
 config SPL_CRC32
 	bool "Support CRC32"
-	default y if SPL_LEGACY_IMAGE_SUPPORT
+	default y if SPL_LEGACY_IMAGE_SUPPORT || SPL_EFI_PARTITION
+	default y if SPL_ENV_SUPPORT || TPL_BLOBLIST
 	help
 	  Enable this to support CRC32 in uImages or FIT images within SPL.
 	  This is a 32-bit checksum value that can be used to verify images.
@@ -1419,6 +1420,16 @@ config TPL_BOOTROM_SUPPORT
 	  BOOT_DEVICE_BOOTROM (or fall-through to the next boot device in the
 	  boot device list, if not implemented for a given board)
 
+config TPL_CRC32
+	bool "Support CRC32 in TPL"
+	default y if TPL_ENV_SUPPORT || TPL_BLOBLIST
+	help
+	  Enable this to support CRC32 in uImages or FIT images within SPL.
+	  This is a 32-bit checksum value that can be used to verify images.
+	  For FIT images, this is the least secure type of checksum, suitable
+	  for detected accidental image corruption. For secure applications you
+	  should consider SHA1 or SHA256.
+
 config TPL_DRIVERS_MISC
 	bool "Support misc drivers in TPL"
 	help
diff --git a/lib/Kconfig b/lib/Kconfig
index 64765acfa61..70bf8e7a464 100644
--- a/lib/Kconfig
+++ b/lib/Kconfig
@@ -496,6 +496,11 @@ config SPL_MD5
 	  security applications, but it can be useful for providing a quick
 	  checksum of a block of data.
 
+config CRC32
+	def_bool y
+	help
+	  Enables CRC32 support in U-Boot. This is normally required.
+
 config CRC32C
 	bool
 
diff --git a/lib/Makefile b/lib/Makefile
index 9c0373e2955..c523bb74119 100644
--- a/lib/Makefile
+++ b/lib/Makefile
@@ -99,9 +99,7 @@ obj-y += display_options.o
 CFLAGS_display_options.o := $(if $(BUILD_TAG),-DBUILD_TAG='"$(BUILD_TAG)"')
 obj-$(CONFIG_BCH) += bch.o
 obj-$(CONFIG_MMC_SPI) += crc7.o
-#ifndef CONFIG_TPL_BUILD
-obj-y += crc32.o
-#endif
+obj-$(CONFIG_$(SPL_TPL_)CRC32) += crc32.o
 obj-$(CONFIG_CRC32C) += crc32c.o
 obj-y += ctype.o
 obj-y += div64.o
diff --git a/tools/Kconfig b/tools/Kconfig
index 8685c800f93..91ce8ae3e51 100644
--- a/tools/Kconfig
+++ b/tools/Kconfig
@@ -9,6 +9,11 @@ config MKIMAGE_DTC_PATH
 	  some cases the system dtc may not support all required features
 	  and the path to a different version should be given here.
 
+config TOOLS_CRC32
+	def_bool y
+	help
+	  Enable CRC32 support in the tools builds
+
 config TOOLS_LIBCRYPTO
 	bool "Use OpenSSL's libcrypto library for host tools"
 	default y
-- 
2.33.0.685.g46640cef36-goog


^ permalink raw reply related	[flat|nested] 90+ messages in thread

* [PATCH v5 12/29] image: Drop IMAGE_BOOT_GET_CMDLINE
  2021-09-26  1:43 [PATCH v5 00/29] image: Reduce #ifdefs and ad-hoc defines in image code (Part B) Simon Glass
                   ` (10 preceding siblings ...)
  2021-09-26  1:43 ` [PATCH v5 11/29] image: Use the correct checks for CRC32 Simon Glass
@ 2021-09-26  1:43 ` Simon Glass
  2021-10-05 18:36   ` Alex G.
  2021-10-09  1:40   ` Tom Rini
  2021-09-26  1:43 ` [PATCH v5 13/29] image: Drop IMAGE_OF_BOARD_SETUP Simon Glass
                   ` (13 subsequent siblings)
  25 siblings, 2 replies; 90+ messages in thread
From: Simon Glass @ 2021-09-26  1:43 UTC (permalink / raw)
  To: U-Boot Mailing List
  Cc: Alexandru Gagniuc, Andre Przywara, Rasmus Villemoes,
	Robert Marko, Masahiro Yamada, Tom Rini, Simon Glass,
	Joe Hershberger, Marek Vasut

This is not needed with Kconfig, since we can use IS_ENABLED() easily
enough and the board code is now in a separate file. Update the only place
where this is used and drop it.

Signed-off-by: Simon Glass <sjg@chromium.org>
---

Changes in v5:
- Update commit message to indicate that the code is in a separate file

 common/image-board.c | 2 +-
 include/image.h      | 6 ------
 2 files changed, 1 insertion(+), 7 deletions(-)

diff --git a/common/image-board.c b/common/image-board.c
index a9a6011ce02..599d6779df5 100644
--- a/common/image-board.c
+++ b/common/image-board.c
@@ -898,7 +898,7 @@ int image_setup_linux(bootm_headers_t *images)
 	if (CONFIG_IS_ENABLED(OF_LIBFDT))
 		boot_fdt_add_mem_rsv_regions(lmb, *of_flat_tree);
 
-	if (IMAGE_BOOT_GET_CMDLINE) {
+	if (IS_ENABLED(CONFIG_SYS_BOOT_GET_CMDLINE)) {
 		ret = boot_get_cmdline(lmb, &images->cmdline_start,
 				       &images->cmdline_end);
 		if (ret) {
diff --git a/include/image.h b/include/image.h
index dc872ef5b24..00a80999584 100644
--- a/include/image.h
+++ b/include/image.h
@@ -49,12 +49,6 @@ struct fdt_region;
 #include <fdt_support.h>
 #endif /* FIT */
 
-#ifdef CONFIG_SYS_BOOT_GET_CMDLINE
-# define IMAGE_BOOT_GET_CMDLINE		1
-#else
-# define IMAGE_BOOT_GET_CMDLINE		0
-#endif
-
 #ifdef CONFIG_OF_BOARD_SETUP
 # define IMAGE_OF_BOARD_SETUP		1
 #else
-- 
2.33.0.685.g46640cef36-goog


^ permalink raw reply related	[flat|nested] 90+ messages in thread

* [PATCH v5 13/29] image: Drop IMAGE_OF_BOARD_SETUP
  2021-09-26  1:43 [PATCH v5 00/29] image: Reduce #ifdefs and ad-hoc defines in image code (Part B) Simon Glass
                   ` (11 preceding siblings ...)
  2021-09-26  1:43 ` [PATCH v5 12/29] image: Drop IMAGE_BOOT_GET_CMDLINE Simon Glass
@ 2021-09-26  1:43 ` Simon Glass
  2021-10-05 18:57   ` Alex G.
  2021-10-09  1:40   ` Tom Rini
  2021-09-26  1:43 ` [PATCH v5 14/29] image: Drop IMAGE_OF_SYSTEM_SETUP Simon Glass
                   ` (12 subsequent siblings)
  25 siblings, 2 replies; 90+ messages in thread
From: Simon Glass @ 2021-09-26  1:43 UTC (permalink / raw)
  To: U-Boot Mailing List
  Cc: Alexandru Gagniuc, Andre Przywara, Rasmus Villemoes,
	Robert Marko, Masahiro Yamada, Tom Rini, Simon Glass,
	Joe Hershberger, Marek Vasut

This is not needed with Kconfig, since we can use IS_ENABLED() easily
enough. Drop it.

Signed-off-by: Simon Glass <sjg@chromium.org>
---

(no changes since v1)

 common/image-fdt.c | 4 ++--
 include/image.h    | 6 ------
 2 files changed, 2 insertions(+), 8 deletions(-)

diff --git a/common/image-fdt.c b/common/image-fdt.c
index 9441e63a3d4..cd664649e2c 100644
--- a/common/image-fdt.c
+++ b/common/image-fdt.c
@@ -582,7 +582,7 @@ int image_setup_libfdt(bootm_headers_t *images, void *blob,
 	/* Append PStore configuration */
 	fdt_fixup_pstore(blob);
 #endif
-	if (IMAGE_OF_BOARD_SETUP) {
+	if (IS_ENABLED(CONFIG_OF_BOARD_SETUP)) {
 		const char *skip_board_fixup;
 
 		skip_board_fixup = env_get("skip_board_fixup");
@@ -629,7 +629,7 @@ int image_setup_libfdt(bootm_headers_t *images, void *blob,
 		goto err;
 
 #if defined(CONFIG_SOC_KEYSTONE)
-	if (IMAGE_OF_BOARD_SETUP)
+	if (IS_ENABLED(CONFIG_OF_BOARD_SETUP))
 		ft_board_setup_ex(blob, gd->bd);
 #endif
 
diff --git a/include/image.h b/include/image.h
index 00a80999584..e1e4148e4c8 100644
--- a/include/image.h
+++ b/include/image.h
@@ -49,12 +49,6 @@ struct fdt_region;
 #include <fdt_support.h>
 #endif /* FIT */
 
-#ifdef CONFIG_OF_BOARD_SETUP
-# define IMAGE_OF_BOARD_SETUP		1
-#else
-# define IMAGE_OF_BOARD_SETUP		0
-#endif
-
 #ifdef CONFIG_OF_SYSTEM_SETUP
 # define IMAGE_OF_SYSTEM_SETUP	1
 #else
-- 
2.33.0.685.g46640cef36-goog


^ permalink raw reply related	[flat|nested] 90+ messages in thread

* [PATCH v5 14/29] image: Drop IMAGE_OF_SYSTEM_SETUP
  2021-09-26  1:43 [PATCH v5 00/29] image: Reduce #ifdefs and ad-hoc defines in image code (Part B) Simon Glass
                   ` (12 preceding siblings ...)
  2021-09-26  1:43 ` [PATCH v5 13/29] image: Drop IMAGE_OF_BOARD_SETUP Simon Glass
@ 2021-09-26  1:43 ` Simon Glass
  2021-10-05 18:58   ` Alex G.
  2021-10-09  1:40   ` Tom Rini
  2021-09-26  1:43 ` [PATCH v5 15/29] image: Drop IMAGE_ENABLE_IGNORE Simon Glass
                   ` (11 subsequent siblings)
  25 siblings, 2 replies; 90+ messages in thread
From: Simon Glass @ 2021-09-26  1:43 UTC (permalink / raw)
  To: U-Boot Mailing List
  Cc: Alexandru Gagniuc, Andre Przywara, Rasmus Villemoes,
	Robert Marko, Masahiro Yamada, Tom Rini, Simon Glass,
	Joe Hershberger, Marek Vasut

This is not needed with Kconfig, since we can use IS_ENABLED() easily
enough. Drop it.

Signed-off-by: Simon Glass <sjg@chromium.org>
---

(no changes since v1)

 common/image-fdt.c | 2 +-
 include/image.h    | 6 ------
 2 files changed, 1 insertion(+), 7 deletions(-)

diff --git a/common/image-fdt.c b/common/image-fdt.c
index cd664649e2c..cf87e455230 100644
--- a/common/image-fdt.c
+++ b/common/image-fdt.c
@@ -597,7 +597,7 @@ int image_setup_libfdt(bootm_headers_t *images, void *blob,
 			}
 		}
 	}
-	if (IMAGE_OF_SYSTEM_SETUP) {
+	if (IS_ENABLED(CONFIG_OF_SYSTEM_SETUP)) {
 		fdt_ret = ft_system_setup(blob, gd->bd);
 		if (fdt_ret) {
 			printf("ERROR: system-specific fdt fixup failed: %s\n",
diff --git a/include/image.h b/include/image.h
index e1e4148e4c8..e190f59232d 100644
--- a/include/image.h
+++ b/include/image.h
@@ -49,12 +49,6 @@ struct fdt_region;
 #include <fdt_support.h>
 #endif /* FIT */
 
-#ifdef CONFIG_OF_SYSTEM_SETUP
-# define IMAGE_OF_SYSTEM_SETUP	1
-#else
-# define IMAGE_OF_SYSTEM_SETUP	0
-#endif
-
 extern ulong image_load_addr;		/* Default Load Address */
 extern ulong image_save_addr;		/* Default Save Address */
 extern ulong image_save_size;		/* Default Save Size */
-- 
2.33.0.685.g46640cef36-goog


^ permalink raw reply related	[flat|nested] 90+ messages in thread

* [PATCH v5 15/29] image: Drop IMAGE_ENABLE_IGNORE
  2021-09-26  1:43 [PATCH v5 00/29] image: Reduce #ifdefs and ad-hoc defines in image code (Part B) Simon Glass
                   ` (13 preceding siblings ...)
  2021-09-26  1:43 ` [PATCH v5 14/29] image: Drop IMAGE_OF_SYSTEM_SETUP Simon Glass
@ 2021-09-26  1:43 ` Simon Glass
  2021-10-05 18:58   ` Alex G.
  2021-10-09  1:40   ` Tom Rini
  2021-09-26  1:43 ` [PATCH v5 16/29] efi: Correct dependency on FIT_SIGNATURE Simon Glass
                   ` (10 subsequent siblings)
  25 siblings, 2 replies; 90+ messages in thread
From: Simon Glass @ 2021-09-26  1:43 UTC (permalink / raw)
  To: U-Boot Mailing List
  Cc: Alexandru Gagniuc, Andre Przywara, Rasmus Villemoes,
	Robert Marko, Masahiro Yamada, Tom Rini, Simon Glass,
	Joe Hershberger, Marek Vasut

We can use the new host_build() function for this, so drop it.

Signed-off-by: Simon Glass <sjg@chromium.org>
---

(no changes since v1)

 common/image-fit.c | 2 +-
 include/image.h    | 3 ---
 2 files changed, 1 insertion(+), 4 deletions(-)

diff --git a/common/image-fit.c b/common/image-fit.c
index 17c6d4e7813..f44f5527b9f 100644
--- a/common/image-fit.c
+++ b/common/image-fit.c
@@ -1277,7 +1277,7 @@ static int fit_image_check_hash(const void *fit, int noffset, const void *data,
 	}
 	printf("%s", algo);
 
-	if (IMAGE_ENABLE_IGNORE) {
+	if (!tools_build()) {
 		fit_image_hash_get_ignore(fit, noffset, &ignore);
 		if (ignore) {
 			printf("-skipped ");
diff --git a/include/image.h b/include/image.h
index e190f59232d..a236180ccdd 100644
--- a/include/image.h
+++ b/include/image.h
@@ -27,7 +27,6 @@ struct fdt_region;
 #include <sys/types.h>
 #include <linux/kconfig.h>
 
-#define IMAGE_ENABLE_IGNORE	0
 #define IMAGE_INDENT_STRING	""
 
 #else
@@ -37,8 +36,6 @@ struct fdt_region;
 #include <command.h>
 #include <linker_lists.h>
 
-/* Take notice of the 'ignore' property for hashes */
-#define IMAGE_ENABLE_IGNORE	1
 #define IMAGE_INDENT_STRING	"   "
 
 #endif /* USE_HOSTCC */
-- 
2.33.0.685.g46640cef36-goog


^ permalink raw reply related	[flat|nested] 90+ messages in thread

* [PATCH v5 16/29] efi: Correct dependency on FIT_SIGNATURE
  2021-09-26  1:43 [PATCH v5 00/29] image: Reduce #ifdefs and ad-hoc defines in image code (Part B) Simon Glass
                   ` (14 preceding siblings ...)
  2021-09-26  1:43 ` [PATCH v5 15/29] image: Drop IMAGE_ENABLE_IGNORE Simon Glass
@ 2021-09-26  1:43 ` Simon Glass
  2021-10-09  1:40   ` Tom Rini
  2021-09-26  1:43 ` [PATCH v5 19/29] image: Tidy up fit_unsupported_reset() Simon Glass
                   ` (9 subsequent siblings)
  25 siblings, 1 reply; 90+ messages in thread
From: Simon Glass @ 2021-09-26  1:43 UTC (permalink / raw)
  To: U-Boot Mailing List
  Cc: Alexandru Gagniuc, Andre Przywara, Rasmus Villemoes,
	Robert Marko, Masahiro Yamada, Tom Rini, Simon Glass,
	Alexander Graf

At present EFI_SECURE BOOT selects RSA but does not necessarily enable
FIT_SIGNATURE. Mostly this is fine, but a few boards do not enable it,
so U-Boot tries to do RSA verification when loading FIT images, but it
is not enabled.

This worked because the condition for checking the RSA signature is
wrong in the fit_image_verify_with_data() function. In order to fix it
we need to fix this dependency. Make sure that FIT_SIGNATURE is enabled
so that RSA can be used.

It might be better to avoid using 'select' in this situation.

Signed-off-by: Simon Glass <sjg@chromium.org>
---

(no changes since v1)

 lib/efi_loader/Kconfig | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lib/efi_loader/Kconfig b/lib/efi_loader/Kconfig
index 14bf5f7e92e..c1cc143f354 100644
--- a/lib/efi_loader/Kconfig
+++ b/lib/efi_loader/Kconfig
@@ -343,7 +343,7 @@ config EFI_LOAD_FILE2_INITRD
 
 config EFI_SECURE_BOOT
 	bool "Enable EFI secure boot support"
-	depends on EFI_LOADER
+	depends on EFI_LOADER && FIT_SIGNATURE
 	select HASH
 	select SHA256
 	select RSA
-- 
2.33.0.685.g46640cef36-goog


^ permalink raw reply related	[flat|nested] 90+ messages in thread

* [PATCH v5 19/29] image: Tidy up fit_unsupported_reset()
  2021-09-26  1:43 [PATCH v5 00/29] image: Reduce #ifdefs and ad-hoc defines in image code (Part B) Simon Glass
                   ` (15 preceding siblings ...)
  2021-09-26  1:43 ` [PATCH v5 16/29] efi: Correct dependency on FIT_SIGNATURE Simon Glass
@ 2021-09-26  1:43 ` Simon Glass
  2021-10-09  1:40   ` Tom Rini
  2021-09-26  1:43 ` [PATCH v5 20/29] image: Drop unnecessary #ifdefs from image.h Simon Glass
                   ` (8 subsequent siblings)
  25 siblings, 1 reply; 90+ messages in thread
From: Simon Glass @ 2021-09-26  1:43 UTC (permalink / raw)
  To: U-Boot Mailing List
  Cc: Alexandru Gagniuc, Andre Przywara, Rasmus Villemoes,
	Robert Marko, Masahiro Yamada, Tom Rini, Simon Glass,
	Joe Hershberger, Marek Vasut

This function is only used in one place and does not need to use the
preprocessor. Move it to the C file and convert it to a normal function.

Drop fit_unsupported() since it is not used.

Signed-off-by: Simon Glass <sjg@chromium.org>
---

(no changes since v1)

 common/bootm_os.c |  8 ++++++++
 include/image.h   | 13 -------------
 2 files changed, 8 insertions(+), 13 deletions(-)

diff --git a/common/bootm_os.c b/common/bootm_os.c
index d635037064a..39623f9126b 100644
--- a/common/bootm_os.c
+++ b/common/bootm_os.c
@@ -58,6 +58,14 @@ static void copy_args(char *dest, int argc, char *const argv[], char delim)
 }
 #endif
 
+static void __maybe_unused fit_unsupported_reset(const char *msg)
+{
+	if (CONFIG_IS_ENABLED(FIT_VERBOSE)) {
+		printf("! FIT images not supported for '%s' - must reset board to recover!\n",
+		       msg);
+	}
+}
+
 #ifdef CONFIG_BOOTM_NETBSD
 static int do_bootm_netbsd(int flag, int argc, char *const argv[],
 			   bootm_headers_t *images)
diff --git a/include/image.h b/include/image.h
index 75a63db4c1a..0dd8481611e 100644
--- a/include/image.h
+++ b/include/image.h
@@ -1413,19 +1413,6 @@ int fit_image_cipher_get_algo(const void *fit, int noffset, char **algo);
 
 struct cipher_algo *image_get_cipher_algo(const char *full_name);
 
-#if CONFIG_IS_ENABLED(FIT_VERBOSE)
-#define fit_unsupported(msg)	printf("! %s:%d " \
-				"FIT images not supported for '%s'\n", \
-				__FILE__, __LINE__, (msg))
-
-#define fit_unsupported_reset(msg)	printf("! %s:%d " \
-				"FIT images not supported for '%s' " \
-				"- must reset board to recover!\n", \
-				__FILE__, __LINE__, (msg))
-#else
-#define fit_unsupported(msg)
-#define fit_unsupported_reset(msg)
-#endif /* FIT_VERBOSE */
 #endif /* CONFIG_FIT */
 
 #if !defined(USE_HOSTCC)
-- 
2.33.0.685.g46640cef36-goog


^ permalink raw reply related	[flat|nested] 90+ messages in thread

* [PATCH v5 20/29] image: Drop unnecessary #ifdefs from image.h
  2021-09-26  1:43 [PATCH v5 00/29] image: Reduce #ifdefs and ad-hoc defines in image code (Part B) Simon Glass
                   ` (16 preceding siblings ...)
  2021-09-26  1:43 ` [PATCH v5 19/29] image: Tidy up fit_unsupported_reset() Simon Glass
@ 2021-09-26  1:43 ` Simon Glass
  2021-10-09  1:41   ` Tom Rini
  2021-09-26  1:43 ` [PATCH v5 21/29] image: Drop #ifdefs for fit_print_contents() Simon Glass
                   ` (7 subsequent siblings)
  25 siblings, 1 reply; 90+ messages in thread
From: Simon Glass @ 2021-09-26  1:43 UTC (permalink / raw)
  To: U-Boot Mailing List
  Cc: Alexandru Gagniuc, Andre Przywara, Rasmus Villemoes,
	Robert Marko, Masahiro Yamada, Tom Rini, Simon Glass,
	Joe Hershberger, Marek Vasut

This file has a lot of conditional code and much of it is unnecessary.
Clean this up to reduce the number of build combinations.

Signed-off-by: Simon Glass <sjg@chromium.org>
---

Changes in v5:
- Rebase to next

 include/image.h                | 39 ++++------------------------------
 include/u-boot/hash-checksum.h |  5 +++--
 lib/hash-checksum.c            |  2 +-
 3 files changed, 8 insertions(+), 38 deletions(-)

diff --git a/include/image.h b/include/image.h
index 0dd8481611e..4ba69a15bf0 100644
--- a/include/image.h
+++ b/include/image.h
@@ -40,11 +40,10 @@ struct fdt_region;
 
 #endif /* USE_HOSTCC */
 
-#if CONFIG_IS_ENABLED(FIT)
 #include <hash.h>
 #include <linux/libfdt.h>
 #include <fdt_support.h>
-#endif /* FIT */
+#include <u-boot/hash-checksum.h>
 
 extern ulong image_load_addr;		/* Default Load Address */
 extern ulong image_save_addr;		/* Default Save Address */
@@ -504,8 +503,7 @@ int genimg_get_type_id(const char *name);
 int genimg_get_comp_id(const char *name);
 void genimg_print_size(uint32_t size);
 
-#if defined(CONFIG_TIMESTAMP) || defined(CONFIG_CMD_DATE) || \
-	defined(USE_HOSTCC)
+#if defined(CONFIG_TIMESTAMP) || defined(CONFIG_CMD_DATE) || defined(USE_HOSTCC)
 #define IMAGE_ENABLE_TIMESTAMP 1
 #else
 #define IMAGE_ENABLE_TIMESTAMP 0
@@ -523,12 +521,9 @@ enum fit_load_op {
 int boot_get_setup(bootm_headers_t *images, uint8_t arch, ulong *setup_start,
 		   ulong *setup_len);
 
-#ifndef USE_HOSTCC
 /* Image format types, returned by _get_format() routine */
 #define IMAGE_FORMAT_INVALID	0x00
-#if defined(CONFIG_LEGACY_IMAGE_FORMAT)
 #define IMAGE_FORMAT_LEGACY	0x01	/* legacy image_header based format */
-#endif
 #define IMAGE_FORMAT_FIT	0x02	/* new, libfdt based format */
 #define IMAGE_FORMAT_ANDROID	0x03	/* Android boot image */
 
@@ -567,7 +562,6 @@ int boot_get_ramdisk(int argc, char *const argv[], bootm_headers_t *images,
  */
 int boot_get_loadable(int argc, char *const argv[], bootm_headers_t *images,
 		      uint8_t arch, const ulong *ld_start, ulong *const ld_len);
-#endif /* !USE_HOSTCC */
 
 int boot_get_setup_fit(bootm_headers_t *images, uint8_t arch,
 		       ulong *setup_start, ulong *setup_len);
@@ -644,7 +638,6 @@ int fit_image_load(bootm_headers_t *images, ulong addr,
  */
 int image_source_script(ulong addr, const char *fit_uname);
 
-#ifndef USE_HOSTCC
 /**
  * fit_get_node_from_config() - Look up an image a FIT by type
  *
@@ -684,10 +677,7 @@ int boot_relocate_fdt(struct lmb *lmb, char **of_flat_tree, ulong *of_size);
 int boot_ramdisk_high(struct lmb *lmb, ulong rd_data, ulong rd_len,
 		  ulong *initrd_start, ulong *initrd_end);
 int boot_get_cmdline(struct lmb *lmb, ulong *cmd_start, ulong *cmd_end);
-#ifdef CONFIG_SYS_BOOT_GET_KBD
 int boot_get_kbd(struct lmb *lmb, struct bd_info **kbd);
-#endif /* CONFIG_SYS_BOOT_GET_KBD */
-#endif /* !USE_HOSTCC */
 
 /*******************************************************************/
 /* Legacy format specific code (prefixed with image_) */
@@ -802,11 +792,9 @@ static inline int image_check_type(const image_header_t *hdr, uint8_t type)
 }
 static inline int image_check_arch(const image_header_t *hdr, uint8_t arch)
 {
-#ifndef USE_HOSTCC
 	/* Let's assume that sandbox can load any architecture */
-	if (IS_ENABLED(CONFIG_SANDBOX))
+	if (!tools_build() && IS_ENABLED(CONFIG_SANDBOX))
 		return true;
-#endif
 	return (image_get_arch(hdr) == arch) ||
 		(image_get_arch(hdr) == IH_ARCH_ARM && arch == IH_ARCH_ARM64);
 }
@@ -954,7 +942,6 @@ int booti_setup(ulong image, ulong *relocated_addr, ulong *size,
 
 #define FIT_MAX_HASH_LEN	HASH_MAX_DIGEST_SIZE
 
-#if CONFIG_IS_ENABLED(FIT)
 /* cmdline argument format parsing */
 int fit_parse_conf(const char *spec, ulong addr_curr,
 		ulong *addr, const char **conf_name);
@@ -1128,7 +1115,6 @@ int fit_conf_get_prop_node(const void *fit, int noffset,
 
 int fit_check_ramdisk(const void *fit, int os_noffset,
 		uint8_t arch, int verify);
-#endif /* FIT */
 
 int calculate_hash(const void *data, int data_len, const char *algo,
 			uint8_t *value, int *value_len);
@@ -1141,7 +1127,6 @@ int calculate_hash(const void *data, int data_len, const char *algo,
 #include <openssl/evp.h>
 #endif
 
-#if CONFIG_IS_ENABLED(FIT)
 #ifdef USE_HOSTCC
 void *image_get_host_blob(void);
 void image_set_host_blob(void *host_blob);
@@ -1150,8 +1135,6 @@ void image_set_host_blob(void *host_blob);
 # define gd_fdt_blob()		(gd->fdt_blob)
 #endif
 
-#endif /* IMAGE_ENABLE_FIT */
-
 /*
  * Information passed to the signing routines
  *
@@ -1188,9 +1171,6 @@ struct image_region {
 	int size;
 };
 
-#if CONFIG_IS_ENABLED(RSA_VERIFY)
-# include <u-boot/hash-checksum.h>
-#endif
 struct checksum_algo {
 	const char *name;
 	const int checksum_len;
@@ -1200,7 +1180,7 @@ struct checksum_algo {
 	const EVP_MD *(*calculate_sign)(void);
 #endif
 	int (*calculate)(const char *name,
-			 const struct image_region region[],
+			 const struct image_region *region,
 			 int region_count, uint8_t *checksum);
 };
 
@@ -1296,8 +1276,6 @@ struct crypto_algo *image_get_crypto_algo(const char *full_name);
  */
 struct padding_algo *image_get_padding_algo(const char *name);
 
-#if CONFIG_IS_ENABLED(FIT)
-
 /**
  * fit_image_verify_required_sigs() - Verify signatures marked as 'required'
  *
@@ -1413,10 +1391,6 @@ int fit_image_cipher_get_algo(const void *fit, int noffset, char **algo);
 
 struct cipher_algo *image_get_cipher_algo(const char *full_name);
 
-#endif /* CONFIG_FIT */
-
-#if !defined(USE_HOSTCC)
-#if defined(CONFIG_ANDROID_BOOT_IMAGE)
 struct andr_img_hdr;
 int android_image_check_header(const struct andr_img_hdr *hdr);
 int android_image_get_kernel(const struct andr_img_hdr *hdr, int verify,
@@ -1432,12 +1406,7 @@ ulong android_image_get_end(const struct andr_img_hdr *hdr);
 ulong android_image_get_kload(const struct andr_img_hdr *hdr);
 ulong android_image_get_kcomp(const struct andr_img_hdr *hdr);
 void android_print_contents(const struct andr_img_hdr *hdr);
-#if !defined(CONFIG_SPL_BUILD)
 bool android_image_print_dtb_contents(ulong hdr_addr);
-#endif
-
-#endif /* CONFIG_ANDROID_BOOT_IMAGE */
-#endif /* !USE_HOSTCC */
 
 /**
  * board_fit_config_name_match() - Check for a matching board name
diff --git a/include/u-boot/hash-checksum.h b/include/u-boot/hash-checksum.h
index 54e6a73744e..7f16b37a9ab 100644
--- a/include/u-boot/hash-checksum.h
+++ b/include/u-boot/hash-checksum.h
@@ -7,11 +7,12 @@
 #define _RSA_CHECKSUM_H
 
 #include <errno.h>
-#include <image.h>
 #include <u-boot/sha1.h>
 #include <u-boot/sha256.h>
 #include <u-boot/sha512.h>
 
+struct image_region;
+
 /**
  * hash_calculate() - Calculate hash over the data
  *
@@ -23,7 +24,7 @@
  * @return 0 if OK, < 0 if error
  */
 int hash_calculate(const char *name,
-		   const struct image_region region[], int region_count,
+		   const struct image_region *region, int region_count,
 		   uint8_t *checksum);
 
 #endif
diff --git a/lib/hash-checksum.c b/lib/hash-checksum.c
index d732ecc38fd..8f2a42f9a08 100644
--- a/lib/hash-checksum.c
+++ b/lib/hash-checksum.c
@@ -17,7 +17,7 @@
 #include <image.h>
 
 int hash_calculate(const char *name,
-		    const struct image_region region[],
+		    const struct image_region *region,
 		    int region_count, uint8_t *checksum)
 {
 	struct hash_algo *algo;
-- 
2.33.0.685.g46640cef36-goog


^ permalink raw reply related	[flat|nested] 90+ messages in thread

* [PATCH v5 21/29] image: Drop #ifdefs for fit_print_contents()
  2021-09-26  1:43 [PATCH v5 00/29] image: Reduce #ifdefs and ad-hoc defines in image code (Part B) Simon Glass
                   ` (17 preceding siblings ...)
  2021-09-26  1:43 ` [PATCH v5 20/29] image: Drop unnecessary #ifdefs from image.h Simon Glass
@ 2021-09-26  1:43 ` Simon Glass
  2021-10-09  1:41   ` Tom Rini
  2021-09-26  1:43 ` [PATCH v5 22/29] image: Drop most #ifdefs in image-board.c Simon Glass
                   ` (6 subsequent siblings)
  25 siblings, 1 reply; 90+ messages in thread
From: Simon Glass @ 2021-09-26  1:43 UTC (permalink / raw)
  To: U-Boot Mailing List
  Cc: Alexandru Gagniuc, Andre Przywara, Rasmus Villemoes,
	Robert Marko, Masahiro Yamada, Tom Rini, Simon Glass,
	Joe Hershberger, Marek Vasut

Use a simple return to drop the unwanted code.

Signed-off-by: Simon Glass <sjg@chromium.org>
---

(no changes since v1)

 common/image-fit.c | 11 ++++++-----
 1 file changed, 6 insertions(+), 5 deletions(-)

diff --git a/common/image-fit.c b/common/image-fit.c
index 2f20bb7e446..3952ab749ad 100644
--- a/common/image-fit.c
+++ b/common/image-fit.c
@@ -170,7 +170,6 @@ int fit_get_subimage_count(const void *fit, int images_noffset)
 	return count;
 }
 
-#if CONFIG_IS_ENABLED(FIT_PRINT)
 /**
  * fit_image_print_data() - prints out the hash node details
  * @fit: pointer to the FIT format image header
@@ -380,6 +379,9 @@ void fit_print_contents(const void *fit)
 	const char *p;
 	time_t timestamp;
 
+	if (!CONFIG_IS_ENABLED(FIT_PRINT))
+		return;
+
 	/* Indent string is defined in header image.h */
 	p = IMAGE_INDENT_STRING;
 
@@ -482,6 +484,9 @@ void fit_image_print(const void *fit, int image_noffset, const char *p)
 	int ndepth;
 	int ret;
 
+	if (!CONFIG_IS_ENABLED(FIT_PRINT))
+		return;
+
 	/* Mandatory properties */
 	ret = fit_get_desc(fit, image_noffset, &desc);
 	printf("%s  Description:  ", p);
@@ -575,10 +580,6 @@ void fit_image_print(const void *fit, int image_noffset, const char *p)
 		}
 	}
 }
-#else
-void fit_print_contents(const void *fit) { }
-void fit_image_print(const void *fit, int image_noffset, const char *p) { }
-#endif /* CONFIG_IS_ENABLED(FIT_PRINT) */
 
 /**
  * fit_get_desc - get node description property
-- 
2.33.0.685.g46640cef36-goog


^ permalink raw reply related	[flat|nested] 90+ messages in thread

* [PATCH v5 22/29] image: Drop most #ifdefs in image-board.c
  2021-09-26  1:43 [PATCH v5 00/29] image: Reduce #ifdefs and ad-hoc defines in image code (Part B) Simon Glass
                   ` (18 preceding siblings ...)
  2021-09-26  1:43 ` [PATCH v5 21/29] image: Drop #ifdefs for fit_print_contents() Simon Glass
@ 2021-09-26  1:43 ` Simon Glass
  2021-10-09  1:41   ` Tom Rini
  2021-09-26  1:43 ` [PATCH v5 23/29] image: Reduce variable scope in boot_get_ramdisk() Simon Glass
                   ` (5 subsequent siblings)
  25 siblings, 1 reply; 90+ messages in thread
From: Simon Glass @ 2021-09-26  1:43 UTC (permalink / raw)
  To: U-Boot Mailing List
  Cc: Alexandru Gagniuc, Andre Przywara, Rasmus Villemoes,
	Robert Marko, Masahiro Yamada, Tom Rini, Simon Glass,
	Joe Hershberger, Marek Vasut

Remove ifdefs in this file, so far as possible without too much
refactoring.

Signed-off-by: Simon Glass <sjg@chromium.org>
---

Changes in v5:
- Rebase to next

 common/image-board.c | 111 +++++++++++++++++++------------------------
 include/image.h      |   7 ++-
 2 files changed, 55 insertions(+), 63 deletions(-)

diff --git a/common/image-board.c b/common/image-board.c
index 599d6779df5..cbc8a55ba9f 100644
--- a/common/image-board.c
+++ b/common/image-board.c
@@ -227,16 +227,16 @@ ulong genimg_get_kernel_addr_fit(char * const img_addr,
 		kernel_addr = image_load_addr;
 		debug("*  kernel: default image load address = 0x%08lx\n",
 		      image_load_addr);
-#if CONFIG_IS_ENABLED(FIT)
-	} else if (fit_parse_conf(img_addr, image_load_addr, &kernel_addr,
+	} else if (CONFIG_IS_ENABLED(FIT) &&
+		   fit_parse_conf(img_addr, image_load_addr, &kernel_addr,
 				  fit_uname_config)) {
 		debug("*  kernel: config '%s' from image at 0x%08lx\n",
 		      *fit_uname_config, kernel_addr);
-	} else if (fit_parse_subimage(img_addr, image_load_addr, &kernel_addr,
-				     fit_uname_kernel)) {
+	} else if (CONFIG_IS_ENABLED(FIT) &&
+		   fit_parse_subimage(img_addr, image_load_addr, &kernel_addr,
+				      fit_uname_kernel)) {
 		debug("*  kernel: subimage '%s' from image at 0x%08lx\n",
 		      *fit_uname_kernel, kernel_addr);
-#endif
 	} else {
 		kernel_addr = hextoul(img_addr, NULL);
 		debug("*  kernel: cmdline image address = 0x%08lx\n",
@@ -275,21 +275,20 @@ ulong genimg_get_kernel_addr(char * const img_addr)
  */
 int genimg_get_format(const void *img_addr)
 {
-#if CONFIG_IS_ENABLED(LEGACY_IMAGE_FORMAT)
-	const image_header_t *hdr;
+	if (CONFIG_IS_ENABLED(LEGACY_IMAGE_FORMAT)) {
+		const image_header_t *hdr;
 
-	hdr = (const image_header_t *)img_addr;
-	if (image_check_magic(hdr))
-		return IMAGE_FORMAT_LEGACY;
-#endif
-#if CONFIG_IS_ENABLED(FIT) || CONFIG_IS_ENABLED(OF_LIBFDT)
-	if (fdt_check_header(img_addr) == 0)
-		return IMAGE_FORMAT_FIT;
-#endif
-#ifdef CONFIG_ANDROID_BOOT_IMAGE
-	if (android_image_check_header(img_addr) == 0)
+		hdr = (const image_header_t *)img_addr;
+		if (image_check_magic(hdr))
+			return IMAGE_FORMAT_LEGACY;
+	}
+	if (CONFIG_IS_ENABLED(FIT) || CONFIG_IS_ENABLED(OF_LIBFDT)) {
+		if (!fdt_check_header(img_addr))
+			return IMAGE_FORMAT_FIT;
+	}
+	if (IS_ENABLED(CONFIG_ANDROID_BOOT_IMAGE) &&
+	    !android_image_check_header(img_addr))
 		return IMAGE_FORMAT_ANDROID;
-#endif
 
 	return IMAGE_FORMAT_INVALID;
 }
@@ -307,10 +306,9 @@ int genimg_get_format(const void *img_addr)
  */
 int genimg_has_config(bootm_headers_t *images)
 {
-#if CONFIG_IS_ENABLED(FIT)
-	if (images->fit_uname_cfg)
+	if (CONFIG_IS_ENABLED(FIT) && images->fit_uname_cfg)
 		return 1;
-#endif
+
 	return 0;
 }
 
@@ -345,9 +343,6 @@ int boot_get_ramdisk(int argc, char *const argv[], bootm_headers_t *images,
 	const image_header_t *rd_hdr;
 #endif
 	void *buf;
-#ifdef CONFIG_SUPPORT_RAW_INITRD
-	char *end;
-#endif
 #if CONFIG_IS_ENABLED(FIT)
 	const char	*fit_uname_config = images->fit_uname_cfg;
 	const char	*fit_uname_ramdisk = NULL;
@@ -359,14 +354,12 @@ int boot_get_ramdisk(int argc, char *const argv[], bootm_headers_t *images,
 	*rd_start = 0;
 	*rd_end = 0;
 
-#ifdef CONFIG_ANDROID_BOOT_IMAGE
-	/*
-	 * Look for an Android boot image.
-	 */
-	buf = map_sysmem(images->os.start, 0);
-	if (buf && genimg_get_format(buf) == IMAGE_FORMAT_ANDROID)
-		select = (argc == 0) ? env_get("loadaddr") : argv[0];
-#endif
+	if (IS_ENABLED(CONFIG_ANDROID_BOOT_IMAGE)) {
+		/* Look for an Android boot image */
+		buf = map_sysmem(images->os.start, 0);
+		if (buf && genimg_get_format(buf) == IMAGE_FORMAT_ANDROID)
+			select = (argc == 0) ? env_get("loadaddr") : argv[0];
+	}
 
 	if (argc >= 2)
 		select = argv[1];
@@ -474,22 +467,22 @@ int boot_get_ramdisk(int argc, char *const argv[], bootm_headers_t *images,
 			break;
 #endif
 		default:
-#ifdef CONFIG_SUPPORT_RAW_INITRD
-			end = NULL;
-			if (select)
-				end = strchr(select, ':');
-			if (end) {
-				rd_len = hextoul(++end, NULL);
-				rd_data = rd_addr;
-			} else
-#endif
-			{
-				puts("Wrong Ramdisk Image Format\n");
-				rd_data = 0;
-				rd_len = 0;
-				rd_load = 0;
-				return 1;
+			if (IS_ENABLED(CONFIG_SUPPORT_RAW_INITRD)) {
+				char *end = NULL;
+
+				if (select)
+					end = strchr(select, ':');
+				if (end) {
+					rd_len = hextoul(++end, NULL);
+					rd_data = rd_addr;
+					break;
+				}
 			}
+			puts("Wrong Ramdisk Image Format\n");
+			rd_data = 0;
+			rd_len = 0;
+			rd_load = 0;
+			return 1;
 		}
 	} else if (images->legacy_hdr_valid &&
 			image_check_type(&images->legacy_hdr_os_copy,
@@ -524,7 +517,6 @@ int boot_get_ramdisk(int argc, char *const argv[], bootm_headers_t *images,
 	return 0;
 }
 
-#ifdef CONFIG_SYS_BOOT_RAMDISK_HIGH
 /**
  * boot_ramdisk_high - relocate init ramdisk
  * @lmb: pointer to lmb handle, will be used for memory mgmt
@@ -595,15 +587,15 @@ int boot_ramdisk_high(struct lmb *lmb, ulong rd_data, ulong rd_len,
 			memmove_wd((void *)*initrd_start,
 				   (void *)rd_data, rd_len, CHUNKSZ);
 
-#ifdef CONFIG_MP
 			/*
 			 * Ensure the image is flushed to memory to handle
 			 * AMP boot scenarios in which we might not be
 			 * HW cache coherent
 			 */
-			flush_cache((unsigned long)*initrd_start,
-				    ALIGN(rd_len, ARCH_DMA_MINALIGN));
-#endif
+			if (IS_ENABLED(CONFIG_MP)) {
+				flush_cache((unsigned long)*initrd_start,
+					    ALIGN(rd_len, ARCH_DMA_MINALIGN));
+			}
 			puts("OK\n");
 		}
 	} else {
@@ -618,20 +610,16 @@ int boot_ramdisk_high(struct lmb *lmb, ulong rd_data, ulong rd_len,
 error:
 	return -1;
 }
-#endif /* CONFIG_SYS_BOOT_RAMDISK_HIGH */
 
 int boot_get_setup(bootm_headers_t *images, u8 arch,
 		   ulong *setup_start, ulong *setup_len)
 {
-#if CONFIG_IS_ENABLED(FIT)
+	if (!CONFIG_IS_ENABLED(FIT))
+		return -ENOENT;
+
 	return boot_get_setup_fit(images, arch, setup_start, setup_len);
-#else
-	return -ENOENT;
-#endif
 }
 
-#if CONFIG_IS_ENABLED(FIT)
-#if defined(CONFIG_FPGA)
 int boot_get_fpga(int argc, char *const argv[], bootm_headers_t *images,
 		  u8 arch, const ulong *ld_start, ulong * const ld_len)
 {
@@ -643,6 +631,9 @@ int boot_get_fpga(int argc, char *const argv[], bootm_headers_t *images,
 	int err;
 	int devnum = 0; /* TODO support multi fpga platforms */
 
+	if (!IS_ENABLED(CONFIG_FPGA))
+		return -ENOSYS;
+
 	/* Check to see if the images struct has a FIT configuration */
 	if (!genimg_has_config(images)) {
 		debug("## FIT configuration was not specified\n");
@@ -714,7 +705,6 @@ int boot_get_fpga(int argc, char *const argv[], bootm_headers_t *images,
 
 	return 0;
 }
-#endif
 
 static void fit_loadable_process(u8 img_type,
 				 ulong img_data,
@@ -812,7 +802,6 @@ int boot_get_loadable(int argc, char *const argv[], bootm_headers_t *images,
 
 	return 0;
 }
-#endif
 
 /**
  * boot_get_cmdline - allocate and initialize kernel cmdline
diff --git a/include/image.h b/include/image.h
index 4ba69a15bf0..ead3cef5f3e 100644
--- a/include/image.h
+++ b/include/image.h
@@ -298,7 +298,11 @@ typedef struct bootm_headers {
 	image_header_t	legacy_hdr_os_copy;	/* header copy */
 	ulong		legacy_hdr_valid;
 
-#if CONFIG_IS_ENABLED(FIT)
+	/*
+	 * The fit_ members are only used with FIT, but it involves a lot of
+	 * #ifdefs to avoid compiling that code. Since FIT is the standard
+	 * format, even for SPL, this extra data size seems worth it.
+	 */
 	const char	*fit_uname_cfg;	/* configuration node unit name */
 
 	void		*fit_hdr_os;	/* os FIT image header */
@@ -316,7 +320,6 @@ typedef struct bootm_headers {
 	void		*fit_hdr_setup;	/* x86 setup FIT image header */
 	const char	*fit_uname_setup; /* x86 setup subimage node name */
 	int		fit_noffset_setup;/* x86 setup subimage node offset */
-#endif
 
 #ifndef USE_HOSTCC
 	image_info_t	os;		/* os image info */
-- 
2.33.0.685.g46640cef36-goog


^ permalink raw reply related	[flat|nested] 90+ messages in thread

* [PATCH v5 23/29] image: Reduce variable scope in boot_get_ramdisk()
  2021-09-26  1:43 [PATCH v5 00/29] image: Reduce #ifdefs and ad-hoc defines in image code (Part B) Simon Glass
                   ` (19 preceding siblings ...)
  2021-09-26  1:43 ` [PATCH v5 22/29] image: Drop most #ifdefs in image-board.c Simon Glass
@ 2021-09-26  1:43 ` Simon Glass
  2021-10-09  1:41   ` Tom Rini
  2021-09-26  1:43 ` [PATCH v5 24/29] image: Split up boot_get_ramdisk() Simon Glass
                   ` (4 subsequent siblings)
  25 siblings, 1 reply; 90+ messages in thread
From: Simon Glass @ 2021-09-26  1:43 UTC (permalink / raw)
  To: U-Boot Mailing List
  Cc: Alexandru Gagniuc, Andre Przywara, Rasmus Villemoes,
	Robert Marko, Masahiro Yamada, Tom Rini, Simon Glass,
	Joe Hershberger, Marek Vasut

Move the variables declarations to where they are needed, to reduce the
number of #ifdefs needed.

Signed-off-by: Simon Glass <sjg@chromium.org>
---

(no changes since v1)

 common/image-board.c | 22 +++++++++++-----------
 1 file changed, 11 insertions(+), 11 deletions(-)

diff --git a/common/image-board.c b/common/image-board.c
index cbc8a55ba9f..0c9500829a1 100644
--- a/common/image-board.c
+++ b/common/image-board.c
@@ -337,18 +337,8 @@ int genimg_has_config(bootm_headers_t *images)
 int boot_get_ramdisk(int argc, char *const argv[], bootm_headers_t *images,
 		     u8 arch, ulong *rd_start, ulong *rd_end)
 {
-	ulong rd_addr, rd_load;
 	ulong rd_data, rd_len;
-#if CONFIG_IS_ENABLED(LEGACY_IMAGE_FORMAT)
-	const image_header_t *rd_hdr;
-#endif
 	void *buf;
-#if CONFIG_IS_ENABLED(FIT)
-	const char	*fit_uname_config = images->fit_uname_cfg;
-	const char	*fit_uname_ramdisk = NULL;
-	ulong		default_addr;
-	int		rd_noffset;
-#endif
 	const char *select = NULL;
 
 	*rd_start = 0;
@@ -373,8 +363,15 @@ int boot_get_ramdisk(int argc, char *const argv[], bootm_headers_t *images,
 		rd_len = 0;
 		rd_data = 0;
 	} else if (select || genimg_has_config(images)) {
+		ulong rd_addr, rd_load;
+
 #if CONFIG_IS_ENABLED(FIT)
+		const char *fit_uname_config = images->fit_uname_cfg;
+		const char *fit_uname_ramdisk = NULL;
+		int rd_noffset;
+
 		if (select) {
+			ulong default_addr;
 			/*
 			 * If the init ramdisk comes from the FIT image and
 			 * the FIT image address is omitted in the command
@@ -427,7 +424,9 @@ int boot_get_ramdisk(int argc, char *const argv[], bootm_headers_t *images,
 		buf = map_sysmem(rd_addr, 0);
 		switch (genimg_get_format(buf)) {
 #if CONFIG_IS_ENABLED(LEGACY_IMAGE_FORMAT)
-		case IMAGE_FORMAT_LEGACY:
+		case IMAGE_FORMAT_LEGACY: {
+			const image_header_t *rd_hdr;
+
 			printf("## Loading init Ramdisk from Legacy Image at %08lx ...\n",
 			       rd_addr);
 
@@ -442,6 +441,7 @@ int boot_get_ramdisk(int argc, char *const argv[], bootm_headers_t *images,
 			rd_len = image_get_data_size(rd_hdr);
 			rd_load = image_get_load(rd_hdr);
 			break;
+		}
 #endif
 #if CONFIG_IS_ENABLED(FIT)
 		case IMAGE_FORMAT_FIT:
-- 
2.33.0.685.g46640cef36-goog


^ permalink raw reply related	[flat|nested] 90+ messages in thread

* [PATCH v5 24/29] image: Split up boot_get_ramdisk()
  2021-09-26  1:43 [PATCH v5 00/29] image: Reduce #ifdefs and ad-hoc defines in image code (Part B) Simon Glass
                   ` (20 preceding siblings ...)
  2021-09-26  1:43 ` [PATCH v5 23/29] image: Reduce variable scope in boot_get_ramdisk() Simon Glass
@ 2021-09-26  1:43 ` Simon Glass
  2021-10-09  1:41   ` Tom Rini
  2021-09-26  1:43 ` [PATCH v5 25/29] image: Remove #ifdefs from select_ramdisk() Simon Glass
                   ` (3 subsequent siblings)
  25 siblings, 1 reply; 90+ messages in thread
From: Simon Glass @ 2021-09-26  1:43 UTC (permalink / raw)
  To: U-Boot Mailing List
  Cc: Alexandru Gagniuc, Andre Przywara, Rasmus Villemoes,
	Robert Marko, Masahiro Yamada, Tom Rini, Simon Glass,
	Joe Hershberger, Marek Vasut

This function is far too long. Before trying to remove #ifdefs, split out
the code that deals with selecting the ramdisk into a separate function.

Leave the code indented as it was for easier review. The next patch cleans
this up along with checkpatch violations.

Signed-off-by: Simon Glass <sjg@chromium.org>
---

Changes in v5:
- Drop rd_load since it is not used

Changes in v2:
- Drop unnecessary setting of rd_len, etc.

 common/image-board.c | 149 +++++++++++++++++++++++++------------------
 1 file changed, 86 insertions(+), 63 deletions(-)

diff --git a/common/image-board.c b/common/image-board.c
index 0c9500829a1..fecc4bf6365 100644
--- a/common/image-board.c
+++ b/common/image-board.c
@@ -313,57 +313,21 @@ int genimg_has_config(bootm_headers_t *images)
 }
 
 /**
- * boot_get_ramdisk - main ramdisk handling routine
- * @argc: command argument count
- * @argv: command argument list
+ * select_ramdisk() - Select and locate the ramdisk to use
+ *
  * @images: pointer to the bootm images structure
+ * @select: name of ramdisk to select, or NULL for any
  * @arch: expected ramdisk architecture
- * @rd_start: pointer to a ulong variable, will hold ramdisk start address
- * @rd_end: pointer to a ulong variable, will hold ramdisk end
- *
- * boot_get_ramdisk() is responsible for finding a valid ramdisk image.
- * Currently supported are the following ramdisk sources:
- *      - multicomponent kernel/ramdisk image,
- *      - commandline provided address of decicated ramdisk image.
- *
- * returns:
- *     0, if ramdisk image was found and valid, or skiped
- *     rd_start and rd_end are set to ramdisk start/end addresses if
- *     ramdisk image is found and valid
- *
- *     1, if ramdisk image is found but corrupted, or invalid
- *     rd_start and rd_end are set to 0 if no ramdisk exists
+ * @rd_datap: pointer to a ulong variable, will hold ramdisk pointer
+ * @rd_lenp: pointer to a ulong variable, will hold ramdisk length
+ * @return 0 if OK, -ENOPKG if no ramdisk (but an error should not be reported),
+ *	other -ve value on other error
  */
-int boot_get_ramdisk(int argc, char *const argv[], bootm_headers_t *images,
-		     u8 arch, ulong *rd_start, ulong *rd_end)
+static int select_ramdisk(bootm_headers_t *images, const char *select, u8 arch,
+			  ulong *rd_datap, ulong *rd_lenp)
 {
-	ulong rd_data, rd_len;
-	void *buf;
-	const char *select = NULL;
-
-	*rd_start = 0;
-	*rd_end = 0;
-
-	if (IS_ENABLED(CONFIG_ANDROID_BOOT_IMAGE)) {
-		/* Look for an Android boot image */
-		buf = map_sysmem(images->os.start, 0);
-		if (buf && genimg_get_format(buf) == IMAGE_FORMAT_ANDROID)
-			select = (argc == 0) ? env_get("loadaddr") : argv[0];
-	}
-
-	if (argc >= 2)
-		select = argv[1];
-
-	/*
-	 * Look for a '-' which indicates to ignore the
-	 * ramdisk argument
-	 */
-	if (select && strcmp(select, "-") ==  0) {
-		debug("## Skipping init Ramdisk\n");
-		rd_len = 0;
-		rd_data = 0;
-	} else if (select || genimg_has_config(images)) {
-		ulong rd_addr, rd_load;
+	ulong rd_addr;
+	char *buf;
 
 #if CONFIG_IS_ENABLED(FIT)
 		const char *fit_uname_config = images->fit_uname_cfg;
@@ -403,16 +367,16 @@ int boot_get_ramdisk(int argc, char *const argv[], bootm_headers_t *images,
 		} else {
 			/* use FIT configuration provided in first bootm
 			 * command argument. If the property is not defined,
-			 * quit silently.
+			 * quit silently (with -ENOPKG)
 			 */
 			rd_addr = map_to_sysmem(images->fit_hdr_os);
 			rd_noffset = fit_get_node_from_config(images,
 							      FIT_RAMDISK_PROP,
 							      rd_addr);
 			if (rd_noffset == -ENOENT)
-				return 0;
+				return -ENOPKG;
 			else if (rd_noffset < 0)
-				return 1;
+				return rd_noffset;
 		}
 #endif
 
@@ -435,11 +399,10 @@ int boot_get_ramdisk(int argc, char *const argv[], bootm_headers_t *images,
 						   images->verify);
 
 			if (!rd_hdr)
-				return 1;
+				return -ENOENT;
 
-			rd_data = image_get_data(rd_hdr);
-			rd_len = image_get_data_size(rd_hdr);
-			rd_load = image_get_load(rd_hdr);
+			*rd_datap = image_get_data(rd_hdr);
+			*rd_lenp = image_get_data_size(rd_hdr);
 			break;
 		}
 #endif
@@ -451,9 +414,9 @@ int boot_get_ramdisk(int argc, char *const argv[], bootm_headers_t *images,
 						    IH_TYPE_RAMDISK,
 						    BOOTSTAGE_ID_FIT_RD_START,
 						    FIT_LOAD_OPTIONAL_NON_ZERO,
-						    &rd_data, &rd_len);
+						    rd_datap, rd_lenp);
 			if (rd_noffset < 0)
-				return 1;
+				return rd_noffset;
 
 			images->fit_hdr_rd = map_sysmem(rd_addr, 0);
 			images->fit_uname_rd = fit_uname_ramdisk;
@@ -463,7 +426,7 @@ int boot_get_ramdisk(int argc, char *const argv[], bootm_headers_t *images,
 #ifdef CONFIG_ANDROID_BOOT_IMAGE
 		case IMAGE_FORMAT_ANDROID:
 			android_image_get_ramdisk((void *)images->os.start,
-						  &rd_data, &rd_len);
+						  rd_datap, rd_lenp);
 			break;
 #endif
 		default:
@@ -473,17 +436,77 @@ int boot_get_ramdisk(int argc, char *const argv[], bootm_headers_t *images,
 				if (select)
 					end = strchr(select, ':');
 				if (end) {
-					rd_len = hextoul(++end, NULL);
-					rd_data = rd_addr;
+					*rd_lenp = hextoul(++end, NULL);
+					*rd_datap = rd_addr;
 					break;
 				}
 			}
 			puts("Wrong Ramdisk Image Format\n");
-			rd_data = 0;
-			rd_len = 0;
-			rd_load = 0;
-			return 1;
+			return -EINVAL;
 		}
+
+	return 0;
+}
+
+/**
+ * boot_get_ramdisk - main ramdisk handling routine
+ * @argc: command argument count
+ * @argv: command argument list
+ * @images: pointer to the bootm images structure
+ * @arch: expected ramdisk architecture
+ * @rd_start: pointer to a ulong variable, will hold ramdisk start address
+ * @rd_end: pointer to a ulong variable, will hold ramdisk end
+ *
+ * boot_get_ramdisk() is responsible for finding a valid ramdisk image.
+ * Currently supported are the following ramdisk sources:
+ *      - multicomponent kernel/ramdisk image,
+ *      - commandline provided address of decicated ramdisk image.
+ *
+ * returns:
+ *     0, if ramdisk image was found and valid, or skiped
+ *     rd_start and rd_end are set to ramdisk start/end addresses if
+ *     ramdisk image is found and valid
+ *
+ *     1, if ramdisk image is found but corrupted, or invalid
+ *     rd_start and rd_end are set to 0 if no ramdisk exists
+ */
+int boot_get_ramdisk(int argc, char *const argv[], bootm_headers_t *images,
+		     u8 arch, ulong *rd_start, ulong *rd_end)
+{
+	ulong rd_data, rd_len;
+	const char *select = NULL;
+
+	*rd_start = 0;
+	*rd_end = 0;
+
+	if (IS_ENABLED(CONFIG_ANDROID_BOOT_IMAGE)) {
+		char *buf;
+
+		/* Look for an Android boot image */
+		buf = map_sysmem(images->os.start, 0);
+		if (buf && genimg_get_format(buf) == IMAGE_FORMAT_ANDROID)
+			select = (argc == 0) ? env_get("loadaddr") : argv[0];
+	}
+
+	if (argc >= 2)
+		select = argv[1];
+
+	/*
+	 * Look for a '-' which indicates to ignore the
+	 * ramdisk argument
+	 */
+	if (select && strcmp(select, "-") ==  0) {
+		debug("## Skipping init Ramdisk\n");
+		rd_len = 0;
+		rd_data = 0;
+	} else if (select || genimg_has_config(images)) {
+		int ret;
+
+		ret = select_ramdisk(images, select, arch, &rd_data, &rd_len);
+		if (ret == -ENOPKG)
+			return 0;
+		else if (ret)
+			return ret;
 	} else if (images->legacy_hdr_valid &&
 			image_check_type(&images->legacy_hdr_os_copy,
 					 IH_TYPE_MULTI)) {
-- 
2.33.0.685.g46640cef36-goog


^ permalink raw reply related	[flat|nested] 90+ messages in thread

* [PATCH v5 25/29] image: Remove #ifdefs from select_ramdisk()
  2021-09-26  1:43 [PATCH v5 00/29] image: Reduce #ifdefs and ad-hoc defines in image code (Part B) Simon Glass
                   ` (21 preceding siblings ...)
  2021-09-26  1:43 ` [PATCH v5 24/29] image: Split up boot_get_ramdisk() Simon Glass
@ 2021-09-26  1:43 ` Simon Glass
  2021-10-09  1:41   ` Tom Rini
  2021-09-26  1:43 ` [PATCH v5 26/29] image: Remove some #ifdefs from image-fit and image-fit-sig Simon Glass
                   ` (2 subsequent siblings)
  25 siblings, 1 reply; 90+ messages in thread
From: Simon Glass @ 2021-09-26  1:43 UTC (permalink / raw)
  To: U-Boot Mailing List
  Cc: Alexandru Gagniuc, Andre Przywara, Rasmus Villemoes,
	Robert Marko, Masahiro Yamada, Tom Rini, Simon Glass,
	Joe Hershberger, Marek Vasut

Use boolean variables to deal with the strange #ifdef logic of this
function, so we can remove the #ifdefs.

Signed-off-by: Simon Glass <sjg@chromium.org>
---

Changes in v5:
- Rebase to next

 common/image-board.c | 139 ++++++++++++++++++++++---------------------
 1 file changed, 72 insertions(+), 67 deletions(-)

diff --git a/common/image-board.c b/common/image-board.c
index fecc4bf6365..742ca66298b 100644
--- a/common/image-board.c
+++ b/common/image-board.c
@@ -26,7 +26,6 @@
 
 DECLARE_GLOBAL_DATA_PTR;
 
-#if CONFIG_IS_ENABLED(LEGACY_IMAGE_FORMAT)
 /**
  * image_get_ramdisk - get and verify ramdisk image
  * @rd_addr: ramdisk image start address
@@ -85,7 +84,6 @@ static const image_header_t *image_get_ramdisk(ulong rd_addr, u8 arch,
 
 	return rd_hdr;
 }
-#endif
 
 /*****************************************************************************/
 /* Shared dual-format routines */
@@ -326,16 +324,18 @@ int genimg_has_config(bootm_headers_t *images)
 static int select_ramdisk(bootm_headers_t *images, const char *select, u8 arch,
 			  ulong *rd_datap, ulong *rd_lenp)
 {
-	ulong rd_addr;
+	ulong rd_addr = 0;
 	char *buf;
+	const char *fit_uname_config = images->fit_uname_cfg;
+	const char *fit_uname_ramdisk = NULL;
+	bool processed;
+	int rd_noffset;
 
-#if CONFIG_IS_ENABLED(FIT)
-		const char *fit_uname_config = images->fit_uname_cfg;
-		const char *fit_uname_ramdisk = NULL;
-		int rd_noffset;
+	if (select) {
+		ulong default_addr;
+		bool done = true;
 
-		if (select) {
-			ulong default_addr;
+		if (CONFIG_IS_ENABLED(FIT)) {
 			/*
 			 * If the init ramdisk comes from the FIT image and
 			 * the FIT image address is omitted in the command
@@ -347,8 +347,8 @@ static int select_ramdisk(bootm_headers_t *images, const char *select, u8 arch,
 			else
 				default_addr = image_load_addr;
 
-			if (fit_parse_conf(select, default_addr,
-					   &rd_addr, &fit_uname_config)) {
+			if (fit_parse_conf(select, default_addr, &rd_addr,
+					   &fit_uname_config)) {
 				debug("*  ramdisk: config '%s' from image at 0x%08lx\n",
 				      fit_uname_config, rd_addr);
 			} else if (fit_parse_subimage(select, default_addr,
@@ -356,60 +356,58 @@ static int select_ramdisk(bootm_headers_t *images, const char *select, u8 arch,
 						      &fit_uname_ramdisk)) {
 				debug("*  ramdisk: subimage '%s' from image at 0x%08lx\n",
 				      fit_uname_ramdisk, rd_addr);
-			} else
-#endif
-			{
-				rd_addr = hextoul(select, NULL);
-				debug("*  ramdisk: cmdline image address = 0x%08lx\n",
-				      rd_addr);
+			} else {
+				done = false;
 			}
-#if CONFIG_IS_ENABLED(FIT)
-		} else {
-			/* use FIT configuration provided in first bootm
-			 * command argument. If the property is not defined,
-			 * quit silently (with -ENOPKG)
-			 */
-			rd_addr = map_to_sysmem(images->fit_hdr_os);
-			rd_noffset = fit_get_node_from_config(images,
-							      FIT_RAMDISK_PROP,
-							      rd_addr);
-			if (rd_noffset == -ENOENT)
-				return -ENOPKG;
-			else if (rd_noffset < 0)
-				return rd_noffset;
 		}
-#endif
-
-		/*
-		 * Check if there is an initrd image at the
-		 * address provided in the second bootm argument
-		 * check image type, for FIT images get FIT node.
+		if (!done) {
+			rd_addr = hextoul(select, NULL);
+			debug("*  ramdisk: cmdline image address = 0x%08lx\n",
+			      rd_addr);
+		}
+	} else if (CONFIG_IS_ENABLED(FIT)) {
+		/* use FIT configuration provided in first bootm
+		 * command argument. If the property is not defined,
+		 * quit silently (with -ENOPKG	)
 		 */
-		buf = map_sysmem(rd_addr, 0);
-		switch (genimg_get_format(buf)) {
-#if CONFIG_IS_ENABLED(LEGACY_IMAGE_FORMAT)
-		case IMAGE_FORMAT_LEGACY: {
+		rd_addr = map_to_sysmem(images->fit_hdr_os);
+		rd_noffset = fit_get_node_from_config(images, FIT_RAMDISK_PROP,
+						      rd_addr);
+		if (rd_noffset == -ENOENT)
+			return -ENOPKG;
+		else if (rd_noffset < 0)
+			return rd_noffset;
+	}
+
+	/*
+	 * Check if there is an initrd image at the
+	 * address provided in the second bootm argument
+	 * check image type, for FIT images get FIT node.
+	 */
+	buf = map_sysmem(rd_addr, 0);
+	processed = false;
+	switch (genimg_get_format(buf)) {
+	case IMAGE_FORMAT_LEGACY:
+		if (CONFIG_IS_ENABLED(LEGACY_IMAGE_FORMAT)) {
 			const image_header_t *rd_hdr;
 
 			printf("## Loading init Ramdisk from Legacy Image at %08lx ...\n",
 			       rd_addr);
 
 			bootstage_mark(BOOTSTAGE_ID_CHECK_RAMDISK);
-			rd_hdr = image_get_ramdisk(rd_addr, arch,
-						   images->verify);
-
+			rd_hdr = image_get_ramdisk(rd_addr, arch, images->verify);
 			if (!rd_hdr)
 				return -ENOENT;
 
 			*rd_datap = image_get_data(rd_hdr);
 			*rd_lenp = image_get_data_size(rd_hdr);
-			break;
+			processed = true;
 		}
-#endif
-#if CONFIG_IS_ENABLED(FIT)
-		case IMAGE_FORMAT_FIT:
-			rd_noffset = fit_image_load(images,
-						    rd_addr, &fit_uname_ramdisk,
+		break;
+	case IMAGE_FORMAT_FIT:
+		if (CONFIG_IS_ENABLED(FIT)) {
+			rd_noffset = fit_image_load(images, rd_addr,
+						    &fit_uname_ramdisk,
 						    &fit_uname_config, arch,
 						    IH_TYPE_RAMDISK,
 						    BOOTSTAGE_ID_FIT_RD_START,
@@ -421,29 +419,36 @@ static int select_ramdisk(bootm_headers_t *images, const char *select, u8 arch,
 			images->fit_hdr_rd = map_sysmem(rd_addr, 0);
 			images->fit_uname_rd = fit_uname_ramdisk;
 			images->fit_noffset_rd = rd_noffset;
-			break;
-#endif
-#ifdef CONFIG_ANDROID_BOOT_IMAGE
-		case IMAGE_FORMAT_ANDROID:
+			processed = true;
+		}
+		break;
+	case IMAGE_FORMAT_ANDROID:
+		if (IS_ENABLED(CONFIG_ANDROID_BOOT_IMAGE)) {
 			android_image_get_ramdisk((void *)images->os.start,
 						  rd_datap, rd_lenp);
-			break;
-#endif
-		default:
-			if (IS_ENABLED(CONFIG_SUPPORT_RAW_INITRD)) {
-				char *end = NULL;
-
-				if (select)
-					end = strchr(select, ':');
-				if (end) {
-					*rd_lenp = hextoul(++end, NULL);
-					*rd_datap = rd_addr;
-					break;
-				}
+			processed = true;
+		}
+		break;
+	}
+
+	if (!processed) {
+		if (IS_ENABLED(CONFIG_SUPPORT_RAW_INITRD)) {
+			char *end = NULL;
+
+			if (select)
+				end = strchr(select, ':');
+			if (end) {
+				*rd_lenp = hextoul(++end, NULL);
+				*rd_datap = rd_addr;
+				processed = true;
 			}
+		}
+
+		if (!processed) {
 			puts("Wrong Ramdisk Image Format\n");
 			return -EINVAL;
 		}
+	}
 
 	return 0;
 }
-- 
2.33.0.685.g46640cef36-goog


^ permalink raw reply related	[flat|nested] 90+ messages in thread

* [PATCH v5 26/29] image: Remove some #ifdefs from image-fit and image-fit-sig
  2021-09-26  1:43 [PATCH v5 00/29] image: Reduce #ifdefs and ad-hoc defines in image code (Part B) Simon Glass
                   ` (22 preceding siblings ...)
  2021-09-26  1:43 ` [PATCH v5 25/29] image: Remove #ifdefs from select_ramdisk() Simon Glass
@ 2021-09-26  1:43 ` Simon Glass
  2021-10-09  1:41   ` Tom Rini
  2021-09-26  1:43 ` [PATCH v5 27/29] image: Reduce variable scope in boot_get_fdt() Simon Glass
  2021-09-26  1:43 ` [PATCH v5 28/29] image: Split up boot_get_fdt() Simon Glass
  25 siblings, 1 reply; 90+ messages in thread
From: Simon Glass @ 2021-09-26  1:43 UTC (permalink / raw)
  To: U-Boot Mailing List
  Cc: Alexandru Gagniuc, Andre Przywara, Rasmus Villemoes,
	Robert Marko, Masahiro Yamada, Tom Rini, Simon Glass,
	Joe Hershberger, Marek Vasut

Drop the #ifdefs which are easy to remove without refactoring.

Signed-off-by: Simon Glass <sjg@chromium.org>
---

(no changes since v1)

 common/Kconfig.boot    | 10 ++++++++++
 common/image-fit-sig.c |  8 ++------
 common/image-fit.c     |  7 ++++---
 3 files changed, 16 insertions(+), 9 deletions(-)

diff --git a/common/Kconfig.boot b/common/Kconfig.boot
index f23b9988521..9b84a8d005f 100644
--- a/common/Kconfig.boot
+++ b/common/Kconfig.boot
@@ -165,6 +165,16 @@ config SPL_FIT_SIGNATURE
 	select SPL_IMAGE_SIGN_INFO
 	select SPL_FIT_FULL_CHECK
 
+config SPL_FIT_SIGNATURE_MAX_SIZE
+	hex "Max size of signed FIT structures in SPL"
+	depends on SPL_FIT_SIGNATURE
+	default 0x10000000
+	help
+	  This option sets a max size in bytes for verified FIT uImages.
+	  A sane value of 256MB protects corrupted DTB structures from overlapping
+	  device memory. Assure this size does not extend past expected storage
+	  space.
+
 config SPL_LOAD_FIT
 	bool "Enable SPL loading U-Boot as a FIT (basic fitImage features)"
 	select SPL_FIT
diff --git a/common/image-fit-sig.c b/common/image-fit-sig.c
index e95e64bd2fe..4edebbf2d32 100644
--- a/common/image-fit-sig.c
+++ b/common/image-fit-sig.c
@@ -49,10 +49,8 @@ struct image_region *fit_region_make_list(const void *fit,
 	 * Use malloc() except in SPL (to save code size). In SPL the caller
 	 * must allocate the array.
 	 */
-#ifndef CONFIG_SPL_BUILD
-	if (!region)
+	if (!IS_ENABLED(CONFIG_SPL_BUILD) && !region)
 		region = calloc(sizeof(*region), count);
-#endif
 	if (!region)
 		return NULL;
 	for (i = 0; i < count; i++) {
@@ -72,12 +70,10 @@ static int fit_image_setup_verify(struct image_sign_info *info,
 	char *algo_name;
 	const char *padding_name;
 
-#ifndef USE_HOSTCC
-	if (fdt_totalsize(fit) > CONFIG_FIT_SIGNATURE_MAX_SIZE) {
+	if (fdt_totalsize(fit) > CONFIG_VAL(FIT_SIGNATURE_MAX_SIZE)) {
 		*err_msgp = "Total size too large";
 		return 1;
 	}
-#endif
 	if (fit_image_hash_get_algo(fit, noffset, &algo_name)) {
 		*err_msgp = "Can't get hash algo property";
 		return -1;
diff --git a/common/image-fit.c b/common/image-fit.c
index 3952ab749ad..5a377a7f85f 100644
--- a/common/image-fit.c
+++ b/common/image-fit.c
@@ -2009,9 +2009,6 @@ int fit_image_load(bootm_headers_t *images, ulong addr,
 	int type_ok, os_ok;
 	ulong load, load_end, data, len;
 	uint8_t os, comp;
-#ifndef USE_HOSTCC
-	uint8_t os_arch;
-#endif
 	const char *prop_name;
 	int ret;
 
@@ -2103,8 +2100,12 @@ int fit_image_load(bootm_headers_t *images, ulong addr,
 	}
 
 #ifndef USE_HOSTCC
+	{
+	uint8_t os_arch;
+
 	fit_image_get_arch(fit, noffset, &os_arch);
 	images->os.arch = os_arch;
+	}
 #endif
 
 	bootstage_mark(bootstage_id + BOOTSTAGE_SUB_CHECK_ALL);
-- 
2.33.0.685.g46640cef36-goog


^ permalink raw reply related	[flat|nested] 90+ messages in thread

* [PATCH v5 27/29] image: Reduce variable scope in boot_get_fdt()
  2021-09-26  1:43 [PATCH v5 00/29] image: Reduce #ifdefs and ad-hoc defines in image code (Part B) Simon Glass
                   ` (23 preceding siblings ...)
  2021-09-26  1:43 ` [PATCH v5 26/29] image: Remove some #ifdefs from image-fit and image-fit-sig Simon Glass
@ 2021-09-26  1:43 ` Simon Glass
  2021-10-09  1:41   ` Tom Rini
  2021-09-26  1:43 ` [PATCH v5 28/29] image: Split up boot_get_fdt() Simon Glass
  25 siblings, 1 reply; 90+ messages in thread
From: Simon Glass @ 2021-09-26  1:43 UTC (permalink / raw)
  To: U-Boot Mailing List
  Cc: Alexandru Gagniuc, Andre Przywara, Rasmus Villemoes,
	Robert Marko, Masahiro Yamada, Tom Rini, Simon Glass,
	Joe Hershberger, Marek Vasut

Move the variables declarations to where they are needed, to reduce the
number of #ifdefs needed.

Signed-off-by: Simon Glass <sjg@chromium.org>
---

(no changes since v1)

 common/image-fdt.c | 23 +++++++++++------------
 1 file changed, 11 insertions(+), 12 deletions(-)

diff --git a/common/image-fdt.c b/common/image-fdt.c
index cf87e455230..78c1e5b1a9a 100644
--- a/common/image-fdt.c
+++ b/common/image-fdt.c
@@ -276,21 +276,10 @@ error:
 int boot_get_fdt(int flag, int argc, char *const argv[], uint8_t arch,
 		 bootm_headers_t *images, char **of_flat_tree, ulong *of_size)
 {
-#if CONFIG_IS_ENABLED(LEGACY_IMAGE_FORMAT)
-	const image_header_t *fdt_hdr;
-	ulong		load, load_end;
-	ulong		image_start, image_data, image_end;
-#endif
 	ulong		img_addr;
 	ulong		fdt_addr;
 	char		*fdt_blob = NULL;
 	void		*buf;
-#if CONFIG_IS_ENABLED(FIT)
-	const char	*fit_uname_config = images->fit_uname_cfg;
-	const char	*fit_uname_fdt = NULL;
-	ulong		default_addr;
-	int		fdt_noffset;
-#endif
 	const char *select = NULL;
 
 	*of_flat_tree = NULL;
@@ -304,6 +293,11 @@ int boot_get_fdt(int flag, int argc, char *const argv[], uint8_t arch,
 		select = argv[2];
 	if (select || genimg_has_config(images)) {
 #if CONFIG_IS_ENABLED(FIT)
+		const char *fit_uname_config = images->fit_uname_cfg;
+		const char *fit_uname_fdt = NULL;
+		ulong default_addr;
+		int fdt_noffset;
+
 		if (select) {
 			/*
 			 * If the FDT blob comes from the FIT image and the
@@ -359,7 +353,11 @@ int boot_get_fdt(int flag, int argc, char *const argv[], uint8_t arch,
 		buf = map_sysmem(fdt_addr, 0);
 		switch (genimg_get_format(buf)) {
 #if CONFIG_IS_ENABLED(LEGACY_IMAGE_FORMAT)
-		case IMAGE_FORMAT_LEGACY:
+		case IMAGE_FORMAT_LEGACY: {
+			const image_header_t *fdt_hdr;
+			ulong load, load_end;
+			ulong image_start, image_data, image_end;
+
 			/* verify fdt_addr points to a valid image header */
 			printf("## Flattened Device Tree from Legacy Image at %08lx\n",
 			       fdt_addr);
@@ -398,6 +396,7 @@ int boot_get_fdt(int flag, int argc, char *const argv[], uint8_t arch,
 
 			fdt_addr = load;
 			break;
+		}
 #endif
 		case IMAGE_FORMAT_FIT:
 			/*
-- 
2.33.0.685.g46640cef36-goog


^ permalink raw reply related	[flat|nested] 90+ messages in thread

* [PATCH v5 28/29] image: Split up boot_get_fdt()
  2021-09-26  1:43 [PATCH v5 00/29] image: Reduce #ifdefs and ad-hoc defines in image code (Part B) Simon Glass
                   ` (24 preceding siblings ...)
  2021-09-26  1:43 ` [PATCH v5 27/29] image: Reduce variable scope in boot_get_fdt() Simon Glass
@ 2021-09-26  1:43 ` Simon Glass
  2021-10-09  1:41   ` Tom Rini
  25 siblings, 1 reply; 90+ messages in thread
From: Simon Glass @ 2021-09-26  1:43 UTC (permalink / raw)
  To: U-Boot Mailing List
  Cc: Alexandru Gagniuc, Andre Przywara, Rasmus Villemoes,
	Robert Marko, Masahiro Yamada, Tom Rini, Simon Glass,
	Joe Hershberger, Marek Vasut

This function is far too long. Before trying to remove #ifdefs, split out
the code that deals with selecting the FDT into a separate function.

Signed-off-by: Simon Glass <sjg@chromium.org>
---

Changes in v5:
- Rebase to next

 common/image-fdt.c | 226 +++++++++++++++++++++++++--------------------
 1 file changed, 126 insertions(+), 100 deletions(-)

diff --git a/common/image-fdt.c b/common/image-fdt.c
index 78c1e5b1a9a..c894f61b229 100644
--- a/common/image-fdt.c
+++ b/common/image-fdt.c
@@ -252,53 +252,29 @@ error:
 }
 
 /**
- * boot_get_fdt - main fdt handling routine
- * @argc: command argument count
- * @argv: command argument list
- * @arch: architecture (IH_ARCH_...)
- * @images: pointer to the bootm images structure
- * @of_flat_tree: pointer to a char* variable, will hold fdt start address
- * @of_size: pointer to a ulong variable, will hold fdt length
- *
- * boot_get_fdt() is responsible for finding a valid flat device tree image.
- * Curently supported are the following ramdisk sources:
- *      - multicomponent kernel/ramdisk image,
- *      - commandline provided address of decicated ramdisk image.
- *
- * returns:
- *     0, if fdt image was found and valid, or skipped
- *     of_flat_tree and of_size are set to fdt start address and length if
- *     fdt image is found and valid
+ * select_fdt() - Select and locate the FDT to use
  *
- *     1, if fdt image is found but corrupted
- *     of_flat_tree and of_size are set to 0 if no fdt exists
+ * @images: pointer to the bootm images structure
+ * @select: name of FDT to select, or NULL for any
+ * @arch: expected FDT architecture
+ * @fdt_addrp: pointer to a ulong variable, will hold FDT pointer
+ * @return 0 if OK, -ENOPKG if no FDT (but an error should not be reported),
+ *	other -ve value on other error
  */
-int boot_get_fdt(int flag, int argc, char *const argv[], uint8_t arch,
-		 bootm_headers_t *images, char **of_flat_tree, ulong *of_size)
-{
-	ulong		img_addr;
-	ulong		fdt_addr;
-	char		*fdt_blob = NULL;
-	void		*buf;
-	const char *select = NULL;
-
-	*of_flat_tree = NULL;
-	*of_size = 0;
 
-	img_addr = (argc == 0) ? image_load_addr :
-			hextoul(argv[0], NULL);
-	buf = map_sysmem(img_addr, 0);
+static int select_fdt(bootm_headers_t *images, const char *select, u8 arch,
+		      ulong *fdt_addrp)
+{
+	const char *buf;
+	ulong fdt_addr;
 
-	if (argc > 2)
-		select = argv[2];
-	if (select || genimg_has_config(images)) {
 #if CONFIG_IS_ENABLED(FIT)
-		const char *fit_uname_config = images->fit_uname_cfg;
-		const char *fit_uname_fdt = NULL;
-		ulong default_addr;
-		int fdt_noffset;
+	const char *fit_uname_config = images->fit_uname_cfg;
+	const char *fit_uname_fdt = NULL;
+	ulong default_addr;
+	int fdt_noffset;
 
-		if (select) {
+	if (select) {
 			/*
 			 * If the FDT blob comes from the FIT image and the
 			 * FIT image address is omitted in the command line
@@ -312,48 +288,47 @@ int boot_get_fdt(int flag, int argc, char *const argv[], uint8_t arch,
 			else
 				default_addr = image_load_addr;
 
-			if (fit_parse_conf(select, default_addr,
-					   &fdt_addr, &fit_uname_config)) {
+			if (fit_parse_conf(select, default_addr, &fdt_addr,
+					   &fit_uname_config)) {
 				debug("*  fdt: config '%s' from image at 0x%08lx\n",
 				      fit_uname_config, fdt_addr);
-			} else if (fit_parse_subimage(select, default_addr,
-				   &fdt_addr, &fit_uname_fdt)) {
+			} else if (fit_parse_subimage(select, default_addr, &fdt_addr,
+				   &fit_uname_fdt)) {
 				debug("*  fdt: subimage '%s' from image at 0x%08lx\n",
 				      fit_uname_fdt, fdt_addr);
 			} else
 #endif
-			{
-				fdt_addr = hextoul(select, NULL);
-				debug("*  fdt: cmdline image address = 0x%08lx\n",
-				      fdt_addr);
-			}
-#if CONFIG_IS_ENABLED(FIT)
-		} else {
-			/* use FIT configuration provided in first bootm
-			 * command argument
-			 */
-			fdt_addr = map_to_sysmem(images->fit_hdr_os);
-			fdt_noffset = fit_get_node_from_config(images,
-							       FIT_FDT_PROP,
-							       fdt_addr);
-			if (fdt_noffset == -ENOENT)
-				return 0;
-			else if (fdt_noffset < 0)
-				return 1;
+		{
+			fdt_addr = hextoul(select, NULL);
+			debug("*  fdt: cmdline image address = 0x%08lx\n",
+			      fdt_addr);
 		}
-#endif
-		debug("## Checking for 'FDT'/'FDT Image' at %08lx\n",
-		      fdt_addr);
-
-		/*
-		 * Check if there is an FDT image at the
-		 * address provided in the second bootm argument
-		 * check image type, for FIT images get a FIT node.
+#if CONFIG_IS_ENABLED(FIT)
+	} else {
+		/* use FIT configuration provided in first bootm
+		 * command argument
 		 */
-		buf = map_sysmem(fdt_addr, 0);
-		switch (genimg_get_format(buf)) {
+		fdt_addr = map_to_sysmem(images->fit_hdr_os);
+		fdt_noffset = fit_get_node_from_config(images, FIT_FDT_PROP,
+						       fdt_addr);
+		if (fdt_noffset == -ENOENT)
+			return -ENOPKG;
+		else if (fdt_noffset < 0)
+			return fdt_noffset;
+	}
+#endif
+	debug("## Checking for 'FDT'/'FDT Image' at %08lx\n",
+	      fdt_addr);
+
+	/*
+	 * Check if there is an FDT image at the
+	 * address provided in the second bootm argument
+	 * check image type, for FIT images get a FIT node.
+	 */
+	buf = map_sysmem(fdt_addr, 0);
+	switch (genimg_get_format(buf)) {
 #if CONFIG_IS_ENABLED(LEGACY_IMAGE_FORMAT)
-		case IMAGE_FORMAT_LEGACY: {
+	case IMAGE_FORMAT_LEGACY: {
 			const image_header_t *fdt_hdr;
 			ulong load, load_end;
 			ulong image_start, image_data, image_end;
@@ -363,7 +338,7 @@ int boot_get_fdt(int flag, int argc, char *const argv[], uint8_t arch,
 			       fdt_addr);
 			fdt_hdr = image_get_fdt(fdt_addr);
 			if (!fdt_hdr)
-				goto no_fdt;
+				return -ENOPKG;
 
 			/*
 			 * move image data to the load address,
@@ -384,7 +359,7 @@ int boot_get_fdt(int flag, int argc, char *const argv[], uint8_t arch,
 
 			if ((load < image_end) && (load_end > image_start)) {
 				fdt_error("fdt overwritten");
-				goto error;
+				return -EFAULT;
 			}
 
 			debug("   Loading FDT from 0x%08lx to 0x%08lx\n",
@@ -398,24 +373,24 @@ int boot_get_fdt(int flag, int argc, char *const argv[], uint8_t arch,
 			break;
 		}
 #endif
-		case IMAGE_FORMAT_FIT:
-			/*
-			 * This case will catch both: new uImage format
-			 * (libfdt based) and raw FDT blob (also libfdt
-			 * based).
-			 */
+	case IMAGE_FORMAT_FIT:
+		/*
+		 * This case will catch both: new uImage format
+		 * (libfdt based) and raw FDT blob (also libfdt
+		 * based).
+		 */
 #if CONFIG_IS_ENABLED(FIT)
 			/* check FDT blob vs FIT blob */
 			if (!fit_check_format(buf, IMAGE_SIZE_INVAL)) {
 				ulong load, len;
 
-				fdt_noffset = boot_get_fdt_fit(images,
-					fdt_addr, &fit_uname_fdt,
-					&fit_uname_config,
-					arch, &load, &len);
+				fdt_noffset = boot_get_fdt_fit(images, fdt_addr,
+							       &fit_uname_fdt,
+							       &fit_uname_config,
+							       arch, &load, &len);
 
 				if (fdt_noffset < 0)
-					goto error;
+					return -ENOENT;
 
 				images->fit_hdr_fdt = map_sysmem(fdt_addr, 0);
 				images->fit_uname_fdt = fit_uname_fdt;
@@ -423,22 +398,73 @@ int boot_get_fdt(int flag, int argc, char *const argv[], uint8_t arch,
 				fdt_addr = load;
 
 				break;
-			} else
+		} else
 #endif
-			{
-				/*
-				 * FDT blob
-				 */
-				debug("*  fdt: raw FDT blob\n");
-				printf("## Flattened Device Tree blob at %08lx\n",
-				       (long)fdt_addr);
-			}
-			break;
-		default:
-			puts("ERROR: Did not find a cmdline Flattened Device Tree\n");
-			goto error;
+		{
+			/*
+			 * FDT blob
+			 */
+			debug("*  fdt: raw FDT blob\n");
+			printf("## Flattened Device Tree blob at %08lx\n",
+			       (long)fdt_addr);
 		}
+		break;
+	default:
+		puts("ERROR: Did not find a cmdline Flattened Device Tree\n");
+		return -ENOENT;
+	}
+	*fdt_addrp = fdt_addr;
+
+	return 0;
+}
 
+/**
+ * boot_get_fdt - main fdt handling routine
+ * @argc: command argument count
+ * @argv: command argument list
+ * @arch: architecture (IH_ARCH_...)
+ * @images: pointer to the bootm images structure
+ * @of_flat_tree: pointer to a char* variable, will hold fdt start address
+ * @of_size: pointer to a ulong variable, will hold fdt length
+ *
+ * boot_get_fdt() is responsible for finding a valid flat device tree image.
+ * Currently supported are the following ramdisk sources:
+ *      - multicomponent kernel/ramdisk image,
+ *      - commandline provided address of decicated ramdisk image.
+ *
+ * returns:
+ *     0, if fdt image was found and valid, or skipped
+ *     of_flat_tree and of_size are set to fdt start address and length if
+ *     fdt image is found and valid
+ *
+ *     1, if fdt image is found but corrupted
+ *     of_flat_tree and of_size are set to 0 if no fdt exists
+ */
+int boot_get_fdt(int flag, int argc, char *const argv[], uint8_t arch,
+		 bootm_headers_t *images, char **of_flat_tree, ulong *of_size)
+{
+	ulong		img_addr;
+	ulong		fdt_addr;
+	char		*fdt_blob = NULL;
+	void		*buf;
+	const char *select = NULL;
+
+	*of_flat_tree = NULL;
+	*of_size = 0;
+
+	img_addr = (argc == 0) ? image_load_addr : hextoul(argv[0], NULL);
+	buf = map_sysmem(img_addr, 0);
+
+	if (argc > 2)
+		select = argv[2];
+	if (select || genimg_has_config(images)) {
+		int ret;
+
+		ret = select_fdt(images, select, arch, &fdt_addr);
+		if (ret == -ENOPKG)
+			goto no_fdt;
+		else if (ret)
+			return 1;
 		printf("   Booting using the fdt blob at %#08lx\n", fdt_addr);
 		fdt_blob = map_sysmem(fdt_addr, 0);
 	} else if (images->legacy_hdr_valid &&
-- 
2.33.0.685.g46640cef36-goog


^ permalink raw reply related	[flat|nested] 90+ messages in thread

* Re: [PATCH v5 05/29] hash: Use Kconfig to enable hashing in host tools and SPL
  2021-09-26  1:43 ` [PATCH v5 05/29] hash: Use Kconfig to enable hashing in host tools and SPL Simon Glass
@ 2021-09-27 15:53   ` Alex G.
  2021-09-27 16:06     ` Simon Glass
  2021-10-05 18:21   ` Alex G.
  2021-10-09  1:39   ` Tom Rini
  2 siblings, 1 reply; 90+ messages in thread
From: Alex G. @ 2021-09-27 15:53 UTC (permalink / raw)
  To: Simon Glass, U-Boot Mailing List
  Cc: Andre Przywara, Rasmus Villemoes, Robert Marko, Masahiro Yamada,
	Tom Rini, Joe Hershberger

Hi Simon

On 9/25/21 8:43 PM, Simon Glass wrote:
> At present when building host tools, we force CONFIG_SHAxxx to be enabled
> regardless of the board Kconfig setting. This is done in the image.h
> header file.
> 
> For SPL we currently just assume the algorithm is desired if U-Boot proper
> enables it.
> 
> Clean this up by adding new Kconfig options to enable hashing on the host,
> relying on CONFIG_IS_ENABLED() to deal with the different builds.
> 
> Add new SPL Kconfigs for hardware-accelerated hashing, to maintain the
> current settings.
> 
> This allows us to drop the image.h code and the I_WANT_MD5 hack.
> 
> Signed-off-by: Simon Glass <sjg@chromium.org>
> ---
> 
> Changes in v5:
> - Drop I_WANT_MD5
> - Use TOOLS_ instead of HOST_
> 
I was planning to move hash algos to a linker list for target code, and 
a simple, ifdef-free list for the host, like we've done for crypto 
algos, and I think padding algos.

We'd be able to drop #define I_WANT_MD5 (which is temporary), and drop 
define CONFIG_SHA_*, and by extension, drop the need for 
CONFIG_TOOLS_SHA*. I think that's far more elegant.

Alex

> Changes in v2:
> - Add SPL_ Kconfigs also, since otherwise hashing algorithms drop from SPL
> 
>   common/hash.c   | 49 +++++++++++++++++++++++--------------------------
>   include/image.h |  5 -----
>   lib/Kconfig     | 18 ++++++++++++++++++
>   tools/Kconfig   | 25 +++++++++++++++++++++++++
>   4 files changed, 66 insertions(+), 31 deletions(-)
> 
> diff --git a/common/hash.c b/common/hash.c
> index 6277fe65b3e..0fe65c959d0 100644
> --- a/common/hash.c
> +++ b/common/hash.c
> @@ -25,6 +25,7 @@
>   #else
>   #include "mkimage.h"
>   #include <time.h>
> +#include <linux/kconfig.h>
>   #endif /* !USE_HOSTCC*/
>   
>   #include <hash.h>
> @@ -41,7 +42,7 @@ DECLARE_GLOBAL_DATA_PTR;
>   
>   static void reloc_update(void);
>   
> -#if defined(CONFIG_SHA1) && !defined(CONFIG_SHA_PROG_HW_ACCEL)
> +#if CONFIG_IS_ENABLED(SHA1) && !CONFIG_IS_ENABLED(SHA_PROG_HW_ACCEL)
>   static int hash_init_sha1(struct hash_algo *algo, void **ctxp)
>   {
>   	sha1_context *ctx = malloc(sizeof(sha1_context));
> @@ -69,7 +70,7 @@ static int hash_finish_sha1(struct hash_algo *algo, void *ctx, void *dest_buf,
>   }
>   #endif
>   
> -#if defined(CONFIG_SHA256) && !defined(CONFIG_SHA_PROG_HW_ACCEL)
> +#if CONFIG_IS_ENABLED(SHA256) && !CONFIG_IS_ENABLED(SHA_PROG_HW_ACCEL)
>   static int hash_init_sha256(struct hash_algo *algo, void **ctxp)
>   {
>   	sha256_context *ctx = malloc(sizeof(sha256_context));
> @@ -97,7 +98,7 @@ static int hash_finish_sha256(struct hash_algo *algo, void *ctx, void
>   }
>   #endif
>   
> -#if defined(CONFIG_SHA384) && !defined(CONFIG_SHA_PROG_HW_ACCEL)
> +#if CONFIG_IS_ENABLED(SHA384) && !CONFIG_IS_ENABLED(SHA_PROG_HW_ACCEL)
>   static int hash_init_sha384(struct hash_algo *algo, void **ctxp)
>   {
>   	sha512_context *ctx = malloc(sizeof(sha512_context));
> @@ -125,7 +126,7 @@ static int hash_finish_sha384(struct hash_algo *algo, void *ctx, void
>   }
>   #endif
>   
> -#if defined(CONFIG_SHA512) && !defined(CONFIG_SHA_PROG_HW_ACCEL)
> +#if CONFIG_IS_ENABLED(SHA512) && !CONFIG_IS_ENABLED(SHA_PROG_HW_ACCEL)
>   static int hash_init_sha512(struct hash_algo *algo, void **ctxp)
>   {
>   	sha512_context *ctx = malloc(sizeof(sha512_context));
> @@ -207,18 +208,13 @@ static int hash_finish_crc32(struct hash_algo *algo, void *ctx, void *dest_buf,
>   	return 0;
>   }
>   
> -#ifdef USE_HOSTCC
> -# define I_WANT_MD5	1
> -#else
> -# define I_WANT_MD5	CONFIG_IS_ENABLED(MD5)
> -#endif
>   /*
>    * These are the hash algorithms we support.  If we have hardware acceleration
>    * is enable we will use that, otherwise a software version of the algorithm.
>    * Note that algorithm names must be in lower case.
>    */
>   static struct hash_algo hash_algo[] = {
> -#if I_WANT_MD5
> +#if CONFIG_IS_ENABLED(MD5)
>   	{
>   		.name		= "md5",
>   		.digest_size	= MD5_SUM_LEN,
> @@ -226,17 +222,17 @@ static struct hash_algo hash_algo[] = {
>   		.hash_func_ws	= md5_wd,
>   	},
>   #endif
> -#ifdef CONFIG_SHA1
> +#if CONFIG_IS_ENABLED(SHA1)
>   	{
>   		.name 		= "sha1",
>   		.digest_size	= SHA1_SUM_LEN,
>   		.chunk_size	= CHUNKSZ_SHA1,
> -#ifdef CONFIG_SHA_HW_ACCEL
> +#if CONFIG_IS_ENABLED(SHA_HW_ACCEL)
>   		.hash_func_ws	= hw_sha1,
>   #else
>   		.hash_func_ws	= sha1_csum_wd,
>   #endif
> -#ifdef CONFIG_SHA_PROG_HW_ACCEL
> +#if CONFIG_IS_ENABLED(SHA_PROG_HW_ACCEL)
>   		.hash_init	= hw_sha_init,
>   		.hash_update	= hw_sha_update,
>   		.hash_finish	= hw_sha_finish,
> @@ -247,17 +243,17 @@ static struct hash_algo hash_algo[] = {
>   #endif
>   	},
>   #endif
> -#ifdef CONFIG_SHA256
> +#if CONFIG_IS_ENABLED(SHA256)
>   	{
>   		.name		= "sha256",
>   		.digest_size	= SHA256_SUM_LEN,
>   		.chunk_size	= CHUNKSZ_SHA256,
> -#ifdef CONFIG_SHA_HW_ACCEL
> +#if CONFIG_IS_ENABLED(SHA_HW_ACCEL)
>   		.hash_func_ws	= hw_sha256,
>   #else
>   		.hash_func_ws	= sha256_csum_wd,
>   #endif
> -#ifdef CONFIG_SHA_PROG_HW_ACCEL
> +#if CONFIG_IS_ENABLED(SHA_PROG_HW_ACCEL)
>   		.hash_init	= hw_sha_init,
>   		.hash_update	= hw_sha_update,
>   		.hash_finish	= hw_sha_finish,
> @@ -268,17 +264,17 @@ static struct hash_algo hash_algo[] = {
>   #endif
>   	},
>   #endif
> -#ifdef CONFIG_SHA384
> +#if CONFIG_IS_ENABLED(SHA384)
>   	{
>   		.name		= "sha384",
>   		.digest_size	= SHA384_SUM_LEN,
>   		.chunk_size	= CHUNKSZ_SHA384,
> -#ifdef CONFIG_SHA512_HW_ACCEL
> +#if CONFIG_IS_ENABLED(SHA512_HW_ACCEL)
>   		.hash_func_ws	= hw_sha384,
>   #else
>   		.hash_func_ws	= sha384_csum_wd,
>   #endif
> -#if defined(CONFIG_SHA512_HW_ACCEL) && defined(CONFIG_SHA_PROG_HW_ACCEL)
> +#if CONFIG_IS_ENABLED(SHA512_HW_ACCEL) && CONFIG_IS_ENABLED(SHA_PROG_HW_ACCEL)
>   		.hash_init	= hw_sha_init,
>   		.hash_update	= hw_sha_update,
>   		.hash_finish	= hw_sha_finish,
> @@ -289,17 +285,17 @@ static struct hash_algo hash_algo[] = {
>   #endif
>   	},
>   #endif
> -#ifdef CONFIG_SHA512
> +#if CONFIG_IS_ENABLED(SHA512)
>   	{
>   		.name		= "sha512",
>   		.digest_size	= SHA512_SUM_LEN,
>   		.chunk_size	= CHUNKSZ_SHA512,
> -#ifdef CONFIG_SHA512_HW_ACCEL
> +#if CONFIG_IS_ENABLED(SHA512_HW_ACCEL)
>   		.hash_func_ws	= hw_sha512,
>   #else
>   		.hash_func_ws	= sha512_csum_wd,
>   #endif
> -#if defined(CONFIG_SHA512_HW_ACCEL) && defined(CONFIG_SHA_PROG_HW_ACCEL)
> +#if CONFIG_IS_ENABLED(SHA512_HW_ACCEL) && CONFIG_IS_ENABLED(SHA_PROG_HW_ACCEL)
>   		.hash_init	= hw_sha_init,
>   		.hash_update	= hw_sha_update,
>   		.hash_finish	= hw_sha_finish,
> @@ -331,9 +327,9 @@ static struct hash_algo hash_algo[] = {
>   };
>   
>   /* Try to minimize code size for boards that don't want much hashing */
> -#if defined(CONFIG_SHA256) || defined(CONFIG_CMD_SHA1SUM) || \
> -	defined(CONFIG_CRC32_VERIFY) || defined(CONFIG_CMD_HASH) || \
> -	defined(CONFIG_SHA384) || defined(CONFIG_SHA512)
> +#if CONFIG_IS_ENABLED(SHA256) || CONFIG_IS_ENABLED(CMD_SHA1SUM) || \
> +	CONFIG_IS_ENABLED(CRC32_VERIFY) || CONFIG_IS_ENABLED(CMD_HASH) || \
> +	CONFIG_IS_ENABLED(SHA384) || CONFIG_IS_ENABLED(SHA512)
>   #define multi_hash()	1
>   #else
>   #define multi_hash()	0
> @@ -438,7 +434,8 @@ int hash_block(const char *algo_name, const void *data, unsigned int len,
>   	return 0;
>   }
>   
> -#if defined(CONFIG_CMD_HASH) || defined(CONFIG_CMD_SHA1SUM) || defined(CONFIG_CMD_CRC32)
> +#if !defined(CONFIG_SPL_BUILD) && (defined(CONFIG_CMD_HASH) || \
> +	defined(CONFIG_CMD_SHA1SUM) || defined(CONFIG_CMD_CRC32))
>   /**
>    * store_result: Store the resulting sum to an address or variable
>    *
> diff --git a/include/image.h b/include/image.h
> index 73a763a6936..03857f4b500 100644
> --- a/include/image.h
> +++ b/include/image.h
> @@ -31,11 +31,6 @@ struct fdt_region;
>   #define IMAGE_ENABLE_OF_LIBFDT	1
>   #define CONFIG_FIT_VERBOSE	1 /* enable fit_format_{error,warning}() */
>   #define CONFIG_FIT_RSASSA_PSS 1
> -#define CONFIG_MD5
> -#define CONFIG_SHA1
> -#define CONFIG_SHA256
> -#define CONFIG_SHA384
> -#define CONFIG_SHA512
>   
>   #define IMAGE_ENABLE_IGNORE	0
>   #define IMAGE_INDENT_STRING	""
> diff --git a/lib/Kconfig b/lib/Kconfig
> index 7899e756f99..64765acfa61 100644
> --- a/lib/Kconfig
> +++ b/lib/Kconfig
> @@ -438,6 +438,24 @@ config SPL_SHA384
>   	  The SHA384 algorithm produces a 384-bit (48-byte) hash value
>   	  (digest).
>   
> +config SPL_SHA_HW_ACCEL
> +	bool "Enable hardware acceleration for SHA hash functions"
> +	default y if SHA_HW_ACCEL
> +	help
> +	  This option enables hardware acceleration for the SHA1 and SHA256
> +	  hashing algorithms. This affects the 'hash' command and also the
> +	  hash_lookup_algo() function.
> +
> +config SPL_SHA_PROG_HW_ACCEL
> +	bool "Enable Progressive hashing support using hardware in SPL"
> +	depends on SHA_PROG_HW_ACCEL
> +	default y
> +	help
> +	  This option enables hardware-acceleration for SHA progressive
> +	  hashing.
> +	  Data can be streamed in a block at a time and the hashing is
> +	  performed in hardware.
> +
>   endif
>   
>   if SHA_HW_ACCEL
> diff --git a/tools/Kconfig b/tools/Kconfig
> index ea986ab0479..6ffc2c0aa31 100644
> --- a/tools/Kconfig
> +++ b/tools/Kconfig
> @@ -45,4 +45,29 @@ config TOOLS_FIT_SIGNATURE_MAX_SIZE
>   	depends on TOOLS_FIT_SIGNATURE
>   	default 0x10000000
>   
> +config TOOLS_MD5
> +	def_bool y
> +	help
> +	  Enable MD5 support in the tools builds
> +
> +config TOOLS_SHA1
> +	def_bool y
> +	help
> +	  Enable SHA1 support in the tools builds
> +
> +config TOOLS_SHA256
> +	def_bool y
> +	help
> +	  Enable SHA256 support in the tools builds
> +
> +config TOOLS_SHA384
> +	def_bool y
> +	help
> +	  Enable SHA384 support in the tools builds
> +
> +config TOOLS_SHA512
> +	def_bool y
> +	help
> +	  Enable SHA512 support in the tools builds
> +
>   endmenu
> 

^ permalink raw reply	[flat|nested] 90+ messages in thread

* Re: [PATCH v5 05/29] hash: Use Kconfig to enable hashing in host tools and SPL
  2021-09-27 15:53   ` Alex G.
@ 2021-09-27 16:06     ` Simon Glass
  2021-09-27 16:12       ` Alex G.
  0 siblings, 1 reply; 90+ messages in thread
From: Simon Glass @ 2021-09-27 16:06 UTC (permalink / raw)
  To: Alex G.
  Cc: U-Boot Mailing List, Andre Przywara, Rasmus Villemoes,
	Robert Marko, Masahiro Yamada, Tom Rini, Joe Hershberger

Hi Alex,

On Mon, 27 Sept 2021 at 09:53, Alex G. <mr.nuke.me@gmail.com> wrote:
>
> Hi Simon
>
> On 9/25/21 8:43 PM, Simon Glass wrote:
> > At present when building host tools, we force CONFIG_SHAxxx to be enabled
> > regardless of the board Kconfig setting. This is done in the image.h
> > header file.
> >
> > For SPL we currently just assume the algorithm is desired if U-Boot proper
> > enables it.
> >
> > Clean this up by adding new Kconfig options to enable hashing on the host,
> > relying on CONFIG_IS_ENABLED() to deal with the different builds.
> >
> > Add new SPL Kconfigs for hardware-accelerated hashing, to maintain the
> > current settings.
> >
> > This allows us to drop the image.h code and the I_WANT_MD5 hack.
> >
> > Signed-off-by: Simon Glass <sjg@chromium.org>
> > ---
> >
> > Changes in v5:
> > - Drop I_WANT_MD5
> > - Use TOOLS_ instead of HOST_
> >
> I was planning to move hash algos to a linker list for target code, and
> a simple, ifdef-free list for the host, like we've done for crypto
> algos, and I think padding algos.
>
> We'd be able to drop #define I_WANT_MD5 (which is temporary), and drop
> define CONFIG_SHA_*, and by extension, drop the need for
> CONFIG_TOOLS_SHA*. I think that's far more elegant.

OK but can we do that after my series goes in? The series is a
significant #ifdef clean-up and I think you can easily do that on top
of the series.

Regards,
Simon

^ permalink raw reply	[flat|nested] 90+ messages in thread

* Re: [PATCH v5 02/29] kconfig: Add tools support to CONFIG_IS_ENABLED()
  2021-09-26  1:43 ` [PATCH v5 02/29] kconfig: Add tools support to CONFIG_IS_ENABLED() Simon Glass
@ 2021-09-27 16:11   ` Alex G.
  2021-09-27 16:50     ` Masahiro Yamada
  2021-09-27 20:17     ` Simon Glass
  2021-10-05 18:11   ` Alex G.
                     ` (2 subsequent siblings)
  3 siblings, 2 replies; 90+ messages in thread
From: Alex G. @ 2021-09-27 16:11 UTC (permalink / raw)
  To: Simon Glass, U-Boot Mailing List
  Cc: Andre Przywara, Rasmus Villemoes, Robert Marko, Masahiro Yamada,
	Tom Rini, Masahiro Yamada



On 9/25/21 8:43 PM, Simon Glass wrote:
> At present we must separately test for the host build for many options,
> since we force them to be enabled. For example, CONFIG_FIT is always
> enabled in the host tools, even if CONFIG_FIT is not enabled by the
> board itself.
> 
> It would be more convenient if we could use, for example,
> CONFIG_IS_ENABLED(FIT) and get CONFIG_HOST_FIT, when building for the
> host. Add support for this.
> 
> With this and the tools_build() function, we should be able to remove all
> the #ifdefs currently needed in code that is build by tools and targets.
> 
> This will be even nicer when we move to using CONFIG(xxx) everywhere,
> since all the #ifdef and IS_ENABLED/CONFIG_IS_ENABLED stuff will go away.
> 
> Signed-off-by: Simon Glass <sjg@chromium.org>
> Suggested-by: Rasmus Villemoes <rasmus.villemoes@prevas.dk> # b4f73886
> ---

In my vision, the host tools are target-agostic. They always support the 
same feature set: all features. From that point of view, it doesn't make 
sense to have options which enable or disable tools features.

I understand the motivation is to use CONFIG_IS_ENABLED(), which has the 
appearance of making the code cleaner. We have to continue using #if 
CONFIG_IS_ENABLED() -- is that an improvement over old-school #ifdefs?

So I question whether this new direction makes sense for the long term, 
as opposed to taking a deeper look at the underlying code. The polite 
thing from me would be to propose alternatives, which I don't have the 
bandwidth these days. I won't be adding opposition to this series other 
than these final thoughts. We can fix the code later, and then remove 
the HOST configs.

Alex

> 
> Changes in v5:
> - Update commit message
> - Use TOOLS_ instead of HOST_
> 
> Changes in v2:
> - Correct comment about USE_HOSTCC being undefined in CONFIG_VAL()
> - Fix up comment to put an underscore after every CONFIG
> 
>   include/linux/kconfig.h | 13 ++++++++++---
>   1 file changed, 10 insertions(+), 3 deletions(-)
> 
> diff --git a/include/linux/kconfig.h b/include/linux/kconfig.h
> index d109ed3119e..a1d1a298426 100644
> --- a/include/linux/kconfig.h
> +++ b/include/linux/kconfig.h
> @@ -31,11 +31,14 @@
>   	(config_enabled(option))
>   
>   /*
> - * U-Boot add-on: Helper macros to reference to different macros
> - * (CONFIG_ or CONFIG_SPL_ prefixed), depending on the build context.
> + * U-Boot add-on: Helper macros to reference to different macros (prefixed by
> + * CONFIG_, CONFIG_SPL_, CONFIG_TPL_ or CONFIG_TOOLS_), depending on the build
> + * context.
>    */
>   
> -#if defined(CONFIG_TPL_BUILD)
> +#ifdef USE_HOSTCC
> +#define _CONFIG_PREFIX TOOLS_
> +#elif defined(CONFIG_TPL_BUILD)
>   #define _CONFIG_PREFIX TPL_
>   #elif defined(CONFIG_SPL_BUILD)
>   #define _CONFIG_PREFIX SPL_
> @@ -49,6 +52,7 @@
>   
>   /*
>    * CONFIG_VAL(FOO) evaluates to the value of
> + *  CONFIG_TOOLS_FOO if USE_HOSTCC is defined,
>    *  CONFIG_FOO if CONFIG_SPL_BUILD is undefined,
>    *  CONFIG_SPL_FOO if CONFIG_SPL_BUILD is defined.
>    *  CONFIG_TPL_FOO if CONFIG_TPL_BUILD is defined.
> @@ -76,18 +80,21 @@
>   
>   /*
>    * CONFIG_IS_ENABLED(FOO) expands to
> + *  1 if USE_HOSTCC is defined and CONFIG_TOOLS_FOO is set to 'y',
>    *  1 if CONFIG_SPL_BUILD is undefined and CONFIG_FOO is set to 'y',
>    *  1 if CONFIG_SPL_BUILD is defined and CONFIG_SPL_FOO is set to 'y',
>    *  1 if CONFIG_TPL_BUILD is defined and CONFIG_TPL_FOO is set to 'y',
>    *  0 otherwise.
>    *
>    * CONFIG_IS_ENABLED(FOO, (abc)) expands to
> + *  abc if USE_HOSTCC is defined and CONFIG_TOOLS_FOO is set to 'y',
>    *  abc if CONFIG_SPL_BUILD is undefined and CONFIG_FOO is set to 'y',
>    *  abc if CONFIG_SPL_BUILD is defined and CONFIG_SPL_FOO is set to 'y',
>    *  abc if CONFIG_TPL_BUILD is defined and CONFIG_TPL_FOO is set to 'y',
>    *  nothing otherwise.
>    *
>    * CONFIG_IS_ENABLED(FOO, (abc), (def)) expands to
> + *  abc if USE_HOSTCC is defined and CONFIG_TOOLS_FOO is set to 'y',
>    *  abc if CONFIG_SPL_BUILD is undefined and CONFIG_FOO is set to 'y',
>    *  abc if CONFIG_SPL_BUILD is defined and CONFIG_SPL_FOO is set to 'y',
>    *  abc if CONFIG_TPL_BUILD is defined and CONFIG_TPL_FOO is set to 'y',
> 

^ permalink raw reply	[flat|nested] 90+ messages in thread

* Re: [PATCH v5 05/29] hash: Use Kconfig to enable hashing in host tools and SPL
  2021-09-27 16:06     ` Simon Glass
@ 2021-09-27 16:12       ` Alex G.
  0 siblings, 0 replies; 90+ messages in thread
From: Alex G. @ 2021-09-27 16:12 UTC (permalink / raw)
  To: Simon Glass
  Cc: U-Boot Mailing List, Andre Przywara, Rasmus Villemoes,
	Robert Marko, Masahiro Yamada, Tom Rini, Joe Hershberger



On 9/27/21 11:06 AM, Simon Glass wrote:
> Hi Alex,
> 
> On Mon, 27 Sept 2021 at 09:53, Alex G. <mr.nuke.me@gmail.com> wrote:
>>
>> Hi Simon
>>
>> On 9/25/21 8:43 PM, Simon Glass wrote:
>>> At present when building host tools, we force CONFIG_SHAxxx to be enabled
>>> regardless of the board Kconfig setting. This is done in the image.h
>>> header file.
>>>
>>> For SPL we currently just assume the algorithm is desired if U-Boot proper
>>> enables it.
>>>
>>> Clean this up by adding new Kconfig options to enable hashing on the host,
>>> relying on CONFIG_IS_ENABLED() to deal with the different builds.
>>>
>>> Add new SPL Kconfigs for hardware-accelerated hashing, to maintain the
>>> current settings.
>>>
>>> This allows us to drop the image.h code and the I_WANT_MD5 hack.
>>>
>>> Signed-off-by: Simon Glass <sjg@chromium.org>
>>> ---
>>>
>>> Changes in v5:
>>> - Drop I_WANT_MD5
>>> - Use TOOLS_ instead of HOST_
>>>
>> I was planning to move hash algos to a linker list for target code, and
>> a simple, ifdef-free list for the host, like we've done for crypto
>> algos, and I think padding algos.
>>
>> We'd be able to drop #define I_WANT_MD5 (which is temporary), and drop
>> define CONFIG_SHA_*, and by extension, drop the need for
>> CONFIG_TOOLS_SHA*. I think that's far more elegant.
> 
> OK but can we do that after my series goes in? The series is a
> significant #ifdef clean-up and I think you can easily do that on top
> of the series.

Of course!

Alex

^ permalink raw reply	[flat|nested] 90+ messages in thread

* Re: [PATCH v5 02/29] kconfig: Add tools support to CONFIG_IS_ENABLED()
  2021-09-27 16:11   ` Alex G.
@ 2021-09-27 16:50     ` Masahiro Yamada
  2021-09-27 20:17       ` Simon Glass
  2021-09-27 20:17     ` Simon Glass
  1 sibling, 1 reply; 90+ messages in thread
From: Masahiro Yamada @ 2021-09-27 16:50 UTC (permalink / raw)
  To: Alex G.
  Cc: Simon Glass, U-Boot Mailing List, Andre Przywara,
	Rasmus Villemoes, Robert Marko, Tom Rini

On Tue, Sep 28, 2021 at 1:11 AM Alex G. <mr.nuke.me@gmail.com> wrote:
>
>
>
> On 9/25/21 8:43 PM, Simon Glass wrote:
> > At present we must separately test for the host build for many options,
> > since we force them to be enabled. For example, CONFIG_FIT is always
> > enabled in the host tools, even if CONFIG_FIT is not enabled by the
> > board itself.
> >
> > It would be more convenient if we could use, for example,
> > CONFIG_IS_ENABLED(FIT) and get CONFIG_HOST_FIT, when building for the
> > host. Add support for this.
> >
> > With this and the tools_build() function, we should be able to remove all
> > the #ifdefs currently needed in code that is build by tools and targets.
> >
> > This will be even nicer when we move to using CONFIG(xxx) everywhere,
> > since all the #ifdef and IS_ENABLED/CONFIG_IS_ENABLED stuff will go away.
> >
> > Signed-off-by: Simon Glass <sjg@chromium.org>
> > Suggested-by: Rasmus Villemoes <rasmus.villemoes@prevas.dk> # b4f73886
> > ---
>
> In my vision, the host tools are target-agostic. They always support the
> same feature set: all features. From that point of view, it doesn't make
> sense to have options which enable or disable tools features.


Agree.
Host tools should not depend on any CONFIG option.

In Linux kernel, most host tools are target-agnostic.
(It is true there are some exceptions such as objtool,
modpost, etc. but in theory we can make all of them
target-agnostic)

In fact, U-Boot made much more tools target-dependent.
They must be rebuilt every time you change the configuration.

For example, mkimage in U-Boot supports many boards
and depends on the configuration.
It makes less sense to support all sort of board-specific
firmware in a huge single host tool.


In contrast, Barebox splits it into small programs,
zynq_mkimage, socfpga_mkimage, etc.,
each of which is target-agnostic.  [1]
Makefile decides only whether each program should be built or not.

[1] https://github.com/saschahauer/barebox/blob/v2021.07.0/scripts/Makefile#L22



>
> I understand the motivation is to use CONFIG_IS_ENABLED(), which has the
> appearance of making the code cleaner. We have to continue using #if
> CONFIG_IS_ENABLED() -- is that an improvement over old-school #ifdefs?
>
> So I question whether this new direction makes sense for the long term,
> as opposed to taking a deeper look at the underlying code. The polite
> thing from me would be to propose alternatives, which I don't have the
> bandwidth these days. I won't be adding opposition to this series other
> than these final thoughts. We can fix the code later, and then remove
> the HOST configs.
>
> Alex
>
> >
> > Changes in v5:
> > - Update commit message
> > - Use TOOLS_ instead of HOST_
> >
> > Changes in v2:
> > - Correct comment about USE_HOSTCC being undefined in CONFIG_VAL()
> > - Fix up comment to put an underscore after every CONFIG
> >
> >   include/linux/kconfig.h | 13 ++++++++++---
> >   1 file changed, 10 insertions(+), 3 deletions(-)
> >
> > diff --git a/include/linux/kconfig.h b/include/linux/kconfig.h
> > index d109ed3119e..a1d1a298426 100644
> > --- a/include/linux/kconfig.h
> > +++ b/include/linux/kconfig.h
> > @@ -31,11 +31,14 @@
> >       (config_enabled(option))
> >
> >   /*
> > - * U-Boot add-on: Helper macros to reference to different macros
> > - * (CONFIG_ or CONFIG_SPL_ prefixed), depending on the build context.
> > + * U-Boot add-on: Helper macros to reference to different macros (prefixed by
> > + * CONFIG_, CONFIG_SPL_, CONFIG_TPL_ or CONFIG_TOOLS_), depending on the build
> > + * context.
> >    */
> >
> > -#if defined(CONFIG_TPL_BUILD)
> > +#ifdef USE_HOSTCC
> > +#define _CONFIG_PREFIX TOOLS_
> > +#elif defined(CONFIG_TPL_BUILD)
> >   #define _CONFIG_PREFIX TPL_
> >   #elif defined(CONFIG_SPL_BUILD)
> >   #define _CONFIG_PREFIX SPL_
> > @@ -49,6 +52,7 @@
> >
> >   /*
> >    * CONFIG_VAL(FOO) evaluates to the value of
> > + *  CONFIG_TOOLS_FOO if USE_HOSTCC is defined,
> >    *  CONFIG_FOO if CONFIG_SPL_BUILD is undefined,
> >    *  CONFIG_SPL_FOO if CONFIG_SPL_BUILD is defined.
> >    *  CONFIG_TPL_FOO if CONFIG_TPL_BUILD is defined.
> > @@ -76,18 +80,21 @@
> >
> >   /*
> >    * CONFIG_IS_ENABLED(FOO) expands to
> > + *  1 if USE_HOSTCC is defined and CONFIG_TOOLS_FOO is set to 'y',
> >    *  1 if CONFIG_SPL_BUILD is undefined and CONFIG_FOO is set to 'y',
> >    *  1 if CONFIG_SPL_BUILD is defined and CONFIG_SPL_FOO is set to 'y',
> >    *  1 if CONFIG_TPL_BUILD is defined and CONFIG_TPL_FOO is set to 'y',
> >    *  0 otherwise.
> >    *
> >    * CONFIG_IS_ENABLED(FOO, (abc)) expands to
> > + *  abc if USE_HOSTCC is defined and CONFIG_TOOLS_FOO is set to 'y',
> >    *  abc if CONFIG_SPL_BUILD is undefined and CONFIG_FOO is set to 'y',
> >    *  abc if CONFIG_SPL_BUILD is defined and CONFIG_SPL_FOO is set to 'y',
> >    *  abc if CONFIG_TPL_BUILD is defined and CONFIG_TPL_FOO is set to 'y',
> >    *  nothing otherwise.
> >    *
> >    * CONFIG_IS_ENABLED(FOO, (abc), (def)) expands to
> > + *  abc if USE_HOSTCC is defined and CONFIG_TOOLS_FOO is set to 'y',
> >    *  abc if CONFIG_SPL_BUILD is undefined and CONFIG_FOO is set to 'y',
> >    *  abc if CONFIG_SPL_BUILD is defined and CONFIG_SPL_FOO is set to 'y',
> >    *  abc if CONFIG_TPL_BUILD is defined and CONFIG_TPL_FOO is set to 'y',
> >



-- 
Best Regards
Masahiro Yamada

^ permalink raw reply	[flat|nested] 90+ messages in thread

* Re: [PATCH v5 02/29] kconfig: Add tools support to CONFIG_IS_ENABLED()
  2021-09-27 16:11   ` Alex G.
  2021-09-27 16:50     ` Masahiro Yamada
@ 2021-09-27 20:17     ` Simon Glass
  1 sibling, 0 replies; 90+ messages in thread
From: Simon Glass @ 2021-09-27 20:17 UTC (permalink / raw)
  To: Alex G.
  Cc: U-Boot Mailing List, Andre Przywara, Rasmus Villemoes,
	Robert Marko, Masahiro Yamada, Tom Rini, Masahiro Yamada

Hi Alex,

On Mon, 27 Sept 2021 at 10:11, Alex G. <mr.nuke.me@gmail.com> wrote:
>
>
>
> On 9/25/21 8:43 PM, Simon Glass wrote:
> > At present we must separately test for the host build for many options,
> > since we force them to be enabled. For example, CONFIG_FIT is always
> > enabled in the host tools, even if CONFIG_FIT is not enabled by the
> > board itself.
> >
> > It would be more convenient if we could use, for example,
> > CONFIG_IS_ENABLED(FIT) and get CONFIG_HOST_FIT, when building for the
> > host. Add support for this.
> >
> > With this and the tools_build() function, we should be able to remove all
> > the #ifdefs currently needed in code that is build by tools and targets.
> >
> > This will be even nicer when we move to using CONFIG(xxx) everywhere,
> > since all the #ifdef and IS_ENABLED/CONFIG_IS_ENABLED stuff will go away.
> >
> > Signed-off-by: Simon Glass <sjg@chromium.org>
> > Suggested-by: Rasmus Villemoes <rasmus.villemoes@prevas.dk> # b4f73886
> > ---
>
> In my vision, the host tools are target-agostic. They always support the
> same feature set: all features. From that point of view, it doesn't make
> sense to have options which enable or disable tools features.
>
> I understand the motivation is to use CONFIG_IS_ENABLED(), which has the
> appearance of making the code cleaner. We have to continue using #if
> CONFIG_IS_ENABLED() -- is that an improvement over old-school #ifdefs?

nit: if() not #if

Most of the changes in this series are to remove #if and #idef

>
> So I question whether this new direction makes sense for the long term,
> as opposed to taking a deeper look at the underlying code. The polite
> thing from me would be to propose alternatives, which I don't have the
> bandwidth these days. I won't be adding opposition to this series other
> than these final thoughts. We can fix the code later, and then remove
> the HOST configs.

The key files to look at are those related to images in common/ which
are built by tools. It's actually a bit hard to pass judgement right
now since there is so much #ifdefing going on. You'll notice that one
patch creates image-board.c to try to avoid compiling code
unnecessarily for tools. I am sure there is more oppty for that. But
Rome wasn't built in a day.

One fundamental question is driver model. Of course it isn't supported
in tools and I think it makes no sense to add it, since it just
complicates the code. But as more of the feature become more diverse
(e.g. hashing, crypto, other accelerators) we have to deal with making
the software version of these features available in tools and also in
the board.

Anyway I think this series takes things forward and there is a path to
do another pass to drop more #ifdefs as well.

As to your question about using CONFIG_IS_ENABLED() for tools, I see
it as a convenience for now, but I would not bank on it being needed
in the fullness of time. It's just hard to know until we get closer to
cleaning this up.

Regards,
Simon

^ permalink raw reply	[flat|nested] 90+ messages in thread

* Re: [PATCH v5 02/29] kconfig: Add tools support to CONFIG_IS_ENABLED()
  2021-09-27 16:50     ` Masahiro Yamada
@ 2021-09-27 20:17       ` Simon Glass
  0 siblings, 0 replies; 90+ messages in thread
From: Simon Glass @ 2021-09-27 20:17 UTC (permalink / raw)
  To: Masahiro Yamada
  Cc: Alex G.,
	U-Boot Mailing List, Andre Przywara, Rasmus Villemoes,
	Robert Marko, Tom Rini

Hi Masahiro,

On Mon, 27 Sept 2021 at 10:51, Masahiro Yamada <masahiroy@kernel.org> wrote:
>
> On Tue, Sep 28, 2021 at 1:11 AM Alex G. <mr.nuke.me@gmail.com> wrote:
> >
> >
> >
> > On 9/25/21 8:43 PM, Simon Glass wrote:
> > > At present we must separately test for the host build for many options,
> > > since we force them to be enabled. For example, CONFIG_FIT is always
> > > enabled in the host tools, even if CONFIG_FIT is not enabled by the
> > > board itself.
> > >
> > > It would be more convenient if we could use, for example,
> > > CONFIG_IS_ENABLED(FIT) and get CONFIG_HOST_FIT, when building for the
> > > host. Add support for this.
> > >
> > > With this and the tools_build() function, we should be able to remove all
> > > the #ifdefs currently needed in code that is build by tools and targets.
> > >
> > > This will be even nicer when we move to using CONFIG(xxx) everywhere,
> > > since all the #ifdef and IS_ENABLED/CONFIG_IS_ENABLED stuff will go away.
> > >
> > > Signed-off-by: Simon Glass <sjg@chromium.org>
> > > Suggested-by: Rasmus Villemoes <rasmus.villemoes@prevas.dk> # b4f73886
> > > ---
> >
> > In my vision, the host tools are target-agostic. They always support the
> > same feature set: all features. From that point of view, it doesn't make
> > sense to have options which enable or disable tools features.
>
>
> Agree.
> Host tools should not depend on any CONFIG option.

Agreed, although arguably that is not quite what is happening here, We
need some way for shared code to work, so the options are:

if (tools_build() || CONFIG_IS_ENABLED(FIT_SIGNATURE))

or:

if (CONFIG_IS_ENABLED(FIT_SIGNATURE))

I believe the second is better.

BTW we do have a series to drop IS_ENABLED() and CONFIG_IS_ENABLED()
and move to just CONFIG() so it would be:

if (CONFIG(FIT_SIGNATURE))

>
> In Linux kernel, most host tools are target-agnostic.
> (It is true there are some exceptions such as objtool,
> modpost, etc. but in theory we can make all of them
> target-agnostic)
>
> In fact, U-Boot made much more tools target-dependent.
> They must be rebuilt every time you change the configuration.

Can you give some examples? We have tried for the exact opposite of
that and should fix any instances we find.

>
> For example, mkimage in U-Boot supports many boards
> and depends on the configuration.
> It makes less sense to support all sort of board-specific
> firmware in a huge single host tool.

Maybe, but I would much prefer that there is one mkimage that supports
everything.

>
>
> In contrast, Barebox splits it into small programs,
> zynq_mkimage, socfpga_mkimage, etc.,
> each of which is target-agnostic.  [1]
> Makefile decides only whether each program should be built or not.
>
> [1] https://github.com/saschahauer/barebox/blob/v2021.07.0/scripts/Makefile#L22

How does it share code between boards and tools which includes CONFIG options?

Regards,
Simon
[..]

^ permalink raw reply	[flat|nested] 90+ messages in thread

* Re: [PATCH v5 01/29] compiler: Rename host_build() to tools_build()
  2021-09-26  1:43 ` [PATCH v5 01/29] compiler: Rename host_build() to tools_build() Simon Glass
@ 2021-10-05 18:09   ` Alex G.
  2021-10-09  1:39   ` Tom Rini
  1 sibling, 0 replies; 90+ messages in thread
From: Alex G. @ 2021-10-05 18:09 UTC (permalink / raw)
  To: Simon Glass, U-Boot Mailing List
  Cc: Andre Przywara, Rasmus Villemoes, Robert Marko, Masahiro Yamada,
	Tom Rini



On 9/25/21 8:43 PM, Simon Glass wrote:
> With the new TOOLS_LIBCRYPTO and some other changes, it seems that we are
> heading towards calling this a tools build rather than a host build,
> although of course it does happen on the host.
> 
> I cannot think of anything built by the host which cannot be described as
> a tool, so rename this function.
> 
> Signed-off-by: Simon Glass <sjg@chromium.org>

Reviewed-by: Alexandru Gagniuc <mr.nuke.me@gmail.com>

I think this change makes sense. The code becomes clearer, as we remove 
the ambiguity of what host means.

> ---
> 
> Changes in v5:
> - Add a new patch to rename host_build() to tools_build()
> 
>   common/image-fit.c |  8 ++++----
>   common/image.c     | 12 ++++++------
>   include/compiler.h |  5 +++--
>   3 files changed, 13 insertions(+), 12 deletions(-)
> 
> diff --git a/common/image-fit.c b/common/image-fit.c
> index 5a0a0cc2007..6f8e67e4158 100644
> --- a/common/image-fit.c
> +++ b/common/image-fit.c
> @@ -509,7 +509,7 @@ void fit_image_print(const void *fit, int image_noffset, const char *p)
>   
>   	ret = fit_image_get_data_and_size(fit, image_noffset, &data, &size);
>   
> -	if (!host_build()) {
> +	if (!tools_build()) {
>   		printf("%s  Data Start:   ", p);
>   		if (ret) {
>   			printf("unavailable\n");
> @@ -1845,7 +1845,7 @@ int fit_conf_get_node(const void *fit, const char *conf_uname)
>   	if (conf_uname == NULL) {
>   		/* get configuration unit name from the default property */
>   		debug("No configuration specified, trying default...\n");
> -		if (!host_build() && IS_ENABLED(CONFIG_MULTI_DTB_FIT)) {
> +		if (!tools_build() && IS_ENABLED(CONFIG_MULTI_DTB_FIT)) {
>   			noffset = fit_find_config_node(fit);
>   			if (noffset < 0)
>   				return noffset;
> @@ -2093,7 +2093,7 @@ int fit_image_load(bootm_headers_t *images, ulong addr,
>   	}
>   
>   	bootstage_mark(bootstage_id + BOOTSTAGE_SUB_CHECK_ARCH);
> -	if (!host_build() && IS_ENABLED(CONFIG_SANDBOX)) {
> +	if (!tools_build() && IS_ENABLED(CONFIG_SANDBOX)) {
>   		if (!fit_image_check_target_arch(fit, noffset)) {
>   			puts("Unsupported Architecture\n");
>   			bootstage_error(bootstage_id + BOOTSTAGE_SUB_CHECK_ARCH);
> @@ -2158,7 +2158,7 @@ int fit_image_load(bootm_headers_t *images, ulong addr,
>   	}
>   
>   	/* perform any post-processing on the image data */
> -	if (!host_build() && IS_ENABLED(CONFIG_FIT_IMAGE_POST_PROCESS))
> +	if (!tools_build() && IS_ENABLED(CONFIG_FIT_IMAGE_POST_PROCESS))
>   		board_fit_image_post_process(fit, noffset, &buf, &size);
>   
>   	len = (ulong)size;
> diff --git a/common/image.c b/common/image.c
> index 2f2fd052c50..66685b4ba99 100644
> --- a/common/image.c
> +++ b/common/image.c
> @@ -460,11 +460,11 @@ int image_decomp(int comp, ulong load, ulong image_start, int type,
>   			ret = -ENOSPC;
>   		break;
>   	case IH_COMP_GZIP:
> -		if (!host_build() && CONFIG_IS_ENABLED(GZIP))
> +		if (!tools_build() && CONFIG_IS_ENABLED(GZIP))
>   			ret = gunzip(load_buf, unc_len, image_buf, &image_len);
>   		break;
>   	case IH_COMP_BZIP2:
> -		if (!host_build() && CONFIG_IS_ENABLED(BZIP2)) {
> +		if (!tools_build() && CONFIG_IS_ENABLED(BZIP2)) {
>   			uint size = unc_len;
>   
>   			/*
> @@ -478,7 +478,7 @@ int image_decomp(int comp, ulong load, ulong image_start, int type,
>   		}
>   		break;
>   	case IH_COMP_LZMA:
> -		if (!host_build() && CONFIG_IS_ENABLED(LZMA)) {
> +		if (!tools_build() && CONFIG_IS_ENABLED(LZMA)) {
>   			SizeT lzma_len = unc_len;
>   
>   			ret = lzmaBuffToBuffDecompress(load_buf, &lzma_len,
> @@ -487,7 +487,7 @@ int image_decomp(int comp, ulong load, ulong image_start, int type,
>   		}
>   		break;
>   	case IH_COMP_LZO:
> -		if (!host_build() && CONFIG_IS_ENABLED(LZO)) {
> +		if (!tools_build() && CONFIG_IS_ENABLED(LZO)) {
>   			size_t size = unc_len;
>   
>   			ret = lzop_decompress(image_buf, image_len, load_buf, &size);
> @@ -495,7 +495,7 @@ int image_decomp(int comp, ulong load, ulong image_start, int type,
>   		}
>   		break;
>   	case IH_COMP_LZ4:
> -		if (!host_build() && CONFIG_IS_ENABLED(LZ4)) {
> +		if (!tools_build() && CONFIG_IS_ENABLED(LZ4)) {
>   			size_t size = unc_len;
>   
>   			ret = ulz4fn(image_buf, image_len, load_buf, &size);
> @@ -503,7 +503,7 @@ int image_decomp(int comp, ulong load, ulong image_start, int type,
>   		}
>   		break;
>   	case IH_COMP_ZSTD:
> -		if (!host_build() && CONFIG_IS_ENABLED(ZSTD)) {
> +		if (!tools_build() && CONFIG_IS_ENABLED(ZSTD)) {
>   			struct abuf in, out;
>   
>   			abuf_init_set(&in, image_buf, image_len);
> diff --git a/include/compiler.h b/include/compiler.h
> index 6b0d3bf5374..8cf11792e24 100644
> --- a/include/compiler.h
> +++ b/include/compiler.h
> @@ -155,11 +155,12 @@ typedef unsigned long int uintptr_t;
>   #endif
>   
>   /**
> - * host_build() - check if we are building for the host
> + * tools_build() - check if we are building host tools
>    *
>    * @return true if building for the host, false if for a target
>    */
> -static inline bool host_build(void) {
> +static inline bool tools_build(void)
> +{
>   #ifdef USE_HOSTCC
>   	return true;
>   #else
> 

^ permalink raw reply	[flat|nested] 90+ messages in thread

* Re: [PATCH v5 02/29] kconfig: Add tools support to CONFIG_IS_ENABLED()
  2021-09-26  1:43 ` [PATCH v5 02/29] kconfig: Add tools support to CONFIG_IS_ENABLED() Simon Glass
  2021-09-27 16:11   ` Alex G.
@ 2021-10-05 18:11   ` Alex G.
  2021-10-07  0:26   ` Tom Rini
  2021-10-09  1:39   ` Tom Rini
  3 siblings, 0 replies; 90+ messages in thread
From: Alex G. @ 2021-10-05 18:11 UTC (permalink / raw)
  To: Simon Glass, U-Boot Mailing List
  Cc: Andre Przywara, Rasmus Villemoes, Robert Marko, Masahiro Yamada,
	Tom Rini, Masahiro Yamada

On 9/25/21 8:43 PM, Simon Glass wrote:
> At present we must separately test for the host build for many options,
> since we force them to be enabled. For example, CONFIG_FIT is always
> enabled in the host tools, even if CONFIG_FIT is not enabled by the
> board itself.
> 
> It would be more convenient if we could use, for example,
> CONFIG_IS_ENABLED(FIT) and get CONFIG_HOST_FIT, when building for the
> host. Add support for this.
> 
> With this and the tools_build() function, we should be able to remove all
> the #ifdefs currently needed in code that is build by tools and targets.
> 
> This will be even nicer when we move to using CONFIG(xxx) everywhere,
> since all the #ifdef and IS_ENABLED/CONFIG_IS_ENABLED stuff will go away.
> 
> Signed-off-by: Simon Glass <sjg@chromium.org>
> Suggested-by: Rasmus Villemoes <rasmus.villemoes@prevas.dk> # b4f73886

Under protest,
Reviewed-by: Alexandru Gagniuc <mr.nuke.me@gmail.com>

> ---
> 
> Changes in v5:
> - Update commit message
> - Use TOOLS_ instead of HOST_
> 
> Changes in v2:
> - Correct comment about USE_HOSTCC being undefined in CONFIG_VAL()
> - Fix up comment to put an underscore after every CONFIG
> 
>   include/linux/kconfig.h | 13 ++++++++++---
>   1 file changed, 10 insertions(+), 3 deletions(-)
> 
> diff --git a/include/linux/kconfig.h b/include/linux/kconfig.h
> index d109ed3119e..a1d1a298426 100644
> --- a/include/linux/kconfig.h
> +++ b/include/linux/kconfig.h
> @@ -31,11 +31,14 @@
>   	(config_enabled(option))
>   
>   /*
> - * U-Boot add-on: Helper macros to reference to different macros
> - * (CONFIG_ or CONFIG_SPL_ prefixed), depending on the build context.
> + * U-Boot add-on: Helper macros to reference to different macros (prefixed by
> + * CONFIG_, CONFIG_SPL_, CONFIG_TPL_ or CONFIG_TOOLS_), depending on the build
> + * context.
>    */
>   
> -#if defined(CONFIG_TPL_BUILD)
> +#ifdef USE_HOSTCC
> +#define _CONFIG_PREFIX TOOLS_
> +#elif defined(CONFIG_TPL_BUILD)
>   #define _CONFIG_PREFIX TPL_
>   #elif defined(CONFIG_SPL_BUILD)
>   #define _CONFIG_PREFIX SPL_
> @@ -49,6 +52,7 @@
>   
>   /*
>    * CONFIG_VAL(FOO) evaluates to the value of
> + *  CONFIG_TOOLS_FOO if USE_HOSTCC is defined,
>    *  CONFIG_FOO if CONFIG_SPL_BUILD is undefined,
>    *  CONFIG_SPL_FOO if CONFIG_SPL_BUILD is defined.
>    *  CONFIG_TPL_FOO if CONFIG_TPL_BUILD is defined.
> @@ -76,18 +80,21 @@
>   
>   /*
>    * CONFIG_IS_ENABLED(FOO) expands to
> + *  1 if USE_HOSTCC is defined and CONFIG_TOOLS_FOO is set to 'y',
>    *  1 if CONFIG_SPL_BUILD is undefined and CONFIG_FOO is set to 'y',
>    *  1 if CONFIG_SPL_BUILD is defined and CONFIG_SPL_FOO is set to 'y',
>    *  1 if CONFIG_TPL_BUILD is defined and CONFIG_TPL_FOO is set to 'y',
>    *  0 otherwise.
>    *
>    * CONFIG_IS_ENABLED(FOO, (abc)) expands to
> + *  abc if USE_HOSTCC is defined and CONFIG_TOOLS_FOO is set to 'y',
>    *  abc if CONFIG_SPL_BUILD is undefined and CONFIG_FOO is set to 'y',
>    *  abc if CONFIG_SPL_BUILD is defined and CONFIG_SPL_FOO is set to 'y',
>    *  abc if CONFIG_TPL_BUILD is defined and CONFIG_TPL_FOO is set to 'y',
>    *  nothing otherwise.
>    *
>    * CONFIG_IS_ENABLED(FOO, (abc), (def)) expands to
> + *  abc if USE_HOSTCC is defined and CONFIG_TOOLS_FOO is set to 'y',
>    *  abc if CONFIG_SPL_BUILD is undefined and CONFIG_FOO is set to 'y',
>    *  abc if CONFIG_SPL_BUILD is defined and CONFIG_SPL_FOO is set to 'y',
>    *  abc if CONFIG_TPL_BUILD is defined and CONFIG_TPL_FOO is set to 'y',
> 

^ permalink raw reply	[flat|nested] 90+ messages in thread

* Re: [PATCH v5 03/29] image: Add Kconfig options for FIT in the tools build
  2021-09-26  1:43 ` [PATCH v5 03/29] image: Add Kconfig options for FIT in the tools build Simon Glass
@ 2021-10-05 18:17   ` Alex G.
  2021-10-05 18:17   ` Alex G.
  2021-10-09  1:39   ` Tom Rini
  2 siblings, 0 replies; 90+ messages in thread
From: Alex G. @ 2021-10-05 18:17 UTC (permalink / raw)
  To: Simon Glass, U-Boot Mailing List
  Cc: Andre Przywara, Rasmus Villemoes, Robert Marko, Masahiro Yamada,
	Tom Rini, Joe Hershberger, Marek Vasut



On 9/25/21 8:43 PM, Simon Glass wrote:
> In preparation for enabling CONFIG_IS_ENABLED() on the host build, add
> some options to enable the various FIT options expected in these tools.
> This will ensure that the code builds correctly when CONFIG_TOOLS_xxx
> is distinct from CONFIG_xxx.
> 
> Drop some #ifdefs which are immediately unnecessary (many more are in
> later patches).
> 
> Signed-off-by: Simon Glass <sjg@chromium.org>

Under protest,
Reviewed-by: Alexandru Gagniuc <mr.nuke.me@gmail.com>
> ---
> 
> Changes in v5:
> - Drop changes to tools/Makefile since they already use TOOLS_ Kconfigs
> - Use TOOLS_ instead of HOST_
> 
>   common/image-fit-sig.c |  3 ++-
>   common/image-fit.c     |  4 ++--
>   tools/Kconfig          | 25 +++++++++++++++++++++++++
>   3 files changed, 29 insertions(+), 3 deletions(-)
> 
> diff --git a/common/image-fit-sig.c b/common/image-fit-sig.c
> index b979cd2a4b6..e95e64bd2fe 100644
> --- a/common/image-fit-sig.c
> +++ b/common/image-fit-sig.c
> @@ -72,11 +72,12 @@ static int fit_image_setup_verify(struct image_sign_info *info,
>   	char *algo_name;
>   	const char *padding_name;
>   
> +#ifndef USE_HOSTCC
>   	if (fdt_totalsize(fit) > CONFIG_FIT_SIGNATURE_MAX_SIZE) {

If you set CONFIG_FIT_SIGNATURE_MAX_SIZE to 0x10000000, then this 
comparison will always be false.

>   		*err_msgp = "Total size too large";
>   		return 1;
>   	}
> -
> +#endif
>   	if (fit_image_hash_get_algo(fit, noffset, &algo_name)) {
>   		*err_msgp = "Can't get hash algo property";
>   		return -1;
> diff --git a/common/image-fit.c b/common/image-fit.c
> index 6f8e67e4158..17c6d4e7813 100644
> --- a/common/image-fit.c
> +++ b/common/image-fit.c
> @@ -170,7 +170,7 @@ int fit_get_subimage_count(const void *fit, int images_noffset)
>   	return count;
>   }
>   
> -#if CONFIG_IS_ENABLED(FIT_PRINT) || CONFIG_IS_ENABLED(SPL_FIT_PRINT)
> +#if CONFIG_IS_ENABLED(FIT_PRINT)
>   /**
>    * fit_image_print_data() - prints out the hash node details
>    * @fit: pointer to the FIT format image header
> @@ -578,7 +578,7 @@ void fit_image_print(const void *fit, int image_noffset, const char *p)
>   #else
>   void fit_print_contents(const void *fit) { }
>   void fit_image_print(const void *fit, int image_noffset, const char *p) { }
> -#endif /* CONFIG_IS_ENABLED(FIR_PRINT) || CONFIG_IS_ENABLED(SPL_FIT_PRINT) */
> +#endif /* CONFIG_IS_ENABLED(FIT_PRINT) */
>   
>   /**
>    * fit_get_desc - get node description property
> diff --git a/tools/Kconfig b/tools/Kconfig
> index d6f82cd949b..ea986ab0479 100644
> --- a/tools/Kconfig
> +++ b/tools/Kconfig
> @@ -20,4 +20,29 @@ config TOOLS_LIBCRYPTO
>   	  This selection does not affect target features, such as runtime FIT
>   	  signature verification.
>   
> +config TOOLS_FIT
> +config TOOLS_FIT_FULL_CHECK
> +config TOOLS_FIT_PRINT
> +config TOOLS_FIT_SIGNATURE

Besides FIT_PRINT, I'm confused as to where the others are used by the 
tools build.

> +
> +config TOOLS_FIT_SIGNATURE_MAX_SIZE

On the other hand, if you #ifdef out the check in image-fit-sig.c, then 
it doesn't make sense to have this config on the tools.

> +	hex
> +	depends on TOOLS_FIT_SIGNATURE
> +	default 0x10000000
> +
>   endmenu
> 

^ permalink raw reply	[flat|nested] 90+ messages in thread

* Re: [PATCH v5 03/29] image: Add Kconfig options for FIT in the tools build
  2021-09-26  1:43 ` [PATCH v5 03/29] image: Add Kconfig options for FIT in the tools build Simon Glass
  2021-10-05 18:17   ` Alex G.
@ 2021-10-05 18:17   ` Alex G.
  2021-10-09  1:39   ` Tom Rini
  2 siblings, 0 replies; 90+ messages in thread
From: Alex G. @ 2021-10-05 18:17 UTC (permalink / raw)
  To: Simon Glass, U-Boot Mailing List
  Cc: Andre Przywara, Rasmus Villemoes, Robert Marko, Masahiro Yamada,
	Tom Rini, Joe Hershberger, Marek Vasut



On 9/25/21 8:43 PM, Simon Glass wrote:
> In preparation for enabling CONFIG_IS_ENABLED() on the host build, add
> some options to enable the various FIT options expected in these tools.
> This will ensure that the code builds correctly when CONFIG_TOOLS_xxx
> is distinct from CONFIG_xxx.
> 
> Drop some #ifdefs which are immediately unnecessary (many more are in
> later patches).
> 
> Signed-off-by: Simon Glass <sjg@chromium.org>

Under protest,
Reviewed-by: Alexandru Gagniuc <mr.nuke.me@gmail.com>
> ---
> 
> Changes in v5:
> - Drop changes to tools/Makefile since they already use TOOLS_ Kconfigs
> - Use TOOLS_ instead of HOST_
> 
>   common/image-fit-sig.c |  3 ++-
>   common/image-fit.c     |  4 ++--
>   tools/Kconfig          | 25 +++++++++++++++++++++++++
>   3 files changed, 29 insertions(+), 3 deletions(-)
> 
> diff --git a/common/image-fit-sig.c b/common/image-fit-sig.c
> index b979cd2a4b6..e95e64bd2fe 100644
> --- a/common/image-fit-sig.c
> +++ b/common/image-fit-sig.c
> @@ -72,11 +72,12 @@ static int fit_image_setup_verify(struct image_sign_info *info,
>   	char *algo_name;
>   	const char *padding_name;
>   
> +#ifndef USE_HOSTCC
>   	if (fdt_totalsize(fit) > CONFIG_FIT_SIGNATURE_MAX_SIZE) {

If you set CONFIG_FIT_SIGNATURE_MAX_SIZE to 0x10000000, then this 
comparison will always be false.

>   		*err_msgp = "Total size too large";
>   		return 1;
>   	}
> -
> +#endif
>   	if (fit_image_hash_get_algo(fit, noffset, &algo_name)) {
>   		*err_msgp = "Can't get hash algo property";
>   		return -1;
> diff --git a/common/image-fit.c b/common/image-fit.c
> index 6f8e67e4158..17c6d4e7813 100644
> --- a/common/image-fit.c
> +++ b/common/image-fit.c
> @@ -170,7 +170,7 @@ int fit_get_subimage_count(const void *fit, int images_noffset)
>   	return count;
>   }
>   
> -#if CONFIG_IS_ENABLED(FIT_PRINT) || CONFIG_IS_ENABLED(SPL_FIT_PRINT)
> +#if CONFIG_IS_ENABLED(FIT_PRINT)
>   /**
>    * fit_image_print_data() - prints out the hash node details
>    * @fit: pointer to the FIT format image header
> @@ -578,7 +578,7 @@ void fit_image_print(const void *fit, int image_noffset, const char *p)
>   #else
>   void fit_print_contents(const void *fit) { }
>   void fit_image_print(const void *fit, int image_noffset, const char *p) { }
> -#endif /* CONFIG_IS_ENABLED(FIR_PRINT) || CONFIG_IS_ENABLED(SPL_FIT_PRINT) */
> +#endif /* CONFIG_IS_ENABLED(FIT_PRINT) */
>   
>   /**
>    * fit_get_desc - get node description property
> diff --git a/tools/Kconfig b/tools/Kconfig
> index d6f82cd949b..ea986ab0479 100644
> --- a/tools/Kconfig
> +++ b/tools/Kconfig
> @@ -20,4 +20,29 @@ config TOOLS_LIBCRYPTO
>   	  This selection does not affect target features, such as runtime FIT
>   	  signature verification.
>   
> +config TOOLS_FIT
> +config TOOLS_FIT_FULL_CHECK
> +config TOOLS_FIT_PRINT
> +config TOOLS_FIT_SIGNATURE

Besides FIT_PRINT, I'm confused as to where the others are used by the 
tools build.

> +
> +config TOOLS_FIT_SIGNATURE_MAX_SIZE

On the other hand, if you #ifdef out the check in image-fit-sig.c, then 
it doesn't make sense to have this config on the tools.

> +	hex
> +	depends on TOOLS_FIT_SIGNATURE
> +	default 0x10000000
> +
>   endmenu
> 

^ permalink raw reply	[flat|nested] 90+ messages in thread

* Re: [PATCH v5 04/29] spl: cypto: Bring back SPL_ versions of SHA
  2021-09-26  1:43 ` [PATCH v5 04/29] spl: cypto: Bring back SPL_ versions of SHA Simon Glass
@ 2021-10-05 18:19   ` Alex G.
  2021-10-09  1:39   ` Tom Rini
  1 sibling, 0 replies; 90+ messages in thread
From: Alex G. @ 2021-10-05 18:19 UTC (permalink / raw)
  To: Simon Glass, U-Boot Mailing List
  Cc: Andre Przywara, Rasmus Villemoes, Robert Marko, Masahiro Yamada,
	Tom Rini

On 9/25/21 8:43 PM, Simon Glass wrote:
> Unfortunately these were removed by mistake. This means that adding hash
> support to SPL brings in all software algorithms, with a substantial
> increase in code size.
> 
> The origin of the problem was renaming them to SPL_FIT_xxx and then these
> were removed altogether in a later commit.
> 
> Add them back. This aligns with CONFIG_MD5, for example, which has an SPL
> variant.
> 
> Signed-off-by: Simon Glass <sjg@chromium.org>
> Fixes: f5bc9c25f31 ("image: Rename SPL_SHAxxx_SUPPORT to SPL_FIT_SHAxxx")
> Fixes: eb5171ddec9 ("common: Remove unused CONFIG_FIT_SHAxxx selectors")

Reviewed-by: Alexandru Gagniuc <mr.nuke.me@gmail.com>

I don't think these ever worked as intended. I had issues disabling SHA1 
in SPL before either of the suspect patches were merged.

> ---
> For now this has no effect but the next patch updates hash.c to deal with
> this condition for both SPL and tools.
> 
> Changes in v5:
> - Add new patch to bring back SPL_ versions of SHA
> 
>   lib/Kconfig | 43 ++++++++++++++++++++++++++++++++++++++++++-
>   1 file changed, 42 insertions(+), 1 deletion(-)
> 
> diff --git a/lib/Kconfig b/lib/Kconfig
> index 034af724b5d..7899e756f99 100644
> --- a/lib/Kconfig
> +++ b/lib/Kconfig
> @@ -373,7 +373,6 @@ config SHA256
>   	  The SHA256 algorithm produces a 256-bit (32-byte) hash value
>   	  (digest).
>   
> -
>   config SHA512
>   	bool "Enable SHA512 support"
>   	help
> @@ -399,6 +398,48 @@ config SHA_HW_ACCEL
>   	  hashing algorithms. This affects the 'hash' command and also the
>   	  hash_lookup_algo() function.
>   
> +if SPL
> +
> +config SPL_SHA1
> +	bool "Enable SHA1 support in SPL"
> +	default y if SHA1
> +	help
> +	  This option enables support of hashing using SHA1 algorithm.
> +	  The hash is calculated in software.
> +	  The SHA1 algorithm produces a 160-bit (20-byte) hash value
> +	  (digest).
> +
> +config SPL_SHA256
> +	bool "Enable SHA256 support in SPL"
> +	default y if SHA256
> +	help
> +	  This option enables support of hashing using SHA256 algorithm.
> +	  The hash is calculated in software.
> +	  The SHA256 algorithm produces a 256-bit (32-byte) hash value
> +	  (digest).
> +
> +config SPL_SHA512
> +	bool "Enable SHA512 support in SPL"
> +	default y if SHA512
> +	help
> +	  This option enables support of hashing using SHA512 algorithm.
> +	  The hash is calculated in software.
> +	  The SHA512 algorithm produces a 512-bit (64-byte) hash value
> +	  (digest).
> +
> +config SPL_SHA384
> +	bool "Enable SHA384 support in SPL"
> +	default y if SHA384
> +	select SPL_SHA512
> +	help
> +	  This option enables support of hashing using SHA384 algorithm.
> +	  The hash is calculated in software. This is also selects SHA512,
> +	  because these implementations share the bulk of the code..
> +	  The SHA384 algorithm produces a 384-bit (48-byte) hash value
> +	  (digest).
> +
> +endif
> +
>   if SHA_HW_ACCEL
>   
>   config SHA512_HW_ACCEL
> 

^ permalink raw reply	[flat|nested] 90+ messages in thread

* Re: [PATCH v5 05/29] hash: Use Kconfig to enable hashing in host tools and SPL
  2021-09-26  1:43 ` [PATCH v5 05/29] hash: Use Kconfig to enable hashing in host tools and SPL Simon Glass
  2021-09-27 15:53   ` Alex G.
@ 2021-10-05 18:21   ` Alex G.
  2021-10-09  1:39   ` Tom Rini
  2 siblings, 0 replies; 90+ messages in thread
From: Alex G. @ 2021-10-05 18:21 UTC (permalink / raw)
  To: Simon Glass, U-Boot Mailing List
  Cc: Andre Przywara, Rasmus Villemoes, Robert Marko, Masahiro Yamada,
	Tom Rini, Joe Hershberger



On 9/25/21 8:43 PM, Simon Glass wrote:
> At present when building host tools, we force CONFIG_SHAxxx to be enabled
> regardless of the board Kconfig setting. This is done in the image.h
> header file.
> 
> For SPL we currently just assume the algorithm is desired if U-Boot proper
> enables it.
> 
> Clean this up by adding new Kconfig options to enable hashing on the host,
> relying on CONFIG_IS_ENABLED() to deal with the different builds.
> 
> Add new SPL Kconfigs for hardware-accelerated hashing, to maintain the
> current settings.
> 
> This allows us to drop the image.h code and the I_WANT_MD5 hack.
> 
> Signed-off-by: Simon Glass <sjg@chromium.org>

Reviewed-by: Alexandru Gagniuc <mr.nuke.me@gmail.com>

> ---
> 
> Changes in v5:
> - Drop I_WANT_MD5
> - Use TOOLS_ instead of HOST_
> 
> Changes in v2:
> - Add SPL_ Kconfigs also, since otherwise hashing algorithms drop from SPL
> 
>   common/hash.c   | 49 +++++++++++++++++++++++--------------------------
>   include/image.h |  5 -----
>   lib/Kconfig     | 18 ++++++++++++++++++
>   tools/Kconfig   | 25 +++++++++++++++++++++++++
>   4 files changed, 66 insertions(+), 31 deletions(-)
> 
> diff --git a/common/hash.c b/common/hash.c
> index 6277fe65b3e..0fe65c959d0 100644
> --- a/common/hash.c
> +++ b/common/hash.c
> @@ -25,6 +25,7 @@
>   #else
>   #include "mkimage.h"
>   #include <time.h>
> +#include <linux/kconfig.h>
>   #endif /* !USE_HOSTCC*/
>   
>   #include <hash.h>
> @@ -41,7 +42,7 @@ DECLARE_GLOBAL_DATA_PTR;
>   
>   static void reloc_update(void);
>   
> -#if defined(CONFIG_SHA1) && !defined(CONFIG_SHA_PROG_HW_ACCEL)
> +#if CONFIG_IS_ENABLED(SHA1) && !CONFIG_IS_ENABLED(SHA_PROG_HW_ACCEL)
>   static int hash_init_sha1(struct hash_algo *algo, void **ctxp)
>   {
>   	sha1_context *ctx = malloc(sizeof(sha1_context));
> @@ -69,7 +70,7 @@ static int hash_finish_sha1(struct hash_algo *algo, void *ctx, void *dest_buf,
>   }
>   #endif

One day, I'd like to make these init_<hasnmane>_ functions part of 
linker lists and move each to their respective <hashname>.c

One day.

>   
> -#if defined(CONFIG_SHA256) && !defined(CONFIG_SHA_PROG_HW_ACCEL)
> +#if CONFIG_IS_ENABLED(SHA256) && !CONFIG_IS_ENABLED(SHA_PROG_HW_ACCEL)
>   static int hash_init_sha256(struct hash_algo *algo, void **ctxp)
>   {
>   	sha256_context *ctx = malloc(sizeof(sha256_context));
> @@ -97,7 +98,7 @@ static int hash_finish_sha256(struct hash_algo *algo, void *ctx, void
>   }
>   #endif
>   
> -#if defined(CONFIG_SHA384) && !defined(CONFIG_SHA_PROG_HW_ACCEL)
> +#if CONFIG_IS_ENABLED(SHA384) && !CONFIG_IS_ENABLED(SHA_PROG_HW_ACCEL)
>   static int hash_init_sha384(struct hash_algo *algo, void **ctxp)
>   {
>   	sha512_context *ctx = malloc(sizeof(sha512_context));
> @@ -125,7 +126,7 @@ static int hash_finish_sha384(struct hash_algo *algo, void *ctx, void
>   }
>   #endif
>   
> -#if defined(CONFIG_SHA512) && !defined(CONFIG_SHA_PROG_HW_ACCEL)
> +#if CONFIG_IS_ENABLED(SHA512) && !CONFIG_IS_ENABLED(SHA_PROG_HW_ACCEL)
>   static int hash_init_sha512(struct hash_algo *algo, void **ctxp)
>   {
>   	sha512_context *ctx = malloc(sizeof(sha512_context));
> @@ -207,18 +208,13 @@ static int hash_finish_crc32(struct hash_algo *algo, void *ctx, void *dest_buf,
>   	return 0;
>   }
>   
> -#ifdef USE_HOSTCC
> -# define I_WANT_MD5	1
> -#else
> -# define I_WANT_MD5	CONFIG_IS_ENABLED(MD5)
> -#endif
>   /*
>    * These are the hash algorithms we support.  If we have hardware acceleration
>    * is enable we will use that, otherwise a software version of the algorithm.
>    * Note that algorithm names must be in lower case.
>    */
>   static struct hash_algo hash_algo[] = {
> -#if I_WANT_MD5
> +#if CONFIG_IS_ENABLED(MD5)
>   	{
>   		.name		= "md5",
>   		.digest_size	= MD5_SUM_LEN,
> @@ -226,17 +222,17 @@ static struct hash_algo hash_algo[] = {
>   		.hash_func_ws	= md5_wd,
>   	},
>   #endif
> -#ifdef CONFIG_SHA1
> +#if CONFIG_IS_ENABLED(SHA1)
>   	{
>   		.name 		= "sha1",
>   		.digest_size	= SHA1_SUM_LEN,
>   		.chunk_size	= CHUNKSZ_SHA1,
> -#ifdef CONFIG_SHA_HW_ACCEL
> +#if CONFIG_IS_ENABLED(SHA_HW_ACCEL)
>   		.hash_func_ws	= hw_sha1,
>   #else
>   		.hash_func_ws	= sha1_csum_wd,
>   #endif
> -#ifdef CONFIG_SHA_PROG_HW_ACCEL
> +#if CONFIG_IS_ENABLED(SHA_PROG_HW_ACCEL)
>   		.hash_init	= hw_sha_init,
>   		.hash_update	= hw_sha_update,
>   		.hash_finish	= hw_sha_finish,
> @@ -247,17 +243,17 @@ static struct hash_algo hash_algo[] = {
>   #endif
>   	},
>   #endif
> -#ifdef CONFIG_SHA256
> +#if CONFIG_IS_ENABLED(SHA256)
>   	{
>   		.name		= "sha256",
>   		.digest_size	= SHA256_SUM_LEN,
>   		.chunk_size	= CHUNKSZ_SHA256,
> -#ifdef CONFIG_SHA_HW_ACCEL
> +#if CONFIG_IS_ENABLED(SHA_HW_ACCEL)
>   		.hash_func_ws	= hw_sha256,
>   #else
>   		.hash_func_ws	= sha256_csum_wd,
>   #endif
> -#ifdef CONFIG_SHA_PROG_HW_ACCEL
> +#if CONFIG_IS_ENABLED(SHA_PROG_HW_ACCEL)
>   		.hash_init	= hw_sha_init,
>   		.hash_update	= hw_sha_update,
>   		.hash_finish	= hw_sha_finish,
> @@ -268,17 +264,17 @@ static struct hash_algo hash_algo[] = {
>   #endif
>   	},
>   #endif
> -#ifdef CONFIG_SHA384
> +#if CONFIG_IS_ENABLED(SHA384)
>   	{
>   		.name		= "sha384",
>   		.digest_size	= SHA384_SUM_LEN,
>   		.chunk_size	= CHUNKSZ_SHA384,
> -#ifdef CONFIG_SHA512_HW_ACCEL
> +#if CONFIG_IS_ENABLED(SHA512_HW_ACCEL)
>   		.hash_func_ws	= hw_sha384,
>   #else
>   		.hash_func_ws	= sha384_csum_wd,
>   #endif
> -#if defined(CONFIG_SHA512_HW_ACCEL) && defined(CONFIG_SHA_PROG_HW_ACCEL)
> +#if CONFIG_IS_ENABLED(SHA512_HW_ACCEL) && CONFIG_IS_ENABLED(SHA_PROG_HW_ACCEL)
>   		.hash_init	= hw_sha_init,
>   		.hash_update	= hw_sha_update,
>   		.hash_finish	= hw_sha_finish,
> @@ -289,17 +285,17 @@ static struct hash_algo hash_algo[] = {
>   #endif
>   	},
>   #endif
> -#ifdef CONFIG_SHA512
> +#if CONFIG_IS_ENABLED(SHA512)
>   	{
>   		.name		= "sha512",
>   		.digest_size	= SHA512_SUM_LEN,
>   		.chunk_size	= CHUNKSZ_SHA512,
> -#ifdef CONFIG_SHA512_HW_ACCEL
> +#if CONFIG_IS_ENABLED(SHA512_HW_ACCEL)
>   		.hash_func_ws	= hw_sha512,
>   #else
>   		.hash_func_ws	= sha512_csum_wd,
>   #endif
> -#if defined(CONFIG_SHA512_HW_ACCEL) && defined(CONFIG_SHA_PROG_HW_ACCEL)
> +#if CONFIG_IS_ENABLED(SHA512_HW_ACCEL) && CONFIG_IS_ENABLED(SHA_PROG_HW_ACCEL)
>   		.hash_init	= hw_sha_init,
>   		.hash_update	= hw_sha_update,
>   		.hash_finish	= hw_sha_finish,
> @@ -331,9 +327,9 @@ static struct hash_algo hash_algo[] = {
>   };
>   
>   /* Try to minimize code size for boards that don't want much hashing */
> -#if defined(CONFIG_SHA256) || defined(CONFIG_CMD_SHA1SUM) || \
> -	defined(CONFIG_CRC32_VERIFY) || defined(CONFIG_CMD_HASH) || \
> -	defined(CONFIG_SHA384) || defined(CONFIG_SHA512)
> +#if CONFIG_IS_ENABLED(SHA256) || CONFIG_IS_ENABLED(CMD_SHA1SUM) || \
> +	CONFIG_IS_ENABLED(CRC32_VERIFY) || CONFIG_IS_ENABLED(CMD_HASH) || \
> +	CONFIG_IS_ENABLED(SHA384) || CONFIG_IS_ENABLED(SHA512)
>   #define multi_hash()	1
>   #else
>   #define multi_hash()	0
> @@ -438,7 +434,8 @@ int hash_block(const char *algo_name, const void *data, unsigned int len,
>   	return 0;
>   }
>   
> -#if defined(CONFIG_CMD_HASH) || defined(CONFIG_CMD_SHA1SUM) || defined(CONFIG_CMD_CRC32)
> +#if !defined(CONFIG_SPL_BUILD) && (defined(CONFIG_CMD_HASH) || \
> +	defined(CONFIG_CMD_SHA1SUM) || defined(CONFIG_CMD_CRC32))
>   /**
>    * store_result: Store the resulting sum to an address or variable
>    *
> diff --git a/include/image.h b/include/image.h
> index 73a763a6936..03857f4b500 100644
> --- a/include/image.h
> +++ b/include/image.h
> @@ -31,11 +31,6 @@ struct fdt_region;
>   #define IMAGE_ENABLE_OF_LIBFDT	1
>   #define CONFIG_FIT_VERBOSE	1 /* enable fit_format_{error,warning}() */
>   #define CONFIG_FIT_RSASSA_PSS 1
> -#define CONFIG_MD5
> -#define CONFIG_SHA1
> -#define CONFIG_SHA256
> -#define CONFIG_SHA384
> -#define CONFIG_SHA512
>   
>   #define IMAGE_ENABLE_IGNORE	0
>   #define IMAGE_INDENT_STRING	""
> diff --git a/lib/Kconfig b/lib/Kconfig
> index 7899e756f99..64765acfa61 100644
> --- a/lib/Kconfig
> +++ b/lib/Kconfig
> @@ -438,6 +438,24 @@ config SPL_SHA384
>   	  The SHA384 algorithm produces a 384-bit (48-byte) hash value
>   	  (digest).
>   
> +config SPL_SHA_HW_ACCEL
> +	bool "Enable hardware acceleration for SHA hash functions"
> +	default y if SHA_HW_ACCEL
> +	help
> +	  This option enables hardware acceleration for the SHA1 and SHA256
> +	  hashing algorithms. This affects the 'hash' command and also the
> +	  hash_lookup_algo() function.
> +
> +config SPL_SHA_PROG_HW_ACCEL
> +	bool "Enable Progressive hashing support using hardware in SPL"
> +	depends on SHA_PROG_HW_ACCEL
> +	default y
> +	help
> +	  This option enables hardware-acceleration for SHA progressive
> +	  hashing.
> +	  Data can be streamed in a block at a time and the hashing is
> +	  performed in hardware.
> +
>   endif
>   
>   if SHA_HW_ACCEL
> diff --git a/tools/Kconfig b/tools/Kconfig
> index ea986ab0479..6ffc2c0aa31 100644
> --- a/tools/Kconfig
> +++ b/tools/Kconfig
> @@ -45,4 +45,29 @@ config TOOLS_FIT_SIGNATURE_MAX_SIZE
>   	depends on TOOLS_FIT_SIGNATURE
>   	default 0x10000000
>   
> +config TOOLS_MD5
> +	def_bool y
> +	help
> +	  Enable MD5 support in the tools builds
> +
> +config TOOLS_SHA1
> +	def_bool y
> +	help
> +	  Enable SHA1 support in the tools builds
> +
> +config TOOLS_SHA256
> +	def_bool y
> +	help
> +	  Enable SHA256 support in the tools builds
> +
> +config TOOLS_SHA384
> +	def_bool y
> +	help
> +	  Enable SHA384 support in the tools builds
> +
> +config TOOLS_SHA512
> +	def_bool y
> +	help
> +	  Enable SHA512 support in the tools builds
> +
>   endmenu
> 

^ permalink raw reply	[flat|nested] 90+ messages in thread

* Re: [PATCH v5 06/29] hash: Drop some #ifdefs in hash.c
  2021-09-26  1:43 ` [PATCH v5 06/29] hash: Drop some #ifdefs in hash.c Simon Glass
@ 2021-10-05 18:24   ` Alex G.
  2021-10-09  1:39   ` Tom Rini
  1 sibling, 0 replies; 90+ messages in thread
From: Alex G. @ 2021-10-05 18:24 UTC (permalink / raw)
  To: Simon Glass, U-Boot Mailing List
  Cc: Andre Przywara, Rasmus Villemoes, Robert Marko, Masahiro Yamada,
	Tom Rini, Joe Hershberger



On 9/25/21 8:43 PM, Simon Glass wrote:
> We can use the __maybe_unused attribute to avoid some of the #ifdefs in
> this file. Update the functions accordingly.
> 
> Note: The actual hashing interface is still a mess, with four separate
> combinations and lots of #ifdefs. This should really use a driver
> approach, e.g. as is done with partition drivers.
> 
> Signed-off-by: Simon Glass <sjg@chromium.org>
> ---
> 

I'm not too excited about a qualifier that maybe tells me something 
about the function.

Assuming we move these to linker lists in the near (not far) future,
Reviewed-by: Alexandru Gagniuc <mr.nuke.me@gmail.com>


> Changes in v5:
> - Rebase to next
> 
>   common/hash.c | 54 ++++++++++++++++++++++++---------------------------
>   1 file changed, 25 insertions(+), 29 deletions(-)
> 
> diff --git a/common/hash.c b/common/hash.c
> index 0fe65c959d0..e92f9a9594f 100644
> --- a/common/hash.c
> +++ b/common/hash.c
> @@ -24,6 +24,7 @@
>   #include <u-boot/crc.h>
>   #else
>   #include "mkimage.h"
> +#include <linux/compiler_attributes.h>
>   #include <time.h>
>   #include <linux/kconfig.h>
>   #endif /* !USE_HOSTCC*/
> @@ -42,8 +43,7 @@ DECLARE_GLOBAL_DATA_PTR;
>   
>   static void reloc_update(void);
>   
> -#if CONFIG_IS_ENABLED(SHA1) && !CONFIG_IS_ENABLED(SHA_PROG_HW_ACCEL)
> -static int hash_init_sha1(struct hash_algo *algo, void **ctxp)
> +static int __maybe_unused hash_init_sha1(struct hash_algo *algo, void **ctxp)
>   {
>   	sha1_context *ctx = malloc(sizeof(sha1_context));
>   	sha1_starts(ctx);
> @@ -51,15 +51,16 @@ static int hash_init_sha1(struct hash_algo *algo, void **ctxp)
>   	return 0;
>   }
>   
> -static int hash_update_sha1(struct hash_algo *algo, void *ctx, const void *buf,
> -			    unsigned int size, int is_last)
> +static int __maybe_unused hash_update_sha1(struct hash_algo *algo, void *ctx,
> +					   const void *buf, unsigned int size,
> +					   int is_last)
>   {
>   	sha1_update((sha1_context *)ctx, buf, size);
>   	return 0;
>   }
>   
> -static int hash_finish_sha1(struct hash_algo *algo, void *ctx, void *dest_buf,
> -			    int size)
> +static int __maybe_unused hash_finish_sha1(struct hash_algo *algo, void *ctx,
> +					   void *dest_buf, int size)
>   {
>   	if (size < algo->digest_size)
>   		return -1;
> @@ -68,10 +69,8 @@ static int hash_finish_sha1(struct hash_algo *algo, void *ctx, void *dest_buf,
>   	free(ctx);
>   	return 0;
>   }
> -#endif
>   
> -#if CONFIG_IS_ENABLED(SHA256) && !CONFIG_IS_ENABLED(SHA_PROG_HW_ACCEL)
> -static int hash_init_sha256(struct hash_algo *algo, void **ctxp)
> +static int __maybe_unused hash_init_sha256(struct hash_algo *algo, void **ctxp)
>   {
>   	sha256_context *ctx = malloc(sizeof(sha256_context));
>   	sha256_starts(ctx);
> @@ -79,15 +78,16 @@ static int hash_init_sha256(struct hash_algo *algo, void **ctxp)
>   	return 0;
>   }
>   
> -static int hash_update_sha256(struct hash_algo *algo, void *ctx,
> -			      const void *buf, unsigned int size, int is_last)
> +static int __maybe_unused hash_update_sha256(struct hash_algo *algo, void *ctx,
> +					     const void *buf, uint size,
> +					     int is_last)
>   {
>   	sha256_update((sha256_context *)ctx, buf, size);
>   	return 0;
>   }
>   
> -static int hash_finish_sha256(struct hash_algo *algo, void *ctx, void
> -			      *dest_buf, int size)
> +static int __maybe_unused hash_finish_sha256(struct hash_algo *algo, void *ctx,
> +					     void *dest_buf, int size)
>   {
>   	if (size < algo->digest_size)
>   		return -1;
> @@ -96,10 +96,8 @@ static int hash_finish_sha256(struct hash_algo *algo, void *ctx, void
>   	free(ctx);
>   	return 0;
>   }
> -#endif
>   
> -#if CONFIG_IS_ENABLED(SHA384) && !CONFIG_IS_ENABLED(SHA_PROG_HW_ACCEL)
> -static int hash_init_sha384(struct hash_algo *algo, void **ctxp)
> +static int __maybe_unused hash_init_sha384(struct hash_algo *algo, void **ctxp)
>   {
>   	sha512_context *ctx = malloc(sizeof(sha512_context));
>   	sha384_starts(ctx);
> @@ -107,15 +105,16 @@ static int hash_init_sha384(struct hash_algo *algo, void **ctxp)
>   	return 0;
>   }
>   
> -static int hash_update_sha384(struct hash_algo *algo, void *ctx,
> -			      const void *buf, unsigned int size, int is_last)
> +static int __maybe_unused hash_update_sha384(struct hash_algo *algo, void *ctx,
> +					     const void *buf, uint size,
> +					     int is_last)
>   {
>   	sha384_update((sha512_context *)ctx, buf, size);
>   	return 0;
>   }
>   
> -static int hash_finish_sha384(struct hash_algo *algo, void *ctx, void
> -			      *dest_buf, int size)
> +static int __maybe_unused hash_finish_sha384(struct hash_algo *algo, void *ctx,
> +					     void *dest_buf, int size)
>   {
>   	if (size < algo->digest_size)
>   		return -1;
> @@ -124,10 +123,8 @@ static int hash_finish_sha384(struct hash_algo *algo, void *ctx, void
>   	free(ctx);
>   	return 0;
>   }
> -#endif
>   
> -#if CONFIG_IS_ENABLED(SHA512) && !CONFIG_IS_ENABLED(SHA_PROG_HW_ACCEL)
> -static int hash_init_sha512(struct hash_algo *algo, void **ctxp)
> +static int __maybe_unused hash_init_sha512(struct hash_algo *algo, void **ctxp)
>   {
>   	sha512_context *ctx = malloc(sizeof(sha512_context));
>   	sha512_starts(ctx);
> @@ -135,15 +132,16 @@ static int hash_init_sha512(struct hash_algo *algo, void **ctxp)
>   	return 0;
>   }
>   
> -static int hash_update_sha512(struct hash_algo *algo, void *ctx,
> -			      const void *buf, unsigned int size, int is_last)
> +static int __maybe_unused hash_update_sha512(struct hash_algo *algo, void *ctx,
> +					     const void *buf, uint size,
> +					     int is_last)
>   {
>   	sha512_update((sha512_context *)ctx, buf, size);
>   	return 0;
>   }
>   
> -static int hash_finish_sha512(struct hash_algo *algo, void *ctx, void
> -			      *dest_buf, int size)
> +static int __maybe_unused hash_finish_sha512(struct hash_algo *algo, void *ctx,
> +					     void *dest_buf, int size)
>   {
>   	if (size < algo->digest_size)
>   		return -1;
> @@ -152,8 +150,6 @@ static int hash_finish_sha512(struct hash_algo *algo, void *ctx, void
>   	free(ctx);
>   	return 0;
>   }
> -#endif
> -
>   
>   static int hash_init_crc16_ccitt(struct hash_algo *algo, void **ctxp)
>   {
> 

^ permalink raw reply	[flat|nested] 90+ messages in thread

* Re: [PATCH v5 07/29] image: Drop IMAGE_ENABLE_FIT
  2021-09-26  1:43 ` [PATCH v5 07/29] image: Drop IMAGE_ENABLE_FIT Simon Glass
@ 2021-10-05 18:26   ` Alex G.
  2021-10-09  1:39   ` Tom Rini
  1 sibling, 0 replies; 90+ messages in thread
From: Alex G. @ 2021-10-05 18:26 UTC (permalink / raw)
  To: Simon Glass, U-Boot Mailing List
  Cc: Andre Przywara, Rasmus Villemoes, Robert Marko, Masahiro Yamada,
	Tom Rini, Joe Hershberger, Marek Vasut

On 9/25/21 8:43 PM, Simon Glass wrote:
> Make use of the host Kconfig for FIT. With this we can use
> CONFIG_IS_ENABLED(FIT) directly in the host build, so drop the unnecessary
> indirection.
> 
> Signed-off-by: Simon Glass <sjg@chromium.org>

Reviewed-by: Alexandru Gagniuc <mr.nuke.me@gmail.com>

> ---
> 
> Changes in v5:
> - Rebase to next
> 
>   arch/arm/mach-imx/hab.c |  2 +-
>   common/bootm.c          | 10 +++++-----
>   common/image-board.c    | 16 ++++++++--------
>   common/image.c          |  2 +-
>   include/fdt_support.h   |  2 +-
>   include/image.h         | 17 ++++++++---------
>   6 files changed, 24 insertions(+), 25 deletions(-)
> 
> diff --git a/arch/arm/mach-imx/hab.c b/arch/arm/mach-imx/hab.c
> index cc39e6bf569..55317abba23 100644
> --- a/arch/arm/mach-imx/hab.c
> +++ b/arch/arm/mach-imx/hab.c
> @@ -591,7 +591,7 @@ static ulong get_image_ivt_offset(ulong img_addr)
>   		return (image_get_image_size((image_header_t *)img_addr)
>   			+ 0x1000 - 1)  & ~(0x1000 - 1);
>   #endif
> -#if IMAGE_ENABLE_FIT
> +#if CONFIG_IS_ENABLED(FIT)
>   	case IMAGE_FORMAT_FIT:
>   		return (fit_get_size(buf) + 0x1000 - 1)  & ~(0x1000 - 1);
>   #endif
> diff --git a/common/bootm.c b/common/bootm.c
> index fe17d1da9e5..8d614fe140e 100644
> --- a/common/bootm.c
> +++ b/common/bootm.c
> @@ -115,7 +115,7 @@ static int bootm_find_os(struct cmd_tbl *cmdtp, int flag, int argc,
>   		images.os.arch = image_get_arch(os_hdr);
>   		break;
>   #endif
> -#if IMAGE_ENABLE_FIT
> +#if CONFIG_IS_ENABLED(FIT)
>   	case IMAGE_FORMAT_FIT:
>   		if (fit_image_get_type(images.fit_hdr_os,
>   				       images.fit_noffset_os,
> @@ -187,7 +187,7 @@ static int bootm_find_os(struct cmd_tbl *cmdtp, int flag, int argc,
>   		/* Kernel entry point is the setup.bin */
>   	} else if (images.legacy_hdr_valid) {
>   		images.ep = image_get_ep(&images.legacy_hdr_os_copy);
> -#if IMAGE_ENABLE_FIT
> +#if CONFIG_IS_ENABLED(FIT)
>   	} else if (images.fit_uname_os) {
>   		int ret;
>   
> @@ -295,7 +295,7 @@ int bootm_find_images(int flag, int argc, char *const argv[], ulong start,
>   		set_working_fdt_addr(map_to_sysmem(images.ft_addr));
>   #endif
>   
> -#if IMAGE_ENABLE_FIT
> +#if CONFIG_IS_ENABLED(FIT)
>   	if (IS_ENABLED(CONFIG_FPGA)) {
>   		/* find bitstreams */
>   		ret = boot_get_fpga(argc, argv, &images, IH_ARCH_DEFAULT,
> @@ -858,7 +858,7 @@ static const void *boot_get_kernel(struct cmd_tbl *cmdtp, int flag, int argc,
>   	const void *buf;
>   	const char	*fit_uname_config = NULL;
>   	const char	*fit_uname_kernel = NULL;
> -#if IMAGE_ENABLE_FIT
> +#if CONFIG_IS_ENABLED(FIT)
>   	int		os_noffset;
>   #endif
>   
> @@ -916,7 +916,7 @@ static const void *boot_get_kernel(struct cmd_tbl *cmdtp, int flag, int argc,
>   		bootstage_mark(BOOTSTAGE_ID_DECOMP_IMAGE);
>   		break;
>   #endif
> -#if IMAGE_ENABLE_FIT
> +#if CONFIG_IS_ENABLED(FIT)
>   	case IMAGE_FORMAT_FIT:
>   		os_noffset = fit_image_load(images, img_addr,
>   				&fit_uname_kernel, &fit_uname_config,
> diff --git a/common/image-board.c b/common/image-board.c
> index c13d0493ca3..c699232ba13 100644
> --- a/common/image-board.c
> +++ b/common/image-board.c
> @@ -282,7 +282,7 @@ int genimg_get_format(const void *img_addr)
>   	if (image_check_magic(hdr))
>   		return IMAGE_FORMAT_LEGACY;
>   #endif
> -#if IMAGE_ENABLE_FIT || IMAGE_ENABLE_OF_LIBFDT
> +#if CONFIG_IS_ENABLED(FIT) || IMAGE_ENABLE_OF_LIBFDT
>   	if (fdt_check_header(img_addr) == 0)
>   		return IMAGE_FORMAT_FIT;
>   #endif
> @@ -307,7 +307,7 @@ int genimg_get_format(const void *img_addr)
>    */
>   int genimg_has_config(bootm_headers_t *images)
>   {
> -#if IMAGE_ENABLE_FIT
> +#if CONFIG_IS_ENABLED(FIT)
>   	if (images->fit_uname_cfg)
>   		return 1;
>   #endif
> @@ -348,7 +348,7 @@ int boot_get_ramdisk(int argc, char *const argv[], bootm_headers_t *images,
>   #ifdef CONFIG_SUPPORT_RAW_INITRD
>   	char *end;
>   #endif
> -#if IMAGE_ENABLE_FIT
> +#if CONFIG_IS_ENABLED(FIT)
>   	const char	*fit_uname_config = images->fit_uname_cfg;
>   	const char	*fit_uname_ramdisk = NULL;
>   	ulong		default_addr;
> @@ -380,7 +380,7 @@ int boot_get_ramdisk(int argc, char *const argv[], bootm_headers_t *images,
>   		rd_len = 0;
>   		rd_data = 0;
>   	} else if (select || genimg_has_config(images)) {
> -#if IMAGE_ENABLE_FIT
> +#if CONFIG_IS_ENABLED(FIT)
>   		if (select) {
>   			/*
>   			 * If the init ramdisk comes from the FIT image and
> @@ -409,7 +409,7 @@ int boot_get_ramdisk(int argc, char *const argv[], bootm_headers_t *images,
>   				debug("*  ramdisk: cmdline image address = 0x%08lx\n",
>   				      rd_addr);
>   			}
> -#if IMAGE_ENABLE_FIT
> +#if CONFIG_IS_ENABLED(FIT)
>   		} else {
>   			/* use FIT configuration provided in first bootm
>   			 * command argument. If the property is not defined,
> @@ -450,7 +450,7 @@ int boot_get_ramdisk(int argc, char *const argv[], bootm_headers_t *images,
>   			rd_load = image_get_load(rd_hdr);
>   			break;
>   #endif
> -#if IMAGE_ENABLE_FIT
> +#if CONFIG_IS_ENABLED(FIT)
>   		case IMAGE_FORMAT_FIT:
>   			rd_noffset = fit_image_load(images,
>   						    rd_addr, &fit_uname_ramdisk,
> @@ -623,14 +623,14 @@ error:
>   int boot_get_setup(bootm_headers_t *images, u8 arch,
>   		   ulong *setup_start, ulong *setup_len)
>   {
> -#if IMAGE_ENABLE_FIT
> +#if CONFIG_IS_ENABLED(FIT)
>   	return boot_get_setup_fit(images, arch, setup_start, setup_len);
>   #else
>   	return -ENOENT;
>   #endif
>   }
>   
> -#if IMAGE_ENABLE_FIT
> +#if CONFIG_IS_ENABLED(FIT)
>   #if defined(CONFIG_FPGA)
>   int boot_get_fpga(int argc, char *const argv[], bootm_headers_t *images,
>   		  u8 arch, const ulong *ld_start, ulong * const ld_len)
> diff --git a/common/image.c b/common/image.c
> index 66685b4ba99..59b5e70ccae 100644
> --- a/common/image.c
> +++ b/common/image.c
> @@ -18,7 +18,7 @@
>   #include <status_led.h>
>   #endif
>   
> -#if IMAGE_ENABLE_FIT || IMAGE_ENABLE_OF_LIBFDT
> +#if CONFIG_IS_ENABLED(FIT) || IMAGE_ENABLE_OF_LIBFDT
>   #include <linux/libfdt.h>
>   #include <fdt_support.h>
>   #endif
> diff --git a/include/fdt_support.h b/include/fdt_support.h
> index f6f46bb8e9c..48d0ff0ad3c 100644
> --- a/include/fdt_support.h
> +++ b/include/fdt_support.h
> @@ -7,7 +7,7 @@
>   #ifndef __FDT_SUPPORT_H
>   #define __FDT_SUPPORT_H
>   
> -#ifdef CONFIG_OF_LIBFDT
> +#if !defined(USE_HOSTCC) && defined(CONFIG_OF_LIBFDT)
>   
>   #include <asm/u-boot.h>
>   #include <linux/libfdt.h>
> diff --git a/include/image.h b/include/image.h
> index 03857f4b500..6c229212cb1 100644
> --- a/include/image.h
> +++ b/include/image.h
> @@ -25,9 +25,9 @@ struct fdt_region;
>   
>   #ifdef USE_HOSTCC
>   #include <sys/types.h>
> +#include <linux/kconfig.h>
>   
>   /* new uImage format support enabled on host */
> -#define IMAGE_ENABLE_FIT	1
>   #define IMAGE_ENABLE_OF_LIBFDT	1
>   #define CONFIG_FIT_VERBOSE	1 /* enable fit_format_{error,warning}() */
>   #define CONFIG_FIT_RSASSA_PSS 1
> @@ -46,16 +46,15 @@ struct fdt_region;
>   #define IMAGE_ENABLE_IGNORE	1
>   #define IMAGE_INDENT_STRING	"   "
>   
> -#define IMAGE_ENABLE_FIT	CONFIG_IS_ENABLED(FIT)
>   #define IMAGE_ENABLE_OF_LIBFDT	CONFIG_IS_ENABLED(OF_LIBFDT)
>   
>   #endif /* USE_HOSTCC */
>   
> -#if IMAGE_ENABLE_FIT
> +#if CONFIG_IS_ENABLED(FIT)
>   #include <hash.h>
>   #include <linux/libfdt.h>
>   #include <fdt_support.h>
> -#endif /* IMAGE_ENABLE_FIT */
> +#endif /* FIT */
>   
>   #ifdef CONFIG_SYS_BOOT_GET_CMDLINE
>   # define IMAGE_BOOT_GET_CMDLINE		1
> @@ -328,7 +327,7 @@ typedef struct bootm_headers {
>   	image_header_t	legacy_hdr_os_copy;	/* header copy */
>   	ulong		legacy_hdr_valid;
>   
> -#if IMAGE_ENABLE_FIT
> +#if CONFIG_IS_ENABLED(FIT)
>   	const char	*fit_uname_cfg;	/* configuration node unit name */
>   
>   	void		*fit_hdr_os;	/* os FIT image header */
> @@ -983,7 +982,7 @@ int booti_setup(ulong image, ulong *relocated_addr, ulong *size,
>   
>   #define FIT_MAX_HASH_LEN	HASH_MAX_DIGEST_SIZE
>   
> -#if IMAGE_ENABLE_FIT
> +#if CONFIG_IS_ENABLED(FIT)
>   /* cmdline argument format parsing */
>   int fit_parse_conf(const char *spec, ulong addr_curr,
>   		ulong *addr, const char **conf_name);
> @@ -1157,7 +1156,7 @@ int fit_conf_get_prop_node(const void *fit, int noffset,
>   
>   int fit_check_ramdisk(const void *fit, int os_noffset,
>   		uint8_t arch, int verify);
> -#endif /* IMAGE_ENABLE_FIT */
> +#endif /* FIT */
>   
>   int calculate_hash(const void *data, int data_len, const char *algo,
>   			uint8_t *value, int *value_len);
> @@ -1180,7 +1179,7 @@ int calculate_hash(const void *data, int data_len, const char *algo,
>   # define FIT_IMAGE_ENABLE_VERIFY	CONFIG_IS_ENABLED(FIT_SIGNATURE)
>   #endif
>   
> -#if IMAGE_ENABLE_FIT
> +#if CONFIG_IS_ENABLED(FIT)
>   #ifdef USE_HOSTCC
>   void *image_get_host_blob(void);
>   void image_set_host_blob(void *host_blob);
> @@ -1335,7 +1334,7 @@ struct crypto_algo *image_get_crypto_algo(const char *full_name);
>    */
>   struct padding_algo *image_get_padding_algo(const char *name);
>   
> -#if IMAGE_ENABLE_FIT
> +#if CONFIG_IS_ENABLED(FIT)
>   
>   /**
>    * fit_image_verify_required_sigs() - Verify signatures marked as 'required'
> 

^ permalink raw reply	[flat|nested] 90+ messages in thread

* Re: [PATCH v5 08/29] image: Drop IMAGE_ENABLE_OF_LIBFDT
  2021-09-26  1:43 ` [PATCH v5 08/29] image: Drop IMAGE_ENABLE_OF_LIBFDT Simon Glass
@ 2021-10-05 18:27   ` Alex G.
  2021-10-09  1:40   ` Tom Rini
  1 sibling, 0 replies; 90+ messages in thread
From: Alex G. @ 2021-10-05 18:27 UTC (permalink / raw)
  To: Simon Glass, U-Boot Mailing List
  Cc: Andre Przywara, Rasmus Villemoes, Robert Marko, Masahiro Yamada,
	Tom Rini, Joe Hershberger, Marek Vasut



On 9/25/21 8:43 PM, Simon Glass wrote:
> Add a host Kconfig for OF_LIBFDT. With this we can use
> CONFIG_IS_ENABLED(OF_LIBFDT) directly in the host build, so drop the

s/host build/tools build/

> unnecessary indirection.
> 
> Signed-off-by: Simon Glass <sjg@chromium.org>

Reviewed-by: Alexandru Gagniuc <mr.nuke.me@gmail.com>

> ---
> 
> Changes in v5:
> - Use TOOLS_ instead of HOST_
> 
>   arch/arc/lib/bootm.c        | 2 +-
>   arch/arm/lib/bootm.c        | 4 ++--
>   arch/microblaze/lib/bootm.c | 2 +-
>   arch/nds32/lib/bootm.c      | 4 ++--
>   arch/riscv/lib/bootm.c      | 4 ++--
>   board/synopsys/hsdk/hsdk.c  | 2 +-
>   common/bootm.c              | 4 ++--
>   common/image-board.c        | 8 ++++----
>   common/image.c              | 2 +-
>   include/image.h             | 3 ---
>   lib/lmb.c                   | 2 +-
>   tools/Kconfig               | 5 +++++
>   12 files changed, 22 insertions(+), 20 deletions(-)

I would have hoped deletions > insertions

> 
> diff --git a/arch/arc/lib/bootm.c b/arch/arc/lib/bootm.c
> index 41408c2b460..ed6c5dfa584 100644
> --- a/arch/arc/lib/bootm.c
> +++ b/arch/arc/lib/bootm.c
> @@ -63,7 +63,7 @@ static void boot_jump_linux(bootm_headers_t *images, int flag)
>   	       "(fake run for tracing)" : "");
>   	bootstage_mark_name(BOOTSTAGE_ID_BOOTM_HANDOFF, "start_kernel");
>   
> -	if (IMAGE_ENABLE_OF_LIBFDT && images->ft_len) {
> +	if (CONFIG_IS_ENABLED(OF_LIBFDT) && images->ft_len) {
>   		r0 = 2;
>   		r2 = (unsigned int)images->ft_addr;
>   	} else {
> diff --git a/arch/arm/lib/bootm.c b/arch/arm/lib/bootm.c
> index dd6a69315ac..a59a5e6c0ea 100644
> --- a/arch/arm/lib/bootm.c
> +++ b/arch/arm/lib/bootm.c
> @@ -199,7 +199,7 @@ static void boot_prep_linux(bootm_headers_t *images)
>   {
>   	char *commandline = env_get("bootargs");
>   
> -	if (IMAGE_ENABLE_OF_LIBFDT && images->ft_len) {
> +	if (CONFIG_IS_ENABLED(OF_LIBFDT) && images->ft_len) {
>   #ifdef CONFIG_OF_LIBFDT
>   		debug("using: FDT\n");
>   		if (image_setup_linux(images)) {
> @@ -356,7 +356,7 @@ static void boot_jump_linux(bootm_headers_t *images, int flag)
>   	bootstage_mark(BOOTSTAGE_ID_RUN_OS);
>   	announce_and_cleanup(fake);
>   
> -	if (IMAGE_ENABLE_OF_LIBFDT && images->ft_len)
> +	if (CONFIG_IS_ENABLED(OF_LIBFDT) && images->ft_len)
>   		r2 = (unsigned long)images->ft_addr;
>   	else
>   		r2 = gd->bd->bi_boot_params;
> diff --git a/arch/microblaze/lib/bootm.c b/arch/microblaze/lib/bootm.c
> index 3a6da6e29ff..12ea32488e6 100644
> --- a/arch/microblaze/lib/bootm.c
> +++ b/arch/microblaze/lib/bootm.c
> @@ -75,7 +75,7 @@ static void boot_jump_linux(bootm_headers_t *images, int flag)
>   
>   static void boot_prep_linux(bootm_headers_t *images)
>   {
> -	if (IMAGE_ENABLE_OF_LIBFDT && images->ft_len) {
> +	if (CONFIG_IS_ENABLED(OF_LIBFDT) && images->ft_len) {
>   		debug("using: FDT\n");
>   		if (image_setup_linux(images)) {
>   			printf("FDT creation failed! hanging...");
> diff --git a/arch/nds32/lib/bootm.c b/arch/nds32/lib/bootm.c
> index 1c7f7856999..71ebfb4225b 100644
> --- a/arch/nds32/lib/bootm.c
> +++ b/arch/nds32/lib/bootm.c
> @@ -69,7 +69,7 @@ int do_bootm_linux(int flag, int argc, char *argv[], bootm_headers_t *images)
>   	debug("## Transferring control to Linux (at address %08lx) ...\n",
>   	       (ulong)theKernel);
>   
> -	if (IMAGE_ENABLE_OF_LIBFDT && images->ft_len) {
> +	if (CONFIG_IS_ENABLED(OF_LIBFDT) && images->ft_len) {
>   #ifdef CONFIG_OF_LIBFDT
>   		debug("using: FDT\n");
>   		if (image_setup_linux(images)) {
> @@ -110,7 +110,7 @@ int do_bootm_linux(int flag, int argc, char *argv[], bootm_headers_t *images)
>   #endif
>   	}
>   	cleanup_before_linux();
> -	if (IMAGE_ENABLE_OF_LIBFDT && images->ft_len)
> +	if (CONFIG_IS_ENABLED(OF_LIBFDT) && images->ft_len)
>   		theKernel(0, machid, (unsigned long)images->ft_addr);
>   	else
>   		theKernel(0, machid, bd->bi_boot_params);
> diff --git a/arch/riscv/lib/bootm.c b/arch/riscv/lib/bootm.c
> index ff1bdf71318..2e1e286c8ef 100644
> --- a/arch/riscv/lib/bootm.c
> +++ b/arch/riscv/lib/bootm.c
> @@ -64,7 +64,7 @@ static void announce_and_cleanup(int fake)
>   
>   static void boot_prep_linux(bootm_headers_t *images)
>   {
> -	if (IMAGE_ENABLE_OF_LIBFDT && images->ft_len) {
> +	if (CONFIG_IS_ENABLED(OF_LIBFDT) && images->ft_len) {
>   #ifdef CONFIG_OF_LIBFDT
>   		debug("using: FDT\n");
>   		if (image_setup_linux(images)) {
> @@ -96,7 +96,7 @@ static void boot_jump_linux(bootm_headers_t *images, int flag)
>   	announce_and_cleanup(fake);
>   
>   	if (!fake) {
> -		if (IMAGE_ENABLE_OF_LIBFDT && images->ft_len) {
> +		if (CONFIG_IS_ENABLED(OF_LIBFDT) && images->ft_len) {
>   #ifdef CONFIG_SMP
>   			ret = smp_call_function(images->ep,
>   						(ulong)images->ft_addr, 0, 0);
> diff --git a/board/synopsys/hsdk/hsdk.c b/board/synopsys/hsdk/hsdk.c
> index 892b94bb083..226fbba6296 100644
> --- a/board/synopsys/hsdk/hsdk.c
> +++ b/board/synopsys/hsdk/hsdk.c
> @@ -871,7 +871,7 @@ int board_prep_linux(bootm_headers_t *images)
>   	if (env_common.core_mask.val == ALL_CPU_MASK)
>   		return 0;
>   
> -	if (!IMAGE_ENABLE_OF_LIBFDT || !images->ft_len) {
> +	if (!CONFIG_IS_ENABLED(OF_LIBFDT) || !images->ft_len) {
>   		pr_err("WARN: core_mask setup will work properly only with external DTB!\n");
>   		return 0;
>   	}
> diff --git a/common/bootm.c b/common/bootm.c
> index 8d614fe140e..4482f84b40a 100644
> --- a/common/bootm.c
> +++ b/common/bootm.c
> @@ -271,7 +271,7 @@ int bootm_find_images(int flag, int argc, char *const argv[], ulong start,
>   		return 1;
>   	}
>   
> -#if IMAGE_ENABLE_OF_LIBFDT
> +#if CONFIG_IS_ENABLED(OF_LIBFDT)
>   	/* find flattened device tree */
>   	ret = boot_get_fdt(flag, argc, argv, IH_ARCH_DEFAULT, &images,
>   			   &images.ft_addr, &images.ft_len);
> @@ -706,7 +706,7 @@ int do_bootm_states(struct cmd_tbl *cmdtp, int flag, int argc,
>   		}
>   	}
>   #endif
> -#if IMAGE_ENABLE_OF_LIBFDT && defined(CONFIG_LMB)
> +#if CONFIG_IS_ENABLED(OF_LIBFDT) && defined(CONFIG_LMB)
>   	if (!ret && (states & BOOTM_STATE_FDT)) {
>   		boot_fdt_add_mem_rsv_regions(&images->lmb, images->ft_addr);
>   		ret = boot_relocate_fdt(&images->lmb, &images->ft_addr,
> diff --git a/common/image-board.c b/common/image-board.c
> index c699232ba13..a9a6011ce02 100644
> --- a/common/image-board.c
> +++ b/common/image-board.c
> @@ -282,7 +282,7 @@ int genimg_get_format(const void *img_addr)
>   	if (image_check_magic(hdr))
>   		return IMAGE_FORMAT_LEGACY;
>   #endif
> -#if CONFIG_IS_ENABLED(FIT) || IMAGE_ENABLE_OF_LIBFDT
> +#if CONFIG_IS_ENABLED(FIT) || CONFIG_IS_ENABLED(OF_LIBFDT)
>   	if (fdt_check_header(img_addr) == 0)
>   		return IMAGE_FORMAT_FIT;
>   #endif
> @@ -895,7 +895,7 @@ int image_setup_linux(bootm_headers_t *images)
>   	struct lmb *lmb = &images->lmb;
>   	int ret;
>   
> -	if (IMAGE_ENABLE_OF_LIBFDT)
> +	if (CONFIG_IS_ENABLED(OF_LIBFDT))
>   		boot_fdt_add_mem_rsv_regions(lmb, *of_flat_tree);
>   
>   	if (IMAGE_BOOT_GET_CMDLINE) {
> @@ -907,13 +907,13 @@ int image_setup_linux(bootm_headers_t *images)
>   		}
>   	}
>   
> -	if (IMAGE_ENABLE_OF_LIBFDT) {
> +	if (CONFIG_IS_ENABLED(OF_LIBFDT)) {
>   		ret = boot_relocate_fdt(lmb, of_flat_tree, &of_size);
>   		if (ret)
>   			return ret;
>   	}
>   
> -	if (IMAGE_ENABLE_OF_LIBFDT && of_size) {
> +	if (CONFIG_IS_ENABLED(OF_LIBFDT) && of_size) {
>   		ret = image_setup_libfdt(images, *of_flat_tree, of_size, lmb);
>   		if (ret)
>   			return ret;
> diff --git a/common/image.c b/common/image.c
> index 59b5e70ccae..5b77113bea3 100644
> --- a/common/image.c
> +++ b/common/image.c
> @@ -18,7 +18,7 @@
>   #include <status_led.h>
>   #endif
>   
> -#if CONFIG_IS_ENABLED(FIT) || IMAGE_ENABLE_OF_LIBFDT
> +#if CONFIG_IS_ENABLED(FIT) || CONFIG_IS_ENABLED(OF_LIBFDT)
>   #include <linux/libfdt.h>
>   #include <fdt_support.h>
>   #endif
> diff --git a/include/image.h b/include/image.h
> index 6c229212cb1..f09eb9de516 100644
> --- a/include/image.h
> +++ b/include/image.h
> @@ -28,7 +28,6 @@ struct fdt_region;
>   #include <linux/kconfig.h>
>   
>   /* new uImage format support enabled on host */
> -#define IMAGE_ENABLE_OF_LIBFDT	1
>   #define CONFIG_FIT_VERBOSE	1 /* enable fit_format_{error,warning}() */
>   #define CONFIG_FIT_RSASSA_PSS 1
>   
> @@ -46,8 +45,6 @@ struct fdt_region;
>   #define IMAGE_ENABLE_IGNORE	1
>   #define IMAGE_INDENT_STRING	"   "
>   
> -#define IMAGE_ENABLE_OF_LIBFDT	CONFIG_IS_ENABLED(OF_LIBFDT)
> -
>   #endif /* USE_HOSTCC */
>   
>   #if CONFIG_IS_ENABLED(FIT)
> diff --git a/lib/lmb.c b/lib/lmb.c
> index 793647724c3..676b3a0bda6 100644
> --- a/lib/lmb.c
> +++ b/lib/lmb.c
> @@ -153,7 +153,7 @@ static void lmb_reserve_common(struct lmb *lmb, void *fdt_blob)
>   	arch_lmb_reserve(lmb);
>   	board_lmb_reserve(lmb);
>   
> -	if (IMAGE_ENABLE_OF_LIBFDT && fdt_blob)
> +	if (CONFIG_IS_ENABLED(OF_LIBFDT) && fdt_blob)
>   		boot_fdt_add_mem_rsv_regions(lmb, fdt_blob);
>   }
>   
> diff --git a/tools/Kconfig b/tools/Kconfig
> index 6ffc2c0aa31..747d221803f 100644
> --- a/tools/Kconfig
> +++ b/tools/Kconfig
> @@ -50,6 +50,11 @@ config TOOLS_MD5
>   	help
>   	  Enable MD5 support in the tools builds
>   
> +config TOOLS_OF_LIBFDT
> +	def_bool y
> +	help
> +	  Enable libfdt support in the tools builds
> +
>   config TOOLS_SHA1
>   	def_bool y
>   	help
> 

^ permalink raw reply	[flat|nested] 90+ messages in thread

* Re: [PATCH v5 09/29] image: Use Kconfig to enable CONFIG_FIT_VERBOSE on host
  2021-09-26  1:43 ` [PATCH v5 09/29] image: Use Kconfig to enable CONFIG_FIT_VERBOSE on host Simon Glass
@ 2021-10-05 18:29   ` Alex G.
  2021-10-09  1:40   ` Tom Rini
  1 sibling, 0 replies; 90+ messages in thread
From: Alex G. @ 2021-10-05 18:29 UTC (permalink / raw)
  To: Simon Glass, U-Boot Mailing List
  Cc: Andre Przywara, Rasmus Villemoes, Robert Marko, Masahiro Yamada,
	Tom Rini, Joe Hershberger, Marek Vasut

On 9/25/21 8:43 PM, Simon Glass wrote:
> Add a host Kconfig for FIT_VERBOSE. With this we can use
> CONFIG_IS_ENABLED(FIT_VERBOSE) directly in the host build, so drop the

s/host build/ tools build/

> forcing of this in the image.h header.
> 
> Signed-off-by: Simon Glass <sjg@chromium.org>

Reviewed-by: Alexandru Gagniuc <mr.nuke.me@gmail.com>

> ---
> 
> Changes in v5:
> - Use TOOLS_ instead of HOST_
> 
>   include/image.h | 5 ++---
>   tools/Kconfig   | 5 +++++
>   2 files changed, 7 insertions(+), 3 deletions(-)
> 
> diff --git a/include/image.h b/include/image.h
> index f09eb9de516..6efbef06e64 100644
> --- a/include/image.h
> +++ b/include/image.h
> @@ -28,7 +28,6 @@ struct fdt_region;
>   #include <linux/kconfig.h>
>   
>   /* new uImage format support enabled on host */
> -#define CONFIG_FIT_VERBOSE	1 /* enable fit_format_{error,warning}() */
>   #define CONFIG_FIT_RSASSA_PSS 1
>   
>   #define IMAGE_ENABLE_IGNORE	0
> @@ -1458,7 +1457,7 @@ int fit_image_cipher_get_algo(const void *fit, int noffset, char **algo);
>   
>   struct cipher_algo *image_get_cipher_algo(const char *full_name);
>   
> -#ifdef CONFIG_FIT_VERBOSE
> +#if CONFIG_IS_ENABLED(FIT_VERBOSE)
>   #define fit_unsupported(msg)	printf("! %s:%d " \
>   				"FIT images not supported for '%s'\n", \
>   				__FILE__, __LINE__, (msg))

I think if we made this a higher level message, like debug, or spew. we 
wouldn't need to #ifdef it out with a CONFIG in the first place.

> @@ -1470,7 +1469,7 @@ struct cipher_algo *image_get_cipher_algo(const char *full_name);
>   #else
>   #define fit_unsupported(msg)
>   #define fit_unsupported_reset(msg)
> -#endif /* CONFIG_FIT_VERBOSE */
> +#endif /* FIT_VERBOSE */
>   #endif /* CONFIG_FIT */
>   
>   #if !defined(USE_HOSTCC)
> diff --git a/tools/Kconfig b/tools/Kconfig
> index 747d221803f..9d1c0efd40c 100644
> --- a/tools/Kconfig
> +++ b/tools/Kconfig
> @@ -45,6 +45,11 @@ config TOOLS_FIT_SIGNATURE_MAX_SIZE
>   	depends on TOOLS_FIT_SIGNATURE
>   	default 0x10000000
>   
> +config TOOLS_FIT_VERBOSE
> +	def_bool y
> +	help
> +	  Support verbose FIT output in the tools builds
> +
>   config TOOLS_MD5
>   	def_bool y
>   	help
> 

^ permalink raw reply	[flat|nested] 90+ messages in thread

* Re: [PATCH v5 10/29] image: Use Kconfig to enable FIT_RSASSA_PSS on host
  2021-09-26  1:43 ` [PATCH v5 10/29] image: Use Kconfig to enable FIT_RSASSA_PSS " Simon Glass
@ 2021-10-05 18:32   ` Alex G.
  2021-10-09  1:40   ` Tom Rini
  1 sibling, 0 replies; 90+ messages in thread
From: Alex G. @ 2021-10-05 18:32 UTC (permalink / raw)
  To: Simon Glass, U-Boot Mailing List
  Cc: Andre Przywara, Rasmus Villemoes, Robert Marko, Masahiro Yamada,
	Tom Rini, Joe Hershberger, Marek Vasut



On 9/25/21 8:43 PM, Simon Glass wrote:
> Add a host Kconfig for FIT_RSASSA_PSS. With this we can use
> CONFIG_IS_ENABLED(FIT_RSASSA_PSS) directly in the host build, so drop the
> forcing of this in the image.h header.
> 
> Drop the #ifdef around padding_pss_verify() too since it is not needed.
> Use the compiler to check the config where possible, instead of the
> preprocessor.
> 
> Signed-off-by: Simon Glass <sjg@chromium.org>

Reviewed-by: Alexandru Gagniuc <mr.nuke.me@gmail.com>

> ---
> 
> Changes in v5:
> - Avoid preprocessor in a few more places
> - Use TOOLS_ instead of HOST_
> 
>   include/image.h      |  3 ---
>   include/u-boot/rsa.h |  2 --
>   lib/rsa/rsa-sign.c   |  5 ++---
>   lib/rsa/rsa-verify.c | 16 +++-------------
>   tools/Kconfig        |  5 +++++
>   5 files changed, 10 insertions(+), 21 deletions(-)

Now that's what I'm talking about! deletions > insertions
> 
> diff --git a/include/image.h b/include/image.h
> index 6efbef06e64..dc872ef5b24 100644
> --- a/include/image.h
> +++ b/include/image.h
> @@ -27,9 +27,6 @@ struct fdt_region;
>   #include <sys/types.h>
>   #include <linux/kconfig.h>
>   
> -/* new uImage format support enabled on host */
> -#define CONFIG_FIT_RSASSA_PSS 1
> -
>   #define IMAGE_ENABLE_IGNORE	0
>   #define IMAGE_INDENT_STRING	""
>   
> diff --git a/include/u-boot/rsa.h b/include/u-boot/rsa.h
> index 89a9c4caa0a..7556aa5b4b7 100644
> --- a/include/u-boot/rsa.h
> +++ b/include/u-boot/rsa.h
> @@ -103,11 +103,9 @@ int padding_pkcs_15_verify(struct image_sign_info *info,
>   			   uint8_t *msg, int msg_len,
>   			   const uint8_t *hash, int hash_len);
>   
> -#ifdef CONFIG_FIT_RSASSA_PSS
>   int padding_pss_verify(struct image_sign_info *info,
>   		       uint8_t *msg, int msg_len,
>   		       const uint8_t *hash, int hash_len);
> -#endif /* CONFIG_FIT_RSASSA_PSS */
>   
>   #define RSA_DEFAULT_PADDING_NAME		"pkcs-1.5"
>   
> diff --git a/lib/rsa/rsa-sign.c b/lib/rsa/rsa-sign.c
> index c27a784c429..0579e5294ee 100644
> --- a/lib/rsa/rsa-sign.c
> +++ b/lib/rsa/rsa-sign.c
> @@ -401,15 +401,14 @@ static int rsa_sign_with_key(EVP_PKEY *pkey, struct padding_algo *padding_algo,
>   		goto err_sign;
>   	}
>   
> -#ifdef CONFIG_FIT_RSASSA_PSS
> -	if (padding_algo && !strcmp(padding_algo->name, "pss")) {
> +	if (CONFIG_IS_ENABLED(FIT_RSASSA_PSS) && padding_algo &&
> +	    !strcmp(padding_algo->name, "pss")) {
>   		if (EVP_PKEY_CTX_set_rsa_padding(ckey,
>   						 RSA_PKCS1_PSS_PADDING) <= 0) {
>   			ret = rsa_err("Signer padding setup failed");
>   			goto err_sign;
>   		}
>   	}
> -#endif /* CONFIG_FIT_RSASSA_PSS */
>   
>   	for (i = 0; i < region_count; i++) {
>   		if (!EVP_DigestSignUpdate(context, region[i].data,
> diff --git a/lib/rsa/rsa-verify.c b/lib/rsa/rsa-verify.c
> index ad6d33d043a..9e522d210d7 100644
> --- a/lib/rsa/rsa-verify.c
> +++ b/lib/rsa/rsa-verify.c
> @@ -102,7 +102,6 @@ U_BOOT_PADDING_ALGO(pkcs_15) = {
>   };
>   #endif
>   
> -#ifdef CONFIG_FIT_RSASSA_PSS
>   static void u32_i2osp(uint32_t val, uint8_t *buf)
>   {
>   	buf[0] = (uint8_t)((val >> 24) & 0xff);
> @@ -311,9 +310,6 @@ U_BOOT_PADDING_ALGO(pss) = {
>   };
>   #endif
>   
> -#endif
> -
> -#if CONFIG_IS_ENABLED(FIT_SIGNATURE) || CONFIG_IS_ENABLED(RSA_VERIFY_WITH_PKEY)
>   /**
>    * rsa_verify_key() - Verify a signature against some data using RSA Key
>    *
> @@ -385,9 +381,7 @@ static int rsa_verify_key(struct image_sign_info *info,
>   
>   	return 0;
>   }
> -#endif
>   
> -#if CONFIG_IS_ENABLED(RSA_VERIFY_WITH_PKEY)
>   /**
>    * rsa_verify_with_pkey() - Verify a signature against some data using
>    * only modulus and exponent as RSA key properties.
> @@ -408,6 +402,9 @@ int rsa_verify_with_pkey(struct image_sign_info *info,
>   	struct key_prop *prop;
>   	int ret;
>   
> +	if (!CONFIG_IS_ENABLED(RSA_VERIFY_WITH_PKEY))
> +		return -EACCES;
> +
>   	/* Public key is self-described to fill key_prop */
>   	ret = rsa_gen_key_prop(info->key, info->keylen, &prop);
>   	if (ret) {
> @@ -422,13 +419,6 @@ int rsa_verify_with_pkey(struct image_sign_info *info,
>   
>   	return ret;
>   }
> -#else
> -int rsa_verify_with_pkey(struct image_sign_info *info,
> -			 const void *hash, uint8_t *sig, uint sig_len)
> -{
> -	return -EACCES;
> -}
> -#endif
>   
>   #if CONFIG_IS_ENABLED(FIT_SIGNATURE)
>   /**
> diff --git a/tools/Kconfig b/tools/Kconfig
> index 9d1c0efd40c..8685c800f93 100644
> --- a/tools/Kconfig
> +++ b/tools/Kconfig
> @@ -35,6 +35,11 @@ config TOOLS_FIT_PRINT
>   	help
>   	  Print the content of the FIT verbosely in the tools builds
>   
> +config TOOLS_FIT_RSASSA_PSS
> +	def_bool y
> +	help
> +	  Support the rsassa-pss signature scheme in the tools builds

If we're going to have these TOOLS_ configs always on, what's the point 
in adding a help text?

> +
>   config TOOLS_FIT_SIGNATURE
>   	def_bool y
>   	help
> 

^ permalink raw reply	[flat|nested] 90+ messages in thread

* Re: [PATCH v5 11/29] image: Use the correct checks for CRC32
  2021-09-26  1:43 ` [PATCH v5 11/29] image: Use the correct checks for CRC32 Simon Glass
@ 2021-10-05 18:34   ` Alex G.
  2021-10-09  1:40   ` Tom Rini
  1 sibling, 0 replies; 90+ messages in thread
From: Alex G. @ 2021-10-05 18:34 UTC (permalink / raw)
  To: Simon Glass, U-Boot Mailing List
  Cc: Andre Przywara, Rasmus Villemoes, Robert Marko, Masahiro Yamada,
	Tom Rini, Joe Hershberger, Marek Vasut



On 9/25/21 8:43 PM, Simon Glass wrote:
> Add a host Kconfig for CRC32. With this we can use CONFIG_IS_ENABLED(CRC32)
> directly in the host build, so drop the unnecessary indirection.
> 
> Add a few more conditions to SPL_CRC32 to avoid build failures as well as
> TPL_CRC32. Also update hash.c to make crc32 optional and to actually take
> notice of SPL_CRC32.
> 
> Signed-off-by: Simon Glass <sjg@chromium.org>

I'm not entirely convinced, but it does make CRC32 more consistent with 
other hashes.

Reviewed-by: Alexandru Gagniuc <mr.nuke.me@gmail.com>

> ---
> 
> Changes in v5:
> - Rebase to next
> - Use TOOLS_ instead of HOST_
> 
>   common/hash.c      | 13 ++++++++-----
>   common/spl/Kconfig | 13 ++++++++++++-
>   lib/Kconfig        |  5 +++++
>   lib/Makefile       |  4 +---
>   tools/Kconfig      |  5 +++++
>   5 files changed, 31 insertions(+), 9 deletions(-)
> 
> diff --git a/common/hash.c b/common/hash.c
> index e92f9a9594f..b4b01c193b6 100644
> --- a/common/hash.c
> +++ b/common/hash.c
> @@ -178,7 +178,7 @@ static int hash_finish_crc16_ccitt(struct hash_algo *algo, void *ctx,
>   	return 0;
>   }
>   
> -static int hash_init_crc32(struct hash_algo *algo, void **ctxp)
> +static int __maybe_unused hash_init_crc32(struct hash_algo *algo, void **ctxp)
>   {
>   	uint32_t *ctx = malloc(sizeof(uint32_t));
>   	*ctx = 0;
> @@ -186,15 +186,16 @@ static int hash_init_crc32(struct hash_algo *algo, void **ctxp)
>   	return 0;
>   }
>   
> -static int hash_update_crc32(struct hash_algo *algo, void *ctx,
> -			     const void *buf, unsigned int size, int is_last)
> +static int __maybe_unused hash_update_crc32(struct hash_algo *algo, void *ctx,
> +					    const void *buf, unsigned int size,
> +					    int is_last)
>   {
>   	*((uint32_t *)ctx) = crc32(*((uint32_t *)ctx), buf, size);
>   	return 0;
>   }
>   
> -static int hash_finish_crc32(struct hash_algo *algo, void *ctx, void *dest_buf,
> -			     int size)
> +static int __maybe_unused hash_finish_crc32(struct hash_algo *algo, void *ctx,
> +					    void *dest_buf, int size)
>   {
>   	if (size < algo->digest_size)
>   		return -1;
> @@ -311,6 +312,7 @@ static struct hash_algo hash_algo[] = {
>   		.hash_update	= hash_update_crc16_ccitt,
>   		.hash_finish	= hash_finish_crc16_ccitt,
>   	},
> +#if CONFIG_IS_ENABLED(CRC32)
>   	{
>   		.name		= "crc32",
>   		.digest_size	= 4,
> @@ -320,6 +322,7 @@ static struct hash_algo hash_algo[] = {
>   		.hash_update	= hash_update_crc32,
>   		.hash_finish	= hash_finish_crc32,
>   	},
> +#endif
>   };
>   
>   /* Try to minimize code size for boards that don't want much hashing */
> diff --git a/common/spl/Kconfig b/common/spl/Kconfig
> index 34f6fc2cfad..91bb6c89fb4 100644
> --- a/common/spl/Kconfig
> +++ b/common/spl/Kconfig
> @@ -419,7 +419,8 @@ config SYS_MMCSD_RAW_MODE_EMMC_BOOT_PARTITION
>   
>   config SPL_CRC32
>   	bool "Support CRC32"
> -	default y if SPL_LEGACY_IMAGE_SUPPORT
> +	default y if SPL_LEGACY_IMAGE_SUPPORT || SPL_EFI_PARTITION
> +	default y if SPL_ENV_SUPPORT || TPL_BLOBLIST
>   	help
>   	  Enable this to support CRC32 in uImages or FIT images within SPL.
>   	  This is a 32-bit checksum value that can be used to verify images.
> @@ -1419,6 +1420,16 @@ config TPL_BOOTROM_SUPPORT
>   	  BOOT_DEVICE_BOOTROM (or fall-through to the next boot device in the
>   	  boot device list, if not implemented for a given board)
>   
> +config TPL_CRC32
> +	bool "Support CRC32 in TPL"
> +	default y if TPL_ENV_SUPPORT || TPL_BLOBLIST
> +	help
> +	  Enable this to support CRC32 in uImages or FIT images within SPL.
> +	  This is a 32-bit checksum value that can be used to verify images.
> +	  For FIT images, this is the least secure type of checksum, suitable
> +	  for detected accidental image corruption. For secure applications you
> +	  should consider SHA1 or SHA256.
> +
>   config TPL_DRIVERS_MISC
>   	bool "Support misc drivers in TPL"
>   	help
> diff --git a/lib/Kconfig b/lib/Kconfig
> index 64765acfa61..70bf8e7a464 100644
> --- a/lib/Kconfig
> +++ b/lib/Kconfig
> @@ -496,6 +496,11 @@ config SPL_MD5
>   	  security applications, but it can be useful for providing a quick
>   	  checksum of a block of data.
>   
> +config CRC32
> +	def_bool y
> +	help
> +	  Enables CRC32 support in U-Boot. This is normally required.
> +
>   config CRC32C
>   	bool
>   
> diff --git a/lib/Makefile b/lib/Makefile
> index 9c0373e2955..c523bb74119 100644
> --- a/lib/Makefile
> +++ b/lib/Makefile
> @@ -99,9 +99,7 @@ obj-y += display_options.o
>   CFLAGS_display_options.o := $(if $(BUILD_TAG),-DBUILD_TAG='"$(BUILD_TAG)"')
>   obj-$(CONFIG_BCH) += bch.o
>   obj-$(CONFIG_MMC_SPI) += crc7.o
> -#ifndef CONFIG_TPL_BUILD
> -obj-y += crc32.o
> -#endif
> +obj-$(CONFIG_$(SPL_TPL_)CRC32) += crc32.o
>   obj-$(CONFIG_CRC32C) += crc32c.o
>   obj-y += ctype.o
>   obj-y += div64.o
> diff --git a/tools/Kconfig b/tools/Kconfig
> index 8685c800f93..91ce8ae3e51 100644
> --- a/tools/Kconfig
> +++ b/tools/Kconfig
> @@ -9,6 +9,11 @@ config MKIMAGE_DTC_PATH
>   	  some cases the system dtc may not support all required features
>   	  and the path to a different version should be given here.
>   
> +config TOOLS_CRC32
> +	def_bool y
> +	help
> +	  Enable CRC32 support in the tools builds
> +
>   config TOOLS_LIBCRYPTO
>   	bool "Use OpenSSL's libcrypto library for host tools"
>   	default y
> 

^ permalink raw reply	[flat|nested] 90+ messages in thread

* Re: [PATCH v5 12/29] image: Drop IMAGE_BOOT_GET_CMDLINE
  2021-09-26  1:43 ` [PATCH v5 12/29] image: Drop IMAGE_BOOT_GET_CMDLINE Simon Glass
@ 2021-10-05 18:36   ` Alex G.
  2021-10-09  1:40   ` Tom Rini
  1 sibling, 0 replies; 90+ messages in thread
From: Alex G. @ 2021-10-05 18:36 UTC (permalink / raw)
  To: Simon Glass, U-Boot Mailing List
  Cc: Andre Przywara, Rasmus Villemoes, Robert Marko, Masahiro Yamada,
	Tom Rini, Joe Hershberger, Marek Vasut



On 9/25/21 8:43 PM, Simon Glass wrote:
> This is not needed with Kconfig, since we can use IS_ENABLED() easily
> enough and the board code is now in a separate file. Update the only place
> where this is used and drop it.
> 
> Signed-off-by: Simon Glass <sjg@chromium.org>

Reviewed-by: Alexandru Gagniuc <mr.nuke.me@gmail.com>

> ---
> 
> Changes in v5:
> - Update commit message to indicate that the code is in a separate file
> 
>   common/image-board.c | 2 +-
>   include/image.h      | 6 ------
>   2 files changed, 1 insertion(+), 7 deletions(-)
> 
> diff --git a/common/image-board.c b/common/image-board.c
> index a9a6011ce02..599d6779df5 100644
> --- a/common/image-board.c
> +++ b/common/image-board.c
> @@ -898,7 +898,7 @@ int image_setup_linux(bootm_headers_t *images)
>   	if (CONFIG_IS_ENABLED(OF_LIBFDT))
>   		boot_fdt_add_mem_rsv_regions(lmb, *of_flat_tree);
>   
> -	if (IMAGE_BOOT_GET_CMDLINE) {
> +	if (IS_ENABLED(CONFIG_SYS_BOOT_GET_CMDLINE)) {

This would return 0 on a tools build, right?
>   		ret = boot_get_cmdline(lmb, &images->cmdline_start,
>   				       &images->cmdline_end);
>   		if (ret) {
> diff --git a/include/image.h b/include/image.h
> index dc872ef5b24..00a80999584 100644
> --- a/include/image.h
> +++ b/include/image.h
> @@ -49,12 +49,6 @@ struct fdt_region;
>   #include <fdt_support.h>
>   #endif /* FIT */
>   
> -#ifdef CONFIG_SYS_BOOT_GET_CMDLINE
> -# define IMAGE_BOOT_GET_CMDLINE		1
> -#else
> -# define IMAGE_BOOT_GET_CMDLINE		0
> -#endif
> -
>   #ifdef CONFIG_OF_BOARD_SETUP
>   # define IMAGE_OF_BOARD_SETUP		1
>   #else
> 

^ permalink raw reply	[flat|nested] 90+ messages in thread

* Re: [PATCH v5 13/29] image: Drop IMAGE_OF_BOARD_SETUP
  2021-09-26  1:43 ` [PATCH v5 13/29] image: Drop IMAGE_OF_BOARD_SETUP Simon Glass
@ 2021-10-05 18:57   ` Alex G.
  2021-10-09  1:40   ` Tom Rini
  1 sibling, 0 replies; 90+ messages in thread
From: Alex G. @ 2021-10-05 18:57 UTC (permalink / raw)
  To: Simon Glass, U-Boot Mailing List
  Cc: Andre Przywara, Rasmus Villemoes, Robert Marko, Masahiro Yamada,
	Tom Rini, Joe Hershberger, Marek Vasut



On 9/25/21 8:43 PM, Simon Glass wrote:
> This is not needed with Kconfig, since we can use IS_ENABLED() easily
> enough. Drop it.
> 
> Signed-off-by: Simon Glass <sjg@chromium.org>

Reviewed-by: Alexandru Gagniuc <mr.nuke.me@gmail.com>

> ---
> 
> (no changes since v1)
> 
>   common/image-fdt.c | 4 ++--
>   include/image.h    | 6 ------
>   2 files changed, 2 insertions(+), 8 deletions(-)
> 
> diff --git a/common/image-fdt.c b/common/image-fdt.c
> index 9441e63a3d4..cd664649e2c 100644
> --- a/common/image-fdt.c
> +++ b/common/image-fdt.c
> @@ -582,7 +582,7 @@ int image_setup_libfdt(bootm_headers_t *images, void *blob,
>   	/* Append PStore configuration */
>   	fdt_fixup_pstore(blob);
>   #endif
> -	if (IMAGE_OF_BOARD_SETUP) {
> +	if (IS_ENABLED(CONFIG_OF_BOARD_SETUP)) {
>   		const char *skip_board_fixup;
>   
>   		skip_board_fixup = env_get("skip_board_fixup");
> @@ -629,7 +629,7 @@ int image_setup_libfdt(bootm_headers_t *images, void *blob,
>   		goto err;
>   
>   #if defined(CONFIG_SOC_KEYSTONE)
> -	if (IMAGE_OF_BOARD_SETUP)
> +	if (IS_ENABLED(CONFIG_OF_BOARD_SETUP))
>   		ft_board_setup_ex(blob, gd->bd);
>   #endif
>   
> diff --git a/include/image.h b/include/image.h
> index 00a80999584..e1e4148e4c8 100644
> --- a/include/image.h
> +++ b/include/image.h
> @@ -49,12 +49,6 @@ struct fdt_region;
>   #include <fdt_support.h>
>   #endif /* FIT */
>   
> -#ifdef CONFIG_OF_BOARD_SETUP
> -# define IMAGE_OF_BOARD_SETUP		1
> -#else
> -# define IMAGE_OF_BOARD_SETUP		0
> -#endif
> -
>   #ifdef CONFIG_OF_SYSTEM_SETUP
>   # define IMAGE_OF_SYSTEM_SETUP	1
>   #else
> 

^ permalink raw reply	[flat|nested] 90+ messages in thread

* Re: [PATCH v5 14/29] image: Drop IMAGE_OF_SYSTEM_SETUP
  2021-09-26  1:43 ` [PATCH v5 14/29] image: Drop IMAGE_OF_SYSTEM_SETUP Simon Glass
@ 2021-10-05 18:58   ` Alex G.
  2021-10-09  1:40   ` Tom Rini
  1 sibling, 0 replies; 90+ messages in thread
From: Alex G. @ 2021-10-05 18:58 UTC (permalink / raw)
  To: Simon Glass, U-Boot Mailing List
  Cc: Andre Przywara, Rasmus Villemoes, Robert Marko, Masahiro Yamada,
	Tom Rini, Joe Hershberger, Marek Vasut



On 9/25/21 8:43 PM, Simon Glass wrote:
> This is not needed with Kconfig, since we can use IS_ENABLED() easily
> enough. Drop it.
> 
> Signed-off-by: Simon Glass <sjg@chromium.org>

Reviewed-by: Alexandru Gagniuc <mr.nuke.me@gmail.com>

> ---
> 
> (no changes since v1)
> 
>   common/image-fdt.c | 2 +-
>   include/image.h    | 6 ------
>   2 files changed, 1 insertion(+), 7 deletions(-)
> 
> diff --git a/common/image-fdt.c b/common/image-fdt.c
> index cd664649e2c..cf87e455230 100644
> --- a/common/image-fdt.c
> +++ b/common/image-fdt.c
> @@ -597,7 +597,7 @@ int image_setup_libfdt(bootm_headers_t *images, void *blob,
>   			}
>   		}
>   	}
> -	if (IMAGE_OF_SYSTEM_SETUP) {
> +	if (IS_ENABLED(CONFIG_OF_SYSTEM_SETUP)) {
>   		fdt_ret = ft_system_setup(blob, gd->bd);
>   		if (fdt_ret) {
>   			printf("ERROR: system-specific fdt fixup failed: %s\n",
> diff --git a/include/image.h b/include/image.h
> index e1e4148e4c8..e190f59232d 100644
> --- a/include/image.h
> +++ b/include/image.h
> @@ -49,12 +49,6 @@ struct fdt_region;
>   #include <fdt_support.h>
>   #endif /* FIT */
>   
> -#ifdef CONFIG_OF_SYSTEM_SETUP
> -# define IMAGE_OF_SYSTEM_SETUP	1
> -#else
> -# define IMAGE_OF_SYSTEM_SETUP	0
> -#endif
> -
>   extern ulong image_load_addr;		/* Default Load Address */
>   extern ulong image_save_addr;		/* Default Save Address */
>   extern ulong image_save_size;		/* Default Save Size */
> 

^ permalink raw reply	[flat|nested] 90+ messages in thread

* Re: [PATCH v5 15/29] image: Drop IMAGE_ENABLE_IGNORE
  2021-09-26  1:43 ` [PATCH v5 15/29] image: Drop IMAGE_ENABLE_IGNORE Simon Glass
@ 2021-10-05 18:58   ` Alex G.
  2021-10-09  1:40   ` Tom Rini
  1 sibling, 0 replies; 90+ messages in thread
From: Alex G. @ 2021-10-05 18:58 UTC (permalink / raw)
  To: Simon Glass, U-Boot Mailing List
  Cc: Andre Przywara, Rasmus Villemoes, Robert Marko, Masahiro Yamada,
	Tom Rini, Joe Hershberger, Marek Vasut



On 9/25/21 8:43 PM, Simon Glass wrote:
> We can use the new host_build() function for this, so drop it.

s/host_build/tools_build/

> Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Alexandru Gagniuc <mr.nuke.me@gmail.com>

> ---
> 
> (no changes since v1)
> 
>   common/image-fit.c | 2 +-
>   include/image.h    | 3 ---
>   2 files changed, 1 insertion(+), 4 deletions(-)
> 
> diff --git a/common/image-fit.c b/common/image-fit.c
> index 17c6d4e7813..f44f5527b9f 100644
> --- a/common/image-fit.c
> +++ b/common/image-fit.c
> @@ -1277,7 +1277,7 @@ static int fit_image_check_hash(const void *fit, int noffset, const void *data,
>   	}
>   	printf("%s", algo);
>   
> -	if (IMAGE_ENABLE_IGNORE) {
> +	if (!tools_build()) {
>   		fit_image_hash_get_ignore(fit, noffset, &ignore);
>   		if (ignore) {
>   			printf("-skipped ");
> diff --git a/include/image.h b/include/image.h
> index e190f59232d..a236180ccdd 100644
> --- a/include/image.h
> +++ b/include/image.h
> @@ -27,7 +27,6 @@ struct fdt_region;
>   #include <sys/types.h>
>   #include <linux/kconfig.h>
>   
> -#define IMAGE_ENABLE_IGNORE	0
>   #define IMAGE_INDENT_STRING	""
>   
>   #else
> @@ -37,8 +36,6 @@ struct fdt_region;
>   #include <command.h>
>   #include <linker_lists.h>
>   
> -/* Take notice of the 'ignore' property for hashes */
> -#define IMAGE_ENABLE_IGNORE	1
>   #define IMAGE_INDENT_STRING	"   "
>   
>   #endif /* USE_HOSTCC */
> 

^ permalink raw reply	[flat|nested] 90+ messages in thread

* Re: [PATCH v5 02/29] kconfig: Add tools support to CONFIG_IS_ENABLED()
  2021-09-26  1:43 ` [PATCH v5 02/29] kconfig: Add tools support to CONFIG_IS_ENABLED() Simon Glass
  2021-09-27 16:11   ` Alex G.
  2021-10-05 18:11   ` Alex G.
@ 2021-10-07  0:26   ` Tom Rini
  2021-10-07  2:49     ` Simon Glass
  2021-10-09  1:39   ` Tom Rini
  3 siblings, 1 reply; 90+ messages in thread
From: Tom Rini @ 2021-10-07  0:26 UTC (permalink / raw)
  To: Simon Glass
  Cc: U-Boot Mailing List, Alexandru Gagniuc, Andre Przywara,
	Rasmus Villemoes, Robert Marko, Masahiro Yamada, Masahiro Yamada

[-- Attachment #1: Type: text/plain, Size: 1409 bytes --]

On Sat, Sep 25, 2021 at 07:43:15PM -0600, Simon Glass wrote:

> At present we must separately test for the host build for many options,
> since we force them to be enabled. For example, CONFIG_FIT is always
> enabled in the host tools, even if CONFIG_FIT is not enabled by the
> board itself.
> 
> It would be more convenient if we could use, for example,
> CONFIG_IS_ENABLED(FIT) and get CONFIG_HOST_FIT, when building for the
> host. Add support for this.
> 
> With this and the tools_build() function, we should be able to remove all
> the #ifdefs currently needed in code that is build by tools and targets.
> 
> This will be even nicer when we move to using CONFIG(xxx) everywhere,
> since all the #ifdef and IS_ENABLED/CONFIG_IS_ENABLED stuff will go away.
> 
> Signed-off-by: Simon Glass <sjg@chromium.org>
> Suggested-by: Rasmus Villemoes <rasmus.villemoes@prevas.dk> # b4f73886
> Reviewed-by: Alexandru Gagniuc <mr.nuke.me@gmail.com>

The problem here is we don't include <linux/kconfig.h> automatically
when building host stuff, I believe.  This is why doing this breaks
test_mkimage_hashes for me on am335x_evm with:
/tmp/.bm-work/am335x_evm/tools/mkimage -D -I dts -O dtb -i /tmp/.bm-work/am335x_evm -f /home/trini/work/u-boot/u-boot/test/py/tests/vboot//hash-images.its /tmp/.bm-work/am335x_evm/test.fit
*** stack smashing detected ***: <unknown> terminated

-- 
Tom

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 659 bytes --]

^ permalink raw reply	[flat|nested] 90+ messages in thread

* Re: [PATCH v5 02/29] kconfig: Add tools support to CONFIG_IS_ENABLED()
  2021-10-07  0:26   ` Tom Rini
@ 2021-10-07  2:49     ` Simon Glass
  2021-10-07  2:52       ` Tom Rini
  0 siblings, 1 reply; 90+ messages in thread
From: Simon Glass @ 2021-10-07  2:49 UTC (permalink / raw)
  To: Tom Rini
  Cc: U-Boot Mailing List, Alexandru Gagniuc, Andre Przywara,
	Rasmus Villemoes, Robert Marko, Masahiro Yamada, Masahiro Yamada

Hi Tom,

On Wed, 6 Oct 2021 at 18:26, Tom Rini <trini@konsulko.com> wrote:
>
> On Sat, Sep 25, 2021 at 07:43:15PM -0600, Simon Glass wrote:
>
> > At present we must separately test for the host build for many options,
> > since we force them to be enabled. For example, CONFIG_FIT is always
> > enabled in the host tools, even if CONFIG_FIT is not enabled by the
> > board itself.
> >
> > It would be more convenient if we could use, for example,
> > CONFIG_IS_ENABLED(FIT) and get CONFIG_HOST_FIT, when building for the
> > host. Add support for this.
> >
> > With this and the tools_build() function, we should be able to remove all
> > the #ifdefs currently needed in code that is build by tools and targets.
> >
> > This will be even nicer when we move to using CONFIG(xxx) everywhere,
> > since all the #ifdef and IS_ENABLED/CONFIG_IS_ENABLED stuff will go away.
> >
> > Signed-off-by: Simon Glass <sjg@chromium.org>
> > Suggested-by: Rasmus Villemoes <rasmus.villemoes@prevas.dk> # b4f73886
> > Reviewed-by: Alexandru Gagniuc <mr.nuke.me@gmail.com>
>
> The problem here is we don't include <linux/kconfig.h> automatically
> when building host stuff, I believe.  This is why doing this breaks
> test_mkimage_hashes for me on am335x_evm with:
> /tmp/.bm-work/am335x_evm/tools/mkimage -D -I dts -O dtb -i /tmp/.bm-work/am335x_evm -f /home/trini/work/u-boot/u-boot/test/py/tests/vboot//hash-images.its /tmp/.bm-work/am335x_evm/test.fit
> *** stack smashing detected ***: <unknown> terminated

Oh dear, and no CI coverage.

I was reluctant to include kconfig.h everywhere but perhaps that is
the best approach. Will take a look ASAP.

Regards,
Simon

^ permalink raw reply	[flat|nested] 90+ messages in thread

* Re: [PATCH v5 02/29] kconfig: Add tools support to CONFIG_IS_ENABLED()
  2021-10-07  2:49     ` Simon Glass
@ 2021-10-07  2:52       ` Tom Rini
  2021-10-07 13:32         ` Simon Glass
  0 siblings, 1 reply; 90+ messages in thread
From: Tom Rini @ 2021-10-07  2:52 UTC (permalink / raw)
  To: Simon Glass
  Cc: U-Boot Mailing List, Alexandru Gagniuc, Andre Przywara,
	Rasmus Villemoes, Robert Marko, Masahiro Yamada, Masahiro Yamada

[-- Attachment #1: Type: text/plain, Size: 2112 bytes --]

On Wed, Oct 06, 2021 at 08:49:13PM -0600, Simon Glass wrote:
> Hi Tom,
> 
> On Wed, 6 Oct 2021 at 18:26, Tom Rini <trini@konsulko.com> wrote:
> >
> > On Sat, Sep 25, 2021 at 07:43:15PM -0600, Simon Glass wrote:
> >
> > > At present we must separately test for the host build for many options,
> > > since we force them to be enabled. For example, CONFIG_FIT is always
> > > enabled in the host tools, even if CONFIG_FIT is not enabled by the
> > > board itself.
> > >
> > > It would be more convenient if we could use, for example,
> > > CONFIG_IS_ENABLED(FIT) and get CONFIG_HOST_FIT, when building for the
> > > host. Add support for this.
> > >
> > > With this and the tools_build() function, we should be able to remove all
> > > the #ifdefs currently needed in code that is build by tools and targets.
> > >
> > > This will be even nicer when we move to using CONFIG(xxx) everywhere,
> > > since all the #ifdef and IS_ENABLED/CONFIG_IS_ENABLED stuff will go away.
> > >
> > > Signed-off-by: Simon Glass <sjg@chromium.org>
> > > Suggested-by: Rasmus Villemoes <rasmus.villemoes@prevas.dk> # b4f73886
> > > Reviewed-by: Alexandru Gagniuc <mr.nuke.me@gmail.com>
> >
> > The problem here is we don't include <linux/kconfig.h> automatically
> > when building host stuff, I believe.  This is why doing this breaks
> > test_mkimage_hashes for me on am335x_evm with:
> > /tmp/.bm-work/am335x_evm/tools/mkimage -D -I dts -O dtb -i /tmp/.bm-work/am335x_evm -f /home/trini/work/u-boot/u-boot/test/py/tests/vboot//hash-images.its /tmp/.bm-work/am335x_evm/test.fit
> > *** stack smashing detected ***: <unknown> terminated
> 
> Oh dear, and no CI coverage.
> 
> I was reluctant to include kconfig.h everywhere but perhaps that is
> the best approach. Will take a look ASAP.

Maybe we need to think a bit harder too about how we structure
intentionally shared code.

Why not, for example, for these common algorithms, rely on typical
system headers/libraries in the tooling, which means we validated U-Boot
vs common reference, rather than just our implementations?

-- 
Tom

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 659 bytes --]

^ permalink raw reply	[flat|nested] 90+ messages in thread

* Re: [PATCH v5 02/29] kconfig: Add tools support to CONFIG_IS_ENABLED()
  2021-10-07  2:52       ` Tom Rini
@ 2021-10-07 13:32         ` Simon Glass
  2021-10-07 13:42           ` Tom Rini
  0 siblings, 1 reply; 90+ messages in thread
From: Simon Glass @ 2021-10-07 13:32 UTC (permalink / raw)
  To: Tom Rini
  Cc: U-Boot Mailing List, Alexandru Gagniuc, Andre Przywara,
	Rasmus Villemoes, Robert Marko, Masahiro Yamada, Masahiro Yamada

Hi Tom,

On Wed, 6 Oct 2021 at 20:52, Tom Rini <trini@konsulko.com> wrote:
>
> On Wed, Oct 06, 2021 at 08:49:13PM -0600, Simon Glass wrote:
> > Hi Tom,
> >
> > On Wed, 6 Oct 2021 at 18:26, Tom Rini <trini@konsulko.com> wrote:
> > >
> > > On Sat, Sep 25, 2021 at 07:43:15PM -0600, Simon Glass wrote:
> > >
> > > > At present we must separately test for the host build for many options,
> > > > since we force them to be enabled. For example, CONFIG_FIT is always
> > > > enabled in the host tools, even if CONFIG_FIT is not enabled by the
> > > > board itself.
> > > >
> > > > It would be more convenient if we could use, for example,
> > > > CONFIG_IS_ENABLED(FIT) and get CONFIG_HOST_FIT, when building for the
> > > > host. Add support for this.
> > > >
> > > > With this and the tools_build() function, we should be able to remove all
> > > > the #ifdefs currently needed in code that is build by tools and targets.
> > > >
> > > > This will be even nicer when we move to using CONFIG(xxx) everywhere,
> > > > since all the #ifdef and IS_ENABLED/CONFIG_IS_ENABLED stuff will go away.
> > > >
> > > > Signed-off-by: Simon Glass <sjg@chromium.org>
> > > > Suggested-by: Rasmus Villemoes <rasmus.villemoes@prevas.dk> # b4f73886
> > > > Reviewed-by: Alexandru Gagniuc <mr.nuke.me@gmail.com>
> > >
> > > The problem here is we don't include <linux/kconfig.h> automatically
> > > when building host stuff, I believe.  This is why doing this breaks
> > > test_mkimage_hashes for me on am335x_evm with:
> > > /tmp/.bm-work/am335x_evm/tools/mkimage -D -I dts -O dtb -i /tmp/.bm-work/am335x_evm -f /home/trini/work/u-boot/u-boot/test/py/tests/vboot//hash-images.its /tmp/.bm-work/am335x_evm/test.fit
> > > *** stack smashing detected ***: <unknown> terminated
> >
> > Oh dear, and no CI coverage.
> >
> > I was reluctant to include kconfig.h everywhere but perhaps that is
> > the best approach. Will take a look ASAP.
>
> Maybe we need to think a bit harder too about how we structure
> intentionally shared code.
>
> Why not, for example, for these common algorithms, rely on typical
> system headers/libraries in the tooling, which means we validated U-Boot
> vs common reference, rather than just our implementations?

Do you mean we use openssl for sha1, for example?

Regards,
Simon

^ permalink raw reply	[flat|nested] 90+ messages in thread

* Re: [PATCH v5 02/29] kconfig: Add tools support to CONFIG_IS_ENABLED()
  2021-10-07 13:32         ` Simon Glass
@ 2021-10-07 13:42           ` Tom Rini
  2021-10-07 18:02             ` Simon Glass
  0 siblings, 1 reply; 90+ messages in thread
From: Tom Rini @ 2021-10-07 13:42 UTC (permalink / raw)
  To: Simon Glass
  Cc: U-Boot Mailing List, Alexandru Gagniuc, Andre Przywara,
	Rasmus Villemoes, Robert Marko, Masahiro Yamada, Masahiro Yamada

[-- Attachment #1: Type: text/plain, Size: 2726 bytes --]

On Thu, Oct 07, 2021 at 07:32:04AM -0600, Simon Glass wrote:
> Hi Tom,
> 
> On Wed, 6 Oct 2021 at 20:52, Tom Rini <trini@konsulko.com> wrote:
> >
> > On Wed, Oct 06, 2021 at 08:49:13PM -0600, Simon Glass wrote:
> > > Hi Tom,
> > >
> > > On Wed, 6 Oct 2021 at 18:26, Tom Rini <trini@konsulko.com> wrote:
> > > >
> > > > On Sat, Sep 25, 2021 at 07:43:15PM -0600, Simon Glass wrote:
> > > >
> > > > > At present we must separately test for the host build for many options,
> > > > > since we force them to be enabled. For example, CONFIG_FIT is always
> > > > > enabled in the host tools, even if CONFIG_FIT is not enabled by the
> > > > > board itself.
> > > > >
> > > > > It would be more convenient if we could use, for example,
> > > > > CONFIG_IS_ENABLED(FIT) and get CONFIG_HOST_FIT, when building for the
> > > > > host. Add support for this.
> > > > >
> > > > > With this and the tools_build() function, we should be able to remove all
> > > > > the #ifdefs currently needed in code that is build by tools and targets.
> > > > >
> > > > > This will be even nicer when we move to using CONFIG(xxx) everywhere,
> > > > > since all the #ifdef and IS_ENABLED/CONFIG_IS_ENABLED stuff will go away.
> > > > >
> > > > > Signed-off-by: Simon Glass <sjg@chromium.org>
> > > > > Suggested-by: Rasmus Villemoes <rasmus.villemoes@prevas.dk> # b4f73886
> > > > > Reviewed-by: Alexandru Gagniuc <mr.nuke.me@gmail.com>
> > > >
> > > > The problem here is we don't include <linux/kconfig.h> automatically
> > > > when building host stuff, I believe.  This is why doing this breaks
> > > > test_mkimage_hashes for me on am335x_evm with:
> > > > /tmp/.bm-work/am335x_evm/tools/mkimage -D -I dts -O dtb -i /tmp/.bm-work/am335x_evm -f /home/trini/work/u-boot/u-boot/test/py/tests/vboot//hash-images.its /tmp/.bm-work/am335x_evm/test.fit
> > > > *** stack smashing detected ***: <unknown> terminated
> > >
> > > Oh dear, and no CI coverage.
> > >
> > > I was reluctant to include kconfig.h everywhere but perhaps that is
> > > the best approach. Will take a look ASAP.
> >
> > Maybe we need to think a bit harder too about how we structure
> > intentionally shared code.
> >
> > Why not, for example, for these common algorithms, rely on typical
> > system headers/libraries in the tooling, which means we validated U-Boot
> > vs common reference, rather than just our implementations?
> 
> Do you mean we use openssl for sha1, for example?

I guess, yes.  Just flat out saying we require openssl for tools, and
doing our best to not make compatibility with libressl difficult, seems
likely to cause less headaches for people than what we already require
in terms of Python.

-- 
Tom

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 659 bytes --]

^ permalink raw reply	[flat|nested] 90+ messages in thread

* Re: [PATCH v5 02/29] kconfig: Add tools support to CONFIG_IS_ENABLED()
  2021-10-07 13:42           ` Tom Rini
@ 2021-10-07 18:02             ` Simon Glass
  2021-10-07 18:30               ` Tom Rini
  0 siblings, 1 reply; 90+ messages in thread
From: Simon Glass @ 2021-10-07 18:02 UTC (permalink / raw)
  To: Tom Rini
  Cc: U-Boot Mailing List, Alexandru Gagniuc, Andre Przywara,
	Rasmus Villemoes, Robert Marko, Masahiro Yamada, Masahiro Yamada

Hi Tom,

On Thu, 7 Oct 2021 at 07:42, Tom Rini <trini@konsulko.com> wrote:
>
> On Thu, Oct 07, 2021 at 07:32:04AM -0600, Simon Glass wrote:
> > Hi Tom,
> >
> > On Wed, 6 Oct 2021 at 20:52, Tom Rini <trini@konsulko.com> wrote:
> > >
> > > On Wed, Oct 06, 2021 at 08:49:13PM -0600, Simon Glass wrote:
> > > > Hi Tom,
> > > >
> > > > On Wed, 6 Oct 2021 at 18:26, Tom Rini <trini@konsulko.com> wrote:
> > > > >
> > > > > On Sat, Sep 25, 2021 at 07:43:15PM -0600, Simon Glass wrote:
> > > > >
> > > > > > At present we must separately test for the host build for many options,
> > > > > > since we force them to be enabled. For example, CONFIG_FIT is always
> > > > > > enabled in the host tools, even if CONFIG_FIT is not enabled by the
> > > > > > board itself.
> > > > > >
> > > > > > It would be more convenient if we could use, for example,
> > > > > > CONFIG_IS_ENABLED(FIT) and get CONFIG_HOST_FIT, when building for the
> > > > > > host. Add support for this.
> > > > > >
> > > > > > With this and the tools_build() function, we should be able to remove all
> > > > > > the #ifdefs currently needed in code that is build by tools and targets.
> > > > > >
> > > > > > This will be even nicer when we move to using CONFIG(xxx) everywhere,
> > > > > > since all the #ifdef and IS_ENABLED/CONFIG_IS_ENABLED stuff will go away.
> > > > > >
> > > > > > Signed-off-by: Simon Glass <sjg@chromium.org>
> > > > > > Suggested-by: Rasmus Villemoes <rasmus.villemoes@prevas.dk> # b4f73886
> > > > > > Reviewed-by: Alexandru Gagniuc <mr.nuke.me@gmail.com>
> > > > >
> > > > > The problem here is we don't include <linux/kconfig.h> automatically
> > > > > when building host stuff, I believe.  This is why doing this breaks
> > > > > test_mkimage_hashes for me on am335x_evm with:
> > > > > /tmp/.bm-work/am335x_evm/tools/mkimage -D -I dts -O dtb -i /tmp/.bm-work/am335x_evm -f /home/trini/work/u-boot/u-boot/test/py/tests/vboot//hash-images.its /tmp/.bm-work/am335x_evm/test.fit
> > > > > *** stack smashing detected ***: <unknown> terminated
> > > >
> > > > Oh dear, and no CI coverage.
> > > >
> > > > I was reluctant to include kconfig.h everywhere but perhaps that is
> > > > the best approach. Will take a look ASAP.
> > >
> > > Maybe we need to think a bit harder too about how we structure
> > > intentionally shared code.
> > >
> > > Why not, for example, for these common algorithms, rely on typical
> > > system headers/libraries in the tooling, which means we validated U-Boot
> > > vs common reference, rather than just our implementations?
> >
> > Do you mean we use openssl for sha1, for example?
>
> I guess, yes.  Just flat out saying we require openssl for tools, and
> doing our best to not make compatibility with libressl difficult, seems
> likely to cause less headaches for people than what we already require
> in terms of Python.

I'm OK with that, although I do think the problem identified here
(CONFIG_SHA256 not enabled) is somewhat sideways from that. We already
use separate code paths to run hashing. Perhaps we could make it
optional?

What about those people that complain about crypto libraries on their systems?

Regards,
Simon

^ permalink raw reply	[flat|nested] 90+ messages in thread

* Re: [PATCH v5 02/29] kconfig: Add tools support to CONFIG_IS_ENABLED()
  2021-10-07 18:02             ` Simon Glass
@ 2021-10-07 18:30               ` Tom Rini
  2021-10-07 18:50                 ` Simon Glass
  0 siblings, 1 reply; 90+ messages in thread
From: Tom Rini @ 2021-10-07 18:30 UTC (permalink / raw)
  To: Simon Glass
  Cc: U-Boot Mailing List, Alexandru Gagniuc, Andre Przywara,
	Rasmus Villemoes, Robert Marko, Masahiro Yamada, Masahiro Yamada

[-- Attachment #1: Type: text/plain, Size: 3820 bytes --]

On Thu, Oct 07, 2021 at 12:02:24PM -0600, Simon Glass wrote:
> Hi Tom,
> 
> On Thu, 7 Oct 2021 at 07:42, Tom Rini <trini@konsulko.com> wrote:
> >
> > On Thu, Oct 07, 2021 at 07:32:04AM -0600, Simon Glass wrote:
> > > Hi Tom,
> > >
> > > On Wed, 6 Oct 2021 at 20:52, Tom Rini <trini@konsulko.com> wrote:
> > > >
> > > > On Wed, Oct 06, 2021 at 08:49:13PM -0600, Simon Glass wrote:
> > > > > Hi Tom,
> > > > >
> > > > > On Wed, 6 Oct 2021 at 18:26, Tom Rini <trini@konsulko.com> wrote:
> > > > > >
> > > > > > On Sat, Sep 25, 2021 at 07:43:15PM -0600, Simon Glass wrote:
> > > > > >
> > > > > > > At present we must separately test for the host build for many options,
> > > > > > > since we force them to be enabled. For example, CONFIG_FIT is always
> > > > > > > enabled in the host tools, even if CONFIG_FIT is not enabled by the
> > > > > > > board itself.
> > > > > > >
> > > > > > > It would be more convenient if we could use, for example,
> > > > > > > CONFIG_IS_ENABLED(FIT) and get CONFIG_HOST_FIT, when building for the
> > > > > > > host. Add support for this.
> > > > > > >
> > > > > > > With this and the tools_build() function, we should be able to remove all
> > > > > > > the #ifdefs currently needed in code that is build by tools and targets.
> > > > > > >
> > > > > > > This will be even nicer when we move to using CONFIG(xxx) everywhere,
> > > > > > > since all the #ifdef and IS_ENABLED/CONFIG_IS_ENABLED stuff will go away.
> > > > > > >
> > > > > > > Signed-off-by: Simon Glass <sjg@chromium.org>
> > > > > > > Suggested-by: Rasmus Villemoes <rasmus.villemoes@prevas.dk> # b4f73886
> > > > > > > Reviewed-by: Alexandru Gagniuc <mr.nuke.me@gmail.com>
> > > > > >
> > > > > > The problem here is we don't include <linux/kconfig.h> automatically
> > > > > > when building host stuff, I believe.  This is why doing this breaks
> > > > > > test_mkimage_hashes for me on am335x_evm with:
> > > > > > /tmp/.bm-work/am335x_evm/tools/mkimage -D -I dts -O dtb -i /tmp/.bm-work/am335x_evm -f /home/trini/work/u-boot/u-boot/test/py/tests/vboot//hash-images.its /tmp/.bm-work/am335x_evm/test.fit
> > > > > > *** stack smashing detected ***: <unknown> terminated
> > > > >
> > > > > Oh dear, and no CI coverage.
> > > > >
> > > > > I was reluctant to include kconfig.h everywhere but perhaps that is
> > > > > the best approach. Will take a look ASAP.
> > > >
> > > > Maybe we need to think a bit harder too about how we structure
> > > > intentionally shared code.
> > > >
> > > > Why not, for example, for these common algorithms, rely on typical
> > > > system headers/libraries in the tooling, which means we validated U-Boot
> > > > vs common reference, rather than just our implementations?
> > >
> > > Do you mean we use openssl for sha1, for example?
> >
> > I guess, yes.  Just flat out saying we require openssl for tools, and
> > doing our best to not make compatibility with libressl difficult, seems
> > likely to cause less headaches for people than what we already require
> > in terms of Python.
> 
> I'm OK with that, although I do think the problem identified here
> (CONFIG_SHA256 not enabled) is somewhat sideways from that. We already

OK, I've taken what you posted on IRC and folded that in, continuing
tests now.

> use separate code paths to run hashing. Perhaps we could make it
> optional?
> 
> What about those people that complain about crypto libraries on their systems?

I'm not sure how big a problem that really is, currently.  I guess one
thing would be to make a separate thread on it, and put it in the next
-rc email as well, for people to explain why it would be a hardship.
That in turn, I think, is coming down to modern vs very old openssl
support, rather than having any at all.

-- 
Tom

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 659 bytes --]

^ permalink raw reply	[flat|nested] 90+ messages in thread

* Re: [PATCH v5 02/29] kconfig: Add tools support to CONFIG_IS_ENABLED()
  2021-10-07 18:30               ` Tom Rini
@ 2021-10-07 18:50                 ` Simon Glass
  2021-10-07 19:32                   ` Alex G.
  0 siblings, 1 reply; 90+ messages in thread
From: Simon Glass @ 2021-10-07 18:50 UTC (permalink / raw)
  To: Tom Rini
  Cc: U-Boot Mailing List, Alexandru Gagniuc, Andre Przywara,
	Rasmus Villemoes, Robert Marko, Masahiro Yamada, Masahiro Yamada

Hi Tom,

On Thu, 7 Oct 2021 at 12:30, Tom Rini <trini@konsulko.com> wrote:
>
> On Thu, Oct 07, 2021 at 12:02:24PM -0600, Simon Glass wrote:
> > Hi Tom,
> >
> > On Thu, 7 Oct 2021 at 07:42, Tom Rini <trini@konsulko.com> wrote:
> > >
> > > On Thu, Oct 07, 2021 at 07:32:04AM -0600, Simon Glass wrote:
> > > > Hi Tom,
> > > >
> > > > On Wed, 6 Oct 2021 at 20:52, Tom Rini <trini@konsulko.com> wrote:
> > > > >
> > > > > On Wed, Oct 06, 2021 at 08:49:13PM -0600, Simon Glass wrote:
> > > > > > Hi Tom,
> > > > > >
> > > > > > On Wed, 6 Oct 2021 at 18:26, Tom Rini <trini@konsulko.com> wrote:
> > > > > > >
> > > > > > > On Sat, Sep 25, 2021 at 07:43:15PM -0600, Simon Glass wrote:
> > > > > > >
> > > > > > > > At present we must separately test for the host build for many options,
> > > > > > > > since we force them to be enabled. For example, CONFIG_FIT is always
> > > > > > > > enabled in the host tools, even if CONFIG_FIT is not enabled by the
> > > > > > > > board itself.
> > > > > > > >
> > > > > > > > It would be more convenient if we could use, for example,
> > > > > > > > CONFIG_IS_ENABLED(FIT) and get CONFIG_HOST_FIT, when building for the
> > > > > > > > host. Add support for this.
> > > > > > > >
> > > > > > > > With this and the tools_build() function, we should be able to remove all
> > > > > > > > the #ifdefs currently needed in code that is build by tools and targets.
> > > > > > > >
> > > > > > > > This will be even nicer when we move to using CONFIG(xxx) everywhere,
> > > > > > > > since all the #ifdef and IS_ENABLED/CONFIG_IS_ENABLED stuff will go away.
> > > > > > > >
> > > > > > > > Signed-off-by: Simon Glass <sjg@chromium.org>
> > > > > > > > Suggested-by: Rasmus Villemoes <rasmus.villemoes@prevas.dk> # b4f73886
> > > > > > > > Reviewed-by: Alexandru Gagniuc <mr.nuke.me@gmail.com>
> > > > > > >
> > > > > > > The problem here is we don't include <linux/kconfig.h> automatically
> > > > > > > when building host stuff, I believe.  This is why doing this breaks
> > > > > > > test_mkimage_hashes for me on am335x_evm with:
> > > > > > > /tmp/.bm-work/am335x_evm/tools/mkimage -D -I dts -O dtb -i /tmp/.bm-work/am335x_evm -f /home/trini/work/u-boot/u-boot/test/py/tests/vboot//hash-images.its /tmp/.bm-work/am335x_evm/test.fit
> > > > > > > *** stack smashing detected ***: <unknown> terminated
> > > > > >
> > > > > > Oh dear, and no CI coverage.
> > > > > >
> > > > > > I was reluctant to include kconfig.h everywhere but perhaps that is
> > > > > > the best approach. Will take a look ASAP.
> > > > >
> > > > > Maybe we need to think a bit harder too about how we structure
> > > > > intentionally shared code.
> > > > >
> > > > > Why not, for example, for these common algorithms, rely on typical
> > > > > system headers/libraries in the tooling, which means we validated U-Boot
> > > > > vs common reference, rather than just our implementations?
> > > >
> > > > Do you mean we use openssl for sha1, for example?
> > >
> > > I guess, yes.  Just flat out saying we require openssl for tools, and
> > > doing our best to not make compatibility with libressl difficult, seems
> > > likely to cause less headaches for people than what we already require
> > > in terms of Python.
> >
> > I'm OK with that, although I do think the problem identified here
> > (CONFIG_SHA256 not enabled) is somewhat sideways from that. We already
>
> OK, I've taken what you posted on IRC and folded that in, continuing
> tests now.
>
> > use separate code paths to run hashing. Perhaps we could make it
> > optional?
> >
> > What about those people that complain about crypto libraries on their systems?
>
> I'm not sure how big a problem that really is, currently.  I guess one
> thing would be to make a separate thread on it, and put it in the next
> -rc email as well, for people to explain why it would be a hardship.
> That in turn, I think, is coming down to modern vs very old openssl
> support, rather than having any at all.

OK I'll take a look at some point.

Or perhaps Alex might like to?

Regards,
Simon

^ permalink raw reply	[flat|nested] 90+ messages in thread

* Re: [PATCH v5 02/29] kconfig: Add tools support to CONFIG_IS_ENABLED()
  2021-10-07 18:50                 ` Simon Glass
@ 2021-10-07 19:32                   ` Alex G.
  2021-10-07 19:39                     ` Tom Rini
  0 siblings, 1 reply; 90+ messages in thread
From: Alex G. @ 2021-10-07 19:32 UTC (permalink / raw)
  To: Simon Glass, Tom Rini
  Cc: U-Boot Mailing List, Andre Przywara, Rasmus Villemoes,
	Robert Marko, Masahiro Yamada, Masahiro Yamada



On 10/7/21 1:50 PM, Simon Glass wrote:
> Hi Tom,
> 
> On Thu, 7 Oct 2021 at 12:30, Tom Rini <trini@konsulko.com> wrote:
>>
>> On Thu, Oct 07, 2021 at 12:02:24PM -0600, Simon Glass wrote:
>>> Hi Tom,
>>>
>>> On Thu, 7 Oct 2021 at 07:42, Tom Rini <trini@konsulko.com> wrote:
>>>>
>>>> On Thu, Oct 07, 2021 at 07:32:04AM -0600, Simon Glass wrote:
>>>>> Hi Tom,
>>>>>
>>>>> On Wed, 6 Oct 2021 at 20:52, Tom Rini <trini@konsulko.com> wrote:
>>>>>>
>>>>>> On Wed, Oct 06, 2021 at 08:49:13PM -0600, Simon Glass wrote:
>>>>>>> Hi Tom,
>>>>>>>
>>>>>>> On Wed, 6 Oct 2021 at 18:26, Tom Rini <trini@konsulko.com> wrote:
>>>>>>>>
>>>>>>>> On Sat, Sep 25, 2021 at 07:43:15PM -0600, Simon Glass wrote:
>>>>>>>>
>>>>>>>>> At present we must separately test for the host build for many options,
>>>>>>>>> since we force them to be enabled. For example, CONFIG_FIT is always
>>>>>>>>> enabled in the host tools, even if CONFIG_FIT is not enabled by the
>>>>>>>>> board itself.
>>>>>>>>>
>>>>>>>>> It would be more convenient if we could use, for example,
>>>>>>>>> CONFIG_IS_ENABLED(FIT) and get CONFIG_HOST_FIT, when building for the
>>>>>>>>> host. Add support for this.
>>>>>>>>>
>>>>>>>>> With this and the tools_build() function, we should be able to remove all
>>>>>>>>> the #ifdefs currently needed in code that is build by tools and targets.
>>>>>>>>>
>>>>>>>>> This will be even nicer when we move to using CONFIG(xxx) everywhere,
>>>>>>>>> since all the #ifdef and IS_ENABLED/CONFIG_IS_ENABLED stuff will go away.
>>>>>>>>>
>>>>>>>>> Signed-off-by: Simon Glass <sjg@chromium.org>
>>>>>>>>> Suggested-by: Rasmus Villemoes <rasmus.villemoes@prevas.dk> # b4f73886
>>>>>>>>> Reviewed-by: Alexandru Gagniuc <mr.nuke.me@gmail.com>
>>>>>>>>
>>>>>>>> The problem here is we don't include <linux/kconfig.h> automatically
>>>>>>>> when building host stuff, I believe.  This is why doing this breaks
>>>>>>>> test_mkimage_hashes for me on am335x_evm with:
>>>>>>>> /tmp/.bm-work/am335x_evm/tools/mkimage -D -I dts -O dtb -i /tmp/.bm-work/am335x_evm -f /home/trini/work/u-boot/u-boot/test/py/tests/vboot//hash-images.its /tmp/.bm-work/am335x_evm/test.fit
>>>>>>>> *** stack smashing detected ***: <unknown> terminated
>>>>>>>
>>>>>>> Oh dear, and no CI coverage.
>>>>>>>
>>>>>>> I was reluctant to include kconfig.h everywhere but perhaps that is
>>>>>>> the best approach. Will take a look ASAP.
>>>>>>
>>>>>> Maybe we need to think a bit harder too about how we structure
>>>>>> intentionally shared code.
>>>>>>
>>>>>> Why not, for example, for these common algorithms, rely on typical
>>>>>> system headers/libraries in the tooling, which means we validated U-Boot
>>>>>> vs common reference, rather than just our implementations?
>>>>>
>>>>> Do you mean we use openssl for sha1, for example?
>>>>
>>>> I guess, yes.  Just flat out saying we require openssl for tools, and
>>>> doing our best to not make compatibility with libressl difficult, seems
>>>> likely to cause less headaches for people than what we already require
>>>> in terms of Python.
>>>
>>> I'm OK with that, although I do think the problem identified here
>>> (CONFIG_SHA256 not enabled) is somewhat sideways from that. We already
>>
>> OK, I've taken what you posted on IRC and folded that in, continuing
>> tests now.
>>
>>> use separate code paths to run hashing. Perhaps we could make it
>>> optional?
>>>
>>> What about those people that complain about crypto libraries on their systems?
>>
>> I'm not sure how big a problem that really is, currently.  I guess one
>> thing would be to make a separate thread on it, and put it in the next
>> -rc email as well, for people to explain why it would be a hardship.
>> That in turn, I think, is coming down to modern vs very old openssl
>> support, rather than having any at all.
> 
> OK I'll take a look at some point.
> 
> Or perhaps Alex might like to?

We just got a complain about OpenSSL yesterday [1]

Alex

[1] https://lists.denx.de/pipermail/u-boot/2021-October/462728.html

^ permalink raw reply	[flat|nested] 90+ messages in thread

* Re: [PATCH v5 02/29] kconfig: Add tools support to CONFIG_IS_ENABLED()
  2021-10-07 19:32                   ` Alex G.
@ 2021-10-07 19:39                     ` Tom Rini
  2021-10-07 20:33                       ` Alex G.
  0 siblings, 1 reply; 90+ messages in thread
From: Tom Rini @ 2021-10-07 19:39 UTC (permalink / raw)
  To: Alex G.
  Cc: Simon Glass, U-Boot Mailing List, Andre Przywara,
	Rasmus Villemoes, Robert Marko, Masahiro Yamada, Masahiro Yamada

[-- Attachment #1: Type: text/plain, Size: 4829 bytes --]

On Thu, Oct 07, 2021 at 02:32:42PM -0500, Alex G. wrote:
> 
> 
> On 10/7/21 1:50 PM, Simon Glass wrote:
> > Hi Tom,
> > 
> > On Thu, 7 Oct 2021 at 12:30, Tom Rini <trini@konsulko.com> wrote:
> > > 
> > > On Thu, Oct 07, 2021 at 12:02:24PM -0600, Simon Glass wrote:
> > > > Hi Tom,
> > > > 
> > > > On Thu, 7 Oct 2021 at 07:42, Tom Rini <trini@konsulko.com> wrote:
> > > > > 
> > > > > On Thu, Oct 07, 2021 at 07:32:04AM -0600, Simon Glass wrote:
> > > > > > Hi Tom,
> > > > > > 
> > > > > > On Wed, 6 Oct 2021 at 20:52, Tom Rini <trini@konsulko.com> wrote:
> > > > > > > 
> > > > > > > On Wed, Oct 06, 2021 at 08:49:13PM -0600, Simon Glass wrote:
> > > > > > > > Hi Tom,
> > > > > > > > 
> > > > > > > > On Wed, 6 Oct 2021 at 18:26, Tom Rini <trini@konsulko.com> wrote:
> > > > > > > > > 
> > > > > > > > > On Sat, Sep 25, 2021 at 07:43:15PM -0600, Simon Glass wrote:
> > > > > > > > > 
> > > > > > > > > > At present we must separately test for the host build for many options,
> > > > > > > > > > since we force them to be enabled. For example, CONFIG_FIT is always
> > > > > > > > > > enabled in the host tools, even if CONFIG_FIT is not enabled by the
> > > > > > > > > > board itself.
> > > > > > > > > > 
> > > > > > > > > > It would be more convenient if we could use, for example,
> > > > > > > > > > CONFIG_IS_ENABLED(FIT) and get CONFIG_HOST_FIT, when building for the
> > > > > > > > > > host. Add support for this.
> > > > > > > > > > 
> > > > > > > > > > With this and the tools_build() function, we should be able to remove all
> > > > > > > > > > the #ifdefs currently needed in code that is build by tools and targets.
> > > > > > > > > > 
> > > > > > > > > > This will be even nicer when we move to using CONFIG(xxx) everywhere,
> > > > > > > > > > since all the #ifdef and IS_ENABLED/CONFIG_IS_ENABLED stuff will go away.
> > > > > > > > > > 
> > > > > > > > > > Signed-off-by: Simon Glass <sjg@chromium.org>
> > > > > > > > > > Suggested-by: Rasmus Villemoes <rasmus.villemoes@prevas.dk> # b4f73886
> > > > > > > > > > Reviewed-by: Alexandru Gagniuc <mr.nuke.me@gmail.com>
> > > > > > > > > 
> > > > > > > > > The problem here is we don't include <linux/kconfig.h> automatically
> > > > > > > > > when building host stuff, I believe.  This is why doing this breaks
> > > > > > > > > test_mkimage_hashes for me on am335x_evm with:
> > > > > > > > > /tmp/.bm-work/am335x_evm/tools/mkimage -D -I dts -O dtb -i /tmp/.bm-work/am335x_evm -f /home/trini/work/u-boot/u-boot/test/py/tests/vboot//hash-images.its /tmp/.bm-work/am335x_evm/test.fit
> > > > > > > > > *** stack smashing detected ***: <unknown> terminated
> > > > > > > > 
> > > > > > > > Oh dear, and no CI coverage.
> > > > > > > > 
> > > > > > > > I was reluctant to include kconfig.h everywhere but perhaps that is
> > > > > > > > the best approach. Will take a look ASAP.
> > > > > > > 
> > > > > > > Maybe we need to think a bit harder too about how we structure
> > > > > > > intentionally shared code.
> > > > > > > 
> > > > > > > Why not, for example, for these common algorithms, rely on typical
> > > > > > > system headers/libraries in the tooling, which means we validated U-Boot
> > > > > > > vs common reference, rather than just our implementations?
> > > > > > 
> > > > > > Do you mean we use openssl for sha1, for example?
> > > > > 
> > > > > I guess, yes.  Just flat out saying we require openssl for tools, and
> > > > > doing our best to not make compatibility with libressl difficult, seems
> > > > > likely to cause less headaches for people than what we already require
> > > > > in terms of Python.
> > > > 
> > > > I'm OK with that, although I do think the problem identified here
> > > > (CONFIG_SHA256 not enabled) is somewhat sideways from that. We already
> > > 
> > > OK, I've taken what you posted on IRC and folded that in, continuing
> > > tests now.
> > > 
> > > > use separate code paths to run hashing. Perhaps we could make it
> > > > optional?
> > > > 
> > > > What about those people that complain about crypto libraries on their systems?
> > > 
> > > I'm not sure how big a problem that really is, currently.  I guess one
> > > thing would be to make a separate thread on it, and put it in the next
> > > -rc email as well, for people to explain why it would be a hardship.
> > > That in turn, I think, is coming down to modern vs very old openssl
> > > support, rather than having any at all.
> > 
> > OK I'll take a look at some point.
> > 
> > Or perhaps Alex might like to?
> 
> We just got a complain about OpenSSL yesterday [1]
> 
> Alex
> 
> [1] https://lists.denx.de/pipermail/u-boot/2021-October/462728.html

Oh goodness, LibreELC is a custom build system... I'll have to chime in
there, thanks.

-- 
Tom

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 659 bytes --]

^ permalink raw reply	[flat|nested] 90+ messages in thread

* Re: [PATCH v5 02/29] kconfig: Add tools support to CONFIG_IS_ENABLED()
  2021-10-07 19:39                     ` Tom Rini
@ 2021-10-07 20:33                       ` Alex G.
  2021-10-07 21:04                         ` Tom Rini
  0 siblings, 1 reply; 90+ messages in thread
From: Alex G. @ 2021-10-07 20:33 UTC (permalink / raw)
  To: Tom Rini
  Cc: Simon Glass, U-Boot Mailing List, Andre Przywara,
	Rasmus Villemoes, Robert Marko, Masahiro Yamada, Masahiro Yamada



On 10/7/21 2:39 PM, Tom Rini wrote:
> On Thu, Oct 07, 2021 at 02:32:42PM -0500, Alex G. wrote:
>>
>>
>> On 10/7/21 1:50 PM, Simon Glass wrote:
>>> Hi Tom,
>>>
>>> On Thu, 7 Oct 2021 at 12:30, Tom Rini <trini@konsulko.com> wrote:
>>>>
>>>> On Thu, Oct 07, 2021 at 12:02:24PM -0600, Simon Glass wrote:
>>>>> Hi Tom,
>>>>>
>>>>> On Thu, 7 Oct 2021 at 07:42, Tom Rini <trini@konsulko.com> wrote:
>>>>>>
>>>>>> On Thu, Oct 07, 2021 at 07:32:04AM -0600, Simon Glass wrote:
>>>>>>> Hi Tom,
>>>>>>>
>>>>>>> On Wed, 6 Oct 2021 at 20:52, Tom Rini <trini@konsulko.com> wrote:
>>>>>>>>
>>>>>>>> On Wed, Oct 06, 2021 at 08:49:13PM -0600, Simon Glass wrote:
>>>>>>>>> Hi Tom,
>>>>>>>>>
>>>>>>>>> On Wed, 6 Oct 2021 at 18:26, Tom Rini <trini@konsulko.com> wrote:
>>>>>>>>>>
>>>>>>>>>> On Sat, Sep 25, 2021 at 07:43:15PM -0600, Simon Glass wrote:
>>>>>>>>>>
>>>>>>>>>>> At present we must separately test for the host build for many options,
>>>>>>>>>>> since we force them to be enabled. For example, CONFIG_FIT is always
>>>>>>>>>>> enabled in the host tools, even if CONFIG_FIT is not enabled by the
>>>>>>>>>>> board itself.
>>>>>>>>>>>
>>>>>>>>>>> It would be more convenient if we could use, for example,
>>>>>>>>>>> CONFIG_IS_ENABLED(FIT) and get CONFIG_HOST_FIT, when building for the
>>>>>>>>>>> host. Add support for this.
>>>>>>>>>>>
>>>>>>>>>>> With this and the tools_build() function, we should be able to remove all
>>>>>>>>>>> the #ifdefs currently needed in code that is build by tools and targets.
>>>>>>>>>>>
>>>>>>>>>>> This will be even nicer when we move to using CONFIG(xxx) everywhere,
>>>>>>>>>>> since all the #ifdef and IS_ENABLED/CONFIG_IS_ENABLED stuff will go away.
>>>>>>>>>>>
>>>>>>>>>>> Signed-off-by: Simon Glass <sjg@chromium.org>
>>>>>>>>>>> Suggested-by: Rasmus Villemoes <rasmus.villemoes@prevas.dk> # b4f73886
>>>>>>>>>>> Reviewed-by: Alexandru Gagniuc <mr.nuke.me@gmail.com>
>>>>>>>>>>
>>>>>>>>>> The problem here is we don't include <linux/kconfig.h> automatically
>>>>>>>>>> when building host stuff, I believe.  This is why doing this breaks
>>>>>>>>>> test_mkimage_hashes for me on am335x_evm with:
>>>>>>>>>> /tmp/.bm-work/am335x_evm/tools/mkimage -D -I dts -O dtb -i /tmp/.bm-work/am335x_evm -f /home/trini/work/u-boot/u-boot/test/py/tests/vboot//hash-images.its /tmp/.bm-work/am335x_evm/test.fit
>>>>>>>>>> *** stack smashing detected ***: <unknown> terminated
>>>>>>>>>
>>>>>>>>> Oh dear, and no CI coverage.
>>>>>>>>>
>>>>>>>>> I was reluctant to include kconfig.h everywhere but perhaps that is
>>>>>>>>> the best approach. Will take a look ASAP.
>>>>>>>>
>>>>>>>> Maybe we need to think a bit harder too about how we structure
>>>>>>>> intentionally shared code.
>>>>>>>>
>>>>>>>> Why not, for example, for these common algorithms, rely on typical
>>>>>>>> system headers/libraries in the tooling, which means we validated U-Boot
>>>>>>>> vs common reference, rather than just our implementations?
>>>>>>>
>>>>>>> Do you mean we use openssl for sha1, for example?
>>>>>>
>>>>>> I guess, yes.  Just flat out saying we require openssl for tools, and
>>>>>> doing our best to not make compatibility with libressl difficult, seems
>>>>>> likely to cause less headaches for people than what we already require
>>>>>> in terms of Python.
>>>>>
>>>>> I'm OK with that, although I do think the problem identified here
>>>>> (CONFIG_SHA256 not enabled) is somewhat sideways from that. We already
>>>>
>>>> OK, I've taken what you posted on IRC and folded that in, continuing
>>>> tests now.
>>>>
>>>>> use separate code paths to run hashing. Perhaps we could make it
>>>>> optional?
>>>>>
>>>>> What about those people that complain about crypto libraries on their systems?
>>>>
>>>> I'm not sure how big a problem that really is, currently.  I guess one
>>>> thing would be to make a separate thread on it, and put it in the next
>>>> -rc email as well, for people to explain why it would be a hardship.
>>>> That in turn, I think, is coming down to modern vs very old openssl
>>>> support, rather than having any at all.
>>>
>>> OK I'll take a look at some point.
>>>
>>> Or perhaps Alex might like to?
>>
>> We just got a complain about OpenSSL yesterday [1]
>>
>> Alex
>>
>> [1] https://lists.denx.de/pipermail/u-boot/2021-October/462728.html
> 
> Oh goodness, LibreELC is a custom build system... I'll have to chime in
> there, thanks.

I am in favor of keeping libcrapto separate. We still need our own code 
for CRC32 and other weak or non-crypto hashes, a tidbit which makes me 
doubt the wisdom of relying entirely on an external lib.

I had to make a similar decision when writing the hashes test. 
Originally, I was going to use pyCrypto, crcelk, to re-hash everything 
and compare to mkimage. It turned out to be neither necessarry nor 
efficient.

Alex

^ permalink raw reply	[flat|nested] 90+ messages in thread

* Re: [PATCH v5 02/29] kconfig: Add tools support to CONFIG_IS_ENABLED()
  2021-10-07 20:33                       ` Alex G.
@ 2021-10-07 21:04                         ` Tom Rini
  2021-10-07 21:15                           ` Alex G.
  0 siblings, 1 reply; 90+ messages in thread
From: Tom Rini @ 2021-10-07 21:04 UTC (permalink / raw)
  To: Alex G.
  Cc: Simon Glass, U-Boot Mailing List, Andre Przywara,
	Rasmus Villemoes, Robert Marko, Masahiro Yamada, Masahiro Yamada

[-- Attachment #1: Type: text/plain, Size: 5948 bytes --]

On Thu, Oct 07, 2021 at 03:33:32PM -0500, Alex G. wrote:
> 
> 
> On 10/7/21 2:39 PM, Tom Rini wrote:
> > On Thu, Oct 07, 2021 at 02:32:42PM -0500, Alex G. wrote:
> > > 
> > > 
> > > On 10/7/21 1:50 PM, Simon Glass wrote:
> > > > Hi Tom,
> > > > 
> > > > On Thu, 7 Oct 2021 at 12:30, Tom Rini <trini@konsulko.com> wrote:
> > > > > 
> > > > > On Thu, Oct 07, 2021 at 12:02:24PM -0600, Simon Glass wrote:
> > > > > > Hi Tom,
> > > > > > 
> > > > > > On Thu, 7 Oct 2021 at 07:42, Tom Rini <trini@konsulko.com> wrote:
> > > > > > > 
> > > > > > > On Thu, Oct 07, 2021 at 07:32:04AM -0600, Simon Glass wrote:
> > > > > > > > Hi Tom,
> > > > > > > > 
> > > > > > > > On Wed, 6 Oct 2021 at 20:52, Tom Rini <trini@konsulko.com> wrote:
> > > > > > > > > 
> > > > > > > > > On Wed, Oct 06, 2021 at 08:49:13PM -0600, Simon Glass wrote:
> > > > > > > > > > Hi Tom,
> > > > > > > > > > 
> > > > > > > > > > On Wed, 6 Oct 2021 at 18:26, Tom Rini <trini@konsulko.com> wrote:
> > > > > > > > > > > 
> > > > > > > > > > > On Sat, Sep 25, 2021 at 07:43:15PM -0600, Simon Glass wrote:
> > > > > > > > > > > 
> > > > > > > > > > > > At present we must separately test for the host build for many options,
> > > > > > > > > > > > since we force them to be enabled. For example, CONFIG_FIT is always
> > > > > > > > > > > > enabled in the host tools, even if CONFIG_FIT is not enabled by the
> > > > > > > > > > > > board itself.
> > > > > > > > > > > > 
> > > > > > > > > > > > It would be more convenient if we could use, for example,
> > > > > > > > > > > > CONFIG_IS_ENABLED(FIT) and get CONFIG_HOST_FIT, when building for the
> > > > > > > > > > > > host. Add support for this.
> > > > > > > > > > > > 
> > > > > > > > > > > > With this and the tools_build() function, we should be able to remove all
> > > > > > > > > > > > the #ifdefs currently needed in code that is build by tools and targets.
> > > > > > > > > > > > 
> > > > > > > > > > > > This will be even nicer when we move to using CONFIG(xxx) everywhere,
> > > > > > > > > > > > since all the #ifdef and IS_ENABLED/CONFIG_IS_ENABLED stuff will go away.
> > > > > > > > > > > > 
> > > > > > > > > > > > Signed-off-by: Simon Glass <sjg@chromium.org>
> > > > > > > > > > > > Suggested-by: Rasmus Villemoes <rasmus.villemoes@prevas.dk> # b4f73886
> > > > > > > > > > > > Reviewed-by: Alexandru Gagniuc <mr.nuke.me@gmail.com>
> > > > > > > > > > > 
> > > > > > > > > > > The problem here is we don't include <linux/kconfig.h> automatically
> > > > > > > > > > > when building host stuff, I believe.  This is why doing this breaks
> > > > > > > > > > > test_mkimage_hashes for me on am335x_evm with:
> > > > > > > > > > > /tmp/.bm-work/am335x_evm/tools/mkimage -D -I dts -O dtb -i /tmp/.bm-work/am335x_evm -f /home/trini/work/u-boot/u-boot/test/py/tests/vboot//hash-images.its /tmp/.bm-work/am335x_evm/test.fit
> > > > > > > > > > > *** stack smashing detected ***: <unknown> terminated
> > > > > > > > > > 
> > > > > > > > > > Oh dear, and no CI coverage.
> > > > > > > > > > 
> > > > > > > > > > I was reluctant to include kconfig.h everywhere but perhaps that is
> > > > > > > > > > the best approach. Will take a look ASAP.
> > > > > > > > > 
> > > > > > > > > Maybe we need to think a bit harder too about how we structure
> > > > > > > > > intentionally shared code.
> > > > > > > > > 
> > > > > > > > > Why not, for example, for these common algorithms, rely on typical
> > > > > > > > > system headers/libraries in the tooling, which means we validated U-Boot
> > > > > > > > > vs common reference, rather than just our implementations?
> > > > > > > > 
> > > > > > > > Do you mean we use openssl for sha1, for example?
> > > > > > > 
> > > > > > > I guess, yes.  Just flat out saying we require openssl for tools, and
> > > > > > > doing our best to not make compatibility with libressl difficult, seems
> > > > > > > likely to cause less headaches for people than what we already require
> > > > > > > in terms of Python.
> > > > > > 
> > > > > > I'm OK with that, although I do think the problem identified here
> > > > > > (CONFIG_SHA256 not enabled) is somewhat sideways from that. We already
> > > > > 
> > > > > OK, I've taken what you posted on IRC and folded that in, continuing
> > > > > tests now.
> > > > > 
> > > > > > use separate code paths to run hashing. Perhaps we could make it
> > > > > > optional?
> > > > > > 
> > > > > > What about those people that complain about crypto libraries on their systems?
> > > > > 
> > > > > I'm not sure how big a problem that really is, currently.  I guess one
> > > > > thing would be to make a separate thread on it, and put it in the next
> > > > > -rc email as well, for people to explain why it would be a hardship.
> > > > > That in turn, I think, is coming down to modern vs very old openssl
> > > > > support, rather than having any at all.
> > > > 
> > > > OK I'll take a look at some point.
> > > > 
> > > > Or perhaps Alex might like to?
> > > 
> > > We just got a complain about OpenSSL yesterday [1]
> > > 
> > > Alex
> > > 
> > > [1] https://lists.denx.de/pipermail/u-boot/2021-October/462728.html
> > 
> > Oh goodness, LibreELC is a custom build system... I'll have to chime in
> > there, thanks.
> 
> I am in favor of keeping libcrapto separate. We still need our own code for
> CRC32 and other weak or non-crypto hashes, a tidbit which makes me doubt the
> wisdom of relying entirely on an external lib.
> 
> I had to make a similar decision when writing the hashes test. Originally, I
> was going to use pyCrypto, crcelk, to re-hash everything and compare to
> mkimage. It turned out to be neither necessarry nor efficient.

Is there perhaps a happy medium?  Or do we just need to think harder on
how to make the code U-Boot needs shared between target and host tools
clean and clear and obvious enough?

-- 
Tom

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 659 bytes --]

^ permalink raw reply	[flat|nested] 90+ messages in thread

* Re: [PATCH v5 02/29] kconfig: Add tools support to CONFIG_IS_ENABLED()
  2021-10-07 21:04                         ` Tom Rini
@ 2021-10-07 21:15                           ` Alex G.
  0 siblings, 0 replies; 90+ messages in thread
From: Alex G. @ 2021-10-07 21:15 UTC (permalink / raw)
  To: Tom Rini
  Cc: Simon Glass, U-Boot Mailing List, Andre Przywara,
	Rasmus Villemoes, Robert Marko, Masahiro Yamada, Masahiro Yamada



On 10/7/21 4:04 PM, Tom Rini wrote:
> On Thu, Oct 07, 2021 at 03:33:32PM -0500, Alex G. wrote:
>>
>>
>> On 10/7/21 2:39 PM, Tom Rini wrote:
>>> On Thu, Oct 07, 2021 at 02:32:42PM -0500, Alex G. wrote:
>>>>
>>>>
>>>> On 10/7/21 1:50 PM, Simon Glass wrote:
>>>>> Hi Tom,
>>>>>
>>>>> On Thu, 7 Oct 2021 at 12:30, Tom Rini <trini@konsulko.com> wrote:
>>>>>>
>>>>>> On Thu, Oct 07, 2021 at 12:02:24PM -0600, Simon Glass wrote:
>>>>>>> Hi Tom,
>>>>>>>
>>>>>>> On Thu, 7 Oct 2021 at 07:42, Tom Rini <trini@konsulko.com> wrote:
>>>>>>>>
>>>>>>>> On Thu, Oct 07, 2021 at 07:32:04AM -0600, Simon Glass wrote:
>>>>>>>>> Hi Tom,
>>>>>>>>>
>>>>>>>>> On Wed, 6 Oct 2021 at 20:52, Tom Rini <trini@konsulko.com> wrote:
>>>>>>>>>>
>>>>>>>>>> On Wed, Oct 06, 2021 at 08:49:13PM -0600, Simon Glass wrote:
>>>>>>>>>>> Hi Tom,
>>>>>>>>>>>
>>>>>>>>>>> On Wed, 6 Oct 2021 at 18:26, Tom Rini <trini@konsulko.com> wrote:
>>>>>>>>>>>>
>>>>>>>>>>>> On Sat, Sep 25, 2021 at 07:43:15PM -0600, Simon Glass wrote:
>>>>>>>>>>>>
>>>>>>>>>>>>> At present we must separately test for the host build for many options,
>>>>>>>>>>>>> since we force them to be enabled. For example, CONFIG_FIT is always
>>>>>>>>>>>>> enabled in the host tools, even if CONFIG_FIT is not enabled by the
>>>>>>>>>>>>> board itself.
>>>>>>>>>>>>>
>>>>>>>>>>>>> It would be more convenient if we could use, for example,
>>>>>>>>>>>>> CONFIG_IS_ENABLED(FIT) and get CONFIG_HOST_FIT, when building for the
>>>>>>>>>>>>> host. Add support for this.
>>>>>>>>>>>>>
>>>>>>>>>>>>> With this and the tools_build() function, we should be able to remove all
>>>>>>>>>>>>> the #ifdefs currently needed in code that is build by tools and targets.
>>>>>>>>>>>>>
>>>>>>>>>>>>> This will be even nicer when we move to using CONFIG(xxx) everywhere,
>>>>>>>>>>>>> since all the #ifdef and IS_ENABLED/CONFIG_IS_ENABLED stuff will go away.
>>>>>>>>>>>>>
>>>>>>>>>>>>> Signed-off-by: Simon Glass <sjg@chromium.org>
>>>>>>>>>>>>> Suggested-by: Rasmus Villemoes <rasmus.villemoes@prevas.dk> # b4f73886
>>>>>>>>>>>>> Reviewed-by: Alexandru Gagniuc <mr.nuke.me@gmail.com>
>>>>>>>>>>>>
>>>>>>>>>>>> The problem here is we don't include <linux/kconfig.h> automatically
>>>>>>>>>>>> when building host stuff, I believe.  This is why doing this breaks
>>>>>>>>>>>> test_mkimage_hashes for me on am335x_evm with:
>>>>>>>>>>>> /tmp/.bm-work/am335x_evm/tools/mkimage -D -I dts -O dtb -i /tmp/.bm-work/am335x_evm -f /home/trini/work/u-boot/u-boot/test/py/tests/vboot//hash-images.its /tmp/.bm-work/am335x_evm/test.fit
>>>>>>>>>>>> *** stack smashing detected ***: <unknown> terminated
>>>>>>>>>>>
>>>>>>>>>>> Oh dear, and no CI coverage.
>>>>>>>>>>>
>>>>>>>>>>> I was reluctant to include kconfig.h everywhere but perhaps that is
>>>>>>>>>>> the best approach. Will take a look ASAP.
>>>>>>>>>>
>>>>>>>>>> Maybe we need to think a bit harder too about how we structure
>>>>>>>>>> intentionally shared code.
>>>>>>>>>>
>>>>>>>>>> Why not, for example, for these common algorithms, rely on typical
>>>>>>>>>> system headers/libraries in the tooling, which means we validated U-Boot
>>>>>>>>>> vs common reference, rather than just our implementations?
>>>>>>>>>
>>>>>>>>> Do you mean we use openssl for sha1, for example?
>>>>>>>>
>>>>>>>> I guess, yes.  Just flat out saying we require openssl for tools, and
>>>>>>>> doing our best to not make compatibility with libressl difficult, seems
>>>>>>>> likely to cause less headaches for people than what we already require
>>>>>>>> in terms of Python.
>>>>>>>
>>>>>>> I'm OK with that, although I do think the problem identified here
>>>>>>> (CONFIG_SHA256 not enabled) is somewhat sideways from that. We already
>>>>>>
>>>>>> OK, I've taken what you posted on IRC and folded that in, continuing
>>>>>> tests now.
>>>>>>
>>>>>>> use separate code paths to run hashing. Perhaps we could make it
>>>>>>> optional?
>>>>>>>
>>>>>>> What about those people that complain about crypto libraries on their systems?
>>>>>>
>>>>>> I'm not sure how big a problem that really is, currently.  I guess one
>>>>>> thing would be to make a separate thread on it, and put it in the next
>>>>>> -rc email as well, for people to explain why it would be a hardship.
>>>>>> That in turn, I think, is coming down to modern vs very old openssl
>>>>>> support, rather than having any at all.
>>>>>
>>>>> OK I'll take a look at some point.
>>>>>
>>>>> Or perhaps Alex might like to?
>>>>
>>>> We just got a complain about OpenSSL yesterday [1]
>>>>
>>>> Alex
>>>>
>>>> [1] https://lists.denx.de/pipermail/u-boot/2021-October/462728.html
>>>
>>> Oh goodness, LibreELC is a custom build system... I'll have to chime in
>>> there, thanks.
>>
>> I am in favor of keeping libcrapto separate. We still need our own code for
>> CRC32 and other weak or non-crypto hashes, a tidbit which makes me doubt the
>> wisdom of relying entirely on an external lib.
>>
>> I had to make a similar decision when writing the hashes test. Originally, I
>> was going to use pyCrypto, crcelk, to re-hash everything and compare to
>> mkimage. It turned out to be neither necessarry nor efficient.
> 
> Is there perhaps a happy medium?  Or do we just need to think harder on
> how to make the code U-Boot needs shared between target and host tools
> clean and clear and obvious enough?

I think hard that's an honorable goal irrespective of the status of 
libcrypto. libcrypto isolation is a happy side-effect.

Alex

^ permalink raw reply	[flat|nested] 90+ messages in thread

* Re: [PATCH v5 01/29] compiler: Rename host_build() to tools_build()
  2021-09-26  1:43 ` [PATCH v5 01/29] compiler: Rename host_build() to tools_build() Simon Glass
  2021-10-05 18:09   ` Alex G.
@ 2021-10-09  1:39   ` Tom Rini
  1 sibling, 0 replies; 90+ messages in thread
From: Tom Rini @ 2021-10-09  1:39 UTC (permalink / raw)
  To: Simon Glass
  Cc: U-Boot Mailing List, Alexandru Gagniuc, Andre Przywara,
	Rasmus Villemoes, Robert Marko, Masahiro Yamada

[-- Attachment #1: Type: text/plain, Size: 539 bytes --]

On Sat, Sep 25, 2021 at 07:43:14PM -0600, Simon Glass wrote:

> With the new TOOLS_LIBCRYPTO and some other changes, it seems that we are
> heading towards calling this a tools build rather than a host build,
> although of course it does happen on the host.
> 
> I cannot think of anything built by the host which cannot be described as
> a tool, so rename this function.
> 
> Signed-off-by: Simon Glass <sjg@chromium.org>
> Reviewed-by: Alexandru Gagniuc <mr.nuke.me@gmail.com>

Applied to u-boot/master, thanks!

-- 
Tom

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 659 bytes --]

^ permalink raw reply	[flat|nested] 90+ messages in thread

* Re: [PATCH v5 02/29] kconfig: Add tools support to CONFIG_IS_ENABLED()
  2021-09-26  1:43 ` [PATCH v5 02/29] kconfig: Add tools support to CONFIG_IS_ENABLED() Simon Glass
                     ` (2 preceding siblings ...)
  2021-10-07  0:26   ` Tom Rini
@ 2021-10-09  1:39   ` Tom Rini
  3 siblings, 0 replies; 90+ messages in thread
From: Tom Rini @ 2021-10-09  1:39 UTC (permalink / raw)
  To: Simon Glass
  Cc: U-Boot Mailing List, Alexandru Gagniuc, Andre Przywara,
	Rasmus Villemoes, Robert Marko, Masahiro Yamada, Masahiro Yamada

[-- Attachment #1: Type: text/plain, Size: 1012 bytes --]

On Sat, Sep 25, 2021 at 07:43:15PM -0600, Simon Glass wrote:

> At present we must separately test for the host build for many options,
> since we force them to be enabled. For example, CONFIG_FIT is always
> enabled in the host tools, even if CONFIG_FIT is not enabled by the
> board itself.
> 
> It would be more convenient if we could use, for example,
> CONFIG_IS_ENABLED(FIT) and get CONFIG_HOST_FIT, when building for the
> host. Add support for this.
> 
> With this and the tools_build() function, we should be able to remove all
> the #ifdefs currently needed in code that is build by tools and targets.
> 
> This will be even nicer when we move to using CONFIG(xxx) everywhere,
> since all the #ifdef and IS_ENABLED/CONFIG_IS_ENABLED stuff will go away.
> 
> Signed-off-by: Simon Glass <sjg@chromium.org>
> Suggested-by: Rasmus Villemoes <rasmus.villemoes@prevas.dk> # b4f73886
> Reviewed-by: Alexandru Gagniuc <mr.nuke.me@gmail.com>

Applied to u-boot/master, thanks!

-- 
Tom

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 659 bytes --]

^ permalink raw reply	[flat|nested] 90+ messages in thread

* Re: [PATCH v5 03/29] image: Add Kconfig options for FIT in the tools build
  2021-09-26  1:43 ` [PATCH v5 03/29] image: Add Kconfig options for FIT in the tools build Simon Glass
  2021-10-05 18:17   ` Alex G.
  2021-10-05 18:17   ` Alex G.
@ 2021-10-09  1:39   ` Tom Rini
  2 siblings, 0 replies; 90+ messages in thread
From: Tom Rini @ 2021-10-09  1:39 UTC (permalink / raw)
  To: Simon Glass
  Cc: U-Boot Mailing List, Alexandru Gagniuc, Andre Przywara,
	Rasmus Villemoes, Robert Marko, Masahiro Yamada, Joe Hershberger,
	Marek Vasut

[-- Attachment #1: Type: text/plain, Size: 630 bytes --]

On Sat, Sep 25, 2021 at 07:43:16PM -0600, Simon Glass wrote:

> In preparation for enabling CONFIG_IS_ENABLED() on the host build, add
> some options to enable the various FIT options expected in these tools.
> This will ensure that the code builds correctly when CONFIG_TOOLS_xxx
> is distinct from CONFIG_xxx.
> 
> Drop some #ifdefs which are immediately unnecessary (many more are in
> later patches).
> 
> Signed-off-by: Simon Glass <sjg@chromium.org>
> Reviewed-by: Alexandru Gagniuc <mr.nuke.me@gmail.com>
> Reviewed-by: Alexandru Gagniuc <mr.nuke.me@gmail.com>

Applied to u-boot/master, thanks!

-- 
Tom

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 659 bytes --]

^ permalink raw reply	[flat|nested] 90+ messages in thread

* Re: [PATCH v5 04/29] spl: cypto: Bring back SPL_ versions of SHA
  2021-09-26  1:43 ` [PATCH v5 04/29] spl: cypto: Bring back SPL_ versions of SHA Simon Glass
  2021-10-05 18:19   ` Alex G.
@ 2021-10-09  1:39   ` Tom Rini
  1 sibling, 0 replies; 90+ messages in thread
From: Tom Rini @ 2021-10-09  1:39 UTC (permalink / raw)
  To: Simon Glass
  Cc: U-Boot Mailing List, Alexandru Gagniuc, Andre Przywara,
	Rasmus Villemoes, Robert Marko, Masahiro Yamada

[-- Attachment #1: Type: text/plain, Size: 770 bytes --]

On Sat, Sep 25, 2021 at 07:43:17PM -0600, Simon Glass wrote:

> Unfortunately these were removed by mistake. This means that adding hash
> support to SPL brings in all software algorithms, with a substantial
> increase in code size.
> 
> The origin of the problem was renaming them to SPL_FIT_xxx and then these
> were removed altogether in a later commit.
> 
> Add them back. This aligns with CONFIG_MD5, for example, which has an SPL
> variant.
> 
> Signed-off-by: Simon Glass <sjg@chromium.org>
> Fixes: f5bc9c25f31 ("image: Rename SPL_SHAxxx_SUPPORT to SPL_FIT_SHAxxx")
> Fixes: eb5171ddec9 ("common: Remove unused CONFIG_FIT_SHAxxx selectors")
> Reviewed-by: Alexandru Gagniuc <mr.nuke.me@gmail.com>

Applied to u-boot/master, thanks!

-- 
Tom

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 659 bytes --]

^ permalink raw reply	[flat|nested] 90+ messages in thread

* Re: [PATCH v5 05/29] hash: Use Kconfig to enable hashing in host tools and SPL
  2021-09-26  1:43 ` [PATCH v5 05/29] hash: Use Kconfig to enable hashing in host tools and SPL Simon Glass
  2021-09-27 15:53   ` Alex G.
  2021-10-05 18:21   ` Alex G.
@ 2021-10-09  1:39   ` Tom Rini
  2 siblings, 0 replies; 90+ messages in thread
From: Tom Rini @ 2021-10-09  1:39 UTC (permalink / raw)
  To: Simon Glass
  Cc: U-Boot Mailing List, Alexandru Gagniuc, Andre Przywara,
	Rasmus Villemoes, Robert Marko, Masahiro Yamada, Joe Hershberger

[-- Attachment #1: Type: text/plain, Size: 807 bytes --]

On Sat, Sep 25, 2021 at 07:43:18PM -0600, Simon Glass wrote:

> At present when building host tools, we force CONFIG_SHAxxx to be enabled
> regardless of the board Kconfig setting. This is done in the image.h
> header file.
> 
> For SPL we currently just assume the algorithm is desired if U-Boot proper
> enables it.
> 
> Clean this up by adding new Kconfig options to enable hashing on the host,
> relying on CONFIG_IS_ENABLED() to deal with the different builds.
> 
> Add new SPL Kconfigs for hardware-accelerated hashing, to maintain the
> current settings.
> 
> This allows us to drop the image.h code and the I_WANT_MD5 hack.
> 
> Signed-off-by: Simon Glass <sjg@chromium.org>
> Reviewed-by: Alexandru Gagniuc <mr.nuke.me@gmail.com>

Applied to u-boot/master, thanks!

-- 
Tom

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 659 bytes --]

^ permalink raw reply	[flat|nested] 90+ messages in thread

* Re: [PATCH v5 06/29] hash: Drop some #ifdefs in hash.c
  2021-09-26  1:43 ` [PATCH v5 06/29] hash: Drop some #ifdefs in hash.c Simon Glass
  2021-10-05 18:24   ` Alex G.
@ 2021-10-09  1:39   ` Tom Rini
  1 sibling, 0 replies; 90+ messages in thread
From: Tom Rini @ 2021-10-09  1:39 UTC (permalink / raw)
  To: Simon Glass
  Cc: U-Boot Mailing List, Alexandru Gagniuc, Andre Przywara,
	Rasmus Villemoes, Robert Marko, Masahiro Yamada, Joe Hershberger

[-- Attachment #1: Type: text/plain, Size: 546 bytes --]

On Sat, Sep 25, 2021 at 07:43:19PM -0600, Simon Glass wrote:

> We can use the __maybe_unused attribute to avoid some of the #ifdefs in
> this file. Update the functions accordingly.
> 
> Note: The actual hashing interface is still a mess, with four separate
> combinations and lots of #ifdefs. This should really use a driver
> approach, e.g. as is done with partition drivers.
> 
> Signed-off-by: Simon Glass <sjg@chromium.org>
> Reviewed-by: Alexandru Gagniuc <mr.nuke.me@gmail.com>

Applied to u-boot/master, thanks!

-- 
Tom

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 659 bytes --]

^ permalink raw reply	[flat|nested] 90+ messages in thread

* Re: [PATCH v5 07/29] image: Drop IMAGE_ENABLE_FIT
  2021-09-26  1:43 ` [PATCH v5 07/29] image: Drop IMAGE_ENABLE_FIT Simon Glass
  2021-10-05 18:26   ` Alex G.
@ 2021-10-09  1:39   ` Tom Rini
  1 sibling, 0 replies; 90+ messages in thread
From: Tom Rini @ 2021-10-09  1:39 UTC (permalink / raw)
  To: Simon Glass
  Cc: U-Boot Mailing List, Alexandru Gagniuc, Andre Przywara,
	Rasmus Villemoes, Robert Marko, Masahiro Yamada, Joe Hershberger,
	Marek Vasut

[-- Attachment #1: Type: text/plain, Size: 379 bytes --]

On Sat, Sep 25, 2021 at 07:43:20PM -0600, Simon Glass wrote:

> Make use of the host Kconfig for FIT. With this we can use
> CONFIG_IS_ENABLED(FIT) directly in the host build, so drop the unnecessary
> indirection.
> 
> Signed-off-by: Simon Glass <sjg@chromium.org>
> Reviewed-by: Alexandru Gagniuc <mr.nuke.me@gmail.com>

Applied to u-boot/master, thanks!

-- 
Tom

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 659 bytes --]

^ permalink raw reply	[flat|nested] 90+ messages in thread

* Re: [PATCH v5 08/29] image: Drop IMAGE_ENABLE_OF_LIBFDT
  2021-09-26  1:43 ` [PATCH v5 08/29] image: Drop IMAGE_ENABLE_OF_LIBFDT Simon Glass
  2021-10-05 18:27   ` Alex G.
@ 2021-10-09  1:40   ` Tom Rini
  1 sibling, 0 replies; 90+ messages in thread
From: Tom Rini @ 2021-10-09  1:40 UTC (permalink / raw)
  To: Simon Glass
  Cc: U-Boot Mailing List, Alexandru Gagniuc, Andre Przywara,
	Rasmus Villemoes, Robert Marko, Masahiro Yamada, Joe Hershberger,
	Marek Vasut

[-- Attachment #1: Type: text/plain, Size: 382 bytes --]

On Sat, Sep 25, 2021 at 07:43:21PM -0600, Simon Glass wrote:

> Add a host Kconfig for OF_LIBFDT. With this we can use
> CONFIG_IS_ENABLED(OF_LIBFDT) directly in the tools build, so drop the
> unnecessary indirection.
> 
> Signed-off-by: Simon Glass <sjg@chromium.org>
> Reviewed-by: Alexandru Gagniuc <mr.nuke.me@gmail.com>

Applied to u-boot/master, thanks!

-- 
Tom

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 659 bytes --]

^ permalink raw reply	[flat|nested] 90+ messages in thread

* Re: [PATCH v5 09/29] image: Use Kconfig to enable CONFIG_FIT_VERBOSE on host
  2021-09-26  1:43 ` [PATCH v5 09/29] image: Use Kconfig to enable CONFIG_FIT_VERBOSE on host Simon Glass
  2021-10-05 18:29   ` Alex G.
@ 2021-10-09  1:40   ` Tom Rini
  1 sibling, 0 replies; 90+ messages in thread
From: Tom Rini @ 2021-10-09  1:40 UTC (permalink / raw)
  To: Simon Glass
  Cc: U-Boot Mailing List, Alexandru Gagniuc, Andre Przywara,
	Rasmus Villemoes, Robert Marko, Masahiro Yamada, Joe Hershberger,
	Marek Vasut

[-- Attachment #1: Type: text/plain, Size: 400 bytes --]

On Sat, Sep 25, 2021 at 07:43:22PM -0600, Simon Glass wrote:

> Add a host Kconfig for FIT_VERBOSE. With this we can use
> CONFIG_IS_ENABLED(FIT_VERBOSE) directly in the tools build, so drop the
> forcing of this in the image.h header.
> 
> Signed-off-by: Simon Glass <sjg@chromium.org>
> Reviewed-by: Alexandru Gagniuc <mr.nuke.me@gmail.com>

Applied to u-boot/master, thanks!

-- 
Tom

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 659 bytes --]

^ permalink raw reply	[flat|nested] 90+ messages in thread

* Re: [PATCH v5 10/29] image: Use Kconfig to enable FIT_RSASSA_PSS on host
  2021-09-26  1:43 ` [PATCH v5 10/29] image: Use Kconfig to enable FIT_RSASSA_PSS " Simon Glass
  2021-10-05 18:32   ` Alex G.
@ 2021-10-09  1:40   ` Tom Rini
  1 sibling, 0 replies; 90+ messages in thread
From: Tom Rini @ 2021-10-09  1:40 UTC (permalink / raw)
  To: Simon Glass
  Cc: U-Boot Mailing List, Alexandru Gagniuc, Andre Przywara,
	Rasmus Villemoes, Robert Marko, Masahiro Yamada, Joe Hershberger,
	Marek Vasut

[-- Attachment #1: Type: text/plain, Size: 572 bytes --]

On Sat, Sep 25, 2021 at 07:43:23PM -0600, Simon Glass wrote:

> Add a host Kconfig for FIT_RSASSA_PSS. With this we can use
> CONFIG_IS_ENABLED(FIT_RSASSA_PSS) directly in the host build, so drop the
> forcing of this in the image.h header.
> 
> Drop the #ifdef around padding_pss_verify() too since it is not needed.
> Use the compiler to check the config where possible, instead of the
> preprocessor.
> 
> Signed-off-by: Simon Glass <sjg@chromium.org>
> Reviewed-by: Alexandru Gagniuc <mr.nuke.me@gmail.com>

Applied to u-boot/master, thanks!

-- 
Tom

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 659 bytes --]

^ permalink raw reply	[flat|nested] 90+ messages in thread

* Re: [PATCH v5 11/29] image: Use the correct checks for CRC32
  2021-09-26  1:43 ` [PATCH v5 11/29] image: Use the correct checks for CRC32 Simon Glass
  2021-10-05 18:34   ` Alex G.
@ 2021-10-09  1:40   ` Tom Rini
  1 sibling, 0 replies; 90+ messages in thread
From: Tom Rini @ 2021-10-09  1:40 UTC (permalink / raw)
  To: Simon Glass
  Cc: U-Boot Mailing List, Alexandru Gagniuc, Andre Przywara,
	Rasmus Villemoes, Robert Marko, Masahiro Yamada, Joe Hershberger,
	Marek Vasut

[-- Attachment #1: Type: text/plain, Size: 552 bytes --]

On Sat, Sep 25, 2021 at 07:43:24PM -0600, Simon Glass wrote:

> Add a host Kconfig for CRC32. With this we can use CONFIG_IS_ENABLED(CRC32)
> directly in the host build, so drop the unnecessary indirection.
> 
> Add a few more conditions to SPL_CRC32 to avoid build failures as well as
> TPL_CRC32. Also update hash.c to make crc32 optional and to actually take
> notice of SPL_CRC32.
> 
> Signed-off-by: Simon Glass <sjg@chromium.org>
> Reviewed-by: Alexandru Gagniuc <mr.nuke.me@gmail.com>

Applied to u-boot/master, thanks!

-- 
Tom

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 659 bytes --]

^ permalink raw reply	[flat|nested] 90+ messages in thread

* Re: [PATCH v5 12/29] image: Drop IMAGE_BOOT_GET_CMDLINE
  2021-09-26  1:43 ` [PATCH v5 12/29] image: Drop IMAGE_BOOT_GET_CMDLINE Simon Glass
  2021-10-05 18:36   ` Alex G.
@ 2021-10-09  1:40   ` Tom Rini
  1 sibling, 0 replies; 90+ messages in thread
From: Tom Rini @ 2021-10-09  1:40 UTC (permalink / raw)
  To: Simon Glass
  Cc: U-Boot Mailing List, Alexandru Gagniuc, Andre Przywara,
	Rasmus Villemoes, Robert Marko, Masahiro Yamada, Joe Hershberger,
	Marek Vasut

[-- Attachment #1: Type: text/plain, Size: 409 bytes --]

On Sat, Sep 25, 2021 at 07:43:25PM -0600, Simon Glass wrote:

> This is not needed with Kconfig, since we can use IS_ENABLED() easily
> enough and the board code is now in a separate file. Update the only place
> where this is used and drop it.
> 
> Signed-off-by: Simon Glass <sjg@chromium.org>
> Reviewed-by: Alexandru Gagniuc <mr.nuke.me@gmail.com>

Applied to u-boot/master, thanks!

-- 
Tom

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 659 bytes --]

^ permalink raw reply	[flat|nested] 90+ messages in thread

* Re: [PATCH v5 13/29] image: Drop IMAGE_OF_BOARD_SETUP
  2021-09-26  1:43 ` [PATCH v5 13/29] image: Drop IMAGE_OF_BOARD_SETUP Simon Glass
  2021-10-05 18:57   ` Alex G.
@ 2021-10-09  1:40   ` Tom Rini
  1 sibling, 0 replies; 90+ messages in thread
From: Tom Rini @ 2021-10-09  1:40 UTC (permalink / raw)
  To: Simon Glass
  Cc: U-Boot Mailing List, Alexandru Gagniuc, Andre Przywara,
	Rasmus Villemoes, Robert Marko, Masahiro Yamada, Joe Hershberger,
	Marek Vasut

[-- Attachment #1: Type: text/plain, Size: 316 bytes --]

On Sat, Sep 25, 2021 at 07:43:26PM -0600, Simon Glass wrote:

> This is not needed with Kconfig, since we can use IS_ENABLED() easily
> enough. Drop it.
> 
> Signed-off-by: Simon Glass <sjg@chromium.org>
> Reviewed-by: Alexandru Gagniuc <mr.nuke.me@gmail.com>

Applied to u-boot/master, thanks!

-- 
Tom

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 659 bytes --]

^ permalink raw reply	[flat|nested] 90+ messages in thread

* Re: [PATCH v5 14/29] image: Drop IMAGE_OF_SYSTEM_SETUP
  2021-09-26  1:43 ` [PATCH v5 14/29] image: Drop IMAGE_OF_SYSTEM_SETUP Simon Glass
  2021-10-05 18:58   ` Alex G.
@ 2021-10-09  1:40   ` Tom Rini
  1 sibling, 0 replies; 90+ messages in thread
From: Tom Rini @ 2021-10-09  1:40 UTC (permalink / raw)
  To: Simon Glass
  Cc: U-Boot Mailing List, Alexandru Gagniuc, Andre Przywara,
	Rasmus Villemoes, Robert Marko, Masahiro Yamada, Joe Hershberger,
	Marek Vasut

[-- Attachment #1: Type: text/plain, Size: 316 bytes --]

On Sat, Sep 25, 2021 at 07:43:27PM -0600, Simon Glass wrote:

> This is not needed with Kconfig, since we can use IS_ENABLED() easily
> enough. Drop it.
> 
> Signed-off-by: Simon Glass <sjg@chromium.org>
> Reviewed-by: Alexandru Gagniuc <mr.nuke.me@gmail.com>

Applied to u-boot/master, thanks!

-- 
Tom

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 659 bytes --]

^ permalink raw reply	[flat|nested] 90+ messages in thread

* Re: [PATCH v5 15/29] image: Drop IMAGE_ENABLE_IGNORE
  2021-09-26  1:43 ` [PATCH v5 15/29] image: Drop IMAGE_ENABLE_IGNORE Simon Glass
  2021-10-05 18:58   ` Alex G.
@ 2021-10-09  1:40   ` Tom Rini
  1 sibling, 0 replies; 90+ messages in thread
From: Tom Rini @ 2021-10-09  1:40 UTC (permalink / raw)
  To: Simon Glass
  Cc: U-Boot Mailing List, Alexandru Gagniuc, Andre Przywara,
	Rasmus Villemoes, Robert Marko, Masahiro Yamada, Joe Hershberger,
	Marek Vasut

[-- Attachment #1: Type: text/plain, Size: 289 bytes --]

On Sat, Sep 25, 2021 at 07:43:28PM -0600, Simon Glass wrote:

> We can use the new host_build() function for this, so drop it.
> 
> Signed-off-by: Simon Glass <sjg@chromium.org>
> Reviewed-by: Alexandru Gagniuc <mr.nuke.me@gmail.com>

Applied to u-boot/master, thanks!

-- 
Tom

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 659 bytes --]

^ permalink raw reply	[flat|nested] 90+ messages in thread

* Re: [PATCH v5 16/29] efi: Correct dependency on FIT_SIGNATURE
  2021-09-26  1:43 ` [PATCH v5 16/29] efi: Correct dependency on FIT_SIGNATURE Simon Glass
@ 2021-10-09  1:40   ` Tom Rini
  0 siblings, 0 replies; 90+ messages in thread
From: Tom Rini @ 2021-10-09  1:40 UTC (permalink / raw)
  To: Simon Glass
  Cc: U-Boot Mailing List, Alexandru Gagniuc, Andre Przywara,
	Rasmus Villemoes, Robert Marko, Masahiro Yamada, Alexander Graf

[-- Attachment #1: Type: text/plain, Size: 728 bytes --]

On Sat, Sep 25, 2021 at 07:43:29PM -0600, Simon Glass wrote:

> At present EFI_SECURE BOOT selects RSA but does not necessarily enable
> FIT_SIGNATURE. Mostly this is fine, but a few boards do not enable it,
> so U-Boot tries to do RSA verification when loading FIT images, but it
> is not enabled.
> 
> This worked because the condition for checking the RSA signature is
> wrong in the fit_image_verify_with_data() function. In order to fix it
> we need to fix this dependency. Make sure that FIT_SIGNATURE is enabled
> so that RSA can be used.
> 
> It might be better to avoid using 'select' in this situation.
> 
> Signed-off-by: Simon Glass <sjg@chromium.org>

Applied to u-boot/master, thanks!

-- 
Tom

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 659 bytes --]

^ permalink raw reply	[flat|nested] 90+ messages in thread

* Re: [PATCH v5 19/29] image: Tidy up fit_unsupported_reset()
  2021-09-26  1:43 ` [PATCH v5 19/29] image: Tidy up fit_unsupported_reset() Simon Glass
@ 2021-10-09  1:40   ` Tom Rini
  0 siblings, 0 replies; 90+ messages in thread
From: Tom Rini @ 2021-10-09  1:40 UTC (permalink / raw)
  To: Simon Glass
  Cc: U-Boot Mailing List, Alexandru Gagniuc, Andre Przywara,
	Rasmus Villemoes, Robert Marko, Masahiro Yamada, Joe Hershberger,
	Marek Vasut

[-- Attachment #1: Type: text/plain, Size: 366 bytes --]

On Sat, Sep 25, 2021 at 07:43:32PM -0600, Simon Glass wrote:

> This function is only used in one place and does not need to use the
> preprocessor. Move it to the C file and convert it to a normal function.
> 
> Drop fit_unsupported() since it is not used.
> 
> Signed-off-by: Simon Glass <sjg@chromium.org>

Applied to u-boot/master, thanks!

-- 
Tom

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 659 bytes --]

^ permalink raw reply	[flat|nested] 90+ messages in thread

* Re: [PATCH v5 20/29] image: Drop unnecessary #ifdefs from image.h
  2021-09-26  1:43 ` [PATCH v5 20/29] image: Drop unnecessary #ifdefs from image.h Simon Glass
@ 2021-10-09  1:41   ` Tom Rini
  0 siblings, 0 replies; 90+ messages in thread
From: Tom Rini @ 2021-10-09  1:41 UTC (permalink / raw)
  To: Simon Glass
  Cc: U-Boot Mailing List, Alexandru Gagniuc, Andre Przywara,
	Rasmus Villemoes, Robert Marko, Masahiro Yamada, Joe Hershberger,
	Marek Vasut

[-- Attachment #1: Type: text/plain, Size: 301 bytes --]

On Sat, Sep 25, 2021 at 07:43:33PM -0600, Simon Glass wrote:

> This file has a lot of conditional code and much of it is unnecessary.
> Clean this up to reduce the number of build combinations.
> 
> Signed-off-by: Simon Glass <sjg@chromium.org>

Applied to u-boot/master, thanks!

-- 
Tom

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 659 bytes --]

^ permalink raw reply	[flat|nested] 90+ messages in thread

* Re: [PATCH v5 21/29] image: Drop #ifdefs for fit_print_contents()
  2021-09-26  1:43 ` [PATCH v5 21/29] image: Drop #ifdefs for fit_print_contents() Simon Glass
@ 2021-10-09  1:41   ` Tom Rini
  0 siblings, 0 replies; 90+ messages in thread
From: Tom Rini @ 2021-10-09  1:41 UTC (permalink / raw)
  To: Simon Glass
  Cc: U-Boot Mailing List, Alexandru Gagniuc, Andre Przywara,
	Rasmus Villemoes, Robert Marko, Masahiro Yamada, Joe Hershberger,
	Marek Vasut

[-- Attachment #1: Type: text/plain, Size: 216 bytes --]

On Sat, Sep 25, 2021 at 07:43:34PM -0600, Simon Glass wrote:

> Use a simple return to drop the unwanted code.
> 
> Signed-off-by: Simon Glass <sjg@chromium.org>

Applied to u-boot/master, thanks!

-- 
Tom

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 659 bytes --]

^ permalink raw reply	[flat|nested] 90+ messages in thread

* Re: [PATCH v5 22/29] image: Drop most #ifdefs in image-board.c
  2021-09-26  1:43 ` [PATCH v5 22/29] image: Drop most #ifdefs in image-board.c Simon Glass
@ 2021-10-09  1:41   ` Tom Rini
  0 siblings, 0 replies; 90+ messages in thread
From: Tom Rini @ 2021-10-09  1:41 UTC (permalink / raw)
  To: Simon Glass
  Cc: U-Boot Mailing List, Alexandru Gagniuc, Andre Przywara,
	Rasmus Villemoes, Robert Marko, Masahiro Yamada, Joe Hershberger,
	Marek Vasut

[-- Attachment #1: Type: text/plain, Size: 249 bytes --]

On Sat, Sep 25, 2021 at 07:43:35PM -0600, Simon Glass wrote:

> Remove ifdefs in this file, so far as possible without too much
> refactoring.
> 
> Signed-off-by: Simon Glass <sjg@chromium.org>

Applied to u-boot/master, thanks!

-- 
Tom

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 659 bytes --]

^ permalink raw reply	[flat|nested] 90+ messages in thread

* Re: [PATCH v5 23/29] image: Reduce variable scope in boot_get_ramdisk()
  2021-09-26  1:43 ` [PATCH v5 23/29] image: Reduce variable scope in boot_get_ramdisk() Simon Glass
@ 2021-10-09  1:41   ` Tom Rini
  0 siblings, 0 replies; 90+ messages in thread
From: Tom Rini @ 2021-10-09  1:41 UTC (permalink / raw)
  To: Simon Glass
  Cc: U-Boot Mailing List, Alexandru Gagniuc, Andre Przywara,
	Rasmus Villemoes, Robert Marko, Masahiro Yamada, Joe Hershberger,
	Marek Vasut

[-- Attachment #1: Type: text/plain, Size: 270 bytes --]

On Sat, Sep 25, 2021 at 07:43:36PM -0600, Simon Glass wrote:

> Move the variables declarations to where they are needed, to reduce the
> number of #ifdefs needed.
> 
> Signed-off-by: Simon Glass <sjg@chromium.org>

Applied to u-boot/master, thanks!

-- 
Tom

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 659 bytes --]

^ permalink raw reply	[flat|nested] 90+ messages in thread

* Re: [PATCH v5 24/29] image: Split up boot_get_ramdisk()
  2021-09-26  1:43 ` [PATCH v5 24/29] image: Split up boot_get_ramdisk() Simon Glass
@ 2021-10-09  1:41   ` Tom Rini
  0 siblings, 0 replies; 90+ messages in thread
From: Tom Rini @ 2021-10-09  1:41 UTC (permalink / raw)
  To: Simon Glass
  Cc: U-Boot Mailing List, Alexandru Gagniuc, Andre Przywara,
	Rasmus Villemoes, Robert Marko, Masahiro Yamada, Joe Hershberger,
	Marek Vasut

[-- Attachment #1: Type: text/plain, Size: 446 bytes --]

On Sat, Sep 25, 2021 at 07:43:37PM -0600, Simon Glass wrote:

> This function is far too long. Before trying to remove #ifdefs, split out
> the code that deals with selecting the ramdisk into a separate function.
> 
> Leave the code indented as it was for easier review. The next patch cleans
> this up along with checkpatch violations.
> 
> Signed-off-by: Simon Glass <sjg@chromium.org>

Applied to u-boot/master, thanks!

-- 
Tom

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 659 bytes --]

^ permalink raw reply	[flat|nested] 90+ messages in thread

* Re: [PATCH v5 25/29] image: Remove #ifdefs from select_ramdisk()
  2021-09-26  1:43 ` [PATCH v5 25/29] image: Remove #ifdefs from select_ramdisk() Simon Glass
@ 2021-10-09  1:41   ` Tom Rini
  2021-12-17 17:40     ` Neil Armstrong
  0 siblings, 1 reply; 90+ messages in thread
From: Tom Rini @ 2021-10-09  1:41 UTC (permalink / raw)
  To: Simon Glass
  Cc: U-Boot Mailing List, Alexandru Gagniuc, Andre Przywara,
	Rasmus Villemoes, Robert Marko, Masahiro Yamada, Joe Hershberger,
	Marek Vasut

[-- Attachment #1: Type: text/plain, Size: 280 bytes --]

On Sat, Sep 25, 2021 at 07:43:38PM -0600, Simon Glass wrote:

> Use boolean variables to deal with the strange #ifdef logic of this
> function, so we can remove the #ifdefs.
> 
> Signed-off-by: Simon Glass <sjg@chromium.org>

Applied to u-boot/master, thanks!

-- 
Tom

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 659 bytes --]

^ permalink raw reply	[flat|nested] 90+ messages in thread

* Re: [PATCH v5 26/29] image: Remove some #ifdefs from image-fit and image-fit-sig
  2021-09-26  1:43 ` [PATCH v5 26/29] image: Remove some #ifdefs from image-fit and image-fit-sig Simon Glass
@ 2021-10-09  1:41   ` Tom Rini
  0 siblings, 0 replies; 90+ messages in thread
From: Tom Rini @ 2021-10-09  1:41 UTC (permalink / raw)
  To: Simon Glass
  Cc: U-Boot Mailing List, Alexandru Gagniuc, Andre Przywara,
	Rasmus Villemoes, Robert Marko, Masahiro Yamada, Joe Hershberger,
	Marek Vasut

[-- Attachment #1: Type: text/plain, Size: 232 bytes --]

On Sat, Sep 25, 2021 at 07:43:39PM -0600, Simon Glass wrote:

> Drop the #ifdefs which are easy to remove without refactoring.
> 
> Signed-off-by: Simon Glass <sjg@chromium.org>

Applied to u-boot/master, thanks!

-- 
Tom

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 659 bytes --]

^ permalink raw reply	[flat|nested] 90+ messages in thread

* Re: [PATCH v5 27/29] image: Reduce variable scope in boot_get_fdt()
  2021-09-26  1:43 ` [PATCH v5 27/29] image: Reduce variable scope in boot_get_fdt() Simon Glass
@ 2021-10-09  1:41   ` Tom Rini
  0 siblings, 0 replies; 90+ messages in thread
From: Tom Rini @ 2021-10-09  1:41 UTC (permalink / raw)
  To: Simon Glass
  Cc: U-Boot Mailing List, Alexandru Gagniuc, Andre Przywara,
	Rasmus Villemoes, Robert Marko, Masahiro Yamada, Joe Hershberger,
	Marek Vasut

[-- Attachment #1: Type: text/plain, Size: 270 bytes --]

On Sat, Sep 25, 2021 at 07:43:40PM -0600, Simon Glass wrote:

> Move the variables declarations to where they are needed, to reduce the
> number of #ifdefs needed.
> 
> Signed-off-by: Simon Glass <sjg@chromium.org>

Applied to u-boot/master, thanks!

-- 
Tom

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 659 bytes --]

^ permalink raw reply	[flat|nested] 90+ messages in thread

* Re: [PATCH v5 28/29] image: Split up boot_get_fdt()
  2021-09-26  1:43 ` [PATCH v5 28/29] image: Split up boot_get_fdt() Simon Glass
@ 2021-10-09  1:41   ` Tom Rini
  0 siblings, 0 replies; 90+ messages in thread
From: Tom Rini @ 2021-10-09  1:41 UTC (permalink / raw)
  To: Simon Glass
  Cc: U-Boot Mailing List, Alexandru Gagniuc, Andre Przywara,
	Rasmus Villemoes, Robert Marko, Masahiro Yamada, Joe Hershberger,
	Marek Vasut

[-- Attachment #1: Type: text/plain, Size: 315 bytes --]

On Sat, Sep 25, 2021 at 07:43:41PM -0600, Simon Glass wrote:

> This function is far too long. Before trying to remove #ifdefs, split out
> the code that deals with selecting the FDT into a separate function.
> 
> Signed-off-by: Simon Glass <sjg@chromium.org>

Applied to u-boot/master, thanks!

-- 
Tom

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 659 bytes --]

^ permalink raw reply	[flat|nested] 90+ messages in thread

* Re: [PATCH v5 25/29] image: Remove #ifdefs from select_ramdisk()
  2021-10-09  1:41   ` Tom Rini
@ 2021-12-17 17:40     ` Neil Armstrong
  0 siblings, 0 replies; 90+ messages in thread
From: Neil Armstrong @ 2021-12-17 17:40 UTC (permalink / raw)
  To: Tom Rini, Simon Glass
  Cc: U-Boot Mailing List, Alexandru Gagniuc, Andre Przywara,
	Rasmus Villemoes, Robert Marko, Masahiro Yamada, Joe Hershberger,
	Marek Vasut, u-boot-amlogic

Hi,

On 09/10/2021 03:41, Tom Rini wrote:
> On Sat, Sep 25, 2021 at 07:43:38PM -0600, Simon Glass wrote:
> 
>> Use boolean variables to deal with the strange #ifdef logic of this
>> function, so we can remove the #ifdefs.
>>
>> Signed-off-by: Simon Glass <sjg@chromium.org>
> 
> Applied to u-boot/master, thanks!
> 

This commit causes an abort on Libretech-CC when trying to load an initrd (using libretech-cc_defconfig & gcc-arm-9.2-2019.12):

U-Boot 2021.10-00076-gf33a2c1bd0 (Dec 17 2021 - 18:21:08 +0100) libretech-cc

Model: Libre Computer AML-S905X-CC
SoC:   Amlogic Meson GXL (S905X) Revision 21:d (84:2)
DRAM:  2 GiB
MMC:   mmc@72000: 0, mmc@74000: 1
Loading Environment from nowhere... OK
In:    serial
Out:   serial
Err:   serial
[BL31]: tee size: 0
[BL31]: tee size: 0
Net:   eth0: ethernet@c9410000
Hit any key to stop autoboot:  0
(ROM USB boot)
## Executing script at 08000000

Moving Image from 0x8080000 to 0x8200000, end=a6c0000
"Synchronous Abort" handler, esr 0x96000210
elr: 000000000101bd44 lr : 000000000101bf3c (reloc)
elr: 000000007df70d44 lr : 000000007df70f3c
x0 : 0000000000000000 x1 : 000000007dfcd6fc
x2 : 0000000000000003 x3 : 0000000000000000
x4 : 000000007bf74b20 x5 : 0000000000000030
x6 : 0000000000000000 x7 : 0000000000000002
x8 : 000000007bf441c0 x9 : 0000000000000000
x10: 000000007fffffff x11: 0000000000000000
x12: 000000000a6c0000 x13: 000000000a6bffff
x14: 000000007bf49210 x15: 0000000000000020
x16: 000000007df853bc x17: 0000000000000000
x18: 000000007bf52dd0 x19: 000000007dff4e98
x20: 000000007dff4f88 x21: 000000007dff4f90
x22: 0000000000000016 x23: 000000007bf74b20
x24: 0000000000000000 x25: 000000007bf74b48
x26: 0000000000000000 x27: 0000000000000000
x28: 000000007bf74b70 x29: 000000007bf481f0

Code: a9017fff 97fffff5 a8c27bfd d65f03c0 (b9400002)
Resetting CPU ...

Abort is probably in genimg_get_format()

Reverting on master fixes the issue.

Neil

^ permalink raw reply	[flat|nested] 90+ messages in thread

end of thread, other threads:[~2021-12-17 17:40 UTC | newest]

Thread overview: 90+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-09-26  1:43 [PATCH v5 00/29] image: Reduce #ifdefs and ad-hoc defines in image code (Part B) Simon Glass
2021-09-26  1:43 ` [PATCH v5 01/29] compiler: Rename host_build() to tools_build() Simon Glass
2021-10-05 18:09   ` Alex G.
2021-10-09  1:39   ` Tom Rini
2021-09-26  1:43 ` [PATCH v5 02/29] kconfig: Add tools support to CONFIG_IS_ENABLED() Simon Glass
2021-09-27 16:11   ` Alex G.
2021-09-27 16:50     ` Masahiro Yamada
2021-09-27 20:17       ` Simon Glass
2021-09-27 20:17     ` Simon Glass
2021-10-05 18:11   ` Alex G.
2021-10-07  0:26   ` Tom Rini
2021-10-07  2:49     ` Simon Glass
2021-10-07  2:52       ` Tom Rini
2021-10-07 13:32         ` Simon Glass
2021-10-07 13:42           ` Tom Rini
2021-10-07 18:02             ` Simon Glass
2021-10-07 18:30               ` Tom Rini
2021-10-07 18:50                 ` Simon Glass
2021-10-07 19:32                   ` Alex G.
2021-10-07 19:39                     ` Tom Rini
2021-10-07 20:33                       ` Alex G.
2021-10-07 21:04                         ` Tom Rini
2021-10-07 21:15                           ` Alex G.
2021-10-09  1:39   ` Tom Rini
2021-09-26  1:43 ` [PATCH v5 03/29] image: Add Kconfig options for FIT in the tools build Simon Glass
2021-10-05 18:17   ` Alex G.
2021-10-05 18:17   ` Alex G.
2021-10-09  1:39   ` Tom Rini
2021-09-26  1:43 ` [PATCH v5 04/29] spl: cypto: Bring back SPL_ versions of SHA Simon Glass
2021-10-05 18:19   ` Alex G.
2021-10-09  1:39   ` Tom Rini
2021-09-26  1:43 ` [PATCH v5 05/29] hash: Use Kconfig to enable hashing in host tools and SPL Simon Glass
2021-09-27 15:53   ` Alex G.
2021-09-27 16:06     ` Simon Glass
2021-09-27 16:12       ` Alex G.
2021-10-05 18:21   ` Alex G.
2021-10-09  1:39   ` Tom Rini
2021-09-26  1:43 ` [PATCH v5 06/29] hash: Drop some #ifdefs in hash.c Simon Glass
2021-10-05 18:24   ` Alex G.
2021-10-09  1:39   ` Tom Rini
2021-09-26  1:43 ` [PATCH v5 07/29] image: Drop IMAGE_ENABLE_FIT Simon Glass
2021-10-05 18:26   ` Alex G.
2021-10-09  1:39   ` Tom Rini
2021-09-26  1:43 ` [PATCH v5 08/29] image: Drop IMAGE_ENABLE_OF_LIBFDT Simon Glass
2021-10-05 18:27   ` Alex G.
2021-10-09  1:40   ` Tom Rini
2021-09-26  1:43 ` [PATCH v5 09/29] image: Use Kconfig to enable CONFIG_FIT_VERBOSE on host Simon Glass
2021-10-05 18:29   ` Alex G.
2021-10-09  1:40   ` Tom Rini
2021-09-26  1:43 ` [PATCH v5 10/29] image: Use Kconfig to enable FIT_RSASSA_PSS " Simon Glass
2021-10-05 18:32   ` Alex G.
2021-10-09  1:40   ` Tom Rini
2021-09-26  1:43 ` [PATCH v5 11/29] image: Use the correct checks for CRC32 Simon Glass
2021-10-05 18:34   ` Alex G.
2021-10-09  1:40   ` Tom Rini
2021-09-26  1:43 ` [PATCH v5 12/29] image: Drop IMAGE_BOOT_GET_CMDLINE Simon Glass
2021-10-05 18:36   ` Alex G.
2021-10-09  1:40   ` Tom Rini
2021-09-26  1:43 ` [PATCH v5 13/29] image: Drop IMAGE_OF_BOARD_SETUP Simon Glass
2021-10-05 18:57   ` Alex G.
2021-10-09  1:40   ` Tom Rini
2021-09-26  1:43 ` [PATCH v5 14/29] image: Drop IMAGE_OF_SYSTEM_SETUP Simon Glass
2021-10-05 18:58   ` Alex G.
2021-10-09  1:40   ` Tom Rini
2021-09-26  1:43 ` [PATCH v5 15/29] image: Drop IMAGE_ENABLE_IGNORE Simon Glass
2021-10-05 18:58   ` Alex G.
2021-10-09  1:40   ` Tom Rini
2021-09-26  1:43 ` [PATCH v5 16/29] efi: Correct dependency on FIT_SIGNATURE Simon Glass
2021-10-09  1:40   ` Tom Rini
2021-09-26  1:43 ` [PATCH v5 19/29] image: Tidy up fit_unsupported_reset() Simon Glass
2021-10-09  1:40   ` Tom Rini
2021-09-26  1:43 ` [PATCH v5 20/29] image: Drop unnecessary #ifdefs from image.h Simon Glass
2021-10-09  1:41   ` Tom Rini
2021-09-26  1:43 ` [PATCH v5 21/29] image: Drop #ifdefs for fit_print_contents() Simon Glass
2021-10-09  1:41   ` Tom Rini
2021-09-26  1:43 ` [PATCH v5 22/29] image: Drop most #ifdefs in image-board.c Simon Glass
2021-10-09  1:41   ` Tom Rini
2021-09-26  1:43 ` [PATCH v5 23/29] image: Reduce variable scope in boot_get_ramdisk() Simon Glass
2021-10-09  1:41   ` Tom Rini
2021-09-26  1:43 ` [PATCH v5 24/29] image: Split up boot_get_ramdisk() Simon Glass
2021-10-09  1:41   ` Tom Rini
2021-09-26  1:43 ` [PATCH v5 25/29] image: Remove #ifdefs from select_ramdisk() Simon Glass
2021-10-09  1:41   ` Tom Rini
2021-12-17 17:40     ` Neil Armstrong
2021-09-26  1:43 ` [PATCH v5 26/29] image: Remove some #ifdefs from image-fit and image-fit-sig Simon Glass
2021-10-09  1:41   ` Tom Rini
2021-09-26  1:43 ` [PATCH v5 27/29] image: Reduce variable scope in boot_get_fdt() Simon Glass
2021-10-09  1:41   ` Tom Rini
2021-09-26  1:43 ` [PATCH v5 28/29] image: Split up boot_get_fdt() Simon Glass
2021-10-09  1:41   ` Tom Rini

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).