All of lore.kernel.org
 help / color / mirror / Atom feed
From: Eran Matityahu <eran.m@variscite.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH v3] splash_source: add support for ubifs formatted nand
Date: Tue, 7 Jun 2016 10:38:37 +0300	[thread overview]
Message-ID: <20160607073837.GA6657@ubuntu> (raw)

Add support for loading splash image from NAND Flash formatted with a (UBI) filesystem.

Signed-off-by: Eran Matityahu <eran.m@variscite.com>
Cc: Heiko Schocher <hs@denx.de>
Cc: Igor Grinberg <grinberg@compulab.co.il>
Cc: Tom Rini <trini@konsulko.com>
Cc: Nikita Kiryanov <nikita@compulab.co.il>
Cc: Stefano Babic <sbabic@denx.de>
---
Changes for v3:
	Removed unrelated cleanup changes (the license identifier change among them)

Changes for v2:
	- Following Nikita's comments:
		- Use the ubi volume field to identify the UBIFS usage
		- Changed FS_TYPE_ANY to FS_TYPE_UBIFS
		- Added a second definition of splash_umount_ubifs ifndef CONFIG_CMD_UBIFS
	- Replace license identifier to GPL-2.0+ in include/splash.h
	- Changed ubi_volume to ubivol
 common/splash_source.c | 59 ++++++++++++++++++++++++++++++++++++++++++++++----
 include/splash.h       |  2 ++
 2 files changed, 57 insertions(+), 4 deletions(-)

diff --git a/common/splash_source.c b/common/splash_source.c
index a09dd4b..e132a82 100644
--- a/common/splash_source.c
+++ b/common/splash_source.c
@@ -120,6 +120,12 @@ static int splash_select_fs_dev(struct splash_location *location)
 	case SPLASH_STORAGE_SATA:
 		res = fs_set_blk_dev("sata", location->devpart, FS_TYPE_ANY);
 		break;
+	case SPLASH_STORAGE_NAND:
+		if (location->ubivol != NULL)
+			res = fs_set_blk_dev("ubi", NULL, FS_TYPE_UBIFS);
+		else
+			res = -ENODEV;
+		break;
 	default:
 		printf("Error: unsupported location storage.\n");
 		return -ENODEV;
@@ -163,6 +169,41 @@ static inline int splash_init_sata(void)
 }
 #endif
 
+#ifdef CONFIG_CMD_UBIFS
+static int splash_mount_ubifs(struct splash_location *location)
+{
+	int res;
+	char cmd[32];
+
+	sprintf(cmd, "ubi part %s", location->mtdpart);
+	res = run_command(cmd, 0);
+	if (res)
+		return res;
+
+	sprintf(cmd, "ubifsmount %s", location->ubivol);
+	res = run_command(cmd, 0);
+
+	return res;
+}
+
+static inline int splash_umount_ubifs(void)
+{
+	return run_command("ubifsumount", 0);
+}
+#else
+static inline int splash_mount_ubifs(struct splash_location *location)
+{
+	printf("Cannot load splash image: no UBIFS support\n");
+	return -ENOSYS;
+}
+
+static inline int splash_umount_ubifs(void)
+{
+	printf("Cannot unmount UBIFS: no UBIFS support\n");
+	return -ENOSYS;
+}
+#endif
+
 #define SPLASH_SOURCE_DEFAULT_FILE_NAME		"splash.bmp"
 
 static int splash_load_fs(struct splash_location *location, u32 bmp_load_addr)
@@ -181,26 +222,36 @@ static int splash_load_fs(struct splash_location *location, u32 bmp_load_addr)
 	if (location->storage == SPLASH_STORAGE_SATA)
 		res = splash_init_sata();
 
+	if (location->ubivol != NULL)
+		res = splash_mount_ubifs(location);
+
 	if (res)
 		return res;
 
 	res = splash_select_fs_dev(location);
 	if (res)
-		return res;
+		goto out;
 
 	res = fs_size(splash_file, &bmp_size);
 	if (res) {
 		printf("Error (%d): cannot determine file size\n", res);
-		return res;
+		goto out;
 	}
 
 	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;
+		res = -EFAULT;
+		goto out;
 	}
 
 	splash_select_fs_dev(location);
-	return fs_read(splash_file, bmp_load_addr, 0, 0, NULL);
+	res = fs_read(splash_file, bmp_load_addr, 0, 0, NULL);
+
+out:
+	if (location->ubivol != NULL)
+		splash_umount_ubifs();
+
+	return res;
 }
 
 /**
diff --git a/include/splash.h b/include/splash.h
index f0755ca..25df1cf 100644
--- a/include/splash.h
+++ b/include/splash.h
@@ -43,6 +43,8 @@ struct splash_location {
 	enum splash_flags flags;
 	u32 offset;	/* offset from start of storage */
 	char *devpart;  /* Use the load command dev:part conventions */
+	char *mtdpart;	/* MTD partition for ubi part */
+	char *ubivol;	/* UBI volume-name for ubifsmount */
 };
 
 int splash_source_load(struct splash_location *locations, uint size);
-- 
1.9.1

             reply	other threads:[~2016-06-07  7:38 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-06-07  7:38 Eran Matityahu [this message]
2016-06-09 11:26 ` [U-Boot] [PATCH v3] splash_source: add support for ubifs formatted nand Nikita Kiryanov

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20160607073837.GA6657@ubuntu \
    --to=eran.m@variscite.com \
    --cc=u-boot@lists.denx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.