Commit a006a5deaa3d65850a3250b2136f91d2f38c96c1

Authored by Lukasz Majewski
Committed by Marek Vasut
1 parent cb383cd21d

dfu:cmd: Support for DFU u-boot command

Support for u-boot's command line command "dfu <interface> <dev> [list]".

Signed-off-by: Lukasz Majewski <l.majewski@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
Cc: Marek Vasut <marex@denx.de>

Showing 2 changed files with 82 additions and 0 deletions Side-by-side Diff

... ... @@ -184,6 +184,7 @@
184 184 COBJS-$(CONFIG_MODEM_SUPPORT) += modem.o
185 185 COBJS-$(CONFIG_UPDATE_TFTP) += update.o
186 186 COBJS-$(CONFIG_USB_KEYBOARD) += usb_kbd.o
  187 +COBJS-$(CONFIG_CMD_DFU) += cmd_dfu.o
187 188 endif
188 189  
189 190 ifdef CONFIG_SPL_BUILD
  1 +/*
  2 + * cmd_dfu.c -- dfu command
  3 + *
  4 + * Copyright (C) 2012 Samsung Electronics
  5 + * authors: Andrzej Pietrasiewicz <andrzej.p@samsung.com>
  6 + * Lukasz Majewski <l.majewski@samsung.com>
  7 + *
  8 + * This program is free software; you can redistribute it and/or modify
  9 + * it under the terms of the GNU General Public License as published by
  10 + * the Free Software Foundation; either version 2 of the License, or
  11 + * (at your option) any later version.
  12 + *
  13 + * This program is distributed in the hope that it will be useful,
  14 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
  15 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  16 + * GNU General Public License for more details.
  17 + *
  18 + * You should have received a copy of the GNU General Public License
  19 + * along with this program; if not, write to the Free Software
  20 + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
  21 + */
  22 +
  23 +#include <common.h>
  24 +#include <command.h>
  25 +#include <malloc.h>
  26 +#include <dfu.h>
  27 +#include <asm/errno.h>
  28 +#include <g_dnl.h>
  29 +
  30 +static int do_dfu(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
  31 +{
  32 + const char *str_env;
  33 + char s[] = "dfu";
  34 + char *env_bkp;
  35 + int ret;
  36 +
  37 + if (argc < 3)
  38 + return CMD_RET_USAGE;
  39 +
  40 + str_env = getenv("dfu_alt_info");
  41 + if (str_env == NULL) {
  42 + printf("%s: \"dfu_alt_info\" env variable not defined!\n",
  43 + __func__);
  44 + return CMD_RET_FAILURE;
  45 + }
  46 +
  47 + env_bkp = strdup(str_env);
  48 + ret = dfu_config_entities(env_bkp, argv[1],
  49 + (int)simple_strtoul(argv[2], NULL, 10));
  50 + if (ret)
  51 + return CMD_RET_FAILURE;
  52 +
  53 + if (strcmp(argv[3], "list") == 0) {
  54 + dfu_show_entities();
  55 + goto done;
  56 + }
  57 +
  58 + board_usb_init();
  59 + g_dnl_register(s);
  60 + while (1) {
  61 + if (ctrlc())
  62 + goto exit;
  63 +
  64 + usb_gadget_handle_interrupts();
  65 + }
  66 +exit:
  67 + g_dnl_unregister();
  68 +done:
  69 + dfu_free_entities();
  70 + free(env_bkp);
  71 +
  72 + return CMD_RET_SUCCESS;
  73 +}
  74 +
  75 +U_BOOT_CMD(dfu, CONFIG_SYS_MAXARGS, 1, do_dfu,
  76 + "Device Firmware Upgrade",
  77 + "<interface> <dev> [list]\n"
  78 + " - device firmware upgrade on a device <dev>\n"
  79 + " attached to interface <interface>\n"
  80 + " [list] - list available alt settings"
  81 +);