mail archive of the barebox mailing list
 help / color / mirror / Atom feed
* [PATCH 00/16] USB: gadget: refactor to allow easier extension
@ 2021-05-03 11:48 Ahmad Fatoum
  2021-05-03 11:48 ` [PATCH 01/16] show_progress: add system wide progress stage notifier Ahmad Fatoum
                   ` (16 more replies)
  0 siblings, 17 replies; 20+ messages in thread
From: Ahmad Fatoum @ 2021-05-03 11:48 UTC (permalink / raw)
  To: barebox

 There's some duplication between DFU and Fastboot and incoming USB
 mass storage support as well as custom protocols that might be
 implemented by board vendors could benefit from some consolidation.

 This is added here in the form of system partitions, which is just
 a way to have a machine-global file_list, that can be used as fallback
 for fastboot, DFU, mass storage gadget, ... etc.

 Some commits are not directly related and happened along the way.

 v2 -> v3:
  - squash fixups
  - add new commit to ignore NULL in file_list_free
  - reworked usbgadget_register logic, so usbgadget -D '' with no
    DFU compiled in is not silently ignored
  - fix error checking in file_list_detect_all

 v1 -> v2:
  - log_writefile(filename) instead of log_dprint(fd) (Sascha)
  - rename $machine.partitions to $global.system.partitions (Sascha)
  - add new commit fixing error with appending to files on ext4


Ahmad Fatoum (16):
  show_progress: add system wide progress stage notifier
  common: console: add log_writefile to write log into new file
  string: implement strstarts along with strends
  vsprintf: introduce %m shorthand for "%s", strerror(errno)
  param: introduce file-list parameter type
  common: add generic system partitions interface
  fastboot: handle ill-named partitions gracefully
  usb: gadget: dfu: change status message to info log level
  usbgadget: autostart: fix indeterminism around usbgadget.autostart
  usbgadget: allow DFU and Fastboot functions to coexist
  file_list: make freeing a NULL pointer a no-op
  fastboot/dfu: use system partitions as fall back
  bbu: add function to directly add handlers into file_list
  file_list: add file_list_detect_all()
  common: make FILE_LIST feature unconditional
  fs: error out when writing on read-only file system

 common/Kconfig              | 15 ++++--
 common/Makefile             |  3 +-
 common/bbu.c                | 24 ++++++----
 common/console_common.c     | 20 ++++++++
 common/fastboot.c           | 28 ++++-------
 common/file-list.c          | 85 +++++++++++++++++++++++++++++++++
 common/system-partitions.c  | 44 ++++++++++++++++++
 common/usbgadget.c          | 93 ++++++++++++++++++++++---------------
 drivers/usb/gadget/Kconfig  |  2 -
 drivers/usb/gadget/dfu.c    |  3 +-
 drivers/usb/gadget/multi.c  | 18 +++++--
 fs/fs.c                     |  6 +--
 include/bbu.h               | 10 +++-
 include/fastboot.h          |  6 +--
 include/file-list.h         | 12 +++++
 include/linux/string.h      | 10 ++++
 include/param.h             | 15 ++++++
 include/printk.h            |  1 +
 include/progress.h          | 43 +++++++++++++++++
 include/string.h            |  1 +
 include/stringlist.h        |  1 +
 include/system-partitions.h | 40 ++++++++++++++++
 include/usb/gadget-multi.h  |  1 +
 lib/Kconfig                 |  6 +++
 lib/parameter.c             | 88 +++++++++++++++++++++++++++++++++++
 lib/show_progress.c         | 28 +++++++++++
 lib/string.c                |  9 ++++
 lib/stringlist.c            | 30 ++++++++++++
 lib/vsprintf.c              | 13 ++++++
 net/Kconfig                 |  1 -
 net/fastboot.c              |  4 +-
 31 files changed, 571 insertions(+), 89 deletions(-)
 create mode 100644 common/system-partitions.c
 create mode 100644 include/system-partitions.h

-- 
2.29.2


_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox


