]> git.ipfire.org Git - thirdparty/u-boot.git/commitdiff
fit: Rework SPL_LOAD_FIT_ADDRESS slightly
authorTom Rini <trini@konsulko.com>
Sun, 18 Jan 2026 19:56:10 +0000 (13:56 -0600)
committerTom Rini <trini@konsulko.com>
Tue, 27 Jan 2026 22:19:11 +0000 (16:19 -0600)
Options which deal with memory locations and have a default value of 0x0
are dangerous, as that is often not a valid memory location. Rework
SPL_LOAD_FIT_ADDRESS as follows:
- Add SPL_HAS_LOAD_FIT_ADDRESS to guard prompting the question as the
  case of loading a FIT image does not strictly require setting an
  address and allows for a malloc()'d area to be used.
- For SPL_RAM_SUPPORT, select the new guard symbol if SPL_LOAD_FIT is
  enabled because in that case an address must be provided.
- Update defconfigs for these new changes. Largely this means some
  defconfigs need to enable SPL_HAS_LOAD_FIT_ADDRESS to maintain their
  current status. In the case of sandbox, we also need to set
  SPL_LOAD_FIT_ADDRESS to 0x0.

Signed-off-by: Tom Rini <trini@konsulko.com>
15 files changed:
boot/Kconfig
common/spl/Kconfig
common/spl/spl_fit.c
configs/am6254atl_evm_a53_defconfig
configs/am6254atl_evm_r5_defconfig
configs/imx8mp_dhsom.config
configs/k3_r5_falcon.config
configs/r8a779g0_whitehawk_defconfig
configs/r8a779g3_sparrowhawk_defconfig
configs/sandbox_noinst_defconfig
configs/sandbox_spl_defconfig
configs/sandbox_vpl_defconfig
configs/sifive_unleashed_defconfig
configs/sifive_unmatched_defconfig
configs/stm32mp_dhsom.config

index b090f3c4c111111aaf05725081a9a232bf7f7337..e5db165424a726662c4367b0f171be78249bb84e 100644 (file)
@@ -245,16 +245,24 @@ config SPL_LOAD_FIT
          3. FDTs are only loaded for images with an "os" property of "u-boot".
             "linux" images are also supported with Falcon boot mode.
 
+config SPL_HAS_LOAD_FIT_ADDRESS
+       bool "Provide a static address to load the fit image to in SPL"
+       depends on SPL_LOAD_FIT
+       default y if ARCH_IMX8M || ARCH_K3 || ARCH_ROCKCHIP
+       help
+         By default, a buffer will be dynamically allocated via malloc to hold
+         the FIT image. This option instead allows for a static location to be
+         used and thus not need a large malloc pool to be defined.
+
 config SPL_LOAD_FIT_ADDRESS
        hex "load address of fit image in SPL"
-       depends on SPL_LOAD_FIT
+       depends on SPL_HAS_LOAD_FIT_ADDRESS
        default 0x81000000 if ARCH_K3 && ARM64
        default 0x80080000 if ARCH_K3 && CPU_V7R
        default 0x44000000 if ARCH_IMX8M
        default 0x60080000 if ARCH_ROCKCHIP && SPL_TEXT_BASE = 0x60000000
        default 0x40200000 if ARCH_ROCKCHIP && SPL_TEXT_BASE = 0x40000000
        default 0x00200000 if ARCH_ROCKCHIP && SPL_TEXT_BASE = 0x00000000
-       default 0x0
        help
          Specify the load address of the fit image that will be loaded
          by SPL.
index e456d02dc8b3eab0ef8fba87160abfa68af5f5a8..2998b7acb75ff67aa2a2ccf1aa6e62b288445211 100644 (file)
@@ -1375,6 +1375,7 @@ config SPL_POWER_DOMAIN
 
 config SPL_RAM_SUPPORT
        bool
+       select SPL_HAS_LOAD_FIT_ADDRESS if SPL_LOAD_FIT
 
 config SPL_RAM_DEVICE
        bool "Support booting from preloaded image in RAM"
index a588d13eb4029657a19efdfa14350bcf376a5df3..46ebcabe56a15585c6a23132fc7b025e0614537b 100644 (file)
@@ -593,9 +593,10 @@ static int spl_fit_image_get_os(const void *fit, int noffset, uint8_t *os)
  * The purpose of the FIT load buffer is to provide a memory location that is
  * independent of the load address of any FIT component.
  */
