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