Johnny Hughes
2019-02-04 c1f36c28393a7bb126cbf436cd6a4077a5b5c313
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
From cd2a3c67f9810ec7f6f873985655ebbba820c9ce Mon Sep 17 00:00:00 2001
From: Yan Markman <ymarkman@marvell.com>
Date: Mon, 11 Dec 2017 09:13:26 +0100
Subject: [PATCH 17/46] net: mvpp2: split the max ring size from the default
 one
 
The Rx/Tx ring sizes can be adjusted thanks to ethtool given specific
network needs. This commit splits the default ring size from its max
value to allow ethtool to vary the parameters in both ways.
 
Signed-off-by: Yan Markman <ymarkman@marvell.com>
[Antoine: commit message]
Signed-off-by: Antoine Tenart <antoine.tenart@free-electrons.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
 
(cherry picked from commit 7cf87e4a5c2b120967b3fa3a1beb7123eb704d85)
Signed-off-by: Marcin Wojtas <mw@semihalf.com>
---
 drivers/net/ethernet/marvell/mvpp2.c | 24 +++++++++++++-----------
 1 file changed, 13 insertions(+), 11 deletions(-)
 
diff --git a/drivers/net/ethernet/marvell/mvpp2.c b/drivers/net/ethernet/marvell/mvpp2.c
index f203f08..5e88403 100644
--- a/drivers/net/ethernet/marvell/mvpp2.c
+++ b/drivers/net/ethernet/marvell/mvpp2.c
@@ -504,10 +504,12 @@
 #define MVPP2_DEFAULT_RXQ        4
 
 /* Max number of Rx descriptors */
-#define MVPP2_MAX_RXD            128
+#define MVPP2_MAX_RXD_MAX        1024
+#define MVPP2_MAX_RXD_DFLT        128
 
 /* Max number of Tx descriptors */
-#define MVPP2_MAX_TXD            1024
+#define MVPP2_MAX_TXD_MAX        2048
+#define MVPP2_MAX_TXD_DFLT        1024
 
 /* Amount of Tx descriptors that can be reserved at once by CPU */
 #define MVPP2_CPU_DESC_CHUNK        64
@@ -6836,13 +6838,13 @@ static int mvpp2_check_ringparam_valid(struct net_device *dev,
     if (ring->rx_pending == 0 || ring->tx_pending == 0)
         return -EINVAL;
 
-    if (ring->rx_pending > MVPP2_MAX_RXD)
-        new_rx_pending = MVPP2_MAX_RXD;
+    if (ring->rx_pending > MVPP2_MAX_RXD_MAX)
+        new_rx_pending = MVPP2_MAX_RXD_MAX;
     else if (!IS_ALIGNED(ring->rx_pending, 16))
         new_rx_pending = ALIGN(ring->rx_pending, 16);
 
-    if (ring->tx_pending > MVPP2_MAX_TXD)
-        new_tx_pending = MVPP2_MAX_TXD;
+    if (ring->tx_pending > MVPP2_MAX_TXD_MAX)
+        new_tx_pending = MVPP2_MAX_TXD_MAX;
     else if (!IS_ALIGNED(ring->tx_pending, 32))
         new_tx_pending = ALIGN(ring->tx_pending, 32);
 
@@ -7344,8 +7346,8 @@ static void mvpp2_ethtool_get_ringparam(struct net_device *dev,
 {
     struct mvpp2_port *port = netdev_priv(dev);
 
-    ring->rx_max_pending = MVPP2_MAX_RXD;
-    ring->tx_max_pending = MVPP2_MAX_TXD;
+    ring->rx_max_pending = MVPP2_MAX_RXD_MAX;
+    ring->tx_max_pending = MVPP2_MAX_TXD_MAX;
     ring->rx_pending = port->rx_ring_size;
     ring->tx_pending = port->tx_ring_size;
 }
@@ -7792,7 +7794,7 @@ static int mvpp2_port_probe(struct platform_device *pdev,
         goto err_free_netdev;
     }
 
-    dev->tx_queue_len = MVPP2_MAX_TXD;
+    dev->tx_queue_len = MVPP2_MAX_TXD_MAX;
     dev->watchdog_timeo = 5 * HZ;
     dev->netdev_ops = &mvpp2_netdev_ops;
     dev->ethtool_ops = &mvpp2_eth_tool_ops;
@@ -7875,8 +7877,8 @@ static int mvpp2_port_probe(struct platform_device *pdev,
 
     mvpp2_port_copy_mac_addr(dev, priv, port_node, &mac_from);
 
-    port->tx_ring_size = MVPP2_MAX_TXD;
-    port->rx_ring_size = MVPP2_MAX_RXD;
+    port->tx_ring_size = MVPP2_MAX_TXD_DFLT;
+    port->rx_ring_size = MVPP2_MAX_RXD_DFLT;
     SET_NETDEV_DEV(dev, &pdev->dev);
 
     err = mvpp2_port_init(port);
-- 
2.7.4