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] splash_source: add support for ubifs formatted nand
Date: Thu, 14 Apr 2016 21:13:14 +0300	[thread overview]
Message-ID: <20160414181314.GA3837@ubuntu> (raw)

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

I'm a little ambivalent about this patch, as it adds support for a specific
filesystem rather than a device, due to the nature of NAND and UBI,
but it does make some sense to me to add a NAND filesystem option here.
It would be nice to get your input about this.

Signed-off-by: Eran Matityahu <eran.m@variscite.com>
Cc: Igor Grinberg <grinberg@compulab.co.il>
Cc: Tom Rini <trini@konsulko.com>
Cc: Nikita Kiryanov <nikita@compulab.co.il>
---
 common/splash_source.c | 50 ++++++++++++++++++++++++++++++++++++++++++++++----
 include/splash.h       |  6 ++++--
 2 files changed, 50 insertions(+), 6 deletions(-)

diff --git a/common/splash_source.c b/common/splash_source.c
index a09dd4b..7762ee8 100644
--- a/common/splash_source.c
+++ b/common/splash_source.c
@@ -120,6 +120,9 @@ 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:
+		res = fs_set_blk_dev("ubi", NULL, FS_TYPE_ANY);
+		break;
 	default:
 		printf("Error: unsupported location storage.\n");
 		return -ENODEV;
@@ -163,6 +166,35 @@ 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->ubi_volume);
+	res = run_command(cmd, 0);
+
+	return res;
+}
+#else
+static inline int splash_mount_ubifs(struct splash_location *location)
+{
+	printf("Cannot load splash image: no UBIFS support\n");
+	return -ENOSYS;
+}
+#endif
+
+static inline int splash_umount_ubifs(void)
+{
+	return run_command("ubifsumount", 0);
+}
+
 #define SPLASH_SOURCE_DEFAULT_FILE_NAME		"splash.bmp"
 
 static int splash_load_fs(struct splash_location *location, u32 bmp_load_addr)
@@ -181,26 +213,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->storage == SPLASH_STORAGE_NAND)
+		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->storage == SPLASH_STORAGE_NAND)
+		splash_umount_ubifs();
+
+	return res;
 }
 
 /**
diff --git a/include/splash.h b/include/splash.h
index f0755ca..5c0da85 100644
--- a/include/splash.h
+++ b/include/splash.h
@@ -41,8 +41,10 @@ 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 */
+	u32 offset;		/* Offset from start of storage */
+	char *devpart;		/* Use the load command dev:part conventions */
+	char *mtdpart;		/* MTD partition for ubi part */
+	char *ubi_volume;	/* UBI volume-name for ubifsmount */
 };
 
 int splash_source_load(struct splash_location *locations, uint size);
-- 
1.9.1

             reply	other threads:[~2016-04-14 18:13 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-04-14 18:13 Eran Matityahu [this message]
2016-04-17 15:48 ` [U-Boot] [PATCH] 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=20160414181314.GA3837@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.