1 /*
2  * Faraday FTGMAC100 Gigabit Ethernet
3  *
4  * (C) Copyright 2009-2011 Faraday Technology
5  * Po-Yu Chuang <ratbert@faraday-tech.com>
6  *
7  * This program is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License as published by
9  * the Free Software Foundation; either version 2 of the License, or
10  * (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program; if not, write to the Free Software
19  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
20  */
21 
22 #define pr_fmt(fmt)	KBUILD_MODNAME ": " fmt
23 
24 #include <linux/dma-mapping.h>
25 #include <linux/etherdevice.h>
26 #include <linux/ethtool.h>
27 #include <linux/interrupt.h>
28 #include <linux/io.h>
29 #include <linux/module.h>
30 #include <linux/netdevice.h>
31 #include <linux/of.h>
32 #include <linux/phy.h>
33 #include <linux/platform_device.h>
34 #include <linux/property.h>
35 #include <linux/crc32.h>
36 #include <linux/if_vlan.h>
37 #include <net/ip.h>
38 #include <net/ncsi.h>
39 
40 #include "ftgmac100.h"
41 
42 #define DRV_NAME	"ftgmac100"
43 #define DRV_VERSION	"0.7"
44 
45 /* Arbitrary values, I am not sure the HW has limits */
46 #define MAX_RX_QUEUE_ENTRIES	1024
47 #define MAX_TX_QUEUE_ENTRIES	1024
48 #define MIN_RX_QUEUE_ENTRIES	32
49 #define MIN_TX_QUEUE_ENTRIES	32
50 
51 /* Defaults */
52 #define DEF_RX_QUEUE_ENTRIES	128
53 #define DEF_TX_QUEUE_ENTRIES	128
54 
55 #define MAX_PKT_SIZE		1536
56 #define RX_BUF_SIZE		MAX_PKT_SIZE	/* must be smaller than 0x3fff */
57 
58 /* Min number of tx ring entries before stopping queue */
59 #define TX_THRESHOLD		(MAX_SKB_FRAGS + 1)
60 
61 struct ftgmac100 {
62 	/* Registers */
63 	struct resource *res;
64 	void __iomem *base;
65 
66 	/* Rx ring */
67 	unsigned int rx_q_entries;
68 	struct ftgmac100_rxdes *rxdes;
69 	dma_addr_t rxdes_dma;
70 	struct sk_buff **rx_skbs;
71 	unsigned int rx_pointer;
72 	u32 rxdes0_edorr_mask;
73 
74 	/* Tx ring */
75 	unsigned int tx_q_entries;
76 	struct ftgmac100_txdes *txdes;
77 	dma_addr_t txdes_dma;
78 	struct sk_buff **tx_skbs;
79 	unsigned int tx_clean_pointer;
80 	unsigned int tx_pointer;
81 	u32 txdes0_edotr_mask;
82 
83 	/* Used to signal the reset task of ring change request */
84 	unsigned int new_rx_q_entries;
85 	unsigned int new_tx_q_entries;
86 
87 	/* Scratch page to use when rx skb alloc fails */
88 	void *rx_scratch;
89 	dma_addr_t rx_scratch_dma;
90 
91 	/* Component structures */
92 	struct net_device *netdev;
93 	struct device *dev;
94 	struct ncsi_dev *ndev;
95 	struct napi_struct napi;
96 	struct work_struct reset_task;
97 	struct mii_bus *mii_bus;
98 
99 	/* Link management */
100 	int cur_speed;
101 	int cur_duplex;
102 	bool use_ncsi;
103 
104 	/* Multicast filter settings */
105 	u32 maht0;
106 	u32 maht1;
107 
108 	/* Flow control settings */
109 	bool tx_pause;
110 	bool rx_pause;
111 	bool aneg_pause;
112 
113 	/* Misc */
114 	bool need_mac_restart;
115 	bool is_aspeed;
116 };
117 
118 static int ftgmac100_reset_mac(struct ftgmac100 *priv, u32 maccr)
119 {
120 	struct net_device *netdev = priv->netdev;
121 	int i;
122 
123 	/* NOTE: reset clears all registers */
124 	iowrite32(maccr, priv->base + FTGMAC100_OFFSET_MACCR);
125 	iowrite32(maccr | FTGMAC100_MACCR_SW_RST,
126 		  priv->base + FTGMAC100_OFFSET_MACCR);
127 	for (i = 0; i < 50; i++) {
128 		unsigned int maccr;
129 
130 		maccr = ioread32(priv->base + FTGMAC100_OFFSET_MACCR);
131 		if (!(maccr & FTGMAC100_MACCR_SW_RST))
132 			return 0;
133 
134 		udelay(1);
135 	}
136 
137 	netdev_err(netdev, "Hardware reset failed\n");
138 	return -EIO;
139 }
140 
141 static int ftgmac100_reset_and_config_mac(struct ftgmac100 *priv)
142 {
143 	u32 maccr = 0;
144 
145 	switch (priv->cur_speed) {
146 	case SPEED_10:
147 	case 0: /* no link */
148 		break;
149 
150 	case SPEED_100:
151 		maccr |= FTGMAC100_MACCR_FAST_MODE;
152 		break;
153 
154 	case SPEED_1000:
155 		maccr |= FTGMAC100_MACCR_GIGA_MODE;
156 		break;
157 	default:
158 		netdev_err(priv->netdev, "Unknown speed %d !\n",
159 			   priv->cur_speed);
160 		break;
161 	}
162 
163 	/* (Re)initialize the queue pointers */
164 	priv->rx_pointer = 0;
165 	priv->tx_clean_pointer = 0;
166 	priv->tx_pointer = 0;
167 
168 	/* The doc says reset twice with 10us interval */
169 	if (ftgmac100_reset_mac(priv, maccr))
170 		return -EIO;
171 	usleep_range(10, 1000);
172 	return ftgmac100_reset_mac(priv, maccr);
173 }
174 
175 static void ftgmac100_write_mac_addr(struct ftgmac100 *priv, const u8 *mac)
176 {
177 	unsigned int maddr = mac[0] << 8 | mac[1];
178 	unsigned int laddr = mac[2] << 24 | mac[3] << 16 | mac[4] << 8 | mac[5];
179 
180 	iowrite32(maddr, priv->base + FTGMAC100_OFFSET_MAC_MADR);
181 	iowrite32(laddr, priv->base + FTGMAC100_OFFSET_MAC_LADR);
182 }
183 
184 static void ftgmac100_initial_mac(struct ftgmac100 *priv)
185 {
186 	u8 mac[ETH_ALEN];
187 	unsigned int m;
188 	unsigned int l;
189 	void *addr;
190 
191 	addr = device_get_mac_address(priv->dev, mac, ETH_ALEN);
192 	if (addr) {
193 		ether_addr_copy(priv->netdev->dev_addr, mac);
194 		dev_info(priv->dev, "Read MAC address %pM from device tree\n",
195 			 mac);
196 		return;
197 	}
198 
199 	m = ioread32(priv->base + FTGMAC100_OFFSET_MAC_MADR);
200 	l = ioread32(priv->base + FTGMAC100_OFFSET_MAC_LADR);
201 
202 	mac[0] = (m >> 8) & 0xff;
203 	mac[1] = m & 0xff;
204 	mac[2] = (l >> 24) & 0xff;
205 	mac[3] = (l >> 16) & 0xff;
206 	mac[4] = (l >> 8) & 0xff;
207 	mac[5] = l & 0xff;
208 
209 	if (is_valid_ether_addr(mac)) {
210 		ether_addr_copy(priv->netdev->dev_addr, mac);
211 		dev_info(priv->dev, "Read MAC address %pM from chip\n", mac);
212 	} else {
213 		eth_hw_addr_random(priv->netdev);
214 		dev_info(priv->dev, "Generated random MAC address %pM\n",
215 			 priv->netdev->dev_addr);
216 	}
217 }
218 
219 static int ftgmac100_set_mac_addr(struct net_device *dev, void *p)
220 {
221 	int ret;
222 
223 	ret = eth_prepare_mac_addr_change(dev, p);
224 	if (ret < 0)
225 		return ret;
226 
227 	eth_commit_mac_addr_change(dev, p);
228 	ftgmac100_write_mac_addr(netdev_priv(dev), dev->dev_addr);
229 
230 	return 0;
231 }
232 
233 static void ftgmac100_config_pause(struct ftgmac100 *priv)
234 {
235 	u32 fcr = FTGMAC100_FCR_PAUSE_TIME(16);
236 
237 	/* Throttle tx queue when receiving pause frames */
238 	if (priv->rx_pause)
239 		fcr |= FTGMAC100_FCR_FC_EN;
240 
241 	/* Enables sending pause frames when the RX queue is past a
242 	 * certain threshold.
243 	 */
244 	if (priv->tx_pause)
245 		fcr |= FTGMAC100_FCR_FCTHR_EN;
246 
247 	iowrite32(fcr, priv->base + FTGMAC100_OFFSET_FCR);
248 }
249 
250 static void ftgmac100_init_hw(struct ftgmac100 *priv)
251 {
252 	u32 reg, rfifo_sz, tfifo_sz;
253 
254 	/* Clear stale interrupts */
255 	reg = ioread32(priv->base + FTGMAC100_OFFSET_ISR);
256 	iowrite32(reg, priv->base + FTGMAC100_OFFSET_ISR);
257 
258 	/* Setup RX ring buffer base */
259 	iowrite32(priv->rxdes_dma, priv->base + FTGMAC100_OFFSET_RXR_BADR);
260 
261 	/* Setup TX ring buffer base */
262 	iowrite32(priv->txdes_dma, priv->base + FTGMAC100_OFFSET_NPTXR_BADR);
263 
264 	/* Configure RX buffer size */
265 	iowrite32(FTGMAC100_RBSR_SIZE(RX_BUF_SIZE),
266 		  priv->base + FTGMAC100_OFFSET_RBSR);
267 
268 	/* Set RX descriptor autopoll */
269 	iowrite32(FTGMAC100_APTC_RXPOLL_CNT(1),
270 		  priv->base + FTGMAC100_OFFSET_APTC);
271 
272 	/* Write MAC address */
273 	ftgmac100_write_mac_addr(priv, priv->netdev->dev_addr);
274 
275 	/* Write multicast filter */
276 	iowrite32(priv->maht0, priv->base + FTGMAC100_OFFSET_MAHT0);
277 	iowrite32(priv->maht1, priv->base + FTGMAC100_OFFSET_MAHT1);
278 
279 	/* Configure descriptor sizes and increase burst sizes according
280 	 * to values in Aspeed SDK. The FIFO arbitration is enabled and
281 	 * the thresholds set based on the recommended values in the
282 	 * AST2400 specification.
283 	 */
284 	iowrite32(FTGMAC100_DBLAC_RXDES_SIZE(2) |   /* 2*8 bytes RX descs */
285 		  FTGMAC100_DBLAC_TXDES_SIZE(2) |   /* 2*8 bytes TX descs */
286 		  FTGMAC100_DBLAC_RXBURST_SIZE(3) | /* 512 bytes max RX bursts */
287 		  FTGMAC100_DBLAC_TXBURST_SIZE(3) | /* 512 bytes max TX bursts */
288 		  FTGMAC100_DBLAC_RX_THR_EN |       /* Enable fifo threshold arb */
289 		  FTGMAC100_DBLAC_RXFIFO_HTHR(6) |  /* 6/8 of FIFO high threshold */
290 		  FTGMAC100_DBLAC_RXFIFO_LTHR(2),   /* 2/8 of FIFO low threshold */
291 		  priv->base + FTGMAC100_OFFSET_DBLAC);
292 
293 	/* Interrupt mitigation configured for 1 interrupt/packet. HW interrupt
294 	 * mitigation doesn't seem to provide any benefit with NAPI so leave
295 	 * it at that.
296 	 */
297 	iowrite32(FTGMAC100_ITC_RXINT_THR(1) |
298 		  FTGMAC100_ITC_TXINT_THR(1),
299 		  priv->base + FTGMAC100_OFFSET_ITC);
300 
301 	/* Configure FIFO sizes in the TPAFCR register */
302 	reg = ioread32(priv->base + FTGMAC100_OFFSET_FEAR);
303 	rfifo_sz = reg & 0x00000007;
304 	tfifo_sz = (reg >> 3) & 0x00000007;
305 	reg = ioread32(priv->base + FTGMAC100_OFFSET_TPAFCR);
306 	reg &= ~0x3f000000;
307 	reg |= (tfifo_sz << 27);
308 	reg |= (rfifo_sz << 24);
309 	iowrite32(reg, priv->base + FTGMAC100_OFFSET_TPAFCR);
310 }
311 
312 static void ftgmac100_start_hw(struct ftgmac100 *priv)
313 {
314 	u32 maccr = ioread32(priv->base + FTGMAC100_OFFSET_MACCR);
315 
316 	/* Keep the original GMAC and FAST bits */
317 	maccr &= (FTGMAC100_MACCR_FAST_MODE | FTGMAC100_MACCR_GIGA_MODE);
318 
319 	/* Add all the main enable bits */
320 	maccr |= FTGMAC100_MACCR_TXDMA_EN	|
321 		 FTGMAC100_MACCR_RXDMA_EN	|
322 		 FTGMAC100_MACCR_TXMAC_EN	|
323 		 FTGMAC100_MACCR_RXMAC_EN	|
324 		 FTGMAC100_MACCR_CRC_APD	|
325 		 FTGMAC100_MACCR_PHY_LINK_LEVEL	|
326 		 FTGMAC100_MACCR_RX_RUNT	|
327 		 FTGMAC100_MACCR_RX_BROADPKT;
328 
329 	/* Add other bits as needed */
330 	if (priv->cur_duplex == DUPLEX_FULL)
331 		maccr |= FTGMAC100_MACCR_FULLDUP;
332 	if (priv->netdev->flags & IFF_PROMISC)
333 		maccr |= FTGMAC100_MACCR_RX_ALL;
334 	if (priv->netdev->flags & IFF_ALLMULTI)
335 		maccr |= FTGMAC100_MACCR_RX_MULTIPKT;
336 	else if (netdev_mc_count(priv->netdev))
337 		maccr |= FTGMAC100_MACCR_HT_MULTI_EN;
338 
339 	/* Vlan filtering enabled */
340 	if (priv->netdev->features & NETIF_F_HW_VLAN_CTAG_RX)
341 		maccr |= FTGMAC100_MACCR_RM_VLAN;
342 
343 	/* Hit the HW */
344 	iowrite32(maccr, priv->base + FTGMAC100_OFFSET_MACCR);
345 }
346 
347 static void ftgmac100_stop_hw(struct ftgmac100 *priv)
348 {
349 	iowrite32(0, priv->base + FTGMAC100_OFFSET_MACCR);
350 }
351 
352 static void ftgmac100_calc_mc_hash(struct ftgmac100 *priv)
353 {
354 	struct netdev_hw_addr *ha;
355 
356 	priv->maht1 = 0;
357 	priv->maht0 = 0;
358 	netdev_for_each_mc_addr(ha, priv->netdev) {
359 		u32 crc_val = ether_crc_le(ETH_ALEN, ha->addr);
360 
361 		crc_val = (~(crc_val >> 2)) & 0x3f;
362 		if (crc_val >= 32)
363 			priv->maht1 |= 1ul << (crc_val - 32);
364 		else
365 			priv->maht0 |= 1ul << (crc_val);
366 	}
367 }
368 
369 static void ftgmac100_set_rx_mode(struct net_device *netdev)
370 {
371 	struct ftgmac100 *priv = netdev_priv(netdev);
372 
373 	/* Setup the hash filter */
374 	ftgmac100_calc_mc_hash(priv);
375 
376 	/* Interface down ? that's all there is to do */
377 	if (!netif_running(netdev))
378 		return;
379 
380 	/* Update the HW */
381 	iowrite32(priv->maht0, priv->base + FTGMAC100_OFFSET_MAHT0);
382 	iowrite32(priv->maht1, priv->base + FTGMAC100_OFFSET_MAHT1);
383 
384 	/* Reconfigure MACCR */
385 	ftgmac100_start_hw(priv);
386 }
387 
388 static int ftgmac100_alloc_rx_buf(struct ftgmac100 *priv, unsigned int entry,
389 				  struct ftgmac100_rxdes *rxdes, gfp_t gfp)
390 {
391 	struct net_device *netdev = priv->netdev;
392 	struct sk_buff *skb;
393 	dma_addr_t map;
394 	int err;
395 
396 	skb = netdev_alloc_skb_ip_align(netdev, RX_BUF_SIZE);
397 	if (unlikely(!skb)) {
398 		if (net_ratelimit())
399 			netdev_warn(netdev, "failed to allocate rx skb\n");
400 		err = -ENOMEM;
401 		map = priv->rx_scratch_dma;
402 	} else {
403 		map = dma_map_single(priv->dev, skb->data, RX_BUF_SIZE,
404 				     DMA_FROM_DEVICE);
405 		if (unlikely(dma_mapping_error(priv->dev, map))) {
406 			if (net_ratelimit())
407 				netdev_err(netdev, "failed to map rx page\n");
408 			dev_kfree_skb_any(skb);
409 			map = priv->rx_scratch_dma;
410 			skb = NULL;
411 			err = -ENOMEM;
412 		}
413 	}
414 
415 	/* Store skb */
416 	priv->rx_skbs[entry] = skb;
417 
418 	/* Store DMA address into RX desc */
419 	rxdes->rxdes3 = cpu_to_le32(map);
420 
421 	/* Ensure the above is ordered vs clearing the OWN bit */
422 	dma_wmb();
423 
424 	/* Clean status (which resets own bit) */
425 	if (entry == (priv->rx_q_entries - 1))
426 		rxdes->rxdes0 = cpu_to_le32(priv->rxdes0_edorr_mask);
427 	else
428 		rxdes->rxdes0 = 0;
429 
430 	return 0;
431 }
432 
433 static unsigned int ftgmac100_next_rx_pointer(struct ftgmac100 *priv,
434 					      unsigned int pointer)
435 {
436 	return (pointer + 1) & (priv->rx_q_entries - 1);
437 }
438 
439 static void ftgmac100_rx_packet_error(struct ftgmac100 *priv, u32 status)
440 {
441 	struct net_device *netdev = priv->netdev;
442 
443 	if (status & FTGMAC100_RXDES0_RX_ERR)
444 		netdev->stats.rx_errors++;
445 
446 	if (status & FTGMAC100_RXDES0_CRC_ERR)
447 		netdev->stats.rx_crc_errors++;
448 
449 	if (status & (FTGMAC100_RXDES0_FTL |
450 		      FTGMAC100_RXDES0_RUNT |
451 		      FTGMAC100_RXDES0_RX_ODD_NB))
452 		netdev->stats.rx_length_errors++;
453 }
454 
455 static bool ftgmac100_rx_packet(struct ftgmac100 *priv, int *processed)
456 {
457 	struct net_device *netdev = priv->netdev;
458 	struct ftgmac100_rxdes *rxdes;
459 	struct sk_buff *skb;
460 	unsigned int pointer, size;
461 	u32 status, csum_vlan;
462 	dma_addr_t map;
463 
464 	/* Grab next RX descriptor */
465 	pointer = priv->rx_pointer;
466 	rxdes = &priv->rxdes[pointer];
467 
468 	/* Grab descriptor status */
469 	status = le32_to_cpu(rxdes->rxdes0);
470 
471 	/* Do we have a packet ? */
472 	if (!(status & FTGMAC100_RXDES0_RXPKT_RDY))
473 		return false;
474 
475 	/* Order subsequent reads with the test for the ready bit */
476 	dma_rmb();
477 
478 	/* We don't cope with fragmented RX packets */
479 	if (unlikely(!(status & FTGMAC100_RXDES0_FRS) ||
480 		     !(status & FTGMAC100_RXDES0_LRS)))
481 		goto drop;
482 
483 	/* Grab received size and csum vlan field in the descriptor */
484 	size = status & FTGMAC100_RXDES0_VDBC;
485 	csum_vlan = le32_to_cpu(rxdes->rxdes1);
486 
487 	/* Any error (other than csum offload) flagged ? */
488 	if (unlikely(status & RXDES0_ANY_ERROR)) {
489 		/* Correct for incorrect flagging of runt packets
490 		 * with vlan tags... Just accept a runt packet that
491 		 * has been flagged as vlan and whose size is at
492 		 * least 60 bytes.
493 		 */
494 		if ((status & FTGMAC100_RXDES0_RUNT) &&
495 		    (csum_vlan & FTGMAC100_RXDES1_VLANTAG_AVAIL) &&
496 		    (size >= 60))
497 			status &= ~FTGMAC100_RXDES0_RUNT;
498 
499 		/* Any error still in there ? */
500 		if (status & RXDES0_ANY_ERROR) {
501 			ftgmac100_rx_packet_error(priv, status);
502 			goto drop;
503 		}
504 	}
505 
506 	/* If the packet had no skb (failed to allocate earlier)
507 	 * then try to allocate one and skip
508 	 */
509 	skb = priv->rx_skbs[pointer];
510 	if (!unlikely(skb)) {
511 		ftgmac100_alloc_rx_buf(priv, pointer, rxdes, GFP_ATOMIC);
512 		goto drop;
513 	}
514 
515 	if (unlikely(status & FTGMAC100_RXDES0_MULTICAST))
516 		netdev->stats.multicast++;
517 
518 	/* If the HW found checksum errors, bounce it to software.
519 	 *
520 	 * If we didn't, we need to see if the packet was recognized
521 	 * by HW as one of the supported checksummed protocols before
522 	 * we accept the HW test results.
523 	 */
524 	if (netdev->features & NETIF_F_RXCSUM) {
525 		u32 err_bits = FTGMAC100_RXDES1_TCP_CHKSUM_ERR |
526 			FTGMAC100_RXDES1_UDP_CHKSUM_ERR |
527 			FTGMAC100_RXDES1_IP_CHKSUM_ERR;
528 		if ((csum_vlan & err_bits) ||
529 		    !(csum_vlan & FTGMAC100_RXDES1_PROT_MASK))
530 			skb->ip_summed = CHECKSUM_NONE;
531 		else
532 			skb->ip_summed = CHECKSUM_UNNECESSARY;
533 	}
534 
535 	/* Transfer received size to skb */
536 	skb_put(skb, size);
537 
538 	/* Extract vlan tag */
539 	if ((netdev->features & NETIF_F_HW_VLAN_CTAG_RX) &&
540 	    (csum_vlan & FTGMAC100_RXDES1_VLANTAG_AVAIL))
541 		__vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q),
542 				       csum_vlan & 0xffff);
543 
544 	/* Tear down DMA mapping, do necessary cache management */
545 	map = le32_to_cpu(rxdes->rxdes3);
546 
547 #if defined(CONFIG_ARM) && !defined(CONFIG_ARM_DMA_USE_IOMMU)
548 	/* When we don't have an iommu, we can save cycles by not
549 	 * invalidating the cache for the part of the packet that
550 	 * wasn't received.
551 	 */
552 	dma_unmap_single(priv->dev, map, size, DMA_FROM_DEVICE);
553 #else
554 	dma_unmap_single(priv->dev, map, RX_BUF_SIZE, DMA_FROM_DEVICE);
555 #endif
556 
557 
558 	/* Resplenish rx ring */
559 	ftgmac100_alloc_rx_buf(priv, pointer, rxdes, GFP_ATOMIC);
560 	priv->rx_pointer = ftgmac100_next_rx_pointer(priv, pointer);
561 
562 	skb->protocol = eth_type_trans(skb, netdev);
563 
564 	netdev->stats.rx_packets++;
565 	netdev->stats.rx_bytes += size;
566 
567 	/* push packet to protocol stack */
568 	if (skb->ip_summed == CHECKSUM_NONE)
569 		netif_receive_skb(skb);
570 	else
571 		napi_gro_receive(&priv->napi, skb);
572 
573 	(*processed)++;
574 	return true;
575 
576  drop:
577 	/* Clean rxdes0 (which resets own bit) */
578 	rxdes->rxdes0 = cpu_to_le32(status & priv->rxdes0_edorr_mask);
579 	priv->rx_pointer = ftgmac100_next_rx_pointer(priv, pointer);
580 	netdev->stats.rx_dropped++;
581 	return true;
582 }
583 
584 static u32 ftgmac100_base_tx_ctlstat(struct ftgmac100 *priv,
585 				     unsigned int index)
586 {
587 	if (index == (priv->tx_q_entries - 1))
588 		return priv->txdes0_edotr_mask;
589 	else
590 		return 0;
591 }
592 
593 static unsigned int ftgmac100_next_tx_pointer(struct ftgmac100 *priv,
594 					      unsigned int pointer)
595 {
596 	return (pointer + 1) & (priv->tx_q_entries - 1);
597 }
598 
599 static u32 ftgmac100_tx_buf_avail(struct ftgmac100 *priv)
600 {
601 	/* Returns the number of available slots in the TX queue
602 	 *
603 	 * This always leaves one free slot so we don't have to
604 	 * worry about empty vs. full, and this simplifies the
605 	 * test for ftgmac100_tx_buf_cleanable() below
606 	 */
607 	return (priv->tx_clean_pointer - priv->tx_pointer - 1) &
608 		(priv->tx_q_entries - 1);
609 }
610 
611 static bool ftgmac100_tx_buf_cleanable(struct ftgmac100 *priv)
612 {
613 	return priv->tx_pointer != priv->tx_clean_pointer;
614 }
615 
616 static void ftgmac100_free_tx_packet(struct ftgmac100 *priv,
617 				     unsigned int pointer,
618 				     struct sk_buff *skb,
619 				     struct ftgmac100_txdes *txdes,
620 				     u32 ctl_stat)
621 {
622 	dma_addr_t map = le32_to_cpu(txdes->txdes3);
623 	size_t len;
624 
625 	if (ctl_stat & FTGMAC100_TXDES0_FTS) {
626 		len = skb_headlen(skb);
627 		dma_unmap_single(priv->dev, map, len, DMA_TO_DEVICE);
628 	} else {
629 		len = FTGMAC100_TXDES0_TXBUF_SIZE(ctl_stat);
630 		dma_unmap_page(priv->dev, map, len, DMA_TO_DEVICE);
631 	}
632 
633 	/* Free SKB on last segment */
634 	if (ctl_stat & FTGMAC100_TXDES0_LTS)
635 		dev_kfree_skb(skb);
636 	priv->tx_skbs[pointer] = NULL;
637 }
638 
639 static bool ftgmac100_tx_complete_packet(struct ftgmac100 *priv)
640 {
641 	struct net_device *netdev = priv->netdev;
642 	struct ftgmac100_txdes *txdes;
643 	struct sk_buff *skb;
644 	unsigned int pointer;
645 	u32 ctl_stat;
646 
647 	pointer = priv->tx_clean_pointer;
648 	txdes = &priv->txdes[pointer];
649 
650 	ctl_stat = le32_to_cpu(txdes->txdes0);
651 	if (ctl_stat & FTGMAC100_TXDES0_TXDMA_OWN)
652 		return false;
653 
654 	skb = priv->tx_skbs[pointer];
655 	netdev->stats.tx_packets++;
656 	netdev->stats.tx_bytes += skb->len;
657 	ftgmac100_free_tx_packet(priv, pointer, skb, txdes, ctl_stat);
658 	txdes->txdes0 = cpu_to_le32(ctl_stat & priv->txdes0_edotr_mask);
659 
660 	priv->tx_clean_pointer = ftgmac100_next_tx_pointer(priv, pointer);
661 
662 	return true;
663 }
664 
665 static void ftgmac100_tx_complete(struct ftgmac100 *priv)
666 {
667 	struct net_device *netdev = priv->netdev;
668 
669 	/* Process all completed packets */
670 	while (ftgmac100_tx_buf_cleanable(priv) &&
671 	       ftgmac100_tx_complete_packet(priv))
672 		;
673 
674 	/* Restart queue if needed */
675 	smp_mb();
676 	if (unlikely(netif_queue_stopped(netdev) &&
677 		     ftgmac100_tx_buf_avail(priv) >= TX_THRESHOLD)) {
678 		struct netdev_queue *txq;
679 
680 		txq = netdev_get_tx_queue(netdev, 0);
681 		__netif_tx_lock(txq, smp_processor_id());
682 		if (netif_queue_stopped(netdev) &&
683 		    ftgmac100_tx_buf_avail(priv) >= TX_THRESHOLD)
684 			netif_wake_queue(netdev);
685 		__netif_tx_unlock(txq);
686 	}
687 }
688 
689 static bool ftgmac100_prep_tx_csum(struct sk_buff *skb, u32 *csum_vlan)
690 {
691 	if (skb->protocol == cpu_to_be16(ETH_P_IP)) {
692 		u8 ip_proto = ip_hdr(skb)->protocol;
693 
694 		*csum_vlan |= FTGMAC100_TXDES1_IP_CHKSUM;
695 		switch(ip_proto) {
696 		case IPPROTO_TCP:
697 			*csum_vlan |= FTGMAC100_TXDES1_TCP_CHKSUM;
698 			return true;
699 		case IPPROTO_UDP:
700 			*csum_vlan |= FTGMAC100_TXDES1_UDP_CHKSUM;
701 			return true;
702 		case IPPROTO_IP:
703 			return true;
704 		}
705 	}
706 	return skb_checksum_help(skb) == 0;
707 }
708 
709 static int ftgmac100_hard_start_xmit(struct sk_buff *skb,
710 				     struct net_device *netdev)
711 {
712 	struct ftgmac100 *priv = netdev_priv(netdev);
713 	struct ftgmac100_txdes *txdes, *first;
714 	unsigned int pointer, nfrags, len, i, j;
715 	u32 f_ctl_stat, ctl_stat, csum_vlan;
716 	dma_addr_t map;
717 
718 	/* The HW doesn't pad small frames */
719 	if (eth_skb_pad(skb)) {
720 		netdev->stats.tx_dropped++;
721 		return NETDEV_TX_OK;
722 	}
723 
724 	/* Reject oversize packets */
725 	if (unlikely(skb->len > MAX_PKT_SIZE)) {
726 		if (net_ratelimit())
727 			netdev_dbg(netdev, "tx packet too big\n");
728 		goto drop;
729 	}
730 
731 	/* Do we have a limit on #fragments ? I yet have to get a reply
732 	 * from Aspeed. If there's one I haven't hit it.
733 	 */
734 	nfrags = skb_shinfo(skb)->nr_frags;
735 
736 	/* Get header len */
737 	len = skb_headlen(skb);
738 
739 	/* Map the packet head */
740 	map = dma_map_single(priv->dev, skb->data, len, DMA_TO_DEVICE);
741 	if (dma_mapping_error(priv->dev, map)) {
742 		if (net_ratelimit())
743 			netdev_err(netdev, "map tx packet head failed\n");
744 		goto drop;
745 	}
746 
747 	/* Grab the next free tx descriptor */
748 	pointer = priv->tx_pointer;
749 	txdes = first = &priv->txdes[pointer];
750 
751 	/* Setup it up with the packet head. Don't write the head to the
752 	 * ring just yet
753 	 */
754 	priv->tx_skbs[pointer] = skb;
755 	f_ctl_stat = ftgmac100_base_tx_ctlstat(priv, pointer);
756 	f_ctl_stat |= FTGMAC100_TXDES0_TXDMA_OWN;
757 	f_ctl_stat |= FTGMAC100_TXDES0_TXBUF_SIZE(len);
758 	f_ctl_stat |= FTGMAC100_TXDES0_FTS;
759 	if (nfrags == 0)
760 		f_ctl_stat |= FTGMAC100_TXDES0_LTS;
761 	txdes->txdes3 = cpu_to_le32(map);
762 
763 	/* Setup HW checksumming */
764 	csum_vlan = 0;
765 	if (skb->ip_summed == CHECKSUM_PARTIAL &&
766 	    !ftgmac100_prep_tx_csum(skb, &csum_vlan))
767 		goto drop;
768 
769 	/* Add VLAN tag */
770 	if (skb_vlan_tag_present(skb)) {
771 		csum_vlan |= FTGMAC100_TXDES1_INS_VLANTAG;
772 		csum_vlan |= skb_vlan_tag_get(skb) & 0xffff;
773 	}
774 
775 	txdes->txdes1 = cpu_to_le32(csum_vlan);
776 
777 	/* Next descriptor */
778 	pointer = ftgmac100_next_tx_pointer(priv, pointer);
779 
780 	/* Add the fragments */
781 	for (i = 0; i < nfrags; i++) {
782 		skb_frag_t *frag = &skb_shinfo(skb)->frags[i];
783 
784 		len = frag->size;
785 
786 		/* Map it */
787 		map = skb_frag_dma_map(priv->dev, frag, 0, len,
788 				       DMA_TO_DEVICE);
789 		if (dma_mapping_error(priv->dev, map))
790 			goto dma_err;
791 
792 		/* Setup descriptor */
793 		priv->tx_skbs[pointer] = skb;
794 		txdes = &priv->txdes[pointer];
795 		ctl_stat = ftgmac100_base_tx_ctlstat(priv, pointer);
796 		ctl_stat |= FTGMAC100_TXDES0_TXDMA_OWN;
797 		ctl_stat |= FTGMAC100_TXDES0_TXBUF_SIZE(len);
798 		if (i == (nfrags - 1))
799 			ctl_stat |= FTGMAC100_TXDES0_LTS;
800 		txdes->txdes0 = cpu_to_le32(ctl_stat);
801 		txdes->txdes1 = 0;
802 		txdes->txdes3 = cpu_to_le32(map);
803 
804 		/* Next one */
805 		pointer = ftgmac100_next_tx_pointer(priv, pointer);
806 	}
807 
808 	/* Order the previous packet and descriptor udpates
809 	 * before setting the OWN bit on the first descriptor.
810 	 */
811 	dma_wmb();
812 	first->txdes0 = cpu_to_le32(f_ctl_stat);
813 
814 	/* Update next TX pointer */
815 	priv->tx_pointer = pointer;
816 
817 	/* If there isn't enough room for all the fragments of a new packet
818 	 * in the TX ring, stop the queue. The sequence below is race free
819 	 * vs. a concurrent restart in ftgmac100_poll()
820 	 */
821 	if (unlikely(ftgmac100_tx_buf_avail(priv) < TX_THRESHOLD)) {
822 		netif_stop_queue(netdev);
823 		/* Order the queue stop with the test below */
824 		smp_mb();
825 		if (ftgmac100_tx_buf_avail(priv) >= TX_THRESHOLD)
826 			netif_wake_queue(netdev);
827 	}
828 
829 	/* Poke transmitter to read the updated TX descriptors */
830 	iowrite32(1, priv->base + FTGMAC100_OFFSET_NPTXPD);
831 
832 	return NETDEV_TX_OK;
833 
834  dma_err:
835 	if (net_ratelimit())
836 		netdev_err(netdev, "map tx fragment failed\n");
837 
838 	/* Free head */
839 	pointer = priv->tx_pointer;
840 	ftgmac100_free_tx_packet(priv, pointer, skb, first, f_ctl_stat);
841 	first->txdes0 = cpu_to_le32(f_ctl_stat & priv->txdes0_edotr_mask);
842 
843 	/* Then all fragments */
844 	for (j = 0; j < i; j++) {
845 		pointer = ftgmac100_next_tx_pointer(priv, pointer);
846 		txdes = &priv->txdes[pointer];
847 		ctl_stat = le32_to_cpu(txdes->txdes0);
848 		ftgmac100_free_tx_packet(priv, pointer, skb, txdes, ctl_stat);
849 		txdes->txdes0 = cpu_to_le32(ctl_stat & priv->txdes0_edotr_mask);
850 	}
851 
852 	/* This cannot be reached if we successfully mapped the
853 	 * last fragment, so we know ftgmac100_free_tx_packet()
854 	 * hasn't freed the skb yet.
855 	 */
856  drop:
857 	/* Drop the packet */
858 	dev_kfree_skb_any(skb);
859 	netdev->stats.tx_dropped++;
860 
861 	return NETDEV_TX_OK;
862 }
863 
864 static void ftgmac100_free_buffers(struct ftgmac100 *priv)
865 {
866 	int i;
867 
868 	/* Free all RX buffers */
869 	for (i = 0; i < priv->rx_q_entries; i++) {
870 		struct ftgmac100_rxdes *rxdes = &priv->rxdes[i];
871 		struct sk_buff *skb = priv->rx_skbs[i];
872 		dma_addr_t map = le32_to_cpu(rxdes->rxdes3);
873 
874 		if (!skb)
875 			continue;
876 
877 		priv->rx_skbs[i] = NULL;
878 		dma_unmap_single(priv->dev, map, RX_BUF_SIZE, DMA_FROM_DEVICE);
879 		dev_kfree_skb_any(skb);
880 	}
881 
882 	/* Free all TX buffers */
883 	for (i = 0; i < priv->tx_q_entries; i++) {
884 		struct ftgmac100_txdes *txdes = &priv->txdes[i];
885 		struct sk_buff *skb = priv->tx_skbs[i];
886 
887 		if (!skb)
888 			continue;
889 		ftgmac100_free_tx_packet(priv, i, skb, txdes,
890 					 le32_to_cpu(txdes->txdes0));
891 	}
892 }
893 
894 static void ftgmac100_free_rings(struct ftgmac100 *priv)
895 {
896 	/* Free skb arrays */
897 	kfree(priv->rx_skbs);
898 	kfree(priv->tx_skbs);
899 
900 	/* Free descriptors */
901 	if (priv->rxdes)
902 		dma_free_coherent(priv->dev, MAX_RX_QUEUE_ENTRIES *
903 				  sizeof(struct ftgmac100_rxdes),
904 				  priv->rxdes, priv->rxdes_dma);
905 	priv->rxdes = NULL;
906 
907 	if (priv->txdes)
908 		dma_free_coherent(priv->dev, MAX_TX_QUEUE_ENTRIES *
909 				  sizeof(struct ftgmac100_txdes),
910 				  priv->txdes, priv->txdes_dma);
911 	priv->txdes = NULL;
912 
913 	/* Free scratch packet buffer */
914 	if (priv->rx_scratch)
915 		dma_free_coherent(priv->dev, RX_BUF_SIZE,
916 				  priv->rx_scratch, priv->rx_scratch_dma);
917 }
918 
919 static int ftgmac100_alloc_rings(struct ftgmac100 *priv)
920 {
921 	/* Allocate skb arrays */
922 	priv->rx_skbs = kcalloc(MAX_RX_QUEUE_ENTRIES, sizeof(void *),
923 				GFP_KERNEL);
924 	if (!priv->rx_skbs)
925 		return -ENOMEM;
926 	priv->tx_skbs = kcalloc(MAX_TX_QUEUE_ENTRIES, sizeof(void *),
927 				GFP_KERNEL);
928 	if (!priv->tx_skbs)
929 		return -ENOMEM;
930 
931 	/* Allocate descriptors */
932 	priv->rxdes = dma_zalloc_coherent(priv->dev,
933 					  MAX_RX_QUEUE_ENTRIES *
934 					  sizeof(struct ftgmac100_rxdes),
935 					  &priv->rxdes_dma, GFP_KERNEL);
936 	if (!priv->rxdes)
937 		return -ENOMEM;
938 	priv->txdes = dma_zalloc_coherent(priv->dev,
939 					  MAX_TX_QUEUE_ENTRIES *
940 					  sizeof(struct ftgmac100_txdes),
941 					  &priv->txdes_dma, GFP_KERNEL);
942 	if (!priv->txdes)
943 		return -ENOMEM;
944 
945 	/* Allocate scratch packet buffer */
946 	priv->rx_scratch = dma_alloc_coherent(priv->dev,
947 					      RX_BUF_SIZE,
948 					      &priv->rx_scratch_dma,
949 					      GFP_KERNEL);
950 	if (!priv->rx_scratch)
951 		return -ENOMEM;
952 
953 	return 0;
954 }
955 
956 static void ftgmac100_init_rings(struct ftgmac100 *priv)
957 {
958 	struct ftgmac100_rxdes *rxdes = NULL;
959 	struct ftgmac100_txdes *txdes = NULL;
960 	int i;
961 
962 	/* Update entries counts */
963 	priv->rx_q_entries = priv->new_rx_q_entries;
964 	priv->tx_q_entries = priv->new_tx_q_entries;
965 
966 	if (WARN_ON(priv->rx_q_entries < MIN_RX_QUEUE_ENTRIES))
967 		return;
968 
969 	/* Initialize RX ring */
970 	for (i = 0; i < priv->rx_q_entries; i++) {
971 		rxdes = &priv->rxdes[i];
972 		rxdes->rxdes0 = 0;
973 		rxdes->rxdes3 = cpu_to_le32(priv->rx_scratch_dma);
974 	}
975 	/* Mark the end of the ring */
976 	rxdes->rxdes0 |= cpu_to_le32(priv->rxdes0_edorr_mask);
977 
978 	if (WARN_ON(priv->tx_q_entries < MIN_RX_QUEUE_ENTRIES))
979 		return;
980 
981 	/* Initialize TX ring */
982 	for (i = 0; i < priv->tx_q_entries; i++) {
983 		txdes = &priv->txdes[i];
984 		txdes->txdes0 = 0;
985 	}
986 	txdes->txdes0 |= cpu_to_le32(priv->txdes0_edotr_mask);
987 }
988 
989 static int ftgmac100_alloc_rx_buffers(struct ftgmac100 *priv)
990 {
991 	int i;
992 
993 	for (i = 0; i < priv->rx_q_entries; i++) {
994 		struct ftgmac100_rxdes *rxdes = &priv->rxdes[i];
995 
996 		if (ftgmac100_alloc_rx_buf(priv, i, rxdes, GFP_KERNEL))
997 			return -ENOMEM;
998 	}
999 	return 0;
1000 }
1001 
1002 static void ftgmac100_adjust_link(struct net_device *netdev)
1003 {
1004 	struct ftgmac100 *priv = netdev_priv(netdev);
1005 	struct phy_device *phydev = netdev->phydev;
1006 	bool tx_pause, rx_pause;
1007 	int new_speed;
1008 
1009 	/* We store "no link" as speed 0 */
1010 	if (!phydev->link)
1011 		new_speed = 0;
1012 	else
1013 		new_speed = phydev->speed;
1014 
1015 	/* Grab pause settings from PHY if configured to do so */
1016 	if (priv->aneg_pause) {
1017 		rx_pause = tx_pause = phydev->pause;
1018 		if (phydev->asym_pause)
1019 			tx_pause = !rx_pause;
1020 	} else {
1021 		rx_pause = priv->rx_pause;
1022 		tx_pause = priv->tx_pause;
1023 	}
1024 
1025 	/* Link hasn't changed, do nothing */
1026 	if (phydev->speed == priv->cur_speed &&
1027 	    phydev->duplex == priv->cur_duplex &&
1028 	    rx_pause == priv->rx_pause &&
1029 	    tx_pause == priv->tx_pause)
1030 		return;
1031 
1032 	/* Print status if we have a link or we had one and just lost it,
1033 	 * don't print otherwise.
1034 	 */
1035 	if (new_speed || priv->cur_speed)
1036 		phy_print_status(phydev);
1037 
1038 	priv->cur_speed = new_speed;
1039 	priv->cur_duplex = phydev->duplex;
1040 	priv->rx_pause = rx_pause;
1041 	priv->tx_pause = tx_pause;
1042 
1043 	/* Link is down, do nothing else */
1044 	if (!new_speed)
1045 		return;
1046 
1047 	/* Disable all interrupts */
1048 	iowrite32(0, priv->base + FTGMAC100_OFFSET_IER);
1049 
1050 	/* Reset the adapter asynchronously */
1051 	schedule_work(&priv->reset_task);
1052 }
1053 
1054 static int ftgmac100_mii_probe(struct ftgmac100 *priv)
1055 {
1056 	struct net_device *netdev = priv->netdev;
1057 	struct phy_device *phydev;
1058 
1059 	phydev = phy_find_first(priv->mii_bus);
1060 	if (!phydev) {
1061 		netdev_info(netdev, "%s: no PHY found\n", netdev->name);
1062 		return -ENODEV;
1063 	}
1064 
1065 	phydev = phy_connect(netdev, phydev_name(phydev),
1066 			     &ftgmac100_adjust_link, PHY_INTERFACE_MODE_GMII);
1067 
1068 	if (IS_ERR(phydev)) {
1069 		netdev_err(netdev, "%s: Could not attach to PHY\n", netdev->name);
1070 		return PTR_ERR(phydev);
1071 	}
1072 
1073 	/* Indicate that we support PAUSE frames (see comment in
1074 	 * Documentation/networking/phy.txt)
1075 	 */
1076 	phydev->supported |= SUPPORTED_Pause | SUPPORTED_Asym_Pause;
1077 	phydev->advertising = phydev->supported;
1078 
1079 	return 0;
1080 }
1081 
1082 static int ftgmac100_mdiobus_read(struct mii_bus *bus, int phy_addr, int regnum)
1083 {
1084 	struct net_device *netdev = bus->priv;
1085 	struct ftgmac100 *priv = netdev_priv(netdev);
1086 	unsigned int phycr;
1087 	int i;
1088 
1089 	phycr = ioread32(priv->base + FTGMAC100_OFFSET_PHYCR);
1090 
1091 	/* preserve MDC cycle threshold */
1092 	phycr &= FTGMAC100_PHYCR_MDC_CYCTHR_MASK;
1093 
1094 	phycr |= FTGMAC100_PHYCR_PHYAD(phy_addr) |
1095 		 FTGMAC100_PHYCR_REGAD(regnum) |
1096 		 FTGMAC100_PHYCR_MIIRD;
1097 
1098 	iowrite32(phycr, priv->base + FTGMAC100_OFFSET_PHYCR);
1099 
1100 	for (i = 0; i < 10; i++) {
1101 		phycr = ioread32(priv->base + FTGMAC100_OFFSET_PHYCR);
1102 
1103 		if ((phycr & FTGMAC100_PHYCR_MIIRD) == 0) {
1104 			int data;
1105 
1106 			data = ioread32(priv->base + FTGMAC100_OFFSET_PHYDATA);
1107 			return FTGMAC100_PHYDATA_MIIRDATA(data);
1108 		}
1109 
1110 		udelay(100);
1111 	}
1112 
1113 	netdev_err(netdev, "mdio read timed out\n");
1114 	return -EIO;
1115 }
1116 
1117 static int ftgmac100_mdiobus_write(struct mii_bus *bus, int phy_addr,
1118 				   int regnum, u16 value)
1119 {
1120 	struct net_device *netdev = bus->priv;
1121 	struct ftgmac100 *priv = netdev_priv(netdev);
1122 	unsigned int phycr;
1123 	int data;
1124 	int i;
1125 
1126 	phycr = ioread32(priv->base + FTGMAC100_OFFSET_PHYCR);
1127 
1128 	/* preserve MDC cycle threshold */
1129 	phycr &= FTGMAC100_PHYCR_MDC_CYCTHR_MASK;
1130 
1131 	phycr |= FTGMAC100_PHYCR_PHYAD(phy_addr) |
1132 		 FTGMAC100_PHYCR_REGAD(regnum) |
1133 		 FTGMAC100_PHYCR_MIIWR;
1134 
1135 	data = FTGMAC100_PHYDATA_MIIWDATA(value);
1136 
1137 	iowrite32(data, priv->base + FTGMAC100_OFFSET_PHYDATA);
1138 	iowrite32(phycr, priv->base + FTGMAC100_OFFSET_PHYCR);
1139 
1140 	for (i = 0; i < 10; i++) {
1141 		phycr = ioread32(priv->base + FTGMAC100_OFFSET_PHYCR);
1142 
1143 		if ((phycr & FTGMAC100_PHYCR_MIIWR) == 0)
1144 			return 0;
1145 
1146 		udelay(100);
1147 	}
1148 
1149 	netdev_err(netdev, "mdio write timed out\n");
1150 	return -EIO;
1151 }
1152 
1153 static void ftgmac100_get_drvinfo(struct net_device *netdev,
1154 				  struct ethtool_drvinfo *info)
1155 {
1156 	strlcpy(info->driver, DRV_NAME, sizeof(info->driver));
1157 	strlcpy(info->version, DRV_VERSION, sizeof(info->version));
1158 	strlcpy(info->bus_info, dev_name(&netdev->dev), sizeof(info->bus_info));
1159 }
1160 
1161 static void ftgmac100_get_ringparam(struct net_device *netdev,
1162 				    struct ethtool_ringparam *ering)
1163 {
1164 	struct ftgmac100 *priv = netdev_priv(netdev);
1165 
1166 	memset(ering, 0, sizeof(*ering));
1167 	ering->rx_max_pending = MAX_RX_QUEUE_ENTRIES;
1168 	ering->tx_max_pending = MAX_TX_QUEUE_ENTRIES;
1169 	ering->rx_pending = priv->rx_q_entries;
1170 	ering->tx_pending = priv->tx_q_entries;
1171 }
1172 
1173 static int ftgmac100_set_ringparam(struct net_device *netdev,
1174 				   struct ethtool_ringparam *ering)
1175 {
1176 	struct ftgmac100 *priv = netdev_priv(netdev);
1177 
1178 	if (ering->rx_pending > MAX_RX_QUEUE_ENTRIES ||
1179 	    ering->tx_pending > MAX_TX_QUEUE_ENTRIES ||
1180 	    ering->rx_pending < MIN_RX_QUEUE_ENTRIES ||
1181 	    ering->tx_pending < MIN_TX_QUEUE_ENTRIES ||
1182 	    !is_power_of_2(ering->rx_pending) ||
1183 	    !is_power_of_2(ering->tx_pending))
1184 		return -EINVAL;
1185 
1186 	priv->new_rx_q_entries = ering->rx_pending;
1187 	priv->new_tx_q_entries = ering->tx_pending;
1188 	if (netif_running(netdev))
1189 		schedule_work(&priv->reset_task);
1190 
1191 	return 0;
1192 }
1193 
1194 static void ftgmac100_get_pauseparam(struct net_device *netdev,
1195 				     struct ethtool_pauseparam *pause)
1196 {
1197 	struct ftgmac100 *priv = netdev_priv(netdev);
1198 
1199 	pause->autoneg = priv->aneg_pause;
1200 	pause->tx_pause = priv->tx_pause;
1201 	pause->rx_pause = priv->rx_pause;
1202 }
1203 
1204 static int ftgmac100_set_pauseparam(struct net_device *netdev,
1205 				    struct ethtool_pauseparam *pause)
1206 {
1207 	struct ftgmac100 *priv = netdev_priv(netdev);
1208 	struct phy_device *phydev = netdev->phydev;
1209 
1210 	priv->aneg_pause = pause->autoneg;
1211 	priv->tx_pause = pause->tx_pause;
1212 	priv->rx_pause = pause->rx_pause;
1213 
1214 	if (phydev) {
1215 		phydev->advertising &= ~ADVERTISED_Pause;
1216 		phydev->advertising &= ~ADVERTISED_Asym_Pause;
1217 
1218 		if (pause->rx_pause) {
1219 			phydev->advertising |= ADVERTISED_Pause;
1220 			phydev->advertising |= ADVERTISED_Asym_Pause;
1221 		}
1222 
1223 		if (pause->tx_pause)
1224 			phydev->advertising ^= ADVERTISED_Asym_Pause;
1225 	}
1226 	if (netif_running(netdev)) {
1227 		if (phydev && priv->aneg_pause)
1228 			phy_start_aneg(phydev);
1229 		else
1230 			ftgmac100_config_pause(priv);
1231 	}
1232 
1233 	return 0;
1234 }
1235 
1236 static const struct ethtool_ops ftgmac100_ethtool_ops = {
1237 	.get_drvinfo		= ftgmac100_get_drvinfo,
1238 	.get_link		= ethtool_op_get_link,
1239 	.get_link_ksettings	= phy_ethtool_get_link_ksettings,
1240 	.set_link_ksettings	= phy_ethtool_set_link_ksettings,
1241 	.nway_reset		= phy_ethtool_nway_reset,
1242 	.get_ringparam		= ftgmac100_get_ringparam,
1243 	.set_ringparam		= ftgmac100_set_ringparam,
1244 	.get_pauseparam		= ftgmac100_get_pauseparam,
1245 	.set_pauseparam		= ftgmac100_set_pauseparam,
1246 };
1247 
1248 static irqreturn_t ftgmac100_interrupt(int irq, void *dev_id)
1249 {
1250 	struct net_device *netdev = dev_id;
1251 	struct ftgmac100 *priv = netdev_priv(netdev);
1252 	unsigned int status, new_mask = FTGMAC100_INT_BAD;
1253 
1254 	/* Fetch and clear interrupt bits, process abnormal ones */
1255 	status = ioread32(priv->base + FTGMAC100_OFFSET_ISR);
1256 	iowrite32(status, priv->base + FTGMAC100_OFFSET_ISR);
1257 	if (unlikely(status & FTGMAC100_INT_BAD)) {
1258 
1259 		/* RX buffer unavailable */
1260 		if (status & FTGMAC100_INT_NO_RXBUF)
1261 			netdev->stats.rx_over_errors++;
1262 
1263 		/* received packet lost due to RX FIFO full */
1264 		if (status & FTGMAC100_INT_RPKT_LOST)
1265 			netdev->stats.rx_fifo_errors++;
1266 
1267 		/* sent packet lost due to excessive TX collision */
1268 		if (status & FTGMAC100_INT_XPKT_LOST)
1269 			netdev->stats.tx_fifo_errors++;
1270 
1271 		/* AHB error -> Reset the chip */
1272 		if (status & FTGMAC100_INT_AHB_ERR) {
1273 			if (net_ratelimit())
1274 				netdev_warn(netdev,
1275 					   "AHB bus error ! Resetting chip.\n");
1276 			iowrite32(0, priv->base + FTGMAC100_OFFSET_IER);
1277 			schedule_work(&priv->reset_task);
1278 			return IRQ_HANDLED;
1279 		}
1280 
1281 		/* We may need to restart the MAC after such errors, delay
1282 		 * this until after we have freed some Rx buffers though
1283 		 */
1284 		priv->need_mac_restart = true;
1285 
1286 		/* Disable those errors until we restart */
1287 		new_mask &= ~status;
1288 	}
1289 
1290 	/* Only enable "bad" interrupts while NAPI is on */
1291 	iowrite32(new_mask, priv->base + FTGMAC100_OFFSET_IER);
1292 
1293 	/* Schedule NAPI bh */
1294 	napi_schedule_irqoff(&priv->napi);
1295 
1296 	return IRQ_HANDLED;
1297 }
1298 
1299 static bool ftgmac100_check_rx(struct ftgmac100 *priv)
1300 {
1301 	struct ftgmac100_rxdes *rxdes = &priv->rxdes[priv->rx_pointer];
1302 
1303 	/* Do we have a packet ? */
1304 	return !!(rxdes->rxdes0 & cpu_to_le32(FTGMAC100_RXDES0_RXPKT_RDY));
1305 }
1306 
1307 static int ftgmac100_poll(struct napi_struct *napi, int budget)
1308 {
1309 	struct ftgmac100 *priv = container_of(napi, struct ftgmac100, napi);
1310 	int work_done = 0;
1311 	bool more;
1312 
1313 	/* Handle TX completions */
1314 	if (ftgmac100_tx_buf_cleanable(priv))
1315 		ftgmac100_tx_complete(priv);
1316 
1317 	/* Handle RX packets */
1318 	do {
1319 		more = ftgmac100_rx_packet(priv, &work_done);
1320 	} while (more && work_done < budget);
1321 
1322 
1323 	/* The interrupt is telling us to kick the MAC back to life
1324 	 * after an RX overflow
1325 	 */
1326 	if (unlikely(priv->need_mac_restart)) {
1327 		ftgmac100_start_hw(priv);
1328 
1329 		/* Re-enable "bad" interrupts */
1330 		iowrite32(FTGMAC100_INT_BAD,
1331 			  priv->base + FTGMAC100_OFFSET_IER);
1332 	}
1333 
1334 	/* As long as we are waiting for transmit packets to be
1335 	 * completed we keep NAPI going
1336 	 */
1337 	if (ftgmac100_tx_buf_cleanable(priv))
1338 		work_done = budget;
1339 
1340 	if (work_done < budget) {
1341 		/* We are about to re-enable all interrupts. However
1342 		 * the HW has been latching RX/TX packet interrupts while
1343 		 * they were masked. So we clear them first, then we need
1344 		 * to re-check if there's something to process
1345 		 */
1346 		iowrite32(FTGMAC100_INT_RXTX,
1347 			  priv->base + FTGMAC100_OFFSET_ISR);
1348 		if (ftgmac100_check_rx(priv) ||
1349 		    ftgmac100_tx_buf_cleanable(priv))
1350 			return budget;
1351 
1352 		/* deschedule NAPI */
1353 		napi_complete(napi);
1354 
1355 		/* enable all interrupts */
1356 		iowrite32(FTGMAC100_INT_ALL,
1357 			  priv->base + FTGMAC100_OFFSET_IER);
1358 	}
1359 
1360 	return work_done;
1361 }
1362 
1363 static int ftgmac100_init_all(struct ftgmac100 *priv, bool ignore_alloc_err)
1364 {
1365 	int err = 0;
1366 
1367 	/* Re-init descriptors (adjust queue sizes) */
1368 	ftgmac100_init_rings(priv);
1369 
1370 	/* Realloc rx descriptors */
1371 	err = ftgmac100_alloc_rx_buffers(priv);
1372 	if (err && !ignore_alloc_err)
1373 		return err;
1374 
1375 	/* Reinit and restart HW */
1376 	ftgmac100_init_hw(priv);
1377 	ftgmac100_config_pause(priv);
1378 	ftgmac100_start_hw(priv);
1379 
1380 	/* Re-enable the device */
1381 	napi_enable(&priv->napi);
1382 	netif_start_queue(priv->netdev);
1383 
1384 	/* Enable all interrupts */
1385 	iowrite32(FTGMAC100_INT_ALL, priv->base + FTGMAC100_OFFSET_IER);
1386 
1387 	return err;
1388 }
1389 
1390 static void ftgmac100_reset_task(struct work_struct *work)
1391 {
1392 	struct ftgmac100 *priv = container_of(work, struct ftgmac100,
1393 					      reset_task);
1394 	struct net_device *netdev = priv->netdev;
1395 	int err;
1396 
1397 	netdev_dbg(netdev, "Resetting NIC...\n");
1398 
1399 	/* Lock the world */
1400 	rtnl_lock();
1401 	if (netdev->phydev)
1402 		mutex_lock(&netdev->phydev->lock);
1403 	if (priv->mii_bus)
1404 		mutex_lock(&priv->mii_bus->mdio_lock);
1405 
1406 
1407 	/* Check if the interface is still up */
1408 	if (!netif_running(netdev))
1409 		goto bail;
1410 
1411 	/* Stop the network stack */
1412 	netif_trans_update(netdev);
1413 	napi_disable(&priv->napi);
1414 	netif_tx_disable(netdev);
1415 
1416 	/* Stop and reset the MAC */
1417 	ftgmac100_stop_hw(priv);
1418 	err = ftgmac100_reset_and_config_mac(priv);
1419 	if (err) {
1420 		/* Not much we can do ... it might come back... */
1421 		netdev_err(netdev, "attempting to continue...\n");
1422 	}
1423 
1424 	/* Free all rx and tx buffers */
1425 	ftgmac100_free_buffers(priv);
1426 
1427 	/* Setup everything again and restart chip */
1428 	ftgmac100_init_all(priv, true);
1429 
1430 	netdev_dbg(netdev, "Reset done !\n");
1431  bail:
1432 	if (priv->mii_bus)
1433 		mutex_unlock(&priv->mii_bus->mdio_lock);
1434 	if (netdev->phydev)
1435 		mutex_unlock(&netdev->phydev->lock);
1436 	rtnl_unlock();
1437 }
1438 
1439 static int ftgmac100_open(struct net_device *netdev)
1440 {
1441 	struct ftgmac100 *priv = netdev_priv(netdev);
1442 	int err;
1443 
1444 	/* Allocate ring buffers  */
1445 	err = ftgmac100_alloc_rings(priv);
1446 	if (err) {
1447 		netdev_err(netdev, "Failed to allocate descriptors\n");
1448 		return err;
1449 	}
1450 
1451 	/* When using NC-SI we force the speed to 100Mbit/s full duplex,
1452 	 *
1453 	 * Otherwise we leave it set to 0 (no link), the link
1454 	 * message from the PHY layer will handle setting it up to
1455 	 * something else if needed.
1456 	 */
1457 	if (priv->use_ncsi) {
1458 		priv->cur_duplex = DUPLEX_FULL;
1459 		priv->cur_speed = SPEED_100;
1460 	} else {
1461 		priv->cur_duplex = 0;
1462 		priv->cur_speed = 0;
1463 	}
1464 
1465 	/* Reset the hardware */
1466 	err = ftgmac100_reset_and_config_mac(priv);
1467 	if (err)
1468 		goto err_hw;
1469 
1470 	/* Initialize NAPI */
1471 	netif_napi_add(netdev, &priv->napi, ftgmac100_poll, 64);
1472 
1473 	/* Grab our interrupt */
1474 	err = request_irq(netdev->irq, ftgmac100_interrupt, 0, netdev->name, netdev);
1475 	if (err) {
1476 		netdev_err(netdev, "failed to request irq %d\n", netdev->irq);
1477 		goto err_irq;
1478 	}
1479 
1480 	/* Start things up */
1481 	err = ftgmac100_init_all(priv, false);
1482 	if (err) {
1483 		netdev_err(netdev, "Failed to allocate packet buffers\n");
1484 		goto err_alloc;
1485 	}
1486 
1487 	if (netdev->phydev) {
1488 		/* If we have a PHY, start polling */
1489 		phy_start(netdev->phydev);
1490 	} else if (priv->use_ncsi) {
1491 		/* If using NC-SI, set our carrier on and start the stack */
1492 		netif_carrier_on(netdev);
1493 
1494 		/* Start the NCSI device */
1495 		err = ncsi_start_dev(priv->ndev);
1496 		if (err)
1497 			goto err_ncsi;
1498 	}
1499 
1500 	return 0;
1501 
1502  err_ncsi:
1503 	napi_disable(&priv->napi);
1504 	netif_stop_queue(netdev);
1505  err_alloc:
1506 	ftgmac100_free_buffers(priv);
1507 	free_irq(netdev->irq, netdev);
1508  err_irq:
1509 	netif_napi_del(&priv->napi);
1510  err_hw:
1511 	iowrite32(0, priv->base + FTGMAC100_OFFSET_IER);
1512 	ftgmac100_free_rings(priv);
1513 	return err;
1514 }
1515 
1516 static int ftgmac100_stop(struct net_device *netdev)
1517 {
1518 	struct ftgmac100 *priv = netdev_priv(netdev);
1519 
1520 	/* Note about the reset task: We are called with the rtnl lock
1521 	 * held, so we are synchronized against the core of the reset
1522 	 * task. We must not try to synchronously cancel it otherwise
1523 	 * we can deadlock. But since it will test for netif_running()
1524 	 * which has already been cleared by the net core, we don't
1525 	 * anything special to do.
1526 	 */
1527 
1528 	/* disable all interrupts */
1529 	iowrite32(0, priv->base + FTGMAC100_OFFSET_IER);
1530 
1531 	netif_stop_queue(netdev);
1532 	napi_disable(&priv->napi);
1533 	netif_napi_del(&priv->napi);
1534 	if (netdev->phydev)
1535 		phy_stop(netdev->phydev);
1536 	else if (priv->use_ncsi)
1537 		ncsi_stop_dev(priv->ndev);
1538 
1539 	ftgmac100_stop_hw(priv);
1540 	free_irq(netdev->irq, netdev);
1541 	ftgmac100_free_buffers(priv);
1542 	ftgmac100_free_rings(priv);
1543 
1544 	return 0;
1545 }
1546 
1547 /* optional */
1548 static int ftgmac100_do_ioctl(struct net_device *netdev, struct ifreq *ifr, int cmd)
1549 {
1550 	if (!netdev->phydev)
1551 		return -ENXIO;
1552 
1553 	return phy_mii_ioctl(netdev->phydev, ifr, cmd);
1554 }
1555 
1556 static void ftgmac100_tx_timeout(struct net_device *netdev)
1557 {
1558 	struct ftgmac100 *priv = netdev_priv(netdev);
1559 
1560 	/* Disable all interrupts */
1561 	iowrite32(0, priv->base + FTGMAC100_OFFSET_IER);
1562 
1563 	/* Do the reset outside of interrupt context */
1564 	schedule_work(&priv->reset_task);
1565 }
1566 
1567 static int ftgmac100_set_features(struct net_device *netdev,
1568 				  netdev_features_t features)
1569 {
1570 	struct ftgmac100 *priv = netdev_priv(netdev);
1571 	netdev_features_t changed = netdev->features ^ features;
1572 
1573 	if (!netif_running(netdev))
1574 		return 0;
1575 
1576 	/* Update the vlan filtering bit */
1577 	if (changed & NETIF_F_HW_VLAN_CTAG_RX) {
1578 		u32 maccr;
1579 
1580 		maccr = ioread32(priv->base + FTGMAC100_OFFSET_MACCR);
1581 		if (priv->netdev->features & NETIF_F_HW_VLAN_CTAG_RX)
1582 			maccr |= FTGMAC100_MACCR_RM_VLAN;
1583 		else
1584 			maccr &= ~FTGMAC100_MACCR_RM_VLAN;
1585 		iowrite32(maccr, priv->base + FTGMAC100_OFFSET_MACCR);
1586 	}
1587 
1588 	return 0;
1589 }
1590 
1591 static const struct net_device_ops ftgmac100_netdev_ops = {
1592 	.ndo_open		= ftgmac100_open,
1593 	.ndo_stop		= ftgmac100_stop,
1594 	.ndo_start_xmit		= ftgmac100_hard_start_xmit,
1595 	.ndo_set_mac_address	= ftgmac100_set_mac_addr,
1596 	.ndo_validate_addr	= eth_validate_addr,
1597 	.ndo_do_ioctl		= ftgmac100_do_ioctl,
1598 	.ndo_tx_timeout		= ftgmac100_tx_timeout,
1599 	.ndo_set_rx_mode	= ftgmac100_set_rx_mode,
1600 	.ndo_set_features	= ftgmac100_set_features,
1601 };
1602 
1603 static int ftgmac100_setup_mdio(struct net_device *netdev)
1604 {
1605 	struct ftgmac100 *priv = netdev_priv(netdev);
1606 	struct platform_device *pdev = to_platform_device(priv->dev);
1607 	int i, err = 0;
1608 	u32 reg;
1609 
1610 	/* initialize mdio bus */
1611 	priv->mii_bus = mdiobus_alloc();
1612 	if (!priv->mii_bus)
1613 		return -EIO;
1614 
1615 	if (priv->is_aspeed) {
1616 		/* This driver supports the old MDIO interface */
1617 		reg = ioread32(priv->base + FTGMAC100_OFFSET_REVR);
1618 		reg &= ~FTGMAC100_REVR_NEW_MDIO_INTERFACE;
1619 		iowrite32(reg, priv->base + FTGMAC100_OFFSET_REVR);
1620 	};
1621 
1622 	priv->mii_bus->name = "ftgmac100_mdio";
1623 	snprintf(priv->mii_bus->id, MII_BUS_ID_SIZE, "%s-%d",
1624 		 pdev->name, pdev->id);
1625 	priv->mii_bus->priv = priv->netdev;
1626 	priv->mii_bus->read = ftgmac100_mdiobus_read;
1627 	priv->mii_bus->write = ftgmac100_mdiobus_write;
1628 
1629 	for (i = 0; i < PHY_MAX_ADDR; i++)
1630 		priv->mii_bus->irq[i] = PHY_POLL;
1631 
1632 	err = mdiobus_register(priv->mii_bus);
1633 	if (err) {
1634 		dev_err(priv->dev, "Cannot register MDIO bus!\n");
1635 		goto err_register_mdiobus;
1636 	}
1637 
1638 	err = ftgmac100_mii_probe(priv);
1639 	if (err) {
1640 		dev_err(priv->dev, "MII Probe failed!\n");
1641 		goto err_mii_probe;
1642 	}
1643 
1644 	return 0;
1645 
1646 err_mii_probe:
1647 	mdiobus_unregister(priv->mii_bus);
1648 err_register_mdiobus:
1649 	mdiobus_free(priv->mii_bus);
1650 	return err;
1651 }
1652 
1653 static void ftgmac100_destroy_mdio(struct net_device *netdev)
1654 {
1655 	struct ftgmac100 *priv = netdev_priv(netdev);
1656 
1657 	if (!netdev->phydev)
1658 		return;
1659 
1660 	phy_disconnect(netdev->phydev);
1661 	mdiobus_unregister(priv->mii_bus);
1662 	mdiobus_free(priv->mii_bus);
1663 }
1664 
1665 static void ftgmac100_ncsi_handler(struct ncsi_dev *nd)
1666 {
1667 	if (unlikely(nd->state != ncsi_dev_state_functional))
1668 		return;
1669 
1670 	netdev_info(nd->dev, "NCSI interface %s\n",
1671 		    nd->link_up ? "up" : "down");
1672 }
1673 
1674 static int ftgmac100_probe(struct platform_device *pdev)
1675 {
1676 	struct resource *res;
1677 	int irq;
1678 	struct net_device *netdev;
1679 	struct ftgmac100 *priv;
1680 	struct device_node *np;
1681 	int err = 0;
1682 
1683 	if (!pdev)
1684 		return -ENODEV;
1685 
1686 	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1687 	if (!res)
1688 		return -ENXIO;
1689 
1690 	irq = platform_get_irq(pdev, 0);
1691 	if (irq < 0)
1692 		return irq;
1693 
1694 	/* setup net_device */
1695 	netdev = alloc_etherdev(sizeof(*priv));
1696 	if (!netdev) {
1697 		err = -ENOMEM;
1698 		goto err_alloc_etherdev;
1699 	}
1700 
1701 	SET_NETDEV_DEV(netdev, &pdev->dev);
1702 
1703 	netdev->ethtool_ops = &ftgmac100_ethtool_ops;
1704 	netdev->netdev_ops = &ftgmac100_netdev_ops;
1705 	netdev->watchdog_timeo = 5 * HZ;
1706 
1707 	platform_set_drvdata(pdev, netdev);
1708 
1709 	/* setup private data */
1710 	priv = netdev_priv(netdev);
1711 	priv->netdev = netdev;
1712 	priv->dev = &pdev->dev;
1713 	INIT_WORK(&priv->reset_task, ftgmac100_reset_task);
1714 
1715 	/* map io memory */
1716 	priv->res = request_mem_region(res->start, resource_size(res),
1717 				       dev_name(&pdev->dev));
1718 	if (!priv->res) {
1719 		dev_err(&pdev->dev, "Could not reserve memory region\n");
1720 		err = -ENOMEM;
1721 		goto err_req_mem;
1722 	}
1723 
1724 	priv->base = ioremap(res->start, resource_size(res));
1725 	if (!priv->base) {
1726 		dev_err(&pdev->dev, "Failed to ioremap ethernet registers\n");
1727 		err = -EIO;
1728 		goto err_ioremap;
1729 	}
1730 
1731 	netdev->irq = irq;
1732 
1733 	/* Enable pause */
1734 	priv->tx_pause = true;
1735 	priv->rx_pause = true;
1736 	priv->aneg_pause = true;
1737 
1738 	/* MAC address from chip or random one */
1739 	ftgmac100_initial_mac(priv);
1740 
1741 	np = pdev->dev.of_node;
1742 	if (np && (of_device_is_compatible(np, "aspeed,ast2400-mac") ||
1743 		   of_device_is_compatible(np, "aspeed,ast2500-mac"))) {
1744 		priv->rxdes0_edorr_mask = BIT(30);
1745 		priv->txdes0_edotr_mask = BIT(30);
1746 		priv->is_aspeed = true;
1747 	} else {
1748 		priv->rxdes0_edorr_mask = BIT(15);
1749 		priv->txdes0_edotr_mask = BIT(15);
1750 	}
1751 
1752 	if (np && of_get_property(np, "use-ncsi", NULL)) {
1753 		if (!IS_ENABLED(CONFIG_NET_NCSI)) {
1754 			dev_err(&pdev->dev, "NCSI stack not enabled\n");
1755 			goto err_ncsi_dev;
1756 		}
1757 
1758 		dev_info(&pdev->dev, "Using NCSI interface\n");
1759 		priv->use_ncsi = true;
1760 		priv->ndev = ncsi_register_dev(netdev, ftgmac100_ncsi_handler);
1761 		if (!priv->ndev)
1762 			goto err_ncsi_dev;
1763 	} else {
1764 		priv->use_ncsi = false;
1765 		err = ftgmac100_setup_mdio(netdev);
1766 		if (err)
1767 			goto err_setup_mdio;
1768 	}
1769 
1770 	/* Default ring sizes */
1771 	priv->rx_q_entries = priv->new_rx_q_entries = DEF_RX_QUEUE_ENTRIES;
1772 	priv->tx_q_entries = priv->new_tx_q_entries = DEF_TX_QUEUE_ENTRIES;
1773 
1774 	/* Base feature set */
1775 	netdev->hw_features = NETIF_F_RXCSUM | NETIF_F_HW_CSUM |
1776 		NETIF_F_GRO | NETIF_F_SG | NETIF_F_HW_VLAN_CTAG_RX |
1777 		NETIF_F_HW_VLAN_CTAG_TX;
1778 
1779 	/* AST2400  doesn't have working HW checksum generation */
1780 	if (np && (of_device_is_compatible(np, "aspeed,ast2400-mac")))
1781 		netdev->hw_features &= ~NETIF_F_HW_CSUM;
1782 	if (np && of_get_property(np, "no-hw-checksum", NULL))
1783 		netdev->hw_features &= ~(NETIF_F_HW_CSUM | NETIF_F_RXCSUM);
1784 	netdev->features |= netdev->hw_features;
1785 
1786 	/* register network device */
1787 	err = register_netdev(netdev);
1788 	if (err) {
1789 		dev_err(&pdev->dev, "Failed to register netdev\n");
1790 		goto err_register_netdev;
1791 	}
1792 
1793 	netdev_info(netdev, "irq %d, mapped at %p\n", netdev->irq, priv->base);
1794 
1795 	return 0;
1796 
1797 err_ncsi_dev:
1798 err_register_netdev:
1799 	ftgmac100_destroy_mdio(netdev);
1800 err_setup_mdio:
1801 	iounmap(priv->base);
1802 err_ioremap:
1803 	release_resource(priv->res);
1804 err_req_mem:
1805 	netif_napi_del(&priv->napi);
1806 	free_netdev(netdev);
1807 err_alloc_etherdev:
1808 	return err;
1809 }
1810 
1811 static int ftgmac100_remove(struct platform_device *pdev)
1812 {
1813 	struct net_device *netdev;
1814 	struct ftgmac100 *priv;
1815 
1816 	netdev = platform_get_drvdata(pdev);
1817 	priv = netdev_priv(netdev);
1818 
1819 	unregister_netdev(netdev);
1820 
1821 	/* There's a small chance the reset task will have been re-queued,
1822 	 * during stop, make sure it's gone before we free the structure.
1823 	 */
1824 	cancel_work_sync(&priv->reset_task);
1825 
1826 	ftgmac100_destroy_mdio(netdev);
1827 
1828 	iounmap(priv->base);
1829 	release_resource(priv->res);
1830 
1831 	netif_napi_del(&priv->napi);
1832 	free_netdev(netdev);
1833 	return 0;
1834 }
1835 
1836 static const struct of_device_id ftgmac100_of_match[] = {
1837 	{ .compatible = "faraday,ftgmac100" },
1838 	{ }
1839 };
1840 MODULE_DEVICE_TABLE(of, ftgmac100_of_match);
1841 
1842 static struct platform_driver ftgmac100_driver = {
1843 	.probe	= ftgmac100_probe,
1844 	.remove	= ftgmac100_remove,
1845 	.driver	= {
1846 		.name		= DRV_NAME,
1847 		.of_match_table	= ftgmac100_of_match,
1848 	},
1849 };
1850 module_platform_driver(ftgmac100_driver);
1851 
1852 MODULE_AUTHOR("Po-Yu Chuang <ratbert@faraday-tech.com>");
1853 MODULE_DESCRIPTION("FTGMAC100 driver");
1854 MODULE_LICENSE("GPL");
1855