Hi Ravi, > Traditionally the DFU support is available only > as part 2nd stage boot loader(u-boot) and DFU > is not supported in SPL. > > The SPL-DFU feature is useful for boards which has > only USB inteface and do not have external interface > like ethernet or MMC/SD to boot the board. > > This patch add DFU support in SPL to flash boot inital > binary images to factory or bare-metal boards to > memory devices like SPI, eMMC, MMC/SD card using > USB interface. > > This SPL-DFU support can be enabled through > Menuconfig->Boot Images->Enable SPL-DFU support > > Signed-off-by: Ravi Babu <ravib...@ti.com> > --- > Kconfig | 33 +++++++++++++++++++++++++++++++++ > common/Makefile | 26 +++++++++++++++++++------- > common/command.c | 2 +- > scripts/Makefile.spl | 13 +++++++++++++ > 4 files changed, 66 insertions(+), 8 deletions(-) > > diff --git a/Kconfig b/Kconfig > index f53759a..969641e 100644 > --- a/Kconfig > +++ b/Kconfig > @@ -285,6 +285,39 @@ config SPL_LOAD_FIT > particular it can handle selecting from multiple device > tree and passing the correct one to U-Boot. > > +config SPL_DFU > + bool "Enable SPL with DFU to load binaries to bootdevices > using USB" > + depends on USB && CMD_DFU && TARGET_DRA7XX_EVM
Is this dependency correct? Especially the CONFIG_CMD_DFU? As fair as I remember, we don't need "dfu" command to make SPL dfu working. What we do need are CONFIG_USB_GADGET_DOWNLOAD,CONFIG_USB_FUNCTION_THOR, CONFIG_USB_FUNCTION_DFU, etc. > + help > + Currently the SPL does not have capability to load the > + binaries or boot images to boot devices like eMMC,SPI,etc. > + This feature enables the DFU (Device Firmware Upgarde) in > SPL with > + RAM device as default bootdevice. The ROM code will load > and execute > + the SPL/MLO dfu image. The user can flash the binaries to > selected > + dfu device partition from host-pc using dfu-utils. > + This feature will be useful to flash the binaries to > factory > + or bare-metal boards using USB interface. > + > +choice > + bool "DFU device selection" > + depends on CMD_DFU && SPL_DFU > + > +config SPL_DFU_RAM > + bool "RAM device" > + depends on CMD_DFU > + help > + select DDR memory device for flashing binary images to > + the selected partition using DFU. > + > +config SPL_DFU_SF > + bool "SPI device" > + depends on CMD_DFU && SPL_DFU > + help > + select SPI flash memory device for flashing binary images to > + the selected partition using DFU. > + > +endchoice > + > config SYS_CLK_FREQ > depends on ARC || ARCH_SUNXI > int "CPU clock frequency" > diff --git a/common/Makefile b/common/Makefile > index b23f312..0fa441f 100644 > --- a/common/Makefile > +++ b/common/Makefile > @@ -6,15 +6,30 @@ > # > > # core > -ifndef CONFIG_SPL_BUILD > -obj-y += init/ > -obj-y += main.o > -obj-y += exports.o > + > +CONFIG_INC_DFU=y > +ifdef CONFIG_SPL_BUILD > +ifndef CONFIG_SPL_DFU > +CONFIG_INC_DFU=n > +endif > +endif > + > +ifeq ($(CONFIG_INC_DFU),y) > obj-y += hash.o > ifdef CONFIG_SYS_HUSH_PARSER > obj-y += cli_hush.o > endif > > +obj-y += env_attr.o > +obj-y += env_callback.o > +obj-y += env_flags.o > +endif > + > +ifndef CONFIG_SPL_BUILD > +obj-y += init/ > +obj-y += main.o > +obj-y += exports.o > + > # This option is not just y/n - it can have a numeric value > ifdef CONFIG_BOOTDELAY > obj-y += autoboot.o > @@ -34,9 +49,6 @@ obj-$(CONFIG_DISPLAY_BOARDINFO_LATE) += board_info.o > obj-$(CONFIG_CMD_BOOTM) += bootm.o bootm_os.o > > # environment > -obj-y += env_attr.o > -obj-y += env_callback.o > -obj-y += env_flags.o > obj-$(CONFIG_ENV_IS_IN_DATAFLASH) += env_dataflash.o > obj-$(CONFIG_ENV_IS_IN_EEPROM) += env_eeprom.o > extra-$(CONFIG_ENV_IS_EMBEDDED) += env_embedded.o > diff --git a/common/command.c b/common/command.c > index e5d9b9c..d1c049c 100644 > --- a/common/command.c > +++ b/common/command.c > @@ -520,7 +520,7 @@ enum command_ret_t cmd_process(int flag, int > argc, char * const argv[], if (argc > cmdtp->maxargs) > rc = CMD_RET_USAGE; > > -#if defined(CONFIG_CMD_BOOTD) > +#if defined(CONFIG_CMD_BOOTD) && !defined(CONFIG_SPL_BUILD) > /* avoid "bootd" recursion */ > else if (cmdtp->cmd == do_bootd) { > if (flag & CMD_FLAG_BOOTD) { > diff --git a/scripts/Makefile.spl b/scripts/Makefile.spl > index ec8d8f1..be74991 100644 > --- a/scripts/Makefile.spl > +++ b/scripts/Makefile.spl > @@ -35,6 +35,13 @@ else > SPL_BIN := u-boot-spl > endif > > +CONFIG_INC_DFU=y > +ifdef CONFIG_SPL_BUILD > +ifndef CONFIG_SPL_DFU > +CONFIG_INC_DFU=n > +endif > +endif > + > include $(srctree)/config.mk > include $(srctree)/arch/$(ARCH)/Makefile > > @@ -56,6 +63,12 @@ libs-y += common/init/ > libs-$(CONFIG_SPL_LIBCOMMON_SUPPORT) += common/ cmd/ > libs-$(CONFIG_SPL_LIBDISK_SUPPORT) += disk/ > libs-y += drivers/ > +ifeq ($(CONFIG_INC_DFU),y) > +libs-y += drivers/dfu/ > +libs-y += drivers/usb/gadget/ > +libs-y += drivers/usb/gadget/udc/ > +libs-y += drivers/usb/dwc3/ > +endif > libs-y += dts/ > libs-y += fs/ > libs-$(CONFIG_SPL_LIBGENERIC_SUPPORT) += lib/ -- Best regards, Lukasz Majewski Samsung R&D Institute Poland (SRPOL) | Linux Platform Group _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot