Hi Jonas,

On 7/9/26 12:05 AM, Jonas Karlman wrote:
Use CONFIG_IS_ENABLED(LIBCOMMON_SUPPORT) instead of directly checking
CONFIG_SPL_LIBCOMMON_SUPPORT when guarding printf/log calls to depend on
correct xPL_LIBCOMMON_SUPPORT symbol. Also change to use IS_ENABLED()
for the XPL_BUILD symbol checks for consistency.

Signed-off-by: Jonas Karlman <[email protected]>
---
  boot/common_fit.c        |  2 +-
  common/spl/spl_usb.c     |  2 +-
  drivers/mmc/mmc-uclass.c |  4 ++--
  drivers/mmc/mmc.c        | 16 ++++++++--------
  drivers/mmc/mmc_legacy.c |  4 ++--
  include/spl.h            |  6 +++---
  lib/hang.c               |  2 +-
  7 files changed, 18 insertions(+), 18 deletions(-)

diff --git a/boot/common_fit.c b/boot/common_fit.c
index fd434fe28e19..9dcec1cd7d7d 100644
--- a/boot/common_fit.c
+++ b/boot/common_fit.c
@@ -53,7 +53,7 @@ int fit_find_config_node(const void *fdt)
             node = fdt_next_subnode(fdt, node)) {
                name = fdt_getprop(fdt, node, FIT_DESC_PROP, &len);
                if (!name) {
-#ifdef CONFIG_SPL_LIBCOMMON_SUPPORT
+#if !IS_ENABLED(CONFIG_XPL_BUILD) || CONFIG_IS_ENABLED(LIBCOMMON_SUPPORT)

I'm stuck on this and cannot make sense of it. I understand we don't have a CONFIG_LIBCOMMON_SUPPORT and we may want to printf in proper anyway...

I guess the issue is that if we use CONFIG_IS_ENABLED(LIBCOMMON_SUPPORT), we will not check for CONFIG_SPL_LIBCOMMON_SUPPORT in proper (which is incorrect but what we're doing today) anymore and thus the printf won't be compiled in.

I'm thinking the right approach would be to define a

config LIBCOMMON_SUPPORT
    def_bool y
    help
      Enable support for common U-Boot libraries. [...]

and replace all

#if !defined(CONFIG_XPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT)

with

#if CONFIG_IS_ENABLED(LIBCOMMON_SUPPORT)

I'm assuming we don't have an issue with TPL using SPL_LIBCOMMON_SUPPORT without TPL_LIBCOMMON_SUPPORT as it won't be able to link due to missing library support in TPL?

Then we can simply replace the above in boot/common_fit.c with CONFIG_IS_ENABLED(LIBCOMMON_SUPPORT).

We may have an issue with
libs-$(CONFIG_$(PHASE_)LIBCOMMON_SUPPORT) += boot/ common/ cmd/ env/
in scripts/Makefile.xpl as those directories will already be in libs-y via the root Makefile for proper?

                        printf("%s: Missing FDT description in DTB\n",
                               __func__);
  #endif
diff --git a/common/spl/spl_usb.c b/common/spl/spl_usb.c
index 932da56ab6db..365d57063c9d 100644
--- a/common/spl/spl_usb.c
+++ b/common/spl/spl_usb.c
@@ -31,7 +31,7 @@ int spl_usb_load(struct spl_image_info *spl_image,
        }
if (err) {
-#ifdef CONFIG_SPL_LIBCOMMON_SUPPORT
+#if CONFIG_IS_ENABLED(LIBCOMMON_SUPPORT)
                printf("%s: usb init failed: err - %d\n", __func__, err);
  #endif
                return err;
diff --git a/drivers/mmc/mmc-uclass.c b/drivers/mmc/mmc-uclass.c
index 698530088fe7..ffb5e9800fb5 100644
--- a/drivers/mmc/mmc-uclass.c
+++ b/drivers/mmc/mmc-uclass.c
@@ -318,7 +318,7 @@ struct mmc *find_mmc_device(int dev_num)
        ret = blk_find_device(UCLASS_MMC, dev_num, &dev);
if (ret) {
-#if !defined(CONFIG_XPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT)
+#if !IS_ENABLED(CONFIG_XPL_BUILD) || CONFIG_IS_ENABLED(LIBCOMMON_SUPPORT)
                printf("MMC Device %d not found\n", dev_num);
  #endif
                return NULL;
@@ -390,7 +390,7 @@ void mmc_do_preinit(void)
        }
  }
-#if !defined(CONFIG_XPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT)
+#if !IS_ENABLED(CONFIG_XPL_BUILD) || CONFIG_IS_ENABLED(LIBCOMMON_SUPPORT)
  void print_mmc_devices(char separator)
  {
        struct udevice *dev;
diff --git a/drivers/mmc/mmc.c b/drivers/mmc/mmc.c
index 2e5655606564..f24a66c389a9 100644
--- a/drivers/mmc/mmc.c
+++ b/drivers/mmc/mmc.c
@@ -328,7 +328,7 @@ int mmc_poll_for_busy(struct mmc *mmc, int timeout_ms)
                        break;
if (status & MMC_STATUS_MASK) {
-#if !defined(CONFIG_XPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT)
+#if !IS_ENABLED(CONFIG_XPL_BUILD) || CONFIG_IS_ENABLED(LIBCOMMON_SUPPORT)
                        log_err("Status Error: %#08x\n", status);
  #endif
                        return -ECOMM;
@@ -341,7 +341,7 @@ int mmc_poll_for_busy(struct mmc *mmc, int timeout_ms)
        }
if (timeout_ms <= 0) {
-#if !defined(CONFIG_XPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT)
+#if !IS_ENABLED(CONFIG_XPL_BUILD) || CONFIG_IS_ENABLED(LIBCOMMON_SUPPORT)
                log_err("Timeout waiting card ready\n");
  #endif
                return -ETIMEDOUT;
@@ -483,7 +483,7 @@ static int mmc_read_blocks(struct mmc *mmc, void *dst, 
lbaint_t start,
if (blkcnt > 1) {
                if (mmc_send_stop_transmission(mmc, false)) {
-#if !defined(CONFIG_XPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT)
+#if !IS_ENABLED(CONFIG_XPL_BUILD) || CONFIG_IS_ENABLED(LIBCOMMON_SUPPORT)
                        log_err("mmc fail to send stop cmd\n");
  #endif
                        return 0;
@@ -534,7 +534,7 @@ ulong mmc_bread(struct blk_desc *block_dev, lbaint_t start, 
lbaint_t blkcnt,
                return 0;
if ((start + blkcnt) > block_dev->lba) {
-#if !defined(CONFIG_XPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT)
+#if !IS_ENABLED(CONFIG_XPL_BUILD) || CONFIG_IS_ENABLED(LIBCOMMON_SUPPORT)
                log_err("MMC: block number 0x" LBAF " exceeds max(0x" LBAF 
")\n",
                        start + blkcnt, block_dev->lba);
  #endif
@@ -2769,8 +2769,8 @@ static int mmc_startup(struct mmc *mmc)
        bdesc->blksz = mmc->read_bl_len;
        bdesc->log2blksz = LOG2(bdesc->blksz);
        bdesc->lba = lldiv(mmc->capacity, mmc->read_bl_len);
-#if !defined(CONFIG_XPL_BUILD) || \
-               (defined(CONFIG_SPL_LIBCOMMON_SUPPORT) && \
+#if !IS_ENABLED(CONFIG_XPL_BUILD) || \
+               (CONFIG_IS_ENABLED(LIBCOMMON_SUPPORT) && \
                !CONFIG_IS_ENABLED(USE_TINY_PRINTF))

If we also add a
config USE_TINY_PRINTF
    def_bool n
I think we can remove the CONFIG_XPL_BUILD check since CONFIG_LIBCOMMON_SUPPORT and CONFIG_USE_TINY_PRINTF exist in proper?

        sprintf(bdesc->vendor, "Man %06x Snr %04x%04x",
                mmc->cid[0] >> 24, (mmc->cid[2] & 0xffff),
@@ -3028,7 +3028,7 @@ retry:
                err = mmc_send_op_cond(mmc);
if (err) {
-#if !defined(CONFIG_XPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT)
+#if !IS_ENABLED(CONFIG_XPL_BUILD) || CONFIG_IS_ENABLED(LIBCOMMON_SUPPORT)
                        if (!quiet)
                                log_err("Card did not respond to voltage select! : 
%d\n",
                                        err);
@@ -3083,7 +3083,7 @@ int mmc_start_init(struct mmc *mmc)
  #endif
        if (no_card) {
                mmc->has_init = 0;
-#if !defined(CONFIG_XPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT)
+#if !IS_ENABLED(CONFIG_XPL_BUILD) || CONFIG_IS_ENABLED(LIBCOMMON_SUPPORT)
                log_err("MMC: no card present\n");
  #endif
                return -ENOMEDIUM;
diff --git a/drivers/mmc/mmc_legacy.c b/drivers/mmc/mmc_legacy.c
index 8f8ba34be717..d29c611011bf 100644
--- a/drivers/mmc/mmc_legacy.c
+++ b/drivers/mmc/mmc_legacy.c
@@ -44,7 +44,7 @@ struct mmc *find_mmc_device(int dev_num)
                        return m;
        }
-#if !defined(CONFIG_XPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT)
+#if !IS_ENABLED(CONFIG_XPL_BUILD) || CONFIG_IS_ENABLED(LIBCOMMON_SUPPORT)
        printf("MMC Device %d not found\n", dev_num);
  #endif
@@ -93,7 +93,7 @@ void mmc_list_add(struct mmc *mmc)
        list_add_tail(&mmc->link, &mmc_devices);
  }
-#if !defined(CONFIG_XPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT)
+#if !IS_ENABLED(CONFIG_XPL_BUILD) || CONFIG_IS_ENABLED(LIBCOMMON_SUPPORT)
  void print_mmc_devices(char separator)
  {
        struct mmc *m;
diff --git a/include/spl.h b/include/spl.h
index 45dd44e03d13..98d1a8fda409 100644
--- a/include/spl.h
+++ b/include/spl.h
@@ -792,7 +792,7 @@ struct spl_boot_device {
   * @load_image: Function to call to load image
   */
  struct spl_image_loader {
-#ifdef CONFIG_SPL_LIBCOMMON_SUPPORT
+#if CONFIG_IS_ENABLED(LIBCOMMON_SUPPORT)
        const char *name;
  #endif
        uint boot_device;
@@ -809,7 +809,7 @@ struct spl_image_loader {
  /* Helper function for accessing the name */
  static inline const char *spl_loader_name(const struct spl_image_loader 
*loader)
  {
-#ifdef CONFIG_SPL_LIBCOMMON_SUPPORT
+#if CONFIG_IS_ENABLED(LIBCOMMON_SUPPORT)
        const char *name;
        name = spl_board_loader_name(loader->boot_device);
        return name ?: loader->name;
@@ -828,7 +828,7 @@ static inline const char *spl_loader_name(const struct 
spl_image_loader *loader)
   * _boot_device is the BOOT_DEVICE_... value
   * _method is the load_image function to call
   */
-#ifdef CONFIG_SPL_LIBCOMMON_SUPPORT
+#if CONFIG_IS_ENABLED(LIBCOMMON_SUPPORT)
  #define SPL_LOAD_IMAGE_METHOD(_name, _priority, _boot_device, _method) \
        SPL_LOAD_IMAGE(_boot_device ## _priority ## _method) = { \
                .name = _name, \
diff --git a/lib/hang.c b/lib/hang.c
index f3c3c896f0ab..42c5722740a3 100644
--- a/lib/hang.c
+++ b/lib/hang.c
@@ -22,7 +22,7 @@
   */
  void hang(void)
  {
-#if !defined(CONFIG_XPL_BUILD) || \
+#if !IS_ENABLED(CONFIG_XPL_BUILD) || \
                (CONFIG_IS_ENABLED(LIBCOMMON_SUPPORT) && \
                 CONFIG_IS_ENABLED(SERIAL))

If we add a CONFIG_LIBCOMMON_SUPPORT, I think we can remove the CONFIG_XPL_BUILD check since CONFIG_LIBCOMMON_SUPPORT and CONFIG_SERIAL exist in proper? I do think this would help make things clearer in general. What do you think?

A bit of a tangent, one of my biggest gripes about U-Boot is that we do not differentiate symbols that are meant to be phase-agnostic and those which are specific to a phase. I'm thinking we should have a PROPER_ prefix for symbols that are expected to apply to U-Boot proper only. If you have neither xPL or PROPER prefix, then it's meant to apply to all phases. But we often have mixes and it's difficult to know what's supposed to be used or not. I think it would make things much clearer as well.

For example, we have some ifdeffery in lib/Makefile around USE_TINY_PRINTF which we wouldn't need, had we a symbol for the proper phase (which can always be n/y and non-selectable by the user), then we simply can remove a bunch of ifeq ($(CONFIG_XPL_BUILD),y) checks.

Anyway, nothing required for this series and likely a big rework that may not be worth it in the end.

Cheers,
Quentin

Reply via email to