12e192b24SSimon Glass /* 22e192b24SSimon Glass * cmd_thordown.c -- USB TIZEN "THOR" Downloader gadget 32e192b24SSimon Glass * 42e192b24SSimon Glass * Copyright (C) 2013 Lukasz Majewski <l.majewski@samsung.com> 52e192b24SSimon Glass * All rights reserved. 62e192b24SSimon Glass * 72e192b24SSimon Glass * SPDX-License-Identifier: GPL-2.0+ 82e192b24SSimon Glass */ 92e192b24SSimon Glass 102e192b24SSimon Glass #include <common.h> 112e192b24SSimon Glass #include <thor.h> 122e192b24SSimon Glass #include <dfu.h> 132e192b24SSimon Glass #include <g_dnl.h> 142e192b24SSimon Glass #include <usb.h> 152e192b24SSimon Glass 162e192b24SSimon Glass int do_thor_down(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) 172e192b24SSimon Glass { 182e192b24SSimon Glass if (argc < 4) 192e192b24SSimon Glass return CMD_RET_USAGE; 202e192b24SSimon Glass 212e192b24SSimon Glass char *usb_controller = argv[1]; 222e192b24SSimon Glass char *interface = argv[2]; 232e192b24SSimon Glass char *devstring = argv[3]; 242e192b24SSimon Glass 252e192b24SSimon Glass int ret; 262e192b24SSimon Glass 272e192b24SSimon Glass puts("TIZEN \"THOR\" Downloader\n"); 282e192b24SSimon Glass 292e192b24SSimon Glass ret = dfu_init_env_entities(interface, devstring); 302e192b24SSimon Glass if (ret) 312e192b24SSimon Glass goto done; 322e192b24SSimon Glass 332e192b24SSimon Glass int controller_index = simple_strtoul(usb_controller, NULL, 0); 342e192b24SSimon Glass ret = board_usb_init(controller_index, USB_INIT_DEVICE); 352e192b24SSimon Glass if (ret) { 36*90aa625cSMasahiro Yamada pr_err("USB init failed: %d", ret); 372e192b24SSimon Glass ret = CMD_RET_FAILURE; 382e192b24SSimon Glass goto exit; 392e192b24SSimon Glass } 402e192b24SSimon Glass 412e192b24SSimon Glass g_dnl_register("usb_dnl_thor"); 422e192b24SSimon Glass 432e192b24SSimon Glass ret = thor_init(); 442e192b24SSimon Glass if (ret) { 45*90aa625cSMasahiro Yamada pr_err("THOR DOWNLOAD failed: %d", ret); 462e192b24SSimon Glass ret = CMD_RET_FAILURE; 472e192b24SSimon Glass goto exit; 482e192b24SSimon Glass } 492e192b24SSimon Glass 502e192b24SSimon Glass ret = thor_handle(); 512e192b24SSimon Glass if (ret) { 52*90aa625cSMasahiro Yamada pr_err("THOR failed: %d", ret); 532e192b24SSimon Glass ret = CMD_RET_FAILURE; 542e192b24SSimon Glass goto exit; 552e192b24SSimon Glass } 562e192b24SSimon Glass 572e192b24SSimon Glass exit: 582e192b24SSimon Glass g_dnl_unregister(); 592e192b24SSimon Glass board_usb_cleanup(controller_index, USB_INIT_DEVICE); 602e192b24SSimon Glass done: 612e192b24SSimon Glass dfu_free_entities(); 622e192b24SSimon Glass 632e192b24SSimon Glass return ret; 642e192b24SSimon Glass } 652e192b24SSimon Glass 662e192b24SSimon Glass U_BOOT_CMD(thordown, CONFIG_SYS_MAXARGS, 1, do_thor_down, 672e192b24SSimon Glass "TIZEN \"THOR\" downloader", 682e192b24SSimon Glass "<USB_controller> <interface> <dev>\n" 692e192b24SSimon Glass " - device software upgrade via LTHOR TIZEN dowload\n" 702e192b24SSimon Glass " program via <USB_controller> on device <dev>,\n" 712e192b24SSimon Glass " attached to interface <interface>\n" 722e192b24SSimon Glass ); 73