summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorPranav Tilak <[email protected]>2026-03-10 18:28:25 +0530
committerTom Rini <[email protected]>2026-03-13 10:52:02 -0600
commit67586012490a4b2b4db6b79647aaf946f03eb767 (patch)
tree2a6bb5918dc1275df53d9cc98db78e83a4426cae /lib
parentb3ee14ea6d233a507a7983ccb5f1328cc8d683c2 (diff)
net: lwip: scale buffer pool size with TFTP block size
TFTP transfers fail when tftpblocksize is set to 8192 or larger due to insufficient buffer resources for IP fragment reassembly. Calculate PBUF_POOL_SIZE and IP_REASS_MAX_PBUFS dynamically based on CONFIG_TFTP_BLOCKSIZE using IP fragmentation boundaries (1480 usable bytes per fragment at 1500 MTU). The pool size includes headroom for TX, ARP, and protocol overhead, while ensuring PBUF_POOL_SIZE remains greater than IP_REASS_MAX_PBUFS as required by lwIP. Signed-off-by: Pranav Tilak <[email protected]>
Diffstat (limited to 'lib')
-rw-r--r--lib/lwip/u-boot/lwipopts.h16
1 files changed, 15 insertions, 1 deletions
diff --git a/lib/lwip/u-boot/lwipopts.h b/lib/lwip/u-boot/lwipopts.h
index 1550870fa86..8dae004f1a2 100644
--- a/lib/lwip/u-boot/lwipopts.h
+++ b/lib/lwip/u-boot/lwipopts.h
@@ -65,7 +65,21 @@
#define MEM_ALIGNMENT 8
#define MEMP_NUM_TCP_SEG 16
+
+/* IP fragmentation parameters for TFTP reassembly */
+#define IP_FRAG_MTU_USABLE 1480
+#define PBUF_POOL_HEADROOM 6
+#define PBUF_POOL_RESERVE 4
+#define TFTP_BLOCKSIZE_THRESHOLD 4096
+
+#if defined(CONFIG_TFTP_BLOCKSIZE) && (CONFIG_TFTP_BLOCKSIZE > TFTP_BLOCKSIZE_THRESHOLD)
+#define PBUF_POOL_SIZE (((CONFIG_TFTP_BLOCKSIZE + (IP_FRAG_MTU_USABLE - 1)) / \
+ IP_FRAG_MTU_USABLE) + PBUF_POOL_HEADROOM)
+#define IP_REASS_MAX_PBUFS (PBUF_POOL_SIZE - PBUF_POOL_RESERVE)
+#else
#define PBUF_POOL_SIZE 8
+#define IP_REASS_MAX_PBUFS 4
+#endif
#define LWIP_ARP 1
#define ARP_TABLE_SIZE 4
@@ -76,7 +90,7 @@
#define IP_REASSEMBLY 1
#define IP_FRAG 1
#define IP_REASS_MAXAGE 3
-#define IP_REASS_MAX_PBUFS 4
+
#define IP_FRAG_USES_STATIC_BUF 0
#define IP_DEFAULT_TTL 255