Home | History | Annotate | Download | only in spl
      1 // SPDX-License-Identifier: GPL-2.0+
      2 /*
      3  * (C) Copyright 2016
      4  * Texas Instruments, <www.ti.com>
      5  *
      6  * Ravi B <ravibabu (at) 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