#include <common.h>
 #include <nand.h>
 #include <errno.h>
+#include <spi_flash.h>
+#include <spi.h>
 #include <bmp_layout.h>
 #include "common.h"
 
 DECLARE_GLOBAL_DATA_PTR;
 
+#ifdef CONFIG_SPI_FLASH
+static struct spi_flash *sf;
+static int splash_sf_read(u32 bmp_load_addr, int offset, size_t read_size)
+{
+       if (!sf) {
+               sf = spi_flash_probe(CONFIG_SF_DEFAULT_BUS,
+                                    CONFIG_SF_DEFAULT_CS,
+                                    CONFIG_SF_DEFAULT_SPEED,
+                                    CONFIG_SF_DEFAULT_MODE);
+               if (!sf)
+                       return -ENODEV;
+       }
+
+       return spi_flash_read(sf, offset, read_size, (void *)bmp_load_addr);
+}
+#else
+static int splash_sf_read(u32 bmp_load_addr, int offset, size_t read_size)
+{
+       debug("%s: sf support not available\n", __func__);
+       return -ENOSYS;
+}
+#endif
+
 #ifdef CONFIG_CMD_NAND
 static int splash_nand_read(u32 bmp_load_addr, int offset, size_t read_size)
 {
        switch (location->storage) {
        case SPLASH_STORAGE_NAND:
                return splash_nand_read(bmp_load_addr, offset, read_size);
+       case SPLASH_STORAGE_SF:
+               return splash_sf_read(bmp_load_addr, offset, read_size);
        default:
                printf("Unknown splash location\n");
        }