1
2
3
4
5
6
7
8
9
10
11#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
12#include <linux/clk.h>
13#include <linux/module.h>
14#include <linux/moduleparam.h>
15#include <linux/kernel.h>
16#include <linux/types.h>
17#include <linux/circ_buf.h>
18#include <linux/slab.h>
19#include <linux/init.h>
20#include <linux/gpio.h>
21#include <linux/interrupt.h>
22#include <linux/netdevice.h>
23#include <linux/etherdevice.h>
24#include <linux/dma-mapping.h>
25#include <linux/platform_data/macb.h>
26#include <linux/platform_device.h>
27#include <linux/phy.h>
28#include <linux/of.h>
29#include <linux/of_device.h>
30#include <linux/of_net.h>
31#include <linux/pinctrl/consumer.h>
32
33#include "macb.h"
34
35#define RX_BUFFER_SIZE 128
36#define RX_RING_SIZE 512
37#define RX_RING_BYTES (sizeof(struct macb_dma_desc) * RX_RING_SIZE)
38
39#define TX_RING_SIZE 128
40#define TX_RING_BYTES (sizeof(struct macb_dma_desc) * TX_RING_SIZE)
41
42
43#define MACB_TX_WAKEUP_THRESH (3 * TX_RING_SIZE / 4)
44
45#define MACB_RX_INT_FLAGS (MACB_BIT(RCOMP) | MACB_BIT(RXUBR) \
46 | MACB_BIT(ISR_ROVR))
47#define MACB_TX_ERR_FLAGS (MACB_BIT(ISR_TUND) \
48 | MACB_BIT(ISR_RLE) \
49 | MACB_BIT(TXERR))
50#define MACB_TX_INT_FLAGS (MACB_TX_ERR_FLAGS | MACB_BIT(TCOMP))
51
52
53
54
55
56#define MACB_HALT_TIMEOUT 1230
57
58
59static unsigned int macb_tx_ring_wrap(unsigned int index)
60{
61 return index & (TX_RING_SIZE - 1);
62}
63
64static struct macb_dma_desc *macb_tx_desc(struct macb *bp, unsigned int index)
65{
66 return &bp->tx_ring[macb_tx_ring_wrap(index)];
67}
68
69static struct macb_tx_skb *macb_tx_skb(struct macb *bp, unsigned int index)
70{
71 return &bp->tx_skb[macb_tx_ring_wrap(index)];
72}
73
74static dma_addr_t macb_tx_dma(struct macb *bp, unsigned int index)
75{
76 dma_addr_t offset;
77
78 offset = macb_tx_ring_wrap(index) * sizeof(struct macb_dma_desc);
79
80 return bp->tx_ring_dma + offset;
81}
82
83static unsigned int macb_rx_ring_wrap(unsigned int index)
84{
85 return index & (RX_RING_SIZE - 1);
86}
87
88static struct macb_dma_desc *macb_rx_desc(struct macb *bp, unsigned int index)
89{
90 return &bp->rx_ring[macb_rx_ring_wrap(index)];
91}
92
93static void *macb_rx_buffer(struct macb *bp, unsigned int index)
94{
95 return bp->rx_buffers + RX_BUFFER_SIZE * macb_rx_ring_wrap(index);
96}
97
98void macb_set_hwaddr(struct macb *bp)
99{
100 u32 bottom;
101 u16 top;
102
103 bottom = cpu_to_le32(*((u32 *)bp->dev->dev_addr));
104 macb_or_gem_writel(bp, SA1B, bottom);
105 top = cpu_to_le16(*((u16 *)(bp->dev->dev_addr + 4)));
106 macb_or_gem_writel(bp, SA1T, top);
107
108
109 macb_or_gem_writel(bp, SA2B, 0);
110 macb_or_gem_writel(bp, SA2T, 0);
111 macb_or_gem_writel(bp, SA3B, 0);
112 macb_or_gem_writel(bp, SA3T, 0);
113 macb_or_gem_writel(bp, SA4B, 0);
114 macb_or_gem_writel(bp, SA4T, 0);
115}
116EXPORT_SYMBOL_GPL(macb_set_hwaddr);
117
118void macb_get_hwaddr(struct macb *bp)
119{
120 struct macb_platform_data *pdata;
121 u32 bottom;
122 u16 top;
123 u8 addr[6];
124 int i;
125
126 pdata = bp->pdev->dev.platform_data;
127
128
129 for (i = 0; i < 4; i++) {
130 bottom = macb_or_gem_readl(bp, SA1B + i * 8);
131 top = macb_or_gem_readl(bp, SA1T + i * 8);
132
133 if (pdata && pdata->rev_eth_addr) {
134 addr[5] = bottom & 0xff;
135 addr[4] = (bottom >> 8) & 0xff;
136 addr[3] = (bottom >> 16) & 0xff;
137 addr[2] = (bottom >> 24) & 0xff;
138 addr[1] = top & 0xff;
139 addr[0] = (top & 0xff00) >> 8;
140 } else {
141 addr[0] = bottom & 0xff;
142 addr[1] = (bottom >> 8) & 0xff;
143 addr[2] = (bottom >> 16) & 0xff;
144 addr[3] = (bottom >> 24) & 0xff;
145 addr[4] = top & 0xff;
146 addr[5] = (top >> 8) & 0xff;
147 }
148
149 if (is_valid_ether_addr(addr)) {
150 memcpy(bp->dev->dev_addr, addr, sizeof(addr));
151 return;
152 }
153 }
154
155 netdev_info(bp->dev, "invalid hw address, using random\n");
156 eth_hw_addr_random(bp->dev);
157}
158EXPORT_SYMBOL_GPL(macb_get_hwaddr);
159
160static int macb_mdio_read(struct mii_bus *bus, int mii_id, int regnum)
161{
162 struct macb *bp = bus->priv;
163 int value;
164
165 macb_writel(bp, MAN, (MACB_BF(SOF, MACB_MAN_SOF)
166 | MACB_BF(RW, MACB_MAN_READ)
167 | MACB_BF(PHYA, mii_id)
168 | MACB_BF(REGA, regnum)
169 | MACB_BF(CODE, MACB_MAN_CODE)));
170
171
172 while (!MACB_BFEXT(IDLE, macb_readl(bp, NSR)))
173 cpu_relax();
174
175 value = MACB_BFEXT(DATA, macb_readl(bp, MAN));
176
177 return value;
178}
179
180static int macb_mdio_write(struct mii_bus *bus, int mii_id, int regnum,
181 u16 value)
182{
183 struct macb *bp = bus->priv;
184
185 macb_writel(bp, MAN, (MACB_BF(SOF, MACB_MAN_SOF)
186 | MACB_BF(RW, MACB_MAN_WRITE)
187 | MACB_BF(PHYA, mii_id)
188 | MACB_BF(REGA, regnum)
189 | MACB_BF(CODE, MACB_MAN_CODE)
190 | MACB_BF(DATA, value)));
191
192
193 while (!MACB_BFEXT(IDLE, macb_readl(bp, NSR)))
194 cpu_relax();
195
196 return 0;
197}
198
199static int macb_mdio_reset(struct mii_bus *bus)
200{
201 return 0;
202}
203
204static void macb_handle_link_change(struct net_device *dev)
205{
206 struct macb *bp = netdev_priv(dev);
207 struct phy_device *phydev = bp->phy_dev;
208 unsigned long flags;
209
210 int status_change = 0;
211
212 spin_lock_irqsave(&bp->lock, flags);
213
214 if (phydev->link) {
215 if ((bp->speed != phydev->speed) ||
216 (bp->duplex != phydev->duplex)) {
217 u32 reg;
218
219 reg = macb_readl(bp, NCFGR);
220 reg &= ~(MACB_BIT(SPD) | MACB_BIT(FD));
221 if (macb_is_gem(bp))
222 reg &= ~GEM_BIT(GBE);
223
224 if (phydev->duplex)
225 reg |= MACB_BIT(FD);
226 if (phydev->speed == SPEED_100)
227 reg |= MACB_BIT(SPD);
228 if (phydev->speed == SPEED_1000)
229 reg |= GEM_BIT(GBE);
230
231 macb_or_gem_writel(bp, NCFGR, reg);
232
233 bp->speed = phydev->speed;
234 bp->duplex = phydev->duplex;
235 status_change = 1;
236 }
237 }
238
239 if (phydev->link != bp->link) {
240 if (!phydev->link) {
241 bp->speed = 0;
242 bp->duplex = -1;
243 }
244 bp->link = phydev->link;
245
246 status_change = 1;
247 }
248
249 spin_unlock_irqrestore(&bp->lock, flags);
250
251 if (status_change) {
252 if (phydev->link) {
253 netif_carrier_on(dev);
254 netdev_info(dev, "link up (%d/%s)\n",
255 phydev->speed,
256 phydev->duplex == DUPLEX_FULL ?
257 "Full" : "Half");
258 } else {
259 netif_carrier_off(dev);
260 netdev_info(dev, "link down\n");
261 }
262 }
263}
264
265
266static int macb_mii_probe(struct net_device *dev)
267{
268 struct macb *bp = netdev_priv(dev);
269 struct macb_platform_data *pdata;
270 struct phy_device *phydev;
271 int phy_irq;
272 int ret;
273
274 phydev = phy_find_first(bp->mii_bus);
275 if (!phydev) {
276 netdev_err(dev, "no PHY found\n");
277 return -1;
278 }
279
280 pdata = dev_get_platdata(&bp->pdev->dev);
281 if (pdata && gpio_is_valid(pdata->phy_irq_pin)) {
282 ret = devm_gpio_request(&bp->pdev->dev, pdata->phy_irq_pin, "phy int");
283 if (!ret) {
284 phy_irq = gpio_to_irq(pdata->phy_irq_pin);
285 phydev->irq = (phy_irq < 0) ? PHY_POLL : phy_irq;
286 }
287 }
288
289
290 ret = phy_connect_direct(dev, phydev, &macb_handle_link_change,
291 bp->phy_interface);
292 if (ret) {
293 netdev_err(dev, "Could not attach to PHY\n");
294 return ret;
295 }
296
297
298 if (macb_is_gem(bp))
299 phydev->supported &= PHY_GBIT_FEATURES;
300 else
301 phydev->supported &= PHY_BASIC_FEATURES;
302
303 phydev->advertising = phydev->supported;
304
305 bp->link = 0;
306 bp->speed = 0;
307 bp->duplex = -1;
308 bp->phy_dev = phydev;
309
310 return 0;
311}
312
313int macb_mii_init(struct macb *bp)
314{
315 struct macb_platform_data *pdata;
316 int err = -ENXIO, i;
317
318
319 macb_writel(bp, NCR, MACB_BIT(MPE));
320
321 bp->mii_bus = mdiobus_alloc();
322 if (bp->mii_bus == NULL) {
323 err = -ENOMEM;
324 goto err_out;
325 }
326
327 bp->mii_bus->name = "MACB_mii_bus";
328 bp->mii_bus->read = &macb_mdio_read;
329 bp->mii_bus->write = &macb_mdio_write;
330 bp->mii_bus->reset = &macb_mdio_reset;
331 snprintf(bp->mii_bus->id, MII_BUS_ID_SIZE, "%s-%x",
332 bp->pdev->name, bp->pdev->id);
333 bp->mii_bus->priv = bp;
334 bp->mii_bus->parent = &bp->dev->dev;
335 pdata = bp->pdev->dev.platform_data;
336
337 if (pdata)
338 bp->mii_bus->phy_mask = pdata->phy_mask;
339
340 bp->mii_bus->irq = kmalloc(sizeof(int)*PHY_MAX_ADDR, GFP_KERNEL);
341 if (!bp->mii_bus->irq) {
342 err = -ENOMEM;
343 goto err_out_free_mdiobus;
344 }
345
346 for (i = 0; i < PHY_MAX_ADDR; i++)
347 bp->mii_bus->irq[i] = PHY_POLL;
348
349 dev_set_drvdata(&bp->dev->dev, bp->mii_bus);
350
351 if (mdiobus_register(bp->mii_bus))
352 goto err_out_free_mdio_irq;
353
354 if (macb_mii_probe(bp->dev) != 0) {
355 goto err_out_unregister_bus;
356 }
357
358 return 0;
359
360err_out_unregister_bus:
361 mdiobus_unregister(bp->mii_bus);
362err_out_free_mdio_irq:
363 kfree(bp->mii_bus->irq);
364err_out_free_mdiobus:
365 mdiobus_free(bp->mii_bus);
366err_out:
367 return err;
368}
369EXPORT_SYMBOL_GPL(macb_mii_init);
370
371static void macb_update_stats(struct macb *bp)
372{
373 u32 __iomem *reg = bp->regs + MACB_PFR;
374 u32 *p = &bp->hw_stats.macb.rx_pause_frames;
375 u32 *end = &bp->hw_stats.macb.tx_pause_frames + 1;
376
377 WARN_ON((unsigned long)(end - p - 1) != (MACB_TPF - MACB_PFR) / 4);
378
379 for(; p < end; p++, reg++)
380 *p += __raw_readl(reg);
381}
382
383static int macb_halt_tx(struct macb *bp)
384{
385 unsigned long halt_time, timeout;
386 u32 status;
387
388 macb_writel(bp, NCR, macb_readl(bp, NCR) | MACB_BIT(THALT));
389
390 timeout = jiffies + usecs_to_jiffies(MACB_HALT_TIMEOUT);
391 do {
392 halt_time = jiffies;
393 status = macb_readl(bp, TSR);
394 if (!(status & MACB_BIT(TGO)))
395 return 0;
396
397 usleep_range(10, 250);
398 } while (time_before(halt_time, timeout));
399
400 return -ETIMEDOUT;
401}
402
403static void macb_tx_error_task(struct work_struct *work)
404{
405 struct macb *bp = container_of(work, struct macb, tx_error_task);
406 struct macb_tx_skb *tx_skb;
407 struct sk_buff *skb;
408 unsigned int tail;
409
410 netdev_vdbg(bp->dev, "macb_tx_error_task: t = %u, h = %u\n",
411 bp->tx_tail, bp->tx_head);
412
413
414 netif_stop_queue(bp->dev);
415
416
417
418
419
420 if (macb_halt_tx(bp))
421
422 netdev_err(bp->dev, "BUG: halt tx timed out\n");
423
424
425
426
427
428
429
430 for (tail = bp->tx_tail; tail != bp->tx_head; tail++) {
431 struct macb_dma_desc *desc;
432 u32 ctrl;
433
434 desc = macb_tx_desc(bp, tail);
435 ctrl = desc->ctrl;
436 tx_skb = macb_tx_skb(bp, tail);
437 skb = tx_skb->skb;
438
439 if (ctrl & MACB_BIT(TX_USED)) {
440 netdev_vdbg(bp->dev, "txerr skb %u (data %p) TX complete\n",
441 macb_tx_ring_wrap(tail), skb->data);
442 bp->stats.tx_packets++;
443 bp->stats.tx_bytes += skb->len;
444 } else {
445
446
447
448
449
450 if (ctrl & MACB_BIT(TX_BUF_EXHAUSTED))
451 netdev_err(bp->dev,
452 "BUG: TX buffers exhausted mid-frame\n");
453
454 desc->ctrl = ctrl | MACB_BIT(TX_USED);
455 }
456
457 dma_unmap_single(&bp->pdev->dev, tx_skb->mapping, skb->len,
458 DMA_TO_DEVICE);
459 tx_skb->skb = NULL;
460 dev_kfree_skb(skb);
461 }
462
463
464 wmb();
465
466
467 macb_writel(bp, TBQP, bp->tx_ring_dma);
468
469 bp->tx_head = bp->tx_tail = 0;
470
471
472 netif_wake_queue(bp->dev);
473
474
475 macb_writel(bp, TSR, macb_readl(bp, TSR));
476 macb_writel(bp, IER, MACB_TX_INT_FLAGS);
477}
478
479static void macb_tx_interrupt(struct macb *bp)
480{
481 unsigned int tail;
482 unsigned int head;
483 u32 status;
484
485 status = macb_readl(bp, TSR);
486 macb_writel(bp, TSR, status);
487
488 netdev_vdbg(bp->dev, "macb_tx_interrupt status = 0x%03lx\n",
489 (unsigned long)status);
490
491 head = bp->tx_head;
492 for (tail = bp->tx_tail; tail != head; tail++) {
493 struct macb_tx_skb *tx_skb;
494 struct sk_buff *skb;
495 struct macb_dma_desc *desc;
496 u32 ctrl;
497
498 desc = macb_tx_desc(bp, tail);
499
500
501 rmb();
502
503 ctrl = desc->ctrl;
504
505 if (!(ctrl & MACB_BIT(TX_USED)))
506 break;
507
508 tx_skb = macb_tx_skb(bp, tail);
509 skb = tx_skb->skb;
510
511 netdev_vdbg(bp->dev, "skb %u (data %p) TX complete\n",
512 macb_tx_ring_wrap(tail), skb->data);
513 dma_unmap_single(&bp->pdev->dev, tx_skb->mapping, skb->len,
514 DMA_TO_DEVICE);
515 bp->stats.tx_packets++;
516 bp->stats.tx_bytes += skb->len;
517 tx_skb->skb = NULL;
518 dev_kfree_skb_irq(skb);
519 }
520
521 bp->tx_tail = tail;
522 if (netif_queue_stopped(bp->dev)
523 && CIRC_CNT(bp->tx_head, bp->tx_tail,
524 TX_RING_SIZE) <= MACB_TX_WAKEUP_THRESH)
525 netif_wake_queue(bp->dev);
526}
527
528static int macb_rx_frame(struct macb *bp, unsigned int first_frag,
529 unsigned int last_frag)
530{
531 unsigned int len;
532 unsigned int frag;
533 unsigned int offset;
534 struct sk_buff *skb;
535 struct macb_dma_desc *desc;
536
537 desc = macb_rx_desc(bp, last_frag);
538 len = MACB_BFEXT(RX_FRMLEN, desc->ctrl);
539
540 netdev_vdbg(bp->dev, "macb_rx_frame frags %u - %u (len %u)\n",
541 macb_rx_ring_wrap(first_frag),
542 macb_rx_ring_wrap(last_frag), len);
543
544
545
546
547
548
549
550
551
552
553 skb = netdev_alloc_skb(bp->dev, len + NET_IP_ALIGN);
554 if (!skb) {
555 bp->stats.rx_dropped++;
556 for (frag = first_frag; ; frag++) {
557 desc = macb_rx_desc(bp, frag);
558 desc->addr &= ~MACB_BIT(RX_USED);
559 if (frag == last_frag)
560 break;
561 }
562
563
564 wmb();
565
566 return 1;
567 }
568
569 offset = 0;
570 len += NET_IP_ALIGN;
571 skb_checksum_none_assert(skb);
572 skb_put(skb, len);
573
574 for (frag = first_frag; ; frag++) {
575 unsigned int frag_len = RX_BUFFER_SIZE;
576
577 if (offset + frag_len > len) {
578 BUG_ON(frag != last_frag);
579 frag_len = len - offset;
580 }
581 skb_copy_to_linear_data_offset(skb, offset,
582 macb_rx_buffer(bp, frag), frag_len);
583 offset += RX_BUFFER_SIZE;
584 desc = macb_rx_desc(bp, frag);
585 desc->addr &= ~MACB_BIT(RX_USED);
586
587 if (frag == last_frag)
588 break;
589 }
590
591
592 wmb();
593
594 __skb_pull(skb, NET_IP_ALIGN);
595 skb->protocol = eth_type_trans(skb, bp->dev);
596
597 bp->stats.rx_packets++;
598 bp->stats.rx_bytes += skb->len;
599 netdev_vdbg(bp->dev, "received skb of length %u, csum: %08x\n",
600 skb->len, skb->csum);
601 netif_receive_skb(skb);
602
603 return 0;
604}
605
606
607static void discard_partial_frame(struct macb *bp, unsigned int begin,
608 unsigned int end)
609{
610 unsigned int frag;
611
612 for (frag = begin; frag != end; frag++) {
613 struct macb_dma_desc *desc = macb_rx_desc(bp, frag);
614 desc->addr &= ~MACB_BIT(RX_USED);
615 }
616
617
618 wmb();
619
620
621
622
623
624
625}
626
627static int macb_rx(struct macb *bp, int budget)
628{
629 int received = 0;
630 unsigned int tail;
631 int first_frag = -1;
632
633 for (tail = bp->rx_tail; budget > 0; tail++) {
634 struct macb_dma_desc *desc = macb_rx_desc(bp, tail);
635 u32 addr, ctrl;
636
637
638 rmb();
639
640 addr = desc->addr;
641 ctrl = desc->ctrl;
642
643 if (!(addr & MACB_BIT(RX_USED)))
644 break;
645
646 if (ctrl & MACB_BIT(RX_SOF)) {
647 if (first_frag != -1)
648 discard_partial_frame(bp, first_frag, tail);
649 first_frag = tail;
650 }
651
652 if (ctrl & MACB_BIT(RX_EOF)) {
653 int dropped;
654 BUG_ON(first_frag == -1);
655
656 dropped = macb_rx_frame(bp, first_frag, tail);
657 first_frag = -1;
658 if (!dropped) {
659 received++;
660 budget--;
661 }
662 }
663 }
664
665 if (first_frag != -1)
666 bp->rx_tail = first_frag;
667 else
668 bp->rx_tail = tail;
669
670 return received;
671}
672
673static int macb_poll(struct napi_struct *napi, int budget)
674{
675 struct macb *bp = container_of(napi, struct macb, napi);
676 int work_done;
677 u32 status;
678
679 status = macb_readl(bp, RSR);
680 macb_writel(bp, RSR, status);
681
682 work_done = 0;
683
684 netdev_vdbg(bp->dev, "poll: status = %08lx, budget = %d\n",
685 (unsigned long)status, budget);
686
687 work_done = macb_rx(bp, budget);
688 if (work_done < budget) {
689 napi_complete(napi);
690
691
692
693
694
695 macb_writel(bp, IER, MACB_RX_INT_FLAGS);
696
697
698 status = macb_readl(bp, RSR);
699 if (unlikely(status))
700 napi_reschedule(napi);
701 }
702
703
704
705 return work_done;
706}
707
708static irqreturn_t macb_interrupt(int irq, void *dev_id)
709{
710 struct net_device *dev = dev_id;
711 struct macb *bp = netdev_priv(dev);
712 u32 status;
713
714 status = macb_readl(bp, ISR);
715
716 if (unlikely(!status))
717 return IRQ_NONE;
718
719 spin_lock(&bp->lock);
720
721 while (status) {
722
723 if (unlikely(!netif_running(dev))) {
724 macb_writel(bp, IDR, -1);
725 break;
726 }
727
728 netdev_vdbg(bp->dev, "isr = 0x%08lx\n", (unsigned long)status);
729
730 if (status & MACB_RX_INT_FLAGS) {
731
732
733
734
735
736
737
738 macb_writel(bp, IDR, MACB_RX_INT_FLAGS);
739
740 if (napi_schedule_prep(&bp->napi)) {
741 netdev_vdbg(bp->dev, "scheduling RX softirq\n");
742 __napi_schedule(&bp->napi);
743 }
744 }
745
746 if (unlikely(status & (MACB_TX_ERR_FLAGS))) {
747 macb_writel(bp, IDR, MACB_TX_INT_FLAGS);
748 schedule_work(&bp->tx_error_task);
749 break;
750 }
751
752 if (status & MACB_BIT(TCOMP))
753 macb_tx_interrupt(bp);
754
755
756
757
758
759
760 if (status & MACB_BIT(ISR_ROVR)) {
761
762 if (macb_is_gem(bp))
763 bp->hw_stats.gem.rx_overruns++;
764 else
765 bp->hw_stats.macb.rx_overruns++;
766 }
767
768 if (status & MACB_BIT(HRESP)) {
769
770
771
772
773
774 netdev_err(dev, "DMA bus error: HRESP not OK\n");
775 }
776
777 status = macb_readl(bp, ISR);
778 }
779
780 spin_unlock(&bp->lock);
781
782 return IRQ_HANDLED;
783}
784
785#ifdef CONFIG_NET_POLL_CONTROLLER
786
787
788
789
790static void macb_poll_controller(struct net_device *dev)
791{
792 unsigned long flags;
793
794 local_irq_save(flags);
795 macb_interrupt(dev->irq, dev);
796 local_irq_restore(flags);
797}
798#endif
799
800static int macb_start_xmit(struct sk_buff *skb, struct net_device *dev)
801{
802 struct macb *bp = netdev_priv(dev);
803 dma_addr_t mapping;
804 unsigned int len, entry;
805 struct macb_dma_desc *desc;
806 struct macb_tx_skb *tx_skb;
807 u32 ctrl;
808 unsigned long flags;
809
810#if defined(DEBUG) && defined(VERBOSE_DEBUG)
811 netdev_vdbg(bp->dev,
812 "start_xmit: len %u head %p data %p tail %p end %p\n",
813 skb->len, skb->head, skb->data,
814 skb_tail_pointer(skb), skb_end_pointer(skb));
815 print_hex_dump(KERN_DEBUG, "data: ", DUMP_PREFIX_OFFSET, 16, 1,
816 skb->data, 16, true);
817#endif
818
819 len = skb->len;
820 spin_lock_irqsave(&bp->lock, flags);
821
822
823 if (CIRC_SPACE(bp->tx_head, bp->tx_tail, TX_RING_SIZE) < 1) {
824 netif_stop_queue(dev);
825 spin_unlock_irqrestore(&bp->lock, flags);
826 netdev_err(bp->dev, "BUG! Tx Ring full when queue awake!\n");
827 netdev_dbg(bp->dev, "tx_head = %u, tx_tail = %u\n",
828 bp->tx_head, bp->tx_tail);
829 return NETDEV_TX_BUSY;
830 }
831
832 entry = macb_tx_ring_wrap(bp->tx_head);
833 bp->tx_head++;
834 netdev_vdbg(bp->dev, "Allocated ring entry %u\n", entry);
835 mapping = dma_map_single(&bp->pdev->dev, skb->data,
836 len, DMA_TO_DEVICE);
837
838 tx_skb = &bp->tx_skb[entry];
839 tx_skb->skb = skb;
840 tx_skb->mapping = mapping;
841 netdev_vdbg(bp->dev, "Mapped skb data %p to DMA addr %08lx\n",
842 skb->data, (unsigned long)mapping);
843
844 ctrl = MACB_BF(TX_FRMLEN, len);
845 ctrl |= MACB_BIT(TX_LAST);
846 if (entry == (TX_RING_SIZE - 1))
847 ctrl |= MACB_BIT(TX_WRAP);
848
849 desc = &bp->tx_ring[entry];
850 desc->addr = mapping;
851 desc->ctrl = ctrl;
852
853
854 wmb();
855
856 skb_tx_timestamp(skb);
857
858 macb_writel(bp, NCR, macb_readl(bp, NCR) | MACB_BIT(TSTART));
859
860 if (CIRC_SPACE(bp->tx_head, bp->tx_tail, TX_RING_SIZE) < 1)
861 netif_stop_queue(dev);
862
863 spin_unlock_irqrestore(&bp->lock, flags);
864
865 return NETDEV_TX_OK;
866}
867
868static void macb_free_consistent(struct macb *bp)
869{
870 if (bp->tx_skb) {
871 kfree(bp->tx_skb);
872 bp->tx_skb = NULL;
873 }
874 if (bp->rx_ring) {
875 dma_free_coherent(&bp->pdev->dev, RX_RING_BYTES,
876 bp->rx_ring, bp->rx_ring_dma);
877 bp->rx_ring = NULL;
878 }
879 if (bp->tx_ring) {
880 dma_free_coherent(&bp->pdev->dev, TX_RING_BYTES,
881 bp->tx_ring, bp->tx_ring_dma);
882 bp->tx_ring = NULL;
883 }
884 if (bp->rx_buffers) {
885 dma_free_coherent(&bp->pdev->dev,
886 RX_RING_SIZE * RX_BUFFER_SIZE,
887 bp->rx_buffers, bp->rx_buffers_dma);
888 bp->rx_buffers = NULL;
889 }
890}
891
892static int macb_alloc_consistent(struct macb *bp)
893{
894 int size;
895
896 size = TX_RING_SIZE * sizeof(struct macb_tx_skb);
897 bp->tx_skb = kmalloc(size, GFP_KERNEL);
898 if (!bp->tx_skb)
899 goto out_err;
900
901 size = RX_RING_BYTES;
902 bp->rx_ring = dma_alloc_coherent(&bp->pdev->dev, size,
903 &bp->rx_ring_dma, GFP_KERNEL);
904 if (!bp->rx_ring)
905 goto out_err;
906 netdev_dbg(bp->dev,
907 "Allocated RX ring of %d bytes at %08lx (mapped %p)\n",
908 size, (unsigned long)bp->rx_ring_dma, bp->rx_ring);
909
910 size = TX_RING_BYTES;
911 bp->tx_ring = dma_alloc_coherent(&bp->pdev->dev, size,
912 &bp->tx_ring_dma, GFP_KERNEL);
913 if (!bp->tx_ring)
914 goto out_err;
915 netdev_dbg(bp->dev,
916 "Allocated TX ring of %d bytes at %08lx (mapped %p)\n",
917 size, (unsigned long)bp->tx_ring_dma, bp->tx_ring);
918
919 size = RX_RING_SIZE * RX_BUFFER_SIZE;
920 bp->rx_buffers = dma_alloc_coherent(&bp->pdev->dev, size,
921 &bp->rx_buffers_dma, GFP_KERNEL);
922 if (!bp->rx_buffers)
923 goto out_err;
924 netdev_dbg(bp->dev,
925 "Allocated RX buffers of %d bytes at %08lx (mapped %p)\n",
926 size, (unsigned long)bp->rx_buffers_dma, bp->rx_buffers);
927
928 return 0;
929
930out_err:
931 macb_free_consistent(bp);
932 return -ENOMEM;
933}
934
935static void macb_init_rings(struct macb *bp)
936{
937 int i;
938 dma_addr_t addr;
939
940 addr = bp->rx_buffers_dma;
941 for (i = 0; i < RX_RING_SIZE; i++) {
942 bp->rx_ring[i].addr = addr;
943 bp->rx_ring[i].ctrl = 0;
944 addr += RX_BUFFER_SIZE;
945 }
946 bp->rx_ring[RX_RING_SIZE - 1].addr |= MACB_BIT(RX_WRAP);
947
948 for (i = 0; i < TX_RING_SIZE; i++) {
949 bp->tx_ring[i].addr = 0;
950 bp->tx_ring[i].ctrl = MACB_BIT(TX_USED);
951 }
952 bp->tx_ring[TX_RING_SIZE - 1].ctrl |= MACB_BIT(TX_WRAP);
953
954 bp->rx_tail = bp->tx_head = bp->tx_tail = 0;
955}
956
957static void macb_reset_hw(struct macb *bp)
958{
959
960
961
962
963 macb_writel(bp, NCR, 0);
964
965
966 macb_writel(bp, NCR, MACB_BIT(CLRSTAT));
967
968
969 macb_writel(bp, TSR, -1);
970 macb_writel(bp, RSR, -1);
971
972
973 macb_writel(bp, IDR, -1);
974 macb_readl(bp, ISR);
975}
976
977static u32 gem_mdc_clk_div(struct macb *bp)
978{
979 u32 config;
980 unsigned long pclk_hz = clk_get_rate(bp->pclk);
981
982 if (pclk_hz <= 20000000)
983 config = GEM_BF(CLK, GEM_CLK_DIV8);
984 else if (pclk_hz <= 40000000)
985 config = GEM_BF(CLK, GEM_CLK_DIV16);
986 else if (pclk_hz <= 80000000)
987 config = GEM_BF(CLK, GEM_CLK_DIV32);
988 else if (pclk_hz <= 120000000)
989 config = GEM_BF(CLK, GEM_CLK_DIV48);
990 else if (pclk_hz <= 160000000)
991 config = GEM_BF(CLK, GEM_CLK_DIV64);
992 else
993 config = GEM_BF(CLK, GEM_CLK_DIV96);
994
995 return config;
996}
997
998static u32 macb_mdc_clk_div(struct macb *bp)
999{
1000 u32 config;
1001 unsigned long pclk_hz;
1002
1003 if (macb_is_gem(bp))
1004 return gem_mdc_clk_div(bp);
1005
1006 pclk_hz = clk_get_rate(bp->pclk);
1007 if (pclk_hz <= 20000000)
1008 config = MACB_BF(CLK, MACB_CLK_DIV8);
1009 else if (pclk_hz <= 40000000)
1010 config = MACB_BF(CLK, MACB_CLK_DIV16);
1011 else if (pclk_hz <= 80000000)
1012 config = MACB_BF(CLK, MACB_CLK_DIV32);
1013 else
1014 config = MACB_BF(CLK, MACB_CLK_DIV64);
1015
1016 return config;
1017}
1018
1019
1020
1021
1022
1023
1024static u32 macb_dbw(struct macb *bp)
1025{
1026 if (!macb_is_gem(bp))
1027 return 0;
1028
1029 switch (GEM_BFEXT(DBWDEF, gem_readl(bp, DCFG1))) {
1030 case 4:
1031 return GEM_BF(DBW, GEM_DBW128);
1032 case 2:
1033 return GEM_BF(DBW, GEM_DBW64);
1034 case 1:
1035 default:
1036 return GEM_BF(DBW, GEM_DBW32);
1037 }
1038}
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048static void macb_configure_dma(struct macb *bp)
1049{
1050 u32 dmacfg;
1051
1052 if (macb_is_gem(bp)) {
1053 dmacfg = gem_readl(bp, DMACFG) & ~GEM_BF(RXBS, -1L);
1054 dmacfg |= GEM_BF(RXBS, RX_BUFFER_SIZE / 64);
1055 dmacfg |= GEM_BF(FBLDO, 16);
1056 dmacfg |= GEM_BIT(TXPBMS) | GEM_BF(RXBMS, -1L);
1057 gem_writel(bp, DMACFG, dmacfg);
1058 }
1059}
1060
1061static void macb_init_hw(struct macb *bp)
1062{
1063 u32 config;
1064
1065 macb_reset_hw(bp);
1066 macb_set_hwaddr(bp);
1067
1068 config = macb_mdc_clk_div(bp);
1069 config |= MACB_BF(RBOF, NET_IP_ALIGN);
1070 config |= MACB_BIT(PAE);
1071 config |= MACB_BIT(DRFCS);
1072 config |= MACB_BIT(BIG);
1073 if (bp->dev->flags & IFF_PROMISC)
1074 config |= MACB_BIT(CAF);
1075 if (!(bp->dev->flags & IFF_BROADCAST))
1076 config |= MACB_BIT(NBC);
1077 config |= macb_dbw(bp);
1078 macb_writel(bp, NCFGR, config);
1079 bp->speed = SPEED_10;
1080 bp->duplex = DUPLEX_HALF;
1081
1082 macb_configure_dma(bp);
1083
1084
1085 macb_writel(bp, RBQP, bp->rx_ring_dma);
1086 macb_writel(bp, TBQP, bp->tx_ring_dma);
1087
1088
1089 macb_writel(bp, NCR, MACB_BIT(RE) | MACB_BIT(TE) | MACB_BIT(MPE));
1090
1091
1092 macb_writel(bp, IER, (MACB_RX_INT_FLAGS
1093 | MACB_TX_INT_FLAGS
1094 | MACB_BIT(HRESP)));
1095
1096}
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132static inline int hash_bit_value(int bitnr, __u8 *addr)
1133{
1134 if (addr[bitnr / 8] & (1 << (bitnr % 8)))
1135 return 1;
1136 return 0;
1137}
1138
1139
1140
1141
1142static int hash_get_index(__u8 *addr)
1143{
1144 int i, j, bitval;
1145 int hash_index = 0;
1146
1147 for (j = 0; j < 6; j++) {
1148 for (i = 0, bitval = 0; i < 8; i++)
1149 bitval ^= hash_bit_value(i*6 + j, addr);
1150
1151 hash_index |= (bitval << j);
1152 }
1153
1154 return hash_index;
1155}
1156
1157
1158
1159
1160static void macb_sethashtable(struct net_device *dev)
1161{
1162 struct netdev_hw_addr *ha;
1163 unsigned long mc_filter[2];
1164 unsigned int bitnr;
1165 struct macb *bp = netdev_priv(dev);
1166
1167 mc_filter[0] = mc_filter[1] = 0;
1168
1169 netdev_for_each_mc_addr(ha, dev) {
1170 bitnr = hash_get_index(ha->addr);
1171 mc_filter[bitnr >> 5] |= 1 << (bitnr & 31);
1172 }
1173
1174 macb_or_gem_writel(bp, HRB, mc_filter[0]);
1175 macb_or_gem_writel(bp, HRT, mc_filter[1]);
1176}
1177
1178
1179
1180
1181void macb_set_rx_mode(struct net_device *dev)
1182{
1183 unsigned long cfg;
1184 struct macb *bp = netdev_priv(dev);
1185
1186 cfg = macb_readl(bp, NCFGR);
1187
1188 if (dev->flags & IFF_PROMISC)
1189
1190 cfg |= MACB_BIT(CAF);
1191 else if (dev->flags & (~IFF_PROMISC))
1192
1193 cfg &= ~MACB_BIT(CAF);
1194
1195 if (dev->flags & IFF_ALLMULTI) {
1196
1197 macb_or_gem_writel(bp, HRB, -1);
1198 macb_or_gem_writel(bp, HRT, -1);
1199 cfg |= MACB_BIT(NCFGR_MTI);
1200 } else if (!netdev_mc_empty(dev)) {
1201
1202 macb_sethashtable(dev);
1203 cfg |= MACB_BIT(NCFGR_MTI);
1204 } else if (dev->flags & (~IFF_ALLMULTI)) {
1205
1206 macb_or_gem_writel(bp, HRB, 0);
1207 macb_or_gem_writel(bp, HRT, 0);
1208 cfg &= ~MACB_BIT(NCFGR_MTI);
1209 }
1210
1211 macb_writel(bp, NCFGR, cfg);
1212}
1213EXPORT_SYMBOL_GPL(macb_set_rx_mode);
1214
1215static int macb_open(struct net_device *dev)
1216{
1217 struct macb *bp = netdev_priv(dev);
1218 int err;
1219
1220 netdev_dbg(bp->dev, "open\n");
1221
1222
1223 netif_carrier_off(dev);
1224
1225
1226 if (!bp->phy_dev)
1227 return -EAGAIN;
1228
1229 err = macb_alloc_consistent(bp);
1230 if (err) {
1231 netdev_err(dev, "Unable to allocate DMA memory (error %d)\n",
1232 err);
1233 return err;
1234 }
1235
1236 napi_enable(&bp->napi);
1237
1238 macb_init_rings(bp);
1239 macb_init_hw(bp);
1240
1241
1242 phy_start(bp->phy_dev);
1243
1244 netif_start_queue(dev);
1245
1246 return 0;
1247}
1248
1249static int macb_close(struct net_device *dev)
1250{
1251 struct macb *bp = netdev_priv(dev);
1252 unsigned long flags;
1253
1254 netif_stop_queue(dev);
1255 napi_disable(&bp->napi);
1256
1257 if (bp->phy_dev)
1258 phy_stop(bp->phy_dev);
1259
1260 spin_lock_irqsave(&bp->lock, flags);
1261 macb_reset_hw(bp);
1262 netif_carrier_off(dev);
1263 spin_unlock_irqrestore(&bp->lock, flags);
1264
1265 macb_free_consistent(bp);
1266
1267 return 0;
1268}
1269
1270static void gem_update_stats(struct macb *bp)
1271{
1272 u32 __iomem *reg = bp->regs + GEM_OTX;
1273 u32 *p = &bp->hw_stats.gem.tx_octets_31_0;
1274 u32 *end = &bp->hw_stats.gem.rx_udp_checksum_errors + 1;
1275
1276 for (; p < end; p++, reg++)
1277 *p += __raw_readl(reg);
1278}
1279
1280static struct net_device_stats *gem_get_stats(struct macb *bp)
1281{
1282 struct gem_stats *hwstat = &bp->hw_stats.gem;
1283 struct net_device_stats *nstat = &bp->stats;
1284
1285 gem_update_stats(bp);
1286
1287 nstat->rx_errors = (hwstat->rx_frame_check_sequence_errors +
1288 hwstat->rx_alignment_errors +
1289 hwstat->rx_resource_errors +
1290 hwstat->rx_overruns +
1291 hwstat->rx_oversize_frames +
1292 hwstat->rx_jabbers +
1293 hwstat->rx_undersized_frames +
1294 hwstat->rx_length_field_frame_errors);
1295 nstat->tx_errors = (hwstat->tx_late_collisions +
1296 hwstat->tx_excessive_collisions +
1297 hwstat->tx_underrun +
1298 hwstat->tx_carrier_sense_errors);
1299 nstat->multicast = hwstat->rx_multicast_frames;
1300 nstat->collisions = (hwstat->tx_single_collision_frames +
1301 hwstat->tx_multiple_collision_frames +
1302 hwstat->tx_excessive_collisions);
1303 nstat->rx_length_errors = (hwstat->rx_oversize_frames +
1304 hwstat->rx_jabbers +
1305 hwstat->rx_undersized_frames +
1306 hwstat->rx_length_field_frame_errors);
1307 nstat->rx_over_errors = hwstat->rx_resource_errors;
1308 nstat->rx_crc_errors = hwstat->rx_frame_check_sequence_errors;
1309 nstat->rx_frame_errors = hwstat->rx_alignment_errors;
1310 nstat->rx_fifo_errors = hwstat->rx_overruns;
1311 nstat->tx_aborted_errors = hwstat->tx_excessive_collisions;
1312 nstat->tx_carrier_errors = hwstat->tx_carrier_sense_errors;
1313 nstat->tx_fifo_errors = hwstat->tx_underrun;
1314
1315 return nstat;
1316}
1317
1318struct net_device_stats *macb_get_stats(struct net_device *dev)
1319{
1320 struct macb *bp = netdev_priv(dev);
1321 struct net_device_stats *nstat = &bp->stats;
1322 struct macb_stats *hwstat = &bp->hw_stats.macb;
1323
1324 if (macb_is_gem(bp))
1325 return gem_get_stats(bp);
1326
1327
1328 macb_update_stats(bp);
1329
1330
1331 nstat->rx_errors = (hwstat->rx_fcs_errors +
1332 hwstat->rx_align_errors +
1333 hwstat->rx_resource_errors +
1334 hwstat->rx_overruns +
1335 hwstat->rx_oversize_pkts +
1336 hwstat->rx_jabbers +
1337 hwstat->rx_undersize_pkts +
1338 hwstat->sqe_test_errors +
1339 hwstat->rx_length_mismatch);
1340 nstat->tx_errors = (hwstat->tx_late_cols +
1341 hwstat->tx_excessive_cols +
1342 hwstat->tx_underruns +
1343 hwstat->tx_carrier_errors);
1344 nstat->collisions = (hwstat->tx_single_cols +
1345 hwstat->tx_multiple_cols +
1346 hwstat->tx_excessive_cols);
1347 nstat->rx_length_errors = (hwstat->rx_oversize_pkts +
1348 hwstat->rx_jabbers +
1349 hwstat->rx_undersize_pkts +
1350 hwstat->rx_length_mismatch);
1351 nstat->rx_over_errors = hwstat->rx_resource_errors +
1352 hwstat->rx_overruns;
1353 nstat->rx_crc_errors = hwstat->rx_fcs_errors;
1354 nstat->rx_frame_errors = hwstat->rx_align_errors;
1355 nstat->rx_fifo_errors = hwstat->rx_overruns;
1356
1357 nstat->tx_aborted_errors = hwstat->tx_excessive_cols;
1358 nstat->tx_carrier_errors = hwstat->tx_carrier_errors;
1359 nstat->tx_fifo_errors = hwstat->tx_underruns;
1360
1361
1362 return nstat;
1363}
1364EXPORT_SYMBOL_GPL(macb_get_stats);
1365
1366static int macb_get_settings(struct net_device *dev, struct ethtool_cmd *cmd)
1367{
1368 struct macb *bp = netdev_priv(dev);
1369 struct phy_device *phydev = bp->phy_dev;
1370
1371 if (!phydev)
1372 return -ENODEV;
1373
1374 return phy_ethtool_gset(phydev, cmd);
1375}
1376
1377static int macb_set_settings(struct net_device *dev, struct ethtool_cmd *cmd)
1378{
1379 struct macb *bp = netdev_priv(dev);
1380 struct phy_device *phydev = bp->phy_dev;
1381
1382 if (!phydev)
1383 return -ENODEV;
1384
1385 return phy_ethtool_sset(phydev, cmd);
1386}
1387
1388static int macb_get_regs_len(struct net_device *netdev)
1389{
1390 return MACB_GREGS_NBR * sizeof(u32);
1391}
1392
1393static void macb_get_regs(struct net_device *dev, struct ethtool_regs *regs,
1394 void *p)
1395{
1396 struct macb *bp = netdev_priv(dev);
1397 unsigned int tail, head;
1398 u32 *regs_buff = p;
1399
1400 regs->version = (macb_readl(bp, MID) & ((1 << MACB_REV_SIZE) - 1))
1401 | MACB_GREGS_VERSION;
1402
1403 tail = macb_tx_ring_wrap(bp->tx_tail);
1404 head = macb_tx_ring_wrap(bp->tx_head);
1405
1406 regs_buff[0] = macb_readl(bp, NCR);
1407 regs_buff[1] = macb_or_gem_readl(bp, NCFGR);
1408 regs_buff[2] = macb_readl(bp, NSR);
1409 regs_buff[3] = macb_readl(bp, TSR);
1410 regs_buff[4] = macb_readl(bp, RBQP);
1411 regs_buff[5] = macb_readl(bp, TBQP);
1412 regs_buff[6] = macb_readl(bp, RSR);
1413 regs_buff[7] = macb_readl(bp, IMR);
1414
1415 regs_buff[8] = tail;
1416 regs_buff[9] = head;
1417 regs_buff[10] = macb_tx_dma(bp, tail);
1418 regs_buff[11] = macb_tx_dma(bp, head);
1419
1420 if (macb_is_gem(bp)) {
1421 regs_buff[12] = gem_readl(bp, USRIO);
1422 regs_buff[13] = gem_readl(bp, DMACFG);
1423 }
1424}
1425
1426const struct ethtool_ops macb_ethtool_ops = {
1427 .get_settings = macb_get_settings,
1428 .set_settings = macb_set_settings,
1429 .get_regs_len = macb_get_regs_len,
1430 .get_regs = macb_get_regs,
1431 .get_link = ethtool_op_get_link,
1432 .get_ts_info = ethtool_op_get_ts_info,
1433};
1434EXPORT_SYMBOL_GPL(macb_ethtool_ops);
1435
1436int macb_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
1437{
1438 struct macb *bp = netdev_priv(dev);
1439 struct phy_device *phydev = bp->phy_dev;
1440
1441 if (!netif_running(dev))
1442 return -EINVAL;
1443
1444 if (!phydev)
1445 return -ENODEV;
1446
1447 return phy_mii_ioctl(phydev, rq, cmd);
1448}
1449EXPORT_SYMBOL_GPL(macb_ioctl);
1450
1451static const struct net_device_ops macb_netdev_ops = {
1452 .ndo_open = macb_open,
1453 .ndo_stop = macb_close,
1454 .ndo_start_xmit = macb_start_xmit,
1455 .ndo_set_rx_mode = macb_set_rx_mode,
1456 .ndo_get_stats = macb_get_stats,
1457 .ndo_do_ioctl = macb_ioctl,
1458 .ndo_validate_addr = eth_validate_addr,
1459 .ndo_change_mtu = eth_change_mtu,
1460 .ndo_set_mac_address = eth_mac_addr,
1461#ifdef CONFIG_NET_POLL_CONTROLLER
1462 .ndo_poll_controller = macb_poll_controller,
1463#endif
1464};
1465
1466#if defined(CONFIG_OF)
1467static const struct of_device_id macb_dt_ids[] = {
1468 { .compatible = "cdns,at32ap7000-macb" },
1469 { .compatible = "cdns,at91sam9260-macb" },
1470 { .compatible = "cdns,macb" },
1471 { .compatible = "cdns,pc302-gem" },
1472 { .compatible = "cdns,gem" },
1473 { }
1474};
1475
1476MODULE_DEVICE_TABLE(of, macb_dt_ids);
1477
1478static int macb_get_phy_mode_dt(struct platform_device *pdev)
1479{
1480 struct device_node *np = pdev->dev.of_node;
1481
1482 if (np)
1483 return of_get_phy_mode(np);
1484
1485 return -ENODEV;
1486}
1487
1488static int macb_get_hwaddr_dt(struct macb *bp)
1489{
1490 struct device_node *np = bp->pdev->dev.of_node;
1491 if (np) {
1492 const char *mac = of_get_mac_address(np);
1493 if (mac) {
1494 memcpy(bp->dev->dev_addr, mac, ETH_ALEN);
1495 return 0;
1496 }
1497 }
1498
1499 return -ENODEV;
1500}
1501#else
1502static int macb_get_phy_mode_dt(struct platform_device *pdev)
1503{
1504 return -ENODEV;
1505}
1506static int macb_get_hwaddr_dt(struct macb *bp)
1507{
1508 return -ENODEV;
1509}
1510#endif
1511
1512static int __init macb_probe(struct platform_device *pdev)
1513{
1514 struct macb_platform_data *pdata;
1515 struct resource *regs;
1516 struct net_device *dev;
1517 struct macb *bp;
1518 struct phy_device *phydev;
1519 u32 config;
1520 int err = -ENXIO;
1521 struct pinctrl *pinctrl;
1522
1523 regs = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1524 if (!regs) {
1525 dev_err(&pdev->dev, "no mmio resource defined\n");
1526 goto err_out;
1527 }
1528
1529 pinctrl = devm_pinctrl_get_select_default(&pdev->dev);
1530 if (IS_ERR(pinctrl)) {
1531 err = PTR_ERR(pinctrl);
1532 if (err == -EPROBE_DEFER)
1533 goto err_out;
1534
1535 dev_warn(&pdev->dev, "No pinctrl provided\n");
1536 }
1537
1538 err = -ENOMEM;
1539 dev = alloc_etherdev(sizeof(*bp));
1540 if (!dev)
1541 goto err_out;
1542
1543 SET_NETDEV_DEV(dev, &pdev->dev);
1544
1545
1546 dev->features |= 0;
1547
1548 bp = netdev_priv(dev);
1549 bp->pdev = pdev;
1550 bp->dev = dev;
1551
1552 spin_lock_init(&bp->lock);
1553 INIT_WORK(&bp->tx_error_task, macb_tx_error_task);
1554
1555 bp->pclk = clk_get(&pdev->dev, "pclk");
1556 if (IS_ERR(bp->pclk)) {
1557 dev_err(&pdev->dev, "failed to get macb_clk\n");
1558 goto err_out_free_dev;
1559 }
1560 clk_enable(bp->pclk);
1561
1562 bp->hclk = clk_get(&pdev->dev, "hclk");
1563 if (IS_ERR(bp->hclk)) {
1564 dev_err(&pdev->dev, "failed to get hclk\n");
1565 goto err_out_put_pclk;
1566 }
1567 clk_enable(bp->hclk);
1568
1569 bp->regs = ioremap(regs->start, resource_size(regs));
1570 if (!bp->regs) {
1571 dev_err(&pdev->dev, "failed to map registers, aborting.\n");
1572 err = -ENOMEM;
1573 goto err_out_disable_clocks;
1574 }
1575
1576 dev->irq = platform_get_irq(pdev, 0);
1577 err = request_irq(dev->irq, macb_interrupt, 0, dev->name, dev);
1578 if (err) {
1579 dev_err(&pdev->dev, "Unable to request IRQ %d (error %d)\n",
1580 dev->irq, err);
1581 goto err_out_iounmap;
1582 }
1583
1584 dev->netdev_ops = &macb_netdev_ops;
1585 netif_napi_add(dev, &bp->napi, macb_poll, 64);
1586 dev->ethtool_ops = &macb_ethtool_ops;
1587
1588 dev->base_addr = regs->start;
1589
1590
1591 config = macb_mdc_clk_div(bp);
1592 config |= macb_dbw(bp);
1593 macb_writel(bp, NCFGR, config);
1594
1595 err = macb_get_hwaddr_dt(bp);
1596 if (err < 0)
1597 macb_get_hwaddr(bp);
1598
1599 err = macb_get_phy_mode_dt(pdev);
1600 if (err < 0) {
1601 pdata = pdev->dev.platform_data;
1602 if (pdata && pdata->is_rmii)
1603 bp->phy_interface = PHY_INTERFACE_MODE_RMII;
1604 else
1605 bp->phy_interface = PHY_INTERFACE_MODE_MII;
1606 } else {
1607 bp->phy_interface = err;
1608 }
1609
1610 if (bp->phy_interface == PHY_INTERFACE_MODE_RGMII)
1611 macb_or_gem_writel(bp, USRIO, GEM_BIT(RGMII));
1612 else if (bp->phy_interface == PHY_INTERFACE_MODE_RMII)
1613#if defined(CONFIG_ARCH_AT91)
1614 macb_or_gem_writel(bp, USRIO, (MACB_BIT(RMII) |
1615 MACB_BIT(CLKEN)));
1616#else
1617 macb_or_gem_writel(bp, USRIO, 0);
1618#endif
1619 else
1620#if defined(CONFIG_ARCH_AT91)
1621 macb_or_gem_writel(bp, USRIO, MACB_BIT(CLKEN));
1622#else
1623 macb_or_gem_writel(bp, USRIO, MACB_BIT(MII));
1624#endif
1625
1626 err = register_netdev(dev);
1627 if (err) {
1628 dev_err(&pdev->dev, "Cannot register net device, aborting.\n");
1629 goto err_out_free_irq;
1630 }
1631
1632 if (macb_mii_init(bp) != 0) {
1633 goto err_out_unregister_netdev;
1634 }
1635
1636 platform_set_drvdata(pdev, dev);
1637
1638 netif_carrier_off(dev);
1639
1640 netdev_info(dev, "Cadence %s at 0x%08lx irq %d (%pM)\n",
1641 macb_is_gem(bp) ? "GEM" : "MACB", dev->base_addr,
1642 dev->irq, dev->dev_addr);
1643
1644 phydev = bp->phy_dev;
1645 netdev_info(dev, "attached PHY driver [%s] (mii_bus:phy_addr=%s, irq=%d)\n",
1646 phydev->drv->name, dev_name(&phydev->dev), phydev->irq);
1647
1648 return 0;
1649
1650err_out_unregister_netdev:
1651 unregister_netdev(dev);
1652err_out_free_irq:
1653 free_irq(dev->irq, dev);
1654err_out_iounmap:
1655 iounmap(bp->regs);
1656err_out_disable_clocks:
1657 clk_disable(bp->hclk);
1658 clk_put(bp->hclk);
1659 clk_disable(bp->pclk);
1660err_out_put_pclk:
1661 clk_put(bp->pclk);
1662err_out_free_dev:
1663 free_netdev(dev);
1664err_out:
1665 platform_set_drvdata(pdev, NULL);
1666 return err;
1667}
1668
1669static int __exit macb_remove(struct platform_device *pdev)
1670{
1671 struct net_device *dev;
1672 struct macb *bp;
1673
1674 dev = platform_get_drvdata(pdev);
1675
1676 if (dev) {
1677 bp = netdev_priv(dev);
1678 if (bp->phy_dev)
1679 phy_disconnect(bp->phy_dev);
1680 mdiobus_unregister(bp->mii_bus);
1681 kfree(bp->mii_bus->irq);
1682 mdiobus_free(bp->mii_bus);
1683 unregister_netdev(dev);
1684 free_irq(dev->irq, dev);
1685 iounmap(bp->regs);
1686 clk_disable(bp->hclk);
1687 clk_put(bp->hclk);
1688 clk_disable(bp->pclk);
1689 clk_put(bp->pclk);
1690 free_netdev(dev);
1691 platform_set_drvdata(pdev, NULL);
1692 }
1693
1694 return 0;
1695}
1696
1697#ifdef CONFIG_PM
1698static int macb_suspend(struct platform_device *pdev, pm_message_t state)
1699{
1700 struct net_device *netdev = platform_get_drvdata(pdev);
1701 struct macb *bp = netdev_priv(netdev);
1702
1703 netif_carrier_off(netdev);
1704 netif_device_detach(netdev);
1705
1706 clk_disable(bp->hclk);
1707 clk_disable(bp->pclk);
1708
1709 return 0;
1710}
1711
1712static int macb_resume(struct platform_device *pdev)
1713{
1714 struct net_device *netdev = platform_get_drvdata(pdev);
1715 struct macb *bp = netdev_priv(netdev);
1716
1717 clk_enable(bp->pclk);
1718 clk_enable(bp->hclk);
1719
1720 netif_device_attach(netdev);
1721
1722 return 0;
1723}
1724#else
1725#define macb_suspend NULL
1726#define macb_resume NULL
1727#endif
1728
1729static struct platform_driver macb_driver = {
1730 .remove = __exit_p(macb_remove),
1731 .suspend = macb_suspend,
1732 .resume = macb_resume,
1733 .driver = {
1734 .name = "macb",
1735 .owner = THIS_MODULE,
1736 .of_match_table = of_match_ptr(macb_dt_ids),
1737 },
1738};
1739
1740static int __init macb_init(void)
1741{
1742 return platform_driver_probe(&macb_driver, macb_probe);
1743}
1744
1745static void __exit macb_exit(void)
1746{
1747 platform_driver_unregister(&macb_driver);
1748}
1749
1750module_init(macb_init);
1751module_exit(macb_exit);
1752
1753MODULE_LICENSE("GPL");
1754MODULE_DESCRIPTION("Cadence MACB/GEM Ethernet driver");
1755MODULE_AUTHOR("Haavard Skinnemoen (Atmel)");
1756MODULE_ALIAS("platform:macb");
1757