[PATCH v7 1/4] spl: remove usage of CMD_BOOTx from image parsing

Anshul Dalal anshuld at ti.com
Tue Apr 8 16:14:30 CEST 2025


Using CMD_* configs from spl doesn't make logical sense. Therefore this
patch replaces the checks for CMD_BOOTx with newly added library symbols
BOOTI, BOOTM and BOOTZ which are enabled by their respective CMD_* or
SPL_* counterparts.

SPL_BOOTZ is enabled by default for 32-bit ARM systems and SPL_BOOTI is
enabled by default for 64-bit ARM and RISCV.

The respective C files (image.c/zimage.c) are compiled based on library
symbols BOOTx instead which are in turn selected by both CMD_BOOTx and
SPL_BOOTx as required.

Signed-off-by: Anshul Dalal <anshuld at ti.com>
---
Tested:
 * U-Boot CI: https://github.com/u-boot/u-boot/pull/757
Changes in v7:
 * Change SPL configs from SPL_HAS_* to SPL_*
 * Change library symbol names from LIB_BOOTx to just BOOTx
 * Add BOOTM for compiling boot.c
v6:
https://lore.kernel.org/u-boot/20250403215522.1284502-1-anshuld@ti.com/
Changes in v6:
 * Add LIB_BOOTx library symbols
 * Update existing configs ensuring no change in size or build failure
v5:
https://lore.kernel.org/all/20250314035505.4029331-1-anshuld@ti.com/
Changes in v5:
 * Remove imply clause for CMD_BOOTZ instead add default y for
SPL_HAS_BOOTZ
 * Update commit message to reflect the changes
 * Remove 'More info' link
v4:
https://lore.kernel.org/u-boot/20250313032842.1189977-1-anshuld@ti.com/
Changes in v4:
 * Don't set SPL_HAS_BOOTI for sandbox by default
 * Updated prompts for SPL_HAS_BOOT[IZ]
 * Removed check for SPL_HAS_FRAMEWORK from Makefile
v3:
https://lore.kernel.org/u-boot/20250312124757.789013-1-anshuld@ti.com/
Changes in v3:
 * Add imply clause for CMD_BOOTZ to enable SPL_HAS_BOOTZ
 * Fix broken check for bootz_setup
v2:
https://lore.kernel.org/u-boot/20250312094241.629707-1-anshuld@ti.com/
Changes in v2:
 * Add SPL_HAS_BOOT[IZ] configs
v1:
https://lore.kernel.org/u-boot/20250311093709.3372104-1-anshuld@ti.com/
---
 arch/arm/lib/Makefile   | 13 +++++++------
 arch/riscv/lib/Makefile |  4 ++--
 boot/Kconfig            |  9 +++++++++
 cmd/Kconfig             |  3 +++
 common/spl/Kconfig      | 16 ++++++++++++++++
 common/spl/spl.c        |  4 ++--
 6 files changed, 39 insertions(+), 10 deletions(-)

diff --git a/arch/arm/lib/Makefile b/arch/arm/lib/Makefile
index 1c95dd6fed2..162a63b86d9 100644
--- a/arch/arm/lib/Makefile
+++ b/arch/arm/lib/Makefile
@@ -7,6 +7,13 @@ lib-$(CONFIG_USE_PRIVATE_LIBGCC) += ashldi3.o ashrdi3.o lshrdi3.o \
 				    lib1funcs.o uldivmod.o div0.o \
 				    div64.o muldi3.o
 
+obj-$(CONFIG_BOOTI) += image.o
+obj-$(CONFIG_BOOTZ) += zimage.o
+
+ifndef CONFIG_XPL_BUILD
+obj-$(CONFIG_BOOTM) += bootm.o
+endif
+
 ifdef CONFIG_CPU_V7M
 obj-y	+= vectors_m.o crt0.o
 else ifdef CONFIG_ARM64
@@ -30,15 +37,9 @@ endif
 
 obj-$(CONFIG_CPU_V7M) += cmd_boot.o
 obj-$(CONFIG_OF_LIBFDT) += bootm-fdt.o
-obj-$(CONFIG_CMD_BOOTI) += bootm.o image.o
 obj-$(CONFIG_CMD_BOOTM) += bootm.o
-obj-$(CONFIG_CMD_BOOTZ) += bootm.o zimage.o
 else
 obj-$(CONFIG_$(PHASE_)FRAMEWORK) += spl.o
-ifdef CONFIG_SPL_FRAMEWORK
-obj-$(CONFIG_CMD_BOOTI) += image.o
-obj-$(CONFIG_CMD_BOOTZ) += zimage.o
-endif
 obj-$(CONFIG_OF_LIBFDT) += bootm-fdt.o
 endif
 ifdef CONFIG_ARM64
