12e192b24SSimon Glass /* 22e192b24SSimon Glass * cmd_dfu.c -- dfu command 32e192b24SSimon Glass * 42e192b24SSimon Glass * Copyright (C) 2015 52e192b24SSimon Glass * Lukasz Majewski <l.majewski@majess.pl> 62e192b24SSimon Glass * 72e192b24SSimon Glass * Copyright (C) 2012 Samsung Electronics 82e192b24SSimon Glass * authors: Andrzej Pietrasiewicz <andrzej.p@samsung.com> 92e192b24SSimon Glass * Lukasz Majewski <l.majewski@samsung.com> 102e192b24SSimon Glass * 112e192b24SSimon Glass * SPDX-License-Identifier: GPL-2.0+ 122e192b24SSimon Glass */ 132e192b24SSimon Glass 142e192b24SSimon Glass #include <common.h> 152e192b24SSimon Glass #include <watchdog.h> 162e192b24SSimon Glass #include <dfu.h> 172e192b24SSimon Glass #include <console.h> 182e192b24SSimon Glass #include <g_dnl.h> 192e192b24SSimon Glass #include <usb.h> 202e192b24SSimon Glass #include <net.h> 212e192b24SSimon Glass 222e192b24SSimon Glass static int do_dfu(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) 232e192b24SSimon Glass { 242e192b24SSimon Glass 252e192b24SSimon Glass if (argc < 4) 262e192b24SSimon Glass return CMD_RET_USAGE; 272e192b24SSimon Glass 282e192b24SSimon Glass char *usb_controller = argv[1]; 292e192b24SSimon Glass char *interface = argv[2]; 302e192b24SSimon Glass char *devstring = argv[3]; 312e192b24SSimon Glass 32*05341a87SB, Ravi int ret; 332e192b24SSimon Glass #ifdef CONFIG_DFU_TFTP 342e192b24SSimon Glass unsigned long addr = 0; 352e192b24SSimon Glass if (!strcmp(argv[1], "tftp")) { 362e192b24SSimon Glass if (argc == 5) 372e192b24SSimon Glass addr = simple_strtoul(argv[4], NULL, 0); 382e192b24SSimon Glass 392e192b24SSimon Glass return update_tftp(addr, interface, devstring); 402e192b24SSimon Glass } 412e192b24SSimon Glass #endif 422e192b24SSimon Glass 432e192b24SSimon Glass ret = dfu_init_env_entities(interface, devstring); 442e192b24SSimon Glass if (ret) 452e192b24SSimon Glass goto done; 462e192b24SSimon Glass 472e192b24SSimon Glass ret = CMD_RET_SUCCESS; 482e192b24SSimon Glass if (argc > 4 && strcmp(argv[4], "list") == 0) { 492e192b24SSimon Glass dfu_show_entities(); 502e192b24SSimon Glass goto done; 512e192b24SSimon Glass } 522e192b24SSimon Glass 532e192b24SSimon Glass int controller_index = simple_strtoul(usb_controller, NULL, 0); 542e192b24SSimon Glass 55*05341a87SB, Ravi run_usb_dnl_gadget(controller_index, "usb_dnl_dfu"); 562e192b24SSimon Glass 572e192b24SSimon Glass done: 582e192b24SSimon Glass dfu_free_entities(); 592e192b24SSimon Glass return ret; 602e192b24SSimon Glass } 612e192b24SSimon Glass 622e192b24SSimon Glass U_BOOT_CMD(dfu, CONFIG_SYS_MAXARGS, 1, do_dfu, 632e192b24SSimon Glass "Device Firmware Upgrade", 642e192b24SSimon Glass "<USB_controller> <interface> <dev> [list]\n" 652e192b24SSimon Glass " - device firmware upgrade via <USB_controller>\n" 662e192b24SSimon Glass " on device <dev>, attached to interface\n" 672e192b24SSimon Glass " <interface>\n" 682e192b24SSimon Glass " [list] - list available alt settings\n" 692e192b24SSimon Glass #ifdef CONFIG_DFU_TFTP 702e192b24SSimon Glass "dfu tftp <interface> <dev> [<addr>]\n" 712e192b24SSimon Glass " - device firmware upgrade via TFTP\n" 722e192b24SSimon Glass " on device <dev>, attached to interface\n" 732e192b24SSimon Glass " <interface>\n" 742e192b24SSimon Glass " [<addr>] - address where FIT image has been stored\n" 752e192b24SSimon Glass #endif 762e192b24SSimon Glass ); 77