summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Documentation/user/usb.rst1
-rw-r--r--common/fastboot.c8
-rw-r--r--common/file-list.c7
-rw-r--r--include/file-list.h1
4 files changed, 16 insertions, 1 deletions
diff --git a/Documentation/user/usb.rst b/Documentation/user/usb.rst
index 2479efe9d6..f2f57ead98 100644
--- a/Documentation/user/usb.rst
+++ b/Documentation/user/usb.rst
@@ -65,6 +65,7 @@ Several **flags** are supported, each denoted by a single character:
* ``r`` Readback. The partition is allowed to be read back (DFU specific)
* ``c`` The file shall be created if it doesn't exist. Needed when a regular file is exported.
* ``u`` The partition is a MTD device and shall be flashed with a UBI image.
+* ``o`` The partition is optional, i.e. if it is not available at initialization time, it is skipped instead of aborting the initialization
Example:
diff --git a/common/fastboot.c b/common/fastboot.c
index 72e6ba3c40..ae7f132444 100644
--- a/common/fastboot.c
+++ b/common/fastboot.c
@@ -95,6 +95,14 @@ static int fastboot_add_partition_variables(struct fastboot *fb,
}
if (ret) {
+ if (fentry->flags & FILE_LIST_FLAG_OPTIONAL) {
+ pr_info("skipping unavailable optional partition %s for fastboot gadget\n",
+ fentry->filename);
+ ret = 0;
+ type = "unavailable";
+ goto out;
+ }
+
if (fentry->flags & FILE_LIST_FLAG_CREATE) {
ret = 0;
type = "file";
diff --git a/common/file-list.c b/common/file-list.c
index 11db7c6e44..1dc7cd8266 100644
--- a/common/file-list.c
+++ b/common/file-list.c
@@ -88,6 +88,9 @@ static int file_list_parse_one(struct file_list *files, const char *partstr, con
case 'u':
flags |= FILE_LIST_FLAG_UBI;
break;
+ case 'o':
+ flags |= FILE_LIST_FLAG_OPTIONAL;
+ break;
default:
pr_err("Unknown flag '%c'\n", *partstr);
return -EINVAL;
@@ -113,7 +116,7 @@ static int file_list_parse_one(struct file_list *files, const char *partstr, con
static const char *flags_to_str(int flags)
{
- static char str[sizeof "srcu"];
+ static char str[sizeof "srcuo"];
char *s = str;;
if (flags & FILE_LIST_FLAG_SAFE)
@@ -124,6 +127,8 @@ static const char *flags_to_str(int flags)
*s++ = 'c';
if (flags & FILE_LIST_FLAG_UBI)
*s++ = 'u';
+ if (flags & FILE_LIST_FLAG_OPTIONAL)
+ *s++ = 'o';
*s = '\0';
diff --git a/include/file-list.h b/include/file-list.h
index af0dd7bbf1..2b2003971f 100644
--- a/include/file-list.h
+++ b/include/file-list.h
@@ -8,6 +8,7 @@
#define FILE_LIST_FLAG_READBACK (1 << 1)
#define FILE_LIST_FLAG_CREATE (1 << 2)
#define FILE_LIST_FLAG_UBI (1 << 3)
+#define FILE_LIST_FLAG_OPTIONAL (1 << 4)
struct file_list_entry {
char *name;