diff options
-rw-r--r-- | Documentation/user/usb.rst | 1 | ||||
-rw-r--r-- | common/fastboot.c | 8 | ||||
-rw-r--r-- | common/file-list.c | 7 | ||||
-rw-r--r-- | include/file-list.h | 1 |
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; |