public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
* [U-Boot] [RFC PATCH v2 0/5] SPL: DFU Support in SPL
@ 2016-07-21 14:53 Ravi Babu
  2016-07-21 14:53 ` [U-Boot] [RFC PATCH v2 1/5] spl: dfu: add dfu support " Ravi Babu
                   ` (5 more replies)
  0 siblings, 6 replies; 27+ messages in thread
From: Ravi Babu @ 2016-07-21 14:53 UTC (permalink / raw)
  To: u-boot

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
does not have MMC/SD, ethernet boot mechanism
to boot the board and only has USB inteface.

This patch add DFU support in SPL with RAM
memory device support to load and execute u-boot 
from PC over USB interface. And then leverage
full functional feature of DFU in u-boot to
flash boot inital binary images to factory or
bare-metal boards to memory devices like SPI,
eMMC, MMC/SD card using USB interface.

As a reference, refer to application note [3]
on SPL-DFU support based on 2014.07 u-boot.

Steps to build SPL-DFU/RAM:
This SPL-DFU support can be enabled through
Menuconfig->Boot Images->Enable SPL-DFU support
1) Soc ROMcode loads the u-boot-spl.bin(+DFU) to IRAM 
from PC host via usb interface and execute DFU.
2) Then load u-boot.img to RAM using dfu-util from PC-host
with -R switch to boot u-boot.
#sudo dfu-util -c 1 -i 0 -a 0 -D u-boot.img -R

Note: 
On latest u-boot usb fails, need patch [4] to test dfu.

Tested on dra7xx SoCs family.
[1] is EVM console output with SPL-DFU/RAM enabled.
[2] is ubuntu host console output.

references:
[1] http://pastebin.ubuntu.com/20312940/
[2] http://pastebin.ubuntu.com/20313150/
[3] http://www.ti.com/lit/an/sprac33/sprac33.pdf
[4] https://patchwork.ozlabs.org/patch/651146/

v1 changes : 
	- support for DFU RAM device only .
	- removed support for other SPI flash devices
	- SPL+DFU loads and execute u-boot and leaverage
	  u-boot dfu functionality to flash binaries to
	  SPI, eMMC etc.
	- saperated the common dfu code used by SPL and
	  u-boot to common/dfu.c

Ravi Babu (5):
  spl: dfu: add dfu support in SPL
  common: dfu: saperate the dfu common functionality
  spl: dfu: adding dfu support functions for SPL-DFU
  dra7x: boot: add dfu bootmode support
  dra7x: configs: enable SPL-DFU support

 Kconfig                                      |   27 ++++++++
 arch/arm/cpu/armv7/omap-common/boot-common.c |    5 ++
 arch/arm/include/asm/arch-omap5/spl.h        |    2 +-
 cmd/dfu.c                                    |   61 +-----------------
 common/Makefile                              |    3 +
 common/command.c                             |    2 +-
 common/dfu.c                                 |   88 ++++++++++++++++++++++++++
 common/spl/Makefile                          |    1 +
 common/spl/spl.c                             |   10 ++-
 common/spl/spl_dfu.c                         |   57 +++++++++++++++++
 include/configs/dra7xx_evm.h                 |   19 +++++-
 include/configs/ti_omap5_common.h            |    2 -
 include/g_dnl.h                              |    1 +
 include/spl.h                                |    8 +++
 scripts/Makefile.spl                         |    4 ++
 15 files changed, 225 insertions(+), 65 deletions(-)
 create mode 100644 common/dfu.c
 create mode 100644 common/spl/spl_dfu.c

-- 
1.7.9.5

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

* [U-Boot] [RFC PATCH v2 1/5] spl: dfu: add dfu support in SPL
  2016-07-21 14:53 [U-Boot] [RFC PATCH v2 0/5] SPL: DFU Support in SPL Ravi Babu
@ 2016-07-21 14:53 ` Ravi Babu
  2016-07-22 13:41   ` Tom Rini
  2016-07-21 14:53 ` [U-Boot] [RFC PATCH v2 2/5] common: dfu: saperate the dfu common functionality Ravi Babu
                   ` (4 subsequent siblings)
  5 siblings, 1 reply; 27+ messages in thread
From: Ravi Babu @ 2016-07-21 14:53 UTC (permalink / raw)
  To: u-boot

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
does not have MMC/SD, ethernet boot mechanism
to boot the board and only has USB inteface.

This patch add DFU support in SPL with RAM
memory device support to load and execute u-boot.
And then leverage full functionality DFU in
u-boot 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 <ravibabu@ti.com>
---
 Kconfig              |   27 +++++++++++++++++++++++++++
 common/Makefile      |    1 +
 common/command.c     |    2 +-
 scripts/Makefile.spl |    4 ++++
 4 files changed, 33 insertions(+), 1 deletion(-)

diff --git a/Kconfig b/Kconfig
index ef12f9f..ed3e295 100644
--- a/Kconfig
+++ b/Kconfig
@@ -336,6 +336,33 @@ config SPL_FIT_IMAGE_POST_PROCESS
 	  injected into the FIT creation (i.e. the blobs would have been pre-
 	  processed before being added to the FIT image).
 
+config SPL_DFU_SUPPORT
+	bool "Enable SPL with DFU to load binaries to memory device"
+	depends on USB && TARGET_DRA7XX_EVM
+	help
+	  Currently the SPL does not have capability to load the
+	  binaries or boot images to boot devices like ram,eMMC,SPI,etc.
+	  This feature enables the DFU (Device Firmware Upgarde) in SPL with
+	  RAM memory device support. The ROM code will load and execute
+	  the SPL built with dfu. The user can load binaries (u-boot/kernel) to
+	  selected 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 SPL_DFU_SUPPORT
+
+config SPL_DFU_RAM
+	bool "RAM device"
+	depends on SPL_DFU_SUPPORT
+	help
+	 select RAM/DDR memory device for loading binary images
+	 (u-boot/kernel) to the selected device partition using
+	 DFU and execute the u-boot/kernel from RAM.
+
+endchoice
+
 config SYS_CLK_FREQ
 	depends on ARC || ARCH_SUNXI
 	int "CPU clock frequency"
diff --git a/common/Makefile b/common/Makefile
index e08cd3e..7a7a1b4 100644
--- a/common/Makefile
+++ b/common/Makefile
@@ -87,6 +87,7 @@ obj-$(CONFIG_USB_KEYBOARD) += usb_kbd.o
 endif # !CONFIG_SPL_BUILD
 
 ifdef CONFIG_SPL_BUILD
+obj-$(CONFIG_SPL_DFU_SUPPORT) += cli_hush.o
 obj-$(CONFIG_SPL_HASH_SUPPORT) += hash.o
 obj-$(CONFIG_ENV_IS_IN_FLASH) += env_flash.o
 obj-$(CONFIG_SPL_YMODEM_SUPPORT) += xyzModem.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 3ba9742..3b70c4d 100644
--- a/scripts/Makefile.spl
+++ b/scripts/Makefile.spl
@@ -57,6 +57,10 @@ libs-y += common/init/
 libs-$(CONFIG_SPL_LIBCOMMON_SUPPORT) += common/ cmd/
 libs-$(CONFIG_SPL_LIBDISK_SUPPORT) += disk/
 libs-y += drivers/
+libs-$(CONFIG_SPL_DFU_SUPPORT) += drivers/dfu/
+libs-$(CONFIG_SPL_DFU_SUPPORT) += drivers/usb/gadget/
+libs-$(CONFIG_SPL_DFU_SUPPORT) += drivers/usb/gadget/udc/
+libs-$(CONFIG_SPL_DFU_SUPPORT) += drivers/usb/dwc3/
 libs-y += dts/
 libs-y += fs/
 libs-$(CONFIG_SPL_LIBGENERIC_SUPPORT) += lib/
-- 
1.7.9.5

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

