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