Skip to contentSkip to conversation

Add support for additional splash screen locations

PATCH New Nikita Kiryanov 2 participants 17 messages Aug 30, 2015 – Oct 26, 2015

lore
Share & tools
lore
#0 lore raw

cover 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 <[email protected]>
Cc Tom Rini <[email protected]>

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(-)
Signature · 1 line
1.9.1
#1 lore raw

PATCH 1/5 splash_source: rename *_read() to *_read_raw()

Rename raw read functions to *_read_raw() in preparation for supporting read_fs() feature.

---
 common/splash_source.c | 18 +++++++++---------
 1 file changed, 9 insertions(+), 9 deletions(-)
common/splash_source.c +9 -9
index d1bb5a4..4820c12 100644
@@ -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");
Signature · 1 line
1.9.1
#3 lore raw

PATCH 2/5 splash_source: add support for filesystem formatted mmc

In reply to Nikita Kiryanov

Add support for loading splash image from an SD card formatted with a filesystem. Update boards to maintain original behavior where needed.

---
 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(-)
board/compulab/cm_fx6/cm_fx6.c +1 -0
index e85c8ab..4c2a5c8 100644
@@ -38,6 +38,7 @@ static struct splash_location cm_fx6_splash_locations[] = {
 	{
 		.name = "sf",
 		.storage = SPLASH_STORAGE_SF,
+		.flags = SPLASH_STORAGE_RAW,
 		.offset = 0x100000,
 	},
 };
board/compulab/cm_t35/cm_t35.c +1 -0
index 374edbc..398c573 100644
@@ -64,6 +64,7 @@ struct splash_location splash_locations[] = {
 	{
 		.name = "nand",
 		.storage = SPLASH_STORAGE_NAND,
+		.flags = SPLASH_STORAGE_RAW,
 		.offset = 0x100000,
 	},
 };
common/splash_source.c +50 -1

67 lines not on this page · raw message

include/splash.h +8 -0
index 7ae7a68..d1fba69 100644
@@ -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);
Signature · 1 line
1.9.1
#4 lore raw

PATCH 2/5 splash_source: add support for filesystem formatted mmc

Hi Nikita,

Quoted 7 lines · Nikita Kiryanov

Add support for loading splash image from an SD card formatted with a filesystem. Update boards to maintain original behavior where needed.

---

[...]

Quoted 4 lines
common/splash_source.c +0 -0
index 4820c12..cb45c63 100644

[...]

common/splash_source.c splash_address_too_high: · line 135

Quoted 10 lines
common/splash_source.c +10 -0
+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?

Quoted 14 lines
common/splash_source.c +14 -0
+	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);
+}
+

[...]

Signature · 2 lines
Regards,
Igor.
#5 lore raw

PATCH 2/5 splash_source: add support for filesystem formatted mmc

Quoted 20 lines · Igor Grinberg

Hi Nikita,

Quoted 7 lines · Nikita Kiryanov

Add support for loading splash image from an SD card formatted with a filesystem. Update boards to maintain original behavior where needed.

---

[...]

Quoted 4 lines
common/splash_source.c +0 -0
index 4820c12..cb45c63 100644

[...]

Quoted 13 lines

common/splash_source.c splash_address_too_high: · line 135

Quoted 10 lines
common/splash_source.c +10 -0
+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.

Quoted 22 lines
Quoted 15 lines
common/splash_source.c +14 -0
+	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);
+}
+

[...]

Signature · 2 lines
Regards,
Igor.
#6 lore raw

PATCH 3/5 splash_source: add support for filesystem formatted usb

In reply to Nikita Kiryanov

Add support for loading splash image from USB drive formatted with a filesystem.

---
 common/splash_source.c | 11 +++++++++++
 include/splash.h       |  1 +
 2 files changed, 12 insertions(+)
