]> git.ipfire.org Git - people/ms/u-boot.git/blob - common/cmd_fastboot.c
dfu: command: Extend "dfu" command to handle receiving data via TFTP
[people/ms/u-boot.git] / common / cmd_fastboot.c
1 /*
2 * Copyright 2008 - 2009 Windriver, <www.windriver.com>
3 * Author: Tom Rix <Tom.Rix@windriver.com>
4 *
5 * (C) Copyright 2014 Linaro, Ltd.
6 * Rob Herring <robh@kernel.org>
7 *
8 * SPDX-License-Identifier: GPL-2.0+
9 */
10 #include <common.h>
11 #include <command.h>
12 #include <g_dnl.h>
13 #include <usb.h>
14
15 static int do_fastboot(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
16 {
17 int controller_index;
18 char *usb_controller;
19 int ret;
20
21 if (argc < 2)
22 return CMD_RET_USAGE;
23
24 usb_controller = argv[1];
25 controller_index = simple_strtoul(usb_controller, NULL, 0);
26
27 ret = board_usb_init(controller_index, USB_INIT_DEVICE);
28 if (ret) {
29 error("USB init failed: %d", ret);
30 return CMD_RET_FAILURE;
31 }
32
33 g_dnl_clear_detach();
34 ret = g_dnl_register("usb_dnl_fastboot");
35 if (ret)
36 return ret;
37
38 if (!g_dnl_board_usb_cable_connected()) {
39 puts("\rUSB cable not detected.\n" \
40 "Command exit.\n");
41 ret = CMD_RET_FAILURE;
42 goto exit;
43 }
44
45 while (1) {
46 if (g_dnl_detach())
47 break;
48 if (ctrlc())
49 break;
50 usb_gadget_handle_interrupts(controller_index);
51 }
52
53 ret = CMD_RET_SUCCESS;
54
55 exit:
56 g_dnl_unregister();
57 g_dnl_clear_detach();
58 board_usb_cleanup(controller_index, USB_INIT_DEVICE);
59
60 return ret;
61 }
62
63 U_BOOT_CMD(
64 fastboot, 2, 1, do_fastboot,
65 "use USB Fastboot protocol",
66 "<USB_controller>\n"
67 " - run as a fastboot usb device"
68 );