Blame view
cmd/fastboot.c
3.58 KB
83d290c56 SPDX: Convert all... |
1 |
// SPDX-License-Identifier: GPL-2.0+ |
3aab70afc usb/gadget: add t... |
2 3 4 5 6 7 |
/* * Copyright 2008 - 2009 Windriver, <www.windriver.com> * Author: Tom Rix <Tom.Rix@windriver.com> * * (C) Copyright 2014 Linaro, Ltd. * Rob Herring <robh@kernel.org> |
3aab70afc usb/gadget: add t... |
8 9 10 |
*/ #include <common.h> #include <command.h> |
24b852a7a Move console defi... |
11 |
#include <console.h> |
3aab70afc usb/gadget: add t... |
12 |
#include <g_dnl.h> |
f73a7df98 net: fastboot: Me... |
13 14 |
#include <fastboot.h> #include <net.h> |
8d2f0039f usb: board_usb_in... |
15 |
#include <usb.h> |
731785df0 cmd: fastboot: ha... |
16 |
#include <watchdog.h> |
3aab70afc usb/gadget: add t... |
17 |
|
f73a7df98 net: fastboot: Me... |
18 19 |
static int do_fastboot_udp(int argc, char *const argv[], uintptr_t buf_addr, size_t buf_size) |
3aab70afc usb/gadget: add t... |
20 |
{ |
f73a7df98 net: fastboot: Me... |
21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
#if CONFIG_IS_ENABLED(UDP_FUNCTION_FASTBOOT) int err = net_loop(FASTBOOT); if (err < 0) { printf("fastboot udp error: %d ", err); return CMD_RET_FAILURE; } return CMD_RET_SUCCESS; #else pr_err("Fastboot UDP not enabled "); return CMD_RET_FAILURE; #endif } static int do_fastboot_usb(int argc, char *const argv[], uintptr_t buf_addr, size_t buf_size) { #if CONFIG_IS_ENABLED(USB_FUNCTION_FASTBOOT) |
8d2f0039f usb: board_usb_in... |
42 43 |
int controller_index; char *usb_controller; |
aa51579f9 cmd: fastboot: Va... |
44 |
char *endp; |
3aab70afc usb/gadget: add t... |
45 |
int ret; |
2b6fd3da6 MLK-22357-2 sdp/f... |
46 |
int index; |
3aab70afc usb/gadget: add t... |
47 |
|
8d2f0039f usb: board_usb_in... |
48 49 |
if (argc < 2) return CMD_RET_USAGE; |
2b6fd3da6 MLK-22357-2 sdp/f... |
50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
if (!strcmp(argv[1], "auto")) { index = board_usb_gadget_port_auto(); if (index >= 0) controller_index = index; else return CMD_RET_USAGE; } else { usb_controller = argv[1]; controller_index = simple_strtoul(usb_controller, &endp, 0); if (*endp != '\0') { pr_err("Error: Wrong USB controller index format "); return CMD_RET_FAILURE; } |
9b149c2a2 MLK-18591-3 andro... |
64 |
#ifdef CONFIG_FASTBOOT_USB_DEV |
2b6fd3da6 MLK-22357-2 sdp/f... |
65 |
controller_index = CONFIG_FASTBOOT_USB_DEV; |
9b149c2a2 MLK-18591-3 andro... |
66 |
#endif |
2b6fd3da6 MLK-22357-2 sdp/f... |
67 |
} |
8d2f0039f usb: board_usb_in... |
68 |
|
a06955ae1 usb: gadget: Do n... |
69 |
ret = usb_gadget_initialize(controller_index); |
8d2f0039f usb: board_usb_in... |
70 |
if (ret) { |
71002b508 cmd: add missing ... |
71 72 |
pr_err("USB init failed: %d ", ret); |
8d2f0039f usb: board_usb_in... |
73 74 |
return CMD_RET_FAILURE; } |
267abc626 fastboot: add sup... |
75 |
g_dnl_clear_detach(); |
3aab70afc usb/gadget: add t... |
76 77 78 |
ret = g_dnl_register("usb_dnl_fastboot"); if (ret) return ret; |
7c23bcb93 fastboot: Add USB... |
79 80 81 82 83 |
if (!g_dnl_board_usb_cable_connected()) { puts("\rUSB cable not detected. " \ "Command exit. "); |
8d2f0039f usb: board_usb_in... |
84 85 |
ret = CMD_RET_FAILURE; goto exit; |
7c23bcb93 fastboot: Add USB... |
86 |
} |
3aab70afc usb/gadget: add t... |
87 |
while (1) { |
267abc626 fastboot: add sup... |
88 89 |
if (g_dnl_detach()) break; |
3aab70afc usb/gadget: add t... |
90 91 |
if (ctrlc()) break; |
731785df0 cmd: fastboot: ha... |
92 |
WATCHDOG_RESET(); |
eca76b742 fastboot: Dynamic... |
93 |
usb_gadget_handle_interrupts(controller_index); |
3aab70afc usb/gadget: add t... |
94 |
} |
8d2f0039f usb: board_usb_in... |
95 96 97 |
ret = CMD_RET_SUCCESS; exit: |
3aab70afc usb/gadget: add t... |
98 |
g_dnl_unregister(); |
267abc626 fastboot: add sup... |
99 |
g_dnl_clear_detach(); |
a06955ae1 usb: gadget: Do n... |
100 |
usb_gadget_release(controller_index); |
8d2f0039f usb: board_usb_in... |
101 102 |
return ret; |
f73a7df98 net: fastboot: Me... |
103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 |
#else pr_err("Fastboot USB not enabled "); return CMD_RET_FAILURE; #endif } static int do_fastboot(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[]) { uintptr_t buf_addr = (uintptr_t)NULL; size_t buf_size = 0; if (argc < 2) return CMD_RET_USAGE; while (argc > 1 && **(argv + 1) == '-') { char *arg = *++argv; --argc; while (*++arg) { switch (*arg) { case 'l': if (--argc <= 0) return CMD_RET_USAGE; buf_addr = simple_strtoul(*++argv, NULL, 16); goto NXTARG; case 's': if (--argc <= 0) return CMD_RET_USAGE; buf_size = simple_strtoul(*++argv, NULL, 16); goto NXTARG; default: return CMD_RET_USAGE; } } NXTARG: ; } |
aa51579f9 cmd: fastboot: Va... |
143 144 145 146 147 148 |
/* Handle case when USB controller param is just '-' */ if (argc == 1) { pr_err("Error: Incorrect USB controller index "); return CMD_RET_USAGE; } |
f73a7df98 net: fastboot: Me... |
149 150 151 152 153 154 155 156 157 158 159 |
fastboot_init((void *)buf_addr, buf_size); if (!strcmp(argv[1], "udp")) return do_fastboot_udp(argc, argv, buf_addr, buf_size); if (!strcmp(argv[1], "usb")) { argv++; argc--; } return do_fastboot_usb(argc, argv, buf_addr, buf_size); |
3aab70afc usb/gadget: add t... |
160 |
} |
f73a7df98 net: fastboot: Me... |
161 162 163 164 165 166 167 168 169 170 171 |
#ifdef CONFIG_SYS_LONGHELP static char fastboot_help_text[] = "[-l addr] [-s size] usb <controller> | udp " "\taddr - address of buffer used during data transfers (" __stringify(CONFIG_FASTBOOT_BUF_ADDR) ") " "\tsize - size of buffer used during data transfers (" __stringify(CONFIG_FASTBOOT_BUF_SIZE) ")" ; #endif |
3aab70afc usb/gadget: add t... |
172 |
U_BOOT_CMD( |
f73a7df98 net: fastboot: Me... |
173 174 |
fastboot, CONFIG_SYS_MAXARGS, 1, do_fastboot, "run as a fastboot usb or udp device", fastboot_help_text |
3aab70afc usb/gadget: add t... |
175 |
); |