TFTP transfers fail when tftpblocksize is set to 8192 or larger due to
insufficient buffer resources for IP fragment reassembly.

Adjust PBUF_POOL_SIZE and IP_REASS_MAX_PBUFS based on
CONFIG_TFTP_BLOCKSIZE to support larger TFTP transfers
while keeping memory usage efficient.

- CONFIG_TFTP_BLOCKSIZE >= 12288:PBUF_POOL_SIZE=18, IP_REASS_MAX_PBUFS=12

- CONFIG_TFTP_BLOCKSIZE >= 8192:PBUF_POOL_SIZE=12, IP_REASS_MAX_PBUFS=6

- CONFIG_TFTP_BLOCKSIZE undefined: PBUF_POOL_SIZE=8, IP_REASS_MAX_PBUFS=4

Signed-off-by: Pranav Tilak <[email protected]>
---
 lib/lwip/u-boot/lwipopts.h | 15 +++++++++++++++
 1 file changed, 15 insertions(+)

diff --git a/lib/lwip/u-boot/lwipopts.h b/lib/lwip/u-boot/lwipopts.h
index e8a2c9d7a0a..b4ff31096fe 100644
--- a/lib/lwip/u-boot/lwipopts.h
+++ b/lib/lwip/u-boot/lwipopts.h
@@ -65,7 +65,14 @@
 #define MEM_ALIGNMENT                   8
 
 #define MEMP_NUM_TCP_SEG                16
+
+#if defined(CONFIG_TFTP_BLOCKSIZE) && CONFIG_TFTP_BLOCKSIZE >= 12288
+#define PBUF_POOL_SIZE                  18
+#elif defined(CONFIG_TFTP_BLOCKSIZE) && CONFIG_TFTP_BLOCKSIZE >= 8192
+#define PBUF_POOL_SIZE                  12
+#else
 #define PBUF_POOL_SIZE                  8
+#endif
 
 #define LWIP_ARP                        1
 #define ARP_TABLE_SIZE                  4
@@ -76,7 +83,15 @@
 #define IP_REASSEMBLY                   1
 #define IP_FRAG                         1
 #define IP_REASS_MAXAGE                 3
+
+#if defined(CONFIG_TFTP_BLOCKSIZE) && CONFIG_TFTP_BLOCKSIZE >= 12288
+#define IP_REASS_MAX_PBUFS              12
+#elif defined(CONFIG_TFTP_BLOCKSIZE) && CONFIG_TFTP_BLOCKSIZE >= 8192
+#define IP_REASS_MAX_PBUFS              6
+#else
 #define IP_REASS_MAX_PBUFS              4
+#endif
+
 #define IP_FRAG_USES_STATIC_BUF         0
 
 #define IP_DEFAULT_TTL                  255
-- 
2.34.1

Reply via email to