1 /* 2 * (C) Copyright 2016 3 * Texas Instruments, <www.ti.com> 4 * 5 * Ravi B <ravibabu@ti.com> 6 * 7 * SPDX-License-Identifier: GPL-2.0+ 8 */ 9 #include <common.h> 10 #include <spl.h> 11 #include <linux/compiler.h> 12 #include <errno.h> 13 #include <watchdog.h> 14 #include <console.h> 15 #include <g_dnl.h> 16 #include <usb.h> 17 #include <dfu.h> 18 #include <environment.h> 19 20 static int run_dfu(int usb_index, char *interface, char *devstring) 21 { 22 int ret; 23 24 ret = dfu_init_env_entities(interface, devstring); 25 if (ret) { 26 dfu_free_entities(); 27 goto exit; 28 } 29 30 run_usb_dnl_gadget(usb_index, "usb_dnl_dfu"); 31 exit: 32 dfu_free_entities(); 33 return ret; 34 } 35 36 int spl_dfu_cmd(int usbctrl, char *dfu_alt_info, char *interface, char *devstr) 37 { 38 char *str_env; 39 int ret; 40 41 /* set default environment */ 42 set_default_env(0); 43 str_env = env_get(dfu_alt_info); 44 if (!str_env) { 45 error("\"dfu_alt_info\" env variable not defined!\n"); 46 return -EINVAL; 47 } 48 49 ret = env_set("dfu_alt_info", str_env); 50 if (ret) { 51 error("unable to set env variable \"dfu_alt_info\"!\n"); 52 return -EINVAL; 53 } 54 55 /* invoke dfu command */ 56 return run_dfu(usbctrl, interface, devstr); 57 } 58