From: Lukasz Majewski <l.majewski@samsung.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] [RFC PATCH v2 2/5] common: dfu: saperate the dfu common functionality
Date: Mon, 25 Jul 2016 12:08:48 +0200 [thread overview]
Message-ID: <20160725120848.0e640006@amdc2363> (raw)
In-Reply-To: <1469193550-19125-3-git-send-email-ravibabu@ti.com>
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
next prev parent reply other threads:[~2016-07-25 10:08 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
[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 ` Lukasz Majewski [this message]
2016-07-25 13:12 ` [U-Boot] [RFC PATCH v2 2/5] common: dfu: saperate the dfu common functionality 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-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
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20160725120848.0e640006@amdc2363 \
--to=l.majewski@samsung.com \
--cc=u-boot@lists.denx.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox