xref: /linux/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c (revision 90d32e92011eaae8e70a9169b4e7acf4ca8f9d3a)
1 // SPDX-License-Identifier: GPL-2.0-only
2 /*******************************************************************************
3   This is the driver for the ST MAC 10/100/1000 on-chip Ethernet controllers.
4   ST Ethernet IPs are built around a Synopsys IP Core.
5 
6 	Copyright(C) 2007-2011 STMicroelectronics Ltd
7 
8 
9   Author: Giuseppe Cavallaro <peppe.cavallaro@st.com>
10 
11   Documentation available at:
12 	http://www.stlinux.com
13   Support available at:
14 	https://bugzilla.stlinux.com/
15 *******************************************************************************/
16 
17 #include <linux/clk.h>
18 #include <linux/kernel.h>
19 #include <linux/interrupt.h>
20 #include <linux/ip.h>
21 #include <linux/tcp.h>
22 #include <linux/skbuff.h>
23 #include <linux/ethtool.h>
24 #include <linux/if_ether.h>
25 #include <linux/crc32.h>
26 #include <linux/mii.h>
27 #include <linux/if.h>
28 #include <linux/if_vlan.h>
29 #include <linux/dma-mapping.h>
30 #include <linux/slab.h>
31 #include <linux/pm_runtime.h>
32 #include <linux/prefetch.h>
33 #include <linux/pinctrl/consumer.h>
34 #ifdef CONFIG_DEBUG_FS
35 #include <linux/debugfs.h>
36 #include <linux/seq_file.h>
37 #endif /* CONFIG_DEBUG_FS */
38 #include <linux/net_tstamp.h>
39 #include <linux/phylink.h>
40 #include <linux/udp.h>
41 #include <linux/bpf_trace.h>
42 #include <net/page_pool/helpers.h>
43 #include <net/pkt_cls.h>
44 #include <net/xdp_sock_drv.h>
45 #include "stmmac_ptp.h"
46 #include "stmmac.h"
47 #include "stmmac_xdp.h"
48 #include <linux/reset.h>
49 #include <linux/of_mdio.h>
50 #include "dwmac1000.h"
51 #include "dwxgmac2.h"
52 #include "hwif.h"
53 
54 /* As long as the interface is active, we keep the timestamping counter enabled
55  * with fine resolution and binary rollover. This avoid non-monotonic behavior
56  * (clock jumps) when changing timestamping settings at runtime.
57  */
58 #define STMMAC_HWTS_ACTIVE	(PTP_TCR_TSENA | PTP_TCR_TSCFUPDT | \
59 				 PTP_TCR_TSCTRLSSR)
60 
61 #define	STMMAC_ALIGN(x)		ALIGN(ALIGN(x, SMP_CACHE_BYTES), 16)
62 #define	TSO_MAX_BUFF_SIZE	(SZ_16K - 1)
63 
64 /* Module parameters */
65 #define TX_TIMEO	5000
66 static int watchdog = TX_TIMEO;
67 module_param(watchdog, int, 0644);
68 MODULE_PARM_DESC(watchdog, "Transmit timeout in milliseconds (default 5s)");
69 
70 static int debug = -1;
71 module_param(debug, int, 0644);
72 MODULE_PARM_DESC(debug, "Message Level (-1: default, 0: no output, 16: all)");
73 
74 static int phyaddr = -1;
75 module_param(phyaddr, int, 0444);
76 MODULE_PARM_DESC(phyaddr, "Physical device address");
77 
78 #define STMMAC_TX_THRESH(x)	((x)->dma_conf.dma_tx_size / 4)
79 #define STMMAC_RX_THRESH(x)	((x)->dma_conf.dma_rx_size / 4)
80 
81 /* Limit to make sure XDP TX and slow path can coexist */
82 #define STMMAC_XSK_TX_BUDGET_MAX	256
83 #define STMMAC_TX_XSK_AVAIL		16
84 #define STMMAC_RX_FILL_BATCH		16
85 
86 #define STMMAC_XDP_PASS		0
87 #define STMMAC_XDP_CONSUMED	BIT(0)
88 #define STMMAC_XDP_TX		BIT(1)
89 #define STMMAC_XDP_REDIRECT	BIT(2)
90 
91 static int flow_ctrl = FLOW_AUTO;
92 module_param(flow_ctrl, int, 0644);
93 MODULE_PARM_DESC(flow_ctrl, "Flow control ability [on/off]");
94 
95 static int pause = PAUSE_TIME;
96 module_param(pause, int, 0644);
97 MODULE_PARM_DESC(pause, "Flow Control Pause Time");
98 
99 #define TC_DEFAULT 64
100 static int tc = TC_DEFAULT;
101 module_param(tc, int, 0644);
102 MODULE_PARM_DESC(tc, "DMA threshold control value");
103 
104 #define	DEFAULT_BUFSIZE	1536
105 static int buf_sz = DEFAULT_BUFSIZE;
106 module_param(buf_sz, int, 0644);
107 MODULE_PARM_DESC(buf_sz, "DMA buffer size");
108 
109 #define	STMMAC_RX_COPYBREAK	256
110 
111 static const u32 default_msg_level = (NETIF_MSG_DRV | NETIF_MSG_PROBE |
112 				      NETIF_MSG_LINK | NETIF_MSG_IFUP |
113 				      NETIF_MSG_IFDOWN | NETIF_MSG_TIMER);
114 
115 #define STMMAC_DEFAULT_LPI_TIMER	1000
116 static int eee_timer = STMMAC_DEFAULT_LPI_TIMER;
117 module_param(eee_timer, int, 0644);
118 MODULE_PARM_DESC(eee_timer, "LPI tx expiration time in msec");
119 #define STMMAC_LPI_T(x) (jiffies + usecs_to_jiffies(x))
120 
121 /* By default the driver will use the ring mode to manage tx and rx descriptors,
122  * but allow user to force to use the chain instead of the ring
123  */
124 static unsigned int chain_mode;
125 module_param(chain_mode, int, 0444);
126 MODULE_PARM_DESC(chain_mode, "To use chain instead of ring mode");
127 
128 static irqreturn_t stmmac_interrupt(int irq, void *dev_id);
129 /* For MSI interrupts handling */
130 static irqreturn_t stmmac_mac_interrupt(int irq, void *dev_id);
131 static irqreturn_t stmmac_safety_interrupt(int irq, void *dev_id);
132 static irqreturn_t stmmac_msi_intr_tx(int irq, void *data);
133 static irqreturn_t stmmac_msi_intr_rx(int irq, void *data);
134 static void stmmac_reset_rx_queue(struct stmmac_priv *priv, u32 queue);
135 static void stmmac_reset_tx_queue(struct stmmac_priv *priv, u32 queue);
136 static void stmmac_reset_queues_param(struct stmmac_priv *priv);
137 static void stmmac_tx_timer_arm(struct stmmac_priv *priv, u32 queue);
138 static void stmmac_flush_tx_descriptors(struct stmmac_priv *priv, int queue);
139 static void stmmac_set_dma_operation_mode(struct stmmac_priv *priv, u32 txmode,
140 					  u32 rxmode, u32 chan);
141 
142 #ifdef CONFIG_DEBUG_FS
143 static const struct net_device_ops stmmac_netdev_ops;
144 static void stmmac_init_fs(struct net_device *dev);
145 static void stmmac_exit_fs(struct net_device *dev);
146 #endif
147 
148 #define STMMAC_COAL_TIMER(x) (ns_to_ktime((x) * NSEC_PER_USEC))
149 
150 int stmmac_bus_clks_config(struct stmmac_priv *priv, bool enabled)
151 {
152 	int ret = 0;
153 
154 	if (enabled) {
155 		ret = clk_prepare_enable(priv->plat->stmmac_clk);
156 		if (ret)
157 			return ret;
158 		ret = clk_prepare_enable(priv->plat->pclk);
159 		if (ret) {
160 			clk_disable_unprepare(priv->plat->stmmac_clk);
161 			return ret;
162 		}
163 		if (priv->plat->clks_config) {
164 			ret = priv->plat->clks_config(priv->plat->bsp_priv, enabled);
165 			if (ret) {
166 				clk_disable_unprepare(priv->plat->stmmac_clk);
167 				clk_disable_unprepare(priv->plat->pclk);
168 				return ret;
169 			}
170 		}
171 	} else {
172 		clk_disable_unprepare(priv->plat->stmmac_clk);
173 		clk_disable_unprepare(priv->plat->pclk);
174 		if (priv->plat->clks_config)
175 			priv->plat->clks_config(priv->plat->bsp_priv, enabled);
176 	}
177 
178 	return ret;
179 }
180 EXPORT_SYMBOL_GPL(stmmac_bus_clks_config);
181 
182 /**
183  * stmmac_verify_args - verify the driver parameters.
184  * Description: it checks the driver parameters and set a default in case of
185  * errors.
186  */
187 static void stmmac_verify_args(void)
188 {
189 	if (unlikely(watchdog < 0))
190 		watchdog = TX_TIMEO;
191 	if (unlikely((buf_sz < DEFAULT_BUFSIZE) || (buf_sz > BUF_SIZE_16KiB)))
192 		buf_sz = DEFAULT_BUFSIZE;
193 	if (unlikely(flow_ctrl > 1))
194 		flow_ctrl = FLOW_AUTO;
195 	else if (likely(flow_ctrl < 0))
196 		flow_ctrl = FLOW_OFF;
197 	if (unlikely((pause < 0) || (pause > 0xffff)))
198 		pause = PAUSE_TIME;
199 	if (eee_timer < 0)
200 		eee_timer = STMMAC_DEFAULT_LPI_TIMER;
201 }
202 
203 static void __stmmac_disable_all_queues(struct stmmac_priv *priv)
204 {
205 	u32 rx_queues_cnt = priv->plat->rx_queues_to_use;
206 	u32 tx_queues_cnt = priv->plat->tx_queues_to_use;
207 	u32 maxq = max(rx_queues_cnt, tx_queues_cnt);
208 	u32 queue;
209 
210 	for (queue = 0; queue < maxq; queue++) {
211 		struct stmmac_channel *ch = &priv->channel[queue];
212 
213 		if (stmmac_xdp_is_enabled(priv) &&
214 		    test_bit(queue, priv->af_xdp_zc_qps)) {
215 			napi_disable(&ch->rxtx_napi);
216 			continue;
217 		}
218 
219 		if (queue < rx_queues_cnt)
220 			napi_disable(&ch->rx_napi);
221 		if (queue < tx_queues_cnt)
222 			napi_disable(&ch->tx_napi);
223 	}
224 }
225 
226 /**
227  * stmmac_disable_all_queues - Disable all queues
228  * @priv: driver private structure
229  */
230 static void stmmac_disable_all_queues(struct stmmac_priv *priv)
231 {
232 	u32 rx_queues_cnt = priv->plat->rx_queues_to_use;
233 	struct stmmac_rx_queue *rx_q;
234 	u32 queue;
235 
236 	/* synchronize_rcu() needed for pending XDP buffers to drain */
237 	for (queue = 0; queue < rx_queues_cnt; queue++) {
238 		rx_q = &priv->dma_conf.rx_queue[queue];
239 		if (rx_q->xsk_pool) {
240 			synchronize_rcu();
241 			break;
242 		}
243 	}
244 
245 	__stmmac_disable_all_queues(priv);
246 }
247 
248 /**
249  * stmmac_enable_all_queues - Enable all queues
250  * @priv: driver private structure
251  */
252 static void stmmac_enable_all_queues(struct stmmac_priv *priv)
253 {
254 	u32 rx_queues_cnt = priv->plat->rx_queues_to_use;
255 	u32 tx_queues_cnt = priv->plat->tx_queues_to_use;
256 	u32 maxq = max(rx_queues_cnt, tx_queues_cnt);
257 	u32 queue;
258 
259 	for (queue = 0; queue < maxq; queue++) {
260 		struct stmmac_channel *ch = &priv->channel[queue];
261 
262 		if (stmmac_xdp_is_enabled(priv) &&
263 		    test_bit(queue, priv->af_xdp_zc_qps)) {
264 			napi_enable(&ch->rxtx_napi);
265 			continue;
266 		}
267 
268 		if (queue < rx_queues_cnt)
269 			napi_enable(&ch->rx_napi);
270 		if (queue < tx_queues_cnt)
271 			napi_enable(&ch->tx_napi);
272 	}
273 }
274 
275 static void stmmac_service_event_schedule(struct stmmac_priv *priv)
276 {
277 	if (!test_bit(STMMAC_DOWN, &priv->state) &&
278 	    !test_and_set_bit(STMMAC_SERVICE_SCHED, &priv->state))
279 		queue_work(priv->wq, &priv->service_task);
280 }
281 
282 static void stmmac_global_err(struct stmmac_priv *priv)
283 {
284 	netif_carrier_off(priv->dev);
285 	set_bit(STMMAC_RESET_REQUESTED, &priv->state);
286 	stmmac_service_event_schedule(priv);
287 }
288 
289 /**
290  * stmmac_clk_csr_set - dynamically set the MDC clock
291  * @priv: driver private structure
292  * Description: this is to dynamically set the MDC clock according to the csr
293  * clock input.
294  * Note:
295  *	If a specific clk_csr value is passed from the platform
296  *	this means that the CSR Clock Range selection cannot be
297  *	changed at run-time and it is fixed (as reported in the driver
298  *	documentation). Viceversa the driver will try to set the MDC
299  *	clock dynamically according to the actual clock input.
300  */
301 static void stmmac_clk_csr_set(struct stmmac_priv *priv)
302 {
303 	u32 clk_rate;
304 
305 	clk_rate = clk_get_rate(priv->plat->stmmac_clk);
306 
307 	/* Platform provided default clk_csr would be assumed valid
308 	 * for all other cases except for the below mentioned ones.
309 	 * For values higher than the IEEE 802.3 specified frequency
310 	 * we can not estimate the proper divider as it is not known
311 	 * the frequency of clk_csr_i. So we do not change the default
312 	 * divider.
313 	 */
314 	if (!(priv->clk_csr & MAC_CSR_H_FRQ_MASK)) {
315 		if (clk_rate < CSR_F_35M)
316 			priv->clk_csr = STMMAC_CSR_20_35M;
317 		else if ((clk_rate >= CSR_F_35M) && (clk_rate < CSR_F_60M))
318 			priv->clk_csr = STMMAC_CSR_35_60M;
319 		else if ((clk_rate >= CSR_F_60M) && (clk_rate < CSR_F_100M))
320 			priv->clk_csr = STMMAC_CSR_60_100M;
321 		else if ((clk_rate >= CSR_F_100M) && (clk_rate < CSR_F_150M))
322 			priv->clk_csr = STMMAC_CSR_100_150M;
323 		else if ((clk_rate >= CSR_F_150M) && (clk_rate < CSR_F_250M))
324 			priv->clk_csr = STMMAC_CSR_150_250M;
325 		else if ((clk_rate >= CSR_F_250M) && (clk_rate <= CSR_F_300M))
326 			priv->clk_csr = STMMAC_CSR_250_300M;
327 	}
328 
329 	if (priv->plat->flags & STMMAC_FLAG_HAS_SUN8I) {
330 		if (clk_rate > 160000000)
331 			priv->clk_csr = 0x03;
332 		else if (clk_rate > 80000000)
333 			priv->clk_csr = 0x02;
334 		else if (clk_rate > 40000000)
335 			priv->clk_csr = 0x01;
336 		else
337 			priv->clk_csr = 0;
338 	}
339 
340 	if (priv->plat->has_xgmac) {
341 		if (clk_rate > 400000000)
342 			priv->clk_csr = 0x5;
343 		else if (clk_rate > 350000000)
344 			priv->clk_csr = 0x4;
345 		else if (clk_rate > 300000000)
346 			priv->clk_csr = 0x3;
347 		else if (clk_rate > 250000000)
348 			priv->clk_csr = 0x2;
349 		else if (clk_rate > 150000000)
350 			priv->clk_csr = 0x1;
351 		else
352 			priv->clk_csr = 0x0;
353 	}
354 }
355 
356 static void print_pkt(unsigned char *buf, int len)
357 {
358 	pr_debug("len = %d byte, buf addr: 0x%p\n", len, buf);
359 	print_hex_dump_bytes("", DUMP_PREFIX_OFFSET, buf, len);
360 }
361 
362 static inline u32 stmmac_tx_avail(struct stmmac_priv *priv, u32 queue)
363 {
364 	struct stmmac_tx_queue *tx_q = &priv->dma_conf.tx_queue[queue];
365 	u32 avail;
366 
367 	if (tx_q->dirty_tx > tx_q->cur_tx)
368 		avail = tx_q->dirty_tx - tx_q->cur_tx - 1;
369 	else
370 		avail = priv->dma_conf.dma_tx_size - tx_q->cur_tx + tx_q->dirty_tx - 1;
371 
372 	return avail;
373 }
374 
375 /**
376  * stmmac_rx_dirty - Get RX queue dirty
377  * @priv: driver private structure
378  * @queue: RX queue index
379  */
380 static inline u32 stmmac_rx_dirty(struct stmmac_priv *priv, u32 queue)
381 {
382 	struct stmmac_rx_queue *rx_q = &priv->dma_conf.rx_queue[queue];
383 	u32 dirty;
384 
385 	if (rx_q->dirty_rx <= rx_q->cur_rx)
386 		dirty = rx_q->cur_rx - rx_q->dirty_rx;
387 	else
388 		dirty = priv->dma_conf.dma_rx_size - rx_q->dirty_rx + rx_q->cur_rx;
389 
390 	return dirty;
391 }
392 
393 static void stmmac_lpi_entry_timer_config(struct stmmac_priv *priv, bool en)
394 {
395 	int tx_lpi_timer;
396 
397 	/* Clear/set the SW EEE timer flag based on LPI ET enablement */
398 	priv->eee_sw_timer_en = en ? 0 : 1;
399 	tx_lpi_timer  = en ? priv->tx_lpi_timer : 0;
400 	stmmac_set_eee_lpi_timer(priv, priv->hw, tx_lpi_timer);
401 }
402 
403 /**
404  * stmmac_enable_eee_mode - check and enter in LPI mode
405  * @priv: driver private structure
406  * Description: this function is to verify and enter in LPI mode in case of
407  * EEE.
408  */
409 static int stmmac_enable_eee_mode(struct stmmac_priv *priv)
410 {
411 	u32 tx_cnt = priv->plat->tx_queues_to_use;
412 	u32 queue;
413 
414 	/* check if all TX queues have the work finished */
415 	for (queue = 0; queue < tx_cnt; queue++) {
416 		struct stmmac_tx_queue *tx_q = &priv->dma_conf.tx_queue[queue];
417 
418 		if (tx_q->dirty_tx != tx_q->cur_tx)
419 			return -EBUSY; /* still unfinished work */
420 	}
421 
422 	/* Check and enter in LPI mode */
423 	if (!priv->tx_path_in_lpi_mode)
424 		stmmac_set_eee_mode(priv, priv->hw,
425 			priv->plat->flags & STMMAC_FLAG_EN_TX_LPI_CLOCKGATING);
426 	return 0;
427 }
428 
429 /**
430  * stmmac_disable_eee_mode - disable and exit from LPI mode
431  * @priv: driver private structure
432  * Description: this function is to exit and disable EEE in case of
433  * LPI state is true. This is called by the xmit.
434  */
435 void stmmac_disable_eee_mode(struct stmmac_priv *priv)
436 {
437 	if (!priv->eee_sw_timer_en) {
438 		stmmac_lpi_entry_timer_config(priv, 0);
439 		return;
440 	}
441 
442 	stmmac_reset_eee_mode(priv, priv->hw);
443 	del_timer_sync(&priv->eee_ctrl_timer);
444 	priv->tx_path_in_lpi_mode = false;
445 }
446 
447 /**
448  * stmmac_eee_ctrl_timer - EEE TX SW timer.
449  * @t:  timer_list struct containing private info
450  * Description:
451  *  if there is no data transfer and if we are not in LPI state,
452  *  then MAC Transmitter can be moved to LPI state.
453  */
454 static void stmmac_eee_ctrl_timer(struct timer_list *t)
455 {
456 	struct stmmac_priv *priv = from_timer(priv, t, eee_ctrl_timer);
457 
458 	if (stmmac_enable_eee_mode(priv))
459 		mod_timer(&priv->eee_ctrl_timer, STMMAC_LPI_T(priv->tx_lpi_timer));
460 }
461 
462 /**
463  * stmmac_eee_init - init EEE
464  * @priv: driver private structure
465  * Description:
466  *  if the GMAC supports the EEE (from the HW cap reg) and the phy device
467  *  can also manage EEE, this function enable the LPI state and start related
468  *  timer.
469  */
470 bool stmmac_eee_init(struct stmmac_priv *priv)
471 {
472 	int eee_tw_timer = priv->eee_tw_timer;
473 
474 	/* Using PCS we cannot dial with the phy registers at this stage
475 	 * so we do not support extra feature like EEE.
476 	 */
477 	if (priv->hw->pcs == STMMAC_PCS_TBI ||
478 	    priv->hw->pcs == STMMAC_PCS_RTBI)
479 		return false;
480 
481 	/* Check if MAC core supports the EEE feature. */
482 	if (!priv->dma_cap.eee)
483 		return false;
484 
485 	mutex_lock(&priv->lock);
486 
487 	/* Check if it needs to be deactivated */
488 	if (!priv->eee_active) {
489 		if (priv->eee_enabled) {
490 			netdev_dbg(priv->dev, "disable EEE\n");
491 			stmmac_lpi_entry_timer_config(priv, 0);
492 			del_timer_sync(&priv->eee_ctrl_timer);
493 			stmmac_set_eee_timer(priv, priv->hw, 0, eee_tw_timer);
494 			if (priv->hw->xpcs)
495 				xpcs_config_eee(priv->hw->xpcs,
496 						priv->plat->mult_fact_100ns,
497 						false);
498 		}
499 		mutex_unlock(&priv->lock);
500 		return false;
501 	}
502 
503 	if (priv->eee_active && !priv->eee_enabled) {
504 		timer_setup(&priv->eee_ctrl_timer, stmmac_eee_ctrl_timer, 0);
505 		stmmac_set_eee_timer(priv, priv->hw, STMMAC_DEFAULT_LIT_LS,
506 				     eee_tw_timer);
507 		if (priv->hw->xpcs)
508 			xpcs_config_eee(priv->hw->xpcs,
509 					priv->plat->mult_fact_100ns,
510 					true);
511 	}
512 
513 	if (priv->plat->has_gmac4 && priv->tx_lpi_timer <= STMMAC_ET_MAX) {
514 		del_timer_sync(&priv->eee_ctrl_timer);
515 		priv->tx_path_in_lpi_mode = false;
516 		stmmac_lpi_entry_timer_config(priv, 1);
517 	} else {
518 		stmmac_lpi_entry_timer_config(priv, 0);
519 		mod_timer(&priv->eee_ctrl_timer,
520 			  STMMAC_LPI_T(priv->tx_lpi_timer));
521 	}
522 
523 	mutex_unlock(&priv->lock);
524 	netdev_dbg(priv->dev, "Energy-Efficient Ethernet initialized\n");
525 	return true;
526 }
527 
528 /* stmmac_get_tx_hwtstamp - get HW TX timestamps
529  * @priv: driver private structure
530  * @p : descriptor pointer
531  * @skb : the socket buffer
532  * Description :
533  * This function will read timestamp from the descriptor & pass it to stack.
534  * and also perform some sanity checks.
535  */
536 static void stmmac_get_tx_hwtstamp(struct stmmac_priv *priv,
537 				   struct dma_desc *p, struct sk_buff *skb)
538 {
539 	struct skb_shared_hwtstamps shhwtstamp;
540 	bool found = false;
541 	u64 ns = 0;
542 
543 	if (!priv->hwts_tx_en)
544 		return;
545 
546 	/* exit if skb doesn't support hw tstamp */
547 	if (likely(!skb || !(skb_shinfo(skb)->tx_flags & SKBTX_IN_PROGRESS)))
548 		return;
549 
550 	/* check tx tstamp status */
551 	if (stmmac_get_tx_timestamp_status(priv, p)) {
552 		stmmac_get_timestamp(priv, p, priv->adv_ts, &ns);
553 		found = true;
554 	} else if (!stmmac_get_mac_tx_timestamp(priv, priv->hw, &ns)) {
555 		found = true;
556 	}
557 
558 	if (found) {
559 		ns -= priv->plat->cdc_error_adj;
560 
561 		memset(&shhwtstamp, 0, sizeof(struct skb_shared_hwtstamps));
562 		shhwtstamp.hwtstamp = ns_to_ktime(ns);
563 
564 		netdev_dbg(priv->dev, "get valid TX hw timestamp %llu\n", ns);
565 		/* pass tstamp to stack */
566 		skb_tstamp_tx(skb, &shhwtstamp);
567 	}
568 }
569 
570 /* stmmac_get_rx_hwtstamp - get HW RX timestamps
571  * @priv: driver private structure
572  * @p : descriptor pointer
573  * @np : next descriptor pointer
574  * @skb : the socket buffer
575  * Description :
576  * This function will read received packet's timestamp from the descriptor
577  * and pass it to stack. It also perform some sanity checks.
578  */
579 static void stmmac_get_rx_hwtstamp(struct stmmac_priv *priv, struct dma_desc *p,
580 				   struct dma_desc *np, struct sk_buff *skb)
581 {
582 	struct skb_shared_hwtstamps *shhwtstamp = NULL;
583 	struct dma_desc *desc = p;
584 	u64 ns = 0;
585 
586 	if (!priv->hwts_rx_en)
587 		return;
588 	/* For GMAC4, the valid timestamp is from CTX next desc. */
589 	if (priv->plat->has_gmac4 || priv->plat->has_xgmac)
590 		desc = np;
591 
592 	/* Check if timestamp is available */
593 	if (stmmac_get_rx_timestamp_status(priv, p, np, priv->adv_ts)) {
594 		stmmac_get_timestamp(priv, desc, priv->adv_ts, &ns);
595 
596 		ns -= priv->plat->cdc_error_adj;
597 
598 		netdev_dbg(priv->dev, "get valid RX hw timestamp %llu\n", ns);
599 		shhwtstamp = skb_hwtstamps(skb);
600 		memset(shhwtstamp, 0, sizeof(struct skb_shared_hwtstamps));
601 		shhwtstamp->hwtstamp = ns_to_ktime(ns);
602 	} else  {
603 		netdev_dbg(priv->dev, "cannot get RX hw timestamp\n");
604 	}
605 }
606 
607 /**
608  *  stmmac_hwtstamp_set - control hardware timestamping.
609  *  @dev: device pointer.
610  *  @ifr: An IOCTL specific structure, that can contain a pointer to
611  *  a proprietary structure used to pass information to the driver.
612  *  Description:
613  *  This function configures the MAC to enable/disable both outgoing(TX)
614  *  and incoming(RX) packets time stamping based on user input.
615  *  Return Value:
616  *  0 on success and an appropriate -ve integer on failure.
617  */
618 static int stmmac_hwtstamp_set(struct net_device *dev, struct ifreq *ifr)
619 {
620 	struct stmmac_priv *priv = netdev_priv(dev);
621 	struct hwtstamp_config config;
622 	u32 ptp_v2 = 0;
623 	u32 tstamp_all = 0;
624 	u32 ptp_over_ipv4_udp = 0;
625 	u32 ptp_over_ipv6_udp = 0;
626 	u32 ptp_over_ethernet = 0;
627 	u32 snap_type_sel = 0;
628 	u32 ts_master_en = 0;
629 	u32 ts_event_en = 0;
630 
631 	if (!(priv->dma_cap.time_stamp || priv->adv_ts)) {
632 		netdev_alert(priv->dev, "No support for HW time stamping\n");
633 		priv->hwts_tx_en = 0;
634 		priv->hwts_rx_en = 0;
635 
636 		return -EOPNOTSUPP;
637 	}
638 
639 	if (copy_from_user(&config, ifr->ifr_data,
640 			   sizeof(config)))
641 		return -EFAULT;
642 
643 	netdev_dbg(priv->dev, "%s config flags:0x%x, tx_type:0x%x, rx_filter:0x%x\n",
644 		   __func__, config.flags, config.tx_type, config.rx_filter);
645 
646 	if (config.tx_type != HWTSTAMP_TX_OFF &&
647 	    config.tx_type != HWTSTAMP_TX_ON)
648 		return -ERANGE;
649 
650 	if (priv->adv_ts) {
651 		switch (config.rx_filter) {
652 		case HWTSTAMP_FILTER_NONE:
653 			/* time stamp no incoming packet at all */
654 			config.rx_filter = HWTSTAMP_FILTER_NONE;
655 			break;
656 
657 		case HWTSTAMP_FILTER_PTP_V1_L4_EVENT:
658 			/* PTP v1, UDP, any kind of event packet */
659 			config.rx_filter = HWTSTAMP_FILTER_PTP_V1_L4_EVENT;
660 			/* 'xmac' hardware can support Sync, Pdelay_Req and
661 			 * Pdelay_resp by setting bit14 and bits17/16 to 01
662 			 * This leaves Delay_Req timestamps out.
663 			 * Enable all events *and* general purpose message
664 			 * timestamping
665 			 */
666 			snap_type_sel = PTP_TCR_SNAPTYPSEL_1;
667 			ptp_over_ipv4_udp = PTP_TCR_TSIPV4ENA;
668 			ptp_over_ipv6_udp = PTP_TCR_TSIPV6ENA;
669 			break;
670 
671 		case HWTSTAMP_FILTER_PTP_V1_L4_SYNC:
672 			/* PTP v1, UDP, Sync packet */
673 			config.rx_filter = HWTSTAMP_FILTER_PTP_V1_L4_SYNC;
674 			/* take time stamp for SYNC messages only */
675 			ts_event_en = PTP_TCR_TSEVNTENA;
676 
677 			ptp_over_ipv4_udp = PTP_TCR_TSIPV4ENA;
678 			ptp_over_ipv6_udp = PTP_TCR_TSIPV6ENA;
679 			break;
680 
681 		case HWTSTAMP_FILTER_PTP_V1_L4_DELAY_REQ:
682 			/* PTP v1, UDP, Delay_req packet */
683 			config.rx_filter = HWTSTAMP_FILTER_PTP_V1_L4_DELAY_REQ;
684 			/* take time stamp for Delay_Req messages only */
685 			ts_master_en = PTP_TCR_TSMSTRENA;
686 			ts_event_en = PTP_TCR_TSEVNTENA;
687 
688 			ptp_over_ipv4_udp = PTP_TCR_TSIPV4ENA;
689 			ptp_over_ipv6_udp = PTP_TCR_TSIPV6ENA;
690 			break;
691 
692 		case HWTSTAMP_FILTER_PTP_V2_L4_EVENT:
693 			/* PTP v2, UDP, any kind of event packet */
694 			config.rx_filter = HWTSTAMP_FILTER_PTP_V2_L4_EVENT;
695 			ptp_v2 = PTP_TCR_TSVER2ENA;
696 			/* take time stamp for all event messages */
697 			snap_type_sel = PTP_TCR_SNAPTYPSEL_1;
698 
699 			ptp_over_ipv4_udp = PTP_TCR_TSIPV4ENA;
700 			ptp_over_ipv6_udp = PTP_TCR_TSIPV6ENA;
701 			break;
702 
703 		case HWTSTAMP_FILTER_PTP_V2_L4_SYNC:
704 			/* PTP v2, UDP, Sync packet */
705 			config.rx_filter = HWTSTAMP_FILTER_PTP_V2_L4_SYNC;
706 			ptp_v2 = PTP_TCR_TSVER2ENA;
707 			/* take time stamp for SYNC messages only */
708 			ts_event_en = PTP_TCR_TSEVNTENA;
709 
710 			ptp_over_ipv4_udp = PTP_TCR_TSIPV4ENA;
711 			ptp_over_ipv6_udp = PTP_TCR_TSIPV6ENA;
712 			break;
713 
714 		case HWTSTAMP_FILTER_PTP_V2_L4_DELAY_REQ:
715 			/* PTP v2, UDP, Delay_req packet */
716 			config.rx_filter = HWTSTAMP_FILTER_PTP_V2_L4_DELAY_REQ;
717 			ptp_v2 = PTP_TCR_TSVER2ENA;
718 			/* take time stamp for Delay_Req messages only */
719 			ts_master_en = PTP_TCR_TSMSTRENA;
720 			ts_event_en = PTP_TCR_TSEVNTENA;
721 
722 			ptp_over_ipv4_udp = PTP_TCR_TSIPV4ENA;
723 			ptp_over_ipv6_udp = PTP_TCR_TSIPV6ENA;
724 			break;
725 
726 		case HWTSTAMP_FILTER_PTP_V2_EVENT:
727 			/* PTP v2/802.AS1 any layer, any kind of event packet */
728 			config.rx_filter = HWTSTAMP_FILTER_PTP_V2_EVENT;
729 			ptp_v2 = PTP_TCR_TSVER2ENA;
730 			snap_type_sel = PTP_TCR_SNAPTYPSEL_1;
731 			if (priv->synopsys_id < DWMAC_CORE_4_10)
732 				ts_event_en = PTP_TCR_TSEVNTENA;
733 			ptp_over_ipv4_udp = PTP_TCR_TSIPV4ENA;
734 			ptp_over_ipv6_udp = PTP_TCR_TSIPV6ENA;
735 			ptp_over_ethernet = PTP_TCR_TSIPENA;
736 			break;
737 
738 		case HWTSTAMP_FILTER_PTP_V2_SYNC:
739 			/* PTP v2/802.AS1, any layer, Sync packet */
740 			config.rx_filter = HWTSTAMP_FILTER_PTP_V2_SYNC;
741 			ptp_v2 = PTP_TCR_TSVER2ENA;
742 			/* take time stamp for SYNC messages only */
743 			ts_event_en = PTP_TCR_TSEVNTENA;
744 
745 			ptp_over_ipv4_udp = PTP_TCR_TSIPV4ENA;
746 			ptp_over_ipv6_udp = PTP_TCR_TSIPV6ENA;
747 			ptp_over_ethernet = PTP_TCR_TSIPENA;
748 			break;
749 
750 		case HWTSTAMP_FILTER_PTP_V2_DELAY_REQ:
751 			/* PTP v2/802.AS1, any layer, Delay_req packet */
752 			config.rx_filter = HWTSTAMP_FILTER_PTP_V2_DELAY_REQ;
753 			ptp_v2 = PTP_TCR_TSVER2ENA;
754 			/* take time stamp for Delay_Req messages only */
755 			ts_master_en = PTP_TCR_TSMSTRENA;
756 			ts_event_en = PTP_TCR_TSEVNTENA;
757 
758 			ptp_over_ipv4_udp = PTP_TCR_TSIPV4ENA;
759 			ptp_over_ipv6_udp = PTP_TCR_TSIPV6ENA;
760 			ptp_over_ethernet = PTP_TCR_TSIPENA;
761 			break;
762 
763 		case HWTSTAMP_FILTER_NTP_ALL:
764 		case HWTSTAMP_FILTER_ALL:
765 			/* time stamp any incoming packet */
766 			config.rx_filter = HWTSTAMP_FILTER_ALL;
767 			tstamp_all = PTP_TCR_TSENALL;
768 			break;
769 
770 		default:
771 			return -ERANGE;
772 		}
773 	} else {
774 		switch (config.rx_filter) {
775 		case HWTSTAMP_FILTER_NONE:
776 			config.rx_filter = HWTSTAMP_FILTER_NONE;
777 			break;
778 		default:
779 			/* PTP v1, UDP, any kind of event packet */
780 			config.rx_filter = HWTSTAMP_FILTER_PTP_V1_L4_EVENT;
781 			break;
782 		}
783 	}
784 	priv->hwts_rx_en = ((config.rx_filter == HWTSTAMP_FILTER_NONE) ? 0 : 1);
785 	priv->hwts_tx_en = config.tx_type == HWTSTAMP_TX_ON;
786 
787 	priv->systime_flags = STMMAC_HWTS_ACTIVE;
788 
789 	if (priv->hwts_tx_en || priv->hwts_rx_en) {
790 		priv->systime_flags |= tstamp_all | ptp_v2 |
791 				       ptp_over_ethernet | ptp_over_ipv6_udp |
792 				       ptp_over_ipv4_udp | ts_event_en |
793 				       ts_master_en | snap_type_sel;
794 	}
795 
796 	stmmac_config_hw_tstamping(priv, priv->ptpaddr, priv->systime_flags);
797 
798 	memcpy(&priv->tstamp_config, &config, sizeof(config));
799 
800 	return copy_to_user(ifr->ifr_data, &config,
801 			    sizeof(config)) ? -EFAULT : 0;
802 }
803 
804 /**
805  *  stmmac_hwtstamp_get - read hardware timestamping.
806  *  @dev: device pointer.
807  *  @ifr: An IOCTL specific structure, that can contain a pointer to
808  *  a proprietary structure used to pass information to the driver.
809  *  Description:
810  *  This function obtain the current hardware timestamping settings
811  *  as requested.
812  */
813 static int stmmac_hwtstamp_get(struct net_device *dev, struct ifreq *ifr)
814 {
815 	struct stmmac_priv *priv = netdev_priv(dev);
816 	struct hwtstamp_config *config = &priv->tstamp_config;
817 
818 	if (!(priv->dma_cap.time_stamp || priv->dma_cap.atime_stamp))
819 		return -EOPNOTSUPP;
820 
821 	return copy_to_user(ifr->ifr_data, config,
822 			    sizeof(*config)) ? -EFAULT : 0;
823 }
824 
825 /**
826  * stmmac_init_tstamp_counter - init hardware timestamping counter
827  * @priv: driver private structure
828  * @systime_flags: timestamping flags
829  * Description:
830  * Initialize hardware counter for packet timestamping.
831  * This is valid as long as the interface is open and not suspended.
832  * Will be rerun after resuming from suspend, case in which the timestamping
833  * flags updated by stmmac_hwtstamp_set() also need to be restored.
834  */
835 int stmmac_init_tstamp_counter(struct stmmac_priv *priv, u32 systime_flags)
836 {
837 	bool xmac = priv->plat->has_gmac4 || priv->plat->has_xgmac;
838 	struct timespec64 now;
839 	u32 sec_inc = 0;
840 	u64 temp = 0;
841 
842 	if (!(priv->dma_cap.time_stamp || priv->dma_cap.atime_stamp))
843 		return -EOPNOTSUPP;
844 
845 	stmmac_config_hw_tstamping(priv, priv->ptpaddr, systime_flags);
846 	priv->systime_flags = systime_flags;
847 
848 	/* program Sub Second Increment reg */
849 	stmmac_config_sub_second_increment(priv, priv->ptpaddr,
850 					   priv->plat->clk_ptp_rate,
851 					   xmac, &sec_inc);
852 	temp = div_u64(1000000000ULL, sec_inc);
853 
854 	/* Store sub second increment for later use */
855 	priv->sub_second_inc = sec_inc;
856 
857 	/* calculate default added value:
858 	 * formula is :
859 	 * addend = (2^32)/freq_div_ratio;
860 	 * where, freq_div_ratio = 1e9ns/sec_inc
861 	 */
862 	temp = (u64)(temp << 32);
863 	priv->default_addend = div_u64(temp, priv->plat->clk_ptp_rate);
864 	stmmac_config_addend(priv, priv->ptpaddr, priv->default_addend);
865 
866 	/* initialize system time */
867 	ktime_get_real_ts64(&now);
868 
869 	/* lower 32 bits of tv_sec are safe until y2106 */
870 	stmmac_init_systime(priv, priv->ptpaddr, (u32)now.tv_sec, now.tv_nsec);
871 
872 	return 0;
873 }
874 EXPORT_SYMBOL_GPL(stmmac_init_tstamp_counter);
875 
876 /**
877  * stmmac_init_ptp - init PTP
878  * @priv: driver private structure
879  * Description: this is to verify if the HW supports the PTPv1 or PTPv2.
880  * This is done by looking at the HW cap. register.
881  * This function also registers the ptp driver.
882  */
883 static int stmmac_init_ptp(struct stmmac_priv *priv)
884 {
885 	bool xmac = priv->plat->has_gmac4 || priv->plat->has_xgmac;
886 	int ret;
887 
888 	if (priv->plat->ptp_clk_freq_config)
889 		priv->plat->ptp_clk_freq_config(priv);
890 
891 	ret = stmmac_init_tstamp_counter(priv, STMMAC_HWTS_ACTIVE);
892 	if (ret)
893 		return ret;
894 
895 	priv->adv_ts = 0;
896 	/* Check if adv_ts can be enabled for dwmac 4.x / xgmac core */
897 	if (xmac && priv->dma_cap.atime_stamp)
898 		priv->adv_ts = 1;
899 	/* Dwmac 3.x core with extend_desc can support adv_ts */
900 	else if (priv->extend_desc && priv->dma_cap.atime_stamp)
901 		priv->adv_ts = 1;
902 
903 	if (priv->dma_cap.time_stamp)
904 		netdev_info(priv->dev, "IEEE 1588-2002 Timestamp supported\n");
905 
906 	if (priv->adv_ts)
907 		netdev_info(priv->dev,
908 			    "IEEE 1588-2008 Advanced Timestamp supported\n");
909 
910 	priv->hwts_tx_en = 0;
911 	priv->hwts_rx_en = 0;
912 
913 	if (priv->plat->flags & STMMAC_FLAG_HWTSTAMP_CORRECT_LATENCY)
914 		stmmac_hwtstamp_correct_latency(priv, priv);
915 
916 	return 0;
917 }
918 
919 static void stmmac_release_ptp(struct stmmac_priv *priv)
920 {
921 	clk_disable_unprepare(priv->plat->clk_ptp_ref);
922 	stmmac_ptp_unregister(priv);
923 }
924 
925 /**
926  *  stmmac_mac_flow_ctrl - Configure flow control in all queues
927  *  @priv: driver private structure
928  *  @duplex: duplex passed to the next function
929  *  Description: It is used for configuring the flow control in all queues
930  */
931 static void stmmac_mac_flow_ctrl(struct stmmac_priv *priv, u32 duplex)
932 {
933 	u32 tx_cnt = priv->plat->tx_queues_to_use;
934 
935 	stmmac_flow_ctrl(priv, priv->hw, duplex, priv->flow_ctrl,
936 			priv->pause, tx_cnt);
937 }
938 
939 static unsigned long stmmac_mac_get_caps(struct phylink_config *config,
940 					 phy_interface_t interface)
941 {
942 	struct stmmac_priv *priv = netdev_priv(to_net_dev(config->dev));
943 
944 	/* Refresh the MAC-specific capabilities */
945 	stmmac_mac_update_caps(priv);
946 
947 	config->mac_capabilities = priv->hw->link.caps;
948 
949 	if (priv->plat->max_speed)
950 		phylink_limit_mac_speed(config, priv->plat->max_speed);
951 
952 	return config->mac_capabilities;
953 }
954 
955 static struct phylink_pcs *stmmac_mac_select_pcs(struct phylink_config *config,
956 						 phy_interface_t interface)
957 {
958 	struct stmmac_priv *priv = netdev_priv(to_net_dev(config->dev));
959 
960 	if (priv->hw->xpcs)
961 		return &priv->hw->xpcs->pcs;
962 
963 	return priv->hw->phylink_pcs;
964 }
965 
966 static void stmmac_mac_config(struct phylink_config *config, unsigned int mode,
967 			      const struct phylink_link_state *state)
968 {
969 	/* Nothing to do, xpcs_config() handles everything */
970 }
971 
972 static void stmmac_fpe_link_state_handle(struct stmmac_priv *priv, bool is_up)
973 {
974 	struct stmmac_fpe_cfg *fpe_cfg = priv->plat->fpe_cfg;
975 	enum stmmac_fpe_state *lo_state = &fpe_cfg->lo_fpe_state;
976 	enum stmmac_fpe_state *lp_state = &fpe_cfg->lp_fpe_state;
977 	bool *hs_enable = &fpe_cfg->hs_enable;
978 
979 	if (is_up && *hs_enable) {
980 		stmmac_fpe_send_mpacket(priv, priv->ioaddr, fpe_cfg,
981 					MPACKET_VERIFY);
982 	} else {
983 		*lo_state = FPE_STATE_OFF;
984 		*lp_state = FPE_STATE_OFF;
985 	}
986 }
987 
988 static void stmmac_mac_link_down(struct phylink_config *config,
989 				 unsigned int mode, phy_interface_t interface)
990 {
991 	struct stmmac_priv *priv = netdev_priv(to_net_dev(config->dev));
992 
993 	stmmac_mac_set(priv, priv->ioaddr, false);
994 	priv->eee_active = false;
995 	priv->tx_lpi_enabled = false;
996 	priv->eee_enabled = stmmac_eee_init(priv);
997 	stmmac_set_eee_pls(priv, priv->hw, false);
998 
999 	if (priv->dma_cap.fpesel)
1000 		stmmac_fpe_link_state_handle(priv, false);
1001 }
1002 
1003 static void stmmac_mac_link_up(struct phylink_config *config,
1004 			       struct phy_device *phy,
1005 			       unsigned int mode, phy_interface_t interface,
1006 			       int speed, int duplex,
1007 			       bool tx_pause, bool rx_pause)
1008 {
1009 	struct stmmac_priv *priv = netdev_priv(to_net_dev(config->dev));
1010 	u32 old_ctrl, ctrl;
1011 
1012 	if ((priv->plat->flags & STMMAC_FLAG_SERDES_UP_AFTER_PHY_LINKUP) &&
1013 	    priv->plat->serdes_powerup)
1014 		priv->plat->serdes_powerup(priv->dev, priv->plat->bsp_priv);
1015 
1016 	old_ctrl = readl(priv->ioaddr + MAC_CTRL_REG);
1017 	ctrl = old_ctrl & ~priv->hw->link.speed_mask;
1018 
1019 	if (interface == PHY_INTERFACE_MODE_USXGMII) {
1020 		switch (speed) {
1021 		case SPEED_10000:
1022 			ctrl |= priv->hw->link.xgmii.speed10000;
1023 			break;
1024 		case SPEED_5000:
1025 			ctrl |= priv->hw->link.xgmii.speed5000;
1026 			break;
1027 		case SPEED_2500:
1028 			ctrl |= priv->hw->link.xgmii.speed2500;
1029 			break;
1030 		default:
1031 			return;
1032 		}
1033 	} else if (interface == PHY_INTERFACE_MODE_XLGMII) {
1034 		switch (speed) {
1035 		case SPEED_100000:
1036 			ctrl |= priv->hw->link.xlgmii.speed100000;
1037 			break;
1038 		case SPEED_50000:
1039 			ctrl |= priv->hw->link.xlgmii.speed50000;
1040 			break;
1041 		case SPEED_40000:
1042 			ctrl |= priv->hw->link.xlgmii.speed40000;
1043 			break;
1044 		case SPEED_25000:
1045 			ctrl |= priv->hw->link.xlgmii.speed25000;
1046 			break;
1047 		case SPEED_10000:
1048 			ctrl |= priv->hw->link.xgmii.speed10000;
1049 			break;
1050 		case SPEED_2500:
1051 			ctrl |= priv->hw->link.speed2500;
1052 			break;
1053 		case SPEED_1000:
1054 			ctrl |= priv->hw->link.speed1000;
1055 			break;
1056 		default:
1057 			return;
1058 		}
1059 	} else {
1060 		switch (speed) {
1061 		case SPEED_2500:
1062 			ctrl |= priv->hw->link.speed2500;
1063 			break;
1064 		case SPEED_1000:
1065 			ctrl |= priv->hw->link.speed1000;
1066 			break;
1067 		case SPEED_100:
1068 			ctrl |= priv->hw->link.speed100;
1069 			break;
1070 		case SPEED_10:
1071 			ctrl |= priv->hw->link.speed10;
1072 			break;
1073 		default:
1074 			return;
1075 		}
1076 	}
1077 
1078 	priv->speed = speed;
1079 
1080 	if (priv->plat->fix_mac_speed)
1081 		priv->plat->fix_mac_speed(priv->plat->bsp_priv, speed, mode);
1082 
1083 	if (!duplex)
1084 		ctrl &= ~priv->hw->link.duplex;
1085 	else
1086 		ctrl |= priv->hw->link.duplex;
1087 
1088 	/* Flow Control operation */
1089 	if (rx_pause && tx_pause)
1090 		priv->flow_ctrl = FLOW_AUTO;
1091 	else if (rx_pause && !tx_pause)
1092 		priv->flow_ctrl = FLOW_RX;
1093 	else if (!rx_pause && tx_pause)
1094 		priv->flow_ctrl = FLOW_TX;
1095 	else
1096 		priv->flow_ctrl = FLOW_OFF;
1097 
1098 	stmmac_mac_flow_ctrl(priv, duplex);
1099 
1100 	if (ctrl != old_ctrl)
1101 		writel(ctrl, priv->ioaddr + MAC_CTRL_REG);
1102 
1103 	stmmac_mac_set(priv, priv->ioaddr, true);
1104 	if (phy && priv->dma_cap.eee) {
1105 		priv->eee_active =
1106 			phy_init_eee(phy, !(priv->plat->flags &
1107 				STMMAC_FLAG_RX_CLK_RUNS_IN_LPI)) >= 0;
1108 		priv->eee_enabled = stmmac_eee_init(priv);
1109 		priv->tx_lpi_enabled = priv->eee_enabled;
1110 		stmmac_set_eee_pls(priv, priv->hw, true);
1111 	}
1112 
1113 	if (priv->dma_cap.fpesel)
1114 		stmmac_fpe_link_state_handle(priv, true);
1115 
1116 	if (priv->plat->flags & STMMAC_FLAG_HWTSTAMP_CORRECT_LATENCY)
1117 		stmmac_hwtstamp_correct_latency(priv, priv);
1118 }
1119 
1120 static const struct phylink_mac_ops stmmac_phylink_mac_ops = {
1121 	.mac_get_caps = stmmac_mac_get_caps,
1122 	.mac_select_pcs = stmmac_mac_select_pcs,
1123 	.mac_config = stmmac_mac_config,
1124 	.mac_link_down = stmmac_mac_link_down,
1125 	.mac_link_up = stmmac_mac_link_up,
1126 };
1127 
1128 /**
1129  * stmmac_check_pcs_mode - verify if RGMII/SGMII is supported
1130  * @priv: driver private structure
1131  * Description: this is to verify if the HW supports the PCS.
1132  * Physical Coding Sublayer (PCS) interface that can be used when the MAC is
1133  * configured for the TBI, RTBI, or SGMII PHY interface.
1134  */
1135 static void stmmac_check_pcs_mode(struct stmmac_priv *priv)
1136 {
1137 	int interface = priv->plat->mac_interface;
1138 
1139 	if (priv->dma_cap.pcs) {
1140 		if ((interface == PHY_INTERFACE_MODE_RGMII) ||
1141 		    (interface == PHY_INTERFACE_MODE_RGMII_ID) ||
1142 		    (interface == PHY_INTERFACE_MODE_RGMII_RXID) ||
1143 		    (interface == PHY_INTERFACE_MODE_RGMII_TXID)) {
1144 			netdev_dbg(priv->dev, "PCS RGMII support enabled\n");
1145 			priv->hw->pcs = STMMAC_PCS_RGMII;
1146 		} else if (interface == PHY_INTERFACE_MODE_SGMII) {
1147 			netdev_dbg(priv->dev, "PCS SGMII support enabled\n");
1148 			priv->hw->pcs = STMMAC_PCS_SGMII;
1149 		}
1150 	}
1151 }
1152 
1153 /**
1154  * stmmac_init_phy - PHY initialization
1155  * @dev: net device structure
1156  * Description: it initializes the driver's PHY state, and attaches the PHY
1157  * to the mac driver.
1158  *  Return value:
1159  *  0 on success
1160  */
1161 static int stmmac_init_phy(struct net_device *dev)
1162 {
1163 	struct stmmac_priv *priv = netdev_priv(dev);
1164 	struct fwnode_handle *phy_fwnode;
1165 	struct fwnode_handle *fwnode;
1166 	int ret;
1167 
1168 	if (!phylink_expects_phy(priv->phylink))
1169 		return 0;
1170 
1171 	fwnode = priv->plat->port_node;
1172 	if (!fwnode)
1173 		fwnode = dev_fwnode(priv->device);
1174 
1175 	if (fwnode)
1176 		phy_fwnode = fwnode_get_phy_node(fwnode);
1177 	else
1178 		phy_fwnode = NULL;
1179 
1180 	/* Some DT bindings do not set-up the PHY handle. Let's try to
1181 	 * manually parse it
1182 	 */
1183 	if (!phy_fwnode || IS_ERR(phy_fwnode)) {
1184 		int addr = priv->plat->phy_addr;
1185 		struct phy_device *phydev;
1186 
1187 		if (addr < 0) {
1188 			netdev_err(priv->dev, "no phy found\n");
1189 			return -ENODEV;
1190 		}
1191 
1192 		phydev = mdiobus_get_phy(priv->mii, addr);
1193 		if (!phydev) {
1194 			netdev_err(priv->dev, "no phy at addr %d\n", addr);
1195 			return -ENODEV;
1196 		}
1197 
1198 		ret = phylink_connect_phy(priv->phylink, phydev);
1199 	} else {
1200 		fwnode_handle_put(phy_fwnode);
1201 		ret = phylink_fwnode_phy_connect(priv->phylink, fwnode, 0);
1202 	}
1203 
1204 	if (!priv->plat->pmt) {
1205 		struct ethtool_wolinfo wol = { .cmd = ETHTOOL_GWOL };
1206 
1207 		phylink_ethtool_get_wol(priv->phylink, &wol);
1208 		device_set_wakeup_capable(priv->device, !!wol.supported);
1209 		device_set_wakeup_enable(priv->device, !!wol.wolopts);
1210 	}
1211 
1212 	return ret;
1213 }
1214 
1215 static int stmmac_phy_setup(struct stmmac_priv *priv)
1216 {
1217 	struct stmmac_mdio_bus_data *mdio_bus_data;
1218 	int mode = priv->plat->phy_interface;
1219 	struct fwnode_handle *fwnode;
1220 	struct phylink *phylink;
1221 
1222 	priv->phylink_config.dev = &priv->dev->dev;
1223 	priv->phylink_config.type = PHYLINK_NETDEV;
1224 	priv->phylink_config.mac_managed_pm = true;
1225 
1226 	/* Stmmac always requires an RX clock for hardware initialization */
1227 	priv->phylink_config.mac_requires_rxc = true;
1228 
1229 	mdio_bus_data = priv->plat->mdio_bus_data;
1230 	if (mdio_bus_data)
1231 		priv->phylink_config.ovr_an_inband =
1232 			mdio_bus_data->xpcs_an_inband;
1233 
1234 	/* Set the platform/firmware specified interface mode. Note, phylink
1235 	 * deals with the PHY interface mode, not the MAC interface mode.
1236 	 */
1237 	__set_bit(mode, priv->phylink_config.supported_interfaces);
1238 
1239 	/* If we have an xpcs, it defines which PHY interfaces are supported. */
1240 	if (priv->hw->xpcs)
1241 		xpcs_get_interfaces(priv->hw->xpcs,
1242 				    priv->phylink_config.supported_interfaces);
1243 
1244 	fwnode = priv->plat->port_node;
1245 	if (!fwnode)
1246 		fwnode = dev_fwnode(priv->device);
1247 
1248 	phylink = phylink_create(&priv->phylink_config, fwnode,
1249 				 mode, &stmmac_phylink_mac_ops);
1250 	if (IS_ERR(phylink))
1251 		return PTR_ERR(phylink);
1252 
1253 	priv->phylink = phylink;
1254 	return 0;
1255 }
1256 
1257 static void stmmac_display_rx_rings(struct stmmac_priv *priv,
1258 				    struct stmmac_dma_conf *dma_conf)
1259 {
1260 	u32 rx_cnt = priv->plat->rx_queues_to_use;
1261 	unsigned int desc_size;
1262 	void *head_rx;
1263 	u32 queue;
1264 
1265 	/* Display RX rings */
1266 	for (queue = 0; queue < rx_cnt; queue++) {
1267 		struct stmmac_rx_queue *rx_q = &dma_conf->rx_queue[queue];
1268 
1269 		pr_info("\tRX Queue %u rings\n", queue);
1270 
1271 		if (priv->extend_desc) {
1272 			head_rx = (void *)rx_q->dma_erx;
1273 			desc_size = sizeof(struct dma_extended_desc);
1274 		} else {
1275 			head_rx = (void *)rx_q->dma_rx;
1276 			desc_size = sizeof(struct dma_desc);
1277 		}
1278 
1279 		/* Display RX ring */
1280 		stmmac_display_ring(priv, head_rx, dma_conf->dma_rx_size, true,
1281 				    rx_q->dma_rx_phy, desc_size);
1282 	}
1283 }
1284 
1285 static void stmmac_display_tx_rings(struct stmmac_priv *priv,
1286 				    struct stmmac_dma_conf *dma_conf)
1287 {
1288 	u32 tx_cnt = priv->plat->tx_queues_to_use;
1289 	unsigned int desc_size;
1290 	void *head_tx;
1291 	u32 queue;
1292 
1293 	/* Display TX rings */
1294 	for (queue = 0; queue < tx_cnt; queue++) {
1295 		struct stmmac_tx_queue *tx_q = &dma_conf->tx_queue[queue];
1296 
1297 		pr_info("\tTX Queue %d rings\n", queue);
1298 
1299 		if (priv->extend_desc) {
1300 			head_tx = (void *)tx_q->dma_etx;
1301 			desc_size = sizeof(struct dma_extended_desc);
1302 		} else if (tx_q->tbs & STMMAC_TBS_AVAIL) {
1303 			head_tx = (void *)tx_q->dma_entx;
1304 			desc_size = sizeof(struct dma_edesc);
1305 		} else {
1306 			head_tx = (void *)tx_q->dma_tx;
1307 			desc_size = sizeof(struct dma_desc);
1308 		}
1309 
1310 		stmmac_display_ring(priv, head_tx, dma_conf->dma_tx_size, false,
1311 				    tx_q->dma_tx_phy, desc_size);
1312 	}
1313 }
1314 
1315 static void stmmac_display_rings(struct stmmac_priv *priv,
1316 				 struct stmmac_dma_conf *dma_conf)
1317 {
1318 	/* Display RX ring */
1319 	stmmac_display_rx_rings(priv, dma_conf);
1320 
1321 	/* Display TX ring */
1322 	stmmac_display_tx_rings(priv, dma_conf);
1323 }
1324 
1325 static int stmmac_set_bfsize(int mtu, int bufsize)
1326 {
1327 	int ret = bufsize;
1328 
1329 	if (mtu >= BUF_SIZE_8KiB)
1330 		ret = BUF_SIZE_16KiB;
1331 	else if (mtu >= BUF_SIZE_4KiB)
1332 		ret = BUF_SIZE_8KiB;
1333 	else if (mtu >= BUF_SIZE_2KiB)
1334 		ret = BUF_SIZE_4KiB;
1335 	else if (mtu > DEFAULT_BUFSIZE)
1336 		ret = BUF_SIZE_2KiB;
1337 	else
1338 		ret = DEFAULT_BUFSIZE;
1339 
1340 	return ret;
1341 }
1342 
1343 /**
1344  * stmmac_clear_rx_descriptors - clear RX descriptors
1345  * @priv: driver private structure
1346  * @dma_conf: structure to take the dma data
1347  * @queue: RX queue index
1348  * Description: this function is called to clear the RX descriptors
1349  * in case of both basic and extended descriptors are used.
1350  */
1351 static void stmmac_clear_rx_descriptors(struct stmmac_priv *priv,
1352 					struct stmmac_dma_conf *dma_conf,
1353 					u32 queue)
1354 {
1355 	struct stmmac_rx_queue *rx_q = &dma_conf->rx_queue[queue];
1356 	int i;
1357 
1358 	/* Clear the RX descriptors */
1359 	for (i = 0; i < dma_conf->dma_rx_size; i++)
1360 		if (priv->extend_desc)
1361 			stmmac_init_rx_desc(priv, &rx_q->dma_erx[i].basic,
1362 					priv->use_riwt, priv->mode,
1363 					(i == dma_conf->dma_rx_size - 1),
1364 					dma_conf->dma_buf_sz);
1365 		else
1366 			stmmac_init_rx_desc(priv, &rx_q->dma_rx[i],
1367 					priv->use_riwt, priv->mode,
1368 					(i == dma_conf->dma_rx_size - 1),
1369 					dma_conf->dma_buf_sz);
1370 }
1371 
1372 /**
1373  * stmmac_clear_tx_descriptors - clear tx descriptors
1374  * @priv: driver private structure
1375  * @dma_conf: structure to take the dma data
1376  * @queue: TX queue index.
1377  * Description: this function is called to clear the TX descriptors
1378  * in case of both basic and extended descriptors are used.
1379  */
1380 static void stmmac_clear_tx_descriptors(struct stmmac_priv *priv,
1381 					struct stmmac_dma_conf *dma_conf,
1382 					u32 queue)
1383 {
1384 	struct stmmac_tx_queue *tx_q = &dma_conf->tx_queue[queue];
1385 	int i;
1386 
1387 	/* Clear the TX descriptors */
1388 	for (i = 0; i < dma_conf->dma_tx_size; i++) {
1389 		int last = (i == (dma_conf->dma_tx_size - 1));
1390 		struct dma_desc *p;
1391 
1392 		if (priv->extend_desc)
1393 			p = &tx_q->dma_etx[i].basic;
1394 		else if (tx_q->tbs & STMMAC_TBS_AVAIL)
1395 			p = &tx_q->dma_entx[i].basic;
1396 		else
1397 			p = &tx_q->dma_tx[i];
1398 
1399 		stmmac_init_tx_desc(priv, p, priv->mode, last);
1400 	}
1401 }
1402 
1403 /**
1404  * stmmac_clear_descriptors - clear descriptors
1405  * @priv: driver private structure
1406  * @dma_conf: structure to take the dma data
1407  * Description: this function is called to clear the TX and RX descriptors
1408  * in case of both basic and extended descriptors are used.
1409  */
1410 static void stmmac_clear_descriptors(struct stmmac_priv *priv,
1411 				     struct stmmac_dma_conf *dma_conf)
1412 {
1413 	u32 rx_queue_cnt = priv->plat->rx_queues_to_use;
1414 	u32 tx_queue_cnt = priv->plat->tx_queues_to_use;
1415 	u32 queue;
1416 
1417 	/* Clear the RX descriptors */
1418 	for (queue = 0; queue < rx_queue_cnt; queue++)
1419 		stmmac_clear_rx_descriptors(priv, dma_conf, queue);
1420 
1421 	/* Clear the TX descriptors */
1422 	for (queue = 0; queue < tx_queue_cnt; queue++)
1423 		stmmac_clear_tx_descriptors(priv, dma_conf, queue);
1424 }
1425 
1426 /**
1427  * stmmac_init_rx_buffers - init the RX descriptor buffer.
1428  * @priv: driver private structure
1429  * @dma_conf: structure to take the dma data
1430  * @p: descriptor pointer
1431  * @i: descriptor index
1432  * @flags: gfp flag
1433  * @queue: RX queue index
1434  * Description: this function is called to allocate a receive buffer, perform
1435  * the DMA mapping and init the descriptor.
1436  */
1437 static int stmmac_init_rx_buffers(struct stmmac_priv *priv,
1438 				  struct stmmac_dma_conf *dma_conf,
1439 				  struct dma_desc *p,
1440 				  int i, gfp_t flags, u32 queue)
1441 {
1442 	struct stmmac_rx_queue *rx_q = &dma_conf->rx_queue[queue];
1443 	struct stmmac_rx_buffer *buf = &rx_q->buf_pool[i];
1444 	gfp_t gfp = (GFP_ATOMIC | __GFP_NOWARN);
1445 
1446 	if (priv->dma_cap.host_dma_width <= 32)
1447 		gfp |= GFP_DMA32;
1448 
1449 	if (!buf->page) {
1450 		buf->page = page_pool_alloc_pages(rx_q->page_pool, gfp);
1451 		if (!buf->page)
1452 			return -ENOMEM;
1453 		buf->page_offset = stmmac_rx_offset(priv);
1454 	}
1455 
1456 	if (priv->sph && !buf->sec_page) {
1457 		buf->sec_page = page_pool_alloc_pages(rx_q->page_pool, gfp);
1458 		if (!buf->sec_page)
1459 			return -ENOMEM;
1460 
1461 		buf->sec_addr = page_pool_get_dma_addr(buf->sec_page);
1462 		stmmac_set_desc_sec_addr(priv, p, buf->sec_addr, true);
1463 	} else {
1464 		buf->sec_page = NULL;
1465 		stmmac_set_desc_sec_addr(priv, p, buf->sec_addr, false);
1466 	}
1467 
1468 	buf->addr = page_pool_get_dma_addr(buf->page) + buf->page_offset;
1469 
1470 	stmmac_set_desc_addr(priv, p, buf->addr);
1471 	if (dma_conf->dma_buf_sz == BUF_SIZE_16KiB)
1472 		stmmac_init_desc3(priv, p);
1473 
1474 	return 0;
1475 }
1476 
1477 /**
1478  * stmmac_free_rx_buffer - free RX dma buffers
1479  * @priv: private structure
1480  * @rx_q: RX queue
1481  * @i: buffer index.
1482  */
1483 static void stmmac_free_rx_buffer(struct stmmac_priv *priv,
1484 				  struct stmmac_rx_queue *rx_q,
1485 				  int i)
1486 {
1487 	struct stmmac_rx_buffer *buf = &rx_q->buf_pool[i];
1488 
1489 	if (buf->page)
1490 		page_pool_put_full_page(rx_q->page_pool, buf->page, false);
1491 	buf->page = NULL;
1492 
1493 	if (buf->sec_page)
1494 		page_pool_put_full_page(rx_q->page_pool, buf->sec_page, false);
1495 	buf->sec_page = NULL;
1496 }
1497 
1498 /**
1499  * stmmac_free_tx_buffer - free RX dma buffers
1500  * @priv: private structure
1501  * @dma_conf: structure to take the dma data
1502  * @queue: RX queue index
1503  * @i: buffer index.
1504  */
1505 static void stmmac_free_tx_buffer(struct stmmac_priv *priv,
1506 				  struct stmmac_dma_conf *dma_conf,
1507 				  u32 queue, int i)
1508 {
1509 	struct stmmac_tx_queue *tx_q = &dma_conf->tx_queue[queue];
1510 
1511 	if (tx_q->tx_skbuff_dma[i].buf &&
1512 	    tx_q->tx_skbuff_dma[i].buf_type != STMMAC_TXBUF_T_XDP_TX) {
1513 		if (tx_q->tx_skbuff_dma[i].map_as_page)
1514 			dma_unmap_page(priv->device,
1515 				       tx_q->tx_skbuff_dma[i].buf,
1516 				       tx_q->tx_skbuff_dma[i].len,
1517 				       DMA_TO_DEVICE);
1518 		else
1519 			dma_unmap_single(priv->device,
1520 					 tx_q->tx_skbuff_dma[i].buf,
1521 					 tx_q->tx_skbuff_dma[i].len,
1522 					 DMA_TO_DEVICE);
1523 	}
1524 
1525 	if (tx_q->xdpf[i] &&
1526 	    (tx_q->tx_skbuff_dma[i].buf_type == STMMAC_TXBUF_T_XDP_TX ||
1527 	     tx_q->tx_skbuff_dma[i].buf_type == STMMAC_TXBUF_T_XDP_NDO)) {
1528 		xdp_return_frame(tx_q->xdpf[i]);
1529 		tx_q->xdpf[i] = NULL;
1530 	}
1531 
1532 	if (tx_q->tx_skbuff_dma[i].buf_type == STMMAC_TXBUF_T_XSK_TX)
1533 		tx_q->xsk_frames_done++;
1534 
1535 	if (tx_q->tx_skbuff[i] &&
1536 	    tx_q->tx_skbuff_dma[i].buf_type == STMMAC_TXBUF_T_SKB) {
1537 		dev_kfree_skb_any(tx_q->tx_skbuff[i]);
1538 		tx_q->tx_skbuff[i] = NULL;
1539 	}
1540 
1541 	tx_q->tx_skbuff_dma[i].buf = 0;
1542 	tx_q->tx_skbuff_dma[i].map_as_page = false;
1543 }
1544 
1545 /**
1546  * dma_free_rx_skbufs - free RX dma buffers
1547  * @priv: private structure
1548  * @dma_conf: structure to take the dma data
1549  * @queue: RX queue index
1550  */
1551 static void dma_free_rx_skbufs(struct stmmac_priv *priv,
1552 			       struct stmmac_dma_conf *dma_conf,
1553 			       u32 queue)
1554 {
1555 	struct stmmac_rx_queue *rx_q = &dma_conf->rx_queue[queue];
1556 	int i;
1557 
1558 	for (i = 0; i < dma_conf->dma_rx_size; i++)
1559 		stmmac_free_rx_buffer(priv, rx_q, i);
1560 }
1561 
1562 static int stmmac_alloc_rx_buffers(struct stmmac_priv *priv,
1563 				   struct stmmac_dma_conf *dma_conf,
1564 				   u32 queue, gfp_t flags)
1565 {
1566 	struct stmmac_rx_queue *rx_q = &dma_conf->rx_queue[queue];
1567 	int i;
1568 
1569 	for (i = 0; i < dma_conf->dma_rx_size; i++) {
1570 		struct dma_desc *p;
1571 		int ret;
1572 
1573 		if (priv->extend_desc)
1574 			p = &((rx_q->dma_erx + i)->basic);
1575 		else
1576 			p = rx_q->dma_rx + i;
1577 
1578 		ret = stmmac_init_rx_buffers(priv, dma_conf, p, i, flags,
1579 					     queue);
1580 		if (ret)
1581 			return ret;
1582 
1583 		rx_q->buf_alloc_num++;
1584 	}
1585 
1586 	return 0;
1587 }
1588 
1589 /**
1590  * dma_free_rx_xskbufs - free RX dma buffers from XSK pool
1591  * @priv: private structure
1592  * @dma_conf: structure to take the dma data
1593  * @queue: RX queue index
1594  */
1595 static void dma_free_rx_xskbufs(struct stmmac_priv *priv,
1596 				struct stmmac_dma_conf *dma_conf,
1597 				u32 queue)
1598 {
1599 	struct stmmac_rx_queue *rx_q = &dma_conf->rx_queue[queue];
1600 	int i;
1601 
1602 	for (i = 0; i < dma_conf->dma_rx_size; i++) {
1603 		struct stmmac_rx_buffer *buf = &rx_q->buf_pool[i];
1604 
1605 		if (!buf->xdp)
1606 			continue;
1607 
1608 		xsk_buff_free(buf->xdp);
1609 		buf->xdp = NULL;
1610 	}
1611 }
1612 
1613 static int stmmac_alloc_rx_buffers_zc(struct stmmac_priv *priv,
1614 				      struct stmmac_dma_conf *dma_conf,
1615 				      u32 queue)
1616 {
1617 	struct stmmac_rx_queue *rx_q = &dma_conf->rx_queue[queue];
1618 	int i;
1619 
1620 	/* struct stmmac_xdp_buff is using cb field (maximum size of 24 bytes)
1621 	 * in struct xdp_buff_xsk to stash driver specific information. Thus,
1622 	 * use this macro to make sure no size violations.
1623 	 */
1624 	XSK_CHECK_PRIV_TYPE(struct stmmac_xdp_buff);
1625 
1626 	for (i = 0; i < dma_conf->dma_rx_size; i++) {
1627 		struct stmmac_rx_buffer *buf;
1628 		dma_addr_t dma_addr;
1629 		struct dma_desc *p;
1630 
1631 		if (priv->extend_desc)
1632 			p = (struct dma_desc *)(rx_q->dma_erx + i);
1633 		else
1634 			p = rx_q->dma_rx + i;
1635 
1636 		buf = &rx_q->buf_pool[i];
1637 
1638 		buf->xdp = xsk_buff_alloc(rx_q->xsk_pool);
1639 		if (!buf->xdp)
1640 			return -ENOMEM;
1641 
1642 		dma_addr = xsk_buff_xdp_get_dma(buf->xdp);
1643 		stmmac_set_desc_addr(priv, p, dma_addr);
1644 		rx_q->buf_alloc_num++;
1645 	}
1646 
1647 	return 0;
1648 }
1649 
1650 static struct xsk_buff_pool *stmmac_get_xsk_pool(struct stmmac_priv *priv, u32 queue)
1651 {
1652 	if (!stmmac_xdp_is_enabled(priv) || !test_bit(queue, priv->af_xdp_zc_qps))
1653 		return NULL;
1654 
1655 	return xsk_get_pool_from_qid(priv->dev, queue);
1656 }
1657 
1658 /**
1659  * __init_dma_rx_desc_rings - init the RX descriptor ring (per queue)
1660  * @priv: driver private structure
1661  * @dma_conf: structure to take the dma data
1662  * @queue: RX queue index
1663  * @flags: gfp flag.
1664  * Description: this function initializes the DMA RX descriptors
1665  * and allocates the socket buffers. It supports the chained and ring
1666  * modes.
1667  */
1668 static int __init_dma_rx_desc_rings(struct stmmac_priv *priv,
1669 				    struct stmmac_dma_conf *dma_conf,
1670 				    u32 queue, gfp_t flags)
1671 {
1672 	struct stmmac_rx_queue *rx_q = &dma_conf->rx_queue[queue];
1673 	int ret;
1674 
1675 	netif_dbg(priv, probe, priv->dev,
1676 		  "(%s) dma_rx_phy=0x%08x\n", __func__,
1677 		  (u32)rx_q->dma_rx_phy);
1678 
1679 	stmmac_clear_rx_descriptors(priv, dma_conf, queue);
1680 
1681 	xdp_rxq_info_unreg_mem_model(&rx_q->xdp_rxq);
1682 
1683 	rx_q->xsk_pool = stmmac_get_xsk_pool(priv, queue);
1684 
1685 	if (rx_q->xsk_pool) {
1686 		WARN_ON(xdp_rxq_info_reg_mem_model(&rx_q->xdp_rxq,
1687 						   MEM_TYPE_XSK_BUFF_POOL,
1688 						   NULL));
1689 		netdev_info(priv->dev,
1690 			    "Register MEM_TYPE_XSK_BUFF_POOL RxQ-%d\n",
1691 			    rx_q->queue_index);
1692 		xsk_pool_set_rxq_info(rx_q->xsk_pool, &rx_q->xdp_rxq);
1693 	} else {
1694 		WARN_ON(xdp_rxq_info_reg_mem_model(&rx_q->xdp_rxq,
1695 						   MEM_TYPE_PAGE_POOL,
1696 						   rx_q->page_pool));
1697 		netdev_info(priv->dev,
1698 			    "Register MEM_TYPE_PAGE_POOL RxQ-%d\n",
1699 			    rx_q->queue_index);
1700 	}
1701 
1702 	if (rx_q->xsk_pool) {
1703 		/* RX XDP ZC buffer pool may not be populated, e.g.
1704 		 * xdpsock TX-only.
1705 		 */
1706 		stmmac_alloc_rx_buffers_zc(priv, dma_conf, queue);
1707 	} else {
1708 		ret = stmmac_alloc_rx_buffers(priv, dma_conf, queue, flags);
1709 		if (ret < 0)
1710 			return -ENOMEM;
1711 	}
1712 
1713 	/* Setup the chained descriptor addresses */
1714 	if (priv->mode == STMMAC_CHAIN_MODE) {
1715 		if (priv->extend_desc)
1716 			stmmac_mode_init(priv, rx_q->dma_erx,
1717 					 rx_q->dma_rx_phy,
1718 					 dma_conf->dma_rx_size, 1);
1719 		else
1720 			stmmac_mode_init(priv, rx_q->dma_rx,
1721 					 rx_q->dma_rx_phy,
1722 					 dma_conf->dma_rx_size, 0);
1723 	}
1724 
1725 	return 0;
1726 }
1727 
1728 static int init_dma_rx_desc_rings(struct net_device *dev,
1729 				  struct stmmac_dma_conf *dma_conf,
1730 				  gfp_t flags)
1731 {
1732 	struct stmmac_priv *priv = netdev_priv(dev);
1733 	u32 rx_count = priv->plat->rx_queues_to_use;
1734 	int queue;
1735 	int ret;
1736 
1737 	/* RX INITIALIZATION */
1738 	netif_dbg(priv, probe, priv->dev,
1739 		  "SKB addresses:\nskb\t\tskb data\tdma data\n");
1740 
1741 	for (queue = 0; queue < rx_count; queue++) {
1742 		ret = __init_dma_rx_desc_rings(priv, dma_conf, queue, flags);
1743 		if (ret)
1744 			goto err_init_rx_buffers;
1745 	}
1746 
1747 	return 0;
1748 
1749 err_init_rx_buffers:
1750 	while (queue >= 0) {
1751 		struct stmmac_rx_queue *rx_q = &dma_conf->rx_queue[queue];
1752 
1753 		if (rx_q->xsk_pool)
1754 			dma_free_rx_xskbufs(priv, dma_conf, queue);
1755 		else
1756 			dma_free_rx_skbufs(priv, dma_conf, queue);
1757 
1758 		rx_q->buf_alloc_num = 0;
1759 		rx_q->xsk_pool = NULL;
1760 
1761 		queue--;
1762 	}
1763 
1764 	return ret;
1765 }
1766 
1767 /**
1768  * __init_dma_tx_desc_rings - init the TX descriptor ring (per queue)
1769  * @priv: driver private structure
1770  * @dma_conf: structure to take the dma data
1771  * @queue: TX queue index
1772  * Description: this function initializes the DMA TX descriptors
1773  * and allocates the socket buffers. It supports the chained and ring
1774  * modes.
1775  */
1776 static int __init_dma_tx_desc_rings(struct stmmac_priv *priv,
1777 				    struct stmmac_dma_conf *dma_conf,
1778 				    u32 queue)
1779 {
1780 	struct stmmac_tx_queue *tx_q = &dma_conf->tx_queue[queue];
1781 	int i;
1782 
1783 	netif_dbg(priv, probe, priv->dev,
1784 		  "(%s) dma_tx_phy=0x%08x\n", __func__,
1785 		  (u32)tx_q->dma_tx_phy);
1786 
1787 	/* Setup the chained descriptor addresses */
1788 	if (priv->mode == STMMAC_CHAIN_MODE) {
1789 		if (priv->extend_desc)
1790 			stmmac_mode_init(priv, tx_q->dma_etx,
1791 					 tx_q->dma_tx_phy,
1792 					 dma_conf->dma_tx_size, 1);
1793 		else if (!(tx_q->tbs & STMMAC_TBS_AVAIL))
1794 			stmmac_mode_init(priv, tx_q->dma_tx,
1795 					 tx_q->dma_tx_phy,
1796 					 dma_conf->dma_tx_size, 0);
1797 	}
1798 
1799 	tx_q->xsk_pool = stmmac_get_xsk_pool(priv, queue);
1800 
1801 	for (i = 0; i < dma_conf->dma_tx_size; i++) {
1802 		struct dma_desc *p;
1803 
1804 		if (priv->extend_desc)
1805 			p = &((tx_q->dma_etx + i)->basic);
1806 		else if (tx_q->tbs & STMMAC_TBS_AVAIL)
1807 			p = &((tx_q->dma_entx + i)->basic);
1808 		else
1809 			p = tx_q->dma_tx + i;
1810 
1811 		stmmac_clear_desc(priv, p);
1812 
1813 		tx_q->tx_skbuff_dma[i].buf = 0;
1814 		tx_q->tx_skbuff_dma[i].map_as_page = false;
1815 		tx_q->tx_skbuff_dma[i].len = 0;
1816 		tx_q->tx_skbuff_dma[i].last_segment = false;
1817 		tx_q->tx_skbuff[i] = NULL;
1818 	}
1819 
1820 	return 0;
1821 }
1822 
1823 static int init_dma_tx_desc_rings(struct net_device *dev,
1824 				  struct stmmac_dma_conf *dma_conf)
1825 {
1826 	struct stmmac_priv *priv = netdev_priv(dev);
1827 	u32 tx_queue_cnt;
1828 	u32 queue;
1829 
1830 	tx_queue_cnt = priv->plat->tx_queues_to_use;
1831 
1832 	for (queue = 0; queue < tx_queue_cnt; queue++)
1833 		__init_dma_tx_desc_rings(priv, dma_conf, queue);
1834 
1835 	return 0;
1836 }
1837 
1838 /**
1839  * init_dma_desc_rings - init the RX/TX descriptor rings
1840  * @dev: net device structure
1841  * @dma_conf: structure to take the dma data
1842  * @flags: gfp flag.
1843  * Description: this function initializes the DMA RX/TX descriptors
1844  * and allocates the socket buffers. It supports the chained and ring
1845  * modes.
1846  */
1847 static int init_dma_desc_rings(struct net_device *dev,
1848 			       struct stmmac_dma_conf *dma_conf,
1849 			       gfp_t flags)
1850 {
1851 	struct stmmac_priv *priv = netdev_priv(dev);
1852 	int ret;
1853 
1854 	ret = init_dma_rx_desc_rings(dev, dma_conf, flags);
1855 	if (ret)
1856 		return ret;
1857 
1858 	ret = init_dma_tx_desc_rings(dev, dma_conf);
1859 
1860 	stmmac_clear_descriptors(priv, dma_conf);
1861 
1862 	if (netif_msg_hw(priv))
1863 		stmmac_display_rings(priv, dma_conf);
1864 
1865 	return ret;
1866 }
1867 
1868 /**
1869  * dma_free_tx_skbufs - free TX dma buffers
1870  * @priv: private structure
1871  * @dma_conf: structure to take the dma data
1872  * @queue: TX queue index
1873  */
1874 static void dma_free_tx_skbufs(struct stmmac_priv *priv,
1875 			       struct stmmac_dma_conf *dma_conf,
1876 			       u32 queue)
1877 {
1878 	struct stmmac_tx_queue *tx_q = &dma_conf->tx_queue[queue];
1879 	int i;
1880 
1881 	tx_q->xsk_frames_done = 0;
1882 
1883 	for (i = 0; i < dma_conf->dma_tx_size; i++)
1884 		stmmac_free_tx_buffer(priv, dma_conf, queue, i);
1885 
1886 	if (tx_q->xsk_pool && tx_q->xsk_frames_done) {
1887 		xsk_tx_completed(tx_q->xsk_pool, tx_q->xsk_frames_done);
1888 		tx_q->xsk_frames_done = 0;
1889 		tx_q->xsk_pool = NULL;
1890 	}
1891 }
1892 
1893 /**
1894  * stmmac_free_tx_skbufs - free TX skb buffers
1895  * @priv: private structure
1896  */
1897 static void stmmac_free_tx_skbufs(struct stmmac_priv *priv)
1898 {
1899 	u32 tx_queue_cnt = priv->plat->tx_queues_to_use;
1900 	u32 queue;
1901 
1902 	for (queue = 0; queue < tx_queue_cnt; queue++)
1903 		dma_free_tx_skbufs(priv, &priv->dma_conf, queue);
1904 }
1905 
1906 /**
1907  * __free_dma_rx_desc_resources - free RX dma desc resources (per queue)
1908  * @priv: private structure
1909  * @dma_conf: structure to take the dma data
1910  * @queue: RX queue index
1911  */
1912 static void __free_dma_rx_desc_resources(struct stmmac_priv *priv,
1913 					 struct stmmac_dma_conf *dma_conf,
1914 					 u32 queue)
1915 {
1916 	struct stmmac_rx_queue *rx_q = &dma_conf->rx_queue[queue];
1917 
1918 	/* Release the DMA RX socket buffers */
1919 	if (rx_q->xsk_pool)
1920 		dma_free_rx_xskbufs(priv, dma_conf, queue);
1921 	else
1922 		dma_free_rx_skbufs(priv, dma_conf, queue);
1923 
1924 	rx_q->buf_alloc_num = 0;
1925 	rx_q->xsk_pool = NULL;
1926 
1927 	/* Free DMA regions of consistent memory previously allocated */
1928 	if (!priv->extend_desc)
1929 		dma_free_coherent(priv->device, dma_conf->dma_rx_size *
1930 				  sizeof(struct dma_desc),
1931 				  rx_q->dma_rx, rx_q->dma_rx_phy);
1932 	else
1933 		dma_free_coherent(priv->device, dma_conf->dma_rx_size *
1934 				  sizeof(struct dma_extended_desc),
1935 				  rx_q->dma_erx, rx_q->dma_rx_phy);
1936 
1937 	if (xdp_rxq_info_is_reg(&rx_q->xdp_rxq))
1938 		xdp_rxq_info_unreg(&rx_q->xdp_rxq);
1939 
1940 	kfree(rx_q->buf_pool);
1941 	if (rx_q->page_pool)
1942 		page_pool_destroy(rx_q->page_pool);
1943 }
1944 
1945 static void free_dma_rx_desc_resources(struct stmmac_priv *priv,
1946 				       struct stmmac_dma_conf *dma_conf)
1947 {
1948 	u32 rx_count = priv->plat->rx_queues_to_use;
1949 	u32 queue;
1950 
1951 	/* Free RX queue resources */
1952 	for (queue = 0; queue < rx_count; queue++)
1953 		__free_dma_rx_desc_resources(priv, dma_conf, queue);
1954 }
1955 
1956 /**
1957  * __free_dma_tx_desc_resources - free TX dma desc resources (per queue)
1958  * @priv: private structure
1959  * @dma_conf: structure to take the dma data
1960  * @queue: TX queue index
1961  */
1962 static void __free_dma_tx_desc_resources(struct stmmac_priv *priv,
1963 					 struct stmmac_dma_conf *dma_conf,
1964 					 u32 queue)
1965 {
1966 	struct stmmac_tx_queue *tx_q = &dma_conf->tx_queue[queue];
1967 	size_t size;
1968 	void *addr;
1969 
1970 	/* Release the DMA TX socket buffers */
1971 	dma_free_tx_skbufs(priv, dma_conf, queue);
1972 
1973 	if (priv->extend_desc) {
1974 		size = sizeof(struct dma_extended_desc);
1975 		addr = tx_q->dma_etx;
1976 	} else if (tx_q->tbs & STMMAC_TBS_AVAIL) {
1977 		size = sizeof(struct dma_edesc);
1978 		addr = tx_q->dma_entx;
1979 	} else {
1980 		size = sizeof(struct dma_desc);
1981 		addr = tx_q->dma_tx;
1982 	}
1983 
1984 	size *= dma_conf->dma_tx_size;
1985 
1986 	dma_free_coherent(priv->device, size, addr, tx_q->dma_tx_phy);
1987 
1988 	kfree(tx_q->tx_skbuff_dma);
1989 	kfree(tx_q->tx_skbuff);
1990 }
1991 
1992 static void free_dma_tx_desc_resources(struct stmmac_priv *priv,
1993 				       struct stmmac_dma_conf *dma_conf)
1994 {
1995 	u32 tx_count = priv->plat->tx_queues_to_use;
1996 	u32 queue;
1997 
1998 	/* Free TX queue resources */
1999 	for (queue = 0; queue < tx_count; queue++)
2000 		__free_dma_tx_desc_resources(priv, dma_conf, queue);
2001 }
2002 
2003 /**
2004  * __alloc_dma_rx_desc_resources - alloc RX resources (per queue).
2005  * @priv: private structure
2006  * @dma_conf: structure to take the dma data
2007  * @queue: RX queue index
2008  * Description: according to which descriptor can be used (extend or basic)
2009  * this function allocates the resources for TX and RX paths. In case of
2010  * reception, for example, it pre-allocated the RX socket buffer in order to
2011  * allow zero-copy mechanism.
2012  */
2013 static int __alloc_dma_rx_desc_resources(struct stmmac_priv *priv,
2014 					 struct stmmac_dma_conf *dma_conf,
2015 					 u32 queue)
2016 {
2017 	struct stmmac_rx_queue *rx_q = &dma_conf->rx_queue[queue];
2018 	struct stmmac_channel *ch = &priv->channel[queue];
2019 	bool xdp_prog = stmmac_xdp_is_enabled(priv);
2020 	struct page_pool_params pp_params = { 0 };
2021 	unsigned int num_pages;
2022 	unsigned int napi_id;
2023 	int ret;
2024 
2025 	rx_q->queue_index = queue;
2026 	rx_q->priv_data = priv;
2027 
2028 	pp_params.flags = PP_FLAG_DMA_MAP | PP_FLAG_DMA_SYNC_DEV;
2029 	pp_params.pool_size = dma_conf->dma_rx_size;
2030 	num_pages = DIV_ROUND_UP(dma_conf->dma_buf_sz, PAGE_SIZE);
2031 	pp_params.order = ilog2(num_pages);
2032 	pp_params.nid = dev_to_node(priv->device);
2033 	pp_params.dev = priv->device;
2034 	pp_params.dma_dir = xdp_prog ? DMA_BIDIRECTIONAL : DMA_FROM_DEVICE;
2035 	pp_params.offset = stmmac_rx_offset(priv);
2036 	pp_params.max_len = STMMAC_MAX_RX_BUF_SIZE(num_pages);
2037 
2038 	rx_q->page_pool = page_pool_create(&pp_params);
2039 	if (IS_ERR(rx_q->page_pool)) {
2040 		ret = PTR_ERR(rx_q->page_pool);
2041 		rx_q->page_pool = NULL;
2042 		return ret;
2043 	}
2044 
2045 	rx_q->buf_pool = kcalloc(dma_conf->dma_rx_size,
2046 				 sizeof(*rx_q->buf_pool),
2047 				 GFP_KERNEL);
2048 	if (!rx_q->buf_pool)
2049 		return -ENOMEM;
2050 
2051 	if (priv->extend_desc) {
2052 		rx_q->dma_erx = dma_alloc_coherent(priv->device,
2053 						   dma_conf->dma_rx_size *
2054 						   sizeof(struct dma_extended_desc),
2055 						   &rx_q->dma_rx_phy,
2056 						   GFP_KERNEL);
2057 		if (!rx_q->dma_erx)
2058 			return -ENOMEM;
2059 
2060 	} else {
2061 		rx_q->dma_rx = dma_alloc_coherent(priv->device,
2062 						  dma_conf->dma_rx_size *
2063 						  sizeof(struct dma_desc),
2064 						  &rx_q->dma_rx_phy,
2065 						  GFP_KERNEL);
2066 		if (!rx_q->dma_rx)
2067 			return -ENOMEM;
2068 	}
2069 
2070 	if (stmmac_xdp_is_enabled(priv) &&
2071 	    test_bit(queue, priv->af_xdp_zc_qps))
2072 		napi_id = ch->rxtx_napi.napi_id;
2073 	else
2074 		napi_id = ch->rx_napi.napi_id;
2075 
2076 	ret = xdp_rxq_info_reg(&rx_q->xdp_rxq, priv->dev,
2077 			       rx_q->queue_index,
2078 			       napi_id);
2079 	if (ret) {
2080 		netdev_err(priv->dev, "Failed to register xdp rxq info\n");
2081 		return -EINVAL;
2082 	}
2083 
2084 	return 0;
2085 }
2086 
2087 static int alloc_dma_rx_desc_resources(struct stmmac_priv *priv,
2088 				       struct stmmac_dma_conf *dma_conf)
2089 {
2090 	u32 rx_count = priv->plat->rx_queues_to_use;
2091 	u32 queue;
2092 	int ret;
2093 
2094 	/* RX queues buffers and DMA */
2095 	for (queue = 0; queue < rx_count; queue++) {
2096 		ret = __alloc_dma_rx_desc_resources(priv, dma_conf, queue);
2097 		if (ret)
2098 			goto err_dma;
2099 	}
2100 
2101 	return 0;
2102 
2103 err_dma:
2104 	free_dma_rx_desc_resources(priv, dma_conf);
2105 
2106 	return ret;
2107 }
2108 
2109 /**
2110  * __alloc_dma_tx_desc_resources - alloc TX resources (per queue).
2111  * @priv: private structure
2112  * @dma_conf: structure to take the dma data
2113  * @queue: TX queue index
2114  * Description: according to which descriptor can be used (extend or basic)
2115  * this function allocates the resources for TX and RX paths. In case of
2116  * reception, for example, it pre-allocated the RX socket buffer in order to
2117  * allow zero-copy mechanism.
2118  */
2119 static int __alloc_dma_tx_desc_resources(struct stmmac_priv *priv,
2120 					 struct stmmac_dma_conf *dma_conf,
2121 					 u32 queue)
2122 {
2123 	struct stmmac_tx_queue *tx_q = &dma_conf->tx_queue[queue];
2124 	size_t size;
2125 	void *addr;
2126 
2127 	tx_q->queue_index = queue;
2128 	tx_q->priv_data = priv;
2129 
2130 	tx_q->tx_skbuff_dma = kcalloc(dma_conf->dma_tx_size,
2131 				      sizeof(*tx_q->tx_skbuff_dma),
2132 				      GFP_KERNEL);
2133 	if (!tx_q->tx_skbuff_dma)
2134 		return -ENOMEM;
2135 
2136 	tx_q->tx_skbuff = kcalloc(dma_conf->dma_tx_size,
2137 				  sizeof(struct sk_buff *),
2138 				  GFP_KERNEL);
2139 	if (!tx_q->tx_skbuff)
2140 		return -ENOMEM;
2141 
2142 	if (priv->extend_desc)
2143 		size = sizeof(struct dma_extended_desc);
2144 	else if (tx_q->tbs & STMMAC_TBS_AVAIL)
2145 		size = sizeof(struct dma_edesc);
2146 	else
2147 		size = sizeof(struct dma_desc);
2148 
2149 	size *= dma_conf->dma_tx_size;
2150 
2151 	addr = dma_alloc_coherent(priv->device, size,
2152 				  &tx_q->dma_tx_phy, GFP_KERNEL);
2153 	if (!addr)
2154 		return -ENOMEM;
2155 
2156 	if (priv->extend_desc)
2157 		tx_q->dma_etx = addr;
2158 	else if (tx_q->tbs & STMMAC_TBS_AVAIL)
2159 		tx_q->dma_entx = addr;
2160 	else
2161 		tx_q->dma_tx = addr;
2162 
2163 	return 0;
2164 }
2165 
2166 static int alloc_dma_tx_desc_resources(struct stmmac_priv *priv,
2167 				       struct stmmac_dma_conf *dma_conf)
2168 {
2169 	u32 tx_count = priv->plat->tx_queues_to_use;
2170 	u32 queue;
2171 	int ret;
2172 
2173 	/* TX queues buffers and DMA */
2174 	for (queue = 0; queue < tx_count; queue++) {
2175 		ret = __alloc_dma_tx_desc_resources(priv, dma_conf, queue);
2176 		if (ret)
2177 			goto err_dma;
2178 	}
2179 
2180 	return 0;
2181 
2182 err_dma:
2183 	free_dma_tx_desc_resources(priv, dma_conf);
2184 	return ret;
2185 }
2186 
2187 /**
2188  * alloc_dma_desc_resources - alloc TX/RX resources.
2189  * @priv: private structure
2190  * @dma_conf: structure to take the dma data
2191  * Description: according to which descriptor can be used (extend or basic)
2192  * this function allocates the resources for TX and RX paths. In case of
2193  * reception, for example, it pre-allocated the RX socket buffer in order to
2194  * allow zero-copy mechanism.
2195  */
2196 static int alloc_dma_desc_resources(struct stmmac_priv *priv,
2197 				    struct stmmac_dma_conf *dma_conf)
2198 {
2199 	/* RX Allocation */
2200 	int ret = alloc_dma_rx_desc_resources(priv, dma_conf);
2201 
2202 	if (ret)
2203 		return ret;
2204 
2205 	ret = alloc_dma_tx_desc_resources(priv, dma_conf);
2206 
2207 	return ret;
2208 }
2209 
2210 /**
2211  * free_dma_desc_resources - free dma desc resources
2212  * @priv: private structure
2213  * @dma_conf: structure to take the dma data
2214  */
2215 static void free_dma_desc_resources(struct stmmac_priv *priv,
2216 				    struct stmmac_dma_conf *dma_conf)
2217 {
2218 	/* Release the DMA TX socket buffers */
2219 	free_dma_tx_desc_resources(priv, dma_conf);
2220 
2221 	/* Release the DMA RX socket buffers later
2222 	 * to ensure all pending XDP_TX buffers are returned.
2223 	 */
2224 	free_dma_rx_desc_resources(priv, dma_conf);
2225 }
2226 
2227 /**
2228  *  stmmac_mac_enable_rx_queues - Enable MAC rx queues
2229  *  @priv: driver private structure
2230  *  Description: It is used for enabling the rx queues in the MAC
2231  */
2232 static void stmmac_mac_enable_rx_queues(struct stmmac_priv *priv)
2233 {
2234 	u32 rx_queues_count = priv->plat->rx_queues_to_use;
2235 	int queue;
2236 	u8 mode;
2237 
2238 	for (queue = 0; queue < rx_queues_count; queue++) {
2239 		mode = priv->plat->rx_queues_cfg[queue].mode_to_use;
2240 		stmmac_rx_queue_enable(priv, priv->hw, mode, queue);
2241 	}
2242 }
2243 
2244 /**
2245  * stmmac_start_rx_dma - start RX DMA channel
2246  * @priv: driver private structure
2247  * @chan: RX channel index
2248  * Description:
2249  * This starts a RX DMA channel
2250  */
2251 static void stmmac_start_rx_dma(struct stmmac_priv *priv, u32 chan)
2252 {
2253 	netdev_dbg(priv->dev, "DMA RX processes started in channel %d\n", chan);
2254 	stmmac_start_rx(priv, priv->ioaddr, chan);
2255 }
2256 
2257 /**
2258  * stmmac_start_tx_dma - start TX DMA channel
2259  * @priv: driver private structure
2260  * @chan: TX channel index
2261  * Description:
2262  * This starts a TX DMA channel
2263  */
2264 static void stmmac_start_tx_dma(struct stmmac_priv *priv, u32 chan)
2265 {
2266 	netdev_dbg(priv->dev, "DMA TX processes started in channel %d\n", chan);
2267 	stmmac_start_tx(priv, priv->ioaddr, chan);
2268 }
2269 
2270 /**
2271  * stmmac_stop_rx_dma - stop RX DMA channel
2272  * @priv: driver private structure
2273  * @chan: RX channel index
2274  * Description:
2275  * This stops a RX DMA channel
2276  */
2277 static void stmmac_stop_rx_dma(struct stmmac_priv *priv, u32 chan)
2278 {
2279 	netdev_dbg(priv->dev, "DMA RX processes stopped in channel %d\n", chan);
2280 	stmmac_stop_rx(priv, priv->ioaddr, chan);
2281 }
2282 
2283 /**
2284  * stmmac_stop_tx_dma - stop TX DMA channel
2285  * @priv: driver private structure
2286  * @chan: TX channel index
2287  * Description:
2288  * This stops a TX DMA channel
2289  */
2290 static void stmmac_stop_tx_dma(struct stmmac_priv *priv, u32 chan)
2291 {
2292 	netdev_dbg(priv->dev, "DMA TX processes stopped in channel %d\n", chan);
2293 	stmmac_stop_tx(priv, priv->ioaddr, chan);
2294 }
2295 
2296 static void stmmac_enable_all_dma_irq(struct stmmac_priv *priv)
2297 {
2298 	u32 rx_channels_count = priv->plat->rx_queues_to_use;
2299 	u32 tx_channels_count = priv->plat->tx_queues_to_use;
2300 	u32 dma_csr_ch = max(rx_channels_count, tx_channels_count);
2301 	u32 chan;
2302 
2303 	for (chan = 0; chan < dma_csr_ch; chan++) {
2304 		struct stmmac_channel *ch = &priv->channel[chan];
2305 		unsigned long flags;
2306 
2307 		spin_lock_irqsave(&ch->lock, flags);
2308 		stmmac_enable_dma_irq(priv, priv->ioaddr, chan, 1, 1);
2309 		spin_unlock_irqrestore(&ch->lock, flags);
2310 	}
2311 }
2312 
2313 /**
2314  * stmmac_start_all_dma - start all RX and TX DMA channels
2315  * @priv: driver private structure
2316  * Description:
2317  * This starts all the RX and TX DMA channels
2318  */
2319 static void stmmac_start_all_dma(struct stmmac_priv *priv)
2320 {
2321 	u32 rx_channels_count = priv->plat->rx_queues_to_use;
2322 	u32 tx_channels_count = priv->plat->tx_queues_to_use;
2323 	u32 chan = 0;
2324 
2325 	for (chan = 0; chan < rx_channels_count; chan++)
2326 		stmmac_start_rx_dma(priv, chan);
2327 
2328 	for (chan = 0; chan < tx_channels_count; chan++)
2329 		stmmac_start_tx_dma(priv, chan);
2330 }
2331 
2332 /**
2333  * stmmac_stop_all_dma - stop all RX and TX DMA channels
2334  * @priv: driver private structure
2335  * Description:
2336  * This stops the RX and TX DMA channels
2337  */
2338 static void stmmac_stop_all_dma(struct stmmac_priv *priv)
2339 {
2340 	u32 rx_channels_count = priv->plat->rx_queues_to_use;
2341 	u32 tx_channels_count = priv->plat->tx_queues_to_use;
2342 	u32 chan = 0;
2343 
2344 	for (chan = 0; chan < rx_channels_count; chan++)
2345 		stmmac_stop_rx_dma(priv, chan);
2346 
2347 	for (chan = 0; chan < tx_channels_count; chan++)
2348 		stmmac_stop_tx_dma(priv, chan);
2349 }
2350 
2351 /**
2352  *  stmmac_dma_operation_mode - HW DMA operation mode
2353  *  @priv: driver private structure
2354  *  Description: it is used for configuring the DMA operation mode register in
2355  *  order to program the tx/rx DMA thresholds or Store-And-Forward mode.
2356  */
2357 static void stmmac_dma_operation_mode(struct stmmac_priv *priv)
2358 {
2359 	u32 rx_channels_count = priv->plat->rx_queues_to_use;
2360 	u32 tx_channels_count = priv->plat->tx_queues_to_use;
2361 	int rxfifosz = priv->plat->rx_fifo_size;
2362 	int txfifosz = priv->plat->tx_fifo_size;
2363 	u32 txmode = 0;
2364 	u32 rxmode = 0;
2365 	u32 chan = 0;
2366 	u8 qmode = 0;
2367 
2368 	if (rxfifosz == 0)
2369 		rxfifosz = priv->dma_cap.rx_fifo_size;
2370 	if (txfifosz == 0)
2371 		txfifosz = priv->dma_cap.tx_fifo_size;
2372 
2373 	/* Adjust for real per queue fifo size */
2374 	rxfifosz /= rx_channels_count;
2375 	txfifosz /= tx_channels_count;
2376 
2377 	if (priv->plat->force_thresh_dma_mode) {
2378 		txmode = tc;
2379 		rxmode = tc;
2380 	} else if (priv->plat->force_sf_dma_mode || priv->plat->tx_coe) {
2381 		/*
2382 		 * In case of GMAC, SF mode can be enabled
2383 		 * to perform the TX COE in HW. This depends on:
2384 		 * 1) TX COE if actually supported
2385 		 * 2) There is no bugged Jumbo frame support
2386 		 *    that needs to not insert csum in the TDES.
2387 		 */
2388 		txmode = SF_DMA_MODE;
2389 		rxmode = SF_DMA_MODE;
2390 		priv->xstats.threshold = SF_DMA_MODE;
2391 	} else {
2392 		txmode = tc;
2393 		rxmode = SF_DMA_MODE;
2394 	}
2395 
2396 	/* configure all channels */
2397 	for (chan = 0; chan < rx_channels_count; chan++) {
2398 		struct stmmac_rx_queue *rx_q = &priv->dma_conf.rx_queue[chan];
2399 		u32 buf_size;
2400 
2401 		qmode = priv->plat->rx_queues_cfg[chan].mode_to_use;
2402 
2403 		stmmac_dma_rx_mode(priv, priv->ioaddr, rxmode, chan,
2404 				rxfifosz, qmode);
2405 
2406 		if (rx_q->xsk_pool) {
2407 			buf_size = xsk_pool_get_rx_frame_size(rx_q->xsk_pool);
2408 			stmmac_set_dma_bfsize(priv, priv->ioaddr,
2409 					      buf_size,
2410 					      chan);
2411 		} else {
2412 			stmmac_set_dma_bfsize(priv, priv->ioaddr,
2413 					      priv->dma_conf.dma_buf_sz,
2414 					      chan);
2415 		}
2416 	}
2417 
2418 	for (chan = 0; chan < tx_channels_count; chan++) {
2419 		qmode = priv->plat->tx_queues_cfg[chan].mode_to_use;
2420 
2421 		stmmac_dma_tx_mode(priv, priv->ioaddr, txmode, chan,
2422 				txfifosz, qmode);
2423 	}
2424 }
2425 
2426 static void stmmac_xsk_request_timestamp(void *_priv)
2427 {
2428 	struct stmmac_metadata_request *meta_req = _priv;
2429 
2430 	stmmac_enable_tx_timestamp(meta_req->priv, meta_req->tx_desc);
2431 	*meta_req->set_ic = true;
2432 }
2433 
2434 static u64 stmmac_xsk_fill_timestamp(void *_priv)
2435 {
2436 	struct stmmac_xsk_tx_complete *tx_compl = _priv;
2437 	struct stmmac_priv *priv = tx_compl->priv;
2438 	struct dma_desc *desc = tx_compl->desc;
2439 	bool found = false;
2440 	u64 ns = 0;
2441 
2442 	if (!priv->hwts_tx_en)
2443 		return 0;
2444 
2445 	/* check tx tstamp status */
2446 	if (stmmac_get_tx_timestamp_status(priv, desc)) {
2447 		stmmac_get_timestamp(priv, desc, priv->adv_ts, &ns);
2448 		found = true;
2449 	} else if (!stmmac_get_mac_tx_timestamp(priv, priv->hw, &ns)) {
2450 		found = true;
2451 	}
2452 
2453 	if (found) {
2454 		ns -= priv->plat->cdc_error_adj;
2455 		return ns_to_ktime(ns);
2456 	}
2457 
2458 	return 0;
2459 }
2460 
2461 static const struct xsk_tx_metadata_ops stmmac_xsk_tx_metadata_ops = {
2462 	.tmo_request_timestamp		= stmmac_xsk_request_timestamp,
2463 	.tmo_fill_timestamp		= stmmac_xsk_fill_timestamp,
2464 };
2465 
2466 static bool stmmac_xdp_xmit_zc(struct stmmac_priv *priv, u32 queue, u32 budget)
2467 {
2468 	struct netdev_queue *nq = netdev_get_tx_queue(priv->dev, queue);
2469 	struct stmmac_tx_queue *tx_q = &priv->dma_conf.tx_queue[queue];
2470 	struct stmmac_txq_stats *txq_stats = &priv->xstats.txq_stats[queue];
2471 	struct xsk_buff_pool *pool = tx_q->xsk_pool;
2472 	unsigned int entry = tx_q->cur_tx;
2473 	struct dma_desc *tx_desc = NULL;
2474 	struct xdp_desc xdp_desc;
2475 	bool work_done = true;
2476 	u32 tx_set_ic_bit = 0;
2477 
2478 	/* Avoids TX time-out as we are sharing with slow path */
2479 	txq_trans_cond_update(nq);
2480 
2481 	budget = min(budget, stmmac_tx_avail(priv, queue));
2482 
2483 	while (budget-- > 0) {
2484 		struct stmmac_metadata_request meta_req;
2485 		struct xsk_tx_metadata *meta = NULL;
2486 		dma_addr_t dma_addr;
2487 		bool set_ic;
2488 
2489 		/* We are sharing with slow path and stop XSK TX desc submission when
2490 		 * available TX ring is less than threshold.
2491 		 */
2492 		if (unlikely(stmmac_tx_avail(priv, queue) < STMMAC_TX_XSK_AVAIL) ||
2493 		    !netif_carrier_ok(priv->dev)) {
2494 			work_done = false;
2495 			break;
2496 		}
2497 
2498 		if (!xsk_tx_peek_desc(pool, &xdp_desc))
2499 			break;
2500 
2501 		if (priv->est && priv->est->enable &&
2502 		    priv->est->max_sdu[queue] &&
2503 		    xdp_desc.len > priv->est->max_sdu[queue]) {
2504 			priv->xstats.max_sdu_txq_drop[queue]++;
2505 			continue;
2506 		}
2507 
2508 		if (likely(priv->extend_desc))
2509 			tx_desc = (struct dma_desc *)(tx_q->dma_etx + entry);
2510 		else if (tx_q->tbs & STMMAC_TBS_AVAIL)
2511 			tx_desc = &tx_q->dma_entx[entry].basic;
2512 		else
2513 			tx_desc = tx_q->dma_tx + entry;
2514 
2515 		dma_addr = xsk_buff_raw_get_dma(pool, xdp_desc.addr);
2516 		meta = xsk_buff_get_metadata(pool, xdp_desc.addr);
2517 		xsk_buff_raw_dma_sync_for_device(pool, dma_addr, xdp_desc.len);
2518 
2519 		tx_q->tx_skbuff_dma[entry].buf_type = STMMAC_TXBUF_T_XSK_TX;
2520 
2521 		/* To return XDP buffer to XSK pool, we simple call
2522 		 * xsk_tx_completed(), so we don't need to fill up
2523 		 * 'buf' and 'xdpf'.
2524 		 */
2525 		tx_q->tx_skbuff_dma[entry].buf = 0;
2526 		tx_q->xdpf[entry] = NULL;
2527 
2528 		tx_q->tx_skbuff_dma[entry].map_as_page = false;
2529 		tx_q->tx_skbuff_dma[entry].len = xdp_desc.len;
2530 		tx_q->tx_skbuff_dma[entry].last_segment = true;
2531 		tx_q->tx_skbuff_dma[entry].is_jumbo = false;
2532 
2533 		stmmac_set_desc_addr(priv, tx_desc, dma_addr);
2534 
2535 		tx_q->tx_count_frames++;
2536 
2537 		if (!priv->tx_coal_frames[queue])
2538 			set_ic = false;
2539 		else if (tx_q->tx_count_frames % priv->tx_coal_frames[queue] == 0)
2540 			set_ic = true;
2541 		else
2542 			set_ic = false;
2543 
2544 		meta_req.priv = priv;
2545 		meta_req.tx_desc = tx_desc;
2546 		meta_req.set_ic = &set_ic;
2547 		xsk_tx_metadata_request(meta, &stmmac_xsk_tx_metadata_ops,
2548 					&meta_req);
2549 		if (set_ic) {
2550 			tx_q->tx_count_frames = 0;
2551 			stmmac_set_tx_ic(priv, tx_desc);
2552 			tx_set_ic_bit++;
2553 		}
2554 
2555 		stmmac_prepare_tx_desc(priv, tx_desc, 1, xdp_desc.len,
2556 				       true, priv->mode, true, true,
2557 				       xdp_desc.len);
2558 
2559 		stmmac_enable_dma_transmission(priv, priv->ioaddr);
2560 
2561 		xsk_tx_metadata_to_compl(meta,
2562 					 &tx_q->tx_skbuff_dma[entry].xsk_meta);
2563 
2564 		tx_q->cur_tx = STMMAC_GET_ENTRY(tx_q->cur_tx, priv->dma_conf.dma_tx_size);
2565 		entry = tx_q->cur_tx;
2566 	}
2567 	u64_stats_update_begin(&txq_stats->napi_syncp);
2568 	u64_stats_add(&txq_stats->napi.tx_set_ic_bit, tx_set_ic_bit);
2569 	u64_stats_update_end(&txq_stats->napi_syncp);
2570 
2571 	if (tx_desc) {
2572 		stmmac_flush_tx_descriptors(priv, queue);
2573 		xsk_tx_release(pool);
2574 	}
2575 
2576 	/* Return true if all of the 3 conditions are met
2577 	 *  a) TX Budget is still available
2578 	 *  b) work_done = true when XSK TX desc peek is empty (no more
2579 	 *     pending XSK TX for transmission)
2580 	 */
2581 	return !!budget && work_done;
2582 }
2583 
2584 static void stmmac_bump_dma_threshold(struct stmmac_priv *priv, u32 chan)
2585 {
2586 	if (unlikely(priv->xstats.threshold != SF_DMA_MODE) && tc <= 256) {
2587 		tc += 64;
2588 
2589 		if (priv->plat->force_thresh_dma_mode)
2590 			stmmac_set_dma_operation_mode(priv, tc, tc, chan);
2591 		else
2592 			stmmac_set_dma_operation_mode(priv, tc, SF_DMA_MODE,
2593 						      chan);
2594 
2595 		priv->xstats.threshold = tc;
2596 	}
2597 }
2598 
2599 /**
2600  * stmmac_tx_clean - to manage the transmission completion
2601  * @priv: driver private structure
2602  * @budget: napi budget limiting this functions packet handling
2603  * @queue: TX queue index
2604  * @pending_packets: signal to arm the TX coal timer
2605  * Description: it reclaims the transmit resources after transmission completes.
2606  * If some packets still needs to be handled, due to TX coalesce, set
2607  * pending_packets to true to make NAPI arm the TX coal timer.
2608  */
2609 static int stmmac_tx_clean(struct stmmac_priv *priv, int budget, u32 queue,
2610 			   bool *pending_packets)
2611 {
2612 	struct stmmac_tx_queue *tx_q = &priv->dma_conf.tx_queue[queue];
2613 	struct stmmac_txq_stats *txq_stats = &priv->xstats.txq_stats[queue];
2614 	unsigned int bytes_compl = 0, pkts_compl = 0;
2615 	unsigned int entry, xmits = 0, count = 0;
2616 	u32 tx_packets = 0, tx_errors = 0;
2617 
2618 	__netif_tx_lock_bh(netdev_get_tx_queue(priv->dev, queue));
2619 
2620 	tx_q->xsk_frames_done = 0;
2621 
2622 	entry = tx_q->dirty_tx;
2623 
2624 	/* Try to clean all TX complete frame in 1 shot */
2625 	while ((entry != tx_q->cur_tx) && count < priv->dma_conf.dma_tx_size) {
2626 		struct xdp_frame *xdpf;
2627 		struct sk_buff *skb;
2628 		struct dma_desc *p;
2629 		int status;
2630 
2631 		if (tx_q->tx_skbuff_dma[entry].buf_type == STMMAC_TXBUF_T_XDP_TX ||
2632 		    tx_q->tx_skbuff_dma[entry].buf_type == STMMAC_TXBUF_T_XDP_NDO) {
2633 			xdpf = tx_q->xdpf[entry];
2634 			skb = NULL;
2635 		} else if (tx_q->tx_skbuff_dma[entry].buf_type == STMMAC_TXBUF_T_SKB) {
2636 			xdpf = NULL;
2637 			skb = tx_q->tx_skbuff[entry];
2638 		} else {
2639 			xdpf = NULL;
2640 			skb = NULL;
2641 		}
2642 
2643 		if (priv->extend_desc)
2644 			p = (struct dma_desc *)(tx_q->dma_etx + entry);
2645 		else if (tx_q->tbs & STMMAC_TBS_AVAIL)
2646 			p = &tx_q->dma_entx[entry].basic;
2647 		else
2648 			p = tx_q->dma_tx + entry;
2649 
2650 		status = stmmac_tx_status(priv,	&priv->xstats, p, priv->ioaddr);
2651 		/* Check if the descriptor is owned by the DMA */
2652 		if (unlikely(status & tx_dma_own))
2653 			break;
2654 
2655 		count++;
2656 
2657 		/* Make sure descriptor fields are read after reading
2658 		 * the own bit.
2659 		 */
2660 		dma_rmb();
2661 
2662 		/* Just consider the last segment and ...*/
2663 		if (likely(!(status & tx_not_ls))) {
2664 			/* ... verify the status error condition */
2665 			if (unlikely(status & tx_err)) {
2666 				tx_errors++;
2667 				if (unlikely(status & tx_err_bump_tc))
2668 					stmmac_bump_dma_threshold(priv, queue);
2669 			} else {
2670 				tx_packets++;
2671 			}
2672 			if (skb) {
2673 				stmmac_get_tx_hwtstamp(priv, p, skb);
2674 			} else if (tx_q->xsk_pool &&
2675 				   xp_tx_metadata_enabled(tx_q->xsk_pool)) {
2676 				struct stmmac_xsk_tx_complete tx_compl = {
2677 					.priv = priv,
2678 					.desc = p,
2679 				};
2680 
2681 				xsk_tx_metadata_complete(&tx_q->tx_skbuff_dma[entry].xsk_meta,
2682 							 &stmmac_xsk_tx_metadata_ops,
2683 							 &tx_compl);
2684 			}
2685 		}
2686 
2687 		if (likely(tx_q->tx_skbuff_dma[entry].buf &&
2688 			   tx_q->tx_skbuff_dma[entry].buf_type != STMMAC_TXBUF_T_XDP_TX)) {
2689 			if (tx_q->tx_skbuff_dma[entry].map_as_page)
2690 				dma_unmap_page(priv->device,
2691 					       tx_q->tx_skbuff_dma[entry].buf,
2692 					       tx_q->tx_skbuff_dma[entry].len,
2693 					       DMA_TO_DEVICE);
2694 			else
2695 				dma_unmap_single(priv->device,
2696 						 tx_q->tx_skbuff_dma[entry].buf,
2697 						 tx_q->tx_skbuff_dma[entry].len,
2698 						 DMA_TO_DEVICE);
2699 			tx_q->tx_skbuff_dma[entry].buf = 0;
2700 			tx_q->tx_skbuff_dma[entry].len = 0;
2701 			tx_q->tx_skbuff_dma[entry].map_as_page = false;
2702 		}
2703 
2704 		stmmac_clean_desc3(priv, tx_q, p);
2705 
2706 		tx_q->tx_skbuff_dma[entry].last_segment = false;
2707 		tx_q->tx_skbuff_dma[entry].is_jumbo = false;
2708 
2709 		if (xdpf &&
2710 		    tx_q->tx_skbuff_dma[entry].buf_type == STMMAC_TXBUF_T_XDP_TX) {
2711 			xdp_return_frame_rx_napi(xdpf);
2712 			tx_q->xdpf[entry] = NULL;
2713 		}
2714 
2715 		if (xdpf &&
2716 		    tx_q->tx_skbuff_dma[entry].buf_type == STMMAC_TXBUF_T_XDP_NDO) {
2717 			xdp_return_frame(xdpf);
2718 			tx_q->xdpf[entry] = NULL;
2719 		}
2720 
2721 		if (tx_q->tx_skbuff_dma[entry].buf_type == STMMAC_TXBUF_T_XSK_TX)
2722 			tx_q->xsk_frames_done++;
2723 
2724 		if (tx_q->tx_skbuff_dma[entry].buf_type == STMMAC_TXBUF_T_SKB) {
2725 			if (likely(skb)) {
2726 				pkts_compl++;
2727 				bytes_compl += skb->len;
2728 				dev_consume_skb_any(skb);
2729 				tx_q->tx_skbuff[entry] = NULL;
2730 			}
2731 		}
2732 
2733 		stmmac_release_tx_desc(priv, p, priv->mode);
2734 
2735 		entry = STMMAC_GET_ENTRY(entry, priv->dma_conf.dma_tx_size);
2736 	}
2737 	tx_q->dirty_tx = entry;
2738 
2739 	netdev_tx_completed_queue(netdev_get_tx_queue(priv->dev, queue),
2740 				  pkts_compl, bytes_compl);
2741 
2742 	if (unlikely(netif_tx_queue_stopped(netdev_get_tx_queue(priv->dev,
2743 								queue))) &&
2744 	    stmmac_tx_avail(priv, queue) > STMMAC_TX_THRESH(priv)) {
2745 
2746 		netif_dbg(priv, tx_done, priv->dev,
2747 			  "%s: restart transmit\n", __func__);
2748 		netif_tx_wake_queue(netdev_get_tx_queue(priv->dev, queue));
2749 	}
2750 
2751 	if (tx_q->xsk_pool) {
2752 		bool work_done;
2753 
2754 		if (tx_q->xsk_frames_done)
2755 			xsk_tx_completed(tx_q->xsk_pool, tx_q->xsk_frames_done);
2756 
2757 		if (xsk_uses_need_wakeup(tx_q->xsk_pool))
2758 			xsk_set_tx_need_wakeup(tx_q->xsk_pool);
2759 
2760 		/* For XSK TX, we try to send as many as possible.
2761 		 * If XSK work done (XSK TX desc empty and budget still
2762 		 * available), return "budget - 1" to reenable TX IRQ.
2763 		 * Else, return "budget" to make NAPI continue polling.
2764 		 */
2765 		work_done = stmmac_xdp_xmit_zc(priv, queue,
2766 					       STMMAC_XSK_TX_BUDGET_MAX);
2767 		if (work_done)
2768 			xmits = budget - 1;
2769 		else
2770 			xmits = budget;
2771 	}
2772 
2773 	if (priv->eee_enabled && !priv->tx_path_in_lpi_mode &&
2774 	    priv->eee_sw_timer_en) {
2775 		if (stmmac_enable_eee_mode(priv))
2776 			mod_timer(&priv->eee_ctrl_timer, STMMAC_LPI_T(priv->tx_lpi_timer));
2777 	}
2778 
2779 	/* We still have pending packets, let's call for a new scheduling */
2780 	if (tx_q->dirty_tx != tx_q->cur_tx)
2781 		*pending_packets = true;
2782 
2783 	u64_stats_update_begin(&txq_stats->napi_syncp);
2784 	u64_stats_add(&txq_stats->napi.tx_packets, tx_packets);
2785 	u64_stats_add(&txq_stats->napi.tx_pkt_n, tx_packets);
2786 	u64_stats_inc(&txq_stats->napi.tx_clean);
2787 	u64_stats_update_end(&txq_stats->napi_syncp);
2788 
2789 	priv->xstats.tx_errors += tx_errors;
2790 
2791 	__netif_tx_unlock_bh(netdev_get_tx_queue(priv->dev, queue));
2792 
2793 	/* Combine decisions from TX clean and XSK TX */
2794 	return max(count, xmits);
2795 }
2796 
2797 /**
2798  * stmmac_tx_err - to manage the tx error
2799  * @priv: driver private structure
2800  * @chan: channel index
2801  * Description: it cleans the descriptors and restarts the transmission
2802  * in case of transmission errors.
2803  */
2804 static void stmmac_tx_err(struct stmmac_priv *priv, u32 chan)
2805 {
2806 	struct stmmac_tx_queue *tx_q = &priv->dma_conf.tx_queue[chan];
2807 
2808 	netif_tx_stop_queue(netdev_get_tx_queue(priv->dev, chan));
2809 
2810 	stmmac_stop_tx_dma(priv, chan);
2811 	dma_free_tx_skbufs(priv, &priv->dma_conf, chan);
2812 	stmmac_clear_tx_descriptors(priv, &priv->dma_conf, chan);
2813 	stmmac_reset_tx_queue(priv, chan);
2814 	stmmac_init_tx_chan(priv, priv->ioaddr, priv->plat->dma_cfg,
2815 			    tx_q->dma_tx_phy, chan);
2816 	stmmac_start_tx_dma(priv, chan);
2817 
2818 	priv->xstats.tx_errors++;
2819 	netif_tx_wake_queue(netdev_get_tx_queue(priv->dev, chan));
2820 }
2821 
2822 /**
2823  *  stmmac_set_dma_operation_mode - Set DMA operation mode by channel
2824  *  @priv: driver private structure
2825  *  @txmode: TX operating mode
2826  *  @rxmode: RX operating mode
2827  *  @chan: channel index
2828  *  Description: it is used for configuring of the DMA operation mode in
2829  *  runtime in order to program the tx/rx DMA thresholds or Store-And-Forward
2830  *  mode.
2831  */
2832 static void stmmac_set_dma_operation_mode(struct stmmac_priv *priv, u32 txmode,
2833 					  u32 rxmode, u32 chan)
2834 {
2835 	u8 rxqmode = priv->plat->rx_queues_cfg[chan].mode_to_use;
2836 	u8 txqmode = priv->plat->tx_queues_cfg[chan].mode_to_use;
2837 	u32 rx_channels_count = priv->plat->rx_queues_to_use;
2838 	u32 tx_channels_count = priv->plat->tx_queues_to_use;
2839 	int rxfifosz = priv->plat->rx_fifo_size;
2840 	int txfifosz = priv->plat->tx_fifo_size;
2841 
2842 	if (rxfifosz == 0)
2843 		rxfifosz = priv->dma_cap.rx_fifo_size;
2844 	if (txfifosz == 0)
2845 		txfifosz = priv->dma_cap.tx_fifo_size;
2846 
2847 	/* Adjust for real per queue fifo size */
2848 	rxfifosz /= rx_channels_count;
2849 	txfifosz /= tx_channels_count;
2850 
2851 	stmmac_dma_rx_mode(priv, priv->ioaddr, rxmode, chan, rxfifosz, rxqmode);
2852 	stmmac_dma_tx_mode(priv, priv->ioaddr, txmode, chan, txfifosz, txqmode);
2853 }
2854 
2855 static bool stmmac_safety_feat_interrupt(struct stmmac_priv *priv)
2856 {
2857 	int ret;
2858 
2859 	ret = stmmac_safety_feat_irq_status(priv, priv->dev,
2860 			priv->ioaddr, priv->dma_cap.asp, &priv->sstats);
2861 	if (ret && (ret != -EINVAL)) {
2862 		stmmac_global_err(priv);
2863 		return true;
2864 	}
2865 
2866 	return false;
2867 }
2868 
2869 static int stmmac_napi_check(struct stmmac_priv *priv, u32 chan, u32 dir)
2870 {
2871 	int status = stmmac_dma_interrupt_status(priv, priv->ioaddr,
2872 						 &priv->xstats, chan, dir);
2873 	struct stmmac_rx_queue *rx_q = &priv->dma_conf.rx_queue[chan];
2874 	struct stmmac_tx_queue *tx_q = &priv->dma_conf.tx_queue[chan];
2875 	struct stmmac_channel *ch = &priv->channel[chan];
2876 	struct napi_struct *rx_napi;
2877 	struct napi_struct *tx_napi;
2878 	unsigned long flags;
2879 
2880 	rx_napi = rx_q->xsk_pool ? &ch->rxtx_napi : &ch->rx_napi;
2881 	tx_napi = tx_q->xsk_pool ? &ch->rxtx_napi : &ch->tx_napi;
2882 
2883 	if ((status & handle_rx) && (chan < priv->plat->rx_queues_to_use)) {
2884 		if (napi_schedule_prep(rx_napi)) {
2885 			spin_lock_irqsave(&ch->lock, flags);
2886 			stmmac_disable_dma_irq(priv, priv->ioaddr, chan, 1, 0);
2887 			spin_unlock_irqrestore(&ch->lock, flags);
2888 			__napi_schedule(rx_napi);
2889 		}
2890 	}
2891 
2892 	if ((status & handle_tx) && (chan < priv->plat->tx_queues_to_use)) {
2893 		if (napi_schedule_prep(tx_napi)) {
2894 			spin_lock_irqsave(&ch->lock, flags);
2895 			stmmac_disable_dma_irq(priv, priv->ioaddr, chan, 0, 1);
2896 			spin_unlock_irqrestore(&ch->lock, flags);
2897 			__napi_schedule(tx_napi);
2898 		}
2899 	}
2900 
2901 	return status;
2902 }
2903 
2904 /**
2905  * stmmac_dma_interrupt - DMA ISR
2906  * @priv: driver private structure
2907  * Description: this is the DMA ISR. It is called by the main ISR.
2908  * It calls the dwmac dma routine and schedule poll method in case of some
2909  * work can be done.
2910  */
2911 static void stmmac_dma_interrupt(struct stmmac_priv *priv)
2912 {
2913 	u32 tx_channel_count = priv->plat->tx_queues_to_use;
2914 	u32 rx_channel_count = priv->plat->rx_queues_to_use;
2915 	u32 channels_to_check = tx_channel_count > rx_channel_count ?
2916 				tx_channel_count : rx_channel_count;
2917 	u32 chan;
2918 	int status[max_t(u32, MTL_MAX_TX_QUEUES, MTL_MAX_RX_QUEUES)];
2919 
2920 	/* Make sure we never check beyond our status buffer. */
2921 	if (WARN_ON_ONCE(channels_to_check > ARRAY_SIZE(status)))
2922 		channels_to_check = ARRAY_SIZE(status);
2923 
2924 	for (chan = 0; chan < channels_to_check; chan++)
2925 		status[chan] = stmmac_napi_check(priv, chan,
2926 						 DMA_DIR_RXTX);
2927 
2928 	for (chan = 0; chan < tx_channel_count; chan++) {
2929 		if (unlikely(status[chan] & tx_hard_error_bump_tc)) {
2930 			/* Try to bump up the dma threshold on this failure */
2931 			stmmac_bump_dma_threshold(priv, chan);
2932 		} else if (unlikely(status[chan] == tx_hard_error)) {
2933 			stmmac_tx_err(priv, chan);
2934 		}
2935 	}
2936 }
2937 
2938 /**
2939  * stmmac_mmc_setup: setup the Mac Management Counters (MMC)
2940  * @priv: driver private structure
2941  * Description: this masks the MMC irq, in fact, the counters are managed in SW.
2942  */
2943 static void stmmac_mmc_setup(struct stmmac_priv *priv)
2944 {
2945 	unsigned int mode = MMC_CNTRL_RESET_ON_READ | MMC_CNTRL_COUNTER_RESET |
2946 			    MMC_CNTRL_PRESET | MMC_CNTRL_FULL_HALF_PRESET;
2947 
2948 	stmmac_mmc_intr_all_mask(priv, priv->mmcaddr);
2949 
2950 	if (priv->dma_cap.rmon) {
2951 		stmmac_mmc_ctrl(priv, priv->mmcaddr, mode);
2952 		memset(&priv->mmc, 0, sizeof(struct stmmac_counters));
2953 	} else
2954 		netdev_info(priv->dev, "No MAC Management Counters available\n");
2955 }
2956 
2957 /**
2958  * stmmac_get_hw_features - get MAC capabilities from the HW cap. register.
2959  * @priv: driver private structure
2960  * Description:
2961  *  new GMAC chip generations have a new register to indicate the
2962  *  presence of the optional feature/functions.
2963  *  This can be also used to override the value passed through the
2964  *  platform and necessary for old MAC10/100 and GMAC chips.
2965  */
2966 static int stmmac_get_hw_features(struct stmmac_priv *priv)
2967 {
2968 	return stmmac_get_hw_feature(priv, priv->ioaddr, &priv->dma_cap) == 0;
2969 }
2970 
2971 /**
2972  * stmmac_check_ether_addr - check if the MAC addr is valid
2973  * @priv: driver private structure
2974  * Description:
2975  * it is to verify if the MAC address is valid, in case of failures it
2976  * generates a random MAC address
2977  */
2978 static void stmmac_check_ether_addr(struct stmmac_priv *priv)
2979 {
2980 	u8 addr[ETH_ALEN];
2981 
2982 	if (!is_valid_ether_addr(priv->dev->dev_addr)) {
2983 		stmmac_get_umac_addr(priv, priv->hw, addr, 0);
2984 		if (is_valid_ether_addr(addr))
2985 			eth_hw_addr_set(priv->dev, addr);
2986 		else
2987 			eth_hw_addr_random(priv->dev);
2988 		dev_info(priv->device, "device MAC address %pM\n",
2989 			 priv->dev->dev_addr);
2990 	}
2991 }
2992 
2993 /**
2994  * stmmac_init_dma_engine - DMA init.
2995  * @priv: driver private structure
2996  * Description:
2997  * It inits the DMA invoking the specific MAC/GMAC callback.
2998  * Some DMA parameters can be passed from the platform;
2999  * in case of these are not passed a default is kept for the MAC or GMAC.
3000  */
3001 static int stmmac_init_dma_engine(struct stmmac_priv *priv)
3002 {
3003 	u32 rx_channels_count = priv->plat->rx_queues_to_use;
3004 	u32 tx_channels_count = priv->plat->tx_queues_to_use;
3005 	u32 dma_csr_ch = max(rx_channels_count, tx_channels_count);
3006 	struct stmmac_rx_queue *rx_q;
3007 	struct stmmac_tx_queue *tx_q;
3008 	u32 chan = 0;
3009 	int atds = 0;
3010 	int ret = 0;
3011 
3012 	if (!priv->plat->dma_cfg || !priv->plat->dma_cfg->pbl) {
3013 		dev_err(priv->device, "Invalid DMA configuration\n");
3014 		return -EINVAL;
3015 	}
3016 
3017 	if (priv->extend_desc && (priv->mode == STMMAC_RING_MODE))
3018 		atds = 1;
3019 
3020 	ret = stmmac_reset(priv, priv->ioaddr);
3021 	if (ret) {
3022 		dev_err(priv->device, "Failed to reset the dma\n");
3023 		return ret;
3024 	}
3025 
3026 	/* DMA Configuration */
3027 	stmmac_dma_init(priv, priv->ioaddr, priv->plat->dma_cfg, atds);
3028 
3029 	if (priv->plat->axi)
3030 		stmmac_axi(priv, priv->ioaddr, priv->plat->axi);
3031 
3032 	/* DMA CSR Channel configuration */
3033 	for (chan = 0; chan < dma_csr_ch; chan++) {
3034 		stmmac_init_chan(priv, priv->ioaddr, priv->plat->dma_cfg, chan);
3035 		stmmac_disable_dma_irq(priv, priv->ioaddr, chan, 1, 1);
3036 	}
3037 
3038 	/* DMA RX Channel Configuration */
3039 	for (chan = 0; chan < rx_channels_count; chan++) {
3040 		rx_q = &priv->dma_conf.rx_queue[chan];
3041 
3042 		stmmac_init_rx_chan(priv, priv->ioaddr, priv->plat->dma_cfg,
3043 				    rx_q->dma_rx_phy, chan);
3044 
3045 		rx_q->rx_tail_addr = rx_q->dma_rx_phy +
3046 				     (rx_q->buf_alloc_num *
3047 				      sizeof(struct dma_desc));
3048 		stmmac_set_rx_tail_ptr(priv, priv->ioaddr,
3049 				       rx_q->rx_tail_addr, chan);
3050 	}
3051 
3052 	/* DMA TX Channel Configuration */
3053 	for (chan = 0; chan < tx_channels_count; chan++) {
3054 		tx_q = &priv->dma_conf.tx_queue[chan];
3055 
3056 		stmmac_init_tx_chan(priv, priv->ioaddr, priv->plat->dma_cfg,
3057 				    tx_q->dma_tx_phy, chan);
3058 
3059 		tx_q->tx_tail_addr = tx_q->dma_tx_phy;
3060 		stmmac_set_tx_tail_ptr(priv, priv->ioaddr,
3061 				       tx_q->tx_tail_addr, chan);
3062 	}
3063 
3064 	return ret;
3065 }
3066 
3067 static void stmmac_tx_timer_arm(struct stmmac_priv *priv, u32 queue)
3068 {
3069 	struct stmmac_tx_queue *tx_q = &priv->dma_conf.tx_queue[queue];
3070 	u32 tx_coal_timer = priv->tx_coal_timer[queue];
3071 	struct stmmac_channel *ch;
3072 	struct napi_struct *napi;
3073 
3074 	if (!tx_coal_timer)
3075 		return;
3076 
3077 	ch = &priv->channel[tx_q->queue_index];
3078 	napi = tx_q->xsk_pool ? &ch->rxtx_napi : &ch->tx_napi;
3079 
3080 	/* Arm timer only if napi is not already scheduled.
3081 	 * Try to cancel any timer if napi is scheduled, timer will be armed
3082 	 * again in the next scheduled napi.
3083 	 */
3084 	if (unlikely(!napi_is_scheduled(napi)))
3085 		hrtimer_start(&tx_q->txtimer,
3086 			      STMMAC_COAL_TIMER(tx_coal_timer),
3087 			      HRTIMER_MODE_REL);
3088 	else
3089 		hrtimer_try_to_cancel(&tx_q->txtimer);
3090 }
3091 
3092 /**
3093  * stmmac_tx_timer - mitigation sw timer for tx.
3094  * @t: data pointer
3095  * Description:
3096  * This is the timer handler to directly invoke the stmmac_tx_clean.
3097  */
3098 static enum hrtimer_restart stmmac_tx_timer(struct hrtimer *t)
3099 {
3100 	struct stmmac_tx_queue *tx_q = container_of(t, struct stmmac_tx_queue, txtimer);
3101 	struct stmmac_priv *priv = tx_q->priv_data;
3102 	struct stmmac_channel *ch;
3103 	struct napi_struct *napi;
3104 
3105 	ch = &priv->channel[tx_q->queue_index];
3106 	napi = tx_q->xsk_pool ? &ch->rxtx_napi : &ch->tx_napi;
3107 
3108 	if (likely(napi_schedule_prep(napi))) {
3109 		unsigned long flags;
3110 
3111 		spin_lock_irqsave(&ch->lock, flags);
3112 		stmmac_disable_dma_irq(priv, priv->ioaddr, ch->index, 0, 1);
3113 		spin_unlock_irqrestore(&ch->lock, flags);
3114 		__napi_schedule(napi);
3115 	}
3116 
3117 	return HRTIMER_NORESTART;
3118 }
3119 
3120 /**
3121  * stmmac_init_coalesce - init mitigation options.
3122  * @priv: driver private structure
3123  * Description:
3124  * This inits the coalesce parameters: i.e. timer rate,
3125  * timer handler and default threshold used for enabling the
3126  * interrupt on completion bit.
3127  */
3128 static void stmmac_init_coalesce(struct stmmac_priv *priv)
3129 {
3130 	u32 tx_channel_count = priv->plat->tx_queues_to_use;
3131 	u32 rx_channel_count = priv->plat->rx_queues_to_use;
3132 	u32 chan;
3133 
3134 	for (chan = 0; chan < tx_channel_count; chan++) {
3135 		struct stmmac_tx_queue *tx_q = &priv->dma_conf.tx_queue[chan];
3136 
3137 		priv->tx_coal_frames[chan] = STMMAC_TX_FRAMES;
3138 		priv->tx_coal_timer[chan] = STMMAC_COAL_TX_TIMER;
3139 
3140 		hrtimer_init(&tx_q->txtimer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
3141 		tx_q->txtimer.function = stmmac_tx_timer;
3142 	}
3143 
3144 	for (chan = 0; chan < rx_channel_count; chan++)
3145 		priv->rx_coal_frames[chan] = STMMAC_RX_FRAMES;
3146 }
3147 
3148 static void stmmac_set_rings_length(struct stmmac_priv *priv)
3149 {
3150 	u32 rx_channels_count = priv->plat->rx_queues_to_use;
3151 	u32 tx_channels_count = priv->plat->tx_queues_to_use;
3152 	u32 chan;
3153 
3154 	/* set TX ring length */
3155 	for (chan = 0; chan < tx_channels_count; chan++)
3156 		stmmac_set_tx_ring_len(priv, priv->ioaddr,
3157 				       (priv->dma_conf.dma_tx_size - 1), chan);
3158 
3159 	/* set RX ring length */
3160 	for (chan = 0; chan < rx_channels_count; chan++)
3161 		stmmac_set_rx_ring_len(priv, priv->ioaddr,
3162 				       (priv->dma_conf.dma_rx_size - 1), chan);
3163 }
3164 
3165 /**
3166  *  stmmac_set_tx_queue_weight - Set TX queue weight
3167  *  @priv: driver private structure
3168  *  Description: It is used for setting TX queues weight
3169  */
3170 static void stmmac_set_tx_queue_weight(struct stmmac_priv *priv)
3171 {
3172 	u32 tx_queues_count = priv->plat->tx_queues_to_use;
3173 	u32 weight;
3174 	u32 queue;
3175 
3176 	for (queue = 0; queue < tx_queues_count; queue++) {
3177 		weight = priv->plat->tx_queues_cfg[queue].weight;
3178 		stmmac_set_mtl_tx_queue_weight(priv, priv->hw, weight, queue);
3179 	}
3180 }
3181 
3182 /**
3183  *  stmmac_configure_cbs - Configure CBS in TX queue
3184  *  @priv: driver private structure
3185  *  Description: It is used for configuring CBS in AVB TX queues
3186  */
3187 static void stmmac_configure_cbs(struct stmmac_priv *priv)
3188 {
3189 	u32 tx_queues_count = priv->plat->tx_queues_to_use;
3190 	u32 mode_to_use;
3191 	u32 queue;
3192 
3193 	/* queue 0 is reserved for legacy traffic */
3194 	for (queue = 1; queue < tx_queues_count; queue++) {
3195 		mode_to_use = priv->plat->tx_queues_cfg[queue].mode_to_use;
3196 		if (mode_to_use == MTL_QUEUE_DCB)
3197 			continue;
3198 
3199 		stmmac_config_cbs(priv, priv->hw,
3200 				priv->plat->tx_queues_cfg[queue].send_slope,
3201 				priv->plat->tx_queues_cfg[queue].idle_slope,
3202 				priv->plat->tx_queues_cfg[queue].high_credit,
3203 				priv->plat->tx_queues_cfg[queue].low_credit,
3204 				queue);
3205 	}
3206 }
3207 
3208 /**
3209  *  stmmac_rx_queue_dma_chan_map - Map RX queue to RX dma channel
3210  *  @priv: driver private structure
3211  *  Description: It is used for mapping RX queues to RX dma channels
3212  */
3213 static void stmmac_rx_queue_dma_chan_map(struct stmmac_priv *priv)
3214 {
3215 	u32 rx_queues_count = priv->plat->rx_queues_to_use;
3216 	u32 queue;
3217 	u32 chan;
3218 
3219 	for (queue = 0; queue < rx_queues_count; queue++) {
3220 		chan = priv->plat->rx_queues_cfg[queue].chan;
3221 		stmmac_map_mtl_to_dma(priv, priv->hw, queue, chan);
3222 	}
3223 }
3224 
3225 /**
3226  *  stmmac_mac_config_rx_queues_prio - Configure RX Queue priority
3227  *  @priv: driver private structure
3228  *  Description: It is used for configuring the RX Queue Priority
3229  */
3230 static void stmmac_mac_config_rx_queues_prio(struct stmmac_priv *priv)
3231 {
3232 	u32 rx_queues_count = priv->plat->rx_queues_to_use;
3233 	u32 queue;
3234 	u32 prio;
3235 
3236 	for (queue = 0; queue < rx_queues_count; queue++) {
3237 		if (!priv->plat->rx_queues_cfg[queue].use_prio)
3238 			continue;
3239 
3240 		prio = priv->plat->rx_queues_cfg[queue].prio;
3241 		stmmac_rx_queue_prio(priv, priv->hw, prio, queue);
3242 	}
3243 }
3244 
3245 /**
3246  *  stmmac_mac_config_tx_queues_prio - Configure TX Queue priority
3247  *  @priv: driver private structure
3248  *  Description: It is used for configuring the TX Queue Priority
3249  */
3250 static void stmmac_mac_config_tx_queues_prio(struct stmmac_priv *priv)
3251 {
3252 	u32 tx_queues_count = priv->plat->tx_queues_to_use;
3253 	u32 queue;
3254 	u32 prio;
3255 
3256 	for (queue = 0; queue < tx_queues_count; queue++) {
3257 		if (!priv->plat->tx_queues_cfg[queue].use_prio)
3258 			continue;
3259 
3260 		prio = priv->plat->tx_queues_cfg[queue].prio;
3261 		stmmac_tx_queue_prio(priv, priv->hw, prio, queue);
3262 	}
3263 }
3264 
3265 /**
3266  *  stmmac_mac_config_rx_queues_routing - Configure RX Queue Routing
3267  *  @priv: driver private structure
3268  *  Description: It is used for configuring the RX queue routing
3269  */
3270 static void stmmac_mac_config_rx_queues_routing(struct stmmac_priv *priv)
3271 {
3272 	u32 rx_queues_count = priv->plat->rx_queues_to_use;
3273 	u32 queue;
3274 	u8 packet;
3275 
3276 	for (queue = 0; queue < rx_queues_count; queue++) {
3277 		/* no specific packet type routing specified for the queue */
3278 		if (priv->plat->rx_queues_cfg[queue].pkt_route == 0x0)
3279 			continue;
3280 
3281 		packet = priv->plat->rx_queues_cfg[queue].pkt_route;
3282 		stmmac_rx_queue_routing(priv, priv->hw, packet, queue);
3283 	}
3284 }
3285 
3286 static void stmmac_mac_config_rss(struct stmmac_priv *priv)
3287 {
3288 	if (!priv->dma_cap.rssen || !priv->plat->rss_en) {
3289 		priv->rss.enable = false;
3290 		return;
3291 	}
3292 
3293 	if (priv->dev->features & NETIF_F_RXHASH)
3294 		priv->rss.enable = true;
3295 	else
3296 		priv->rss.enable = false;
3297 
3298 	stmmac_rss_configure(priv, priv->hw, &priv->rss,
3299 			     priv->plat->rx_queues_to_use);
3300 }
3301 
3302 /**
3303  *  stmmac_mtl_configuration - Configure MTL
3304  *  @priv: driver private structure
3305  *  Description: It is used for configurring MTL
3306  */
3307 static void stmmac_mtl_configuration(struct stmmac_priv *priv)
3308 {
3309 	u32 rx_queues_count = priv->plat->rx_queues_to_use;
3310 	u32 tx_queues_count = priv->plat->tx_queues_to_use;
3311 
3312 	if (tx_queues_count > 1)
3313 		stmmac_set_tx_queue_weight(priv);
3314 
3315 	/* Configure MTL RX algorithms */
3316 	if (rx_queues_count > 1)
3317 		stmmac_prog_mtl_rx_algorithms(priv, priv->hw,
3318 				priv->plat->rx_sched_algorithm);
3319 
3320 	/* Configure MTL TX algorithms */
3321 	if (tx_queues_count > 1)
3322 		stmmac_prog_mtl_tx_algorithms(priv, priv->hw,
3323 				priv->plat->tx_sched_algorithm);
3324 
3325 	/* Configure CBS in AVB TX queues */
3326 	if (tx_queues_count > 1)
3327 		stmmac_configure_cbs(priv);
3328 
3329 	/* Map RX MTL to DMA channels */
3330 	stmmac_rx_queue_dma_chan_map(priv);
3331 
3332 	/* Enable MAC RX Queues */
3333 	stmmac_mac_enable_rx_queues(priv);
3334 
3335 	/* Set RX priorities */
3336 	if (rx_queues_count > 1)
3337 		stmmac_mac_config_rx_queues_prio(priv);
3338 
3339 	/* Set TX priorities */
3340 	if (tx_queues_count > 1)
3341 		stmmac_mac_config_tx_queues_prio(priv);
3342 
3343 	/* Set RX routing */
3344 	if (rx_queues_count > 1)
3345 		stmmac_mac_config_rx_queues_routing(priv);
3346 
3347 	/* Receive Side Scaling */
3348 	if (rx_queues_count > 1)
3349 		stmmac_mac_config_rss(priv);
3350 }
3351 
3352 static void stmmac_safety_feat_configuration(struct stmmac_priv *priv)
3353 {
3354 	if (priv->dma_cap.asp) {
3355 		netdev_info(priv->dev, "Enabling Safety Features\n");
3356 		stmmac_safety_feat_config(priv, priv->ioaddr, priv->dma_cap.asp,
3357 					  priv->plat->safety_feat_cfg);
3358 	} else {
3359 		netdev_info(priv->dev, "No Safety Features support found\n");
3360 	}
3361 }
3362 
3363 static int stmmac_fpe_start_wq(struct stmmac_priv *priv)
3364 {
3365 	char *name;
3366 
3367 	clear_bit(__FPE_TASK_SCHED, &priv->fpe_task_state);
3368 	clear_bit(__FPE_REMOVING,  &priv->fpe_task_state);
3369 
3370 	name = priv->wq_name;
3371 	sprintf(name, "%s-fpe", priv->dev->name);
3372 
3373 	priv->fpe_wq = create_singlethread_workqueue(name);
3374 	if (!priv->fpe_wq) {
3375 		netdev_err(priv->dev, "%s: Failed to create workqueue\n", name);
3376 
3377 		return -ENOMEM;
3378 	}
3379 	netdev_info(priv->dev, "FPE workqueue start");
3380 
3381 	return 0;
3382 }
3383 
3384 /**
3385  * stmmac_hw_setup - setup mac in a usable state.
3386  *  @dev : pointer to the device structure.
3387  *  @ptp_register: register PTP if set
3388  *  Description:
3389  *  this is the main function to setup the HW in a usable state because the
3390  *  dma engine is reset, the core registers are configured (e.g. AXI,
3391  *  Checksum features, timers). The DMA is ready to start receiving and
3392  *  transmitting.
3393  *  Return value:
3394  *  0 on success and an appropriate (-)ve integer as defined in errno.h
3395  *  file on failure.
3396  */
3397 static int stmmac_hw_setup(struct net_device *dev, bool ptp_register)
3398 {
3399 	struct stmmac_priv *priv = netdev_priv(dev);
3400 	u32 rx_cnt = priv->plat->rx_queues_to_use;
3401 	u32 tx_cnt = priv->plat->tx_queues_to_use;
3402 	bool sph_en;
3403 	u32 chan;
3404 	int ret;
3405 
3406 	/* Make sure RX clock is enabled */
3407 	if (priv->hw->phylink_pcs)
3408 		phylink_pcs_pre_init(priv->phylink, priv->hw->phylink_pcs);
3409 
3410 	/* DMA initialization and SW reset */
3411 	ret = stmmac_init_dma_engine(priv);
3412 	if (ret < 0) {
3413 		netdev_err(priv->dev, "%s: DMA engine initialization failed\n",
3414 			   __func__);
3415 		return ret;
3416 	}
3417 
3418 	/* Copy the MAC addr into the HW  */
3419 	stmmac_set_umac_addr(priv, priv->hw, dev->dev_addr, 0);
3420 
3421 	/* PS and related bits will be programmed according to the speed */
3422 	if (priv->hw->pcs) {
3423 		int speed = priv->plat->mac_port_sel_speed;
3424 
3425 		if ((speed == SPEED_10) || (speed == SPEED_100) ||
3426 		    (speed == SPEED_1000)) {
3427 			priv->hw->ps = speed;
3428 		} else {
3429 			dev_warn(priv->device, "invalid port speed\n");
3430 			priv->hw->ps = 0;
3431 		}
3432 	}
3433 
3434 	/* Initialize the MAC Core */
3435 	stmmac_core_init(priv, priv->hw, dev);
3436 
3437 	/* Initialize MTL*/
3438 	stmmac_mtl_configuration(priv);
3439 
3440 	/* Initialize Safety Features */
3441 	stmmac_safety_feat_configuration(priv);
3442 
3443 	ret = stmmac_rx_ipc(priv, priv->hw);
3444 	if (!ret) {
3445 		netdev_warn(priv->dev, "RX IPC Checksum Offload disabled\n");
3446 		priv->plat->rx_coe = STMMAC_RX_COE_NONE;
3447 		priv->hw->rx_csum = 0;
3448 	}
3449 
3450 	/* Enable the MAC Rx/Tx */
3451 	stmmac_mac_set(priv, priv->ioaddr, true);
3452 
3453 	/* Set the HW DMA mode and the COE */
3454 	stmmac_dma_operation_mode(priv);
3455 
3456 	stmmac_mmc_setup(priv);
3457 
3458 	if (ptp_register) {
3459 		ret = clk_prepare_enable(priv->plat->clk_ptp_ref);
3460 		if (ret < 0)
3461 			netdev_warn(priv->dev,
3462 				    "failed to enable PTP reference clock: %pe\n",
3463 				    ERR_PTR(ret));
3464 	}
3465 
3466 	ret = stmmac_init_ptp(priv);
3467 	if (ret == -EOPNOTSUPP)
3468 		netdev_info(priv->dev, "PTP not supported by HW\n");
3469 	else if (ret)
3470 		netdev_warn(priv->dev, "PTP init failed\n");
3471 	else if (ptp_register)
3472 		stmmac_ptp_register(priv);
3473 
3474 	priv->eee_tw_timer = STMMAC_DEFAULT_TWT_LS;
3475 
3476 	/* Convert the timer from msec to usec */
3477 	if (!priv->tx_lpi_timer)
3478 		priv->tx_lpi_timer = eee_timer * 1000;
3479 
3480 	if (priv->use_riwt) {
3481 		u32 queue;
3482 
3483 		for (queue = 0; queue < rx_cnt; queue++) {
3484 			if (!priv->rx_riwt[queue])
3485 				priv->rx_riwt[queue] = DEF_DMA_RIWT;
3486 
3487 			stmmac_rx_watchdog(priv, priv->ioaddr,
3488 					   priv->rx_riwt[queue], queue);
3489 		}
3490 	}
3491 
3492 	if (priv->hw->pcs)
3493 		stmmac_pcs_ctrl_ane(priv, priv->ioaddr, 1, priv->hw->ps, 0);
3494 
3495 	/* set TX and RX rings length */
3496 	stmmac_set_rings_length(priv);
3497 
3498 	/* Enable TSO */
3499 	if (priv->tso) {
3500 		for (chan = 0; chan < tx_cnt; chan++) {
3501 			struct stmmac_tx_queue *tx_q = &priv->dma_conf.tx_queue[chan];
3502 
3503 			/* TSO and TBS cannot co-exist */
3504 			if (tx_q->tbs & STMMAC_TBS_AVAIL)
3505 				continue;
3506 
3507 			stmmac_enable_tso(priv, priv->ioaddr, 1, chan);
3508 		}
3509 	}
3510 
3511 	/* Enable Split Header */
3512 	sph_en = (priv->hw->rx_csum > 0) && priv->sph;
3513 	for (chan = 0; chan < rx_cnt; chan++)
3514 		stmmac_enable_sph(priv, priv->ioaddr, sph_en, chan);
3515 
3516 
3517 	/* VLAN Tag Insertion */
3518 	if (priv->dma_cap.vlins)
3519 		stmmac_enable_vlan(priv, priv->hw, STMMAC_VLAN_INSERT);
3520 
3521 	/* TBS */
3522 	for (chan = 0; chan < tx_cnt; chan++) {
3523 		struct stmmac_tx_queue *tx_q = &priv->dma_conf.tx_queue[chan];
3524 		int enable = tx_q->tbs & STMMAC_TBS_AVAIL;
3525 
3526 		stmmac_enable_tbs(priv, priv->ioaddr, enable, chan);
3527 	}
3528 
3529 	/* Configure real RX and TX queues */
3530 	netif_set_real_num_rx_queues(dev, priv->plat->rx_queues_to_use);
3531 	netif_set_real_num_tx_queues(dev, priv->plat->tx_queues_to_use);
3532 
3533 	/* Start the ball rolling... */
3534 	stmmac_start_all_dma(priv);
3535 
3536 	stmmac_set_hw_vlan_mode(priv, priv->hw);
3537 
3538 	if (priv->dma_cap.fpesel) {
3539 		stmmac_fpe_start_wq(priv);
3540 
3541 		if (priv->plat->fpe_cfg->enable)
3542 			stmmac_fpe_handshake(priv, true);
3543 	}
3544 
3545 	return 0;
3546 }
3547 
3548 static void stmmac_hw_teardown(struct net_device *dev)
3549 {
3550 	struct stmmac_priv *priv = netdev_priv(dev);
3551 
3552 	clk_disable_unprepare(priv->plat->clk_ptp_ref);
3553 }
3554 
3555 static void stmmac_free_irq(struct net_device *dev,
3556 			    enum request_irq_err irq_err, int irq_idx)
3557 {
3558 	struct stmmac_priv *priv = netdev_priv(dev);
3559 	int j;
3560 
3561 	switch (irq_err) {
3562 	case REQ_IRQ_ERR_ALL:
3563 		irq_idx = priv->plat->tx_queues_to_use;
3564 		fallthrough;
3565 	case REQ_IRQ_ERR_TX:
3566 		for (j = irq_idx - 1; j >= 0; j--) {
3567 			if (priv->tx_irq[j] > 0) {
3568 				irq_set_affinity_hint(priv->tx_irq[j], NULL);
3569 				free_irq(priv->tx_irq[j], &priv->dma_conf.tx_queue[j]);
3570 			}
3571 		}
3572 		irq_idx = priv->plat->rx_queues_to_use;
3573 		fallthrough;
3574 	case REQ_IRQ_ERR_RX:
3575 		for (j = irq_idx - 1; j >= 0; j--) {
3576 			if (priv->rx_irq[j] > 0) {
3577 				irq_set_affinity_hint(priv->rx_irq[j], NULL);
3578 				free_irq(priv->rx_irq[j], &priv->dma_conf.rx_queue[j]);
3579 			}
3580 		}
3581 
3582 		if (priv->sfty_ue_irq > 0 && priv->sfty_ue_irq != dev->irq)
3583 			free_irq(priv->sfty_ue_irq, dev);
3584 		fallthrough;
3585 	case REQ_IRQ_ERR_SFTY_UE:
3586 		if (priv->sfty_ce_irq > 0 && priv->sfty_ce_irq != dev->irq)
3587 			free_irq(priv->sfty_ce_irq, dev);
3588 		fallthrough;
3589 	case REQ_IRQ_ERR_SFTY_CE:
3590 		if (priv->lpi_irq > 0 && priv->lpi_irq != dev->irq)
3591 			free_irq(priv->lpi_irq, dev);
3592 		fallthrough;
3593 	case REQ_IRQ_ERR_LPI:
3594 		if (priv->wol_irq > 0 && priv->wol_irq != dev->irq)
3595 			free_irq(priv->wol_irq, dev);
3596 		fallthrough;
3597 	case REQ_IRQ_ERR_SFTY:
3598 		if (priv->sfty_irq > 0 && priv->sfty_irq != dev->irq)
3599 			free_irq(priv->sfty_irq, dev);
3600 		fallthrough;
3601 	case REQ_IRQ_ERR_WOL:
3602 		free_irq(dev->irq, dev);
3603 		fallthrough;
3604 	case REQ_IRQ_ERR_MAC:
3605 	case REQ_IRQ_ERR_NO:
3606 		/* If MAC IRQ request error, no more IRQ to free */
3607 		break;
3608 	}
3609 }
3610 
3611 static int stmmac_request_irq_multi_msi(struct net_device *dev)
3612 {
3613 	struct stmmac_priv *priv = netdev_priv(dev);
3614 	enum request_irq_err irq_err;
3615 	cpumask_t cpu_mask;
3616 	int irq_idx = 0;
3617 	char *int_name;
3618 	int ret;
3619 	int i;
3620 
3621 	/* For common interrupt */
3622 	int_name = priv->int_name_mac;
3623 	sprintf(int_name, "%s:%s", dev->name, "mac");
3624 	ret = request_irq(dev->irq, stmmac_mac_interrupt,
3625 			  0, int_name, dev);
3626 	if (unlikely(ret < 0)) {
3627 		netdev_err(priv->dev,
3628 			   "%s: alloc mac MSI %d (error: %d)\n",
3629 			   __func__, dev->irq, ret);
3630 		irq_err = REQ_IRQ_ERR_MAC;
3631 		goto irq_error;
3632 	}
3633 
3634 	/* Request the Wake IRQ in case of another line
3635 	 * is used for WoL
3636 	 */
3637 	priv->wol_irq_disabled = true;
3638 	if (priv->wol_irq > 0 && priv->wol_irq != dev->irq) {
3639 		int_name = priv->int_name_wol;
3640 		sprintf(int_name, "%s:%s", dev->name, "wol");
3641 		ret = request_irq(priv->wol_irq,
3642 				  stmmac_mac_interrupt,
3643 				  0, int_name, dev);
3644 		if (unlikely(ret < 0)) {
3645 			netdev_err(priv->dev,
3646 				   "%s: alloc wol MSI %d (error: %d)\n",
3647 				   __func__, priv->wol_irq, ret);
3648 			irq_err = REQ_IRQ_ERR_WOL;
3649 			goto irq_error;
3650 		}
3651 	}
3652 
3653 	/* Request the LPI IRQ in case of another line
3654 	 * is used for LPI
3655 	 */
3656 	if (priv->lpi_irq > 0 && priv->lpi_irq != dev->irq) {
3657 		int_name = priv->int_name_lpi;
3658 		sprintf(int_name, "%s:%s", dev->name, "lpi");
3659 		ret = request_irq(priv->lpi_irq,
3660 				  stmmac_mac_interrupt,
3661 				  0, int_name, dev);
3662 		if (unlikely(ret < 0)) {
3663 			netdev_err(priv->dev,
3664 				   "%s: alloc lpi MSI %d (error: %d)\n",
3665 				   __func__, priv->lpi_irq, ret);
3666 			irq_err = REQ_IRQ_ERR_LPI;
3667 			goto irq_error;
3668 		}
3669 	}
3670 
3671 	/* Request the common Safety Feature Correctible/Uncorrectible
3672 	 * Error line in case of another line is used
3673 	 */
3674 	if (priv->sfty_irq > 0 && priv->sfty_irq != dev->irq) {
3675 		int_name = priv->int_name_sfty;
3676 		sprintf(int_name, "%s:%s", dev->name, "safety");
3677 		ret = request_irq(priv->sfty_irq, stmmac_safety_interrupt,
3678 				  0, int_name, dev);
3679 		if (unlikely(ret < 0)) {
3680 			netdev_err(priv->dev,
3681 				   "%s: alloc sfty MSI %d (error: %d)\n",
3682 				   __func__, priv->sfty_irq, ret);
3683 			irq_err = REQ_IRQ_ERR_SFTY;
3684 			goto irq_error;
3685 		}
3686 	}
3687 
3688 	/* Request the Safety Feature Correctible Error line in
3689 	 * case of another line is used
3690 	 */
3691 	if (priv->sfty_ce_irq > 0 && priv->sfty_ce_irq != dev->irq) {
3692 		int_name = priv->int_name_sfty_ce;
3693 		sprintf(int_name, "%s:%s", dev->name, "safety-ce");
3694 		ret = request_irq(priv->sfty_ce_irq,
3695 				  stmmac_safety_interrupt,
3696 				  0, int_name, dev);
3697 		if (unlikely(ret < 0)) {
3698 			netdev_err(priv->dev,
3699 				   "%s: alloc sfty ce MSI %d (error: %d)\n",
3700 				   __func__, priv->sfty_ce_irq, ret);
3701 			irq_err = REQ_IRQ_ERR_SFTY_CE;
3702 			goto irq_error;
3703 		}
3704 	}
3705 
3706 	/* Request the Safety Feature Uncorrectible Error line in
3707 	 * case of another line is used
3708 	 */
3709 	if (priv->sfty_ue_irq > 0 && priv->sfty_ue_irq != dev->irq) {
3710 		int_name = priv->int_name_sfty_ue;
3711 		sprintf(int_name, "%s:%s", dev->name, "safety-ue");
3712 		ret = request_irq(priv->sfty_ue_irq,
3713 				  stmmac_safety_interrupt,
3714 				  0, int_name, dev);
3715 		if (unlikely(ret < 0)) {
3716 			netdev_err(priv->dev,
3717 				   "%s: alloc sfty ue MSI %d (error: %d)\n",
3718 				   __func__, priv->sfty_ue_irq, ret);
3719 			irq_err = REQ_IRQ_ERR_SFTY_UE;
3720 			goto irq_error;
3721 		}
3722 	}
3723 
3724 	/* Request Rx MSI irq */
3725 	for (i = 0; i < priv->plat->rx_queues_to_use; i++) {
3726 		if (i >= MTL_MAX_RX_QUEUES)
3727 			break;
3728 		if (priv->rx_irq[i] == 0)
3729 			continue;
3730 
3731 		int_name = priv->int_name_rx_irq[i];
3732 		sprintf(int_name, "%s:%s-%d", dev->name, "rx", i);
3733 		ret = request_irq(priv->rx_irq[i],
3734 				  stmmac_msi_intr_rx,
3735 				  0, int_name, &priv->dma_conf.rx_queue[i]);
3736 		if (unlikely(ret < 0)) {
3737 			netdev_err(priv->dev,
3738 				   "%s: alloc rx-%d  MSI %d (error: %d)\n",
3739 				   __func__, i, priv->rx_irq[i], ret);
3740 			irq_err = REQ_IRQ_ERR_RX;
3741 			irq_idx = i;
3742 			goto irq_error;
3743 		}
3744 		cpumask_clear(&cpu_mask);
3745 		cpumask_set_cpu(i % num_online_cpus(), &cpu_mask);
3746 		irq_set_affinity_hint(priv->rx_irq[i], &cpu_mask);
3747 	}
3748 
3749 	/* Request Tx MSI irq */
3750 	for (i = 0; i < priv->plat->tx_queues_to_use; i++) {
3751 		if (i >= MTL_MAX_TX_QUEUES)
3752 			break;
3753 		if (priv->tx_irq[i] == 0)
3754 			continue;
3755 
3756 		int_name = priv->int_name_tx_irq[i];
3757 		sprintf(int_name, "%s:%s-%d", dev->name, "tx", i);
3758 		ret = request_irq(priv->tx_irq[i],
3759 				  stmmac_msi_intr_tx,
3760 				  0, int_name, &priv->dma_conf.tx_queue[i]);
3761 		if (unlikely(ret < 0)) {
3762 			netdev_err(priv->dev,
3763 				   "%s: alloc tx-%d  MSI %d (error: %d)\n",
3764 				   __func__, i, priv->tx_irq[i], ret);
3765 			irq_err = REQ_IRQ_ERR_TX;
3766 			irq_idx = i;
3767 			goto irq_error;
3768 		}
3769 		cpumask_clear(&cpu_mask);
3770 		cpumask_set_cpu(i % num_online_cpus(), &cpu_mask);
3771 		irq_set_affinity_hint(priv->tx_irq[i], &cpu_mask);
3772 	}
3773 
3774 	return 0;
3775 
3776 irq_error:
3777 	stmmac_free_irq(dev, irq_err, irq_idx);
3778 	return ret;
3779 }
3780 
3781 static int stmmac_request_irq_single(struct net_device *dev)
3782 {
3783 	struct stmmac_priv *priv = netdev_priv(dev);
3784 	enum request_irq_err irq_err;
3785 	int ret;
3786 
3787 	ret = request_irq(dev->irq, stmmac_interrupt,
3788 			  IRQF_SHARED, dev->name, dev);
3789 	if (unlikely(ret < 0)) {
3790 		netdev_err(priv->dev,
3791 			   "%s: ERROR: allocating the IRQ %d (error: %d)\n",
3792 			   __func__, dev->irq, ret);
3793 		irq_err = REQ_IRQ_ERR_MAC;
3794 		goto irq_error;
3795 	}
3796 
3797 	/* Request the Wake IRQ in case of another line
3798 	 * is used for WoL
3799 	 */
3800 	if (priv->wol_irq > 0 && priv->wol_irq != dev->irq) {
3801 		ret = request_irq(priv->wol_irq, stmmac_interrupt,
3802 				  IRQF_SHARED, dev->name, dev);
3803 		if (unlikely(ret < 0)) {
3804 			netdev_err(priv->dev,
3805 				   "%s: ERROR: allocating the WoL IRQ %d (%d)\n",
3806 				   __func__, priv->wol_irq, ret);
3807 			irq_err = REQ_IRQ_ERR_WOL;
3808 			goto irq_error;
3809 		}
3810 	}
3811 
3812 	/* Request the IRQ lines */
3813 	if (priv->lpi_irq > 0 && priv->lpi_irq != dev->irq) {
3814 		ret = request_irq(priv->lpi_irq, stmmac_interrupt,
3815 				  IRQF_SHARED, dev->name, dev);
3816 		if (unlikely(ret < 0)) {
3817 			netdev_err(priv->dev,
3818 				   "%s: ERROR: allocating the LPI IRQ %d (%d)\n",
3819 				   __func__, priv->lpi_irq, ret);
3820 			irq_err = REQ_IRQ_ERR_LPI;
3821 			goto irq_error;
3822 		}
3823 	}
3824 
3825 	/* Request the common Safety Feature Correctible/Uncorrectible
3826 	 * Error line in case of another line is used
3827 	 */
3828 	if (priv->sfty_irq > 0 && priv->sfty_irq != dev->irq) {
3829 		ret = request_irq(priv->sfty_irq, stmmac_safety_interrupt,
3830 				  IRQF_SHARED, dev->name, dev);
3831 		if (unlikely(ret < 0)) {
3832 			netdev_err(priv->dev,
3833 				   "%s: ERROR: allocating the sfty IRQ %d (%d)\n",
3834 				   __func__, priv->sfty_irq, ret);
3835 			irq_err = REQ_IRQ_ERR_SFTY;
3836 			goto irq_error;
3837 		}
3838 	}
3839 
3840 	return 0;
3841 
3842 irq_error:
3843 	stmmac_free_irq(dev, irq_err, 0);
3844 	return ret;
3845 }
3846 
3847 static int stmmac_request_irq(struct net_device *dev)
3848 {
3849 	struct stmmac_priv *priv = netdev_priv(dev);
3850 	int ret;
3851 
3852 	/* Request the IRQ lines */
3853 	if (priv->plat->flags & STMMAC_FLAG_MULTI_MSI_EN)
3854 		ret = stmmac_request_irq_multi_msi(dev);
3855 	else
3856 		ret = stmmac_request_irq_single(dev);
3857 
3858 	return ret;
3859 }
3860 
3861 /**
3862  *  stmmac_setup_dma_desc - Generate a dma_conf and allocate DMA queue
3863  *  @priv: driver private structure
3864  *  @mtu: MTU to setup the dma queue and buf with
3865  *  Description: Allocate and generate a dma_conf based on the provided MTU.
3866  *  Allocate the Tx/Rx DMA queue and init them.
3867  *  Return value:
3868  *  the dma_conf allocated struct on success and an appropriate ERR_PTR on failure.
3869  */
3870 static struct stmmac_dma_conf *
3871 stmmac_setup_dma_desc(struct stmmac_priv *priv, unsigned int mtu)
3872 {
3873 	struct stmmac_dma_conf *dma_conf;
3874 	int chan, bfsize, ret;
3875 
3876 	dma_conf = kzalloc(sizeof(*dma_conf), GFP_KERNEL);
3877 	if (!dma_conf) {
3878 		netdev_err(priv->dev, "%s: DMA conf allocation failed\n",
3879 			   __func__);
3880 		return ERR_PTR(-ENOMEM);
3881 	}
3882 
3883 	bfsize = stmmac_set_16kib_bfsize(priv, mtu);
3884 	if (bfsize < 0)
3885 		bfsize = 0;
3886 
3887 	if (bfsize < BUF_SIZE_16KiB)
3888 		bfsize = stmmac_set_bfsize(mtu, 0);
3889 
3890 	dma_conf->dma_buf_sz = bfsize;
3891 	/* Chose the tx/rx size from the already defined one in the
3892 	 * priv struct. (if defined)
3893 	 */
3894 	dma_conf->dma_tx_size = priv->dma_conf.dma_tx_size;
3895 	dma_conf->dma_rx_size = priv->dma_conf.dma_rx_size;
3896 
3897 	if (!dma_conf->dma_tx_size)
3898 		dma_conf->dma_tx_size = DMA_DEFAULT_TX_SIZE;
3899 	if (!dma_conf->dma_rx_size)
3900 		dma_conf->dma_rx_size = DMA_DEFAULT_RX_SIZE;
3901 
3902 	/* Earlier check for TBS */
3903 	for (chan = 0; chan < priv->plat->tx_queues_to_use; chan++) {
3904 		struct stmmac_tx_queue *tx_q = &dma_conf->tx_queue[chan];
3905 		int tbs_en = priv->plat->tx_queues_cfg[chan].tbs_en;
3906 
3907 		/* Setup per-TXQ tbs flag before TX descriptor alloc */
3908 		tx_q->tbs |= tbs_en ? STMMAC_TBS_AVAIL : 0;
3909 	}
3910 
3911 	ret = alloc_dma_desc_resources(priv, dma_conf);
3912 	if (ret < 0) {
3913 		netdev_err(priv->dev, "%s: DMA descriptors allocation failed\n",
3914 			   __func__);
3915 		goto alloc_error;
3916 	}
3917 
3918 	ret = init_dma_desc_rings(priv->dev, dma_conf, GFP_KERNEL);
3919 	if (ret < 0) {
3920 		netdev_err(priv->dev, "%s: DMA descriptors initialization failed\n",
3921 			   __func__);
3922 		goto init_error;
3923 	}
3924 
3925 	return dma_conf;
3926 
3927 init_error:
3928 	free_dma_desc_resources(priv, dma_conf);
3929 alloc_error:
3930 	kfree(dma_conf);
3931 	return ERR_PTR(ret);
3932 }
3933 
3934 /**
3935  *  __stmmac_open - open entry point of the driver
3936  *  @dev : pointer to the device structure.
3937  *  @dma_conf :  structure to take the dma data
3938  *  Description:
3939  *  This function is the open entry point of the driver.
3940  *  Return value:
3941  *  0 on success and an appropriate (-)ve integer as defined in errno.h
3942  *  file on failure.
3943  */
3944 static int __stmmac_open(struct net_device *dev,
3945 			 struct stmmac_dma_conf *dma_conf)
3946 {
3947 	struct stmmac_priv *priv = netdev_priv(dev);
3948 	int mode = priv->plat->phy_interface;
3949 	u32 chan;
3950 	int ret;
3951 
3952 	ret = pm_runtime_resume_and_get(priv->device);
3953 	if (ret < 0)
3954 		return ret;
3955 
3956 	if (priv->hw->pcs != STMMAC_PCS_TBI &&
3957 	    priv->hw->pcs != STMMAC_PCS_RTBI &&
3958 	    (!priv->hw->xpcs ||
3959 	     xpcs_get_an_mode(priv->hw->xpcs, mode) != DW_AN_C73)) {
3960 		ret = stmmac_init_phy(dev);
3961 		if (ret) {
3962 			netdev_err(priv->dev,
3963 				   "%s: Cannot attach to PHY (error: %d)\n",
3964 				   __func__, ret);
3965 			goto init_phy_error;
3966 		}
3967 	}
3968 
3969 	priv->rx_copybreak = STMMAC_RX_COPYBREAK;
3970 
3971 	buf_sz = dma_conf->dma_buf_sz;
3972 	for (int i = 0; i < MTL_MAX_TX_QUEUES; i++)
3973 		if (priv->dma_conf.tx_queue[i].tbs & STMMAC_TBS_EN)
3974 			dma_conf->tx_queue[i].tbs = priv->dma_conf.tx_queue[i].tbs;
3975 	memcpy(&priv->dma_conf, dma_conf, sizeof(*dma_conf));
3976 
3977 	stmmac_reset_queues_param(priv);
3978 
3979 	if (!(priv->plat->flags & STMMAC_FLAG_SERDES_UP_AFTER_PHY_LINKUP) &&
3980 	    priv->plat->serdes_powerup) {
3981 		ret = priv->plat->serdes_powerup(dev, priv->plat->bsp_priv);
3982 		if (ret < 0) {
3983 			netdev_err(priv->dev, "%s: Serdes powerup failed\n",
3984 				   __func__);
3985 			goto init_error;
3986 		}
3987 	}
3988 
3989 	ret = stmmac_hw_setup(dev, true);
3990 	if (ret < 0) {
3991 		netdev_err(priv->dev, "%s: Hw setup failed\n", __func__);
3992 		goto init_error;
3993 	}
3994 
3995 	stmmac_init_coalesce(priv);
3996 
3997 	phylink_start(priv->phylink);
3998 	/* We may have called phylink_speed_down before */
3999 	phylink_speed_up(priv->phylink);
4000 
4001 	ret = stmmac_request_irq(dev);
4002 	if (ret)
4003 		goto irq_error;
4004 
4005 	stmmac_enable_all_queues(priv);
4006 	netif_tx_start_all_queues(priv->dev);
4007 	stmmac_enable_all_dma_irq(priv);
4008 
4009 	return 0;
4010 
4011 irq_error:
4012 	phylink_stop(priv->phylink);
4013 
4014 	for (chan = 0; chan < priv->plat->tx_queues_to_use; chan++)
4015 		hrtimer_cancel(&priv->dma_conf.tx_queue[chan].txtimer);
4016 
4017 	stmmac_hw_teardown(dev);
4018 init_error:
4019 	phylink_disconnect_phy(priv->phylink);
4020 init_phy_error:
4021 	pm_runtime_put(priv->device);
4022 	return ret;
4023 }
4024 
4025 static int stmmac_open(struct net_device *dev)
4026 {
4027 	struct stmmac_priv *priv = netdev_priv(dev);
4028 	struct stmmac_dma_conf *dma_conf;
4029 	int ret;
4030 
4031 	dma_conf = stmmac_setup_dma_desc(priv, dev->mtu);
4032 	if (IS_ERR(dma_conf))
4033 		return PTR_ERR(dma_conf);
4034 
4035 	ret = __stmmac_open(dev, dma_conf);
4036 	if (ret)
4037 		free_dma_desc_resources(priv, dma_conf);
4038 
4039 	kfree(dma_conf);
4040 	return ret;
4041 }
4042 
4043 static void stmmac_fpe_stop_wq(struct stmmac_priv *priv)
4044 {
4045 	set_bit(__FPE_REMOVING, &priv->fpe_task_state);
4046 
4047 	if (priv->fpe_wq) {
4048 		destroy_workqueue(priv->fpe_wq);
4049 		priv->fpe_wq = NULL;
4050 	}
4051 
4052 	netdev_info(priv->dev, "FPE workqueue stop");
4053 }
4054 
4055 /**
4056  *  stmmac_release - close entry point of the driver
4057  *  @dev : device pointer.
4058  *  Description:
4059  *  This is the stop entry point of the driver.
4060  */
4061 static int stmmac_release(struct net_device *dev)
4062 {
4063 	struct stmmac_priv *priv = netdev_priv(dev);
4064 	u32 chan;
4065 
4066 	if (device_may_wakeup(priv->device))
4067 		phylink_speed_down(priv->phylink, false);
4068 	/* Stop and disconnect the PHY */
4069 	phylink_stop(priv->phylink);
4070 	phylink_disconnect_phy(priv->phylink);
4071 
4072 	stmmac_disable_all_queues(priv);
4073 
4074 	for (chan = 0; chan < priv->plat->tx_queues_to_use; chan++)
4075 		hrtimer_cancel(&priv->dma_conf.tx_queue[chan].txtimer);
4076 
4077 	netif_tx_disable(dev);
4078 
4079 	/* Free the IRQ lines */
4080 	stmmac_free_irq(dev, REQ_IRQ_ERR_ALL, 0);
4081 
4082 	if (priv->eee_enabled) {
4083 		priv->tx_path_in_lpi_mode = false;
4084 		del_timer_sync(&priv->eee_ctrl_timer);
4085 	}
4086 
4087 	/* Stop TX/RX DMA and clear the descriptors */
4088 	stmmac_stop_all_dma(priv);
4089 
4090 	/* Release and free the Rx/Tx resources */
4091 	free_dma_desc_resources(priv, &priv->dma_conf);
4092 
4093 	/* Disable the MAC Rx/Tx */
4094 	stmmac_mac_set(priv, priv->ioaddr, false);
4095 
4096 	/* Powerdown Serdes if there is */
4097 	if (priv->plat->serdes_powerdown)
4098 		priv->plat->serdes_powerdown(dev, priv->plat->bsp_priv);
4099 
4100 	netif_carrier_off(dev);
4101 
4102 	stmmac_release_ptp(priv);
4103 
4104 	pm_runtime_put(priv->device);
4105 
4106 	if (priv->dma_cap.fpesel)
4107 		stmmac_fpe_stop_wq(priv);
4108 
4109 	return 0;
4110 }
4111 
4112 static bool stmmac_vlan_insert(struct stmmac_priv *priv, struct sk_buff *skb,
4113 			       struct stmmac_tx_queue *tx_q)
4114 {
4115 	u16 tag = 0x0, inner_tag = 0x0;
4116 	u32 inner_type = 0x0;
4117 	struct dma_desc *p;
4118 
4119 	if (!priv->dma_cap.vlins)
4120 		return false;
4121 	if (!skb_vlan_tag_present(skb))
4122 		return false;
4123 	if (skb->vlan_proto == htons(ETH_P_8021AD)) {
4124 		inner_tag = skb_vlan_tag_get(skb);
4125 		inner_type = STMMAC_VLAN_INSERT;
4126 	}
4127 
4128 	tag = skb_vlan_tag_get(skb);
4129 
4130 	if (tx_q->tbs & STMMAC_TBS_AVAIL)
4131 		p = &tx_q->dma_entx[tx_q->cur_tx].basic;
4132 	else
4133 		p = &tx_q->dma_tx[tx_q->cur_tx];
4134 
4135 	if (stmmac_set_desc_vlan_tag(priv, p, tag, inner_tag, inner_type))
4136 		return false;
4137 
4138 	stmmac_set_tx_owner(priv, p);
4139 	tx_q->cur_tx = STMMAC_GET_ENTRY(tx_q->cur_tx, priv->dma_conf.dma_tx_size);
4140 	return true;
4141 }
4142 
4143 /**
4144  *  stmmac_tso_allocator - close entry point of the driver
4145  *  @priv: driver private structure
4146  *  @des: buffer start address
4147  *  @total_len: total length to fill in descriptors
4148  *  @last_segment: condition for the last descriptor
4149  *  @queue: TX queue index
4150  *  Description:
4151  *  This function fills descriptor and request new descriptors according to
4152  *  buffer length to fill
4153  */
4154 static void stmmac_tso_allocator(struct stmmac_priv *priv, dma_addr_t des,
4155 				 int total_len, bool last_segment, u32 queue)
4156 {
4157 	struct stmmac_tx_queue *tx_q = &priv->dma_conf.tx_queue[queue];
4158 	struct dma_desc *desc;
4159 	u32 buff_size;
4160 	int tmp_len;
4161 
4162 	tmp_len = total_len;
4163 
4164 	while (tmp_len > 0) {
4165 		dma_addr_t curr_addr;
4166 
4167 		tx_q->cur_tx = STMMAC_GET_ENTRY(tx_q->cur_tx,
4168 						priv->dma_conf.dma_tx_size);
4169 		WARN_ON(tx_q->tx_skbuff[tx_q->cur_tx]);
4170 
4171 		if (tx_q->tbs & STMMAC_TBS_AVAIL)
4172 			desc = &tx_q->dma_entx[tx_q->cur_tx].basic;
4173 		else
4174 			desc = &tx_q->dma_tx[tx_q->cur_tx];
4175 
4176 		curr_addr = des + (total_len - tmp_len);
4177 		if (priv->dma_cap.addr64 <= 32)
4178 			desc->des0 = cpu_to_le32(curr_addr);
4179 		else
4180 			stmmac_set_desc_addr(priv, desc, curr_addr);
4181 
4182 		buff_size = tmp_len >= TSO_MAX_BUFF_SIZE ?
4183 			    TSO_MAX_BUFF_SIZE : tmp_len;
4184 
4185 		stmmac_prepare_tso_tx_desc(priv, desc, 0, buff_size,
4186 				0, 1,
4187 				(last_segment) && (tmp_len <= TSO_MAX_BUFF_SIZE),
4188 				0, 0);
4189 
4190 		tmp_len -= TSO_MAX_BUFF_SIZE;
4191 	}
4192 }
4193 
4194 static void stmmac_flush_tx_descriptors(struct stmmac_priv *priv, int queue)
4195 {
4196 	struct stmmac_tx_queue *tx_q = &priv->dma_conf.tx_queue[queue];
4197 	int desc_size;
4198 
4199 	if (likely(priv->extend_desc))
4200 		desc_size = sizeof(struct dma_extended_desc);
4201 	else if (tx_q->tbs & STMMAC_TBS_AVAIL)
4202 		desc_size = sizeof(struct dma_edesc);
4203 	else
4204 		desc_size = sizeof(struct dma_desc);
4205 
4206 	/* The own bit must be the latest setting done when prepare the
4207 	 * descriptor and then barrier is needed to make sure that
4208 	 * all is coherent before granting the DMA engine.
4209 	 */
4210 	wmb();
4211 
4212 	tx_q->tx_tail_addr = tx_q->dma_tx_phy + (tx_q->cur_tx * desc_size);
4213 	stmmac_set_tx_tail_ptr(priv, priv->ioaddr, tx_q->tx_tail_addr, queue);
4214 }
4215 
4216 /**
4217  *  stmmac_tso_xmit - Tx entry point of the driver for oversized frames (TSO)
4218  *  @skb : the socket buffer
4219  *  @dev : device pointer
4220  *  Description: this is the transmit function that is called on TSO frames
4221  *  (support available on GMAC4 and newer chips).
4222  *  Diagram below show the ring programming in case of TSO frames:
4223  *
4224  *  First Descriptor
4225  *   --------
4226  *   | DES0 |---> buffer1 = L2/L3/L4 header
4227  *   | DES1 |---> TCP Payload (can continue on next descr...)
4228  *   | DES2 |---> buffer 1 and 2 len
4229  *   | DES3 |---> must set TSE, TCP hdr len-> [22:19]. TCP payload len [17:0]
4230  *   --------
4231  *	|
4232  *     ...
4233  *	|
4234  *   --------
4235  *   | DES0 | --| Split TCP Payload on Buffers 1 and 2
4236  *   | DES1 | --|
4237  *   | DES2 | --> buffer 1 and 2 len
4238  *   | DES3 |
4239  *   --------
4240  *
4241  * mss is fixed when enable tso, so w/o programming the TDES3 ctx field.
4242  */
4243 static netdev_tx_t stmmac_tso_xmit(struct sk_buff *skb, struct net_device *dev)
4244 {
4245 	struct dma_desc *desc, *first, *mss_desc = NULL;
4246 	struct stmmac_priv *priv = netdev_priv(dev);
4247 	int nfrags = skb_shinfo(skb)->nr_frags;
4248 	u32 queue = skb_get_queue_mapping(skb);
4249 	unsigned int first_entry, tx_packets;
4250 	struct stmmac_txq_stats *txq_stats;
4251 	int tmp_pay_len = 0, first_tx;
4252 	struct stmmac_tx_queue *tx_q;
4253 	bool has_vlan, set_ic;
4254 	u8 proto_hdr_len, hdr;
4255 	u32 pay_len, mss;
4256 	dma_addr_t des;
4257 	int i;
4258 
4259 	tx_q = &priv->dma_conf.tx_queue[queue];
4260 	txq_stats = &priv->xstats.txq_stats[queue];
4261 	first_tx = tx_q->cur_tx;
4262 
4263 	/* Compute header lengths */
4264 	if (skb_shinfo(skb)->gso_type & SKB_GSO_UDP_L4) {
4265 		proto_hdr_len = skb_transport_offset(skb) + sizeof(struct udphdr);
4266 		hdr = sizeof(struct udphdr);
4267 	} else {
4268 		proto_hdr_len = skb_tcp_all_headers(skb);
4269 		hdr = tcp_hdrlen(skb);
4270 	}
4271 
4272 	/* Desc availability based on threshold should be enough safe */
4273 	if (unlikely(stmmac_tx_avail(priv, queue) <
4274 		(((skb->len - proto_hdr_len) / TSO_MAX_BUFF_SIZE + 1)))) {
4275 		if (!netif_tx_queue_stopped(netdev_get_tx_queue(dev, queue))) {
4276 			netif_tx_stop_queue(netdev_get_tx_queue(priv->dev,
4277 								queue));
4278 			/* This is a hard error, log it. */
4279 			netdev_err(priv->dev,
4280 				   "%s: Tx Ring full when queue awake\n",
4281 				   __func__);
4282 		}
4283 		return NETDEV_TX_BUSY;
4284 	}
4285 
4286 	pay_len = skb_headlen(skb) - proto_hdr_len; /* no frags */
4287 
4288 	mss = skb_shinfo(skb)->gso_size;
4289 
4290 	/* set new MSS value if needed */
4291 	if (mss != tx_q->mss) {
4292 		if (tx_q->tbs & STMMAC_TBS_AVAIL)
4293 			mss_desc = &tx_q->dma_entx[tx_q->cur_tx].basic;
4294 		else
4295 			mss_desc = &tx_q->dma_tx[tx_q->cur_tx];
4296 
4297 		stmmac_set_mss(priv, mss_desc, mss);
4298 		tx_q->mss = mss;
4299 		tx_q->cur_tx = STMMAC_GET_ENTRY(tx_q->cur_tx,
4300 						priv->dma_conf.dma_tx_size);
4301 		WARN_ON(tx_q->tx_skbuff[tx_q->cur_tx]);
4302 	}
4303 
4304 	if (netif_msg_tx_queued(priv)) {
4305 		pr_info("%s: hdrlen %d, hdr_len %d, pay_len %d, mss %d\n",
4306 			__func__, hdr, proto_hdr_len, pay_len, mss);
4307 		pr_info("\tskb->len %d, skb->data_len %d\n", skb->len,
4308 			skb->data_len);
4309 	}
4310 
4311 	/* Check if VLAN can be inserted by HW */
4312 	has_vlan = stmmac_vlan_insert(priv, skb, tx_q);
4313 
4314 	first_entry = tx_q->cur_tx;
4315 	WARN_ON(tx_q->tx_skbuff[first_entry]);
4316 
4317 	if (tx_q->tbs & STMMAC_TBS_AVAIL)
4318 		desc = &tx_q->dma_entx[first_entry].basic;
4319 	else
4320 		desc = &tx_q->dma_tx[first_entry];
4321 	first = desc;
4322 
4323 	if (has_vlan)
4324 		stmmac_set_desc_vlan(priv, first, STMMAC_VLAN_INSERT);
4325 
4326 	/* first descriptor: fill Headers on Buf1 */
4327 	des = dma_map_single(priv->device, skb->data, skb_headlen(skb),
4328 			     DMA_TO_DEVICE);
4329 	if (dma_mapping_error(priv->device, des))
4330 		goto dma_map_err;
4331 
4332 	tx_q->tx_skbuff_dma[first_entry].buf = des;
4333 	tx_q->tx_skbuff_dma[first_entry].len = skb_headlen(skb);
4334 	tx_q->tx_skbuff_dma[first_entry].map_as_page = false;
4335 	tx_q->tx_skbuff_dma[first_entry].buf_type = STMMAC_TXBUF_T_SKB;
4336 
4337 	if (priv->dma_cap.addr64 <= 32) {
4338 		first->des0 = cpu_to_le32(des);
4339 
4340 		/* Fill start of payload in buff2 of first descriptor */
4341 		if (pay_len)
4342 			first->des1 = cpu_to_le32(des + proto_hdr_len);
4343 
4344 		/* If needed take extra descriptors to fill the remaining payload */
4345 		tmp_pay_len = pay_len - TSO_MAX_BUFF_SIZE;
4346 	} else {
4347 		stmmac_set_desc_addr(priv, first, des);
4348 		tmp_pay_len = pay_len;
4349 		des += proto_hdr_len;
4350 		pay_len = 0;
4351 	}
4352 
4353 	stmmac_tso_allocator(priv, des, tmp_pay_len, (nfrags == 0), queue);
4354 
4355 	/* Prepare fragments */
4356 	for (i = 0; i < nfrags; i++) {
4357 		const skb_frag_t *frag = &skb_shinfo(skb)->frags[i];
4358 
4359 		des = skb_frag_dma_map(priv->device, frag, 0,
4360 				       skb_frag_size(frag),
4361 				       DMA_TO_DEVICE);
4362 		if (dma_mapping_error(priv->device, des))
4363 			goto dma_map_err;
4364 
4365 		stmmac_tso_allocator(priv, des, skb_frag_size(frag),
4366 				     (i == nfrags - 1), queue);
4367 
4368 		tx_q->tx_skbuff_dma[tx_q->cur_tx].buf = des;
4369 		tx_q->tx_skbuff_dma[tx_q->cur_tx].len = skb_frag_size(frag);
4370 		tx_q->tx_skbuff_dma[tx_q->cur_tx].map_as_page = true;
4371 		tx_q->tx_skbuff_dma[tx_q->cur_tx].buf_type = STMMAC_TXBUF_T_SKB;
4372 	}
4373 
4374 	tx_q->tx_skbuff_dma[tx_q->cur_tx].last_segment = true;
4375 
4376 	/* Only the last descriptor gets to point to the skb. */
4377 	tx_q->tx_skbuff[tx_q->cur_tx] = skb;
4378 	tx_q->tx_skbuff_dma[tx_q->cur_tx].buf_type = STMMAC_TXBUF_T_SKB;
4379 
4380 	/* Manage tx mitigation */
4381 	tx_packets = (tx_q->cur_tx + 1) - first_tx;
4382 	tx_q->tx_count_frames += tx_packets;
4383 
4384 	if ((skb_shinfo(skb)->tx_flags & SKBTX_HW_TSTAMP) && priv->hwts_tx_en)
4385 		set_ic = true;
4386 	else if (!priv->tx_coal_frames[queue])
4387 		set_ic = false;
4388 	else if (tx_packets > priv->tx_coal_frames[queue])
4389 		set_ic = true;
4390 	else if ((tx_q->tx_count_frames %
4391 		  priv->tx_coal_frames[queue]) < tx_packets)
4392 		set_ic = true;
4393 	else
4394 		set_ic = false;
4395 
4396 	if (set_ic) {
4397 		if (tx_q->tbs & STMMAC_TBS_AVAIL)
4398 			desc = &tx_q->dma_entx[tx_q->cur_tx].basic;
4399 		else
4400 			desc = &tx_q->dma_tx[tx_q->cur_tx];
4401 
4402 		tx_q->tx_count_frames = 0;
4403 		stmmac_set_tx_ic(priv, desc);
4404 	}
4405 
4406 	/* We've used all descriptors we need for this skb, however,
4407 	 * advance cur_tx so that it references a fresh descriptor.
4408 	 * ndo_start_xmit will fill this descriptor the next time it's
4409 	 * called and stmmac_tx_clean may clean up to this descriptor.
4410 	 */
4411 	tx_q->cur_tx = STMMAC_GET_ENTRY(tx_q->cur_tx, priv->dma_conf.dma_tx_size);
4412 
4413 	if (unlikely(stmmac_tx_avail(priv, queue) <= (MAX_SKB_FRAGS + 1))) {
4414 		netif_dbg(priv, hw, priv->dev, "%s: stop transmitted packets\n",
4415 			  __func__);
4416 		netif_tx_stop_queue(netdev_get_tx_queue(priv->dev, queue));
4417 	}
4418 
4419 	u64_stats_update_begin(&txq_stats->q_syncp);
4420 	u64_stats_add(&txq_stats->q.tx_bytes, skb->len);
4421 	u64_stats_inc(&txq_stats->q.tx_tso_frames);
4422 	u64_stats_add(&txq_stats->q.tx_tso_nfrags, nfrags);
4423 	if (set_ic)
4424 		u64_stats_inc(&txq_stats->q.tx_set_ic_bit);
4425 	u64_stats_update_end(&txq_stats->q_syncp);
4426 
4427 	if (priv->sarc_type)
4428 		stmmac_set_desc_sarc(priv, first, priv->sarc_type);
4429 
4430 	skb_tx_timestamp(skb);
4431 
4432 	if (unlikely((skb_shinfo(skb)->tx_flags & SKBTX_HW_TSTAMP) &&
4433 		     priv->hwts_tx_en)) {
4434 		/* declare that device is doing timestamping */
4435 		skb_shinfo(skb)->tx_flags |= SKBTX_IN_PROGRESS;
4436 		stmmac_enable_tx_timestamp(priv, first);
4437 	}
4438 
4439 	/* Complete the first descriptor before granting the DMA */
4440 	stmmac_prepare_tso_tx_desc(priv, first, 1,
4441 			proto_hdr_len,
4442 			pay_len,
4443 			1, tx_q->tx_skbuff_dma[first_entry].last_segment,
4444 			hdr / 4, (skb->len - proto_hdr_len));
4445 
4446 	/* If context desc is used to change MSS */
4447 	if (mss_desc) {
4448 		/* Make sure that first descriptor has been completely
4449 		 * written, including its own bit. This is because MSS is
4450 		 * actually before first descriptor, so we need to make
4451 		 * sure that MSS's own bit is the last thing written.
4452 		 */
4453 		dma_wmb();
4454 		stmmac_set_tx_owner(priv, mss_desc);
4455 	}
4456 
4457 	if (netif_msg_pktdata(priv)) {
4458 		pr_info("%s: curr=%d dirty=%d f=%d, e=%d, f_p=%p, nfrags %d\n",
4459 			__func__, tx_q->cur_tx, tx_q->dirty_tx, first_entry,
4460 			tx_q->cur_tx, first, nfrags);
4461 		pr_info(">>> frame to be transmitted: ");
4462 		print_pkt(skb->data, skb_headlen(skb));
4463 	}
4464 
4465 	netdev_tx_sent_queue(netdev_get_tx_queue(dev, queue), skb->len);
4466 
4467 	stmmac_flush_tx_descriptors(priv, queue);
4468 	stmmac_tx_timer_arm(priv, queue);
4469 
4470 	return NETDEV_TX_OK;
4471 
4472 dma_map_err:
4473 	dev_err(priv->device, "Tx dma map failed\n");
4474 	dev_kfree_skb(skb);
4475 	priv->xstats.tx_dropped++;
4476 	return NETDEV_TX_OK;
4477 }
4478 
4479 /**
4480  * stmmac_has_ip_ethertype() - Check if packet has IP ethertype
4481  * @skb: socket buffer to check
4482  *
4483  * Check if a packet has an ethertype that will trigger the IP header checks
4484  * and IP/TCP checksum engine of the stmmac core.
4485  *
4486  * Return: true if the ethertype can trigger the checksum engine, false
4487  * otherwise
4488  */
4489 static bool stmmac_has_ip_ethertype(struct sk_buff *skb)
4490 {
4491 	int depth = 0;
4492 	__be16 proto;
4493 
4494 	proto = __vlan_get_protocol(skb, eth_header_parse_protocol(skb),
4495 				    &depth);
4496 
4497 	return (depth <= ETH_HLEN) &&
4498 		(proto == htons(ETH_P_IP) || proto == htons(ETH_P_IPV6));
4499 }
4500 
4501 /**
4502  *  stmmac_xmit - Tx entry point of the driver
4503  *  @skb : the socket buffer
4504  *  @dev : device pointer
4505  *  Description : this is the tx entry point of the driver.
4506  *  It programs the chain or the ring and supports oversized frames
4507  *  and SG feature.
4508  */
4509 static netdev_tx_t stmmac_xmit(struct sk_buff *skb, struct net_device *dev)
4510 {
4511 	unsigned int first_entry, tx_packets, enh_desc;
4512 	struct stmmac_priv *priv = netdev_priv(dev);
4513 	unsigned int nopaged_len = skb_headlen(skb);
4514 	int i, csum_insertion = 0, is_jumbo = 0;
4515 	u32 queue = skb_get_queue_mapping(skb);
4516 	int nfrags = skb_shinfo(skb)->nr_frags;
4517 	int gso = skb_shinfo(skb)->gso_type;
4518 	struct stmmac_txq_stats *txq_stats;
4519 	struct dma_edesc *tbs_desc = NULL;
4520 	struct dma_desc *desc, *first;
4521 	struct stmmac_tx_queue *tx_q;
4522 	bool has_vlan, set_ic;
4523 	int entry, first_tx;
4524 	dma_addr_t des;
4525 
4526 	tx_q = &priv->dma_conf.tx_queue[queue];
4527 	txq_stats = &priv->xstats.txq_stats[queue];
4528 	first_tx = tx_q->cur_tx;
4529 
4530 	if (priv->tx_path_in_lpi_mode && priv->eee_sw_timer_en)
4531 		stmmac_disable_eee_mode(priv);
4532 
4533 	/* Manage oversized TCP frames for GMAC4 device */
4534 	if (skb_is_gso(skb) && priv->tso) {
4535 		if (gso & (SKB_GSO_TCPV4 | SKB_GSO_TCPV6))
4536 			return stmmac_tso_xmit(skb, dev);
4537 		if (priv->plat->has_gmac4 && (gso & SKB_GSO_UDP_L4))
4538 			return stmmac_tso_xmit(skb, dev);
4539 	}
4540 
4541 	if (priv->est && priv->est->enable &&
4542 	    priv->est->max_sdu[queue] &&
4543 	    skb->len > priv->est->max_sdu[queue]){
4544 		priv->xstats.max_sdu_txq_drop[queue]++;
4545 		goto max_sdu_err;
4546 	}
4547 
4548 	if (unlikely(stmmac_tx_avail(priv, queue) < nfrags + 1)) {
4549 		if (!netif_tx_queue_stopped(netdev_get_tx_queue(dev, queue))) {
4550 			netif_tx_stop_queue(netdev_get_tx_queue(priv->dev,
4551 								queue));
4552 			/* This is a hard error, log it. */
4553 			netdev_err(priv->dev,
4554 				   "%s: Tx Ring full when queue awake\n",
4555 				   __func__);
4556 		}
4557 		return NETDEV_TX_BUSY;
4558 	}
4559 
4560 	/* Check if VLAN can be inserted by HW */
4561 	has_vlan = stmmac_vlan_insert(priv, skb, tx_q);
4562 
4563 	entry = tx_q->cur_tx;
4564 	first_entry = entry;
4565 	WARN_ON(tx_q->tx_skbuff[first_entry]);
4566 
4567 	csum_insertion = (skb->ip_summed == CHECKSUM_PARTIAL);
4568 	/* DWMAC IPs can be synthesized to support tx coe only for a few tx
4569 	 * queues. In that case, checksum offloading for those queues that don't
4570 	 * support tx coe needs to fallback to software checksum calculation.
4571 	 *
4572 	 * Packets that won't trigger the COE e.g. most DSA-tagged packets will
4573 	 * also have to be checksummed in software.
4574 	 */
4575 	if (csum_insertion &&
4576 	    (priv->plat->tx_queues_cfg[queue].coe_unsupported ||
4577 	     !stmmac_has_ip_ethertype(skb))) {
4578 		if (unlikely(skb_checksum_help(skb)))
4579 			goto dma_map_err;
4580 		csum_insertion = !csum_insertion;
4581 	}
4582 
4583 	if (likely(priv->extend_desc))
4584 		desc = (struct dma_desc *)(tx_q->dma_etx + entry);
4585 	else if (tx_q->tbs & STMMAC_TBS_AVAIL)
4586 		desc = &tx_q->dma_entx[entry].basic;
4587 	else
4588 		desc = tx_q->dma_tx + entry;
4589 
4590 	first = desc;
4591 
4592 	if (has_vlan)
4593 		stmmac_set_desc_vlan(priv, first, STMMAC_VLAN_INSERT);
4594 
4595 	enh_desc = priv->plat->enh_desc;
4596 	/* To program the descriptors according to the size of the frame */
4597 	if (enh_desc)
4598 		is_jumbo = stmmac_is_jumbo_frm(priv, skb->len, enh_desc);
4599 
4600 	if (unlikely(is_jumbo)) {
4601 		entry = stmmac_jumbo_frm(priv, tx_q, skb, csum_insertion);
4602 		if (unlikely(entry < 0) && (entry != -EINVAL))
4603 			goto dma_map_err;
4604 	}
4605 
4606 	for (i = 0; i < nfrags; i++) {
4607 		const skb_frag_t *frag = &skb_shinfo(skb)->frags[i];
4608 		int len = skb_frag_size(frag);
4609 		bool last_segment = (i == (nfrags - 1));
4610 
4611 		entry = STMMAC_GET_ENTRY(entry, priv->dma_conf.dma_tx_size);
4612 		WARN_ON(tx_q->tx_skbuff[entry]);
4613 
4614 		if (likely(priv->extend_desc))
4615 			desc = (struct dma_desc *)(tx_q->dma_etx + entry);
4616 		else if (tx_q->tbs & STMMAC_TBS_AVAIL)
4617 			desc = &tx_q->dma_entx[entry].basic;
4618 		else
4619 			desc = tx_q->dma_tx + entry;
4620 
4621 		des = skb_frag_dma_map(priv->device, frag, 0, len,
4622 				       DMA_TO_DEVICE);
4623 		if (dma_mapping_error(priv->device, des))
4624 			goto dma_map_err; /* should reuse desc w/o issues */
4625 
4626 		tx_q->tx_skbuff_dma[entry].buf = des;
4627 
4628 		stmmac_set_desc_addr(priv, desc, des);
4629 
4630 		tx_q->tx_skbuff_dma[entry].map_as_page = true;
4631 		tx_q->tx_skbuff_dma[entry].len = len;
4632 		tx_q->tx_skbuff_dma[entry].last_segment = last_segment;
4633 		tx_q->tx_skbuff_dma[entry].buf_type = STMMAC_TXBUF_T_SKB;
4634 
4635 		/* Prepare the descriptor and set the own bit too */
4636 		stmmac_prepare_tx_desc(priv, desc, 0, len, csum_insertion,
4637 				priv->mode, 1, last_segment, skb->len);
4638 	}
4639 
4640 	/* Only the last descriptor gets to point to the skb. */
4641 	tx_q->tx_skbuff[entry] = skb;
4642 	tx_q->tx_skbuff_dma[entry].buf_type = STMMAC_TXBUF_T_SKB;
4643 
4644 	/* According to the coalesce parameter the IC bit for the latest
4645 	 * segment is reset and the timer re-started to clean the tx status.
4646 	 * This approach takes care about the fragments: desc is the first
4647 	 * element in case of no SG.
4648 	 */
4649 	tx_packets = (entry + 1) - first_tx;
4650 	tx_q->tx_count_frames += tx_packets;
4651 
4652 	if ((skb_shinfo(skb)->tx_flags & SKBTX_HW_TSTAMP) && priv->hwts_tx_en)
4653 		set_ic = true;
4654 	else if (!priv->tx_coal_frames[queue])
4655 		set_ic = false;
4656 	else if (tx_packets > priv->tx_coal_frames[queue])
4657 		set_ic = true;
4658 	else if ((tx_q->tx_count_frames %
4659 		  priv->tx_coal_frames[queue]) < tx_packets)
4660 		set_ic = true;
4661 	else
4662 		set_ic = false;
4663 
4664 	if (set_ic) {
4665 		if (likely(priv->extend_desc))
4666 			desc = &tx_q->dma_etx[entry].basic;
4667 		else if (tx_q->tbs & STMMAC_TBS_AVAIL)
4668 			desc = &tx_q->dma_entx[entry].basic;
4669 		else
4670 			desc = &tx_q->dma_tx[entry];
4671 
4672 		tx_q->tx_count_frames = 0;
4673 		stmmac_set_tx_ic(priv, desc);
4674 	}
4675 
4676 	/* We've used all descriptors we need for this skb, however,
4677 	 * advance cur_tx so that it references a fresh descriptor.
4678 	 * ndo_start_xmit will fill this descriptor the next time it's
4679 	 * called and stmmac_tx_clean may clean up to this descriptor.
4680 	 */
4681 	entry = STMMAC_GET_ENTRY(entry, priv->dma_conf.dma_tx_size);
4682 	tx_q->cur_tx = entry;
4683 
4684 	if (netif_msg_pktdata(priv)) {
4685 		netdev_dbg(priv->dev,
4686 			   "%s: curr=%d dirty=%d f=%d, e=%d, first=%p, nfrags=%d",
4687 			   __func__, tx_q->cur_tx, tx_q->dirty_tx, first_entry,
4688 			   entry, first, nfrags);
4689 
4690 		netdev_dbg(priv->dev, ">>> frame to be transmitted: ");
4691 		print_pkt(skb->data, skb->len);
4692 	}
4693 
4694 	if (unlikely(stmmac_tx_avail(priv, queue) <= (MAX_SKB_FRAGS + 1))) {
4695 		netif_dbg(priv, hw, priv->dev, "%s: stop transmitted packets\n",
4696 			  __func__);
4697 		netif_tx_stop_queue(netdev_get_tx_queue(priv->dev, queue));
4698 	}
4699 
4700 	u64_stats_update_begin(&txq_stats->q_syncp);
4701 	u64_stats_add(&txq_stats->q.tx_bytes, skb->len);
4702 	if (set_ic)
4703 		u64_stats_inc(&txq_stats->q.tx_set_ic_bit);
4704 	u64_stats_update_end(&txq_stats->q_syncp);
4705 
4706 	if (priv->sarc_type)
4707 		stmmac_set_desc_sarc(priv, first, priv->sarc_type);
4708 
4709 	skb_tx_timestamp(skb);
4710 
4711 	/* Ready to fill the first descriptor and set the OWN bit w/o any
4712 	 * problems because all the descriptors are actually ready to be
4713 	 * passed to the DMA engine.
4714 	 */
4715 	if (likely(!is_jumbo)) {
4716 		bool last_segment = (nfrags == 0);
4717 
4718 		des = dma_map_single(priv->device, skb->data,
4719 				     nopaged_len, DMA_TO_DEVICE);
4720 		if (dma_mapping_error(priv->device, des))
4721 			goto dma_map_err;
4722 
4723 		tx_q->tx_skbuff_dma[first_entry].buf = des;
4724 		tx_q->tx_skbuff_dma[first_entry].buf_type = STMMAC_TXBUF_T_SKB;
4725 		tx_q->tx_skbuff_dma[first_entry].map_as_page = false;
4726 
4727 		stmmac_set_desc_addr(priv, first, des);
4728 
4729 		tx_q->tx_skbuff_dma[first_entry].len = nopaged_len;
4730 		tx_q->tx_skbuff_dma[first_entry].last_segment = last_segment;
4731 
4732 		if (unlikely((skb_shinfo(skb)->tx_flags & SKBTX_HW_TSTAMP) &&
4733 			     priv->hwts_tx_en)) {
4734 			/* declare that device is doing timestamping */
4735 			skb_shinfo(skb)->tx_flags |= SKBTX_IN_PROGRESS;
4736 			stmmac_enable_tx_timestamp(priv, first);
4737 		}
4738 
4739 		/* Prepare the first descriptor setting the OWN bit too */
4740 		stmmac_prepare_tx_desc(priv, first, 1, nopaged_len,
4741 				csum_insertion, priv->mode, 0, last_segment,
4742 				skb->len);
4743 	}
4744 
4745 	if (tx_q->tbs & STMMAC_TBS_EN) {
4746 		struct timespec64 ts = ns_to_timespec64(skb->tstamp);
4747 
4748 		tbs_desc = &tx_q->dma_entx[first_entry];
4749 		stmmac_set_desc_tbs(priv, tbs_desc, ts.tv_sec, ts.tv_nsec);
4750 	}
4751 
4752 	stmmac_set_tx_owner(priv, first);
4753 
4754 	netdev_tx_sent_queue(netdev_get_tx_queue(dev, queue), skb->len);
4755 
4756 	stmmac_enable_dma_transmission(priv, priv->ioaddr);
4757 
4758 	stmmac_flush_tx_descriptors(priv, queue);
4759 	stmmac_tx_timer_arm(priv, queue);
4760 
4761 	return NETDEV_TX_OK;
4762 
4763 dma_map_err:
4764 	netdev_err(priv->dev, "Tx DMA map failed\n");
4765 max_sdu_err:
4766 	dev_kfree_skb(skb);
4767 	priv->xstats.tx_dropped++;
4768 	return NETDEV_TX_OK;
4769 }
4770 
4771 static void stmmac_rx_vlan(struct net_device *dev, struct sk_buff *skb)
4772 {
4773 	struct vlan_ethhdr *veth = skb_vlan_eth_hdr(skb);
4774 	__be16 vlan_proto = veth->h_vlan_proto;
4775 	u16 vlanid;
4776 
4777 	if ((vlan_proto == htons(ETH_P_8021Q) &&
4778 	     dev->features & NETIF_F_HW_VLAN_CTAG_RX) ||
4779 	    (vlan_proto == htons(ETH_P_8021AD) &&
4780 	     dev->features & NETIF_F_HW_VLAN_STAG_RX)) {
4781 		/* pop the vlan tag */
4782 		vlanid = ntohs(veth->h_vlan_TCI);
4783 		memmove(skb->data + VLAN_HLEN, veth, ETH_ALEN * 2);
4784 		skb_pull(skb, VLAN_HLEN);
4785 		__vlan_hwaccel_put_tag(skb, vlan_proto, vlanid);
4786 	}
4787 }
4788 
4789 /**
4790  * stmmac_rx_refill - refill used skb preallocated buffers
4791  * @priv: driver private structure
4792  * @queue: RX queue index
4793  * Description : this is to reallocate the skb for the reception process
4794  * that is based on zero-copy.
4795  */
4796 static inline void stmmac_rx_refill(struct stmmac_priv *priv, u32 queue)
4797 {
4798 	struct stmmac_rx_queue *rx_q = &priv->dma_conf.rx_queue[queue];
4799 	int dirty = stmmac_rx_dirty(priv, queue);
4800 	unsigned int entry = rx_q->dirty_rx;
4801 	gfp_t gfp = (GFP_ATOMIC | __GFP_NOWARN);
4802 
4803 	if (priv->dma_cap.host_dma_width <= 32)
4804 		gfp |= GFP_DMA32;
4805 
4806 	while (dirty-- > 0) {
4807 		struct stmmac_rx_buffer *buf = &rx_q->buf_pool[entry];
4808 		struct dma_desc *p;
4809 		bool use_rx_wd;
4810 
4811 		if (priv->extend_desc)
4812 			p = (struct dma_desc *)(rx_q->dma_erx + entry);
4813 		else
4814 			p = rx_q->dma_rx + entry;
4815 
4816 		if (!buf->page) {
4817 			buf->page = page_pool_alloc_pages(rx_q->page_pool, gfp);
4818 			if (!buf->page)
4819 				break;
4820 		}
4821 
4822 		if (priv->sph && !buf->sec_page) {
4823 			buf->sec_page = page_pool_alloc_pages(rx_q->page_pool, gfp);
4824 			if (!buf->sec_page)
4825 				break;
4826 
4827 			buf->sec_addr = page_pool_get_dma_addr(buf->sec_page);
4828 		}
4829 
4830 		buf->addr = page_pool_get_dma_addr(buf->page) + buf->page_offset;
4831 
4832 		stmmac_set_desc_addr(priv, p, buf->addr);
4833 		if (priv->sph)
4834 			stmmac_set_desc_sec_addr(priv, p, buf->sec_addr, true);
4835 		else
4836 			stmmac_set_desc_sec_addr(priv, p, buf->sec_addr, false);
4837 		stmmac_refill_desc3(priv, rx_q, p);
4838 
4839 		rx_q->rx_count_frames++;
4840 		rx_q->rx_count_frames += priv->rx_coal_frames[queue];
4841 		if (rx_q->rx_count_frames > priv->rx_coal_frames[queue])
4842 			rx_q->rx_count_frames = 0;
4843 
4844 		use_rx_wd = !priv->rx_coal_frames[queue];
4845 		use_rx_wd |= rx_q->rx_count_frames > 0;
4846 		if (!priv->use_riwt)
4847 			use_rx_wd = false;
4848 
4849 		dma_wmb();
4850 		stmmac_set_rx_owner(priv, p, use_rx_wd);
4851 
4852 		entry = STMMAC_GET_ENTRY(entry, priv->dma_conf.dma_rx_size);
4853 	}
4854 	rx_q->dirty_rx = entry;
4855 	rx_q->rx_tail_addr = rx_q->dma_rx_phy +
4856 			    (rx_q->dirty_rx * sizeof(struct dma_desc));
4857 	stmmac_set_rx_tail_ptr(priv, priv->ioaddr, rx_q->rx_tail_addr, queue);
4858 }
4859 
4860 static unsigned int stmmac_rx_buf1_len(struct stmmac_priv *priv,
4861 				       struct dma_desc *p,
4862 				       int status, unsigned int len)
4863 {
4864 	unsigned int plen = 0, hlen = 0;
4865 	int coe = priv->hw->rx_csum;
4866 
4867 	/* Not first descriptor, buffer is always zero */
4868 	if (priv->sph && len)
4869 		return 0;
4870 
4871 	/* First descriptor, get split header length */
4872 	stmmac_get_rx_header_len(priv, p, &hlen);
4873 	if (priv->sph && hlen) {
4874 		priv->xstats.rx_split_hdr_pkt_n++;
4875 		return hlen;
4876 	}
4877 
4878 	/* First descriptor, not last descriptor and not split header */
4879 	if (status & rx_not_ls)
4880 		return priv->dma_conf.dma_buf_sz;
4881 
4882 	plen = stmmac_get_rx_frame_len(priv, p, coe);
4883 
4884 	/* First descriptor and last descriptor and not split header */
4885 	return min_t(unsigned int, priv->dma_conf.dma_buf_sz, plen);
4886 }
4887 
4888 static unsigned int stmmac_rx_buf2_len(struct stmmac_priv *priv,
4889 				       struct dma_desc *p,
4890 				       int status, unsigned int len)
4891 {
4892 	int coe = priv->hw->rx_csum;
4893 	unsigned int plen = 0;
4894 
4895 	/* Not split header, buffer is not available */
4896 	if (!priv->sph)
4897 		return 0;
4898 
4899 	/* Not last descriptor */
4900 	if (status & rx_not_ls)
4901 		return priv->dma_conf.dma_buf_sz;
4902 
4903 	plen = stmmac_get_rx_frame_len(priv, p, coe);
4904 
4905 	/* Last descriptor */
4906 	return plen - len;
4907 }
4908 
4909 static int stmmac_xdp_xmit_xdpf(struct stmmac_priv *priv, int queue,
4910 				struct xdp_frame *xdpf, bool dma_map)
4911 {
4912 	struct stmmac_txq_stats *txq_stats = &priv->xstats.txq_stats[queue];
4913 	struct stmmac_tx_queue *tx_q = &priv->dma_conf.tx_queue[queue];
4914 	unsigned int entry = tx_q->cur_tx;
4915 	struct dma_desc *tx_desc;
4916 	dma_addr_t dma_addr;
4917 	bool set_ic;
4918 
4919 	if (stmmac_tx_avail(priv, queue) < STMMAC_TX_THRESH(priv))
4920 		return STMMAC_XDP_CONSUMED;
4921 
4922 	if (priv->est && priv->est->enable &&
4923 	    priv->est->max_sdu[queue] &&
4924 	    xdpf->len > priv->est->max_sdu[queue]) {
4925 		priv->xstats.max_sdu_txq_drop[queue]++;
4926 		return STMMAC_XDP_CONSUMED;
4927 	}
4928 
4929 	if (likely(priv->extend_desc))
4930 		tx_desc = (struct dma_desc *)(tx_q->dma_etx + entry);
4931 	else if (tx_q->tbs & STMMAC_TBS_AVAIL)
4932 		tx_desc = &tx_q->dma_entx[entry].basic;
4933 	else
4934 		tx_desc = tx_q->dma_tx + entry;
4935 
4936 	if (dma_map) {
4937 		dma_addr = dma_map_single(priv->device, xdpf->data,
4938 					  xdpf->len, DMA_TO_DEVICE);
4939 		if (dma_mapping_error(priv->device, dma_addr))
4940 			return STMMAC_XDP_CONSUMED;
4941 
4942 		tx_q->tx_skbuff_dma[entry].buf_type = STMMAC_TXBUF_T_XDP_NDO;
4943 	} else {
4944 		struct page *page = virt_to_page(xdpf->data);
4945 
4946 		dma_addr = page_pool_get_dma_addr(page) + sizeof(*xdpf) +
4947 			   xdpf->headroom;
4948 		dma_sync_single_for_device(priv->device, dma_addr,
4949 					   xdpf->len, DMA_BIDIRECTIONAL);
4950 
4951 		tx_q->tx_skbuff_dma[entry].buf_type = STMMAC_TXBUF_T_XDP_TX;
4952 	}
4953 
4954 	tx_q->tx_skbuff_dma[entry].buf = dma_addr;
4955 	tx_q->tx_skbuff_dma[entry].map_as_page = false;
4956 	tx_q->tx_skbuff_dma[entry].len = xdpf->len;
4957 	tx_q->tx_skbuff_dma[entry].last_segment = true;
4958 	tx_q->tx_skbuff_dma[entry].is_jumbo = false;
4959 
4960 	tx_q->xdpf[entry] = xdpf;
4961 
4962 	stmmac_set_desc_addr(priv, tx_desc, dma_addr);
4963 
4964 	stmmac_prepare_tx_desc(priv, tx_desc, 1, xdpf->len,
4965 			       true, priv->mode, true, true,
4966 			       xdpf->len);
4967 
4968 	tx_q->tx_count_frames++;
4969 
4970 	if (tx_q->tx_count_frames % priv->tx_coal_frames[queue] == 0)
4971 		set_ic = true;
4972 	else
4973 		set_ic = false;
4974 
4975 	if (set_ic) {
4976 		tx_q->tx_count_frames = 0;
4977 		stmmac_set_tx_ic(priv, tx_desc);
4978 		u64_stats_update_begin(&txq_stats->q_syncp);
4979 		u64_stats_inc(&txq_stats->q.tx_set_ic_bit);
4980 		u64_stats_update_end(&txq_stats->q_syncp);
4981 	}
4982 
4983 	stmmac_enable_dma_transmission(priv, priv->ioaddr);
4984 
4985 	entry = STMMAC_GET_ENTRY(entry, priv->dma_conf.dma_tx_size);
4986 	tx_q->cur_tx = entry;
4987 
4988 	return STMMAC_XDP_TX;
4989 }
4990 
4991 static int stmmac_xdp_get_tx_queue(struct stmmac_priv *priv,
4992 				   int cpu)
4993 {
4994 	int index = cpu;
4995 
4996 	if (unlikely(index < 0))
4997 		index = 0;
4998 
4999 	while (index >= priv->plat->tx_queues_to_use)
5000 		index -= priv->plat->tx_queues_to_use;
5001 
5002 	return index;
5003 }
5004 
5005 static int stmmac_xdp_xmit_back(struct stmmac_priv *priv,
5006 				struct xdp_buff *xdp)
5007 {
5008 	struct xdp_frame *xdpf = xdp_convert_buff_to_frame(xdp);
5009 	int cpu = smp_processor_id();
5010 	struct netdev_queue *nq;
5011 	int queue;
5012 	int res;
5013 
5014 	if (unlikely(!xdpf))
5015 		return STMMAC_XDP_CONSUMED;
5016 
5017 	queue = stmmac_xdp_get_tx_queue(priv, cpu);
5018 	nq = netdev_get_tx_queue(priv->dev, queue);
5019 
5020 	__netif_tx_lock(nq, cpu);
5021 	/* Avoids TX time-out as we are sharing with slow path */
5022 	txq_trans_cond_update(nq);
5023 
5024 	res = stmmac_xdp_xmit_xdpf(priv, queue, xdpf, false);
5025 	if (res == STMMAC_XDP_TX)
5026 		stmmac_flush_tx_descriptors(priv, queue);
5027 
5028 	__netif_tx_unlock(nq);
5029 
5030 	return res;
5031 }
5032 
5033 static int __stmmac_xdp_run_prog(struct stmmac_priv *priv,
5034 				 struct bpf_prog *prog,
5035 				 struct xdp_buff *xdp)
5036 {
5037 	u32 act;
5038 	int res;
5039 
5040 	act = bpf_prog_run_xdp(prog, xdp);
5041 	switch (act) {
5042 	case XDP_PASS:
5043 		res = STMMAC_XDP_PASS;
5044 		break;
5045 	case XDP_TX:
5046 		res = stmmac_xdp_xmit_back(priv, xdp);
5047 		break;
5048 	case XDP_REDIRECT:
5049 		if (xdp_do_redirect(priv->dev, xdp, prog) < 0)
5050 			res = STMMAC_XDP_CONSUMED;
5051 		else
5052 			res = STMMAC_XDP_REDIRECT;
5053 		break;
5054 	default:
5055 		bpf_warn_invalid_xdp_action(priv->dev, prog, act);
5056 		fallthrough;
5057 	case XDP_ABORTED:
5058 		trace_xdp_exception(priv->dev, prog, act);
5059 		fallthrough;
5060 	case XDP_DROP:
5061 		res = STMMAC_XDP_CONSUMED;
5062 		break;
5063 	}
5064 
5065 	return res;
5066 }
5067 
5068 static struct sk_buff *stmmac_xdp_run_prog(struct stmmac_priv *priv,
5069 					   struct xdp_buff *xdp)
5070 {
5071 	struct bpf_prog *prog;
5072 	int res;
5073 
5074 	prog = READ_ONCE(priv->xdp_prog);
5075 	if (!prog) {
5076 		res = STMMAC_XDP_PASS;
5077 		goto out;
5078 	}
5079 
5080 	res = __stmmac_xdp_run_prog(priv, prog, xdp);
5081 out:
5082 	return ERR_PTR(-res);
5083 }
5084 
5085 static void stmmac_finalize_xdp_rx(struct stmmac_priv *priv,
5086 				   int xdp_status)
5087 {
5088 	int cpu = smp_processor_id();
5089 	int queue;
5090 
5091 	queue = stmmac_xdp_get_tx_queue(priv, cpu);
5092 
5093 	if (xdp_status & STMMAC_XDP_TX)
5094 		stmmac_tx_timer_arm(priv, queue);
5095 
5096 	if (xdp_status & STMMAC_XDP_REDIRECT)
5097 		xdp_do_flush();
5098 }
5099 
5100 static struct sk_buff *stmmac_construct_skb_zc(struct stmmac_channel *ch,
5101 					       struct xdp_buff *xdp)
5102 {
5103 	unsigned int metasize = xdp->data - xdp->data_meta;
5104 	unsigned int datasize = xdp->data_end - xdp->data;
5105 	struct sk_buff *skb;
5106 
5107 	skb = napi_alloc_skb(&ch->rxtx_napi,
5108 			     xdp->data_end - xdp->data_hard_start);
5109 	if (unlikely(!skb))
5110 		return NULL;
5111 
5112 	skb_reserve(skb, xdp->data - xdp->data_hard_start);
5113 	memcpy(__skb_put(skb, datasize), xdp->data, datasize);
5114 	if (metasize)
5115 		skb_metadata_set(skb, metasize);
5116 
5117 	return skb;
5118 }
5119 
5120 static void stmmac_dispatch_skb_zc(struct stmmac_priv *priv, u32 queue,
5121 				   struct dma_desc *p, struct dma_desc *np,
5122 				   struct xdp_buff *xdp)
5123 {
5124 	struct stmmac_rxq_stats *rxq_stats = &priv->xstats.rxq_stats[queue];
5125 	struct stmmac_channel *ch = &priv->channel[queue];
5126 	unsigned int len = xdp->data_end - xdp->data;
5127 	enum pkt_hash_types hash_type;
5128 	int coe = priv->hw->rx_csum;
5129 	struct sk_buff *skb;
5130 	u32 hash;
5131 
5132 	skb = stmmac_construct_skb_zc(ch, xdp);
5133 	if (!skb) {
5134 		priv->xstats.rx_dropped++;
5135 		return;
5136 	}
5137 
5138 	stmmac_get_rx_hwtstamp(priv, p, np, skb);
5139 	if (priv->hw->hw_vlan_en)
5140 		/* MAC level stripping. */
5141 		stmmac_rx_hw_vlan(priv, priv->hw, p, skb);
5142 	else
5143 		/* Driver level stripping. */
5144 		stmmac_rx_vlan(priv->dev, skb);
5145 	skb->protocol = eth_type_trans(skb, priv->dev);
5146 
5147 	if (unlikely(!coe) || !stmmac_has_ip_ethertype(skb))
5148 		skb_checksum_none_assert(skb);
5149 	else
5150 		skb->ip_summed = CHECKSUM_UNNECESSARY;
5151 
5152 	if (!stmmac_get_rx_hash(priv, p, &hash, &hash_type))
5153 		skb_set_hash(skb, hash, hash_type);
5154 
5155 	skb_record_rx_queue(skb, queue);
5156 	napi_gro_receive(&ch->rxtx_napi, skb);
5157 
5158 	u64_stats_update_begin(&rxq_stats->napi_syncp);
5159 	u64_stats_inc(&rxq_stats->napi.rx_pkt_n);
5160 	u64_stats_add(&rxq_stats->napi.rx_bytes, len);
5161 	u64_stats_update_end(&rxq_stats->napi_syncp);
5162 }
5163 
5164 static bool stmmac_rx_refill_zc(struct stmmac_priv *priv, u32 queue, u32 budget)
5165 {
5166 	struct stmmac_rx_queue *rx_q = &priv->dma_conf.rx_queue[queue];
5167 	unsigned int entry = rx_q->dirty_rx;
5168 	struct dma_desc *rx_desc = NULL;
5169 	bool ret = true;
5170 
5171 	budget = min(budget, stmmac_rx_dirty(priv, queue));
5172 
5173 	while (budget-- > 0 && entry != rx_q->cur_rx) {
5174 		struct stmmac_rx_buffer *buf = &rx_q->buf_pool[entry];
5175 		dma_addr_t dma_addr;
5176 		bool use_rx_wd;
5177 
5178 		if (!buf->xdp) {
5179 			buf->xdp = xsk_buff_alloc(rx_q->xsk_pool);
5180 			if (!buf->xdp) {
5181 				ret = false;
5182 				break;
5183 			}
5184 		}
5185 
5186 		if (priv->extend_desc)
5187 			rx_desc = (struct dma_desc *)(rx_q->dma_erx + entry);
5188 		else
5189 			rx_desc = rx_q->dma_rx + entry;
5190 
5191 		dma_addr = xsk_buff_xdp_get_dma(buf->xdp);
5192 		stmmac_set_desc_addr(priv, rx_desc, dma_addr);
5193 		stmmac_set_desc_sec_addr(priv, rx_desc, 0, false);
5194 		stmmac_refill_desc3(priv, rx_q, rx_desc);
5195 
5196 		rx_q->rx_count_frames++;
5197 		rx_q->rx_count_frames += priv->rx_coal_frames[queue];
5198 		if (rx_q->rx_count_frames > priv->rx_coal_frames[queue])
5199 			rx_q->rx_count_frames = 0;
5200 
5201 		use_rx_wd = !priv->rx_coal_frames[queue];
5202 		use_rx_wd |= rx_q->rx_count_frames > 0;
5203 		if (!priv->use_riwt)
5204 			use_rx_wd = false;
5205 
5206 		dma_wmb();
5207 		stmmac_set_rx_owner(priv, rx_desc, use_rx_wd);
5208 
5209 		entry = STMMAC_GET_ENTRY(entry, priv->dma_conf.dma_rx_size);
5210 	}
5211 
5212 	if (rx_desc) {
5213 		rx_q->dirty_rx = entry;
5214 		rx_q->rx_tail_addr = rx_q->dma_rx_phy +
5215 				     (rx_q->dirty_rx * sizeof(struct dma_desc));
5216 		stmmac_set_rx_tail_ptr(priv, priv->ioaddr, rx_q->rx_tail_addr, queue);
5217 	}
5218 
5219 	return ret;
5220 }
5221 
5222 static struct stmmac_xdp_buff *xsk_buff_to_stmmac_ctx(struct xdp_buff *xdp)
5223 {
5224 	/* In XDP zero copy data path, xdp field in struct xdp_buff_xsk is used
5225 	 * to represent incoming packet, whereas cb field in the same structure
5226 	 * is used to store driver specific info. Thus, struct stmmac_xdp_buff
5227 	 * is laid on top of xdp and cb fields of struct xdp_buff_xsk.
5228 	 */
5229 	return (struct stmmac_xdp_buff *)xdp;
5230 }
5231 
5232 static int stmmac_rx_zc(struct stmmac_priv *priv, int limit, u32 queue)
5233 {
5234 	struct stmmac_rxq_stats *rxq_stats = &priv->xstats.rxq_stats[queue];
5235 	struct stmmac_rx_queue *rx_q = &priv->dma_conf.rx_queue[queue];
5236 	unsigned int count = 0, error = 0, len = 0;
5237 	int dirty = stmmac_rx_dirty(priv, queue);
5238 	unsigned int next_entry = rx_q->cur_rx;
5239 	u32 rx_errors = 0, rx_dropped = 0;
5240 	unsigned int desc_size;
5241 	struct bpf_prog *prog;
5242 	bool failure = false;
5243 	int xdp_status = 0;
5244 	int status = 0;
5245 
5246 	if (netif_msg_rx_status(priv)) {
5247 		void *rx_head;
5248 
5249 		netdev_dbg(priv->dev, "%s: descriptor ring:\n", __func__);
5250 		if (priv->extend_desc) {
5251 			rx_head = (void *)rx_q->dma_erx;
5252 			desc_size = sizeof(struct dma_extended_desc);
5253 		} else {
5254 			rx_head = (void *)rx_q->dma_rx;
5255 			desc_size = sizeof(struct dma_desc);
5256 		}
5257 
5258 		stmmac_display_ring(priv, rx_head, priv->dma_conf.dma_rx_size, true,
5259 				    rx_q->dma_rx_phy, desc_size);
5260 	}
5261 	while (count < limit) {
5262 		struct stmmac_rx_buffer *buf;
5263 		struct stmmac_xdp_buff *ctx;
5264 		unsigned int buf1_len = 0;
5265 		struct dma_desc *np, *p;
5266 		int entry;
5267 		int res;
5268 
5269 		if (!count && rx_q->state_saved) {
5270 			error = rx_q->state.error;
5271 			len = rx_q->state.len;
5272 		} else {
5273 			rx_q->state_saved = false;
5274 			error = 0;
5275 			len = 0;
5276 		}
5277 
5278 		if (count >= limit)
5279 			break;
5280 
5281 read_again:
5282 		buf1_len = 0;
5283 		entry = next_entry;
5284 		buf = &rx_q->buf_pool[entry];
5285 
5286 		if (dirty >= STMMAC_RX_FILL_BATCH) {
5287 			failure = failure ||
5288 				  !stmmac_rx_refill_zc(priv, queue, dirty);
5289 			dirty = 0;
5290 		}
5291 
5292 		if (priv->extend_desc)
5293 			p = (struct dma_desc *)(rx_q->dma_erx + entry);
5294 		else
5295 			p = rx_q->dma_rx + entry;
5296 
5297 		/* read the status of the incoming frame */
5298 		status = stmmac_rx_status(priv, &priv->xstats, p);
5299 		/* check if managed by the DMA otherwise go ahead */
5300 		if (unlikely(status & dma_own))
5301 			break;
5302 
5303 		/* Prefetch the next RX descriptor */
5304 		rx_q->cur_rx = STMMAC_GET_ENTRY(rx_q->cur_rx,
5305 						priv->dma_conf.dma_rx_size);
5306 		next_entry = rx_q->cur_rx;
5307 
5308 		if (priv->extend_desc)
5309 			np = (struct dma_desc *)(rx_q->dma_erx + next_entry);
5310 		else
5311 			np = rx_q->dma_rx + next_entry;
5312 
5313 		prefetch(np);
5314 
5315 		/* Ensure a valid XSK buffer before proceed */
5316 		if (!buf->xdp)
5317 			break;
5318 
5319 		if (priv->extend_desc)
5320 			stmmac_rx_extended_status(priv, &priv->xstats,
5321 						  rx_q->dma_erx + entry);
5322 		if (unlikely(status == discard_frame)) {
5323 			xsk_buff_free(buf->xdp);
5324 			buf->xdp = NULL;
5325 			dirty++;
5326 			error = 1;
5327 			if (!priv->hwts_rx_en)
5328 				rx_errors++;
5329 		}
5330 
5331 		if (unlikely(error && (status & rx_not_ls)))
5332 			goto read_again;
5333 		if (unlikely(error)) {
5334 			count++;
5335 			continue;
5336 		}
5337 
5338 		/* XSK pool expects RX frame 1:1 mapped to XSK buffer */
5339 		if (likely(status & rx_not_ls)) {
5340 			xsk_buff_free(buf->xdp);
5341 			buf->xdp = NULL;
5342 			dirty++;
5343 			count++;
5344 			goto read_again;
5345 		}
5346 
5347 		ctx = xsk_buff_to_stmmac_ctx(buf->xdp);
5348 		ctx->priv = priv;
5349 		ctx->desc = p;
5350 		ctx->ndesc = np;
5351 
5352 		/* XDP ZC Frame only support primary buffers for now */
5353 		buf1_len = stmmac_rx_buf1_len(priv, p, status, len);
5354 		len += buf1_len;
5355 
5356 		/* ACS is disabled; strip manually. */
5357 		if (likely(!(status & rx_not_ls))) {
5358 			buf1_len -= ETH_FCS_LEN;
5359 			len -= ETH_FCS_LEN;
5360 		}
5361 
5362 		/* RX buffer is good and fit into a XSK pool buffer */
5363 		buf->xdp->data_end = buf->xdp->data + buf1_len;
5364 		xsk_buff_dma_sync_for_cpu(buf->xdp);
5365 
5366 		prog = READ_ONCE(priv->xdp_prog);
5367 		res = __stmmac_xdp_run_prog(priv, prog, buf->xdp);
5368 
5369 		switch (res) {
5370 		case STMMAC_XDP_PASS:
5371 			stmmac_dispatch_skb_zc(priv, queue, p, np, buf->xdp);
5372 			xsk_buff_free(buf->xdp);
5373 			break;
5374 		case STMMAC_XDP_CONSUMED:
5375 			xsk_buff_free(buf->xdp);
5376 			rx_dropped++;
5377 			break;
5378 		case STMMAC_XDP_TX:
5379 		case STMMAC_XDP_REDIRECT:
5380 			xdp_status |= res;
5381 			break;
5382 		}
5383 
5384 		buf->xdp = NULL;
5385 		dirty++;
5386 		count++;
5387 	}
5388 
5389 	if (status & rx_not_ls) {
5390 		rx_q->state_saved = true;
5391 		rx_q->state.error = error;
5392 		rx_q->state.len = len;
5393 	}
5394 
5395 	stmmac_finalize_xdp_rx(priv, xdp_status);
5396 
5397 	u64_stats_update_begin(&rxq_stats->napi_syncp);
5398 	u64_stats_add(&rxq_stats->napi.rx_pkt_n, count);
5399 	u64_stats_update_end(&rxq_stats->napi_syncp);
5400 
5401 	priv->xstats.rx_dropped += rx_dropped;
5402 	priv->xstats.rx_errors += rx_errors;
5403 
5404 	if (xsk_uses_need_wakeup(rx_q->xsk_pool)) {
5405 		if (failure || stmmac_rx_dirty(priv, queue) > 0)
5406 			xsk_set_rx_need_wakeup(rx_q->xsk_pool);
5407 		else
5408 			xsk_clear_rx_need_wakeup(rx_q->xsk_pool);
5409 
5410 		return (int)count;
5411 	}
5412 
5413 	return failure ? limit : (int)count;
5414 }
5415 
5416 /**
5417  * stmmac_rx - manage the receive process
5418  * @priv: driver private structure
5419  * @limit: napi bugget
5420  * @queue: RX queue index.
5421  * Description :  this the function called by the napi poll method.
5422  * It gets all the frames inside the ring.
5423  */
5424 static int stmmac_rx(struct stmmac_priv *priv, int limit, u32 queue)
5425 {
5426 	u32 rx_errors = 0, rx_dropped = 0, rx_bytes = 0, rx_packets = 0;
5427 	struct stmmac_rxq_stats *rxq_stats = &priv->xstats.rxq_stats[queue];
5428 	struct stmmac_rx_queue *rx_q = &priv->dma_conf.rx_queue[queue];
5429 	struct stmmac_channel *ch = &priv->channel[queue];
5430 	unsigned int count = 0, error = 0, len = 0;
5431 	int status = 0, coe = priv->hw->rx_csum;
5432 	unsigned int next_entry = rx_q->cur_rx;
5433 	enum dma_data_direction dma_dir;
5434 	unsigned int desc_size;
5435 	struct sk_buff *skb = NULL;
5436 	struct stmmac_xdp_buff ctx;
5437 	int xdp_status = 0;
5438 	int buf_sz;
5439 
5440 	dma_dir = page_pool_get_dma_dir(rx_q->page_pool);
5441 	buf_sz = DIV_ROUND_UP(priv->dma_conf.dma_buf_sz, PAGE_SIZE) * PAGE_SIZE;
5442 	limit = min(priv->dma_conf.dma_rx_size - 1, (unsigned int)limit);
5443 
5444 	if (netif_msg_rx_status(priv)) {
5445 		void *rx_head;
5446 
5447 		netdev_dbg(priv->dev, "%s: descriptor ring:\n", __func__);
5448 		if (priv->extend_desc) {
5449 			rx_head = (void *)rx_q->dma_erx;
5450 			desc_size = sizeof(struct dma_extended_desc);
5451 		} else {
5452 			rx_head = (void *)rx_q->dma_rx;
5453 			desc_size = sizeof(struct dma_desc);
5454 		}
5455 
5456 		stmmac_display_ring(priv, rx_head, priv->dma_conf.dma_rx_size, true,
5457 				    rx_q->dma_rx_phy, desc_size);
5458 	}
5459 	while (count < limit) {
5460 		unsigned int buf1_len = 0, buf2_len = 0;
5461 		enum pkt_hash_types hash_type;
5462 		struct stmmac_rx_buffer *buf;
5463 		struct dma_desc *np, *p;
5464 		int entry;
5465 		u32 hash;
5466 
5467 		if (!count && rx_q->state_saved) {
5468 			skb = rx_q->state.skb;
5469 			error = rx_q->state.error;
5470 			len = rx_q->state.len;
5471 		} else {
5472 			rx_q->state_saved = false;
5473 			skb = NULL;
5474 			error = 0;
5475 			len = 0;
5476 		}
5477 
5478 read_again:
5479 		if (count >= limit)
5480 			break;
5481 
5482 		buf1_len = 0;
5483 		buf2_len = 0;
5484 		entry = next_entry;
5485 		buf = &rx_q->buf_pool[entry];
5486 
5487 		if (priv->extend_desc)
5488 			p = (struct dma_desc *)(rx_q->dma_erx + entry);
5489 		else
5490 			p = rx_q->dma_rx + entry;
5491 
5492 		/* read the status of the incoming frame */
5493 		status = stmmac_rx_status(priv, &priv->xstats, p);
5494 		/* check if managed by the DMA otherwise go ahead */
5495 		if (unlikely(status & dma_own))
5496 			break;
5497 
5498 		rx_q->cur_rx = STMMAC_GET_ENTRY(rx_q->cur_rx,
5499 						priv->dma_conf.dma_rx_size);
5500 		next_entry = rx_q->cur_rx;
5501 
5502 		if (priv->extend_desc)
5503 			np = (struct dma_desc *)(rx_q->dma_erx + next_entry);
5504 		else
5505 			np = rx_q->dma_rx + next_entry;
5506 
5507 		prefetch(np);
5508 
5509 		if (priv->extend_desc)
5510 			stmmac_rx_extended_status(priv, &priv->xstats, rx_q->dma_erx + entry);
5511 		if (unlikely(status == discard_frame)) {
5512 			page_pool_recycle_direct(rx_q->page_pool, buf->page);
5513 			buf->page = NULL;
5514 			error = 1;
5515 			if (!priv->hwts_rx_en)
5516 				rx_errors++;
5517 		}
5518 
5519 		if (unlikely(error && (status & rx_not_ls)))
5520 			goto read_again;
5521 		if (unlikely(error)) {
5522 			dev_kfree_skb(skb);
5523 			skb = NULL;
5524 			count++;
5525 			continue;
5526 		}
5527 
5528 		/* Buffer is good. Go on. */
5529 
5530 		prefetch(page_address(buf->page) + buf->page_offset);
5531 		if (buf->sec_page)
5532 			prefetch(page_address(buf->sec_page));
5533 
5534 		buf1_len = stmmac_rx_buf1_len(priv, p, status, len);
5535 		len += buf1_len;
5536 		buf2_len = stmmac_rx_buf2_len(priv, p, status, len);
5537 		len += buf2_len;
5538 
5539 		/* ACS is disabled; strip manually. */
5540 		if (likely(!(status & rx_not_ls))) {
5541 			if (buf2_len) {
5542 				buf2_len -= ETH_FCS_LEN;
5543 				len -= ETH_FCS_LEN;
5544 			} else if (buf1_len) {
5545 				buf1_len -= ETH_FCS_LEN;
5546 				len -= ETH_FCS_LEN;
5547 			}
5548 		}
5549 
5550 		if (!skb) {
5551 			unsigned int pre_len, sync_len;
5552 
5553 			dma_sync_single_for_cpu(priv->device, buf->addr,
5554 						buf1_len, dma_dir);
5555 
5556 			xdp_init_buff(&ctx.xdp, buf_sz, &rx_q->xdp_rxq);
5557 			xdp_prepare_buff(&ctx.xdp, page_address(buf->page),
5558 					 buf->page_offset, buf1_len, true);
5559 
5560 			pre_len = ctx.xdp.data_end - ctx.xdp.data_hard_start -
5561 				  buf->page_offset;
5562 
5563 			ctx.priv = priv;
5564 			ctx.desc = p;
5565 			ctx.ndesc = np;
5566 
5567 			skb = stmmac_xdp_run_prog(priv, &ctx.xdp);
5568 			/* Due xdp_adjust_tail: DMA sync for_device
5569 			 * cover max len CPU touch
5570 			 */
5571 			sync_len = ctx.xdp.data_end - ctx.xdp.data_hard_start -
5572 				   buf->page_offset;
5573 			sync_len = max(sync_len, pre_len);
5574 
5575 			/* For Not XDP_PASS verdict */
5576 			if (IS_ERR(skb)) {
5577 				unsigned int xdp_res = -PTR_ERR(skb);
5578 
5579 				if (xdp_res & STMMAC_XDP_CONSUMED) {
5580 					page_pool_put_page(rx_q->page_pool,
5581 							   virt_to_head_page(ctx.xdp.data),
5582 							   sync_len, true);
5583 					buf->page = NULL;
5584 					rx_dropped++;
5585 
5586 					/* Clear skb as it was set as
5587 					 * status by XDP program.
5588 					 */
5589 					skb = NULL;
5590 
5591 					if (unlikely((status & rx_not_ls)))
5592 						goto read_again;
5593 
5594 					count++;
5595 					continue;
5596 				} else if (xdp_res & (STMMAC_XDP_TX |
5597 						      STMMAC_XDP_REDIRECT)) {
5598 					xdp_status |= xdp_res;
5599 					buf->page = NULL;
5600 					skb = NULL;
5601 					count++;
5602 					continue;
5603 				}
5604 			}
5605 		}
5606 
5607 		if (!skb) {
5608 			/* XDP program may expand or reduce tail */
5609 			buf1_len = ctx.xdp.data_end - ctx.xdp.data;
5610 
5611 			skb = napi_alloc_skb(&ch->rx_napi, buf1_len);
5612 			if (!skb) {
5613 				rx_dropped++;
5614 				count++;
5615 				goto drain_data;
5616 			}
5617 
5618 			/* XDP program may adjust header */
5619 			skb_copy_to_linear_data(skb, ctx.xdp.data, buf1_len);
5620 			skb_put(skb, buf1_len);
5621 
5622 			/* Data payload copied into SKB, page ready for recycle */
5623 			page_pool_recycle_direct(rx_q->page_pool, buf->page);
5624 			buf->page = NULL;
5625 		} else if (buf1_len) {
5626 			dma_sync_single_for_cpu(priv->device, buf->addr,
5627 						buf1_len, dma_dir);
5628 			skb_add_rx_frag(skb, skb_shinfo(skb)->nr_frags,
5629 					buf->page, buf->page_offset, buf1_len,
5630 					priv->dma_conf.dma_buf_sz);
5631 
5632 			/* Data payload appended into SKB */
5633 			skb_mark_for_recycle(skb);
5634 			buf->page = NULL;
5635 		}
5636 
5637 		if (buf2_len) {
5638 			dma_sync_single_for_cpu(priv->device, buf->sec_addr,
5639 						buf2_len, dma_dir);
5640 			skb_add_rx_frag(skb, skb_shinfo(skb)->nr_frags,
5641 					buf->sec_page, 0, buf2_len,
5642 					priv->dma_conf.dma_buf_sz);
5643 
5644 			/* Data payload appended into SKB */
5645 			skb_mark_for_recycle(skb);
5646 			buf->sec_page = NULL;
5647 		}
5648 
5649 drain_data:
5650 		if (likely(status & rx_not_ls))
5651 			goto read_again;
5652 		if (!skb)
5653 			continue;
5654 
5655 		/* Got entire packet into SKB. Finish it. */
5656 
5657 		stmmac_get_rx_hwtstamp(priv, p, np, skb);
5658 
5659 		if (priv->hw->hw_vlan_en)
5660 			/* MAC level stripping. */
5661 			stmmac_rx_hw_vlan(priv, priv->hw, p, skb);
5662 		else
5663 			/* Driver level stripping. */
5664 			stmmac_rx_vlan(priv->dev, skb);
5665 
5666 		skb->protocol = eth_type_trans(skb, priv->dev);
5667 
5668 		if (unlikely(!coe) || !stmmac_has_ip_ethertype(skb))
5669 			skb_checksum_none_assert(skb);
5670 		else
5671 			skb->ip_summed = CHECKSUM_UNNECESSARY;
5672 
5673 		if (!stmmac_get_rx_hash(priv, p, &hash, &hash_type))
5674 			skb_set_hash(skb, hash, hash_type);
5675 
5676 		skb_record_rx_queue(skb, queue);
5677 		napi_gro_receive(&ch->rx_napi, skb);
5678 		skb = NULL;
5679 
5680 		rx_packets++;
5681 		rx_bytes += len;
5682 		count++;
5683 	}
5684 
5685 	if (status & rx_not_ls || skb) {
5686 		rx_q->state_saved = true;
5687 		rx_q->state.skb = skb;
5688 		rx_q->state.error = error;
5689 		rx_q->state.len = len;
5690 	}
5691 
5692 	stmmac_finalize_xdp_rx(priv, xdp_status);
5693 
5694 	stmmac_rx_refill(priv, queue);
5695 
5696 	u64_stats_update_begin(&rxq_stats->napi_syncp);
5697 	u64_stats_add(&rxq_stats->napi.rx_packets, rx_packets);
5698 	u64_stats_add(&rxq_stats->napi.rx_bytes, rx_bytes);
5699 	u64_stats_add(&rxq_stats->napi.rx_pkt_n, count);
5700 	u64_stats_update_end(&rxq_stats->napi_syncp);
5701 
5702 	priv->xstats.rx_dropped += rx_dropped;
5703 	priv->xstats.rx_errors += rx_errors;
5704 
5705 	return count;
5706 }
5707 
5708 static int stmmac_napi_poll_rx(struct napi_struct *napi, int budget)
5709 {
5710 	struct stmmac_channel *ch =
5711 		container_of(napi, struct stmmac_channel, rx_napi);
5712 	struct stmmac_priv *priv = ch->priv_data;
5713 	struct stmmac_rxq_stats *rxq_stats;
5714 	u32 chan = ch->index;
5715 	int work_done;
5716 
5717 	rxq_stats = &priv->xstats.rxq_stats[chan];
5718 	u64_stats_update_begin(&rxq_stats->napi_syncp);
5719 	u64_stats_inc(&rxq_stats->napi.poll);
5720 	u64_stats_update_end(&rxq_stats->napi_syncp);
5721 
5722 	work_done = stmmac_rx(priv, budget, chan);
5723 	if (work_done < budget && napi_complete_done(napi, work_done)) {
5724 		unsigned long flags;
5725 
5726 		spin_lock_irqsave(&ch->lock, flags);
5727 		stmmac_enable_dma_irq(priv, priv->ioaddr, chan, 1, 0);
5728 		spin_unlock_irqrestore(&ch->lock, flags);
5729 	}
5730 
5731 	return work_done;
5732 }
5733 
5734 static int stmmac_napi_poll_tx(struct napi_struct *napi, int budget)
5735 {
5736 	struct stmmac_channel *ch =
5737 		container_of(napi, struct stmmac_channel, tx_napi);
5738 	struct stmmac_priv *priv = ch->priv_data;
5739 	struct stmmac_txq_stats *txq_stats;
5740 	bool pending_packets = false;
5741 	u32 chan = ch->index;
5742 	int work_done;
5743 
5744 	txq_stats = &priv->xstats.txq_stats[chan];
5745 	u64_stats_update_begin(&txq_stats->napi_syncp);
5746 	u64_stats_inc(&txq_stats->napi.poll);
5747 	u64_stats_update_end(&txq_stats->napi_syncp);
5748 
5749 	work_done = stmmac_tx_clean(priv, budget, chan, &pending_packets);
5750 	work_done = min(work_done, budget);
5751 
5752 	if (work_done < budget && napi_complete_done(napi, work_done)) {
5753 		unsigned long flags;
5754 
5755 		spin_lock_irqsave(&ch->lock, flags);
5756 		stmmac_enable_dma_irq(priv, priv->ioaddr, chan, 0, 1);
5757 		spin_unlock_irqrestore(&ch->lock, flags);
5758 	}
5759 
5760 	/* TX still have packet to handle, check if we need to arm tx timer */
5761 	if (pending_packets)
5762 		stmmac_tx_timer_arm(priv, chan);
5763 
5764 	return work_done;
5765 }
5766 
5767 static int stmmac_napi_poll_rxtx(struct napi_struct *napi, int budget)
5768 {
5769 	struct stmmac_channel *ch =
5770 		container_of(napi, struct stmmac_channel, rxtx_napi);
5771 	struct stmmac_priv *priv = ch->priv_data;
5772 	bool tx_pending_packets = false;
5773 	int rx_done, tx_done, rxtx_done;
5774 	struct stmmac_rxq_stats *rxq_stats;
5775 	struct stmmac_txq_stats *txq_stats;
5776 	u32 chan = ch->index;
5777 
5778 	rxq_stats = &priv->xstats.rxq_stats[chan];
5779 	u64_stats_update_begin(&rxq_stats->napi_syncp);
5780 	u64_stats_inc(&rxq_stats->napi.poll);
5781 	u64_stats_update_end(&rxq_stats->napi_syncp);
5782 
5783 	txq_stats = &priv->xstats.txq_stats[chan];
5784 	u64_stats_update_begin(&txq_stats->napi_syncp);
5785 	u64_stats_inc(&txq_stats->napi.poll);
5786 	u64_stats_update_end(&txq_stats->napi_syncp);
5787 
5788 	tx_done = stmmac_tx_clean(priv, budget, chan, &tx_pending_packets);
5789 	tx_done = min(tx_done, budget);
5790 
5791 	rx_done = stmmac_rx_zc(priv, budget, chan);
5792 
5793 	rxtx_done = max(tx_done, rx_done);
5794 
5795 	/* If either TX or RX work is not complete, return budget
5796 	 * and keep pooling
5797 	 */
5798 	if (rxtx_done >= budget)
5799 		return budget;
5800 
5801 	/* all work done, exit the polling mode */
5802 	if (napi_complete_done(napi, rxtx_done)) {
5803 		unsigned long flags;
5804 
5805 		spin_lock_irqsave(&ch->lock, flags);
5806 		/* Both RX and TX work done are compelte,
5807 		 * so enable both RX & TX IRQs.
5808 		 */
5809 		stmmac_enable_dma_irq(priv, priv->ioaddr, chan, 1, 1);
5810 		spin_unlock_irqrestore(&ch->lock, flags);
5811 	}
5812 
5813 	/* TX still have packet to handle, check if we need to arm tx timer */
5814 	if (tx_pending_packets)
5815 		stmmac_tx_timer_arm(priv, chan);
5816 
5817 	return min(rxtx_done, budget - 1);
5818 }
5819 
5820 /**
5821  *  stmmac_tx_timeout
5822  *  @dev : Pointer to net device structure
5823  *  @txqueue: the index of the hanging transmit queue
5824  *  Description: this function is called when a packet transmission fails to
5825  *   complete within a reasonable time. The driver will mark the error in the
5826  *   netdev structure and arrange for the device to be reset to a sane state
5827  *   in order to transmit a new packet.
5828  */
5829 static void stmmac_tx_timeout(struct net_device *dev, unsigned int txqueue)
5830 {
5831 	struct stmmac_priv *priv = netdev_priv(dev);
5832 
5833 	stmmac_global_err(priv);
5834 }
5835 
5836 /**
5837  *  stmmac_set_rx_mode - entry point for multicast addressing
5838  *  @dev : pointer to the device structure
5839  *  Description:
5840  *  This function is a driver entry point which gets called by the kernel
5841  *  whenever multicast addresses must be enabled/disabled.
5842  *  Return value:
5843  *  void.
5844  */
5845 static void stmmac_set_rx_mode(struct net_device *dev)
5846 {
5847 	struct stmmac_priv *priv = netdev_priv(dev);
5848 
5849 	stmmac_set_filter(priv, priv->hw, dev);
5850 }
5851 
5852 /**
5853  *  stmmac_change_mtu - entry point to change MTU size for the device.
5854  *  @dev : device pointer.
5855  *  @new_mtu : the new MTU size for the device.
5856  *  Description: the Maximum Transfer Unit (MTU) is used by the network layer
5857  *  to drive packet transmission. Ethernet has an MTU of 1500 octets
5858  *  (ETH_DATA_LEN). This value can be changed with ifconfig.
5859  *  Return value:
5860  *  0 on success and an appropriate (-)ve integer as defined in errno.h
5861  *  file on failure.
5862  */
5863 static int stmmac_change_mtu(struct net_device *dev, int new_mtu)
5864 {
5865 	struct stmmac_priv *priv = netdev_priv(dev);
5866 	int txfifosz = priv->plat->tx_fifo_size;
5867 	struct stmmac_dma_conf *dma_conf;
5868 	const int mtu = new_mtu;
5869 	int ret;
5870 
5871 	if (txfifosz == 0)
5872 		txfifosz = priv->dma_cap.tx_fifo_size;
5873 
5874 	txfifosz /= priv->plat->tx_queues_to_use;
5875 
5876 	if (stmmac_xdp_is_enabled(priv) && new_mtu > ETH_DATA_LEN) {
5877 		netdev_dbg(priv->dev, "Jumbo frames not supported for XDP\n");
5878 		return -EINVAL;
5879 	}
5880 
5881 	new_mtu = STMMAC_ALIGN(new_mtu);
5882 
5883 	/* If condition true, FIFO is too small or MTU too large */
5884 	if ((txfifosz < new_mtu) || (new_mtu > BUF_SIZE_16KiB))
5885 		return -EINVAL;
5886 
5887 	if (netif_running(dev)) {
5888 		netdev_dbg(priv->dev, "restarting interface to change its MTU\n");
5889 		/* Try to allocate the new DMA conf with the new mtu */
5890 		dma_conf = stmmac_setup_dma_desc(priv, mtu);
5891 		if (IS_ERR(dma_conf)) {
5892 			netdev_err(priv->dev, "failed allocating new dma conf for new MTU %d\n",
5893 				   mtu);
5894 			return PTR_ERR(dma_conf);
5895 		}
5896 
5897 		stmmac_release(dev);
5898 
5899 		ret = __stmmac_open(dev, dma_conf);
5900 		if (ret) {
5901 			free_dma_desc_resources(priv, dma_conf);
5902 			kfree(dma_conf);
5903 			netdev_err(priv->dev, "failed reopening the interface after MTU change\n");
5904 			return ret;
5905 		}
5906 
5907 		kfree(dma_conf);
5908 
5909 		stmmac_set_rx_mode(dev);
5910 	}
5911 
5912 	WRITE_ONCE(dev->mtu, mtu);
5913 	netdev_update_features(dev);
5914 
5915 	return 0;
5916 }
5917 
5918 static netdev_features_t stmmac_fix_features(struct net_device *dev,
5919 					     netdev_features_t features)
5920 {
5921 	struct stmmac_priv *priv = netdev_priv(dev);
5922 
5923 	if (priv->plat->rx_coe == STMMAC_RX_COE_NONE)
5924 		features &= ~NETIF_F_RXCSUM;
5925 
5926 	if (!priv->plat->tx_coe)
5927 		features &= ~NETIF_F_CSUM_MASK;
5928 
5929 	/* Some GMAC devices have a bugged Jumbo frame support that
5930 	 * needs to have the Tx COE disabled for oversized frames
5931 	 * (due to limited buffer sizes). In this case we disable
5932 	 * the TX csum insertion in the TDES and not use SF.
5933 	 */
5934 	if (priv->plat->bugged_jumbo && (dev->mtu > ETH_DATA_LEN))
5935 		features &= ~NETIF_F_CSUM_MASK;
5936 
5937 	/* Disable tso if asked by ethtool */
5938 	if ((priv->plat->flags & STMMAC_FLAG_TSO_EN) && (priv->dma_cap.tsoen)) {
5939 		if (features & NETIF_F_TSO)
5940 			priv->tso = true;
5941 		else
5942 			priv->tso = false;
5943 	}
5944 
5945 	return features;
5946 }
5947 
5948 static int stmmac_set_features(struct net_device *netdev,
5949 			       netdev_features_t features)
5950 {
5951 	struct stmmac_priv *priv = netdev_priv(netdev);
5952 
5953 	/* Keep the COE Type in case of csum is supporting */
5954 	if (features & NETIF_F_RXCSUM)
5955 		priv->hw->rx_csum = priv->plat->rx_coe;
5956 	else
5957 		priv->hw->rx_csum = 0;
5958 	/* No check needed because rx_coe has been set before and it will be
5959 	 * fixed in case of issue.
5960 	 */
5961 	stmmac_rx_ipc(priv, priv->hw);
5962 
5963 	if (priv->sph_cap) {
5964 		bool sph_en = (priv->hw->rx_csum > 0) && priv->sph;
5965 		u32 chan;
5966 
5967 		for (chan = 0; chan < priv->plat->rx_queues_to_use; chan++)
5968 			stmmac_enable_sph(priv, priv->ioaddr, sph_en, chan);
5969 	}
5970 
5971 	if (features & NETIF_F_HW_VLAN_CTAG_RX)
5972 		priv->hw->hw_vlan_en = true;
5973 	else
5974 		priv->hw->hw_vlan_en = false;
5975 
5976 	stmmac_set_hw_vlan_mode(priv, priv->hw);
5977 
5978 	return 0;
5979 }
5980 
5981 static void stmmac_fpe_event_status(struct stmmac_priv *priv, int status)
5982 {
5983 	struct stmmac_fpe_cfg *fpe_cfg = priv->plat->fpe_cfg;
5984 	enum stmmac_fpe_state *lo_state = &fpe_cfg->lo_fpe_state;
5985 	enum stmmac_fpe_state *lp_state = &fpe_cfg->lp_fpe_state;
5986 	bool *hs_enable = &fpe_cfg->hs_enable;
5987 
5988 	if (status == FPE_EVENT_UNKNOWN || !*hs_enable)
5989 		return;
5990 
5991 	/* If LP has sent verify mPacket, LP is FPE capable */
5992 	if ((status & FPE_EVENT_RVER) == FPE_EVENT_RVER) {
5993 		if (*lp_state < FPE_STATE_CAPABLE)
5994 			*lp_state = FPE_STATE_CAPABLE;
5995 
5996 		/* If user has requested FPE enable, quickly response */
5997 		if (*hs_enable)
5998 			stmmac_fpe_send_mpacket(priv, priv->ioaddr,
5999 						fpe_cfg,
6000 						MPACKET_RESPONSE);
6001 	}
6002 
6003 	/* If Local has sent verify mPacket, Local is FPE capable */
6004 	if ((status & FPE_EVENT_TVER) == FPE_EVENT_TVER) {
6005 		if (*lo_state < FPE_STATE_CAPABLE)
6006 			*lo_state = FPE_STATE_CAPABLE;
6007 	}
6008 
6009 	/* If LP has sent response mPacket, LP is entering FPE ON */
6010 	if ((status & FPE_EVENT_RRSP) == FPE_EVENT_RRSP)
6011 		*lp_state = FPE_STATE_ENTERING_ON;
6012 
6013 	/* If Local has sent response mPacket, Local is entering FPE ON */
6014 	if ((status & FPE_EVENT_TRSP) == FPE_EVENT_TRSP)
6015 		*lo_state = FPE_STATE_ENTERING_ON;
6016 
6017 	if (!test_bit(__FPE_REMOVING, &priv->fpe_task_state) &&
6018 	    !test_and_set_bit(__FPE_TASK_SCHED, &priv->fpe_task_state) &&
6019 	    priv->fpe_wq) {
6020 		queue_work(priv->fpe_wq, &priv->fpe_task);
6021 	}
6022 }
6023 
6024 static void stmmac_common_interrupt(struct stmmac_priv *priv)
6025 {
6026 	u32 rx_cnt = priv->plat->rx_queues_to_use;
6027 	u32 tx_cnt = priv->plat->tx_queues_to_use;
6028 	u32 queues_count;
6029 	u32 queue;
6030 	bool xmac;
6031 
6032 	xmac = priv->plat->has_gmac4 || priv->plat->has_xgmac;
6033 	queues_count = (rx_cnt > tx_cnt) ? rx_cnt : tx_cnt;
6034 
6035 	if (priv->irq_wake)
6036 		pm_wakeup_event(priv->device, 0);
6037 
6038 	if (priv->dma_cap.estsel)
6039 		stmmac_est_irq_status(priv, priv, priv->dev,
6040 				      &priv->xstats, tx_cnt);
6041 
6042 	if (priv->dma_cap.fpesel) {
6043 		int status = stmmac_fpe_irq_status(priv, priv->ioaddr,
6044 						   priv->dev);
6045 
6046 		stmmac_fpe_event_status(priv, status);
6047 	}
6048 
6049 	/* To handle GMAC own interrupts */
6050 	if ((priv->plat->has_gmac) || xmac) {
6051 		int status = stmmac_host_irq_status(priv, priv->hw, &priv->xstats);
6052 
6053 		if (unlikely(status)) {
6054 			/* For LPI we need to save the tx status */
6055 			if (status & CORE_IRQ_TX_PATH_IN_LPI_MODE)
6056 				priv->tx_path_in_lpi_mode = true;
6057 			if (status & CORE_IRQ_TX_PATH_EXIT_LPI_MODE)
6058 				priv->tx_path_in_lpi_mode = false;
6059 		}
6060 
6061 		for (queue = 0; queue < queues_count; queue++)
6062 			stmmac_host_mtl_irq_status(priv, priv->hw, queue);
6063 
6064 		/* PCS link status */
6065 		if (priv->hw->pcs &&
6066 		    !(priv->plat->flags & STMMAC_FLAG_HAS_INTEGRATED_PCS)) {
6067 			if (priv->xstats.pcs_link)
6068 				netif_carrier_on(priv->dev);
6069 			else
6070 				netif_carrier_off(priv->dev);
6071 		}
6072 
6073 		stmmac_timestamp_interrupt(priv, priv);
6074 	}
6075 }
6076 
6077 /**
6078  *  stmmac_interrupt - main ISR
6079  *  @irq: interrupt number.
6080  *  @dev_id: to pass the net device pointer.
6081  *  Description: this is the main driver interrupt service routine.
6082  *  It can call:
6083  *  o DMA service routine (to manage incoming frame reception and transmission
6084  *    status)
6085  *  o Core interrupts to manage: remote wake-up, management counter, LPI
6086  *    interrupts.
6087  */
6088 static irqreturn_t stmmac_interrupt(int irq, void *dev_id)
6089 {
6090 	struct net_device *dev = (struct net_device *)dev_id;
6091 	struct stmmac_priv *priv = netdev_priv(dev);
6092 
6093 	/* Check if adapter is up */
6094 	if (test_bit(STMMAC_DOWN, &priv->state))
6095 		return IRQ_HANDLED;
6096 
6097 	/* Check ASP error if it isn't delivered via an individual IRQ */
6098 	if (priv->sfty_irq <= 0 && stmmac_safety_feat_interrupt(priv))
6099 		return IRQ_HANDLED;
6100 
6101 	/* To handle Common interrupts */
6102 	stmmac_common_interrupt(priv);
6103 
6104 	/* To handle DMA interrupts */
6105 	stmmac_dma_interrupt(priv);
6106 
6107 	return IRQ_HANDLED;
6108 }
6109 
6110 static irqreturn_t stmmac_mac_interrupt(int irq, void *dev_id)
6111 {
6112 	struct net_device *dev = (struct net_device *)dev_id;
6113 	struct stmmac_priv *priv = netdev_priv(dev);
6114 
6115 	/* Check if adapter is up */
6116 	if (test_bit(STMMAC_DOWN, &priv->state))
6117 		return IRQ_HANDLED;
6118 
6119 	/* To handle Common interrupts */
6120 	stmmac_common_interrupt(priv);
6121 
6122 	return IRQ_HANDLED;
6123 }
6124 
6125 static irqreturn_t stmmac_safety_interrupt(int irq, void *dev_id)
6126 {
6127 	struct net_device *dev = (struct net_device *)dev_id;
6128 	struct stmmac_priv *priv = netdev_priv(dev);
6129 
6130 	/* Check if adapter is up */
6131 	if (test_bit(STMMAC_DOWN, &priv->state))
6132 		return IRQ_HANDLED;
6133 
6134 	/* Check if a fatal error happened */
6135 	stmmac_safety_feat_interrupt(priv);
6136 
6137 	return IRQ_HANDLED;
6138 }
6139 
6140 static irqreturn_t stmmac_msi_intr_tx(int irq, void *data)
6141 {
6142 	struct stmmac_tx_queue *tx_q = (struct stmmac_tx_queue *)data;
6143 	struct stmmac_dma_conf *dma_conf;
6144 	int chan = tx_q->queue_index;
6145 	struct stmmac_priv *priv;
6146 	int status;
6147 
6148 	dma_conf = container_of(tx_q, struct stmmac_dma_conf, tx_queue[chan]);
6149 	priv = container_of(dma_conf, struct stmmac_priv, dma_conf);
6150 
6151 	/* Check if adapter is up */
6152 	if (test_bit(STMMAC_DOWN, &priv->state))
6153 		return IRQ_HANDLED;
6154 
6155 	status = stmmac_napi_check(priv, chan, DMA_DIR_TX);
6156 
6157 	if (unlikely(status & tx_hard_error_bump_tc)) {
6158 		/* Try to bump up the dma threshold on this failure */
6159 		stmmac_bump_dma_threshold(priv, chan);
6160 	} else if (unlikely(status == tx_hard_error)) {
6161 		stmmac_tx_err(priv, chan);
6162 	}
6163 
6164 	return IRQ_HANDLED;
6165 }
6166 
6167 static irqreturn_t stmmac_msi_intr_rx(int irq, void *data)
6168 {
6169 	struct stmmac_rx_queue *rx_q = (struct stmmac_rx_queue *)data;
6170 	struct stmmac_dma_conf *dma_conf;
6171 	int chan = rx_q->queue_index;
6172 	struct stmmac_priv *priv;
6173 
6174 	dma_conf = container_of(rx_q, struct stmmac_dma_conf, rx_queue[chan]);
6175 	priv = container_of(dma_conf, struct stmmac_priv, dma_conf);
6176 
6177 	/* Check if adapter is up */
6178 	if (test_bit(STMMAC_DOWN, &priv->state))
6179 		return IRQ_HANDLED;
6180 
6181 	stmmac_napi_check(priv, chan, DMA_DIR_RX);
6182 
6183 	return IRQ_HANDLED;
6184 }
6185 
6186 /**
6187  *  stmmac_ioctl - Entry point for the Ioctl
6188  *  @dev: Device pointer.
6189  *  @rq: An IOCTL specefic structure, that can contain a pointer to
6190  *  a proprietary structure used to pass information to the driver.
6191  *  @cmd: IOCTL command
6192  *  Description:
6193  *  Currently it supports the phy_mii_ioctl(...) and HW time stamping.
6194  */
6195 static int stmmac_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
6196 {
6197 	struct stmmac_priv *priv = netdev_priv (dev);
6198 	int ret = -EOPNOTSUPP;
6199 
6200 	if (!netif_running(dev))
6201 		return -EINVAL;
6202 
6203 	switch (cmd) {
6204 	case SIOCGMIIPHY:
6205 	case SIOCGMIIREG:
6206 	case SIOCSMIIREG:
6207 		ret = phylink_mii_ioctl(priv->phylink, rq, cmd);
6208 		break;
6209 	case SIOCSHWTSTAMP:
6210 		ret = stmmac_hwtstamp_set(dev, rq);
6211 		break;
6212 	case SIOCGHWTSTAMP:
6213 		ret = stmmac_hwtstamp_get(dev, rq);
6214 		break;
6215 	default:
6216 		break;
6217 	}
6218 
6219 	return ret;
6220 }
6221 
6222 static int stmmac_setup_tc_block_cb(enum tc_setup_type type, void *type_data,
6223 				    void *cb_priv)
6224 {
6225 	struct stmmac_priv *priv = cb_priv;
6226 	int ret = -EOPNOTSUPP;
6227 
6228 	if (!tc_cls_can_offload_and_chain0(priv->dev, type_data))
6229 		return ret;
6230 
6231 	__stmmac_disable_all_queues(priv);
6232 
6233 	switch (type) {
6234 	case TC_SETUP_CLSU32:
6235 		ret = stmmac_tc_setup_cls_u32(priv, priv, type_data);
6236 		break;
6237 	case TC_SETUP_CLSFLOWER:
6238 		ret = stmmac_tc_setup_cls(priv, priv, type_data);
6239 		break;
6240 	default:
6241 		break;
6242 	}
6243 
6244 	stmmac_enable_all_queues(priv);
6245 	return ret;
6246 }
6247 
6248 static LIST_HEAD(stmmac_block_cb_list);
6249 
6250 static int stmmac_setup_tc(struct net_device *ndev, enum tc_setup_type type,
6251 			   void *type_data)
6252 {
6253 	struct stmmac_priv *priv = netdev_priv(ndev);
6254 
6255 	switch (type) {
6256 	case TC_QUERY_CAPS:
6257 		return stmmac_tc_query_caps(priv, priv, type_data);
6258 	case TC_SETUP_BLOCK:
6259 		return flow_block_cb_setup_simple(type_data,
6260 						  &stmmac_block_cb_list,
6261 						  stmmac_setup_tc_block_cb,
6262 						  priv, priv, true);
6263 	case TC_SETUP_QDISC_CBS:
6264 		return stmmac_tc_setup_cbs(priv, priv, type_data);
6265 	case TC_SETUP_QDISC_TAPRIO:
6266 		return stmmac_tc_setup_taprio(priv, priv, type_data);
6267 	case TC_SETUP_QDISC_ETF:
6268 		return stmmac_tc_setup_etf(priv, priv, type_data);
6269 	default:
6270 		return -EOPNOTSUPP;
6271 	}
6272 }
6273 
6274 static u16 stmmac_select_queue(struct net_device *dev, struct sk_buff *skb,
6275 			       struct net_device *sb_dev)
6276 {
6277 	int gso = skb_shinfo(skb)->gso_type;
6278 
6279 	if (gso & (SKB_GSO_TCPV4 | SKB_GSO_TCPV6 | SKB_GSO_UDP_L4)) {
6280 		/*
6281 		 * There is no way to determine the number of TSO/USO
6282 		 * capable Queues. Let's use always the Queue 0
6283 		 * because if TSO/USO is supported then at least this
6284 		 * one will be capable.
6285 		 */
6286 		return 0;
6287 	}
6288 
6289 	return netdev_pick_tx(dev, skb, NULL) % dev->real_num_tx_queues;
6290 }
6291 
6292 static int stmmac_set_mac_address(struct net_device *ndev, void *addr)
6293 {
6294 	struct stmmac_priv *priv = netdev_priv(ndev);
6295 	int ret = 0;
6296 
6297 	ret = pm_runtime_resume_and_get(priv->device);
6298 	if (ret < 0)
6299 		return ret;
6300 
6301 	ret = eth_mac_addr(ndev, addr);
6302 	if (ret)
6303 		goto set_mac_error;
6304 
6305 	stmmac_set_umac_addr(priv, priv->hw, ndev->dev_addr, 0);
6306 
6307 set_mac_error:
6308 	pm_runtime_put(priv->device);
6309 
6310 	return ret;
6311 }
6312 
6313 #ifdef CONFIG_DEBUG_FS
6314 static struct dentry *stmmac_fs_dir;
6315 
6316 static void sysfs_display_ring(void *head, int size, int extend_desc,
6317 			       struct seq_file *seq, dma_addr_t dma_phy_addr)
6318 {
6319 	struct dma_extended_desc *ep = (struct dma_extended_desc *)head;
6320 	struct dma_desc *p = (struct dma_desc *)head;
6321 	unsigned int desc_size;
6322 	dma_addr_t dma_addr;
6323 	int i;
6324 
6325 	desc_size = extend_desc ? sizeof(*ep) : sizeof(*p);
6326 	for (i = 0; i < size; i++) {
6327 		dma_addr = dma_phy_addr + i * desc_size;
6328 		seq_printf(seq, "%d [%pad]: 0x%x 0x%x 0x%x 0x%x\n",
6329 				i, &dma_addr,
6330 				le32_to_cpu(p->des0), le32_to_cpu(p->des1),
6331 				le32_to_cpu(p->des2), le32_to_cpu(p->des3));
6332 		if (extend_desc)
6333 			p = &(++ep)->basic;
6334 		else
6335 			p++;
6336 	}
6337 }
6338 
6339 static int stmmac_rings_status_show(struct seq_file *seq, void *v)
6340 {
6341 	struct net_device *dev = seq->private;
6342 	struct stmmac_priv *priv = netdev_priv(dev);
6343 	u32 rx_count = priv->plat->rx_queues_to_use;
6344 	u32 tx_count = priv->plat->tx_queues_to_use;
6345 	u32 queue;
6346 
6347 	if ((dev->flags & IFF_UP) == 0)
6348 		return 0;
6349 
6350 	for (queue = 0; queue < rx_count; queue++) {
6351 		struct stmmac_rx_queue *rx_q = &priv->dma_conf.rx_queue[queue];
6352 
6353 		seq_printf(seq, "RX Queue %d:\n", queue);
6354 
6355 		if (priv->extend_desc) {
6356 			seq_printf(seq, "Extended descriptor ring:\n");
6357 			sysfs_display_ring((void *)rx_q->dma_erx,
6358 					   priv->dma_conf.dma_rx_size, 1, seq, rx_q->dma_rx_phy);
6359 		} else {
6360 			seq_printf(seq, "Descriptor ring:\n");
6361 			sysfs_display_ring((void *)rx_q->dma_rx,
6362 					   priv->dma_conf.dma_rx_size, 0, seq, rx_q->dma_rx_phy);
6363 		}
6364 	}
6365 
6366 	for (queue = 0; queue < tx_count; queue++) {
6367 		struct stmmac_tx_queue *tx_q = &priv->dma_conf.tx_queue[queue];
6368 
6369 		seq_printf(seq, "TX Queue %d:\n", queue);
6370 
6371 		if (priv->extend_desc) {
6372 			seq_printf(seq, "Extended descriptor ring:\n");
6373 			sysfs_display_ring((void *)tx_q->dma_etx,
6374 					   priv->dma_conf.dma_tx_size, 1, seq, tx_q->dma_tx_phy);
6375 		} else if (!(tx_q->tbs & STMMAC_TBS_AVAIL)) {
6376 			seq_printf(seq, "Descriptor ring:\n");
6377 			sysfs_display_ring((void *)tx_q->dma_tx,
6378 					   priv->dma_conf.dma_tx_size, 0, seq, tx_q->dma_tx_phy);
6379 		}
6380 	}
6381 
6382 	return 0;
6383 }
6384 DEFINE_SHOW_ATTRIBUTE(stmmac_rings_status);
6385 
6386 static int stmmac_dma_cap_show(struct seq_file *seq, void *v)
6387 {
6388 	static const char * const dwxgmac_timestamp_source[] = {
6389 		"None",
6390 		"Internal",
6391 		"External",
6392 		"Both",
6393 	};
6394 	static const char * const dwxgmac_safety_feature_desc[] = {
6395 		"No",
6396 		"All Safety Features with ECC and Parity",
6397 		"All Safety Features without ECC or Parity",
6398 		"All Safety Features with Parity Only",
6399 		"ECC Only",
6400 		"UNDEFINED",
6401 		"UNDEFINED",
6402 		"UNDEFINED",
6403 	};
6404 	struct net_device *dev = seq->private;
6405 	struct stmmac_priv *priv = netdev_priv(dev);
6406 
6407 	if (!priv->hw_cap_support) {
6408 		seq_printf(seq, "DMA HW features not supported\n");
6409 		return 0;
6410 	}
6411 
6412 	seq_printf(seq, "==============================\n");
6413 	seq_printf(seq, "\tDMA HW features\n");
6414 	seq_printf(seq, "==============================\n");
6415 
6416 	seq_printf(seq, "\t10/100 Mbps: %s\n",
6417 		   (priv->dma_cap.mbps_10_100) ? "Y" : "N");
6418 	seq_printf(seq, "\t1000 Mbps: %s\n",
6419 		   (priv->dma_cap.mbps_1000) ? "Y" : "N");
6420 	seq_printf(seq, "\tHalf duplex: %s\n",
6421 		   (priv->dma_cap.half_duplex) ? "Y" : "N");
6422 	if (priv->plat->has_xgmac) {
6423 		seq_printf(seq,
6424 			   "\tNumber of Additional MAC address registers: %d\n",
6425 			   priv->dma_cap.multi_addr);
6426 	} else {
6427 		seq_printf(seq, "\tHash Filter: %s\n",
6428 			   (priv->dma_cap.hash_filter) ? "Y" : "N");
6429 		seq_printf(seq, "\tMultiple MAC address registers: %s\n",
6430 			   (priv->dma_cap.multi_addr) ? "Y" : "N");
6431 	}
6432 	seq_printf(seq, "\tPCS (TBI/SGMII/RTBI PHY interfaces): %s\n",
6433 		   (priv->dma_cap.pcs) ? "Y" : "N");
6434 	seq_printf(seq, "\tSMA (MDIO) Interface: %s\n",
6435 		   (priv->dma_cap.sma_mdio) ? "Y" : "N");
6436 	seq_printf(seq, "\tPMT Remote wake up: %s\n",
6437 		   (priv->dma_cap.pmt_remote_wake_up) ? "Y" : "N");
6438 	seq_printf(seq, "\tPMT Magic Frame: %s\n",
6439 		   (priv->dma_cap.pmt_magic_frame) ? "Y" : "N");
6440 	seq_printf(seq, "\tRMON module: %s\n",
6441 		   (priv->dma_cap.rmon) ? "Y" : "N");
6442 	seq_printf(seq, "\tIEEE 1588-2002 Time Stamp: %s\n",
6443 		   (priv->dma_cap.time_stamp) ? "Y" : "N");
6444 	seq_printf(seq, "\tIEEE 1588-2008 Advanced Time Stamp: %s\n",
6445 		   (priv->dma_cap.atime_stamp) ? "Y" : "N");
6446 	if (priv->plat->has_xgmac)
6447 		seq_printf(seq, "\tTimestamp System Time Source: %s\n",
6448 			   dwxgmac_timestamp_source[priv->dma_cap.tssrc]);
6449 	seq_printf(seq, "\t802.3az - Energy-Efficient Ethernet (EEE): %s\n",
6450 		   (priv->dma_cap.eee) ? "Y" : "N");
6451 	seq_printf(seq, "\tAV features: %s\n", (priv->dma_cap.av) ? "Y" : "N");
6452 	seq_printf(seq, "\tChecksum Offload in TX: %s\n",
6453 		   (priv->dma_cap.tx_coe) ? "Y" : "N");
6454 	if (priv->synopsys_id >= DWMAC_CORE_4_00 ||
6455 	    priv->plat->has_xgmac) {
6456 		seq_printf(seq, "\tIP Checksum Offload in RX: %s\n",
6457 			   (priv->dma_cap.rx_coe) ? "Y" : "N");
6458 	} else {
6459 		seq_printf(seq, "\tIP Checksum Offload (type1) in RX: %s\n",
6460 			   (priv->dma_cap.rx_coe_type1) ? "Y" : "N");
6461 		seq_printf(seq, "\tIP Checksum Offload (type2) in RX: %s\n",
6462 			   (priv->dma_cap.rx_coe_type2) ? "Y" : "N");
6463 		seq_printf(seq, "\tRXFIFO > 2048bytes: %s\n",
6464 			   (priv->dma_cap.rxfifo_over_2048) ? "Y" : "N");
6465 	}
6466 	seq_printf(seq, "\tNumber of Additional RX channel: %d\n",
6467 		   priv->dma_cap.number_rx_channel);
6468 	seq_printf(seq, "\tNumber of Additional TX channel: %d\n",
6469 		   priv->dma_cap.number_tx_channel);
6470 	seq_printf(seq, "\tNumber of Additional RX queues: %d\n",
6471 		   priv->dma_cap.number_rx_queues);
6472 	seq_printf(seq, "\tNumber of Additional TX queues: %d\n",
6473 		   priv->dma_cap.number_tx_queues);
6474 	seq_printf(seq, "\tEnhanced descriptors: %s\n",
6475 		   (priv->dma_cap.enh_desc) ? "Y" : "N");
6476 	seq_printf(seq, "\tTX Fifo Size: %d\n", priv->dma_cap.tx_fifo_size);
6477 	seq_printf(seq, "\tRX Fifo Size: %d\n", priv->dma_cap.rx_fifo_size);
6478 	seq_printf(seq, "\tHash Table Size: %lu\n", priv->dma_cap.hash_tb_sz ?
6479 		   (BIT(priv->dma_cap.hash_tb_sz) << 5) : 0);
6480 	seq_printf(seq, "\tTSO: %s\n", priv->dma_cap.tsoen ? "Y" : "N");
6481 	seq_printf(seq, "\tNumber of PPS Outputs: %d\n",
6482 		   priv->dma_cap.pps_out_num);
6483 	seq_printf(seq, "\tSafety Features: %s\n",
6484 		   dwxgmac_safety_feature_desc[priv->dma_cap.asp]);
6485 	seq_printf(seq, "\tFlexible RX Parser: %s\n",
6486 		   priv->dma_cap.frpsel ? "Y" : "N");
6487 	seq_printf(seq, "\tEnhanced Addressing: %d\n",
6488 		   priv->dma_cap.host_dma_width);
6489 	seq_printf(seq, "\tReceive Side Scaling: %s\n",
6490 		   priv->dma_cap.rssen ? "Y" : "N");
6491 	seq_printf(seq, "\tVLAN Hash Filtering: %s\n",
6492 		   priv->dma_cap.vlhash ? "Y" : "N");
6493 	seq_printf(seq, "\tSplit Header: %s\n",
6494 		   priv->dma_cap.sphen ? "Y" : "N");
6495 	seq_printf(seq, "\tVLAN TX Insertion: %s\n",
6496 		   priv->dma_cap.vlins ? "Y" : "N");
6497 	seq_printf(seq, "\tDouble VLAN: %s\n",
6498 		   priv->dma_cap.dvlan ? "Y" : "N");
6499 	seq_printf(seq, "\tNumber of L3/L4 Filters: %d\n",
6500 		   priv->dma_cap.l3l4fnum);
6501 	seq_printf(seq, "\tARP Offloading: %s\n",
6502 		   priv->dma_cap.arpoffsel ? "Y" : "N");
6503 	seq_printf(seq, "\tEnhancements to Scheduled Traffic (EST): %s\n",
6504 		   priv->dma_cap.estsel ? "Y" : "N");
6505 	seq_printf(seq, "\tFrame Preemption (FPE): %s\n",
6506 		   priv->dma_cap.fpesel ? "Y" : "N");
6507 	seq_printf(seq, "\tTime-Based Scheduling (TBS): %s\n",
6508 		   priv->dma_cap.tbssel ? "Y" : "N");
6509 	seq_printf(seq, "\tNumber of DMA Channels Enabled for TBS: %d\n",
6510 		   priv->dma_cap.tbs_ch_num);
6511 	seq_printf(seq, "\tPer-Stream Filtering: %s\n",
6512 		   priv->dma_cap.sgfsel ? "Y" : "N");
6513 	seq_printf(seq, "\tTX Timestamp FIFO Depth: %lu\n",
6514 		   BIT(priv->dma_cap.ttsfd) >> 1);
6515 	seq_printf(seq, "\tNumber of Traffic Classes: %d\n",
6516 		   priv->dma_cap.numtc);
6517 	seq_printf(seq, "\tDCB Feature: %s\n",
6518 		   priv->dma_cap.dcben ? "Y" : "N");
6519 	seq_printf(seq, "\tIEEE 1588 High Word Register: %s\n",
6520 		   priv->dma_cap.advthword ? "Y" : "N");
6521 	seq_printf(seq, "\tPTP Offload: %s\n",
6522 		   priv->dma_cap.ptoen ? "Y" : "N");
6523 	seq_printf(seq, "\tOne-Step Timestamping: %s\n",
6524 		   priv->dma_cap.osten ? "Y" : "N");
6525 	seq_printf(seq, "\tPriority-Based Flow Control: %s\n",
6526 		   priv->dma_cap.pfcen ? "Y" : "N");
6527 	seq_printf(seq, "\tNumber of Flexible RX Parser Instructions: %lu\n",
6528 		   BIT(priv->dma_cap.frpes) << 6);
6529 	seq_printf(seq, "\tNumber of Flexible RX Parser Parsable Bytes: %lu\n",
6530 		   BIT(priv->dma_cap.frpbs) << 6);
6531 	seq_printf(seq, "\tParallel Instruction Processor Engines: %d\n",
6532 		   priv->dma_cap.frppipe_num);
6533 	seq_printf(seq, "\tNumber of Extended VLAN Tag Filters: %lu\n",
6534 		   priv->dma_cap.nrvf_num ?
6535 		   (BIT(priv->dma_cap.nrvf_num) << 1) : 0);
6536 	seq_printf(seq, "\tWidth of the Time Interval Field in GCL: %d\n",
6537 		   priv->dma_cap.estwid ? 4 * priv->dma_cap.estwid + 12 : 0);
6538 	seq_printf(seq, "\tDepth of GCL: %lu\n",
6539 		   priv->dma_cap.estdep ? (BIT(priv->dma_cap.estdep) << 5) : 0);
6540 	seq_printf(seq, "\tQueue/Channel-Based VLAN Tag Insertion on TX: %s\n",
6541 		   priv->dma_cap.cbtisel ? "Y" : "N");
6542 	seq_printf(seq, "\tNumber of Auxiliary Snapshot Inputs: %d\n",
6543 		   priv->dma_cap.aux_snapshot_n);
6544 	seq_printf(seq, "\tOne-Step Timestamping for PTP over UDP/IP: %s\n",
6545 		   priv->dma_cap.pou_ost_en ? "Y" : "N");
6546 	seq_printf(seq, "\tEnhanced DMA: %s\n",
6547 		   priv->dma_cap.edma ? "Y" : "N");
6548 	seq_printf(seq, "\tDifferent Descriptor Cache: %s\n",
6549 		   priv->dma_cap.ediffc ? "Y" : "N");
6550 	seq_printf(seq, "\tVxLAN/NVGRE: %s\n",
6551 		   priv->dma_cap.vxn ? "Y" : "N");
6552 	seq_printf(seq, "\tDebug Memory Interface: %s\n",
6553 		   priv->dma_cap.dbgmem ? "Y" : "N");
6554 	seq_printf(seq, "\tNumber of Policing Counters: %lu\n",
6555 		   priv->dma_cap.pcsel ? BIT(priv->dma_cap.pcsel + 3) : 0);
6556 	return 0;
6557 }
6558 DEFINE_SHOW_ATTRIBUTE(stmmac_dma_cap);
6559 
6560 /* Use network device events to rename debugfs file entries.
6561  */
6562 static int stmmac_device_event(struct notifier_block *unused,
6563 			       unsigned long event, void *ptr)
6564 {
6565 	struct net_device *dev = netdev_notifier_info_to_dev(ptr);
6566 	struct stmmac_priv *priv = netdev_priv(dev);
6567 
6568 	if (dev->netdev_ops != &stmmac_netdev_ops)
6569 		goto done;
6570 
6571 	switch (event) {
6572 	case NETDEV_CHANGENAME:
6573 		if (priv->dbgfs_dir)
6574 			priv->dbgfs_dir = debugfs_rename(stmmac_fs_dir,
6575 							 priv->dbgfs_dir,
6576 							 stmmac_fs_dir,
6577 							 dev->name);
6578 		break;
6579 	}
6580 done:
6581 	return NOTIFY_DONE;
6582 }
6583 
6584 static struct notifier_block stmmac_notifier = {
6585 	.notifier_call = stmmac_device_event,
6586 };
6587 
6588 static void stmmac_init_fs(struct net_device *dev)
6589 {
6590 	struct stmmac_priv *priv = netdev_priv(dev);
6591 
6592 	rtnl_lock();
6593 
6594 	/* Create per netdev entries */
6595 	priv->dbgfs_dir = debugfs_create_dir(dev->name, stmmac_fs_dir);
6596 
6597 	/* Entry to report DMA RX/TX rings */
6598 	debugfs_create_file("descriptors_status", 0444, priv->dbgfs_dir, dev,
6599 			    &stmmac_rings_status_fops);
6600 
6601 	/* Entry to report the DMA HW features */
6602 	debugfs_create_file("dma_cap", 0444, priv->dbgfs_dir, dev,
6603 			    &stmmac_dma_cap_fops);
6604 
6605 	rtnl_unlock();
6606 }
6607 
6608 static void stmmac_exit_fs(struct net_device *dev)
6609 {
6610 	struct stmmac_priv *priv = netdev_priv(dev);
6611 
6612 	debugfs_remove_recursive(priv->dbgfs_dir);
6613 }
6614 #endif /* CONFIG_DEBUG_FS */
6615 
6616 static u32 stmmac_vid_crc32_le(__le16 vid_le)
6617 {
6618 	unsigned char *data = (unsigned char *)&vid_le;
6619 	unsigned char data_byte = 0;
6620 	u32 crc = ~0x0;
6621 	u32 temp = 0;
6622 	int i, bits;
6623 
6624 	bits = get_bitmask_order(VLAN_VID_MASK);
6625 	for (i = 0; i < bits; i++) {
6626 		if ((i % 8) == 0)
6627 			data_byte = data[i / 8];
6628 
6629 		temp = ((crc & 1) ^ data_byte) & 1;
6630 		crc >>= 1;
6631 		data_byte >>= 1;
6632 
6633 		if (temp)
6634 			crc ^= 0xedb88320;
6635 	}
6636 
6637 	return crc;
6638 }
6639 
6640 static int stmmac_vlan_update(struct stmmac_priv *priv, bool is_double)
6641 {
6642 	u32 crc, hash = 0;
6643 	__le16 pmatch = 0;
6644 	int count = 0;
6645 	u16 vid = 0;
6646 
6647 	for_each_set_bit(vid, priv->active_vlans, VLAN_N_VID) {
6648 		__le16 vid_le = cpu_to_le16(vid);
6649 		crc = bitrev32(~stmmac_vid_crc32_le(vid_le)) >> 28;
6650 		hash |= (1 << crc);
6651 		count++;
6652 	}
6653 
6654 	if (!priv->dma_cap.vlhash) {
6655 		if (count > 2) /* VID = 0 always passes filter */
6656 			return -EOPNOTSUPP;
6657 
6658 		pmatch = cpu_to_le16(vid);
6659 		hash = 0;
6660 	}
6661 
6662 	return stmmac_update_vlan_hash(priv, priv->hw, hash, pmatch, is_double);
6663 }
6664 
6665 static int stmmac_vlan_rx_add_vid(struct net_device *ndev, __be16 proto, u16 vid)
6666 {
6667 	struct stmmac_priv *priv = netdev_priv(ndev);
6668 	bool is_double = false;
6669 	int ret;
6670 
6671 	ret = pm_runtime_resume_and_get(priv->device);
6672 	if (ret < 0)
6673 		return ret;
6674 
6675 	if (be16_to_cpu(proto) == ETH_P_8021AD)
6676 		is_double = true;
6677 
6678 	set_bit(vid, priv->active_vlans);
6679 	ret = stmmac_vlan_update(priv, is_double);
6680 	if (ret) {
6681 		clear_bit(vid, priv->active_vlans);
6682 		goto err_pm_put;
6683 	}
6684 
6685 	if (priv->hw->num_vlan) {
6686 		ret = stmmac_add_hw_vlan_rx_fltr(priv, ndev, priv->hw, proto, vid);
6687 		if (ret)
6688 			goto err_pm_put;
6689 	}
6690 err_pm_put:
6691 	pm_runtime_put(priv->device);
6692 
6693 	return ret;
6694 }
6695 
6696 static int stmmac_vlan_rx_kill_vid(struct net_device *ndev, __be16 proto, u16 vid)
6697 {
6698 	struct stmmac_priv *priv = netdev_priv(ndev);
6699 	bool is_double = false;
6700 	int ret;
6701 
6702 	ret = pm_runtime_resume_and_get(priv->device);
6703 	if (ret < 0)
6704 		return ret;
6705 
6706 	if (be16_to_cpu(proto) == ETH_P_8021AD)
6707 		is_double = true;
6708 
6709 	clear_bit(vid, priv->active_vlans);
6710 
6711 	if (priv->hw->num_vlan) {
6712 		ret = stmmac_del_hw_vlan_rx_fltr(priv, ndev, priv->hw, proto, vid);
6713 		if (ret)
6714 			goto del_vlan_error;
6715 	}
6716 
6717 	ret = stmmac_vlan_update(priv, is_double);
6718 
6719 del_vlan_error:
6720 	pm_runtime_put(priv->device);
6721 
6722 	return ret;
6723 }
6724 
6725 static int stmmac_bpf(struct net_device *dev, struct netdev_bpf *bpf)
6726 {
6727 	struct stmmac_priv *priv = netdev_priv(dev);
6728 
6729 	switch (bpf->command) {
6730 	case XDP_SETUP_PROG:
6731 		return stmmac_xdp_set_prog(priv, bpf->prog, bpf->extack);
6732 	case XDP_SETUP_XSK_POOL:
6733 		return stmmac_xdp_setup_pool(priv, bpf->xsk.pool,
6734 					     bpf->xsk.queue_id);
6735 	default:
6736 		return -EOPNOTSUPP;
6737 	}
6738 }
6739 
6740 static int stmmac_xdp_xmit(struct net_device *dev, int num_frames,
6741 			   struct xdp_frame **frames, u32 flags)
6742 {
6743 	struct stmmac_priv *priv = netdev_priv(dev);
6744 	int cpu = smp_processor_id();
6745 	struct netdev_queue *nq;
6746 	int i, nxmit = 0;
6747 	int queue;
6748 
6749 	if (unlikely(test_bit(STMMAC_DOWN, &priv->state)))
6750 		return -ENETDOWN;
6751 
6752 	if (unlikely(flags & ~XDP_XMIT_FLAGS_MASK))
6753 		return -EINVAL;
6754 
6755 	queue = stmmac_xdp_get_tx_queue(priv, cpu);
6756 	nq = netdev_get_tx_queue(priv->dev, queue);
6757 
6758 	__netif_tx_lock(nq, cpu);
6759 	/* Avoids TX time-out as we are sharing with slow path */
6760 	txq_trans_cond_update(nq);
6761 
6762 	for (i = 0; i < num_frames; i++) {
6763 		int res;
6764 
6765 		res = stmmac_xdp_xmit_xdpf(priv, queue, frames[i], true);
6766 		if (res == STMMAC_XDP_CONSUMED)
6767 			break;
6768 
6769 		nxmit++;
6770 	}
6771 
6772 	if (flags & XDP_XMIT_FLUSH) {
6773 		stmmac_flush_tx_descriptors(priv, queue);
6774 		stmmac_tx_timer_arm(priv, queue);
6775 	}
6776 
6777 	__netif_tx_unlock(nq);
6778 
6779 	return nxmit;
6780 }
6781 
6782 void stmmac_disable_rx_queue(struct stmmac_priv *priv, u32 queue)
6783 {
6784 	struct stmmac_channel *ch = &priv->channel[queue];
6785 	unsigned long flags;
6786 
6787 	spin_lock_irqsave(&ch->lock, flags);
6788 	stmmac_disable_dma_irq(priv, priv->ioaddr, queue, 1, 0);
6789 	spin_unlock_irqrestore(&ch->lock, flags);
6790 
6791 	stmmac_stop_rx_dma(priv, queue);
6792 	__free_dma_rx_desc_resources(priv, &priv->dma_conf, queue);
6793 }
6794 
6795 void stmmac_enable_rx_queue(struct stmmac_priv *priv, u32 queue)
6796 {
6797 	struct stmmac_rx_queue *rx_q = &priv->dma_conf.rx_queue[queue];
6798 	struct stmmac_channel *ch = &priv->channel[queue];
6799 	unsigned long flags;
6800 	u32 buf_size;
6801 	int ret;
6802 
6803 	ret = __alloc_dma_rx_desc_resources(priv, &priv->dma_conf, queue);
6804 	if (ret) {
6805 		netdev_err(priv->dev, "Failed to alloc RX desc.\n");
6806 		return;
6807 	}
6808 
6809 	ret = __init_dma_rx_desc_rings(priv, &priv->dma_conf, queue, GFP_KERNEL);
6810 	if (ret) {
6811 		__free_dma_rx_desc_resources(priv, &priv->dma_conf, queue);
6812 		netdev_err(priv->dev, "Failed to init RX desc.\n");
6813 		return;
6814 	}
6815 
6816 	stmmac_reset_rx_queue(priv, queue);
6817 	stmmac_clear_rx_descriptors(priv, &priv->dma_conf, queue);
6818 
6819 	stmmac_init_rx_chan(priv, priv->ioaddr, priv->plat->dma_cfg,
6820 			    rx_q->dma_rx_phy, rx_q->queue_index);
6821 
6822 	rx_q->rx_tail_addr = rx_q->dma_rx_phy + (rx_q->buf_alloc_num *
6823 			     sizeof(struct dma_desc));
6824 	stmmac_set_rx_tail_ptr(priv, priv->ioaddr,
6825 			       rx_q->rx_tail_addr, rx_q->queue_index);
6826 
6827 	if (rx_q->xsk_pool && rx_q->buf_alloc_num) {
6828 		buf_size = xsk_pool_get_rx_frame_size(rx_q->xsk_pool);
6829 		stmmac_set_dma_bfsize(priv, priv->ioaddr,
6830 				      buf_size,
6831 				      rx_q->queue_index);
6832 	} else {
6833 		stmmac_set_dma_bfsize(priv, priv->ioaddr,
6834 				      priv->dma_conf.dma_buf_sz,
6835 				      rx_q->queue_index);
6836 	}
6837 
6838 	stmmac_start_rx_dma(priv, queue);
6839 
6840 	spin_lock_irqsave(&ch->lock, flags);
6841 	stmmac_enable_dma_irq(priv, priv->ioaddr, queue, 1, 0);
6842 	spin_unlock_irqrestore(&ch->lock, flags);
6843 }
6844 
6845 void stmmac_disable_tx_queue(struct stmmac_priv *priv, u32 queue)
6846 {
6847 	struct stmmac_channel *ch = &priv->channel[queue];
6848 	unsigned long flags;
6849 
6850 	spin_lock_irqsave(&ch->lock, flags);
6851 	stmmac_disable_dma_irq(priv, priv->ioaddr, queue, 0, 1);
6852 	spin_unlock_irqrestore(&ch->lock, flags);
6853 
6854 	stmmac_stop_tx_dma(priv, queue);
6855 	__free_dma_tx_desc_resources(priv, &priv->dma_conf, queue);
6856 }
6857 
6858 void stmmac_enable_tx_queue(struct stmmac_priv *priv, u32 queue)
6859 {
6860 	struct stmmac_tx_queue *tx_q = &priv->dma_conf.tx_queue[queue];
6861 	struct stmmac_channel *ch = &priv->channel[queue];
6862 	unsigned long flags;
6863 	int ret;
6864 
6865 	ret = __alloc_dma_tx_desc_resources(priv, &priv->dma_conf, queue);
6866 	if (ret) {
6867 		netdev_err(priv->dev, "Failed to alloc TX desc.\n");
6868 		return;
6869 	}
6870 
6871 	ret = __init_dma_tx_desc_rings(priv,  &priv->dma_conf, queue);
6872 	if (ret) {
6873 		__free_dma_tx_desc_resources(priv, &priv->dma_conf, queue);
6874 		netdev_err(priv->dev, "Failed to init TX desc.\n");
6875 		return;
6876 	}
6877 
6878 	stmmac_reset_tx_queue(priv, queue);
6879 	stmmac_clear_tx_descriptors(priv, &priv->dma_conf, queue);
6880 
6881 	stmmac_init_tx_chan(priv, priv->ioaddr, priv->plat->dma_cfg,
6882 			    tx_q->dma_tx_phy, tx_q->queue_index);
6883 
6884 	if (tx_q->tbs & STMMAC_TBS_AVAIL)
6885 		stmmac_enable_tbs(priv, priv->ioaddr, 1, tx_q->queue_index);
6886 
6887 	tx_q->tx_tail_addr = tx_q->dma_tx_phy;
6888 	stmmac_set_tx_tail_ptr(priv, priv->ioaddr,
6889 			       tx_q->tx_tail_addr, tx_q->queue_index);
6890 
6891 	stmmac_start_tx_dma(priv, queue);
6892 
6893 	spin_lock_irqsave(&ch->lock, flags);
6894 	stmmac_enable_dma_irq(priv, priv->ioaddr, queue, 0, 1);
6895 	spin_unlock_irqrestore(&ch->lock, flags);
6896 }
6897 
6898 void stmmac_xdp_release(struct net_device *dev)
6899 {
6900 	struct stmmac_priv *priv = netdev_priv(dev);
6901 	u32 chan;
6902 
6903 	/* Ensure tx function is not running */
6904 	netif_tx_disable(dev);
6905 
6906 	/* Disable NAPI process */
6907 	stmmac_disable_all_queues(priv);
6908 
6909 	for (chan = 0; chan < priv->plat->tx_queues_to_use; chan++)
6910 		hrtimer_cancel(&priv->dma_conf.tx_queue[chan].txtimer);
6911 
6912 	/* Free the IRQ lines */
6913 	stmmac_free_irq(dev, REQ_IRQ_ERR_ALL, 0);
6914 
6915 	/* Stop TX/RX DMA channels */
6916 	stmmac_stop_all_dma(priv);
6917 
6918 	/* Release and free the Rx/Tx resources */
6919 	free_dma_desc_resources(priv, &priv->dma_conf);
6920 
6921 	/* Disable the MAC Rx/Tx */
6922 	stmmac_mac_set(priv, priv->ioaddr, false);
6923 
6924 	/* set trans_start so we don't get spurious
6925 	 * watchdogs during reset
6926 	 */
6927 	netif_trans_update(dev);
6928 	netif_carrier_off(dev);
6929 }
6930 
6931 int stmmac_xdp_open(struct net_device *dev)
6932 {
6933 	struct stmmac_priv *priv = netdev_priv(dev);
6934 	u32 rx_cnt = priv->plat->rx_queues_to_use;
6935 	u32 tx_cnt = priv->plat->tx_queues_to_use;
6936 	u32 dma_csr_ch = max(rx_cnt, tx_cnt);
6937 	struct stmmac_rx_queue *rx_q;
6938 	struct stmmac_tx_queue *tx_q;
6939 	u32 buf_size;
6940 	bool sph_en;
6941 	u32 chan;
6942 	int ret;
6943 
6944 	ret = alloc_dma_desc_resources(priv, &priv->dma_conf);
6945 	if (ret < 0) {
6946 		netdev_err(dev, "%s: DMA descriptors allocation failed\n",
6947 			   __func__);
6948 		goto dma_desc_error;
6949 	}
6950 
6951 	ret = init_dma_desc_rings(dev, &priv->dma_conf, GFP_KERNEL);
6952 	if (ret < 0) {
6953 		netdev_err(dev, "%s: DMA descriptors initialization failed\n",
6954 			   __func__);
6955 		goto init_error;
6956 	}
6957 
6958 	stmmac_reset_queues_param(priv);
6959 
6960 	/* DMA CSR Channel configuration */
6961 	for (chan = 0; chan < dma_csr_ch; chan++) {
6962 		stmmac_init_chan(priv, priv->ioaddr, priv->plat->dma_cfg, chan);
6963 		stmmac_disable_dma_irq(priv, priv->ioaddr, chan, 1, 1);
6964 	}
6965 
6966 	/* Adjust Split header */
6967 	sph_en = (priv->hw->rx_csum > 0) && priv->sph;
6968 
6969 	/* DMA RX Channel Configuration */
6970 	for (chan = 0; chan < rx_cnt; chan++) {
6971 		rx_q = &priv->dma_conf.rx_queue[chan];
6972 
6973 		stmmac_init_rx_chan(priv, priv->ioaddr, priv->plat->dma_cfg,
6974 				    rx_q->dma_rx_phy, chan);
6975 
6976 		rx_q->rx_tail_addr = rx_q->dma_rx_phy +
6977 				     (rx_q->buf_alloc_num *
6978 				      sizeof(struct dma_desc));
6979 		stmmac_set_rx_tail_ptr(priv, priv->ioaddr,
6980 				       rx_q->rx_tail_addr, chan);
6981 
6982 		if (rx_q->xsk_pool && rx_q->buf_alloc_num) {
6983 			buf_size = xsk_pool_get_rx_frame_size(rx_q->xsk_pool);
6984 			stmmac_set_dma_bfsize(priv, priv->ioaddr,
6985 					      buf_size,
6986 					      rx_q->queue_index);
6987 		} else {
6988 			stmmac_set_dma_bfsize(priv, priv->ioaddr,
6989 					      priv->dma_conf.dma_buf_sz,
6990 					      rx_q->queue_index);
6991 		}
6992 
6993 		stmmac_enable_sph(priv, priv->ioaddr, sph_en, chan);
6994 	}
6995 
6996 	/* DMA TX Channel Configuration */
6997 	for (chan = 0; chan < tx_cnt; chan++) {
6998 		tx_q = &priv->dma_conf.tx_queue[chan];
6999 
7000 		stmmac_init_tx_chan(priv, priv->ioaddr, priv->plat->dma_cfg,
7001 				    tx_q->dma_tx_phy, chan);
7002 
7003 		tx_q->tx_tail_addr = tx_q->dma_tx_phy;
7004 		stmmac_set_tx_tail_ptr(priv, priv->ioaddr,
7005 				       tx_q->tx_tail_addr, chan);
7006 
7007 		hrtimer_init(&tx_q->txtimer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
7008 		tx_q->txtimer.function = stmmac_tx_timer;
7009 	}
7010 
7011 	/* Enable the MAC Rx/Tx */
7012 	stmmac_mac_set(priv, priv->ioaddr, true);
7013 
7014 	/* Start Rx & Tx DMA Channels */
7015 	stmmac_start_all_dma(priv);
7016 
7017 	ret = stmmac_request_irq(dev);
7018 	if (ret)
7019 		goto irq_error;
7020 
7021 	/* Enable NAPI process*/
7022 	stmmac_enable_all_queues(priv);
7023 	netif_carrier_on(dev);
7024 	netif_tx_start_all_queues(dev);
7025 	stmmac_enable_all_dma_irq(priv);
7026 
7027 	return 0;
7028 
7029 irq_error:
7030 	for (chan = 0; chan < priv->plat->tx_queues_to_use; chan++)
7031 		hrtimer_cancel(&priv->dma_conf.tx_queue[chan].txtimer);
7032 
7033 	stmmac_hw_teardown(dev);
7034 init_error:
7035 	free_dma_desc_resources(priv, &priv->dma_conf);
7036 dma_desc_error:
7037 	return ret;
7038 }
7039 
7040 int stmmac_xsk_wakeup(struct net_device *dev, u32 queue, u32 flags)
7041 {
7042 	struct stmmac_priv *priv = netdev_priv(dev);
7043 	struct stmmac_rx_queue *rx_q;
7044 	struct stmmac_tx_queue *tx_q;
7045 	struct stmmac_channel *ch;
7046 
7047 	if (test_bit(STMMAC_DOWN, &priv->state) ||
7048 	    !netif_carrier_ok(priv->dev))
7049 		return -ENETDOWN;
7050 
7051 	if (!stmmac_xdp_is_enabled(priv))
7052 		return -EINVAL;
7053 
7054 	if (queue >= priv->plat->rx_queues_to_use ||
7055 	    queue >= priv->plat->tx_queues_to_use)
7056 		return -EINVAL;
7057 
7058 	rx_q = &priv->dma_conf.rx_queue[queue];
7059 	tx_q = &priv->dma_conf.tx_queue[queue];
7060 	ch = &priv->channel[queue];
7061 
7062 	if (!rx_q->xsk_pool && !tx_q->xsk_pool)
7063 		return -EINVAL;
7064 
7065 	if (!napi_if_scheduled_mark_missed(&ch->rxtx_napi)) {
7066 		/* EQoS does not have per-DMA channel SW interrupt,
7067 		 * so we schedule RX Napi straight-away.
7068 		 */
7069 		if (likely(napi_schedule_prep(&ch->rxtx_napi)))
7070 			__napi_schedule(&ch->rxtx_napi);
7071 	}
7072 
7073 	return 0;
7074 }
7075 
7076 static void stmmac_get_stats64(struct net_device *dev, struct rtnl_link_stats64 *stats)
7077 {
7078 	struct stmmac_priv *priv = netdev_priv(dev);
7079 	u32 tx_cnt = priv->plat->tx_queues_to_use;
7080 	u32 rx_cnt = priv->plat->rx_queues_to_use;
7081 	unsigned int start;
7082 	int q;
7083 
7084 	for (q = 0; q < tx_cnt; q++) {
7085 		struct stmmac_txq_stats *txq_stats = &priv->xstats.txq_stats[q];
7086 		u64 tx_packets;
7087 		u64 tx_bytes;
7088 
7089 		do {
7090 			start = u64_stats_fetch_begin(&txq_stats->q_syncp);
7091 			tx_bytes   = u64_stats_read(&txq_stats->q.tx_bytes);
7092 		} while (u64_stats_fetch_retry(&txq_stats->q_syncp, start));
7093 		do {
7094 			start = u64_stats_fetch_begin(&txq_stats->napi_syncp);
7095 			tx_packets = u64_stats_read(&txq_stats->napi.tx_packets);
7096 		} while (u64_stats_fetch_retry(&txq_stats->napi_syncp, start));
7097 
7098 		stats->tx_packets += tx_packets;
7099 		stats->tx_bytes += tx_bytes;
7100 	}
7101 
7102 	for (q = 0; q < rx_cnt; q++) {
7103 		struct stmmac_rxq_stats *rxq_stats = &priv->xstats.rxq_stats[q];
7104 		u64 rx_packets;
7105 		u64 rx_bytes;
7106 
7107 		do {
7108 			start = u64_stats_fetch_begin(&rxq_stats->napi_syncp);
7109 			rx_packets = u64_stats_read(&rxq_stats->napi.rx_packets);
7110 			rx_bytes   = u64_stats_read(&rxq_stats->napi.rx_bytes);
7111 		} while (u64_stats_fetch_retry(&rxq_stats->napi_syncp, start));
7112 
7113 		stats->rx_packets += rx_packets;
7114 		stats->rx_bytes += rx_bytes;
7115 	}
7116 
7117 	stats->rx_dropped = priv->xstats.rx_dropped;
7118 	stats->rx_errors = priv->xstats.rx_errors;
7119 	stats->tx_dropped = priv->xstats.tx_dropped;
7120 	stats->tx_errors = priv->xstats.tx_errors;
7121 	stats->tx_carrier_errors = priv->xstats.tx_losscarrier + priv->xstats.tx_carrier;
7122 	stats->collisions = priv->xstats.tx_collision + priv->xstats.rx_collision;
7123 	stats->rx_length_errors = priv->xstats.rx_length;
7124 	stats->rx_crc_errors = priv->xstats.rx_crc_errors;
7125 	stats->rx_over_errors = priv->xstats.rx_overflow_cntr;
7126 	stats->rx_missed_errors = priv->xstats.rx_missed_cntr;
7127 }
7128 
7129 static const struct net_device_ops stmmac_netdev_ops = {
7130 	.ndo_open = stmmac_open,
7131 	.ndo_start_xmit = stmmac_xmit,
7132 	.ndo_stop = stmmac_release,
7133 	.ndo_change_mtu = stmmac_change_mtu,
7134 	.ndo_fix_features = stmmac_fix_features,
7135 	.ndo_set_features = stmmac_set_features,
7136 	.ndo_set_rx_mode = stmmac_set_rx_mode,
7137 	.ndo_tx_timeout = stmmac_tx_timeout,
7138 	.ndo_eth_ioctl = stmmac_ioctl,
7139 	.ndo_get_stats64 = stmmac_get_stats64,
7140 	.ndo_setup_tc = stmmac_setup_tc,
7141 	.ndo_select_queue = stmmac_select_queue,
7142 	.ndo_set_mac_address = stmmac_set_mac_address,
7143 	.ndo_vlan_rx_add_vid = stmmac_vlan_rx_add_vid,
7144 	.ndo_vlan_rx_kill_vid = stmmac_vlan_rx_kill_vid,
7145 	.ndo_bpf = stmmac_bpf,
7146 	.ndo_xdp_xmit = stmmac_xdp_xmit,
7147 	.ndo_xsk_wakeup = stmmac_xsk_wakeup,
7148 };
7149 
7150 static void stmmac_reset_subtask(struct stmmac_priv *priv)
7151 {
7152 	if (!test_and_clear_bit(STMMAC_RESET_REQUESTED, &priv->state))
7153 		return;
7154 	if (test_bit(STMMAC_DOWN, &priv->state))
7155 		return;
7156 
7157 	netdev_err(priv->dev, "Reset adapter.\n");
7158 
7159 	rtnl_lock();
7160 	netif_trans_update(priv->dev);
7161 	while (test_and_set_bit(STMMAC_RESETING, &priv->state))
7162 		usleep_range(1000, 2000);
7163 
7164 	set_bit(STMMAC_DOWN, &priv->state);
7165 	dev_close(priv->dev);
7166 	dev_open(priv->dev, NULL);
7167 	clear_bit(STMMAC_DOWN, &priv->state);
7168 	clear_bit(STMMAC_RESETING, &priv->state);
7169 	rtnl_unlock();
7170 }
7171 
7172 static void stmmac_service_task(struct work_struct *work)
7173 {
7174 	struct stmmac_priv *priv = container_of(work, struct stmmac_priv,
7175 			service_task);
7176 
7177 	stmmac_reset_subtask(priv);
7178 	clear_bit(STMMAC_SERVICE_SCHED, &priv->state);
7179 }
7180 
7181 /**
7182  *  stmmac_hw_init - Init the MAC device
7183  *  @priv: driver private structure
7184  *  Description: this function is to configure the MAC device according to
7185  *  some platform parameters or the HW capability register. It prepares the
7186  *  driver to use either ring or chain modes and to setup either enhanced or
7187  *  normal descriptors.
7188  */
7189 static int stmmac_hw_init(struct stmmac_priv *priv)
7190 {
7191 	int ret;
7192 
7193 	/* dwmac-sun8i only work in chain mode */
7194 	if (priv->plat->flags & STMMAC_FLAG_HAS_SUN8I)
7195 		chain_mode = 1;
7196 	priv->chain_mode = chain_mode;
7197 
7198 	/* Initialize HW Interface */
7199 	ret = stmmac_hwif_init(priv);
7200 	if (ret)
7201 		return ret;
7202 
7203 	/* Get the HW capability (new GMAC newer than 3.50a) */
7204 	priv->hw_cap_support = stmmac_get_hw_features(priv);
7205 	if (priv->hw_cap_support) {
7206 		dev_info(priv->device, "DMA HW capability register supported\n");
7207 
7208 		/* We can override some gmac/dma configuration fields: e.g.
7209 		 * enh_desc, tx_coe (e.g. that are passed through the
7210 		 * platform) with the values from the HW capability
7211 		 * register (if supported).
7212 		 */
7213 		priv->plat->enh_desc = priv->dma_cap.enh_desc;
7214 		priv->plat->pmt = priv->dma_cap.pmt_remote_wake_up &&
7215 				!(priv->plat->flags & STMMAC_FLAG_USE_PHY_WOL);
7216 		priv->hw->pmt = priv->plat->pmt;
7217 		if (priv->dma_cap.hash_tb_sz) {
7218 			priv->hw->multicast_filter_bins =
7219 					(BIT(priv->dma_cap.hash_tb_sz) << 5);
7220 			priv->hw->mcast_bits_log2 =
7221 					ilog2(priv->hw->multicast_filter_bins);
7222 		}
7223 
7224 		/* TXCOE doesn't work in thresh DMA mode */
7225 		if (priv->plat->force_thresh_dma_mode)
7226 			priv->plat->tx_coe = 0;
7227 		else
7228 			priv->plat->tx_coe = priv->dma_cap.tx_coe;
7229 
7230 		/* In case of GMAC4 rx_coe is from HW cap register. */
7231 		priv->plat->rx_coe = priv->dma_cap.rx_coe;
7232 
7233 		if (priv->dma_cap.rx_coe_type2)
7234 			priv->plat->rx_coe = STMMAC_RX_COE_TYPE2;
7235 		else if (priv->dma_cap.rx_coe_type1)
7236 			priv->plat->rx_coe = STMMAC_RX_COE_TYPE1;
7237 
7238 	} else {
7239 		dev_info(priv->device, "No HW DMA feature register supported\n");
7240 	}
7241 
7242 	if (priv->plat->rx_coe) {
7243 		priv->hw->rx_csum = priv->plat->rx_coe;
7244 		dev_info(priv->device, "RX Checksum Offload Engine supported\n");
7245 		if (priv->synopsys_id < DWMAC_CORE_4_00)
7246 			dev_info(priv->device, "COE Type %d\n", priv->hw->rx_csum);
7247 	}
7248 	if (priv->plat->tx_coe)
7249 		dev_info(priv->device, "TX Checksum insertion supported\n");
7250 
7251 	if (priv->plat->pmt) {
7252 		dev_info(priv->device, "Wake-Up On Lan supported\n");
7253 		device_set_wakeup_capable(priv->device, 1);
7254 	}
7255 
7256 	if (priv->dma_cap.tsoen)
7257 		dev_info(priv->device, "TSO supported\n");
7258 
7259 	priv->hw->vlan_fail_q_en =
7260 		(priv->plat->flags & STMMAC_FLAG_VLAN_FAIL_Q_EN);
7261 	priv->hw->vlan_fail_q = priv->plat->vlan_fail_q;
7262 
7263 	/* Run HW quirks, if any */
7264 	if (priv->hwif_quirks) {
7265 		ret = priv->hwif_quirks(priv);
7266 		if (ret)
7267 			return ret;
7268 	}
7269 
7270 	/* Rx Watchdog is available in the COREs newer than the 3.40.
7271 	 * In some case, for example on bugged HW this feature
7272 	 * has to be disable and this can be done by passing the
7273 	 * riwt_off field from the platform.
7274 	 */
7275 	if (((priv->synopsys_id >= DWMAC_CORE_3_50) ||
7276 	    (priv->plat->has_xgmac)) && (!priv->plat->riwt_off)) {
7277 		priv->use_riwt = 1;
7278 		dev_info(priv->device,
7279 			 "Enable RX Mitigation via HW Watchdog Timer\n");
7280 	}
7281 
7282 	return 0;
7283 }
7284 
7285 static void stmmac_napi_add(struct net_device *dev)
7286 {
7287 	struct stmmac_priv *priv = netdev_priv(dev);
7288 	u32 queue, maxq;
7289 
7290 	maxq = max(priv->plat->rx_queues_to_use, priv->plat->tx_queues_to_use);
7291 
7292 	for (queue = 0; queue < maxq; queue++) {
7293 		struct stmmac_channel *ch = &priv->channel[queue];
7294 
7295 		ch->priv_data = priv;
7296 		ch->index = queue;
7297 		spin_lock_init(&ch->lock);
7298 
7299 		if (queue < priv->plat->rx_queues_to_use) {
7300 			netif_napi_add(dev, &ch->rx_napi, stmmac_napi_poll_rx);
7301 		}
7302 		if (queue < priv->plat->tx_queues_to_use) {
7303 			netif_napi_add_tx(dev, &ch->tx_napi,
7304 					  stmmac_napi_poll_tx);
7305 		}
7306 		if (queue < priv->plat->rx_queues_to_use &&
7307 		    queue < priv->plat->tx_queues_to_use) {
7308 			netif_napi_add(dev, &ch->rxtx_napi,
7309 				       stmmac_napi_poll_rxtx);
7310 		}
7311 	}
7312 }
7313 
7314 static void stmmac_napi_del(struct net_device *dev)
7315 {
7316 	struct stmmac_priv *priv = netdev_priv(dev);
7317 	u32 queue, maxq;
7318 
7319 	maxq = max(priv->plat->rx_queues_to_use, priv->plat->tx_queues_to_use);
7320 
7321 	for (queue = 0; queue < maxq; queue++) {
7322 		struct stmmac_channel *ch = &priv->channel[queue];
7323 
7324 		if (queue < priv->plat->rx_queues_to_use)
7325 			netif_napi_del(&ch->rx_napi);
7326 		if (queue < priv->plat->tx_queues_to_use)
7327 			netif_napi_del(&ch->tx_napi);
7328 		if (queue < priv->plat->rx_queues_to_use &&
7329 		    queue < priv->plat->tx_queues_to_use) {
7330 			netif_napi_del(&ch->rxtx_napi);
7331 		}
7332 	}
7333 }
7334 
7335 int stmmac_reinit_queues(struct net_device *dev, u32 rx_cnt, u32 tx_cnt)
7336 {
7337 	struct stmmac_priv *priv = netdev_priv(dev);
7338 	int ret = 0, i;
7339 
7340 	if (netif_running(dev))
7341 		stmmac_release(dev);
7342 
7343 	stmmac_napi_del(dev);
7344 
7345 	priv->plat->rx_queues_to_use = rx_cnt;
7346 	priv->plat->tx_queues_to_use = tx_cnt;
7347 	if (!netif_is_rxfh_configured(dev))
7348 		for (i = 0; i < ARRAY_SIZE(priv->rss.table); i++)
7349 			priv->rss.table[i] = ethtool_rxfh_indir_default(i,
7350 									rx_cnt);
7351 
7352 	stmmac_napi_add(dev);
7353 
7354 	if (netif_running(dev))
7355 		ret = stmmac_open(dev);
7356 
7357 	return ret;
7358 }
7359 
7360 int stmmac_reinit_ringparam(struct net_device *dev, u32 rx_size, u32 tx_size)
7361 {
7362 	struct stmmac_priv *priv = netdev_priv(dev);
7363 	int ret = 0;
7364 
7365 	if (netif_running(dev))
7366 		stmmac_release(dev);
7367 
7368 	priv->dma_conf.dma_rx_size = rx_size;
7369 	priv->dma_conf.dma_tx_size = tx_size;
7370 
7371 	if (netif_running(dev))
7372 		ret = stmmac_open(dev);
7373 
7374 	return ret;
7375 }
7376 
7377 #define SEND_VERIFY_MPAKCET_FMT "Send Verify mPacket lo_state=%d lp_state=%d\n"
7378 static void stmmac_fpe_lp_task(struct work_struct *work)
7379 {
7380 	struct stmmac_priv *priv = container_of(work, struct stmmac_priv,
7381 						fpe_task);
7382 	struct stmmac_fpe_cfg *fpe_cfg = priv->plat->fpe_cfg;
7383 	enum stmmac_fpe_state *lo_state = &fpe_cfg->lo_fpe_state;
7384 	enum stmmac_fpe_state *lp_state = &fpe_cfg->lp_fpe_state;
7385 	bool *hs_enable = &fpe_cfg->hs_enable;
7386 	bool *enable = &fpe_cfg->enable;
7387 	int retries = 20;
7388 
7389 	while (retries-- > 0) {
7390 		/* Bail out immediately if FPE handshake is OFF */
7391 		if (*lo_state == FPE_STATE_OFF || !*hs_enable)
7392 			break;
7393 
7394 		if (*lo_state == FPE_STATE_ENTERING_ON &&
7395 		    *lp_state == FPE_STATE_ENTERING_ON) {
7396 			stmmac_fpe_configure(priv, priv->ioaddr,
7397 					     fpe_cfg,
7398 					     priv->plat->tx_queues_to_use,
7399 					     priv->plat->rx_queues_to_use,
7400 					     *enable);
7401 
7402 			netdev_info(priv->dev, "configured FPE\n");
7403 
7404 			*lo_state = FPE_STATE_ON;
7405 			*lp_state = FPE_STATE_ON;
7406 			netdev_info(priv->dev, "!!! BOTH FPE stations ON\n");
7407 			break;
7408 		}
7409 
7410 		if ((*lo_state == FPE_STATE_CAPABLE ||
7411 		     *lo_state == FPE_STATE_ENTERING_ON) &&
7412 		     *lp_state != FPE_STATE_ON) {
7413 			netdev_info(priv->dev, SEND_VERIFY_MPAKCET_FMT,
7414 				    *lo_state, *lp_state);
7415 			stmmac_fpe_send_mpacket(priv, priv->ioaddr,
7416 						fpe_cfg,
7417 						MPACKET_VERIFY);
7418 		}
7419 		/* Sleep then retry */
7420 		msleep(500);
7421 	}
7422 
7423 	clear_bit(__FPE_TASK_SCHED, &priv->fpe_task_state);
7424 }
7425 
7426 void stmmac_fpe_handshake(struct stmmac_priv *priv, bool enable)
7427 {
7428 	if (priv->plat->fpe_cfg->hs_enable != enable) {
7429 		if (enable) {
7430 			stmmac_fpe_send_mpacket(priv, priv->ioaddr,
7431 						priv->plat->fpe_cfg,
7432 						MPACKET_VERIFY);
7433 		} else {
7434 			priv->plat->fpe_cfg->lo_fpe_state = FPE_STATE_OFF;
7435 			priv->plat->fpe_cfg->lp_fpe_state = FPE_STATE_OFF;
7436 		}
7437 
7438 		priv->plat->fpe_cfg->hs_enable = enable;
7439 	}
7440 }
7441 
7442 static int stmmac_xdp_rx_timestamp(const struct xdp_md *_ctx, u64 *timestamp)
7443 {
7444 	const struct stmmac_xdp_buff *ctx = (void *)_ctx;
7445 	struct dma_desc *desc_contains_ts = ctx->desc;
7446 	struct stmmac_priv *priv = ctx->priv;
7447 	struct dma_desc *ndesc = ctx->ndesc;
7448 	struct dma_desc *desc = ctx->desc;
7449 	u64 ns = 0;
7450 
7451 	if (!priv->hwts_rx_en)
7452 		return -ENODATA;
7453 
7454 	/* For GMAC4, the valid timestamp is from CTX next desc. */
7455 	if (priv->plat->has_gmac4 || priv->plat->has_xgmac)
7456 		desc_contains_ts = ndesc;
7457 
7458 	/* Check if timestamp is available */
7459 	if (stmmac_get_rx_timestamp_status(priv, desc, ndesc, priv->adv_ts)) {
7460 		stmmac_get_timestamp(priv, desc_contains_ts, priv->adv_ts, &ns);
7461 		ns -= priv->plat->cdc_error_adj;
7462 		*timestamp = ns_to_ktime(ns);
7463 		return 0;
7464 	}
7465 
7466 	return -ENODATA;
7467 }
7468 
7469 static const struct xdp_metadata_ops stmmac_xdp_metadata_ops = {
7470 	.xmo_rx_timestamp		= stmmac_xdp_rx_timestamp,
7471 };
7472 
7473 /**
7474  * stmmac_dvr_probe
7475  * @device: device pointer
7476  * @plat_dat: platform data pointer
7477  * @res: stmmac resource pointer
7478  * Description: this is the main probe function used to
7479  * call the alloc_etherdev, allocate the priv structure.
7480  * Return:
7481  * returns 0 on success, otherwise errno.
7482  */
7483 int stmmac_dvr_probe(struct device *device,
7484 		     struct plat_stmmacenet_data *plat_dat,
7485 		     struct stmmac_resources *res)
7486 {
7487 	struct net_device *ndev = NULL;
7488 	struct stmmac_priv *priv;
7489 	u32 rxq;
7490 	int i, ret = 0;
7491 
7492 	ndev = devm_alloc_etherdev_mqs(device, sizeof(struct stmmac_priv),
7493 				       MTL_MAX_TX_QUEUES, MTL_MAX_RX_QUEUES);
7494 	if (!ndev)
7495 		return -ENOMEM;
7496 
7497 	SET_NETDEV_DEV(ndev, device);
7498 
7499 	priv = netdev_priv(ndev);
7500 	priv->device = device;
7501 	priv->dev = ndev;
7502 
7503 	for (i = 0; i < MTL_MAX_RX_QUEUES; i++)
7504 		u64_stats_init(&priv->xstats.rxq_stats[i].napi_syncp);
7505 	for (i = 0; i < MTL_MAX_TX_QUEUES; i++) {
7506 		u64_stats_init(&priv->xstats.txq_stats[i].q_syncp);
7507 		u64_stats_init(&priv->xstats.txq_stats[i].napi_syncp);
7508 	}
7509 
7510 	priv->xstats.pcpu_stats =
7511 		devm_netdev_alloc_pcpu_stats(device, struct stmmac_pcpu_stats);
7512 	if (!priv->xstats.pcpu_stats)
7513 		return -ENOMEM;
7514 
7515 	stmmac_set_ethtool_ops(ndev);
7516 	priv->pause = pause;
7517 	priv->plat = plat_dat;
7518 	priv->ioaddr = res->addr;
7519 	priv->dev->base_addr = (unsigned long)res->addr;
7520 	priv->plat->dma_cfg->multi_msi_en =
7521 		(priv->plat->flags & STMMAC_FLAG_MULTI_MSI_EN);
7522 
7523 	priv->dev->irq = res->irq;
7524 	priv->wol_irq = res->wol_irq;
7525 	priv->lpi_irq = res->lpi_irq;
7526 	priv->sfty_irq = res->sfty_irq;
7527 	priv->sfty_ce_irq = res->sfty_ce_irq;
7528 	priv->sfty_ue_irq = res->sfty_ue_irq;
7529 	for (i = 0; i < MTL_MAX_RX_QUEUES; i++)
7530 		priv->rx_irq[i] = res->rx_irq[i];
7531 	for (i = 0; i < MTL_MAX_TX_QUEUES; i++)
7532 		priv->tx_irq[i] = res->tx_irq[i];
7533 
7534 	if (!is_zero_ether_addr(res->mac))
7535 		eth_hw_addr_set(priv->dev, res->mac);
7536 
7537 	dev_set_drvdata(device, priv->dev);
7538 
7539 	/* Verify driver arguments */
7540 	stmmac_verify_args();
7541 
7542 	priv->af_xdp_zc_qps = bitmap_zalloc(MTL_MAX_TX_QUEUES, GFP_KERNEL);
7543 	if (!priv->af_xdp_zc_qps)
7544 		return -ENOMEM;
7545 
7546 	/* Allocate workqueue */
7547 	priv->wq = create_singlethread_workqueue("stmmac_wq");
7548 	if (!priv->wq) {
7549 		dev_err(priv->device, "failed to create workqueue\n");
7550 		ret = -ENOMEM;
7551 		goto error_wq_init;
7552 	}
7553 
7554 	INIT_WORK(&priv->service_task, stmmac_service_task);
7555 
7556 	/* Initialize Link Partner FPE workqueue */
7557 	INIT_WORK(&priv->fpe_task, stmmac_fpe_lp_task);
7558 
7559 	/* Override with kernel parameters if supplied XXX CRS XXX
7560 	 * this needs to have multiple instances
7561 	 */
7562 	if ((phyaddr >= 0) && (phyaddr <= 31))
7563 		priv->plat->phy_addr = phyaddr;
7564 
7565 	if (priv->plat->stmmac_rst) {
7566 		ret = reset_control_assert(priv->plat->stmmac_rst);
7567 		reset_control_deassert(priv->plat->stmmac_rst);
7568 		/* Some reset controllers have only reset callback instead of
7569 		 * assert + deassert callbacks pair.
7570 		 */
7571 		if (ret == -ENOTSUPP)
7572 			reset_control_reset(priv->plat->stmmac_rst);
7573 	}
7574 
7575 	ret = reset_control_deassert(priv->plat->stmmac_ahb_rst);
7576 	if (ret == -ENOTSUPP)
7577 		dev_err(priv->device, "unable to bring out of ahb reset: %pe\n",
7578 			ERR_PTR(ret));
7579 
7580 	/* Wait a bit for the reset to take effect */
7581 	udelay(10);
7582 
7583 	/* Init MAC and get the capabilities */
7584 	ret = stmmac_hw_init(priv);
7585 	if (ret)
7586 		goto error_hw_init;
7587 
7588 	/* Only DWMAC core version 5.20 onwards supports HW descriptor prefetch.
7589 	 */
7590 	if (priv->synopsys_id < DWMAC_CORE_5_20)
7591 		priv->plat->dma_cfg->dche = false;
7592 
7593 	stmmac_check_ether_addr(priv);
7594 
7595 	ndev->netdev_ops = &stmmac_netdev_ops;
7596 
7597 	ndev->xdp_metadata_ops = &stmmac_xdp_metadata_ops;
7598 	ndev->xsk_tx_metadata_ops = &stmmac_xsk_tx_metadata_ops;
7599 
7600 	ndev->hw_features = NETIF_F_SG | NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM |
7601 			    NETIF_F_RXCSUM;
7602 	ndev->xdp_features = NETDEV_XDP_ACT_BASIC | NETDEV_XDP_ACT_REDIRECT |
7603 			     NETDEV_XDP_ACT_XSK_ZEROCOPY;
7604 
7605 	ret = stmmac_tc_init(priv, priv);
7606 	if (!ret) {
7607 		ndev->hw_features |= NETIF_F_HW_TC;
7608 	}
7609 
7610 	if ((priv->plat->flags & STMMAC_FLAG_TSO_EN) && (priv->dma_cap.tsoen)) {
7611 		ndev->hw_features |= NETIF_F_TSO | NETIF_F_TSO6;
7612 		if (priv->plat->has_gmac4)
7613 			ndev->hw_features |= NETIF_F_GSO_UDP_L4;
7614 		priv->tso = true;
7615 		dev_info(priv->device, "TSO feature enabled\n");
7616 	}
7617 
7618 	if (priv->dma_cap.sphen &&
7619 	    !(priv->plat->flags & STMMAC_FLAG_SPH_DISABLE)) {
7620 		ndev->hw_features |= NETIF_F_GRO;
7621 		priv->sph_cap = true;
7622 		priv->sph = priv->sph_cap;
7623 		dev_info(priv->device, "SPH feature enabled\n");
7624 	}
7625 
7626 	/* Ideally our host DMA address width is the same as for the
7627 	 * device. However, it may differ and then we have to use our
7628 	 * host DMA width for allocation and the device DMA width for
7629 	 * register handling.
7630 	 */
7631 	if (priv->plat->host_dma_width)
7632 		priv->dma_cap.host_dma_width = priv->plat->host_dma_width;
7633 	else
7634 		priv->dma_cap.host_dma_width = priv->dma_cap.addr64;
7635 
7636 	if (priv->dma_cap.host_dma_width) {
7637 		ret = dma_set_mask_and_coherent(device,
7638 				DMA_BIT_MASK(priv->dma_cap.host_dma_width));
7639 		if (!ret) {
7640 			dev_info(priv->device, "Using %d/%d bits DMA host/device width\n",
7641 				 priv->dma_cap.host_dma_width, priv->dma_cap.addr64);
7642 
7643 			/*
7644 			 * If more than 32 bits can be addressed, make sure to
7645 			 * enable enhanced addressing mode.
7646 			 */
7647 			if (IS_ENABLED(CONFIG_ARCH_DMA_ADDR_T_64BIT))
7648 				priv->plat->dma_cfg->eame = true;
7649 		} else {
7650 			ret = dma_set_mask_and_coherent(device, DMA_BIT_MASK(32));
7651 			if (ret) {
7652 				dev_err(priv->device, "Failed to set DMA Mask\n");
7653 				goto error_hw_init;
7654 			}
7655 
7656 			priv->dma_cap.host_dma_width = 32;
7657 		}
7658 	}
7659 
7660 	ndev->features |= ndev->hw_features | NETIF_F_HIGHDMA;
7661 	ndev->watchdog_timeo = msecs_to_jiffies(watchdog);
7662 #ifdef STMMAC_VLAN_TAG_USED
7663 	/* Both mac100 and gmac support receive VLAN tag detection */
7664 	ndev->features |= NETIF_F_HW_VLAN_CTAG_RX | NETIF_F_HW_VLAN_STAG_RX;
7665 	ndev->hw_features |= NETIF_F_HW_VLAN_CTAG_RX;
7666 	priv->hw->hw_vlan_en = true;
7667 
7668 	if (priv->dma_cap.vlhash) {
7669 		ndev->features |= NETIF_F_HW_VLAN_CTAG_FILTER;
7670 		ndev->features |= NETIF_F_HW_VLAN_STAG_FILTER;
7671 	}
7672 	if (priv->dma_cap.vlins) {
7673 		ndev->features |= NETIF_F_HW_VLAN_CTAG_TX;
7674 		if (priv->dma_cap.dvlan)
7675 			ndev->features |= NETIF_F_HW_VLAN_STAG_TX;
7676 	}
7677 #endif
7678 	priv->msg_enable = netif_msg_init(debug, default_msg_level);
7679 
7680 	priv->xstats.threshold = tc;
7681 
7682 	/* Initialize RSS */
7683 	rxq = priv->plat->rx_queues_to_use;
7684 	netdev_rss_key_fill(priv->rss.key, sizeof(priv->rss.key));
7685 	for (i = 0; i < ARRAY_SIZE(priv->rss.table); i++)
7686 		priv->rss.table[i] = ethtool_rxfh_indir_default(i, rxq);
7687 
7688 	if (priv->dma_cap.rssen && priv->plat->rss_en)
7689 		ndev->features |= NETIF_F_RXHASH;
7690 
7691 	ndev->vlan_features |= ndev->features;
7692 	/* TSO doesn't work on VLANs yet */
7693 	ndev->vlan_features &= ~NETIF_F_TSO;
7694 
7695 	/* MTU range: 46 - hw-specific max */
7696 	ndev->min_mtu = ETH_ZLEN - ETH_HLEN;
7697 	if (priv->plat->has_xgmac)
7698 		ndev->max_mtu = XGMAC_JUMBO_LEN;
7699 	else if ((priv->plat->enh_desc) || (priv->synopsys_id >= DWMAC_CORE_4_00))
7700 		ndev->max_mtu = JUMBO_LEN;
7701 	else
7702 		ndev->max_mtu = SKB_MAX_HEAD(NET_SKB_PAD + NET_IP_ALIGN);
7703 	/* Will not overwrite ndev->max_mtu if plat->maxmtu > ndev->max_mtu
7704 	 * as well as plat->maxmtu < ndev->min_mtu which is a invalid range.
7705 	 */
7706 	if ((priv->plat->maxmtu < ndev->max_mtu) &&
7707 	    (priv->plat->maxmtu >= ndev->min_mtu))
7708 		ndev->max_mtu = priv->plat->maxmtu;
7709 	else if (priv->plat->maxmtu < ndev->min_mtu)
7710 		dev_warn(priv->device,
7711 			 "%s: warning: maxmtu having invalid value (%d)\n",
7712 			 __func__, priv->plat->maxmtu);
7713 
7714 	if (flow_ctrl)
7715 		priv->flow_ctrl = FLOW_AUTO;	/* RX/TX pause on */
7716 
7717 	ndev->priv_flags |= IFF_LIVE_ADDR_CHANGE;
7718 
7719 	/* Setup channels NAPI */
7720 	stmmac_napi_add(ndev);
7721 
7722 	mutex_init(&priv->lock);
7723 
7724 	/* If a specific clk_csr value is passed from the platform
7725 	 * this means that the CSR Clock Range selection cannot be
7726 	 * changed at run-time and it is fixed. Viceversa the driver'll try to
7727 	 * set the MDC clock dynamically according to the csr actual
7728 	 * clock input.
7729 	 */
7730 	if (priv->plat->clk_csr >= 0)
7731 		priv->clk_csr = priv->plat->clk_csr;
7732 	else
7733 		stmmac_clk_csr_set(priv);
7734 
7735 	stmmac_check_pcs_mode(priv);
7736 
7737 	pm_runtime_get_noresume(device);
7738 	pm_runtime_set_active(device);
7739 	if (!pm_runtime_enabled(device))
7740 		pm_runtime_enable(device);
7741 
7742 	if (priv->hw->pcs != STMMAC_PCS_TBI &&
7743 	    priv->hw->pcs != STMMAC_PCS_RTBI) {
7744 		/* MDIO bus Registration */
7745 		ret = stmmac_mdio_register(ndev);
7746 		if (ret < 0) {
7747 			dev_err_probe(priv->device, ret,
7748 				      "%s: MDIO bus (id: %d) registration failed\n",
7749 				      __func__, priv->plat->bus_id);
7750 			goto error_mdio_register;
7751 		}
7752 	}
7753 
7754 	if (priv->plat->speed_mode_2500)
7755 		priv->plat->speed_mode_2500(ndev, priv->plat->bsp_priv);
7756 
7757 	ret = stmmac_pcs_setup(ndev);
7758 	if (ret)
7759 		goto error_pcs_setup;
7760 
7761 	ret = stmmac_phy_setup(priv);
7762 	if (ret) {
7763 		netdev_err(ndev, "failed to setup phy (%d)\n", ret);
7764 		goto error_phy_setup;
7765 	}
7766 
7767 	ret = register_netdev(ndev);
7768 	if (ret) {
7769 		dev_err(priv->device, "%s: ERROR %i registering the device\n",
7770 			__func__, ret);
7771 		goto error_netdev_register;
7772 	}
7773 
7774 #ifdef CONFIG_DEBUG_FS
7775 	stmmac_init_fs(ndev);
7776 #endif
7777 
7778 	if (priv->plat->dump_debug_regs)
7779 		priv->plat->dump_debug_regs(priv->plat->bsp_priv);
7780 
7781 	/* Let pm_runtime_put() disable the clocks.
7782 	 * If CONFIG_PM is not enabled, the clocks will stay powered.
7783 	 */
7784 	pm_runtime_put(device);
7785 
7786 	return ret;
7787 
7788 error_netdev_register:
7789 	phylink_destroy(priv->phylink);
7790 error_phy_setup:
7791 	stmmac_pcs_clean(ndev);
7792 error_pcs_setup:
7793 	if (priv->hw->pcs != STMMAC_PCS_TBI &&
7794 	    priv->hw->pcs != STMMAC_PCS_RTBI)
7795 		stmmac_mdio_unregister(ndev);
7796 error_mdio_register:
7797 	stmmac_napi_del(ndev);
7798 error_hw_init:
7799 	destroy_workqueue(priv->wq);
7800 error_wq_init:
7801 	bitmap_free(priv->af_xdp_zc_qps);
7802 
7803 	return ret;
7804 }
7805 EXPORT_SYMBOL_GPL(stmmac_dvr_probe);
7806 
7807 /**
7808  * stmmac_dvr_remove
7809  * @dev: device pointer
7810  * Description: this function resets the TX/RX processes, disables the MAC RX/TX
7811  * changes the link status, releases the DMA descriptor rings.
7812  */
7813 void stmmac_dvr_remove(struct device *dev)
7814 {
7815 	struct net_device *ndev = dev_get_drvdata(dev);
7816 	struct stmmac_priv *priv = netdev_priv(ndev);
7817 
7818 	netdev_info(priv->dev, "%s: removing driver", __func__);
7819 
7820 	pm_runtime_get_sync(dev);
7821 
7822 	stmmac_stop_all_dma(priv);
7823 	stmmac_mac_set(priv, priv->ioaddr, false);
7824 	netif_carrier_off(ndev);
7825 	unregister_netdev(ndev);
7826 
7827 #ifdef CONFIG_DEBUG_FS
7828 	stmmac_exit_fs(ndev);
7829 #endif
7830 	phylink_destroy(priv->phylink);
7831 	if (priv->plat->stmmac_rst)
7832 		reset_control_assert(priv->plat->stmmac_rst);
7833 	reset_control_assert(priv->plat->stmmac_ahb_rst);
7834 
7835 	stmmac_pcs_clean(ndev);
7836 
7837 	if (priv->hw->pcs != STMMAC_PCS_TBI &&
7838 	    priv->hw->pcs != STMMAC_PCS_RTBI)
7839 		stmmac_mdio_unregister(ndev);
7840 	destroy_workqueue(priv->wq);
7841 	mutex_destroy(&priv->lock);
7842 	bitmap_free(priv->af_xdp_zc_qps);
7843 
7844 	pm_runtime_disable(dev);
7845 	pm_runtime_put_noidle(dev);
7846 }
7847 EXPORT_SYMBOL_GPL(stmmac_dvr_remove);
7848 
7849 /**
7850  * stmmac_suspend - suspend callback
7851  * @dev: device pointer
7852  * Description: this is the function to suspend the device and it is called
7853  * by the platform driver to stop the network queue, release the resources,
7854  * program the PMT register (for WoL), clean and release driver resources.
7855  */
7856 int stmmac_suspend(struct device *dev)
7857 {
7858 	struct net_device *ndev = dev_get_drvdata(dev);
7859 	struct stmmac_priv *priv = netdev_priv(ndev);
7860 	u32 chan;
7861 
7862 	if (!ndev || !netif_running(ndev))
7863 		return 0;
7864 
7865 	mutex_lock(&priv->lock);
7866 
7867 	netif_device_detach(ndev);
7868 
7869 	stmmac_disable_all_queues(priv);
7870 
7871 	for (chan = 0; chan < priv->plat->tx_queues_to_use; chan++)
7872 		hrtimer_cancel(&priv->dma_conf.tx_queue[chan].txtimer);
7873 
7874 	if (priv->eee_enabled) {
7875 		priv->tx_path_in_lpi_mode = false;
7876 		del_timer_sync(&priv->eee_ctrl_timer);
7877 	}
7878 
7879 	/* Stop TX/RX DMA */
7880 	stmmac_stop_all_dma(priv);
7881 
7882 	if (priv->plat->serdes_powerdown)
7883 		priv->plat->serdes_powerdown(ndev, priv->plat->bsp_priv);
7884 
7885 	/* Enable Power down mode by programming the PMT regs */
7886 	if (device_may_wakeup(priv->device) && priv->plat->pmt) {
7887 		stmmac_pmt(priv, priv->hw, priv->wolopts);
7888 		priv->irq_wake = 1;
7889 	} else {
7890 		stmmac_mac_set(priv, priv->ioaddr, false);
7891 		pinctrl_pm_select_sleep_state(priv->device);
7892 	}
7893 
7894 	mutex_unlock(&priv->lock);
7895 
7896 	rtnl_lock();
7897 	if (device_may_wakeup(priv->device) && priv->plat->pmt) {
7898 		phylink_suspend(priv->phylink, true);
7899 	} else {
7900 		if (device_may_wakeup(priv->device))
7901 			phylink_speed_down(priv->phylink, false);
7902 		phylink_suspend(priv->phylink, false);
7903 	}
7904 	rtnl_unlock();
7905 
7906 	if (priv->dma_cap.fpesel) {
7907 		/* Disable FPE */
7908 		stmmac_fpe_configure(priv, priv->ioaddr,
7909 				     priv->plat->fpe_cfg,
7910 				     priv->plat->tx_queues_to_use,
7911 				     priv->plat->rx_queues_to_use, false);
7912 
7913 		stmmac_fpe_handshake(priv, false);
7914 		stmmac_fpe_stop_wq(priv);
7915 	}
7916 
7917 	priv->speed = SPEED_UNKNOWN;
7918 	return 0;
7919 }
7920 EXPORT_SYMBOL_GPL(stmmac_suspend);
7921 
7922 static void stmmac_reset_rx_queue(struct stmmac_priv *priv, u32 queue)
7923 {
7924 	struct stmmac_rx_queue *rx_q = &priv->dma_conf.rx_queue[queue];
7925 
7926 	rx_q->cur_rx = 0;
7927 	rx_q->dirty_rx = 0;
7928 }
7929 
7930 static void stmmac_reset_tx_queue(struct stmmac_priv *priv, u32 queue)
7931 {
7932 	struct stmmac_tx_queue *tx_q = &priv->dma_conf.tx_queue[queue];
7933 
7934 	tx_q->cur_tx = 0;
7935 	tx_q->dirty_tx = 0;
7936 	tx_q->mss = 0;
7937 
7938 	netdev_tx_reset_queue(netdev_get_tx_queue(priv->dev, queue));
7939 }
7940 
7941 /**
7942  * stmmac_reset_queues_param - reset queue parameters
7943  * @priv: device pointer
7944  */
7945 static void stmmac_reset_queues_param(struct stmmac_priv *priv)
7946 {
7947 	u32 rx_cnt = priv->plat->rx_queues_to_use;
7948 	u32 tx_cnt = priv->plat->tx_queues_to_use;
7949 	u32 queue;
7950 
7951 	for (queue = 0; queue < rx_cnt; queue++)
7952 		stmmac_reset_rx_queue(priv, queue);
7953 
7954 	for (queue = 0; queue < tx_cnt; queue++)
7955 		stmmac_reset_tx_queue(priv, queue);
7956 }
7957 
7958 /**
7959  * stmmac_resume - resume callback
7960  * @dev: device pointer
7961  * Description: when resume this function is invoked to setup the DMA and CORE
7962  * in a usable state.
7963  */
7964 int stmmac_resume(struct device *dev)
7965 {
7966 	struct net_device *ndev = dev_get_drvdata(dev);
7967 	struct stmmac_priv *priv = netdev_priv(ndev);
7968 	int ret;
7969 
7970 	if (!netif_running(ndev))
7971 		return 0;
7972 
7973 	/* Power Down bit, into the PM register, is cleared
7974 	 * automatically as soon as a magic packet or a Wake-up frame
7975 	 * is received. Anyway, it's better to manually clear
7976 	 * this bit because it can generate problems while resuming
7977 	 * from another devices (e.g. serial console).
7978 	 */
7979 	if (device_may_wakeup(priv->device) && priv->plat->pmt) {
7980 		mutex_lock(&priv->lock);
7981 		stmmac_pmt(priv, priv->hw, 0);
7982 		mutex_unlock(&priv->lock);
7983 		priv->irq_wake = 0;
7984 	} else {
7985 		pinctrl_pm_select_default_state(priv->device);
7986 		/* reset the phy so that it's ready */
7987 		if (priv->mii)
7988 			stmmac_mdio_reset(priv->mii);
7989 	}
7990 
7991 	if (!(priv->plat->flags & STMMAC_FLAG_SERDES_UP_AFTER_PHY_LINKUP) &&
7992 	    priv->plat->serdes_powerup) {
7993 		ret = priv->plat->serdes_powerup(ndev,
7994 						 priv->plat->bsp_priv);
7995 
7996 		if (ret < 0)
7997 			return ret;
7998 	}
7999 
8000 	rtnl_lock();
8001 	if (device_may_wakeup(priv->device) && priv->plat->pmt) {
8002 		phylink_resume(priv->phylink);
8003 	} else {
8004 		phylink_resume(priv->phylink);
8005 		if (device_may_wakeup(priv->device))
8006 			phylink_speed_up(priv->phylink);
8007 	}
8008 	rtnl_unlock();
8009 
8010 	rtnl_lock();
8011 	mutex_lock(&priv->lock);
8012 
8013 	stmmac_reset_queues_param(priv);
8014 
8015 	stmmac_free_tx_skbufs(priv);
8016 	stmmac_clear_descriptors(priv, &priv->dma_conf);
8017 
8018 	stmmac_hw_setup(ndev, false);
8019 	stmmac_init_coalesce(priv);
8020 	stmmac_set_rx_mode(ndev);
8021 
8022 	stmmac_restore_hw_vlan_rx_fltr(priv, ndev, priv->hw);
8023 
8024 	stmmac_enable_all_queues(priv);
8025 	stmmac_enable_all_dma_irq(priv);
8026 
8027 	mutex_unlock(&priv->lock);
8028 	rtnl_unlock();
8029 
8030 	netif_device_attach(ndev);
8031 
8032 	return 0;
8033 }
8034 EXPORT_SYMBOL_GPL(stmmac_resume);
8035 
8036 #ifndef MODULE
8037 static int __init stmmac_cmdline_opt(char *str)
8038 {
8039 	char *opt;
8040 
8041 	if (!str || !*str)
8042 		return 1;
8043 	while ((opt = strsep(&str, ",")) != NULL) {
8044 		if (!strncmp(opt, "debug:", 6)) {
8045 			if (kstrtoint(opt + 6, 0, &debug))
8046 				goto err;
8047 		} else if (!strncmp(opt, "phyaddr:", 8)) {
8048 			if (kstrtoint(opt + 8, 0, &phyaddr))
8049 				goto err;
8050 		} else if (!strncmp(opt, "buf_sz:", 7)) {
8051 			if (kstrtoint(opt + 7, 0, &buf_sz))
8052 				goto err;
8053 		} else if (!strncmp(opt, "tc:", 3)) {
8054 			if (kstrtoint(opt + 3, 0, &tc))
8055 				goto err;
8056 		} else if (!strncmp(opt, "watchdog:", 9)) {
8057 			if (kstrtoint(opt + 9, 0, &watchdog))
8058 				goto err;
8059 		} else if (!strncmp(opt, "flow_ctrl:", 10)) {
8060 			if (kstrtoint(opt + 10, 0, &flow_ctrl))
8061 				goto err;
8062 		} else if (!strncmp(opt, "pause:", 6)) {
8063 			if (kstrtoint(opt + 6, 0, &pause))
8064 				goto err;
8065 		} else if (!strncmp(opt, "eee_timer:", 10)) {
8066 			if (kstrtoint(opt + 10, 0, &eee_timer))
8067 				goto err;
8068 		} else if (!strncmp(opt, "chain_mode:", 11)) {
8069 			if (kstrtoint(opt + 11, 0, &chain_mode))
8070 				goto err;
8071 		}
8072 	}
8073 	return 1;
8074 
8075 err:
8076 	pr_err("%s: ERROR broken module parameter conversion", __func__);
8077 	return 1;
8078 }
8079 
8080 __setup("stmmaceth=", stmmac_cmdline_opt);
8081 #endif /* MODULE */
8082 
8083 static int __init stmmac_init(void)
8084 {
8085 #ifdef CONFIG_DEBUG_FS
8086 	/* Create debugfs main directory if it doesn't exist yet */
8087 	if (!stmmac_fs_dir)
8088 		stmmac_fs_dir = debugfs_create_dir(STMMAC_RESOURCE_NAME, NULL);
8089 	register_netdevice_notifier(&stmmac_notifier);
8090 #endif
8091 
8092 	return 0;
8093 }
8094 
8095 static void __exit stmmac_exit(void)
8096 {
8097 #ifdef CONFIG_DEBUG_FS
8098 	unregister_netdevice_notifier(&stmmac_notifier);
8099 	debugfs_remove_recursive(stmmac_fs_dir);
8100 #endif
8101 }
8102 
8103 module_init(stmmac_init)
8104 module_exit(stmmac_exit)
8105 
8106 MODULE_DESCRIPTION("STMMAC 10/100/1000 Ethernet device driver");
8107 MODULE_AUTHOR("Giuseppe Cavallaro <peppe.cavallaro@st.com>");
8108 MODULE_LICENSE("GPL");
8109