]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
net: lwip: add TFTP_BLOCKSIZE
authorJerome Forissier <jerome.forissier@linaro.org>
Wed, 16 Oct 2024 10:04:13 +0000 (12:04 +0200)
committerTom Rini <trini@konsulko.com>
Wed, 16 Oct 2024 17:11:57 +0000 (11:11 -0600)
Add support for setting the TFTP block size. The default value (1468)
is fine for Ethernet and allows a better throughput than the TFTP
default (512), if the server supports the blksize option of course.

I tested this change with qemu_arm64_lwip_defconfig. The throughput is
now 875 KiB/s vs. 313 KiB/s before. That is still a low number, but I
think we can't expect more without implementing the windowsize option.

Signed-off-by: Jerome Forissier <jerome.forissier@linaro.org>
Reviewed-by: Ilias Apalodimas <ilias.apalodimas@linaro.org>
net/Kconfig
net/lwip/tftp.c

index 16a9de47e949985113c0730e76905bcb6cd6d804..76ab7d91eebbe7802a634a48c46dca45e8fc9f6d 100644 (file)
@@ -60,16 +60,6 @@ config SYS_FAULT_ECHO_LINK_DOWN
          this option is active, then CONFIG_SYS_FAULT_MII_ADDR also needs to
          be configured.
 
-config TFTP_BLOCKSIZE
-       int "TFTP block size"
-       default 1468
-       help
-         Default TFTP block size.
-         The MTU is typically 1500 for ethernet, so a TFTP block of
-         1468 (MTU minus eth.hdrs) provides a good throughput with
-         almost-MTU block sizes.
-         You can also activate CONFIG_IP_DEFRAG to set a larger block.
-
 config TFTP_PORT
        bool "Set TFTP UDP source/destination ports via the environment"
        help
@@ -254,6 +244,16 @@ config NET_RANDOM_ETHADDR
          generated. It will be saved to the appropriate environment variable,
          too.
 
+config TFTP_BLOCKSIZE
+       int "TFTP block size"
+       default 1468
+       help
+         Default TFTP block size.
+         The MTU is typically 1500 for ethernet, so a TFTP block of
+         1468 (MTU minus eth.hdrs) provides a good throughput with
+         almost-MTU block sizes.
+         You can also activate CONFIG_IP_DEFRAG to set a larger block.
+
 endif   # if NET || NET_LWIP
 
 config SYS_RX_ETH_BUFFER
index 26978643313df0e7a8322a846fd9dd1c39299493..f4d0a6aa19a9df0df14fba37ead9b80e4e1bc167 100644 (file)
@@ -139,6 +139,8 @@ static int tftp_loop(struct udevice *udev, ulong addr, char *fname,
        if (!(err == ERR_OK || err == ERR_USE))
                log_err("tftp_init_client err: %d\n", err);
 
+       tftp_client_set_blksize(CONFIG_TFTP_BLOCKSIZE);
+
        ctx.start_time = get_timer(0);
        err = tftp_get(&ctx, &srvip, srvport, fname, TFTP_MODE_OCTET);
        /* might return different errors, like routing problems */