-static void *spl_get_fit_load_buffer(size_t size)
+__weak void *board_spl_fit_buffer_addr(ulong fit_size, int sectors, int bl_len)
 {
        void *buf;
+       size_t size = sectors * bl_len;
 
        buf = malloc_cache_aligned(size);
        if (!buf) {
@@ -611,11 +612,6 @@ static void *spl_get_fit_load_buffer(size_t size)
        return buf;
 }
 
-__weak void *board_spl_fit_buffer_addr(ulong fit_size, int sectors, int bl_len)
-{
-       return spl_get_fit_load_buffer(sectors * bl_len);
-}
-
 /*
  * Weak default function to allow customizing SPL fit loading for load-only
  * use cases by allowing to skip the parsing/processing of the FIT contents
index b95158a595f7a0a13946bb8d224769f1ccf1883d..2aaa50ae4d2da65e2c43e7788d4128158eafd212 100644 (file)
@@ -9,6 +9,7 @@ CONFIG_SPL_TEXT_BASE=0x82000000
 CONFIG_SPL_STACK_R_ADDR=0x83f80000
 CONFIG_K3_OPTEE_LOAD_ADDR=0x80080000
 CONFIG_SPL_BSS_START_ADDR=0x82c00000
+CONFIG_SPL_HAS_LOAD_FIT_ADDRESS=y
 CONFIG_SPL_LOAD_FIT_ADDRESS=0x82f80000
 CONFIG_CUSTOM_SYS_INIT_SP_ADDR=0x82b00000
 CONFIG_DEFAULT_DEVICE_TREE="ti/k3-am6254atl-sk"
index 5c94666859421231a88b0d4f80e80685ce6c31cf..7b25e6b829a1235d12edd48fc567550e1c728d9a 100644 (file)
@@ -6,5 +6,6 @@ CONFIG_SOC_K3_AM625=y
 CONFIG_TARGET_AM625_R5_EVM=y
 CONFIG_ENV_SOURCE_FILE="am6254atl"
 CONFIG_K3_OPTEE_LOAD_ADDR=0x80080000
+CONFIG_SPL_HAS_LOAD_FIT_ADDRESS=y
 CONFIG_SPL_LOAD_FIT_ADDRESS=0x82000000
 CONFIG_DEFAULT_DEVICE_TREE="k3-am6254atl-r5-sk"
index 406529346c575fc8fe886c0d1a66adcc4358fd97..35a59c15a4d0e7d986ede27fadb262bf34491d6f 100644 (file)
@@ -38,6 +38,7 @@ CONFIG_SPL_HAS_BSS_LINKER_SECTION=y
 CONFIG_SPL_HAS_CUSTOM_MALLOC_START=y
 CONFIG_SPL_IMX_ROMAPI_LOADADDR=0x48000000
 CONFIG_SPL_LOAD_FIT=y
+CONFIG_SPL_HAS_LOAD_FIT_ADDRESS=y
 CONFIG_SPL_LOAD_FIT_ADDRESS=0x44000000
 CONFIG_SPL_LOAD_FIT_APPLY_OVERLAY=y
 CONFIG_SPL_MAX_SIZE=0x26000
index b6762b35f7409c9a3418366b9668adc9041daa0f..4312b486197b95388ec0bebe22798adcbd7d118e 100644 (file)
@@ -22,6 +22,7 @@ CONFIG_SPL_FS_LOAD_KERNEL_NAME="boot/fitImage"
 CONFIG_SPL_LOAD_FIT=y
 
 # Used as the 2MiB aligned load address for kernel
+CONFIG_SPL_HAS_LOAD_FIT_ADDRESS=y
 CONFIG_SYS_LOAD_ADDR=0x82000000
 CONFIG_SPL_STACK_R_ADDR=0x88000000
 CONFIG_SPL_LOAD_FIT_ADDRESS=0x82000000
index c0e8620b2f7892a50bdb90cb9115e6cc512d5409..9be831720edfd5ff50da5ba6711ed9e5b7939d19 100644 (file)
@@ -38,6 +38,7 @@ CONFIG_SPL_SPI_FLASH_SUPPORT=y
 CONFIG_SPL_SPI=y
 CONFIG_SPL_FIT_PRINT=y
 CONFIG_SPL_LOAD_FIT=y
+CONFIG_SPL_HAS_LOAD_FIT_ADDRESS=y
 CONFIG_SPL_LOAD_FIT_ADDRESS=0x48000000
 # CONFIG_SPL_BOARD_INIT is not set
 # CONFIG_SPL_LEGACY_IMAGE_FORMAT is not set
index ee8f27119858e19900fa94fc4de34f379afa6b38..8bbe9721d7bc05acab0c585b511a6ccdd2257c2f 100644 (file)
@@ -57,6 +57,7 @@ CONFIG_SPL_SPI_FLASH_SUPPORT=y
 CONFIG_SPL_SPI=y
 CONFIG_SPL_FIT_PRINT=y
 CONFIG_SPL_LOAD_FIT=y
+CONFIG_SPL_HAS_LOAD_FIT_ADDRESS=y
 CONFIG_SPL_LOAD_FIT_ADDRESS=0x48000000
 # CONFIG_SPL_BOARD_INIT is not set
 # CONFIG_SPL_LEGACY_IMAGE_FORMAT is not set
index e156c2c1b805ac18282a67df59bd7094b3b4b561..9ef30f8e0fa0540371b0cb1fd866a079b3453c36 100644 (file)
@@ -24,6 +24,8 @@ CONFIG_FIT=y
 CONFIG_FIT_SIGNATURE=y
 CONFIG_FIT_VERBOSE=y
 CONFIG_SPL_LOAD_FIT=y
+CONFIG_SPL_HAS_LOAD_FIT_ADDRESS=y
+CONFIG_SPL_LOAD_FIT_ADDRESS=0x0
 CONFIG_BOOTSTAGE=y
 CONFIG_BOOTSTAGE_REPORT=y
 CONFIG_BOOTSTAGE_FDT=y
index 44fe2c352929367b9180729ab8997b751ab23d5d..ef28c13a24814de4ef17ea4563b4f1fd05523eb3 100644 (file)
@@ -19,6 +19,8 @@ CONFIG_FIT=y
 CONFIG_FIT_SIGNATURE=y
 CONFIG_FIT_VERBOSE=y
 CONFIG_SPL_LOAD_FIT=y
+CONFIG_SPL_HAS_LOAD_FIT_ADDRESS=y
+CONFIG_SPL_LOAD_FIT_ADDRESS=0x0
 CONFIG_BOOTSTAGE=y
 CONFIG_BOOTSTAGE_REPORT=y
 CONFIG_BOOTSTAGE_FDT=y
index 03aa32015220a59ccea5bf6040ba2e0daa07c4fd..2ff145e822a3e35ee67aef32704d2746c7810fe0 100644 (file)
@@ -26,6 +26,8 @@ CONFIG_FIT=y
 CONFIG_FIT_VERBOSE=y
 CONFIG_FIT_BEST_MATCH=y
 CONFIG_SPL_LOAD_FIT=y
+CONFIG_SPL_HAS_LOAD_FIT_ADDRESS=y
+CONFIG_SPL_LOAD_FIT_ADDRESS=0x0
 # CONFIG_TPL_BOOTMETH_VBE is not set
 # CONFIG_TPL_BOOTMETH_VBE_SIMPLE_FW is not set
 CONFIG_UPL=y
index f341e3e0735c19e1891b1b8d0e7944364e97ceb3..59e58fcb6dd6899c119be46f130c69eaddc4c516 100644 (file)
@@ -19,6 +19,7 @@ CONFIG_TARGET_SIFIVE_UNLEASHED=y
 CONFIG_ARCH_RV64I=y
 CONFIG_RISCV_SMODE=y
 CONFIG_FIT=y
+CONFIG_SPL_HAS_LOAD_FIT_ADDRESS=y
 CONFIG_SPL_LOAD_FIT_ADDRESS=0x84000000
 CONFIG_DISTRO_DEFAULTS=y
 CONFIG_USE_PREBOOT=y
index 0a736f2ba95db2bce662569cb1cd3c1ef6543af3..25c07d1e1caf2aa8b6420f619c96b0e9ced1b6fc 100644 (file)
@@ -23,6 +23,7 @@ CONFIG_TARGET_SIFIVE_UNMATCHED=y
 CONFIG_ARCH_RV64I=y
 CONFIG_RISCV_SMODE=y
 CONFIG_FIT=y
+CONFIG_SPL_HAS_LOAD_FIT_ADDRESS=y
 CONFIG_SPL_LOAD_FIT_ADDRESS=0x84000000
 CONFIG_BOOTSTD_DEFAULTS=y
 CONFIG_USE_PREBOOT=y
index 31fae2de19d0d4967cf46cb7427bb1435768a4cc..79685cbc0d210231004c8de7fc9b82802aeccbfd 100644 (file)
@@ -89,6 +89,7 @@ CONFIG_SPL_FOOTPRINT_LIMIT=y
 CONFIG_SPL_HAS_CUSTOM_MALLOC_START=y
 CONFIG_SPL_I2C=y
 CONFIG_SPL_LOAD_FIT=y
+CONFIG_SPL_HAS_LOAD_FIT_ADDRESS=y
 CONFIG_SPL_LOAD_FIT_ADDRESS=0xc1000000
 CONFIG_SPL_MAX_FOOTPRINT=0x3db00
 CONFIG_SPL_MTD=y