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

Vinay Tilak, Pranav Pranav.VinayTilak at amd.com
Mon Mar 9 14:19:38 CET 2026


[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].

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