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