diff options
| author | Dimitrios Siganos <[email protected]> | 2026-02-17 13:56:20 +0000 |
|---|---|---|
| committer | Tom Rini <[email protected]> | 2026-03-13 13:21:46 -0600 |
| commit | e7ad95aa3f1180823e07dd30c8c24494a07ca814 (patch) | |
| tree | 4e5191e16b3d952b4a6e7ef58348c8c2a74e01a8 /common | |
| parent | a3075db94d49f415658bf7e961e1eae90d9abc33 (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.c | 12 |
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 */ |
