Hi Marek, > 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+rene...@gmail.com> > Cc: Lukasz Majewski <lu...@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 ^^^^^^^^^^^- This name is OK. It is the same as other "gadget" names - like USB_FUNCTION_SDP, USB_FUNCTION_THOR, etc.
> + imply TFTP_FUNCTION_DFU if NET ^^^^^^^^^^^^^^ - this name is a bit misleading Why we cannot select CONFIG_DFU_TFTP here directly and drop this config? > 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 Please exclude relevant pieces of code for TFTP and for USB in a separate static functions: #ifdef CONFIG_USB_FUNCTION_DFU dfu_usb() { } #else dfu_usb() {return 0}; #fi #ifdef CONFIG_DFU_TFTP dfu_tftp() { } #else dfu_tftp() {return 0}; #fi do_dfu () { ... ret = dfu_usb(); ret = dfu_tftp(); .... } > 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" Please simply use (in a way similar to ./cmd/mmc.c) : #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" #endif #ifdef CONFIG_DFU_TFTP "dfu tftp <interface> <dev> [<addr>]\n" " - device firmware upgrade via TFTP\n" " on device <dev>, attached to interface\n" " <interface>\n" " [<addr>] - address where FIT image has been stored\n" #endif > 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 This shall be left as it is - Faiz is going to clean up this. http://patchwork.ozlabs.org/patch/873372/ And side question - the CONFIG_SPL_DFU_SUPPORT shall be orthogonal to other DFU settings (as it is for SPL). Does your board require DFU support in SPL ? > 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 Yes, this is correct - only needed for USB DFU. > 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 This shall be dropped - we shall use CONFIG_DFU_TFTP directly > > -if CMD_DFU > +if DFU > config DFU_TFTP > bool "DFU via TFTP" > + depends on TFTP_FUNCTION_DFU This is not needed. > 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 +1 > obj-$(CONFIG_DFU_MMC) += dfu_mmc.o > obj-$(CONFIG_DFU_NAND) += dfu_nand.o > obj-$(CONFIG_DFU_RAM) += dfu_ram.o I do like the idea of first enabling CONFIG_CMD_DFU, which then if applicable enables USB_FUNCTION_DFU or DFU_TFTP. Also CONFIG_DFU shall add generic drivers/dfu/dfu.o. Best regards, Lukasz Majewski -- DENX Software Engineering GmbH, Managing Director: Wolfgang Denk HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: w...@denx.de
pgp_XkyIhFfVZ.pgp
Description: OpenPGP digital signature
_______________________________________________ U-Boot mailing list U-Boot@lists.denx.de https://lists.denx.de/listinfo/u-boot