* [U-Boot] [PATCH] Revert "image.h: Tighten up content using handy CONFIG_IS_ENABLED() macro."
@ 2016-05-31 11:41 Masahiro Yamada
2016-05-31 12:05 ` Robert P. J. Day
2016-05-31 14:50 ` Tom Rini
0 siblings, 2 replies; 5+ messages in thread
From: Masahiro Yamada @ 2016-05-31 11:41 UTC (permalink / raw)
To: u-boot
This reverts commit 56adbb38727320375b2f695bd04600d766d8a1b3.
Since commit 56adbb387273 ("image.h: Tighten up content using handy
CONFIG_IS_ENABLED() macro."), I found my boards fail to boot Linux
because the commit changed the logic of macros it touched. Now,
IMAGE_ENABLE_RAMDISK_HIGH and IMAGE_BOOT_GET_CMDLINE are 0 for all
the boards.
As you can see in include/linux/kconfig.h, CONFIG_IS_ENABLE() (and
IS_ENABLED() as well) can only take a macro that is either defined
as 1 or undefined. This is met for boolean options defined in
Kconfig. On the other hand, CONFIG_SYS_BOOT_RAMDISK_HIGH and
CONFIG_SYS_BOOT_GET_CMDLINE are defined without any value in
arch/*/include/asm/config.h . This kind of clean-up is welcome,
but the options should be moved to Kconfig beforehand.
Moreover, CONFIG_IS_ENABLED(SPL_CRC32_SUPPORT) looks weird.
It should be either CONFIG_IS_ENABLED(CRC32_SUPPORT) or
IS_ENABLED(CONFIG_SPL_CRC32_SUPPORT). But, I see no define for
CONFIG_SPL_CRC32_SUPPORT anywhere. Likewise for the other three.
The logic of IMAGE_OF_BOARD_SETUP and IMAGE_OF_SYSTEM_SETUP were
also changed for SPL. This can be a problem for boards defining
CONFIG_SPL_OF_LIBFDT. I guess it should have been changed to
IS_ENABLED(CONFIG_OF_BOARD_SETUP).
In the first place, if we replace the references in C code,
the macros IMAGE_* will go away.
if (IS_ENABLED(CONFIG_OF_BOARD_SETUP) {
...
}
Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
---
include/image.h | 69 +++++++++++++++++++++++++++++++++++++++++++++++----------
1 file changed, 57 insertions(+), 12 deletions(-)
diff --git a/include/image.h b/include/image.h
index 80a4454..a8f6bd1 100644
--- a/include/image.h
+++ b/include/image.h
@@ -52,15 +52,19 @@ struct lmb;
#include <hash.h>
#include <libfdt.h>
#include <fdt_support.h>
-# ifdef CONFIG_FIT_DISABLE_SHA256
-# undef CONFIG_SHA256
-# undef IMAGE_ENABLE_SHA256
-# endif
# ifdef CONFIG_SPL_BUILD
-# define IMAGE_ENABLE_CRC32 CONFIG_IS_ENABLED(SPL_CRC32_SUPPORT)
-# define IMAGE_ENABLE_MD5 CONFIG_IS_ENABLED(SPL_MD5_SUPPORT)
-# define IMAGE_ENABLE_SHA1 CONFIG_IS_ENABLED(SPL_SHA1_SUPPORT)
-# define IMAGE_ENABLE_SHA256 CONFIG_IS_ENABLED(SPL_SHA256_SUPPORT)
+# ifdef CONFIG_SPL_CRC32_SUPPORT
+# define IMAGE_ENABLE_CRC32 1
+# endif
+# ifdef CONFIG_SPL_MD5_SUPPORT
+# define IMAGE_ENABLE_MD5 1
+# endif
+# ifdef CONFIG_SPL_SHA1_SUPPORT
+# define IMAGE_ENABLE_SHA1 1
+# endif
+# ifdef CONFIG_SPL_SHA256_SUPPORT
+# define IMAGE_ENABLE_SHA256 1
+# endif
# else
# define CONFIG_CRC32 /* FIT images need CRC32 support */
# define CONFIG_MD5 /* and MD5 */
@@ -71,12 +75,53 @@ struct lmb;
# define IMAGE_ENABLE_SHA1 1
# define IMAGE_ENABLE_SHA256 1
# endif
+
+#ifdef CONFIG_FIT_DISABLE_SHA256
+#undef CONFIG_SHA256
+#undef IMAGE_ENABLE_SHA256
+#endif
+
+#ifndef IMAGE_ENABLE_CRC32
+#define IMAGE_ENABLE_CRC32 0
+#endif
+
+#ifndef IMAGE_ENABLE_MD5
+#define IMAGE_ENABLE_MD5 0
+#endif
+
+#ifndef IMAGE_ENABLE_SHA1
+#define IMAGE_ENABLE_SHA1 0
+#endif
+
+#ifndef IMAGE_ENABLE_SHA256
+#define IMAGE_ENABLE_SHA256 0
+#endif
+
#endif /* IMAGE_ENABLE_FIT */
-#define IMAGE_ENABLE_RAMDISK_HIGH CONFIG_IS_ENABLED(SYS_BOOT_RAMDISK_HIGH)
-#define IMAGE_BOOT_GET_CMDLINE CONFIG_IS_ENABLED(SYS_BOOT_GET_CMDLINE)
-#define IMAGE_OF_BOARD_SETUP CONFIG_IS_ENABLED(OF_BOARD_SETUP)
-#define IMAGE_OF_SYSTEM_SETUP CONFIG_IS_ENABLED(OF_SYSTEM_SETUP)
+#ifdef CONFIG_SYS_BOOT_RAMDISK_HIGH
+# define IMAGE_ENABLE_RAMDISK_HIGH 1
+#else
+# define IMAGE_ENABLE_RAMDISK_HIGH 0
+#endif
+
+#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
+# define IMAGE_OF_BOARD_SETUP 0
+#endif
+
+#ifdef CONFIG_OF_SYSTEM_SETUP
+# define IMAGE_OF_SYSTEM_SETUP 1
+#else
+# define IMAGE_OF_SYSTEM_SETUP 0
+#endif
/*
* Operating System Codes
--
1.9.1
^ permalink raw reply related [flat|nested] 5+ messages in thread* [U-Boot] [PATCH] Revert "image.h: Tighten up content using handy CONFIG_IS_ENABLED() macro." 2016-05-31 11:41 [U-Boot] [PATCH] Revert "image.h: Tighten up content using handy CONFIG_IS_ENABLED() macro." Masahiro Yamada @ 2016-05-31 12:05 ` Robert P. J. Day 2016-05-31 12:48 ` Masahiro Yamada 2016-05-31 14:50 ` Tom Rini 1 sibling, 1 reply; 5+ messages in thread From: Robert P. J. Day @ 2016-05-31 12:05 UTC (permalink / raw) To: u-boot On Tue, 31 May 2016, Masahiro Yamada wrote: > This reverts commit 56adbb38727320375b2f695bd04600d766d8a1b3. > > Since commit 56adbb387273 ("image.h: Tighten up content using handy > CONFIG_IS_ENABLED() macro."), I found my boards fail to boot Linux > because the commit changed the logic of macros it touched. Now, > IMAGE_ENABLE_RAMDISK_HIGH and IMAGE_BOOT_GET_CMDLINE are 0 for all > the boards. > > As you can see in include/linux/kconfig.h, CONFIG_IS_ENABLE() (and > IS_ENABLED() as well) can only take a macro that is either defined > as 1 or undefined. This is met for boolean options defined in > Kconfig. On the other hand, CONFIG_SYS_BOOT_RAMDISK_HIGH and > CONFIG_SYS_BOOT_GET_CMDLINE are defined without any value in > arch/*/include/asm/config.h . This kind of clean-up is welcome, > but the options should be moved to Kconfig beforehand. ... snip ... whoops, that would be my fault, i never considered that possibility, i thought this was a fairly straightforward (and mostly aesthetic) change. it seems that there is a fair amount of inconsistent usage of CONFIG settings, as in, if one wants to test only if a setting is defined: #ifdef CONFIG_FOO then it's sufficient to manually set: #define CONFIG_FOO however, in the above, it doesn't hurt to also write: #define CONFIG_FOO 1 but the instant you do that, you can *also* then test: #if CONFIG_FOO and i'm wondering how much there is of mixing both tests; that is, once you write this: #define CONFIG_FOO 1 you have a tendency to start using both tests: #ifdef CONFIG_FOO #if CONFIG_FOO which is definitely messy. anyway, my fault for not looking at the above carefully enough before submitting. rday -- ======================================================================== Robert P. J. Day Ottawa, Ontario, CANADA http://crashcourse.ca Twitter: http://twitter.com/rpjday LinkedIn: http://ca.linkedin.com/in/rpjday ======================================================================== ^ permalink raw reply [flat|nested] 5+ messages in thread
* [U-Boot] [PATCH] Revert "image.h: Tighten up content using handy CONFIG_IS_ENABLED() macro." 2016-05-31 12:05 ` Robert P. J. Day @ 2016-05-31 12:48 ` Masahiro Yamada 2016-06-01 9:17 ` Robert P. J. Day 0 siblings, 1 reply; 5+ messages in thread From: Masahiro Yamada @ 2016-05-31 12:48 UTC (permalink / raw) To: u-boot Hi. 2016-05-31 21:05 GMT+09:00 Robert P. J. Day <rpjday@crashcourse.ca>: > On Tue, 31 May 2016, Masahiro Yamada wrote: > >> This reverts commit 56adbb38727320375b2f695bd04600d766d8a1b3. >> >> Since commit 56adbb387273 ("image.h: Tighten up content using handy >> CONFIG_IS_ENABLED() macro."), I found my boards fail to boot Linux >> because the commit changed the logic of macros it touched. Now, >> IMAGE_ENABLE_RAMDISK_HIGH and IMAGE_BOOT_GET_CMDLINE are 0 for all >> the boards. >> >> As you can see in include/linux/kconfig.h, CONFIG_IS_ENABLE() (and >> IS_ENABLED() as well) can only take a macro that is either defined >> as 1 or undefined. This is met for boolean options defined in >> Kconfig. On the other hand, CONFIG_SYS_BOOT_RAMDISK_HIGH and >> CONFIG_SYS_BOOT_GET_CMDLINE are defined without any value in >> arch/*/include/asm/config.h . This kind of clean-up is welcome, >> but the options should be moved to Kconfig beforehand. > > ... snip ... > > whoops, that would be my fault, i never considered that possibility, > i thought this was a fairly straightforward (and mostly aesthetic) > change. > > it seems that there is a fair amount of inconsistent usage of CONFIG > settings, as in, if one wants to test only if a setting is defined: > > #ifdef CONFIG_FOO > > then it's sufficient to manually set: > > #define CONFIG_FOO > > however, in the above, it doesn't hurt to also write: > > #define CONFIG_FOO 1 > > but the instant you do that, you can *also* then test: > > #if CONFIG_FOO > > and i'm wondering how much there is of mixing both tests; that is, > once you write this: > > #define CONFIG_FOO 1 > > you have a tendency to start using both tests: > > #ifdef CONFIG_FOO > #if CONFIG_FOO > > which is definitely messy. anyway, my fault for not looking at the > above carefully enough before submitting. > IS_ENABLED() (and include/linux/kernel.h) came from Linux Kernel. So, you should understand things in Linux side. Is Linux, all CONFIG options are defined in Kconfig. (there is only one exception, CONFIG_SHELL, though.) As you see in include/generated/autoconf.h, all the boolean options are either defined as 1 or not defined at all. So, > #define CONFIG_FOO this case (definition without any value) never happens in Linux Kernel. #if CONFIG_FOO is error when CONFIG_FOO is not defined. (notice, boolean CONFIG options are defined as 1 or undefined. no case for defined as 0.) I know two benefits of IS_ENABLED(). [1] If CONFIG_FOO=y in Kconfig, CONFIG_FOO is defined in include/generated/autoconf.h If CONFIG_FOO=m in Kconfig, CONFIG_FOO_MODULE is defined in include/generated/autoconf.h So, before IS_ENABLED() was invented, we used to write like follows #if defined(CONFIG_FOO) || defined(CONFIG_FOO_MODULE) ... #end Now, we can use it as a shorthand #if IS_ENABLED(CONFIG_FOO) ... #end [2] IS_ENABLED() can be used in C context. if (CONFIG_FOO) { printk("CONFIG_FOO is defined\n"); } causes build error if CONFIG_FOO is not defined at all. (again, no possibilit for #define CONFIG_FOO 0) if (IS_ENABLED(CONFIG_FOO)) { printk("CONFIG_FOO is defined\n"); } works as expected because IS_ENABLED(CONFIG_FOO) is evaluated to 0 when CONFIG_FOO is not defined. In U-Boot, things are much more complicated. Historically, all CONFIGs were defined in C headers (and still many are defined there) For those, both style #define CONFIG_FOO #define CONFIG_FOO 1 exist because it did not matter at all. Since Kconfig was introduced to U-Boot, we have moved many options to Kconfig, but the migration is still under way. #define CONFIG_FOO 1 is only used in Kconfig. What is more complex about U-Boot is it supports multiple image generation from one config. It is too painful to write #if (!defined(CONFIG_SPL_BUILD) && defined(CONFIG_FOO)) || (defined(CONFIG_SPL_BUILD) && defined(CONFIG_SPL_FOO)) so, a shorthand #if CONFIG_IS_ENABLED(CONFIG_FOO) was added. They are handy, but we have to take care of their correct usage. -- Best Regards Masahiro Yamada ^ permalink raw reply [flat|nested] 5+ messages in thread
* [U-Boot] [PATCH] Revert "image.h: Tighten up content using handy CONFIG_IS_ENABLED() macro." 2016-05-31 12:48 ` Masahiro Yamada @ 2016-06-01 9:17 ` Robert P. J. Day 0 siblings, 0 replies; 5+ messages in thread From: Robert P. J. Day @ 2016-06-01 9:17 UTC (permalink / raw) To: u-boot On Tue, 31 May 2016, Masahiro Yamada wrote: ... lengthy explanation snipped ... thanks for that explanation; clearly, i had no idea what i was getting into here and, again, i apologize for submitting a patch that was not even remotely close to correct. le *sigh*. rday -- ======================================================================== Robert P. J. Day Ottawa, Ontario, CANADA http://crashcourse.ca Twitter: http://twitter.com/rpjday LinkedIn: http://ca.linkedin.com/in/rpjday ======================================================================== ^ permalink raw reply [flat|nested] 5+ messages in thread
* [U-Boot] [PATCH] Revert "image.h: Tighten up content using handy CONFIG_IS_ENABLED() macro." 2016-05-31 11:41 [U-Boot] [PATCH] Revert "image.h: Tighten up content using handy CONFIG_IS_ENABLED() macro." Masahiro Yamada 2016-05-31 12:05 ` Robert P. J. Day @ 2016-05-31 14:50 ` Tom Rini 1 sibling, 0 replies; 5+ messages in thread From: Tom Rini @ 2016-05-31 14:50 UTC (permalink / raw) To: u-boot On Tue, May 31, 2016 at 08:41:54PM +0900, Masahiro Yamada wrote: > This reverts commit 56adbb38727320375b2f695bd04600d766d8a1b3. > > Since commit 56adbb387273 ("image.h: Tighten up content using handy > CONFIG_IS_ENABLED() macro."), I found my boards fail to boot Linux > because the commit changed the logic of macros it touched. Now, > IMAGE_ENABLE_RAMDISK_HIGH and IMAGE_BOOT_GET_CMDLINE are 0 for all > the boards. > > As you can see in include/linux/kconfig.h, CONFIG_IS_ENABLE() (and > IS_ENABLED() as well) can only take a macro that is either defined > as 1 or undefined. This is met for boolean options defined in > Kconfig. On the other hand, CONFIG_SYS_BOOT_RAMDISK_HIGH and > CONFIG_SYS_BOOT_GET_CMDLINE are defined without any value in > arch/*/include/asm/config.h . This kind of clean-up is welcome, > but the options should be moved to Kconfig beforehand. > > Moreover, CONFIG_IS_ENABLED(SPL_CRC32_SUPPORT) looks weird. > It should be either CONFIG_IS_ENABLED(CRC32_SUPPORT) or > IS_ENABLED(CONFIG_SPL_CRC32_SUPPORT). But, I see no define for > CONFIG_SPL_CRC32_SUPPORT anywhere. Likewise for the other three. > > The logic of IMAGE_OF_BOARD_SETUP and IMAGE_OF_SYSTEM_SETUP were > also changed for SPL. This can be a problem for boards defining > CONFIG_SPL_OF_LIBFDT. I guess it should have been changed to > IS_ENABLED(CONFIG_OF_BOARD_SETUP). > > In the first place, if we replace the references in C code, > the macros IMAGE_* will go away. > > if (IS_ENABLED(CONFIG_OF_BOARD_SETUP) { > ... > } > > Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com> Applied to u-boot/master, thanks! -- Tom -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 819 bytes Desc: Digital signature URL: <http://lists.denx.de/pipermail/u-boot/attachments/20160531/41f5e32c/attachment.sig> ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2016-06-01 9:17 UTC | newest] Thread overview: 5+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2016-05-31 11:41 [U-Boot] [PATCH] Revert "image.h: Tighten up content using handy CONFIG_IS_ENABLED() macro." Masahiro Yamada 2016-05-31 12:05 ` Robert P. J. Day 2016-05-31 12:48 ` Masahiro Yamada 2016-06-01 9:17 ` Robert P. J. Day 2016-05-31 14:50 ` Tom Rini
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox