]> git.ipfire.org Git - thirdparty/u-boot.git/commitdiff
spl: spi: refactor spl_spi_load_image for falcon mode
authorAnshul Dalal <anshuld@ti.com>
Fri, 17 Oct 2025 19:33:09 +0000 (01:03 +0530)
committerTom Rini <trini@konsulko.com>
Mon, 20 Oct 2025 16:14:00 +0000 (10:14 -0600)
This patch moves the falcon mode handling logic out of
spl_spi_load_image to spl_spi_load_image_os, this allows for cleaner
handling for fallback to U-Boot in case falcon mode fails.

Signed-off-by: Anshul Dalal <anshuld@ti.com>
common/spl/spl_spi.c

index c2b188371c2d7a07a25ab448014129b934722260..45718824cbf4a642693bd74bdb6976fc5630f655 100644 (file)
@@ -49,6 +49,25 @@ u32 __weak spl_spi_boot_cs(void)
        return CONFIG_SF_DEFAULT_CS;
 }
 
+#if IS_ENABLED(CONFIG_SPL_OS_BOOT)
+static int spl_spi_load_image_os(struct spl_image_info *spl_image,
+                                struct spl_boot_device *bootdev,
+                                struct spi_flash *flash,
+                                struct spl_load_info *load)
+{
+       int err = spl_load(spl_image, bootdev, load, 0,
+                          CONFIG_SYS_SPI_KERNEL_OFFS);
+
+       if (err)
+               return err;
+
+       /* Read device tree. */
+       return spi_flash_read(flash, CONFIG_SYS_SPI_ARGS_OFFS,
+                             CONFIG_SYS_SPI_ARGS_SIZE,
+                             (void *)CONFIG_SPL_PAYLOAD_ARGS_ADDR);
+}
+#endif
+
 /*
  * The main entry for SPI booting. It's necessary that SDRAM is already
  * configured and available since this code loads the main U-Boot image
@@ -81,15 +100,13 @@ static int spl_spi_load_image(struct spl_image_info *spl_image,
 
 #if CONFIG_IS_ENABLED(OS_BOOT)
        if (!spl_start_uboot()) {
-               int err = spl_load(spl_image, bootdev, &load, 0,
-                                  CONFIG_SYS_SPI_KERNEL_OFFS);
+               err = spl_spi_load_image_os(spl_image, bootdev, flash, &load);
 
                if (!err)
-                       /* Read device tree. */
-                       return spi_flash_read(
-                               flash, CONFIG_SYS_SPI_ARGS_OFFS,
-                               CONFIG_SYS_SPI_ARGS_SIZE,
-                               (void *)CONFIG_SPL_PAYLOAD_ARGS_ADDR);
+                       return 0;
+
+               printf("%s: Failed in falcon boot: %d, fallback to U-Boot",
+                      __func__, err);
        }
 #endif