diff --git a/arch/riscv/lib/Makefile b/arch/riscv/lib/Makefile
index 268116f3757..da173cf6d46 100644
--- a/arch/riscv/lib/Makefile
+++ b/arch/riscv/lib/Makefile
@@ -6,8 +6,8 @@
 # Copyright (C) 2017 Andes Technology Corporation
 # Rick Chen, Andes Technology Corporation <rick at andestech.com>
 
-obj-$(CONFIG_CMD_BOOTM) += bootm.o
-obj-$(CONFIG_CMD_BOOTI) += bootm.o image.o
+obj-$(CONFIG_BOOTM) += bootm.o
+obj-$(CONFIG_BOOTI) += bootm.o image.o
 obj-$(CONFIG_CMD_GO) += boot.o
 obj-y	+= cache.o
 obj-$(CONFIG_SIFIVE_CACHE) += sifive_cache.o
diff --git a/boot/Kconfig b/boot/Kconfig
index c09a98c3233..32a4b1703c9 100644
--- a/boot/Kconfig
+++ b/boot/Kconfig
@@ -22,6 +22,15 @@ config TIMESTAMP
 	  loaded that does not, the message 'Wrong FIT format: no timestamp'
 	  is shown.
 
+config BOOTI
+	bool
+
+config BOOTM
+	bool
+
+config BOOTZ
+	bool
+
 config BUTTON_CMD
 	bool "Support for running a command if a button is held during boot"
 	depends on CMDLINE
diff --git a/cmd/Kconfig b/cmd/Kconfig
index 642cc1116e8..489f498123a 100644
--- a/cmd/Kconfig
+++ b/cmd/Kconfig
@@ -276,6 +276,7 @@ config CMD_BOOTD
 config CMD_BOOTM
 	bool "bootm"
 	default y
+	select BOOTM
 	help
 	  Boot an application image from the memory.
 
@@ -352,6 +353,7 @@ config BOOTM_ELF
 
 config CMD_BOOTZ
 	bool "bootz"
+	select BOOTZ
 	help
 	  Boot the Linux zImage
 
@@ -359,6 +361,7 @@ config CMD_BOOTI
 	bool "booti"
 	depends on ARM64 || RISCV || SANDBOX
 	default y
+	select BOOTI
 	help
 	  Boot an AArch64 Linux Kernel image from memory.
 
diff --git a/common/spl/Kconfig b/common/spl/Kconfig
index 94e118f8465..aaaada0be30 100644
--- a/common/spl/Kconfig
+++ b/common/spl/Kconfig
@@ -1153,6 +1153,22 @@ config SPL_OS_BOOT
 	  Enable booting directly to an OS from SPL.
 	  for more info read doc/README.falcon
 
+config SPL_BOOTZ
+	bool "Allow booting a zImage style Linux kernel from SPL"
+	depends on SPL_OS_BOOT
+	default y if ARM && !ARM64
+	select BOOTZ
+	help
+	  Boot a linux zimage from memory in falcon boot.
+
+config SPL_BOOTI
+	bool "Allow booting an Image style Linux kernel from SPL"
+	depends on SPL_OS_BOOT
+	default y if ARM64 || RISCV
+	select BOOTI
+	help
+	  Boot an uncompressed linux kernel image from memory in falcon boot.
+
 config SPL_PAYLOAD_ARGS_ADDR
 	hex "Address in memory to load 'args' file for Falcon Mode to"
 	depends on SPL_OS_BOOT || SPL_LOAD_FIT_OPENSBI_OS_BOOT
diff --git a/common/spl/spl.c b/common/spl/spl.c
index 76fd56dfe4b..a663d10ec20 100644
--- a/common/spl/spl.c
+++ b/common/spl/spl.c
@@ -335,7 +335,7 @@ int spl_parse_image_header(struct spl_image_info *spl_image,
 		panic("** no mkimage signature but raw image not supported");
 	}
 
-	if (CONFIG_IS_ENABLED(OS_BOOT) && IS_ENABLED(CONFIG_CMD_BOOTI)) {
+	if (CONFIG_IS_ENABLED(OS_BOOT) && CONFIG_IS_ENABLED(BOOTI)) {
 		ulong start, size;
 
 		if (!booti_setup((ulong)header, &start, &size, 0)) {
@@ -349,7 +349,7 @@ int spl_parse_image_header(struct spl_image_info *spl_image,
 			      spl_image->load_addr, spl_image->size);
 			return 0;
 		}
-	} else if (CONFIG_IS_ENABLED(OS_BOOT) && IS_ENABLED(CONFIG_CMD_BOOTZ)) {
+	} else if (CONFIG_IS_ENABLED(OS_BOOT) && CONFIG_IS_ENABLED(BOOTZ)) {
 		ulong start, end;
 
 		if (!bootz_setup((ulong)header, &start, &end)) {
-- 
2.49.0



More information about the U-Boot mailing list