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>
}
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 */