[PATCH] spl: spi: fix loss of spl_load() error on soft reset

Dimitrios Siganos dimitris at siganos.org
Tue Feb 17 14:56:20 CET 2026


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 at siganos.org>
---
 common/spl/spl_spi.c | 12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)

diff --git a/common/spl/spl_spi.c b/common/spl/spl_spi.c
index e8e62d5f9fb..3d4b70f7c33 100644
--- a/common/spl/spl_spi.c
+++ b/common/spl/spl_spi.c
@@ -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 */
-- 
2.34.1



More information about the U-Boot mailing list