Commit a006a5deaa3d65850a3250b2136f91d2f38c96c1
Committed by
Marek Vasut
1 parent
cb383cd21d
Exists in
master
and in
54 other branches
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
common/Makefile
common/cmd_dfu.c
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 | +); |