]> git.proxmox.com Git - mirror_ubuntu-artful-kernel.git/blob - drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
Merge remote-tracking branch 'regulator/fix/max77802' into regulator-linus
[mirror_ubuntu-artful-kernel.git] / drivers / net / ethernet / stmicro / stmmac / stmmac_main.c
1 /*******************************************************************************
2 This is the driver for the ST MAC 10/100/1000 on-chip Ethernet controllers.
3 ST Ethernet IPs are built around a Synopsys IP Core.
4
5 Copyright(C) 2007-2011 STMicroelectronics Ltd
6
7 This program is free software; you can redistribute it and/or modify it
8 under the terms and conditions of the GNU General Public License,
9 version 2, as published by the Free Software Foundation.
10
11 This program is distributed in the hope it will be useful, but WITHOUT
12 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
14 more details.
15
16 The full GNU General Public License is included in this distribution in
17 the file called "COPYING".
18
19 Author: Giuseppe Cavallaro <peppe.cavallaro@st.com>
20
21 Documentation available at:
22 http://www.stlinux.com
23 Support available at:
24 https://bugzilla.stlinux.com/
25 *******************************************************************************/
26
27 #include <linux/clk.h>
28 #include <linux/kernel.h>
29 #include <linux/interrupt.h>
30 #include <linux/ip.h>
31 #include <linux/tcp.h>
32 #include <linux/skbuff.h>
33 #include <linux/ethtool.h>
34 #include <linux/if_ether.h>
35 #include <linux/crc32.h>
36 #include <linux/mii.h>
37 #include <linux/if.h>
38 #include <linux/if_vlan.h>
39 #include <linux/dma-mapping.h>
40 #include <linux/slab.h>
41 #include <linux/prefetch.h>
42 #include <linux/pinctrl/consumer.h>
43 #ifdef CONFIG_DEBUG_FS
44 #include <linux/debugfs.h>
45 #include <linux/seq_file.h>
46 #endif /* CONFIG_DEBUG_FS */
47 #include <linux/net_tstamp.h>
48 #include "stmmac_ptp.h"
49 #include "stmmac.h"
50 #include <linux/reset.h>
51 #include <linux/of_mdio.h>
52 #include "dwmac1000.h"
53
54 #define STMMAC_ALIGN(x) L1_CACHE_ALIGN(x)
55 #define TSO_MAX_BUFF_SIZE (SZ_16K - 1)
56
57 /* Module parameters */
58 #define TX_TIMEO 5000
59 static int watchdog = TX_TIMEO;
60 module_param(watchdog, int, S_IRUGO | S_IWUSR);
61 MODULE_PARM_DESC(watchdog, "Transmit timeout in milliseconds (default 5s)");
62
63 static int debug = -1;
64 module_param(debug, int, S_IRUGO | S_IWUSR);
65 MODULE_PARM_DESC(debug, "Message Level (-1: default, 0: no output, 16: all)");
66
67 static int phyaddr = -1;
68 module_param(phyaddr, int, S_IRUGO);
69 MODULE_PARM_DESC(phyaddr, "Physical device address");
70
71 #define STMMAC_TX_THRESH (DMA_TX_SIZE / 4)
72 #define STMMAC_RX_THRESH (DMA_RX_SIZE / 4)
73
74 static int flow_ctrl = FLOW_OFF;
75 module_param(flow_ctrl, int, S_IRUGO | S_IWUSR);
76 MODULE_PARM_DESC(flow_ctrl, "Flow control ability [on/off]");
77
78 static int pause = PAUSE_TIME;
79 module_param(pause, int, S_IRUGO | S_IWUSR);
80 MODULE_PARM_DESC(pause, "Flow Control Pause Time");
81
82 #define TC_DEFAULT 64
83 static int tc = TC_DEFAULT;
84 module_param(tc, int, S_IRUGO | S_IWUSR);
85 MODULE_PARM_DESC(tc, "DMA threshold control value");
86
87 #define DEFAULT_BUFSIZE 1536
88 static int buf_sz = DEFAULT_BUFSIZE;
89 module_param(buf_sz, int, S_IRUGO | S_IWUSR);
90 MODULE_PARM_DESC(buf_sz, "DMA buffer size");
91
92 #define STMMAC_RX_COPYBREAK 256
93
94 static const u32 default_msg_level = (NETIF_MSG_DRV | NETIF_MSG_PROBE |
95 NETIF_MSG_LINK | NETIF_MSG_IFUP |
96 NETIF_MSG_IFDOWN | NETIF_MSG_TIMER);
97
98 #define STMMAC_DEFAULT_LPI_TIMER 1000
99 static int eee_timer = STMMAC_DEFAULT_LPI_TIMER;
100 module_param(eee_timer, int, S_IRUGO | S_IWUSR);
101 MODULE_PARM_DESC(eee_timer, "LPI tx expiration time in msec");
102 #define STMMAC_LPI_T(x) (jiffies + msecs_to_jiffies(x))
103
104 /* By default the driver will use the ring mode to manage tx and rx descriptors,
105 * but allow user to force to use the chain instead of the ring
106 */
107 static unsigned int chain_mode;
108 module_param(chain_mode, int, S_IRUGO);
109 MODULE_PARM_DESC(chain_mode, "To use chain instead of ring mode");
110
111 static irqreturn_t stmmac_interrupt(int irq, void *dev_id);
112
113 #ifdef CONFIG_DEBUG_FS
114 static int stmmac_init_fs(struct net_device *dev);
115 static void stmmac_exit_fs(struct net_device *dev);
116 #endif
117
118 #define STMMAC_COAL_TIMER(x) (jiffies + usecs_to_jiffies(x))
119
120 /**
121 * stmmac_verify_args - verify the driver parameters.
122 * Description: it checks the driver parameters and set a default in case of
123 * errors.
124 */
125 static void stmmac_verify_args(void)
126 {
127 if (unlikely(watchdog < 0))
128 watchdog = TX_TIMEO;
129 if (unlikely((buf_sz < DEFAULT_BUFSIZE) || (buf_sz > BUF_SIZE_16KiB)))
130 buf_sz = DEFAULT_BUFSIZE;
131 if (unlikely(flow_ctrl > 1))
132 flow_ctrl = FLOW_AUTO;
133 else if (likely(flow_ctrl < 0))
134 flow_ctrl = FLOW_OFF;
135 if (unlikely((pause < 0) || (pause > 0xffff)))
136 pause = PAUSE_TIME;
137 if (eee_timer < 0)
138 eee_timer = STMMAC_DEFAULT_LPI_TIMER;
139 }
140
141 /**
142 * stmmac_disable_all_queues - Disable all queues
143 * @priv: driver private structure
144 */
145 static void stmmac_disable_all_queues(struct stmmac_priv *priv)
146 {
147 u32 rx_queues_cnt = priv->plat->rx_queues_to_use;
148 u32 queue;
149
150 for (queue = 0; queue < rx_queues_cnt; queue++) {
151 struct stmmac_rx_queue *rx_q = &priv->rx_queue[queue];
152
153 napi_disable(&rx_q->napi);
154 }
155 }
156
157 /**
158 * stmmac_enable_all_queues - Enable all queues
159 * @priv: driver private structure
160 */
161 static void stmmac_enable_all_queues(struct stmmac_priv *priv)
162 {
163 u32 rx_queues_cnt = priv->plat->rx_queues_to_use;
164 u32 queue;
165
166 for (queue = 0; queue < rx_queues_cnt; queue++) {
167 struct stmmac_rx_queue *rx_q = &priv->rx_queue[queue];
168
169 napi_enable(&rx_q->napi);
170 }
171 }
172
173 /**
174 * stmmac_stop_all_queues - Stop all queues
175 * @priv: driver private structure
176 */
177 static void stmmac_stop_all_queues(struct stmmac_priv *priv)
178 {
179 u32 tx_queues_cnt = priv->plat->tx_queues_to_use;
180 u32 queue;
181
182 for (queue = 0; queue < tx_queues_cnt; queue++)
183 netif_tx_stop_queue(netdev_get_tx_queue(priv->dev, queue));
184 }
185
186 /**
187 * stmmac_start_all_queues - Start all queues
188 * @priv: driver private structure
189 */
190 static void stmmac_start_all_queues(struct stmmac_priv *priv)
191 {
192 u32 tx_queues_cnt = priv->plat->tx_queues_to_use;
193 u32 queue;
194
195 for (queue = 0; queue < tx_queues_cnt; queue++)
196 netif_tx_start_queue(netdev_get_tx_queue(priv->dev, queue));
197 }
198
199 /**
200 * stmmac_clk_csr_set - dynamically set the MDC clock
201 * @priv: driver private structure
202 * Description: this is to dynamically set the MDC clock according to the csr
203 * clock input.
204 * Note:
205 * If a specific clk_csr value is passed from the platform
206 * this means that the CSR Clock Range selection cannot be
207 * changed at run-time and it is fixed (as reported in the driver
208 * documentation). Viceversa the driver will try to set the MDC
209 * clock dynamically according to the actual clock input.
210 */
211 static void stmmac_clk_csr_set(struct stmmac_priv *priv)
212 {
213 u32 clk_rate;
214
215 clk_rate = clk_get_rate(priv->plat->stmmac_clk);
216
217 /* Platform provided default clk_csr would be assumed valid
218 * for all other cases except for the below mentioned ones.
219 * For values higher than the IEEE 802.3 specified frequency
220 * we can not estimate the proper divider as it is not known
221 * the frequency of clk_csr_i. So we do not change the default
222 * divider.
223 */
224 if (!(priv->clk_csr & MAC_CSR_H_FRQ_MASK)) {
225 if (clk_rate < CSR_F_35M)
226 priv->clk_csr = STMMAC_CSR_20_35M;
227 else if ((clk_rate >= CSR_F_35M) && (clk_rate < CSR_F_60M))
228 priv->clk_csr = STMMAC_CSR_35_60M;
229 else if ((clk_rate >= CSR_F_60M) && (clk_rate < CSR_F_100M))
230 priv->clk_csr = STMMAC_CSR_60_100M;
231 else if ((clk_rate >= CSR_F_100M) && (clk_rate < CSR_F_150M))
232 priv->clk_csr = STMMAC_CSR_100_150M;
233 else if ((clk_rate >= CSR_F_150M) && (clk_rate < CSR_F_250M))
234 priv->clk_csr = STMMAC_CSR_150_250M;
235 else if ((clk_rate >= CSR_F_250M) && (clk_rate < CSR_F_300M))
236 priv->clk_csr = STMMAC_CSR_250_300M;
237 }
238 }
239
240 static void print_pkt(unsigned char *buf, int len)
241 {
242 pr_debug("len = %d byte, buf addr: 0x%p\n", len, buf);
243 print_hex_dump_bytes("", DUMP_PREFIX_OFFSET, buf, len);
244 }
245
246 static inline u32 stmmac_tx_avail(struct stmmac_priv *priv, u32 queue)
247 {
248 struct stmmac_tx_queue *tx_q = &priv->tx_queue[queue];
249 u32 avail;
250
251 if (tx_q->dirty_tx > tx_q->cur_tx)
252 avail = tx_q->dirty_tx - tx_q->cur_tx - 1;
253 else
254 avail = DMA_TX_SIZE - tx_q->cur_tx + tx_q->dirty_tx - 1;
255
256 return avail;
257 }
258
259 /**
260 * stmmac_rx_dirty - Get RX queue dirty
261 * @priv: driver private structure
262 * @queue: RX queue index
263 */
264 static inline u32 stmmac_rx_dirty(struct stmmac_priv *priv, u32 queue)
265 {
266 struct stmmac_rx_queue *rx_q = &priv->rx_queue[queue];
267 u32 dirty;
268
269 if (rx_q->dirty_rx <= rx_q->cur_rx)
270 dirty = rx_q->cur_rx - rx_q->dirty_rx;
271 else
272 dirty = DMA_RX_SIZE - rx_q->dirty_rx + rx_q->cur_rx;
273
274 return dirty;
275 }
276
277 /**
278 * stmmac_hw_fix_mac_speed - callback for speed selection
279 * @priv: driver private structure
280 * Description: on some platforms (e.g. ST), some HW system configuration
281 * registers have to be set according to the link speed negotiated.
282 */
283 static inline void stmmac_hw_fix_mac_speed(struct stmmac_priv *priv)
284 {
285 struct net_device *ndev = priv->dev;
286 struct phy_device *phydev = ndev->phydev;
287
288 if (likely(priv->plat->fix_mac_speed))
289 priv->plat->fix_mac_speed(priv->plat->bsp_priv, phydev->speed);
290 }
291
292 /**
293 * stmmac_enable_eee_mode - check and enter in LPI mode
294 * @priv: driver private structure
295 * Description: this function is to verify and enter in LPI mode in case of
296 * EEE.
297 */
298 static void stmmac_enable_eee_mode(struct stmmac_priv *priv)
299 {
300 u32 tx_cnt = priv->plat->tx_queues_to_use;
301 u32 queue;
302
303 /* check if all TX queues have the work finished */
304 for (queue = 0; queue < tx_cnt; queue++) {
305 struct stmmac_tx_queue *tx_q = &priv->tx_queue[queue];
306
307 if (tx_q->dirty_tx != tx_q->cur_tx)
308 return; /* still unfinished work */
309 }
310
311 /* Check and enter in LPI mode */
312 if (!priv->tx_path_in_lpi_mode)
313 priv->hw->mac->set_eee_mode(priv->hw,
314 priv->plat->en_tx_lpi_clockgating);
315 }
316
317 /**
318 * stmmac_disable_eee_mode - disable and exit from LPI mode
319 * @priv: driver private structure
320 * Description: this function is to exit and disable EEE in case of
321 * LPI state is true. This is called by the xmit.
322 */
323 void stmmac_disable_eee_mode(struct stmmac_priv *priv)
324 {
325 priv->hw->mac->reset_eee_mode(priv->hw);
326 del_timer_sync(&priv->eee_ctrl_timer);
327 priv->tx_path_in_lpi_mode = false;
328 }
329
330 /**
331 * stmmac_eee_ctrl_timer - EEE TX SW timer.
332 * @arg : data hook
333 * Description:
334 * if there is no data transfer and if we are not in LPI state,
335 * then MAC Transmitter can be moved to LPI state.
336 */
337 static void stmmac_eee_ctrl_timer(unsigned long arg)
338 {
339 struct stmmac_priv *priv = (struct stmmac_priv *)arg;
340
341 stmmac_enable_eee_mode(priv);
342 mod_timer(&priv->eee_ctrl_timer, STMMAC_LPI_T(eee_timer));
343 }
344
345 /**
346 * stmmac_eee_init - init EEE
347 * @priv: driver private structure
348 * Description:
349 * if the GMAC supports the EEE (from the HW cap reg) and the phy device
350 * can also manage EEE, this function enable the LPI state and start related
351 * timer.
352 */
353 bool stmmac_eee_init(struct stmmac_priv *priv)
354 {
355 struct net_device *ndev = priv->dev;
356 unsigned long flags;
357 bool ret = false;
358
359 /* Using PCS we cannot dial with the phy registers at this stage
360 * so we do not support extra feature like EEE.
361 */
362 if ((priv->hw->pcs == STMMAC_PCS_RGMII) ||
363 (priv->hw->pcs == STMMAC_PCS_TBI) ||
364 (priv->hw->pcs == STMMAC_PCS_RTBI))
365 goto out;
366
367 /* MAC core supports the EEE feature. */
368 if (priv->dma_cap.eee) {
369 int tx_lpi_timer = priv->tx_lpi_timer;
370
371 /* Check if the PHY supports EEE */
372 if (phy_init_eee(ndev->phydev, 1)) {
373 /* To manage at run-time if the EEE cannot be supported
374 * anymore (for example because the lp caps have been
375 * changed).
376 * In that case the driver disable own timers.
377 */
378 spin_lock_irqsave(&priv->lock, flags);
379 if (priv->eee_active) {
380 netdev_dbg(priv->dev, "disable EEE\n");
381 del_timer_sync(&priv->eee_ctrl_timer);
382 priv->hw->mac->set_eee_timer(priv->hw, 0,
383 tx_lpi_timer);
384 }
385 priv->eee_active = 0;
386 spin_unlock_irqrestore(&priv->lock, flags);
387 goto out;
388 }
389 /* Activate the EEE and start timers */
390 spin_lock_irqsave(&priv->lock, flags);
391 if (!priv->eee_active) {
392 priv->eee_active = 1;
393 setup_timer(&priv->eee_ctrl_timer,
394 stmmac_eee_ctrl_timer,
395 (unsigned long)priv);
396 mod_timer(&priv->eee_ctrl_timer,
397 STMMAC_LPI_T(eee_timer));
398
399 priv->hw->mac->set_eee_timer(priv->hw,
400 STMMAC_DEFAULT_LIT_LS,
401 tx_lpi_timer);
402 }
403 /* Set HW EEE according to the speed */
404 priv->hw->mac->set_eee_pls(priv->hw, ndev->phydev->link);
405
406 ret = true;
407 spin_unlock_irqrestore(&priv->lock, flags);
408
409 netdev_dbg(priv->dev, "Energy-Efficient Ethernet initialized\n");
410 }
411 out:
412 return ret;
413 }
414
415 /* stmmac_get_tx_hwtstamp - get HW TX timestamps
416 * @priv: driver private structure
417 * @p : descriptor pointer
418 * @skb : the socket buffer
419 * Description :
420 * This function will read timestamp from the descriptor & pass it to stack.
421 * and also perform some sanity checks.
422 */
423 static void stmmac_get_tx_hwtstamp(struct stmmac_priv *priv,
424 struct dma_desc *p, struct sk_buff *skb)
425 {
426 struct skb_shared_hwtstamps shhwtstamp;
427 u64 ns;
428
429 if (!priv->hwts_tx_en)
430 return;
431
432 /* exit if skb doesn't support hw tstamp */
433 if (likely(!skb || !(skb_shinfo(skb)->tx_flags & SKBTX_IN_PROGRESS)))
434 return;
435
436 /* check tx tstamp status */
437 if (priv->hw->desc->get_tx_timestamp_status(p)) {
438 /* get the valid tstamp */
439 ns = priv->hw->desc->get_timestamp(p, priv->adv_ts);
440
441 memset(&shhwtstamp, 0, sizeof(struct skb_shared_hwtstamps));
442 shhwtstamp.hwtstamp = ns_to_ktime(ns);
443
444 netdev_dbg(priv->dev, "get valid TX hw timestamp %llu\n", ns);
445 /* pass tstamp to stack */
446 skb_tstamp_tx(skb, &shhwtstamp);
447 }
448
449 return;
450 }
451
452 /* stmmac_get_rx_hwtstamp - get HW RX timestamps
453 * @priv: driver private structure
454 * @p : descriptor pointer
455 * @np : next descriptor pointer
456 * @skb : the socket buffer
457 * Description :
458 * This function will read received packet's timestamp from the descriptor
459 * and pass it to stack. It also perform some sanity checks.
460 */
461 static void stmmac_get_rx_hwtstamp(struct stmmac_priv *priv, struct dma_desc *p,
462 struct dma_desc *np, struct sk_buff *skb)
463 {
464 struct skb_shared_hwtstamps *shhwtstamp = NULL;
465 u64 ns;
466
467 if (!priv->hwts_rx_en)
468 return;
469
470 /* Check if timestamp is available */
471 if (priv->hw->desc->get_rx_timestamp_status(p, priv->adv_ts)) {
472 /* For GMAC4, the valid timestamp is from CTX next desc. */
473 if (priv->plat->has_gmac4)
474 ns = priv->hw->desc->get_timestamp(np, priv->adv_ts);
475 else
476 ns = priv->hw->desc->get_timestamp(p, priv->adv_ts);
477
478 netdev_dbg(priv->dev, "get valid RX hw timestamp %llu\n", ns);
479 shhwtstamp = skb_hwtstamps(skb);
480 memset(shhwtstamp, 0, sizeof(struct skb_shared_hwtstamps));
481 shhwtstamp->hwtstamp = ns_to_ktime(ns);
482 } else {
483 netdev_dbg(priv->dev, "cannot get RX hw timestamp\n");
484 }
485 }
486
487 /**
488 * stmmac_hwtstamp_ioctl - control hardware timestamping.
489 * @dev: device pointer.
490 * @ifr: An IOCTL specific structure, that can contain a pointer to
491 * a proprietary structure used to pass information to the driver.
492 * Description:
493 * This function configures the MAC to enable/disable both outgoing(TX)
494 * and incoming(RX) packets time stamping based on user input.
495 * Return Value:
496 * 0 on success and an appropriate -ve integer on failure.
497 */
498 static int stmmac_hwtstamp_ioctl(struct net_device *dev, struct ifreq *ifr)
499 {
500 struct stmmac_priv *priv = netdev_priv(dev);
501 struct hwtstamp_config config;
502 struct timespec64 now;
503 u64 temp = 0;
504 u32 ptp_v2 = 0;
505 u32 tstamp_all = 0;
506 u32 ptp_over_ipv4_udp = 0;
507 u32 ptp_over_ipv6_udp = 0;
508 u32 ptp_over_ethernet = 0;
509 u32 snap_type_sel = 0;
510 u32 ts_master_en = 0;
511 u32 ts_event_en = 0;
512 u32 value = 0;
513 u32 sec_inc;
514
515 if (!(priv->dma_cap.time_stamp || priv->adv_ts)) {
516 netdev_alert(priv->dev, "No support for HW time stamping\n");
517 priv->hwts_tx_en = 0;
518 priv->hwts_rx_en = 0;
519
520 return -EOPNOTSUPP;
521 }
522
523 if (copy_from_user(&config, ifr->ifr_data,
524 sizeof(struct hwtstamp_config)))
525 return -EFAULT;
526
527 netdev_dbg(priv->dev, "%s config flags:0x%x, tx_type:0x%x, rx_filter:0x%x\n",
528 __func__, config.flags, config.tx_type, config.rx_filter);
529
530 /* reserved for future extensions */
531 if (config.flags)
532 return -EINVAL;
533
534 if (config.tx_type != HWTSTAMP_TX_OFF &&
535 config.tx_type != HWTSTAMP_TX_ON)
536 return -ERANGE;
537
538 if (priv->adv_ts) {
539 switch (config.rx_filter) {
540 case HWTSTAMP_FILTER_NONE:
541 /* time stamp no incoming packet at all */
542 config.rx_filter = HWTSTAMP_FILTER_NONE;
543 break;
544
545 case HWTSTAMP_FILTER_PTP_V1_L4_EVENT:
546 /* PTP v1, UDP, any kind of event packet */
547 config.rx_filter = HWTSTAMP_FILTER_PTP_V1_L4_EVENT;
548 /* take time stamp for all event messages */
549 if (priv->plat->has_gmac4)
550 snap_type_sel = PTP_GMAC4_TCR_SNAPTYPSEL_1;
551 else
552 snap_type_sel = PTP_TCR_SNAPTYPSEL_1;
553
554 ptp_over_ipv4_udp = PTP_TCR_TSIPV4ENA;
555 ptp_over_ipv6_udp = PTP_TCR_TSIPV6ENA;
556 break;
557
558 case HWTSTAMP_FILTER_PTP_V1_L4_SYNC:
559 /* PTP v1, UDP, Sync packet */
560 config.rx_filter = HWTSTAMP_FILTER_PTP_V1_L4_SYNC;
561 /* take time stamp for SYNC messages only */
562 ts_event_en = PTP_TCR_TSEVNTENA;
563
564 ptp_over_ipv4_udp = PTP_TCR_TSIPV4ENA;
565 ptp_over_ipv6_udp = PTP_TCR_TSIPV6ENA;
566 break;
567
568 case HWTSTAMP_FILTER_PTP_V1_L4_DELAY_REQ:
569 /* PTP v1, UDP, Delay_req packet */
570 config.rx_filter = HWTSTAMP_FILTER_PTP_V1_L4_DELAY_REQ;
571 /* take time stamp for Delay_Req messages only */
572 ts_master_en = PTP_TCR_TSMSTRENA;
573 ts_event_en = PTP_TCR_TSEVNTENA;
574
575 ptp_over_ipv4_udp = PTP_TCR_TSIPV4ENA;
576 ptp_over_ipv6_udp = PTP_TCR_TSIPV6ENA;
577 break;
578
579 case HWTSTAMP_FILTER_PTP_V2_L4_EVENT:
580 /* PTP v2, UDP, any kind of event packet */
581 config.rx_filter = HWTSTAMP_FILTER_PTP_V2_L4_EVENT;
582 ptp_v2 = PTP_TCR_TSVER2ENA;
583 /* take time stamp for all event messages */
584 if (priv->plat->has_gmac4)
585 snap_type_sel = PTP_GMAC4_TCR_SNAPTYPSEL_1;
586 else
587 snap_type_sel = PTP_TCR_SNAPTYPSEL_1;
588
589 ptp_over_ipv4_udp = PTP_TCR_TSIPV4ENA;
590 ptp_over_ipv6_udp = PTP_TCR_TSIPV6ENA;
591 break;
592
593 case HWTSTAMP_FILTER_PTP_V2_L4_SYNC:
594 /* PTP v2, UDP, Sync packet */
595 config.rx_filter = HWTSTAMP_FILTER_PTP_V2_L4_SYNC;
596 ptp_v2 = PTP_TCR_TSVER2ENA;
597 /* take time stamp for SYNC messages only */
598 ts_event_en = PTP_TCR_TSEVNTENA;
599
600 ptp_over_ipv4_udp = PTP_TCR_TSIPV4ENA;
601 ptp_over_ipv6_udp = PTP_TCR_TSIPV6ENA;
602 break;
603
604 case HWTSTAMP_FILTER_PTP_V2_L4_DELAY_REQ:
605 /* PTP v2, UDP, Delay_req packet */
606 config.rx_filter = HWTSTAMP_FILTER_PTP_V2_L4_DELAY_REQ;
607 ptp_v2 = PTP_TCR_TSVER2ENA;
608 /* take time stamp for Delay_Req messages only */
609 ts_master_en = PTP_TCR_TSMSTRENA;
610 ts_event_en = PTP_TCR_TSEVNTENA;
611
612 ptp_over_ipv4_udp = PTP_TCR_TSIPV4ENA;
613 ptp_over_ipv6_udp = PTP_TCR_TSIPV6ENA;
614 break;
615
616 case HWTSTAMP_FILTER_PTP_V2_EVENT:
617 /* PTP v2/802.AS1 any layer, any kind of event packet */
618 config.rx_filter = HWTSTAMP_FILTER_PTP_V2_EVENT;
619 ptp_v2 = PTP_TCR_TSVER2ENA;
620 /* take time stamp for all event messages */
621 if (priv->plat->has_gmac4)
622 snap_type_sel = PTP_GMAC4_TCR_SNAPTYPSEL_1;
623 else
624 snap_type_sel = PTP_TCR_SNAPTYPSEL_1;
625
626 ptp_over_ipv4_udp = PTP_TCR_TSIPV4ENA;
627 ptp_over_ipv6_udp = PTP_TCR_TSIPV6ENA;
628 ptp_over_ethernet = PTP_TCR_TSIPENA;
629 break;
630
631 case HWTSTAMP_FILTER_PTP_V2_SYNC:
632 /* PTP v2/802.AS1, any layer, Sync packet */
633 config.rx_filter = HWTSTAMP_FILTER_PTP_V2_SYNC;
634 ptp_v2 = PTP_TCR_TSVER2ENA;
635 /* take time stamp for SYNC messages only */
636 ts_event_en = PTP_TCR_TSEVNTENA;
637
638 ptp_over_ipv4_udp = PTP_TCR_TSIPV4ENA;
639 ptp_over_ipv6_udp = PTP_TCR_TSIPV6ENA;
640 ptp_over_ethernet = PTP_TCR_TSIPENA;
641 break;
642
643 case HWTSTAMP_FILTER_PTP_V2_DELAY_REQ:
644 /* PTP v2/802.AS1, any layer, Delay_req packet */
645 config.rx_filter = HWTSTAMP_FILTER_PTP_V2_DELAY_REQ;
646 ptp_v2 = PTP_TCR_TSVER2ENA;
647 /* take time stamp for Delay_Req messages only */
648 ts_master_en = PTP_TCR_TSMSTRENA;
649 ts_event_en = PTP_TCR_TSEVNTENA;
650
651 ptp_over_ipv4_udp = PTP_TCR_TSIPV4ENA;
652 ptp_over_ipv6_udp = PTP_TCR_TSIPV6ENA;
653 ptp_over_ethernet = PTP_TCR_TSIPENA;
654 break;
655
656 case HWTSTAMP_FILTER_ALL:
657 /* time stamp any incoming packet */
658 config.rx_filter = HWTSTAMP_FILTER_ALL;
659 tstamp_all = PTP_TCR_TSENALL;
660 break;
661
662 default:
663 return -ERANGE;
664 }
665 } else {
666 switch (config.rx_filter) {
667 case HWTSTAMP_FILTER_NONE:
668 config.rx_filter = HWTSTAMP_FILTER_NONE;
669 break;
670 default:
671 /* PTP v1, UDP, any kind of event packet */
672 config.rx_filter = HWTSTAMP_FILTER_PTP_V1_L4_EVENT;
673 break;
674 }
675 }
676 priv->hwts_rx_en = ((config.rx_filter == HWTSTAMP_FILTER_NONE) ? 0 : 1);
677 priv->hwts_tx_en = config.tx_type == HWTSTAMP_TX_ON;
678
679 if (!priv->hwts_tx_en && !priv->hwts_rx_en)
680 priv->hw->ptp->config_hw_tstamping(priv->ptpaddr, 0);
681 else {
682 value = (PTP_TCR_TSENA | PTP_TCR_TSCFUPDT | PTP_TCR_TSCTRLSSR |
683 tstamp_all | ptp_v2 | ptp_over_ethernet |
684 ptp_over_ipv6_udp | ptp_over_ipv4_udp | ts_event_en |
685 ts_master_en | snap_type_sel);
686 priv->hw->ptp->config_hw_tstamping(priv->ptpaddr, value);
687
688 /* program Sub Second Increment reg */
689 sec_inc = priv->hw->ptp->config_sub_second_increment(
690 priv->ptpaddr, priv->plat->clk_ptp_rate,
691 priv->plat->has_gmac4);
692 temp = div_u64(1000000000ULL, sec_inc);
693
694 /* calculate default added value:
695 * formula is :
696 * addend = (2^32)/freq_div_ratio;
697 * where, freq_div_ratio = 1e9ns/sec_inc
698 */
699 temp = (u64)(temp << 32);
700 priv->default_addend = div_u64(temp, priv->plat->clk_ptp_rate);
701 priv->hw->ptp->config_addend(priv->ptpaddr,
702 priv->default_addend);
703
704 /* initialize system time */
705 ktime_get_real_ts64(&now);
706
707 /* lower 32 bits of tv_sec are safe until y2106 */
708 priv->hw->ptp->init_systime(priv->ptpaddr, (u32)now.tv_sec,
709 now.tv_nsec);
710 }
711
712 return copy_to_user(ifr->ifr_data, &config,
713 sizeof(struct hwtstamp_config)) ? -EFAULT : 0;
714 }
715
716 /**
717 * stmmac_init_ptp - init PTP
718 * @priv: driver private structure
719 * Description: this is to verify if the HW supports the PTPv1 or PTPv2.
720 * This is done by looking at the HW cap. register.
721 * This function also registers the ptp driver.
722 */
723 static int stmmac_init_ptp(struct stmmac_priv *priv)
724 {
725 if (!(priv->dma_cap.time_stamp || priv->dma_cap.atime_stamp))
726 return -EOPNOTSUPP;
727
728 priv->adv_ts = 0;
729 /* Check if adv_ts can be enabled for dwmac 4.x core */
730 if (priv->plat->has_gmac4 && priv->dma_cap.atime_stamp)
731 priv->adv_ts = 1;
732 /* Dwmac 3.x core with extend_desc can support adv_ts */
733 else if (priv->extend_desc && priv->dma_cap.atime_stamp)
734 priv->adv_ts = 1;
735
736 if (priv->dma_cap.time_stamp)
737 netdev_info(priv->dev, "IEEE 1588-2002 Timestamp supported\n");
738
739 if (priv->adv_ts)
740 netdev_info(priv->dev,
741 "IEEE 1588-2008 Advanced Timestamp supported\n");
742
743 priv->hw->ptp = &stmmac_ptp;
744 priv->hwts_tx_en = 0;
745 priv->hwts_rx_en = 0;
746
747 stmmac_ptp_register(priv);
748
749 return 0;
750 }
751
752 static void stmmac_release_ptp(struct stmmac_priv *priv)
753 {
754 if (priv->plat->clk_ptp_ref)
755 clk_disable_unprepare(priv->plat->clk_ptp_ref);
756 stmmac_ptp_unregister(priv);
757 }
758
759 /**
760 * stmmac_mac_flow_ctrl - Configure flow control in all queues
761 * @priv: driver private structure
762 * Description: It is used for configuring the flow control in all queues
763 */
764 static void stmmac_mac_flow_ctrl(struct stmmac_priv *priv, u32 duplex)
765 {
766 u32 tx_cnt = priv->plat->tx_queues_to_use;
767
768 priv->hw->mac->flow_ctrl(priv->hw, duplex, priv->flow_ctrl,
769 priv->pause, tx_cnt);
770 }
771
772 /**
773 * stmmac_adjust_link - adjusts the link parameters
774 * @dev: net device structure
775 * Description: this is the helper called by the physical abstraction layer
776 * drivers to communicate the phy link status. According the speed and duplex
777 * this driver can invoke registered glue-logic as well.
778 * It also invoke the eee initialization because it could happen when switch
779 * on different networks (that are eee capable).
780 */
781 static void stmmac_adjust_link(struct net_device *dev)
782 {
783 struct stmmac_priv *priv = netdev_priv(dev);
784 struct phy_device *phydev = dev->phydev;
785 unsigned long flags;
786 int new_state = 0;
787
788 if (!phydev)
789 return;
790
791 spin_lock_irqsave(&priv->lock, flags);
792
793 if (phydev->link) {
794 u32 ctrl = readl(priv->ioaddr + MAC_CTRL_REG);
795
796 /* Now we make sure that we can be in full duplex mode.
797 * If not, we operate in half-duplex mode. */
798 if (phydev->duplex != priv->oldduplex) {
799 new_state = 1;
800 if (!(phydev->duplex))
801 ctrl &= ~priv->hw->link.duplex;
802 else
803 ctrl |= priv->hw->link.duplex;
804 priv->oldduplex = phydev->duplex;
805 }
806 /* Flow Control operation */
807 if (phydev->pause)
808 stmmac_mac_flow_ctrl(priv, phydev->duplex);
809
810 if (phydev->speed != priv->speed) {
811 new_state = 1;
812 switch (phydev->speed) {
813 case 1000:
814 if (priv->plat->has_gmac ||
815 priv->plat->has_gmac4)
816 ctrl &= ~priv->hw->link.port;
817 break;
818 case 100:
819 if (priv->plat->has_gmac ||
820 priv->plat->has_gmac4) {
821 ctrl |= priv->hw->link.port;
822 ctrl |= priv->hw->link.speed;
823 } else {
824 ctrl &= ~priv->hw->link.port;
825 }
826 break;
827 case 10:
828 if (priv->plat->has_gmac ||
829 priv->plat->has_gmac4) {
830 ctrl |= priv->hw->link.port;
831 ctrl &= ~(priv->hw->link.speed);
832 } else {
833 ctrl &= ~priv->hw->link.port;
834 }
835 break;
836 default:
837 netif_warn(priv, link, priv->dev,
838 "broken speed: %d\n", phydev->speed);
839 phydev->speed = SPEED_UNKNOWN;
840 break;
841 }
842 if (phydev->speed != SPEED_UNKNOWN)
843 stmmac_hw_fix_mac_speed(priv);
844 priv->speed = phydev->speed;
845 }
846
847 writel(ctrl, priv->ioaddr + MAC_CTRL_REG);
848
849 if (!priv->oldlink) {
850 new_state = 1;
851 priv->oldlink = 1;
852 }
853 } else if (priv->oldlink) {
854 new_state = 1;
855 priv->oldlink = 0;
856 priv->speed = SPEED_UNKNOWN;
857 priv->oldduplex = DUPLEX_UNKNOWN;
858 }
859
860 if (new_state && netif_msg_link(priv))
861 phy_print_status(phydev);
862
863 spin_unlock_irqrestore(&priv->lock, flags);
864
865 if (phydev->is_pseudo_fixed_link)
866 /* Stop PHY layer to call the hook to adjust the link in case
867 * of a switch is attached to the stmmac driver.
868 */
869 phydev->irq = PHY_IGNORE_INTERRUPT;
870 else
871 /* At this stage, init the EEE if supported.
872 * Never called in case of fixed_link.
873 */
874 priv->eee_enabled = stmmac_eee_init(priv);
875 }
876
877 /**
878 * stmmac_check_pcs_mode - verify if RGMII/SGMII is supported
879 * @priv: driver private structure
880 * Description: this is to verify if the HW supports the PCS.
881 * Physical Coding Sublayer (PCS) interface that can be used when the MAC is
882 * configured for the TBI, RTBI, or SGMII PHY interface.
883 */
884 static void stmmac_check_pcs_mode(struct stmmac_priv *priv)
885 {
886 int interface = priv->plat->interface;
887
888 if (priv->dma_cap.pcs) {
889 if ((interface == PHY_INTERFACE_MODE_RGMII) ||
890 (interface == PHY_INTERFACE_MODE_RGMII_ID) ||
891 (interface == PHY_INTERFACE_MODE_RGMII_RXID) ||
892 (interface == PHY_INTERFACE_MODE_RGMII_TXID)) {
893 netdev_dbg(priv->dev, "PCS RGMII support enabled\n");
894 priv->hw->pcs = STMMAC_PCS_RGMII;
895 } else if (interface == PHY_INTERFACE_MODE_SGMII) {
896 netdev_dbg(priv->dev, "PCS SGMII support enabled\n");
897 priv->hw->pcs = STMMAC_PCS_SGMII;
898 }
899 }
900 }
901
902 /**
903 * stmmac_init_phy - PHY initialization
904 * @dev: net device structure
905 * Description: it initializes the driver's PHY state, and attaches the PHY
906 * to the mac driver.
907 * Return value:
908 * 0 on success
909 */
910 static int stmmac_init_phy(struct net_device *dev)
911 {
912 struct stmmac_priv *priv = netdev_priv(dev);
913 struct phy_device *phydev;
914 char phy_id_fmt[MII_BUS_ID_SIZE + 3];
915 char bus_id[MII_BUS_ID_SIZE];
916 int interface = priv->plat->interface;
917 int max_speed = priv->plat->max_speed;
918 priv->oldlink = 0;
919 priv->speed = SPEED_UNKNOWN;
920 priv->oldduplex = DUPLEX_UNKNOWN;
921
922 if (priv->plat->phy_node) {
923 phydev = of_phy_connect(dev, priv->plat->phy_node,
924 &stmmac_adjust_link, 0, interface);
925 } else {
926 snprintf(bus_id, MII_BUS_ID_SIZE, "stmmac-%x",
927 priv->plat->bus_id);
928
929 snprintf(phy_id_fmt, MII_BUS_ID_SIZE + 3, PHY_ID_FMT, bus_id,
930 priv->plat->phy_addr);
931 netdev_dbg(priv->dev, "%s: trying to attach to %s\n", __func__,
932 phy_id_fmt);
933
934 phydev = phy_connect(dev, phy_id_fmt, &stmmac_adjust_link,
935 interface);
936 }
937
938 if (IS_ERR_OR_NULL(phydev)) {
939 netdev_err(priv->dev, "Could not attach to PHY\n");
940 if (!phydev)
941 return -ENODEV;
942
943 return PTR_ERR(phydev);
944 }
945
946 /* Stop Advertising 1000BASE Capability if interface is not GMII */
947 if ((interface == PHY_INTERFACE_MODE_MII) ||
948 (interface == PHY_INTERFACE_MODE_RMII) ||
949 (max_speed < 1000 && max_speed > 0))
950 phydev->advertising &= ~(SUPPORTED_1000baseT_Half |
951 SUPPORTED_1000baseT_Full);
952
953 /*
954 * Broken HW is sometimes missing the pull-up resistor on the
955 * MDIO line, which results in reads to non-existent devices returning
956 * 0 rather than 0xffff. Catch this here and treat 0 as a non-existent
957 * device as well.
958 * Note: phydev->phy_id is the result of reading the UID PHY registers.
959 */
960 if (!priv->plat->phy_node && phydev->phy_id == 0) {
961 phy_disconnect(phydev);
962 return -ENODEV;
963 }
964
965 /* stmmac_adjust_link will change this to PHY_IGNORE_INTERRUPT to avoid
966 * subsequent PHY polling, make sure we force a link transition if
967 * we have a UP/DOWN/UP transition
968 */
969 if (phydev->is_pseudo_fixed_link)
970 phydev->irq = PHY_POLL;
971
972 phy_attached_info(phydev);
973 return 0;
974 }
975
976 static void stmmac_display_rx_rings(struct stmmac_priv *priv)
977 {
978 u32 rx_cnt = priv->plat->rx_queues_to_use;
979 void *head_rx;
980 u32 queue;
981
982 /* Display RX rings */
983 for (queue = 0; queue < rx_cnt; queue++) {
984 struct stmmac_rx_queue *rx_q = &priv->rx_queue[queue];
985
986 pr_info("\tRX Queue %u rings\n", queue);
987
988 if (priv->extend_desc)
989 head_rx = (void *)rx_q->dma_erx;
990 else
991 head_rx = (void *)rx_q->dma_rx;
992
993 /* Display RX ring */
994 priv->hw->desc->display_ring(head_rx, DMA_RX_SIZE, true);
995 }
996 }
997
998 static void stmmac_display_tx_rings(struct stmmac_priv *priv)
999 {
1000 u32 tx_cnt = priv->plat->tx_queues_to_use;
1001 void *head_tx;
1002 u32 queue;
1003
1004 /* Display TX rings */
1005 for (queue = 0; queue < tx_cnt; queue++) {
1006 struct stmmac_tx_queue *tx_q = &priv->tx_queue[queue];
1007
1008 pr_info("\tTX Queue %d rings\n", queue);
1009
1010 if (priv->extend_desc)
1011 head_tx = (void *)tx_q->dma_etx;
1012 else
1013 head_tx = (void *)tx_q->dma_tx;
1014
1015 priv->hw->desc->display_ring(head_tx, DMA_TX_SIZE, false);
1016 }
1017 }
1018
1019 static void stmmac_display_rings(struct stmmac_priv *priv)
1020 {
1021 /* Display RX ring */
1022 stmmac_display_rx_rings(priv);
1023
1024 /* Display TX ring */
1025 stmmac_display_tx_rings(priv);
1026 }
1027
1028 static int stmmac_set_bfsize(int mtu, int bufsize)
1029 {
1030 int ret = bufsize;
1031
1032 if (mtu >= BUF_SIZE_4KiB)
1033 ret = BUF_SIZE_8KiB;
1034 else if (mtu >= BUF_SIZE_2KiB)
1035 ret = BUF_SIZE_4KiB;
1036 else if (mtu > DEFAULT_BUFSIZE)
1037 ret = BUF_SIZE_2KiB;
1038 else
1039 ret = DEFAULT_BUFSIZE;
1040
1041 return ret;
1042 }
1043
1044 /**
1045 * stmmac_clear_rx_descriptors - clear RX descriptors
1046 * @priv: driver private structure
1047 * @queue: RX queue index
1048 * Description: this function is called to clear the RX descriptors
1049 * in case of both basic and extended descriptors are used.
1050 */
1051 static void stmmac_clear_rx_descriptors(struct stmmac_priv *priv, u32 queue)
1052 {
1053 struct stmmac_rx_queue *rx_q = &priv->rx_queue[queue];
1054 int i;
1055
1056 /* Clear the RX descriptors */
1057 for (i = 0; i < DMA_RX_SIZE; i++)
1058 if (priv->extend_desc)
1059 priv->hw->desc->init_rx_desc(&rx_q->dma_erx[i].basic,
1060 priv->use_riwt, priv->mode,
1061 (i == DMA_RX_SIZE - 1));
1062 else
1063 priv->hw->desc->init_rx_desc(&rx_q->dma_rx[i],
1064 priv->use_riwt, priv->mode,
1065 (i == DMA_RX_SIZE - 1));
1066 }
1067
1068 /**
1069 * stmmac_clear_tx_descriptors - clear tx descriptors
1070 * @priv: driver private structure
1071 * @queue: TX queue index.
1072 * Description: this function is called to clear the TX descriptors
1073 * in case of both basic and extended descriptors are used.
1074 */
1075 static void stmmac_clear_tx_descriptors(struct stmmac_priv *priv, u32 queue)
1076 {
1077 struct stmmac_tx_queue *tx_q = &priv->tx_queue[queue];
1078 int i;
1079
1080 /* Clear the TX descriptors */
1081 for (i = 0; i < DMA_TX_SIZE; i++)
1082 if (priv->extend_desc)
1083 priv->hw->desc->init_tx_desc(&tx_q->dma_etx[i].basic,
1084 priv->mode,
1085 (i == DMA_TX_SIZE - 1));
1086 else
1087 priv->hw->desc->init_tx_desc(&tx_q->dma_tx[i],
1088 priv->mode,
1089 (i == DMA_TX_SIZE - 1));
1090 }
1091
1092 /**
1093 * stmmac_clear_descriptors - clear descriptors
1094 * @priv: driver private structure
1095 * Description: this function is called to clear the TX and RX descriptors
1096 * in case of both basic and extended descriptors are used.
1097 */
1098 static void stmmac_clear_descriptors(struct stmmac_priv *priv)
1099 {
1100 u32 rx_queue_cnt = priv->plat->rx_queues_to_use;
1101 u32 tx_queue_cnt = priv->plat->tx_queues_to_use;
1102 u32 queue;
1103
1104 /* Clear the RX descriptors */
1105 for (queue = 0; queue < rx_queue_cnt; queue++)
1106 stmmac_clear_rx_descriptors(priv, queue);
1107
1108 /* Clear the TX descriptors */
1109 for (queue = 0; queue < tx_queue_cnt; queue++)
1110 stmmac_clear_tx_descriptors(priv, queue);
1111 }
1112
1113 /**
1114 * stmmac_init_rx_buffers - init the RX descriptor buffer.
1115 * @priv: driver private structure
1116 * @p: descriptor pointer
1117 * @i: descriptor index
1118 * @flags: gfp flag
1119 * @queue: RX queue index
1120 * Description: this function is called to allocate a receive buffer, perform
1121 * the DMA mapping and init the descriptor.
1122 */
1123 static int stmmac_init_rx_buffers(struct stmmac_priv *priv, struct dma_desc *p,
1124 int i, gfp_t flags, u32 queue)
1125 {
1126 struct stmmac_rx_queue *rx_q = &priv->rx_queue[queue];
1127 struct sk_buff *skb;
1128
1129 skb = __netdev_alloc_skb_ip_align(priv->dev, priv->dma_buf_sz, flags);
1130 if (!skb) {
1131 netdev_err(priv->dev,
1132 "%s: Rx init fails; skb is NULL\n", __func__);
1133 return -ENOMEM;
1134 }
1135 rx_q->rx_skbuff[i] = skb;
1136 rx_q->rx_skbuff_dma[i] = dma_map_single(priv->device, skb->data,
1137 priv->dma_buf_sz,
1138 DMA_FROM_DEVICE);
1139 if (dma_mapping_error(priv->device, rx_q->rx_skbuff_dma[i])) {
1140 netdev_err(priv->dev, "%s: DMA mapping error\n", __func__);
1141 dev_kfree_skb_any(skb);
1142 return -EINVAL;
1143 }
1144
1145 if (priv->synopsys_id >= DWMAC_CORE_4_00)
1146 p->des0 = cpu_to_le32(rx_q->rx_skbuff_dma[i]);
1147 else
1148 p->des2 = cpu_to_le32(rx_q->rx_skbuff_dma[i]);
1149
1150 if ((priv->hw->mode->init_desc3) &&
1151 (priv->dma_buf_sz == BUF_SIZE_16KiB))
1152 priv->hw->mode->init_desc3(p);
1153
1154 return 0;
1155 }
1156
1157 /**
1158 * stmmac_free_rx_buffer - free RX dma buffers
1159 * @priv: private structure
1160 * @queue: RX queue index
1161 * @i: buffer index.
1162 */
1163 static void stmmac_free_rx_buffer(struct stmmac_priv *priv, u32 queue, int i)
1164 {
1165 struct stmmac_rx_queue *rx_q = &priv->rx_queue[queue];
1166
1167 if (rx_q->rx_skbuff[i]) {
1168 dma_unmap_single(priv->device, rx_q->rx_skbuff_dma[i],
1169 priv->dma_buf_sz, DMA_FROM_DEVICE);
1170 dev_kfree_skb_any(rx_q->rx_skbuff[i]);
1171 }
1172 rx_q->rx_skbuff[i] = NULL;
1173 }
1174
1175 /**
1176 * stmmac_free_tx_buffer - free RX dma buffers
1177 * @priv: private structure
1178 * @queue: RX queue index
1179 * @i: buffer index.
1180 */
1181 static void stmmac_free_tx_buffer(struct stmmac_priv *priv, u32 queue, int i)
1182 {
1183 struct stmmac_tx_queue *tx_q = &priv->tx_queue[queue];
1184
1185 if (tx_q->tx_skbuff_dma[i].buf) {
1186 if (tx_q->tx_skbuff_dma[i].map_as_page)
1187 dma_unmap_page(priv->device,
1188 tx_q->tx_skbuff_dma[i].buf,
1189 tx_q->tx_skbuff_dma[i].len,
1190 DMA_TO_DEVICE);
1191 else
1192 dma_unmap_single(priv->device,
1193 tx_q->tx_skbuff_dma[i].buf,
1194 tx_q->tx_skbuff_dma[i].len,
1195 DMA_TO_DEVICE);
1196 }
1197
1198 if (tx_q->tx_skbuff[i]) {
1199 dev_kfree_skb_any(tx_q->tx_skbuff[i]);
1200 tx_q->tx_skbuff[i] = NULL;
1201 tx_q->tx_skbuff_dma[i].buf = 0;
1202 tx_q->tx_skbuff_dma[i].map_as_page = false;
1203 }
1204 }
1205
1206 /**
1207 * init_dma_rx_desc_rings - init the RX descriptor rings
1208 * @dev: net device structure
1209 * @flags: gfp flag.
1210 * Description: this function initializes the DMA RX descriptors
1211 * and allocates the socket buffers. It supports the chained and ring
1212 * modes.
1213 */
1214 static int init_dma_rx_desc_rings(struct net_device *dev, gfp_t flags)
1215 {
1216 struct stmmac_priv *priv = netdev_priv(dev);
1217 u32 rx_count = priv->plat->rx_queues_to_use;
1218 unsigned int bfsize = 0;
1219 int ret = -ENOMEM;
1220 int queue;
1221 int i;
1222
1223 if (priv->hw->mode->set_16kib_bfsize)
1224 bfsize = priv->hw->mode->set_16kib_bfsize(dev->mtu);
1225
1226 if (bfsize < BUF_SIZE_16KiB)
1227 bfsize = stmmac_set_bfsize(dev->mtu, priv->dma_buf_sz);
1228
1229 priv->dma_buf_sz = bfsize;
1230
1231 /* RX INITIALIZATION */
1232 netif_dbg(priv, probe, priv->dev,
1233 "SKB addresses:\nskb\t\tskb data\tdma data\n");
1234
1235 for (queue = 0; queue < rx_count; queue++) {
1236 struct stmmac_rx_queue *rx_q = &priv->rx_queue[queue];
1237
1238 netif_dbg(priv, probe, priv->dev,
1239 "(%s) dma_rx_phy=0x%08x\n", __func__,
1240 (u32)rx_q->dma_rx_phy);
1241
1242 for (i = 0; i < DMA_RX_SIZE; i++) {
1243 struct dma_desc *p;
1244
1245 if (priv->extend_desc)
1246 p = &((rx_q->dma_erx + i)->basic);
1247 else
1248 p = rx_q->dma_rx + i;
1249
1250 ret = stmmac_init_rx_buffers(priv, p, i, flags,
1251 queue);
1252 if (ret)
1253 goto err_init_rx_buffers;
1254
1255 netif_dbg(priv, probe, priv->dev, "[%p]\t[%p]\t[%x]\n",
1256 rx_q->rx_skbuff[i], rx_q->rx_skbuff[i]->data,
1257 (unsigned int)rx_q->rx_skbuff_dma[i]);
1258 }
1259
1260 rx_q->cur_rx = 0;
1261 rx_q->dirty_rx = (unsigned int)(i - DMA_RX_SIZE);
1262
1263 stmmac_clear_rx_descriptors(priv, queue);
1264
1265 /* Setup the chained descriptor addresses */
1266 if (priv->mode == STMMAC_CHAIN_MODE) {
1267 if (priv->extend_desc)
1268 priv->hw->mode->init(rx_q->dma_erx,
1269 rx_q->dma_rx_phy,
1270 DMA_RX_SIZE, 1);
1271 else
1272 priv->hw->mode->init(rx_q->dma_rx,
1273 rx_q->dma_rx_phy,
1274 DMA_RX_SIZE, 0);
1275 }
1276 }
1277
1278 buf_sz = bfsize;
1279
1280 return 0;
1281
1282 err_init_rx_buffers:
1283 while (queue >= 0) {
1284 while (--i >= 0)
1285 stmmac_free_rx_buffer(priv, queue, i);
1286
1287 if (queue == 0)
1288 break;
1289
1290 i = DMA_RX_SIZE;
1291 queue--;
1292 }
1293
1294 return ret;
1295 }
1296
1297 /**
1298 * init_dma_tx_desc_rings - init the TX descriptor rings
1299 * @dev: net device structure.
1300 * Description: this function initializes the DMA TX descriptors
1301 * and allocates the socket buffers. It supports the chained and ring
1302 * modes.
1303 */
1304 static int init_dma_tx_desc_rings(struct net_device *dev)
1305 {
1306 struct stmmac_priv *priv = netdev_priv(dev);
1307 u32 tx_queue_cnt = priv->plat->tx_queues_to_use;
1308 u32 queue;
1309 int i;
1310
1311 for (queue = 0; queue < tx_queue_cnt; queue++) {
1312 struct stmmac_tx_queue *tx_q = &priv->tx_queue[queue];
1313
1314 netif_dbg(priv, probe, priv->dev,
1315 "(%s) dma_tx_phy=0x%08x\n", __func__,
1316 (u32)tx_q->dma_tx_phy);
1317
1318 /* Setup the chained descriptor addresses */
1319 if (priv->mode == STMMAC_CHAIN_MODE) {
1320 if (priv->extend_desc)
1321 priv->hw->mode->init(tx_q->dma_etx,
1322 tx_q->dma_tx_phy,
1323 DMA_TX_SIZE, 1);
1324 else
1325 priv->hw->mode->init(tx_q->dma_tx,
1326 tx_q->dma_tx_phy,
1327 DMA_TX_SIZE, 0);
1328 }
1329
1330 for (i = 0; i < DMA_TX_SIZE; i++) {
1331 struct dma_desc *p;
1332 if (priv->extend_desc)
1333 p = &((tx_q->dma_etx + i)->basic);
1334 else
1335 p = tx_q->dma_tx + i;
1336
1337 if (priv->synopsys_id >= DWMAC_CORE_4_00) {
1338 p->des0 = 0;
1339 p->des1 = 0;
1340 p->des2 = 0;
1341 p->des3 = 0;
1342 } else {
1343 p->des2 = 0;
1344 }
1345
1346 tx_q->tx_skbuff_dma[i].buf = 0;
1347 tx_q->tx_skbuff_dma[i].map_as_page = false;
1348 tx_q->tx_skbuff_dma[i].len = 0;
1349 tx_q->tx_skbuff_dma[i].last_segment = false;
1350 tx_q->tx_skbuff[i] = NULL;
1351 }
1352
1353 tx_q->dirty_tx = 0;
1354 tx_q->cur_tx = 0;
1355
1356 netdev_tx_reset_queue(netdev_get_tx_queue(priv->dev, queue));
1357 }
1358
1359 return 0;
1360 }
1361
1362 /**
1363 * init_dma_desc_rings - init the RX/TX descriptor rings
1364 * @dev: net device structure
1365 * @flags: gfp flag.
1366 * Description: this function initializes the DMA RX/TX descriptors
1367 * and allocates the socket buffers. It supports the chained and ring
1368 * modes.
1369 */
1370 static int init_dma_desc_rings(struct net_device *dev, gfp_t flags)
1371 {
1372 struct stmmac_priv *priv = netdev_priv(dev);
1373 int ret;
1374
1375 ret = init_dma_rx_desc_rings(dev, flags);
1376 if (ret)
1377 return ret;
1378
1379 ret = init_dma_tx_desc_rings(dev);
1380
1381 stmmac_clear_descriptors(priv);
1382
1383 if (netif_msg_hw(priv))
1384 stmmac_display_rings(priv);
1385
1386 return ret;
1387 }
1388
1389 /**
1390 * dma_free_rx_skbufs - free RX dma buffers
1391 * @priv: private structure
1392 * @queue: RX queue index
1393 */
1394 static void dma_free_rx_skbufs(struct stmmac_priv *priv, u32 queue)
1395 {
1396 int i;
1397
1398 for (i = 0; i < DMA_RX_SIZE; i++)
1399 stmmac_free_rx_buffer(priv, queue, i);
1400 }
1401
1402 /**
1403 * dma_free_tx_skbufs - free TX dma buffers
1404 * @priv: private structure
1405 * @queue: TX queue index
1406 */
1407 static void dma_free_tx_skbufs(struct stmmac_priv *priv, u32 queue)
1408 {
1409 int i;
1410
1411 for (i = 0; i < DMA_TX_SIZE; i++)
1412 stmmac_free_tx_buffer(priv, queue, i);
1413 }
1414
1415 /**
1416 * free_dma_rx_desc_resources - free RX dma desc resources
1417 * @priv: private structure
1418 */
1419 static void free_dma_rx_desc_resources(struct stmmac_priv *priv)
1420 {
1421 u32 rx_count = priv->plat->rx_queues_to_use;
1422 u32 queue;
1423
1424 /* Free RX queue resources */
1425 for (queue = 0; queue < rx_count; queue++) {
1426 struct stmmac_rx_queue *rx_q = &priv->rx_queue[queue];
1427
1428 /* Release the DMA RX socket buffers */
1429 dma_free_rx_skbufs(priv, queue);
1430
1431 /* Free DMA regions of consistent memory previously allocated */
1432 if (!priv->extend_desc)
1433 dma_free_coherent(priv->device,
1434 DMA_RX_SIZE * sizeof(struct dma_desc),
1435 rx_q->dma_rx, rx_q->dma_rx_phy);
1436 else
1437 dma_free_coherent(priv->device, DMA_RX_SIZE *
1438 sizeof(struct dma_extended_desc),
1439 rx_q->dma_erx, rx_q->dma_rx_phy);
1440
1441 kfree(rx_q->rx_skbuff_dma);
1442 kfree(rx_q->rx_skbuff);
1443 }
1444 }
1445
1446 /**
1447 * free_dma_tx_desc_resources - free TX dma desc resources
1448 * @priv: private structure
1449 */
1450 static void free_dma_tx_desc_resources(struct stmmac_priv *priv)
1451 {
1452 u32 tx_count = priv->plat->tx_queues_to_use;
1453 u32 queue = 0;
1454
1455 /* Free TX queue resources */
1456 for (queue = 0; queue < tx_count; queue++) {
1457 struct stmmac_tx_queue *tx_q = &priv->tx_queue[queue];
1458
1459 /* Release the DMA TX socket buffers */
1460 dma_free_tx_skbufs(priv, queue);
1461
1462 /* Free DMA regions of consistent memory previously allocated */
1463 if (!priv->extend_desc)
1464 dma_free_coherent(priv->device,
1465 DMA_TX_SIZE * sizeof(struct dma_desc),
1466 tx_q->dma_tx, tx_q->dma_tx_phy);
1467 else
1468 dma_free_coherent(priv->device, DMA_TX_SIZE *
1469 sizeof(struct dma_extended_desc),
1470 tx_q->dma_etx, tx_q->dma_tx_phy);
1471
1472 kfree(tx_q->tx_skbuff_dma);
1473 kfree(tx_q->tx_skbuff);
1474 }
1475 }
1476
1477 /**
1478 * alloc_dma_rx_desc_resources - alloc RX resources.
1479 * @priv: private structure
1480 * Description: according to which descriptor can be used (extend or basic)
1481 * this function allocates the resources for TX and RX paths. In case of
1482 * reception, for example, it pre-allocated the RX socket buffer in order to
1483 * allow zero-copy mechanism.
1484 */
1485 static int alloc_dma_rx_desc_resources(struct stmmac_priv *priv)
1486 {
1487 u32 rx_count = priv->plat->rx_queues_to_use;
1488 int ret = -ENOMEM;
1489 u32 queue;
1490
1491 /* RX queues buffers and DMA */
1492 for (queue = 0; queue < rx_count; queue++) {
1493 struct stmmac_rx_queue *rx_q = &priv->rx_queue[queue];
1494
1495 rx_q->queue_index = queue;
1496 rx_q->priv_data = priv;
1497
1498 rx_q->rx_skbuff_dma = kmalloc_array(DMA_RX_SIZE,
1499 sizeof(dma_addr_t),
1500 GFP_KERNEL);
1501 if (!rx_q->rx_skbuff_dma)
1502 return -ENOMEM;
1503
1504 rx_q->rx_skbuff = kmalloc_array(DMA_RX_SIZE,
1505 sizeof(struct sk_buff *),
1506 GFP_KERNEL);
1507 if (!rx_q->rx_skbuff)
1508 goto err_dma;
1509
1510 if (priv->extend_desc) {
1511 rx_q->dma_erx = dma_zalloc_coherent(priv->device,
1512 DMA_RX_SIZE *
1513 sizeof(struct
1514 dma_extended_desc),
1515 &rx_q->dma_rx_phy,
1516 GFP_KERNEL);
1517 if (!rx_q->dma_erx)
1518 goto err_dma;
1519
1520 } else {
1521 rx_q->dma_rx = dma_zalloc_coherent(priv->device,
1522 DMA_RX_SIZE *
1523 sizeof(struct
1524 dma_desc),
1525 &rx_q->dma_rx_phy,
1526 GFP_KERNEL);
1527 if (!rx_q->dma_rx)
1528 goto err_dma;
1529 }
1530 }
1531
1532 return 0;
1533
1534 err_dma:
1535 free_dma_rx_desc_resources(priv);
1536
1537 return ret;
1538 }
1539
1540 /**
1541 * alloc_dma_tx_desc_resources - alloc TX resources.
1542 * @priv: private structure
1543 * Description: according to which descriptor can be used (extend or basic)
1544 * this function allocates the resources for TX and RX paths. In case of
1545 * reception, for example, it pre-allocated the RX socket buffer in order to
1546 * allow zero-copy mechanism.
1547 */
1548 static int alloc_dma_tx_desc_resources(struct stmmac_priv *priv)
1549 {
1550 u32 tx_count = priv->plat->tx_queues_to_use;
1551 int ret = -ENOMEM;
1552 u32 queue;
1553
1554 /* TX queues buffers and DMA */
1555 for (queue = 0; queue < tx_count; queue++) {
1556 struct stmmac_tx_queue *tx_q = &priv->tx_queue[queue];
1557
1558 tx_q->queue_index = queue;
1559 tx_q->priv_data = priv;
1560
1561 tx_q->tx_skbuff_dma = kmalloc_array(DMA_TX_SIZE,
1562 sizeof(*tx_q->tx_skbuff_dma),
1563 GFP_KERNEL);
1564 if (!tx_q->tx_skbuff_dma)
1565 return -ENOMEM;
1566
1567 tx_q->tx_skbuff = kmalloc_array(DMA_TX_SIZE,
1568 sizeof(struct sk_buff *),
1569 GFP_KERNEL);
1570 if (!tx_q->tx_skbuff)
1571 goto err_dma_buffers;
1572
1573 if (priv->extend_desc) {
1574 tx_q->dma_etx = dma_zalloc_coherent(priv->device,
1575 DMA_TX_SIZE *
1576 sizeof(struct
1577 dma_extended_desc),
1578 &tx_q->dma_tx_phy,
1579 GFP_KERNEL);
1580 if (!tx_q->dma_etx)
1581 goto err_dma_buffers;
1582 } else {
1583 tx_q->dma_tx = dma_zalloc_coherent(priv->device,
1584 DMA_TX_SIZE *
1585 sizeof(struct
1586 dma_desc),
1587 &tx_q->dma_tx_phy,
1588 GFP_KERNEL);
1589 if (!tx_q->dma_tx)
1590 goto err_dma_buffers;
1591 }
1592 }
1593
1594 return 0;
1595
1596 err_dma_buffers:
1597 free_dma_tx_desc_resources(priv);
1598
1599 return ret;
1600 }
1601
1602 /**
1603 * alloc_dma_desc_resources - alloc TX/RX resources.
1604 * @priv: private structure
1605 * Description: according to which descriptor can be used (extend or basic)
1606 * this function allocates the resources for TX and RX paths. In case of
1607 * reception, for example, it pre-allocated the RX socket buffer in order to
1608 * allow zero-copy mechanism.
1609 */
1610 static int alloc_dma_desc_resources(struct stmmac_priv *priv)
1611 {
1612 /* RX Allocation */
1613 int ret = alloc_dma_rx_desc_resources(priv);
1614
1615 if (ret)
1616 return ret;
1617
1618 ret = alloc_dma_tx_desc_resources(priv);
1619
1620 return ret;
1621 }
1622
1623 /**
1624 * free_dma_desc_resources - free dma desc resources
1625 * @priv: private structure
1626 */
1627 static void free_dma_desc_resources(struct stmmac_priv *priv)
1628 {
1629 /* Release the DMA RX socket buffers */
1630 free_dma_rx_desc_resources(priv);
1631
1632 /* Release the DMA TX socket buffers */
1633 free_dma_tx_desc_resources(priv);
1634 }
1635
1636 /**
1637 * stmmac_mac_enable_rx_queues - Enable MAC rx queues
1638 * @priv: driver private structure
1639 * Description: It is used for enabling the rx queues in the MAC
1640 */
1641 static void stmmac_mac_enable_rx_queues(struct stmmac_priv *priv)
1642 {
1643 u32 rx_queues_count = priv->plat->rx_queues_to_use;
1644 int queue;
1645 u8 mode;
1646
1647 for (queue = 0; queue < rx_queues_count; queue++) {
1648 mode = priv->plat->rx_queues_cfg[queue].mode_to_use;
1649 priv->hw->mac->rx_queue_enable(priv->hw, mode, queue);
1650 }
1651 }
1652
1653 /**
1654 * stmmac_start_rx_dma - start RX DMA channel
1655 * @priv: driver private structure
1656 * @chan: RX channel index
1657 * Description:
1658 * This starts a RX DMA channel
1659 */
1660 static void stmmac_start_rx_dma(struct stmmac_priv *priv, u32 chan)
1661 {
1662 netdev_dbg(priv->dev, "DMA RX processes started in channel %d\n", chan);
1663 priv->hw->dma->start_rx(priv->ioaddr, chan);
1664 }
1665
1666 /**
1667 * stmmac_start_tx_dma - start TX DMA channel
1668 * @priv: driver private structure
1669 * @chan: TX channel index
1670 * Description:
1671 * This starts a TX DMA channel
1672 */
1673 static void stmmac_start_tx_dma(struct stmmac_priv *priv, u32 chan)
1674 {
1675 netdev_dbg(priv->dev, "DMA TX processes started in channel %d\n", chan);
1676 priv->hw->dma->start_tx(priv->ioaddr, chan);
1677 }
1678
1679 /**
1680 * stmmac_stop_rx_dma - stop RX DMA channel
1681 * @priv: driver private structure
1682 * @chan: RX channel index
1683 * Description:
1684 * This stops a RX DMA channel
1685 */
1686 static void stmmac_stop_rx_dma(struct stmmac_priv *priv, u32 chan)
1687 {
1688 netdev_dbg(priv->dev, "DMA RX processes stopped in channel %d\n", chan);
1689 priv->hw->dma->stop_rx(priv->ioaddr, chan);
1690 }
1691
1692 /**
1693 * stmmac_stop_tx_dma - stop TX DMA channel
1694 * @priv: driver private structure
1695 * @chan: TX channel index
1696 * Description:
1697 * This stops a TX DMA channel
1698 */
1699 static void stmmac_stop_tx_dma(struct stmmac_priv *priv, u32 chan)
1700 {
1701 netdev_dbg(priv->dev, "DMA TX processes stopped in channel %d\n", chan);
1702 priv->hw->dma->stop_tx(priv->ioaddr, chan);
1703 }
1704
1705 /**
1706 * stmmac_start_all_dma - start all RX and TX DMA channels
1707 * @priv: driver private structure
1708 * Description:
1709 * This starts all the RX and TX DMA channels
1710 */
1711 static void stmmac_start_all_dma(struct stmmac_priv *priv)
1712 {
1713 u32 rx_channels_count = priv->plat->rx_queues_to_use;
1714 u32 tx_channels_count = priv->plat->tx_queues_to_use;
1715 u32 chan = 0;
1716
1717 for (chan = 0; chan < rx_channels_count; chan++)
1718 stmmac_start_rx_dma(priv, chan);
1719
1720 for (chan = 0; chan < tx_channels_count; chan++)
1721 stmmac_start_tx_dma(priv, chan);
1722 }
1723
1724 /**
1725 * stmmac_stop_all_dma - stop all RX and TX DMA channels
1726 * @priv: driver private structure
1727 * Description:
1728 * This stops the RX and TX DMA channels
1729 */
1730 static void stmmac_stop_all_dma(struct stmmac_priv *priv)
1731 {
1732 u32 rx_channels_count = priv->plat->rx_queues_to_use;
1733 u32 tx_channels_count = priv->plat->tx_queues_to_use;
1734 u32 chan = 0;
1735
1736 for (chan = 0; chan < rx_channels_count; chan++)
1737 stmmac_stop_rx_dma(priv, chan);
1738
1739 for (chan = 0; chan < tx_channels_count; chan++)
1740 stmmac_stop_tx_dma(priv, chan);
1741 }
1742
1743 /**
1744 * stmmac_dma_operation_mode - HW DMA operation mode
1745 * @priv: driver private structure
1746 * Description: it is used for configuring the DMA operation mode register in
1747 * order to program the tx/rx DMA thresholds or Store-And-Forward mode.
1748 */
1749 static void stmmac_dma_operation_mode(struct stmmac_priv *priv)
1750 {
1751 u32 rx_channels_count = priv->plat->rx_queues_to_use;
1752 u32 tx_channels_count = priv->plat->tx_queues_to_use;
1753 int rxfifosz = priv->plat->rx_fifo_size;
1754 u32 txmode = 0;
1755 u32 rxmode = 0;
1756 u32 chan = 0;
1757
1758 if (rxfifosz == 0)
1759 rxfifosz = priv->dma_cap.rx_fifo_size;
1760
1761 if (priv->plat->force_thresh_dma_mode) {
1762 txmode = tc;
1763 rxmode = tc;
1764 } else if (priv->plat->force_sf_dma_mode || priv->plat->tx_coe) {
1765 /*
1766 * In case of GMAC, SF mode can be enabled
1767 * to perform the TX COE in HW. This depends on:
1768 * 1) TX COE if actually supported
1769 * 2) There is no bugged Jumbo frame support
1770 * that needs to not insert csum in the TDES.
1771 */
1772 txmode = SF_DMA_MODE;
1773 rxmode = SF_DMA_MODE;
1774 priv->xstats.threshold = SF_DMA_MODE;
1775 } else {
1776 txmode = tc;
1777 rxmode = SF_DMA_MODE;
1778 }
1779
1780 /* configure all channels */
1781 if (priv->synopsys_id >= DWMAC_CORE_4_00) {
1782 for (chan = 0; chan < rx_channels_count; chan++)
1783 priv->hw->dma->dma_rx_mode(priv->ioaddr, rxmode, chan,
1784 rxfifosz);
1785
1786 for (chan = 0; chan < tx_channels_count; chan++)
1787 priv->hw->dma->dma_tx_mode(priv->ioaddr, txmode, chan);
1788 } else {
1789 priv->hw->dma->dma_mode(priv->ioaddr, txmode, rxmode,
1790 rxfifosz);
1791 }
1792 }
1793
1794 /**
1795 * stmmac_tx_clean - to manage the transmission completion
1796 * @priv: driver private structure
1797 * @queue: TX queue index
1798 * Description: it reclaims the transmit resources after transmission completes.
1799 */
1800 static void stmmac_tx_clean(struct stmmac_priv *priv, u32 queue)
1801 {
1802 struct stmmac_tx_queue *tx_q = &priv->tx_queue[queue];
1803 unsigned int bytes_compl = 0, pkts_compl = 0;
1804 unsigned int entry = tx_q->dirty_tx;
1805
1806 netif_tx_lock(priv->dev);
1807
1808 priv->xstats.tx_clean++;
1809
1810 while (entry != tx_q->cur_tx) {
1811 struct sk_buff *skb = tx_q->tx_skbuff[entry];
1812 struct dma_desc *p;
1813 int status;
1814
1815 if (priv->extend_desc)
1816 p = (struct dma_desc *)(tx_q->dma_etx + entry);
1817 else
1818 p = tx_q->dma_tx + entry;
1819
1820 status = priv->hw->desc->tx_status(&priv->dev->stats,
1821 &priv->xstats, p,
1822 priv->ioaddr);
1823 /* Check if the descriptor is owned by the DMA */
1824 if (unlikely(status & tx_dma_own))
1825 break;
1826
1827 /* Just consider the last segment and ...*/
1828 if (likely(!(status & tx_not_ls))) {
1829 /* ... verify the status error condition */
1830 if (unlikely(status & tx_err)) {
1831 priv->dev->stats.tx_errors++;
1832 } else {
1833 priv->dev->stats.tx_packets++;
1834 priv->xstats.tx_pkt_n++;
1835 }
1836 stmmac_get_tx_hwtstamp(priv, p, skb);
1837 }
1838
1839 if (likely(tx_q->tx_skbuff_dma[entry].buf)) {
1840 if (tx_q->tx_skbuff_dma[entry].map_as_page)
1841 dma_unmap_page(priv->device,
1842 tx_q->tx_skbuff_dma[entry].buf,
1843 tx_q->tx_skbuff_dma[entry].len,
1844 DMA_TO_DEVICE);
1845 else
1846 dma_unmap_single(priv->device,
1847 tx_q->tx_skbuff_dma[entry].buf,
1848 tx_q->tx_skbuff_dma[entry].len,
1849 DMA_TO_DEVICE);
1850 tx_q->tx_skbuff_dma[entry].buf = 0;
1851 tx_q->tx_skbuff_dma[entry].len = 0;
1852 tx_q->tx_skbuff_dma[entry].map_as_page = false;
1853 }
1854
1855 if (priv->hw->mode->clean_desc3)
1856 priv->hw->mode->clean_desc3(tx_q, p);
1857
1858 tx_q->tx_skbuff_dma[entry].last_segment = false;
1859 tx_q->tx_skbuff_dma[entry].is_jumbo = false;
1860
1861 if (likely(skb != NULL)) {
1862 pkts_compl++;
1863 bytes_compl += skb->len;
1864 dev_consume_skb_any(skb);
1865 tx_q->tx_skbuff[entry] = NULL;
1866 }
1867
1868 priv->hw->desc->release_tx_desc(p, priv->mode);
1869
1870 entry = STMMAC_GET_ENTRY(entry, DMA_TX_SIZE);
1871 }
1872 tx_q->dirty_tx = entry;
1873
1874 netdev_tx_completed_queue(netdev_get_tx_queue(priv->dev, queue),
1875 pkts_compl, bytes_compl);
1876
1877 if (unlikely(netif_tx_queue_stopped(netdev_get_tx_queue(priv->dev,
1878 queue))) &&
1879 stmmac_tx_avail(priv, queue) > STMMAC_TX_THRESH) {
1880
1881 netif_dbg(priv, tx_done, priv->dev,
1882 "%s: restart transmit\n", __func__);
1883 netif_tx_wake_queue(netdev_get_tx_queue(priv->dev, queue));
1884 }
1885
1886 if ((priv->eee_enabled) && (!priv->tx_path_in_lpi_mode)) {
1887 stmmac_enable_eee_mode(priv);
1888 mod_timer(&priv->eee_ctrl_timer, STMMAC_LPI_T(eee_timer));
1889 }
1890 netif_tx_unlock(priv->dev);
1891 }
1892
1893 static inline void stmmac_enable_dma_irq(struct stmmac_priv *priv, u32 chan)
1894 {
1895 priv->hw->dma->enable_dma_irq(priv->ioaddr, chan);
1896 }
1897
1898 static inline void stmmac_disable_dma_irq(struct stmmac_priv *priv, u32 chan)
1899 {
1900 priv->hw->dma->disable_dma_irq(priv->ioaddr, chan);
1901 }
1902
1903 /**
1904 * stmmac_tx_err - to manage the tx error
1905 * @priv: driver private structure
1906 * @chan: channel index
1907 * Description: it cleans the descriptors and restarts the transmission
1908 * in case of transmission errors.
1909 */
1910 static void stmmac_tx_err(struct stmmac_priv *priv, u32 chan)
1911 {
1912 struct stmmac_tx_queue *tx_q = &priv->tx_queue[chan];
1913 int i;
1914
1915 netif_tx_stop_queue(netdev_get_tx_queue(priv->dev, chan));
1916
1917 stmmac_stop_tx_dma(priv, chan);
1918 dma_free_tx_skbufs(priv, chan);
1919 for (i = 0; i < DMA_TX_SIZE; i++)
1920 if (priv->extend_desc)
1921 priv->hw->desc->init_tx_desc(&tx_q->dma_etx[i].basic,
1922 priv->mode,
1923 (i == DMA_TX_SIZE - 1));
1924 else
1925 priv->hw->desc->init_tx_desc(&tx_q->dma_tx[i],
1926 priv->mode,
1927 (i == DMA_TX_SIZE - 1));
1928 tx_q->dirty_tx = 0;
1929 tx_q->cur_tx = 0;
1930 netdev_tx_reset_queue(netdev_get_tx_queue(priv->dev, chan));
1931 stmmac_start_tx_dma(priv, chan);
1932
1933 priv->dev->stats.tx_errors++;
1934 netif_tx_wake_queue(netdev_get_tx_queue(priv->dev, chan));
1935 }
1936
1937 /**
1938 * stmmac_set_dma_operation_mode - Set DMA operation mode by channel
1939 * @priv: driver private structure
1940 * @txmode: TX operating mode
1941 * @rxmode: RX operating mode
1942 * @chan: channel index
1943 * Description: it is used for configuring of the DMA operation mode in
1944 * runtime in order to program the tx/rx DMA thresholds or Store-And-Forward
1945 * mode.
1946 */
1947 static void stmmac_set_dma_operation_mode(struct stmmac_priv *priv, u32 txmode,
1948 u32 rxmode, u32 chan)
1949 {
1950 int rxfifosz = priv->plat->rx_fifo_size;
1951
1952 if (rxfifosz == 0)
1953 rxfifosz = priv->dma_cap.rx_fifo_size;
1954
1955 if (priv->synopsys_id >= DWMAC_CORE_4_00) {
1956 priv->hw->dma->dma_rx_mode(priv->ioaddr, rxmode, chan,
1957 rxfifosz);
1958 priv->hw->dma->dma_tx_mode(priv->ioaddr, txmode, chan);
1959 } else {
1960 priv->hw->dma->dma_mode(priv->ioaddr, txmode, rxmode,
1961 rxfifosz);
1962 }
1963 }
1964
1965 /**
1966 * stmmac_dma_interrupt - DMA ISR
1967 * @priv: driver private structure
1968 * Description: this is the DMA ISR. It is called by the main ISR.
1969 * It calls the dwmac dma routine and schedule poll method in case of some
1970 * work can be done.
1971 */
1972 static void stmmac_dma_interrupt(struct stmmac_priv *priv)
1973 {
1974 u32 tx_channel_count = priv->plat->tx_queues_to_use;
1975 int status;
1976 u32 chan;
1977
1978 for (chan = 0; chan < tx_channel_count; chan++) {
1979 struct stmmac_rx_queue *rx_q = &priv->rx_queue[chan];
1980
1981 status = priv->hw->dma->dma_interrupt(priv->ioaddr,
1982 &priv->xstats, chan);
1983 if (likely((status & handle_rx)) || (status & handle_tx)) {
1984 if (likely(napi_schedule_prep(&rx_q->napi))) {
1985 stmmac_disable_dma_irq(priv, chan);
1986 __napi_schedule(&rx_q->napi);
1987 }
1988 }
1989
1990 if (unlikely(status & tx_hard_error_bump_tc)) {
1991 /* Try to bump up the dma threshold on this failure */
1992 if (unlikely(priv->xstats.threshold != SF_DMA_MODE) &&
1993 (tc <= 256)) {
1994 tc += 64;
1995 if (priv->plat->force_thresh_dma_mode)
1996 stmmac_set_dma_operation_mode(priv,
1997 tc,
1998 tc,
1999 chan);
2000 else
2001 stmmac_set_dma_operation_mode(priv,
2002 tc,
2003 SF_DMA_MODE,
2004 chan);
2005 priv->xstats.threshold = tc;
2006 }
2007 } else if (unlikely(status == tx_hard_error)) {
2008 stmmac_tx_err(priv, chan);
2009 }
2010 }
2011 }
2012
2013 /**
2014 * stmmac_mmc_setup: setup the Mac Management Counters (MMC)
2015 * @priv: driver private structure
2016 * Description: this masks the MMC irq, in fact, the counters are managed in SW.
2017 */
2018 static void stmmac_mmc_setup(struct stmmac_priv *priv)
2019 {
2020 unsigned int mode = MMC_CNTRL_RESET_ON_READ | MMC_CNTRL_COUNTER_RESET |
2021 MMC_CNTRL_PRESET | MMC_CNTRL_FULL_HALF_PRESET;
2022
2023 if (priv->synopsys_id >= DWMAC_CORE_4_00) {
2024 priv->ptpaddr = priv->ioaddr + PTP_GMAC4_OFFSET;
2025 priv->mmcaddr = priv->ioaddr + MMC_GMAC4_OFFSET;
2026 } else {
2027 priv->ptpaddr = priv->ioaddr + PTP_GMAC3_X_OFFSET;
2028 priv->mmcaddr = priv->ioaddr + MMC_GMAC3_X_OFFSET;
2029 }
2030
2031 dwmac_mmc_intr_all_mask(priv->mmcaddr);
2032
2033 if (priv->dma_cap.rmon) {
2034 dwmac_mmc_ctrl(priv->mmcaddr, mode);
2035 memset(&priv->mmc, 0, sizeof(struct stmmac_counters));
2036 } else
2037 netdev_info(priv->dev, "No MAC Management Counters available\n");
2038 }
2039
2040 /**
2041 * stmmac_selec_desc_mode - to select among: normal/alternate/extend descriptors
2042 * @priv: driver private structure
2043 * Description: select the Enhanced/Alternate or Normal descriptors.
2044 * In case of Enhanced/Alternate, it checks if the extended descriptors are
2045 * supported by the HW capability register.
2046 */
2047 static void stmmac_selec_desc_mode(struct stmmac_priv *priv)
2048 {
2049 if (priv->plat->enh_desc) {
2050 dev_info(priv->device, "Enhanced/Alternate descriptors\n");
2051
2052 /* GMAC older than 3.50 has no extended descriptors */
2053 if (priv->synopsys_id >= DWMAC_CORE_3_50) {
2054 dev_info(priv->device, "Enabled extended descriptors\n");
2055 priv->extend_desc = 1;
2056 } else
2057 dev_warn(priv->device, "Extended descriptors not supported\n");
2058
2059 priv->hw->desc = &enh_desc_ops;
2060 } else {
2061 dev_info(priv->device, "Normal descriptors\n");
2062 priv->hw->desc = &ndesc_ops;
2063 }
2064 }
2065
2066 /**
2067 * stmmac_get_hw_features - get MAC capabilities from the HW cap. register.
2068 * @priv: driver private structure
2069 * Description:
2070 * new GMAC chip generations have a new register to indicate the
2071 * presence of the optional feature/functions.
2072 * This can be also used to override the value passed through the
2073 * platform and necessary for old MAC10/100 and GMAC chips.
2074 */
2075 static int stmmac_get_hw_features(struct stmmac_priv *priv)
2076 {
2077 u32 ret = 0;
2078
2079 if (priv->hw->dma->get_hw_feature) {
2080 priv->hw->dma->get_hw_feature(priv->ioaddr,
2081 &priv->dma_cap);
2082 ret = 1;
2083 }
2084
2085 return ret;
2086 }
2087
2088 /**
2089 * stmmac_check_ether_addr - check if the MAC addr is valid
2090 * @priv: driver private structure
2091 * Description:
2092 * it is to verify if the MAC address is valid, in case of failures it
2093 * generates a random MAC address
2094 */
2095 static void stmmac_check_ether_addr(struct stmmac_priv *priv)
2096 {
2097 if (!is_valid_ether_addr(priv->dev->dev_addr)) {
2098 priv->hw->mac->get_umac_addr(priv->hw,
2099 priv->dev->dev_addr, 0);
2100 if (!is_valid_ether_addr(priv->dev->dev_addr))
2101 eth_hw_addr_random(priv->dev);
2102 netdev_info(priv->dev, "device MAC address %pM\n",
2103 priv->dev->dev_addr);
2104 }
2105 }
2106
2107 /**
2108 * stmmac_init_dma_engine - DMA init.
2109 * @priv: driver private structure
2110 * Description:
2111 * It inits the DMA invoking the specific MAC/GMAC callback.
2112 * Some DMA parameters can be passed from the platform;
2113 * in case of these are not passed a default is kept for the MAC or GMAC.
2114 */
2115 static int stmmac_init_dma_engine(struct stmmac_priv *priv)
2116 {
2117 u32 rx_channels_count = priv->plat->rx_queues_to_use;
2118 u32 tx_channels_count = priv->plat->tx_queues_to_use;
2119 struct stmmac_rx_queue *rx_q;
2120 struct stmmac_tx_queue *tx_q;
2121 u32 dummy_dma_rx_phy = 0;
2122 u32 dummy_dma_tx_phy = 0;
2123 u32 chan = 0;
2124 int atds = 0;
2125 int ret = 0;
2126
2127 if (!priv->plat->dma_cfg || !priv->plat->dma_cfg->pbl) {
2128 dev_err(priv->device, "Invalid DMA configuration\n");
2129 return -EINVAL;
2130 }
2131
2132 if (priv->extend_desc && (priv->mode == STMMAC_RING_MODE))
2133 atds = 1;
2134
2135 ret = priv->hw->dma->reset(priv->ioaddr);
2136 if (ret) {
2137 dev_err(priv->device, "Failed to reset the dma\n");
2138 return ret;
2139 }
2140
2141 if (priv->synopsys_id >= DWMAC_CORE_4_00) {
2142 /* DMA Configuration */
2143 priv->hw->dma->init(priv->ioaddr, priv->plat->dma_cfg,
2144 dummy_dma_tx_phy, dummy_dma_rx_phy, atds);
2145
2146 /* DMA RX Channel Configuration */
2147 for (chan = 0; chan < rx_channels_count; chan++) {
2148 rx_q = &priv->rx_queue[chan];
2149
2150 priv->hw->dma->init_rx_chan(priv->ioaddr,
2151 priv->plat->dma_cfg,
2152 rx_q->dma_rx_phy, chan);
2153
2154 rx_q->rx_tail_addr = rx_q->dma_rx_phy +
2155 (DMA_RX_SIZE * sizeof(struct dma_desc));
2156 priv->hw->dma->set_rx_tail_ptr(priv->ioaddr,
2157 rx_q->rx_tail_addr,
2158 chan);
2159 }
2160
2161 /* DMA TX Channel Configuration */
2162 for (chan = 0; chan < tx_channels_count; chan++) {
2163 tx_q = &priv->tx_queue[chan];
2164
2165 priv->hw->dma->init_chan(priv->ioaddr,
2166 priv->plat->dma_cfg,
2167 chan);
2168
2169 priv->hw->dma->init_tx_chan(priv->ioaddr,
2170 priv->plat->dma_cfg,
2171 tx_q->dma_tx_phy, chan);
2172
2173 tx_q->tx_tail_addr = tx_q->dma_tx_phy +
2174 (DMA_TX_SIZE * sizeof(struct dma_desc));
2175 priv->hw->dma->set_tx_tail_ptr(priv->ioaddr,
2176 tx_q->tx_tail_addr,
2177 chan);
2178 }
2179 } else {
2180 rx_q = &priv->rx_queue[chan];
2181 tx_q = &priv->tx_queue[chan];
2182 priv->hw->dma->init(priv->ioaddr, priv->plat->dma_cfg,
2183 tx_q->dma_tx_phy, rx_q->dma_rx_phy, atds);
2184 }
2185
2186 if (priv->plat->axi && priv->hw->dma->axi)
2187 priv->hw->dma->axi(priv->ioaddr, priv->plat->axi);
2188
2189 return ret;
2190 }
2191
2192 /**
2193 * stmmac_tx_timer - mitigation sw timer for tx.
2194 * @data: data pointer
2195 * Description:
2196 * This is the timer handler to directly invoke the stmmac_tx_clean.
2197 */
2198 static void stmmac_tx_timer(unsigned long data)
2199 {
2200 struct stmmac_priv *priv = (struct stmmac_priv *)data;
2201 u32 tx_queues_count = priv->plat->tx_queues_to_use;
2202 u32 queue;
2203
2204 /* let's scan all the tx queues */
2205 for (queue = 0; queue < tx_queues_count; queue++)
2206 stmmac_tx_clean(priv, queue);
2207 }
2208
2209 /**
2210 * stmmac_init_tx_coalesce - init tx mitigation options.
2211 * @priv: driver private structure
2212 * Description:
2213 * This inits the transmit coalesce parameters: i.e. timer rate,
2214 * timer handler and default threshold used for enabling the
2215 * interrupt on completion bit.
2216 */
2217 static void stmmac_init_tx_coalesce(struct stmmac_priv *priv)
2218 {
2219 priv->tx_coal_frames = STMMAC_TX_FRAMES;
2220 priv->tx_coal_timer = STMMAC_COAL_TX_TIMER;
2221 init_timer(&priv->txtimer);
2222 priv->txtimer.expires = STMMAC_COAL_TIMER(priv->tx_coal_timer);
2223 priv->txtimer.data = (unsigned long)priv;
2224 priv->txtimer.function = stmmac_tx_timer;
2225 add_timer(&priv->txtimer);
2226 }
2227
2228 static void stmmac_set_rings_length(struct stmmac_priv *priv)
2229 {
2230 u32 rx_channels_count = priv->plat->rx_queues_to_use;
2231 u32 tx_channels_count = priv->plat->tx_queues_to_use;
2232 u32 chan;
2233
2234 /* set TX ring length */
2235 if (priv->hw->dma->set_tx_ring_len) {
2236 for (chan = 0; chan < tx_channels_count; chan++)
2237 priv->hw->dma->set_tx_ring_len(priv->ioaddr,
2238 (DMA_TX_SIZE - 1), chan);
2239 }
2240
2241 /* set RX ring length */
2242 if (priv->hw->dma->set_rx_ring_len) {
2243 for (chan = 0; chan < rx_channels_count; chan++)
2244 priv->hw->dma->set_rx_ring_len(priv->ioaddr,
2245 (DMA_RX_SIZE - 1), chan);
2246 }
2247 }
2248
2249 /**
2250 * stmmac_set_tx_queue_weight - Set TX queue weight
2251 * @priv: driver private structure
2252 * Description: It is used for setting TX queues weight
2253 */
2254 static void stmmac_set_tx_queue_weight(struct stmmac_priv *priv)
2255 {
2256 u32 tx_queues_count = priv->plat->tx_queues_to_use;
2257 u32 weight;
2258 u32 queue;
2259
2260 for (queue = 0; queue < tx_queues_count; queue++) {
2261 weight = priv->plat->tx_queues_cfg[queue].weight;
2262 priv->hw->mac->set_mtl_tx_queue_weight(priv->hw, weight, queue);
2263 }
2264 }
2265
2266 /**
2267 * stmmac_configure_cbs - Configure CBS in TX queue
2268 * @priv: driver private structure
2269 * Description: It is used for configuring CBS in AVB TX queues
2270 */
2271 static void stmmac_configure_cbs(struct stmmac_priv *priv)
2272 {
2273 u32 tx_queues_count = priv->plat->tx_queues_to_use;
2274 u32 mode_to_use;
2275 u32 queue;
2276
2277 /* queue 0 is reserved for legacy traffic */
2278 for (queue = 1; queue < tx_queues_count; queue++) {
2279 mode_to_use = priv->plat->tx_queues_cfg[queue].mode_to_use;
2280 if (mode_to_use == MTL_QUEUE_DCB)
2281 continue;
2282
2283 priv->hw->mac->config_cbs(priv->hw,
2284 priv->plat->tx_queues_cfg[queue].send_slope,
2285 priv->plat->tx_queues_cfg[queue].idle_slope,
2286 priv->plat->tx_queues_cfg[queue].high_credit,
2287 priv->plat->tx_queues_cfg[queue].low_credit,
2288 queue);
2289 }
2290 }
2291
2292 /**
2293 * stmmac_rx_queue_dma_chan_map - Map RX queue to RX dma channel
2294 * @priv: driver private structure
2295 * Description: It is used for mapping RX queues to RX dma channels
2296 */
2297 static void stmmac_rx_queue_dma_chan_map(struct stmmac_priv *priv)
2298 {
2299 u32 rx_queues_count = priv->plat->rx_queues_to_use;
2300 u32 queue;
2301 u32 chan;
2302
2303 for (queue = 0; queue < rx_queues_count; queue++) {
2304 chan = priv->plat->rx_queues_cfg[queue].chan;
2305 priv->hw->mac->map_mtl_to_dma(priv->hw, queue, chan);
2306 }
2307 }
2308
2309 /**
2310 * stmmac_mac_config_rx_queues_prio - Configure RX Queue priority
2311 * @priv: driver private structure
2312 * Description: It is used for configuring the RX Queue Priority
2313 */
2314 static void stmmac_mac_config_rx_queues_prio(struct stmmac_priv *priv)
2315 {
2316 u32 rx_queues_count = priv->plat->rx_queues_to_use;
2317 u32 queue;
2318 u32 prio;
2319
2320 for (queue = 0; queue < rx_queues_count; queue++) {
2321 if (!priv->plat->rx_queues_cfg[queue].use_prio)
2322 continue;
2323
2324 prio = priv->plat->rx_queues_cfg[queue].prio;
2325 priv->hw->mac->rx_queue_prio(priv->hw, prio, queue);
2326 }
2327 }
2328
2329 /**
2330 * stmmac_mac_config_tx_queues_prio - Configure TX Queue priority
2331 * @priv: driver private structure
2332 * Description: It is used for configuring the TX Queue Priority
2333 */
2334 static void stmmac_mac_config_tx_queues_prio(struct stmmac_priv *priv)
2335 {
2336 u32 tx_queues_count = priv->plat->tx_queues_to_use;
2337 u32 queue;
2338 u32 prio;
2339
2340 for (queue = 0; queue < tx_queues_count; queue++) {
2341 if (!priv->plat->tx_queues_cfg[queue].use_prio)
2342 continue;
2343
2344 prio = priv->plat->tx_queues_cfg[queue].prio;
2345 priv->hw->mac->tx_queue_prio(priv->hw, prio, queue);
2346 }
2347 }
2348
2349 /**
2350 * stmmac_mac_config_rx_queues_routing - Configure RX Queue Routing
2351 * @priv: driver private structure
2352 * Description: It is used for configuring the RX queue routing
2353 */
2354 static void stmmac_mac_config_rx_queues_routing(struct stmmac_priv *priv)
2355 {
2356 u32 rx_queues_count = priv->plat->rx_queues_to_use;
2357 u32 queue;
2358 u8 packet;
2359
2360 for (queue = 0; queue < rx_queues_count; queue++) {
2361 /* no specific packet type routing specified for the queue */
2362 if (priv->plat->rx_queues_cfg[queue].pkt_route == 0x0)
2363 continue;
2364
2365 packet = priv->plat->rx_queues_cfg[queue].pkt_route;
2366 priv->hw->mac->rx_queue_prio(priv->hw, packet, queue);
2367 }
2368 }
2369
2370 /**
2371 * stmmac_mtl_configuration - Configure MTL
2372 * @priv: driver private structure
2373 * Description: It is used for configurring MTL
2374 */
2375 static void stmmac_mtl_configuration(struct stmmac_priv *priv)
2376 {
2377 u32 rx_queues_count = priv->plat->rx_queues_to_use;
2378 u32 tx_queues_count = priv->plat->tx_queues_to_use;
2379
2380 if (tx_queues_count > 1 && priv->hw->mac->set_mtl_tx_queue_weight)
2381 stmmac_set_tx_queue_weight(priv);
2382
2383 /* Configure MTL RX algorithms */
2384 if (rx_queues_count > 1 && priv->hw->mac->prog_mtl_rx_algorithms)
2385 priv->hw->mac->prog_mtl_rx_algorithms(priv->hw,
2386 priv->plat->rx_sched_algorithm);
2387
2388 /* Configure MTL TX algorithms */
2389 if (tx_queues_count > 1 && priv->hw->mac->prog_mtl_tx_algorithms)
2390 priv->hw->mac->prog_mtl_tx_algorithms(priv->hw,
2391 priv->plat->tx_sched_algorithm);
2392
2393 /* Configure CBS in AVB TX queues */
2394 if (tx_queues_count > 1 && priv->hw->mac->config_cbs)
2395 stmmac_configure_cbs(priv);
2396
2397 /* Map RX MTL to DMA channels */
2398 if (priv->hw->mac->map_mtl_to_dma)
2399 stmmac_rx_queue_dma_chan_map(priv);
2400
2401 /* Enable MAC RX Queues */
2402 if (priv->hw->mac->rx_queue_enable)
2403 stmmac_mac_enable_rx_queues(priv);
2404
2405 /* Set RX priorities */
2406 if (rx_queues_count > 1 && priv->hw->mac->rx_queue_prio)
2407 stmmac_mac_config_rx_queues_prio(priv);
2408
2409 /* Set TX priorities */
2410 if (tx_queues_count > 1 && priv->hw->mac->tx_queue_prio)
2411 stmmac_mac_config_tx_queues_prio(priv);
2412
2413 /* Set RX routing */
2414 if (rx_queues_count > 1 && priv->hw->mac->rx_queue_routing)
2415 stmmac_mac_config_rx_queues_routing(priv);
2416 }
2417
2418 /**
2419 * stmmac_hw_setup - setup mac in a usable state.
2420 * @dev : pointer to the device structure.
2421 * Description:
2422 * this is the main function to setup the HW in a usable state because the
2423 * dma engine is reset, the core registers are configured (e.g. AXI,
2424 * Checksum features, timers). The DMA is ready to start receiving and
2425 * transmitting.
2426 * Return value:
2427 * 0 on success and an appropriate (-)ve integer as defined in errno.h
2428 * file on failure.
2429 */
2430 static int stmmac_hw_setup(struct net_device *dev, bool init_ptp)
2431 {
2432 struct stmmac_priv *priv = netdev_priv(dev);
2433 u32 rx_cnt = priv->plat->rx_queues_to_use;
2434 u32 tx_cnt = priv->plat->tx_queues_to_use;
2435 u32 chan;
2436 int ret;
2437
2438 /* DMA initialization and SW reset */
2439 ret = stmmac_init_dma_engine(priv);
2440 if (ret < 0) {
2441 netdev_err(priv->dev, "%s: DMA engine initialization failed\n",
2442 __func__);
2443 return ret;
2444 }
2445
2446 /* Copy the MAC addr into the HW */
2447 priv->hw->mac->set_umac_addr(priv->hw, dev->dev_addr, 0);
2448
2449 /* PS and related bits will be programmed according to the speed */
2450 if (priv->hw->pcs) {
2451 int speed = priv->plat->mac_port_sel_speed;
2452
2453 if ((speed == SPEED_10) || (speed == SPEED_100) ||
2454 (speed == SPEED_1000)) {
2455 priv->hw->ps = speed;
2456 } else {
2457 dev_warn(priv->device, "invalid port speed\n");
2458 priv->hw->ps = 0;
2459 }
2460 }
2461
2462 /* Initialize the MAC Core */
2463 priv->hw->mac->core_init(priv->hw, dev->mtu);
2464
2465 /* Initialize MTL*/
2466 if (priv->synopsys_id >= DWMAC_CORE_4_00)
2467 stmmac_mtl_configuration(priv);
2468
2469 ret = priv->hw->mac->rx_ipc(priv->hw);
2470 if (!ret) {
2471 netdev_warn(priv->dev, "RX IPC Checksum Offload disabled\n");
2472 priv->plat->rx_coe = STMMAC_RX_COE_NONE;
2473 priv->hw->rx_csum = 0;
2474 }
2475
2476 /* Enable the MAC Rx/Tx */
2477 priv->hw->mac->set_mac(priv->ioaddr, true);
2478
2479 /* Set the HW DMA mode and the COE */
2480 stmmac_dma_operation_mode(priv);
2481
2482 stmmac_mmc_setup(priv);
2483
2484 if (init_ptp) {
2485 ret = clk_prepare_enable(priv->plat->clk_ptp_ref);
2486 if (ret < 0)
2487 netdev_warn(priv->dev, "failed to enable PTP reference clock: %d\n", ret);
2488
2489 ret = stmmac_init_ptp(priv);
2490 if (ret == -EOPNOTSUPP)
2491 netdev_warn(priv->dev, "PTP not supported by HW\n");
2492 else if (ret)
2493 netdev_warn(priv->dev, "PTP init failed\n");
2494 }
2495
2496 #ifdef CONFIG_DEBUG_FS
2497 ret = stmmac_init_fs(dev);
2498 if (ret < 0)
2499 netdev_warn(priv->dev, "%s: failed debugFS registration\n",
2500 __func__);
2501 #endif
2502 /* Start the ball rolling... */
2503 stmmac_start_all_dma(priv);
2504
2505 priv->tx_lpi_timer = STMMAC_DEFAULT_TWT_LS;
2506
2507 if ((priv->use_riwt) && (priv->hw->dma->rx_watchdog)) {
2508 priv->rx_riwt = MAX_DMA_RIWT;
2509 priv->hw->dma->rx_watchdog(priv->ioaddr, MAX_DMA_RIWT, rx_cnt);
2510 }
2511
2512 if (priv->hw->pcs && priv->hw->mac->pcs_ctrl_ane)
2513 priv->hw->mac->pcs_ctrl_ane(priv->hw, 1, priv->hw->ps, 0);
2514
2515 /* set TX and RX rings length */
2516 stmmac_set_rings_length(priv);
2517
2518 /* Enable TSO */
2519 if (priv->tso) {
2520 for (chan = 0; chan < tx_cnt; chan++)
2521 priv->hw->dma->enable_tso(priv->ioaddr, 1, chan);
2522 }
2523
2524 return 0;
2525 }
2526
2527 static void stmmac_hw_teardown(struct net_device *dev)
2528 {
2529 struct stmmac_priv *priv = netdev_priv(dev);
2530
2531 clk_disable_unprepare(priv->plat->clk_ptp_ref);
2532 }
2533
2534 /**
2535 * stmmac_open - open entry point of the driver
2536 * @dev : pointer to the device structure.
2537 * Description:
2538 * This function is the open entry point of the driver.
2539 * Return value:
2540 * 0 on success and an appropriate (-)ve integer as defined in errno.h
2541 * file on failure.
2542 */
2543 static int stmmac_open(struct net_device *dev)
2544 {
2545 struct stmmac_priv *priv = netdev_priv(dev);
2546 int ret;
2547
2548 stmmac_check_ether_addr(priv);
2549
2550 if (priv->hw->pcs != STMMAC_PCS_RGMII &&
2551 priv->hw->pcs != STMMAC_PCS_TBI &&
2552 priv->hw->pcs != STMMAC_PCS_RTBI) {
2553 ret = stmmac_init_phy(dev);
2554 if (ret) {
2555 netdev_err(priv->dev,
2556 "%s: Cannot attach to PHY (error: %d)\n",
2557 __func__, ret);
2558 return ret;
2559 }
2560 }
2561
2562 /* Extra statistics */
2563 memset(&priv->xstats, 0, sizeof(struct stmmac_extra_stats));
2564 priv->xstats.threshold = tc;
2565
2566 priv->dma_buf_sz = STMMAC_ALIGN(buf_sz);
2567 priv->rx_copybreak = STMMAC_RX_COPYBREAK;
2568
2569 ret = alloc_dma_desc_resources(priv);
2570 if (ret < 0) {
2571 netdev_err(priv->dev, "%s: DMA descriptors allocation failed\n",
2572 __func__);
2573 goto dma_desc_error;
2574 }
2575
2576 ret = init_dma_desc_rings(dev, GFP_KERNEL);
2577 if (ret < 0) {
2578 netdev_err(priv->dev, "%s: DMA descriptors initialization failed\n",
2579 __func__);
2580 goto init_error;
2581 }
2582
2583 ret = stmmac_hw_setup(dev, true);
2584 if (ret < 0) {
2585 netdev_err(priv->dev, "%s: Hw setup failed\n", __func__);
2586 goto init_error;
2587 }
2588
2589 stmmac_init_tx_coalesce(priv);
2590
2591 if (dev->phydev)
2592 phy_start(dev->phydev);
2593
2594 /* Request the IRQ lines */
2595 ret = request_irq(dev->irq, stmmac_interrupt,
2596 IRQF_SHARED, dev->name, dev);
2597 if (unlikely(ret < 0)) {
2598 netdev_err(priv->dev,
2599 "%s: ERROR: allocating the IRQ %d (error: %d)\n",
2600 __func__, dev->irq, ret);
2601 goto irq_error;
2602 }
2603
2604 /* Request the Wake IRQ in case of another line is used for WoL */
2605 if (priv->wol_irq != dev->irq) {
2606 ret = request_irq(priv->wol_irq, stmmac_interrupt,
2607 IRQF_SHARED, dev->name, dev);
2608 if (unlikely(ret < 0)) {
2609 netdev_err(priv->dev,
2610 "%s: ERROR: allocating the WoL IRQ %d (%d)\n",
2611 __func__, priv->wol_irq, ret);
2612 goto wolirq_error;
2613 }
2614 }
2615
2616 /* Request the IRQ lines */
2617 if (priv->lpi_irq > 0) {
2618 ret = request_irq(priv->lpi_irq, stmmac_interrupt, IRQF_SHARED,
2619 dev->name, dev);
2620 if (unlikely(ret < 0)) {
2621 netdev_err(priv->dev,
2622 "%s: ERROR: allocating the LPI IRQ %d (%d)\n",
2623 __func__, priv->lpi_irq, ret);
2624 goto lpiirq_error;
2625 }
2626 }
2627
2628 stmmac_enable_all_queues(priv);
2629 stmmac_start_all_queues(priv);
2630
2631 return 0;
2632
2633 lpiirq_error:
2634 if (priv->wol_irq != dev->irq)
2635 free_irq(priv->wol_irq, dev);
2636 wolirq_error:
2637 free_irq(dev->irq, dev);
2638 irq_error:
2639 if (dev->phydev)
2640 phy_stop(dev->phydev);
2641
2642 del_timer_sync(&priv->txtimer);
2643 stmmac_hw_teardown(dev);
2644 init_error:
2645 free_dma_desc_resources(priv);
2646 dma_desc_error:
2647 if (dev->phydev)
2648 phy_disconnect(dev->phydev);
2649
2650 return ret;
2651 }
2652
2653 /**
2654 * stmmac_release - close entry point of the driver
2655 * @dev : device pointer.
2656 * Description:
2657 * This is the stop entry point of the driver.
2658 */
2659 static int stmmac_release(struct net_device *dev)
2660 {
2661 struct stmmac_priv *priv = netdev_priv(dev);
2662
2663 if (priv->eee_enabled)
2664 del_timer_sync(&priv->eee_ctrl_timer);
2665
2666 /* Stop and disconnect the PHY */
2667 if (dev->phydev) {
2668 phy_stop(dev->phydev);
2669 phy_disconnect(dev->phydev);
2670 }
2671
2672 stmmac_stop_all_queues(priv);
2673
2674 stmmac_disable_all_queues(priv);
2675
2676 del_timer_sync(&priv->txtimer);
2677
2678 /* Free the IRQ lines */
2679 free_irq(dev->irq, dev);
2680 if (priv->wol_irq != dev->irq)
2681 free_irq(priv->wol_irq, dev);
2682 if (priv->lpi_irq > 0)
2683 free_irq(priv->lpi_irq, dev);
2684
2685 /* Stop TX/RX DMA and clear the descriptors */
2686 stmmac_stop_all_dma(priv);
2687
2688 /* Release and free the Rx/Tx resources */
2689 free_dma_desc_resources(priv);
2690
2691 /* Disable the MAC Rx/Tx */
2692 priv->hw->mac->set_mac(priv->ioaddr, false);
2693
2694 netif_carrier_off(dev);
2695
2696 #ifdef CONFIG_DEBUG_FS
2697 stmmac_exit_fs(dev);
2698 #endif
2699
2700 stmmac_release_ptp(priv);
2701
2702 return 0;
2703 }
2704
2705 /**
2706 * stmmac_tso_allocator - close entry point of the driver
2707 * @priv: driver private structure
2708 * @des: buffer start address
2709 * @total_len: total length to fill in descriptors
2710 * @last_segmant: condition for the last descriptor
2711 * @queue: TX queue index
2712 * Description:
2713 * This function fills descriptor and request new descriptors according to
2714 * buffer length to fill
2715 */
2716 static void stmmac_tso_allocator(struct stmmac_priv *priv, unsigned int des,
2717 int total_len, bool last_segment, u32 queue)
2718 {
2719 struct stmmac_tx_queue *tx_q = &priv->tx_queue[queue];
2720 struct dma_desc *desc;
2721 u32 buff_size;
2722 int tmp_len;
2723
2724 tmp_len = total_len;
2725
2726 while (tmp_len > 0) {
2727 tx_q->cur_tx = STMMAC_GET_ENTRY(tx_q->cur_tx, DMA_TX_SIZE);
2728 desc = tx_q->dma_tx + tx_q->cur_tx;
2729
2730 desc->des0 = cpu_to_le32(des + (total_len - tmp_len));
2731 buff_size = tmp_len >= TSO_MAX_BUFF_SIZE ?
2732 TSO_MAX_BUFF_SIZE : tmp_len;
2733
2734 priv->hw->desc->prepare_tso_tx_desc(desc, 0, buff_size,
2735 0, 1,
2736 (last_segment) && (tmp_len <= TSO_MAX_BUFF_SIZE),
2737 0, 0);
2738
2739 tmp_len -= TSO_MAX_BUFF_SIZE;
2740 }
2741 }
2742
2743 /**
2744 * stmmac_tso_xmit - Tx entry point of the driver for oversized frames (TSO)
2745 * @skb : the socket buffer
2746 * @dev : device pointer
2747 * Description: this is the transmit function that is called on TSO frames
2748 * (support available on GMAC4 and newer chips).
2749 * Diagram below show the ring programming in case of TSO frames:
2750 *
2751 * First Descriptor
2752 * --------
2753 * | DES0 |---> buffer1 = L2/L3/L4 header
2754 * | DES1 |---> TCP Payload (can continue on next descr...)
2755 * | DES2 |---> buffer 1 and 2 len
2756 * | DES3 |---> must set TSE, TCP hdr len-> [22:19]. TCP payload len [17:0]
2757 * --------
2758 * |
2759 * ...
2760 * |
2761 * --------
2762 * | DES0 | --| Split TCP Payload on Buffers 1 and 2
2763 * | DES1 | --|
2764 * | DES2 | --> buffer 1 and 2 len
2765 * | DES3 |
2766 * --------
2767 *
2768 * mss is fixed when enable tso, so w/o programming the TDES3 ctx field.
2769 */
2770 static netdev_tx_t stmmac_tso_xmit(struct sk_buff *skb, struct net_device *dev)
2771 {
2772 struct dma_desc *desc, *first, *mss_desc = NULL;
2773 struct stmmac_priv *priv = netdev_priv(dev);
2774 int nfrags = skb_shinfo(skb)->nr_frags;
2775 u32 queue = skb_get_queue_mapping(skb);
2776 unsigned int first_entry, des;
2777 struct stmmac_tx_queue *tx_q;
2778 int tmp_pay_len = 0;
2779 u32 pay_len, mss;
2780 u8 proto_hdr_len;
2781 int i;
2782
2783 tx_q = &priv->tx_queue[queue];
2784
2785 /* Compute header lengths */
2786 proto_hdr_len = skb_transport_offset(skb) + tcp_hdrlen(skb);
2787
2788 /* Desc availability based on threshold should be enough safe */
2789 if (unlikely(stmmac_tx_avail(priv, queue) <
2790 (((skb->len - proto_hdr_len) / TSO_MAX_BUFF_SIZE + 1)))) {
2791 if (!netif_tx_queue_stopped(netdev_get_tx_queue(dev, queue))) {
2792 netif_tx_stop_queue(netdev_get_tx_queue(priv->dev,
2793 queue));
2794 /* This is a hard error, log it. */
2795 netdev_err(priv->dev,
2796 "%s: Tx Ring full when queue awake\n",
2797 __func__);
2798 }
2799 return NETDEV_TX_BUSY;
2800 }
2801
2802 pay_len = skb_headlen(skb) - proto_hdr_len; /* no frags */
2803
2804 mss = skb_shinfo(skb)->gso_size;
2805
2806 /* set new MSS value if needed */
2807 if (mss != priv->mss) {
2808 mss_desc = tx_q->dma_tx + tx_q->cur_tx;
2809 priv->hw->desc->set_mss(mss_desc, mss);
2810 priv->mss = mss;
2811 tx_q->cur_tx = STMMAC_GET_ENTRY(tx_q->cur_tx, DMA_TX_SIZE);
2812 }
2813
2814 if (netif_msg_tx_queued(priv)) {
2815 pr_info("%s: tcphdrlen %d, hdr_len %d, pay_len %d, mss %d\n",
2816 __func__, tcp_hdrlen(skb), proto_hdr_len, pay_len, mss);
2817 pr_info("\tskb->len %d, skb->data_len %d\n", skb->len,
2818 skb->data_len);
2819 }
2820
2821 first_entry = tx_q->cur_tx;
2822
2823 desc = tx_q->dma_tx + first_entry;
2824 first = desc;
2825
2826 /* first descriptor: fill Headers on Buf1 */
2827 des = dma_map_single(priv->device, skb->data, skb_headlen(skb),
2828 DMA_TO_DEVICE);
2829 if (dma_mapping_error(priv->device, des))
2830 goto dma_map_err;
2831
2832 tx_q->tx_skbuff_dma[first_entry].buf = des;
2833 tx_q->tx_skbuff_dma[first_entry].len = skb_headlen(skb);
2834
2835 first->des0 = cpu_to_le32(des);
2836
2837 /* Fill start of payload in buff2 of first descriptor */
2838 if (pay_len)
2839 first->des1 = cpu_to_le32(des + proto_hdr_len);
2840
2841 /* If needed take extra descriptors to fill the remaining payload */
2842 tmp_pay_len = pay_len - TSO_MAX_BUFF_SIZE;
2843
2844 stmmac_tso_allocator(priv, des, tmp_pay_len, (nfrags == 0), queue);
2845
2846 /* Prepare fragments */
2847 for (i = 0; i < nfrags; i++) {
2848 const skb_frag_t *frag = &skb_shinfo(skb)->frags[i];
2849
2850 des = skb_frag_dma_map(priv->device, frag, 0,
2851 skb_frag_size(frag),
2852 DMA_TO_DEVICE);
2853 if (dma_mapping_error(priv->device, des))
2854 goto dma_map_err;
2855
2856 stmmac_tso_allocator(priv, des, skb_frag_size(frag),
2857 (i == nfrags - 1), queue);
2858
2859 tx_q->tx_skbuff_dma[tx_q->cur_tx].buf = des;
2860 tx_q->tx_skbuff_dma[tx_q->cur_tx].len = skb_frag_size(frag);
2861 tx_q->tx_skbuff[tx_q->cur_tx] = NULL;
2862 tx_q->tx_skbuff_dma[tx_q->cur_tx].map_as_page = true;
2863 }
2864
2865 tx_q->tx_skbuff_dma[tx_q->cur_tx].last_segment = true;
2866
2867 /* Only the last descriptor gets to point to the skb. */
2868 tx_q->tx_skbuff[tx_q->cur_tx] = skb;
2869
2870 /* We've used all descriptors we need for this skb, however,
2871 * advance cur_tx so that it references a fresh descriptor.
2872 * ndo_start_xmit will fill this descriptor the next time it's
2873 * called and stmmac_tx_clean may clean up to this descriptor.
2874 */
2875 tx_q->cur_tx = STMMAC_GET_ENTRY(tx_q->cur_tx, DMA_TX_SIZE);
2876
2877 if (unlikely(stmmac_tx_avail(priv, queue) <= (MAX_SKB_FRAGS + 1))) {
2878 netif_dbg(priv, hw, priv->dev, "%s: stop transmitted packets\n",
2879 __func__);
2880 netif_tx_stop_queue(netdev_get_tx_queue(priv->dev, queue));
2881 }
2882
2883 dev->stats.tx_bytes += skb->len;
2884 priv->xstats.tx_tso_frames++;
2885 priv->xstats.tx_tso_nfrags += nfrags;
2886
2887 /* Manage tx mitigation */
2888 priv->tx_count_frames += nfrags + 1;
2889 if (likely(priv->tx_coal_frames > priv->tx_count_frames)) {
2890 mod_timer(&priv->txtimer,
2891 STMMAC_COAL_TIMER(priv->tx_coal_timer));
2892 } else {
2893 priv->tx_count_frames = 0;
2894 priv->hw->desc->set_tx_ic(desc);
2895 priv->xstats.tx_set_ic_bit++;
2896 }
2897
2898 if (!priv->hwts_tx_en)
2899 skb_tx_timestamp(skb);
2900
2901 if (unlikely((skb_shinfo(skb)->tx_flags & SKBTX_HW_TSTAMP) &&
2902 priv->hwts_tx_en)) {
2903 /* declare that device is doing timestamping */
2904 skb_shinfo(skb)->tx_flags |= SKBTX_IN_PROGRESS;
2905 priv->hw->desc->enable_tx_timestamp(first);
2906 }
2907
2908 /* Complete the first descriptor before granting the DMA */
2909 priv->hw->desc->prepare_tso_tx_desc(first, 1,
2910 proto_hdr_len,
2911 pay_len,
2912 1, tx_q->tx_skbuff_dma[first_entry].last_segment,
2913 tcp_hdrlen(skb) / 4, (skb->len - proto_hdr_len));
2914
2915 /* If context desc is used to change MSS */
2916 if (mss_desc)
2917 priv->hw->desc->set_tx_owner(mss_desc);
2918
2919 /* The own bit must be the latest setting done when prepare the
2920 * descriptor and then barrier is needed to make sure that
2921 * all is coherent before granting the DMA engine.
2922 */
2923 dma_wmb();
2924
2925 if (netif_msg_pktdata(priv)) {
2926 pr_info("%s: curr=%d dirty=%d f=%d, e=%d, f_p=%p, nfrags %d\n",
2927 __func__, tx_q->cur_tx, tx_q->dirty_tx, first_entry,
2928 tx_q->cur_tx, first, nfrags);
2929
2930 priv->hw->desc->display_ring((void *)tx_q->dma_tx, DMA_TX_SIZE,
2931 0);
2932
2933 pr_info(">>> frame to be transmitted: ");
2934 print_pkt(skb->data, skb_headlen(skb));
2935 }
2936
2937 netdev_tx_sent_queue(netdev_get_tx_queue(dev, queue), skb->len);
2938
2939 priv->hw->dma->set_tx_tail_ptr(priv->ioaddr, tx_q->tx_tail_addr,
2940 queue);
2941
2942 return NETDEV_TX_OK;
2943
2944 dma_map_err:
2945 dev_err(priv->device, "Tx dma map failed\n");
2946 dev_kfree_skb(skb);
2947 priv->dev->stats.tx_dropped++;
2948 return NETDEV_TX_OK;
2949 }
2950
2951 /**
2952 * stmmac_xmit - Tx entry point of the driver
2953 * @skb : the socket buffer
2954 * @dev : device pointer
2955 * Description : this is the tx entry point of the driver.
2956 * It programs the chain or the ring and supports oversized frames
2957 * and SG feature.
2958 */
2959 static netdev_tx_t stmmac_xmit(struct sk_buff *skb, struct net_device *dev)
2960 {
2961 struct stmmac_priv *priv = netdev_priv(dev);
2962 unsigned int nopaged_len = skb_headlen(skb);
2963 int i, csum_insertion = 0, is_jumbo = 0;
2964 u32 queue = skb_get_queue_mapping(skb);
2965 int nfrags = skb_shinfo(skb)->nr_frags;
2966 int entry;
2967 unsigned int first_entry;
2968 struct dma_desc *desc, *first;
2969 struct stmmac_tx_queue *tx_q;
2970 unsigned int enh_desc;
2971 unsigned int des;
2972
2973 tx_q = &priv->tx_queue[queue];
2974
2975 /* Manage oversized TCP frames for GMAC4 device */
2976 if (skb_is_gso(skb) && priv->tso) {
2977 if (ip_hdr(skb)->protocol == IPPROTO_TCP)
2978 return stmmac_tso_xmit(skb, dev);
2979 }
2980
2981 if (unlikely(stmmac_tx_avail(priv, queue) < nfrags + 1)) {
2982 if (!netif_tx_queue_stopped(netdev_get_tx_queue(dev, queue))) {
2983 netif_tx_stop_queue(netdev_get_tx_queue(priv->dev,
2984 queue));
2985 /* This is a hard error, log it. */
2986 netdev_err(priv->dev,
2987 "%s: Tx Ring full when queue awake\n",
2988 __func__);
2989 }
2990 return NETDEV_TX_BUSY;
2991 }
2992
2993 if (priv->tx_path_in_lpi_mode)
2994 stmmac_disable_eee_mode(priv);
2995
2996 entry = tx_q->cur_tx;
2997 first_entry = entry;
2998
2999 csum_insertion = (skb->ip_summed == CHECKSUM_PARTIAL);
3000
3001 if (likely(priv->extend_desc))
3002 desc = (struct dma_desc *)(tx_q->dma_etx + entry);
3003 else
3004 desc = tx_q->dma_tx + entry;
3005
3006 first = desc;
3007
3008 enh_desc = priv->plat->enh_desc;
3009 /* To program the descriptors according to the size of the frame */
3010 if (enh_desc)
3011 is_jumbo = priv->hw->mode->is_jumbo_frm(skb->len, enh_desc);
3012
3013 if (unlikely(is_jumbo) && likely(priv->synopsys_id <
3014 DWMAC_CORE_4_00)) {
3015 entry = priv->hw->mode->jumbo_frm(tx_q, skb, csum_insertion);
3016 if (unlikely(entry < 0))
3017 goto dma_map_err;
3018 }
3019
3020 for (i = 0; i < nfrags; i++) {
3021 const skb_frag_t *frag = &skb_shinfo(skb)->frags[i];
3022 int len = skb_frag_size(frag);
3023 bool last_segment = (i == (nfrags - 1));
3024
3025 entry = STMMAC_GET_ENTRY(entry, DMA_TX_SIZE);
3026
3027 if (likely(priv->extend_desc))
3028 desc = (struct dma_desc *)(tx_q->dma_etx + entry);
3029 else
3030 desc = tx_q->dma_tx + entry;
3031
3032 des = skb_frag_dma_map(priv->device, frag, 0, len,
3033 DMA_TO_DEVICE);
3034 if (dma_mapping_error(priv->device, des))
3035 goto dma_map_err; /* should reuse desc w/o issues */
3036
3037 tx_q->tx_skbuff[entry] = NULL;
3038
3039 tx_q->tx_skbuff_dma[entry].buf = des;
3040 if (unlikely(priv->synopsys_id >= DWMAC_CORE_4_00))
3041 desc->des0 = cpu_to_le32(des);
3042 else
3043 desc->des2 = cpu_to_le32(des);
3044
3045 tx_q->tx_skbuff_dma[entry].map_as_page = true;
3046 tx_q->tx_skbuff_dma[entry].len = len;
3047 tx_q->tx_skbuff_dma[entry].last_segment = last_segment;
3048
3049 /* Prepare the descriptor and set the own bit too */
3050 priv->hw->desc->prepare_tx_desc(desc, 0, len, csum_insertion,
3051 priv->mode, 1, last_segment,
3052 skb->len);
3053 }
3054
3055 /* Only the last descriptor gets to point to the skb. */
3056 tx_q->tx_skbuff[entry] = skb;
3057
3058 /* We've used all descriptors we need for this skb, however,
3059 * advance cur_tx so that it references a fresh descriptor.
3060 * ndo_start_xmit will fill this descriptor the next time it's
3061 * called and stmmac_tx_clean may clean up to this descriptor.
3062 */
3063 entry = STMMAC_GET_ENTRY(entry, DMA_TX_SIZE);
3064 tx_q->cur_tx = entry;
3065
3066 if (netif_msg_pktdata(priv)) {
3067 void *tx_head;
3068
3069 netdev_dbg(priv->dev,
3070 "%s: curr=%d dirty=%d f=%d, e=%d, first=%p, nfrags=%d",
3071 __func__, tx_q->cur_tx, tx_q->dirty_tx, first_entry,
3072 entry, first, nfrags);
3073
3074 if (priv->extend_desc)
3075 tx_head = (void *)tx_q->dma_etx;
3076 else
3077 tx_head = (void *)tx_q->dma_tx;
3078
3079 priv->hw->desc->display_ring(tx_head, DMA_TX_SIZE, false);
3080
3081 netdev_dbg(priv->dev, ">>> frame to be transmitted: ");
3082 print_pkt(skb->data, skb->len);
3083 }
3084
3085 if (unlikely(stmmac_tx_avail(priv, queue) <= (MAX_SKB_FRAGS + 1))) {
3086 netif_dbg(priv, hw, priv->dev, "%s: stop transmitted packets\n",
3087 __func__);
3088 netif_tx_stop_queue(netdev_get_tx_queue(priv->dev, queue));
3089 }
3090
3091 dev->stats.tx_bytes += skb->len;
3092
3093 /* According to the coalesce parameter the IC bit for the latest
3094 * segment is reset and the timer re-started to clean the tx status.
3095 * This approach takes care about the fragments: desc is the first
3096 * element in case of no SG.
3097 */
3098 priv->tx_count_frames += nfrags + 1;
3099 if (likely(priv->tx_coal_frames > priv->tx_count_frames)) {
3100 mod_timer(&priv->txtimer,
3101 STMMAC_COAL_TIMER(priv->tx_coal_timer));
3102 } else {
3103 priv->tx_count_frames = 0;
3104 priv->hw->desc->set_tx_ic(desc);
3105 priv->xstats.tx_set_ic_bit++;
3106 }
3107
3108 if (!priv->hwts_tx_en)
3109 skb_tx_timestamp(skb);
3110
3111 /* Ready to fill the first descriptor and set the OWN bit w/o any
3112 * problems because all the descriptors are actually ready to be
3113 * passed to the DMA engine.
3114 */
3115 if (likely(!is_jumbo)) {
3116 bool last_segment = (nfrags == 0);
3117
3118 des = dma_map_single(priv->device, skb->data,
3119 nopaged_len, DMA_TO_DEVICE);
3120 if (dma_mapping_error(priv->device, des))
3121 goto dma_map_err;
3122
3123 tx_q->tx_skbuff_dma[first_entry].buf = des;
3124 if (unlikely(priv->synopsys_id >= DWMAC_CORE_4_00))
3125 first->des0 = cpu_to_le32(des);
3126 else
3127 first->des2 = cpu_to_le32(des);
3128
3129 tx_q->tx_skbuff_dma[first_entry].len = nopaged_len;
3130 tx_q->tx_skbuff_dma[first_entry].last_segment = last_segment;
3131
3132 if (unlikely((skb_shinfo(skb)->tx_flags & SKBTX_HW_TSTAMP) &&
3133 priv->hwts_tx_en)) {
3134 /* declare that device is doing timestamping */
3135 skb_shinfo(skb)->tx_flags |= SKBTX_IN_PROGRESS;
3136 priv->hw->desc->enable_tx_timestamp(first);
3137 }
3138
3139 /* Prepare the first descriptor setting the OWN bit too */
3140 priv->hw->desc->prepare_tx_desc(first, 1, nopaged_len,
3141 csum_insertion, priv->mode, 1,
3142 last_segment, skb->len);
3143
3144 /* The own bit must be the latest setting done when prepare the
3145 * descriptor and then barrier is needed to make sure that
3146 * all is coherent before granting the DMA engine.
3147 */
3148 dma_wmb();
3149 }
3150
3151 netdev_tx_sent_queue(netdev_get_tx_queue(dev, queue), skb->len);
3152
3153 if (priv->synopsys_id < DWMAC_CORE_4_00)
3154 priv->hw->dma->enable_dma_transmission(priv->ioaddr);
3155 else
3156 priv->hw->dma->set_tx_tail_ptr(priv->ioaddr, tx_q->tx_tail_addr,
3157 queue);
3158
3159 return NETDEV_TX_OK;
3160
3161 dma_map_err:
3162 netdev_err(priv->dev, "Tx DMA map failed\n");
3163 dev_kfree_skb(skb);
3164 priv->dev->stats.tx_dropped++;
3165 return NETDEV_TX_OK;
3166 }
3167
3168 static void stmmac_rx_vlan(struct net_device *dev, struct sk_buff *skb)
3169 {
3170 struct ethhdr *ehdr;
3171 u16 vlanid;
3172
3173 if ((dev->features & NETIF_F_HW_VLAN_CTAG_RX) ==
3174 NETIF_F_HW_VLAN_CTAG_RX &&
3175 !__vlan_get_tag(skb, &vlanid)) {
3176 /* pop the vlan tag */
3177 ehdr = (struct ethhdr *)skb->data;
3178 memmove(skb->data + VLAN_HLEN, ehdr, ETH_ALEN * 2);
3179 skb_pull(skb, VLAN_HLEN);
3180 __vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q), vlanid);
3181 }
3182 }
3183
3184
3185 static inline int stmmac_rx_threshold_count(struct stmmac_rx_queue *rx_q)
3186 {
3187 if (rx_q->rx_zeroc_thresh < STMMAC_RX_THRESH)
3188 return 0;
3189
3190 return 1;
3191 }
3192
3193 /**
3194 * stmmac_rx_refill - refill used skb preallocated buffers
3195 * @priv: driver private structure
3196 * @queue: RX queue index
3197 * Description : this is to reallocate the skb for the reception process
3198 * that is based on zero-copy.
3199 */
3200 static inline void stmmac_rx_refill(struct stmmac_priv *priv, u32 queue)
3201 {
3202 struct stmmac_rx_queue *rx_q = &priv->rx_queue[queue];
3203 int dirty = stmmac_rx_dirty(priv, queue);
3204 unsigned int entry = rx_q->dirty_rx;
3205
3206 int bfsize = priv->dma_buf_sz;
3207
3208 while (dirty-- > 0) {
3209 struct dma_desc *p;
3210
3211 if (priv->extend_desc)
3212 p = (struct dma_desc *)(rx_q->dma_erx + entry);
3213 else
3214 p = rx_q->dma_rx + entry;
3215
3216 if (likely(!rx_q->rx_skbuff[entry])) {
3217 struct sk_buff *skb;
3218
3219 skb = netdev_alloc_skb_ip_align(priv->dev, bfsize);
3220 if (unlikely(!skb)) {
3221 /* so for a while no zero-copy! */
3222 rx_q->rx_zeroc_thresh = STMMAC_RX_THRESH;
3223 if (unlikely(net_ratelimit()))
3224 dev_err(priv->device,
3225 "fail to alloc skb entry %d\n",
3226 entry);
3227 break;
3228 }
3229
3230 rx_q->rx_skbuff[entry] = skb;
3231 rx_q->rx_skbuff_dma[entry] =
3232 dma_map_single(priv->device, skb->data, bfsize,
3233 DMA_FROM_DEVICE);
3234 if (dma_mapping_error(priv->device,
3235 rx_q->rx_skbuff_dma[entry])) {
3236 netdev_err(priv->dev, "Rx DMA map failed\n");
3237 dev_kfree_skb(skb);
3238 break;
3239 }
3240
3241 if (unlikely(priv->synopsys_id >= DWMAC_CORE_4_00)) {
3242 p->des0 = cpu_to_le32(rx_q->rx_skbuff_dma[entry]);
3243 p->des1 = 0;
3244 } else {
3245 p->des2 = cpu_to_le32(rx_q->rx_skbuff_dma[entry]);
3246 }
3247 if (priv->hw->mode->refill_desc3)
3248 priv->hw->mode->refill_desc3(rx_q, p);
3249
3250 if (rx_q->rx_zeroc_thresh > 0)
3251 rx_q->rx_zeroc_thresh--;
3252
3253 netif_dbg(priv, rx_status, priv->dev,
3254 "refill entry #%d\n", entry);
3255 }
3256 dma_wmb();
3257
3258 if (unlikely(priv->synopsys_id >= DWMAC_CORE_4_00))
3259 priv->hw->desc->init_rx_desc(p, priv->use_riwt, 0, 0);
3260 else
3261 priv->hw->desc->set_rx_owner(p);
3262
3263 dma_wmb();
3264
3265 entry = STMMAC_GET_ENTRY(entry, DMA_RX_SIZE);
3266 }
3267 rx_q->dirty_rx = entry;
3268 }
3269
3270 /**
3271 * stmmac_rx - manage the receive process
3272 * @priv: driver private structure
3273 * @limit: napi bugget
3274 * @queue: RX queue index.
3275 * Description : this the function called by the napi poll method.
3276 * It gets all the frames inside the ring.
3277 */
3278 static int stmmac_rx(struct stmmac_priv *priv, int limit, u32 queue)
3279 {
3280 struct stmmac_rx_queue *rx_q = &priv->rx_queue[queue];
3281 unsigned int entry = rx_q->cur_rx;
3282 int coe = priv->hw->rx_csum;
3283 unsigned int next_entry;
3284 unsigned int count = 0;
3285
3286 if (netif_msg_rx_status(priv)) {
3287 void *rx_head;
3288
3289 netdev_dbg(priv->dev, "%s: descriptor ring:\n", __func__);
3290 if (priv->extend_desc)
3291 rx_head = (void *)rx_q->dma_erx;
3292 else
3293 rx_head = (void *)rx_q->dma_rx;
3294
3295 priv->hw->desc->display_ring(rx_head, DMA_RX_SIZE, true);
3296 }
3297 while (count < limit) {
3298 int status;
3299 struct dma_desc *p;
3300 struct dma_desc *np;
3301
3302 if (priv->extend_desc)
3303 p = (struct dma_desc *)(rx_q->dma_erx + entry);
3304 else
3305 p = rx_q->dma_rx + entry;
3306
3307 /* read the status of the incoming frame */
3308 status = priv->hw->desc->rx_status(&priv->dev->stats,
3309 &priv->xstats, p);
3310 /* check if managed by the DMA otherwise go ahead */
3311 if (unlikely(status & dma_own))
3312 break;
3313
3314 count++;
3315
3316 rx_q->cur_rx = STMMAC_GET_ENTRY(rx_q->cur_rx, DMA_RX_SIZE);
3317 next_entry = rx_q->cur_rx;
3318
3319 if (priv->extend_desc)
3320 np = (struct dma_desc *)(rx_q->dma_erx + next_entry);
3321 else
3322 np = rx_q->dma_rx + next_entry;
3323
3324 prefetch(np);
3325
3326 if ((priv->extend_desc) && (priv->hw->desc->rx_extended_status))
3327 priv->hw->desc->rx_extended_status(&priv->dev->stats,
3328 &priv->xstats,
3329 rx_q->dma_erx +
3330 entry);
3331 if (unlikely(status == discard_frame)) {
3332 priv->dev->stats.rx_errors++;
3333 if (priv->hwts_rx_en && !priv->extend_desc) {
3334 /* DESC2 & DESC3 will be overwritten by device
3335 * with timestamp value, hence reinitialize
3336 * them in stmmac_rx_refill() function so that
3337 * device can reuse it.
3338 */
3339 rx_q->rx_skbuff[entry] = NULL;
3340 dma_unmap_single(priv->device,
3341 rx_q->rx_skbuff_dma[entry],
3342 priv->dma_buf_sz,
3343 DMA_FROM_DEVICE);
3344 }
3345 } else {
3346 struct sk_buff *skb;
3347 int frame_len;
3348 unsigned int des;
3349
3350 if (unlikely(priv->synopsys_id >= DWMAC_CORE_4_00))
3351 des = le32_to_cpu(p->des0);
3352 else
3353 des = le32_to_cpu(p->des2);
3354
3355 frame_len = priv->hw->desc->get_rx_frame_len(p, coe);
3356
3357 /* If frame length is greater than skb buffer size
3358 * (preallocated during init) then the packet is
3359 * ignored
3360 */
3361 if (frame_len > priv->dma_buf_sz) {
3362 netdev_err(priv->dev,
3363 "len %d larger than size (%d)\n",
3364 frame_len, priv->dma_buf_sz);
3365 priv->dev->stats.rx_length_errors++;
3366 break;
3367 }
3368
3369 /* ACS is set; GMAC core strips PAD/FCS for IEEE 802.3
3370 * Type frames (LLC/LLC-SNAP)
3371 */
3372 if (unlikely(status != llc_snap))
3373 frame_len -= ETH_FCS_LEN;
3374
3375 if (netif_msg_rx_status(priv)) {
3376 netdev_dbg(priv->dev, "\tdesc: %p [entry %d] buff=0x%x\n",
3377 p, entry, des);
3378 if (frame_len > ETH_FRAME_LEN)
3379 netdev_dbg(priv->dev, "frame size %d, COE: %d\n",
3380 frame_len, status);
3381 }
3382
3383 /* The zero-copy is always used for all the sizes
3384 * in case of GMAC4 because it needs
3385 * to refill the used descriptors, always.
3386 */
3387 if (unlikely(!priv->plat->has_gmac4 &&
3388 ((frame_len < priv->rx_copybreak) ||
3389 stmmac_rx_threshold_count(rx_q)))) {
3390 skb = netdev_alloc_skb_ip_align(priv->dev,
3391 frame_len);
3392 if (unlikely(!skb)) {
3393 if (net_ratelimit())
3394 dev_warn(priv->device,
3395 "packet dropped\n");
3396 priv->dev->stats.rx_dropped++;
3397 break;
3398 }
3399
3400 dma_sync_single_for_cpu(priv->device,
3401 rx_q->rx_skbuff_dma
3402 [entry], frame_len,
3403 DMA_FROM_DEVICE);
3404 skb_copy_to_linear_data(skb,
3405 rx_q->
3406 rx_skbuff[entry]->data,
3407 frame_len);
3408
3409 skb_put(skb, frame_len);
3410 dma_sync_single_for_device(priv->device,
3411 rx_q->rx_skbuff_dma
3412 [entry], frame_len,
3413 DMA_FROM_DEVICE);
3414 } else {
3415 skb = rx_q->rx_skbuff[entry];
3416 if (unlikely(!skb)) {
3417 netdev_err(priv->dev,
3418 "%s: Inconsistent Rx chain\n",
3419 priv->dev->name);
3420 priv->dev->stats.rx_dropped++;
3421 break;
3422 }
3423 prefetch(skb->data - NET_IP_ALIGN);
3424 rx_q->rx_skbuff[entry] = NULL;
3425 rx_q->rx_zeroc_thresh++;
3426
3427 skb_put(skb, frame_len);
3428 dma_unmap_single(priv->device,
3429 rx_q->rx_skbuff_dma[entry],
3430 priv->dma_buf_sz,
3431 DMA_FROM_DEVICE);
3432 }
3433
3434 if (netif_msg_pktdata(priv)) {
3435 netdev_dbg(priv->dev, "frame received (%dbytes)",
3436 frame_len);
3437 print_pkt(skb->data, frame_len);
3438 }
3439
3440 stmmac_get_rx_hwtstamp(priv, p, np, skb);
3441
3442 stmmac_rx_vlan(priv->dev, skb);
3443
3444 skb->protocol = eth_type_trans(skb, priv->dev);
3445
3446 if (unlikely(!coe))
3447 skb_checksum_none_assert(skb);
3448 else
3449 skb->ip_summed = CHECKSUM_UNNECESSARY;
3450
3451 napi_gro_receive(&rx_q->napi, skb);
3452
3453 priv->dev->stats.rx_packets++;
3454 priv->dev->stats.rx_bytes += frame_len;
3455 }
3456 entry = next_entry;
3457 }
3458
3459 stmmac_rx_refill(priv, queue);
3460
3461 priv->xstats.rx_pkt_n += count;
3462
3463 return count;
3464 }
3465
3466 /**
3467 * stmmac_poll - stmmac poll method (NAPI)
3468 * @napi : pointer to the napi structure.
3469 * @budget : maximum number of packets that the current CPU can receive from
3470 * all interfaces.
3471 * Description :
3472 * To look at the incoming frames and clear the tx resources.
3473 */
3474 static int stmmac_poll(struct napi_struct *napi, int budget)
3475 {
3476 struct stmmac_rx_queue *rx_q =
3477 container_of(napi, struct stmmac_rx_queue, napi);
3478 struct stmmac_priv *priv = rx_q->priv_data;
3479 u32 tx_count = priv->plat->tx_queues_to_use;
3480 u32 chan = rx_q->queue_index;
3481 int work_done = 0;
3482 u32 queue;
3483
3484 priv->xstats.napi_poll++;
3485
3486 /* check all the queues */
3487 for (queue = 0; queue < tx_count; queue++)
3488 stmmac_tx_clean(priv, queue);
3489
3490 work_done = stmmac_rx(priv, budget, rx_q->queue_index);
3491 if (work_done < budget) {
3492 napi_complete_done(napi, work_done);
3493 stmmac_enable_dma_irq(priv, chan);
3494 }
3495 return work_done;
3496 }
3497
3498 /**
3499 * stmmac_tx_timeout
3500 * @dev : Pointer to net device structure
3501 * Description: this function is called when a packet transmission fails to
3502 * complete within a reasonable time. The driver will mark the error in the
3503 * netdev structure and arrange for the device to be reset to a sane state
3504 * in order to transmit a new packet.
3505 */
3506 static void stmmac_tx_timeout(struct net_device *dev)
3507 {
3508 struct stmmac_priv *priv = netdev_priv(dev);
3509 u32 tx_count = priv->plat->tx_queues_to_use;
3510 u32 chan;
3511
3512 /* Clear Tx resources and restart transmitting again */
3513 for (chan = 0; chan < tx_count; chan++)
3514 stmmac_tx_err(priv, chan);
3515 }
3516
3517 /**
3518 * stmmac_set_rx_mode - entry point for multicast addressing
3519 * @dev : pointer to the device structure
3520 * Description:
3521 * This function is a driver entry point which gets called by the kernel
3522 * whenever multicast addresses must be enabled/disabled.
3523 * Return value:
3524 * void.
3525 */
3526 static void stmmac_set_rx_mode(struct net_device *dev)
3527 {
3528 struct stmmac_priv *priv = netdev_priv(dev);
3529
3530 priv->hw->mac->set_filter(priv->hw, dev);
3531 }
3532
3533 /**
3534 * stmmac_change_mtu - entry point to change MTU size for the device.
3535 * @dev : device pointer.
3536 * @new_mtu : the new MTU size for the device.
3537 * Description: the Maximum Transfer Unit (MTU) is used by the network layer
3538 * to drive packet transmission. Ethernet has an MTU of 1500 octets
3539 * (ETH_DATA_LEN). This value can be changed with ifconfig.
3540 * Return value:
3541 * 0 on success and an appropriate (-)ve integer as defined in errno.h
3542 * file on failure.
3543 */
3544 static int stmmac_change_mtu(struct net_device *dev, int new_mtu)
3545 {
3546 struct stmmac_priv *priv = netdev_priv(dev);
3547
3548 if (netif_running(dev)) {
3549 netdev_err(priv->dev, "must be stopped to change its MTU\n");
3550 return -EBUSY;
3551 }
3552
3553 dev->mtu = new_mtu;
3554
3555 netdev_update_features(dev);
3556
3557 return 0;
3558 }
3559
3560 static netdev_features_t stmmac_fix_features(struct net_device *dev,
3561 netdev_features_t features)
3562 {
3563 struct stmmac_priv *priv = netdev_priv(dev);
3564
3565 if (priv->plat->rx_coe == STMMAC_RX_COE_NONE)
3566 features &= ~NETIF_F_RXCSUM;
3567
3568 if (!priv->plat->tx_coe)
3569 features &= ~NETIF_F_CSUM_MASK;
3570
3571 /* Some GMAC devices have a bugged Jumbo frame support that
3572 * needs to have the Tx COE disabled for oversized frames
3573 * (due to limited buffer sizes). In this case we disable
3574 * the TX csum insertion in the TDES and not use SF.
3575 */
3576 if (priv->plat->bugged_jumbo && (dev->mtu > ETH_DATA_LEN))
3577 features &= ~NETIF_F_CSUM_MASK;
3578
3579 /* Disable tso if asked by ethtool */
3580 if ((priv->plat->tso_en) && (priv->dma_cap.tsoen)) {
3581 if (features & NETIF_F_TSO)
3582 priv->tso = true;
3583 else
3584 priv->tso = false;
3585 }
3586
3587 return features;
3588 }
3589
3590 static int stmmac_set_features(struct net_device *netdev,
3591 netdev_features_t features)
3592 {
3593 struct stmmac_priv *priv = netdev_priv(netdev);
3594
3595 /* Keep the COE Type in case of csum is supporting */
3596 if (features & NETIF_F_RXCSUM)
3597 priv->hw->rx_csum = priv->plat->rx_coe;
3598 else
3599 priv->hw->rx_csum = 0;
3600 /* No check needed because rx_coe has been set before and it will be
3601 * fixed in case of issue.
3602 */
3603 priv->hw->mac->rx_ipc(priv->hw);
3604
3605 return 0;
3606 }
3607
3608 /**
3609 * stmmac_interrupt - main ISR
3610 * @irq: interrupt number.
3611 * @dev_id: to pass the net device pointer.
3612 * Description: this is the main driver interrupt service routine.
3613 * It can call:
3614 * o DMA service routine (to manage incoming frame reception and transmission
3615 * status)
3616 * o Core interrupts to manage: remote wake-up, management counter, LPI
3617 * interrupts.
3618 */
3619 static irqreturn_t stmmac_interrupt(int irq, void *dev_id)
3620 {
3621 struct net_device *dev = (struct net_device *)dev_id;
3622 struct stmmac_priv *priv = netdev_priv(dev);
3623 u32 rx_cnt = priv->plat->rx_queues_to_use;
3624 u32 tx_cnt = priv->plat->tx_queues_to_use;
3625 u32 queues_count;
3626 u32 queue;
3627
3628 queues_count = (rx_cnt > tx_cnt) ? rx_cnt : tx_cnt;
3629
3630 if (priv->irq_wake)
3631 pm_wakeup_event(priv->device, 0);
3632
3633 if (unlikely(!dev)) {
3634 netdev_err(priv->dev, "%s: invalid dev pointer\n", __func__);
3635 return IRQ_NONE;
3636 }
3637
3638 /* To handle GMAC own interrupts */
3639 if ((priv->plat->has_gmac) || (priv->plat->has_gmac4)) {
3640 int status = priv->hw->mac->host_irq_status(priv->hw,
3641 &priv->xstats);
3642
3643 if (unlikely(status)) {
3644 /* For LPI we need to save the tx status */
3645 if (status & CORE_IRQ_TX_PATH_IN_LPI_MODE)
3646 priv->tx_path_in_lpi_mode = true;
3647 if (status & CORE_IRQ_TX_PATH_EXIT_LPI_MODE)
3648 priv->tx_path_in_lpi_mode = false;
3649 }
3650
3651 if (priv->synopsys_id >= DWMAC_CORE_4_00) {
3652 for (queue = 0; queue < queues_count; queue++) {
3653 struct stmmac_rx_queue *rx_q =
3654 &priv->rx_queue[queue];
3655
3656 status |=
3657 priv->hw->mac->host_mtl_irq_status(priv->hw,
3658 queue);
3659
3660 if (status & CORE_IRQ_MTL_RX_OVERFLOW &&
3661 priv->hw->dma->set_rx_tail_ptr)
3662 priv->hw->dma->set_rx_tail_ptr(priv->ioaddr,
3663 rx_q->rx_tail_addr,
3664 queue);
3665 }
3666 }
3667
3668 /* PCS link status */
3669 if (priv->hw->pcs) {
3670 if (priv->xstats.pcs_link)
3671 netif_carrier_on(dev);
3672 else
3673 netif_carrier_off(dev);
3674 }
3675 }
3676
3677 /* To handle DMA interrupts */
3678 stmmac_dma_interrupt(priv);
3679
3680 return IRQ_HANDLED;
3681 }
3682
3683 #ifdef CONFIG_NET_POLL_CONTROLLER
3684 /* Polling receive - used by NETCONSOLE and other diagnostic tools
3685 * to allow network I/O with interrupts disabled.
3686 */
3687 static void stmmac_poll_controller(struct net_device *dev)
3688 {
3689 disable_irq(dev->irq);
3690 stmmac_interrupt(dev->irq, dev);
3691 enable_irq(dev->irq);
3692 }
3693 #endif
3694
3695 /**
3696 * stmmac_ioctl - Entry point for the Ioctl
3697 * @dev: Device pointer.
3698 * @rq: An IOCTL specefic structure, that can contain a pointer to
3699 * a proprietary structure used to pass information to the driver.
3700 * @cmd: IOCTL command
3701 * Description:
3702 * Currently it supports the phy_mii_ioctl(...) and HW time stamping.
3703 */
3704 static int stmmac_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
3705 {
3706 int ret = -EOPNOTSUPP;
3707
3708 if (!netif_running(dev))
3709 return -EINVAL;
3710
3711 switch (cmd) {
3712 case SIOCGMIIPHY:
3713 case SIOCGMIIREG:
3714 case SIOCSMIIREG:
3715 if (!dev->phydev)
3716 return -EINVAL;
3717 ret = phy_mii_ioctl(dev->phydev, rq, cmd);
3718 break;
3719 case SIOCSHWTSTAMP:
3720 ret = stmmac_hwtstamp_ioctl(dev, rq);
3721 break;
3722 default:
3723 break;
3724 }
3725
3726 return ret;
3727 }
3728
3729 #ifdef CONFIG_DEBUG_FS
3730 static struct dentry *stmmac_fs_dir;
3731
3732 static void sysfs_display_ring(void *head, int size, int extend_desc,
3733 struct seq_file *seq)
3734 {
3735 int i;
3736 struct dma_extended_desc *ep = (struct dma_extended_desc *)head;
3737 struct dma_desc *p = (struct dma_desc *)head;
3738
3739 for (i = 0; i < size; i++) {
3740 if (extend_desc) {
3741 seq_printf(seq, "%d [0x%x]: 0x%x 0x%x 0x%x 0x%x\n",
3742 i, (unsigned int)virt_to_phys(ep),
3743 le32_to_cpu(ep->basic.des0),
3744 le32_to_cpu(ep->basic.des1),
3745 le32_to_cpu(ep->basic.des2),
3746 le32_to_cpu(ep->basic.des3));
3747 ep++;
3748 } else {
3749 seq_printf(seq, "%d [0x%x]: 0x%x 0x%x 0x%x 0x%x\n",
3750 i, (unsigned int)virt_to_phys(p),
3751 le32_to_cpu(p->des0), le32_to_cpu(p->des1),
3752 le32_to_cpu(p->des2), le32_to_cpu(p->des3));
3753 p++;
3754 }
3755 seq_printf(seq, "\n");
3756 }
3757 }
3758
3759 static int stmmac_sysfs_ring_read(struct seq_file *seq, void *v)
3760 {
3761 struct net_device *dev = seq->private;
3762 struct stmmac_priv *priv = netdev_priv(dev);
3763 u32 rx_count = priv->plat->rx_queues_to_use;
3764 u32 tx_count = priv->plat->tx_queues_to_use;
3765 u32 queue;
3766
3767 for (queue = 0; queue < rx_count; queue++) {
3768 struct stmmac_rx_queue *rx_q = &priv->rx_queue[queue];
3769
3770 seq_printf(seq, "RX Queue %d:\n", queue);
3771
3772 if (priv->extend_desc) {
3773 seq_printf(seq, "Extended descriptor ring:\n");
3774 sysfs_display_ring((void *)rx_q->dma_erx,
3775 DMA_RX_SIZE, 1, seq);
3776 } else {
3777 seq_printf(seq, "Descriptor ring:\n");
3778 sysfs_display_ring((void *)rx_q->dma_rx,
3779 DMA_RX_SIZE, 0, seq);
3780 }
3781 }
3782
3783 for (queue = 0; queue < tx_count; queue++) {
3784 struct stmmac_tx_queue *tx_q = &priv->tx_queue[queue];
3785
3786 seq_printf(seq, "TX Queue %d:\n", queue);
3787
3788 if (priv->extend_desc) {
3789 seq_printf(seq, "Extended descriptor ring:\n");
3790 sysfs_display_ring((void *)tx_q->dma_etx,
3791 DMA_TX_SIZE, 1, seq);
3792 } else {
3793 seq_printf(seq, "Descriptor ring:\n");
3794 sysfs_display_ring((void *)tx_q->dma_tx,
3795 DMA_TX_SIZE, 0, seq);
3796 }
3797 }
3798
3799 return 0;
3800 }
3801
3802 static int stmmac_sysfs_ring_open(struct inode *inode, struct file *file)
3803 {
3804 return single_open(file, stmmac_sysfs_ring_read, inode->i_private);
3805 }
3806
3807 /* Debugfs files, should appear in /sys/kernel/debug/stmmaceth/eth0 */
3808
3809 static const struct file_operations stmmac_rings_status_fops = {
3810 .owner = THIS_MODULE,
3811 .open = stmmac_sysfs_ring_open,
3812 .read = seq_read,
3813 .llseek = seq_lseek,
3814 .release = single_release,
3815 };
3816
3817 static int stmmac_sysfs_dma_cap_read(struct seq_file *seq, void *v)
3818 {
3819 struct net_device *dev = seq->private;
3820 struct stmmac_priv *priv = netdev_priv(dev);
3821
3822 if (!priv->hw_cap_support) {
3823 seq_printf(seq, "DMA HW features not supported\n");
3824 return 0;
3825 }
3826
3827 seq_printf(seq, "==============================\n");
3828 seq_printf(seq, "\tDMA HW features\n");
3829 seq_printf(seq, "==============================\n");
3830
3831 seq_printf(seq, "\t10/100 Mbps: %s\n",
3832 (priv->dma_cap.mbps_10_100) ? "Y" : "N");
3833 seq_printf(seq, "\t1000 Mbps: %s\n",
3834 (priv->dma_cap.mbps_1000) ? "Y" : "N");
3835 seq_printf(seq, "\tHalf duplex: %s\n",
3836 (priv->dma_cap.half_duplex) ? "Y" : "N");
3837 seq_printf(seq, "\tHash Filter: %s\n",
3838 (priv->dma_cap.hash_filter) ? "Y" : "N");
3839 seq_printf(seq, "\tMultiple MAC address registers: %s\n",
3840 (priv->dma_cap.multi_addr) ? "Y" : "N");
3841 seq_printf(seq, "\tPCS (TBI/SGMII/RTBI PHY interfaces): %s\n",
3842 (priv->dma_cap.pcs) ? "Y" : "N");
3843 seq_printf(seq, "\tSMA (MDIO) Interface: %s\n",
3844 (priv->dma_cap.sma_mdio) ? "Y" : "N");
3845 seq_printf(seq, "\tPMT Remote wake up: %s\n",
3846 (priv->dma_cap.pmt_remote_wake_up) ? "Y" : "N");
3847 seq_printf(seq, "\tPMT Magic Frame: %s\n",
3848 (priv->dma_cap.pmt_magic_frame) ? "Y" : "N");
3849 seq_printf(seq, "\tRMON module: %s\n",
3850 (priv->dma_cap.rmon) ? "Y" : "N");
3851 seq_printf(seq, "\tIEEE 1588-2002 Time Stamp: %s\n",
3852 (priv->dma_cap.time_stamp) ? "Y" : "N");
3853 seq_printf(seq, "\tIEEE 1588-2008 Advanced Time Stamp: %s\n",
3854 (priv->dma_cap.atime_stamp) ? "Y" : "N");
3855 seq_printf(seq, "\t802.3az - Energy-Efficient Ethernet (EEE): %s\n",
3856 (priv->dma_cap.eee) ? "Y" : "N");
3857 seq_printf(seq, "\tAV features: %s\n", (priv->dma_cap.av) ? "Y" : "N");
3858 seq_printf(seq, "\tChecksum Offload in TX: %s\n",
3859 (priv->dma_cap.tx_coe) ? "Y" : "N");
3860 if (priv->synopsys_id >= DWMAC_CORE_4_00) {
3861 seq_printf(seq, "\tIP Checksum Offload in RX: %s\n",
3862 (priv->dma_cap.rx_coe) ? "Y" : "N");
3863 } else {
3864 seq_printf(seq, "\tIP Checksum Offload (type1) in RX: %s\n",
3865 (priv->dma_cap.rx_coe_type1) ? "Y" : "N");
3866 seq_printf(seq, "\tIP Checksum Offload (type2) in RX: %s\n",
3867 (priv->dma_cap.rx_coe_type2) ? "Y" : "N");
3868 }
3869 seq_printf(seq, "\tRXFIFO > 2048bytes: %s\n",
3870 (priv->dma_cap.rxfifo_over_2048) ? "Y" : "N");
3871 seq_printf(seq, "\tNumber of Additional RX channel: %d\n",
3872 priv->dma_cap.number_rx_channel);
3873 seq_printf(seq, "\tNumber of Additional TX channel: %d\n",
3874 priv->dma_cap.number_tx_channel);
3875 seq_printf(seq, "\tEnhanced descriptors: %s\n",
3876 (priv->dma_cap.enh_desc) ? "Y" : "N");
3877
3878 return 0;
3879 }
3880
3881 static int stmmac_sysfs_dma_cap_open(struct inode *inode, struct file *file)
3882 {
3883 return single_open(file, stmmac_sysfs_dma_cap_read, inode->i_private);
3884 }
3885
3886 static const struct file_operations stmmac_dma_cap_fops = {
3887 .owner = THIS_MODULE,
3888 .open = stmmac_sysfs_dma_cap_open,
3889 .read = seq_read,
3890 .llseek = seq_lseek,
3891 .release = single_release,
3892 };
3893
3894 static int stmmac_init_fs(struct net_device *dev)
3895 {
3896 struct stmmac_priv *priv = netdev_priv(dev);
3897
3898 /* Create per netdev entries */
3899 priv->dbgfs_dir = debugfs_create_dir(dev->name, stmmac_fs_dir);
3900
3901 if (!priv->dbgfs_dir || IS_ERR(priv->dbgfs_dir)) {
3902 netdev_err(priv->dev, "ERROR failed to create debugfs directory\n");
3903
3904 return -ENOMEM;
3905 }
3906
3907 /* Entry to report DMA RX/TX rings */
3908 priv->dbgfs_rings_status =
3909 debugfs_create_file("descriptors_status", S_IRUGO,
3910 priv->dbgfs_dir, dev,
3911 &stmmac_rings_status_fops);
3912
3913 if (!priv->dbgfs_rings_status || IS_ERR(priv->dbgfs_rings_status)) {
3914 netdev_err(priv->dev, "ERROR creating stmmac ring debugfs file\n");
3915 debugfs_remove_recursive(priv->dbgfs_dir);
3916
3917 return -ENOMEM;
3918 }
3919
3920 /* Entry to report the DMA HW features */
3921 priv->dbgfs_dma_cap = debugfs_create_file("dma_cap", S_IRUGO,
3922 priv->dbgfs_dir,
3923 dev, &stmmac_dma_cap_fops);
3924
3925 if (!priv->dbgfs_dma_cap || IS_ERR(priv->dbgfs_dma_cap)) {
3926 netdev_err(priv->dev, "ERROR creating stmmac MMC debugfs file\n");
3927 debugfs_remove_recursive(priv->dbgfs_dir);
3928
3929 return -ENOMEM;
3930 }
3931
3932 return 0;
3933 }
3934
3935 static void stmmac_exit_fs(struct net_device *dev)
3936 {
3937 struct stmmac_priv *priv = netdev_priv(dev);
3938
3939 debugfs_remove_recursive(priv->dbgfs_dir);
3940 }
3941 #endif /* CONFIG_DEBUG_FS */
3942
3943 static const struct net_device_ops stmmac_netdev_ops = {
3944 .ndo_open = stmmac_open,
3945 .ndo_start_xmit = stmmac_xmit,
3946 .ndo_stop = stmmac_release,
3947 .ndo_change_mtu = stmmac_change_mtu,
3948 .ndo_fix_features = stmmac_fix_features,
3949 .ndo_set_features = stmmac_set_features,
3950 .ndo_set_rx_mode = stmmac_set_rx_mode,
3951 .ndo_tx_timeout = stmmac_tx_timeout,
3952 .ndo_do_ioctl = stmmac_ioctl,
3953 #ifdef CONFIG_NET_POLL_CONTROLLER
3954 .ndo_poll_controller = stmmac_poll_controller,
3955 #endif
3956 .ndo_set_mac_address = eth_mac_addr,
3957 };
3958
3959 /**
3960 * stmmac_hw_init - Init the MAC device
3961 * @priv: driver private structure
3962 * Description: this function is to configure the MAC device according to
3963 * some platform parameters or the HW capability register. It prepares the
3964 * driver to use either ring or chain modes and to setup either enhanced or
3965 * normal descriptors.
3966 */
3967 static int stmmac_hw_init(struct stmmac_priv *priv)
3968 {
3969 struct mac_device_info *mac;
3970
3971 /* Identify the MAC HW device */
3972 if (priv->plat->has_gmac) {
3973 priv->dev->priv_flags |= IFF_UNICAST_FLT;
3974 mac = dwmac1000_setup(priv->ioaddr,
3975 priv->plat->multicast_filter_bins,
3976 priv->plat->unicast_filter_entries,
3977 &priv->synopsys_id);
3978 } else if (priv->plat->has_gmac4) {
3979 priv->dev->priv_flags |= IFF_UNICAST_FLT;
3980 mac = dwmac4_setup(priv->ioaddr,
3981 priv->plat->multicast_filter_bins,
3982 priv->plat->unicast_filter_entries,
3983 &priv->synopsys_id);
3984 } else {
3985 mac = dwmac100_setup(priv->ioaddr, &priv->synopsys_id);
3986 }
3987 if (!mac)
3988 return -ENOMEM;
3989
3990 priv->hw = mac;
3991
3992 /* To use the chained or ring mode */
3993 if (priv->synopsys_id >= DWMAC_CORE_4_00) {
3994 priv->hw->mode = &dwmac4_ring_mode_ops;
3995 } else {
3996 if (chain_mode) {
3997 priv->hw->mode = &chain_mode_ops;
3998 dev_info(priv->device, "Chain mode enabled\n");
3999 priv->mode = STMMAC_CHAIN_MODE;
4000 } else {
4001 priv->hw->mode = &ring_mode_ops;
4002 dev_info(priv->device, "Ring mode enabled\n");
4003 priv->mode = STMMAC_RING_MODE;
4004 }
4005 }
4006
4007 /* Get the HW capability (new GMAC newer than 3.50a) */
4008 priv->hw_cap_support = stmmac_get_hw_features(priv);
4009 if (priv->hw_cap_support) {
4010 dev_info(priv->device, "DMA HW capability register supported\n");
4011
4012 /* We can override some gmac/dma configuration fields: e.g.
4013 * enh_desc, tx_coe (e.g. that are passed through the
4014 * platform) with the values from the HW capability
4015 * register (if supported).
4016 */
4017 priv->plat->enh_desc = priv->dma_cap.enh_desc;
4018 priv->plat->pmt = priv->dma_cap.pmt_remote_wake_up;
4019 priv->hw->pmt = priv->plat->pmt;
4020
4021 /* TXCOE doesn't work in thresh DMA mode */
4022 if (priv->plat->force_thresh_dma_mode)
4023 priv->plat->tx_coe = 0;
4024 else
4025 priv->plat->tx_coe = priv->dma_cap.tx_coe;
4026
4027 /* In case of GMAC4 rx_coe is from HW cap register. */
4028 priv->plat->rx_coe = priv->dma_cap.rx_coe;
4029
4030 if (priv->dma_cap.rx_coe_type2)
4031 priv->plat->rx_coe = STMMAC_RX_COE_TYPE2;
4032 else if (priv->dma_cap.rx_coe_type1)
4033 priv->plat->rx_coe = STMMAC_RX_COE_TYPE1;
4034
4035 } else {
4036 dev_info(priv->device, "No HW DMA feature register supported\n");
4037 }
4038
4039 /* To use alternate (extended), normal or GMAC4 descriptor structures */
4040 if (priv->synopsys_id >= DWMAC_CORE_4_00)
4041 priv->hw->desc = &dwmac4_desc_ops;
4042 else
4043 stmmac_selec_desc_mode(priv);
4044
4045 if (priv->plat->rx_coe) {
4046 priv->hw->rx_csum = priv->plat->rx_coe;
4047 dev_info(priv->device, "RX Checksum Offload Engine supported\n");
4048 if (priv->synopsys_id < DWMAC_CORE_4_00)
4049 dev_info(priv->device, "COE Type %d\n", priv->hw->rx_csum);
4050 }
4051 if (priv->plat->tx_coe)
4052 dev_info(priv->device, "TX Checksum insertion supported\n");
4053
4054 if (priv->plat->pmt) {
4055 dev_info(priv->device, "Wake-Up On Lan supported\n");
4056 device_set_wakeup_capable(priv->device, 1);
4057 }
4058
4059 if (priv->dma_cap.tsoen)
4060 dev_info(priv->device, "TSO supported\n");
4061
4062 return 0;
4063 }
4064
4065 /**
4066 * stmmac_dvr_probe
4067 * @device: device pointer
4068 * @plat_dat: platform data pointer
4069 * @res: stmmac resource pointer
4070 * Description: this is the main probe function used to
4071 * call the alloc_etherdev, allocate the priv structure.
4072 * Return:
4073 * returns 0 on success, otherwise errno.
4074 */
4075 int stmmac_dvr_probe(struct device *device,
4076 struct plat_stmmacenet_data *plat_dat,
4077 struct stmmac_resources *res)
4078 {
4079 struct net_device *ndev = NULL;
4080 struct stmmac_priv *priv;
4081 int ret = 0;
4082 u32 queue;
4083
4084 ndev = alloc_etherdev_mqs(sizeof(struct stmmac_priv),
4085 MTL_MAX_TX_QUEUES,
4086 MTL_MAX_RX_QUEUES);
4087 if (!ndev)
4088 return -ENOMEM;
4089
4090 SET_NETDEV_DEV(ndev, device);
4091
4092 priv = netdev_priv(ndev);
4093 priv->device = device;
4094 priv->dev = ndev;
4095
4096 stmmac_set_ethtool_ops(ndev);
4097 priv->pause = pause;
4098 priv->plat = plat_dat;
4099 priv->ioaddr = res->addr;
4100 priv->dev->base_addr = (unsigned long)res->addr;
4101
4102 priv->dev->irq = res->irq;
4103 priv->wol_irq = res->wol_irq;
4104 priv->lpi_irq = res->lpi_irq;
4105
4106 if (res->mac)
4107 memcpy(priv->dev->dev_addr, res->mac, ETH_ALEN);
4108
4109 dev_set_drvdata(device, priv->dev);
4110
4111 /* Verify driver arguments */
4112 stmmac_verify_args();
4113
4114 /* Override with kernel parameters if supplied XXX CRS XXX
4115 * this needs to have multiple instances
4116 */
4117 if ((phyaddr >= 0) && (phyaddr <= 31))
4118 priv->plat->phy_addr = phyaddr;
4119
4120 if (priv->plat->stmmac_rst)
4121 reset_control_deassert(priv->plat->stmmac_rst);
4122
4123 /* Init MAC and get the capabilities */
4124 ret = stmmac_hw_init(priv);
4125 if (ret)
4126 goto error_hw_init;
4127
4128 /* Configure real RX and TX queues */
4129 netif_set_real_num_rx_queues(ndev, priv->plat->rx_queues_to_use);
4130 netif_set_real_num_tx_queues(ndev, priv->plat->tx_queues_to_use);
4131
4132 ndev->netdev_ops = &stmmac_netdev_ops;
4133
4134 ndev->hw_features = NETIF_F_SG | NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM |
4135 NETIF_F_RXCSUM;
4136
4137 if ((priv->plat->tso_en) && (priv->dma_cap.tsoen)) {
4138 ndev->hw_features |= NETIF_F_TSO;
4139 priv->tso = true;
4140 dev_info(priv->device, "TSO feature enabled\n");
4141 }
4142 ndev->features |= ndev->hw_features | NETIF_F_HIGHDMA;
4143 ndev->watchdog_timeo = msecs_to_jiffies(watchdog);
4144 #ifdef STMMAC_VLAN_TAG_USED
4145 /* Both mac100 and gmac support receive VLAN tag detection */
4146 ndev->features |= NETIF_F_HW_VLAN_CTAG_RX;
4147 #endif
4148 priv->msg_enable = netif_msg_init(debug, default_msg_level);
4149
4150 /* MTU range: 46 - hw-specific max */
4151 ndev->min_mtu = ETH_ZLEN - ETH_HLEN;
4152 if ((priv->plat->enh_desc) || (priv->synopsys_id >= DWMAC_CORE_4_00))
4153 ndev->max_mtu = JUMBO_LEN;
4154 else
4155 ndev->max_mtu = SKB_MAX_HEAD(NET_SKB_PAD + NET_IP_ALIGN);
4156 /* Will not overwrite ndev->max_mtu if plat->maxmtu > ndev->max_mtu
4157 * as well as plat->maxmtu < ndev->min_mtu which is a invalid range.
4158 */
4159 if ((priv->plat->maxmtu < ndev->max_mtu) &&
4160 (priv->plat->maxmtu >= ndev->min_mtu))
4161 ndev->max_mtu = priv->plat->maxmtu;
4162 else if (priv->plat->maxmtu < ndev->min_mtu)
4163 dev_warn(priv->device,
4164 "%s: warning: maxmtu having invalid value (%d)\n",
4165 __func__, priv->plat->maxmtu);
4166
4167 if (flow_ctrl)
4168 priv->flow_ctrl = FLOW_AUTO; /* RX/TX pause on */
4169
4170 /* Rx Watchdog is available in the COREs newer than the 3.40.
4171 * In some case, for example on bugged HW this feature
4172 * has to be disable and this can be done by passing the
4173 * riwt_off field from the platform.
4174 */
4175 if ((priv->synopsys_id >= DWMAC_CORE_3_50) && (!priv->plat->riwt_off)) {
4176 priv->use_riwt = 1;
4177 dev_info(priv->device,
4178 "Enable RX Mitigation via HW Watchdog Timer\n");
4179 }
4180
4181 for (queue = 0; queue < priv->plat->rx_queues_to_use; queue++) {
4182 struct stmmac_rx_queue *rx_q = &priv->rx_queue[queue];
4183
4184 netif_napi_add(ndev, &rx_q->napi, stmmac_poll,
4185 (8 * priv->plat->rx_queues_to_use));
4186 }
4187
4188 spin_lock_init(&priv->lock);
4189
4190 /* If a specific clk_csr value is passed from the platform
4191 * this means that the CSR Clock Range selection cannot be
4192 * changed at run-time and it is fixed. Viceversa the driver'll try to
4193 * set the MDC clock dynamically according to the csr actual
4194 * clock input.
4195 */
4196 if (!priv->plat->clk_csr)
4197 stmmac_clk_csr_set(priv);
4198 else
4199 priv->clk_csr = priv->plat->clk_csr;
4200
4201 stmmac_check_pcs_mode(priv);
4202
4203 if (priv->hw->pcs != STMMAC_PCS_RGMII &&
4204 priv->hw->pcs != STMMAC_PCS_TBI &&
4205 priv->hw->pcs != STMMAC_PCS_RTBI) {
4206 /* MDIO bus Registration */
4207 ret = stmmac_mdio_register(ndev);
4208 if (ret < 0) {
4209 dev_err(priv->device,
4210 "%s: MDIO bus (id: %d) registration failed",
4211 __func__, priv->plat->bus_id);
4212 goto error_mdio_register;
4213 }
4214 }
4215
4216 ret = register_netdev(ndev);
4217 if (ret) {
4218 dev_err(priv->device, "%s: ERROR %i registering the device\n",
4219 __func__, ret);
4220 goto error_netdev_register;
4221 }
4222
4223 return ret;
4224
4225 error_netdev_register:
4226 if (priv->hw->pcs != STMMAC_PCS_RGMII &&
4227 priv->hw->pcs != STMMAC_PCS_TBI &&
4228 priv->hw->pcs != STMMAC_PCS_RTBI)
4229 stmmac_mdio_unregister(ndev);
4230 error_mdio_register:
4231 for (queue = 0; queue < priv->plat->rx_queues_to_use; queue++) {
4232 struct stmmac_rx_queue *rx_q = &priv->rx_queue[queue];
4233
4234 netif_napi_del(&rx_q->napi);
4235 }
4236 error_hw_init:
4237 free_netdev(ndev);
4238
4239 return ret;
4240 }
4241 EXPORT_SYMBOL_GPL(stmmac_dvr_probe);
4242
4243 /**
4244 * stmmac_dvr_remove
4245 * @dev: device pointer
4246 * Description: this function resets the TX/RX processes, disables the MAC RX/TX
4247 * changes the link status, releases the DMA descriptor rings.
4248 */
4249 int stmmac_dvr_remove(struct device *dev)
4250 {
4251 struct net_device *ndev = dev_get_drvdata(dev);
4252 struct stmmac_priv *priv = netdev_priv(ndev);
4253
4254 netdev_info(priv->dev, "%s: removing driver", __func__);
4255
4256 stmmac_stop_all_dma(priv);
4257
4258 priv->hw->mac->set_mac(priv->ioaddr, false);
4259 netif_carrier_off(ndev);
4260 unregister_netdev(ndev);
4261 if (priv->plat->stmmac_rst)
4262 reset_control_assert(priv->plat->stmmac_rst);
4263 clk_disable_unprepare(priv->plat->pclk);
4264 clk_disable_unprepare(priv->plat->stmmac_clk);
4265 if (priv->hw->pcs != STMMAC_PCS_RGMII &&
4266 priv->hw->pcs != STMMAC_PCS_TBI &&
4267 priv->hw->pcs != STMMAC_PCS_RTBI)
4268 stmmac_mdio_unregister(ndev);
4269 free_netdev(ndev);
4270
4271 return 0;
4272 }
4273 EXPORT_SYMBOL_GPL(stmmac_dvr_remove);
4274
4275 /**
4276 * stmmac_suspend - suspend callback
4277 * @dev: device pointer
4278 * Description: this is the function to suspend the device and it is called
4279 * by the platform driver to stop the network queue, release the resources,
4280 * program the PMT register (for WoL), clean and release driver resources.
4281 */
4282 int stmmac_suspend(struct device *dev)
4283 {
4284 struct net_device *ndev = dev_get_drvdata(dev);
4285 struct stmmac_priv *priv = netdev_priv(ndev);
4286 unsigned long flags;
4287
4288 if (!ndev || !netif_running(ndev))
4289 return 0;
4290
4291 if (ndev->phydev)
4292 phy_stop(ndev->phydev);
4293
4294 spin_lock_irqsave(&priv->lock, flags);
4295
4296 netif_device_detach(ndev);
4297 stmmac_stop_all_queues(priv);
4298
4299 stmmac_disable_all_queues(priv);
4300
4301 /* Stop TX/RX DMA */
4302 stmmac_stop_all_dma(priv);
4303
4304 /* Enable Power down mode by programming the PMT regs */
4305 if (device_may_wakeup(priv->device)) {
4306 priv->hw->mac->pmt(priv->hw, priv->wolopts);
4307 priv->irq_wake = 1;
4308 } else {
4309 priv->hw->mac->set_mac(priv->ioaddr, false);
4310 pinctrl_pm_select_sleep_state(priv->device);
4311 /* Disable clock in case of PWM is off */
4312 clk_disable(priv->plat->pclk);
4313 clk_disable(priv->plat->stmmac_clk);
4314 }
4315 spin_unlock_irqrestore(&priv->lock, flags);
4316
4317 priv->oldlink = 0;
4318 priv->speed = SPEED_UNKNOWN;
4319 priv->oldduplex = DUPLEX_UNKNOWN;
4320 return 0;
4321 }
4322 EXPORT_SYMBOL_GPL(stmmac_suspend);
4323
4324 /**
4325 * stmmac_reset_queues_param - reset queue parameters
4326 * @dev: device pointer
4327 */
4328 static void stmmac_reset_queues_param(struct stmmac_priv *priv)
4329 {
4330 u32 rx_cnt = priv->plat->rx_queues_to_use;
4331 u32 tx_cnt = priv->plat->tx_queues_to_use;
4332 u32 queue;
4333
4334 for (queue = 0; queue < rx_cnt; queue++) {
4335 struct stmmac_rx_queue *rx_q = &priv->rx_queue[queue];
4336
4337 rx_q->cur_rx = 0;
4338 rx_q->dirty_rx = 0;
4339 }
4340
4341 for (queue = 0; queue < tx_cnt; queue++) {
4342 struct stmmac_tx_queue *tx_q = &priv->tx_queue[queue];
4343
4344 tx_q->cur_tx = 0;
4345 tx_q->dirty_tx = 0;
4346 }
4347 }
4348
4349 /**
4350 * stmmac_resume - resume callback
4351 * @dev: device pointer
4352 * Description: when resume this function is invoked to setup the DMA and CORE
4353 * in a usable state.
4354 */
4355 int stmmac_resume(struct device *dev)
4356 {
4357 struct net_device *ndev = dev_get_drvdata(dev);
4358 struct stmmac_priv *priv = netdev_priv(ndev);
4359 unsigned long flags;
4360
4361 if (!netif_running(ndev))
4362 return 0;
4363
4364 /* Power Down bit, into the PM register, is cleared
4365 * automatically as soon as a magic packet or a Wake-up frame
4366 * is received. Anyway, it's better to manually clear
4367 * this bit because it can generate problems while resuming
4368 * from another devices (e.g. serial console).
4369 */
4370 if (device_may_wakeup(priv->device)) {
4371 spin_lock_irqsave(&priv->lock, flags);
4372 priv->hw->mac->pmt(priv->hw, 0);
4373 spin_unlock_irqrestore(&priv->lock, flags);
4374 priv->irq_wake = 0;
4375 } else {
4376 pinctrl_pm_select_default_state(priv->device);
4377 /* enable the clk previously disabled */
4378 clk_enable(priv->plat->stmmac_clk);
4379 clk_enable(priv->plat->pclk);
4380 /* reset the phy so that it's ready */
4381 if (priv->mii)
4382 stmmac_mdio_reset(priv->mii);
4383 }
4384
4385 netif_device_attach(ndev);
4386
4387 spin_lock_irqsave(&priv->lock, flags);
4388
4389 stmmac_reset_queues_param(priv);
4390
4391 /* reset private mss value to force mss context settings at
4392 * next tso xmit (only used for gmac4).
4393 */
4394 priv->mss = 0;
4395
4396 stmmac_clear_descriptors(priv);
4397
4398 stmmac_hw_setup(ndev, false);
4399 stmmac_init_tx_coalesce(priv);
4400 stmmac_set_rx_mode(ndev);
4401
4402 stmmac_enable_all_queues(priv);
4403
4404 stmmac_start_all_queues(priv);
4405
4406 spin_unlock_irqrestore(&priv->lock, flags);
4407
4408 if (ndev->phydev)
4409 phy_start(ndev->phydev);
4410
4411 return 0;
4412 }
4413 EXPORT_SYMBOL_GPL(stmmac_resume);
4414
4415 #ifndef MODULE
4416 static int __init stmmac_cmdline_opt(char *str)
4417 {
4418 char *opt;
4419
4420 if (!str || !*str)
4421 return -EINVAL;
4422 while ((opt = strsep(&str, ",")) != NULL) {
4423 if (!strncmp(opt, "debug:", 6)) {
4424 if (kstrtoint(opt + 6, 0, &debug))
4425 goto err;
4426 } else if (!strncmp(opt, "phyaddr:", 8)) {
4427 if (kstrtoint(opt + 8, 0, &phyaddr))
4428 goto err;
4429 } else if (!strncmp(opt, "buf_sz:", 7)) {
4430 if (kstrtoint(opt + 7, 0, &buf_sz))
4431 goto err;
4432 } else if (!strncmp(opt, "tc:", 3)) {
4433 if (kstrtoint(opt + 3, 0, &tc))
4434 goto err;
4435 } else if (!strncmp(opt, "watchdog:", 9)) {
4436 if (kstrtoint(opt + 9, 0, &watchdog))
4437 goto err;
4438 } else if (!strncmp(opt, "flow_ctrl:", 10)) {
4439 if (kstrtoint(opt + 10, 0, &flow_ctrl))
4440 goto err;
4441 } else if (!strncmp(opt, "pause:", 6)) {
4442 if (kstrtoint(opt + 6, 0, &pause))
4443 goto err;
4444 } else if (!strncmp(opt, "eee_timer:", 10)) {
4445 if (kstrtoint(opt + 10, 0, &eee_timer))
4446 goto err;
4447 } else if (!strncmp(opt, "chain_mode:", 11)) {
4448 if (kstrtoint(opt + 11, 0, &chain_mode))
4449 goto err;
4450 }
4451 }
4452 return 0;
4453
4454 err:
4455 pr_err("%s: ERROR broken module parameter conversion", __func__);
4456 return -EINVAL;
4457 }
4458
4459 __setup("stmmaceth=", stmmac_cmdline_opt);
4460 #endif /* MODULE */
4461
4462 static int __init stmmac_init(void)
4463 {
4464 #ifdef CONFIG_DEBUG_FS
4465 /* Create debugfs main directory if it doesn't exist yet */
4466 if (!stmmac_fs_dir) {
4467 stmmac_fs_dir = debugfs_create_dir(STMMAC_RESOURCE_NAME, NULL);
4468
4469 if (!stmmac_fs_dir || IS_ERR(stmmac_fs_dir)) {
4470 pr_err("ERROR %s, debugfs create directory failed\n",
4471 STMMAC_RESOURCE_NAME);
4472
4473 return -ENOMEM;
4474 }
4475 }
4476 #endif
4477
4478 return 0;
4479 }
4480
4481 static void __exit stmmac_exit(void)
4482 {
4483 #ifdef CONFIG_DEBUG_FS
4484 debugfs_remove_recursive(stmmac_fs_dir);
4485 #endif
4486 }
4487
4488 module_init(stmmac_init)
4489 module_exit(stmmac_exit)
4490
4491 MODULE_DESCRIPTION("STMMAC 10/100/1000 Ethernet device driver");
4492 MODULE_AUTHOR("Giuseppe Cavallaro <peppe.cavallaro@st.com>");
4493 MODULE_LICENSE("GPL");