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