[PATCH] net: lwip: scale buffer pool size with TFTP block size

Jonas Karlman jonas at kwiboo.se
Mon Mar 9 22:19:28 CET 2026


Hi,

On 3/9/2026 2:19 PM, Vinay Tilak, Pranav wrote:
> [Public]
> 
> Hi Jerome,
> 
>> -----Original Message-----
>> From: Jerome Forissier <jerome.forissier at arm.com>
>> Sent: Monday, March 9, 2026 1:38 PM
>> To: Vinay Tilak, Pranav <Pranav.VinayTilak at amd.com>; u-boot at lists.denx.de;
>> Simek, Michal <michal.simek at amd.com>
>> Cc: git (AMD-Xilinx) <git at amd.com>; Begari, Padmarao
>> <Padmarao.Begari at amd.com>; Tom Rini <trini at konsulko.com>;
>> nd at arm.com
>> Subject: Re: [PATCH] net: lwip: scale buffer pool size with TFTP block size
>>
>> Caution: This message originated from an External Source. Use proper caution
>> when opening attachments, clicking links, or responding.
>>
>>
>> Hi Pranav,
>>
>> On 05/03/2026 07:40, Pranav Tilak wrote:
>>> 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
>>
>> How are these values computed? Could you find a formula instead of using
>> #if/#elif/#else/endif?
> 
> We can use this formula for calculating the values of PBUF_POOL_SIZE and IP_REASS_MAX_PBUFS.
> 1500 (MTU) - 20 (IP header) = 1480 usable bytes/fragments.
> IP_REASS_MAX_PBUFS = (((CONFIG_TFTP_BLOCKSIZE) + 1479) / 1480) + 2
> [ceiling division to calculate fragment count + some headroom for next block sync].
> PBUF_POOL_SIZE = (IP_REASS_MAX_PBUFS) * 2
> [Reassembly buffers * 2].

The lwip comment for IP_REASS_MAX_PBUFS only suggest PBUF_POOL_SIZE is
more than 2x IP_REASS_MAX_PBUFS when both IPv4 and IPv6 is enabled.

Maybe something like following should work?

  #if defined(CONFIG_TFTP_BLOCKSIZE) && CONFIG_TFTP_BLOCKSIZE > 4096
  #define PBUF_POOL_SIZE                  (((CONFIG_TFTP_BLOCKSIZE + 1479) / 1480) + 6)
  #else
  [...]
  #define IP_REASS_MAX_PBUFS              (PBUF_POOL_SIZE - 4)

That seem to work great when I test with TFTP_BLOCKSIZE=16352 on my
Rockchip boards together with a PBUF_POOL_BUFSIZE fix [1].

[1] https://lore.kernel.org/u-boot/20260309210642.522626-1-jonas@kwiboo.se/

Regards,
Jonas

> 
> We can scale only if CONFIG_TFTP_BLOCKSIZE > 4096 else use the default values.
>>
>> Thanks,
>> --
>> Jerome
>>
>>> Signed-off-by: Pranav Tilak <pranav.vinaytilak at amd.com>
>>> ---
>>>  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
> 
> Thanks,
> Pranav Tilak



More information about the U-Boot mailing list