Re: [PATCH] gianfar: prevent fragmentation in DSA environments
From: Andrew Lunn <andrew@lunn.ch>
Date: 2016-08-19 14:59:03
On Fri, Aug 19, 2016 at 11:16:14AM +0200, Zefir Kurtisi wrote:
quoted hunk ↗ jump to hunk
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 <redacted> --- 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