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 + 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/ -- 1.7.9.5 _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot