[U-Boot] [PATCH 1/2] dfu: Fix up the Kconfig mess

Marek Vasut marek.vasut at gmail.com
Tue Feb 13 21:48:38 UTC 2018


Clean up the screaming mess of configuration options that DFU is.
It was impossible to configure DFU such that TFTP is enabled and
USB is not, this patch fixes that and assures that DFU TFTP and
DFU USB can be enabled separatelly and that the correct pieces
of code are compiled in.

Signed-off-by: Marek Vasut <marek.vasut+renesas at gmail.com>
Cc: Lukasz Majewski <lukma at denx.de>
---
 cmd/Kconfig          |  3 ++-
 cmd/dfu.c            | 18 +++++++++++++-----
 common/Makefile      |  6 ++++--
 drivers/dfu/Kconfig  | 13 ++++++++++++-
 drivers/dfu/Makefile |  2 +-
 5 files changed, 32 insertions(+), 10 deletions(-)

diff --git a/cmd/Kconfig b/cmd/Kconfig
index 7368b6df52..1ef4c31202 100644
--- a/cmd/Kconfig
+++ b/cmd/Kconfig
@@ -582,7 +582,8 @@ config CMD_DEMO
 
 config CMD_DFU
 	bool "dfu"
-	select USB_FUNCTION_DFU
+	imply USB_FUNCTION_DFU if USB_GADGET
+	imply TFTP_FUNCTION_DFU if NET
 	help
 	  Enables the command "dfu" which is used to have U-Boot create a DFU
 	  class device via USB. This command requires that the "dfu_alt_info"
diff --git a/cmd/dfu.c b/cmd/dfu.c
index 04291f6c08..76b89ca5ed 100644
--- a/cmd/dfu.c
+++ b/cmd/dfu.c
@@ -25,12 +25,14 @@ static int do_dfu(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 	if (argc < 4)
 		return CMD_RET_USAGE;
 
+#ifdef CONFIG_USB_FUNCTION_DFU
 	char *usb_controller = argv[1];
+#endif
 	char *interface = argv[2];
 	char *devstring = argv[3];
 
-	int ret;
-#ifdef CONFIG_DFU_TFTP
+	int ret = 0;
+#ifdef CONFIG_TFTP_FUNCTION_DFU
 	unsigned long addr = 0;
 	if (!strcmp(argv[1], "tftp")) {
 		if (argc == 5)
@@ -39,7 +41,7 @@ static int do_dfu(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 		return update_tftp(addr, interface, devstring);
 	}
 #endif
-
+#ifdef CONFIG_USB_FUNCTION_DFU
 	ret = dfu_init_env_entities(interface, devstring);
 	if (ret)
 		goto done;
@@ -56,18 +58,24 @@ static int do_dfu(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 
 done:
 	dfu_free_entities();
+#endif
 	return ret;
 }
 
 U_BOOT_CMD(dfu, CONFIG_SYS_MAXARGS, 1, do_dfu,
 	"Device Firmware Upgrade",
+#ifdef CONFIG_USB_FUNCTION_DFU
 	"<USB_controller> <interface> <dev> [list]\n"
 	"  - device firmware upgrade via <USB_controller>\n"
 	"    on device <dev>, attached to interface\n"
 	"    <interface>\n"
 	"    [list] - list available alt settings\n"
-#ifdef CONFIG_DFU_TFTP
-	"dfu tftp <interface> <dev> [<addr>]\n"
+#endif
+#ifdef CONFIG_TFTP_FUNCTION_DFU
+#ifdef CONFIG_USB_FUNCTION_DFU
+	"dfu "
+#endif
+	"tftp <interface> <dev> [<addr>]\n"
 	"  - device firmware upgrade via TFTP\n"
 	"    on device <dev>, attached to interface\n"
 	"    <interface>\n"
diff --git a/common/Makefile b/common/Makefile
index c7bde239c1..cdd0ab19d8 100644
--- a/common/Makefile
+++ b/common/Makefile
@@ -66,7 +66,9 @@ endif # !CONFIG_SPL_BUILD
 obj-$(CONFIG_$(SPL_TPL_)BOOTSTAGE) += bootstage.o
 
 ifdef CONFIG_SPL_BUILD
-obj-$(CONFIG_SPL_DFU_SUPPORT) += dfu.o
+ifdef CONFIG_SPL_DFU_SUPPORT
+obj-$(CONFIG_USB_FUNCTION_DFU) += dfu.o
+endif
 obj-$(CONFIG_SPL_DFU_SUPPORT) += cli_hush.o
 obj-$(CONFIG_SPL_HASH_SUPPORT) += hash.o
 obj-$(CONFIG_SPL_YMODEM_SUPPORT) += xyzModem.o
@@ -128,7 +130,7 @@ endif
 
 obj-y += cli.o
 obj-$(CONFIG_FSL_DDR_INTERACTIVE) += cli_simple.o cli_readline.o
-obj-$(CONFIG_CMD_DFU) += dfu.o
+obj-$(CONFIG_USB_FUNCTION_DFU) += dfu.o
 obj-y += command.o
 obj-$(CONFIG_$(SPL_)LOG) += log.o
 obj-$(CONFIG_$(SPL_)LOG_CONSOLE) += log_console.o
diff --git a/drivers/dfu/Kconfig b/drivers/dfu/Kconfig
index fa27efbb40..1a578546c7 100644
--- a/drivers/dfu/Kconfig
+++ b/drivers/dfu/Kconfig
@@ -1,12 +1,23 @@
 menu "DFU support"
 
+config DFU
+	bool
+
 config USB_FUNCTION_DFU
 	bool
 	select HASH
+	select DFU
+	depends on USB_GADGET
+
+config TFTP_FUNCTION_DFU
+	bool
+	select DFU
+	depends on NET
 
-if CMD_DFU
+if DFU
 config DFU_TFTP
 	bool "DFU via TFTP"
+	depends on TFTP_FUNCTION_DFU
 	help
 	  This option allows performing update of DFU-managed medium with data
 	  sent via TFTP boot.
diff --git a/drivers/dfu/Makefile b/drivers/dfu/Makefile
index 61f2b71f91..7f35871ddc 100644
--- a/drivers/dfu/Makefile
+++ b/drivers/dfu/Makefile
@@ -5,7 +5,7 @@
 # SPDX-License-Identifier:	GPL-2.0+
 #
 
-obj-$(CONFIG_USB_FUNCTION_DFU) += dfu.o
+obj-$(CONFIG_DFU) += dfu.o
 obj-$(CONFIG_DFU_MMC) += dfu_mmc.o
 obj-$(CONFIG_DFU_NAND) += dfu_nand.o
 obj-$(CONFIG_DFU_RAM) += dfu_ram.o
-- 
2.15.1



More information about the U-Boot mailing list