compulab: splash: support loading splash from sf
authorNikita Kiryanov <nikita@compulab.co.il>
Wed, 14 Jan 2015 08:42:52 +0000 (10:42 +0200)
committerStefano Babic <sbabic@denx.de>
Thu, 29 Jan 2015 16:42:29 +0000 (17:42 +0100)
Add support for loading splash from sf.

Signed-off-by: Nikita Kiryanov <nikita@compulab.co.il>
[grinberg@compulab.co.il: staticize the sf global variable]
Signed-off-by: Igor Grinberg <grinberg@compulab.co.il>
Cc: Stefano Babic <sbabic@denx.de>
Cc: Igor Grinberg <grinberg@compulab.co.il>
board/compulab/common/common.h
board/compulab/common/splash.c

index 09b4de6fe30a6c6f4557f2ebd518daa102a9880b..b992965457d82fe09e5cc8042ca1363d2c1a2426 100644 (file)
@@ -26,6 +26,7 @@ static inline void cl_usb_hub_deinit(int gpio) {}
 
 enum splash_storage {
        SPLASH_STORAGE_NAND,
+       SPLASH_STORAGE_SF,
 };
 
 struct splash_location {
index f230d6db42b76ea0382639623a96bfdd1f05950d..16c315ca5a51f6e66fcd5a5e54641f00b008b135 100644 (file)
@@ -9,11 +9,36 @@
 #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)
 {
@@ -42,6 +67,8 @@ static int splash_storage_read(struct splash_location *location,
        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");
        }