aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/ks8851.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/ks8851.c')
-rw-r--r--drivers/net/ks8851.c448
1 files changed, 396 insertions, 52 deletions
diff --git a/drivers/net/ks8851.c b/drivers/net/ks8851.c
index 9e9f9b349766..b4fb07a6f13f 100644
--- a/drivers/net/ks8851.c
+++ b/drivers/net/ks8851.c
@@ -9,6 +9,8 @@
9 * published by the Free Software Foundation. 9 * published by the Free Software Foundation.
10 */ 10 */
11 11
12#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
13
12#define DEBUG 14#define DEBUG
13 15
14#include <linux/module.h> 16#include <linux/module.h>
@@ -76,7 +78,9 @@ union ks8851_tx_hdr {
76 * @msg_enable: The message flags controlling driver output (see ethtool). 78 * @msg_enable: The message flags controlling driver output (see ethtool).
77 * @fid: Incrementing frame id tag. 79 * @fid: Incrementing frame id tag.
78 * @rc_ier: Cached copy of KS_IER. 80 * @rc_ier: Cached copy of KS_IER.
81 * @rc_ccr: Cached copy of KS_CCR.
79 * @rc_rxqcr: Cached copy of KS_RXQCR. 82 * @rc_rxqcr: Cached copy of KS_RXQCR.
83 * @eeprom_size: Companion eeprom size in Bytes, 0 if no eeprom
80 * 84 *
81 * The @lock ensures that the chip is protected when certain operations are 85 * The @lock ensures that the chip is protected when certain operations are
82 * in progress. When the read or write packet transfer is in progress, most 86 * in progress. When the read or write packet transfer is in progress, most
@@ -107,6 +111,8 @@ struct ks8851_net {
107 111
108 u16 rc_ier; 112 u16 rc_ier;
109 u16 rc_rxqcr; 113 u16 rc_rxqcr;
114 u16 rc_ccr;
115 u16 eeprom_size;
110 116
111 struct mii_if_info mii; 117 struct mii_if_info mii;
112 struct ks8851_rxctrl rxctrl; 118 struct ks8851_rxctrl rxctrl;
@@ -125,11 +131,6 @@ struct ks8851_net {
125 131
126static int msg_enable; 132static int msg_enable;
127 133
128#define ks_info(_ks, _msg...) dev_info(&(_ks)->spidev->dev, _msg)
129#define ks_warn(_ks, _msg...) dev_warn(&(_ks)->spidev->dev, _msg)
130#define ks_dbg(_ks, _msg...) dev_dbg(&(_ks)->spidev->dev, _msg)
131#define ks_err(_ks, _msg...) dev_err(&(_ks)->spidev->dev, _msg)
132
133/* shift for byte-enable data */ 134/* shift for byte-enable data */
134#define BYTE_EN(_x) ((_x) << 2) 135#define BYTE_EN(_x) ((_x) << 2)
135 136
@@ -167,7 +168,7 @@ static void ks8851_wrreg16(struct ks8851_net *ks, unsigned reg, unsigned val)
167 168
168 ret = spi_sync(ks->spidev, msg); 169 ret = spi_sync(ks->spidev, msg);
169 if (ret < 0) 170 if (ret < 0)
170 ks_err(ks, "spi_sync() failed\n"); 171 netdev_err(ks->netdev, "spi_sync() failed\n");
171} 172}
172 173
173/** 174/**
@@ -197,7 +198,7 @@ static void ks8851_wrreg8(struct ks8851_net *ks, unsigned reg, unsigned val)
197 198
198 ret = spi_sync(ks->spidev, msg); 199 ret = spi_sync(ks->spidev, msg);
199 if (ret < 0) 200 if (ret < 0)
200 ks_err(ks, "spi_sync() failed\n"); 201 netdev_err(ks->netdev, "spi_sync() failed\n");
201} 202}
202 203
203/** 204/**
@@ -263,7 +264,7 @@ static void ks8851_rdreg(struct ks8851_net *ks, unsigned op,
263 264
264 ret = spi_sync(ks->spidev, msg); 265 ret = spi_sync(ks->spidev, msg);
265 if (ret < 0) 266 if (ret < 0)
266 ks_err(ks, "read: spi_sync() failed\n"); 267 netdev_err(ks->netdev, "read: spi_sync() failed\n");
267 else if (ks8851_rx_1msg(ks)) 268 else if (ks8851_rx_1msg(ks))
268 memcpy(rxb, trx + 2, rxl); 269 memcpy(rxb, trx + 2, rxl);
269 else 270 else
@@ -417,8 +418,8 @@ static void ks8851_rdfifo(struct ks8851_net *ks, u8 *buff, unsigned len)
417 u8 txb[1]; 418 u8 txb[1];
418 int ret; 419 int ret;
419 420
420 if (netif_msg_rx_status(ks)) 421 netif_dbg(ks, rx_status, ks->netdev,
421 ks_dbg(ks, "%s: %d@%p\n", __func__, len, buff); 422 "%s: %d@%p\n", __func__, len, buff);
422 423
423 /* set the operation we're issuing */ 424 /* set the operation we're issuing */
424 txb[0] = KS_SPIOP_RXFIFO; 425 txb[0] = KS_SPIOP_RXFIFO;
@@ -434,7 +435,7 @@ static void ks8851_rdfifo(struct ks8851_net *ks, u8 *buff, unsigned len)
434 435
435 ret = spi_sync(ks->spidev, msg); 436 ret = spi_sync(ks->spidev, msg);
436 if (ret < 0) 437 if (ret < 0)
437 ks_err(ks, "%s: spi_sync() failed\n", __func__); 438 netdev_err(ks->netdev, "%s: spi_sync() failed\n", __func__);
438} 439}
439 440
440/** 441/**
@@ -446,10 +447,11 @@ static void ks8851_rdfifo(struct ks8851_net *ks, u8 *buff, unsigned len)
446*/ 447*/
447static void ks8851_dbg_dumpkkt(struct ks8851_net *ks, u8 *rxpkt) 448static void ks8851_dbg_dumpkkt(struct ks8851_net *ks, u8 *rxpkt)
448{ 449{
449 ks_dbg(ks, "pkt %02x%02x%02x%02x %02x%02x%02x%02x %02x%02x%02x%02x\n", 450 netdev_dbg(ks->netdev,
450 rxpkt[4], rxpkt[5], rxpkt[6], rxpkt[7], 451 "pkt %02x%02x%02x%02x %02x%02x%02x%02x %02x%02x%02x%02x\n",
451 rxpkt[8], rxpkt[9], rxpkt[10], rxpkt[11], 452 rxpkt[4], rxpkt[5], rxpkt[6], rxpkt[7],
452 rxpkt[12], rxpkt[13], rxpkt[14], rxpkt[15]); 453 rxpkt[8], rxpkt[9], rxpkt[10], rxpkt[11],
454 rxpkt[12], rxpkt[13], rxpkt[14], rxpkt[15]);
453} 455}
454 456
455/** 457/**
@@ -471,8 +473,8 @@ static void ks8851_rx_pkts(struct ks8851_net *ks)
471 473
472 rxfc = ks8851_rdreg8(ks, KS_RXFC); 474 rxfc = ks8851_rdreg8(ks, KS_RXFC);
473 475
474 if (netif_msg_rx_status(ks)) 476 netif_dbg(ks, rx_status, ks->netdev,
475 ks_dbg(ks, "%s: %d packets\n", __func__, rxfc); 477 "%s: %d packets\n", __func__, rxfc);
476 478
477 /* Currently we're issuing a read per packet, but we could possibly 479 /* Currently we're issuing a read per packet, but we could possibly
478 * improve the code by issuing a single read, getting the receive 480 * improve the code by issuing a single read, getting the receive
@@ -489,9 +491,8 @@ static void ks8851_rx_pkts(struct ks8851_net *ks)
489 rxstat = rxh & 0xffff; 491 rxstat = rxh & 0xffff;
490 rxlen = rxh >> 16; 492 rxlen = rxh >> 16;
491 493
492 if (netif_msg_rx_status(ks)) 494 netif_dbg(ks, rx_status, ks->netdev,
493 ks_dbg(ks, "rx: stat 0x%04x, len 0x%04x\n", 495 "rx: stat 0x%04x, len 0x%04x\n", rxstat, rxlen);
494 rxstat, rxlen);
495 496
496 /* the length of the packet includes the 32bit CRC */ 497 /* the length of the packet includes the 32bit CRC */
497 498
@@ -553,9 +554,8 @@ static void ks8851_irq_work(struct work_struct *work)
553 554
554 status = ks8851_rdreg16(ks, KS_ISR); 555 status = ks8851_rdreg16(ks, KS_ISR);
555 556
556 if (netif_msg_intr(ks)) 557 netif_dbg(ks, intr, ks->netdev,
557 dev_dbg(&ks->spidev->dev, "%s: status 0x%04x\n", 558 "%s: status 0x%04x\n", __func__, status);
558 __func__, status);
559 559
560 if (status & IRQ_LCI) { 560 if (status & IRQ_LCI) {
561 /* should do something about checking link status */ 561 /* should do something about checking link status */
@@ -582,8 +582,8 @@ static void ks8851_irq_work(struct work_struct *work)
582 * system */ 582 * system */
583 ks->tx_space = ks8851_rdreg16(ks, KS_TXMIR); 583 ks->tx_space = ks8851_rdreg16(ks, KS_TXMIR);
584 584
585 if (netif_msg_intr(ks)) 585 netif_dbg(ks, intr, ks->netdev,
586 ks_dbg(ks, "%s: txspace %d\n", __func__, ks->tx_space); 586 "%s: txspace %d\n", __func__, ks->tx_space);
587 } 587 }
588 588
589 if (status & IRQ_RXI) 589 if (status & IRQ_RXI)
@@ -659,9 +659,8 @@ static void ks8851_wrpkt(struct ks8851_net *ks, struct sk_buff *txp, bool irq)
659 unsigned fid = 0; 659 unsigned fid = 0;
660 int ret; 660 int ret;
661 661
662 if (netif_msg_tx_queued(ks)) 662 netif_dbg(ks, tx_queued, ks->netdev, "%s: skb %p, %d@%p, irq %d\n",
663 dev_dbg(&ks->spidev->dev, "%s: skb %p, %d@%p, irq %d\n", 663 __func__, txp, txp->len, txp->data, irq);
664 __func__, txp, txp->len, txp->data, irq);
665 664
666 fid = ks->fid++; 665 fid = ks->fid++;
667 fid &= TXFR_TXFID_MASK; 666 fid &= TXFR_TXFID_MASK;
@@ -685,7 +684,7 @@ static void ks8851_wrpkt(struct ks8851_net *ks, struct sk_buff *txp, bool irq)
685 684
686 ret = spi_sync(ks->spidev, msg); 685 ret = spi_sync(ks->spidev, msg);
687 if (ret < 0) 686 if (ret < 0)
688 ks_err(ks, "%s: spi_sync() failed\n", __func__); 687 netdev_err(ks->netdev, "%s: spi_sync() failed\n", __func__);
689} 688}
690 689
691/** 690/**
@@ -746,8 +745,7 @@ static void ks8851_set_powermode(struct ks8851_net *ks, unsigned pwrmode)
746{ 745{
747 unsigned pmecr; 746 unsigned pmecr;
748 747
749 if (netif_msg_hw(ks)) 748 netif_dbg(ks, hw, ks->netdev, "setting power mode %d\n", pwrmode);
750 ks_dbg(ks, "setting power mode %d\n", pwrmode);
751 749
752 pmecr = ks8851_rdreg16(ks, KS_PMECR); 750 pmecr = ks8851_rdreg16(ks, KS_PMECR);
753 pmecr &= ~PMECR_PM_MASK; 751 pmecr &= ~PMECR_PM_MASK;
@@ -771,8 +769,7 @@ static int ks8851_net_open(struct net_device *dev)
771 * else at the moment */ 769 * else at the moment */
772 mutex_lock(&ks->lock); 770 mutex_lock(&ks->lock);
773 771
774 if (netif_msg_ifup(ks)) 772 netif_dbg(ks, ifup, ks->netdev, "opening\n");
775 ks_dbg(ks, "opening %s\n", dev->name);
776 773
777 /* bring chip out of any power saving mode it was in */ 774 /* bring chip out of any power saving mode it was in */
778 ks8851_set_powermode(ks, PMECR_PM_NORMAL); 775 ks8851_set_powermode(ks, PMECR_PM_NORMAL);
@@ -828,8 +825,7 @@ static int ks8851_net_open(struct net_device *dev)
828 825
829 netif_start_queue(ks->netdev); 826 netif_start_queue(ks->netdev);
830 827
831 if (netif_msg_ifup(ks)) 828 netif_dbg(ks, ifup, ks->netdev, "network device up\n");
832 ks_dbg(ks, "network device %s up\n", dev->name);
833 829
834 mutex_unlock(&ks->lock); 830 mutex_unlock(&ks->lock);
835 return 0; 831 return 0;
@@ -847,8 +843,7 @@ static int ks8851_net_stop(struct net_device *dev)
847{ 843{
848 struct ks8851_net *ks = netdev_priv(dev); 844 struct ks8851_net *ks = netdev_priv(dev);
849 845
850 if (netif_msg_ifdown(ks)) 846 netif_info(ks, ifdown, dev, "shutting down\n");
851 ks_info(ks, "%s: shutting down\n", dev->name);
852 847
853 netif_stop_queue(dev); 848 netif_stop_queue(dev);
854 849
@@ -876,8 +871,8 @@ static int ks8851_net_stop(struct net_device *dev)
876 while (!skb_queue_empty(&ks->txq)) { 871 while (!skb_queue_empty(&ks->txq)) {
877 struct sk_buff *txb = skb_dequeue(&ks->txq); 872 struct sk_buff *txb = skb_dequeue(&ks->txq);
878 873
879 if (netif_msg_ifdown(ks)) 874 netif_dbg(ks, ifdown, ks->netdev,
880 ks_dbg(ks, "%s: freeing txb %p\n", __func__, txb); 875 "%s: freeing txb %p\n", __func__, txb);
881 876
882 dev_kfree_skb(txb); 877 dev_kfree_skb(txb);
883 } 878 }
@@ -906,9 +901,8 @@ static netdev_tx_t ks8851_start_xmit(struct sk_buff *skb,
906 unsigned needed = calc_txlen(skb->len); 901 unsigned needed = calc_txlen(skb->len);
907 netdev_tx_t ret = NETDEV_TX_OK; 902 netdev_tx_t ret = NETDEV_TX_OK;
908 903
909 if (netif_msg_tx_queued(ks)) 904 netif_dbg(ks, tx_queued, ks->netdev,
910 ks_dbg(ks, "%s: skb %p, %d@%p\n", __func__, 905 "%s: skb %p, %d@%p\n", __func__, skb, skb->len, skb->data);
911 skb, skb->len, skb->data);
912 906
913 spin_lock(&ks->statelock); 907 spin_lock(&ks->statelock);
914 908
@@ -968,13 +962,13 @@ static void ks8851_set_rx_mode(struct net_device *dev)
968 rxctrl.rxcr1 = (RXCR1_RXME | RXCR1_RXAE | 962 rxctrl.rxcr1 = (RXCR1_RXME | RXCR1_RXAE |
969 RXCR1_RXPAFMA | RXCR1_RXMAFMA); 963 RXCR1_RXPAFMA | RXCR1_RXMAFMA);
970 } else if (dev->flags & IFF_MULTICAST && !netdev_mc_empty(dev)) { 964 } else if (dev->flags & IFF_MULTICAST && !netdev_mc_empty(dev)) {
971 struct dev_mc_list *mcptr; 965 struct netdev_hw_addr *ha;
972 u32 crc; 966 u32 crc;
973 967
974 /* accept some multicast */ 968 /* accept some multicast */
975 969
976 netdev_for_each_mc_addr(mcptr, dev) { 970 netdev_for_each_mc_addr(ha, dev) {
977 crc = ether_crc(ETH_ALEN, mcptr->dmi_addr); 971 crc = ether_crc(ETH_ALEN, ha->addr);
978 crc >>= (32 - 6); /* get top six bits */ 972 crc >>= (32 - 6); /* get top six bits */
979 973
980 rxctrl.mchash[crc >> 4] |= (1 << (crc & 0xf)); 974 rxctrl.mchash[crc >> 4] |= (1 << (crc & 0xf));
@@ -1040,6 +1034,234 @@ static const struct net_device_ops ks8851_netdev_ops = {
1040 .ndo_validate_addr = eth_validate_addr, 1034 .ndo_validate_addr = eth_validate_addr,
1041}; 1035};
1042 1036
1037/* Companion eeprom access */
1038
1039enum { /* EEPROM programming states */
1040 EEPROM_CONTROL,
1041 EEPROM_ADDRESS,
1042 EEPROM_DATA,
1043 EEPROM_COMPLETE
1044};
1045
1046/**
1047 * ks8851_eeprom_read - read a 16bits word in ks8851 companion EEPROM
1048 * @dev: The network device the PHY is on.
1049 * @addr: EEPROM address to read
1050 *
1051 * eeprom_size: used to define the data coding length. Can be changed
1052 * through debug-fs.
1053 *
1054 * Programs a read on the EEPROM using ks8851 EEPROM SW access feature.
1055 * Warning: The READ feature is not supported on ks8851 revision 0.
1056 *
1057 * Rough programming model:
1058 * - on period start: set clock high and read value on bus
1059 * - on period / 2: set clock low and program value on bus
1060 * - start on period / 2
1061 */
1062unsigned int ks8851_eeprom_read(struct net_device *dev, unsigned int addr)
1063{
1064 struct ks8851_net *ks = netdev_priv(dev);
1065 int eepcr;
1066 int ctrl = EEPROM_OP_READ;
1067 int state = EEPROM_CONTROL;
1068 int bit_count = EEPROM_OP_LEN - 1;
1069 unsigned int data = 0;
1070 int dummy;
1071 unsigned int addr_len;
1072
1073 addr_len = (ks->eeprom_size == 128) ? 6 : 8;
1074
1075 /* start transaction: chip select high, authorize write */
1076 mutex_lock(&ks->lock);
1077 eepcr = EEPCR_EESA | EEPCR_EESRWA;
1078 ks8851_wrreg16(ks, KS_EEPCR, eepcr);
1079 eepcr |= EEPCR_EECS;
1080 ks8851_wrreg16(ks, KS_EEPCR, eepcr);
1081 mutex_unlock(&ks->lock);
1082
1083 while (state != EEPROM_COMPLETE) {
1084 /* falling clock period starts... */
1085 /* set EED_IO pin for control and address */
1086 eepcr &= ~EEPCR_EEDO;
1087 switch (state) {
1088 case EEPROM_CONTROL:
1089 eepcr |= ((ctrl >> bit_count) & 1) << 2;
1090 if (bit_count-- <= 0) {
1091 bit_count = addr_len - 1;
1092 state = EEPROM_ADDRESS;
1093 }
1094 break;
1095 case EEPROM_ADDRESS:
1096 eepcr |= ((addr >> bit_count) & 1) << 2;
1097 bit_count--;
1098 break;
1099 case EEPROM_DATA:
1100 /* Change to receive mode */
1101 eepcr &= ~EEPCR_EESRWA;
1102 break;
1103 }
1104
1105 /* lower clock */
1106 eepcr &= ~EEPCR_EESCK;
1107
1108 mutex_lock(&ks->lock);
1109 ks8851_wrreg16(ks, KS_EEPCR, eepcr);
1110 mutex_unlock(&ks->lock);
1111
1112 /* waitread period / 2 */
1113 udelay(EEPROM_SK_PERIOD / 2);
1114
1115 /* rising clock period starts... */
1116
1117 /* raise clock */
1118 mutex_lock(&ks->lock);
1119 eepcr |= EEPCR_EESCK;
1120 ks8851_wrreg16(ks, KS_EEPCR, eepcr);
1121 mutex_unlock(&ks->lock);
1122
1123 /* Manage read */
1124 switch (state) {
1125 case EEPROM_ADDRESS:
1126 if (bit_count < 0) {
1127 bit_count = EEPROM_DATA_LEN - 1;
1128 state = EEPROM_DATA;
1129 }
1130 break;
1131 case EEPROM_DATA:
1132 mutex_lock(&ks->lock);
1133 dummy = ks8851_rdreg16(ks, KS_EEPCR);
1134 mutex_unlock(&ks->lock);
1135 data |= ((dummy >> EEPCR_EESB_OFFSET) & 1) << bit_count;
1136 if (bit_count-- <= 0)
1137 state = EEPROM_COMPLETE;
1138 break;
1139 }
1140
1141 /* wait period / 2 */
1142 udelay(EEPROM_SK_PERIOD / 2);
1143 }
1144
1145 /* close transaction */
1146 mutex_lock(&ks->lock);
1147 eepcr &= ~EEPCR_EECS;
1148 ks8851_wrreg16(ks, KS_EEPCR, eepcr);
1149 eepcr = 0;
1150 ks8851_wrreg16(ks, KS_EEPCR, eepcr);
1151 mutex_unlock(&ks->lock);
1152
1153 return data;
1154}
1155
1156/**
1157 * ks8851_eeprom_write - write a 16bits word in ks8851 companion EEPROM
1158 * @dev: The network device the PHY is on.
1159 * @op: operand (can be WRITE, EWEN, EWDS)
1160 * @addr: EEPROM address to write
1161 * @data: data to write
1162 *
1163 * eeprom_size: used to define the data coding length. Can be changed
1164 * through debug-fs.
1165 *
1166 * Programs a write on the EEPROM using ks8851 EEPROM SW access feature.
1167 *
1168 * Note that a write enable is required before writing data.
1169 *
1170 * Rough programming model:
1171 * - on period start: set clock high
1172 * - on period / 2: set clock low and program value on bus
1173 * - start on period / 2
1174 */
1175void ks8851_eeprom_write(struct net_device *dev, unsigned int op,
1176 unsigned int addr, unsigned int data)
1177{
1178 struct ks8851_net *ks = netdev_priv(dev);
1179 int eepcr;
1180 int state = EEPROM_CONTROL;
1181 int bit_count = EEPROM_OP_LEN - 1;
1182 unsigned int addr_len;
1183
1184 addr_len = (ks->eeprom_size == 128) ? 6 : 8;
1185
1186 switch (op) {
1187 case EEPROM_OP_EWEN:
1188 addr = 0x30;
1189 break;
1190 case EEPROM_OP_EWDS:
1191 addr = 0;
1192 break;
1193 }
1194
1195 /* start transaction: chip select high, authorize write */
1196 mutex_lock(&ks->lock);
1197 eepcr = EEPCR_EESA | EEPCR_EESRWA;
1198 ks8851_wrreg16(ks, KS_EEPCR, eepcr);
1199 eepcr |= EEPCR_EECS;
1200 ks8851_wrreg16(ks, KS_EEPCR, eepcr);
1201 mutex_unlock(&ks->lock);
1202
1203 while (state != EEPROM_COMPLETE) {
1204 /* falling clock period starts... */
1205 /* set EED_IO pin for control and address */
1206 eepcr &= ~EEPCR_EEDO;
1207 switch (state) {
1208 case EEPROM_CONTROL:
1209 eepcr |= ((op >> bit_count) & 1) << 2;
1210 if (bit_count-- <= 0) {
1211 bit_count = addr_len - 1;
1212 state = EEPROM_ADDRESS;
1213 }
1214 break;
1215 case EEPROM_ADDRESS:
1216 eepcr |= ((addr >> bit_count) & 1) << 2;
1217 if (bit_count-- <= 0) {
1218 if (op == EEPROM_OP_WRITE) {
1219 bit_count = EEPROM_DATA_LEN - 1;
1220 state = EEPROM_DATA;
1221 } else {
1222 state = EEPROM_COMPLETE;
1223 }
1224 }
1225 break;
1226 case EEPROM_DATA:
1227 eepcr |= ((data >> bit_count) & 1) << 2;
1228 if (bit_count-- <= 0)
1229 state = EEPROM_COMPLETE;
1230 break;
1231 }
1232
1233 /* lower clock */
1234 eepcr &= ~EEPCR_EESCK;
1235
1236 mutex_lock(&ks->lock);
1237 ks8851_wrreg16(ks, KS_EEPCR, eepcr);
1238 mutex_unlock(&ks->lock);
1239
1240 /* wait period / 2 */
1241 udelay(EEPROM_SK_PERIOD / 2);
1242
1243 /* rising clock period starts... */
1244
1245 /* raise clock */
1246 eepcr |= EEPCR_EESCK;
1247 mutex_lock(&ks->lock);
1248 ks8851_wrreg16(ks, KS_EEPCR, eepcr);
1249 mutex_unlock(&ks->lock);
1250
1251 /* wait period / 2 */
1252 udelay(EEPROM_SK_PERIOD / 2);
1253 }
1254
1255 /* close transaction */
1256 mutex_lock(&ks->lock);
1257 eepcr &= ~EEPCR_EECS;
1258 ks8851_wrreg16(ks, KS_EEPCR, eepcr);
1259 eepcr = 0;
1260 ks8851_wrreg16(ks, KS_EEPCR, eepcr);
1261 mutex_unlock(&ks->lock);
1262
1263}
1264
1043/* ethtool support */ 1265/* ethtool support */
1044 1266
1045static void ks8851_get_drvinfo(struct net_device *dev, 1267static void ks8851_get_drvinfo(struct net_device *dev,
@@ -1086,6 +1308,117 @@ static int ks8851_nway_reset(struct net_device *dev)
1086 return mii_nway_restart(&ks->mii); 1308 return mii_nway_restart(&ks->mii);
1087} 1309}
1088 1310
1311static int ks8851_get_eeprom_len(struct net_device *dev)
1312{
1313 struct ks8851_net *ks = netdev_priv(dev);
1314 return ks->eeprom_size;
1315}
1316
1317static int ks8851_get_eeprom(struct net_device *dev,
1318 struct ethtool_eeprom *eeprom, u8 *bytes)
1319{
1320 struct ks8851_net *ks = netdev_priv(dev);
1321 u16 *eeprom_buff;
1322 int first_word;
1323 int last_word;
1324 int ret_val = 0;
1325 u16 i;
1326
1327 if (eeprom->len == 0)
1328 return -EINVAL;
1329
1330 if (eeprom->len > ks->eeprom_size)
1331 return -EINVAL;
1332
1333 eeprom->magic = ks8851_rdreg16(ks, KS_CIDER);
1334
1335 first_word = eeprom->offset >> 1;
1336 last_word = (eeprom->offset + eeprom->len - 1) >> 1;
1337
1338 eeprom_buff = kmalloc(sizeof(u16) *
1339 (last_word - first_word + 1), GFP_KERNEL);
1340 if (!eeprom_buff)
1341 return -ENOMEM;
1342
1343 for (i = 0; i < last_word - first_word + 1; i++)
1344 eeprom_buff[i] = ks8851_eeprom_read(dev, first_word + 1);
1345
1346 /* Device's eeprom is little-endian, word addressable */
1347 for (i = 0; i < last_word - first_word + 1; i++)
1348 le16_to_cpus(&eeprom_buff[i]);
1349
1350 memcpy(bytes, (u8 *)eeprom_buff + (eeprom->offset & 1), eeprom->len);
1351 kfree(eeprom_buff);
1352
1353 return ret_val;
1354}
1355
1356static int ks8851_set_eeprom(struct net_device *dev,
1357 struct ethtool_eeprom *eeprom, u8 *bytes)
1358{
1359 struct ks8851_net *ks = netdev_priv(dev);
1360 u16 *eeprom_buff;
1361 void *ptr;
1362 int max_len;
1363 int first_word;
1364 int last_word;
1365 int ret_val = 0;
1366 u16 i;
1367
1368 if (eeprom->len == 0)
1369 return -EOPNOTSUPP;
1370
1371 if (eeprom->len > ks->eeprom_size)
1372 return -EINVAL;
1373
1374 if (eeprom->magic != ks8851_rdreg16(ks, KS_CIDER))
1375 return -EFAULT;
1376
1377 first_word = eeprom->offset >> 1;
1378 last_word = (eeprom->offset + eeprom->len - 1) >> 1;
1379 max_len = (last_word - first_word + 1) * 2;
1380 eeprom_buff = kmalloc(max_len, GFP_KERNEL);
1381 if (!eeprom_buff)
1382 return -ENOMEM;
1383
1384 ptr = (void *)eeprom_buff;
1385
1386 if (eeprom->offset & 1) {
1387 /* need read/modify/write of first changed EEPROM word */
1388 /* only the second byte of the word is being modified */
1389 eeprom_buff[0] = ks8851_eeprom_read(dev, first_word);
1390 ptr++;
1391 }
1392 if ((eeprom->offset + eeprom->len) & 1)
1393 /* need read/modify/write of last changed EEPROM word */
1394 /* only the first byte of the word is being modified */
1395 eeprom_buff[last_word - first_word] =
1396 ks8851_eeprom_read(dev, last_word);
1397
1398
1399 /* Device's eeprom is little-endian, word addressable */
1400 le16_to_cpus(&eeprom_buff[0]);
1401 le16_to_cpus(&eeprom_buff[last_word - first_word]);
1402
1403 memcpy(ptr, bytes, eeprom->len);
1404
1405 for (i = 0; i < last_word - first_word + 1; i++)
1406 eeprom_buff[i] = cpu_to_le16(eeprom_buff[i]);
1407
1408 ks8851_eeprom_write(dev, EEPROM_OP_EWEN, 0, 0);
1409
1410 for (i = 0; i < last_word - first_word + 1; i++) {
1411 ks8851_eeprom_write(dev, EEPROM_OP_WRITE, first_word + i,
1412 eeprom_buff[i]);
1413 mdelay(EEPROM_WRITE_TIME);
1414 }
1415
1416 ks8851_eeprom_write(dev, EEPROM_OP_EWDS, 0, 0);
1417
1418 kfree(eeprom_buff);
1419 return ret_val;
1420}
1421
1089static const struct ethtool_ops ks8851_ethtool_ops = { 1422static const struct ethtool_ops ks8851_ethtool_ops = {
1090 .get_drvinfo = ks8851_get_drvinfo, 1423 .get_drvinfo = ks8851_get_drvinfo,
1091 .get_msglevel = ks8851_get_msglevel, 1424 .get_msglevel = ks8851_get_msglevel,
@@ -1094,6 +1427,9 @@ static const struct ethtool_ops ks8851_ethtool_ops = {
1094 .set_settings = ks8851_set_settings, 1427 .set_settings = ks8851_set_settings,
1095 .get_link = ks8851_get_link, 1428 .get_link = ks8851_get_link,
1096 .nway_reset = ks8851_nway_reset, 1429 .nway_reset = ks8851_nway_reset,
1430 .get_eeprom_len = ks8851_get_eeprom_len,
1431 .get_eeprom = ks8851_get_eeprom,
1432 .set_eeprom = ks8851_set_eeprom,
1097}; 1433};
1098 1434
1099/* MII interface controls */ 1435/* MII interface controls */
@@ -1187,17 +1523,17 @@ static int ks8851_read_selftest(struct ks8851_net *ks)
1187 rd = ks8851_rdreg16(ks, KS_MBIR); 1523 rd = ks8851_rdreg16(ks, KS_MBIR);
1188 1524
1189 if ((rd & both_done) != both_done) { 1525 if ((rd & both_done) != both_done) {
1190 ks_warn(ks, "Memory selftest not finished\n"); 1526 netdev_warn(ks->netdev, "Memory selftest not finished\n");
1191 return 0; 1527 return 0;
1192 } 1528 }
1193 1529
1194 if (rd & MBIR_TXMBFA) { 1530 if (rd & MBIR_TXMBFA) {
1195 ks_err(ks, "TX memory selftest fail\n"); 1531 netdev_err(ks->netdev, "TX memory selftest fail\n");
1196 ret |= 1; 1532 ret |= 1;
1197 } 1533 }
1198 1534
1199 if (rd & MBIR_RXMBFA) { 1535 if (rd & MBIR_RXMBFA) {
1200 ks_err(ks, "RX memory selftest fail\n"); 1536 netdev_err(ks->netdev, "RX memory selftest fail\n");
1201 ret |= 2; 1537 ret |= 2;
1202 } 1538 }
1203 1539
@@ -1279,6 +1615,14 @@ static int __devinit ks8851_probe(struct spi_device *spi)
1279 goto err_id; 1615 goto err_id;
1280 } 1616 }
1281 1617
1618 /* cache the contents of the CCR register for EEPROM, etc. */
1619 ks->rc_ccr = ks8851_rdreg16(ks, KS_CCR);
1620
1621 if (ks->rc_ccr & CCR_EEPROM)
1622 ks->eeprom_size = 128;
1623 else
1624 ks->eeprom_size = 0;
1625
1282 ks8851_read_selftest(ks); 1626 ks8851_read_selftest(ks);
1283 ks8851_init_mac(ks); 1627 ks8851_init_mac(ks);
1284 1628
@@ -1295,9 +1639,9 @@ static int __devinit ks8851_probe(struct spi_device *spi)
1295 goto err_netdev; 1639 goto err_netdev;
1296 } 1640 }
1297 1641
1298 dev_info(&spi->dev, "revision %d, MAC %pM, IRQ %d\n", 1642 netdev_info(ndev, "revision %d, MAC %pM, IRQ %d\n",
1299 CIDER_REV_GET(ks8851_rdreg16(ks, KS_CIDER)), 1643 CIDER_REV_GET(ks8851_rdreg16(ks, KS_CIDER)),
1300 ndev->dev_addr, ndev->irq); 1644 ndev->dev_addr, ndev->irq);
1301 1645
1302 return 0; 1646 return 0;
1303 1647
@@ -1316,7 +1660,7 @@ static int __devexit ks8851_remove(struct spi_device *spi)
1316 struct ks8851_net *priv = dev_get_drvdata(&spi->dev); 1660 struct ks8851_net *priv = dev_get_drvdata(&spi->dev);
1317 1661
1318 if (netif_msg_drv(priv)) 1662 if (netif_msg_drv(priv))
1319 dev_info(&spi->dev, "remove"); 1663 dev_info(&spi->dev, "remove\n");
1320 1664
1321 unregister_netdev(priv->netdev); 1665 unregister_netdev(priv->netdev);
1322 free_irq(spi->irq, priv); 1666 free_irq(spi->irq, priv);