cmd_dfu.c 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. /*
  2. * cmd_dfu.c -- dfu command
  3. *
  4. * Copyright (C) 2012 Samsung Electronics
  5. * authors: Andrzej Pietrasiewicz <andrzej.p@samsung.com>
  6. * Lukasz Majewski <l.majewski@samsung.com>
  7. *
  8. * SPDX-License-Identifier: GPL-2.0+
  9. */
  10. #include <common.h>
  11. #include <command.h>
  12. #include <malloc.h>
  13. #include <dfu.h>
  14. #include <asm/errno.h>
  15. #include <g_dnl.h>
  16. static int do_dfu(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
  17. {
  18. const char *str_env;
  19. char *s = "dfu";
  20. int ret, i = 0;
  21. char *env_bkp;
  22. if (argc < 3)
  23. return CMD_RET_USAGE;
  24. str_env = getenv("dfu_alt_info");
  25. if (str_env == NULL) {
  26. printf("%s: \"dfu_alt_info\" env variable not defined!\n",
  27. __func__);
  28. return CMD_RET_FAILURE;
  29. }
  30. env_bkp = strdup(str_env);
  31. ret = dfu_config_entities(env_bkp, argv[1],
  32. (int)simple_strtoul(argv[2], NULL, 10));
  33. if (ret)
  34. return CMD_RET_FAILURE;
  35. if (argc > 3 && strcmp(argv[3], "list") == 0) {
  36. dfu_show_entities();
  37. goto done;
  38. }
  39. #ifdef CONFIG_TRATS
  40. board_usb_init();
  41. #endif
  42. g_dnl_register(s);
  43. while (1) {
  44. if (dfu_reset())
  45. /*
  46. * This extra number of usb_gadget_handle_interrupts()
  47. * calls is necessary to assure correct transmission
  48. * completion with dfu-util
  49. */
  50. if (++i == 10)
  51. goto exit;
  52. if (ctrlc())
  53. goto exit;
  54. usb_gadget_handle_interrupts();
  55. }
  56. exit:
  57. g_dnl_unregister();
  58. done:
  59. dfu_free_entities();
  60. free(env_bkp);
  61. if (dfu_reset())
  62. run_command("reset", 0);
  63. return CMD_RET_SUCCESS;
  64. }
  65. U_BOOT_CMD(dfu, CONFIG_SYS_MAXARGS, 1, do_dfu,
  66. "Device Firmware Upgrade",
  67. "<interface> <dev> [list]\n"
  68. " - device firmware upgrade on a device <dev>\n"
  69. " attached to interface <interface>\n"
  70. " [list] - list available alt settings"
  71. );