@@ -12,6 +12,7 @@
#include <g_dnl.h>
#include <fastboot.h>
#include <net.h>
+#include <net6.h>
#include <usb.h>
#include <watchdog.h>
#include <linux/stringify.h>
@@ -121,10 +122,23 @@ static int do_fastboot(struct cmd_tbl *cmdtp, int flag, int argc,
{
uintptr_t buf_addr = (uintptr_t)NULL;
size_t buf_size = 0;
+ bool is_ipv6_only = false;
+ bool is_usb = false;
+ bool is_udp = false;
+ bool is_tcp = false;
if (argc < 2)
return CMD_RET_USAGE;
+ if (IS_ENABLED(CONFIG_IPV6)) {
+ use_ip6 = false;
+ /* IPv6 parameter has to be always *last* */
+ if (!strcmp(argv[argc - 1], USE_IP6_CMD_PARAM)) {
+ is_ipv6_only = true;
+ --argc;
+ }
+ }
+
while (argc > 1 && **(argv + 1) == '-') {
char *arg = *++argv;
@@ -159,11 +173,18 @@ NXTARG:
fastboot_init((void *)buf_addr, buf_size);
- if (!strcmp(argv[1], "udp"))
+ is_usb = strcmp(argv[1], "usb") == 0;
+ is_udp = strcmp(argv[1], "udp") == 0;
+ is_tcp = strcmp(argv[1], "tcp") == 0;
+
+ if (is_ipv6_only && is_tcp)
+ use_ip6 = true;
+
+ if (is_udp)
return do_fastboot_udp(argc, argv, buf_addr, buf_size);
- if (!strcmp(argv[1], "tcp"))
+ if (is_tcp)
return do_fastboot_tcp(argc, argv, buf_addr, buf_size);
- if (!strcmp(argv[1], "usb")) {
+ if (is_usb) {
argv++;
argc--;
}
@@ -174,7 +195,7 @@ NXTARG:
U_BOOT_CMD(
fastboot, CONFIG_SYS_MAXARGS, 1, do_fastboot,
"run as a fastboot usb or udp device",
- "[-l addr] [-s size] usb <controller> | udp\n"
+ "[-l addr] [-s size] usb <controller> | udp [-ipv6] | tcp [-ipv6]\n"
"\taddr - address of buffer used during data transfers ("
__stringify(CONFIG_FASTBOOT_BUF_ADDR) ")\n"
"\tsize - size of buffer used during data transfers ("
@@ -177,17 +177,26 @@ configuration options:
In Action
---------
-Enter into fastboot by executing the fastboot command in U-Boot for either USB::
+Enter into fastboot by executing the fastboot command in U-Boot for either:
+
+USB::
=> fastboot usb 0
-or UDP::
+UDP::
=> fastboot udp
link up on port 0, speed 100, full duplex
Using ethernet@4a100000 device
Listening for fastboot command on 192.168.0.102
+or TCP::
+
+ => fastboot tcp [-ipv6]
+ Using ethernet@4a100000 device
+ Listening for fastboot command on 192.168.0.102
+ Listening for fastboot command on fe80:0000:0000:0000:5054:00ff:fe12:3456
+
On the client side you can fetch the bootloader version for instance::
$ fastboot getvar version-bootloader
new file mode 100644
@@ -0,0 +1,39 @@
+.. SPDX-License-Identifier: GPL-2.0+:
+
+fastboot command
+==========
+
+Synopis
+-------
+
+::
+
+ fastboot [-l addr] [-s size] usb <controller> | udp [-ipv6] | tcp [-ipv6]
+
+Description
+-----------
+
+The *fastboot* command allows to start fastboot usb/udp/tcp server to receive
+connections from host using fastboot protocol. For more information please refer to:
+`doc/android/fastboot.rst`.
+
+Examples
+--------
+
+USB::
+
+ => fastboot usb 0
+
+UDP::
+
+ => fastboot udp [-ipv6]
+ link up on port 0, speed 100, full duplex
+ Using ethernet@4a100000 device
+ Listening for fastboot command on 192.168.0.102
+
+TCP::
+
+ => fastboot tcp [-ipv6]
+ Using ethernet@4a100000 device
+ Listening for fastboot command on 192.168.0.102
+ Listening for fastboot command on fe80:0000:0000:0000:5054:00ff:fe12:3456