| From 0f5f581b69f4fa42fcd06ee18d0c8f91331f610f Mon Sep 17 00:00:00 2001 |
| From: Harini Katakam <harini.katakam@xilinx.com> |
| Date: Wed, 5 Feb 2020 18:08:12 +0530 |
| Subject: [PATCH] net: macb: Limit maximum GEM TX length in TSO |
| |
| commit f822e9c4ffa511a5c681cf866287d9383a3b6f1b upstream. |
| |
| GEM_MAX_TX_LEN currently resolves to 0x3FF8 for any IP version supporting |
| TSO with full 14bits of length field in payload descriptor. But an IP |
| errata causes false amba_error (bit 6 of ISR) when length in payload |
| descriptors is specified above 16387. The error occurs because the DMA |
| falsely concludes that there is not enough space in SRAM for incoming |
| payload. These errors were observed continuously under stress of large |
| packets using iperf on a version where SRAM was 16K for each queue. This |
| errata will be documented shortly and affects all versions since TSO |
| functionality was added. Hence limit the max length to 0x3FC0 (rounded). |
| |
| Signed-off-by: Harini Katakam <harini.katakam@xilinx.com> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/drivers/net/ethernet/cadence/macb_main.c b/drivers/net/ethernet/cadence/macb_main.c |
| index cdce24e56b79..daa9a3216c36 100644 |
| --- a/drivers/net/ethernet/cadence/macb_main.c |
| +++ b/drivers/net/ethernet/cadence/macb_main.c |
| @@ -65,7 +65,11 @@ |
| /* Max length of transmit frame must be a multiple of 8 bytes */ |
| #define MACB_TX_LEN_ALIGN 8 |
| #define MACB_MAX_TX_LEN ((unsigned int)((1 << MACB_TX_FRMLEN_SIZE) - 1) & ~((unsigned int)(MACB_TX_LEN_ALIGN - 1))) |
| -#define GEM_MAX_TX_LEN ((unsigned int)((1 << GEM_TX_FRMLEN_SIZE) - 1) & ~((unsigned int)(MACB_TX_LEN_ALIGN - 1))) |
| +/* Limit maximum TX length as per Cadence TSO errata. This is to avoid a |
| + * false amba_error in TX path from the DMA assuming there is not enough |
| + * space in the SRAM (16KB) even when there is. |
| + */ |
| +#define GEM_MAX_TX_LEN (unsigned int)(0x3FC0) |
| |
| #define GEM_MTU_MIN_SIZE ETH_MIN_MTU |
| #define MACB_NETIF_LSO NETIF_F_TSO |
| -- |
| 2.7.4 |
| |