spl_dfu.c 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  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 <env.h>
  10. #include <spl.h>
  11. #include <linux/compiler.h>
  12. #include <errno.h>
  13. #include <watchdog.h>
  14. #include <console.h>
  15. #include <g_dnl.h>
  16. #include <usb.h>
  17. #include <dfu.h>
  18. static int run_dfu(int usb_index, char *interface, char *devstring)
  19. {
  20. int ret;
  21. ret = dfu_init_env_entities(interface, devstring);
  22. if (ret) {
  23. dfu_free_entities();
  24. goto exit;
  25. }
  26. run_usb_dnl_gadget(usb_index, "usb_dnl_dfu");
  27. exit:
  28. dfu_free_entities();
  29. return ret;
  30. }
  31. int spl_dfu_cmd(int usbctrl, char *dfu_alt_info, char *interface, char *devstr)
  32. {
  33. char *str_env;
  34. int ret;
  35. /* set default environment */
  36. env_set_default(NULL, 0);
  37. str_env = env_get(dfu_alt_info);
  38. if (!str_env) {
  39. pr_err("\"%s\" env variable not defined!\n", dfu_alt_info);
  40. return -EINVAL;
  41. }
  42. ret = env_set("dfu_alt_info", str_env);
  43. if (ret) {
  44. pr_err("unable to set env variable \"dfu_alt_info\"!\n");
  45. return -EINVAL;
  46. }
  47. /* invoke dfu command */
  48. return run_dfu(usbctrl, interface, devstr);
  49. }