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