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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
From ed377c192631a3b01501f6332156328efa11babf Mon Sep 17 00:00:00 2001
From: Antoine Tenart <antoine.tenart@free-electrons.com>
Date: Mon, 30 Oct 2017 11:23:33 +0100
Subject: [PATCH 07/46] net: mvpp2: simplify the Tx desc set DMA logic
 
Two functions were always used to set the DMA addresses in Tx
descriptors, because this address is split into a base+offset in the
descriptors. A mask was used to come up with the base and offset
addresses and two functions were called, mvpp2_txdesc_dma_addr_set() and
mvpp2_txdesc_offset_set().
 
This patch moves the base+offset calculation logic to
mvpp2_txdesc_dma_addr_set(), and removes mvpp2_txdesc_offset_set() to
simplify things.
 
Signed-off-by: Antoine Tenart <antoine.tenart@free-electrons.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
(cherry picked from commit 6eb5d375cefcbd60ebb4251b150ea95d47140fe0)
Signed-off-by: Marcin Wojtas <mw@semihalf.com>
---
 drivers/net/ethernet/marvell/mvpp2.c | 39 ++++++++++++------------------------
 1 file changed, 13 insertions(+), 26 deletions(-)
 
diff --git a/drivers/net/ethernet/marvell/mvpp2.c b/drivers/net/ethernet/marvell/mvpp2.c
index 9a9decb..fb0d9c0 100644
--- a/drivers/net/ethernet/marvell/mvpp2.c
+++ b/drivers/net/ethernet/marvell/mvpp2.c
@@ -1290,13 +1290,20 @@ static void mvpp2_txdesc_dma_addr_set(struct mvpp2_port *port,
                       struct mvpp2_tx_desc *tx_desc,
                       dma_addr_t dma_addr)
 {
+    dma_addr_t addr, offset;
+
+    addr = dma_addr & ~MVPP2_TX_DESC_ALIGN;
+    offset = dma_addr & MVPP2_TX_DESC_ALIGN;
+
     if (port->priv->hw_version == MVPP21) {
-        tx_desc->pp21.buf_dma_addr = dma_addr;
+        tx_desc->pp21.buf_dma_addr = addr;
+        tx_desc->pp21.packet_offset = offset;
     } else {
-        u64 val = (u64)dma_addr;
+        u64 val = (u64)addr;
 
         tx_desc->pp22.buf_dma_addr_ptp &= ~GENMASK_ULL(40, 0);
         tx_desc->pp22.buf_dma_addr_ptp |= val;
+        tx_desc->pp22.packet_offset = offset;
     }
 }
 
@@ -1339,16 +1346,6 @@ static void mvpp2_txdesc_cmd_set(struct mvpp2_port *port,
         tx_desc->pp22.command = command;
 }
 
-static void mvpp2_txdesc_offset_set(struct mvpp2_port *port,
-                    struct mvpp2_tx_desc *tx_desc,
-                    unsigned int offset)
-{
-    if (port->priv->hw_version == MVPP21)
-        tx_desc->pp21.packet_offset = offset;
-    else
-        tx_desc->pp22.packet_offset = offset;
-}
-
 static unsigned int mvpp2_txdesc_offset_get(struct mvpp2_port *port,
                         struct mvpp2_tx_desc *tx_desc)
 {
@@ -6292,10 +6289,7 @@ static int mvpp2_tx_frag_process(struct mvpp2_port *port, struct sk_buff *skb,
             goto cleanup;
         }
 
-        mvpp2_txdesc_offset_set(port, tx_desc,
-                    buf_dma_addr & MVPP2_TX_DESC_ALIGN);
-        mvpp2_txdesc_dma_addr_set(port, tx_desc,
-                      buf_dma_addr & ~MVPP2_TX_DESC_ALIGN);
+        mvpp2_txdesc_dma_addr_set(port, tx_desc, buf_dma_addr);
 
         if (i == (skb_shinfo(skb)->nr_frags - 1)) {
             /* Last descriptor */
@@ -6338,8 +6332,7 @@ static inline void mvpp2_tso_put_hdr(struct sk_buff *skb,
 
     addr = txq_pcpu->tso_headers_dma +
            txq_pcpu->txq_put_index * TSO_HEADER_SIZE;
-    mvpp2_txdesc_offset_set(port, tx_desc, addr & MVPP2_TX_DESC_ALIGN);
-    mvpp2_txdesc_dma_addr_set(port, tx_desc, addr & ~MVPP2_TX_DESC_ALIGN);
+    mvpp2_txdesc_dma_addr_set(port, tx_desc, addr);
 
     mvpp2_txdesc_cmd_set(port, tx_desc, mvpp2_skb_tx_csum(port, skb) |
                         MVPP2_TXD_F_DESC |
@@ -6368,10 +6361,7 @@ static inline int mvpp2_tso_put_data(struct sk_buff *skb,
         return -ENOMEM;
     }
 
-    mvpp2_txdesc_offset_set(port, tx_desc,
-                buf_dma_addr & MVPP2_TX_DESC_ALIGN);
-    mvpp2_txdesc_dma_addr_set(port, tx_desc,
-                  buf_dma_addr & ~MVPP2_TX_DESC_ALIGN);
+    mvpp2_txdesc_dma_addr_set(port, tx_desc, buf_dma_addr);
 
     if (!left) {
         mvpp2_txdesc_cmd_set(port, tx_desc, MVPP2_TXD_L_DESC);
@@ -6483,10 +6473,7 @@ static int mvpp2_tx(struct sk_buff *skb, struct net_device *dev)
         goto out;
     }
 
-    mvpp2_txdesc_offset_set(port, tx_desc,
-                buf_dma_addr & MVPP2_TX_DESC_ALIGN);
-    mvpp2_txdesc_dma_addr_set(port, tx_desc,
-                  buf_dma_addr & ~MVPP2_TX_DESC_ALIGN);
+    mvpp2_txdesc_dma_addr_set(port, tx_desc, buf_dma_addr);
 
     tx_cmd = mvpp2_skb_tx_csum(port, skb);
 
-- 
2.7.4