xref: /linux/drivers/net/ethernet/xilinx/xilinx_axienet_main.c (revision 1a9239bb4253f9076b5b4b2a1a4e8d7defd77a95)
1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3  * Xilinx Axi Ethernet device driver
4  *
5  * Copyright (c) 2008 Nissin Systems Co., Ltd.,  Yoshio Kashiwagi
6  * Copyright (c) 2005-2008 DLA Systems,  David H. Lynch Jr. <dhlii@dlasys.net>
7  * Copyright (c) 2008-2009 Secret Lab Technologies Ltd.
8  * Copyright (c) 2010 - 2011 Michal Simek <monstr@monstr.eu>
9  * Copyright (c) 2010 - 2011 PetaLogix
10  * Copyright (c) 2019 - 2022 Calian Advanced Technologies
11  * Copyright (c) 2010 - 2012 Xilinx, Inc. All rights reserved.
12  *
13  * This is a driver for the Xilinx Axi Ethernet which is used in the Virtex6
14  * and Spartan6.
15  *
16  * TODO:
17  *  - Add Axi Fifo support.
18  *  - Factor out Axi DMA code into separate driver.
19  *  - Test and fix basic multicast filtering.
20  *  - Add support for extended multicast filtering.
21  *  - Test basic VLAN support.
22  *  - Add support for extended VLAN support.
23  */
24 
25 #include <linux/clk.h>
26 #include <linux/delay.h>
27 #include <linux/etherdevice.h>
28 #include <linux/module.h>
29 #include <linux/netdevice.h>
30 #include <linux/of.h>
31 #include <linux/of_mdio.h>
32 #include <linux/of_net.h>
33 #include <linux/of_irq.h>
34 #include <linux/of_address.h>
35 #include <linux/platform_device.h>
36 #include <linux/skbuff.h>
37 #include <linux/math64.h>
38 #include <linux/phy.h>
39 #include <linux/mii.h>
40 #include <linux/ethtool.h>
41 #include <linux/dmaengine.h>
42 #include <linux/dma-mapping.h>
43 #include <linux/dma/xilinx_dma.h>
44 #include <linux/circ_buf.h>
45 #include <net/netdev_queues.h>
46 
47 #include "xilinx_axienet.h"
48 
49 /* Descriptors defines for Tx and Rx DMA */
50 #define TX_BD_NUM_DEFAULT		128
51 #define RX_BD_NUM_DEFAULT		1024
52 #define TX_BD_NUM_MIN			(MAX_SKB_FRAGS + 1)
53 #define TX_BD_NUM_MAX			4096
54 #define RX_BD_NUM_MAX			4096
55 #define DMA_NUM_APP_WORDS		5
56 #define LEN_APP				4
57 #define RX_BUF_NUM_DEFAULT		128
58 
59 /* Must be shorter than length of ethtool_drvinfo.driver field to fit */
60 #define DRIVER_NAME		"xaxienet"
61 #define DRIVER_DESCRIPTION	"Xilinx Axi Ethernet driver"
62 #define DRIVER_VERSION		"1.00a"
63 
64 #define AXIENET_REGS_N		40
65 
66 static void axienet_rx_submit_desc(struct net_device *ndev);
67 
68 /* Match table for of_platform binding */
69 static const struct of_device_id axienet_of_match[] = {
70 	{ .compatible = "xlnx,axi-ethernet-1.00.a", },
71 	{ .compatible = "xlnx,axi-ethernet-1.01.a", },
72 	{ .compatible = "xlnx,axi-ethernet-2.01.a", },
73 	{},
74 };
75 
76 MODULE_DEVICE_TABLE(of, axienet_of_match);
77 
78 /* Option table for setting up Axi Ethernet hardware options */
79 static struct axienet_option axienet_options[] = {
80 	/* Turn on jumbo packet support for both Rx and Tx */
81 	{
82 		.opt = XAE_OPTION_JUMBO,
83 		.reg = XAE_TC_OFFSET,
84 		.m_or = XAE_TC_JUM_MASK,
85 	}, {
86 		.opt = XAE_OPTION_JUMBO,
87 		.reg = XAE_RCW1_OFFSET,
88 		.m_or = XAE_RCW1_JUM_MASK,
89 	}, { /* Turn on VLAN packet support for both Rx and Tx */
90 		.opt = XAE_OPTION_VLAN,
91 		.reg = XAE_TC_OFFSET,
92 		.m_or = XAE_TC_VLAN_MASK,
93 	}, {
94 		.opt = XAE_OPTION_VLAN,
95 		.reg = XAE_RCW1_OFFSET,
96 		.m_or = XAE_RCW1_VLAN_MASK,
97 	}, { /* Turn on FCS stripping on receive packets */
98 		.opt = XAE_OPTION_FCS_STRIP,
99 		.reg = XAE_RCW1_OFFSET,
100 		.m_or = XAE_RCW1_FCS_MASK,
101 	}, { /* Turn on FCS insertion on transmit packets */
102 		.opt = XAE_OPTION_FCS_INSERT,
103 		.reg = XAE_TC_OFFSET,
104 		.m_or = XAE_TC_FCS_MASK,
105 	}, { /* Turn off length/type field checking on receive packets */
106 		.opt = XAE_OPTION_LENTYPE_ERR,
107 		.reg = XAE_RCW1_OFFSET,
108 		.m_or = XAE_RCW1_LT_DIS_MASK,
109 	}, { /* Turn on Rx flow control */
110 		.opt = XAE_OPTION_FLOW_CONTROL,
111 		.reg = XAE_FCC_OFFSET,
112 		.m_or = XAE_FCC_FCRX_MASK,
113 	}, { /* Turn on Tx flow control */
114 		.opt = XAE_OPTION_FLOW_CONTROL,
115 		.reg = XAE_FCC_OFFSET,
116 		.m_or = XAE_FCC_FCTX_MASK,
117 	}, { /* Turn on promiscuous frame filtering */
118 		.opt = XAE_OPTION_PROMISC,
119 		.reg = XAE_FMI_OFFSET,
120 		.m_or = XAE_FMI_PM_MASK,
121 	}, { /* Enable transmitter */
122 		.opt = XAE_OPTION_TXEN,
123 		.reg = XAE_TC_OFFSET,
124 		.m_or = XAE_TC_TX_MASK,
125 	}, { /* Enable receiver */
126 		.opt = XAE_OPTION_RXEN,
127 		.reg = XAE_RCW1_OFFSET,
128 		.m_or = XAE_RCW1_RX_MASK,
129 	},
130 	{}
131 };
132 
axienet_get_rx_desc(struct axienet_local * lp,int i)133 static struct skbuf_dma_descriptor *axienet_get_rx_desc(struct axienet_local *lp, int i)
134 {
135 	return lp->rx_skb_ring[i & (RX_BUF_NUM_DEFAULT - 1)];
136 }
137 
axienet_get_tx_desc(struct axienet_local * lp,int i)138 static struct skbuf_dma_descriptor *axienet_get_tx_desc(struct axienet_local *lp, int i)
139 {
140 	return lp->tx_skb_ring[i & (TX_BD_NUM_MAX - 1)];
141 }
142 
143 /**
144  * axienet_dma_in32 - Memory mapped Axi DMA register read
145  * @lp:		Pointer to axienet local structure
146  * @reg:	Address offset from the base address of the Axi DMA core
147  *
148  * Return: The contents of the Axi DMA register
149  *
150  * This function returns the contents of the corresponding Axi DMA register.
151  */
axienet_dma_in32(struct axienet_local * lp,off_t reg)152 static inline u32 axienet_dma_in32(struct axienet_local *lp, off_t reg)
153 {
154 	return ioread32(lp->dma_regs + reg);
155 }
156 
desc_set_phys_addr(struct axienet_local * lp,dma_addr_t addr,struct axidma_bd * desc)157 static void desc_set_phys_addr(struct axienet_local *lp, dma_addr_t addr,
158 			       struct axidma_bd *desc)
159 {
160 	desc->phys = lower_32_bits(addr);
161 	if (lp->features & XAE_FEATURE_DMA_64BIT)
162 		desc->phys_msb = upper_32_bits(addr);
163 }
164 
desc_get_phys_addr(struct axienet_local * lp,struct axidma_bd * desc)165 static dma_addr_t desc_get_phys_addr(struct axienet_local *lp,
166 				     struct axidma_bd *desc)
167 {
168 	dma_addr_t ret = desc->phys;
169 
170 	if (lp->features & XAE_FEATURE_DMA_64BIT)
171 		ret |= ((dma_addr_t)desc->phys_msb << 16) << 16;
172 
173 	return ret;
174 }
175 
176 /**
177  * axienet_dma_bd_release - Release buffer descriptor rings
178  * @ndev:	Pointer to the net_device structure
179  *
180  * This function is used to release the descriptors allocated in
181  * axienet_dma_bd_init. axienet_dma_bd_release is called when Axi Ethernet
182  * driver stop api is called.
183  */
axienet_dma_bd_release(struct net_device * ndev)184 static void axienet_dma_bd_release(struct net_device *ndev)
185 {
186 	int i;
187 	struct axienet_local *lp = netdev_priv(ndev);
188 
189 	/* If we end up here, tx_bd_v must have been DMA allocated. */
190 	dma_free_coherent(lp->dev,
191 			  sizeof(*lp->tx_bd_v) * lp->tx_bd_num,
192 			  lp->tx_bd_v,
193 			  lp->tx_bd_p);
194 
195 	if (!lp->rx_bd_v)
196 		return;
197 
198 	for (i = 0; i < lp->rx_bd_num; i++) {
199 		dma_addr_t phys;
200 
201 		/* A NULL skb means this descriptor has not been initialised
202 		 * at all.
203 		 */
204 		if (!lp->rx_bd_v[i].skb)
205 			break;
206 
207 		dev_kfree_skb(lp->rx_bd_v[i].skb);
208 
209 		/* For each descriptor, we programmed cntrl with the (non-zero)
210 		 * descriptor size, after it had been successfully allocated.
211 		 * So a non-zero value in there means we need to unmap it.
212 		 */
213 		if (lp->rx_bd_v[i].cntrl) {
214 			phys = desc_get_phys_addr(lp, &lp->rx_bd_v[i]);
215 			dma_unmap_single(lp->dev, phys,
216 					 lp->max_frm_size, DMA_FROM_DEVICE);
217 		}
218 	}
219 
220 	dma_free_coherent(lp->dev,
221 			  sizeof(*lp->rx_bd_v) * lp->rx_bd_num,
222 			  lp->rx_bd_v,
223 			  lp->rx_bd_p);
224 }
225 
axienet_dma_rate(struct axienet_local * lp)226 static u64 axienet_dma_rate(struct axienet_local *lp)
227 {
228 	if (lp->axi_clk)
229 		return clk_get_rate(lp->axi_clk);
230 	return 125000000; /* arbitrary guess if no clock rate set */
231 }
232 
233 /**
234  * axienet_calc_cr() - Calculate control register value
235  * @lp: Device private data
236  * @count: Number of completions before an interrupt
237  * @usec: Microseconds after the last completion before an interrupt
238  *
239  * Calculate a control register value based on the coalescing settings. The
240  * run/stop bit is not set.
241  */
axienet_calc_cr(struct axienet_local * lp,u32 count,u32 usec)242 static u32 axienet_calc_cr(struct axienet_local *lp, u32 count, u32 usec)
243 {
244 	u32 cr;
245 
246 	cr = FIELD_PREP(XAXIDMA_COALESCE_MASK, count) | XAXIDMA_IRQ_IOC_MASK |
247 	     XAXIDMA_IRQ_ERROR_MASK;
248 	/* Only set interrupt delay timer if not generating an interrupt on
249 	 * the first packet. Otherwise leave at 0 to disable delay interrupt.
250 	 */
251 	if (count > 1) {
252 		u64 clk_rate = axienet_dma_rate(lp);
253 		u32 timer;
254 
255 		/* 1 Timeout Interval = 125 * (clock period of SG clock) */
256 		timer = DIV64_U64_ROUND_CLOSEST((u64)usec * clk_rate,
257 						XAXIDMA_DELAY_SCALE);
258 
259 		timer = min(timer, FIELD_MAX(XAXIDMA_DELAY_MASK));
260 		cr |= FIELD_PREP(XAXIDMA_DELAY_MASK, timer) |
261 		      XAXIDMA_IRQ_DELAY_MASK;
262 	}
263 
264 	return cr;
265 }
266 
267 /**
268  * axienet_coalesce_params() - Extract coalesce parameters from the CR
269  * @lp: Device private data
270  * @cr: The control register to parse
271  * @count: Number of packets before an interrupt
272  * @usec: Idle time (in usec) before an interrupt
273  */
axienet_coalesce_params(struct axienet_local * lp,u32 cr,u32 * count,u32 * usec)274 static void axienet_coalesce_params(struct axienet_local *lp, u32 cr,
275 				    u32 *count, u32 *usec)
276 {
277 	u64 clk_rate = axienet_dma_rate(lp);
278 	u64 timer = FIELD_GET(XAXIDMA_DELAY_MASK, cr);
279 
280 	*count = FIELD_GET(XAXIDMA_COALESCE_MASK, cr);
281 	*usec = DIV64_U64_ROUND_CLOSEST(timer * XAXIDMA_DELAY_SCALE, clk_rate);
282 }
283 
284 /**
285  * axienet_dma_start - Set up DMA registers and start DMA operation
286  * @lp:		Pointer to the axienet_local structure
287  */
axienet_dma_start(struct axienet_local * lp)288 static void axienet_dma_start(struct axienet_local *lp)
289 {
290 	spin_lock_irq(&lp->rx_cr_lock);
291 
292 	/* Start updating the Rx channel control register */
293 	lp->rx_dma_cr &= ~XAXIDMA_CR_RUNSTOP_MASK;
294 	axienet_dma_out32(lp, XAXIDMA_RX_CR_OFFSET, lp->rx_dma_cr);
295 
296 	/* Populate the tail pointer and bring the Rx Axi DMA engine out of
297 	 * halted state. This will make the Rx side ready for reception.
298 	 */
299 	axienet_dma_out_addr(lp, XAXIDMA_RX_CDESC_OFFSET, lp->rx_bd_p);
300 	lp->rx_dma_cr |= XAXIDMA_CR_RUNSTOP_MASK;
301 	axienet_dma_out32(lp, XAXIDMA_RX_CR_OFFSET, lp->rx_dma_cr);
302 	axienet_dma_out_addr(lp, XAXIDMA_RX_TDESC_OFFSET, lp->rx_bd_p +
303 			     (sizeof(*lp->rx_bd_v) * (lp->rx_bd_num - 1)));
304 	lp->rx_dma_started = true;
305 
306 	spin_unlock_irq(&lp->rx_cr_lock);
307 	spin_lock_irq(&lp->tx_cr_lock);
308 
309 	/* Start updating the Tx channel control register */
310 	lp->tx_dma_cr &= ~XAXIDMA_CR_RUNSTOP_MASK;
311 	axienet_dma_out32(lp, XAXIDMA_TX_CR_OFFSET, lp->tx_dma_cr);
312 
313 	/* Write to the RS (Run-stop) bit in the Tx channel control register.
314 	 * Tx channel is now ready to run. But only after we write to the
315 	 * tail pointer register that the Tx channel will start transmitting.
316 	 */
317 	axienet_dma_out_addr(lp, XAXIDMA_TX_CDESC_OFFSET, lp->tx_bd_p);
318 	lp->tx_dma_cr |= XAXIDMA_CR_RUNSTOP_MASK;
319 	axienet_dma_out32(lp, XAXIDMA_TX_CR_OFFSET, lp->tx_dma_cr);
320 	lp->tx_dma_started = true;
321 
322 	spin_unlock_irq(&lp->tx_cr_lock);
323 }
324 
325 /**
326  * axienet_dma_bd_init - Setup buffer descriptor rings for Axi DMA
327  * @ndev:	Pointer to the net_device structure
328  *
329  * Return: 0, on success -ENOMEM, on failure
330  *
331  * This function is called to initialize the Rx and Tx DMA descriptor
332  * rings. This initializes the descriptors with required default values
333  * and is called when Axi Ethernet driver reset is called.
334  */
axienet_dma_bd_init(struct net_device * ndev)335 static int axienet_dma_bd_init(struct net_device *ndev)
336 {
337 	int i;
338 	struct sk_buff *skb;
339 	struct axienet_local *lp = netdev_priv(ndev);
340 
341 	/* Reset the indexes which are used for accessing the BDs */
342 	lp->tx_bd_ci = 0;
343 	lp->tx_bd_tail = 0;
344 	lp->rx_bd_ci = 0;
345 
346 	/* Allocate the Tx and Rx buffer descriptors. */
347 	lp->tx_bd_v = dma_alloc_coherent(lp->dev,
348 					 sizeof(*lp->tx_bd_v) * lp->tx_bd_num,
349 					 &lp->tx_bd_p, GFP_KERNEL);
350 	if (!lp->tx_bd_v)
351 		return -ENOMEM;
352 
353 	lp->rx_bd_v = dma_alloc_coherent(lp->dev,
354 					 sizeof(*lp->rx_bd_v) * lp->rx_bd_num,
355 					 &lp->rx_bd_p, GFP_KERNEL);
356 	if (!lp->rx_bd_v)
357 		goto out;
358 
359 	for (i = 0; i < lp->tx_bd_num; i++) {
360 		dma_addr_t addr = lp->tx_bd_p +
361 				  sizeof(*lp->tx_bd_v) *
362 				  ((i + 1) % lp->tx_bd_num);
363 
364 		lp->tx_bd_v[i].next = lower_32_bits(addr);
365 		if (lp->features & XAE_FEATURE_DMA_64BIT)
366 			lp->tx_bd_v[i].next_msb = upper_32_bits(addr);
367 	}
368 
369 	for (i = 0; i < lp->rx_bd_num; i++) {
370 		dma_addr_t addr;
371 
372 		addr = lp->rx_bd_p + sizeof(*lp->rx_bd_v) *
373 			((i + 1) % lp->rx_bd_num);
374 		lp->rx_bd_v[i].next = lower_32_bits(addr);
375 		if (lp->features & XAE_FEATURE_DMA_64BIT)
376 			lp->rx_bd_v[i].next_msb = upper_32_bits(addr);
377 
378 		skb = netdev_alloc_skb_ip_align(ndev, lp->max_frm_size);
379 		if (!skb)
380 			goto out;
381 
382 		lp->rx_bd_v[i].skb = skb;
383 		addr = dma_map_single(lp->dev, skb->data,
384 				      lp->max_frm_size, DMA_FROM_DEVICE);
385 		if (dma_mapping_error(lp->dev, addr)) {
386 			netdev_err(ndev, "DMA mapping error\n");
387 			goto out;
388 		}
389 		desc_set_phys_addr(lp, addr, &lp->rx_bd_v[i]);
390 
391 		lp->rx_bd_v[i].cntrl = lp->max_frm_size;
392 	}
393 
394 	axienet_dma_start(lp);
395 
396 	return 0;
397 out:
398 	axienet_dma_bd_release(ndev);
399 	return -ENOMEM;
400 }
401 
402 /**
403  * axienet_set_mac_address - Write the MAC address
404  * @ndev:	Pointer to the net_device structure
405  * @address:	6 byte Address to be written as MAC address
406  *
407  * This function is called to initialize the MAC address of the Axi Ethernet
408  * core. It writes to the UAW0 and UAW1 registers of the core.
409  */
axienet_set_mac_address(struct net_device * ndev,const void * address)410 static void axienet_set_mac_address(struct net_device *ndev,
411 				    const void *address)
412 {
413 	struct axienet_local *lp = netdev_priv(ndev);
414 
415 	if (address)
416 		eth_hw_addr_set(ndev, address);
417 	if (!is_valid_ether_addr(ndev->dev_addr))
418 		eth_hw_addr_random(ndev);
419 
420 	/* Set up unicast MAC address filter set its mac address */
421 	axienet_iow(lp, XAE_UAW0_OFFSET,
422 		    (ndev->dev_addr[0]) |
423 		    (ndev->dev_addr[1] << 8) |
424 		    (ndev->dev_addr[2] << 16) |
425 		    (ndev->dev_addr[3] << 24));
426 	axienet_iow(lp, XAE_UAW1_OFFSET,
427 		    (((axienet_ior(lp, XAE_UAW1_OFFSET)) &
428 		      ~XAE_UAW1_UNICASTADDR_MASK) |
429 		     (ndev->dev_addr[4] |
430 		     (ndev->dev_addr[5] << 8))));
431 }
432 
433 /**
434  * netdev_set_mac_address - Write the MAC address (from outside the driver)
435  * @ndev:	Pointer to the net_device structure
436  * @p:		6 byte Address to be written as MAC address
437  *
438  * Return: 0 for all conditions. Presently, there is no failure case.
439  *
440  * This function is called to initialize the MAC address of the Axi Ethernet
441  * core. It calls the core specific axienet_set_mac_address. This is the
442  * function that goes into net_device_ops structure entry ndo_set_mac_address.
443  */
netdev_set_mac_address(struct net_device * ndev,void * p)444 static int netdev_set_mac_address(struct net_device *ndev, void *p)
445 {
446 	struct sockaddr *addr = p;
447 
448 	axienet_set_mac_address(ndev, addr->sa_data);
449 	return 0;
450 }
451 
452 /**
453  * axienet_set_multicast_list - Prepare the multicast table
454  * @ndev:	Pointer to the net_device structure
455  *
456  * This function is called to initialize the multicast table during
457  * initialization. The Axi Ethernet basic multicast support has a four-entry
458  * multicast table which is initialized here. Additionally this function
459  * goes into the net_device_ops structure entry ndo_set_multicast_list. This
460  * means whenever the multicast table entries need to be updated this
461  * function gets called.
462  */
axienet_set_multicast_list(struct net_device * ndev)463 static void axienet_set_multicast_list(struct net_device *ndev)
464 {
465 	int i = 0;
466 	u32 reg, af0reg, af1reg;
467 	struct axienet_local *lp = netdev_priv(ndev);
468 
469 	reg = axienet_ior(lp, XAE_FMI_OFFSET);
470 	reg &= ~XAE_FMI_PM_MASK;
471 	if (ndev->flags & IFF_PROMISC)
472 		reg |= XAE_FMI_PM_MASK;
473 	else
474 		reg &= ~XAE_FMI_PM_MASK;
475 	axienet_iow(lp, XAE_FMI_OFFSET, reg);
476 
477 	if (ndev->flags & IFF_ALLMULTI ||
478 	    netdev_mc_count(ndev) > XAE_MULTICAST_CAM_TABLE_NUM) {
479 		reg &= 0xFFFFFF00;
480 		axienet_iow(lp, XAE_FMI_OFFSET, reg);
481 		axienet_iow(lp, XAE_AF0_OFFSET, 1); /* Multicast bit */
482 		axienet_iow(lp, XAE_AF1_OFFSET, 0);
483 		axienet_iow(lp, XAE_AM0_OFFSET, 1); /* ditto */
484 		axienet_iow(lp, XAE_AM1_OFFSET, 0);
485 		axienet_iow(lp, XAE_FFE_OFFSET, 1);
486 		i = 1;
487 	} else if (!netdev_mc_empty(ndev)) {
488 		struct netdev_hw_addr *ha;
489 
490 		netdev_for_each_mc_addr(ha, ndev) {
491 			if (i >= XAE_MULTICAST_CAM_TABLE_NUM)
492 				break;
493 
494 			af0reg = (ha->addr[0]);
495 			af0reg |= (ha->addr[1] << 8);
496 			af0reg |= (ha->addr[2] << 16);
497 			af0reg |= (ha->addr[3] << 24);
498 
499 			af1reg = (ha->addr[4]);
500 			af1reg |= (ha->addr[5] << 8);
501 
502 			reg &= 0xFFFFFF00;
503 			reg |= i;
504 
505 			axienet_iow(lp, XAE_FMI_OFFSET, reg);
506 			axienet_iow(lp, XAE_AF0_OFFSET, af0reg);
507 			axienet_iow(lp, XAE_AF1_OFFSET, af1reg);
508 			axienet_iow(lp, XAE_AM0_OFFSET, 0xffffffff);
509 			axienet_iow(lp, XAE_AM1_OFFSET, 0x0000ffff);
510 			axienet_iow(lp, XAE_FFE_OFFSET, 1);
511 			i++;
512 		}
513 	}
514 
515 	for (; i < XAE_MULTICAST_CAM_TABLE_NUM; i++) {
516 		reg &= 0xFFFFFF00;
517 		reg |= i;
518 		axienet_iow(lp, XAE_FMI_OFFSET, reg);
519 		axienet_iow(lp, XAE_FFE_OFFSET, 0);
520 	}
521 }
522 
523 /**
524  * axienet_setoptions - Set an Axi Ethernet option
525  * @ndev:	Pointer to the net_device structure
526  * @options:	Option to be enabled/disabled
527  *
528  * The Axi Ethernet core has multiple features which can be selectively turned
529  * on or off. The typical options could be jumbo frame option, basic VLAN
530  * option, promiscuous mode option etc. This function is used to set or clear
531  * these options in the Axi Ethernet hardware. This is done through
532  * axienet_option structure .
533  */
axienet_setoptions(struct net_device * ndev,u32 options)534 static void axienet_setoptions(struct net_device *ndev, u32 options)
535 {
536 	int reg;
537 	struct axienet_local *lp = netdev_priv(ndev);
538 	struct axienet_option *tp = &axienet_options[0];
539 
540 	while (tp->opt) {
541 		reg = ((axienet_ior(lp, tp->reg)) & ~(tp->m_or));
542 		if (options & tp->opt)
543 			reg |= tp->m_or;
544 		axienet_iow(lp, tp->reg, reg);
545 		tp++;
546 	}
547 
548 	lp->options |= options;
549 }
550 
axienet_stat(struct axienet_local * lp,enum temac_stat stat)551 static u64 axienet_stat(struct axienet_local *lp, enum temac_stat stat)
552 {
553 	u32 counter;
554 
555 	if (lp->reset_in_progress)
556 		return lp->hw_stat_base[stat];
557 
558 	counter = axienet_ior(lp, XAE_STATS_OFFSET + stat * 8);
559 	return lp->hw_stat_base[stat] + (counter - lp->hw_last_counter[stat]);
560 }
561 
axienet_stats_update(struct axienet_local * lp,bool reset)562 static void axienet_stats_update(struct axienet_local *lp, bool reset)
563 {
564 	enum temac_stat stat;
565 
566 	write_seqcount_begin(&lp->hw_stats_seqcount);
567 	lp->reset_in_progress = reset;
568 	for (stat = 0; stat < STAT_COUNT; stat++) {
569 		u32 counter = axienet_ior(lp, XAE_STATS_OFFSET + stat * 8);
570 
571 		lp->hw_stat_base[stat] += counter - lp->hw_last_counter[stat];
572 		lp->hw_last_counter[stat] = counter;
573 	}
574 	write_seqcount_end(&lp->hw_stats_seqcount);
575 }
576 
axienet_refresh_stats(struct work_struct * work)577 static void axienet_refresh_stats(struct work_struct *work)
578 {
579 	struct axienet_local *lp = container_of(work, struct axienet_local,
580 						stats_work.work);
581 
582 	mutex_lock(&lp->stats_lock);
583 	axienet_stats_update(lp, false);
584 	mutex_unlock(&lp->stats_lock);
585 
586 	/* Just less than 2^32 bytes at 2.5 GBit/s */
587 	schedule_delayed_work(&lp->stats_work, 13 * HZ);
588 }
589 
__axienet_device_reset(struct axienet_local * lp)590 static int __axienet_device_reset(struct axienet_local *lp)
591 {
592 	u32 value;
593 	int ret;
594 
595 	/* Save statistics counters in case they will be reset */
596 	mutex_lock(&lp->stats_lock);
597 	if (lp->features & XAE_FEATURE_STATS)
598 		axienet_stats_update(lp, true);
599 
600 	/* Reset Axi DMA. This would reset Axi Ethernet core as well. The reset
601 	 * process of Axi DMA takes a while to complete as all pending
602 	 * commands/transfers will be flushed or completed during this
603 	 * reset process.
604 	 * Note that even though both TX and RX have their own reset register,
605 	 * they both reset the entire DMA core, so only one needs to be used.
606 	 */
607 	axienet_dma_out32(lp, XAXIDMA_TX_CR_OFFSET, XAXIDMA_CR_RESET_MASK);
608 	ret = read_poll_timeout(axienet_dma_in32, value,
609 				!(value & XAXIDMA_CR_RESET_MASK),
610 				DELAY_OF_ONE_MILLISEC, 50000, false, lp,
611 				XAXIDMA_TX_CR_OFFSET);
612 	if (ret) {
613 		dev_err(lp->dev, "%s: DMA reset timeout!\n", __func__);
614 		goto out;
615 	}
616 
617 	/* Wait for PhyRstCmplt bit to be set, indicating the PHY reset has finished */
618 	ret = read_poll_timeout(axienet_ior, value,
619 				value & XAE_INT_PHYRSTCMPLT_MASK,
620 				DELAY_OF_ONE_MILLISEC, 50000, false, lp,
621 				XAE_IS_OFFSET);
622 	if (ret) {
623 		dev_err(lp->dev, "%s: timeout waiting for PhyRstCmplt\n", __func__);
624 		goto out;
625 	}
626 
627 	/* Update statistics counters with new values */
628 	if (lp->features & XAE_FEATURE_STATS) {
629 		enum temac_stat stat;
630 
631 		write_seqcount_begin(&lp->hw_stats_seqcount);
632 		lp->reset_in_progress = false;
633 		for (stat = 0; stat < STAT_COUNT; stat++) {
634 			u32 counter =
635 				axienet_ior(lp, XAE_STATS_OFFSET + stat * 8);
636 
637 			lp->hw_stat_base[stat] +=
638 				lp->hw_last_counter[stat] - counter;
639 			lp->hw_last_counter[stat] = counter;
640 		}
641 		write_seqcount_end(&lp->hw_stats_seqcount);
642 	}
643 
644 out:
645 	mutex_unlock(&lp->stats_lock);
646 	return ret;
647 }
648 
649 /**
650  * axienet_dma_stop - Stop DMA operation
651  * @lp:		Pointer to the axienet_local structure
652  */
axienet_dma_stop(struct axienet_local * lp)653 static void axienet_dma_stop(struct axienet_local *lp)
654 {
655 	int count;
656 	u32 cr, sr;
657 
658 	spin_lock_irq(&lp->rx_cr_lock);
659 
660 	cr = lp->rx_dma_cr & ~(XAXIDMA_CR_RUNSTOP_MASK | XAXIDMA_IRQ_ALL_MASK);
661 	axienet_dma_out32(lp, XAXIDMA_RX_CR_OFFSET, cr);
662 	lp->rx_dma_started = false;
663 
664 	spin_unlock_irq(&lp->rx_cr_lock);
665 	synchronize_irq(lp->rx_irq);
666 
667 	spin_lock_irq(&lp->tx_cr_lock);
668 
669 	cr = lp->tx_dma_cr & ~(XAXIDMA_CR_RUNSTOP_MASK | XAXIDMA_IRQ_ALL_MASK);
670 	axienet_dma_out32(lp, XAXIDMA_TX_CR_OFFSET, cr);
671 	lp->tx_dma_started = false;
672 
673 	spin_unlock_irq(&lp->tx_cr_lock);
674 	synchronize_irq(lp->tx_irq);
675 
676 	/* Give DMAs a chance to halt gracefully */
677 	sr = axienet_dma_in32(lp, XAXIDMA_RX_SR_OFFSET);
678 	for (count = 0; !(sr & XAXIDMA_SR_HALT_MASK) && count < 5; ++count) {
679 		msleep(20);
680 		sr = axienet_dma_in32(lp, XAXIDMA_RX_SR_OFFSET);
681 	}
682 
683 	sr = axienet_dma_in32(lp, XAXIDMA_TX_SR_OFFSET);
684 	for (count = 0; !(sr & XAXIDMA_SR_HALT_MASK) && count < 5; ++count) {
685 		msleep(20);
686 		sr = axienet_dma_in32(lp, XAXIDMA_TX_SR_OFFSET);
687 	}
688 
689 	/* Do a reset to ensure DMA is really stopped */
690 	axienet_lock_mii(lp);
691 	__axienet_device_reset(lp);
692 	axienet_unlock_mii(lp);
693 }
694 
695 /**
696  * axienet_device_reset - Reset and initialize the Axi Ethernet hardware.
697  * @ndev:	Pointer to the net_device structure
698  *
699  * This function is called to reset and initialize the Axi Ethernet core. This
700  * is typically called during initialization. It does a reset of the Axi DMA
701  * Rx/Tx channels and initializes the Axi DMA BDs. Since Axi DMA reset lines
702  * are connected to Axi Ethernet reset lines, this in turn resets the Axi
703  * Ethernet core. No separate hardware reset is done for the Axi Ethernet
704  * core.
705  * Returns 0 on success or a negative error number otherwise.
706  */
axienet_device_reset(struct net_device * ndev)707 static int axienet_device_reset(struct net_device *ndev)
708 {
709 	u32 axienet_status;
710 	struct axienet_local *lp = netdev_priv(ndev);
711 	int ret;
712 
713 	lp->max_frm_size = XAE_MAX_VLAN_FRAME_SIZE;
714 	lp->options |= XAE_OPTION_VLAN;
715 	lp->options &= (~XAE_OPTION_JUMBO);
716 
717 	if (ndev->mtu > XAE_MTU && ndev->mtu <= XAE_JUMBO_MTU) {
718 		lp->max_frm_size = ndev->mtu + VLAN_ETH_HLEN +
719 					XAE_TRL_SIZE;
720 
721 		if (lp->max_frm_size <= lp->rxmem)
722 			lp->options |= XAE_OPTION_JUMBO;
723 	}
724 
725 	if (!lp->use_dmaengine) {
726 		ret = __axienet_device_reset(lp);
727 		if (ret)
728 			return ret;
729 
730 		ret = axienet_dma_bd_init(ndev);
731 		if (ret) {
732 			netdev_err(ndev, "%s: descriptor allocation failed\n",
733 				   __func__);
734 			return ret;
735 		}
736 	}
737 
738 	axienet_status = axienet_ior(lp, XAE_RCW1_OFFSET);
739 	axienet_status &= ~XAE_RCW1_RX_MASK;
740 	axienet_iow(lp, XAE_RCW1_OFFSET, axienet_status);
741 
742 	axienet_status = axienet_ior(lp, XAE_IP_OFFSET);
743 	if (axienet_status & XAE_INT_RXRJECT_MASK)
744 		axienet_iow(lp, XAE_IS_OFFSET, XAE_INT_RXRJECT_MASK);
745 	axienet_iow(lp, XAE_IE_OFFSET, lp->eth_irq > 0 ?
746 		    XAE_INT_RECV_ERROR_MASK : 0);
747 
748 	axienet_iow(lp, XAE_FCC_OFFSET, XAE_FCC_FCRX_MASK);
749 
750 	/* Sync default options with HW but leave receiver and
751 	 * transmitter disabled.
752 	 */
753 	axienet_setoptions(ndev, lp->options &
754 			   ~(XAE_OPTION_TXEN | XAE_OPTION_RXEN));
755 	axienet_set_mac_address(ndev, NULL);
756 	axienet_set_multicast_list(ndev);
757 	axienet_setoptions(ndev, lp->options);
758 
759 	netif_trans_update(ndev);
760 
761 	return 0;
762 }
763 
764 /**
765  * axienet_free_tx_chain - Clean up a series of linked TX descriptors.
766  * @lp:		Pointer to the axienet_local structure
767  * @first_bd:	Index of first descriptor to clean up
768  * @nr_bds:	Max number of descriptors to clean up
769  * @force:	Whether to clean descriptors even if not complete
770  * @sizep:	Pointer to a u32 filled with the total sum of all bytes
771  *		in all cleaned-up descriptors. Ignored if NULL.
772  * @budget:	NAPI budget (use 0 when not called from NAPI poll)
773  *
774  * Would either be called after a successful transmit operation, or after
775  * there was an error when setting up the chain.
776  * Returns the number of packets handled.
777  */
axienet_free_tx_chain(struct axienet_local * lp,u32 first_bd,int nr_bds,bool force,u32 * sizep,int budget)778 static int axienet_free_tx_chain(struct axienet_local *lp, u32 first_bd,
779 				 int nr_bds, bool force, u32 *sizep, int budget)
780 {
781 	struct axidma_bd *cur_p;
782 	unsigned int status;
783 	int i, packets = 0;
784 	dma_addr_t phys;
785 
786 	for (i = 0; i < nr_bds; i++) {
787 		cur_p = &lp->tx_bd_v[(first_bd + i) % lp->tx_bd_num];
788 		status = cur_p->status;
789 
790 		/* If force is not specified, clean up only descriptors
791 		 * that have been completed by the MAC.
792 		 */
793 		if (!force && !(status & XAXIDMA_BD_STS_COMPLETE_MASK))
794 			break;
795 
796 		/* Ensure we see complete descriptor update */
797 		dma_rmb();
798 		phys = desc_get_phys_addr(lp, cur_p);
799 		dma_unmap_single(lp->dev, phys,
800 				 (cur_p->cntrl & XAXIDMA_BD_CTRL_LENGTH_MASK),
801 				 DMA_TO_DEVICE);
802 
803 		if (cur_p->skb && (status & XAXIDMA_BD_STS_COMPLETE_MASK)) {
804 			napi_consume_skb(cur_p->skb, budget);
805 			packets++;
806 		}
807 
808 		cur_p->app0 = 0;
809 		cur_p->app1 = 0;
810 		cur_p->app2 = 0;
811 		cur_p->app4 = 0;
812 		cur_p->skb = NULL;
813 		/* ensure our transmit path and device don't prematurely see status cleared */
814 		wmb();
815 		cur_p->cntrl = 0;
816 		cur_p->status = 0;
817 
818 		if (sizep)
819 			*sizep += status & XAXIDMA_BD_STS_ACTUAL_LEN_MASK;
820 	}
821 
822 	if (!force) {
823 		lp->tx_bd_ci += i;
824 		if (lp->tx_bd_ci >= lp->tx_bd_num)
825 			lp->tx_bd_ci %= lp->tx_bd_num;
826 	}
827 
828 	return packets;
829 }
830 
831 /**
832  * axienet_check_tx_bd_space - Checks if a BD/group of BDs are currently busy
833  * @lp:		Pointer to the axienet_local structure
834  * @num_frag:	The number of BDs to check for
835  *
836  * Return: 0, on success
837  *	    NETDEV_TX_BUSY, if any of the descriptors are not free
838  *
839  * This function is invoked before BDs are allocated and transmission starts.
840  * This function returns 0 if a BD or group of BDs can be allocated for
841  * transmission. If the BD or any of the BDs are not free the function
842  * returns a busy status.
843  */
axienet_check_tx_bd_space(struct axienet_local * lp,int num_frag)844 static inline int axienet_check_tx_bd_space(struct axienet_local *lp,
845 					    int num_frag)
846 {
847 	struct axidma_bd *cur_p;
848 
849 	/* Ensure we see all descriptor updates from device or TX polling */
850 	rmb();
851 	cur_p = &lp->tx_bd_v[(READ_ONCE(lp->tx_bd_tail) + num_frag) %
852 			     lp->tx_bd_num];
853 	if (cur_p->cntrl)
854 		return NETDEV_TX_BUSY;
855 	return 0;
856 }
857 
858 /**
859  * axienet_dma_tx_cb - DMA engine callback for TX channel.
860  * @data:       Pointer to the axienet_local structure.
861  * @result:     error reporting through dmaengine_result.
862  * This function is called by dmaengine driver for TX channel to notify
863  * that the transmit is done.
864  */
axienet_dma_tx_cb(void * data,const struct dmaengine_result * result)865 static void axienet_dma_tx_cb(void *data, const struct dmaengine_result *result)
866 {
867 	struct skbuf_dma_descriptor *skbuf_dma;
868 	struct axienet_local *lp = data;
869 	struct netdev_queue *txq;
870 	int len;
871 
872 	skbuf_dma = axienet_get_tx_desc(lp, lp->tx_ring_tail++);
873 	len = skbuf_dma->skb->len;
874 	txq = skb_get_tx_queue(lp->ndev, skbuf_dma->skb);
875 	u64_stats_update_begin(&lp->tx_stat_sync);
876 	u64_stats_add(&lp->tx_bytes, len);
877 	u64_stats_add(&lp->tx_packets, 1);
878 	u64_stats_update_end(&lp->tx_stat_sync);
879 	dma_unmap_sg(lp->dev, skbuf_dma->sgl, skbuf_dma->sg_len, DMA_TO_DEVICE);
880 	dev_consume_skb_any(skbuf_dma->skb);
881 	netif_txq_completed_wake(txq, 1, len,
882 				 CIRC_SPACE(lp->tx_ring_head, lp->tx_ring_tail, TX_BD_NUM_MAX),
883 				 2 * MAX_SKB_FRAGS);
884 }
885 
886 /**
887  * axienet_start_xmit_dmaengine - Starts the transmission.
888  * @skb:        sk_buff pointer that contains data to be Txed.
889  * @ndev:       Pointer to net_device structure.
890  *
891  * Return: NETDEV_TX_OK on success or any non space errors.
892  *         NETDEV_TX_BUSY when free element in TX skb ring buffer
893  *         is not available.
894  *
895  * This function is invoked to initiate transmission. The
896  * function sets the skbs, register dma callback API and submit
897  * the dma transaction.
898  * Additionally if checksum offloading is supported,
899  * it populates AXI Stream Control fields with appropriate values.
900  */
901 static netdev_tx_t
axienet_start_xmit_dmaengine(struct sk_buff * skb,struct net_device * ndev)902 axienet_start_xmit_dmaengine(struct sk_buff *skb, struct net_device *ndev)
903 {
904 	struct dma_async_tx_descriptor *dma_tx_desc = NULL;
905 	struct axienet_local *lp = netdev_priv(ndev);
906 	u32 app_metadata[DMA_NUM_APP_WORDS] = {0};
907 	struct skbuf_dma_descriptor *skbuf_dma;
908 	struct dma_device *dma_dev;
909 	struct netdev_queue *txq;
910 	u32 csum_start_off;
911 	u32 csum_index_off;
912 	int sg_len;
913 	int ret;
914 
915 	dma_dev = lp->tx_chan->device;
916 	sg_len = skb_shinfo(skb)->nr_frags + 1;
917 	if (CIRC_SPACE(lp->tx_ring_head, lp->tx_ring_tail, TX_BD_NUM_MAX) <= sg_len) {
918 		netif_stop_queue(ndev);
919 		if (net_ratelimit())
920 			netdev_warn(ndev, "TX ring unexpectedly full\n");
921 		return NETDEV_TX_BUSY;
922 	}
923 
924 	skbuf_dma = axienet_get_tx_desc(lp, lp->tx_ring_head);
925 	if (!skbuf_dma)
926 		goto xmit_error_drop_skb;
927 
928 	lp->tx_ring_head++;
929 	sg_init_table(skbuf_dma->sgl, sg_len);
930 	ret = skb_to_sgvec(skb, skbuf_dma->sgl, 0, skb->len);
931 	if (ret < 0)
932 		goto xmit_error_drop_skb;
933 
934 	ret = dma_map_sg(lp->dev, skbuf_dma->sgl, sg_len, DMA_TO_DEVICE);
935 	if (!ret)
936 		goto xmit_error_drop_skb;
937 
938 	/* Fill up app fields for checksum */
939 	if (skb->ip_summed == CHECKSUM_PARTIAL) {
940 		if (lp->features & XAE_FEATURE_FULL_TX_CSUM) {
941 			/* Tx Full Checksum Offload Enabled */
942 			app_metadata[0] |= 2;
943 		} else if (lp->features & XAE_FEATURE_PARTIAL_TX_CSUM) {
944 			csum_start_off = skb_transport_offset(skb);
945 			csum_index_off = csum_start_off + skb->csum_offset;
946 			/* Tx Partial Checksum Offload Enabled */
947 			app_metadata[0] |= 1;
948 			app_metadata[1] = (csum_start_off << 16) | csum_index_off;
949 		}
950 	} else if (skb->ip_summed == CHECKSUM_UNNECESSARY) {
951 		app_metadata[0] |= 2; /* Tx Full Checksum Offload Enabled */
952 	}
953 
954 	dma_tx_desc = dma_dev->device_prep_slave_sg(lp->tx_chan, skbuf_dma->sgl,
955 			sg_len, DMA_MEM_TO_DEV,
956 			DMA_PREP_INTERRUPT, (void *)app_metadata);
957 	if (!dma_tx_desc)
958 		goto xmit_error_unmap_sg;
959 
960 	skbuf_dma->skb = skb;
961 	skbuf_dma->sg_len = sg_len;
962 	dma_tx_desc->callback_param = lp;
963 	dma_tx_desc->callback_result = axienet_dma_tx_cb;
964 	txq = skb_get_tx_queue(lp->ndev, skb);
965 	netdev_tx_sent_queue(txq, skb->len);
966 	netif_txq_maybe_stop(txq, CIRC_SPACE(lp->tx_ring_head, lp->tx_ring_tail, TX_BD_NUM_MAX),
967 			     MAX_SKB_FRAGS + 1, 2 * MAX_SKB_FRAGS);
968 
969 	dmaengine_submit(dma_tx_desc);
970 	dma_async_issue_pending(lp->tx_chan);
971 	return NETDEV_TX_OK;
972 
973 xmit_error_unmap_sg:
974 	dma_unmap_sg(lp->dev, skbuf_dma->sgl, sg_len, DMA_TO_DEVICE);
975 xmit_error_drop_skb:
976 	dev_kfree_skb_any(skb);
977 	return NETDEV_TX_OK;
978 }
979 
980 /**
981  * axienet_tx_poll - Invoked once a transmit is completed by the
982  * Axi DMA Tx channel.
983  * @napi:	Pointer to NAPI structure.
984  * @budget:	Max number of TX packets to process.
985  *
986  * Return: Number of TX packets processed.
987  *
988  * This function is invoked from the NAPI processing to notify the completion
989  * of transmit operation. It clears fields in the corresponding Tx BDs and
990  * unmaps the corresponding buffer so that CPU can regain ownership of the
991  * buffer. It finally invokes "netif_wake_queue" to restart transmission if
992  * required.
993  */
axienet_tx_poll(struct napi_struct * napi,int budget)994 static int axienet_tx_poll(struct napi_struct *napi, int budget)
995 {
996 	struct axienet_local *lp = container_of(napi, struct axienet_local, napi_tx);
997 	struct net_device *ndev = lp->ndev;
998 	u32 size = 0;
999 	int packets;
1000 
1001 	packets = axienet_free_tx_chain(lp, lp->tx_bd_ci, lp->tx_bd_num, false,
1002 					&size, budget);
1003 
1004 	if (packets) {
1005 		netdev_completed_queue(ndev, packets, size);
1006 		u64_stats_update_begin(&lp->tx_stat_sync);
1007 		u64_stats_add(&lp->tx_packets, packets);
1008 		u64_stats_add(&lp->tx_bytes, size);
1009 		u64_stats_update_end(&lp->tx_stat_sync);
1010 
1011 		/* Matches barrier in axienet_start_xmit */
1012 		smp_mb();
1013 
1014 		if (!axienet_check_tx_bd_space(lp, MAX_SKB_FRAGS + 1))
1015 			netif_wake_queue(ndev);
1016 	}
1017 
1018 	if (packets < budget && napi_complete_done(napi, packets)) {
1019 		/* Re-enable TX completion interrupts. This should
1020 		 * cause an immediate interrupt if any TX packets are
1021 		 * already pending.
1022 		 */
1023 		spin_lock_irq(&lp->tx_cr_lock);
1024 		axienet_dma_out32(lp, XAXIDMA_TX_CR_OFFSET, lp->tx_dma_cr);
1025 		spin_unlock_irq(&lp->tx_cr_lock);
1026 	}
1027 	return packets;
1028 }
1029 
1030 /**
1031  * axienet_start_xmit - Starts the transmission.
1032  * @skb:	sk_buff pointer that contains data to be Txed.
1033  * @ndev:	Pointer to net_device structure.
1034  *
1035  * Return: NETDEV_TX_OK, on success
1036  *	    NETDEV_TX_BUSY, if any of the descriptors are not free
1037  *
1038  * This function is invoked from upper layers to initiate transmission. The
1039  * function uses the next available free BDs and populates their fields to
1040  * start the transmission. Additionally if checksum offloading is supported,
1041  * it populates AXI Stream Control fields with appropriate values.
1042  */
1043 static netdev_tx_t
axienet_start_xmit(struct sk_buff * skb,struct net_device * ndev)1044 axienet_start_xmit(struct sk_buff *skb, struct net_device *ndev)
1045 {
1046 	u32 ii;
1047 	u32 num_frag;
1048 	u32 csum_start_off;
1049 	u32 csum_index_off;
1050 	skb_frag_t *frag;
1051 	dma_addr_t tail_p, phys;
1052 	u32 orig_tail_ptr, new_tail_ptr;
1053 	struct axienet_local *lp = netdev_priv(ndev);
1054 	struct axidma_bd *cur_p;
1055 
1056 	orig_tail_ptr = lp->tx_bd_tail;
1057 	new_tail_ptr = orig_tail_ptr;
1058 
1059 	num_frag = skb_shinfo(skb)->nr_frags;
1060 	cur_p = &lp->tx_bd_v[orig_tail_ptr];
1061 
1062 	if (axienet_check_tx_bd_space(lp, num_frag + 1)) {
1063 		/* Should not happen as last start_xmit call should have
1064 		 * checked for sufficient space and queue should only be
1065 		 * woken when sufficient space is available.
1066 		 */
1067 		netif_stop_queue(ndev);
1068 		if (net_ratelimit())
1069 			netdev_warn(ndev, "TX ring unexpectedly full\n");
1070 		return NETDEV_TX_BUSY;
1071 	}
1072 
1073 	if (skb->ip_summed == CHECKSUM_PARTIAL) {
1074 		if (lp->features & XAE_FEATURE_FULL_TX_CSUM) {
1075 			/* Tx Full Checksum Offload Enabled */
1076 			cur_p->app0 |= 2;
1077 		} else if (lp->features & XAE_FEATURE_PARTIAL_TX_CSUM) {
1078 			csum_start_off = skb_transport_offset(skb);
1079 			csum_index_off = csum_start_off + skb->csum_offset;
1080 			/* Tx Partial Checksum Offload Enabled */
1081 			cur_p->app0 |= 1;
1082 			cur_p->app1 = (csum_start_off << 16) | csum_index_off;
1083 		}
1084 	} else if (skb->ip_summed == CHECKSUM_UNNECESSARY) {
1085 		cur_p->app0 |= 2; /* Tx Full Checksum Offload Enabled */
1086 	}
1087 
1088 	phys = dma_map_single(lp->dev, skb->data,
1089 			      skb_headlen(skb), DMA_TO_DEVICE);
1090 	if (unlikely(dma_mapping_error(lp->dev, phys))) {
1091 		if (net_ratelimit())
1092 			netdev_err(ndev, "TX DMA mapping error\n");
1093 		ndev->stats.tx_dropped++;
1094 		dev_kfree_skb_any(skb);
1095 		return NETDEV_TX_OK;
1096 	}
1097 	desc_set_phys_addr(lp, phys, cur_p);
1098 	cur_p->cntrl = skb_headlen(skb) | XAXIDMA_BD_CTRL_TXSOF_MASK;
1099 
1100 	for (ii = 0; ii < num_frag; ii++) {
1101 		if (++new_tail_ptr >= lp->tx_bd_num)
1102 			new_tail_ptr = 0;
1103 		cur_p = &lp->tx_bd_v[new_tail_ptr];
1104 		frag = &skb_shinfo(skb)->frags[ii];
1105 		phys = dma_map_single(lp->dev,
1106 				      skb_frag_address(frag),
1107 				      skb_frag_size(frag),
1108 				      DMA_TO_DEVICE);
1109 		if (unlikely(dma_mapping_error(lp->dev, phys))) {
1110 			if (net_ratelimit())
1111 				netdev_err(ndev, "TX DMA mapping error\n");
1112 			ndev->stats.tx_dropped++;
1113 			axienet_free_tx_chain(lp, orig_tail_ptr, ii + 1,
1114 					      true, NULL, 0);
1115 			dev_kfree_skb_any(skb);
1116 			return NETDEV_TX_OK;
1117 		}
1118 		desc_set_phys_addr(lp, phys, cur_p);
1119 		cur_p->cntrl = skb_frag_size(frag);
1120 	}
1121 
1122 	cur_p->cntrl |= XAXIDMA_BD_CTRL_TXEOF_MASK;
1123 	cur_p->skb = skb;
1124 
1125 	tail_p = lp->tx_bd_p + sizeof(*lp->tx_bd_v) * new_tail_ptr;
1126 	if (++new_tail_ptr >= lp->tx_bd_num)
1127 		new_tail_ptr = 0;
1128 	WRITE_ONCE(lp->tx_bd_tail, new_tail_ptr);
1129 	netdev_sent_queue(ndev, skb->len);
1130 
1131 	/* Start the transfer */
1132 	axienet_dma_out_addr(lp, XAXIDMA_TX_TDESC_OFFSET, tail_p);
1133 
1134 	/* Stop queue if next transmit may not have space */
1135 	if (axienet_check_tx_bd_space(lp, MAX_SKB_FRAGS + 1)) {
1136 		netif_stop_queue(ndev);
1137 
1138 		/* Matches barrier in axienet_tx_poll */
1139 		smp_mb();
1140 
1141 		/* Space might have just been freed - check again */
1142 		if (!axienet_check_tx_bd_space(lp, MAX_SKB_FRAGS + 1))
1143 			netif_wake_queue(ndev);
1144 	}
1145 
1146 	return NETDEV_TX_OK;
1147 }
1148 
1149 /**
1150  * axienet_dma_rx_cb - DMA engine callback for RX channel.
1151  * @data:       Pointer to the skbuf_dma_descriptor structure.
1152  * @result:     error reporting through dmaengine_result.
1153  * This function is called by dmaengine driver for RX channel to notify
1154  * that the packet is received.
1155  */
axienet_dma_rx_cb(void * data,const struct dmaengine_result * result)1156 static void axienet_dma_rx_cb(void *data, const struct dmaengine_result *result)
1157 {
1158 	struct skbuf_dma_descriptor *skbuf_dma;
1159 	size_t meta_len, meta_max_len, rx_len;
1160 	struct axienet_local *lp = data;
1161 	struct sk_buff *skb;
1162 	u32 *app_metadata;
1163 
1164 	skbuf_dma = axienet_get_rx_desc(lp, lp->rx_ring_tail++);
1165 	skb = skbuf_dma->skb;
1166 	app_metadata = dmaengine_desc_get_metadata_ptr(skbuf_dma->desc, &meta_len,
1167 						       &meta_max_len);
1168 	dma_unmap_single(lp->dev, skbuf_dma->dma_address, lp->max_frm_size,
1169 			 DMA_FROM_DEVICE);
1170 	/* TODO: Derive app word index programmatically */
1171 	rx_len = (app_metadata[LEN_APP] & 0xFFFF);
1172 	skb_put(skb, rx_len);
1173 	skb->protocol = eth_type_trans(skb, lp->ndev);
1174 	skb->ip_summed = CHECKSUM_NONE;
1175 
1176 	__netif_rx(skb);
1177 	u64_stats_update_begin(&lp->rx_stat_sync);
1178 	u64_stats_add(&lp->rx_packets, 1);
1179 	u64_stats_add(&lp->rx_bytes, rx_len);
1180 	u64_stats_update_end(&lp->rx_stat_sync);
1181 	axienet_rx_submit_desc(lp->ndev);
1182 	dma_async_issue_pending(lp->rx_chan);
1183 }
1184 
1185 /**
1186  * axienet_rx_poll - Triggered by RX ISR to complete the BD processing.
1187  * @napi:	Pointer to NAPI structure.
1188  * @budget:	Max number of RX packets to process.
1189  *
1190  * Return: Number of RX packets processed.
1191  */
axienet_rx_poll(struct napi_struct * napi,int budget)1192 static int axienet_rx_poll(struct napi_struct *napi, int budget)
1193 {
1194 	u32 length;
1195 	u32 csumstatus;
1196 	u32 size = 0;
1197 	int packets = 0;
1198 	dma_addr_t tail_p = 0;
1199 	struct axidma_bd *cur_p;
1200 	struct sk_buff *skb, *new_skb;
1201 	struct axienet_local *lp = container_of(napi, struct axienet_local, napi_rx);
1202 
1203 	cur_p = &lp->rx_bd_v[lp->rx_bd_ci];
1204 
1205 	while (packets < budget && (cur_p->status & XAXIDMA_BD_STS_COMPLETE_MASK)) {
1206 		dma_addr_t phys;
1207 
1208 		/* Ensure we see complete descriptor update */
1209 		dma_rmb();
1210 
1211 		skb = cur_p->skb;
1212 		cur_p->skb = NULL;
1213 
1214 		/* skb could be NULL if a previous pass already received the
1215 		 * packet for this slot in the ring, but failed to refill it
1216 		 * with a newly allocated buffer. In this case, don't try to
1217 		 * receive it again.
1218 		 */
1219 		if (likely(skb)) {
1220 			length = cur_p->app4 & 0x0000FFFF;
1221 
1222 			phys = desc_get_phys_addr(lp, cur_p);
1223 			dma_unmap_single(lp->dev, phys, lp->max_frm_size,
1224 					 DMA_FROM_DEVICE);
1225 
1226 			skb_put(skb, length);
1227 			skb->protocol = eth_type_trans(skb, lp->ndev);
1228 			/*skb_checksum_none_assert(skb);*/
1229 			skb->ip_summed = CHECKSUM_NONE;
1230 
1231 			/* if we're doing Rx csum offload, set it up */
1232 			if (lp->features & XAE_FEATURE_FULL_RX_CSUM) {
1233 				csumstatus = (cur_p->app2 &
1234 					      XAE_FULL_CSUM_STATUS_MASK) >> 3;
1235 				if (csumstatus == XAE_IP_TCP_CSUM_VALIDATED ||
1236 				    csumstatus == XAE_IP_UDP_CSUM_VALIDATED) {
1237 					skb->ip_summed = CHECKSUM_UNNECESSARY;
1238 				}
1239 			} else if (lp->features & XAE_FEATURE_PARTIAL_RX_CSUM) {
1240 				skb->csum = be32_to_cpu(cur_p->app3 & 0xFFFF);
1241 				skb->ip_summed = CHECKSUM_COMPLETE;
1242 			}
1243 
1244 			napi_gro_receive(napi, skb);
1245 
1246 			size += length;
1247 			packets++;
1248 		}
1249 
1250 		new_skb = napi_alloc_skb(napi, lp->max_frm_size);
1251 		if (!new_skb)
1252 			break;
1253 
1254 		phys = dma_map_single(lp->dev, new_skb->data,
1255 				      lp->max_frm_size,
1256 				      DMA_FROM_DEVICE);
1257 		if (unlikely(dma_mapping_error(lp->dev, phys))) {
1258 			if (net_ratelimit())
1259 				netdev_err(lp->ndev, "RX DMA mapping error\n");
1260 			dev_kfree_skb(new_skb);
1261 			break;
1262 		}
1263 		desc_set_phys_addr(lp, phys, cur_p);
1264 
1265 		cur_p->cntrl = lp->max_frm_size;
1266 		cur_p->status = 0;
1267 		cur_p->skb = new_skb;
1268 
1269 		/* Only update tail_p to mark this slot as usable after it has
1270 		 * been successfully refilled.
1271 		 */
1272 		tail_p = lp->rx_bd_p + sizeof(*lp->rx_bd_v) * lp->rx_bd_ci;
1273 
1274 		if (++lp->rx_bd_ci >= lp->rx_bd_num)
1275 			lp->rx_bd_ci = 0;
1276 		cur_p = &lp->rx_bd_v[lp->rx_bd_ci];
1277 	}
1278 
1279 	u64_stats_update_begin(&lp->rx_stat_sync);
1280 	u64_stats_add(&lp->rx_packets, packets);
1281 	u64_stats_add(&lp->rx_bytes, size);
1282 	u64_stats_update_end(&lp->rx_stat_sync);
1283 
1284 	if (tail_p)
1285 		axienet_dma_out_addr(lp, XAXIDMA_RX_TDESC_OFFSET, tail_p);
1286 
1287 	if (packets < budget && napi_complete_done(napi, packets)) {
1288 		if (READ_ONCE(lp->rx_dim_enabled)) {
1289 			struct dim_sample sample = {
1290 				.time = ktime_get(),
1291 				/* Safe because we are the only writer */
1292 				.pkt_ctr = u64_stats_read(&lp->rx_packets),
1293 				.byte_ctr = u64_stats_read(&lp->rx_bytes),
1294 				.event_ctr = READ_ONCE(lp->rx_irqs),
1295 			};
1296 
1297 			net_dim(&lp->rx_dim, &sample);
1298 		}
1299 
1300 		/* Re-enable RX completion interrupts. This should
1301 		 * cause an immediate interrupt if any RX packets are
1302 		 * already pending.
1303 		 */
1304 		spin_lock_irq(&lp->rx_cr_lock);
1305 		axienet_dma_out32(lp, XAXIDMA_RX_CR_OFFSET, lp->rx_dma_cr);
1306 		spin_unlock_irq(&lp->rx_cr_lock);
1307 	}
1308 	return packets;
1309 }
1310 
1311 /**
1312  * axienet_tx_irq - Tx Done Isr.
1313  * @irq:	irq number
1314  * @_ndev:	net_device pointer
1315  *
1316  * Return: IRQ_HANDLED if device generated a TX interrupt, IRQ_NONE otherwise.
1317  *
1318  * This is the Axi DMA Tx done Isr. It invokes NAPI polling to complete the
1319  * TX BD processing.
1320  */
axienet_tx_irq(int irq,void * _ndev)1321 static irqreturn_t axienet_tx_irq(int irq, void *_ndev)
1322 {
1323 	unsigned int status;
1324 	struct net_device *ndev = _ndev;
1325 	struct axienet_local *lp = netdev_priv(ndev);
1326 
1327 	status = axienet_dma_in32(lp, XAXIDMA_TX_SR_OFFSET);
1328 
1329 	if (!(status & XAXIDMA_IRQ_ALL_MASK))
1330 		return IRQ_NONE;
1331 
1332 	axienet_dma_out32(lp, XAXIDMA_TX_SR_OFFSET, status);
1333 
1334 	if (unlikely(status & XAXIDMA_IRQ_ERROR_MASK)) {
1335 		netdev_err(ndev, "DMA Tx error 0x%x\n", status);
1336 		netdev_err(ndev, "Current BD is at: 0x%x%08x\n",
1337 			   (lp->tx_bd_v[lp->tx_bd_ci]).phys_msb,
1338 			   (lp->tx_bd_v[lp->tx_bd_ci]).phys);
1339 		schedule_work(&lp->dma_err_task);
1340 	} else {
1341 		/* Disable further TX completion interrupts and schedule
1342 		 * NAPI to handle the completions.
1343 		 */
1344 		if (napi_schedule_prep(&lp->napi_tx)) {
1345 			u32 cr;
1346 
1347 			spin_lock(&lp->tx_cr_lock);
1348 			cr = lp->tx_dma_cr;
1349 			cr &= ~(XAXIDMA_IRQ_IOC_MASK | XAXIDMA_IRQ_DELAY_MASK);
1350 			axienet_dma_out32(lp, XAXIDMA_TX_CR_OFFSET, cr);
1351 			spin_unlock(&lp->tx_cr_lock);
1352 			__napi_schedule(&lp->napi_tx);
1353 		}
1354 	}
1355 
1356 	return IRQ_HANDLED;
1357 }
1358 
1359 /**
1360  * axienet_rx_irq - Rx Isr.
1361  * @irq:	irq number
1362  * @_ndev:	net_device pointer
1363  *
1364  * Return: IRQ_HANDLED if device generated a RX interrupt, IRQ_NONE otherwise.
1365  *
1366  * This is the Axi DMA Rx Isr. It invokes NAPI polling to complete the RX BD
1367  * processing.
1368  */
axienet_rx_irq(int irq,void * _ndev)1369 static irqreturn_t axienet_rx_irq(int irq, void *_ndev)
1370 {
1371 	unsigned int status;
1372 	struct net_device *ndev = _ndev;
1373 	struct axienet_local *lp = netdev_priv(ndev);
1374 
1375 	status = axienet_dma_in32(lp, XAXIDMA_RX_SR_OFFSET);
1376 
1377 	if (!(status & XAXIDMA_IRQ_ALL_MASK))
1378 		return IRQ_NONE;
1379 
1380 	axienet_dma_out32(lp, XAXIDMA_RX_SR_OFFSET, status);
1381 
1382 	if (unlikely(status & XAXIDMA_IRQ_ERROR_MASK)) {
1383 		netdev_err(ndev, "DMA Rx error 0x%x\n", status);
1384 		netdev_err(ndev, "Current BD is at: 0x%x%08x\n",
1385 			   (lp->rx_bd_v[lp->rx_bd_ci]).phys_msb,
1386 			   (lp->rx_bd_v[lp->rx_bd_ci]).phys);
1387 		schedule_work(&lp->dma_err_task);
1388 	} else {
1389 		/* Disable further RX completion interrupts and schedule
1390 		 * NAPI receive.
1391 		 */
1392 		WRITE_ONCE(lp->rx_irqs, READ_ONCE(lp->rx_irqs) + 1);
1393 		if (napi_schedule_prep(&lp->napi_rx)) {
1394 			u32 cr;
1395 
1396 			spin_lock(&lp->rx_cr_lock);
1397 			cr = lp->rx_dma_cr;
1398 			cr &= ~(XAXIDMA_IRQ_IOC_MASK | XAXIDMA_IRQ_DELAY_MASK);
1399 			axienet_dma_out32(lp, XAXIDMA_RX_CR_OFFSET, cr);
1400 			spin_unlock(&lp->rx_cr_lock);
1401 
1402 			__napi_schedule(&lp->napi_rx);
1403 		}
1404 	}
1405 
1406 	return IRQ_HANDLED;
1407 }
1408 
1409 /**
1410  * axienet_eth_irq - Ethernet core Isr.
1411  * @irq:	irq number
1412  * @_ndev:	net_device pointer
1413  *
1414  * Return: IRQ_HANDLED if device generated a core interrupt, IRQ_NONE otherwise.
1415  *
1416  * Handle miscellaneous conditions indicated by Ethernet core IRQ.
1417  */
axienet_eth_irq(int irq,void * _ndev)1418 static irqreturn_t axienet_eth_irq(int irq, void *_ndev)
1419 {
1420 	struct net_device *ndev = _ndev;
1421 	struct axienet_local *lp = netdev_priv(ndev);
1422 	unsigned int pending;
1423 
1424 	pending = axienet_ior(lp, XAE_IP_OFFSET);
1425 	if (!pending)
1426 		return IRQ_NONE;
1427 
1428 	if (pending & XAE_INT_RXFIFOOVR_MASK)
1429 		ndev->stats.rx_missed_errors++;
1430 
1431 	if (pending & XAE_INT_RXRJECT_MASK)
1432 		ndev->stats.rx_dropped++;
1433 
1434 	axienet_iow(lp, XAE_IS_OFFSET, pending);
1435 	return IRQ_HANDLED;
1436 }
1437 
1438 static void axienet_dma_err_handler(struct work_struct *work);
1439 
1440 /**
1441  * axienet_rx_submit_desc - Submit the rx descriptors to dmaengine.
1442  * allocate skbuff, map the scatterlist and obtain a descriptor
1443  * and then add the callback information and submit descriptor.
1444  *
1445  * @ndev:	net_device pointer
1446  *
1447  */
axienet_rx_submit_desc(struct net_device * ndev)1448 static void axienet_rx_submit_desc(struct net_device *ndev)
1449 {
1450 	struct dma_async_tx_descriptor *dma_rx_desc = NULL;
1451 	struct axienet_local *lp = netdev_priv(ndev);
1452 	struct skbuf_dma_descriptor *skbuf_dma;
1453 	struct sk_buff *skb;
1454 	dma_addr_t addr;
1455 
1456 	skbuf_dma = axienet_get_rx_desc(lp, lp->rx_ring_head);
1457 	if (!skbuf_dma)
1458 		return;
1459 
1460 	lp->rx_ring_head++;
1461 	skb = netdev_alloc_skb(ndev, lp->max_frm_size);
1462 	if (!skb)
1463 		return;
1464 
1465 	sg_init_table(skbuf_dma->sgl, 1);
1466 	addr = dma_map_single(lp->dev, skb->data, lp->max_frm_size, DMA_FROM_DEVICE);
1467 	if (unlikely(dma_mapping_error(lp->dev, addr))) {
1468 		if (net_ratelimit())
1469 			netdev_err(ndev, "DMA mapping error\n");
1470 		goto rx_submit_err_free_skb;
1471 	}
1472 	sg_dma_address(skbuf_dma->sgl) = addr;
1473 	sg_dma_len(skbuf_dma->sgl) = lp->max_frm_size;
1474 	dma_rx_desc = dmaengine_prep_slave_sg(lp->rx_chan, skbuf_dma->sgl,
1475 					      1, DMA_DEV_TO_MEM,
1476 					      DMA_PREP_INTERRUPT);
1477 	if (!dma_rx_desc)
1478 		goto rx_submit_err_unmap_skb;
1479 
1480 	skbuf_dma->skb = skb;
1481 	skbuf_dma->dma_address = sg_dma_address(skbuf_dma->sgl);
1482 	skbuf_dma->desc = dma_rx_desc;
1483 	dma_rx_desc->callback_param = lp;
1484 	dma_rx_desc->callback_result = axienet_dma_rx_cb;
1485 	dmaengine_submit(dma_rx_desc);
1486 
1487 	return;
1488 
1489 rx_submit_err_unmap_skb:
1490 	dma_unmap_single(lp->dev, addr, lp->max_frm_size, DMA_FROM_DEVICE);
1491 rx_submit_err_free_skb:
1492 	dev_kfree_skb(skb);
1493 }
1494 
1495 /**
1496  * axienet_init_dmaengine - init the dmaengine code.
1497  * @ndev:       Pointer to net_device structure
1498  *
1499  * Return: 0, on success.
1500  *          non-zero error value on failure
1501  *
1502  * This is the dmaengine initialization code.
1503  */
axienet_init_dmaengine(struct net_device * ndev)1504 static int axienet_init_dmaengine(struct net_device *ndev)
1505 {
1506 	struct axienet_local *lp = netdev_priv(ndev);
1507 	struct skbuf_dma_descriptor *skbuf_dma;
1508 	int i, ret;
1509 
1510 	lp->tx_chan = dma_request_chan(lp->dev, "tx_chan0");
1511 	if (IS_ERR(lp->tx_chan)) {
1512 		dev_err(lp->dev, "No Ethernet DMA (TX) channel found\n");
1513 		return PTR_ERR(lp->tx_chan);
1514 	}
1515 
1516 	lp->rx_chan = dma_request_chan(lp->dev, "rx_chan0");
1517 	if (IS_ERR(lp->rx_chan)) {
1518 		ret = PTR_ERR(lp->rx_chan);
1519 		dev_err(lp->dev, "No Ethernet DMA (RX) channel found\n");
1520 		goto err_dma_release_tx;
1521 	}
1522 
1523 	lp->tx_ring_tail = 0;
1524 	lp->tx_ring_head = 0;
1525 	lp->rx_ring_tail = 0;
1526 	lp->rx_ring_head = 0;
1527 	lp->tx_skb_ring = kcalloc(TX_BD_NUM_MAX, sizeof(*lp->tx_skb_ring),
1528 				  GFP_KERNEL);
1529 	if (!lp->tx_skb_ring) {
1530 		ret = -ENOMEM;
1531 		goto err_dma_release_rx;
1532 	}
1533 	for (i = 0; i < TX_BD_NUM_MAX; i++) {
1534 		skbuf_dma = kzalloc(sizeof(*skbuf_dma), GFP_KERNEL);
1535 		if (!skbuf_dma) {
1536 			ret = -ENOMEM;
1537 			goto err_free_tx_skb_ring;
1538 		}
1539 		lp->tx_skb_ring[i] = skbuf_dma;
1540 	}
1541 
1542 	lp->rx_skb_ring = kcalloc(RX_BUF_NUM_DEFAULT, sizeof(*lp->rx_skb_ring),
1543 				  GFP_KERNEL);
1544 	if (!lp->rx_skb_ring) {
1545 		ret = -ENOMEM;
1546 		goto err_free_tx_skb_ring;
1547 	}
1548 	for (i = 0; i < RX_BUF_NUM_DEFAULT; i++) {
1549 		skbuf_dma = kzalloc(sizeof(*skbuf_dma), GFP_KERNEL);
1550 		if (!skbuf_dma) {
1551 			ret = -ENOMEM;
1552 			goto err_free_rx_skb_ring;
1553 		}
1554 		lp->rx_skb_ring[i] = skbuf_dma;
1555 	}
1556 	/* TODO: Instead of BD_NUM_DEFAULT use runtime support */
1557 	for (i = 0; i < RX_BUF_NUM_DEFAULT; i++)
1558 		axienet_rx_submit_desc(ndev);
1559 	dma_async_issue_pending(lp->rx_chan);
1560 
1561 	return 0;
1562 
1563 err_free_rx_skb_ring:
1564 	for (i = 0; i < RX_BUF_NUM_DEFAULT; i++)
1565 		kfree(lp->rx_skb_ring[i]);
1566 	kfree(lp->rx_skb_ring);
1567 err_free_tx_skb_ring:
1568 	for (i = 0; i < TX_BD_NUM_MAX; i++)
1569 		kfree(lp->tx_skb_ring[i]);
1570 	kfree(lp->tx_skb_ring);
1571 err_dma_release_rx:
1572 	dma_release_channel(lp->rx_chan);
1573 err_dma_release_tx:
1574 	dma_release_channel(lp->tx_chan);
1575 	return ret;
1576 }
1577 
1578 /**
1579  * axienet_init_legacy_dma - init the dma legacy code.
1580  * @ndev:       Pointer to net_device structure
1581  *
1582  * Return: 0, on success.
1583  *          non-zero error value on failure
1584  *
1585  * This is the dma  initialization code. It also allocates interrupt
1586  * service routines, enables the interrupt lines and ISR handling.
1587  *
1588  */
axienet_init_legacy_dma(struct net_device * ndev)1589 static int axienet_init_legacy_dma(struct net_device *ndev)
1590 {
1591 	int ret;
1592 	struct axienet_local *lp = netdev_priv(ndev);
1593 
1594 	/* Enable worker thread for Axi DMA error handling */
1595 	lp->stopping = false;
1596 	INIT_WORK(&lp->dma_err_task, axienet_dma_err_handler);
1597 
1598 	napi_enable(&lp->napi_rx);
1599 	napi_enable(&lp->napi_tx);
1600 
1601 	/* Enable interrupts for Axi DMA Tx */
1602 	ret = request_irq(lp->tx_irq, axienet_tx_irq, IRQF_SHARED,
1603 			  ndev->name, ndev);
1604 	if (ret)
1605 		goto err_tx_irq;
1606 	/* Enable interrupts for Axi DMA Rx */
1607 	ret = request_irq(lp->rx_irq, axienet_rx_irq, IRQF_SHARED,
1608 			  ndev->name, ndev);
1609 	if (ret)
1610 		goto err_rx_irq;
1611 	/* Enable interrupts for Axi Ethernet core (if defined) */
1612 	if (lp->eth_irq > 0) {
1613 		ret = request_irq(lp->eth_irq, axienet_eth_irq, IRQF_SHARED,
1614 				  ndev->name, ndev);
1615 		if (ret)
1616 			goto err_eth_irq;
1617 	}
1618 
1619 	return 0;
1620 
1621 err_eth_irq:
1622 	free_irq(lp->rx_irq, ndev);
1623 err_rx_irq:
1624 	free_irq(lp->tx_irq, ndev);
1625 err_tx_irq:
1626 	napi_disable(&lp->napi_tx);
1627 	napi_disable(&lp->napi_rx);
1628 	cancel_work_sync(&lp->dma_err_task);
1629 	dev_err(lp->dev, "request_irq() failed\n");
1630 	return ret;
1631 }
1632 
1633 /**
1634  * axienet_open - Driver open routine.
1635  * @ndev:	Pointer to net_device structure
1636  *
1637  * Return: 0, on success.
1638  *	    non-zero error value on failure
1639  *
1640  * This is the driver open routine. It calls phylink_start to start the
1641  * PHY device.
1642  * It also allocates interrupt service routines, enables the interrupt lines
1643  * and ISR handling. Axi Ethernet core is reset through Axi DMA core. Buffer
1644  * descriptors are initialized.
1645  */
axienet_open(struct net_device * ndev)1646 static int axienet_open(struct net_device *ndev)
1647 {
1648 	int ret;
1649 	struct axienet_local *lp = netdev_priv(ndev);
1650 
1651 	/* When we do an Axi Ethernet reset, it resets the complete core
1652 	 * including the MDIO. MDIO must be disabled before resetting.
1653 	 * Hold MDIO bus lock to avoid MDIO accesses during the reset.
1654 	 */
1655 	axienet_lock_mii(lp);
1656 	ret = axienet_device_reset(ndev);
1657 	axienet_unlock_mii(lp);
1658 
1659 	ret = phylink_of_phy_connect(lp->phylink, lp->dev->of_node, 0);
1660 	if (ret) {
1661 		dev_err(lp->dev, "phylink_of_phy_connect() failed: %d\n", ret);
1662 		return ret;
1663 	}
1664 
1665 	phylink_start(lp->phylink);
1666 
1667 	/* Start the statistics refresh work */
1668 	schedule_delayed_work(&lp->stats_work, 0);
1669 
1670 	if (lp->use_dmaengine) {
1671 		/* Enable interrupts for Axi Ethernet core (if defined) */
1672 		if (lp->eth_irq > 0) {
1673 			ret = request_irq(lp->eth_irq, axienet_eth_irq, IRQF_SHARED,
1674 					  ndev->name, ndev);
1675 			if (ret)
1676 				goto err_phy;
1677 		}
1678 
1679 		ret = axienet_init_dmaengine(ndev);
1680 		if (ret < 0)
1681 			goto err_free_eth_irq;
1682 	} else {
1683 		ret = axienet_init_legacy_dma(ndev);
1684 		if (ret)
1685 			goto err_phy;
1686 	}
1687 
1688 	return 0;
1689 
1690 err_free_eth_irq:
1691 	if (lp->eth_irq > 0)
1692 		free_irq(lp->eth_irq, ndev);
1693 err_phy:
1694 	cancel_work_sync(&lp->rx_dim.work);
1695 	cancel_delayed_work_sync(&lp->stats_work);
1696 	phylink_stop(lp->phylink);
1697 	phylink_disconnect_phy(lp->phylink);
1698 	return ret;
1699 }
1700 
1701 /**
1702  * axienet_stop - Driver stop routine.
1703  * @ndev:	Pointer to net_device structure
1704  *
1705  * Return: 0, on success.
1706  *
1707  * This is the driver stop routine. It calls phylink_disconnect to stop the PHY
1708  * device. It also removes the interrupt handlers and disables the interrupts.
1709  * The Axi DMA Tx/Rx BDs are released.
1710  */
axienet_stop(struct net_device * ndev)1711 static int axienet_stop(struct net_device *ndev)
1712 {
1713 	struct axienet_local *lp = netdev_priv(ndev);
1714 	int i;
1715 
1716 	if (!lp->use_dmaengine) {
1717 		WRITE_ONCE(lp->stopping, true);
1718 		flush_work(&lp->dma_err_task);
1719 
1720 		napi_disable(&lp->napi_tx);
1721 		napi_disable(&lp->napi_rx);
1722 	}
1723 
1724 	cancel_work_sync(&lp->rx_dim.work);
1725 	cancel_delayed_work_sync(&lp->stats_work);
1726 
1727 	phylink_stop(lp->phylink);
1728 	phylink_disconnect_phy(lp->phylink);
1729 
1730 	axienet_setoptions(ndev, lp->options &
1731 			   ~(XAE_OPTION_TXEN | XAE_OPTION_RXEN));
1732 
1733 	if (!lp->use_dmaengine) {
1734 		axienet_dma_stop(lp);
1735 		cancel_work_sync(&lp->dma_err_task);
1736 		free_irq(lp->tx_irq, ndev);
1737 		free_irq(lp->rx_irq, ndev);
1738 		axienet_dma_bd_release(ndev);
1739 	} else {
1740 		dmaengine_terminate_sync(lp->tx_chan);
1741 		dmaengine_synchronize(lp->tx_chan);
1742 		dmaengine_terminate_sync(lp->rx_chan);
1743 		dmaengine_synchronize(lp->rx_chan);
1744 
1745 		for (i = 0; i < TX_BD_NUM_MAX; i++)
1746 			kfree(lp->tx_skb_ring[i]);
1747 		kfree(lp->tx_skb_ring);
1748 		for (i = 0; i < RX_BUF_NUM_DEFAULT; i++)
1749 			kfree(lp->rx_skb_ring[i]);
1750 		kfree(lp->rx_skb_ring);
1751 
1752 		dma_release_channel(lp->rx_chan);
1753 		dma_release_channel(lp->tx_chan);
1754 	}
1755 
1756 	netdev_reset_queue(ndev);
1757 	axienet_iow(lp, XAE_IE_OFFSET, 0);
1758 
1759 	if (lp->eth_irq > 0)
1760 		free_irq(lp->eth_irq, ndev);
1761 	return 0;
1762 }
1763 
1764 /**
1765  * axienet_change_mtu - Driver change mtu routine.
1766  * @ndev:	Pointer to net_device structure
1767  * @new_mtu:	New mtu value to be applied
1768  *
1769  * Return: Always returns 0 (success).
1770  *
1771  * This is the change mtu driver routine. It checks if the Axi Ethernet
1772  * hardware supports jumbo frames before changing the mtu. This can be
1773  * called only when the device is not up.
1774  */
axienet_change_mtu(struct net_device * ndev,int new_mtu)1775 static int axienet_change_mtu(struct net_device *ndev, int new_mtu)
1776 {
1777 	struct axienet_local *lp = netdev_priv(ndev);
1778 
1779 	if (netif_running(ndev))
1780 		return -EBUSY;
1781 
1782 	if ((new_mtu + VLAN_ETH_HLEN +
1783 		XAE_TRL_SIZE) > lp->rxmem)
1784 		return -EINVAL;
1785 
1786 	WRITE_ONCE(ndev->mtu, new_mtu);
1787 
1788 	return 0;
1789 }
1790 
1791 #ifdef CONFIG_NET_POLL_CONTROLLER
1792 /**
1793  * axienet_poll_controller - Axi Ethernet poll mechanism.
1794  * @ndev:	Pointer to net_device structure
1795  *
1796  * This implements Rx/Tx ISR poll mechanisms. The interrupts are disabled prior
1797  * to polling the ISRs and are enabled back after the polling is done.
1798  */
axienet_poll_controller(struct net_device * ndev)1799 static void axienet_poll_controller(struct net_device *ndev)
1800 {
1801 	struct axienet_local *lp = netdev_priv(ndev);
1802 
1803 	disable_irq(lp->tx_irq);
1804 	disable_irq(lp->rx_irq);
1805 	axienet_rx_irq(lp->tx_irq, ndev);
1806 	axienet_tx_irq(lp->rx_irq, ndev);
1807 	enable_irq(lp->tx_irq);
1808 	enable_irq(lp->rx_irq);
1809 }
1810 #endif
1811 
axienet_ioctl(struct net_device * dev,struct ifreq * rq,int cmd)1812 static int axienet_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
1813 {
1814 	struct axienet_local *lp = netdev_priv(dev);
1815 
1816 	if (!netif_running(dev))
1817 		return -EINVAL;
1818 
1819 	return phylink_mii_ioctl(lp->phylink, rq, cmd);
1820 }
1821 
1822 static void
axienet_get_stats64(struct net_device * dev,struct rtnl_link_stats64 * stats)1823 axienet_get_stats64(struct net_device *dev, struct rtnl_link_stats64 *stats)
1824 {
1825 	struct axienet_local *lp = netdev_priv(dev);
1826 	unsigned int start;
1827 
1828 	netdev_stats_to_stats64(stats, &dev->stats);
1829 
1830 	do {
1831 		start = u64_stats_fetch_begin(&lp->rx_stat_sync);
1832 		stats->rx_packets = u64_stats_read(&lp->rx_packets);
1833 		stats->rx_bytes = u64_stats_read(&lp->rx_bytes);
1834 	} while (u64_stats_fetch_retry(&lp->rx_stat_sync, start));
1835 
1836 	do {
1837 		start = u64_stats_fetch_begin(&lp->tx_stat_sync);
1838 		stats->tx_packets = u64_stats_read(&lp->tx_packets);
1839 		stats->tx_bytes = u64_stats_read(&lp->tx_bytes);
1840 	} while (u64_stats_fetch_retry(&lp->tx_stat_sync, start));
1841 
1842 	if (!(lp->features & XAE_FEATURE_STATS))
1843 		return;
1844 
1845 	do {
1846 		start = read_seqcount_begin(&lp->hw_stats_seqcount);
1847 		stats->rx_length_errors =
1848 			axienet_stat(lp, STAT_RX_LENGTH_ERRORS);
1849 		stats->rx_crc_errors = axienet_stat(lp, STAT_RX_FCS_ERRORS);
1850 		stats->rx_frame_errors =
1851 			axienet_stat(lp, STAT_RX_ALIGNMENT_ERRORS);
1852 		stats->rx_errors = axienet_stat(lp, STAT_UNDERSIZE_FRAMES) +
1853 				   axienet_stat(lp, STAT_FRAGMENT_FRAMES) +
1854 				   stats->rx_length_errors +
1855 				   stats->rx_crc_errors +
1856 				   stats->rx_frame_errors;
1857 		stats->multicast = axienet_stat(lp, STAT_RX_MULTICAST_FRAMES);
1858 
1859 		stats->tx_aborted_errors =
1860 			axienet_stat(lp, STAT_TX_EXCESS_COLLISIONS);
1861 		stats->tx_fifo_errors =
1862 			axienet_stat(lp, STAT_TX_UNDERRUN_ERRORS);
1863 		stats->tx_window_errors =
1864 			axienet_stat(lp, STAT_TX_LATE_COLLISIONS);
1865 		stats->tx_errors = axienet_stat(lp, STAT_TX_EXCESS_DEFERRAL) +
1866 				   stats->tx_aborted_errors +
1867 				   stats->tx_fifo_errors +
1868 				   stats->tx_window_errors;
1869 	} while (read_seqcount_retry(&lp->hw_stats_seqcount, start));
1870 }
1871 
1872 static const struct net_device_ops axienet_netdev_ops = {
1873 	.ndo_open = axienet_open,
1874 	.ndo_stop = axienet_stop,
1875 	.ndo_start_xmit = axienet_start_xmit,
1876 	.ndo_get_stats64 = axienet_get_stats64,
1877 	.ndo_change_mtu	= axienet_change_mtu,
1878 	.ndo_set_mac_address = netdev_set_mac_address,
1879 	.ndo_validate_addr = eth_validate_addr,
1880 	.ndo_eth_ioctl = axienet_ioctl,
1881 	.ndo_set_rx_mode = axienet_set_multicast_list,
1882 #ifdef CONFIG_NET_POLL_CONTROLLER
1883 	.ndo_poll_controller = axienet_poll_controller,
1884 #endif
1885 };
1886 
1887 static const struct net_device_ops axienet_netdev_dmaengine_ops = {
1888 	.ndo_open = axienet_open,
1889 	.ndo_stop = axienet_stop,
1890 	.ndo_start_xmit = axienet_start_xmit_dmaengine,
1891 	.ndo_get_stats64 = axienet_get_stats64,
1892 	.ndo_change_mtu	= axienet_change_mtu,
1893 	.ndo_set_mac_address = netdev_set_mac_address,
1894 	.ndo_validate_addr = eth_validate_addr,
1895 	.ndo_eth_ioctl = axienet_ioctl,
1896 	.ndo_set_rx_mode = axienet_set_multicast_list,
1897 };
1898 
1899 /**
1900  * axienet_ethtools_get_drvinfo - Get various Axi Ethernet driver information.
1901  * @ndev:	Pointer to net_device structure
1902  * @ed:		Pointer to ethtool_drvinfo structure
1903  *
1904  * This implements ethtool command for getting the driver information.
1905  * Issue "ethtool -i ethX" under linux prompt to execute this function.
1906  */
axienet_ethtools_get_drvinfo(struct net_device * ndev,struct ethtool_drvinfo * ed)1907 static void axienet_ethtools_get_drvinfo(struct net_device *ndev,
1908 					 struct ethtool_drvinfo *ed)
1909 {
1910 	strscpy(ed->driver, DRIVER_NAME, sizeof(ed->driver));
1911 	strscpy(ed->version, DRIVER_VERSION, sizeof(ed->version));
1912 }
1913 
1914 /**
1915  * axienet_ethtools_get_regs_len - Get the total regs length present in the
1916  *				   AxiEthernet core.
1917  * @ndev:	Pointer to net_device structure
1918  *
1919  * This implements ethtool command for getting the total register length
1920  * information.
1921  *
1922  * Return: the total regs length
1923  */
axienet_ethtools_get_regs_len(struct net_device * ndev)1924 static int axienet_ethtools_get_regs_len(struct net_device *ndev)
1925 {
1926 	return sizeof(u32) * AXIENET_REGS_N;
1927 }
1928 
1929 /**
1930  * axienet_ethtools_get_regs - Dump the contents of all registers present
1931  *			       in AxiEthernet core.
1932  * @ndev:	Pointer to net_device structure
1933  * @regs:	Pointer to ethtool_regs structure
1934  * @ret:	Void pointer used to return the contents of the registers.
1935  *
1936  * This implements ethtool command for getting the Axi Ethernet register dump.
1937  * Issue "ethtool -d ethX" to execute this function.
1938  */
axienet_ethtools_get_regs(struct net_device * ndev,struct ethtool_regs * regs,void * ret)1939 static void axienet_ethtools_get_regs(struct net_device *ndev,
1940 				      struct ethtool_regs *regs, void *ret)
1941 {
1942 	u32 *data = (u32 *)ret;
1943 	size_t len = sizeof(u32) * AXIENET_REGS_N;
1944 	struct axienet_local *lp = netdev_priv(ndev);
1945 
1946 	regs->version = 0;
1947 	regs->len = len;
1948 
1949 	memset(data, 0, len);
1950 	data[0] = axienet_ior(lp, XAE_RAF_OFFSET);
1951 	data[1] = axienet_ior(lp, XAE_TPF_OFFSET);
1952 	data[2] = axienet_ior(lp, XAE_IFGP_OFFSET);
1953 	data[3] = axienet_ior(lp, XAE_IS_OFFSET);
1954 	data[4] = axienet_ior(lp, XAE_IP_OFFSET);
1955 	data[5] = axienet_ior(lp, XAE_IE_OFFSET);
1956 	data[6] = axienet_ior(lp, XAE_TTAG_OFFSET);
1957 	data[7] = axienet_ior(lp, XAE_RTAG_OFFSET);
1958 	data[8] = axienet_ior(lp, XAE_UAWL_OFFSET);
1959 	data[9] = axienet_ior(lp, XAE_UAWU_OFFSET);
1960 	data[10] = axienet_ior(lp, XAE_TPID0_OFFSET);
1961 	data[11] = axienet_ior(lp, XAE_TPID1_OFFSET);
1962 	data[12] = axienet_ior(lp, XAE_PPST_OFFSET);
1963 	data[13] = axienet_ior(lp, XAE_RCW0_OFFSET);
1964 	data[14] = axienet_ior(lp, XAE_RCW1_OFFSET);
1965 	data[15] = axienet_ior(lp, XAE_TC_OFFSET);
1966 	data[16] = axienet_ior(lp, XAE_FCC_OFFSET);
1967 	data[17] = axienet_ior(lp, XAE_EMMC_OFFSET);
1968 	data[18] = axienet_ior(lp, XAE_PHYC_OFFSET);
1969 	data[19] = axienet_ior(lp, XAE_MDIO_MC_OFFSET);
1970 	data[20] = axienet_ior(lp, XAE_MDIO_MCR_OFFSET);
1971 	data[21] = axienet_ior(lp, XAE_MDIO_MWD_OFFSET);
1972 	data[22] = axienet_ior(lp, XAE_MDIO_MRD_OFFSET);
1973 	data[27] = axienet_ior(lp, XAE_UAW0_OFFSET);
1974 	data[28] = axienet_ior(lp, XAE_UAW1_OFFSET);
1975 	data[29] = axienet_ior(lp, XAE_FMI_OFFSET);
1976 	data[30] = axienet_ior(lp, XAE_AF0_OFFSET);
1977 	data[31] = axienet_ior(lp, XAE_AF1_OFFSET);
1978 	if (!lp->use_dmaengine) {
1979 		data[32] = axienet_dma_in32(lp, XAXIDMA_TX_CR_OFFSET);
1980 		data[33] = axienet_dma_in32(lp, XAXIDMA_TX_SR_OFFSET);
1981 		data[34] = axienet_dma_in32(lp, XAXIDMA_TX_CDESC_OFFSET);
1982 		data[35] = axienet_dma_in32(lp, XAXIDMA_TX_TDESC_OFFSET);
1983 		data[36] = axienet_dma_in32(lp, XAXIDMA_RX_CR_OFFSET);
1984 		data[37] = axienet_dma_in32(lp, XAXIDMA_RX_SR_OFFSET);
1985 		data[38] = axienet_dma_in32(lp, XAXIDMA_RX_CDESC_OFFSET);
1986 		data[39] = axienet_dma_in32(lp, XAXIDMA_RX_TDESC_OFFSET);
1987 	}
1988 }
1989 
1990 static void
axienet_ethtools_get_ringparam(struct net_device * ndev,struct ethtool_ringparam * ering,struct kernel_ethtool_ringparam * kernel_ering,struct netlink_ext_ack * extack)1991 axienet_ethtools_get_ringparam(struct net_device *ndev,
1992 			       struct ethtool_ringparam *ering,
1993 			       struct kernel_ethtool_ringparam *kernel_ering,
1994 			       struct netlink_ext_ack *extack)
1995 {
1996 	struct axienet_local *lp = netdev_priv(ndev);
1997 
1998 	ering->rx_max_pending = RX_BD_NUM_MAX;
1999 	ering->rx_mini_max_pending = 0;
2000 	ering->rx_jumbo_max_pending = 0;
2001 	ering->tx_max_pending = TX_BD_NUM_MAX;
2002 	ering->rx_pending = lp->rx_bd_num;
2003 	ering->rx_mini_pending = 0;
2004 	ering->rx_jumbo_pending = 0;
2005 	ering->tx_pending = lp->tx_bd_num;
2006 }
2007 
2008 static int
axienet_ethtools_set_ringparam(struct net_device * ndev,struct ethtool_ringparam * ering,struct kernel_ethtool_ringparam * kernel_ering,struct netlink_ext_ack * extack)2009 axienet_ethtools_set_ringparam(struct net_device *ndev,
2010 			       struct ethtool_ringparam *ering,
2011 			       struct kernel_ethtool_ringparam *kernel_ering,
2012 			       struct netlink_ext_ack *extack)
2013 {
2014 	struct axienet_local *lp = netdev_priv(ndev);
2015 
2016 	if (ering->rx_pending > RX_BD_NUM_MAX ||
2017 	    ering->rx_mini_pending ||
2018 	    ering->rx_jumbo_pending ||
2019 	    ering->tx_pending < TX_BD_NUM_MIN ||
2020 	    ering->tx_pending > TX_BD_NUM_MAX)
2021 		return -EINVAL;
2022 
2023 	if (netif_running(ndev))
2024 		return -EBUSY;
2025 
2026 	lp->rx_bd_num = ering->rx_pending;
2027 	lp->tx_bd_num = ering->tx_pending;
2028 	return 0;
2029 }
2030 
2031 /**
2032  * axienet_ethtools_get_pauseparam - Get the pause parameter setting for
2033  *				     Tx and Rx paths.
2034  * @ndev:	Pointer to net_device structure
2035  * @epauseparm:	Pointer to ethtool_pauseparam structure.
2036  *
2037  * This implements ethtool command for getting axi ethernet pause frame
2038  * setting. Issue "ethtool -a ethX" to execute this function.
2039  */
2040 static void
axienet_ethtools_get_pauseparam(struct net_device * ndev,struct ethtool_pauseparam * epauseparm)2041 axienet_ethtools_get_pauseparam(struct net_device *ndev,
2042 				struct ethtool_pauseparam *epauseparm)
2043 {
2044 	struct axienet_local *lp = netdev_priv(ndev);
2045 
2046 	phylink_ethtool_get_pauseparam(lp->phylink, epauseparm);
2047 }
2048 
2049 /**
2050  * axienet_ethtools_set_pauseparam - Set device pause parameter(flow control)
2051  *				     settings.
2052  * @ndev:	Pointer to net_device structure
2053  * @epauseparm:Pointer to ethtool_pauseparam structure
2054  *
2055  * This implements ethtool command for enabling flow control on Rx and Tx
2056  * paths. Issue "ethtool -A ethX tx on|off" under linux prompt to execute this
2057  * function.
2058  *
2059  * Return: 0 on success, -EFAULT if device is running
2060  */
2061 static int
axienet_ethtools_set_pauseparam(struct net_device * ndev,struct ethtool_pauseparam * epauseparm)2062 axienet_ethtools_set_pauseparam(struct net_device *ndev,
2063 				struct ethtool_pauseparam *epauseparm)
2064 {
2065 	struct axienet_local *lp = netdev_priv(ndev);
2066 
2067 	return phylink_ethtool_set_pauseparam(lp->phylink, epauseparm);
2068 }
2069 
2070 /**
2071  * axienet_update_coalesce_rx() - Set RX CR
2072  * @lp: Device private data
2073  * @cr: Value to write to the RX CR
2074  * @mask: Bits to set from @cr
2075  */
axienet_update_coalesce_rx(struct axienet_local * lp,u32 cr,u32 mask)2076 static void axienet_update_coalesce_rx(struct axienet_local *lp, u32 cr,
2077 				       u32 mask)
2078 {
2079 	spin_lock_irq(&lp->rx_cr_lock);
2080 	lp->rx_dma_cr &= ~mask;
2081 	lp->rx_dma_cr |= cr;
2082 	/* If DMA isn't started, then the settings will be applied the next
2083 	 * time dma_start() is called.
2084 	 */
2085 	if (lp->rx_dma_started) {
2086 		u32 reg = axienet_dma_in32(lp, XAXIDMA_RX_CR_OFFSET);
2087 
2088 		/* Don't enable IRQs if they are disabled by NAPI */
2089 		if (reg & XAXIDMA_IRQ_ALL_MASK)
2090 			cr = lp->rx_dma_cr;
2091 		else
2092 			cr = lp->rx_dma_cr & ~XAXIDMA_IRQ_ALL_MASK;
2093 		axienet_dma_out32(lp, XAXIDMA_RX_CR_OFFSET, cr);
2094 	}
2095 	spin_unlock_irq(&lp->rx_cr_lock);
2096 }
2097 
2098 /**
2099  * axienet_dim_coalesce_count_rx() - RX coalesce count for DIM
2100  * @lp: Device private data
2101  */
axienet_dim_coalesce_count_rx(struct axienet_local * lp)2102 static u32 axienet_dim_coalesce_count_rx(struct axienet_local *lp)
2103 {
2104 	return min(1 << (lp->rx_dim.profile_ix << 1), 255);
2105 }
2106 
2107 /**
2108  * axienet_rx_dim_work() - Adjust RX DIM settings
2109  * @work: The work struct
2110  */
axienet_rx_dim_work(struct work_struct * work)2111 static void axienet_rx_dim_work(struct work_struct *work)
2112 {
2113 	struct axienet_local *lp =
2114 		container_of(work, struct axienet_local, rx_dim.work);
2115 	u32 cr = axienet_calc_cr(lp, axienet_dim_coalesce_count_rx(lp), 0);
2116 	u32 mask = XAXIDMA_COALESCE_MASK | XAXIDMA_IRQ_IOC_MASK |
2117 		   XAXIDMA_IRQ_ERROR_MASK;
2118 
2119 	axienet_update_coalesce_rx(lp, cr, mask);
2120 	lp->rx_dim.state = DIM_START_MEASURE;
2121 }
2122 
2123 /**
2124  * axienet_update_coalesce_tx() - Set TX CR
2125  * @lp: Device private data
2126  * @cr: Value to write to the TX CR
2127  * @mask: Bits to set from @cr
2128  */
axienet_update_coalesce_tx(struct axienet_local * lp,u32 cr,u32 mask)2129 static void axienet_update_coalesce_tx(struct axienet_local *lp, u32 cr,
2130 				       u32 mask)
2131 {
2132 	spin_lock_irq(&lp->tx_cr_lock);
2133 	lp->tx_dma_cr &= ~mask;
2134 	lp->tx_dma_cr |= cr;
2135 	/* If DMA isn't started, then the settings will be applied the next
2136 	 * time dma_start() is called.
2137 	 */
2138 	if (lp->tx_dma_started) {
2139 		u32 reg = axienet_dma_in32(lp, XAXIDMA_TX_CR_OFFSET);
2140 
2141 		/* Don't enable IRQs if they are disabled by NAPI */
2142 		if (reg & XAXIDMA_IRQ_ALL_MASK)
2143 			cr = lp->tx_dma_cr;
2144 		else
2145 			cr = lp->tx_dma_cr & ~XAXIDMA_IRQ_ALL_MASK;
2146 		axienet_dma_out32(lp, XAXIDMA_TX_CR_OFFSET, cr);
2147 	}
2148 	spin_unlock_irq(&lp->tx_cr_lock);
2149 }
2150 
2151 /**
2152  * axienet_ethtools_get_coalesce - Get DMA interrupt coalescing count.
2153  * @ndev:	Pointer to net_device structure
2154  * @ecoalesce:	Pointer to ethtool_coalesce structure
2155  * @kernel_coal: ethtool CQE mode setting structure
2156  * @extack:	extack for reporting error messages
2157  *
2158  * This implements ethtool command for getting the DMA interrupt coalescing
2159  * count on Tx and Rx paths. Issue "ethtool -c ethX" under linux prompt to
2160  * execute this function.
2161  *
2162  * Return: 0 always
2163  */
2164 static int
axienet_ethtools_get_coalesce(struct net_device * ndev,struct ethtool_coalesce * ecoalesce,struct kernel_ethtool_coalesce * kernel_coal,struct netlink_ext_ack * extack)2165 axienet_ethtools_get_coalesce(struct net_device *ndev,
2166 			      struct ethtool_coalesce *ecoalesce,
2167 			      struct kernel_ethtool_coalesce *kernel_coal,
2168 			      struct netlink_ext_ack *extack)
2169 {
2170 	struct axienet_local *lp = netdev_priv(ndev);
2171 	u32 cr;
2172 
2173 	ecoalesce->use_adaptive_rx_coalesce = lp->rx_dim_enabled;
2174 
2175 	spin_lock_irq(&lp->rx_cr_lock);
2176 	cr = lp->rx_dma_cr;
2177 	spin_unlock_irq(&lp->rx_cr_lock);
2178 	axienet_coalesce_params(lp, cr,
2179 				&ecoalesce->rx_max_coalesced_frames,
2180 				&ecoalesce->rx_coalesce_usecs);
2181 
2182 	spin_lock_irq(&lp->tx_cr_lock);
2183 	cr = lp->tx_dma_cr;
2184 	spin_unlock_irq(&lp->tx_cr_lock);
2185 	axienet_coalesce_params(lp, cr,
2186 				&ecoalesce->tx_max_coalesced_frames,
2187 				&ecoalesce->tx_coalesce_usecs);
2188 	return 0;
2189 }
2190 
2191 /**
2192  * axienet_ethtools_set_coalesce - Set DMA interrupt coalescing count.
2193  * @ndev:	Pointer to net_device structure
2194  * @ecoalesce:	Pointer to ethtool_coalesce structure
2195  * @kernel_coal: ethtool CQE mode setting structure
2196  * @extack:	extack for reporting error messages
2197  *
2198  * This implements ethtool command for setting the DMA interrupt coalescing
2199  * count on Tx and Rx paths. Issue "ethtool -C ethX rx-frames 5" under linux
2200  * prompt to execute this function.
2201  *
2202  * Return: 0, on success, Non-zero error value on failure.
2203  */
2204 static int
axienet_ethtools_set_coalesce(struct net_device * ndev,struct ethtool_coalesce * ecoalesce,struct kernel_ethtool_coalesce * kernel_coal,struct netlink_ext_ack * extack)2205 axienet_ethtools_set_coalesce(struct net_device *ndev,
2206 			      struct ethtool_coalesce *ecoalesce,
2207 			      struct kernel_ethtool_coalesce *kernel_coal,
2208 			      struct netlink_ext_ack *extack)
2209 {
2210 	struct axienet_local *lp = netdev_priv(ndev);
2211 	bool new_dim = ecoalesce->use_adaptive_rx_coalesce;
2212 	bool old_dim = lp->rx_dim_enabled;
2213 	u32 cr, mask = ~XAXIDMA_CR_RUNSTOP_MASK;
2214 
2215 	if (ecoalesce->rx_max_coalesced_frames > 255 ||
2216 	    ecoalesce->tx_max_coalesced_frames > 255) {
2217 		NL_SET_ERR_MSG(extack, "frames must be less than 256");
2218 		return -EINVAL;
2219 	}
2220 
2221 	if (!ecoalesce->rx_max_coalesced_frames ||
2222 	    !ecoalesce->tx_max_coalesced_frames) {
2223 		NL_SET_ERR_MSG(extack, "frames must be non-zero");
2224 		return -EINVAL;
2225 	}
2226 
2227 	if (((ecoalesce->rx_max_coalesced_frames > 1 || new_dim) &&
2228 	     !ecoalesce->rx_coalesce_usecs) ||
2229 	    (ecoalesce->tx_max_coalesced_frames > 1 &&
2230 	     !ecoalesce->tx_coalesce_usecs)) {
2231 		NL_SET_ERR_MSG(extack,
2232 			       "usecs must be non-zero when frames is greater than one");
2233 		return -EINVAL;
2234 	}
2235 
2236 	if (new_dim && !old_dim) {
2237 		cr = axienet_calc_cr(lp, axienet_dim_coalesce_count_rx(lp),
2238 				     ecoalesce->rx_coalesce_usecs);
2239 	} else if (!new_dim) {
2240 		if (old_dim) {
2241 			WRITE_ONCE(lp->rx_dim_enabled, false);
2242 			napi_synchronize(&lp->napi_rx);
2243 			flush_work(&lp->rx_dim.work);
2244 		}
2245 
2246 		cr = axienet_calc_cr(lp, ecoalesce->rx_max_coalesced_frames,
2247 				     ecoalesce->rx_coalesce_usecs);
2248 	} else {
2249 		/* Dummy value for count just to calculate timer */
2250 		cr = axienet_calc_cr(lp, 2, ecoalesce->rx_coalesce_usecs);
2251 		mask = XAXIDMA_DELAY_MASK | XAXIDMA_IRQ_DELAY_MASK;
2252 	}
2253 
2254 	axienet_update_coalesce_rx(lp, cr, mask);
2255 	if (new_dim && !old_dim)
2256 		WRITE_ONCE(lp->rx_dim_enabled, true);
2257 
2258 	cr = axienet_calc_cr(lp, ecoalesce->tx_max_coalesced_frames,
2259 			     ecoalesce->tx_coalesce_usecs);
2260 	axienet_update_coalesce_tx(lp, cr, ~XAXIDMA_CR_RUNSTOP_MASK);
2261 	return 0;
2262 }
2263 
2264 static int
axienet_ethtools_get_link_ksettings(struct net_device * ndev,struct ethtool_link_ksettings * cmd)2265 axienet_ethtools_get_link_ksettings(struct net_device *ndev,
2266 				    struct ethtool_link_ksettings *cmd)
2267 {
2268 	struct axienet_local *lp = netdev_priv(ndev);
2269 
2270 	return phylink_ethtool_ksettings_get(lp->phylink, cmd);
2271 }
2272 
2273 static int
axienet_ethtools_set_link_ksettings(struct net_device * ndev,const struct ethtool_link_ksettings * cmd)2274 axienet_ethtools_set_link_ksettings(struct net_device *ndev,
2275 				    const struct ethtool_link_ksettings *cmd)
2276 {
2277 	struct axienet_local *lp = netdev_priv(ndev);
2278 
2279 	return phylink_ethtool_ksettings_set(lp->phylink, cmd);
2280 }
2281 
axienet_ethtools_nway_reset(struct net_device * dev)2282 static int axienet_ethtools_nway_reset(struct net_device *dev)
2283 {
2284 	struct axienet_local *lp = netdev_priv(dev);
2285 
2286 	return phylink_ethtool_nway_reset(lp->phylink);
2287 }
2288 
axienet_ethtools_get_ethtool_stats(struct net_device * dev,struct ethtool_stats * stats,u64 * data)2289 static void axienet_ethtools_get_ethtool_stats(struct net_device *dev,
2290 					       struct ethtool_stats *stats,
2291 					       u64 *data)
2292 {
2293 	struct axienet_local *lp = netdev_priv(dev);
2294 	unsigned int start;
2295 
2296 	do {
2297 		start = read_seqcount_begin(&lp->hw_stats_seqcount);
2298 		data[0] = axienet_stat(lp, STAT_RX_BYTES);
2299 		data[1] = axienet_stat(lp, STAT_TX_BYTES);
2300 		data[2] = axienet_stat(lp, STAT_RX_VLAN_FRAMES);
2301 		data[3] = axienet_stat(lp, STAT_TX_VLAN_FRAMES);
2302 		data[6] = axienet_stat(lp, STAT_TX_PFC_FRAMES);
2303 		data[7] = axienet_stat(lp, STAT_RX_PFC_FRAMES);
2304 		data[8] = axienet_stat(lp, STAT_USER_DEFINED0);
2305 		data[9] = axienet_stat(lp, STAT_USER_DEFINED1);
2306 		data[10] = axienet_stat(lp, STAT_USER_DEFINED2);
2307 	} while (read_seqcount_retry(&lp->hw_stats_seqcount, start));
2308 }
2309 
2310 static const char axienet_ethtool_stats_strings[][ETH_GSTRING_LEN] = {
2311 	"Received bytes",
2312 	"Transmitted bytes",
2313 	"RX Good VLAN Tagged Frames",
2314 	"TX Good VLAN Tagged Frames",
2315 	"TX Good PFC Frames",
2316 	"RX Good PFC Frames",
2317 	"User Defined Counter 0",
2318 	"User Defined Counter 1",
2319 	"User Defined Counter 2",
2320 };
2321 
axienet_ethtools_get_strings(struct net_device * dev,u32 stringset,u8 * data)2322 static void axienet_ethtools_get_strings(struct net_device *dev, u32 stringset, u8 *data)
2323 {
2324 	switch (stringset) {
2325 	case ETH_SS_STATS:
2326 		memcpy(data, axienet_ethtool_stats_strings,
2327 		       sizeof(axienet_ethtool_stats_strings));
2328 		break;
2329 	}
2330 }
2331 
axienet_ethtools_get_sset_count(struct net_device * dev,int sset)2332 static int axienet_ethtools_get_sset_count(struct net_device *dev, int sset)
2333 {
2334 	struct axienet_local *lp = netdev_priv(dev);
2335 
2336 	switch (sset) {
2337 	case ETH_SS_STATS:
2338 		if (lp->features & XAE_FEATURE_STATS)
2339 			return ARRAY_SIZE(axienet_ethtool_stats_strings);
2340 		fallthrough;
2341 	default:
2342 		return -EOPNOTSUPP;
2343 	}
2344 }
2345 
2346 static void
axienet_ethtools_get_pause_stats(struct net_device * dev,struct ethtool_pause_stats * pause_stats)2347 axienet_ethtools_get_pause_stats(struct net_device *dev,
2348 				 struct ethtool_pause_stats *pause_stats)
2349 {
2350 	struct axienet_local *lp = netdev_priv(dev);
2351 	unsigned int start;
2352 
2353 	if (!(lp->features & XAE_FEATURE_STATS))
2354 		return;
2355 
2356 	do {
2357 		start = read_seqcount_begin(&lp->hw_stats_seqcount);
2358 		pause_stats->tx_pause_frames =
2359 			axienet_stat(lp, STAT_TX_PAUSE_FRAMES);
2360 		pause_stats->rx_pause_frames =
2361 			axienet_stat(lp, STAT_RX_PAUSE_FRAMES);
2362 	} while (read_seqcount_retry(&lp->hw_stats_seqcount, start));
2363 }
2364 
2365 static void
axienet_ethtool_get_eth_mac_stats(struct net_device * dev,struct ethtool_eth_mac_stats * mac_stats)2366 axienet_ethtool_get_eth_mac_stats(struct net_device *dev,
2367 				  struct ethtool_eth_mac_stats *mac_stats)
2368 {
2369 	struct axienet_local *lp = netdev_priv(dev);
2370 	unsigned int start;
2371 
2372 	if (!(lp->features & XAE_FEATURE_STATS))
2373 		return;
2374 
2375 	do {
2376 		start = read_seqcount_begin(&lp->hw_stats_seqcount);
2377 		mac_stats->FramesTransmittedOK =
2378 			axienet_stat(lp, STAT_TX_GOOD_FRAMES);
2379 		mac_stats->SingleCollisionFrames =
2380 			axienet_stat(lp, STAT_TX_SINGLE_COLLISION_FRAMES);
2381 		mac_stats->MultipleCollisionFrames =
2382 			axienet_stat(lp, STAT_TX_MULTIPLE_COLLISION_FRAMES);
2383 		mac_stats->FramesReceivedOK =
2384 			axienet_stat(lp, STAT_RX_GOOD_FRAMES);
2385 		mac_stats->FrameCheckSequenceErrors =
2386 			axienet_stat(lp, STAT_RX_FCS_ERRORS);
2387 		mac_stats->AlignmentErrors =
2388 			axienet_stat(lp, STAT_RX_ALIGNMENT_ERRORS);
2389 		mac_stats->FramesWithDeferredXmissions =
2390 			axienet_stat(lp, STAT_TX_DEFERRED_FRAMES);
2391 		mac_stats->LateCollisions =
2392 			axienet_stat(lp, STAT_TX_LATE_COLLISIONS);
2393 		mac_stats->FramesAbortedDueToXSColls =
2394 			axienet_stat(lp, STAT_TX_EXCESS_COLLISIONS);
2395 		mac_stats->MulticastFramesXmittedOK =
2396 			axienet_stat(lp, STAT_TX_MULTICAST_FRAMES);
2397 		mac_stats->BroadcastFramesXmittedOK =
2398 			axienet_stat(lp, STAT_TX_BROADCAST_FRAMES);
2399 		mac_stats->FramesWithExcessiveDeferral =
2400 			axienet_stat(lp, STAT_TX_EXCESS_DEFERRAL);
2401 		mac_stats->MulticastFramesReceivedOK =
2402 			axienet_stat(lp, STAT_RX_MULTICAST_FRAMES);
2403 		mac_stats->BroadcastFramesReceivedOK =
2404 			axienet_stat(lp, STAT_RX_BROADCAST_FRAMES);
2405 		mac_stats->InRangeLengthErrors =
2406 			axienet_stat(lp, STAT_RX_LENGTH_ERRORS);
2407 	} while (read_seqcount_retry(&lp->hw_stats_seqcount, start));
2408 }
2409 
2410 static void
axienet_ethtool_get_eth_ctrl_stats(struct net_device * dev,struct ethtool_eth_ctrl_stats * ctrl_stats)2411 axienet_ethtool_get_eth_ctrl_stats(struct net_device *dev,
2412 				   struct ethtool_eth_ctrl_stats *ctrl_stats)
2413 {
2414 	struct axienet_local *lp = netdev_priv(dev);
2415 	unsigned int start;
2416 
2417 	if (!(lp->features & XAE_FEATURE_STATS))
2418 		return;
2419 
2420 	do {
2421 		start = read_seqcount_begin(&lp->hw_stats_seqcount);
2422 		ctrl_stats->MACControlFramesTransmitted =
2423 			axienet_stat(lp, STAT_TX_CONTROL_FRAMES);
2424 		ctrl_stats->MACControlFramesReceived =
2425 			axienet_stat(lp, STAT_RX_CONTROL_FRAMES);
2426 		ctrl_stats->UnsupportedOpcodesReceived =
2427 			axienet_stat(lp, STAT_RX_CONTROL_OPCODE_ERRORS);
2428 	} while (read_seqcount_retry(&lp->hw_stats_seqcount, start));
2429 }
2430 
2431 static const struct ethtool_rmon_hist_range axienet_rmon_ranges[] = {
2432 	{   64,    64 },
2433 	{   65,   127 },
2434 	{  128,   255 },
2435 	{  256,   511 },
2436 	{  512,  1023 },
2437 	{ 1024,  1518 },
2438 	{ 1519, 16384 },
2439 	{ },
2440 };
2441 
2442 static void
axienet_ethtool_get_rmon_stats(struct net_device * dev,struct ethtool_rmon_stats * rmon_stats,const struct ethtool_rmon_hist_range ** ranges)2443 axienet_ethtool_get_rmon_stats(struct net_device *dev,
2444 			       struct ethtool_rmon_stats *rmon_stats,
2445 			       const struct ethtool_rmon_hist_range **ranges)
2446 {
2447 	struct axienet_local *lp = netdev_priv(dev);
2448 	unsigned int start;
2449 
2450 	if (!(lp->features & XAE_FEATURE_STATS))
2451 		return;
2452 
2453 	do {
2454 		start = read_seqcount_begin(&lp->hw_stats_seqcount);
2455 		rmon_stats->undersize_pkts =
2456 			axienet_stat(lp, STAT_UNDERSIZE_FRAMES);
2457 		rmon_stats->oversize_pkts =
2458 			axienet_stat(lp, STAT_RX_OVERSIZE_FRAMES);
2459 		rmon_stats->fragments =
2460 			axienet_stat(lp, STAT_FRAGMENT_FRAMES);
2461 
2462 		rmon_stats->hist[0] =
2463 			axienet_stat(lp, STAT_RX_64_BYTE_FRAMES);
2464 		rmon_stats->hist[1] =
2465 			axienet_stat(lp, STAT_RX_65_127_BYTE_FRAMES);
2466 		rmon_stats->hist[2] =
2467 			axienet_stat(lp, STAT_RX_128_255_BYTE_FRAMES);
2468 		rmon_stats->hist[3] =
2469 			axienet_stat(lp, STAT_RX_256_511_BYTE_FRAMES);
2470 		rmon_stats->hist[4] =
2471 			axienet_stat(lp, STAT_RX_512_1023_BYTE_FRAMES);
2472 		rmon_stats->hist[5] =
2473 			axienet_stat(lp, STAT_RX_1024_MAX_BYTE_FRAMES);
2474 		rmon_stats->hist[6] =
2475 			rmon_stats->oversize_pkts;
2476 
2477 		rmon_stats->hist_tx[0] =
2478 			axienet_stat(lp, STAT_TX_64_BYTE_FRAMES);
2479 		rmon_stats->hist_tx[1] =
2480 			axienet_stat(lp, STAT_TX_65_127_BYTE_FRAMES);
2481 		rmon_stats->hist_tx[2] =
2482 			axienet_stat(lp, STAT_TX_128_255_BYTE_FRAMES);
2483 		rmon_stats->hist_tx[3] =
2484 			axienet_stat(lp, STAT_TX_256_511_BYTE_FRAMES);
2485 		rmon_stats->hist_tx[4] =
2486 			axienet_stat(lp, STAT_TX_512_1023_BYTE_FRAMES);
2487 		rmon_stats->hist_tx[5] =
2488 			axienet_stat(lp, STAT_TX_1024_MAX_BYTE_FRAMES);
2489 		rmon_stats->hist_tx[6] =
2490 			axienet_stat(lp, STAT_TX_OVERSIZE_FRAMES);
2491 	} while (read_seqcount_retry(&lp->hw_stats_seqcount, start));
2492 
2493 	*ranges = axienet_rmon_ranges;
2494 }
2495 
2496 static const struct ethtool_ops axienet_ethtool_ops = {
2497 	.supported_coalesce_params = ETHTOOL_COALESCE_MAX_FRAMES |
2498 				     ETHTOOL_COALESCE_USECS |
2499 				     ETHTOOL_COALESCE_USE_ADAPTIVE_RX,
2500 	.get_drvinfo    = axienet_ethtools_get_drvinfo,
2501 	.get_regs_len   = axienet_ethtools_get_regs_len,
2502 	.get_regs       = axienet_ethtools_get_regs,
2503 	.get_link       = ethtool_op_get_link,
2504 	.get_ringparam	= axienet_ethtools_get_ringparam,
2505 	.set_ringparam	= axienet_ethtools_set_ringparam,
2506 	.get_pauseparam = axienet_ethtools_get_pauseparam,
2507 	.set_pauseparam = axienet_ethtools_set_pauseparam,
2508 	.get_coalesce   = axienet_ethtools_get_coalesce,
2509 	.set_coalesce   = axienet_ethtools_set_coalesce,
2510 	.get_link_ksettings = axienet_ethtools_get_link_ksettings,
2511 	.set_link_ksettings = axienet_ethtools_set_link_ksettings,
2512 	.nway_reset	= axienet_ethtools_nway_reset,
2513 	.get_ethtool_stats = axienet_ethtools_get_ethtool_stats,
2514 	.get_strings    = axienet_ethtools_get_strings,
2515 	.get_sset_count = axienet_ethtools_get_sset_count,
2516 	.get_pause_stats = axienet_ethtools_get_pause_stats,
2517 	.get_eth_mac_stats = axienet_ethtool_get_eth_mac_stats,
2518 	.get_eth_ctrl_stats = axienet_ethtool_get_eth_ctrl_stats,
2519 	.get_rmon_stats = axienet_ethtool_get_rmon_stats,
2520 };
2521 
pcs_to_axienet_local(struct phylink_pcs * pcs)2522 static struct axienet_local *pcs_to_axienet_local(struct phylink_pcs *pcs)
2523 {
2524 	return container_of(pcs, struct axienet_local, pcs);
2525 }
2526 
axienet_pcs_get_state(struct phylink_pcs * pcs,unsigned int neg_mode,struct phylink_link_state * state)2527 static void axienet_pcs_get_state(struct phylink_pcs *pcs,
2528 				  unsigned int neg_mode,
2529 				  struct phylink_link_state *state)
2530 {
2531 	struct mdio_device *pcs_phy = pcs_to_axienet_local(pcs)->pcs_phy;
2532 
2533 	phylink_mii_c22_pcs_get_state(pcs_phy, neg_mode, state);
2534 }
2535 
axienet_pcs_an_restart(struct phylink_pcs * pcs)2536 static void axienet_pcs_an_restart(struct phylink_pcs *pcs)
2537 {
2538 	struct mdio_device *pcs_phy = pcs_to_axienet_local(pcs)->pcs_phy;
2539 
2540 	phylink_mii_c22_pcs_an_restart(pcs_phy);
2541 }
2542 
axienet_pcs_config(struct phylink_pcs * pcs,unsigned int neg_mode,phy_interface_t interface,const unsigned long * advertising,bool permit_pause_to_mac)2543 static int axienet_pcs_config(struct phylink_pcs *pcs, unsigned int neg_mode,
2544 			      phy_interface_t interface,
2545 			      const unsigned long *advertising,
2546 			      bool permit_pause_to_mac)
2547 {
2548 	struct mdio_device *pcs_phy = pcs_to_axienet_local(pcs)->pcs_phy;
2549 	struct net_device *ndev = pcs_to_axienet_local(pcs)->ndev;
2550 	struct axienet_local *lp = netdev_priv(ndev);
2551 	int ret;
2552 
2553 	if (lp->switch_x_sgmii) {
2554 		ret = mdiodev_write(pcs_phy, XLNX_MII_STD_SELECT_REG,
2555 				    interface == PHY_INTERFACE_MODE_SGMII ?
2556 					XLNX_MII_STD_SELECT_SGMII : 0);
2557 		if (ret < 0) {
2558 			netdev_warn(ndev,
2559 				    "Failed to switch PHY interface: %d\n",
2560 				    ret);
2561 			return ret;
2562 		}
2563 	}
2564 
2565 	ret = phylink_mii_c22_pcs_config(pcs_phy, interface, advertising,
2566 					 neg_mode);
2567 	if (ret < 0)
2568 		netdev_warn(ndev, "Failed to configure PCS: %d\n", ret);
2569 
2570 	return ret;
2571 }
2572 
2573 static const struct phylink_pcs_ops axienet_pcs_ops = {
2574 	.pcs_get_state = axienet_pcs_get_state,
2575 	.pcs_config = axienet_pcs_config,
2576 	.pcs_an_restart = axienet_pcs_an_restart,
2577 };
2578 
axienet_mac_select_pcs(struct phylink_config * config,phy_interface_t interface)2579 static struct phylink_pcs *axienet_mac_select_pcs(struct phylink_config *config,
2580 						  phy_interface_t interface)
2581 {
2582 	struct net_device *ndev = to_net_dev(config->dev);
2583 	struct axienet_local *lp = netdev_priv(ndev);
2584 
2585 	if (interface == PHY_INTERFACE_MODE_1000BASEX ||
2586 	    interface ==  PHY_INTERFACE_MODE_SGMII)
2587 		return &lp->pcs;
2588 
2589 	return NULL;
2590 }
2591 
axienet_mac_config(struct phylink_config * config,unsigned int mode,const struct phylink_link_state * state)2592 static void axienet_mac_config(struct phylink_config *config, unsigned int mode,
2593 			       const struct phylink_link_state *state)
2594 {
2595 	/* nothing meaningful to do */
2596 }
2597 
axienet_mac_link_down(struct phylink_config * config,unsigned int mode,phy_interface_t interface)2598 static void axienet_mac_link_down(struct phylink_config *config,
2599 				  unsigned int mode,
2600 				  phy_interface_t interface)
2601 {
2602 	/* nothing meaningful to do */
2603 }
2604 
axienet_mac_link_up(struct phylink_config * config,struct phy_device * phy,unsigned int mode,phy_interface_t interface,int speed,int duplex,bool tx_pause,bool rx_pause)2605 static void axienet_mac_link_up(struct phylink_config *config,
2606 				struct phy_device *phy,
2607 				unsigned int mode, phy_interface_t interface,
2608 				int speed, int duplex,
2609 				bool tx_pause, bool rx_pause)
2610 {
2611 	struct net_device *ndev = to_net_dev(config->dev);
2612 	struct axienet_local *lp = netdev_priv(ndev);
2613 	u32 emmc_reg, fcc_reg;
2614 
2615 	emmc_reg = axienet_ior(lp, XAE_EMMC_OFFSET);
2616 	emmc_reg &= ~XAE_EMMC_LINKSPEED_MASK;
2617 
2618 	switch (speed) {
2619 	case SPEED_1000:
2620 		emmc_reg |= XAE_EMMC_LINKSPD_1000;
2621 		break;
2622 	case SPEED_100:
2623 		emmc_reg |= XAE_EMMC_LINKSPD_100;
2624 		break;
2625 	case SPEED_10:
2626 		emmc_reg |= XAE_EMMC_LINKSPD_10;
2627 		break;
2628 	default:
2629 		dev_err(&ndev->dev,
2630 			"Speed other than 10, 100 or 1Gbps is not supported\n");
2631 		break;
2632 	}
2633 
2634 	axienet_iow(lp, XAE_EMMC_OFFSET, emmc_reg);
2635 
2636 	fcc_reg = axienet_ior(lp, XAE_FCC_OFFSET);
2637 	if (tx_pause)
2638 		fcc_reg |= XAE_FCC_FCTX_MASK;
2639 	else
2640 		fcc_reg &= ~XAE_FCC_FCTX_MASK;
2641 	if (rx_pause)
2642 		fcc_reg |= XAE_FCC_FCRX_MASK;
2643 	else
2644 		fcc_reg &= ~XAE_FCC_FCRX_MASK;
2645 	axienet_iow(lp, XAE_FCC_OFFSET, fcc_reg);
2646 }
2647 
2648 static const struct phylink_mac_ops axienet_phylink_ops = {
2649 	.mac_select_pcs = axienet_mac_select_pcs,
2650 	.mac_config = axienet_mac_config,
2651 	.mac_link_down = axienet_mac_link_down,
2652 	.mac_link_up = axienet_mac_link_up,
2653 };
2654 
2655 /**
2656  * axienet_dma_err_handler - Work queue task for Axi DMA Error
2657  * @work:	pointer to work_struct
2658  *
2659  * Resets the Axi DMA and Axi Ethernet devices, and reconfigures the
2660  * Tx/Rx BDs.
2661  */
axienet_dma_err_handler(struct work_struct * work)2662 static void axienet_dma_err_handler(struct work_struct *work)
2663 {
2664 	u32 i;
2665 	u32 axienet_status;
2666 	struct axidma_bd *cur_p;
2667 	struct axienet_local *lp = container_of(work, struct axienet_local,
2668 						dma_err_task);
2669 	struct net_device *ndev = lp->ndev;
2670 
2671 	/* Don't bother if we are going to stop anyway */
2672 	if (READ_ONCE(lp->stopping))
2673 		return;
2674 
2675 	napi_disable(&lp->napi_tx);
2676 	napi_disable(&lp->napi_rx);
2677 
2678 	axienet_setoptions(ndev, lp->options &
2679 			   ~(XAE_OPTION_TXEN | XAE_OPTION_RXEN));
2680 
2681 	axienet_dma_stop(lp);
2682 	netdev_reset_queue(ndev);
2683 
2684 	for (i = 0; i < lp->tx_bd_num; i++) {
2685 		cur_p = &lp->tx_bd_v[i];
2686 		if (cur_p->cntrl) {
2687 			dma_addr_t addr = desc_get_phys_addr(lp, cur_p);
2688 
2689 			dma_unmap_single(lp->dev, addr,
2690 					 (cur_p->cntrl &
2691 					  XAXIDMA_BD_CTRL_LENGTH_MASK),
2692 					 DMA_TO_DEVICE);
2693 		}
2694 		if (cur_p->skb)
2695 			dev_kfree_skb_irq(cur_p->skb);
2696 		cur_p->phys = 0;
2697 		cur_p->phys_msb = 0;
2698 		cur_p->cntrl = 0;
2699 		cur_p->status = 0;
2700 		cur_p->app0 = 0;
2701 		cur_p->app1 = 0;
2702 		cur_p->app2 = 0;
2703 		cur_p->app3 = 0;
2704 		cur_p->app4 = 0;
2705 		cur_p->skb = NULL;
2706 	}
2707 
2708 	for (i = 0; i < lp->rx_bd_num; i++) {
2709 		cur_p = &lp->rx_bd_v[i];
2710 		cur_p->status = 0;
2711 		cur_p->app0 = 0;
2712 		cur_p->app1 = 0;
2713 		cur_p->app2 = 0;
2714 		cur_p->app3 = 0;
2715 		cur_p->app4 = 0;
2716 	}
2717 
2718 	lp->tx_bd_ci = 0;
2719 	lp->tx_bd_tail = 0;
2720 	lp->rx_bd_ci = 0;
2721 
2722 	axienet_dma_start(lp);
2723 
2724 	axienet_status = axienet_ior(lp, XAE_RCW1_OFFSET);
2725 	axienet_status &= ~XAE_RCW1_RX_MASK;
2726 	axienet_iow(lp, XAE_RCW1_OFFSET, axienet_status);
2727 
2728 	axienet_status = axienet_ior(lp, XAE_IP_OFFSET);
2729 	if (axienet_status & XAE_INT_RXRJECT_MASK)
2730 		axienet_iow(lp, XAE_IS_OFFSET, XAE_INT_RXRJECT_MASK);
2731 	axienet_iow(lp, XAE_IE_OFFSET, lp->eth_irq > 0 ?
2732 		    XAE_INT_RECV_ERROR_MASK : 0);
2733 	axienet_iow(lp, XAE_FCC_OFFSET, XAE_FCC_FCRX_MASK);
2734 
2735 	/* Sync default options with HW but leave receiver and
2736 	 * transmitter disabled.
2737 	 */
2738 	axienet_setoptions(ndev, lp->options &
2739 			   ~(XAE_OPTION_TXEN | XAE_OPTION_RXEN));
2740 	axienet_set_mac_address(ndev, NULL);
2741 	axienet_set_multicast_list(ndev);
2742 	napi_enable(&lp->napi_rx);
2743 	napi_enable(&lp->napi_tx);
2744 	axienet_setoptions(ndev, lp->options);
2745 }
2746 
2747 /**
2748  * axienet_probe - Axi Ethernet probe function.
2749  * @pdev:	Pointer to platform device structure.
2750  *
2751  * Return: 0, on success
2752  *	    Non-zero error value on failure.
2753  *
2754  * This is the probe routine for Axi Ethernet driver. This is called before
2755  * any other driver routines are invoked. It allocates and sets up the Ethernet
2756  * device. Parses through device tree and populates fields of
2757  * axienet_local. It registers the Ethernet device.
2758  */
axienet_probe(struct platform_device * pdev)2759 static int axienet_probe(struct platform_device *pdev)
2760 {
2761 	int ret;
2762 	struct device_node *np;
2763 	struct axienet_local *lp;
2764 	struct net_device *ndev;
2765 	struct resource *ethres;
2766 	u8 mac_addr[ETH_ALEN];
2767 	int addr_width = 32;
2768 	u32 value;
2769 
2770 	ndev = alloc_etherdev(sizeof(*lp));
2771 	if (!ndev)
2772 		return -ENOMEM;
2773 
2774 	platform_set_drvdata(pdev, ndev);
2775 
2776 	SET_NETDEV_DEV(ndev, &pdev->dev);
2777 	ndev->features = NETIF_F_SG;
2778 	ndev->ethtool_ops = &axienet_ethtool_ops;
2779 
2780 	/* MTU range: 64 - 9000 */
2781 	ndev->min_mtu = 64;
2782 	ndev->max_mtu = XAE_JUMBO_MTU;
2783 
2784 	lp = netdev_priv(ndev);
2785 	lp->ndev = ndev;
2786 	lp->dev = &pdev->dev;
2787 	lp->options = XAE_OPTION_DEFAULTS;
2788 	lp->rx_bd_num = RX_BD_NUM_DEFAULT;
2789 	lp->tx_bd_num = TX_BD_NUM_DEFAULT;
2790 
2791 	u64_stats_init(&lp->rx_stat_sync);
2792 	u64_stats_init(&lp->tx_stat_sync);
2793 
2794 	mutex_init(&lp->stats_lock);
2795 	seqcount_mutex_init(&lp->hw_stats_seqcount, &lp->stats_lock);
2796 	INIT_DEFERRABLE_WORK(&lp->stats_work, axienet_refresh_stats);
2797 
2798 	lp->axi_clk = devm_clk_get_optional(&pdev->dev, "s_axi_lite_clk");
2799 	if (!lp->axi_clk) {
2800 		/* For backward compatibility, if named AXI clock is not present,
2801 		 * treat the first clock specified as the AXI clock.
2802 		 */
2803 		lp->axi_clk = devm_clk_get_optional(&pdev->dev, NULL);
2804 	}
2805 	if (IS_ERR(lp->axi_clk)) {
2806 		ret = PTR_ERR(lp->axi_clk);
2807 		goto free_netdev;
2808 	}
2809 	ret = clk_prepare_enable(lp->axi_clk);
2810 	if (ret) {
2811 		dev_err(&pdev->dev, "Unable to enable AXI clock: %d\n", ret);
2812 		goto free_netdev;
2813 	}
2814 
2815 	lp->misc_clks[0].id = "axis_clk";
2816 	lp->misc_clks[1].id = "ref_clk";
2817 	lp->misc_clks[2].id = "mgt_clk";
2818 
2819 	ret = devm_clk_bulk_get_optional(&pdev->dev, XAE_NUM_MISC_CLOCKS, lp->misc_clks);
2820 	if (ret)
2821 		goto cleanup_clk;
2822 
2823 	ret = clk_bulk_prepare_enable(XAE_NUM_MISC_CLOCKS, lp->misc_clks);
2824 	if (ret)
2825 		goto cleanup_clk;
2826 
2827 	/* Map device registers */
2828 	lp->regs = devm_platform_get_and_ioremap_resource(pdev, 0, &ethres);
2829 	if (IS_ERR(lp->regs)) {
2830 		ret = PTR_ERR(lp->regs);
2831 		goto cleanup_clk;
2832 	}
2833 	lp->regs_start = ethres->start;
2834 
2835 	/* Setup checksum offload, but default to off if not specified */
2836 	lp->features = 0;
2837 
2838 	if (axienet_ior(lp, XAE_ABILITY_OFFSET) & XAE_ABILITY_STATS)
2839 		lp->features |= XAE_FEATURE_STATS;
2840 
2841 	ret = of_property_read_u32(pdev->dev.of_node, "xlnx,txcsum", &value);
2842 	if (!ret) {
2843 		switch (value) {
2844 		case 1:
2845 			lp->features |= XAE_FEATURE_PARTIAL_TX_CSUM;
2846 			/* Can checksum any contiguous range */
2847 			ndev->features |= NETIF_F_HW_CSUM;
2848 			break;
2849 		case 2:
2850 			lp->features |= XAE_FEATURE_FULL_TX_CSUM;
2851 			/* Can checksum TCP/UDP over IPv4. */
2852 			ndev->features |= NETIF_F_IP_CSUM;
2853 			break;
2854 		}
2855 	}
2856 	ret = of_property_read_u32(pdev->dev.of_node, "xlnx,rxcsum", &value);
2857 	if (!ret) {
2858 		switch (value) {
2859 		case 1:
2860 			lp->features |= XAE_FEATURE_PARTIAL_RX_CSUM;
2861 			ndev->features |= NETIF_F_RXCSUM;
2862 			break;
2863 		case 2:
2864 			lp->features |= XAE_FEATURE_FULL_RX_CSUM;
2865 			ndev->features |= NETIF_F_RXCSUM;
2866 			break;
2867 		}
2868 	}
2869 	/* For supporting jumbo frames, the Axi Ethernet hardware must have
2870 	 * a larger Rx/Tx Memory. Typically, the size must be large so that
2871 	 * we can enable jumbo option and start supporting jumbo frames.
2872 	 * Here we check for memory allocated for Rx/Tx in the hardware from
2873 	 * the device-tree and accordingly set flags.
2874 	 */
2875 	of_property_read_u32(pdev->dev.of_node, "xlnx,rxmem", &lp->rxmem);
2876 
2877 	lp->switch_x_sgmii = of_property_read_bool(pdev->dev.of_node,
2878 						   "xlnx,switch-x-sgmii");
2879 
2880 	/* Start with the proprietary, and broken phy_type */
2881 	ret = of_property_read_u32(pdev->dev.of_node, "xlnx,phy-type", &value);
2882 	if (!ret) {
2883 		netdev_warn(ndev, "Please upgrade your device tree binary blob to use phy-mode");
2884 		switch (value) {
2885 		case XAE_PHY_TYPE_MII:
2886 			lp->phy_mode = PHY_INTERFACE_MODE_MII;
2887 			break;
2888 		case XAE_PHY_TYPE_GMII:
2889 			lp->phy_mode = PHY_INTERFACE_MODE_GMII;
2890 			break;
2891 		case XAE_PHY_TYPE_RGMII_2_0:
2892 			lp->phy_mode = PHY_INTERFACE_MODE_RGMII_ID;
2893 			break;
2894 		case XAE_PHY_TYPE_SGMII:
2895 			lp->phy_mode = PHY_INTERFACE_MODE_SGMII;
2896 			break;
2897 		case XAE_PHY_TYPE_1000BASE_X:
2898 			lp->phy_mode = PHY_INTERFACE_MODE_1000BASEX;
2899 			break;
2900 		default:
2901 			ret = -EINVAL;
2902 			goto cleanup_clk;
2903 		}
2904 	} else {
2905 		ret = of_get_phy_mode(pdev->dev.of_node, &lp->phy_mode);
2906 		if (ret)
2907 			goto cleanup_clk;
2908 	}
2909 	if (lp->switch_x_sgmii && lp->phy_mode != PHY_INTERFACE_MODE_SGMII &&
2910 	    lp->phy_mode != PHY_INTERFACE_MODE_1000BASEX) {
2911 		dev_err(&pdev->dev, "xlnx,switch-x-sgmii only supported with SGMII or 1000BaseX\n");
2912 		ret = -EINVAL;
2913 		goto cleanup_clk;
2914 	}
2915 
2916 	if (!of_property_present(pdev->dev.of_node, "dmas")) {
2917 		/* Find the DMA node, map the DMA registers, and decode the DMA IRQs */
2918 		np = of_parse_phandle(pdev->dev.of_node, "axistream-connected", 0);
2919 
2920 		if (np) {
2921 			struct resource dmares;
2922 
2923 			ret = of_address_to_resource(np, 0, &dmares);
2924 			if (ret) {
2925 				dev_err(&pdev->dev,
2926 					"unable to get DMA resource\n");
2927 				of_node_put(np);
2928 				goto cleanup_clk;
2929 			}
2930 			lp->dma_regs = devm_ioremap_resource(&pdev->dev,
2931 							     &dmares);
2932 			lp->rx_irq = irq_of_parse_and_map(np, 1);
2933 			lp->tx_irq = irq_of_parse_and_map(np, 0);
2934 			of_node_put(np);
2935 			lp->eth_irq = platform_get_irq_optional(pdev, 0);
2936 		} else {
2937 			/* Check for these resources directly on the Ethernet node. */
2938 			lp->dma_regs = devm_platform_get_and_ioremap_resource(pdev, 1, NULL);
2939 			lp->rx_irq = platform_get_irq(pdev, 1);
2940 			lp->tx_irq = platform_get_irq(pdev, 0);
2941 			lp->eth_irq = platform_get_irq_optional(pdev, 2);
2942 		}
2943 		if (IS_ERR(lp->dma_regs)) {
2944 			dev_err(&pdev->dev, "could not map DMA regs\n");
2945 			ret = PTR_ERR(lp->dma_regs);
2946 			goto cleanup_clk;
2947 		}
2948 		if (lp->rx_irq <= 0 || lp->tx_irq <= 0) {
2949 			dev_err(&pdev->dev, "could not determine irqs\n");
2950 			ret = -ENOMEM;
2951 			goto cleanup_clk;
2952 		}
2953 
2954 		/* Reset core now that clocks are enabled, prior to accessing MDIO */
2955 		ret = __axienet_device_reset(lp);
2956 		if (ret)
2957 			goto cleanup_clk;
2958 
2959 		/* Autodetect the need for 64-bit DMA pointers.
2960 		 * When the IP is configured for a bus width bigger than 32 bits,
2961 		 * writing the MSB registers is mandatory, even if they are all 0.
2962 		 * We can detect this case by writing all 1's to one such register
2963 		 * and see if that sticks: when the IP is configured for 32 bits
2964 		 * only, those registers are RES0.
2965 		 * Those MSB registers were introduced in IP v7.1, which we check first.
2966 		 */
2967 		if ((axienet_ior(lp, XAE_ID_OFFSET) >> 24) >= 0x9) {
2968 			void __iomem *desc = lp->dma_regs + XAXIDMA_TX_CDESC_OFFSET + 4;
2969 
2970 			iowrite32(0x0, desc);
2971 			if (ioread32(desc) == 0) {	/* sanity check */
2972 				iowrite32(0xffffffff, desc);
2973 				if (ioread32(desc) > 0) {
2974 					lp->features |= XAE_FEATURE_DMA_64BIT;
2975 					addr_width = 64;
2976 					dev_info(&pdev->dev,
2977 						 "autodetected 64-bit DMA range\n");
2978 				}
2979 				iowrite32(0x0, desc);
2980 			}
2981 		}
2982 		if (!IS_ENABLED(CONFIG_64BIT) && lp->features & XAE_FEATURE_DMA_64BIT) {
2983 			dev_err(&pdev->dev, "64-bit addressable DMA is not compatible with 32-bit archecture\n");
2984 			ret = -EINVAL;
2985 			goto cleanup_clk;
2986 		}
2987 
2988 		ret = dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(addr_width));
2989 		if (ret) {
2990 			dev_err(&pdev->dev, "No suitable DMA available\n");
2991 			goto cleanup_clk;
2992 		}
2993 		netif_napi_add(ndev, &lp->napi_rx, axienet_rx_poll);
2994 		netif_napi_add(ndev, &lp->napi_tx, axienet_tx_poll);
2995 	} else {
2996 		struct xilinx_vdma_config cfg;
2997 		struct dma_chan *tx_chan;
2998 
2999 		lp->eth_irq = platform_get_irq_optional(pdev, 0);
3000 		if (lp->eth_irq < 0 && lp->eth_irq != -ENXIO) {
3001 			ret = lp->eth_irq;
3002 			goto cleanup_clk;
3003 		}
3004 		tx_chan = dma_request_chan(lp->dev, "tx_chan0");
3005 		if (IS_ERR(tx_chan)) {
3006 			ret = PTR_ERR(tx_chan);
3007 			dev_err_probe(lp->dev, ret, "No Ethernet DMA (TX) channel found\n");
3008 			goto cleanup_clk;
3009 		}
3010 
3011 		cfg.reset = 1;
3012 		/* As name says VDMA but it has support for DMA channel reset */
3013 		ret = xilinx_vdma_channel_set_config(tx_chan, &cfg);
3014 		if (ret < 0) {
3015 			dev_err(&pdev->dev, "Reset channel failed\n");
3016 			dma_release_channel(tx_chan);
3017 			goto cleanup_clk;
3018 		}
3019 
3020 		dma_release_channel(tx_chan);
3021 		lp->use_dmaengine = 1;
3022 	}
3023 
3024 	if (lp->use_dmaengine)
3025 		ndev->netdev_ops = &axienet_netdev_dmaengine_ops;
3026 	else
3027 		ndev->netdev_ops = &axienet_netdev_ops;
3028 	/* Check for Ethernet core IRQ (optional) */
3029 	if (lp->eth_irq <= 0)
3030 		dev_info(&pdev->dev, "Ethernet core IRQ not defined\n");
3031 
3032 	/* Retrieve the MAC address */
3033 	ret = of_get_mac_address(pdev->dev.of_node, mac_addr);
3034 	if (!ret) {
3035 		axienet_set_mac_address(ndev, mac_addr);
3036 	} else {
3037 		dev_warn(&pdev->dev, "could not find MAC address property: %d\n",
3038 			 ret);
3039 		axienet_set_mac_address(ndev, NULL);
3040 	}
3041 
3042 	spin_lock_init(&lp->rx_cr_lock);
3043 	spin_lock_init(&lp->tx_cr_lock);
3044 	INIT_WORK(&lp->rx_dim.work, axienet_rx_dim_work);
3045 	lp->rx_dim_enabled = true;
3046 	lp->rx_dim.profile_ix = 1;
3047 	lp->rx_dma_cr = axienet_calc_cr(lp, axienet_dim_coalesce_count_rx(lp),
3048 					XAXIDMA_DFT_RX_USEC);
3049 	lp->tx_dma_cr = axienet_calc_cr(lp, XAXIDMA_DFT_TX_THRESHOLD,
3050 					XAXIDMA_DFT_TX_USEC);
3051 
3052 	ret = axienet_mdio_setup(lp);
3053 	if (ret)
3054 		dev_warn(&pdev->dev,
3055 			 "error registering MDIO bus: %d\n", ret);
3056 
3057 	if (lp->phy_mode == PHY_INTERFACE_MODE_SGMII ||
3058 	    lp->phy_mode == PHY_INTERFACE_MODE_1000BASEX) {
3059 		np = of_parse_phandle(pdev->dev.of_node, "pcs-handle", 0);
3060 		if (!np) {
3061 			/* Deprecated: Always use "pcs-handle" for pcs_phy.
3062 			 * Falling back to "phy-handle" here is only for
3063 			 * backward compatibility with old device trees.
3064 			 */
3065 			np = of_parse_phandle(pdev->dev.of_node, "phy-handle", 0);
3066 		}
3067 		if (!np) {
3068 			dev_err(&pdev->dev, "pcs-handle (preferred) or phy-handle required for 1000BaseX/SGMII\n");
3069 			ret = -EINVAL;
3070 			goto cleanup_mdio;
3071 		}
3072 		lp->pcs_phy = of_mdio_find_device(np);
3073 		if (!lp->pcs_phy) {
3074 			ret = -EPROBE_DEFER;
3075 			of_node_put(np);
3076 			goto cleanup_mdio;
3077 		}
3078 		of_node_put(np);
3079 		lp->pcs.ops = &axienet_pcs_ops;
3080 		lp->pcs.poll = true;
3081 	}
3082 
3083 	lp->phylink_config.dev = &ndev->dev;
3084 	lp->phylink_config.type = PHYLINK_NETDEV;
3085 	lp->phylink_config.mac_managed_pm = true;
3086 	lp->phylink_config.mac_capabilities = MAC_SYM_PAUSE | MAC_ASYM_PAUSE |
3087 		MAC_10FD | MAC_100FD | MAC_1000FD;
3088 
3089 	__set_bit(lp->phy_mode, lp->phylink_config.supported_interfaces);
3090 	if (lp->switch_x_sgmii) {
3091 		__set_bit(PHY_INTERFACE_MODE_1000BASEX,
3092 			  lp->phylink_config.supported_interfaces);
3093 		__set_bit(PHY_INTERFACE_MODE_SGMII,
3094 			  lp->phylink_config.supported_interfaces);
3095 	}
3096 
3097 	lp->phylink = phylink_create(&lp->phylink_config, pdev->dev.fwnode,
3098 				     lp->phy_mode,
3099 				     &axienet_phylink_ops);
3100 	if (IS_ERR(lp->phylink)) {
3101 		ret = PTR_ERR(lp->phylink);
3102 		dev_err(&pdev->dev, "phylink_create error (%i)\n", ret);
3103 		goto cleanup_mdio;
3104 	}
3105 
3106 	ret = register_netdev(lp->ndev);
3107 	if (ret) {
3108 		dev_err(lp->dev, "register_netdev() error (%i)\n", ret);
3109 		goto cleanup_phylink;
3110 	}
3111 
3112 	return 0;
3113 
3114 cleanup_phylink:
3115 	phylink_destroy(lp->phylink);
3116 
3117 cleanup_mdio:
3118 	if (lp->pcs_phy)
3119 		put_device(&lp->pcs_phy->dev);
3120 	if (lp->mii_bus)
3121 		axienet_mdio_teardown(lp);
3122 cleanup_clk:
3123 	clk_bulk_disable_unprepare(XAE_NUM_MISC_CLOCKS, lp->misc_clks);
3124 	clk_disable_unprepare(lp->axi_clk);
3125 
3126 free_netdev:
3127 	free_netdev(ndev);
3128 
3129 	return ret;
3130 }
3131 
axienet_remove(struct platform_device * pdev)3132 static void axienet_remove(struct platform_device *pdev)
3133 {
3134 	struct net_device *ndev = platform_get_drvdata(pdev);
3135 	struct axienet_local *lp = netdev_priv(ndev);
3136 
3137 	unregister_netdev(ndev);
3138 
3139 	if (lp->phylink)
3140 		phylink_destroy(lp->phylink);
3141 
3142 	if (lp->pcs_phy)
3143 		put_device(&lp->pcs_phy->dev);
3144 
3145 	axienet_mdio_teardown(lp);
3146 
3147 	clk_bulk_disable_unprepare(XAE_NUM_MISC_CLOCKS, lp->misc_clks);
3148 	clk_disable_unprepare(lp->axi_clk);
3149 
3150 	free_netdev(ndev);
3151 }
3152 
axienet_shutdown(struct platform_device * pdev)3153 static void axienet_shutdown(struct platform_device *pdev)
3154 {
3155 	struct net_device *ndev = platform_get_drvdata(pdev);
3156 
3157 	rtnl_lock();
3158 	netif_device_detach(ndev);
3159 
3160 	if (netif_running(ndev))
3161 		dev_close(ndev);
3162 
3163 	rtnl_unlock();
3164 }
3165 
axienet_suspend(struct device * dev)3166 static int axienet_suspend(struct device *dev)
3167 {
3168 	struct net_device *ndev = dev_get_drvdata(dev);
3169 
3170 	if (!netif_running(ndev))
3171 		return 0;
3172 
3173 	netif_device_detach(ndev);
3174 
3175 	rtnl_lock();
3176 	axienet_stop(ndev);
3177 	rtnl_unlock();
3178 
3179 	return 0;
3180 }
3181 
axienet_resume(struct device * dev)3182 static int axienet_resume(struct device *dev)
3183 {
3184 	struct net_device *ndev = dev_get_drvdata(dev);
3185 
3186 	if (!netif_running(ndev))
3187 		return 0;
3188 
3189 	rtnl_lock();
3190 	axienet_open(ndev);
3191 	rtnl_unlock();
3192 
3193 	netif_device_attach(ndev);
3194 
3195 	return 0;
3196 }
3197 
3198 static DEFINE_SIMPLE_DEV_PM_OPS(axienet_pm_ops,
3199 				axienet_suspend, axienet_resume);
3200 
3201 static struct platform_driver axienet_driver = {
3202 	.probe = axienet_probe,
3203 	.remove = axienet_remove,
3204 	.shutdown = axienet_shutdown,
3205 	.driver = {
3206 		 .name = "xilinx_axienet",
3207 		 .pm = &axienet_pm_ops,
3208 		 .of_match_table = axienet_of_match,
3209 	},
3210 };
3211 
3212 module_platform_driver(axienet_driver);
3213 
3214 MODULE_DESCRIPTION("Xilinx Axi Ethernet driver");
3215 MODULE_AUTHOR("Xilinx");
3216 MODULE_LICENSE("GPL");
3217