net: mvpp2: set the Rx FIFO size depending on the port speeds for PPv2.2
The Rx FIFO size was set to the same value for all ports. This patch sets it depending on the maximum speed a given port can handle. This is only working for PPv2.2. Signed-off-by: Antoine Tenart <antoine.tenart@free-electrons.com> Signed-off-by: David S. Miller <davem@davemloft.net>hifive-unleashed-5.1
parent
26a8ba2c8b
commit
2d1d7df8a3
|
@ -504,9 +504,13 @@
|
|||
#define MVPP2_TX_DESC_ALIGN (MVPP2_DESC_ALIGNED_SIZE - 1)
|
||||
|
||||
/* RX FIFO constants */
|
||||
#define MVPP2_RX_FIFO_PORT_DATA_SIZE 0x2000
|
||||
#define MVPP2_RX_FIFO_PORT_ATTR_SIZE 0x80
|
||||
#define MVPP2_RX_FIFO_PORT_MIN_PKT 0x80
|
||||
#define MVPP2_RX_FIFO_PORT_DATA_SIZE_32KB 0x8000
|
||||
#define MVPP2_RX_FIFO_PORT_DATA_SIZE_8KB 0x2000
|
||||
#define MVPP2_RX_FIFO_PORT_DATA_SIZE_4KB 0x1000
|
||||
#define MVPP2_RX_FIFO_PORT_ATTR_SIZE_32KB 0x200
|
||||
#define MVPP2_RX_FIFO_PORT_ATTR_SIZE_8KB 0x80
|
||||
#define MVPP2_RX_FIFO_PORT_ATTR_SIZE_4KB 0x40
|
||||
#define MVPP2_RX_FIFO_PORT_MIN_PKT 0x80
|
||||
|
||||
/* RX buffer constants */
|
||||
#define MVPP2_SKB_SHINFO_SIZE \
|
||||
|
@ -7764,9 +7768,42 @@ static void mvpp2_rx_fifo_init(struct mvpp2 *priv)
|
|||
|
||||
for (port = 0; port < MVPP2_MAX_PORTS; port++) {
|
||||
mvpp2_write(priv, MVPP2_RX_DATA_FIFO_SIZE_REG(port),
|
||||
MVPP2_RX_FIFO_PORT_DATA_SIZE);
|
||||
MVPP2_RX_FIFO_PORT_DATA_SIZE_4KB);
|
||||
mvpp2_write(priv, MVPP2_RX_ATTR_FIFO_SIZE_REG(port),
|
||||
MVPP2_RX_FIFO_PORT_ATTR_SIZE);
|
||||
MVPP2_RX_FIFO_PORT_ATTR_SIZE_4KB);
|
||||
}
|
||||
|
||||
mvpp2_write(priv, MVPP2_RX_MIN_PKT_SIZE_REG,
|
||||
MVPP2_RX_FIFO_PORT_MIN_PKT);
|
||||
mvpp2_write(priv, MVPP2_RX_FIFO_INIT_REG, 0x1);
|
||||
}
|
||||
|
||||
static void mvpp22_rx_fifo_init(struct mvpp2 *priv)
|
||||
{
|
||||
int port;
|
||||
|
||||
/* The FIFO size parameters are set depending on the maximum speed a
|
||||
* given port can handle:
|
||||
* - Port 0: 10Gbps
|
||||
* - Port 1: 2.5Gbps
|
||||
* - Ports 2 and 3: 1Gbps
|
||||
*/
|
||||
|
||||
mvpp2_write(priv, MVPP2_RX_DATA_FIFO_SIZE_REG(0),
|
||||
MVPP2_RX_FIFO_PORT_DATA_SIZE_32KB);
|
||||
mvpp2_write(priv, MVPP2_RX_ATTR_FIFO_SIZE_REG(0),
|
||||
MVPP2_RX_FIFO_PORT_ATTR_SIZE_32KB);
|
||||
|
||||
mvpp2_write(priv, MVPP2_RX_DATA_FIFO_SIZE_REG(1),
|
||||
MVPP2_RX_FIFO_PORT_DATA_SIZE_8KB);
|
||||
mvpp2_write(priv, MVPP2_RX_ATTR_FIFO_SIZE_REG(1),
|
||||
MVPP2_RX_FIFO_PORT_ATTR_SIZE_8KB);
|
||||
|
||||
for (port = 2; port < MVPP2_MAX_PORTS; port++) {
|
||||
mvpp2_write(priv, MVPP2_RX_DATA_FIFO_SIZE_REG(port),
|
||||
MVPP2_RX_FIFO_PORT_DATA_SIZE_4KB);
|
||||
mvpp2_write(priv, MVPP2_RX_ATTR_FIFO_SIZE_REG(port),
|
||||
MVPP2_RX_FIFO_PORT_ATTR_SIZE_4KB);
|
||||
}
|
||||
|
||||
mvpp2_write(priv, MVPP2_RX_MIN_PKT_SIZE_REG,
|
||||
|
@ -7870,7 +7907,10 @@ static int mvpp2_init(struct platform_device *pdev, struct mvpp2 *priv)
|
|||
}
|
||||
|
||||
/* Rx Fifo Init */
|
||||
mvpp2_rx_fifo_init(priv);
|
||||
if (priv->hw_version == MVPP21)
|
||||
mvpp2_rx_fifo_init(priv);
|
||||
else
|
||||
mvpp22_rx_fifo_init(priv);
|
||||
|
||||
if (priv->hw_version == MVPP21)
|
||||
writel(MVPP2_EXT_GLOBAL_CTRL_DEFAULT,
|
||||
|
|
Loading…
Reference in New Issue