On Fri, Aug 19, 2016 at 11:16:14AM +0200, Zefir Kurtisi wrote: > The eTSEC register MRBLR defines the maximum space in > the RX buffers and is set to 1536 by gianfar. This > reasonably covers the common use case where the MTU > is kept at default 1500. > > Alas, if the eTSEC is attached to a DSA enabled switch, > the DSA header extension causes every maximum sized > frame to be fragmented by the hardware (1536 + 4). > > This patch increases the maximum RX buffer size by > RBUF_ALIGNMENT (64) octets. Since the driver uses a > half-page memory schema, this change does not > increase allocated memory but allows the hardware to > use 1600 bytes of the totally available 2048. > > Signed-off-by: Zefir Kurtisi <zefir.kurt...@neratec.com> > --- > drivers/net/ethernet/freescale/gianfar.h | 3 ++- > 1 file changed, 2 insertions(+), 1 deletion(-) > > diff --git a/drivers/net/ethernet/freescale/gianfar.h > b/drivers/net/ethernet/freescale/gianfar.h > index 373fd09..02b794b 100644 > --- a/drivers/net/ethernet/freescale/gianfar.h > +++ b/drivers/net/ethernet/freescale/gianfar.h > @@ -100,7 +100,8 @@ extern const char gfar_driver_version[]; > #define DEFAULT_RX_LFC_THR 16 > #define DEFAULT_LFC_PTVVAL 4 > > -#define GFAR_RXB_SIZE 1536 > +/* prevent fragmenation by HW in DSA environments */ > +#define GFAR_RXB_SIZE (1536 + RXBUF_ALIGNMENT)
Hi Zefir Using RXBUF_ALIGNMENT suggests this has something to do with alignment, not extra headers. How about /* Prevent fragmenation by HW when using extra headers like DSA */ #define GFAR_RXB_SIZE (1536 + 8) Andrew