[U-Boot] [PATCH 0/5] Add support for additional splash screen locations

This series adds the following functionality to the splash_source library: - load splash image from filesystem formatted usb storage - load splash image from filesystem formatted mmc storage - load splash image from filesystem formatted sata storage
Finally, use the new features on cm-fx6.
Cc: Igor Grinberg grinberg@compulab.co.il Cc: Tom Rini trini@konsulko.com
Nikita Kiryanov (5): splash_source: rename *_read() to *_read_raw() splash_source: add support for filesystem formatted mmc splash_source: add support for filesystem formatted usb splash_source: add support for fileystem formatted sata arm: mx6: cm-fx6: add splash locations to cm-fx6
board/compulab/cm_fx6/cm_fx6.c | 19 +++++++++ board/compulab/cm_t35/cm_t35.c | 1 + common/splash_source.c | 89 +++++++++++++++++++++++++++++++++++++----- include/splash.h | 10 +++++ 4 files changed, 109 insertions(+), 10 deletions(-)

Rename raw read functions to *_read_raw() in preparation for supporting read_fs() feature.
Cc: Igor Grinberg grinberg@compulab.co.il Cc: Tom Rini trini@konsulko.com Signed-off-by: Nikita Kiryanov nikita@compulab.co.il --- common/splash_source.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-)
diff --git a/common/splash_source.c b/common/splash_source.c index d1bb5a4..4820c12 100644 --- a/common/splash_source.c +++ b/common/splash_source.c @@ -18,7 +18,7 @@ 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) +static int splash_sf_read_raw(u32 bmp_load_addr, int offset, size_t read_size) { if (!sf) { sf = spi_flash_probe(CONFIG_SF_DEFAULT_BUS, @@ -32,7 +32,7 @@ static int splash_sf_read(u32 bmp_load_addr, int offset, size_t read_size) 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) +static int splash_sf_read_raw(u32 bmp_load_addr, int offset, size_t read_size) { debug("%s: sf support not available\n", __func__); return -ENOSYS; @@ -40,7 +40,7 @@ static int splash_sf_read(u32 bmp_load_addr, int offset, size_t read_size) #endif
#ifdef CONFIG_CMD_NAND -static int splash_nand_read(u32 bmp_load_addr, int offset, size_t read_size) +static int splash_nand_read_raw(u32 bmp_load_addr, int offset, size_t read_size) { return nand_read_skip_bad(&nand_info[nand_curr_device], offset, &read_size, NULL, @@ -48,14 +48,14 @@ static int splash_nand_read(u32 bmp_load_addr, int offset, size_t read_size) (u_char *)bmp_load_addr); } #else -static int splash_nand_read(u32 bmp_load_addr, int offset, size_t read_size) +static int splash_nand_read_raw(u32 bmp_load_addr, int offset, size_t read_size) { debug("%s: nand support not available\n", __func__); return -ENOSYS; } #endif
-static int splash_storage_read(struct splash_location *location, +static int splash_storage_read_raw(struct splash_location *location, u32 bmp_load_addr, size_t read_size) { u32 offset; @@ -66,9 +66,9 @@ static int splash_storage_read(struct splash_location *location, offset = location->offset; switch (location->storage) { case SPLASH_STORAGE_NAND: - return splash_nand_read(bmp_load_addr, offset, read_size); + return splash_nand_read_raw(bmp_load_addr, offset, read_size); case SPLASH_STORAGE_SF: - return splash_sf_read(bmp_load_addr, offset, read_size); + return splash_sf_read_raw(bmp_load_addr, offset, read_size); default: printf("Unknown splash location\n"); } @@ -85,7 +85,7 @@ static int splash_load_raw(struct splash_location *location, u32 bmp_load_addr) if (bmp_load_addr + bmp_header_size >= gd->start_addr_sp) goto splash_address_too_high;
- res = splash_storage_read(location, bmp_load_addr, bmp_header_size); + res = splash_storage_read_raw(location, bmp_load_addr, bmp_header_size); if (res < 0) return res;
@@ -95,7 +95,7 @@ static int splash_load_raw(struct splash_location *location, u32 bmp_load_addr) if (bmp_load_addr + bmp_size >= gd->start_addr_sp) goto splash_address_too_high;
- return splash_storage_read(location, bmp_load_addr, bmp_size); + return splash_storage_read_raw(location, bmp_load_addr, bmp_size);
splash_address_too_high: printf("Error: splashimage address too high. Data overwrites U-Boot and/or placed beyond DRAM boundaries.\n");

On 08/30/15 11:42, Nikita Kiryanov wrote:
Rename raw read functions to *_read_raw() in preparation for supporting read_fs() feature.
Cc: Igor Grinberg grinberg@compulab.co.il Cc: Tom Rini trini@konsulko.com Signed-off-by: Nikita Kiryanov nikita@compulab.co.il
Acked-by: Igor Grinberg grinberg@compulab.co.il

Add support for loading splash image from an SD card formatted with a filesystem. Update boards to maintain original behavior where needed.
Cc: Igor Grinberg grinberg@compulab.co.il Cc: Tom Rini trini@konsulko.com Signed-off-by: Nikita Kiryanov nikita@compulab.co.il --- board/compulab/cm_fx6/cm_fx6.c | 1 + board/compulab/cm_t35/cm_t35.c | 1 + common/splash_source.c | 51 +++++++++++++++++++++++++++++++++++++++++- include/splash.h | 8 +++++++ 4 files changed, 60 insertions(+), 1 deletion(-)
diff --git a/board/compulab/cm_fx6/cm_fx6.c b/board/compulab/cm_fx6/cm_fx6.c index e85c8ab..4c2a5c8 100644 --- a/board/compulab/cm_fx6/cm_fx6.c +++ b/board/compulab/cm_fx6/cm_fx6.c @@ -38,6 +38,7 @@ static struct splash_location cm_fx6_splash_locations[] = { { .name = "sf", .storage = SPLASH_STORAGE_SF, + .flags = SPLASH_STORAGE_RAW, .offset = 0x100000, }, }; diff --git a/board/compulab/cm_t35/cm_t35.c b/board/compulab/cm_t35/cm_t35.c index 374edbc..398c573 100644 --- a/board/compulab/cm_t35/cm_t35.c +++ b/board/compulab/cm_t35/cm_t35.c @@ -64,6 +64,7 @@ struct splash_location splash_locations[] = { { .name = "nand", .storage = SPLASH_STORAGE_NAND, + .flags = SPLASH_STORAGE_RAW, .offset = 0x100000, }, }; diff --git a/common/splash_source.c b/common/splash_source.c index 4820c12..cb45c63 100644 --- a/common/splash_source.c +++ b/common/splash_source.c @@ -13,6 +13,7 @@ #include <spi_flash.h> #include <spi.h> #include <bmp_layout.h> +#include <fs.h>
DECLARE_GLOBAL_DATA_PTR;
@@ -103,6 +104,49 @@ splash_address_too_high: return -EFAULT; }
+static int splash_select_fs_dev(struct splash_location *location) +{ + int res; + + switch (location->storage) { + case SPLASH_STORAGE_MMC: + res = fs_set_blk_dev("mmc", location->devpart, FS_TYPE_ANY); + break; + default: + printf("Error: unsupported location storage.\n"); + return -ENODEV; + } + + if (res) + printf("Error: could not access storage.\n"); + + return res; +} + +static int splash_load_fs(struct splash_location *location, u32 bmp_load_addr) +{ + int res; + loff_t bmp_size; + + res = splash_select_fs_dev(location); + if (res) + return res; + + res = fs_size("splash.bmp", &bmp_size); + if (res) { + printf("Error (%d): cannot determine file size\n", res); + return res; + } + + if (bmp_load_addr + bmp_size >= gd->start_addr_sp) { + printf("Error: splashimage address too high. Data overwrites U-Boot and/or placed beyond DRAM boundaries.\n"); + return -EFAULT; + } + + splash_select_fs_dev(location); + return fs_read("splash.bmp", bmp_load_addr, 0, 0, NULL); +} + /** * select_splash_location - return the splash location based on board support * and env variable "splashsource". @@ -172,5 +216,10 @@ int splash_source_load(struct splash_location *locations, uint size) if (!splash_location) return -EINVAL;
- return splash_load_raw(splash_location, bmp_load_addr); + if (splash_location->flags & SPLASH_STORAGE_RAW) + return splash_load_raw(splash_location, bmp_load_addr); + else if (splash_location->flags & SPLASH_STORAGE_FS) + return splash_load_fs(splash_location, bmp_load_addr); + + return -EINVAL; } diff --git a/include/splash.h b/include/splash.h index 7ae7a68..d1fba69 100644 --- a/include/splash.h +++ b/include/splash.h @@ -27,12 +27,20 @@ enum splash_storage { SPLASH_STORAGE_NAND, SPLASH_STORAGE_SF, + SPLASH_STORAGE_MMC, +}; + +enum splash_flags { + SPLASH_STORAGE_RAW, + SPLASH_STORAGE_FS, };
struct splash_location { char *name; enum splash_storage storage; + enum splash_flags flags; u32 offset; /* offset from start of storage */ + char *devpart; /* Use the load command dev:part conventions */ };
int splash_source_load(struct splash_location *locations, uint size);

Hi Nikita,
On 08/30/15 11:42, Nikita Kiryanov wrote:
Add support for loading splash image from an SD card formatted with a filesystem. Update boards to maintain original behavior where needed.
Cc: Igor Grinberg grinberg@compulab.co.il Cc: Tom Rini trini@konsulko.com Signed-off-by: Nikita Kiryanov nikita@compulab.co.il
[...]
diff --git a/common/splash_source.c b/common/splash_source.c index 4820c12..cb45c63 100644 --- a/common/splash_source.c +++ b/common/splash_source.c
[...]
+static int splash_load_fs(struct splash_location *location, u32 bmp_load_addr) +{
- int res;
- loff_t bmp_size;
- res = splash_select_fs_dev(location);
- if (res)
return res;
- res = fs_size("splash.bmp", &bmp_size);
The splash.bmp can be a default file name (which is selected through menuconfig), but I think, will it be better to make it a env variable?
- if (res) {
printf("Error (%d): cannot determine file size\n", res);
return res;
- }
- if (bmp_load_addr + bmp_size >= gd->start_addr_sp) {
printf("Error: splashimage address too high. Data overwrites U-Boot and/or placed beyond DRAM boundaries.\n");
return -EFAULT;
- }
- splash_select_fs_dev(location);
- return fs_read("splash.bmp", bmp_load_addr, 0, 0, NULL);
+}
[...]

On Wed, Oct 21, 2015 at 03:25:58PM +0300, Igor Grinberg wrote:
Hi Nikita,
On 08/30/15 11:42, Nikita Kiryanov wrote:
Add support for loading splash image from an SD card formatted with a filesystem. Update boards to maintain original behavior where needed.
Cc: Igor Grinberg grinberg@compulab.co.il Cc: Tom Rini trini@konsulko.com Signed-off-by: Nikita Kiryanov nikita@compulab.co.il
[...]
diff --git a/common/splash_source.c b/common/splash_source.c index 4820c12..cb45c63 100644 --- a/common/splash_source.c +++ b/common/splash_source.c
[...]
+static int splash_load_fs(struct splash_location *location, u32 bmp_load_addr) +{
- int res;
- loff_t bmp_size;
- res = splash_select_fs_dev(location);
- if (res)
return res;
- res = fs_size("splash.bmp", &bmp_size);
The splash.bmp can be a default file name (which is selected through menuconfig), but I think, will it be better to make it a env variable?
Well, the menuconfig part I think is best left to another series because it won't be a simple addition: default file name define would have to depend on CONFIG_SPLASH_SOURCE, which shouldn't exist as an option without CONFIG_SPLASH_SCREEN and its related defines, none of which have a fitting place in the current menuconfig hierarchy. Then there's the board config file changes these additions would cause.
As for the env variable suggestion though, that can be done.
- if (res) {
printf("Error (%d): cannot determine file size\n", res);
return res;
- }
- if (bmp_load_addr + bmp_size >= gd->start_addr_sp) {
printf("Error: splashimage address too high. Data overwrites U-Boot and/or placed beyond DRAM boundaries.\n");
return -EFAULT;
- }
- splash_select_fs_dev(location);
- return fs_read("splash.bmp", bmp_load_addr, 0, 0, NULL);
+}
[...]
-- Regards, Igor.

Add support for loading splash image from USB drive formatted with a filesystem.
Cc: Igor Grinberg grinberg@compulab.co.il Cc: Tom Rini trini@konsulko.com Signed-off-by: Nikita Kiryanov nikita@compulab.co.il --- common/splash_source.c | 11 +++++++++++ include/splash.h | 1 + 2 files changed, 12 insertions(+)
diff --git a/common/splash_source.c b/common/splash_source.c index cb45c63..937ce17 100644 --- a/common/splash_source.c +++ b/common/splash_source.c @@ -12,6 +12,7 @@ #include <splash.h> #include <spi_flash.h> #include <spi.h> +#include <usb.h> #include <bmp_layout.h> #include <fs.h>
@@ -112,6 +113,9 @@ static int splash_select_fs_dev(struct splash_location *location) case SPLASH_STORAGE_MMC: res = fs_set_blk_dev("mmc", location->devpart, FS_TYPE_ANY); break; + case SPLASH_STORAGE_USB: + res = fs_set_blk_dev("usb", location->devpart, FS_TYPE_ANY); + break; default: printf("Error: unsupported location storage.\n"); return -ENODEV; @@ -128,6 +132,13 @@ static int splash_load_fs(struct splash_location *location, u32 bmp_load_addr) int res; loff_t bmp_size;
+#ifdef CONFIG_USB_STORAGE + if (location->storage == SPLASH_STORAGE_USB) { + usb_init(); + usb_stor_scan(1); + } +#endif + res = splash_select_fs_dev(location); if (res) return res; diff --git a/include/splash.h b/include/splash.h index d1fba69..b728bd6 100644 --- a/include/splash.h +++ b/include/splash.h @@ -28,6 +28,7 @@ enum splash_storage { SPLASH_STORAGE_NAND, SPLASH_STORAGE_SF, SPLASH_STORAGE_MMC, + SPLASH_STORAGE_USB, };
enum splash_flags {

On 08/30/15 11:42, Nikita Kiryanov wrote:
Add support for loading splash image from USB drive formatted with a filesystem.
Cc: Igor Grinberg grinberg@compulab.co.il Cc: Tom Rini trini@konsulko.com Signed-off-by: Nikita Kiryanov nikita@compulab.co.il
[...]
+#ifdef CONFIG_USB_STORAGE
- if (location->storage == SPLASH_STORAGE_USB) {
usb_init();
usb_stor_scan(1);
- }
+#endif
Can we use IS_ENABLED() stuff here instead?

On Wed, Oct 21, 2015 at 04:01:46PM +0300, Igor Grinberg wrote:
On 08/30/15 11:42, Nikita Kiryanov wrote:
Add support for loading splash image from USB drive formatted with a filesystem.
Cc: Igor Grinberg grinberg@compulab.co.il Cc: Tom Rini trini@konsulko.com Signed-off-by: Nikita Kiryanov nikita@compulab.co.il
[...]
+#ifdef CONFIG_USB_STORAGE
- if (location->storage == SPLASH_STORAGE_USB) {
usb_init();
usb_stor_scan(1);
- }
+#endif
Can we use IS_ENABLED() stuff here instead?
IS_ENABLED() does not prevent compile errors, only closes off certain code paths.
-- Regards, Igor.

On 10/23/15 13:23, Nikita Kiryanov wrote:
On Wed, Oct 21, 2015 at 04:01:46PM +0300, Igor Grinberg wrote:
On 08/30/15 11:42, Nikita Kiryanov wrote:
Add support for loading splash image from USB drive formatted with a filesystem.
Cc: Igor Grinberg grinberg@compulab.co.il Cc: Tom Rini trini@konsulko.com Signed-off-by: Nikita Kiryanov nikita@compulab.co.il
[...]
+#ifdef CONFIG_USB_STORAGE
- if (location->storage == SPLASH_STORAGE_USB) {
usb_init();
usb_stor_scan(1);
- }
+#endif
Can we use IS_ENABLED() stuff here instead?
IS_ENABLED() does not prevent compile errors, only closes off certain code paths.
Ok. Any other ways to not have that ifdefferry inside functions?

On Fri, Oct 23, 2015 at 04:12:01PM +0300, Igor Grinberg wrote:
On 10/23/15 13:23, Nikita Kiryanov wrote:
On Wed, Oct 21, 2015 at 04:01:46PM +0300, Igor Grinberg wrote:
On 08/30/15 11:42, Nikita Kiryanov wrote:
Add support for loading splash image from USB drive formatted with a filesystem.
Cc: Igor Grinberg grinberg@compulab.co.il Cc: Tom Rini trini@konsulko.com Signed-off-by: Nikita Kiryanov nikita@compulab.co.il
[...]
+#ifdef CONFIG_USB_STORAGE
- if (location->storage == SPLASH_STORAGE_USB) {
usb_init();
usb_stor_scan(1);
- }
+#endif
Can we use IS_ENABLED() stuff here instead?
IS_ENABLED() does not prevent compile errors, only closes off certain code paths.
Ok. Any other ways to not have that ifdefferry inside functions?
Well, I suppose I can take this out into its own function and stub it #ifndef. I'll do a V2.
-- Regards, Igor.

Add support for loading splashimage from filesystem formatted sata storage.
Cc: Igor Grinberg grinberg@compulab.co.il Cc: Tom Rini trini@konsulko.com Signed-off-by: Nikita Kiryanov nikita@compulab.co.il --- common/splash_source.c | 9 +++++++++ include/splash.h | 1 + 2 files changed, 10 insertions(+)
diff --git a/common/splash_source.c b/common/splash_source.c index 937ce17..88d639e 100644 --- a/common/splash_source.c +++ b/common/splash_source.c @@ -13,6 +13,7 @@ #include <spi_flash.h> #include <spi.h> #include <usb.h> +#include <sata.h> #include <bmp_layout.h> #include <fs.h>
@@ -116,6 +117,9 @@ static int splash_select_fs_dev(struct splash_location *location) case SPLASH_STORAGE_USB: res = fs_set_blk_dev("usb", location->devpart, FS_TYPE_ANY); break; + case SPLASH_STORAGE_SATA: + res = fs_set_blk_dev("sata", location->devpart, FS_TYPE_ANY); + break; default: printf("Error: unsupported location storage.\n"); return -ENODEV; @@ -139,6 +143,11 @@ static int splash_load_fs(struct splash_location *location, u32 bmp_load_addr) } #endif
+#ifdef CONFIG_CMD_SATA + if (location->storage == SPLASH_STORAGE_SATA) + sata_initialize(); +#endif + res = splash_select_fs_dev(location); if (res) return res; diff --git a/include/splash.h b/include/splash.h index b728bd6..f0755ca 100644 --- a/include/splash.h +++ b/include/splash.h @@ -29,6 +29,7 @@ enum splash_storage { SPLASH_STORAGE_SF, SPLASH_STORAGE_MMC, SPLASH_STORAGE_USB, + SPLASH_STORAGE_SATA, };
enum splash_flags {

Add the following splash locations to cm-fx6: * filesystem formatted mmc * filesystem formatted usb * filesystem formatted sata
Cc: Igor Grinberg grinberg@compulab.co.il Cc: Tom Rini trini@konsulko.com Signed-off-by: Nikita Kiryanov nikita@compulab.co.il --- board/compulab/cm_fx6/cm_fx6.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+)
diff --git a/board/compulab/cm_fx6/cm_fx6.c b/board/compulab/cm_fx6/cm_fx6.c index 4c2a5c8..def821c 100644 --- a/board/compulab/cm_fx6/cm_fx6.c +++ b/board/compulab/cm_fx6/cm_fx6.c @@ -41,6 +41,24 @@ static struct splash_location cm_fx6_splash_locations[] = { .flags = SPLASH_STORAGE_RAW, .offset = 0x100000, }, + { + .name = "mmc_fs", + .storage = SPLASH_STORAGE_MMC, + .flags = SPLASH_STORAGE_FS, + .devpart = "2:1", + }, + { + .name = "usb_fs", + .storage = SPLASH_STORAGE_USB, + .flags = SPLASH_STORAGE_FS, + .devpart = "0:1", + }, + { + .name = "sata_fs", + .storage = SPLASH_STORAGE_SATA, + .flags = SPLASH_STORAGE_FS, + .devpart = "0:1", + }, };
int splash_screen_prepare(void)

On 08/30/15 11:42, Nikita Kiryanov wrote:
Add the following splash locations to cm-fx6:
- filesystem formatted mmc
- filesystem formatted usb
- filesystem formatted sata
Cc: Igor Grinberg grinberg@compulab.co.il Cc: Tom Rini trini@konsulko.com Signed-off-by: Nikita Kiryanov nikita@compulab.co.il
Acked-by: Igor Grinberg grinberg@compulab.co.il

Title correction: add support for additional splash image locations
On Sun, Aug 30, 2015 at 11:42:31AM +0300, Nikita Kiryanov wrote:
This series adds the following functionality to the splash_source library:
- load splash image from filesystem formatted usb storage
- load splash image from filesystem formatted mmc storage
- load splash image from filesystem formatted sata storage
Finally, use the new features on cm-fx6.
Cc: Igor Grinberg grinberg@compulab.co.il Cc: Tom Rini trini@konsulko.com
Nikita Kiryanov (5): splash_source: rename *_read() to *_read_raw() splash_source: add support for filesystem formatted mmc splash_source: add support for filesystem formatted usb splash_source: add support for fileystem formatted sata arm: mx6: cm-fx6: add splash locations to cm-fx6
board/compulab/cm_fx6/cm_fx6.c | 19 +++++++++ board/compulab/cm_t35/cm_t35.c | 1 + common/splash_source.c | 89 +++++++++++++++++++++++++++++++++++++----- include/splash.h | 10 +++++ 4 files changed, 109 insertions(+), 10 deletions(-)
-- 1.9.1

Gentle ping.
On Sun, Aug 30, 2015 at 11:42:31AM +0300, Nikita Kiryanov wrote:
This series adds the following functionality to the splash_source library:
- load splash image from filesystem formatted usb storage
- load splash image from filesystem formatted mmc storage
- load splash image from filesystem formatted sata storage
Finally, use the new features on cm-fx6.
Cc: Igor Grinberg grinberg@compulab.co.il Cc: Tom Rini trini@konsulko.com
Nikita Kiryanov (5): splash_source: rename *_read() to *_read_raw() splash_source: add support for filesystem formatted mmc splash_source: add support for filesystem formatted usb splash_source: add support for fileystem formatted sata arm: mx6: cm-fx6: add splash locations to cm-fx6
board/compulab/cm_fx6/cm_fx6.c | 19 +++++++++ board/compulab/cm_t35/cm_t35.c | 1 + common/splash_source.c | 89 +++++++++++++++++++++++++++++++++++++----- include/splash.h | 10 +++++ 4 files changed, 109 insertions(+), 10 deletions(-)
-- 1.9.1

Now that the merge window is open: ping!
On Sun, Aug 30, 2015 at 11:42:31AM +0300, Nikita Kiryanov wrote:
This series adds the following functionality to the splash_source library:
- load splash image from filesystem formatted usb storage
- load splash image from filesystem formatted mmc storage
- load splash image from filesystem formatted sata storage
Finally, use the new features on cm-fx6.
Cc: Igor Grinberg grinberg@compulab.co.il Cc: Tom Rini trini@konsulko.com
Nikita Kiryanov (5): splash_source: rename *_read() to *_read_raw() splash_source: add support for filesystem formatted mmc splash_source: add support for filesystem formatted usb splash_source: add support for fileystem formatted sata arm: mx6: cm-fx6: add splash locations to cm-fx6
board/compulab/cm_fx6/cm_fx6.c | 19 +++++++++ board/compulab/cm_t35/cm_t35.c | 1 + common/splash_source.c | 89 +++++++++++++++++++++++++++++++++++++----- include/splash.h | 10 +++++ 4 files changed, 109 insertions(+), 10 deletions(-)
-- 1.9.1
participants (2)
-
Igor Grinberg
-
Nikita Kiryanov