Blame view
cmd/fastboot.c
3.32 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; |
8d2f0039f usb: board_usb_in... |
46 47 48 49 |
if (argc < 2) return CMD_RET_USAGE; usb_controller = argv[1]; |
aa51579f9 cmd: fastboot: Va... |
50 51 52 53 54 55 |
controller_index = simple_strtoul(usb_controller, &endp, 0); if (*endp != '\0') { pr_err("Error: Wrong USB controller index format "); return CMD_RET_FAILURE; } |
8d2f0039f usb: board_usb_in... |
56 |
|
a06955ae1 usb: gadget: Do n... |
57 |
ret = usb_gadget_initialize(controller_index); |
8d2f0039f usb: board_usb_in... |
58 |
if (ret) { |
71002b508 cmd: add missing ... |
59 60 |
pr_err("USB init failed: %d ", ret); |
8d2f0039f usb: board_usb_in... |
61 62 |
return CMD_RET_FAILURE; } |
267abc626 fastboot: add sup... |
63 |
g_dnl_clear_detach(); |
3aab70afc usb/gadget: add t... |
64 65 66 |
ret = g_dnl_register("usb_dnl_fastboot"); if (ret) return ret; |
7c23bcb93 fastboot: Add USB... |
67 68 69 70 71 |
if (!g_dnl_board_usb_cable_connected()) { puts("\rUSB cable not detected. " \ "Command exit. "); |
8d2f0039f usb: board_usb_in... |
72 73 |
ret = CMD_RET_FAILURE; goto exit; |
7c23bcb93 fastboot: Add USB... |
74 |
} |
3aab70afc usb/gadget: add t... |
75 |
while (1) { |
267abc626 fastboot: add sup... |
76 77 |
if (g_dnl_detach()) break; |
3aab70afc usb/gadget: add t... |
78 79 |
if (ctrlc()) break; |
731785df0 cmd: fastboot: ha... |
80 |
WATCHDOG_RESET(); |
eca76b742 fastboot: Dynamic... |
81 |
usb_gadget_handle_interrupts(controller_index); |
3aab70afc usb/gadget: add t... |
82 |
} |
8d2f0039f usb: board_usb_in... |
83 84 85 |
ret = CMD_RET_SUCCESS; exit: |
3aab70afc usb/gadget: add t... |
86 |
g_dnl_unregister(); |
267abc626 fastboot: add sup... |
87 |
g_dnl_clear_detach(); |
a06955ae1 usb: gadget: Do n... |
88 |
usb_gadget_release(controller_index); |
8d2f0039f usb: board_usb_in... |
89 90 |
return ret; |
f73a7df98 net: fastboot: Me... |
91 92 93 94 95 96 97 98 99 100 101 102 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 |
#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... |
131 132 133 134 135 136 |
/* 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... |
137 138 139 140 141 142 143 144 145 146 147 |
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... |
148 |
} |
f73a7df98 net: fastboot: Me... |
149 150 151 152 153 154 155 156 157 158 159 |
#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... |
160 |
U_BOOT_CMD( |
f73a7df98 net: fastboot: Me... |
161 162 |
fastboot, CONFIG_SYS_MAXARGS, 1, do_fastboot, "run as a fastboot usb or udp device", fastboot_help_text |
3aab70afc usb/gadget: add t... |
163 |
); |