summaryrefslogtreecommitdiff
path: root/common
diff options
context:
space:
mode:
authorDimitrios Siganos <[email protected]>2026-02-17 13:56:20 +0000
committerTom Rini <[email protected]>2026-03-13 13:21:46 -0600
commite7ad95aa3f1180823e07dd30c8c24494a07ca814 (patch)
tree4e5191e16b3d952b4a6e7ef58348c8c2a74e01a8 /common
parenta3075db94d49f415658bf7e961e1eae90d9abc33 (diff)
spl: spi: fix loss of spl_load() error on soft reset
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 <[email protected]>
Diffstat (limited to 'common')
-rw-r--r--common/spl/spl_spi.c12
1 files 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 */