152f2acc5SB, Ravi /* 252f2acc5SB, Ravi * (C) Copyright 2016 352f2acc5SB, Ravi * Texas Instruments, <www.ti.com> 452f2acc5SB, Ravi * 552f2acc5SB, Ravi * Ravi B <ravibabu@ti.com> 652f2acc5SB, Ravi * 752f2acc5SB, Ravi * SPDX-License-Identifier: GPL-2.0+ 852f2acc5SB, Ravi */ 952f2acc5SB, Ravi #include <common.h> 1052f2acc5SB, Ravi #include <spl.h> 1152f2acc5SB, Ravi #include <linux/compiler.h> 1252f2acc5SB, Ravi #include <errno.h> 1352f2acc5SB, Ravi #include <watchdog.h> 1452f2acc5SB, Ravi #include <console.h> 1552f2acc5SB, Ravi #include <g_dnl.h> 1652f2acc5SB, Ravi #include <usb.h> 1752f2acc5SB, Ravi #include <dfu.h> 1852f2acc5SB, Ravi #include <environment.h> 1952f2acc5SB, Ravi 2052f2acc5SB, Ravi static int run_dfu(int usb_index, char *interface, char *devstring) 2152f2acc5SB, Ravi { 2252f2acc5SB, Ravi int ret; 2352f2acc5SB, Ravi 2452f2acc5SB, Ravi ret = dfu_init_env_entities(interface, devstring); 2552f2acc5SB, Ravi if (ret) { 2652f2acc5SB, Ravi dfu_free_entities(); 2752f2acc5SB, Ravi goto exit; 2852f2acc5SB, Ravi } 2952f2acc5SB, Ravi 3052f2acc5SB, Ravi run_usb_dnl_gadget(usb_index, "usb_dnl_dfu"); 3152f2acc5SB, Ravi exit: 3252f2acc5SB, Ravi dfu_free_entities(); 3352f2acc5SB, Ravi return ret; 3452f2acc5SB, Ravi } 3552f2acc5SB, Ravi 3652f2acc5SB, Ravi int spl_dfu_cmd(int usbctrl, char *dfu_alt_info, char *interface, char *devstr) 3752f2acc5SB, Ravi { 3852f2acc5SB, Ravi char *str_env; 3952f2acc5SB, Ravi int ret; 4052f2acc5SB, Ravi 4152f2acc5SB, Ravi /* set default environment */ 4252f2acc5SB, Ravi set_default_env(0); 4352f2acc5SB, Ravi str_env = getenv(dfu_alt_info); 4452f2acc5SB, Ravi if (!str_env) { 4552f2acc5SB, Ravi error("\"dfu_alt_info\" env variable not defined!\n"); 4652f2acc5SB, Ravi return -EINVAL; 4752f2acc5SB, Ravi } 4852f2acc5SB, Ravi 49*382bee57SSimon Glass ret = env_set("dfu_alt_info", str_env); 5052f2acc5SB, Ravi if (ret) { 5152f2acc5SB, Ravi error("unable to set env variable \"dfu_alt_info\"!\n"); 5252f2acc5SB, Ravi return -EINVAL; 5352f2acc5SB, Ravi } 5452f2acc5SB, Ravi 5552f2acc5SB, Ravi /* invoke dfu command */ 5652f2acc5SB, Ravi return run_dfu(usbctrl, interface, devstr); 5752f2acc5SB, Ravi } 58