* [U-Boot] [RFC PATCH v2 2/5] common: dfu: saperate the dfu common functionality
  2016-07-21 14:53 [U-Boot] [RFC PATCH v2 0/5] SPL: DFU Support in SPL Ravi Babu
  2016-07-21 14:53 ` [U-Boot] [RFC PATCH v2 1/5] spl: dfu: add dfu support " Ravi Babu
@ 2016-07-21 14:53 ` Ravi Babu
  2016-07-22 13:41   ` Tom Rini
  2016-07-21 14:53 ` [U-Boot] [RFC PATCH v2 3/5] spl: dfu: adding dfu support functions for SPL-DFU Ravi Babu
                   ` (3 subsequent siblings)
  5 siblings, 1 reply; 27+ messages in thread
From: Ravi Babu @ 2016-07-21 14:53 UTC (permalink / raw)
  To: u-boot

The cmd_dfu functionality is been used by both SPL and
u-boot, saperating the core dfu functionality moving
it to common/dfu.c.

Signed-off-by: Ravi Babu <ravibabu@ti.com>
---
 cmd/dfu.c       |   61 ++------------------------------------
 common/Makefile |    2 ++
 common/dfu.c    |   88 +++++++++++++++++++++++++++++++++++++++++++++++++++++++
 include/g_dnl.h |    1 +
 4 files changed, 93 insertions(+), 59 deletions(-)
 create mode 100644 common/dfu.c

diff --git a/cmd/dfu.c b/cmd/dfu.c
index d8aae26..04291f6 100644
--- a/cmd/dfu.c
+++ b/cmd/dfu.c
@@ -21,7 +21,6 @@
 
 static int do_dfu(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 {
-	bool dfu_reset = false;
 
 	if (argc < 4)
 		return CMD_RET_USAGE;
@@ -30,7 +29,7 @@ static int do_dfu(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 	char *interface = argv[2];
 	char *devstring = argv[3];
 
-	int ret, i = 0;
+	int ret;
 #ifdef CONFIG_DFU_TFTP
 	unsigned long addr = 0;
 	if (!strcmp(argv[1], "tftp")) {
@@ -52,67 +51,11 @@ static int do_dfu(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 	}
 
 	int controller_index = simple_strtoul(usb_controller, NULL, 0);
-	board_usb_init(controller_index, USB_INIT_DEVICE);
-	g_dnl_clear_detach();
-	g_dnl_register("usb_dnl_dfu");
-	while (1) {
-		if (g_dnl_detach()) {
-			/*
-			 * Check if USB bus reset is performed after detach,
-			 * which indicates that -R switch has been passed to
-			 * dfu-util. In this case reboot the device
-			 */
-			if (dfu_usb_get_reset()) {
-				dfu_reset = true;
-				goto exit;
-			}
 
-			/*
-			 * This extra number of usb_gadget_handle_interrupts()
-			 * calls is necessary to assure correct transmission
-			 * completion with dfu-util
-			 */
-			if (++i == 10000)
-				goto exit;
-		}
+	run_usb_dnl_gadget(controller_index, "usb_dnl_dfu");
 
-		if (ctrlc())
-			goto exit;
-
-		if (dfu_get_defer_flush()) {
-			/*
-			 * Call to usb_gadget_handle_interrupts() is necessary
-			 * to act on ZLP OUT transaction from HOST PC after
-			 * transmitting the whole file.
-			 *
-			 * If this ZLP OUT packet is NAK'ed, the HOST libusb
-			 * function fails after timeout (by default it is set to
-			 * 5 seconds). In such situation the dfu-util program
-			 * exits with error message.
-			 */
-			usb_gadget_handle_interrupts(controller_index);
-			ret = dfu_flush(dfu_get_defer_flush(), NULL, 0, 0);
-			dfu_set_defer_flush(NULL);
-			if (ret) {
-				error("Deferred dfu_flush() failed!");
-				goto exit;
-			}
-		}
-
-		WATCHDOG_RESET();
-		usb_gadget_handle_interrupts(controller_index);
-	}
-exit:
-	g_dnl_unregister();
-	board_usb_cleanup(controller_index, USB_INIT_DEVICE);
 done:
 	dfu_free_entities();
-
-	if (dfu_reset)
-		run_command("reset", 0);
-
-	g_dnl_clear_detach();
-
 	return ret;
 }
 
diff --git a/common/Makefile b/common/Makefile
index 7a7a1b4..83bd3f4 100644
--- a/common/Makefile
+++ b/common/Makefile
@@ -87,6 +87,7 @@ obj-$(CONFIG_USB_KEYBOARD) += usb_kbd.o
 endif # !CONFIG_SPL_BUILD
 
 ifdef CONFIG_SPL_BUILD
+obj-$(CONFIG_SPL_DFU_SUPPORT) += dfu.o
 obj-$(CONFIG_SPL_DFU_SUPPORT) += cli_hush.o
 obj-$(CONFIG_SPL_HASH_SUPPORT) += hash.o
 obj-$(CONFIG_ENV_IS_IN_FLASH) += env_flash.o
@@ -160,6 +161,7 @@ obj-$(CONFIG_CMDLINE) += cli_simple.o
 
 obj-y += cli.o
 obj-$(CONFIG_CMDLINE) += cli_readline.o
+obj-$(CONFIG_CMD_DFU) += dfu.o
 obj-y += command.o
 obj-y += s_record.o
 obj-y += xyzModem.o
diff --git a/common/dfu.c b/common/dfu.c
new file mode 100644
index 0000000..c6a7a58
--- /dev/null
+++ b/common/dfu.c
@@ -0,0 +1,88 @@
+/*
+ * dfu.c -- dfu command
+ *
+ * Copyright (C) 2015
+ * Lukasz Majewski <l.majewski@majess.pl>
+ *
+ * Copyright (C) 2012 Samsung Electronics
+ * authors: Andrzej Pietrasiewicz <andrzej.p@samsung.com>
+ *	    Lukasz Majewski <l.majewski@samsung.com>
+ *
+ * SPDX-License-Identifier:	GPL-2.0+
+ */
+
+#include <common.h>
+#include <watchdog.h>
+#include <dfu.h>
+#include <console.h>
+#include <g_dnl.h>
+#include <usb.h>
+#include <net.h>
+
+int run_usb_dnl_gadget(int usbctrl_index, char *usb_dnl_gadget)
+{
+	bool dfu_reset = false;
+	int ret, i = 0;
+
+	board_usb_init(usbctrl_index, USB_INIT_DEVICE);
+	g_dnl_clear_detach();
+	g_dnl_register(usb_dnl_gadget);
+	while (1) {
+		if (g_dnl_detach()) {
+			/*
+			 * Check if USB bus reset is performed after detach,
+			 * which indicates that -R switch has been passed to
+			 * dfu-util. In this case reboot the device
+			 */
+			if (dfu_usb_get_reset()) {
+				dfu_reset = true;
+				goto exit;
+			}
+
+			/*
+			 * This extra number of usb_gadget_handle_interrupts()
+			 * calls is necessary to assure correct transmission
+			 * completion with dfu-util
+			 */
+			if (++i == 10000)
+				goto exit;
+		}
+
+		if (ctrlc())
+			goto exit;
+
+		if (dfu_get_defer_flush()) {
+			/*
+			 * Call to usb_gadget_handle_interrupts() is necessary
+			 * to act on ZLP OUT transaction from HOST PC after
+			 * transmitting the whole file.
+			 *
+			 * If this ZLP OUT packet is NAK'ed, the HOST libusb
+			 * function fails after timeout (by default it is set to
+			 * 5 seconds). In such situation the dfu-util program
+			 * exits with error message.
+			 */
+			usb_gadget_handle_interrupts(usbctrl_index);
+			ret = dfu_flush(dfu_get_defer_flush(), NULL, 0, 0);
+			dfu_set_defer_flush(NULL);
+			if (ret) {
+				error("Deferred dfu_flush() failed!");
+				goto exit;
+			}
+		}
+
+		WATCHDOG_RESET();
+		usb_gadget_handle_interrupts(usbctrl_index);
+	}
+exit:
+	g_dnl_unregister();
+	board_usb_cleanup(usbctrl_index, USB_INIT_DEVICE);
+
+	if (dfu_reset)
+		run_command("reset", 0);
+
+	g_dnl_clear_detach();
+
+	return ret;
+}
+
diff --git a/include/g_dnl.h b/include/g_dnl.h
index ba49f1f..bd29a9f 100644
--- a/include/g_dnl.h
+++ b/include/g_dnl.h
@@ -43,5 +43,6 @@ void g_dnl_set_serialnumber(char *);
 bool g_dnl_detach(void);
 void g_dnl_trigger_detach(void);
 void g_dnl_clear_detach(void);
+int run_usb_dnl_gadget(int usbctrl_index, char *usb_dnl_gadget);
 
 #endif /* __G_DOWNLOAD_H_ */
-- 
1.7.9.5

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

* [U-Boot] [RFC PATCH v2 3/5] spl: dfu: adding dfu support functions for SPL-DFU
  2016-07-21 14:53 [U-Boot] [RFC PATCH v2 0/5] SPL: DFU Support in SPL Ravi Babu
  2016-07-21 14:53 ` [U-Boot] [RFC PATCH v2 1/5] spl: dfu: add dfu support " Ravi Babu
  2016-07-21 14:53 ` [U-Boot] [RFC PATCH v2 2/5] common: dfu: saperate the dfu common functionality Ravi Babu
@ 2016-07-21 14:53 ` Ravi Babu
  2016-07-22 13:41   ` Tom Rini
  2016-07-21 14:53 ` [U-Boot] [RFC PATCH v2 4/5] dra7x: boot: add dfu bootmode support Ravi Babu
                   ` (2 subsequent siblings)
  5 siblings, 1 reply; 27+ messages in thread
From: Ravi Babu @ 2016-07-21 14:53 UTC (permalink / raw)
  To: u-boot

Adding support functions to run dfu spl commands.

Signed-off-by: Ravi Babu <ravibabu@ti.com>
---
 common/spl/Makefile  |    1 +
 common/spl/spl_dfu.c |   57 ++++++++++++++++++++++++++++++++++++++++++++++++++
 include/spl.h        |    8 +++++++
 3 files changed, 66 insertions(+)
 create mode 100644 common/spl/spl_dfu.c

diff --git a/common/spl/Makefile b/common/spl/Makefile
index 2e0f695..0850da0 100644
--- a/common/spl/Makefile
+++ b/common/spl/Makefile
@@ -21,4 +21,5 @@ obj-$(CONFIG_SPL_USB_SUPPORT) += spl_usb.o
 obj-$(CONFIG_SPL_FAT_SUPPORT) += spl_fat.o
 obj-$(CONFIG_SPL_EXT_SUPPORT) += spl_ext.o
 obj-$(CONFIG_SPL_SATA_SUPPORT) += spl_sata.o
+obj-$(CONFIG_SPL_DFU_SUPPORT) += spl_dfu.o
 endif
diff --git a/common/spl/spl_dfu.c b/common/spl/spl_dfu.c
new file mode 100644
index 0000000..e8d0ba1
--- /dev/null
+++ b/common/spl/spl_dfu.c
@@ -0,0 +1,57 @@
+/*
+ * (C) Copyright 2016
+ * Texas Instruments, <www.ti.com>
+ *
+ * Ravi B <ravibabu@ti.com>
+ *
+ * SPDX-License-Identifier:	GPL-2.0+
+ */
+#include <common.h>
+#include <spl.h>
+#include <linux/compiler.h>
+#include <errno.h>
+#include <watchdog.h>
+#include <console.h>
+#include <g_dnl.h>
+#include <usb.h>
+#include <dfu.h>
+#include <environment.h>
+
+static int run_dfu(int usb_index, char *interface, char *devstring)
+{
+	int ret;
+
+	ret = dfu_init_env_entities(interface, devstring);
+	if (ret) {
+		dfu_free_entities();
+		goto exit;
+	}
+
+	run_usb_dnl_gadget(usb_index, "usb_dnl_dfu");
+exit:
+	dfu_free_entities();
+	return ret;
+}
+
+int spl_dfu_cmd(int usbctrl, char *dfu_alt_info, char *interface, char *devstr)
+{
+	char *str_env;
+	int ret;
+
+	/* set default environment */
+	set_default_env(0);
+	str_env = getenv(dfu_alt_info);
+	if (!str_env) {
+		error("\"dfu_alt_info\" env variable not defined!\n");
+		return -EINVAL;
+	}
+
+	ret = setenv("dfu_alt_info", str_env);
+	if (ret) {
+		error("unable to set env variable \"dfu_alt_info\"!\n");
+		return -EINVAL;
+	}
+
+	/* invoke dfu command */
+	return run_dfu(usbctrl, interface, devstr);
+}
diff --git a/include/spl.h b/include/spl.h
index 2360466..1524e26 100644
--- a/include/spl.h
+++ b/include/spl.h
@@ -140,4 +140,12 @@ void spl_board_init(void);
  */
 bool spl_was_boot_source(void);
 
+/**
+ * spl_dfu_cmd- run dfu command with chosen mmc device interface
+ * @param usb_index - usb controller number
+ * @param mmc_dev -  mmc device nubmer
+ *
+ * @return 0 on success, otherwise error code
+ */
+int spl_dfu_cmd(int usbctrl, char *dfu_alt_info, char *interface, char *devstr);
 #endif
-- 
1.7.9.5

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

* [U-Boot] [RFC PATCH v2 4/5] dra7x: boot: add dfu bootmode support
  2016-07-21 14:53 [U-Boot] [RFC PATCH v2 0/5] SPL: DFU Support in SPL Ravi Babu
                   ` (2 preceding siblings ...)
  2016-07-21 14:53 ` [U-Boot] [RFC PATCH v2 3/5] spl: dfu: adding dfu support functions for SPL-DFU Ravi Babu
@ 2016-07-21 14:53 ` Ravi Babu
  2016-07-22 13:41   ` Tom Rini
  2016-07-21 14:53 ` [U-Boot] [RFC PATCH v2 5/5] dra7x: configs: enable SPL-DFU support Ravi Babu
  2016-07-22 13:42 ` [U-Boot] [RFC PATCH v2 0/5] SPL: DFU Support in SPL Tom Rini
  5 siblings, 1 reply; 27+ messages in thread
From: Ravi Babu @ 2016-07-21 14:53 UTC (permalink / raw)
  To: u-boot

This patch enables the DFU boot mode support
for dra7x platform.

Signed-off-by: Ravi Babu <ravibabu@ti.com>
---
 arch/arm/cpu/armv7/omap-common/boot-common.c |    5 +++++
 arch/arm/include/asm/arch-omap5/spl.h        |    2 +-
 common/spl/spl.c                             |   10 +++++++++-
 3 files changed, 15 insertions(+), 2 deletions(-)

diff --git a/arch/arm/cpu/armv7/omap-common/boot-common.c b/arch/arm/cpu/armv7/omap-common/boot-common.c
index 60c367a..385310b 100644
--- a/arch/arm/cpu/armv7/omap-common/boot-common.c
+++ b/arch/arm/cpu/armv7/omap-common/boot-common.c
@@ -91,6 +91,11 @@ void save_omap_boot_params(void)
 			sys_boot_device = 1;
 			break;
 #endif
+#if defined(BOOT_DEVICE_DFU) && !defined(CONFIG_SPL_DFU_SUPPORT)
+		case BOOT_DEVICE_DFU:
+			sys_boot_device = 1;
+			break;
+#endif
 	}
 
 	if (sys_boot_device) {
diff --git a/arch/arm/include/asm/arch-omap5/spl.h b/arch/arm/include/asm/arch-omap5/spl.h
index 468ff5a..3582880 100644
--- a/arch/arm/include/asm/arch-omap5/spl.h
+++ b/arch/arm/include/asm/arch-omap5/spl.h
@@ -20,7 +20,7 @@
 #define BOOT_DEVICE_QSPI_1	0x0A
 #define BOOT_DEVICE_QSPI_4	0x0B
 #define BOOT_DEVICE_UART	0x43
-#define BOOT_DEVICE_USB		0x45
+#define BOOT_DEVICE_DFU		0x45
 
 #define MMC_BOOT_DEVICES_START	BOOT_DEVICE_MMC1
 #define MMC_BOOT_DEVICES_END	BOOT_DEVICE_MMC2_2
diff --git a/common/spl/spl.c b/common/spl/spl.c
index 14320fe..f82e848 100644
--- a/common/spl/spl.c
+++ b/common/spl/spl.c
@@ -148,7 +148,7 @@ __weak void __noreturn jump_to_image_no_args(struct spl_image_info *spl_image)
 # define CONFIG_SPL_LOAD_FIT_ADDRESS	0
 #endif
 
-#ifdef CONFIG_SPL_RAM_DEVICE
+#if defined(CONFIG_SPL_RAM_DEVICE) || defined(CONFIG_SPL_DFU_SUPPORT)
 static ulong spl_ram_load_read(struct spl_load_info *load, ulong sector,
 			       ulong count, void *buf)
 {
@@ -286,6 +286,9 @@ struct boot_device_name boot_name_table[] = {
 #ifdef CONFIG_SPL_USB_SUPPORT
 	{ BOOT_DEVICE_USB, "USB" },
 #endif
+#ifdef CONFIG_SPL_DFU_SUPPORT
+	{ BOOT_DEVICE_DFU, "USB DFU" },
+#endif
 #ifdef CONFIG_SPL_SATA_SUPPORT
 	{ BOOT_DEVICE_SATA, "SATA" },
 #endif
@@ -366,6 +369,11 @@ static int spl_load_image(u32 boot_device)
 	case BOOT_DEVICE_USB:
 		return spl_usb_load_image();
 #endif
+#ifdef CONFIG_SPL_DFU_SUPPORT
+	case BOOT_DEVICE_DFU:
+		spl_dfu_cmd(0, "dfu_alt_info_ram", "ram", "0");
+		return spl_ram_load_image();
+#endif
 #ifdef CONFIG_SPL_SATA_SUPPORT
 	case BOOT_DEVICE_SATA:
 		return spl_sata_load_image();
-- 
1.7.9.5

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

* [U-Boot] [RFC PATCH v2 5/5] dra7x: configs: enable SPL-DFU support
  2016-07-21 14:53 [U-Boot] [RFC PATCH v2 0/5] SPL: DFU Support in SPL Ravi Babu
                   ` (3 preceding siblings ...)
  2016-07-21 14:53 ` [U-Boot] [RFC PATCH v2 4/5] dra7x: boot: add dfu bootmode support Ravi Babu
@ 2016-07-21 14:53 ` Ravi Babu
  2016-07-22 13:42   ` Tom Rini
  2016-07-22 13:42 ` [U-Boot] [RFC PATCH v2 0/5] SPL: DFU Support in SPL Tom Rini
  5 siblings, 1 reply; 27+ messages in thread
From: Ravi Babu @ 2016-07-21 14:53 UTC (permalink / raw)
  To: u-boot

This patch enables the SPL-DFU support for
dra7x platform.

Signed-off-by: Ravi Babu <ravibabu@ti.com>
---
 include/configs/dra7xx_evm.h      |   19 ++++++++++++++++++-
 include/configs/ti_omap5_common.h |    2 --
 2 files changed, 18 insertions(+), 3 deletions(-)

diff --git a/include/configs/dra7xx_evm.h b/include/configs/dra7xx_evm.h
index 0d51aeb..a11a923 100644
--- a/include/configs/dra7xx_evm.h
+++ b/include/configs/dra7xx_evm.h
@@ -133,6 +133,22 @@
 #define CONFIG_FASTBOOT_FLASH_MMC_DEV   1
 #endif
 
+#ifdef CONFIG_SPL_BUILD
+#ifdef CONFIG_SPL_DFU_SUPPORT
+#define CONFIG_SPL_LOAD_FIT_ADDRESS 0x80200000
+#define CONFIG_SPL_ENV_SUPPORT
+#define CONFIG_SPL_HASH_SUPPORT
+#define DFU_ALT_INFO_RAM \
+	"dfu_alt_info_ram=" \
+	"kernel ram 0x80200000 0x4000000;" \
+	"fdt ram 0x80f80000 0x80000;" \
+	"ramdisk ram 0x81000000 0x4000000\0"
+#define DFUARGS \
+	"dfu_bufsiz=0x10000\0" \
+	DFU_ALT_INFO_RAM
+#endif
+#endif
+
 #include <configs/ti_omap5_common.h>
 
 /* Enhance our eMMC support / experience. */
@@ -222,9 +238,10 @@
 #define CONFIG_USB_FUNCTION_DFU
 #define CONFIG_DFU_RAM
 
+#ifndef CONFIG_SPL_BUILD
 #define CONFIG_DFU_MMC
-#define CONFIG_DFU_RAM
 #define CONFIG_DFU_SF
+#endif
 
 /* SATA */
 #define CONFIG_BOARD_LATE_INIT
diff --git a/include/configs/ti_omap5_common.h b/include/configs/ti_omap5_common.h
index 3589cdc..2079b9f 100644
--- a/include/configs/ti_omap5_common.h
+++ b/include/configs/ti_omap5_common.h
@@ -66,7 +66,6 @@
 #define DFUARGS
 #endif
 
-#ifndef CONFIG_SPL_BUILD
 #define CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG
 #define CONFIG_EXTRA_ENV_SETTINGS \
 	DEFAULT_LINUX_BOOT_ENV \
@@ -130,7 +129,6 @@
 	"setenv mmcroot /dev/mmcblk0p2 rw; " \
 	"run mmcboot;" \
 	""
-#endif
 
 /*
  * SPL related defines.  The Public RAM memory map the ROM defines the
-- 
1.7.9.5

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

* [U-Boot] [RFC PATCH v2 1/5] spl: dfu: add dfu support in SPL
  2016-07-21 14:53 ` [U-Boot] [RFC PATCH v2 1/5] spl: dfu: add dfu support " Ravi Babu
@ 2016-07-22 13:41   ` Tom Rini
  2016-07-27 14:04     ` B, Ravi
  0 siblings, 1 reply; 27+ messages in thread
From: Tom Rini @ 2016-07-22 13:41 UTC (permalink / raw)
  To: u-boot

On Thu, Jul 21, 2016 at 08:23:13PM +0530, Ravi Babu wrote:

> 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
> does not have MMC/SD, ethernet boot mechanism
> to boot the board and only has USB inteface.
> 
> This patch add DFU support in SPL with RAM
> memory device support to load and execute u-boot.
> And then leverage full functionality DFU in
> u-boot 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 <ravibabu@ti.com>
> ---
>  Kconfig              |   27 +++++++++++++++++++++++++++
>  common/Makefile      |    1 +
>  common/command.c     |    2 +-
>  scripts/Makefile.spl |    4 ++++
>  4 files changed, 33 insertions(+), 1 deletion(-)
> 
> diff --git a/Kconfig b/Kconfig
> index ef12f9f..ed3e295 100644
> --- a/Kconfig
> +++ b/Kconfig
> @@ -336,6 +336,33 @@ config SPL_FIT_IMAGE_POST_PROCESS
>  	  injected into the FIT creation (i.e. the blobs would have been pre-
>  	  processed before being added to the FIT image).
>  
> +config SPL_DFU_SUPPORT
> +	bool "Enable SPL with DFU to load binaries to memory device"
> +	depends on USB && TARGET_DRA7XX_EVM

This seems needlessly restrictive.

> 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) {

Why do we need this?

-- 
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: Digital signature
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20160722/e6629f94/attachment.sig>

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

* [U-Boot] [RFC PATCH v2 2/5] common: dfu: saperate the dfu common functionality
  2016-07-21 14:53 ` [U-Boot] [RFC PATCH v2 2/5] common: dfu: saperate the dfu common functionality Ravi Babu
@ 2016-07-22 13:41   ` Tom Rini
  0 siblings, 0 replies; 27+ messages in thread
From: Tom Rini @ 2016-07-22 13:41 UTC (permalink / raw)
  To: u-boot

On Thu, Jul 21, 2016 at 08:23:14PM +0530, Ravi Babu wrote:

> The cmd_dfu functionality is been used by both SPL and
> u-boot, saperating the core dfu functionality moving
> it to common/dfu.c.
> 
> Signed-off-by: Ravi Babu <ravibabu@ti.com>

Reviewed-by: Tom Rini <trini@konsulko.com>

-- 
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: Digital signature
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20160722/1088db67/attachment.sig>

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

* [U-Boot] [RFC PATCH v2 3/5] spl: dfu: adding dfu support functions for SPL-DFU
  2016-07-21 14:53 ` [U-Boot] [RFC PATCH v2 3/5] spl: dfu: adding dfu support functions for SPL-DFU Ravi Babu
@ 2016-07-22 13:41   ` Tom Rini
  0 siblings, 0 replies; 27+ messages in thread
From: Tom Rini @ 2016-07-22 13:41 UTC (permalink / raw)
  To: u-boot

On Thu, Jul 21, 2016 at 08:23:15PM +0530, Ravi Babu wrote:

> Adding support functions to run dfu spl commands.
> 
> Signed-off-by: Ravi Babu <ravibabu@ti.com>

Reviewed-by: Tom Rini <trini@konsulko.com>

-- 
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: Digital signature
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20160722/41040ddb/attachment.sig>

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

* [U-Boot] [RFC PATCH v2 4/5] dra7x: boot: add dfu bootmode support
  2016-07-21 14:53 ` [U-Boot] [RFC PATCH v2 4/5] dra7x: boot: add dfu bootmode support Ravi Babu
@ 2016-07-22 13:41   ` Tom Rini
  2016-07-25 14:17     ` B, Ravi
  0 siblings, 1 reply; 27+ messages in thread
From: Tom Rini @ 2016-07-22 13:41 UTC (permalink / raw)
  To: u-boot

On Thu, Jul 21, 2016 at 08:23:16PM +0530, Ravi Babu wrote:

> This patch enables the DFU boot mode support
> for dra7x platform.
> 
> Signed-off-by: Ravi Babu <ravibabu@ti.com>
> ---
>  arch/arm/cpu/armv7/omap-common/boot-common.c |    5 +++++
>  arch/arm/include/asm/arch-omap5/spl.h        |    2 +-
>  common/spl/spl.c                             |   10 +++++++++-
>  3 files changed, 15 insertions(+), 2 deletions(-)
> 
> diff --git a/arch/arm/cpu/armv7/omap-common/boot-common.c b/arch/arm/cpu/armv7/omap-common/boot-common.c
> index 60c367a..385310b 100644
> --- a/arch/arm/cpu/armv7/omap-common/boot-common.c
> +++ b/arch/arm/cpu/armv7/omap-common/boot-common.c
> @@ -91,6 +91,11 @@ void save_omap_boot_params(void)
>  			sys_boot_device = 1;
>  			break;
>  #endif
> +#if defined(BOOT_DEVICE_DFU) && !defined(CONFIG_SPL_DFU_SUPPORT)
> +		case BOOT_DEVICE_DFU:
> +			sys_boot_device = 1;
> +			break;
> +#endif
>  	}
>  
>  	if (sys_boot_device) {
> diff --git a/arch/arm/include/asm/arch-omap5/spl.h b/arch/arm/include/asm/arch-omap5/spl.h
> index 468ff5a..3582880 100644
> --- a/arch/arm/include/asm/arch-omap5/spl.h
> +++ b/arch/arm/include/asm/arch-omap5/spl.h
> @@ -20,7 +20,7 @@
>  #define BOOT_DEVICE_QSPI_1	0x0A
>  #define BOOT_DEVICE_QSPI_4	0x0B
>  #define BOOT_DEVICE_UART	0x43
> -#define BOOT_DEVICE_USB		0x45
> +#define BOOT_DEVICE_DFU		0x45

So you're breaking regular USB gadget support with this change, on these
platforms, yes?

-- 
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: Digital signature
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20160722/9c25869d/attachment.sig>

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

* [U-Boot] [RFC PATCH v2 5/5] dra7x: configs: enable SPL-DFU support
  2016-07-21 14:53 ` [U-Boot] [RFC PATCH v2 5/5] dra7x: configs: enable SPL-DFU support Ravi Babu
@ 2016-07-22 13:42   ` Tom Rini
  0 siblings, 0 replies; 27+ messages in thread
From: Tom Rini @ 2016-07-22 13:42 UTC (permalink / raw)
  To: u-boot

On Thu, Jul 21, 2016 at 08:23:17PM +0530, Ravi Babu wrote:

> This patch enables the SPL-DFU support for
> dra7x platform.
> 
> Signed-off-by: Ravi Babu <ravibabu@ti.com>

Reviewed-by: Tom Rini <trini@konsulko.com>

-- 
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: Digital signature
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20160722/32981d25/attachment.sig>

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

* [U-Boot] [RFC PATCH v2 0/5] SPL: DFU Support in SPL
  2016-07-21 14:53 [U-Boot] [RFC PATCH v2 0/5] SPL: DFU Support in SPL Ravi Babu
                   ` (4 preceding siblings ...)
  2016-07-21 14:53 ` [U-Boot] [RFC PATCH v2 5/5] dra7x: configs: enable SPL-DFU support Ravi Babu
@ 2016-07-22 13:42 ` Tom Rini
  2016-07-25 14:40   ` B, Ravi
  5 siblings, 1 reply; 27+ messages in thread
From: Tom Rini @ 2016-07-22 13:42 UTC (permalink / raw)
  To: u-boot

On Thu, Jul 21, 2016 at 08:23:12PM +0530, Ravi Babu wrote:

> 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
> does not have MMC/SD, ethernet boot mechanism
> to boot the board and only has USB inteface.

How well did you test DFU on other platforms after these changes?
Thanks!

-- 
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: Digital signature
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20160722/5d030e71/attachment.sig>

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

* [U-Boot] [RFC PATCH v2 3/5] spl: dfu: adding dfu support functions for SPL-DFU
       [not found] ` <1469193550-19125-4-git-send-email-ravibabu@ti.com>
@ 2016-07-25 10:05   ` Lukasz Majewski
  2016-07-25 13:08     ` B, Ravi
  0 siblings, 1 reply; 27+ messages in thread
From: Lukasz Majewski @ 2016-07-25 10:05 UTC (permalink / raw)
  To: u-boot

Hi Ravi,

> Adding support functions to run dfu spl commands.
> 
> Signed-off-by: Ravi Babu <ravibabu@ti.com>
> ---
>  common/spl/Makefile  |    1 +
>  common/spl/spl_dfu.c |   57
> ++++++++++++++++++++++++++++++++++++++++++++++++++
> include/spl.h        |    8 +++++++ 3 files changed, 66 insertions(+)
>  create mode 100644 common/spl/spl_dfu.c
> 
> diff --git a/common/spl/Makefile b/common/spl/Makefile
> index 2e0f695..0850da0 100644
> --- a/common/spl/Makefile
> +++ b/common/spl/Makefile
> @@ -21,4 +21,5 @@ obj-$(CONFIG_SPL_USB_SUPPORT) += spl_usb.o
>  obj-$(CONFIG_SPL_FAT_SUPPORT) += spl_fat.o
>  obj-$(CONFIG_SPL_EXT_SUPPORT) += spl_ext.o
>  obj-$(CONFIG_SPL_SATA_SUPPORT) += spl_sata.o
> +obj-$(CONFIG_SPL_DFU_SUPPORT) += spl_dfu.o
>  endif
> diff --git a/common/spl/spl_dfu.c b/common/spl/spl_dfu.c
> new file mode 100644
> index 0000000..e8d0ba1
> --- /dev/null
> +++ b/common/spl/spl_dfu.c
> @@ -0,0 +1,57 @@
> +/*
> + * (C) Copyright 2016
> + * Texas Instruments, <www.ti.com>
> + *
> + * Ravi B <ravibabu@ti.com>
> + *
> + * SPDX-License-Identifier:	GPL-2.0+
> + */
> +#include <common.h>
> +#include <spl.h>
> +#include <linux/compiler.h>
> +#include <errno.h>
> +#include <watchdog.h>
> +#include <console.h>
> +#include <g_dnl.h>
> +#include <usb.h>
> +#include <dfu.h>
> +#include <environment.h>
> +
> +static int run_dfu(int usb_index, char *interface, char *devstring)
> +{
> +	int ret;
> +
> +	ret = dfu_init_env_entities(interface, devstring);
> +	if (ret) {
> +		dfu_free_entities();
> +		goto exit;
> +	}
> +
> +	run_usb_dnl_gadget(usb_index, "usb_dnl_dfu");
> +exit:
> +	dfu_free_entities();
> +	return ret;
> +}
> +
> +int spl_dfu_cmd(int usbctrl, char *dfu_alt_info, char *interface,
				     ^^^^^^^^^^^^^^ this is a bit
				     misleading.
				     I would rename it to "alt_info_str"

> char *devstr) +{
> +	char *str_env;
> +	int ret;
> +
> +	/* set default environment */
> +	set_default_env(0);

set_default_env() accepts const char *s as the argument. Please replace
0 -> NULL

> +	str_env = getenv(dfu_alt_info);
> +	if (!str_env) {
> +		error("\"dfu_alt_info\" env variable not
> defined!\n");
> +		return -EINVAL;
> +	}
> +
> +	ret = setenv("dfu_alt_info", str_env);
> +	if (ret) {
> +		error("unable to set env variable
> \"dfu_alt_info\"!\n");
> +		return -EINVAL;
> +	}

I'm a bit confused with this env flow.

Is it required on your platform to:

1. set_default_env(NULL) - which sets default envs (one which are
mostly defined at ./include/<board_config> file) in RAM

2. call getenv with "dfu_alt_info_ram", which reads this value from RAM

3. call setenv() to store already in ram available env variable to some
medium?

If you want to store default envs in the medium (e.g. eMMC), I think
that it would be easier to call "saveenv".

Otherwise, I would stay with default envs, since we only use this
u-boot for flashing other binaries.

> +
> +	/* invoke dfu command */
> +	return run_dfu(usbctrl, interface, devstr);
> +}
> diff --git a/include/spl.h b/include/spl.h
> index 2360466..1524e26 100644
> --- a/include/spl.h
> +++ b/include/spl.h
> @@ -140,4 +140,12 @@ void spl_board_init(void);
>   */
>  bool spl_was_boot_source(void);
>  
> +/**
> + * spl_dfu_cmd- run dfu command with chosen mmc device interface
> + * @param usb_index - usb controller number
> + * @param mmc_dev -  mmc device nubmer
> + *
> + * @return 0 on success, otherwise error code
> + */
> +int spl_dfu_cmd(int usbctrl, char *dfu_alt_info, char *interface,
> char *devstr); #endif



-- 
Best regards,

Lukasz Majewski

Samsung R&D Institute Poland (SRPOL) | Linux Platform Group

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

* [U-Boot] [RFC PATCH v2 3/5] spl: dfu: adding dfu support functions for SPL-DFU
  2016-07-25 10:05   ` [U-Boot] [RFC PATCH v2 3/5] spl: dfu: adding dfu support functions for SPL-DFU Lukasz Majewski
@ 2016-07-25 13:08     ` B, Ravi
  2016-07-25 14:16       ` Lukasz Majewski
  0 siblings, 1 reply; 27+ messages in thread
From: B, Ravi @ 2016-07-25 13:08 UTC (permalink / raw)
  To: u-boot

Hi Lukasz

>> Adding support functions to run dfu spl commands.
>> 
>> Signed-off-by: Ravi Babu <ravibabu@ti.com>
>> ---
>>  common/spl/Makefile  |    1 +
>>  common/spl/spl_dfu.c |   57
>> ++++++++++++++++++++++++++++++++++++++++++++++++++
>> include/spl.h        |    8 +++++++ 3 files changed, 66 insertions(+)
>>  create mode 100644 common/spl/spl_dfu.c
>> 
>> diff --git a/common/spl/Makefile b/common/spl/Makefile index 
>> 2e0f695..0850da0 100644
>> --- a/common/spl/Makefile
>> +++ b/common/spl/Makefile
>> @@ -21,4 +21,5 @@ obj-$(CONFIG_SPL_USB_SUPPORT) += spl_usb.o
>>  obj-$(CONFIG_SPL_FAT_SUPPORT) += spl_fat.o
>>  obj-$(CONFIG_SPL_EXT_SUPPORT) += spl_ext.o
>>  obj-$(CONFIG_SPL_SATA_SUPPORT) += spl_sata.o
>> +obj-$(CONFIG_SPL_DFU_SUPPORT) += spl_dfu.o
>>  endif
>> diff --git a/common/spl/spl_dfu.c b/common/spl/spl_dfu.c new file mode 
>> 100644 index 0000000..e8d0ba1
>> --- /dev/null
>> +++ b/common/spl/spl_dfu.c
>> @@ -0,0 +1,57 @@
>> +/*
>> + * (C) Copyright 2016
>> + * Texas Instruments, <www.ti.com>
>> + *
>> + * Ravi B <ravibabu@ti.com>
>> + *
>> + * SPDX-License-Identifier:	GPL-2.0+
>> + */
>> +#include <common.h>
>> +#include <spl.h>
>> +#include <linux/compiler.h>
>> +#include <errno.h>
>> +#include <watchdog.h>
>> +#include <console.h>
>> +#include <g_dnl.h>
>> +#include <usb.h>
>> +#include <dfu.h>
>> +#include <environment.h>
>> +
>> +static int run_dfu(int usb_index, char *interface, char *devstring) {
>> +	int ret;
>> +
>> +	ret = dfu_init_env_entities(interface, devstring);
>> +	if (ret) {
>> +		dfu_free_entities();
>> +		goto exit;
>> +	}
>> +
>> +	run_usb_dnl_gadget(usb_index, "usb_dnl_dfu");
>> +exit:
>> +	dfu_free_entities();
>> +	return ret;
>> +}
>> +
>> +int spl_dfu_cmd(int usbctrl, char *dfu_alt_info, char *interface, 
>				     ^^^^^^^^^^^^^^ this is a bit
>				     misleading.
>				     I would rename it to "alt_info_str"

Ok. Will change to alt_info_str.

>
>> char *devstr) +{
>> +	char *str_env;
>> +	int ret;
>> +
>> +	/* set default environment */
>> +	set_default_env(0);

>set_default_env() accepts const char *s as the argument. Please replace
>0 -> NULL

Fine.

>
>> +	str_env = getenv(dfu_alt_info);
>> +	if (!str_env) {
>> +		error("\"dfu_alt_info\" env variable not
>> defined!\n");
>> +		return -EINVAL;
>> +	}
>> +
>> +	ret = setenv("dfu_alt_info", str_env);
>> +	if (ret) {
>> +		error("unable to set env variable
>> \"dfu_alt_info\"!\n");
>> +		return -EINVAL;
>> +	}

>I'm a bit confused with this env flow.
>
>Is it required on your platform to:
>
>1. set_default_env(NULL) - which sets default envs (one which are mostly defined at ./include/<board_config> file) in RAM

Actually not required, I felt it is better to use default environment inorder to get the latest 
environment from SPL which is being loaded. I will check once without set_default_env().

>
>2. call getenv with "dfu_alt_info_ram", which reads this value from RAM
>
>3. call setenv() to store already in ram available env variable to some medium?

This step is required, "dfu_alt_info" is one referred by dfu driver.

>
>If you want to store default envs in the medium (e.g. eMMC), I think that it would be easier to call "saveenv".

Ok. 

>Otherwise, I would stay with default envs, since we only use this u-boot for flashing other binaries.

Right.

Regards
Ravi 

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

* [U-Boot] [RFC PATCH v2 3/5] spl: dfu: adding dfu support functions for SPL-DFU
  2016-07-25 13:08     ` B, Ravi
@ 2016-07-25 14:16       ` Lukasz Majewski
  0 siblings, 0 replies; 27+ messages in thread
From: Lukasz Majewski @ 2016-07-25 14:16 UTC (permalink / raw)
  To: u-boot

Hi Ravi,

> Hi Lukasz
> 
> >> Adding support functions to run dfu spl commands.
> >> 
> >> Signed-off-by: Ravi Babu <ravibabu@ti.com>
> >> ---
> >>  common/spl/Makefile  |    1 +
> >>  common/spl/spl_dfu.c |   57
> >> ++++++++++++++++++++++++++++++++++++++++++++++++++
> >> include/spl.h        |    8 +++++++ 3 files changed, 66
> >> insertions(+) create mode 100644 common/spl/spl_dfu.c
> >> 
> >> diff --git a/common/spl/Makefile b/common/spl/Makefile index 
> >> 2e0f695..0850da0 100644
> >> --- a/common/spl/Makefile
> >> +++ b/common/spl/Makefile
> >> @@ -21,4 +21,5 @@ obj-$(CONFIG_SPL_USB_SUPPORT) += spl_usb.o
> >>  obj-$(CONFIG_SPL_FAT_SUPPORT) += spl_fat.o
> >>  obj-$(CONFIG_SPL_EXT_SUPPORT) += spl_ext.o
> >>  obj-$(CONFIG_SPL_SATA_SUPPORT) += spl_sata.o
> >> +obj-$(CONFIG_SPL_DFU_SUPPORT) += spl_dfu.o
> >>  endif
> >> diff --git a/common/spl/spl_dfu.c b/common/spl/spl_dfu.c new file
> >> mode 100644 index 0000000..e8d0ba1
> >> --- /dev/null
> >> +++ b/common/spl/spl_dfu.c
> >> @@ -0,0 +1,57 @@
> >> +/*
> >> + * (C) Copyright 2016
> >> + * Texas Instruments, <www.ti.com>
> >> + *
> >> + * Ravi B <ravibabu@ti.com>
> >> + *
> >> + * SPDX-License-Identifier:	GPL-2.0+
> >> + */
> >> +#include <common.h>
> >> +#include <spl.h>
> >> +#include <linux/compiler.h>
> >> +#include <errno.h>
> >> +#include <watchdog.h>
> >> +#include <console.h>
> >> +#include <g_dnl.h>
> >> +#include <usb.h>
> >> +#include <dfu.h>
> >> +#include <environment.h>
> >> +
> >> +static int run_dfu(int usb_index, char *interface, char
> >> *devstring) {
> >> +	int ret;
> >> +
> >> +	ret = dfu_init_env_entities(interface, devstring);
> >> +	if (ret) {
> >> +		dfu_free_entities();
> >> +		goto exit;
> >> +	}
> >> +
> >> +	run_usb_dnl_gadget(usb_index, "usb_dnl_dfu");
> >> +exit:
> >> +	dfu_free_entities();
> >> +	return ret;
> >> +}
> >> +
> >> +int spl_dfu_cmd(int usbctrl, char *dfu_alt_info, char *interface, 
> >				     ^^^^^^^^^^^^^^ this is a bit
> >				     misleading.
> >				     I would rename it to
> >	"alt_info_str"
> 
> Ok. Will change to alt_info_str.
> 
> >
> >> char *devstr) +{
> >> +	char *str_env;
> >> +	int ret;
> >> +
> >> +	/* set default environment */
> >> +	set_default_env(0);
> 
> >set_default_env() accepts const char *s as the argument. Please
> >replace 0 -> NULL
> 
> Fine.
> 
> >
> >> +	str_env = getenv(dfu_alt_info);
> >> +	if (!str_env) {
> >> +		error("\"dfu_alt_info\" env variable not
> >> defined!\n");
> >> +		return -EINVAL;
> >> +	}
> >> +
> >> +	ret = setenv("dfu_alt_info", str_env);
> >> +	if (ret) {
> >> +		error("unable to set env variable
> >> \"dfu_alt_info\"!\n");
> >> +		return -EINVAL;
> >> +	}
> 
> >I'm a bit confused with this env flow.
> >
> >Is it required on your platform to:
> >
> >1. set_default_env(NULL) - which sets default envs (one which are
> >mostly defined at ./include/<board_config> file) in RAM
> 
> Actually not required, I felt it is better to use default environment
> inorder to get the latest environment from SPL which is being loaded.
> I will check once without set_default_env().
> 
> >
> >2. call getenv with "dfu_alt_info_ram", which reads this value from
> >RAM
> >
> >3. call setenv() to store already in ram available env variable to
> >some medium?
> 
> This step is required, "dfu_alt_info" is one referred by dfu driver.

But is it necessary to store "dfu_alt_info" env variable to memory
medium (e.g. eMMC) or is it enough to use the default value stored in
RAM?

> 
> >
> >If you want to store default envs in the medium (e.g. eMMC), I think
> >that it would be easier to call "saveenv".
> 
> Ok. 
> 
> >Otherwise, I would stay with default envs, since we only use this
> >u-boot for flashing other binaries.
> 
> Right.
> 
> Regards
> Ravi 
> 



-- 
Best regards,

Lukasz Majewski

Samsung R&D Institute Poland (SRPOL) | Linux Platform Group

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

* [U-Boot] [RFC PATCH v2 4/5] dra7x: boot: add dfu bootmode support
  2016-07-22 13:41   ` Tom Rini
@ 2016-07-25 14:17     ` B, Ravi
  2016-07-25 14:38       ` Tom Rini
  0 siblings, 1 reply; 27+ messages in thread
From: B, Ravi @ 2016-07-25 14:17 UTC (permalink / raw)
  To: u-boot

Hi Tom

>> +++ b/arch/arm/include/asm/arch-omap5/spl.h
>> @@ -20,7 +20,7 @@
>>  #define BOOT_DEVICE_QSPI_1	0x0A
>>  #define BOOT_DEVICE_QSPI_4	0x0B
>>  #define BOOT_DEVICE_UART	0x43
>> -#define BOOT_DEVICE_USB		0x45
>> +#define BOOT_DEVICE_DFU		0x45

>So you're breaking regular USB gadget support with this change, on these platforms, yes?

You are correct. This platform does not support BOOT_DEVICE_USB support.
The BOOT_DEVICE_USB is basically the USBHOST-MSC support (CONFIG_SPL_USB_SUPPORT), i.e, boot from mass storage device.
Yes, this platform don't have USBHOST-MSC support, hence BOOT_DEVICE_USB is not valid for this device and removed, and also does not support BOOT_DEVICE_USBETH as well.
Instead BOOT_DEVICE_DFU  is defined for USB-Gadget-DFU support, i.e, boot from USB-DFU.

Regards
Ravi

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

* [U-Boot] [RFC PATCH v2 4/5] dra7x: boot: add dfu bootmode support
  2016-07-25 14:17     ` B, Ravi
@ 2016-07-25 14:38       ` Tom Rini
  2016-07-25 14:53         ` B, Ravi
  0 siblings, 1 reply; 27+ messages in thread
From: Tom Rini @ 2016-07-25 14:38 UTC (permalink / raw)
  To: u-boot

On Mon, Jul 25, 2016 at 02:17:35PM +0000, B, Ravi wrote:
> Hi Tom
> 
> >> +++ b/arch/arm/include/asm/arch-omap5/spl.h
> >> @@ -20,7 +20,7 @@
> >>  #define BOOT_DEVICE_QSPI_1	0x0A
> >>  #define BOOT_DEVICE_QSPI_4	0x0B
> >>  #define BOOT_DEVICE_UART	0x43
> >> -#define BOOT_DEVICE_USB		0x45
> >> +#define BOOT_DEVICE_DFU		0x45
> 
> >So you're breaking regular USB gadget support with this change, on these platforms, yes?
> 
> You are correct. This platform does not support BOOT_DEVICE_USB support.
> The BOOT_DEVICE_USB is basically the USBHOST-MSC support (CONFIG_SPL_USB_SUPPORT), i.e, boot from mass storage device.

So, we have 3 SoCs that share these values here, and we need to be
correct for all of them.  What does 0x45 mean, on OMAP5, DRA7xx and
AM57xx, in terms of what, and how, the ROM loaded something in?

> Yes, this platform don't have USBHOST-MSC support, hence BOOT_DEVICE_USB is not valid for this device and removed, and also does not support BOOT_DEVICE_USBETH as well.

When you say platform and device, do you mean SoC, or the specific EVM
you're working with?

> Instead BOOT_DEVICE_DFU  is defined for USB-Gadget-DFU support, i.e, boot from USB-DFU.

It sounds like you're saying here that 0x45, for DRA7xx/AM57xx means
"ROM enumerated a USB gadget (of type what?) and was given a payload".
This is what, on TI platforms, usually happens with 0x45.  Sometimes
it's a USB RNDIS device and bootp (am33xx, am43xx), sometimes it's a
something else (I honestly forget what OMAP4 did, I think it was just a
vendor class self-defined and spec-allowed thing).  What is happening in
this case, and how do we get this first part in?

Thanks!

-- 
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: Digital signature
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20160725/e62d1610/attachment.sig>

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

* [U-Boot] [RFC PATCH v2 0/5] SPL: DFU Support in SPL
  2016-07-22 13:42 ` [U-Boot] [RFC PATCH v2 0/5] SPL: DFU Support in SPL Tom Rini
@ 2016-07-25 14:40   ` B, Ravi
  2016-07-25 14:58     ` Tom Rini
  0 siblings, 1 reply; 27+ messages in thread
From: B, Ravi @ 2016-07-25 14:40 UTC (permalink / raw)
  To: u-boot

Tom

>> 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 does not have MMC/SD, 
>> ethernet boot mechanism to boot the board and only has USB inteface.

>How well did you test DFU on other platforms after these changes?
>Thanks

Actually earlier platforms did not had this support,  support for either RNDIS boot mode (CONFIG_SPL_USBETH_SUPPORT) or
CONFIG_SPL_USB_SUPPORT (boot from mass-storage device) were only supported.

But ideally, this should work on any other platform, as functional flow of SPL-DFU is same as DFU functionality in u-boot and
reuse of common dfu driver, also DFU has been verified in multiple platforms in u-boot mainline.
The same DFU support is now brought to SPL to facilitate booting EVM using USB interface.

Regards
Ravi

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

* [U-Boot] [RFC PATCH v2 4/5] dra7x: boot: add dfu bootmode support
  2016-07-25 14:38       ` Tom Rini
@ 2016-07-25 14:53         ` B, Ravi
  0 siblings, 0 replies; 27+ messages in thread
From: B, Ravi @ 2016-07-25 14:53 UTC (permalink / raw)
  To: u-boot

Hi Tom

>> 
>> You are correct. This platform does not support BOOT_DEVICE_USB support.
>> The BOOT_DEVICE_USB is basically the USBHOST-MSC support (CONFIG_SPL_USB_SUPPORT), i.e, boot from mass storage device.

>So, we have 3 SoCs that share these values here, and we need to be correct for all of them.  What does 0x45 mean, on OMAP5, DRA7xx and AM57xx, in terms of what, and how, the ROM loaded something in?

For all  OMAP5/DRA7X/AM57X  devices, 0x45 means ROM-USB peripheral boot mode. You are correct, as pointed out, the "ROM enumerated as USB gadget (type : vendor specific download gadget)".

>> Yes, this platform don't have USBHOST-MSC support, hence BOOT_DEVICE_USB is not valid for this device and removed, and also does not support BOOT_DEVICE_USBETH as well.

>When you say platform and device, do you mean SoC, or the specific EVM you're working with?

>> Instead BOOT_DEVICE_DFU  is defined for USB-Gadget-DFU support, i.e, boot from USB-DFU.

>It sounds like you're saying here that 0x45, for DRA7xx/AM57xx means "ROM enumerated a USB gadget (of type what?) and was given a payload".

Correct. ROM implements custom download gadget.

>This is what, on TI platforms, usually happens with 0x45.  Sometimes it's a USB RNDIS device and bootp (am33xx, am43xx), sometimes it's a something else 

Yes you are correct, there is only one USB mode implemented in ROM (either host boot  or peripheral boot mode).

 >(I honestly forget what OMAP4 did, I think it was just a vendor class self-defined and spec-allowed thing).  What is happening in this case, and how do we get this first part in?

I am not sure on OMAP4, it must be similar to OMAP5 which is vendor class specific download gadget.

Regards
Ravi

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

* [U-Boot] [RFC PATCH v2 0/5] SPL: DFU Support in SPL
  2016-07-25 14:40   ` B, Ravi
@ 2016-07-25 14:58     ` Tom Rini
  2016-07-25 15:25       ` B, Ravi
  0 siblings, 1 reply; 27+ messages in thread
From: Tom Rini @ 2016-07-25 14:58 UTC (permalink / raw)
  To: u-boot

On Mon, Jul 25, 2016 at 02:40:21PM +0000, B, Ravi wrote:
> Tom
> 
> >> 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 does not have MMC/SD, 
> >> ethernet boot mechanism to boot the board and only has USB inteface.
> 
> >How well did you test DFU on other platforms after these changes?
> >Thanks
> 
> Actually earlier platforms did not had this support,  support for either RNDIS boot mode (CONFIG_SPL_USBETH_SUPPORT) or
> CONFIG_SPL_USB_SUPPORT (boot from mass-storage device) were only supported.

Yes, sorry, I mean you're making generic DFU code changes too, did you
test them on other TI platforms which support DFU in other cases to make
sure nothing slipped in and broke them with these changes?

-- 
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: Digital signature
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20160725/09d9d07c/attachment.sig>

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

* [U-Boot] [RFC PATCH v2 0/5] SPL: DFU Support in SPL
  2016-07-25 14:58     ` Tom Rini
@ 2016-07-25 15:25       ` B, Ravi
  2016-07-25 15:34         ` Tom Rini
  0 siblings, 1 reply; 27+ messages in thread
From: B, Ravi @ 2016-07-25 15:25 UTC (permalink / raw)
  To: u-boot

Tom

>> >How well did you test DFU on other platforms after these changes?
>> >Thanks
>> 
>> Actually earlier platforms did not had this support,  support for 
>> either RNDIS boot mode (CONFIG_SPL_USBETH_SUPPORT) or CONFIG_SPL_USB_SUPPORT (boot from mass-storage device) were only supported.

>Yes, sorry, I mean you're making generic DFU code changes too, did you test them on other TI platforms which support DFU in other cases to make sure nothing slipped in and broke them with these changes?

I got your point, You are referring to generic dfu code changes, that is moving common dfu code to  common/dfu.c , 
so that both u-boot and SPL can leverage common code. But this change is generic cleanup code.
Yes, I did test DFU functionality on other platforms (say AM335X).  I can check other platform as well. 

But SPL-DFU is tied with ROM-USB peripheral boot mode, I cannot test other than DRA7X/AM57X.
But in order to verify the SPL-DFU boot on other platform,  I have tested SPL-DFU on AM335x,  hacking common/spl/spl.c to
execute SPL-DFU code by default and could able to load u-boot.img into RAM and boot to u-boot. (using dfu-utils from PC host).

Let me know I have clarified.

Regards
Ravi 

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

* [U-Boot] [RFC PATCH v2 0/5] SPL: DFU Support in SPL
  2016-07-25 15:25       ` B, Ravi
@ 2016-07-25 15:34         ` Tom Rini
  2016-07-25 15:41           ` B, Ravi
  0 siblings, 1 reply; 27+ messages in thread
From: Tom Rini @ 2016-07-25 15:34 UTC (permalink / raw)
  To: u-boot

On Mon, Jul 25, 2016 at 03:25:52PM +0000, B, Ravi wrote:
> Tom
> 
> >> >How well did you test DFU on other platforms after these changes?
> >> >Thanks
> >> 
> >> Actually earlier platforms did not had this support,  support for 
> >> either RNDIS boot mode (CONFIG_SPL_USBETH_SUPPORT) or CONFIG_SPL_USB_SUPPORT (boot from mass-storage device) were only supported.
> 
> >Yes, sorry, I mean you're making generic DFU code changes too, did you test them on other TI platforms which support DFU in other cases to make sure nothing slipped in and broke them with these changes?
> 
> I got your point, You are referring to generic dfu code changes, that is moving common dfu code to  common/dfu.c , 
> so that both u-boot and SPL can leverage common code. But this change is generic cleanup code.
> Yes, I did test DFU functionality on other platforms (say AM335X).  I can check other platform as well. 
> 
> But SPL-DFU is tied with ROM-USB peripheral boot mode, I cannot test other than DRA7X/AM57X.
> But in order to verify the SPL-DFU boot on other platform,  I have tested SPL-DFU on AM335x,  hacking common/spl/spl.c to
> execute SPL-DFU code by default and could able to load u-boot.img into RAM and boot to u-boot. (using dfu-utils from PC host).
> 
> Let me know I have clarified.

OK.  Please note in the next round (and in general) when you also test
that generic changes have been confirmed on other platforms, thanks.

-- 
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: Digital signature
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20160725/5b8b7b13/attachment.sig>

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

* [U-Boot] [RFC PATCH v2 0/5] SPL: DFU Support in SPL
  2016-07-25 15:34         ` Tom Rini
@ 2016-07-25 15:41           ` B, Ravi
  0 siblings, 0 replies; 27+ messages in thread
From: B, Ravi @ 2016-07-25 15:41 UTC (permalink / raw)
  To: u-boot

Hi Tom

>> I got your point, You are referring to generic dfu code changes, that 
>> is moving common dfu code to  common/dfu.c , so that both u-boot and SPL can leverage common code. But this change is generic cleanup code.
>> Yes, I did test DFU functionality on other platforms (say AM335X).  I can check other platform as well. 
>> 
>> But SPL-DFU is tied with ROM-USB peripheral boot mode, I cannot test other than DRA7X/AM57X.
>> But in order to verify the SPL-DFU boot on other platform,  I have 
>> tested SPL-DFU on AM335x,  hacking common/spl/spl.c to execute SPL-DFU code by default and could able to load u-boot.img into RAM and boot to u-boot. (using dfu-utils from PC host).
>> 
>> Let me know I have clarified.

>OK.  Please note in the next round (and in general) when you also test that generic changes have been confirmed on other platforms, thanks.

Yes, I will do. Thanks.

Regards
Ravi

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

* [U-Boot] [RFC PATCH v2 1/5] spl: dfu: add dfu support in SPL
  2016-07-22 13:41   ` Tom Rini
@ 2016-07-27 14:04     ` B, Ravi
  2016-07-27 15:25       ` Tom Rini
  0 siblings, 1 reply; 27+ messages in thread
From: B, Ravi @ 2016-07-27 14:04 UTC (permalink / raw)
  To: u-boot

Hi Tom

Missed this thread to reply.

>> index ef12f9f..ed3e295 100644
>> --- a/Kconfig
>> +++ b/Kconfig
>> @@ -336,6 +336,33 @@ config SPL_FIT_IMAGE_POST_PROCESS
>>  	  injected into the FIT creation (i.e. the blobs would have been pre-
>>  	  processed before being added to the FIT image).
>>  
>> +config SPL_DFU_SUPPORT
>> +	bool "Enable SPL with DFU to load binaries to memory device"
>> +	depends on USB && TARGET_DRA7XX_EVM

>This seems needlessly restrictive.

Yes, I do agree, at present only dra7x platform  support BOOT_DEVICE_DFU.
if we make it generic, then other platform should also enable the SPL-DFU
support for their respective platform (similar to [RFC PATCH v2 5/5] dra7x: configs: enable SPL-DFU support).

>> 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 */ Check whether they use DMA or PIO mode.

>>  	else if (cmdtp->cmd == do_bootd) {
>>  		if (flag & CMD_FLAG_BOOTD) {

>Why do we need this?

Actually CONFIG_CMD_BOOTD is not required for SPL-DFU. 
But cmd/Kconfg has defined CONFIG_CMD_BOOTD by default, which is causing compilation error for "do_bootd" not defined.
Again do_bootd depends on CONFIG_CMD_BOOTM which is not defined for SPL.

What is best way? What do you suggest ?

Regards
Ravi

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

* [U-Boot] [RFC PATCH v2 1/5] spl: dfu: add dfu support in SPL
  2016-07-27 14:04     ` B, Ravi
@ 2016-07-27 15:25       ` Tom Rini
  2016-07-28  4:09         ` B, Ravi
  0 siblings, 1 reply; 27+ messages in thread
From: Tom Rini @ 2016-07-27 15:25 UTC (permalink / raw)
  To: u-boot

On Wed, Jul 27, 2016 at 02:04:24PM +0000, B, Ravi wrote:
> Hi Tom
> 
> Missed this thread to reply.
> 
> >> index ef12f9f..ed3e295 100644
> >> --- a/Kconfig
> >> +++ b/Kconfig
> >> @@ -336,6 +336,33 @@ config SPL_FIT_IMAGE_POST_PROCESS
> >>  	  injected into the FIT creation (i.e. the blobs would have been pre-
> >>  	  processed before being added to the FIT image).
> >>  
> >> +config SPL_DFU_SUPPORT
> >> +	bool "Enable SPL with DFU to load binaries to memory device"
> >> +	depends on USB && TARGET_DRA7XX_EVM
> 
> >This seems needlessly restrictive.
> 
> Yes, I do agree, at present only dra7x platform  support BOOT_DEVICE_DFU.
> if we make it generic, then other platform should also enable the SPL-DFU
> support for their respective platform (similar to [RFC PATCH v2 5/5] dra7x: configs: enable SPL-DFU support).

That's what I'm saying, this all looks generic today, except for the
restriction here in Kconfig.  Yes, boards that want to use it will have
to fill in plumbing, but that's normal.

> >> 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 */ Check whether they use DMA or PIO mode.
> 
> >>  	else if (cmdtp->cmd == do_bootd) {
> >>  		if (flag & CMD_FLAG_BOOTD) {
> 
> >Why do we need this?
> 
> Actually CONFIG_CMD_BOOTD is not required for SPL-DFU. 
> But cmd/Kconfg has defined CONFIG_CMD_BOOTD by default, which is causing compilation error for "do_bootd" not defined.
> Again do_bootd depends on CONFIG_CMD_BOOTM which is not defined for SPL.
> 
> What is best way? What do you suggest ?

First, what is the exact compile error you get?  And second, probably
disable CMD_BOOTD.

-- 
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: Digital signature
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20160727/a61e7466/attachment.sig>

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

* [U-Boot] [RFC PATCH v2 1/5] spl: dfu: add dfu support in SPL
  2016-07-27 15:25       ` Tom Rini
@ 2016-07-28  4:09         ` B, Ravi
  2016-07-28 13:22           ` Tom Rini
  0 siblings, 1 reply; 27+ messages in thread
From: B, Ravi @ 2016-07-28  4:09 UTC (permalink / raw)
  To: u-boot

Tom

> On 27-Jul-2016, at 8:55 PM, Tom Rini <trini@konsulko.com> wrote:
> 
>> On Wed, Jul 27, 2016 at 02:04:24PM +0000, B, Ravi wrote:
>> Hi Tom
>> 
>> Missed this thread to reply.
>> 
>>>> index ef12f9f..ed3e295 100644
>>>> --- a/Kconfig
>>>> +++ b/Kconfig
>>>> @@ -336,6 +336,33 @@ config SPL_FIT_IMAGE_POST_PROCESS
>>>>      injected into the FIT creation (i.e. the blobs would have been pre-
>>>>      processed before being added to the FIT image).
>>>> 
>>>> +config SPL_DFU_SUPPORT
>>>> +    bool "Enable SPL with DFU to load binaries to memory device"
>>>> +    depends on USB && TARGET_DRA7XX_EVM
>> 
>>> This seems needlessly restrictive.
>> 
>> Yes, I do agree, at present only dra7x platform  support BOOT_DEVICE_DFU.
>> if we make it generic, then other platform should also enable the SPL-DFU
>> support for their respective platform (similar to [RFC PATCH v2 5/5] dra7x: configs: enable SPL-DFU support).
> 
> That's what I'm saying, this all looks generic today, except for the
> restriction here in Kconfig.  Yes, boards that want to use it will have
> to fill in plumbing, but that's normal.

Ok, then I will remove this restriction. 
> 
>>>> 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 */ Check whether they use DMA or PIO mode.
>> 
>>>>    else if (cmdtp->cmd == do_bootd) {
>>>>        if (flag & CMD_FLAG_BOOTD) {
>> 
>>> Why do we need this?
>> 
>> Actually CONFIG_CMD_BOOTD is not required for SPL-DFU. 
>> But cmd/Kconfg has defined CONFIG_CMD_BOOTD by default, which is causing compilation error for "do_bootd" not defined.
>> Again do_bootd depends on CONFIG_CMD_BOOTM which is not defined for SPL.
>> 
>> What is best way? What do you suggest ?
> 
> First, what is the exact compile error you get?  And second, probably
> disable CMD_BOOTD.

Since CMD_BOOTD is enabled, the function do_bood is undefined due to cmd/bootm.c compiled out for SPL.

As you said, better to disable CMD_BOOTD.

Regards
Ravi

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

* [U-Boot] [RFC PATCH v2 1/5] spl: dfu: add dfu support in SPL
  2016-07-28  4:09         ` B, Ravi
@ 2016-07-28 13:22           ` Tom Rini
  0 siblings, 0 replies; 27+ messages in thread
From: Tom Rini @ 2016-07-28 13:22 UTC (permalink / raw)
  To: u-boot

On Thu, Jul 28, 2016 at 04:09:10AM +0000, B, Ravi wrote:
> Tom
> 
> > On 27-Jul-2016, at 8:55 PM, Tom Rini <trini@konsulko.com> wrote:
> > 
> >> On Wed, Jul 27, 2016 at 02:04:24PM +0000, B, Ravi wrote:
[snip]
> >>>> 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 */ Check whether they use DMA or PIO mode.
> >> 
> >>>>    else if (cmdtp->cmd == do_bootd) {
> >>>>        if (flag & CMD_FLAG_BOOTD) {
> >> 
> >>> Why do we need this?
> >> 
> >> Actually CONFIG_CMD_BOOTD is not required for SPL-DFU. 
> >> But cmd/Kconfg has defined CONFIG_CMD_BOOTD by default, which is causing compilation error for "do_bootd" not defined.
> >> Again do_bootd depends on CONFIG_CMD_BOOTM which is not defined for SPL.
> >> 
> >> What is best way? What do you suggest ?
> > 
> > First, what is the exact compile error you get?  And second, probably
> > disable CMD_BOOTD.
> 
> Since CMD_BOOTD is enabled, the function do_bood is undefined due to cmd/bootm.c compiled out for SPL.
> 
> As you said, better to disable CMD_BOOTD.

Ah, the problems of bringing in command parsing stuff to SPL.  Yeah, for
now lets turn off CMD_BOOTD but I think long term this is why we need to
not be relying on command parsing but instead use the API directly.

-- 
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 819 bytes
Desc: Digital signature
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20160728/a2ab3991/attachment.sig>

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

end of thread, other threads:[~2016-07-28 13:22 UTC | newest]

Thread overview: 27+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-07-21 14:53 [U-Boot] [RFC PATCH v2 0/5] SPL: DFU Support in SPL Ravi Babu
2016-07-21 14:53 ` [U-Boot] [RFC PATCH v2 1/5] spl: dfu: add dfu support " Ravi Babu
2016-07-22 13:41   ` Tom Rini
2016-07-27 14:04     ` B, Ravi
2016-07-27 15:25       ` Tom Rini
2016-07-28  4:09         ` B, Ravi
2016-07-28 13:22           ` Tom Rini
2016-07-21 14:53 ` [U-Boot] [RFC PATCH v2 2/5] common: dfu: saperate the dfu common functionality Ravi Babu
2016-07-22 13:41   ` Tom Rini
2016-07-21 14:53 ` [U-Boot] [RFC PATCH v2 3/5] spl: dfu: adding dfu support functions for SPL-DFU Ravi Babu
2016-07-22 13:41   ` Tom Rini
2016-07-21 14:53 ` [U-Boot] [RFC PATCH v2 4/5] dra7x: boot: add dfu bootmode support Ravi Babu
2016-07-22 13:41   ` Tom Rini
2016-07-25 14:17     ` B, Ravi
2016-07-25 14:38       ` Tom Rini
2016-07-25 14:53         ` B, Ravi
2016-07-21 14:53 ` [U-Boot] [RFC PATCH v2 5/5] dra7x: configs: enable SPL-DFU support Ravi Babu
2016-07-22 13:42   ` Tom Rini
2016-07-22 13:42 ` [U-Boot] [RFC PATCH v2 0/5] SPL: DFU Support in SPL Tom Rini
2016-07-25 14:40   ` B, Ravi
2016-07-25 14:58     ` Tom Rini
2016-07-25 15:25       ` B, Ravi
2016-07-25 15:34         ` Tom Rini
2016-07-25 15:41           ` B, Ravi
     [not found] <1469193550-19125-1-git-send-email-ravibabu@ti.com>
     [not found] ` <1469193550-19125-4-git-send-email-ravibabu@ti.com>
2016-07-25 10:05   ` [U-Boot] [RFC PATCH v2 3/5] spl: dfu: adding dfu support functions for SPL-DFU Lukasz Majewski
2016-07-25 13:08     ` B, Ravi
2016-07-25 14:16       ` Lukasz Majewski

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