common/splash_source.c +11 -0
index cb45c63..937ce17 100644
@@ -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;
include/splash.h +1 -0
index d1fba69..b728bd6 100644
@@ -28,6 +28,7 @@ enum splash_storage {
 	SPLASH_STORAGE_NAND,
 	SPLASH_STORAGE_SF,
 	SPLASH_STORAGE_MMC,
+	SPLASH_STORAGE_USB,
 };
 
 enum splash_flags {
Signature · 1 line
1.9.1
#7 lore raw

PATCH 3/5 splash_source: add support for filesystem formatted usb

Quoted 6 lines · Nikita Kiryanov

Add support for loading splash image from USB drive formatted with a filesystem.

[...]

common/splash_source.c static int splash_load_fs(struct splash_location *location, u32 bmp_load_addr) · line 140

Quoted 6 lines
common/splash_source.c +6 -0
+#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?

Signature · 2 lines
Regards,
Igor.
#8 lore raw

PATCH 3/5 splash_source: add support for filesystem formatted usb

Quoted 10 lines · Igor Grinberg
Quoted 6 lines · Nikita Kiryanov

Add support for loading splash image from USB drive formatted with a filesystem.

[...]

Quoted 8 lines

common/splash_source.c static int splash_load_fs(struct splash_location *location, u32 bmp_load_addr) · line 140

Quoted 6 lines
common/splash_source.c +6 -0
+#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.

Quoted 6 lines
Signature · 3 lines
-- 
Regards,
Igor.
#9 lore raw

PATCH 3/5 splash_source: add support for filesystem formatted usb

Quoted 20 lines · Nikita Kiryanov
Quoted 10 lines · Igor Grinberg
Quoted 6 lines · Nikita Kiryanov

Add support for loading splash image from USB drive formatted with a filesystem.

[...]

Quoted 8 lines

common/splash_source.c static int splash_load_fs(struct splash_location *location, u32 bmp_load_addr) · line 140

Quoted 6 lines
common/splash_source.c +6 -0
+#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?

Quoted 2 lines

IS_ENABLED() does not prevent compile errors, only closes off certain code paths.

Ok. Any other ways to not have that ifdefferry inside functions?

Signature · 2 lines
Regards,
Igor.
#10 lore raw

PATCH 3/5 splash_source: add support for filesystem formatted usb

Quoted 21 lines · Igor Grinberg
Quoted 20 lines · Nikita Kiryanov
Quoted 18 lines · Igor Grinberg
Quoted 6 lines · Nikita Kiryanov

Add support for loading splash image from USB drive formatted with a filesystem.

[...]

common/splash_source.c static int splash_load_fs(struct splash_location *location, u32 bmp_load_addr) · line 140

Quoted 6 lines
common/splash_source.c +6 -0
+#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?

Quoted 4 lines
Quoted 2 lines

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.

Quoted 6 lines
Signature · 3 lines
-- 
Regards,
Igor.
#11 lore raw

PATCH 4/5 splash_source: add support for fileystem formatted sata

In reply to Nikita Kiryanov

Add support for loading splashimage from filesystem formatted sata storage.

---
 common/splash_source.c | 9 +++++++++
 include/splash.h       | 1 +
 2 files changed, 10 insertions(+)
common/splash_source.c +9 -0
index 937ce17..88d639e 100644
@@ -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;
include/splash.h +1 -0
index b728bd6..f0755ca 100644
@@ -29,6 +29,7 @@ enum splash_storage {
 	SPLASH_STORAGE_SF,
 	SPLASH_STORAGE_MMC,
 	SPLASH_STORAGE_USB,
+	SPLASH_STORAGE_SATA,
 };
 
 enum splash_flags {
Signature · 1 line
1.9.1
#12 lore raw

PATCH 5/5 arm: mx6: cm-fx6: add splash locations to cm-fx6

In reply to Nikita Kiryanov

Add the following splash locations to cm-fx6:
* filesystem formatted mmc
* filesystem formatted usb
* filesystem formatted sata

---
 board/compulab/cm_fx6/cm_fx6.c | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)
board/compulab/cm_fx6/cm_fx6.c +18 -0
index 4c2a5c8..def821c 100644
@@ -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)
Signature · 1 line
1.9.1
#14 lore raw

cover Add support for additional splash screen locations

In reply to Nikita Kiryanov

Title correction: add support for additional splash image locations

Quoted 26 lines · Nikita Kiryanov

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 <[email protected]>
Cc Tom Rini <[email protected]>

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(-)
Signature · 1 line
1.9.1
#15 lore raw

cover Add support for additional splash screen locations

In reply to Nikita Kiryanov

Gentle ping.

Quoted 26 lines · Nikita Kiryanov

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 <[email protected]>
Cc Tom Rini <[email protected]>

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(-)
Signature · 1 line
1.9.1
#16 lore raw

cover Add support for additional splash screen locations

In reply to Nikita Kiryanov

Now that the merge window is open: ping!

Quoted 26 lines · Nikita Kiryanov

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 <[email protected]>
Cc Tom Rini <[email protected]>

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(-)
Signature · 1 line
1.9.1