1
2
3
4
5
6
7
8
9
10
11
12#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
13
14#define DEBUG
15
16#include <linux/interrupt.h>
17#include <linux/module.h>
18#include <linux/kernel.h>
19#include <linux/netdevice.h>
20#include <linux/etherdevice.h>
21#include <linux/ethtool.h>
22#include <linux/cache.h>
23#include <linux/crc32.h>
24#include <linux/mii.h>
25#include <linux/eeprom_93cx6.h>
26#include <linux/regulator/consumer.h>
27
28#include <linux/spi/spi.h>
29#include <linux/gpio.h>
30#include <linux/of_gpio.h>
31#include <linux/of_net.h>
32
33#include "ks8851.h"
34
35
36
37
38
39
40
41
42
43
44
45
46
47struct ks8851_rxctrl {
48 u16 mchash[4];
49 u16 rxcr1;
50 u16 rxcr2;
51};
52
53
54
55
56
57
58
59
60
61
62union ks8851_tx_hdr {
63 u8 txb[6];
64 __le16 txw[3];
65};
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106struct ks8851_net {
107 struct net_device *netdev;
108 struct spi_device *spidev;
109 struct mutex lock;
110 spinlock_t statelock;
111
112 union ks8851_tx_hdr txh ____cacheline_aligned;
113 u8 rxd[8];
114 u8 txd[8];
115
116 u32 msg_enable ____cacheline_aligned;
117 u16 tx_space;
118 u8 fid;
119
120 u16 rc_ier;
121 u16 rc_rxqcr;
122 u16 rc_ccr;
123
124 struct mii_if_info mii;
125 struct ks8851_rxctrl rxctrl;
126
127 struct work_struct tx_work;
128 struct work_struct rxctrl_work;
129
130 struct sk_buff_head txq;
131
132 struct spi_message spi_msg1;
133 struct spi_message spi_msg2;
134 struct spi_transfer spi_xfer1;
135 struct spi_transfer spi_xfer2[2];
136
137 struct eeprom_93cx6 eeprom;
138 struct regulator *vdd_reg;
139 struct regulator *vdd_io;
140 int gpio;
141};
142
143static int msg_enable;
144
145
146#define BYTE_EN(_x) ((_x) << 2)
147
148
149#define MK_OP(_byteen, _reg) (BYTE_EN(_byteen) | (_reg) << (8+2) | (_reg) >> 6)
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166static void ks8851_wrreg16(struct ks8851_net *ks, unsigned reg, unsigned val)
167{
168 struct spi_transfer *xfer = &ks->spi_xfer1;
169 struct spi_message *msg = &ks->spi_msg1;
170 __le16 txb[2];
171 int ret;
172
173 txb[0] = cpu_to_le16(MK_OP(reg & 2 ? 0xC : 0x03, reg) | KS_SPIOP_WR);
174 txb[1] = cpu_to_le16(val);
175
176 xfer->tx_buf = txb;
177 xfer->rx_buf = NULL;
178 xfer->len = 4;
179
180 ret = spi_sync(ks->spidev, msg);
181 if (ret < 0)
182 netdev_err(ks->netdev, "spi_sync() failed\n");
183}
184
185
186
187
188
189
190
191
192
193static void ks8851_wrreg8(struct ks8851_net *ks, unsigned reg, unsigned val)
194{
195 struct spi_transfer *xfer = &ks->spi_xfer1;
196 struct spi_message *msg = &ks->spi_msg1;
197 __le16 txb[2];
198 int ret;
199 int bit;
200
201 bit = 1 << (reg & 3);
202
203 txb[0] = cpu_to_le16(MK_OP(bit, reg) | KS_SPIOP_WR);
204 txb[1] = val;
205
206 xfer->tx_buf = txb;
207 xfer->rx_buf = NULL;
208 xfer->len = 3;
209
210 ret = spi_sync(ks->spidev, msg);
211 if (ret < 0)
212 netdev_err(ks->netdev, "spi_sync() failed\n");
213}
214
215
216
217
218
219
220
221
222
223
224
225static void ks8851_rdreg(struct ks8851_net *ks, unsigned op,
226 u8 *rxb, unsigned rxl)
227{
228 struct spi_transfer *xfer;
229 struct spi_message *msg;
230 __le16 *txb = (__le16 *)ks->txd;
231 u8 *trx = ks->rxd;
232 int ret;
233
234 txb[0] = cpu_to_le16(op | KS_SPIOP_RD);
235
236 if (ks->spidev->master->flags & SPI_MASTER_HALF_DUPLEX) {
237 msg = &ks->spi_msg2;
238 xfer = ks->spi_xfer2;
239
240 xfer->tx_buf = txb;
241 xfer->rx_buf = NULL;
242 xfer->len = 2;
243
244 xfer++;
245 xfer->tx_buf = NULL;
246 xfer->rx_buf = trx;
247 xfer->len = rxl;
248 } else {
249 msg = &ks->spi_msg1;
250 xfer = &ks->spi_xfer1;
251
252 xfer->tx_buf = txb;
253 xfer->rx_buf = trx;
254 xfer->len = rxl + 2;
255 }
256
257 ret = spi_sync(ks->spidev, msg);
258 if (ret < 0)
259 netdev_err(ks->netdev, "read: spi_sync() failed\n");
260 else if (ks->spidev->master->flags & SPI_MASTER_HALF_DUPLEX)
261 memcpy(rxb, trx, rxl);
262 else
263 memcpy(rxb, trx + 2, rxl);
264}
265
266
267
268
269
270
271
272
273static unsigned ks8851_rdreg8(struct ks8851_net *ks, unsigned reg)
274{
275 u8 rxb[1];
276
277 ks8851_rdreg(ks, MK_OP(1 << (reg & 3), reg), rxb, 1);
278 return rxb[0];
279}
280
281
282
283
284
285
286
287
288static unsigned ks8851_rdreg16(struct ks8851_net *ks, unsigned reg)
289{
290 __le16 rx = 0;
291
292 ks8851_rdreg(ks, MK_OP(reg & 2 ? 0xC : 0x3, reg), (u8 *)&rx, 2);
293 return le16_to_cpu(rx);
294}
295
296
297
298
299
300
301
302
303
304
305static unsigned ks8851_rdreg32(struct ks8851_net *ks, unsigned reg)
306{
307 __le32 rx = 0;
308
309 WARN_ON(reg & 3);
310
311 ks8851_rdreg(ks, MK_OP(0xf, reg), (u8 *)&rx, 4);
312 return le32_to_cpu(rx);
313}
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328static void ks8851_soft_reset(struct ks8851_net *ks, unsigned op)
329{
330 ks8851_wrreg16(ks, KS_GRR, op);
331 mdelay(1);
332 ks8851_wrreg16(ks, KS_GRR, 0);
333 mdelay(1);
334}
335
336
337
338
339
340
341
342
343static void ks8851_set_powermode(struct ks8851_net *ks, unsigned pwrmode)
344{
345 unsigned pmecr;
346
347 netif_dbg(ks, hw, ks->netdev, "setting power mode %d\n", pwrmode);
348
349 pmecr = ks8851_rdreg16(ks, KS_PMECR);
350 pmecr &= ~PMECR_PM_MASK;
351 pmecr |= pwrmode;
352
353 ks8851_wrreg16(ks, KS_PMECR, pmecr);
354}
355
356
357
358
359
360
361
362
363
364
365static int ks8851_write_mac_addr(struct net_device *dev)
366{
367 struct ks8851_net *ks = netdev_priv(dev);
368 int i;
369
370 mutex_lock(&ks->lock);
371
372
373
374
375
376 ks8851_set_powermode(ks, PMECR_PM_NORMAL);
377 for (i = 0; i < ETH_ALEN; i++)
378 ks8851_wrreg8(ks, KS_MAR(i), dev->dev_addr[i]);
379 if (!netif_running(dev))
380 ks8851_set_powermode(ks, PMECR_PM_SOFTDOWN);
381
382 mutex_unlock(&ks->lock);
383
384 return 0;
385}
386
387
388
389
390
391
392
393static void ks8851_read_mac_addr(struct net_device *dev)
394{
395 struct ks8851_net *ks = netdev_priv(dev);
396 int i;
397
398 mutex_lock(&ks->lock);
399
400 for (i = 0; i < ETH_ALEN; i++)
401 dev->dev_addr[i] = ks8851_rdreg8(ks, KS_MAR(i));
402
403 mutex_unlock(&ks->lock);
404}
405
406
407
408
409
410
411
412
413
414
415
416static void ks8851_init_mac(struct ks8851_net *ks)
417{
418 struct net_device *dev = ks->netdev;
419 const u8 *mac_addr;
420
421 mac_addr = of_get_mac_address(ks->spidev->dev.of_node);
422 if (mac_addr) {
423 memcpy(dev->dev_addr, mac_addr, ETH_ALEN);
424 ks8851_write_mac_addr(dev);
425 return;
426 }
427
428 if (ks->rc_ccr & CCR_EEPROM) {
429 ks8851_read_mac_addr(dev);
430 if (is_valid_ether_addr(dev->dev_addr))
431 return;
432
433 netdev_err(ks->netdev, "invalid mac address read %pM\n",
434 dev->dev_addr);
435 }
436
437 eth_hw_addr_random(dev);
438 ks8851_write_mac_addr(dev);
439}
440
441
442
443
444
445
446
447
448
449
450static void ks8851_rdfifo(struct ks8851_net *ks, u8 *buff, unsigned len)
451{
452 struct spi_transfer *xfer = ks->spi_xfer2;
453 struct spi_message *msg = &ks->spi_msg2;
454 u8 txb[1];
455 int ret;
456
457 netif_dbg(ks, rx_status, ks->netdev,
458 "%s: %d@%p\n", __func__, len, buff);
459
460
461 txb[0] = KS_SPIOP_RXFIFO;
462
463 xfer->tx_buf = txb;
464 xfer->rx_buf = NULL;
465 xfer->len = 1;
466
467 xfer++;
468 xfer->rx_buf = buff;
469 xfer->tx_buf = NULL;
470 xfer->len = len;
471
472 ret = spi_sync(ks->spidev, msg);
473 if (ret < 0)
474 netdev_err(ks->netdev, "%s: spi_sync() failed\n", __func__);
475}
476
477
478
479
480
481
482
483
484static void ks8851_dbg_dumpkkt(struct ks8851_net *ks, u8 *rxpkt)
485{
486 netdev_dbg(ks->netdev,
487 "pkt %02x%02x%02x%02x %02x%02x%02x%02x %02x%02x%02x%02x\n",
488 rxpkt[4], rxpkt[5], rxpkt[6], rxpkt[7],
489 rxpkt[8], rxpkt[9], rxpkt[10], rxpkt[11],
490 rxpkt[12], rxpkt[13], rxpkt[14], rxpkt[15]);
491}
492
493
494
495
496
497
498
499
500
501static void ks8851_rx_pkts(struct ks8851_net *ks)
502{
503 struct sk_buff *skb;
504 unsigned rxfc;
505 unsigned rxlen;
506 unsigned rxstat;
507 u32 rxh;
508 u8 *rxpkt;
509
510 rxfc = ks8851_rdreg8(ks, KS_RXFC);
511
512 netif_dbg(ks, rx_status, ks->netdev,
513 "%s: %d packets\n", __func__, rxfc);
514
515
516
517
518
519
520
521
522
523
524
525 for (; rxfc != 0; rxfc--) {
526 rxh = ks8851_rdreg32(ks, KS_RXFHSR);
527 rxstat = rxh & 0xffff;
528 rxlen = (rxh >> 16) & 0xfff;
529
530 netif_dbg(ks, rx_status, ks->netdev,
531 "rx: stat 0x%04x, len 0x%04x\n", rxstat, rxlen);
532
533
534
535
536 ks8851_wrreg16(ks, KS_RXFDPR, RXFDPR_RXFPAI | 0x00);
537
538
539 ks8851_wrreg16(ks, KS_RXQCR,
540 ks->rc_rxqcr | RXQCR_SDA | RXQCR_ADRFE);
541
542 if (rxlen > 4) {
543 unsigned int rxalign;
544
545 rxlen -= 4;
546 rxalign = ALIGN(rxlen, 4);
547 skb = netdev_alloc_skb_ip_align(ks->netdev, rxalign);
548 if (skb) {
549
550
551
552
553
554
555
556 rxpkt = skb_put(skb, rxlen) - 8;
557
558 ks8851_rdfifo(ks, rxpkt, rxalign + 8);
559
560 if (netif_msg_pktdata(ks))
561 ks8851_dbg_dumpkkt(ks, rxpkt);
562
563 skb->protocol = eth_type_trans(skb, ks->netdev);
564 netif_rx_ni(skb);
565
566 ks->netdev->stats.rx_packets++;
567 ks->netdev->stats.rx_bytes += rxlen;
568 }
569 }
570
571 ks8851_wrreg16(ks, KS_RXQCR, ks->rc_rxqcr);
572 }
573}
574
575
576
577
578
579
580
581
582
583
584
585
586
587static irqreturn_t ks8851_irq(int irq, void *_ks)
588{
589 struct ks8851_net *ks = _ks;
590 unsigned status;
591 unsigned handled = 0;
592
593 mutex_lock(&ks->lock);
594
595 status = ks8851_rdreg16(ks, KS_ISR);
596
597 netif_dbg(ks, intr, ks->netdev,
598 "%s: status 0x%04x\n", __func__, status);
599
600 if (status & IRQ_LCI)
601 handled |= IRQ_LCI;
602
603 if (status & IRQ_LDI) {
604 u16 pmecr = ks8851_rdreg16(ks, KS_PMECR);
605 pmecr &= ~PMECR_WKEVT_MASK;
606 ks8851_wrreg16(ks, KS_PMECR, pmecr | PMECR_WKEVT_LINK);
607
608 handled |= IRQ_LDI;
609 }
610
611 if (status & IRQ_RXPSI)
612 handled |= IRQ_RXPSI;
613
614 if (status & IRQ_TXI) {
615 handled |= IRQ_TXI;
616
617
618
619
620
621 ks->tx_space = ks8851_rdreg16(ks, KS_TXMIR);
622
623 netif_dbg(ks, intr, ks->netdev,
624 "%s: txspace %d\n", __func__, ks->tx_space);
625 }
626
627 if (status & IRQ_RXI)
628 handled |= IRQ_RXI;
629
630 if (status & IRQ_SPIBEI) {
631 dev_err(&ks->spidev->dev, "%s: spi bus error\n", __func__);
632 handled |= IRQ_SPIBEI;
633 }
634
635 ks8851_wrreg16(ks, KS_ISR, handled);
636
637 if (status & IRQ_RXI) {
638
639
640
641
642
643 ks8851_rx_pkts(ks);
644 }
645
646
647
648
649 if (status & IRQ_RXPSI) {
650 struct ks8851_rxctrl *rxc = &ks->rxctrl;
651
652
653 ks8851_wrreg16(ks, KS_MAHTR0, rxc->mchash[0]);
654 ks8851_wrreg16(ks, KS_MAHTR1, rxc->mchash[1]);
655 ks8851_wrreg16(ks, KS_MAHTR2, rxc->mchash[2]);
656 ks8851_wrreg16(ks, KS_MAHTR3, rxc->mchash[3]);
657
658 ks8851_wrreg16(ks, KS_RXCR2, rxc->rxcr2);
659 ks8851_wrreg16(ks, KS_RXCR1, rxc->rxcr1);
660 }
661
662 mutex_unlock(&ks->lock);
663
664 if (status & IRQ_LCI)
665 mii_check_link(&ks->mii);
666
667 if (status & IRQ_TXI)
668 netif_wake_queue(ks->netdev);
669
670 return IRQ_HANDLED;
671}
672
673
674
675
676
677
678
679
680static inline unsigned calc_txlen(unsigned len)
681{
682 return ALIGN(len + 4, 4);
683}
684
685
686
687
688
689
690
691
692
693
694
695
696static void ks8851_wrpkt(struct ks8851_net *ks, struct sk_buff *txp, bool irq)
697{
698 struct spi_transfer *xfer = ks->spi_xfer2;
699 struct spi_message *msg = &ks->spi_msg2;
700 unsigned fid = 0;
701 int ret;
702
703 netif_dbg(ks, tx_queued, ks->netdev, "%s: skb %p, %d@%p, irq %d\n",
704 __func__, txp, txp->len, txp->data, irq);
705
706 fid = ks->fid++;
707 fid &= TXFR_TXFID_MASK;
708
709 if (irq)
710 fid |= TXFR_TXIC;
711
712
713 ks->txh.txb[1] = KS_SPIOP_TXFIFO;
714 ks->txh.txw[1] = cpu_to_le16(fid);
715 ks->txh.txw[2] = cpu_to_le16(txp->len);
716
717 xfer->tx_buf = &ks->txh.txb[1];
718 xfer->rx_buf = NULL;
719 xfer->len = 5;
720
721 xfer++;
722 xfer->tx_buf = txp->data;
723 xfer->rx_buf = NULL;
724 xfer->len = ALIGN(txp->len, 4);
725
726 ret = spi_sync(ks->spidev, msg);
727 if (ret < 0)
728 netdev_err(ks->netdev, "%s: spi_sync() failed\n", __func__);
729}
730
731
732
733
734
735
736static void ks8851_done_tx(struct ks8851_net *ks, struct sk_buff *txb)
737{
738 struct net_device *dev = ks->netdev;
739
740 dev->stats.tx_bytes += txb->len;
741 dev->stats.tx_packets++;
742
743 dev_kfree_skb(txb);
744}
745
746
747
748
749
750
751
752
753static void ks8851_tx_work(struct work_struct *work)
754{
755 struct ks8851_net *ks = container_of(work, struct ks8851_net, tx_work);
756 struct sk_buff *txb;
757 bool last = skb_queue_empty(&ks->txq);
758
759 mutex_lock(&ks->lock);
760
761 while (!last) {
762 txb = skb_dequeue(&ks->txq);
763 last = skb_queue_empty(&ks->txq);
764
765 if (txb != NULL) {
766 ks8851_wrreg16(ks, KS_RXQCR, ks->rc_rxqcr | RXQCR_SDA);
767 ks8851_wrpkt(ks, txb, last);
768 ks8851_wrreg16(ks, KS_RXQCR, ks->rc_rxqcr);
769 ks8851_wrreg16(ks, KS_TXQCR, TXQCR_METFE);
770
771 ks8851_done_tx(ks, txb);
772 }
773 }
774
775 mutex_unlock(&ks->lock);
776}
777
778
779
780
781
782
783
784
785static int ks8851_net_open(struct net_device *dev)
786{
787 struct ks8851_net *ks = netdev_priv(dev);
788
789
790
791 mutex_lock(&ks->lock);
792
793 netif_dbg(ks, ifup, ks->netdev, "opening\n");
794
795
796 ks8851_set_powermode(ks, PMECR_PM_NORMAL);
797
798
799
800 ks8851_soft_reset(ks, GRR_QMU);
801
802
803
804 ks8851_wrreg16(ks, KS_TXCR, (TXCR_TXE |
805 TXCR_TXPE |
806 TXCR_TXCRC |
807 TXCR_TXFCE));
808
809
810 ks8851_wrreg16(ks, KS_TXFDPR, TXFDPR_TXFPAI);
811
812
813
814 ks8851_wrreg16(ks, KS_RXCR1, (RXCR1_RXPAFMA |
815 RXCR1_RXFCE |
816 RXCR1_RXBE |
817 RXCR1_RXUE |
818 RXCR1_RXE));
819
820
821 ks8851_wrreg16(ks, KS_RXCR2, RXCR2_SRDBL_FRAME);
822
823
824 ks8851_wrreg16(ks, KS_RXDTTR, 1000);
825 ks8851_wrreg16(ks, KS_RXDBCTR, 4096);
826 ks8851_wrreg16(ks, KS_RXFCTR, 10);
827
828 ks->rc_rxqcr = (RXQCR_RXFCTE |
829 RXQCR_RXDBCTE |
830 RXQCR_RXDTTE);
831
832 ks8851_wrreg16(ks, KS_RXQCR, ks->rc_rxqcr);
833
834
835
836#define STD_IRQ (IRQ_LCI | \
837 IRQ_TXI | \
838 IRQ_RXI | \
839 IRQ_SPIBEI | \
840 IRQ_TXPSI | \
841 IRQ_RXPSI)
842
843 ks->rc_ier = STD_IRQ;
844 ks8851_wrreg16(ks, KS_ISR, STD_IRQ);
845 ks8851_wrreg16(ks, KS_IER, STD_IRQ);
846
847 netif_start_queue(ks->netdev);
848
849 netif_dbg(ks, ifup, ks->netdev, "network device up\n");
850
851 mutex_unlock(&ks->lock);
852 return 0;
853}
854
855
856
857
858
859
860
861
862
863static int ks8851_net_stop(struct net_device *dev)
864{
865 struct ks8851_net *ks = netdev_priv(dev);
866
867 netif_info(ks, ifdown, dev, "shutting down\n");
868
869 netif_stop_queue(dev);
870
871 mutex_lock(&ks->lock);
872
873 ks8851_wrreg16(ks, KS_IER, 0x0000);
874 ks8851_wrreg16(ks, KS_ISR, 0xffff);
875 mutex_unlock(&ks->lock);
876
877
878 flush_work(&ks->tx_work);
879 flush_work(&ks->rxctrl_work);
880
881 mutex_lock(&ks->lock);
882
883 ks8851_wrreg16(ks, KS_RXCR1, 0x0000);
884
885
886 ks8851_wrreg16(ks, KS_TXCR, 0x0000);
887
888
889 ks8851_set_powermode(ks, PMECR_PM_SOFTDOWN);
890 mutex_unlock(&ks->lock);
891
892
893 while (!skb_queue_empty(&ks->txq)) {
894 struct sk_buff *txb = skb_dequeue(&ks->txq);
895
896 netif_dbg(ks, ifdown, ks->netdev,
897 "%s: freeing txb %p\n", __func__, txb);
898
899 dev_kfree_skb(txb);
900 }
901
902 return 0;
903}
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918static netdev_tx_t ks8851_start_xmit(struct sk_buff *skb,
919 struct net_device *dev)
920{
921 struct ks8851_net *ks = netdev_priv(dev);
922 unsigned needed = calc_txlen(skb->len);
923 netdev_tx_t ret = NETDEV_TX_OK;
924
925 netif_dbg(ks, tx_queued, ks->netdev,
926 "%s: skb %p, %d@%p\n", __func__, skb, skb->len, skb->data);
927
928 spin_lock(&ks->statelock);
929
930 if (needed > ks->tx_space) {
931 netif_stop_queue(dev);
932 ret = NETDEV_TX_BUSY;
933 } else {
934 ks->tx_space -= needed;
935 skb_queue_tail(&ks->txq, skb);
936 }
937
938 spin_unlock(&ks->statelock);
939 schedule_work(&ks->tx_work);
940
941 return ret;
942}
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957static void ks8851_rxctrl_work(struct work_struct *work)
958{
959 struct ks8851_net *ks = container_of(work, struct ks8851_net, rxctrl_work);
960
961 mutex_lock(&ks->lock);
962
963
964 ks8851_wrreg16(ks, KS_RXCR1, 0x00);
965
966 mutex_unlock(&ks->lock);
967}
968
969static void ks8851_set_rx_mode(struct net_device *dev)
970{
971 struct ks8851_net *ks = netdev_priv(dev);
972 struct ks8851_rxctrl rxctrl;
973
974 memset(&rxctrl, 0, sizeof(rxctrl));
975
976 if (dev->flags & IFF_PROMISC) {
977
978
979 rxctrl.rxcr1 = RXCR1_RXAE | RXCR1_RXINVF;
980 } else if (dev->flags & IFF_ALLMULTI) {
981
982
983 rxctrl.rxcr1 = (RXCR1_RXME | RXCR1_RXAE |
984 RXCR1_RXPAFMA | RXCR1_RXMAFMA);
985 } else if (dev->flags & IFF_MULTICAST && !netdev_mc_empty(dev)) {
986 struct netdev_hw_addr *ha;
987 u32 crc;
988
989
990
991 netdev_for_each_mc_addr(ha, dev) {
992 crc = ether_crc(ETH_ALEN, ha->addr);
993 crc >>= (32 - 6);
994
995 rxctrl.mchash[crc >> 4] |= (1 << (crc & 0xf));
996 }
997
998 rxctrl.rxcr1 = RXCR1_RXME | RXCR1_RXPAFMA;
999 } else {
1000
1001 rxctrl.rxcr1 = RXCR1_RXPAFMA;
1002 }
1003
1004 rxctrl.rxcr1 |= (RXCR1_RXUE |
1005 RXCR1_RXBE |
1006 RXCR1_RXE |
1007 RXCR1_RXFCE);
1008
1009 rxctrl.rxcr2 |= RXCR2_SRDBL_FRAME;
1010
1011
1012
1013 spin_lock(&ks->statelock);
1014
1015 if (memcmp(&rxctrl, &ks->rxctrl, sizeof(rxctrl)) != 0) {
1016 memcpy(&ks->rxctrl, &rxctrl, sizeof(ks->rxctrl));
1017 schedule_work(&ks->rxctrl_work);
1018 }
1019
1020 spin_unlock(&ks->statelock);
1021}
1022
1023static int ks8851_set_mac_address(struct net_device *dev, void *addr)
1024{
1025 struct sockaddr *sa = addr;
1026
1027 if (netif_running(dev))
1028 return -EBUSY;
1029
1030 if (!is_valid_ether_addr(sa->sa_data))
1031 return -EADDRNOTAVAIL;
1032
1033 memcpy(dev->dev_addr, sa->sa_data, ETH_ALEN);
1034 return ks8851_write_mac_addr(dev);
1035}
1036
1037static int ks8851_net_ioctl(struct net_device *dev, struct ifreq *req, int cmd)
1038{
1039 struct ks8851_net *ks = netdev_priv(dev);
1040
1041 if (!netif_running(dev))
1042 return -EINVAL;
1043
1044 return generic_mii_ioctl(&ks->mii, if_mii(req), cmd, NULL);
1045}
1046
1047static const struct net_device_ops ks8851_netdev_ops = {
1048 .ndo_open = ks8851_net_open,
1049 .ndo_stop = ks8851_net_stop,
1050 .ndo_do_ioctl = ks8851_net_ioctl,
1051 .ndo_start_xmit = ks8851_start_xmit,
1052 .ndo_set_mac_address = ks8851_set_mac_address,
1053 .ndo_set_rx_mode = ks8851_set_rx_mode,
1054 .ndo_validate_addr = eth_validate_addr,
1055};
1056
1057
1058
1059static void ks8851_get_drvinfo(struct net_device *dev,
1060 struct ethtool_drvinfo *di)
1061{
1062 strlcpy(di->driver, "KS8851", sizeof(di->driver));
1063 strlcpy(di->version, "1.00", sizeof(di->version));
1064 strlcpy(di->bus_info, dev_name(dev->dev.parent), sizeof(di->bus_info));
1065}
1066
1067static u32 ks8851_get_msglevel(struct net_device *dev)
1068{
1069 struct ks8851_net *ks = netdev_priv(dev);
1070 return ks->msg_enable;
1071}
1072
1073static void ks8851_set_msglevel(struct net_device *dev, u32 to)
1074{
1075 struct ks8851_net *ks = netdev_priv(dev);
1076 ks->msg_enable = to;
1077}
1078
1079static int ks8851_get_link_ksettings(struct net_device *dev,
1080 struct ethtool_link_ksettings *cmd)
1081{
1082 struct ks8851_net *ks = netdev_priv(dev);
1083
1084 mii_ethtool_get_link_ksettings(&ks->mii, cmd);
1085
1086 return 0;
1087}
1088
1089static int ks8851_set_link_ksettings(struct net_device *dev,
1090 const struct ethtool_link_ksettings *cmd)
1091{
1092 struct ks8851_net *ks = netdev_priv(dev);
1093 return mii_ethtool_set_link_ksettings(&ks->mii, cmd);
1094}
1095
1096static u32 ks8851_get_link(struct net_device *dev)
1097{
1098 struct ks8851_net *ks = netdev_priv(dev);
1099 return mii_link_ok(&ks->mii);
1100}
1101
1102static int ks8851_nway_reset(struct net_device *dev)
1103{
1104 struct ks8851_net *ks = netdev_priv(dev);
1105 return mii_nway_restart(&ks->mii);
1106}
1107
1108
1109
1110static void ks8851_eeprom_regread(struct eeprom_93cx6 *ee)
1111{
1112 struct ks8851_net *ks = ee->data;
1113 unsigned val;
1114
1115 val = ks8851_rdreg16(ks, KS_EEPCR);
1116
1117 ee->reg_data_out = (val & EEPCR_EESB) ? 1 : 0;
1118 ee->reg_data_clock = (val & EEPCR_EESCK) ? 1 : 0;
1119 ee->reg_chip_select = (val & EEPCR_EECS) ? 1 : 0;
1120}
1121
1122static void ks8851_eeprom_regwrite(struct eeprom_93cx6 *ee)
1123{
1124 struct ks8851_net *ks = ee->data;
1125 unsigned val = EEPCR_EESA;
1126
1127 if (ee->drive_data)
1128 val |= EEPCR_EESRWA;
1129 if (ee->reg_data_in)
1130 val |= EEPCR_EEDO;
1131 if (ee->reg_data_clock)
1132 val |= EEPCR_EESCK;
1133 if (ee->reg_chip_select)
1134 val |= EEPCR_EECS;
1135
1136 ks8851_wrreg16(ks, KS_EEPCR, val);
1137}
1138
1139
1140
1141
1142
1143
1144
1145
1146static int ks8851_eeprom_claim(struct ks8851_net *ks)
1147{
1148 if (!(ks->rc_ccr & CCR_EEPROM))
1149 return -ENOENT;
1150
1151 mutex_lock(&ks->lock);
1152
1153
1154 ks8851_wrreg16(ks, KS_EEPCR, EEPCR_EESA | EEPCR_EECS);
1155 return 0;
1156}
1157
1158
1159
1160
1161
1162
1163
1164static void ks8851_eeprom_release(struct ks8851_net *ks)
1165{
1166 unsigned val = ks8851_rdreg16(ks, KS_EEPCR);
1167
1168 ks8851_wrreg16(ks, KS_EEPCR, val & ~EEPCR_EESA);
1169 mutex_unlock(&ks->lock);
1170}
1171
1172#define KS_EEPROM_MAGIC (0x00008851)
1173
1174static int ks8851_set_eeprom(struct net_device *dev,
1175 struct ethtool_eeprom *ee, u8 *data)
1176{
1177 struct ks8851_net *ks = netdev_priv(dev);
1178 int offset = ee->offset;
1179 int len = ee->len;
1180 u16 tmp;
1181
1182
1183 if (len != 1)
1184 return -EINVAL;
1185
1186 if (ee->magic != KS_EEPROM_MAGIC)
1187 return -EINVAL;
1188
1189 if (ks8851_eeprom_claim(ks))
1190 return -ENOENT;
1191
1192 eeprom_93cx6_wren(&ks->eeprom, true);
1193
1194
1195
1196
1197 eeprom_93cx6_read(&ks->eeprom, offset/2, &tmp);
1198
1199 if (offset & 1) {
1200 tmp &= 0xff;
1201 tmp |= *data << 8;
1202 } else {
1203 tmp &= 0xff00;
1204 tmp |= *data;
1205 }
1206
1207 eeprom_93cx6_write(&ks->eeprom, offset/2, tmp);
1208 eeprom_93cx6_wren(&ks->eeprom, false);
1209
1210 ks8851_eeprom_release(ks);
1211
1212 return 0;
1213}
1214
1215static int ks8851_get_eeprom(struct net_device *dev,
1216 struct ethtool_eeprom *ee, u8 *data)
1217{
1218 struct ks8851_net *ks = netdev_priv(dev);
1219 int offset = ee->offset;
1220 int len = ee->len;
1221
1222
1223 if (len & 1 || offset & 1)
1224 return -EINVAL;
1225
1226 if (ks8851_eeprom_claim(ks))
1227 return -ENOENT;
1228
1229 ee->magic = KS_EEPROM_MAGIC;
1230
1231 eeprom_93cx6_multiread(&ks->eeprom, offset/2, (__le16 *)data, len/2);
1232 ks8851_eeprom_release(ks);
1233
1234 return 0;
1235}
1236
1237static int ks8851_get_eeprom_len(struct net_device *dev)
1238{
1239 struct ks8851_net *ks = netdev_priv(dev);
1240
1241
1242 return ks->rc_ccr & CCR_EEPROM ? 128 : 0;
1243}
1244
1245static const struct ethtool_ops ks8851_ethtool_ops = {
1246 .get_drvinfo = ks8851_get_drvinfo,
1247 .get_msglevel = ks8851_get_msglevel,
1248 .set_msglevel = ks8851_set_msglevel,
1249 .get_link = ks8851_get_link,
1250 .nway_reset = ks8851_nway_reset,
1251 .get_eeprom_len = ks8851_get_eeprom_len,
1252 .get_eeprom = ks8851_get_eeprom,
1253 .set_eeprom = ks8851_set_eeprom,
1254 .get_link_ksettings = ks8851_get_link_ksettings,
1255 .set_link_ksettings = ks8851_set_link_ksettings,
1256};
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268static int ks8851_phy_reg(int reg)
1269{
1270 switch (reg) {
1271 case MII_BMCR:
1272 return KS_P1MBCR;
1273 case MII_BMSR:
1274 return KS_P1MBSR;
1275 case MII_PHYSID1:
1276 return KS_PHY1ILR;
1277 case MII_PHYSID2:
1278 return KS_PHY1IHR;
1279 case MII_ADVERTISE:
1280 return KS_P1ANAR;
1281 case MII_LPA:
1282 return KS_P1ANLPR;
1283 }
1284
1285 return 0x0;
1286}
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303static int ks8851_phy_read(struct net_device *dev, int phy_addr, int reg)
1304{
1305 struct ks8851_net *ks = netdev_priv(dev);
1306 int ksreg;
1307 int result;
1308
1309 ksreg = ks8851_phy_reg(reg);
1310 if (!ksreg)
1311 return 0x0;
1312
1313 mutex_lock(&ks->lock);
1314 result = ks8851_rdreg16(ks, ksreg);
1315 mutex_unlock(&ks->lock);
1316
1317 return result;
1318}
1319
1320static void ks8851_phy_write(struct net_device *dev,
1321 int phy, int reg, int value)
1322{
1323 struct ks8851_net *ks = netdev_priv(dev);
1324 int ksreg;
1325
1326 ksreg = ks8851_phy_reg(reg);
1327 if (ksreg) {
1328 mutex_lock(&ks->lock);
1329 ks8851_wrreg16(ks, ksreg, value);
1330 mutex_unlock(&ks->lock);
1331 }
1332}
1333
1334
1335
1336
1337
1338
1339
1340static int ks8851_read_selftest(struct ks8851_net *ks)
1341{
1342 unsigned both_done = MBIR_TXMBF | MBIR_RXMBF;
1343 int ret = 0;
1344 unsigned rd;
1345
1346 rd = ks8851_rdreg16(ks, KS_MBIR);
1347
1348 if ((rd & both_done) != both_done) {
1349 netdev_warn(ks->netdev, "Memory selftest not finished\n");
1350 return 0;
1351 }
1352
1353 if (rd & MBIR_TXMBFA) {
1354 netdev_err(ks->netdev, "TX memory selftest fail\n");
1355 ret |= 1;
1356 }
1357
1358 if (rd & MBIR_RXMBFA) {
1359 netdev_err(ks->netdev, "RX memory selftest fail\n");
1360 ret |= 2;
1361 }
1362
1363 return 0;
1364}
1365
1366
1367
1368#ifdef CONFIG_PM_SLEEP
1369
1370static int ks8851_suspend(struct device *dev)
1371{
1372 struct ks8851_net *ks = dev_get_drvdata(dev);
1373 struct net_device *netdev = ks->netdev;
1374
1375 if (netif_running(netdev)) {
1376 netif_device_detach(netdev);
1377 ks8851_net_stop(netdev);
1378 }
1379
1380 return 0;
1381}
1382
1383static int ks8851_resume(struct device *dev)
1384{
1385 struct ks8851_net *ks = dev_get_drvdata(dev);
1386 struct net_device *netdev = ks->netdev;
1387
1388 if (netif_running(netdev)) {
1389 ks8851_net_open(netdev);
1390 netif_device_attach(netdev);
1391 }
1392
1393 return 0;
1394}
1395#endif
1396
1397static SIMPLE_DEV_PM_OPS(ks8851_pm_ops, ks8851_suspend, ks8851_resume);
1398
1399static int ks8851_probe(struct spi_device *spi)
1400{
1401 struct net_device *ndev;
1402 struct ks8851_net *ks;
1403 int ret;
1404 unsigned cider;
1405 int gpio;
1406
1407 ndev = alloc_etherdev(sizeof(struct ks8851_net));
1408 if (!ndev)
1409 return -ENOMEM;
1410
1411 spi->bits_per_word = 8;
1412
1413 ks = netdev_priv(ndev);
1414
1415 ks->netdev = ndev;
1416 ks->spidev = spi;
1417 ks->tx_space = 6144;
1418
1419 gpio = of_get_named_gpio_flags(spi->dev.of_node, "reset-gpios",
1420 0, NULL);
1421 if (gpio == -EPROBE_DEFER) {
1422 ret = gpio;
1423 goto err_gpio;
1424 }
1425
1426 ks->gpio = gpio;
1427 if (gpio_is_valid(gpio)) {
1428 ret = devm_gpio_request_one(&spi->dev, gpio,
1429 GPIOF_OUT_INIT_LOW, "ks8851_rst_n");
1430 if (ret) {
1431 dev_err(&spi->dev, "reset gpio request failed\n");
1432 goto err_gpio;
1433 }
1434 }
1435
1436 ks->vdd_io = devm_regulator_get(&spi->dev, "vdd-io");
1437 if (IS_ERR(ks->vdd_io)) {
1438 ret = PTR_ERR(ks->vdd_io);
1439 goto err_reg_io;
1440 }
1441
1442 ret = regulator_enable(ks->vdd_io);
1443 if (ret) {
1444 dev_err(&spi->dev, "regulator vdd_io enable fail: %d\n",
1445 ret);
1446 goto err_reg_io;
1447 }
1448
1449 ks->vdd_reg = devm_regulator_get(&spi->dev, "vdd");
1450 if (IS_ERR(ks->vdd_reg)) {
1451 ret = PTR_ERR(ks->vdd_reg);
1452 goto err_reg;
1453 }
1454
1455 ret = regulator_enable(ks->vdd_reg);
1456 if (ret) {
1457 dev_err(&spi->dev, "regulator vdd enable fail: %d\n",
1458 ret);
1459 goto err_reg;
1460 }
1461
1462 if (gpio_is_valid(gpio)) {
1463 usleep_range(10000, 11000);
1464 gpio_set_value(gpio, 1);
1465 }
1466
1467 mutex_init(&ks->lock);
1468 spin_lock_init(&ks->statelock);
1469
1470 INIT_WORK(&ks->tx_work, ks8851_tx_work);
1471 INIT_WORK(&ks->rxctrl_work, ks8851_rxctrl_work);
1472
1473
1474
1475 spi_message_init(&ks->spi_msg1);
1476 spi_message_add_tail(&ks->spi_xfer1, &ks->spi_msg1);
1477
1478 spi_message_init(&ks->spi_msg2);
1479 spi_message_add_tail(&ks->spi_xfer2[0], &ks->spi_msg2);
1480 spi_message_add_tail(&ks->spi_xfer2[1], &ks->spi_msg2);
1481
1482
1483
1484 ks->eeprom.data = ks;
1485 ks->eeprom.width = PCI_EEPROM_WIDTH_93C46;
1486 ks->eeprom.register_read = ks8851_eeprom_regread;
1487 ks->eeprom.register_write = ks8851_eeprom_regwrite;
1488
1489
1490 ks->mii.dev = ndev;
1491 ks->mii.phy_id = 1,
1492 ks->mii.phy_id_mask = 1;
1493 ks->mii.reg_num_mask = 0xf;
1494 ks->mii.mdio_read = ks8851_phy_read;
1495 ks->mii.mdio_write = ks8851_phy_write;
1496
1497 dev_info(&spi->dev, "message enable is %d\n", msg_enable);
1498
1499
1500 ks->msg_enable = netif_msg_init(msg_enable, (NETIF_MSG_DRV |
1501 NETIF_MSG_PROBE |
1502 NETIF_MSG_LINK));
1503
1504 skb_queue_head_init(&ks->txq);
1505
1506 ndev->ethtool_ops = &ks8851_ethtool_ops;
1507 SET_NETDEV_DEV(ndev, &spi->dev);
1508
1509 spi_set_drvdata(spi, ks);
1510
1511 ndev->if_port = IF_PORT_100BASET;
1512 ndev->netdev_ops = &ks8851_netdev_ops;
1513 ndev->irq = spi->irq;
1514
1515
1516 ks8851_soft_reset(ks, GRR_GSR);
1517
1518
1519 cider = ks8851_rdreg16(ks, KS_CIDER);
1520 if ((cider & ~CIDER_REV_MASK) != CIDER_ID) {
1521 dev_err(&spi->dev, "failed to read device ID\n");
1522 ret = -ENODEV;
1523 goto err_id;
1524 }
1525
1526
1527 ks->rc_ccr = ks8851_rdreg16(ks, KS_CCR);
1528
1529 ks8851_read_selftest(ks);
1530 ks8851_init_mac(ks);
1531
1532 ret = request_threaded_irq(spi->irq, NULL, ks8851_irq,
1533 IRQF_TRIGGER_LOW | IRQF_ONESHOT,
1534 ndev->name, ks);
1535 if (ret < 0) {
1536 dev_err(&spi->dev, "failed to get irq\n");
1537 goto err_irq;
1538 }
1539
1540 ret = register_netdev(ndev);
1541 if (ret) {
1542 dev_err(&spi->dev, "failed to register network device\n");
1543 goto err_netdev;
1544 }
1545
1546 netdev_info(ndev, "revision %d, MAC %pM, IRQ %d, %s EEPROM\n",
1547 CIDER_REV_GET(cider), ndev->dev_addr, ndev->irq,
1548 ks->rc_ccr & CCR_EEPROM ? "has" : "no");
1549
1550 return 0;
1551
1552
1553err_netdev:
1554 free_irq(ndev->irq, ks);
1555
1556err_irq:
1557 if (gpio_is_valid(gpio))
1558 gpio_set_value(gpio, 0);
1559err_id:
1560 regulator_disable(ks->vdd_reg);
1561err_reg:
1562 regulator_disable(ks->vdd_io);
1563err_reg_io:
1564err_gpio:
1565 free_netdev(ndev);
1566 return ret;
1567}
1568
1569static int ks8851_remove(struct spi_device *spi)
1570{
1571 struct ks8851_net *priv = spi_get_drvdata(spi);
1572
1573 if (netif_msg_drv(priv))
1574 dev_info(&spi->dev, "remove\n");
1575
1576 unregister_netdev(priv->netdev);
1577 free_irq(spi->irq, priv);
1578 if (gpio_is_valid(priv->gpio))
1579 gpio_set_value(priv->gpio, 0);
1580 regulator_disable(priv->vdd_reg);
1581 regulator_disable(priv->vdd_io);
1582 free_netdev(priv->netdev);
1583
1584 return 0;
1585}
1586
1587static const struct of_device_id ks8851_match_table[] = {
1588 { .compatible = "micrel,ks8851" },
1589 { }
1590};
1591MODULE_DEVICE_TABLE(of, ks8851_match_table);
1592
1593static struct spi_driver ks8851_driver = {
1594 .driver = {
1595 .name = "ks8851",
1596 .of_match_table = ks8851_match_table,
1597 .pm = &ks8851_pm_ops,
1598 },
1599 .probe = ks8851_probe,
1600 .remove = ks8851_remove,
1601};
1602module_spi_driver(ks8851_driver);
1603
1604MODULE_DESCRIPTION("KS8851 Network driver");
1605MODULE_AUTHOR("Ben Dooks <ben@simtec.co.uk>");
1606MODULE_LICENSE("GPL");
1607
1608module_param_named(message, msg_enable, int, 0);
1609MODULE_PARM_DESC(message, "Message verbosity level (0=none, 31=all)");
1610MODULE_ALIAS("spi:ks8851");
1611