From: Eran Matityahu <eran.m@variscite.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH v2] splash_source: add support for ubifs formatted nand
Date: Mon, 30 May 2016 19:07:17 +0300 [thread overview]
Message-ID: <20160530160717.GA66441@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: 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 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 | 23 +++++---------------
2 files changed, 60 insertions(+), 22 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..617b514 100644
--- a/include/splash.h
+++ b/include/splash.h
@@ -1,22 +1,7 @@
/*
* Copyright (C) 2013, Boundary Devices <info@boundarydevices.com>
*
- * See file CREDITS for list of people who contributed to this
- * project.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of
- * the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., http://www.fsf.org/about/contact/
+ * SPDX-License-Identifier: GPL-2.0+
*/
#ifndef _SPLASH_H_
@@ -41,8 +26,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 *ubivol; /* UBI volume-name for ubifsmount */
};
int splash_source_load(struct splash_location *locations, uint size);
--
1.9.1
next reply other threads:[~2016-05-30 16:07 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-05-30 16:07 Eran Matityahu [this message]
2016-06-01 8:59 ` [U-Boot] [PATCH v2] 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=20160530160717.GA66441@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.