Skip to content

Commit b323431

Browse files
zefir-kurtisidavem330
authored andcommitted
gianfar: prevent fragmentation in DSA environments
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. In that case, the largest Ethernet frame size of 1518 plus an optional GMAC_FCB_LEN of 8, and an additional padding of 8 to handle FSL_GIANFAR_DEV_HAS_TIMER totals to 1534 and nicely fit within the chosen MRBLR. Alas, if the eTSEC is attached to a DSA enabled switch, the (E)DSA header extension (4 or 8 bytes) causes every maximum sized frame to be fragmented by the hardware. This patch increases the maximum RX buffer size by 8 and rounds up to the next multiple of 64, which the hardware's defines as RX buffer granularity. Signed-off-by: Zefir Kurtisi <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent e83c674 commit b323431

File tree

1 file changed

+2
-1
lines changed

1 file changed

+2
-1
lines changed

drivers/net/ethernet/freescale/gianfar.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,8 @@ extern const char gfar_driver_version[];
100100
#define DEFAULT_RX_LFC_THR 16
101101
#define DEFAULT_LFC_PTVVAL 4
102102

103-
#define GFAR_RXB_SIZE 1536
103+
/* prevent fragmenation by HW in DSA environments */
104+
#define GFAR_RXB_SIZE roundup(1536 + 8, 64)
104105
#define GFAR_SKBFRAG_SIZE (RXBUF_ALIGNMENT + GFAR_RXB_SIZE \
105106
+ SKB_DATA_ALIGN(sizeof(struct skb_shared_info)))
106107
#define GFAR_RXB_TRUESIZE 2048

0 commit comments

Comments
 (0)