Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
davinci_emac.c
Go to the documentation of this file.
1 /*
2  * DaVinci Ethernet Medium Access Controller
3  *
4  * DaVinci EMAC is based upon CPPI 3.0 TI DMA engine
5  *
6  * Copyright (C) 2009 Texas Instruments.
7  *
8  * ---------------------------------------------------------------------------
9  *
10  * This program is free software; you can redistribute it and/or modify
11  * it under the terms of the GNU General Public License as published by
12  * the Free Software Foundation; either version 2 of the License, or
13  * (at your option) any later version.
14  *
15  * This program is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18  * GNU General Public License for more details.
19  *
20  * You should have received a copy of the GNU General Public License
21  * along with this program; if not, write to the Free Software
22  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
23  * ---------------------------------------------------------------------------
24  * History:
25  * 0-5 A number of folks worked on this driver in bits and pieces but the major
26  * contribution came from Suraj Iyer and Anant Gole
27  * 6.0 Anant Gole - rewrote the driver as per Linux conventions
28  * 6.1 Chaithrika U S - added support for Gigabit and RMII features,
29  * PHY layer usage
30  */
31 
32 #include <linux/module.h>
33 #include <linux/kernel.h>
34 #include <linux/sched.h>
35 #include <linux/string.h>
36 #include <linux/timer.h>
37 #include <linux/errno.h>
38 #include <linux/in.h>
39 #include <linux/ioport.h>
40 #include <linux/slab.h>
41 #include <linux/mm.h>
42 #include <linux/interrupt.h>
43 #include <linux/init.h>
44 #include <linux/netdevice.h>
45 #include <linux/etherdevice.h>
46 #include <linux/skbuff.h>
47 #include <linux/ethtool.h>
48 #include <linux/highmem.h>
49 #include <linux/proc_fs.h>
50 #include <linux/ctype.h>
51 #include <linux/spinlock.h>
52 #include <linux/dma-mapping.h>
53 #include <linux/clk.h>
54 #include <linux/platform_device.h>
55 #include <linux/semaphore.h>
56 #include <linux/phy.h>
57 #include <linux/bitops.h>
58 #include <linux/io.h>
59 #include <linux/uaccess.h>
60 #include <linux/pm_runtime.h>
61 #include <linux/davinci_emac.h>
62 #include <linux/of.h>
63 #include <linux/of_address.h>
64 #include <linux/of_irq.h>
65 #include <linux/of_net.h>
66 
67 #include <asm/irq.h>
68 #include <asm/page.h>
69 
70 #include "davinci_cpdma.h"
71 
72 static int debug_level;
73 module_param(debug_level, int, 0);
74 MODULE_PARM_DESC(debug_level, "DaVinci EMAC debug level (NETIF_MSG bits)");
75 
76 /* Netif debug messages possible */
77 #define DAVINCI_EMAC_DEBUG (NETIF_MSG_DRV | \
78  NETIF_MSG_PROBE | \
79  NETIF_MSG_LINK | \
80  NETIF_MSG_TIMER | \
81  NETIF_MSG_IFDOWN | \
82  NETIF_MSG_IFUP | \
83  NETIF_MSG_RX_ERR | \
84  NETIF_MSG_TX_ERR | \
85  NETIF_MSG_TX_QUEUED | \
86  NETIF_MSG_INTR | \
87  NETIF_MSG_TX_DONE | \
88  NETIF_MSG_RX_STATUS | \
89  NETIF_MSG_PKTDATA | \
90  NETIF_MSG_HW | \
91  NETIF_MSG_WOL)
92 
93 /* version info */
94 #define EMAC_MAJOR_VERSION 6
95 #define EMAC_MINOR_VERSION 1
96 #define EMAC_MODULE_VERSION "6.1"
98 static const char emac_version_string[] = "TI DaVinci EMAC Linux v6.1";
99 
100 /* Configuration items */
101 #define EMAC_DEF_PASS_CRC (0) /* Do not pass CRC up to frames */
102 #define EMAC_DEF_QOS_EN (0) /* EMAC proprietary QoS disabled */
103 #define EMAC_DEF_NO_BUFF_CHAIN (0) /* No buffer chain */
104 #define EMAC_DEF_MACCTRL_FRAME_EN (0) /* Discard Maccontrol frames */
105 #define EMAC_DEF_SHORT_FRAME_EN (0) /* Discard short frames */
106 #define EMAC_DEF_ERROR_FRAME_EN (0) /* Discard error frames */
107 #define EMAC_DEF_PROM_EN (0) /* Promiscuous disabled */
108 #define EMAC_DEF_PROM_CH (0) /* Promiscuous channel is 0 */
109 #define EMAC_DEF_BCAST_EN (1) /* Broadcast enabled */
110 #define EMAC_DEF_BCAST_CH (0) /* Broadcast channel is 0 */
111 #define EMAC_DEF_MCAST_EN (1) /* Multicast enabled */
112 #define EMAC_DEF_MCAST_CH (0) /* Multicast channel is 0 */
113 
114 #define EMAC_DEF_TXPRIO_FIXED (1) /* TX Priority is fixed */
115 #define EMAC_DEF_TXPACING_EN (0) /* TX pacing NOT supported*/
116 
117 #define EMAC_DEF_BUFFER_OFFSET (0) /* Buffer offset to DMA (future) */
118 #define EMAC_DEF_MIN_ETHPKTSIZE (60) /* Minimum ethernet pkt size */
119 #define EMAC_DEF_MAX_FRAME_SIZE (1500 + 14 + 4 + 4)
120 #define EMAC_DEF_TX_CH (0) /* Default 0th channel */
121 #define EMAC_DEF_RX_CH (0) /* Default 0th channel */
122 #define EMAC_DEF_RX_NUM_DESC (128)
123 #define EMAC_DEF_TX_NUM_DESC (128)
124 #define EMAC_DEF_MAX_TX_CH (1) /* Max TX channels configured */
125 #define EMAC_DEF_MAX_RX_CH (1) /* Max RX channels configured */
126 #define EMAC_POLL_WEIGHT (64) /* Default NAPI poll weight */
127 
128 /* Buffer descriptor parameters */
129 #define EMAC_DEF_TX_MAX_SERVICE (32) /* TX max service BD's */
130 #define EMAC_DEF_RX_MAX_SERVICE (64) /* should = netdev->weight */
131 
132 /* EMAC register related defines */
133 #define EMAC_ALL_MULTI_REG_VALUE (0xFFFFFFFF)
134 #define EMAC_NUM_MULTICAST_BITS (64)
135 #define EMAC_TX_CONTROL_TX_ENABLE_VAL (0x1)
136 #define EMAC_RX_CONTROL_RX_ENABLE_VAL (0x1)
137 #define EMAC_MAC_HOST_ERR_INTMASK_VAL (0x2)
138 #define EMAC_RX_UNICAST_CLEAR_ALL (0xFF)
139 #define EMAC_INT_MASK_CLEAR (0xFF)
140 
141 /* RX MBP register bit positions */
142 #define EMAC_RXMBP_PASSCRC_MASK BIT(30)
143 #define EMAC_RXMBP_QOSEN_MASK BIT(29)
144 #define EMAC_RXMBP_NOCHAIN_MASK BIT(28)
145 #define EMAC_RXMBP_CMFEN_MASK BIT(24)
146 #define EMAC_RXMBP_CSFEN_MASK BIT(23)
147 #define EMAC_RXMBP_CEFEN_MASK BIT(22)
148 #define EMAC_RXMBP_CAFEN_MASK BIT(21)
149 #define EMAC_RXMBP_PROMCH_SHIFT (16)
150 #define EMAC_RXMBP_PROMCH_MASK (0x7 << 16)
151 #define EMAC_RXMBP_BROADEN_MASK BIT(13)
152 #define EMAC_RXMBP_BROADCH_SHIFT (8)
153 #define EMAC_RXMBP_BROADCH_MASK (0x7 << 8)
154 #define EMAC_RXMBP_MULTIEN_MASK BIT(5)
155 #define EMAC_RXMBP_MULTICH_SHIFT (0)
156 #define EMAC_RXMBP_MULTICH_MASK (0x7)
157 #define EMAC_RXMBP_CHMASK (0x7)
158 
159 /* EMAC register definitions/bit maps used */
160 # define EMAC_MBP_RXPROMISC (0x00200000)
161 # define EMAC_MBP_PROMISCCH(ch) (((ch) & 0x7) << 16)
162 # define EMAC_MBP_RXBCAST (0x00002000)
163 # define EMAC_MBP_BCASTCHAN(ch) (((ch) & 0x7) << 8)
164 # define EMAC_MBP_RXMCAST (0x00000020)
165 # define EMAC_MBP_MCASTCHAN(ch) ((ch) & 0x7)
166 
167 /* EMAC mac_control register */
168 #define EMAC_MACCONTROL_TXPTYPE BIT(9)
169 #define EMAC_MACCONTROL_TXPACEEN BIT(6)
170 #define EMAC_MACCONTROL_GMIIEN BIT(5)
171 #define EMAC_MACCONTROL_GIGABITEN BIT(7)
172 #define EMAC_MACCONTROL_FULLDUPLEXEN BIT(0)
173 #define EMAC_MACCONTROL_RMIISPEED_MASK BIT(15)
174 
175 /* GIGABIT MODE related bits */
176 #define EMAC_DM646X_MACCONTORL_GIG BIT(7)
177 #define EMAC_DM646X_MACCONTORL_GIGFORCE BIT(17)
178 
179 /* EMAC mac_status register */
180 #define EMAC_MACSTATUS_TXERRCODE_MASK (0xF00000)
181 #define EMAC_MACSTATUS_TXERRCODE_SHIFT (20)
182 #define EMAC_MACSTATUS_TXERRCH_MASK (0x7)
183 #define EMAC_MACSTATUS_TXERRCH_SHIFT (16)
184 #define EMAC_MACSTATUS_RXERRCODE_MASK (0xF000)
185 #define EMAC_MACSTATUS_RXERRCODE_SHIFT (12)
186 #define EMAC_MACSTATUS_RXERRCH_MASK (0x7)
187 #define EMAC_MACSTATUS_RXERRCH_SHIFT (8)
188 
189 /* EMAC RX register masks */
190 #define EMAC_RX_MAX_LEN_MASK (0xFFFF)
191 #define EMAC_RX_BUFFER_OFFSET_MASK (0xFFFF)
192 
193 /* MAC_IN_VECTOR (0x180) register bit fields */
194 #define EMAC_DM644X_MAC_IN_VECTOR_HOST_INT BIT(17)
195 #define EMAC_DM644X_MAC_IN_VECTOR_STATPEND_INT BIT(16)
196 #define EMAC_DM644X_MAC_IN_VECTOR_RX_INT_VEC BIT(8)
197 #define EMAC_DM644X_MAC_IN_VECTOR_TX_INT_VEC BIT(0)
198 
200 #define EMAC_DM646X_MAC_IN_VECTOR_RX_INT_VEC BIT(EMAC_DEF_RX_CH)
201 #define EMAC_DM646X_MAC_IN_VECTOR_TX_INT_VEC BIT(16 + EMAC_DEF_TX_CH)
202 #define EMAC_DM646X_MAC_IN_VECTOR_HOST_INT BIT(26)
203 #define EMAC_DM646X_MAC_IN_VECTOR_STATPEND_INT BIT(27)
204 
205 /* CPPI bit positions */
206 #define EMAC_CPPI_SOP_BIT BIT(31)
207 #define EMAC_CPPI_EOP_BIT BIT(30)
208 #define EMAC_CPPI_OWNERSHIP_BIT BIT(29)
209 #define EMAC_CPPI_EOQ_BIT BIT(28)
210 #define EMAC_CPPI_TEARDOWN_COMPLETE_BIT BIT(27)
211 #define EMAC_CPPI_PASS_CRC_BIT BIT(26)
212 #define EMAC_RX_BD_BUF_SIZE (0xFFFF)
213 #define EMAC_BD_LENGTH_FOR_CACHE (16) /* only CPPI bytes */
214 #define EMAC_RX_BD_PKT_LENGTH_MASK (0xFFFF)
215 
216 /* Max hardware defines */
217 #define EMAC_MAX_TXRX_CHANNELS (8) /* Max hardware channels */
218 #define EMAC_DEF_MAX_MULTICAST_ADDRESSES (64) /* Max mcast addr's */
219 
220 /* EMAC Peripheral Device Register Memory Layout structure */
221 #define EMAC_MACINVECTOR 0x90
222 
223 #define EMAC_DM646X_MACEOIVECTOR 0x94
224 
225 #define EMAC_MACINTSTATRAW 0xB0
226 #define EMAC_MACINTSTATMASKED 0xB4
227 #define EMAC_MACINTMASKSET 0xB8
228 #define EMAC_MACINTMASKCLEAR 0xBC
229 
230 #define EMAC_RXMBPENABLE 0x100
231 #define EMAC_RXUNICASTSET 0x104
232 #define EMAC_RXUNICASTCLEAR 0x108
233 #define EMAC_RXMAXLEN 0x10C
234 #define EMAC_RXBUFFEROFFSET 0x110
235 #define EMAC_RXFILTERLOWTHRESH 0x114
236 
237 #define EMAC_MACCONTROL 0x160
238 #define EMAC_MACSTATUS 0x164
239 #define EMAC_EMCONTROL 0x168
240 #define EMAC_FIFOCONTROL 0x16C
241 #define EMAC_MACCONFIG 0x170
242 #define EMAC_SOFTRESET 0x174
243 #define EMAC_MACSRCADDRLO 0x1D0
244 #define EMAC_MACSRCADDRHI 0x1D4
245 #define EMAC_MACHASH1 0x1D8
246 #define EMAC_MACHASH2 0x1DC
247 #define EMAC_MACADDRLO 0x500
248 #define EMAC_MACADDRHI 0x504
249 #define EMAC_MACINDEX 0x508
250 
251 /* EMAC statistics registers */
252 #define EMAC_RXGOODFRAMES 0x200
253 #define EMAC_RXBCASTFRAMES 0x204
254 #define EMAC_RXMCASTFRAMES 0x208
255 #define EMAC_RXPAUSEFRAMES 0x20C
256 #define EMAC_RXCRCERRORS 0x210
257 #define EMAC_RXALIGNCODEERRORS 0x214
258 #define EMAC_RXOVERSIZED 0x218
259 #define EMAC_RXJABBER 0x21C
260 #define EMAC_RXUNDERSIZED 0x220
261 #define EMAC_RXFRAGMENTS 0x224
262 #define EMAC_RXFILTERED 0x228
263 #define EMAC_RXQOSFILTERED 0x22C
264 #define EMAC_RXOCTETS 0x230
265 #define EMAC_TXGOODFRAMES 0x234
266 #define EMAC_TXBCASTFRAMES 0x238
267 #define EMAC_TXMCASTFRAMES 0x23C
268 #define EMAC_TXPAUSEFRAMES 0x240
269 #define EMAC_TXDEFERRED 0x244
270 #define EMAC_TXCOLLISION 0x248
271 #define EMAC_TXSINGLECOLL 0x24C
272 #define EMAC_TXMULTICOLL 0x250
273 #define EMAC_TXEXCESSIVECOLL 0x254
274 #define EMAC_TXLATECOLL 0x258
275 #define EMAC_TXUNDERRUN 0x25C
276 #define EMAC_TXCARRIERSENSE 0x260
277 #define EMAC_TXOCTETS 0x264
278 #define EMAC_NETOCTETS 0x280
279 #define EMAC_RXSOFOVERRUNS 0x284
280 #define EMAC_RXMOFOVERRUNS 0x288
281 #define EMAC_RXDMAOVERRUNS 0x28C
282 
283 /* EMAC DM644x control registers */
284 #define EMAC_CTRL_EWCTL (0x4)
285 #define EMAC_CTRL_EWINTTCNT (0x8)
286 
287 /* EMAC DM644x control module masks */
288 #define EMAC_DM644X_EWINTCNT_MASK 0x1FFFF
289 #define EMAC_DM644X_INTMIN_INTVL 0x1
290 #define EMAC_DM644X_INTMAX_INTVL (EMAC_DM644X_EWINTCNT_MASK)
291 
292 /* EMAC DM646X control module registers */
293 #define EMAC_DM646X_CMINTCTRL 0x0C
294 #define EMAC_DM646X_CMRXINTEN 0x14
295 #define EMAC_DM646X_CMTXINTEN 0x18
296 #define EMAC_DM646X_CMRXINTMAX 0x70
297 #define EMAC_DM646X_CMTXINTMAX 0x74
298 
299 /* EMAC DM646X control module masks */
300 #define EMAC_DM646X_INTPACEEN (0x3 << 16)
301 #define EMAC_DM646X_INTPRESCALE_MASK (0x7FF << 0)
302 #define EMAC_DM646X_CMINTMAX_CNT 63
303 #define EMAC_DM646X_CMINTMIN_CNT 2
304 #define EMAC_DM646X_CMINTMAX_INTVL (1000 / EMAC_DM646X_CMINTMIN_CNT)
305 #define EMAC_DM646X_CMINTMIN_INTVL ((1000 / EMAC_DM646X_CMINTMAX_CNT) + 1)
306 
307 
308 /* EMAC EOI codes for C0 */
309 #define EMAC_DM646X_MAC_EOI_C0_RXEN (0x01)
310 #define EMAC_DM646X_MAC_EOI_C0_TXEN (0x02)
311 
312 /* EMAC Stats Clear Mask */
313 #define EMAC_STATS_CLR_MASK (0xFFFFFFFF)
314 
315 /* emac_priv: EMAC private data structure
316  *
317  * EMAC adapter private data structure
318  */
319 struct emac_priv {
321  struct net_device *ndev;
324  char mac_addr[6];
329  struct cpdma_ctlr *dma;
332  u32 link; /* 1=link on, 0=link off */
333  u32 speed; /* 0=Auto Neg, 1=No PHY, 10,100, 1000 - mbps */
334  u32 duplex; /* Link duplex: 0=Half, 1=Full */
346  const char *phy_id;
347 #ifdef CONFIG_OF
348  struct device_node *phy_node;
349 #endif
352  /*platform specific members*/
355 };
356 
357 /* EMAC TX Host Error description strings */
358 static char *emac_txhost_errcodes[16] = {
359  "No error", "SOP error", "Ownership bit not set in SOP buffer",
360  "Zero Next Buffer Descriptor Pointer Without EOP",
361  "Zero Buffer Pointer", "Zero Buffer Length", "Packet Length Error",
362  "Reserved", "Reserved", "Reserved", "Reserved", "Reserved",
363  "Reserved", "Reserved", "Reserved", "Reserved"
364 };
365 
366 /* EMAC RX Host Error description strings */
367 static char *emac_rxhost_errcodes[16] = {
368  "No error", "Reserved", "Ownership bit not set in input buffer",
369  "Reserved", "Zero Buffer Pointer", "Reserved", "Reserved",
370  "Reserved", "Reserved", "Reserved", "Reserved", "Reserved",
371  "Reserved", "Reserved", "Reserved", "Reserved"
372 };
373 
374 /* Helper macros */
375 #define emac_read(reg) ioread32(priv->emac_base + (reg))
376 #define emac_write(reg, val) iowrite32(val, priv->emac_base + (reg))
377 
378 #define emac_ctrl_read(reg) ioread32((priv->ctrl_base + (reg)))
379 #define emac_ctrl_write(reg, val) iowrite32(val, (priv->ctrl_base + (reg)))
380 
388 static void emac_dump_regs(struct emac_priv *priv)
389 {
390  struct device *emac_dev = &priv->ndev->dev;
391 
392  /* Print important registers in EMAC */
393  dev_info(emac_dev, "EMAC Basic registers\n");
394  if (priv->version == EMAC_VERSION_1) {
395  dev_info(emac_dev, "EMAC: EWCTL: %08X, EWINTTCNT: %08X\n",
398  }
399  dev_info(emac_dev, "EMAC: EmuControl:%08X, FifoControl: %08X\n",
401  dev_info(emac_dev, "EMAC: MBPEnable:%08X, RXUnicastSet: %08X, "\
402  "RXMaxLen=%08X\n", emac_read(EMAC_RXMBPENABLE),
404  dev_info(emac_dev, "EMAC: MacControl:%08X, MacStatus: %08X, "\
405  "MacConfig=%08X\n", emac_read(EMAC_MACCONTROL),
407  dev_info(emac_dev, "EMAC Statistics\n");
408  dev_info(emac_dev, "EMAC: rx_good_frames:%d\n",
410  dev_info(emac_dev, "EMAC: rx_broadcast_frames:%d\n",
412  dev_info(emac_dev, "EMAC: rx_multicast_frames:%d\n",
414  dev_info(emac_dev, "EMAC: rx_pause_frames:%d\n",
416  dev_info(emac_dev, "EMAC: rx_crcerrors:%d\n",
418  dev_info(emac_dev, "EMAC: rx_align_code_errors:%d\n",
420  dev_info(emac_dev, "EMAC: rx_oversized_frames:%d\n",
422  dev_info(emac_dev, "EMAC: rx_jabber_frames:%d\n",
424  dev_info(emac_dev, "EMAC: rx_undersized_frames:%d\n",
426  dev_info(emac_dev, "EMAC: rx_fragments:%d\n",
428  dev_info(emac_dev, "EMAC: rx_filtered_frames:%d\n",
430  dev_info(emac_dev, "EMAC: rx_qos_filtered_frames:%d\n",
432  dev_info(emac_dev, "EMAC: rx_octets:%d\n",
434  dev_info(emac_dev, "EMAC: tx_goodframes:%d\n",
436  dev_info(emac_dev, "EMAC: tx_bcastframes:%d\n",
438  dev_info(emac_dev, "EMAC: tx_mcastframes:%d\n",
440  dev_info(emac_dev, "EMAC: tx_pause_frames:%d\n",
442  dev_info(emac_dev, "EMAC: tx_deferred_frames:%d\n",
444  dev_info(emac_dev, "EMAC: tx_collision_frames:%d\n",
446  dev_info(emac_dev, "EMAC: tx_single_coll_frames:%d\n",
448  dev_info(emac_dev, "EMAC: tx_mult_coll_frames:%d\n",
450  dev_info(emac_dev, "EMAC: tx_excessive_collisions:%d\n",
452  dev_info(emac_dev, "EMAC: tx_late_collisions:%d\n",
454  dev_info(emac_dev, "EMAC: tx_underrun:%d\n",
456  dev_info(emac_dev, "EMAC: tx_carrier_sense_errors:%d\n",
458  dev_info(emac_dev, "EMAC: tx_octets:%d\n",
460  dev_info(emac_dev, "EMAC: net_octets:%d\n",
462  dev_info(emac_dev, "EMAC: rx_sof_overruns:%d\n",
464  dev_info(emac_dev, "EMAC: rx_mof_overruns:%d\n",
466  dev_info(emac_dev, "EMAC: rx_dma_overruns:%d\n",
468 
469  cpdma_ctlr_dump(priv->dma);
470 }
471 
480 static void emac_get_drvinfo(struct net_device *ndev,
481  struct ethtool_drvinfo *info)
482 {
483  strcpy(info->driver, emac_version_string);
485 }
486 
495 static int emac_get_settings(struct net_device *ndev,
496  struct ethtool_cmd *ecmd)
497 {
498  struct emac_priv *priv = netdev_priv(ndev);
499  if (priv->phydev)
500  return phy_ethtool_gset(priv->phydev, ecmd);
501  else
502  return -EOPNOTSUPP;
503 
504 }
505 
514 static int emac_set_settings(struct net_device *ndev, struct ethtool_cmd *ecmd)
515 {
516  struct emac_priv *priv = netdev_priv(ndev);
517  if (priv->phydev)
518  return phy_ethtool_sset(priv->phydev, ecmd);
519  else
520  return -EOPNOTSUPP;
521 
522 }
523 
532 static int emac_get_coalesce(struct net_device *ndev,
533  struct ethtool_coalesce *coal)
534 {
535  struct emac_priv *priv = netdev_priv(ndev);
536 
537  coal->rx_coalesce_usecs = priv->coal_intvl;
538  return 0;
539 
540 }
541 
550 static int emac_set_coalesce(struct net_device *ndev,
551  struct ethtool_coalesce *coal)
552 {
553  struct emac_priv *priv = netdev_priv(ndev);
554  u32 int_ctrl, num_interrupts = 0;
555  u32 prescale = 0, addnl_dvdr = 1, coal_intvl = 0;
556 
557  if (!coal->rx_coalesce_usecs)
558  return -EINVAL;
559 
561 
562  switch (priv->version) {
563  case EMAC_VERSION_2:
565  prescale = priv->bus_freq_mhz * 4;
566 
569 
571  /*
572  * Interrupt pacer works with 4us Pulse, we can
573  * throttle further by dilating the 4us pulse.
574  */
575  addnl_dvdr = EMAC_DM646X_INTPRESCALE_MASK / prescale;
576 
577  if (addnl_dvdr > 1) {
578  prescale *= addnl_dvdr;
580  * addnl_dvdr))
582  * addnl_dvdr);
583  } else {
584  addnl_dvdr = 1;
586  }
587  }
588 
589  num_interrupts = (1000 * addnl_dvdr) / coal_intvl;
590 
591  int_ctrl |= EMAC_DM646X_INTPACEEN;
592  int_ctrl &= (~EMAC_DM646X_INTPRESCALE_MASK);
593  int_ctrl |= (prescale & EMAC_DM646X_INTPRESCALE_MASK);
595 
596  emac_ctrl_write(EMAC_DM646X_CMRXINTMAX, num_interrupts);
597  emac_ctrl_write(EMAC_DM646X_CMTXINTMAX, num_interrupts);
598 
599  break;
600  default:
602  int_ctrl &= (~EMAC_DM644X_EWINTCNT_MASK);
603  prescale = coal_intvl * priv->bus_freq_mhz;
604  if (prescale > EMAC_DM644X_EWINTCNT_MASK) {
605  prescale = EMAC_DM644X_EWINTCNT_MASK;
606  coal_intvl = prescale / priv->bus_freq_mhz;
607  }
608  emac_ctrl_write(EMAC_CTRL_EWINTTCNT, (int_ctrl | prescale));
609 
610  break;
611  }
612 
613  printk(KERN_INFO"Set coalesce to %d usecs.\n", coal_intvl);
614  priv->coal_intvl = coal_intvl;
615 
616  return 0;
617 
618 }
619 
620 
621 /* ethtool_ops: DaVinci EMAC Ethtool structure
622  *
623  * Ethtool support for EMAC adapter
624  */
625 static const struct ethtool_ops ethtool_ops = {
626  .get_drvinfo = emac_get_drvinfo,
627  .get_settings = emac_get_settings,
628  .set_settings = emac_set_settings,
629  .get_link = ethtool_op_get_link,
630  .get_coalesce = emac_get_coalesce,
631  .set_coalesce = emac_set_coalesce,
632  .get_ts_info = ethtool_op_get_ts_info,
633 };
634 
643 static void emac_update_phystatus(struct emac_priv *priv)
644 {
645  u32 mac_control;
646  u32 new_duplex;
647  u32 cur_duplex;
648  struct net_device *ndev = priv->ndev;
649 
650  mac_control = emac_read(EMAC_MACCONTROL);
651  cur_duplex = (mac_control & EMAC_MACCONTROL_FULLDUPLEXEN) ?
653  if (priv->phydev)
654  new_duplex = priv->phydev->duplex;
655  else
656  new_duplex = DUPLEX_FULL;
657 
658  /* We get called only if link has changed (speed/duplex/status) */
659  if ((priv->link) && (new_duplex != cur_duplex)) {
660  priv->duplex = new_duplex;
661  if (DUPLEX_FULL == priv->duplex)
662  mac_control |= (EMAC_MACCONTROL_FULLDUPLEXEN);
663  else
664  mac_control &= ~(EMAC_MACCONTROL_FULLDUPLEXEN);
665  }
666 
667  if (priv->speed == SPEED_1000 && (priv->version == EMAC_VERSION_2)) {
668  mac_control = emac_read(EMAC_MACCONTROL);
669  mac_control |= (EMAC_DM646X_MACCONTORL_GIG |
671  } else {
672  /* Clear the GIG bit and GIGFORCE bit */
673  mac_control &= ~(EMAC_DM646X_MACCONTORL_GIGFORCE |
675 
676  if (priv->rmii_en && (priv->speed == SPEED_100))
677  mac_control |= EMAC_MACCONTROL_RMIISPEED_MASK;
678  else
679  mac_control &= ~EMAC_MACCONTROL_RMIISPEED_MASK;
680  }
681 
682  /* Update mac_control if changed */
683  emac_write(EMAC_MACCONTROL, mac_control);
684 
685  if (priv->link) {
686  /* link ON */
687  if (!netif_carrier_ok(ndev))
688  netif_carrier_on(ndev);
689  /* reactivate the transmit queue if it is stopped */
690  if (netif_running(ndev) && netif_queue_stopped(ndev))
691  netif_wake_queue(ndev);
692  } else {
693  /* link OFF */
694  if (netif_carrier_ok(ndev))
695  netif_carrier_off(ndev);
696  if (!netif_queue_stopped(ndev))
697  netif_stop_queue(ndev);
698  }
699 }
700 
708 static u32 hash_get(u8 *addr)
709 {
710  u32 hash;
711  u8 tmpval;
712  int cnt;
713  hash = 0;
714 
715  for (cnt = 0; cnt < 2; cnt++) {
716  tmpval = *addr++;
717  hash ^= (tmpval >> 2) ^ (tmpval << 4);
718  tmpval = *addr++;
719  hash ^= (tmpval >> 4) ^ (tmpval << 2);
720  tmpval = *addr++;
721  hash ^= (tmpval >> 6) ^ (tmpval);
722  }
723 
724  return hash & 0x3F;
725 }
726 
735 static int hash_add(struct emac_priv *priv, u8 *mac_addr)
736 {
737  struct device *emac_dev = &priv->ndev->dev;
738  u32 rc = 0;
739  u32 hash_bit;
740  u32 hash_value = hash_get(mac_addr);
741 
742  if (hash_value >= EMAC_NUM_MULTICAST_BITS) {
743  if (netif_msg_drv(priv)) {
744  dev_err(emac_dev, "DaVinci EMAC: hash_add(): Invalid "\
745  "Hash %08x, should not be greater than %08x",
746  hash_value, (EMAC_NUM_MULTICAST_BITS - 1));
747  }
748  return -1;
749  }
750 
751  /* set the hash bit only if not previously set */
752  if (priv->multicast_hash_cnt[hash_value] == 0) {
753  rc = 1; /* hash value changed */
754  if (hash_value < 32) {
755  hash_bit = BIT(hash_value);
756  priv->mac_hash1 |= hash_bit;
757  } else {
758  hash_bit = BIT((hash_value - 32));
759  priv->mac_hash2 |= hash_bit;
760  }
761  }
762 
763  /* incr counter for num of mcast addr's mapped to "this" hash bit */
764  ++priv->multicast_hash_cnt[hash_value];
765 
766  return rc;
767 }
768 
777 static int hash_del(struct emac_priv *priv, u8 *mac_addr)
778 {
779  u32 hash_value;
780  u32 hash_bit;
781 
782  hash_value = hash_get(mac_addr);
783  if (priv->multicast_hash_cnt[hash_value] > 0) {
784  /* dec cntr for num of mcast addr's mapped to this hash bit */
785  --priv->multicast_hash_cnt[hash_value];
786  }
787 
788  /* if counter still > 0, at least one multicast address refers
789  * to this hash bit. so return 0 */
790  if (priv->multicast_hash_cnt[hash_value] > 0)
791  return 0;
792 
793  if (hash_value < 32) {
794  hash_bit = BIT(hash_value);
795  priv->mac_hash1 &= ~hash_bit;
796  } else {
797  hash_bit = BIT((hash_value - 32));
798  priv->mac_hash2 &= ~hash_bit;
799  }
800 
801  /* return 1 to indicate change in mac_hash registers reqd */
802  return 1;
803 }
804 
805 /* EMAC multicast operation */
806 #define EMAC_MULTICAST_ADD 0
807 #define EMAC_MULTICAST_DEL 1
808 #define EMAC_ALL_MULTI_SET 2
809 #define EMAC_ALL_MULTI_CLR 3
810 
820 static void emac_add_mcast(struct emac_priv *priv, u32 action, u8 *mac_addr)
821 {
822  struct device *emac_dev = &priv->ndev->dev;
823  int update = -1;
824 
825  switch (action) {
826  case EMAC_MULTICAST_ADD:
827  update = hash_add(priv, mac_addr);
828  break;
829  case EMAC_MULTICAST_DEL:
830  update = hash_del(priv, mac_addr);
831  break;
832  case EMAC_ALL_MULTI_SET:
833  update = 1;
836  break;
837  case EMAC_ALL_MULTI_CLR:
838  update = 1;
839  priv->mac_hash1 = 0;
840  priv->mac_hash2 = 0;
841  memset(&(priv->multicast_hash_cnt[0]), 0,
842  sizeof(priv->multicast_hash_cnt[0]) *
844  break;
845  default:
846  if (netif_msg_drv(priv))
847  dev_err(emac_dev, "DaVinci EMAC: add_mcast"\
848  ": bad operation %d", action);
849  break;
850  }
851 
852  /* write to the hardware only if the register status chances */
853  if (update > 0) {
856  }
857 }
858 
866 static void emac_dev_mcast_set(struct net_device *ndev)
867 {
868  u32 mbp_enable;
869  struct emac_priv *priv = netdev_priv(ndev);
870 
871  mbp_enable = emac_read(EMAC_RXMBPENABLE);
872  if (ndev->flags & IFF_PROMISC) {
873  mbp_enable &= (~EMAC_MBP_PROMISCCH(EMAC_DEF_PROM_CH));
874  mbp_enable |= (EMAC_MBP_RXPROMISC);
875  } else {
876  mbp_enable = (mbp_enable & ~EMAC_MBP_RXPROMISC);
877  if ((ndev->flags & IFF_ALLMULTI) ||
879  mbp_enable = (mbp_enable | EMAC_MBP_RXMCAST);
880  emac_add_mcast(priv, EMAC_ALL_MULTI_SET, NULL);
881  }
882  if (!netdev_mc_empty(ndev)) {
883  struct netdev_hw_addr *ha;
884 
885  mbp_enable = (mbp_enable | EMAC_MBP_RXMCAST);
886  emac_add_mcast(priv, EMAC_ALL_MULTI_CLR, NULL);
887  /* program multicast address list into EMAC hardware */
888  netdev_for_each_mc_addr(ha, ndev) {
889  emac_add_mcast(priv, EMAC_MULTICAST_ADD,
890  (u8 *) ha->addr);
891  }
892  } else {
893  mbp_enable = (mbp_enable & ~EMAC_MBP_RXMCAST);
894  emac_add_mcast(priv, EMAC_ALL_MULTI_CLR, NULL);
895  }
896  }
897  /* Set mbp config register */
898  emac_write(EMAC_RXMBPENABLE, mbp_enable);
899 }
900 
901 /*************************************************************************
902  * EMAC Hardware manipulation
903  *************************************************************************/
904 
912 static void emac_int_disable(struct emac_priv *priv)
913 {
914  if (priv->version == EMAC_VERSION_2) {
915  unsigned long flags;
916 
917  local_irq_save(flags);
918 
919  /* Program C0_Int_En to zero to turn off
920  * interrupts to the CPU */
923  /* NOTE: Rx Threshold and Misc interrupts are not disabled */
924  if (priv->int_disable)
925  priv->int_disable();
926 
927  local_irq_restore(flags);
928 
929  } else {
930  /* Set DM644x control registers for interrupt control */
932  }
933 }
934 
942 static void emac_int_enable(struct emac_priv *priv)
943 {
944  if (priv->version == EMAC_VERSION_2) {
945  if (priv->int_enable)
946  priv->int_enable();
947 
950 
951  /* In addition to turning on interrupt Enable, we need
952  * ack by writing appropriate values to the EOI
953  * register */
954 
955  /* NOTE: Rx Threshold and Misc interrupts are not enabled */
956 
957  /* ack rxen only then a new pulse will be generated */
960 
961  /* ack txen- only then a new pulse will be generated */
964 
965  } else {
966  /* Set DM644x control registers for interrupt control */
968  }
969 }
970 
981 static irqreturn_t emac_irq(int irq, void *dev_id)
982 {
983  struct net_device *ndev = (struct net_device *)dev_id;
984  struct emac_priv *priv = netdev_priv(ndev);
985 
986  ++priv->isr_count;
987  if (likely(netif_running(priv->ndev))) {
988  emac_int_disable(priv);
989  napi_schedule(&priv->napi);
990  } else {
991  /* we are closing down, so dont process anything */
992  }
993  return IRQ_HANDLED;
994 }
995 
996 static struct sk_buff *emac_rx_alloc(struct emac_priv *priv)
997 {
998  struct sk_buff *skb = netdev_alloc_skb(priv->ndev, priv->rx_buf_size);
999  if (WARN_ON(!skb))
1000  return NULL;
1001  skb_reserve(skb, NET_IP_ALIGN);
1002  return skb;
1003 }
1004 
1005 static void emac_rx_handler(void *token, int len, int status)
1006 {
1007  struct sk_buff *skb = token;
1008  struct net_device *ndev = skb->dev;
1009  struct emac_priv *priv = netdev_priv(ndev);
1010  struct device *emac_dev = &ndev->dev;
1011  int ret;
1012 
1013  /* free and bail if we are shutting down */
1014  if (unlikely(!netif_running(ndev))) {
1015  dev_kfree_skb_any(skb);
1016  return;
1017  }
1018 
1019  /* recycle on receive error */
1020  if (status < 0) {
1021  ndev->stats.rx_errors++;
1022  goto recycle;
1023  }
1024 
1025  /* feed received packet up the stack */
1026  skb_put(skb, len);
1027  skb->protocol = eth_type_trans(skb, ndev);
1028  netif_receive_skb(skb);
1029  ndev->stats.rx_bytes += len;
1030  ndev->stats.rx_packets++;
1031 
1032  /* alloc a new packet for receive */
1033  skb = emac_rx_alloc(priv);
1034  if (!skb) {
1035  if (netif_msg_rx_err(priv) && net_ratelimit())
1036  dev_err(emac_dev, "failed rx buffer alloc\n");
1037  return;
1038  }
1039 
1040 recycle:
1041  ret = cpdma_chan_submit(priv->rxchan, skb, skb->data,
1042  skb_tailroom(skb), GFP_KERNEL);
1043 
1044  WARN_ON(ret == -ENOMEM);
1045  if (unlikely(ret < 0))
1046  dev_kfree_skb_any(skb);
1047 }
1048 
1049 static void emac_tx_handler(void *token, int len, int status)
1050 {
1051  struct sk_buff *skb = token;
1052  struct net_device *ndev = skb->dev;
1053  struct emac_priv *priv = netdev_priv(ndev);
1054 
1055  atomic_dec(&priv->cur_tx);
1056 
1057  if (unlikely(netif_queue_stopped(ndev)))
1058  netif_start_queue(ndev);
1059  ndev->stats.tx_packets++;
1060  ndev->stats.tx_bytes += len;
1061  dev_kfree_skb_any(skb);
1062 }
1063 
1074 static int emac_dev_xmit(struct sk_buff *skb, struct net_device *ndev)
1075 {
1076  struct device *emac_dev = &ndev->dev;
1077  int ret_code;
1078  struct emac_priv *priv = netdev_priv(ndev);
1079 
1080  /* If no link, return */
1081  if (unlikely(!priv->link)) {
1082  if (netif_msg_tx_err(priv) && net_ratelimit())
1083  dev_err(emac_dev, "DaVinci EMAC: No link to transmit");
1084  goto fail_tx;
1085  }
1086 
1087  ret_code = skb_padto(skb, EMAC_DEF_MIN_ETHPKTSIZE);
1088  if (unlikely(ret_code < 0)) {
1089  if (netif_msg_tx_err(priv) && net_ratelimit())
1090  dev_err(emac_dev, "DaVinci EMAC: packet pad failed");
1091  goto fail_tx;
1092  }
1093 
1094  skb_tx_timestamp(skb);
1095 
1096  ret_code = cpdma_chan_submit(priv->txchan, skb, skb->data, skb->len,
1097  GFP_KERNEL);
1098  if (unlikely(ret_code != 0)) {
1099  if (netif_msg_tx_err(priv) && net_ratelimit())
1100  dev_err(emac_dev, "DaVinci EMAC: desc submit failed");
1101  goto fail_tx;
1102  }
1103 
1105  netif_stop_queue(ndev);
1106 
1107  return NETDEV_TX_OK;
1108 
1109 fail_tx:
1110  ndev->stats.tx_dropped++;
1111  netif_stop_queue(ndev);
1112  return NETDEV_TX_BUSY;
1113 }
1114 
1125 static void emac_dev_tx_timeout(struct net_device *ndev)
1126 {
1127  struct emac_priv *priv = netdev_priv(ndev);
1128  struct device *emac_dev = &ndev->dev;
1129 
1130  if (netif_msg_tx_err(priv))
1131  dev_err(emac_dev, "DaVinci EMAC: xmit timeout, restarting TX");
1132 
1133  emac_dump_regs(priv);
1134 
1135  ndev->stats.tx_errors++;
1136  emac_int_disable(priv);
1137  cpdma_chan_stop(priv->txchan);
1138  cpdma_chan_start(priv->txchan);
1139  emac_int_enable(priv);
1140 }
1141 
1152 static void emac_set_type0addr(struct emac_priv *priv, u32 ch, char *mac_addr)
1153 {
1154  u32 val;
1155  val = ((mac_addr[5] << 8) | (mac_addr[4]));
1157 
1158  val = ((mac_addr[3] << 24) | (mac_addr[2] << 16) | \
1159  (mac_addr[1] << 8) | (mac_addr[0]));
1162  val |= BIT(ch);
1165  val &= ~BIT(ch);
1167 }
1168 
1179 static void emac_set_type1addr(struct emac_priv *priv, u32 ch, char *mac_addr)
1180 {
1181  u32 val;
1183  val = ((mac_addr[5] << 8) | mac_addr[4]);
1184  emac_write(EMAC_MACADDRLO, val);
1185  val = ((mac_addr[3] << 24) | (mac_addr[2] << 16) | \
1186  (mac_addr[1] << 8) | (mac_addr[0]));
1187  emac_write(EMAC_MACADDRHI, val);
1188  emac_set_type0addr(priv, ch, mac_addr);
1189 }
1190 
1203 static void emac_set_type2addr(struct emac_priv *priv, u32 ch,
1204  char *mac_addr, int index, int match)
1205 {
1206  u32 val;
1207  emac_write(EMAC_MACINDEX, index);
1208  val = ((mac_addr[3] << 24) | (mac_addr[2] << 16) | \
1209  (mac_addr[1] << 8) | (mac_addr[0]));
1210  emac_write(EMAC_MACADDRHI, val);
1211  val = ((mac_addr[5] << 8) | mac_addr[4] | ((ch & 0x7) << 16) | \
1212  (match << 19) | BIT(20));
1213  emac_write(EMAC_MACADDRLO, val);
1214  emac_set_type0addr(priv, ch, mac_addr);
1215 }
1216 
1227 static void emac_setmac(struct emac_priv *priv, u32 ch, char *mac_addr)
1228 {
1229  struct device *emac_dev = &priv->ndev->dev;
1230 
1231  if (priv->rx_addr_type == 0) {
1232  emac_set_type0addr(priv, ch, mac_addr);
1233  } else if (priv->rx_addr_type == 1) {
1234  u32 cnt;
1235  for (cnt = 0; cnt < EMAC_MAX_TXRX_CHANNELS; cnt++)
1236  emac_set_type1addr(priv, ch, mac_addr);
1237  } else if (priv->rx_addr_type == 2) {
1238  emac_set_type2addr(priv, ch, mac_addr, ch, 1);
1239  emac_set_type0addr(priv, ch, mac_addr);
1240  } else {
1241  if (netif_msg_drv(priv))
1242  dev_err(emac_dev, "DaVinci EMAC: Wrong addressing\n");
1243  }
1244 }
1245 
1255 static int emac_dev_setmac_addr(struct net_device *ndev, void *addr)
1256 {
1257  struct emac_priv *priv = netdev_priv(ndev);
1258  struct device *emac_dev = &priv->ndev->dev;
1259  struct sockaddr *sa = addr;
1260 
1261  if (!is_valid_ether_addr(sa->sa_data))
1262  return -EADDRNOTAVAIL;
1263 
1264  /* Store mac addr in priv and rx channel and set it in EMAC hw */
1265  memcpy(priv->mac_addr, sa->sa_data, ndev->addr_len);
1266  memcpy(ndev->dev_addr, sa->sa_data, ndev->addr_len);
1268 
1269  /* MAC address is configured only after the interface is enabled. */
1270  if (netif_running(ndev)) {
1271  emac_setmac(priv, EMAC_DEF_RX_CH, priv->mac_addr);
1272  }
1273 
1274  if (netif_msg_drv(priv))
1275  dev_notice(emac_dev, "DaVinci EMAC: emac_dev_setmac_addr %pM\n",
1276  priv->mac_addr);
1277 
1278  return 0;
1279 }
1280 
1290 static int emac_hw_enable(struct emac_priv *priv)
1291 {
1292  u32 val, mbp_enable, mac_control;
1293 
1294  /* Soft reset */
1296  while (emac_read(EMAC_SOFTRESET))
1297  cpu_relax();
1298 
1299  /* Disable interrupt & Set pacing for more interrupts initially */
1300  emac_int_disable(priv);
1301 
1302  /* Full duplex enable bit set when auto negotiation happens */
1303  mac_control =
1305  ((priv->speed == 1000) ? EMAC_MACCONTROL_GIGABITEN : 0x0) |
1307  ((priv->duplex == DUPLEX_FULL) ? 0x1 : 0));
1308  emac_write(EMAC_MACCONTROL, mac_control);
1309 
1310  mbp_enable =
1312  ((EMAC_DEF_QOS_EN) ? (EMAC_RXMBP_QOSEN_MASK) : 0x0) |
1317  ((EMAC_DEF_PROM_EN) ? (EMAC_RXMBP_CAFEN_MASK) : 0x0) |
1319  EMAC_RXMBP_PROMCH_SHIFT) |
1324  ((EMAC_DEF_MCAST_CH & EMAC_RXMBP_CHMASK) << \
1325  EMAC_RXMBP_MULTICH_SHIFT));
1326  emac_write(EMAC_RXMBPENABLE, mbp_enable);
1333  priv->rx_addr_type = (emac_read(EMAC_MACCONFIG) >> 8) & 0xFF;
1334 
1336 
1337  emac_setmac(priv, EMAC_DEF_RX_CH, priv->mac_addr);
1338 
1339  /* Enable MII */
1340  val = emac_read(EMAC_MACCONTROL);
1341  val |= (EMAC_MACCONTROL_GMIIEN);
1343 
1344  /* Enable NAPI and interrupts */
1345  napi_enable(&priv->napi);
1346  emac_int_enable(priv);
1347  return 0;
1348 
1349 }
1350 
1364 static int emac_poll(struct napi_struct *napi, int budget)
1365 {
1366  unsigned int mask;
1367  struct emac_priv *priv = container_of(napi, struct emac_priv, napi);
1368  struct net_device *ndev = priv->ndev;
1369  struct device *emac_dev = &ndev->dev;
1370  u32 status = 0;
1371  u32 num_tx_pkts = 0, num_rx_pkts = 0;
1372 
1373  /* Check interrupt vectors and call packet processing */
1374  status = emac_read(EMAC_MACINVECTOR);
1375 
1377 
1378  if (priv->version == EMAC_VERSION_2)
1380 
1381  if (status & mask) {
1382  num_tx_pkts = cpdma_chan_process(priv->txchan,
1384  } /* TX processing */
1385 
1387 
1388  if (priv->version == EMAC_VERSION_2)
1390 
1391  if (status & mask) {
1392  num_rx_pkts = cpdma_chan_process(priv->rxchan, budget);
1393  } /* RX processing */
1394 
1396  if (priv->version == EMAC_VERSION_2)
1398 
1399  if (unlikely(status & mask)) {
1400  u32 ch, cause;
1401  dev_err(emac_dev, "DaVinci EMAC: Fatal Hardware Error\n");
1402  netif_stop_queue(ndev);
1403  napi_disable(&priv->napi);
1404 
1405  status = emac_read(EMAC_MACSTATUS);
1406  cause = ((status & EMAC_MACSTATUS_TXERRCODE_MASK) >>
1408  if (cause) {
1409  ch = ((status & EMAC_MACSTATUS_TXERRCH_MASK) >>
1411  if (net_ratelimit()) {
1412  dev_err(emac_dev, "TX Host error %s on ch=%d\n",
1413  &emac_txhost_errcodes[cause][0], ch);
1414  }
1415  }
1416  cause = ((status & EMAC_MACSTATUS_RXERRCODE_MASK) >>
1418  if (cause) {
1419  ch = ((status & EMAC_MACSTATUS_RXERRCH_MASK) >>
1421  if (netif_msg_hw(priv) && net_ratelimit())
1422  dev_err(emac_dev, "RX Host error %s on ch=%d\n",
1423  &emac_rxhost_errcodes[cause][0], ch);
1424  }
1425  } else if (num_rx_pkts < budget) {
1426  napi_complete(napi);
1427  emac_int_enable(priv);
1428  }
1429 
1430  return num_rx_pkts;
1431 }
1432 
1433 #ifdef CONFIG_NET_POLL_CONTROLLER
1434 
1441 void emac_poll_controller(struct net_device *ndev)
1442 {
1443  struct emac_priv *priv = netdev_priv(ndev);
1444 
1445  emac_int_disable(priv);
1446  emac_irq(ndev->irq, ndev);
1447  emac_int_enable(priv);
1448 }
1449 #endif
1450 
1451 static void emac_adjust_link(struct net_device *ndev)
1452 {
1453  struct emac_priv *priv = netdev_priv(ndev);
1454  struct phy_device *phydev = priv->phydev;
1455  unsigned long flags;
1456  int new_state = 0;
1457 
1458  spin_lock_irqsave(&priv->lock, flags);
1459 
1460  if (phydev->link) {
1461  /* check the mode of operation - full/half duplex */
1462  if (phydev->duplex != priv->duplex) {
1463  new_state = 1;
1464  priv->duplex = phydev->duplex;
1465  }
1466  if (phydev->speed != priv->speed) {
1467  new_state = 1;
1468  priv->speed = phydev->speed;
1469  }
1470  if (!priv->link) {
1471  new_state = 1;
1472  priv->link = 1;
1473  }
1474 
1475  } else if (priv->link) {
1476  new_state = 1;
1477  priv->link = 0;
1478  priv->speed = 0;
1479  priv->duplex = ~0;
1480  }
1481  if (new_state) {
1482  emac_update_phystatus(priv);
1483  phy_print_status(priv->phydev);
1484  }
1485 
1486  spin_unlock_irqrestore(&priv->lock, flags);
1487 }
1488 
1489 /*************************************************************************
1490  * Linux Driver Model
1491  *************************************************************************/
1492 
1503 static int emac_devioctl(struct net_device *ndev, struct ifreq *ifrq, int cmd)
1504 {
1505  struct emac_priv *priv = netdev_priv(ndev);
1506 
1507  if (!(netif_running(ndev)))
1508  return -EINVAL;
1509 
1510  /* TODO: Add phy read and write and private statistics get feature */
1511 
1512  return phy_mii_ioctl(priv->phydev, ifrq, cmd);
1513 }
1514 
1515 static int match_first_device(struct device *dev, void *data)
1516 {
1517  return !strncmp(dev_name(dev), "davinci_mdio", 12);
1518 }
1519 
1530 static int emac_dev_open(struct net_device *ndev)
1531 {
1532  struct device *emac_dev = &ndev->dev;
1533  u32 cnt;
1534  struct resource *res;
1535  int q, m, ret;
1536  int i = 0;
1537  int k = 0;
1538  struct emac_priv *priv = netdev_priv(ndev);
1539 
1540  pm_runtime_get(&priv->pdev->dev);
1541 
1542  netif_carrier_off(ndev);
1543  for (cnt = 0; cnt < ETH_ALEN; cnt++)
1544  ndev->dev_addr[cnt] = priv->mac_addr[cnt];
1545 
1546  /* Configuration items */
1548 
1549  priv->mac_hash1 = 0;
1550  priv->mac_hash2 = 0;
1553 
1554  for (i = 0; i < EMAC_DEF_RX_NUM_DESC; i++) {
1555  struct sk_buff *skb = emac_rx_alloc(priv);
1556 
1557  if (!skb)
1558  break;
1559 
1560  ret = cpdma_chan_submit(priv->rxchan, skb, skb->data,
1561  skb_tailroom(skb), GFP_KERNEL);
1562  if (WARN_ON(ret < 0))
1563  break;
1564  }
1565 
1566  /* Request IRQ */
1567 
1568  while ((res = platform_get_resource(priv->pdev, IORESOURCE_IRQ, k))) {
1569  for (i = res->start; i <= res->end; i++) {
1570  if (request_irq(i, emac_irq, IRQF_DISABLED,
1571  ndev->name, ndev))
1572  goto rollback;
1573  }
1574  k++;
1575  }
1576 
1577  /* Start/Enable EMAC hardware */
1578  emac_hw_enable(priv);
1579 
1580  /* Enable Interrupt pacing if configured */
1581  if (priv->coal_intvl != 0) {
1582  struct ethtool_coalesce coal;
1583 
1584  coal.rx_coalesce_usecs = (priv->coal_intvl << 4);
1585  emac_set_coalesce(ndev, &coal);
1586  }
1587 
1588  cpdma_ctlr_start(priv->dma);
1589 
1590  priv->phydev = NULL;
1591  /* use the first phy on the bus if pdata did not give us a phy id */
1592  if (!priv->phy_id) {
1593  struct device *phy;
1594 
1596  match_first_device);
1597  if (phy)
1598  priv->phy_id = dev_name(phy);
1599  }
1600 
1601  if (priv->phy_id && *priv->phy_id) {
1602  priv->phydev = phy_connect(ndev, priv->phy_id,
1603  &emac_adjust_link, 0,
1605 
1606  if (IS_ERR(priv->phydev)) {
1607  dev_err(emac_dev, "could not connect to phy %s\n",
1608  priv->phy_id);
1609  ret = PTR_ERR(priv->phydev);
1610  priv->phydev = NULL;
1611  goto err;
1612  }
1613 
1614  priv->link = 0;
1615  priv->speed = 0;
1616  priv->duplex = ~0;
1617 
1618  dev_info(emac_dev, "attached PHY driver [%s] "
1619  "(mii_bus:phy_addr=%s, id=%x)\n",
1620  priv->phydev->drv->name, dev_name(&priv->phydev->dev),
1621  priv->phydev->phy_id);
1622  } else {
1623  /* No PHY , fix the link, speed and duplex settings */
1624  dev_notice(emac_dev, "no phy, defaulting to 100/full\n");
1625  priv->link = 1;
1626  priv->speed = SPEED_100;
1627  priv->duplex = DUPLEX_FULL;
1628  emac_update_phystatus(priv);
1629  }
1630 
1631  if (!netif_running(ndev)) /* debug only - to avoid compiler warning */
1632  emac_dump_regs(priv);
1633 
1634  if (netif_msg_drv(priv))
1635  dev_notice(emac_dev, "DaVinci EMAC: Opened %s\n", ndev->name);
1636 
1637  if (priv->phydev)
1638  phy_start(priv->phydev);
1639 
1640  return 0;
1641 
1642 rollback:
1643 
1644  dev_err(emac_dev, "DaVinci EMAC: request_irq() failed");
1645 
1646  for (q = k; k >= 0; k--) {
1647  for (m = i; m >= res->start; m--)
1648  free_irq(m, ndev);
1649  res = platform_get_resource(priv->pdev, IORESOURCE_IRQ, k-1);
1650  m = res->end;
1651  }
1652 
1653  ret = -EBUSY;
1654 err:
1655  pm_runtime_put(&priv->pdev->dev);
1656  return ret;
1657 }
1658 
1668 static int emac_dev_stop(struct net_device *ndev)
1669 {
1670  struct resource *res;
1671  int i = 0;
1672  int irq_num;
1673  struct emac_priv *priv = netdev_priv(ndev);
1674  struct device *emac_dev = &ndev->dev;
1675 
1676  /* inform the upper layers. */
1677  netif_stop_queue(ndev);
1678  napi_disable(&priv->napi);
1679 
1680  netif_carrier_off(ndev);
1681  emac_int_disable(priv);
1682  cpdma_ctlr_stop(priv->dma);
1684 
1685  if (priv->phydev)
1686  phy_disconnect(priv->phydev);
1687 
1688  /* Free IRQ */
1689  while ((res = platform_get_resource(priv->pdev, IORESOURCE_IRQ, i))) {
1690  for (irq_num = res->start; irq_num <= res->end; irq_num++)
1691  free_irq(irq_num, priv->ndev);
1692  i++;
1693  }
1694 
1695  if (netif_msg_drv(priv))
1696  dev_notice(emac_dev, "DaVinci EMAC: %s stopped\n", ndev->name);
1697 
1698  pm_runtime_put(&priv->pdev->dev);
1699  return 0;
1700 }
1701 
1710 static struct net_device_stats *emac_dev_getnetstats(struct net_device *ndev)
1711 {
1712  struct emac_priv *priv = netdev_priv(ndev);
1713  u32 mac_control;
1714  u32 stats_clear_mask;
1715 
1716  /* update emac hardware stats and reset the registers*/
1717 
1718  mac_control = emac_read(EMAC_MACCONTROL);
1719 
1720  if (mac_control & EMAC_MACCONTROL_GMIIEN)
1721  stats_clear_mask = EMAC_STATS_CLR_MASK;
1722  else
1723  stats_clear_mask = 0;
1724 
1725  ndev->stats.multicast += emac_read(EMAC_RXMCASTFRAMES);
1726  emac_write(EMAC_RXMCASTFRAMES, stats_clear_mask);
1727 
1728  ndev->stats.collisions += (emac_read(EMAC_TXCOLLISION) +
1731  emac_write(EMAC_TXCOLLISION, stats_clear_mask);
1732  emac_write(EMAC_TXSINGLECOLL, stats_clear_mask);
1733  emac_write(EMAC_TXMULTICOLL, stats_clear_mask);
1734 
1735  ndev->stats.rx_length_errors += (emac_read(EMAC_RXOVERSIZED) +
1738  emac_write(EMAC_RXOVERSIZED, stats_clear_mask);
1739  emac_write(EMAC_RXJABBER, stats_clear_mask);
1740  emac_write(EMAC_RXUNDERSIZED, stats_clear_mask);
1741 
1742  ndev->stats.rx_over_errors += (emac_read(EMAC_RXSOFOVERRUNS) +
1744  emac_write(EMAC_RXSOFOVERRUNS, stats_clear_mask);
1745  emac_write(EMAC_RXMOFOVERRUNS, stats_clear_mask);
1746 
1747  ndev->stats.rx_fifo_errors += emac_read(EMAC_RXDMAOVERRUNS);
1748  emac_write(EMAC_RXDMAOVERRUNS, stats_clear_mask);
1749 
1750  ndev->stats.tx_carrier_errors +=
1752  emac_write(EMAC_TXCARRIERSENSE, stats_clear_mask);
1753 
1754  ndev->stats.tx_fifo_errors += emac_read(EMAC_TXUNDERRUN);
1755  emac_write(EMAC_TXUNDERRUN, stats_clear_mask);
1756 
1757  return &ndev->stats;
1758 }
1759 
1760 static const struct net_device_ops emac_netdev_ops = {
1761  .ndo_open = emac_dev_open,
1762  .ndo_stop = emac_dev_stop,
1763  .ndo_start_xmit = emac_dev_xmit,
1764  .ndo_set_rx_mode = emac_dev_mcast_set,
1765  .ndo_set_mac_address = emac_dev_setmac_addr,
1766  .ndo_do_ioctl = emac_devioctl,
1767  .ndo_tx_timeout = emac_dev_tx_timeout,
1768  .ndo_get_stats = emac_dev_getnetstats,
1769 #ifdef CONFIG_NET_POLL_CONTROLLER
1770  .ndo_poll_controller = emac_poll_controller,
1771 #endif
1772 };
1773 
1774 #ifdef CONFIG_OF
1775 static struct emac_platform_data
1776  *davinci_emac_of_get_pdata(struct platform_device *pdev,
1777  struct emac_priv *priv)
1778 {
1779  struct device_node *np;
1780  struct emac_platform_data *pdata = NULL;
1781  const u8 *mac_addr;
1782  u32 data;
1783  int ret;
1784 
1785  pdata = pdev->dev.platform_data;
1786  if (!pdata) {
1787  pdata = devm_kzalloc(&pdev->dev, sizeof(*pdata), GFP_KERNEL);
1788  if (!pdata)
1789  goto nodata;
1790  }
1791 
1792  np = pdev->dev.of_node;
1793  if (!np)
1794  goto nodata;
1795  else
1796  pdata->version = EMAC_VERSION_2;
1797 
1798  if (!is_valid_ether_addr(pdata->mac_addr)) {
1799  mac_addr = of_get_mac_address(np);
1800  if (mac_addr)
1801  memcpy(pdata->mac_addr, mac_addr, ETH_ALEN);
1802  }
1803 
1804  ret = of_property_read_u32(np, "ti,davinci-ctrl-reg-offset", &data);
1805  if (!ret)
1806  pdata->ctrl_reg_offset = data;
1807 
1808  ret = of_property_read_u32(np, "ti,davinci-ctrl-mod-reg-offset",
1809  &data);
1810  if (!ret)
1811  pdata->ctrl_mod_reg_offset = data;
1812 
1813  ret = of_property_read_u32(np, "ti,davinci-ctrl-ram-offset", &data);
1814  if (!ret)
1815  pdata->ctrl_ram_offset = data;
1816 
1817  ret = of_property_read_u32(np, "ti,davinci-ctrl-ram-size", &data);
1818  if (!ret)
1819  pdata->ctrl_ram_size = data;
1820 
1821  ret = of_property_read_u32(np, "ti,davinci-rmii-en", &data);
1822  if (!ret)
1823  pdata->rmii_en = data;
1824 
1825  ret = of_property_read_u32(np, "ti,davinci-no-bd-ram", &data);
1826  if (!ret)
1827  pdata->no_bd_ram = data;
1828 
1829  priv->phy_node = of_parse_phandle(np, "phy-handle", 0);
1830  if (!priv->phy_node)
1831  pdata->phy_id = "";
1832 
1833  pdev->dev.platform_data = pdata;
1834 nodata:
1835  return pdata;
1836 }
1837 #else
1838 static struct emac_platform_data
1839  *davinci_emac_of_get_pdata(struct platform_device *pdev,
1840  struct emac_priv *priv)
1841 {
1842  return pdev->dev.platform_data;
1843 }
1844 #endif
1845 
1853 static int __devinit davinci_emac_probe(struct platform_device *pdev)
1854 {
1855  int rc = 0;
1856  struct resource *res;
1857  struct net_device *ndev;
1858  struct emac_priv *priv;
1859  unsigned long size, hw_ram_addr;
1860  struct emac_platform_data *pdata;
1861  struct device *emac_dev;
1862  struct cpdma_params dma_params;
1863  struct clk *emac_clk;
1864  unsigned long emac_bus_frequency;
1865 
1866 
1867  /* obtain emac clock from kernel */
1868  emac_clk = clk_get(&pdev->dev, NULL);
1869  if (IS_ERR(emac_clk)) {
1870  dev_err(&pdev->dev, "failed to get EMAC clock\n");
1871  return -EBUSY;
1872  }
1873  emac_bus_frequency = clk_get_rate(emac_clk);
1874  clk_put(emac_clk);
1875 
1876  /* TODO: Probe PHY here if possible */
1877 
1878  ndev = alloc_etherdev(sizeof(struct emac_priv));
1879  if (!ndev) {
1880  rc = -ENOMEM;
1881  goto no_ndev;
1882  }
1883 
1884  platform_set_drvdata(pdev, ndev);
1885  priv = netdev_priv(ndev);
1886  priv->pdev = pdev;
1887  priv->ndev = ndev;
1888  priv->msg_enable = netif_msg_init(debug_level, DAVINCI_EMAC_DEBUG);
1889 
1890  spin_lock_init(&priv->lock);
1891 
1892  pdata = davinci_emac_of_get_pdata(pdev, priv);
1893  if (!pdata) {
1894  dev_err(&pdev->dev, "no platform data\n");
1895  rc = -ENODEV;
1896  goto probe_quit;
1897  }
1898 
1899  /* MAC addr and PHY mask , RMII enable info from platform_data */
1900  memcpy(priv->mac_addr, pdata->mac_addr, 6);
1901  priv->phy_id = pdata->phy_id;
1902  priv->rmii_en = pdata->rmii_en;
1903  priv->version = pdata->version;
1904  priv->int_enable = pdata->interrupt_enable;
1905  priv->int_disable = pdata->interrupt_disable;
1906 
1907  priv->coal_intvl = 0;
1908  priv->bus_freq_mhz = (u32)(emac_bus_frequency / 1000000);
1909 
1910  emac_dev = &ndev->dev;
1911  /* Get EMAC platform data */
1912  res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1913  if (!res) {
1914  dev_err(&pdev->dev,"error getting res\n");
1915  rc = -ENOENT;
1916  goto probe_quit;
1917  }
1918 
1919  priv->emac_base_phys = res->start + pdata->ctrl_reg_offset;
1920  size = resource_size(res);
1921  if (!request_mem_region(res->start, size, ndev->name)) {
1922  dev_err(&pdev->dev, "failed request_mem_region() for regs\n");
1923  rc = -ENXIO;
1924  goto probe_quit;
1925  }
1926 
1927  priv->remap_addr = ioremap(res->start, size);
1928  if (!priv->remap_addr) {
1929  dev_err(&pdev->dev, "unable to map IO\n");
1930  rc = -ENOMEM;
1931  release_mem_region(res->start, size);
1932  goto probe_quit;
1933  }
1934  priv->emac_base = priv->remap_addr + pdata->ctrl_reg_offset;
1935  ndev->base_addr = (unsigned long)priv->remap_addr;
1936 
1937  priv->ctrl_base = priv->remap_addr + pdata->ctrl_mod_reg_offset;
1938 
1939  hw_ram_addr = pdata->hw_ram_addr;
1940  if (!hw_ram_addr)
1941  hw_ram_addr = (u32 __force)res->start + pdata->ctrl_ram_offset;
1942 
1943  memset(&dma_params, 0, sizeof(dma_params));
1944  dma_params.dev = emac_dev;
1945  dma_params.dmaregs = priv->emac_base;
1946  dma_params.rxthresh = priv->emac_base + 0x120;
1947  dma_params.rxfree = priv->emac_base + 0x140;
1948  dma_params.txhdp = priv->emac_base + 0x600;
1949  dma_params.rxhdp = priv->emac_base + 0x620;
1950  dma_params.txcp = priv->emac_base + 0x640;
1951  dma_params.rxcp = priv->emac_base + 0x660;
1952  dma_params.num_chan = EMAC_MAX_TXRX_CHANNELS;
1953  dma_params.min_packet_size = EMAC_DEF_MIN_ETHPKTSIZE;
1954  dma_params.desc_hw_addr = hw_ram_addr;
1955  dma_params.desc_mem_size = pdata->ctrl_ram_size;
1956  dma_params.desc_align = 16;
1957 
1958  dma_params.desc_mem_phys = pdata->no_bd_ram ? 0 :
1959  (u32 __force)res->start + pdata->ctrl_ram_offset;
1960 
1961  priv->dma = cpdma_ctlr_create(&dma_params);
1962  if (!priv->dma) {
1963  dev_err(&pdev->dev, "error initializing DMA\n");
1964  rc = -ENOMEM;
1965  goto no_dma;
1966  }
1967 
1969  emac_tx_handler);
1971  emac_rx_handler);
1972  if (WARN_ON(!priv->txchan || !priv->rxchan)) {
1973  rc = -ENOMEM;
1974  goto no_irq_res;
1975  }
1976 
1977  res = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
1978  if (!res) {
1979  dev_err(&pdev->dev, "error getting irq res\n");
1980  rc = -ENOENT;
1981  goto no_irq_res;
1982  }
1983  ndev->irq = res->start;
1984 
1985  if (!is_valid_ether_addr(priv->mac_addr)) {
1986  /* Use random MAC if none passed */
1987  eth_hw_addr_random(ndev);
1988  memcpy(priv->mac_addr, ndev->dev_addr, ndev->addr_len);
1989  dev_warn(&pdev->dev, "using random MAC addr: %pM\n",
1990  priv->mac_addr);
1991  }
1992 
1993  ndev->netdev_ops = &emac_netdev_ops;
1994  SET_ETHTOOL_OPS(ndev, &ethtool_ops);
1995  netif_napi_add(ndev, &priv->napi, emac_poll, EMAC_POLL_WEIGHT);
1996 
1997  /* register the network device */
1998  SET_NETDEV_DEV(ndev, &pdev->dev);
1999  rc = register_netdev(ndev);
2000  if (rc) {
2001  dev_err(&pdev->dev, "error in register_netdev\n");
2002  rc = -ENODEV;
2003  goto no_irq_res;
2004  }
2005 
2006 
2007  if (netif_msg_probe(priv)) {
2008  dev_notice(emac_dev, "DaVinci EMAC Probe found device "\
2009  "(regs: %p, irq: %d)\n",
2010  (void *)priv->emac_base_phys, ndev->irq);
2011  }
2012 
2013  pm_runtime_enable(&pdev->dev);
2014  pm_runtime_resume(&pdev->dev);
2015 
2016  return 0;
2017 
2018 no_irq_res:
2019  if (priv->txchan)
2020  cpdma_chan_destroy(priv->txchan);
2021  if (priv->rxchan)
2022  cpdma_chan_destroy(priv->rxchan);
2023  cpdma_ctlr_destroy(priv->dma);
2024 no_dma:
2025  res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
2026  release_mem_region(res->start, resource_size(res));
2027  iounmap(priv->remap_addr);
2028 
2029 probe_quit:
2030  free_netdev(ndev);
2031 no_ndev:
2032  return rc;
2033 }
2034 
2042 static int __devexit davinci_emac_remove(struct platform_device *pdev)
2043 {
2044  struct resource *res;
2045  struct net_device *ndev = platform_get_drvdata(pdev);
2046  struct emac_priv *priv = netdev_priv(ndev);
2047 
2048  dev_notice(&ndev->dev, "DaVinci EMAC: davinci_emac_remove()\n");
2049 
2050  platform_set_drvdata(pdev, NULL);
2051  res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
2052 
2053  if (priv->txchan)
2054  cpdma_chan_destroy(priv->txchan);
2055  if (priv->rxchan)
2056  cpdma_chan_destroy(priv->rxchan);
2057  cpdma_ctlr_destroy(priv->dma);
2058 
2059  release_mem_region(res->start, resource_size(res));
2060 
2061  unregister_netdev(ndev);
2062  iounmap(priv->remap_addr);
2063  free_netdev(ndev);
2064 
2065  return 0;
2066 }
2067 
2068 static int davinci_emac_suspend(struct device *dev)
2069 {
2070  struct platform_device *pdev = to_platform_device(dev);
2071  struct net_device *ndev = platform_get_drvdata(pdev);
2072 
2073  if (netif_running(ndev))
2074  emac_dev_stop(ndev);
2075 
2076  return 0;
2077 }
2078 
2079 static int davinci_emac_resume(struct device *dev)
2080 {
2081  struct platform_device *pdev = to_platform_device(dev);
2082  struct net_device *ndev = platform_get_drvdata(pdev);
2083 
2084  if (netif_running(ndev))
2085  emac_dev_open(ndev);
2086 
2087  return 0;
2088 }
2089 
2090 static const struct dev_pm_ops davinci_emac_pm_ops = {
2091  .suspend = davinci_emac_suspend,
2092  .resume = davinci_emac_resume,
2093 };
2094 
2095 static const struct of_device_id davinci_emac_of_match[] = {
2096  {.compatible = "ti,davinci-dm6467-emac", },
2097  {},
2098 };
2099 MODULE_DEVICE_TABLE(of, davinci_emac_of_match);
2100 
2101 /* davinci_emac_driver: EMAC platform driver structure */
2102 static struct platform_driver davinci_emac_driver = {
2103  .driver = {
2104  .name = "davinci_emac",
2105  .owner = THIS_MODULE,
2106  .pm = &davinci_emac_pm_ops,
2107  .of_match_table = of_match_ptr(davinci_emac_of_match),
2108  },
2109  .probe = davinci_emac_probe,
2110  .remove = __devexit_p(davinci_emac_remove),
2111 };
2112 
2119 static int __init davinci_emac_init(void)
2120 {
2121  return platform_driver_register(&davinci_emac_driver);
2122 }
2123 late_initcall(davinci_emac_init);
2124 
2131 static void __exit davinci_emac_exit(void)
2132 {
2133  platform_driver_unregister(&davinci_emac_driver);
2134 }
2135 module_exit(davinci_emac_exit);
2136 
2137 MODULE_LICENSE("GPL");
2138 MODULE_AUTHOR("DaVinci EMAC Maintainer: Anant Gole <[email protected]>");
2139 MODULE_AUTHOR("DaVinci EMAC Maintainer: Chaithrika U S <[email protected]>");
2140 MODULE_DESCRIPTION("DaVinci EMAC Ethernet driver");