]> git.ipfire.org Git - thirdparty/u-boot.git/commitdiff
spl: spi: fix loss of spl_load() error on soft reset
authorDimitrios Siganos <dimitris@siganos.org>
Tue, 17 Feb 2026 13:56:20 +0000 (13:56 +0000)
committerTom Rini <trini@konsulko.com>
Fri, 13 Mar 2026 19:21:46 +0000 (13:21 -0600)
When CONFIG_SPI_FLASH_SOFT_RESET is enabled, spi_nor_remove() is called
after spl_load() to switch the flash back to legacy SPI mode. However,
the return value of spi_nor_remove() unconditionally overwrites the
return value of spl_load(), discarding any load error.

Fix this by preserving the spl_load() error and only propagating the
spi_nor_remove() error as a fallback. Also log a message when
spi_nor_remove() fails, since in the case where spl_load() already
failed its error would otherwise be silently discarded.

Signed-off-by: Dimitrios Siganos <dimitris@siganos.org>
common/spl/spl_spi.c

index e8e62d5f9fb484c797fdc167887573835069b086..3d4b70f7c3302362d90e149b0e3e34c9172337d5 100644 (file)
@@ -124,8 +124,16 @@ static int spl_spi_load_image(struct spl_image_info *spl_image,
        }
 
        err = spl_load(spl_image, bootdev, &load, 0, payload_offs);
-       if (IS_ENABLED(CONFIG_SPI_FLASH_SOFT_RESET))
-               err = spi_nor_remove(flash);
+       if (IS_ENABLED(CONFIG_SPI_FLASH_SOFT_RESET)) {
+               int ret = spi_nor_remove(flash);
+
+               if (ret) {
+                       printf("%s: Failed to remove SPI NOR flash: %d\n",
+                              __func__, ret);
+                       if (!err)
+                               err = ret;
+               }
+       }
        return err;
 }
 /* Use priorty 1 so that boards can override this */