^ permalink raw reply	[flat|nested] 20+ messages in thread
* [PATCH v2 11/15] fastboot/dfu: use system partitions as fall back
@ 2021-04-30 13:29 Ahmad Fatoum
  2021-04-30 17:57 ` [PATCH] fixup! " Ahmad Fatoum
  0 siblings, 1 reply; 20+ messages in thread
From: Ahmad Fatoum @ 2021-04-30 13:29 UTC (permalink / raw)
  To: barebox; +Cc: Ahmad Fatoum

Use the new system partitions infrastructure to have fastboot and DFU
fall back to using the same partitions if the global.usbgadget.dfu_function
and global.fastboot_partitions are not set, respectively.

No functional change intended for configurations that have
SYSTEM_PARTITIONS disabled.

Signed-off-by: Ahmad Fatoum <a.fatoum@pengutronix.de>
---
 common/fastboot.c          |  9 ++++--
 common/usbgadget.c         | 64 +++++++++++++++++++++-----------------
 drivers/usb/gadget/multi.c | 12 +++++++
 include/fastboot.h         |  6 ++--
 include/file-list.h        |  5 +++
 include/usb/gadget-multi.h |  1 +
 net/fastboot.c             |  4 +--
 7 files changed, 64 insertions(+), 37 deletions(-)

diff --git a/common/fastboot.c b/common/fastboot.c
index c8576a8d97c3..dc80b66e6720 100644
--- a/common/fastboot.c
+++ b/common/fastboot.c
@@ -41,6 +41,7 @@
 #include <linux/stat.h>
 #include <linux/mtd/mtd.h>
 #include <fastboot.h>
+#include <system-partitions.h>
 
 #define FASTBOOT_VERSION		"0.4"
 
@@ -932,9 +933,13 @@ bool get_fastboot_bbu(void)
 	return fastboot_bbu;
 }
 
-const char *get_fastboot_partitions(void)
+struct file_list *get_fastboot_partitions(void)
 {
-	return fastboot_partitions;
+	if (fastboot_partitions && *fastboot_partitions)
+		return file_list_parse(fastboot_partitions);
+	if (!system_partitions_empty())
+		return system_partitions_get();
+	return NULL;
 }
 
 static int fastboot_globalvars_init(void)
diff --git a/common/usbgadget.c b/common/usbgadget.c
index 009debd93efc..bdbb4d794889 100644
--- a/common/usbgadget.c
+++ b/common/usbgadget.c
@@ -17,6 +17,7 @@
 #include <usb/gadget-multi.h>
 #include <globalvar.h>
 #include <magicvar.h>
+#include <system-partitions.h>
 
 static int autostart;
 static int acm;
@@ -32,6 +33,15 @@ static struct file_list *parse(const char *files)
 	return list;
 }
 
+static inline struct file_list *get_dfu_function(void)
+{
+	if (dfu_function && *dfu_function)
+		return file_list_parse(dfu_function);
+	if (!system_partitions_empty())
+		return system_partitions_get();
+	return NULL;
+}
+
 int usbgadget_register(bool dfu, const char *dfu_opts,
 		       bool fastboot, const char *fastboot_opts,
 		       bool acm, bool export_bbu)
@@ -39,45 +49,37 @@ int usbgadget_register(bool dfu, const char *dfu_opts,
 	int ret;
 	struct device_d *dev;
 	struct f_multi_opts *opts;
-	const char *fastboot_partitions = get_fastboot_partitions();
-
-	if (dfu && !dfu_opts && dfu_function && *dfu_function)
-		dfu_opts = dfu_function;
-
-	if (IS_ENABLED(CONFIG_FASTBOOT_BASE) && fastboot && !fastboot_opts &&
-	    fastboot_partitions && *fastboot_partitions)
-		fastboot_opts = fastboot_partitions;
-
-	if (!dfu_opts && !fastboot_opts && !acm)
-		return COMMAND_ERROR_USAGE;
-
-	/*
-	 * Creating a gadget with both DFU and Fastboot may not work.
-	 * fastboot 1:8.1.0+r23-5 can deal with it, but dfu-util 0.9
-	 * seems to assume that the device only has a single configuration
-	 * That's not our fault though. Emit a warning and continue
-	 */
-	if (fastboot_opts && dfu_opts)
-		pr_warn("Both DFU and Fastboot enabled. dfu-util may not like this!\n");
 
 	opts = xzalloc(sizeof(*opts));
 	opts->release = usb_multi_opts_release;
 
-	if (fastboot_opts) {
-		opts->fastboot_opts.files = parse(fastboot_opts);
+	if (dfu)
+		opts->dfu_opts.files = dfu_opts ? parse(dfu_opts)
+			: get_dfu_function();
+
+	if (IS_ENABLED(CONFIG_FASTBOOT_BASE) && fastboot) {
+		opts->fastboot_opts.files = fastboot_opts ? parse(fastboot_opts)
+			: get_fastboot_partitions();
+
 		opts->fastboot_opts.export_bbu = export_bbu;
 	}
 
-	if (dfu_opts)
-		opts->dfu_opts.files = parse(dfu_opts);
+	opts->create_acm = acm;
 
-	if (!opts->dfu_opts.files && !opts->fastboot_opts.files && !acm) {
+	if (usb_multi_count_functions(opts) == 0) {
 		pr_warn("No functions to register\n");
-		free(opts);
-		return 0;
+		ret = COMMAND_ERROR_USAGE;
+		goto err;
 	}
 
-	opts->create_acm = acm;
+	/*
+	 * Creating a gadget with both DFU and Fastboot may not work.
+	 * fastboot 1:8.1.0+r23-5 can deal with it, but dfu-util 0.9
+	 * seems to assume that the device only has a single configuration
+	 * That's not our fault though. Emit a warning and continue
+	 */
+	if (!file_list_empty(opts->fastboot_opts.files) && !file_list_empty(opts->dfu_opts.files))
+		pr_warn("Both DFU and Fastboot enabled. dfu-util may not like this!\n");
 
 	dev = get_device_by_name("otg");
 	if (dev)
@@ -85,7 +87,11 @@ int usbgadget_register(bool dfu, const char *dfu_opts,
 
 	ret = usb_multi_register(opts);
 	if (ret)
-		usb_multi_opts_release(opts);
+		goto err;
+
+	return 0;
+err:
+	usb_multi_opts_release(opts);
 
 	return ret;
 }
diff --git a/drivers/usb/gadget/multi.c b/drivers/usb/gadget/multi.c
index 95f5b90c88b5..3fb22486a0e9 100644
--- a/drivers/usb/gadget/multi.c
+++ b/drivers/usb/gadget/multi.c
@@ -266,6 +266,18 @@ void usb_multi_unregister(void)
 	gadget_multi_opts = NULL;
 }
 
+unsigned usb_multi_count_functions(struct f_multi_opts *opts)
+{
+	unsigned count = 0;
+
+	count += !file_list_empty(opts->fastboot_opts.files) ||
+		opts->fastboot_opts.export_bbu;
+	count += !file_list_empty(opts->dfu_opts.files);
+	count += opts->create_acm;
+
+	return count;
+}
+
 void usb_multi_opts_release(struct f_multi_opts *opts)
 {
 	if (opts->fastboot_opts.files)
diff --git a/include/fastboot.h b/include/fastboot.h
index 2eab2dfe6ae8..cf8a177bf12c 100644
--- a/include/fastboot.h
+++ b/include/fastboot.h
@@ -58,16 +58,16 @@ enum fastboot_msg_type {
 
 #ifdef CONFIG_FASTBOOT_BASE
 bool get_fastboot_bbu(void);
-const char *get_fastboot_partitions(void);
+struct file_list *get_fastboot_partitions(void);
 #else
 static inline int get_fastboot_bbu(void)
 {
 	return false;
 }
 
-static inline const char *get_fastboot_partitions(void)
+static inline struct file_list *get_fastboot_partitions(void)
 {
-	return NULL;
+	return file_list_parse("");
 }
 #endif
 
diff --git a/include/file-list.h b/include/file-list.h
index 2538883c3659..be97a49b7a2b 100644
--- a/include/file-list.h
+++ b/include/file-list.h
@@ -35,4 +35,9 @@ struct file_list_entry *file_list_entry_by_name(struct file_list *files, const c
 #define file_list_for_each_entry(files, entry) \
 	list_for_each_entry(entry, &files->list, list)
 
+static inline bool file_list_empty(struct file_list *files)
+{
+	return !files || !files->num_entries;
+}
+
 #endif /* __FILE_LIST */
diff --git a/include/usb/gadget-multi.h b/include/usb/gadget-multi.h
index 9bb6c889f3e9..f30dae5686ae 100644
--- a/include/usb/gadget-multi.h
+++ b/include/usb/gadget-multi.h
@@ -15,6 +15,7 @@ struct f_multi_opts {
 int usb_multi_register(struct f_multi_opts *opts);
 void usb_multi_unregister(void);
 void usb_multi_opts_release(struct f_multi_opts *opts);
+unsigned usb_multi_count_functions(struct f_multi_opts *opts);
 
 int usbgadget_register(bool dfu, const char *dfu_opts,
 		       bool fastboot, const char *fastboot_opts,
diff --git a/net/fastboot.c b/net/fastboot.c
index 9082aa48f6e1..df388adc8995 100644
--- a/net/fastboot.c
+++ b/net/fastboot.c
@@ -499,7 +499,6 @@ void fastboot_net_free(struct fastboot_net *fbn)
 struct fastboot_net *fastboot_net_init(struct fastboot_opts *opts)
 {
 	struct fastboot_net *fbn;
-	const char *partitions = get_fastboot_partitions();
 	bool bbu = get_fastboot_bbu();
 	int ret;
 
@@ -513,8 +512,7 @@ struct fastboot_net *fastboot_net_init(struct fastboot_opts *opts)
 		fbn->fastboot.cmd_flash = opts->cmd_flash;
 		ret = fastboot_generic_init(&fbn->fastboot, opts->export_bbu);
 	} else {
-		fbn->fastboot.files = file_list_parse(partitions ?
-						      partitions : "");
+		fbn->fastboot.files = get_fastboot_partitions() ?: file_list_parse("");
 		ret = fastboot_generic_init(&fbn->fastboot, bbu);
 	}
 	if (ret)
-- 
2.29.2


_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox


^ permalink raw reply	[flat|nested] 20+ messages in thread

end of thread, other threads:[~2021-05-03 12:32 UTC | newest]

Thread overview: 20+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-05-03 11:48 [PATCH 00/16] USB: gadget: refactor to allow easier extension Ahmad Fatoum
2021-05-03 11:48 ` [PATCH 01/16] show_progress: add system wide progress stage notifier Ahmad Fatoum
2021-05-03 11:48 ` [PATCH 02/16] common: console: add log_writefile to write log into new file Ahmad Fatoum
2021-05-03 11:48 ` [PATCH 03/16] string: implement strstarts along with strends Ahmad Fatoum
2021-05-03 11:48 ` [PATCH 04/16] vsprintf: introduce %m shorthand for "%s", strerror(errno) Ahmad Fatoum
2021-05-03 11:48 ` [PATCH 05/16] param: introduce file-list parameter type Ahmad Fatoum
2021-05-03 11:48 ` [PATCH 06/16] common: add generic system partitions interface Ahmad Fatoum
2021-05-03 11:48 ` [PATCH 07/16] fastboot: handle ill-named partitions gracefully Ahmad Fatoum
2021-05-03 11:48 ` [PATCH 08/16] usb: gadget: dfu: change status message to info log level Ahmad Fatoum
2021-05-03 11:48 ` [PATCH 09/16] usbgadget: autostart: fix indeterminism around usbgadget.autostart Ahmad Fatoum
2021-05-03 11:48 ` [PATCH 10/16] usbgadget: allow DFU and Fastboot functions to coexist Ahmad Fatoum
2021-05-03 11:48 ` [PATCH 11/16] file_list: make freeing a NULL pointer a no-op Ahmad Fatoum
2021-05-03 11:48 ` [PATCH 12/16] fastboot/dfu: use system partitions as fall back Ahmad Fatoum
2021-05-03 12:30   ` [PATCH] fixup! " Ahmad Fatoum
2021-05-03 11:48 ` [PATCH 13/16] bbu: add function to directly add handlers into file_list Ahmad Fatoum
2021-05-03 11:48 ` [PATCH 14/16] file_list: add file_list_detect_all() Ahmad Fatoum
2021-05-03 11:49 ` [PATCH 15/16] common: make FILE_LIST feature unconditional Ahmad Fatoum
2021-05-03 11:49 ` [PATCH 16/16] fs: error out when writing on read-only file system Ahmad Fatoum
2021-05-03 11:55 ` [PATCH 00/16] USB: gadget: refactor to allow easier extension Sascha Hauer
  -- strict thread matches above, loose matches on Subject: below --
2021-04-30 13:29 [PATCH v2 11/15] fastboot/dfu: use system partitions as fall back Ahmad Fatoum
2021-04-30 17:57 ` [PATCH] fixup! " Ahmad Fatoum

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox