* [U-Boot] [RFC PATCH v2 0/5] SPL: DFU Support in SPL
@ 2016-07-21 14:53 Ravi Babu
2016-07-22 13:42 ` Tom Rini
0 siblings, 1 reply; 13+ 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] 13+ messages in thread
* [U-Boot] [RFC PATCH v2 0/5] SPL: DFU Support in SPL
2016-07-21 14:53 Ravi Babu
@ 2016-07-22 13:42 ` Tom Rini
2016-07-25 14:40 ` B, Ravi
0 siblings, 1 reply; 13+ 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] 13+ 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; 13+ 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] 13+ messages in thread
* [U-Boot] [RFC PATCH v2 2/5] common: dfu: saperate the dfu common functionality
[not found] ` <1469193550-19125-3-git-send-email-ravibabu@ti.com>
@ 2016-07-25 10:08 ` Lukasz Majewski
2016-07-25 13:12 ` B, Ravi
0 siblings, 1 reply; 13+ messages in thread
From: Lukasz Majewski @ 2016-07-25 10:08 UTC (permalink / raw)
To: u-boot
Hi Ravi,
> 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
Please write:
dfu.c -- common dfu command code
> + *
> + * 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_ */
--
Best regards,
Lukasz Majewski
Samsung R&D Institute Poland (SRPOL) | Linux Platform Group
^ permalink raw reply [flat|nested] 13+ messages in thread
* [U-Boot] [RFC PATCH v2 0/5] SPL: DFU Support in SPL
[not found] <1469193550-19125-1-git-send-email-ravibabu@ti.com>
[not found] ` <1469193550-19125-4-git-send-email-ravibabu@ti.com>
[not found] ` <1469193550-19125-3-git-send-email-ravibabu@ti.com>
@ 2016-07-25 10:16 ` Lukasz Majewski
2 siblings, 0 replies; 13+ messages in thread
From: Lukasz Majewski @ 2016-07-25 10:16 UTC (permalink / raw)
To: u-boot
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
> 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
>
I wanted to add this patch series for testing. Unfortunately, I cannot
apply this code to the newest u-boot-usb/master (SHA1:
eb364c3dc28d59d33e823470d07746b22a8e6fee)
Please rebase your code on top of this branch.
Thanks in advance,
--
Best regards,
Lukasz Majewski
Samsung R&D Institute Poland (SRPOL) | Linux Platform Group
^ permalink raw reply [flat|nested] 13+ 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; 13+ 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] 13+ messages in thread
* [U-Boot] [RFC PATCH v2 2/5] common: dfu: saperate the dfu common functionality
2016-07-25 10:08 ` [U-Boot] [RFC PATCH v2 2/5] common: dfu: saperate the dfu common functionality Lukasz Majewski
@ 2016-07-25 13:12 ` B, Ravi
0 siblings, 0 replies; 13+ messages in thread
From: B, Ravi @ 2016-07-25 13:12 UTC (permalink / raw)
To: u-boot
Hi Lukasz
>> +++ b/common/dfu.c
>> @@ -0,0 +1,88 @@
>> +/*
>> + * dfu.c -- dfu command
>Please write:
>dfu.c -- common dfu command code
Ok.
>> + *
>> + * 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_ */
Regards
Ravi
^ permalink raw reply [flat|nested] 13+ 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; 13+ 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] 13+ messages in thread
* [U-Boot] [RFC PATCH v2 0/5] SPL: DFU Support in SPL
2016-07-22 13:42 ` Tom Rini
@ 2016-07-25 14:40 ` B, Ravi
2016-07-25 14:58 ` Tom Rini
0 siblings, 1 reply; 13+ 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] 13+ 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; 13+ 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] 13+ 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; 13+ 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] 13+ 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; 13+ 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] 13+ 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; 13+ 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] 13+ messages in thread
end of thread, other threads:[~2016-07-25 15:41 UTC | newest]
Thread overview: 13+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[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
[not found] ` <1469193550-19125-3-git-send-email-ravibabu@ti.com>
2016-07-25 10:08 ` [U-Boot] [RFC PATCH v2 2/5] common: dfu: saperate the dfu common functionality Lukasz Majewski
2016-07-25 13:12 ` B, Ravi
2016-07-25 10:16 ` [U-Boot] [RFC PATCH v2 0/5] SPL: DFU Support in SPL Lukasz Majewski
2016-07-21 14:53 Ravi Babu
2016-07-22 13:42 ` 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
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox