6325e326147de0d204c3c2847393e78209ce8739
[platform/kernel/linux-starfive.git] / drivers / net / ethernet / faraday / ftgmac100.c
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 <net/ip.h>
36 #include <net/ncsi.h>
37
38 #include "ftgmac100.h"
39
40 #define DRV_NAME        "ftgmac100"
41 #define DRV_VERSION     "0.7"
42
43 #define RX_QUEUE_ENTRIES        256     /* must be power of 2 */
44 #define TX_QUEUE_ENTRIES        512     /* must be power of 2 */
45
46 #define MAX_PKT_SIZE            1536
47 #define RX_BUF_SIZE             MAX_PKT_SIZE    /* must be smaller than 0x3fff */
48
49 struct ftgmac100_descs {
50         struct ftgmac100_rxdes rxdes[RX_QUEUE_ENTRIES];
51         struct ftgmac100_txdes txdes[TX_QUEUE_ENTRIES];
52 };
53
54 struct ftgmac100 {
55         /* Registers */
56         struct resource *res;
57         void __iomem *base;
58
59         struct ftgmac100_descs *descs;
60         dma_addr_t descs_dma_addr;
61
62         /* Rx ring */
63         struct sk_buff *rx_skbs[RX_QUEUE_ENTRIES];
64         unsigned int rx_pointer;
65         u32 rxdes0_edorr_mask;
66
67         /* Tx ring */
68         unsigned int tx_clean_pointer;
69         unsigned int tx_pointer;
70         unsigned int tx_pending;
71         u32 txdes0_edotr_mask;
72         spinlock_t tx_lock;
73
74         /* Scratch page to use when rx skb alloc fails */
75         void *rx_scratch;
76         dma_addr_t rx_scratch_dma;
77
78         /* Component structures */
79         struct net_device *netdev;
80         struct device *dev;
81         struct ncsi_dev *ndev;
82         struct napi_struct napi;
83         struct work_struct reset_task;
84         struct mii_bus *mii_bus;
85
86         /* Link management */
87         int cur_speed;
88         int cur_duplex;
89         bool use_ncsi;
90
91         /* Misc */
92         bool need_mac_restart;
93 };
94
95 static void ftgmac100_set_rx_ring_base(struct ftgmac100 *priv, dma_addr_t addr)
96 {
97         iowrite32(addr, priv->base + FTGMAC100_OFFSET_RXR_BADR);
98 }
99
100 static void ftgmac100_set_rx_buffer_size(struct ftgmac100 *priv,
101                 unsigned int size)
102 {
103         size = FTGMAC100_RBSR_SIZE(size);
104         iowrite32(size, priv->base + FTGMAC100_OFFSET_RBSR);
105 }
106
107 static void ftgmac100_set_normal_prio_tx_ring_base(struct ftgmac100 *priv,
108                                                    dma_addr_t addr)
109 {
110         iowrite32(addr, priv->base + FTGMAC100_OFFSET_NPTXR_BADR);
111 }
112
113 static void ftgmac100_txdma_normal_prio_start_polling(struct ftgmac100 *priv)
114 {
115         iowrite32(1, priv->base + FTGMAC100_OFFSET_NPTXPD);
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         priv->tx_pending = 0;
168
169         /* The doc says reset twice with 10us interval */
170         if (ftgmac100_reset_mac(priv, maccr))
171                 return -EIO;
172         usleep_range(10, 1000);
173         return ftgmac100_reset_mac(priv, maccr);
174 }
175
176 static void ftgmac100_set_mac(struct ftgmac100 *priv, const unsigned char *mac)
177 {
178         unsigned int maddr = mac[0] << 8 | mac[1];
179         unsigned int laddr = mac[2] << 24 | mac[3] << 16 | mac[4] << 8 | mac[5];
180
181         iowrite32(maddr, priv->base + FTGMAC100_OFFSET_MAC_MADR);
182         iowrite32(laddr, priv->base + FTGMAC100_OFFSET_MAC_LADR);
183 }
184
185 static void ftgmac100_setup_mac(struct ftgmac100 *priv)
186 {
187         u8 mac[ETH_ALEN];
188         unsigned int m;
189         unsigned int l;
190         void *addr;
191
192         addr = device_get_mac_address(priv->dev, mac, ETH_ALEN);
193         if (addr) {
194                 ether_addr_copy(priv->netdev->dev_addr, mac);
195                 dev_info(priv->dev, "Read MAC address %pM from device tree\n",
196                          mac);
197                 return;
198         }
199
200         m = ioread32(priv->base + FTGMAC100_OFFSET_MAC_MADR);
201         l = ioread32(priv->base + FTGMAC100_OFFSET_MAC_LADR);
202
203         mac[0] = (m >> 8) & 0xff;
204         mac[1] = m & 0xff;
205         mac[2] = (l >> 24) & 0xff;
206         mac[3] = (l >> 16) & 0xff;
207         mac[4] = (l >> 8) & 0xff;
208         mac[5] = l & 0xff;
209
210         if (is_valid_ether_addr(mac)) {
211                 ether_addr_copy(priv->netdev->dev_addr, mac);
212                 dev_info(priv->dev, "Read MAC address %pM from chip\n", mac);
213         } else {
214                 eth_hw_addr_random(priv->netdev);
215                 dev_info(priv->dev, "Generated random MAC address %pM\n",
216                          priv->netdev->dev_addr);
217         }
218 }
219
220 static int ftgmac100_set_mac_addr(struct net_device *dev, void *p)
221 {
222         int ret;
223
224         ret = eth_prepare_mac_addr_change(dev, p);
225         if (ret < 0)
226                 return ret;
227
228         eth_commit_mac_addr_change(dev, p);
229         ftgmac100_set_mac(netdev_priv(dev), dev->dev_addr);
230
231         return 0;
232 }
233
234 static void ftgmac100_init_hw(struct ftgmac100 *priv)
235 {
236         /* setup ring buffer base registers */
237         ftgmac100_set_rx_ring_base(priv,
238                                    priv->descs_dma_addr +
239                                    offsetof(struct ftgmac100_descs, rxdes));
240         ftgmac100_set_normal_prio_tx_ring_base(priv,
241                                                priv->descs_dma_addr +
242                                                offsetof(struct ftgmac100_descs, txdes));
243
244         ftgmac100_set_rx_buffer_size(priv, RX_BUF_SIZE);
245
246         iowrite32(FTGMAC100_APTC_RXPOLL_CNT(1), priv->base + FTGMAC100_OFFSET_APTC);
247
248         ftgmac100_set_mac(priv, priv->netdev->dev_addr);
249 }
250
251 static void ftgmac100_start_hw(struct ftgmac100 *priv)
252 {
253         u32 maccr = ioread32(priv->base + FTGMAC100_OFFSET_MACCR);
254
255         /* Keep the original GMAC and FAST bits */
256         maccr &= (FTGMAC100_MACCR_FAST_MODE | FTGMAC100_MACCR_GIGA_MODE);
257
258         /* Add all the main enable bits */
259         maccr |= FTGMAC100_MACCR_TXDMA_EN       |
260                  FTGMAC100_MACCR_RXDMA_EN       |
261                  FTGMAC100_MACCR_TXMAC_EN       |
262                  FTGMAC100_MACCR_RXMAC_EN       |
263                  FTGMAC100_MACCR_CRC_APD        |
264                  FTGMAC100_MACCR_PHY_LINK_LEVEL |
265                  FTGMAC100_MACCR_RX_RUNT        |
266                  FTGMAC100_MACCR_RX_BROADPKT;
267
268         /* Add other bits as needed */
269         if (priv->cur_duplex == DUPLEX_FULL)
270                 maccr |= FTGMAC100_MACCR_FULLDUP;
271
272         /* Hit the HW */
273         iowrite32(maccr, priv->base + FTGMAC100_OFFSET_MACCR);
274 }
275
276 static void ftgmac100_stop_hw(struct ftgmac100 *priv)
277 {
278         iowrite32(0, priv->base + FTGMAC100_OFFSET_MACCR);
279 }
280
281 static int ftgmac100_alloc_rx_buf(struct ftgmac100 *priv, unsigned int entry,
282                                   struct ftgmac100_rxdes *rxdes, gfp_t gfp)
283 {
284         struct net_device *netdev = priv->netdev;
285         struct sk_buff *skb;
286         dma_addr_t map;
287         int err;
288
289         skb = netdev_alloc_skb_ip_align(netdev, RX_BUF_SIZE);
290         if (unlikely(!skb)) {
291                 if (net_ratelimit())
292                         netdev_warn(netdev, "failed to allocate rx skb\n");
293                 err = -ENOMEM;
294                 map = priv->rx_scratch_dma;
295         } else {
296                 map = dma_map_single(priv->dev, skb->data, RX_BUF_SIZE,
297                                      DMA_FROM_DEVICE);
298                 if (unlikely(dma_mapping_error(priv->dev, map))) {
299                         if (net_ratelimit())
300                                 netdev_err(netdev, "failed to map rx page\n");
301                         dev_kfree_skb_any(skb);
302                         map = priv->rx_scratch_dma;
303                         skb = NULL;
304                         err = -ENOMEM;
305                 }
306         }
307
308         /* Store skb */
309         priv->rx_skbs[entry] = skb;
310
311         /* Store DMA address into RX desc */
312         rxdes->rxdes3 = cpu_to_le32(map);
313
314         /* Ensure the above is ordered vs clearing the OWN bit */
315         dma_wmb();
316
317         /* Clean status (which resets own bit) */
318         if (entry == (RX_QUEUE_ENTRIES - 1))
319                 rxdes->rxdes0 = cpu_to_le32(priv->rxdes0_edorr_mask);
320         else
321                 rxdes->rxdes0 = 0;
322
323         return 0;
324 }
325
326 static int ftgmac100_next_rx_pointer(int pointer)
327 {
328         return (pointer + 1) & (RX_QUEUE_ENTRIES - 1);
329 }
330
331 static void ftgmac100_rx_packet_error(struct ftgmac100 *priv, u32 status)
332 {
333         struct net_device *netdev = priv->netdev;
334
335         if (status & FTGMAC100_RXDES0_RX_ERR)
336                 netdev->stats.rx_errors++;
337
338         if (status & FTGMAC100_RXDES0_CRC_ERR)
339                 netdev->stats.rx_crc_errors++;
340
341         if (status & (FTGMAC100_RXDES0_FTL |
342                       FTGMAC100_RXDES0_RUNT |
343                       FTGMAC100_RXDES0_RX_ODD_NB))
344                 netdev->stats.rx_length_errors++;
345 }
346
347 static bool ftgmac100_rx_packet(struct ftgmac100 *priv, int *processed)
348 {
349         struct net_device *netdev = priv->netdev;
350         struct ftgmac100_rxdes *rxdes;
351         struct sk_buff *skb;
352         unsigned int pointer, size;
353         u32 status, csum_vlan;
354         dma_addr_t map;
355
356         /* Grab next RX descriptor */
357         pointer = priv->rx_pointer;
358         rxdes = &priv->descs->rxdes[pointer];
359
360         /* Grab descriptor status */
361         status = le32_to_cpu(rxdes->rxdes0);
362
363         /* Do we have a packet ? */
364         if (!(status & FTGMAC100_RXDES0_RXPKT_RDY))
365                 return false;
366
367         /* Order subsequent reads with the test for the ready bit */
368         dma_rmb();
369
370         /* We don't cope with fragmented RX packets */
371         if (unlikely(!(status & FTGMAC100_RXDES0_FRS) ||
372                      !(status & FTGMAC100_RXDES0_LRS)))
373                 goto drop;
374
375         /* Grab received size and csum vlan field in the descriptor */
376         size = status & FTGMAC100_RXDES0_VDBC;
377         csum_vlan = le32_to_cpu(rxdes->rxdes1);
378
379         /* Any error (other than csum offload) flagged ? */
380         if (unlikely(status & RXDES0_ANY_ERROR)) {
381                 /* Correct for incorrect flagging of runt packets
382                  * with vlan tags... Just accept a runt packet that
383                  * has been flagged as vlan and whose size is at
384                  * least 60 bytes.
385                  */
386                 if ((status & FTGMAC100_RXDES0_RUNT) &&
387                     (csum_vlan & FTGMAC100_RXDES1_VLANTAG_AVAIL) &&
388                     (size >= 60))
389                         status &= ~FTGMAC100_RXDES0_RUNT;
390
391                 /* Any error still in there ? */
392                 if (status & RXDES0_ANY_ERROR) {
393                         ftgmac100_rx_packet_error(priv, status);
394                         goto drop;
395                 }
396         }
397
398         /* If the packet had no skb (failed to allocate earlier)
399          * then try to allocate one and skip
400          */
401         skb = priv->rx_skbs[pointer];
402         if (!unlikely(skb)) {
403                 ftgmac100_alloc_rx_buf(priv, pointer, rxdes, GFP_ATOMIC);
404                 goto drop;
405         }
406
407         if (unlikely(status & FTGMAC100_RXDES0_MULTICAST))
408                 netdev->stats.multicast++;
409
410         /* If the HW found checksum errors, bounce it to software.
411          *
412          * If we didn't, we need to see if the packet was recognized
413          * by HW as one of the supported checksummed protocols before
414          * we accept the HW test results.
415          */
416         if (netdev->features & NETIF_F_RXCSUM) {
417                 u32 err_bits = FTGMAC100_RXDES1_TCP_CHKSUM_ERR |
418                         FTGMAC100_RXDES1_UDP_CHKSUM_ERR |
419                         FTGMAC100_RXDES1_IP_CHKSUM_ERR;
420                 if ((csum_vlan & err_bits) ||
421                     !(csum_vlan & FTGMAC100_RXDES1_PROT_MASK))
422                         skb->ip_summed = CHECKSUM_NONE;
423                 else
424                         skb->ip_summed = CHECKSUM_UNNECESSARY;
425         }
426
427         /* Transfer received size to skb */
428         skb_put(skb, size);
429
430         /* Tear down DMA mapping, do necessary cache management */
431         map = le32_to_cpu(rxdes->rxdes3);
432
433 #if defined(CONFIG_ARM) && !defined(CONFIG_ARM_DMA_USE_IOMMU)
434         /* When we don't have an iommu, we can save cycles by not
435          * invalidating the cache for the part of the packet that
436          * wasn't received.
437          */
438         dma_unmap_single(priv->dev, map, size, DMA_FROM_DEVICE);
439 #else
440         dma_unmap_single(priv->dev, map, RX_BUF_SIZE, DMA_FROM_DEVICE);
441 #endif
442
443
444         /* Resplenish rx ring */
445         ftgmac100_alloc_rx_buf(priv, pointer, rxdes, GFP_ATOMIC);
446         priv->rx_pointer = ftgmac100_next_rx_pointer(pointer);
447
448         skb->protocol = eth_type_trans(skb, netdev);
449
450         netdev->stats.rx_packets++;
451         netdev->stats.rx_bytes += size;
452
453         /* push packet to protocol stack */
454         if (skb->ip_summed == CHECKSUM_NONE)
455                 netif_receive_skb(skb);
456         else
457                 napi_gro_receive(&priv->napi, skb);
458
459         (*processed)++;
460         return true;
461
462  drop:
463         /* Clean rxdes0 (which resets own bit) */
464         rxdes->rxdes0 = cpu_to_le32(status & priv->rxdes0_edorr_mask);
465         priv->rx_pointer = ftgmac100_next_rx_pointer(pointer);
466         netdev->stats.rx_dropped++;
467         return true;
468 }
469
470 static void ftgmac100_txdes_reset(const struct ftgmac100 *priv,
471                                   struct ftgmac100_txdes *txdes)
472 {
473         /* clear all except end of ring bit */
474         txdes->txdes0 &= cpu_to_le32(priv->txdes0_edotr_mask);
475         txdes->txdes1 = 0;
476         txdes->txdes2 = 0;
477         txdes->txdes3 = 0;
478 }
479
480 static bool ftgmac100_txdes_owned_by_dma(struct ftgmac100_txdes *txdes)
481 {
482         return txdes->txdes0 & cpu_to_le32(FTGMAC100_TXDES0_TXDMA_OWN);
483 }
484
485 static void ftgmac100_txdes_set_dma_own(struct ftgmac100_txdes *txdes)
486 {
487         /*
488          * Make sure dma own bit will not be set before any other
489          * descriptor fields.
490          */
491         wmb();
492         txdes->txdes0 |= cpu_to_le32(FTGMAC100_TXDES0_TXDMA_OWN);
493 }
494
495 static void ftgmac100_txdes_set_end_of_ring(const struct ftgmac100 *priv,
496                                             struct ftgmac100_txdes *txdes)
497 {
498         txdes->txdes0 |= cpu_to_le32(priv->txdes0_edotr_mask);
499 }
500
501 static void ftgmac100_txdes_set_first_segment(struct ftgmac100_txdes *txdes)
502 {
503         txdes->txdes0 |= cpu_to_le32(FTGMAC100_TXDES0_FTS);
504 }
505
506 static void ftgmac100_txdes_set_last_segment(struct ftgmac100_txdes *txdes)
507 {
508         txdes->txdes0 |= cpu_to_le32(FTGMAC100_TXDES0_LTS);
509 }
510
511 static void ftgmac100_txdes_set_buffer_size(struct ftgmac100_txdes *txdes,
512                                             unsigned int len)
513 {
514         txdes->txdes0 |= cpu_to_le32(FTGMAC100_TXDES0_TXBUF_SIZE(len));
515 }
516
517 static void ftgmac100_txdes_set_txint(struct ftgmac100_txdes *txdes)
518 {
519         txdes->txdes1 |= cpu_to_le32(FTGMAC100_TXDES1_TXIC);
520 }
521
522 static void ftgmac100_txdes_set_tcpcs(struct ftgmac100_txdes *txdes)
523 {
524         txdes->txdes1 |= cpu_to_le32(FTGMAC100_TXDES1_TCP_CHKSUM);
525 }
526
527 static void ftgmac100_txdes_set_udpcs(struct ftgmac100_txdes *txdes)
528 {
529         txdes->txdes1 |= cpu_to_le32(FTGMAC100_TXDES1_UDP_CHKSUM);
530 }
531
532 static void ftgmac100_txdes_set_ipcs(struct ftgmac100_txdes *txdes)
533 {
534         txdes->txdes1 |= cpu_to_le32(FTGMAC100_TXDES1_IP_CHKSUM);
535 }
536
537 static void ftgmac100_txdes_set_dma_addr(struct ftgmac100_txdes *txdes,
538                                          dma_addr_t addr)
539 {
540         txdes->txdes3 = cpu_to_le32(addr);
541 }
542
543 static dma_addr_t ftgmac100_txdes_get_dma_addr(struct ftgmac100_txdes *txdes)
544 {
545         return le32_to_cpu(txdes->txdes3);
546 }
547
548 /*
549  * txdes2 is not used by hardware. We use it to keep track of socket buffer.
550  * Since hardware does not touch it, we can skip cpu_to_le32()/le32_to_cpu().
551  */
552 static void ftgmac100_txdes_set_skb(struct ftgmac100_txdes *txdes,
553                                     struct sk_buff *skb)
554 {
555         txdes->txdes2 = (unsigned int)skb;
556 }
557
558 static struct sk_buff *ftgmac100_txdes_get_skb(struct ftgmac100_txdes *txdes)
559 {
560         return (struct sk_buff *)txdes->txdes2;
561 }
562
563 static int ftgmac100_next_tx_pointer(int pointer)
564 {
565         return (pointer + 1) & (TX_QUEUE_ENTRIES - 1);
566 }
567
568 static void ftgmac100_tx_pointer_advance(struct ftgmac100 *priv)
569 {
570         priv->tx_pointer = ftgmac100_next_tx_pointer(priv->tx_pointer);
571 }
572
573 static void ftgmac100_tx_clean_pointer_advance(struct ftgmac100 *priv)
574 {
575         priv->tx_clean_pointer = ftgmac100_next_tx_pointer(priv->tx_clean_pointer);
576 }
577
578 static struct ftgmac100_txdes *ftgmac100_current_txdes(struct ftgmac100 *priv)
579 {
580         return &priv->descs->txdes[priv->tx_pointer];
581 }
582
583 static struct ftgmac100_txdes *
584 ftgmac100_current_clean_txdes(struct ftgmac100 *priv)
585 {
586         return &priv->descs->txdes[priv->tx_clean_pointer];
587 }
588
589 static bool ftgmac100_tx_complete_packet(struct ftgmac100 *priv)
590 {
591         struct net_device *netdev = priv->netdev;
592         struct ftgmac100_txdes *txdes;
593         struct sk_buff *skb;
594         dma_addr_t map;
595
596         if (priv->tx_pending == 0)
597                 return false;
598
599         txdes = ftgmac100_current_clean_txdes(priv);
600
601         if (ftgmac100_txdes_owned_by_dma(txdes))
602                 return false;
603
604         skb = ftgmac100_txdes_get_skb(txdes);
605         map = ftgmac100_txdes_get_dma_addr(txdes);
606
607         netdev->stats.tx_packets++;
608         netdev->stats.tx_bytes += skb->len;
609
610         dma_unmap_single(priv->dev, map, skb_headlen(skb), DMA_TO_DEVICE);
611
612         dev_kfree_skb(skb);
613
614         ftgmac100_txdes_reset(priv, txdes);
615
616         ftgmac100_tx_clean_pointer_advance(priv);
617
618         spin_lock(&priv->tx_lock);
619         priv->tx_pending--;
620         spin_unlock(&priv->tx_lock);
621         netif_wake_queue(netdev);
622
623         return true;
624 }
625
626 static void ftgmac100_tx_complete(struct ftgmac100 *priv)
627 {
628         while (ftgmac100_tx_complete_packet(priv))
629                 ;
630 }
631
632 static int ftgmac100_hard_start_xmit(struct sk_buff *skb,
633                                      struct net_device *netdev)
634 {
635         struct ftgmac100 *priv = netdev_priv(netdev);
636         struct ftgmac100_txdes *txdes;
637         dma_addr_t map;
638
639         /* The HW doesn't pad small frames */
640         if (eth_skb_pad(skb)) {
641                 netdev->stats.tx_dropped++;
642                 return NETDEV_TX_OK;
643         }
644
645         /* Reject oversize packets */
646         if (unlikely(skb->len > MAX_PKT_SIZE)) {
647                 if (net_ratelimit())
648                         netdev_dbg(netdev, "tx packet too big\n");
649                 goto drop;
650         }
651
652         map = dma_map_single(priv->dev, skb->data, skb_headlen(skb), DMA_TO_DEVICE);
653         if (unlikely(dma_mapping_error(priv->dev, map))) {
654                 /* drop packet */
655                 if (net_ratelimit())
656                         netdev_err(netdev, "map socket buffer failed\n");
657                 goto drop;
658         }
659
660         txdes = ftgmac100_current_txdes(priv);
661         ftgmac100_tx_pointer_advance(priv);
662
663         /* setup TX descriptor */
664         ftgmac100_txdes_set_skb(txdes, skb);
665         ftgmac100_txdes_set_dma_addr(txdes, map);
666         ftgmac100_txdes_set_buffer_size(txdes, skb->len);
667
668         ftgmac100_txdes_set_first_segment(txdes);
669         ftgmac100_txdes_set_last_segment(txdes);
670         ftgmac100_txdes_set_txint(txdes);
671         if (skb->ip_summed == CHECKSUM_PARTIAL) {
672                 __be16 protocol = skb->protocol;
673
674                 if (protocol == cpu_to_be16(ETH_P_IP)) {
675                         u8 ip_proto = ip_hdr(skb)->protocol;
676
677                         ftgmac100_txdes_set_ipcs(txdes);
678                         if (ip_proto == IPPROTO_TCP)
679                                 ftgmac100_txdes_set_tcpcs(txdes);
680                         else if (ip_proto == IPPROTO_UDP)
681                                 ftgmac100_txdes_set_udpcs(txdes);
682                 }
683         }
684
685         spin_lock(&priv->tx_lock);
686         priv->tx_pending++;
687         if (priv->tx_pending == TX_QUEUE_ENTRIES)
688                 netif_stop_queue(netdev);
689
690         /* start transmit */
691         ftgmac100_txdes_set_dma_own(txdes);
692         spin_unlock(&priv->tx_lock);
693
694         ftgmac100_txdma_normal_prio_start_polling(priv);
695
696         return NETDEV_TX_OK;
697
698  drop:
699         /* Drop the packet */
700         dev_kfree_skb_any(skb);
701         netdev->stats.tx_dropped++;
702
703         return NETDEV_TX_OK;
704 }
705
706 static void ftgmac100_free_buffers(struct ftgmac100 *priv)
707 {
708         int i;
709
710         /* Free all RX buffers */
711         for (i = 0; i < RX_QUEUE_ENTRIES; i++) {
712                 struct ftgmac100_rxdes *rxdes = &priv->descs->rxdes[i];
713                 struct sk_buff *skb = priv->rx_skbs[i];
714                 dma_addr_t map = le32_to_cpu(rxdes->rxdes3);
715
716                 if (!skb)
717                         continue;
718
719                 priv->rx_skbs[i] = NULL;
720                 dma_unmap_single(priv->dev, map, RX_BUF_SIZE, DMA_FROM_DEVICE);
721                 dev_kfree_skb_any(skb);
722         }
723
724         /* Free all TX buffers */
725         for (i = 0; i < TX_QUEUE_ENTRIES; i++) {
726                 struct ftgmac100_txdes *txdes = &priv->descs->txdes[i];
727                 struct sk_buff *skb = ftgmac100_txdes_get_skb(txdes);
728                 dma_addr_t map = ftgmac100_txdes_get_dma_addr(txdes);
729
730                 if (!skb)
731                         continue;
732
733                 dma_unmap_single(priv->dev, map, skb_headlen(skb), DMA_TO_DEVICE);
734                 kfree_skb(skb);
735         }
736 }
737
738 static void ftgmac100_free_rings(struct ftgmac100 *priv)
739 {
740         /* Free descriptors */
741         if (priv->descs)
742                 dma_free_coherent(priv->dev, sizeof(struct ftgmac100_descs),
743                                   priv->descs, priv->descs_dma_addr);
744
745         /* Free scratch packet buffer */
746         if (priv->rx_scratch)
747                 dma_free_coherent(priv->dev, RX_BUF_SIZE,
748                                   priv->rx_scratch, priv->rx_scratch_dma);
749 }
750
751 static int ftgmac100_alloc_rings(struct ftgmac100 *priv)
752 {
753         /* Allocate descriptors */
754         priv->descs = dma_zalloc_coherent(priv->dev,
755                                           sizeof(struct ftgmac100_descs),
756                                           &priv->descs_dma_addr, GFP_KERNEL);
757         if (!priv->descs)
758                 return -ENOMEM;
759
760         /* Allocate scratch packet buffer */
761         priv->rx_scratch = dma_alloc_coherent(priv->dev,
762                                               RX_BUF_SIZE,
763                                               &priv->rx_scratch_dma,
764                                               GFP_KERNEL);
765         if (!priv->rx_scratch)
766                 return -ENOMEM;
767
768         return 0;
769 }
770
771 static void ftgmac100_init_rings(struct ftgmac100 *priv)
772 {
773         struct ftgmac100_rxdes *rxdes;
774         int i;
775
776         /* Initialize RX ring */
777         for (i = 0; i < RX_QUEUE_ENTRIES; i++) {
778                 rxdes = &priv->descs->rxdes[i];
779                 rxdes->rxdes0 = 0;
780                 rxdes->rxdes3 = cpu_to_le32(priv->rx_scratch_dma);
781         }
782         /* Mark the end of the ring */
783         rxdes->rxdes0 |= cpu_to_le32(priv->rxdes0_edorr_mask);
784
785         /* Initialize TX ring */
786         for (i = 0; i < TX_QUEUE_ENTRIES; i++)
787                 priv->descs->txdes[i].txdes0 = 0;
788         ftgmac100_txdes_set_end_of_ring(priv, &priv->descs->txdes[i -1]);
789 }
790
791 static int ftgmac100_alloc_rx_buffers(struct ftgmac100 *priv)
792 {
793         int i;
794
795         for (i = 0; i < RX_QUEUE_ENTRIES; i++) {
796                 struct ftgmac100_rxdes *rxdes = &priv->descs->rxdes[i];
797
798                 if (ftgmac100_alloc_rx_buf(priv, i, rxdes, GFP_KERNEL))
799                         return -ENOMEM;
800         }
801         return 0;
802 }
803
804 static void ftgmac100_adjust_link(struct net_device *netdev)
805 {
806         struct ftgmac100 *priv = netdev_priv(netdev);
807         struct phy_device *phydev = netdev->phydev;
808         int new_speed;
809
810         /* We store "no link" as speed 0 */
811         if (!phydev->link)
812                 new_speed = 0;
813         else
814                 new_speed = phydev->speed;
815
816         if (phydev->speed == priv->cur_speed &&
817             phydev->duplex == priv->cur_duplex)
818                 return;
819
820         /* Print status if we have a link or we had one and just lost it,
821          * don't print otherwise.
822          */
823         if (new_speed || priv->cur_speed)
824                 phy_print_status(phydev);
825
826         priv->cur_speed = new_speed;
827         priv->cur_duplex = phydev->duplex;
828
829         /* Link is down, do nothing else */
830         if (!new_speed)
831                 return;
832
833         /* Disable all interrupts */
834         iowrite32(0, priv->base + FTGMAC100_OFFSET_IER);
835
836         /* Reset the adapter asynchronously */
837         schedule_work(&priv->reset_task);
838 }
839
840 static int ftgmac100_mii_probe(struct ftgmac100 *priv)
841 {
842         struct net_device *netdev = priv->netdev;
843         struct phy_device *phydev;
844
845         phydev = phy_find_first(priv->mii_bus);
846         if (!phydev) {
847                 netdev_info(netdev, "%s: no PHY found\n", netdev->name);
848                 return -ENODEV;
849         }
850
851         phydev = phy_connect(netdev, phydev_name(phydev),
852                              &ftgmac100_adjust_link, PHY_INTERFACE_MODE_GMII);
853
854         if (IS_ERR(phydev)) {
855                 netdev_err(netdev, "%s: Could not attach to PHY\n", netdev->name);
856                 return PTR_ERR(phydev);
857         }
858
859         return 0;
860 }
861
862 static int ftgmac100_mdiobus_read(struct mii_bus *bus, int phy_addr, int regnum)
863 {
864         struct net_device *netdev = bus->priv;
865         struct ftgmac100 *priv = netdev_priv(netdev);
866         unsigned int phycr;
867         int i;
868
869         phycr = ioread32(priv->base + FTGMAC100_OFFSET_PHYCR);
870
871         /* preserve MDC cycle threshold */
872         phycr &= FTGMAC100_PHYCR_MDC_CYCTHR_MASK;
873
874         phycr |= FTGMAC100_PHYCR_PHYAD(phy_addr) |
875                  FTGMAC100_PHYCR_REGAD(regnum) |
876                  FTGMAC100_PHYCR_MIIRD;
877
878         iowrite32(phycr, priv->base + FTGMAC100_OFFSET_PHYCR);
879
880         for (i = 0; i < 10; i++) {
881                 phycr = ioread32(priv->base + FTGMAC100_OFFSET_PHYCR);
882
883                 if ((phycr & FTGMAC100_PHYCR_MIIRD) == 0) {
884                         int data;
885
886                         data = ioread32(priv->base + FTGMAC100_OFFSET_PHYDATA);
887                         return FTGMAC100_PHYDATA_MIIRDATA(data);
888                 }
889
890                 udelay(100);
891         }
892
893         netdev_err(netdev, "mdio read timed out\n");
894         return -EIO;
895 }
896
897 static int ftgmac100_mdiobus_write(struct mii_bus *bus, int phy_addr,
898                                    int regnum, u16 value)
899 {
900         struct net_device *netdev = bus->priv;
901         struct ftgmac100 *priv = netdev_priv(netdev);
902         unsigned int phycr;
903         int data;
904         int i;
905
906         phycr = ioread32(priv->base + FTGMAC100_OFFSET_PHYCR);
907
908         /* preserve MDC cycle threshold */
909         phycr &= FTGMAC100_PHYCR_MDC_CYCTHR_MASK;
910
911         phycr |= FTGMAC100_PHYCR_PHYAD(phy_addr) |
912                  FTGMAC100_PHYCR_REGAD(regnum) |
913                  FTGMAC100_PHYCR_MIIWR;
914
915         data = FTGMAC100_PHYDATA_MIIWDATA(value);
916
917         iowrite32(data, priv->base + FTGMAC100_OFFSET_PHYDATA);
918         iowrite32(phycr, priv->base + FTGMAC100_OFFSET_PHYCR);
919
920         for (i = 0; i < 10; i++) {
921                 phycr = ioread32(priv->base + FTGMAC100_OFFSET_PHYCR);
922
923                 if ((phycr & FTGMAC100_PHYCR_MIIWR) == 0)
924                         return 0;
925
926                 udelay(100);
927         }
928
929         netdev_err(netdev, "mdio write timed out\n");
930         return -EIO;
931 }
932
933 static void ftgmac100_get_drvinfo(struct net_device *netdev,
934                                   struct ethtool_drvinfo *info)
935 {
936         strlcpy(info->driver, DRV_NAME, sizeof(info->driver));
937         strlcpy(info->version, DRV_VERSION, sizeof(info->version));
938         strlcpy(info->bus_info, dev_name(&netdev->dev), sizeof(info->bus_info));
939 }
940
941 static const struct ethtool_ops ftgmac100_ethtool_ops = {
942         .get_drvinfo            = ftgmac100_get_drvinfo,
943         .get_link               = ethtool_op_get_link,
944         .get_link_ksettings     = phy_ethtool_get_link_ksettings,
945         .set_link_ksettings     = phy_ethtool_set_link_ksettings,
946 };
947
948 static irqreturn_t ftgmac100_interrupt(int irq, void *dev_id)
949 {
950         struct net_device *netdev = dev_id;
951         struct ftgmac100 *priv = netdev_priv(netdev);
952         unsigned int status, new_mask = FTGMAC100_INT_BAD;
953
954         /* Fetch and clear interrupt bits, process abnormal ones */
955         status = ioread32(priv->base + FTGMAC100_OFFSET_ISR);
956         iowrite32(status, priv->base + FTGMAC100_OFFSET_ISR);
957         if (unlikely(status & FTGMAC100_INT_BAD)) {
958
959                 /* RX buffer unavailable */
960                 if (status & FTGMAC100_INT_NO_RXBUF)
961                         netdev->stats.rx_over_errors++;
962
963                 /* received packet lost due to RX FIFO full */
964                 if (status & FTGMAC100_INT_RPKT_LOST)
965                         netdev->stats.rx_fifo_errors++;
966
967                 /* sent packet lost due to excessive TX collision */
968                 if (status & FTGMAC100_INT_XPKT_LOST)
969                         netdev->stats.tx_fifo_errors++;
970
971                 /* AHB error -> Reset the chip */
972                 if (status & FTGMAC100_INT_AHB_ERR) {
973                         if (net_ratelimit())
974                                 netdev_warn(netdev,
975                                            "AHB bus error ! Resetting chip.\n");
976                         iowrite32(0, priv->base + FTGMAC100_OFFSET_IER);
977                         schedule_work(&priv->reset_task);
978                         return IRQ_HANDLED;
979                 }
980
981                 /* We may need to restart the MAC after such errors, delay
982                  * this until after we have freed some Rx buffers though
983                  */
984                 priv->need_mac_restart = true;
985
986                 /* Disable those errors until we restart */
987                 new_mask &= ~status;
988         }
989
990         /* Only enable "bad" interrupts while NAPI is on */
991         iowrite32(new_mask, priv->base + FTGMAC100_OFFSET_IER);
992
993         /* Schedule NAPI bh */
994         napi_schedule_irqoff(&priv->napi);
995
996         return IRQ_HANDLED;
997 }
998
999 static bool ftgmac100_check_rx(struct ftgmac100 *priv)
1000 {
1001         struct ftgmac100_rxdes *rxdes = &priv->descs->rxdes[priv->rx_pointer];
1002
1003         /* Do we have a packet ? */
1004         return !!(rxdes->rxdes0 & cpu_to_le32(FTGMAC100_RXDES0_RXPKT_RDY));
1005 }
1006
1007 static int ftgmac100_poll(struct napi_struct *napi, int budget)
1008 {
1009         struct ftgmac100 *priv = container_of(napi, struct ftgmac100, napi);
1010         bool more, completed = true;
1011         int rx = 0;
1012
1013         ftgmac100_tx_complete(priv);
1014
1015         do {
1016                 more = ftgmac100_rx_packet(priv, &rx);
1017         } while (more && rx < budget);
1018
1019         if (more && rx == budget)
1020                 completed = false;
1021
1022
1023         /* The interrupt is telling us to kick the MAC back to life
1024          * after an RX overflow
1025          */
1026         if (unlikely(priv->need_mac_restart)) {
1027                 ftgmac100_start_hw(priv);
1028
1029                 /* Re-enable "bad" interrupts */
1030                 iowrite32(FTGMAC100_INT_BAD,
1031                           priv->base + FTGMAC100_OFFSET_IER);
1032         }
1033
1034         /* Keep NAPI going if we have still packets to reclaim */
1035         if (priv->tx_pending)
1036                 return budget;
1037
1038         if (completed) {
1039                 /* We are about to re-enable all interrupts. However
1040                  * the HW has been latching RX/TX packet interrupts while
1041                  * they were masked. So we clear them first, then we need
1042                  * to re-check if there's something to process
1043                  */
1044                 iowrite32(FTGMAC100_INT_RXTX,
1045                           priv->base + FTGMAC100_OFFSET_ISR);
1046                 if (ftgmac100_check_rx(priv) || priv->tx_pending)
1047                         return budget;
1048
1049                 /* deschedule NAPI */
1050                 napi_complete(napi);
1051
1052                 /* enable all interrupts */
1053                 iowrite32(FTGMAC100_INT_ALL,
1054                           priv->base + FTGMAC100_OFFSET_IER);
1055         }
1056
1057         return rx;
1058 }
1059
1060 static int ftgmac100_init_all(struct ftgmac100 *priv, bool ignore_alloc_err)
1061 {
1062         int err = 0;
1063
1064         /* Re-init descriptors (adjust queue sizes) */
1065         ftgmac100_init_rings(priv);
1066
1067         /* Realloc rx descriptors */
1068         err = ftgmac100_alloc_rx_buffers(priv);
1069         if (err && !ignore_alloc_err)
1070                 return err;
1071
1072         /* Reinit and restart HW */
1073         ftgmac100_init_hw(priv);
1074         ftgmac100_start_hw(priv);
1075
1076         /* Re-enable the device */
1077         napi_enable(&priv->napi);
1078         netif_start_queue(priv->netdev);
1079
1080         /* Enable all interrupts */
1081         iowrite32(FTGMAC100_INT_ALL, priv->base + FTGMAC100_OFFSET_IER);
1082
1083         return err;
1084 }
1085
1086 static void ftgmac100_reset_task(struct work_struct *work)
1087 {
1088         struct ftgmac100 *priv = container_of(work, struct ftgmac100,
1089                                               reset_task);
1090         struct net_device *netdev = priv->netdev;
1091         int err;
1092
1093         netdev_dbg(netdev, "Resetting NIC...\n");
1094
1095         /* Lock the world */
1096         rtnl_lock();
1097         if (netdev->phydev)
1098                 mutex_lock(&netdev->phydev->lock);
1099         if (priv->mii_bus)
1100                 mutex_lock(&priv->mii_bus->mdio_lock);
1101
1102
1103         /* Check if the interface is still up */
1104         if (!netif_running(netdev))
1105                 goto bail;
1106
1107         /* Stop the network stack */
1108         netif_trans_update(netdev);
1109         napi_disable(&priv->napi);
1110         netif_tx_disable(netdev);
1111
1112         /* Stop and reset the MAC */
1113         ftgmac100_stop_hw(priv);
1114         err = ftgmac100_reset_and_config_mac(priv);
1115         if (err) {
1116                 /* Not much we can do ... it might come back... */
1117                 netdev_err(netdev, "attempting to continue...\n");
1118         }
1119
1120         /* Free all rx and tx buffers */
1121         ftgmac100_free_buffers(priv);
1122
1123         /* Setup everything again and restart chip */
1124         ftgmac100_init_all(priv, true);
1125
1126         netdev_dbg(netdev, "Reset done !\n");
1127  bail:
1128         if (priv->mii_bus)
1129                 mutex_unlock(&priv->mii_bus->mdio_lock);
1130         if (netdev->phydev)
1131                 mutex_unlock(&netdev->phydev->lock);
1132         rtnl_unlock();
1133 }
1134
1135 static int ftgmac100_open(struct net_device *netdev)
1136 {
1137         struct ftgmac100 *priv = netdev_priv(netdev);
1138         int err;
1139
1140         /* Allocate ring buffers  */
1141         err = ftgmac100_alloc_rings(priv);
1142         if (err) {
1143                 netdev_err(netdev, "Failed to allocate descriptors\n");
1144                 return err;
1145         }
1146
1147         /* When using NC-SI we force the speed to 100Mbit/s full duplex,
1148          *
1149          * Otherwise we leave it set to 0 (no link), the link
1150          * message from the PHY layer will handle setting it up to
1151          * something else if needed.
1152          */
1153         if (priv->use_ncsi) {
1154                 priv->cur_duplex = DUPLEX_FULL;
1155                 priv->cur_speed = SPEED_100;
1156         } else {
1157                 priv->cur_duplex = 0;
1158                 priv->cur_speed = 0;
1159         }
1160
1161         /* Reset the hardware */
1162         err = ftgmac100_reset_and_config_mac(priv);
1163         if (err)
1164                 goto err_hw;
1165
1166         /* Initialize NAPI */
1167         netif_napi_add(netdev, &priv->napi, ftgmac100_poll, 64);
1168
1169         /* Grab our interrupt */
1170         err = request_irq(netdev->irq, ftgmac100_interrupt, 0, netdev->name, netdev);
1171         if (err) {
1172                 netdev_err(netdev, "failed to request irq %d\n", netdev->irq);
1173                 goto err_irq;
1174         }
1175
1176         /* Start things up */
1177         err = ftgmac100_init_all(priv, false);
1178         if (err) {
1179                 netdev_err(netdev, "Failed to allocate packet buffers\n");
1180                 goto err_alloc;
1181         }
1182
1183         if (netdev->phydev) {
1184                 /* If we have a PHY, start polling */
1185                 phy_start(netdev->phydev);
1186         } else if (priv->use_ncsi) {
1187                 /* If using NC-SI, set our carrier on and start the stack */
1188                 netif_carrier_on(netdev);
1189
1190                 /* Start the NCSI device */
1191                 err = ncsi_start_dev(priv->ndev);
1192                 if (err)
1193                         goto err_ncsi;
1194         }
1195
1196         return 0;
1197
1198  err_ncsi:
1199         napi_disable(&priv->napi);
1200         netif_stop_queue(netdev);
1201  err_alloc:
1202         ftgmac100_free_buffers(priv);
1203         free_irq(netdev->irq, netdev);
1204  err_irq:
1205         netif_napi_del(&priv->napi);
1206  err_hw:
1207         iowrite32(0, priv->base + FTGMAC100_OFFSET_IER);
1208         ftgmac100_free_rings(priv);
1209         return err;
1210 }
1211
1212 static int ftgmac100_stop(struct net_device *netdev)
1213 {
1214         struct ftgmac100 *priv = netdev_priv(netdev);
1215
1216         /* Note about the reset task: We are called with the rtnl lock
1217          * held, so we are synchronized against the core of the reset
1218          * task. We must not try to synchronously cancel it otherwise
1219          * we can deadlock. But since it will test for netif_running()
1220          * which has already been cleared by the net core, we don't
1221          * anything special to do.
1222          */
1223
1224         /* disable all interrupts */
1225         iowrite32(0, priv->base + FTGMAC100_OFFSET_IER);
1226
1227         netif_stop_queue(netdev);
1228         napi_disable(&priv->napi);
1229         netif_napi_del(&priv->napi);
1230         if (netdev->phydev)
1231                 phy_stop(netdev->phydev);
1232         else if (priv->use_ncsi)
1233                 ncsi_stop_dev(priv->ndev);
1234
1235         ftgmac100_stop_hw(priv);
1236         free_irq(netdev->irq, netdev);
1237         ftgmac100_free_buffers(priv);
1238         ftgmac100_free_rings(priv);
1239
1240         return 0;
1241 }
1242
1243 /* optional */
1244 static int ftgmac100_do_ioctl(struct net_device *netdev, struct ifreq *ifr, int cmd)
1245 {
1246         if (!netdev->phydev)
1247                 return -ENXIO;
1248
1249         return phy_mii_ioctl(netdev->phydev, ifr, cmd);
1250 }
1251
1252 static void ftgmac100_tx_timeout(struct net_device *netdev)
1253 {
1254         struct ftgmac100 *priv = netdev_priv(netdev);
1255
1256         /* Disable all interrupts */
1257         iowrite32(0, priv->base + FTGMAC100_OFFSET_IER);
1258
1259         /* Do the reset outside of interrupt context */
1260         schedule_work(&priv->reset_task);
1261 }
1262
1263 static const struct net_device_ops ftgmac100_netdev_ops = {
1264         .ndo_open               = ftgmac100_open,
1265         .ndo_stop               = ftgmac100_stop,
1266         .ndo_start_xmit         = ftgmac100_hard_start_xmit,
1267         .ndo_set_mac_address    = ftgmac100_set_mac_addr,
1268         .ndo_validate_addr      = eth_validate_addr,
1269         .ndo_do_ioctl           = ftgmac100_do_ioctl,
1270         .ndo_tx_timeout         = ftgmac100_tx_timeout,
1271 };
1272
1273 static int ftgmac100_setup_mdio(struct net_device *netdev)
1274 {
1275         struct ftgmac100 *priv = netdev_priv(netdev);
1276         struct platform_device *pdev = to_platform_device(priv->dev);
1277         int i, err = 0;
1278         u32 reg;
1279
1280         /* initialize mdio bus */
1281         priv->mii_bus = mdiobus_alloc();
1282         if (!priv->mii_bus)
1283                 return -EIO;
1284
1285         if (of_machine_is_compatible("aspeed,ast2400") ||
1286             of_machine_is_compatible("aspeed,ast2500")) {
1287                 /* This driver supports the old MDIO interface */
1288                 reg = ioread32(priv->base + FTGMAC100_OFFSET_REVR);
1289                 reg &= ~FTGMAC100_REVR_NEW_MDIO_INTERFACE;
1290                 iowrite32(reg, priv->base + FTGMAC100_OFFSET_REVR);
1291         };
1292
1293         priv->mii_bus->name = "ftgmac100_mdio";
1294         snprintf(priv->mii_bus->id, MII_BUS_ID_SIZE, "%s-%d",
1295                  pdev->name, pdev->id);
1296         priv->mii_bus->priv = priv->netdev;
1297         priv->mii_bus->read = ftgmac100_mdiobus_read;
1298         priv->mii_bus->write = ftgmac100_mdiobus_write;
1299
1300         for (i = 0; i < PHY_MAX_ADDR; i++)
1301                 priv->mii_bus->irq[i] = PHY_POLL;
1302
1303         err = mdiobus_register(priv->mii_bus);
1304         if (err) {
1305                 dev_err(priv->dev, "Cannot register MDIO bus!\n");
1306                 goto err_register_mdiobus;
1307         }
1308
1309         err = ftgmac100_mii_probe(priv);
1310         if (err) {
1311                 dev_err(priv->dev, "MII Probe failed!\n");
1312                 goto err_mii_probe;
1313         }
1314
1315         return 0;
1316
1317 err_mii_probe:
1318         mdiobus_unregister(priv->mii_bus);
1319 err_register_mdiobus:
1320         mdiobus_free(priv->mii_bus);
1321         return err;
1322 }
1323
1324 static void ftgmac100_destroy_mdio(struct net_device *netdev)
1325 {
1326         struct ftgmac100 *priv = netdev_priv(netdev);
1327
1328         if (!netdev->phydev)
1329                 return;
1330
1331         phy_disconnect(netdev->phydev);
1332         mdiobus_unregister(priv->mii_bus);
1333         mdiobus_free(priv->mii_bus);
1334 }
1335
1336 static void ftgmac100_ncsi_handler(struct ncsi_dev *nd)
1337 {
1338         if (unlikely(nd->state != ncsi_dev_state_functional))
1339                 return;
1340
1341         netdev_info(nd->dev, "NCSI interface %s\n",
1342                     nd->link_up ? "up" : "down");
1343 }
1344
1345 static int ftgmac100_probe(struct platform_device *pdev)
1346 {
1347         struct resource *res;
1348         int irq;
1349         struct net_device *netdev;
1350         struct ftgmac100 *priv;
1351         int err = 0;
1352
1353         if (!pdev)
1354                 return -ENODEV;
1355
1356         res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1357         if (!res)
1358                 return -ENXIO;
1359
1360         irq = platform_get_irq(pdev, 0);
1361         if (irq < 0)
1362                 return irq;
1363
1364         /* setup net_device */
1365         netdev = alloc_etherdev(sizeof(*priv));
1366         if (!netdev) {
1367                 err = -ENOMEM;
1368                 goto err_alloc_etherdev;
1369         }
1370
1371         SET_NETDEV_DEV(netdev, &pdev->dev);
1372
1373         netdev->ethtool_ops = &ftgmac100_ethtool_ops;
1374         netdev->netdev_ops = &ftgmac100_netdev_ops;
1375         netdev->watchdog_timeo = 5 * HZ;
1376
1377         platform_set_drvdata(pdev, netdev);
1378
1379         /* setup private data */
1380         priv = netdev_priv(netdev);
1381         priv->netdev = netdev;
1382         priv->dev = &pdev->dev;
1383         INIT_WORK(&priv->reset_task, ftgmac100_reset_task);
1384
1385         spin_lock_init(&priv->tx_lock);
1386
1387         /* map io memory */
1388         priv->res = request_mem_region(res->start, resource_size(res),
1389                                        dev_name(&pdev->dev));
1390         if (!priv->res) {
1391                 dev_err(&pdev->dev, "Could not reserve memory region\n");
1392                 err = -ENOMEM;
1393                 goto err_req_mem;
1394         }
1395
1396         priv->base = ioremap(res->start, resource_size(res));
1397         if (!priv->base) {
1398                 dev_err(&pdev->dev, "Failed to ioremap ethernet registers\n");
1399                 err = -EIO;
1400                 goto err_ioremap;
1401         }
1402
1403         netdev->irq = irq;
1404
1405         /* MAC address from chip or random one */
1406         ftgmac100_setup_mac(priv);
1407
1408         if (of_machine_is_compatible("aspeed,ast2400") ||
1409             of_machine_is_compatible("aspeed,ast2500")) {
1410                 priv->rxdes0_edorr_mask = BIT(30);
1411                 priv->txdes0_edotr_mask = BIT(30);
1412         } else {
1413                 priv->rxdes0_edorr_mask = BIT(15);
1414                 priv->txdes0_edotr_mask = BIT(15);
1415         }
1416
1417         if (pdev->dev.of_node &&
1418             of_get_property(pdev->dev.of_node, "use-ncsi", NULL)) {
1419                 if (!IS_ENABLED(CONFIG_NET_NCSI)) {
1420                         dev_err(&pdev->dev, "NCSI stack not enabled\n");
1421                         goto err_ncsi_dev;
1422                 }
1423
1424                 dev_info(&pdev->dev, "Using NCSI interface\n");
1425                 priv->use_ncsi = true;
1426                 priv->ndev = ncsi_register_dev(netdev, ftgmac100_ncsi_handler);
1427                 if (!priv->ndev)
1428                         goto err_ncsi_dev;
1429         } else {
1430                 priv->use_ncsi = false;
1431                 err = ftgmac100_setup_mdio(netdev);
1432                 if (err)
1433                         goto err_setup_mdio;
1434         }
1435
1436         /* We have to disable on-chip IP checksum functionality
1437          * when NCSI is enabled on the interface. It doesn't work
1438          * in that case.
1439          */
1440         netdev->features = NETIF_F_RXCSUM | NETIF_F_IP_CSUM | NETIF_F_GRO;
1441         if (priv->use_ncsi &&
1442             of_get_property(pdev->dev.of_node, "no-hw-checksum", NULL))
1443                 netdev->features &= ~NETIF_F_IP_CSUM;
1444
1445
1446         /* register network device */
1447         err = register_netdev(netdev);
1448         if (err) {
1449                 dev_err(&pdev->dev, "Failed to register netdev\n");
1450                 goto err_register_netdev;
1451         }
1452
1453         netdev_info(netdev, "irq %d, mapped at %p\n", netdev->irq, priv->base);
1454
1455         return 0;
1456
1457 err_ncsi_dev:
1458 err_register_netdev:
1459         ftgmac100_destroy_mdio(netdev);
1460 err_setup_mdio:
1461         iounmap(priv->base);
1462 err_ioremap:
1463         release_resource(priv->res);
1464 err_req_mem:
1465         netif_napi_del(&priv->napi);
1466         free_netdev(netdev);
1467 err_alloc_etherdev:
1468         return err;
1469 }
1470
1471 static int ftgmac100_remove(struct platform_device *pdev)
1472 {
1473         struct net_device *netdev;
1474         struct ftgmac100 *priv;
1475
1476         netdev = platform_get_drvdata(pdev);
1477         priv = netdev_priv(netdev);
1478
1479         unregister_netdev(netdev);
1480
1481         /* There's a small chance the reset task will have been re-queued,
1482          * during stop, make sure it's gone before we free the structure.
1483          */
1484         cancel_work_sync(&priv->reset_task);
1485
1486         ftgmac100_destroy_mdio(netdev);
1487
1488         iounmap(priv->base);
1489         release_resource(priv->res);
1490
1491         netif_napi_del(&priv->napi);
1492         free_netdev(netdev);
1493         return 0;
1494 }
1495
1496 static const struct of_device_id ftgmac100_of_match[] = {
1497         { .compatible = "faraday,ftgmac100" },
1498         { }
1499 };
1500 MODULE_DEVICE_TABLE(of, ftgmac100_of_match);
1501
1502 static struct platform_driver ftgmac100_driver = {
1503         .probe  = ftgmac100_probe,
1504         .remove = ftgmac100_remove,
1505         .driver = {
1506                 .name           = DRV_NAME,
1507                 .of_match_table = ftgmac100_of_match,
1508         },
1509 };
1510 module_platform_driver(ftgmac100_driver);
1511
1512 MODULE_AUTHOR("Po-Yu Chuang <ratbert@faraday-tech.com>");
1513 MODULE_DESCRIPTION("FTGMAC100 driver");
1514 MODULE_LICENSE("GPL");