gpio: rcar: Fix runtime PM imbalance on error
[linux/fpc-iii.git] / drivers / net / ethernet / ti / davinci_emac.c
blobde282531f68b8f3b791f4a163aa4d8f0b530fef6
1 // SPDX-License-Identifier: GPL-2.0+
2 /*
3 * DaVinci Ethernet Medium Access Controller
5 * DaVinci EMAC is based upon CPPI 3.0 TI DMA engine
7 * Copyright (C) 2009 Texas Instruments.
9 * ---------------------------------------------------------------------------
10 * History:
11 * 0-5 A number of folks worked on this driver in bits and pieces but the major
12 * contribution came from Suraj Iyer and Anant Gole
13 * 6.0 Anant Gole - rewrote the driver as per Linux conventions
14 * 6.1 Chaithrika U S - added support for Gigabit and RMII features,
15 * PHY layer usage
18 #include <linux/module.h>
19 #include <linux/kernel.h>
20 #include <linux/sched.h>
21 #include <linux/string.h>
22 #include <linux/timer.h>
23 #include <linux/errno.h>
24 #include <linux/in.h>
25 #include <linux/ioport.h>
26 #include <linux/slab.h>
27 #include <linux/mm.h>
28 #include <linux/interrupt.h>
29 #include <linux/init.h>
30 #include <linux/netdevice.h>
31 #include <linux/etherdevice.h>
32 #include <linux/skbuff.h>
33 #include <linux/ethtool.h>
34 #include <linux/highmem.h>
35 #include <linux/proc_fs.h>
36 #include <linux/ctype.h>
37 #include <linux/spinlock.h>
38 #include <linux/dma-mapping.h>
39 #include <linux/clk.h>
40 #include <linux/platform_device.h>
41 #include <linux/regmap.h>
42 #include <linux/semaphore.h>
43 #include <linux/phy.h>
44 #include <linux/bitops.h>
45 #include <linux/io.h>
46 #include <linux/uaccess.h>
47 #include <linux/pm_runtime.h>
48 #include <linux/davinci_emac.h>
49 #include <linux/of.h>
50 #include <linux/of_address.h>
51 #include <linux/of_device.h>
52 #include <linux/of_mdio.h>
53 #include <linux/of_irq.h>
54 #include <linux/of_net.h>
55 #include <linux/mfd/syscon.h>
57 #include <asm/irq.h>
58 #include <asm/page.h>
60 #include "cpsw.h"
61 #include "davinci_cpdma.h"
63 static int debug_level;
64 module_param(debug_level, int, 0);
65 MODULE_PARM_DESC(debug_level, "DaVinci EMAC debug level (NETIF_MSG bits)");
67 /* Netif debug messages possible */
68 #define DAVINCI_EMAC_DEBUG (NETIF_MSG_DRV | \
69 NETIF_MSG_PROBE | \
70 NETIF_MSG_LINK | \
71 NETIF_MSG_TIMER | \
72 NETIF_MSG_IFDOWN | \
73 NETIF_MSG_IFUP | \
74 NETIF_MSG_RX_ERR | \
75 NETIF_MSG_TX_ERR | \
76 NETIF_MSG_TX_QUEUED | \
77 NETIF_MSG_INTR | \
78 NETIF_MSG_TX_DONE | \
79 NETIF_MSG_RX_STATUS | \
80 NETIF_MSG_PKTDATA | \
81 NETIF_MSG_HW | \
82 NETIF_MSG_WOL)
84 /* version info */
85 #define EMAC_MAJOR_VERSION 6
86 #define EMAC_MINOR_VERSION 1
87 #define EMAC_MODULE_VERSION "6.1"
88 MODULE_VERSION(EMAC_MODULE_VERSION);
89 static const char emac_version_string[] = "TI DaVinci EMAC Linux v6.1";
91 /* Configuration items */
92 #define EMAC_DEF_PASS_CRC (0) /* Do not pass CRC up to frames */
93 #define EMAC_DEF_QOS_EN (0) /* EMAC proprietary QoS disabled */
94 #define EMAC_DEF_NO_BUFF_CHAIN (0) /* No buffer chain */
95 #define EMAC_DEF_MACCTRL_FRAME_EN (0) /* Discard Maccontrol frames */
96 #define EMAC_DEF_SHORT_FRAME_EN (0) /* Discard short frames */
97 #define EMAC_DEF_ERROR_FRAME_EN (0) /* Discard error frames */
98 #define EMAC_DEF_PROM_EN (0) /* Promiscuous disabled */
99 #define EMAC_DEF_PROM_CH (0) /* Promiscuous channel is 0 */
100 #define EMAC_DEF_BCAST_EN (1) /* Broadcast enabled */
101 #define EMAC_DEF_BCAST_CH (0) /* Broadcast channel is 0 */
102 #define EMAC_DEF_MCAST_EN (1) /* Multicast enabled */
103 #define EMAC_DEF_MCAST_CH (0) /* Multicast channel is 0 */
105 #define EMAC_DEF_TXPRIO_FIXED (1) /* TX Priority is fixed */
106 #define EMAC_DEF_TXPACING_EN (0) /* TX pacing NOT supported*/
108 #define EMAC_DEF_BUFFER_OFFSET (0) /* Buffer offset to DMA (future) */
109 #define EMAC_DEF_MIN_ETHPKTSIZE (60) /* Minimum ethernet pkt size */
110 #define EMAC_DEF_MAX_FRAME_SIZE (1500 + 14 + 4 + 4)
111 #define EMAC_DEF_TX_CH (0) /* Default 0th channel */
112 #define EMAC_DEF_RX_CH (0) /* Default 0th channel */
113 #define EMAC_DEF_RX_NUM_DESC (128)
114 #define EMAC_DEF_MAX_TX_CH (1) /* Max TX channels configured */
115 #define EMAC_DEF_MAX_RX_CH (1) /* Max RX channels configured */
116 #define EMAC_POLL_WEIGHT (64) /* Default NAPI poll weight */
118 /* Buffer descriptor parameters */
119 #define EMAC_DEF_TX_MAX_SERVICE (32) /* TX max service BD's */
120 #define EMAC_DEF_RX_MAX_SERVICE (64) /* should = netdev->weight */
122 /* EMAC register related defines */
123 #define EMAC_ALL_MULTI_REG_VALUE (0xFFFFFFFF)
124 #define EMAC_NUM_MULTICAST_BITS (64)
125 #define EMAC_TX_CONTROL_TX_ENABLE_VAL (0x1)
126 #define EMAC_RX_CONTROL_RX_ENABLE_VAL (0x1)
127 #define EMAC_MAC_HOST_ERR_INTMASK_VAL (0x2)
128 #define EMAC_RX_UNICAST_CLEAR_ALL (0xFF)
129 #define EMAC_INT_MASK_CLEAR (0xFF)
131 /* RX MBP register bit positions */
132 #define EMAC_RXMBP_PASSCRC_MASK BIT(30)
133 #define EMAC_RXMBP_QOSEN_MASK BIT(29)
134 #define EMAC_RXMBP_NOCHAIN_MASK BIT(28)
135 #define EMAC_RXMBP_CMFEN_MASK BIT(24)
136 #define EMAC_RXMBP_CSFEN_MASK BIT(23)
137 #define EMAC_RXMBP_CEFEN_MASK BIT(22)
138 #define EMAC_RXMBP_CAFEN_MASK BIT(21)
139 #define EMAC_RXMBP_PROMCH_SHIFT (16)
140 #define EMAC_RXMBP_PROMCH_MASK (0x7 << 16)
141 #define EMAC_RXMBP_BROADEN_MASK BIT(13)
142 #define EMAC_RXMBP_BROADCH_SHIFT (8)
143 #define EMAC_RXMBP_BROADCH_MASK (0x7 << 8)
144 #define EMAC_RXMBP_MULTIEN_MASK BIT(5)
145 #define EMAC_RXMBP_MULTICH_SHIFT (0)
146 #define EMAC_RXMBP_MULTICH_MASK (0x7)
147 #define EMAC_RXMBP_CHMASK (0x7)
149 /* EMAC register definitions/bit maps used */
150 # define EMAC_MBP_RXPROMISC (0x00200000)
151 # define EMAC_MBP_PROMISCCH(ch) (((ch) & 0x7) << 16)
152 # define EMAC_MBP_RXBCAST (0x00002000)
153 # define EMAC_MBP_BCASTCHAN(ch) (((ch) & 0x7) << 8)
154 # define EMAC_MBP_RXMCAST (0x00000020)
155 # define EMAC_MBP_MCASTCHAN(ch) ((ch) & 0x7)
157 /* EMAC mac_control register */
158 #define EMAC_MACCONTROL_TXPTYPE BIT(9)
159 #define EMAC_MACCONTROL_TXPACEEN BIT(6)
160 #define EMAC_MACCONTROL_GMIIEN BIT(5)
161 #define EMAC_MACCONTROL_GIGABITEN BIT(7)
162 #define EMAC_MACCONTROL_FULLDUPLEXEN BIT(0)
163 #define EMAC_MACCONTROL_RMIISPEED_MASK BIT(15)
165 /* GIGABIT MODE related bits */
166 #define EMAC_DM646X_MACCONTORL_GIG BIT(7)
167 #define EMAC_DM646X_MACCONTORL_GIGFORCE BIT(17)
169 /* EMAC mac_status register */
170 #define EMAC_MACSTATUS_TXERRCODE_MASK (0xF00000)
171 #define EMAC_MACSTATUS_TXERRCODE_SHIFT (20)
172 #define EMAC_MACSTATUS_TXERRCH_MASK (0x7)
173 #define EMAC_MACSTATUS_TXERRCH_SHIFT (16)
174 #define EMAC_MACSTATUS_RXERRCODE_MASK (0xF000)
175 #define EMAC_MACSTATUS_RXERRCODE_SHIFT (12)
176 #define EMAC_MACSTATUS_RXERRCH_MASK (0x7)
177 #define EMAC_MACSTATUS_RXERRCH_SHIFT (8)
179 /* EMAC RX register masks */
180 #define EMAC_RX_MAX_LEN_MASK (0xFFFF)
181 #define EMAC_RX_BUFFER_OFFSET_MASK (0xFFFF)
183 /* MAC_IN_VECTOR (0x180) register bit fields */
184 #define EMAC_DM644X_MAC_IN_VECTOR_HOST_INT BIT(17)
185 #define EMAC_DM644X_MAC_IN_VECTOR_STATPEND_INT BIT(16)
186 #define EMAC_DM644X_MAC_IN_VECTOR_RX_INT_VEC BIT(8)
187 #define EMAC_DM644X_MAC_IN_VECTOR_TX_INT_VEC BIT(0)
189 /** NOTE:: For DM646x the IN_VECTOR has changed */
190 #define EMAC_DM646X_MAC_IN_VECTOR_RX_INT_VEC BIT(EMAC_DEF_RX_CH)
191 #define EMAC_DM646X_MAC_IN_VECTOR_TX_INT_VEC BIT(16 + EMAC_DEF_TX_CH)
192 #define EMAC_DM646X_MAC_IN_VECTOR_HOST_INT BIT(26)
193 #define EMAC_DM646X_MAC_IN_VECTOR_STATPEND_INT BIT(27)
195 /* CPPI bit positions */
196 #define EMAC_CPPI_SOP_BIT BIT(31)
197 #define EMAC_CPPI_EOP_BIT BIT(30)
198 #define EMAC_CPPI_OWNERSHIP_BIT BIT(29)
199 #define EMAC_CPPI_EOQ_BIT BIT(28)
200 #define EMAC_CPPI_TEARDOWN_COMPLETE_BIT BIT(27)
201 #define EMAC_CPPI_PASS_CRC_BIT BIT(26)
202 #define EMAC_RX_BD_BUF_SIZE (0xFFFF)
203 #define EMAC_BD_LENGTH_FOR_CACHE (16) /* only CPPI bytes */
204 #define EMAC_RX_BD_PKT_LENGTH_MASK (0xFFFF)
206 /* Max hardware defines */
207 #define EMAC_MAX_TXRX_CHANNELS (8) /* Max hardware channels */
208 #define EMAC_DEF_MAX_MULTICAST_ADDRESSES (64) /* Max mcast addr's */
210 /* EMAC Peripheral Device Register Memory Layout structure */
211 #define EMAC_MACINVECTOR 0x90
213 #define EMAC_DM646X_MACEOIVECTOR 0x94
215 #define EMAC_MACINTSTATRAW 0xB0
216 #define EMAC_MACINTSTATMASKED 0xB4
217 #define EMAC_MACINTMASKSET 0xB8
218 #define EMAC_MACINTMASKCLEAR 0xBC
220 #define EMAC_RXMBPENABLE 0x100
221 #define EMAC_RXUNICASTSET 0x104
222 #define EMAC_RXUNICASTCLEAR 0x108
223 #define EMAC_RXMAXLEN 0x10C
224 #define EMAC_RXBUFFEROFFSET 0x110
225 #define EMAC_RXFILTERLOWTHRESH 0x114
227 #define EMAC_MACCONTROL 0x160
228 #define EMAC_MACSTATUS 0x164
229 #define EMAC_EMCONTROL 0x168
230 #define EMAC_FIFOCONTROL 0x16C
231 #define EMAC_MACCONFIG 0x170
232 #define EMAC_SOFTRESET 0x174
233 #define EMAC_MACSRCADDRLO 0x1D0
234 #define EMAC_MACSRCADDRHI 0x1D4
235 #define EMAC_MACHASH1 0x1D8
236 #define EMAC_MACHASH2 0x1DC
237 #define EMAC_MACADDRLO 0x500
238 #define EMAC_MACADDRHI 0x504
239 #define EMAC_MACINDEX 0x508
241 /* EMAC statistics registers */
242 #define EMAC_RXGOODFRAMES 0x200
243 #define EMAC_RXBCASTFRAMES 0x204
244 #define EMAC_RXMCASTFRAMES 0x208
245 #define EMAC_RXPAUSEFRAMES 0x20C
246 #define EMAC_RXCRCERRORS 0x210
247 #define EMAC_RXALIGNCODEERRORS 0x214
248 #define EMAC_RXOVERSIZED 0x218
249 #define EMAC_RXJABBER 0x21C
250 #define EMAC_RXUNDERSIZED 0x220
251 #define EMAC_RXFRAGMENTS 0x224
252 #define EMAC_RXFILTERED 0x228
253 #define EMAC_RXQOSFILTERED 0x22C
254 #define EMAC_RXOCTETS 0x230
255 #define EMAC_TXGOODFRAMES 0x234
256 #define EMAC_TXBCASTFRAMES 0x238
257 #define EMAC_TXMCASTFRAMES 0x23C
258 #define EMAC_TXPAUSEFRAMES 0x240
259 #define EMAC_TXDEFERRED 0x244
260 #define EMAC_TXCOLLISION 0x248
261 #define EMAC_TXSINGLECOLL 0x24C
262 #define EMAC_TXMULTICOLL 0x250
263 #define EMAC_TXEXCESSIVECOLL 0x254
264 #define EMAC_TXLATECOLL 0x258
265 #define EMAC_TXUNDERRUN 0x25C
266 #define EMAC_TXCARRIERSENSE 0x260
267 #define EMAC_TXOCTETS 0x264
268 #define EMAC_NETOCTETS 0x280
269 #define EMAC_RXSOFOVERRUNS 0x284
270 #define EMAC_RXMOFOVERRUNS 0x288
271 #define EMAC_RXDMAOVERRUNS 0x28C
273 /* EMAC DM644x control registers */
274 #define EMAC_CTRL_EWCTL (0x4)
275 #define EMAC_CTRL_EWINTTCNT (0x8)
277 /* EMAC DM644x control module masks */
278 #define EMAC_DM644X_EWINTCNT_MASK 0x1FFFF
279 #define EMAC_DM644X_INTMIN_INTVL 0x1
280 #define EMAC_DM644X_INTMAX_INTVL (EMAC_DM644X_EWINTCNT_MASK)
282 /* EMAC DM646X control module registers */
283 #define EMAC_DM646X_CMINTCTRL 0x0C
284 #define EMAC_DM646X_CMRXINTEN 0x14
285 #define EMAC_DM646X_CMTXINTEN 0x18
286 #define EMAC_DM646X_CMRXINTMAX 0x70
287 #define EMAC_DM646X_CMTXINTMAX 0x74
289 /* EMAC DM646X control module masks */
290 #define EMAC_DM646X_INTPACEEN (0x3 << 16)
291 #define EMAC_DM646X_INTPRESCALE_MASK (0x7FF << 0)
292 #define EMAC_DM646X_CMINTMAX_CNT 63
293 #define EMAC_DM646X_CMINTMIN_CNT 2
294 #define EMAC_DM646X_CMINTMAX_INTVL (1000 / EMAC_DM646X_CMINTMIN_CNT)
295 #define EMAC_DM646X_CMINTMIN_INTVL ((1000 / EMAC_DM646X_CMINTMAX_CNT) + 1)
298 /* EMAC EOI codes for C0 */
299 #define EMAC_DM646X_MAC_EOI_C0_RXEN (0x01)
300 #define EMAC_DM646X_MAC_EOI_C0_TXEN (0x02)
302 /* EMAC Stats Clear Mask */
303 #define EMAC_STATS_CLR_MASK (0xFFFFFFFF)
305 /* emac_priv: EMAC private data structure
307 * EMAC adapter private data structure
309 struct emac_priv {
310 u32 msg_enable;
311 struct net_device *ndev;
312 struct platform_device *pdev;
313 struct napi_struct napi;
314 char mac_addr[6];
315 void __iomem *remap_addr;
316 u32 emac_base_phys;
317 void __iomem *emac_base;
318 void __iomem *ctrl_base;
319 struct cpdma_ctlr *dma;
320 struct cpdma_chan *txchan;
321 struct cpdma_chan *rxchan;
322 u32 link; /* 1=link on, 0=link off */
323 u32 speed; /* 0=Auto Neg, 1=No PHY, 10,100, 1000 - mbps */
324 u32 duplex; /* Link duplex: 0=Half, 1=Full */
325 u32 rx_buf_size;
326 u32 isr_count;
327 u32 coal_intvl;
328 u32 bus_freq_mhz;
329 u8 rmii_en;
330 u8 version;
331 u32 mac_hash1;
332 u32 mac_hash2;
333 u32 multicast_hash_cnt[EMAC_NUM_MULTICAST_BITS];
334 u32 rx_addr_type;
335 const char *phy_id;
336 struct device_node *phy_node;
337 spinlock_t lock;
338 /*platform specific members*/
339 void (*int_enable) (void);
340 void (*int_disable) (void);
343 /* EMAC TX Host Error description strings */
344 static char *emac_txhost_errcodes[16] = {
345 "No error", "SOP error", "Ownership bit not set in SOP buffer",
346 "Zero Next Buffer Descriptor Pointer Without EOP",
347 "Zero Buffer Pointer", "Zero Buffer Length", "Packet Length Error",
348 "Reserved", "Reserved", "Reserved", "Reserved", "Reserved",
349 "Reserved", "Reserved", "Reserved", "Reserved"
352 /* EMAC RX Host Error description strings */
353 static char *emac_rxhost_errcodes[16] = {
354 "No error", "Reserved", "Ownership bit not set in input buffer",
355 "Reserved", "Zero Buffer Pointer", "Reserved", "Reserved",
356 "Reserved", "Reserved", "Reserved", "Reserved", "Reserved",
357 "Reserved", "Reserved", "Reserved", "Reserved"
360 /* Helper macros */
361 #define emac_read(reg) ioread32(priv->emac_base + (reg))
362 #define emac_write(reg, val) iowrite32(val, priv->emac_base + (reg))
364 #define emac_ctrl_read(reg) ioread32((priv->ctrl_base + (reg)))
365 #define emac_ctrl_write(reg, val) iowrite32(val, (priv->ctrl_base + (reg)))
368 * emac_get_drvinfo - Get EMAC driver information
369 * @ndev: The DaVinci EMAC network adapter
370 * @info: ethtool info structure containing name and version
372 * Returns EMAC driver information (name and version)
375 static void emac_get_drvinfo(struct net_device *ndev,
376 struct ethtool_drvinfo *info)
378 strlcpy(info->driver, emac_version_string, sizeof(info->driver));
379 strlcpy(info->version, EMAC_MODULE_VERSION, sizeof(info->version));
383 * emac_get_coalesce - Get interrupt coalesce settings for this device
384 * @ndev : The DaVinci EMAC network adapter
385 * @coal : ethtool coalesce settings structure
387 * Fetch the current interrupt coalesce settings
390 static int emac_get_coalesce(struct net_device *ndev,
391 struct ethtool_coalesce *coal)
393 struct emac_priv *priv = netdev_priv(ndev);
395 coal->rx_coalesce_usecs = priv->coal_intvl;
396 return 0;
401 * emac_set_coalesce - Set interrupt coalesce settings for this device
402 * @ndev : The DaVinci EMAC network adapter
403 * @coal : ethtool coalesce settings structure
405 * Set interrupt coalesce parameters
408 static int emac_set_coalesce(struct net_device *ndev,
409 struct ethtool_coalesce *coal)
411 struct emac_priv *priv = netdev_priv(ndev);
412 u32 int_ctrl, num_interrupts = 0;
413 u32 prescale = 0, addnl_dvdr = 1, coal_intvl = 0;
415 if (!coal->rx_coalesce_usecs)
416 return -EINVAL;
418 coal_intvl = coal->rx_coalesce_usecs;
420 switch (priv->version) {
421 case EMAC_VERSION_2:
422 int_ctrl = emac_ctrl_read(EMAC_DM646X_CMINTCTRL);
423 prescale = priv->bus_freq_mhz * 4;
425 if (coal_intvl < EMAC_DM646X_CMINTMIN_INTVL)
426 coal_intvl = EMAC_DM646X_CMINTMIN_INTVL;
428 if (coal_intvl > EMAC_DM646X_CMINTMAX_INTVL) {
430 * Interrupt pacer works with 4us Pulse, we can
431 * throttle further by dilating the 4us pulse.
433 addnl_dvdr = EMAC_DM646X_INTPRESCALE_MASK / prescale;
435 if (addnl_dvdr > 1) {
436 prescale *= addnl_dvdr;
437 if (coal_intvl > (EMAC_DM646X_CMINTMAX_INTVL
438 * addnl_dvdr))
439 coal_intvl = (EMAC_DM646X_CMINTMAX_INTVL
440 * addnl_dvdr);
441 } else {
442 addnl_dvdr = 1;
443 coal_intvl = EMAC_DM646X_CMINTMAX_INTVL;
447 num_interrupts = (1000 * addnl_dvdr) / coal_intvl;
449 int_ctrl |= EMAC_DM646X_INTPACEEN;
450 int_ctrl &= (~EMAC_DM646X_INTPRESCALE_MASK);
451 int_ctrl |= (prescale & EMAC_DM646X_INTPRESCALE_MASK);
452 emac_ctrl_write(EMAC_DM646X_CMINTCTRL, int_ctrl);
454 emac_ctrl_write(EMAC_DM646X_CMRXINTMAX, num_interrupts);
455 emac_ctrl_write(EMAC_DM646X_CMTXINTMAX, num_interrupts);
457 break;
458 default:
459 int_ctrl = emac_ctrl_read(EMAC_CTRL_EWINTTCNT);
460 int_ctrl &= (~EMAC_DM644X_EWINTCNT_MASK);
461 prescale = coal_intvl * priv->bus_freq_mhz;
462 if (prescale > EMAC_DM644X_EWINTCNT_MASK) {
463 prescale = EMAC_DM644X_EWINTCNT_MASK;
464 coal_intvl = prescale / priv->bus_freq_mhz;
466 emac_ctrl_write(EMAC_CTRL_EWINTTCNT, (int_ctrl | prescale));
468 break;
471 printk(KERN_INFO"Set coalesce to %d usecs.\n", coal_intvl);
472 priv->coal_intvl = coal_intvl;
474 return 0;
479 /* ethtool_ops: DaVinci EMAC Ethtool structure
481 * Ethtool support for EMAC adapter
483 static const struct ethtool_ops ethtool_ops = {
484 .supported_coalesce_params = ETHTOOL_COALESCE_RX_USECS,
485 .get_drvinfo = emac_get_drvinfo,
486 .get_link = ethtool_op_get_link,
487 .get_coalesce = emac_get_coalesce,
488 .set_coalesce = emac_set_coalesce,
489 .get_ts_info = ethtool_op_get_ts_info,
490 .get_link_ksettings = phy_ethtool_get_link_ksettings,
491 .set_link_ksettings = phy_ethtool_set_link_ksettings,
495 * emac_update_phystatus - Update Phy status
496 * @priv: The DaVinci EMAC private adapter structure
498 * Updates phy status and takes action for network queue if required
499 * based upon link status
502 static void emac_update_phystatus(struct emac_priv *priv)
504 u32 mac_control;
505 u32 new_duplex;
506 u32 cur_duplex;
507 struct net_device *ndev = priv->ndev;
509 mac_control = emac_read(EMAC_MACCONTROL);
510 cur_duplex = (mac_control & EMAC_MACCONTROL_FULLDUPLEXEN) ?
511 DUPLEX_FULL : DUPLEX_HALF;
512 if (ndev->phydev)
513 new_duplex = ndev->phydev->duplex;
514 else
515 new_duplex = DUPLEX_FULL;
517 /* We get called only if link has changed (speed/duplex/status) */
518 if ((priv->link) && (new_duplex != cur_duplex)) {
519 priv->duplex = new_duplex;
520 if (DUPLEX_FULL == priv->duplex)
521 mac_control |= (EMAC_MACCONTROL_FULLDUPLEXEN);
522 else
523 mac_control &= ~(EMAC_MACCONTROL_FULLDUPLEXEN);
526 if (priv->speed == SPEED_1000 && (priv->version == EMAC_VERSION_2)) {
527 mac_control = emac_read(EMAC_MACCONTROL);
528 mac_control |= (EMAC_DM646X_MACCONTORL_GIG |
529 EMAC_DM646X_MACCONTORL_GIGFORCE);
530 } else {
531 /* Clear the GIG bit and GIGFORCE bit */
532 mac_control &= ~(EMAC_DM646X_MACCONTORL_GIGFORCE |
533 EMAC_DM646X_MACCONTORL_GIG);
535 if (priv->rmii_en && (priv->speed == SPEED_100))
536 mac_control |= EMAC_MACCONTROL_RMIISPEED_MASK;
537 else
538 mac_control &= ~EMAC_MACCONTROL_RMIISPEED_MASK;
541 /* Update mac_control if changed */
542 emac_write(EMAC_MACCONTROL, mac_control);
544 if (priv->link) {
545 /* link ON */
546 if (!netif_carrier_ok(ndev))
547 netif_carrier_on(ndev);
548 /* reactivate the transmit queue if it is stopped */
549 if (netif_running(ndev) && netif_queue_stopped(ndev))
550 netif_wake_queue(ndev);
551 } else {
552 /* link OFF */
553 if (netif_carrier_ok(ndev))
554 netif_carrier_off(ndev);
555 if (!netif_queue_stopped(ndev))
556 netif_stop_queue(ndev);
561 * hash_get - Calculate hash value from mac address
562 * @addr: mac address to delete from hash table
564 * Calculates hash value from mac address
567 static u32 hash_get(u8 *addr)
569 u32 hash;
570 u8 tmpval;
571 int cnt;
572 hash = 0;
574 for (cnt = 0; cnt < 2; cnt++) {
575 tmpval = *addr++;
576 hash ^= (tmpval >> 2) ^ (tmpval << 4);
577 tmpval = *addr++;
578 hash ^= (tmpval >> 4) ^ (tmpval << 2);
579 tmpval = *addr++;
580 hash ^= (tmpval >> 6) ^ (tmpval);
583 return hash & 0x3F;
587 * emac_hash_add - Hash function to add mac addr from hash table
588 * @priv: The DaVinci EMAC private adapter structure
589 * @mac_addr: mac address to delete from hash table
591 * Adds mac address to the internal hash table
594 static int emac_hash_add(struct emac_priv *priv, u8 *mac_addr)
596 struct device *emac_dev = &priv->ndev->dev;
597 u32 rc = 0;
598 u32 hash_bit;
599 u32 hash_value = hash_get(mac_addr);
601 if (hash_value >= EMAC_NUM_MULTICAST_BITS) {
602 if (netif_msg_drv(priv)) {
603 dev_err(emac_dev, "DaVinci EMAC: emac_hash_add(): Invalid "\
604 "Hash %08x, should not be greater than %08x",
605 hash_value, (EMAC_NUM_MULTICAST_BITS - 1));
607 return -1;
610 /* set the hash bit only if not previously set */
611 if (priv->multicast_hash_cnt[hash_value] == 0) {
612 rc = 1; /* hash value changed */
613 if (hash_value < 32) {
614 hash_bit = BIT(hash_value);
615 priv->mac_hash1 |= hash_bit;
616 } else {
617 hash_bit = BIT((hash_value - 32));
618 priv->mac_hash2 |= hash_bit;
622 /* incr counter for num of mcast addr's mapped to "this" hash bit */
623 ++priv->multicast_hash_cnt[hash_value];
625 return rc;
629 * emac_hash_del - Hash function to delete mac addr from hash table
630 * @priv: The DaVinci EMAC private adapter structure
631 * @mac_addr: mac address to delete from hash table
633 * Removes mac address from the internal hash table
636 static int emac_hash_del(struct emac_priv *priv, u8 *mac_addr)
638 u32 hash_value;
639 u32 hash_bit;
641 hash_value = hash_get(mac_addr);
642 if (priv->multicast_hash_cnt[hash_value] > 0) {
643 /* dec cntr for num of mcast addr's mapped to this hash bit */
644 --priv->multicast_hash_cnt[hash_value];
647 /* if counter still > 0, at least one multicast address refers
648 * to this hash bit. so return 0 */
649 if (priv->multicast_hash_cnt[hash_value] > 0)
650 return 0;
652 if (hash_value < 32) {
653 hash_bit = BIT(hash_value);
654 priv->mac_hash1 &= ~hash_bit;
655 } else {
656 hash_bit = BIT((hash_value - 32));
657 priv->mac_hash2 &= ~hash_bit;
660 /* return 1 to indicate change in mac_hash registers reqd */
661 return 1;
664 /* EMAC multicast operation */
665 #define EMAC_MULTICAST_ADD 0
666 #define EMAC_MULTICAST_DEL 1
667 #define EMAC_ALL_MULTI_SET 2
668 #define EMAC_ALL_MULTI_CLR 3
671 * emac_add_mcast - Set multicast address in the EMAC adapter (Internal)
672 * @priv: The DaVinci EMAC private adapter structure
673 * @action: multicast operation to perform
674 * mac_addr: mac address to set
676 * Set multicast addresses in EMAC adapter - internal function
679 static void emac_add_mcast(struct emac_priv *priv, u32 action, u8 *mac_addr)
681 struct device *emac_dev = &priv->ndev->dev;
682 int update = -1;
684 switch (action) {
685 case EMAC_MULTICAST_ADD:
686 update = emac_hash_add(priv, mac_addr);
687 break;
688 case EMAC_MULTICAST_DEL:
689 update = emac_hash_del(priv, mac_addr);
690 break;
691 case EMAC_ALL_MULTI_SET:
692 update = 1;
693 priv->mac_hash1 = EMAC_ALL_MULTI_REG_VALUE;
694 priv->mac_hash2 = EMAC_ALL_MULTI_REG_VALUE;
695 break;
696 case EMAC_ALL_MULTI_CLR:
697 update = 1;
698 priv->mac_hash1 = 0;
699 priv->mac_hash2 = 0;
700 memset(&(priv->multicast_hash_cnt[0]), 0,
701 sizeof(priv->multicast_hash_cnt[0]) *
702 EMAC_NUM_MULTICAST_BITS);
703 break;
704 default:
705 if (netif_msg_drv(priv))
706 dev_err(emac_dev, "DaVinci EMAC: add_mcast"\
707 ": bad operation %d", action);
708 break;
711 /* write to the hardware only if the register status chances */
712 if (update > 0) {
713 emac_write(EMAC_MACHASH1, priv->mac_hash1);
714 emac_write(EMAC_MACHASH2, priv->mac_hash2);
719 * emac_dev_mcast_set - Set multicast address in the EMAC adapter
720 * @ndev: The DaVinci EMAC network adapter
722 * Set multicast addresses in EMAC adapter
725 static void emac_dev_mcast_set(struct net_device *ndev)
727 u32 mbp_enable;
728 struct emac_priv *priv = netdev_priv(ndev);
730 mbp_enable = emac_read(EMAC_RXMBPENABLE);
731 if (ndev->flags & IFF_PROMISC) {
732 mbp_enable &= (~EMAC_MBP_PROMISCCH(EMAC_DEF_PROM_CH));
733 mbp_enable |= (EMAC_MBP_RXPROMISC);
734 } else {
735 mbp_enable = (mbp_enable & ~EMAC_MBP_RXPROMISC);
736 if ((ndev->flags & IFF_ALLMULTI) ||
737 netdev_mc_count(ndev) > EMAC_DEF_MAX_MULTICAST_ADDRESSES) {
738 mbp_enable = (mbp_enable | EMAC_MBP_RXMCAST);
739 emac_add_mcast(priv, EMAC_ALL_MULTI_SET, NULL);
740 } else if (!netdev_mc_empty(ndev)) {
741 struct netdev_hw_addr *ha;
743 mbp_enable = (mbp_enable | EMAC_MBP_RXMCAST);
744 emac_add_mcast(priv, EMAC_ALL_MULTI_CLR, NULL);
745 /* program multicast address list into EMAC hardware */
746 netdev_for_each_mc_addr(ha, ndev) {
747 emac_add_mcast(priv, EMAC_MULTICAST_ADD,
748 (u8 *) ha->addr);
750 } else {
751 mbp_enable = (mbp_enable & ~EMAC_MBP_RXMCAST);
752 emac_add_mcast(priv, EMAC_ALL_MULTI_CLR, NULL);
755 /* Set mbp config register */
756 emac_write(EMAC_RXMBPENABLE, mbp_enable);
759 /*************************************************************************
760 * EMAC Hardware manipulation
761 *************************************************************************/
764 * emac_int_disable - Disable EMAC module interrupt (from adapter)
765 * @priv: The DaVinci EMAC private adapter structure
767 * Disable EMAC interrupt on the adapter
770 static void emac_int_disable(struct emac_priv *priv)
772 if (priv->version == EMAC_VERSION_2) {
773 unsigned long flags;
775 local_irq_save(flags);
777 /* Program C0_Int_En to zero to turn off
778 * interrupts to the CPU */
779 emac_ctrl_write(EMAC_DM646X_CMRXINTEN, 0x0);
780 emac_ctrl_write(EMAC_DM646X_CMTXINTEN, 0x0);
781 /* NOTE: Rx Threshold and Misc interrupts are not disabled */
782 if (priv->int_disable)
783 priv->int_disable();
785 /* NOTE: Rx Threshold and Misc interrupts are not enabled */
787 /* ack rxen only then a new pulse will be generated */
788 emac_write(EMAC_DM646X_MACEOIVECTOR,
789 EMAC_DM646X_MAC_EOI_C0_RXEN);
791 /* ack txen- only then a new pulse will be generated */
792 emac_write(EMAC_DM646X_MACEOIVECTOR,
793 EMAC_DM646X_MAC_EOI_C0_TXEN);
795 local_irq_restore(flags);
797 } else {
798 /* Set DM644x control registers for interrupt control */
799 emac_ctrl_write(EMAC_CTRL_EWCTL, 0x0);
804 * emac_int_enable - Enable EMAC module interrupt (from adapter)
805 * @priv: The DaVinci EMAC private adapter structure
807 * Enable EMAC interrupt on the adapter
810 static void emac_int_enable(struct emac_priv *priv)
812 if (priv->version == EMAC_VERSION_2) {
813 if (priv->int_enable)
814 priv->int_enable();
816 emac_ctrl_write(EMAC_DM646X_CMRXINTEN, 0xff);
817 emac_ctrl_write(EMAC_DM646X_CMTXINTEN, 0xff);
819 /* In addition to turning on interrupt Enable, we need
820 * ack by writing appropriate values to the EOI
821 * register */
823 /* NOTE: Rx Threshold and Misc interrupts are not enabled */
824 } else {
825 /* Set DM644x control registers for interrupt control */
826 emac_ctrl_write(EMAC_CTRL_EWCTL, 0x1);
831 * emac_irq - EMAC interrupt handler
832 * @irq: interrupt number
833 * @dev_id: EMAC network adapter data structure ptr
835 * EMAC Interrupt handler - we only schedule NAPI and not process any packets
836 * here. EVen the interrupt status is checked (TX/RX/Err) in NAPI poll function
838 * Returns interrupt handled condition
840 static irqreturn_t emac_irq(int irq, void *dev_id)
842 struct net_device *ndev = (struct net_device *)dev_id;
843 struct emac_priv *priv = netdev_priv(ndev);
845 ++priv->isr_count;
846 if (likely(netif_running(priv->ndev))) {
847 emac_int_disable(priv);
848 napi_schedule(&priv->napi);
849 } else {
850 /* we are closing down, so dont process anything */
852 return IRQ_HANDLED;
855 static struct sk_buff *emac_rx_alloc(struct emac_priv *priv)
857 struct sk_buff *skb = netdev_alloc_skb(priv->ndev, priv->rx_buf_size);
858 if (WARN_ON(!skb))
859 return NULL;
860 skb_reserve(skb, NET_IP_ALIGN);
861 return skb;
864 static void emac_rx_handler(void *token, int len, int status)
866 struct sk_buff *skb = token;
867 struct net_device *ndev = skb->dev;
868 struct emac_priv *priv = netdev_priv(ndev);
869 struct device *emac_dev = &ndev->dev;
870 int ret;
872 /* free and bail if we are shutting down */
873 if (unlikely(!netif_running(ndev))) {
874 dev_kfree_skb_any(skb);
875 return;
878 /* recycle on receive error */
879 if (status < 0) {
880 ndev->stats.rx_errors++;
881 goto recycle;
884 /* feed received packet up the stack */
885 skb_put(skb, len);
886 skb->protocol = eth_type_trans(skb, ndev);
887 netif_receive_skb(skb);
888 ndev->stats.rx_bytes += len;
889 ndev->stats.rx_packets++;
891 /* alloc a new packet for receive */
892 skb = emac_rx_alloc(priv);
893 if (!skb) {
894 if (netif_msg_rx_err(priv) && net_ratelimit())
895 dev_err(emac_dev, "failed rx buffer alloc\n");
896 return;
899 recycle:
900 ret = cpdma_chan_submit(priv->rxchan, skb, skb->data,
901 skb_tailroom(skb), 0);
903 WARN_ON(ret == -ENOMEM);
904 if (unlikely(ret < 0))
905 dev_kfree_skb_any(skb);
908 static void emac_tx_handler(void *token, int len, int status)
910 struct sk_buff *skb = token;
911 struct net_device *ndev = skb->dev;
913 /* Check whether the queue is stopped due to stalled tx dma, if the
914 * queue is stopped then start the queue as we have free desc for tx
916 if (unlikely(netif_queue_stopped(ndev)))
917 netif_wake_queue(ndev);
918 ndev->stats.tx_packets++;
919 ndev->stats.tx_bytes += len;
920 dev_kfree_skb_any(skb);
924 * emac_dev_xmit - EMAC Transmit function
925 * @skb: SKB pointer
926 * @ndev: The DaVinci EMAC network adapter
928 * Called by the system to transmit a packet - we queue the packet in
929 * EMAC hardware transmit queue
931 * Returns success(NETDEV_TX_OK) or error code (typically out of desc's)
933 static int emac_dev_xmit(struct sk_buff *skb, struct net_device *ndev)
935 struct device *emac_dev = &ndev->dev;
936 int ret_code;
937 struct emac_priv *priv = netdev_priv(ndev);
939 /* If no link, return */
940 if (unlikely(!priv->link)) {
941 if (netif_msg_tx_err(priv) && net_ratelimit())
942 dev_err(emac_dev, "DaVinci EMAC: No link to transmit");
943 goto fail_tx;
946 ret_code = skb_padto(skb, EMAC_DEF_MIN_ETHPKTSIZE);
947 if (unlikely(ret_code < 0)) {
948 if (netif_msg_tx_err(priv) && net_ratelimit())
949 dev_err(emac_dev, "DaVinci EMAC: packet pad failed");
950 goto fail_tx;
953 skb_tx_timestamp(skb);
955 ret_code = cpdma_chan_submit(priv->txchan, skb, skb->data, skb->len,
957 if (unlikely(ret_code != 0)) {
958 if (netif_msg_tx_err(priv) && net_ratelimit())
959 dev_err(emac_dev, "DaVinci EMAC: desc submit failed");
960 goto fail_tx;
963 /* If there is no more tx desc left free then we need to
964 * tell the kernel to stop sending us tx frames.
966 if (unlikely(!cpdma_check_free_tx_desc(priv->txchan)))
967 netif_stop_queue(ndev);
969 return NETDEV_TX_OK;
971 fail_tx:
972 ndev->stats.tx_dropped++;
973 netif_stop_queue(ndev);
974 return NETDEV_TX_BUSY;
978 * emac_dev_tx_timeout - EMAC Transmit timeout function
979 * @ndev: The DaVinci EMAC network adapter
981 * Called when system detects that a skb timeout period has expired
982 * potentially due to a fault in the adapter in not being able to send
983 * it out on the wire. We teardown the TX channel assuming a hardware
984 * error and re-initialize the TX channel for hardware operation
987 static void emac_dev_tx_timeout(struct net_device *ndev, unsigned int txqueue)
989 struct emac_priv *priv = netdev_priv(ndev);
990 struct device *emac_dev = &ndev->dev;
992 if (netif_msg_tx_err(priv))
993 dev_err(emac_dev, "DaVinci EMAC: xmit timeout, restarting TX");
995 ndev->stats.tx_errors++;
996 emac_int_disable(priv);
997 cpdma_chan_stop(priv->txchan);
998 cpdma_chan_start(priv->txchan);
999 emac_int_enable(priv);
1003 * emac_set_type0addr - Set EMAC Type0 mac address
1004 * @priv: The DaVinci EMAC private adapter structure
1005 * @ch: RX channel number
1006 * @mac_addr: MAC address to set in device
1008 * Called internally to set Type0 mac address of the adapter (Device)
1010 * Returns success (0) or appropriate error code (none as of now)
1012 static void emac_set_type0addr(struct emac_priv *priv, u32 ch, char *mac_addr)
1014 u32 val;
1015 val = ((mac_addr[5] << 8) | (mac_addr[4]));
1016 emac_write(EMAC_MACSRCADDRLO, val);
1018 val = ((mac_addr[3] << 24) | (mac_addr[2] << 16) | \
1019 (mac_addr[1] << 8) | (mac_addr[0]));
1020 emac_write(EMAC_MACSRCADDRHI, val);
1021 val = emac_read(EMAC_RXUNICASTSET);
1022 val |= BIT(ch);
1023 emac_write(EMAC_RXUNICASTSET, val);
1024 val = emac_read(EMAC_RXUNICASTCLEAR);
1025 val &= ~BIT(ch);
1026 emac_write(EMAC_RXUNICASTCLEAR, val);
1030 * emac_set_type1addr - Set EMAC Type1 mac address
1031 * @priv: The DaVinci EMAC private adapter structure
1032 * @ch: RX channel number
1033 * @mac_addr: MAC address to set in device
1035 * Called internally to set Type1 mac address of the adapter (Device)
1037 * Returns success (0) or appropriate error code (none as of now)
1039 static void emac_set_type1addr(struct emac_priv *priv, u32 ch, char *mac_addr)
1041 u32 val;
1042 emac_write(EMAC_MACINDEX, ch);
1043 val = ((mac_addr[5] << 8) | mac_addr[4]);
1044 emac_write(EMAC_MACADDRLO, val);
1045 val = ((mac_addr[3] << 24) | (mac_addr[2] << 16) | \
1046 (mac_addr[1] << 8) | (mac_addr[0]));
1047 emac_write(EMAC_MACADDRHI, val);
1048 emac_set_type0addr(priv, ch, mac_addr);
1052 * emac_set_type2addr - Set EMAC Type2 mac address
1053 * @priv: The DaVinci EMAC private adapter structure
1054 * @ch: RX channel number
1055 * @mac_addr: MAC address to set in device
1056 * @index: index into RX address entries
1057 * @match: match parameter for RX address matching logic
1059 * Called internally to set Type2 mac address of the adapter (Device)
1061 * Returns success (0) or appropriate error code (none as of now)
1063 static void emac_set_type2addr(struct emac_priv *priv, u32 ch,
1064 char *mac_addr, int index, int match)
1066 u32 val;
1067 emac_write(EMAC_MACINDEX, index);
1068 val = ((mac_addr[3] << 24) | (mac_addr[2] << 16) | \
1069 (mac_addr[1] << 8) | (mac_addr[0]));
1070 emac_write(EMAC_MACADDRHI, val);
1071 val = ((mac_addr[5] << 8) | mac_addr[4] | ((ch & 0x7) << 16) | \
1072 (match << 19) | BIT(20));
1073 emac_write(EMAC_MACADDRLO, val);
1074 emac_set_type0addr(priv, ch, mac_addr);
1078 * emac_setmac - Set mac address in the adapter (internal function)
1079 * @priv: The DaVinci EMAC private adapter structure
1080 * @ch: RX channel number
1081 * @mac_addr: MAC address to set in device
1083 * Called internally to set the mac address of the adapter (Device)
1085 * Returns success (0) or appropriate error code (none as of now)
1087 static void emac_setmac(struct emac_priv *priv, u32 ch, char *mac_addr)
1089 struct device *emac_dev = &priv->ndev->dev;
1091 if (priv->rx_addr_type == 0) {
1092 emac_set_type0addr(priv, ch, mac_addr);
1093 } else if (priv->rx_addr_type == 1) {
1094 u32 cnt;
1095 for (cnt = 0; cnt < EMAC_MAX_TXRX_CHANNELS; cnt++)
1096 emac_set_type1addr(priv, ch, mac_addr);
1097 } else if (priv->rx_addr_type == 2) {
1098 emac_set_type2addr(priv, ch, mac_addr, ch, 1);
1099 emac_set_type0addr(priv, ch, mac_addr);
1100 } else {
1101 if (netif_msg_drv(priv))
1102 dev_err(emac_dev, "DaVinci EMAC: Wrong addressing\n");
1107 * emac_dev_setmac_addr - Set mac address in the adapter
1108 * @ndev: The DaVinci EMAC network adapter
1109 * @addr: MAC address to set in device
1111 * Called by the system to set the mac address of the adapter (Device)
1113 * Returns success (0) or appropriate error code (none as of now)
1115 static int emac_dev_setmac_addr(struct net_device *ndev, void *addr)
1117 struct emac_priv *priv = netdev_priv(ndev);
1118 struct device *emac_dev = &priv->ndev->dev;
1119 struct sockaddr *sa = addr;
1121 if (!is_valid_ether_addr(sa->sa_data))
1122 return -EADDRNOTAVAIL;
1124 /* Store mac addr in priv and rx channel and set it in EMAC hw */
1125 memcpy(priv->mac_addr, sa->sa_data, ndev->addr_len);
1126 memcpy(ndev->dev_addr, sa->sa_data, ndev->addr_len);
1128 /* MAC address is configured only after the interface is enabled. */
1129 if (netif_running(ndev)) {
1130 emac_setmac(priv, EMAC_DEF_RX_CH, priv->mac_addr);
1133 if (netif_msg_drv(priv))
1134 dev_notice(emac_dev, "DaVinci EMAC: emac_dev_setmac_addr %pM\n",
1135 priv->mac_addr);
1137 return 0;
1141 * emac_hw_enable - Enable EMAC hardware for packet transmission/reception
1142 * @priv: The DaVinci EMAC private adapter structure
1144 * Enables EMAC hardware for packet processing - enables PHY, enables RX
1145 * for packet reception and enables device interrupts and then NAPI
1147 * Returns success (0) or appropriate error code (none right now)
1149 static int emac_hw_enable(struct emac_priv *priv)
1151 u32 val, mbp_enable, mac_control;
1153 /* Soft reset */
1154 emac_write(EMAC_SOFTRESET, 1);
1155 while (emac_read(EMAC_SOFTRESET))
1156 cpu_relax();
1158 /* Disable interrupt & Set pacing for more interrupts initially */
1159 emac_int_disable(priv);
1161 /* Full duplex enable bit set when auto negotiation happens */
1162 mac_control =
1163 (((EMAC_DEF_TXPRIO_FIXED) ? (EMAC_MACCONTROL_TXPTYPE) : 0x0) |
1164 ((priv->speed == 1000) ? EMAC_MACCONTROL_GIGABITEN : 0x0) |
1165 ((EMAC_DEF_TXPACING_EN) ? (EMAC_MACCONTROL_TXPACEEN) : 0x0) |
1166 ((priv->duplex == DUPLEX_FULL) ? 0x1 : 0));
1167 emac_write(EMAC_MACCONTROL, mac_control);
1169 mbp_enable =
1170 (((EMAC_DEF_PASS_CRC) ? (EMAC_RXMBP_PASSCRC_MASK) : 0x0) |
1171 ((EMAC_DEF_QOS_EN) ? (EMAC_RXMBP_QOSEN_MASK) : 0x0) |
1172 ((EMAC_DEF_NO_BUFF_CHAIN) ? (EMAC_RXMBP_NOCHAIN_MASK) : 0x0) |
1173 ((EMAC_DEF_MACCTRL_FRAME_EN) ? (EMAC_RXMBP_CMFEN_MASK) : 0x0) |
1174 ((EMAC_DEF_SHORT_FRAME_EN) ? (EMAC_RXMBP_CSFEN_MASK) : 0x0) |
1175 ((EMAC_DEF_ERROR_FRAME_EN) ? (EMAC_RXMBP_CEFEN_MASK) : 0x0) |
1176 ((EMAC_DEF_PROM_EN) ? (EMAC_RXMBP_CAFEN_MASK) : 0x0) |
1177 ((EMAC_DEF_PROM_CH & EMAC_RXMBP_CHMASK) << \
1178 EMAC_RXMBP_PROMCH_SHIFT) |
1179 ((EMAC_DEF_BCAST_EN) ? (EMAC_RXMBP_BROADEN_MASK) : 0x0) |
1180 ((EMAC_DEF_BCAST_CH & EMAC_RXMBP_CHMASK) << \
1181 EMAC_RXMBP_BROADCH_SHIFT) |
1182 ((EMAC_DEF_MCAST_EN) ? (EMAC_RXMBP_MULTIEN_MASK) : 0x0) |
1183 ((EMAC_DEF_MCAST_CH & EMAC_RXMBP_CHMASK) << \
1184 EMAC_RXMBP_MULTICH_SHIFT));
1185 emac_write(EMAC_RXMBPENABLE, mbp_enable);
1186 emac_write(EMAC_RXMAXLEN, (EMAC_DEF_MAX_FRAME_SIZE &
1187 EMAC_RX_MAX_LEN_MASK));
1188 emac_write(EMAC_RXBUFFEROFFSET, (EMAC_DEF_BUFFER_OFFSET &
1189 EMAC_RX_BUFFER_OFFSET_MASK));
1190 emac_write(EMAC_RXFILTERLOWTHRESH, 0);
1191 emac_write(EMAC_RXUNICASTCLEAR, EMAC_RX_UNICAST_CLEAR_ALL);
1192 priv->rx_addr_type = (emac_read(EMAC_MACCONFIG) >> 8) & 0xFF;
1194 emac_write(EMAC_MACINTMASKSET, EMAC_MAC_HOST_ERR_INTMASK_VAL);
1196 emac_setmac(priv, EMAC_DEF_RX_CH, priv->mac_addr);
1198 /* Enable MII */
1199 val = emac_read(EMAC_MACCONTROL);
1200 val |= (EMAC_MACCONTROL_GMIIEN);
1201 emac_write(EMAC_MACCONTROL, val);
1203 /* Enable NAPI and interrupts */
1204 napi_enable(&priv->napi);
1205 emac_int_enable(priv);
1206 return 0;
1211 * emac_poll - EMAC NAPI Poll function
1212 * @ndev: The DaVinci EMAC network adapter
1213 * @budget: Number of receive packets to process (as told by NAPI layer)
1215 * NAPI Poll function implemented to process packets as per budget. We check
1216 * the type of interrupt on the device and accordingly call the TX or RX
1217 * packet processing functions. We follow the budget for RX processing and
1218 * also put a cap on number of TX pkts processed through config param. The
1219 * NAPI schedule function is called if more packets pending.
1221 * Returns number of packets received (in most cases; else TX pkts - rarely)
1223 static int emac_poll(struct napi_struct *napi, int budget)
1225 unsigned int mask;
1226 struct emac_priv *priv = container_of(napi, struct emac_priv, napi);
1227 struct net_device *ndev = priv->ndev;
1228 struct device *emac_dev = &ndev->dev;
1229 u32 status = 0;
1230 u32 num_tx_pkts = 0, num_rx_pkts = 0;
1232 /* Check interrupt vectors and call packet processing */
1233 status = emac_read(EMAC_MACINVECTOR);
1235 mask = EMAC_DM644X_MAC_IN_VECTOR_TX_INT_VEC;
1237 if (priv->version == EMAC_VERSION_2)
1238 mask = EMAC_DM646X_MAC_IN_VECTOR_TX_INT_VEC;
1240 if (status & mask) {
1241 num_tx_pkts = cpdma_chan_process(priv->txchan,
1242 EMAC_DEF_TX_MAX_SERVICE);
1243 } /* TX processing */
1245 mask = EMAC_DM644X_MAC_IN_VECTOR_RX_INT_VEC;
1247 if (priv->version == EMAC_VERSION_2)
1248 mask = EMAC_DM646X_MAC_IN_VECTOR_RX_INT_VEC;
1250 if (status & mask) {
1251 num_rx_pkts = cpdma_chan_process(priv->rxchan, budget);
1252 } /* RX processing */
1254 mask = EMAC_DM644X_MAC_IN_VECTOR_HOST_INT;
1255 if (priv->version == EMAC_VERSION_2)
1256 mask = EMAC_DM646X_MAC_IN_VECTOR_HOST_INT;
1258 if (unlikely(status & mask)) {
1259 u32 ch, cause;
1260 dev_err(emac_dev, "DaVinci EMAC: Fatal Hardware Error\n");
1261 netif_stop_queue(ndev);
1262 napi_disable(&priv->napi);
1264 status = emac_read(EMAC_MACSTATUS);
1265 cause = ((status & EMAC_MACSTATUS_TXERRCODE_MASK) >>
1266 EMAC_MACSTATUS_TXERRCODE_SHIFT);
1267 if (cause) {
1268 ch = ((status & EMAC_MACSTATUS_TXERRCH_MASK) >>
1269 EMAC_MACSTATUS_TXERRCH_SHIFT);
1270 if (net_ratelimit()) {
1271 dev_err(emac_dev, "TX Host error %s on ch=%d\n",
1272 &emac_txhost_errcodes[cause][0], ch);
1275 cause = ((status & EMAC_MACSTATUS_RXERRCODE_MASK) >>
1276 EMAC_MACSTATUS_RXERRCODE_SHIFT);
1277 if (cause) {
1278 ch = ((status & EMAC_MACSTATUS_RXERRCH_MASK) >>
1279 EMAC_MACSTATUS_RXERRCH_SHIFT);
1280 if (netif_msg_hw(priv) && net_ratelimit())
1281 dev_err(emac_dev, "RX Host error %s on ch=%d\n",
1282 &emac_rxhost_errcodes[cause][0], ch);
1284 } else if (num_rx_pkts < budget) {
1285 napi_complete_done(napi, num_rx_pkts);
1286 emac_int_enable(priv);
1289 return num_rx_pkts;
1292 #ifdef CONFIG_NET_POLL_CONTROLLER
1294 * emac_poll_controller - EMAC Poll controller function
1295 * @ndev: The DaVinci EMAC network adapter
1297 * Polled functionality used by netconsole and others in non interrupt mode
1300 static void emac_poll_controller(struct net_device *ndev)
1302 struct emac_priv *priv = netdev_priv(ndev);
1304 emac_int_disable(priv);
1305 emac_irq(ndev->irq, ndev);
1306 emac_int_enable(priv);
1308 #endif
1310 static void emac_adjust_link(struct net_device *ndev)
1312 struct emac_priv *priv = netdev_priv(ndev);
1313 struct phy_device *phydev = ndev->phydev;
1314 unsigned long flags;
1315 int new_state = 0;
1317 spin_lock_irqsave(&priv->lock, flags);
1319 if (phydev->link) {
1320 /* check the mode of operation - full/half duplex */
1321 if (phydev->duplex != priv->duplex) {
1322 new_state = 1;
1323 priv->duplex = phydev->duplex;
1325 if (phydev->speed != priv->speed) {
1326 new_state = 1;
1327 priv->speed = phydev->speed;
1329 if (!priv->link) {
1330 new_state = 1;
1331 priv->link = 1;
1334 } else if (priv->link) {
1335 new_state = 1;
1336 priv->link = 0;
1337 priv->speed = 0;
1338 priv->duplex = ~0;
1340 if (new_state) {
1341 emac_update_phystatus(priv);
1342 phy_print_status(ndev->phydev);
1345 spin_unlock_irqrestore(&priv->lock, flags);
1348 /*************************************************************************
1349 * Linux Driver Model
1350 *************************************************************************/
1353 * emac_devioctl - EMAC adapter ioctl
1354 * @ndev: The DaVinci EMAC network adapter
1355 * @ifrq: request parameter
1356 * @cmd: command parameter
1358 * EMAC driver ioctl function
1360 * Returns success(0) or appropriate error code
1362 static int emac_devioctl(struct net_device *ndev, struct ifreq *ifrq, int cmd)
1364 if (!(netif_running(ndev)))
1365 return -EINVAL;
1367 /* TODO: Add phy read and write and private statistics get feature */
1369 if (ndev->phydev)
1370 return phy_mii_ioctl(ndev->phydev, ifrq, cmd);
1371 else
1372 return -EOPNOTSUPP;
1375 static int match_first_device(struct device *dev, const void *data)
1377 if (dev->parent && dev->parent->of_node)
1378 return of_device_is_compatible(dev->parent->of_node,
1379 "ti,davinci_mdio");
1381 return !strncmp(dev_name(dev), "davinci_mdio", 12);
1385 * emac_dev_open - EMAC device open
1386 * @ndev: The DaVinci EMAC network adapter
1388 * Called when system wants to start the interface. We init TX/RX channels
1389 * and enable the hardware for packet reception/transmission and start the
1390 * network queue.
1392 * Returns 0 for a successful open, or appropriate error code
1394 static int emac_dev_open(struct net_device *ndev)
1396 struct device *emac_dev = &ndev->dev;
1397 u32 cnt;
1398 struct resource *res;
1399 int q, m, ret;
1400 int res_num = 0, irq_num = 0;
1401 int i = 0;
1402 struct emac_priv *priv = netdev_priv(ndev);
1403 struct phy_device *phydev = NULL;
1404 struct device *phy = NULL;
1406 ret = pm_runtime_get_sync(&priv->pdev->dev);
1407 if (ret < 0) {
1408 pm_runtime_put_noidle(&priv->pdev->dev);
1409 dev_err(&priv->pdev->dev, "%s: failed to get_sync(%d)\n",
1410 __func__, ret);
1411 return ret;
1414 netif_carrier_off(ndev);
1415 for (cnt = 0; cnt < ETH_ALEN; cnt++)
1416 ndev->dev_addr[cnt] = priv->mac_addr[cnt];
1418 /* Configuration items */
1419 priv->rx_buf_size = EMAC_DEF_MAX_FRAME_SIZE + NET_IP_ALIGN;
1421 priv->mac_hash1 = 0;
1422 priv->mac_hash2 = 0;
1423 emac_write(EMAC_MACHASH1, 0);
1424 emac_write(EMAC_MACHASH2, 0);
1426 for (i = 0; i < EMAC_DEF_RX_NUM_DESC; i++) {
1427 struct sk_buff *skb = emac_rx_alloc(priv);
1429 if (!skb)
1430 break;
1432 ret = cpdma_chan_idle_submit(priv->rxchan, skb, skb->data,
1433 skb_tailroom(skb), 0);
1434 if (WARN_ON(ret < 0))
1435 break;
1438 /* Request IRQ */
1439 while ((res = platform_get_resource(priv->pdev, IORESOURCE_IRQ,
1440 res_num))) {
1441 for (irq_num = res->start; irq_num <= res->end; irq_num++) {
1442 if (request_irq(irq_num, emac_irq, 0, ndev->name,
1443 ndev)) {
1444 dev_err(emac_dev,
1445 "DaVinci EMAC: request_irq() failed\n");
1446 ret = -EBUSY;
1448 goto rollback;
1451 res_num++;
1453 /* prepare counters for rollback in case of an error */
1454 res_num--;
1455 irq_num--;
1457 /* Start/Enable EMAC hardware */
1458 emac_hw_enable(priv);
1460 /* Enable Interrupt pacing if configured */
1461 if (priv->coal_intvl != 0) {
1462 struct ethtool_coalesce coal;
1464 coal.rx_coalesce_usecs = (priv->coal_intvl << 4);
1465 emac_set_coalesce(ndev, &coal);
1468 cpdma_ctlr_start(priv->dma);
1470 if (priv->phy_node) {
1471 phydev = of_phy_connect(ndev, priv->phy_node,
1472 &emac_adjust_link, 0, 0);
1473 if (!phydev) {
1474 dev_err(emac_dev, "could not connect to phy %pOF\n",
1475 priv->phy_node);
1476 ret = -ENODEV;
1477 goto err;
1481 /* use the first phy on the bus if pdata did not give us a phy id */
1482 if (!phydev && !priv->phy_id) {
1483 /* NOTE: we can't use bus_find_device_by_name() here because
1484 * the device name is not guaranteed to be 'davinci_mdio'. On
1485 * some systems it can be 'davinci_mdio.0' so we need to use
1486 * strncmp() against the first part of the string to correctly
1487 * match it.
1489 phy = bus_find_device(&mdio_bus_type, NULL, NULL,
1490 match_first_device);
1491 if (phy) {
1492 priv->phy_id = dev_name(phy);
1493 if (!priv->phy_id || !*priv->phy_id)
1494 put_device(phy);
1498 if (!phydev && priv->phy_id && *priv->phy_id) {
1499 phydev = phy_connect(ndev, priv->phy_id,
1500 &emac_adjust_link,
1501 PHY_INTERFACE_MODE_MII);
1502 put_device(phy); /* reference taken by bus_find_device */
1503 if (IS_ERR(phydev)) {
1504 dev_err(emac_dev, "could not connect to phy %s\n",
1505 priv->phy_id);
1506 ret = PTR_ERR(phydev);
1507 goto err;
1510 priv->link = 0;
1511 priv->speed = 0;
1512 priv->duplex = ~0;
1514 phy_attached_info(phydev);
1517 if (!phydev) {
1518 /* No PHY , fix the link, speed and duplex settings */
1519 dev_notice(emac_dev, "no phy, defaulting to 100/full\n");
1520 priv->link = 1;
1521 priv->speed = SPEED_100;
1522 priv->duplex = DUPLEX_FULL;
1523 emac_update_phystatus(priv);
1526 if (netif_msg_drv(priv))
1527 dev_notice(emac_dev, "DaVinci EMAC: Opened %s\n", ndev->name);
1529 if (phydev)
1530 phy_start(phydev);
1532 return 0;
1534 err:
1535 emac_int_disable(priv);
1536 napi_disable(&priv->napi);
1538 rollback:
1539 for (q = res_num; q >= 0; q--) {
1540 res = platform_get_resource(priv->pdev, IORESOURCE_IRQ, q);
1541 /* at the first iteration, irq_num is already set to the
1542 * right value
1544 if (q != res_num)
1545 irq_num = res->end;
1547 for (m = irq_num; m >= res->start; m--)
1548 free_irq(m, ndev);
1550 cpdma_ctlr_stop(priv->dma);
1551 pm_runtime_put(&priv->pdev->dev);
1552 return ret;
1556 * emac_dev_stop - EMAC device stop
1557 * @ndev: The DaVinci EMAC network adapter
1559 * Called when system wants to stop or down the interface. We stop the network
1560 * queue, disable interrupts and cleanup TX/RX channels.
1562 * We return the statistics in net_device_stats structure pulled from emac
1564 static int emac_dev_stop(struct net_device *ndev)
1566 struct resource *res;
1567 int i = 0;
1568 int irq_num;
1569 struct emac_priv *priv = netdev_priv(ndev);
1570 struct device *emac_dev = &ndev->dev;
1572 /* inform the upper layers. */
1573 netif_stop_queue(ndev);
1574 napi_disable(&priv->napi);
1576 netif_carrier_off(ndev);
1577 emac_int_disable(priv);
1578 cpdma_ctlr_stop(priv->dma);
1579 emac_write(EMAC_SOFTRESET, 1);
1581 if (ndev->phydev)
1582 phy_disconnect(ndev->phydev);
1584 /* Free IRQ */
1585 while ((res = platform_get_resource(priv->pdev, IORESOURCE_IRQ, i))) {
1586 for (irq_num = res->start; irq_num <= res->end; irq_num++)
1587 free_irq(irq_num, priv->ndev);
1588 i++;
1591 if (netif_msg_drv(priv))
1592 dev_notice(emac_dev, "DaVinci EMAC: %s stopped\n", ndev->name);
1594 pm_runtime_put(&priv->pdev->dev);
1595 return 0;
1599 * emac_dev_getnetstats - EMAC get statistics function
1600 * @ndev: The DaVinci EMAC network adapter
1602 * Called when system wants to get statistics from the device.
1604 * We return the statistics in net_device_stats structure pulled from emac
1606 static struct net_device_stats *emac_dev_getnetstats(struct net_device *ndev)
1608 struct emac_priv *priv = netdev_priv(ndev);
1609 u32 mac_control;
1610 u32 stats_clear_mask;
1611 int err;
1613 err = pm_runtime_get_sync(&priv->pdev->dev);
1614 if (err < 0) {
1615 pm_runtime_put_noidle(&priv->pdev->dev);
1616 dev_err(&priv->pdev->dev, "%s: failed to get_sync(%d)\n",
1617 __func__, err);
1618 return &ndev->stats;
1621 /* update emac hardware stats and reset the registers*/
1623 mac_control = emac_read(EMAC_MACCONTROL);
1625 if (mac_control & EMAC_MACCONTROL_GMIIEN)
1626 stats_clear_mask = EMAC_STATS_CLR_MASK;
1627 else
1628 stats_clear_mask = 0;
1630 ndev->stats.multicast += emac_read(EMAC_RXMCASTFRAMES);
1631 emac_write(EMAC_RXMCASTFRAMES, stats_clear_mask);
1633 ndev->stats.collisions += (emac_read(EMAC_TXCOLLISION) +
1634 emac_read(EMAC_TXSINGLECOLL) +
1635 emac_read(EMAC_TXMULTICOLL));
1636 emac_write(EMAC_TXCOLLISION, stats_clear_mask);
1637 emac_write(EMAC_TXSINGLECOLL, stats_clear_mask);
1638 emac_write(EMAC_TXMULTICOLL, stats_clear_mask);
1640 ndev->stats.rx_length_errors += (emac_read(EMAC_RXOVERSIZED) +
1641 emac_read(EMAC_RXJABBER) +
1642 emac_read(EMAC_RXUNDERSIZED));
1643 emac_write(EMAC_RXOVERSIZED, stats_clear_mask);
1644 emac_write(EMAC_RXJABBER, stats_clear_mask);
1645 emac_write(EMAC_RXUNDERSIZED, stats_clear_mask);
1647 ndev->stats.rx_over_errors += (emac_read(EMAC_RXSOFOVERRUNS) +
1648 emac_read(EMAC_RXMOFOVERRUNS));
1649 emac_write(EMAC_RXSOFOVERRUNS, stats_clear_mask);
1650 emac_write(EMAC_RXMOFOVERRUNS, stats_clear_mask);
1652 ndev->stats.rx_fifo_errors += emac_read(EMAC_RXDMAOVERRUNS);
1653 emac_write(EMAC_RXDMAOVERRUNS, stats_clear_mask);
1655 ndev->stats.tx_carrier_errors +=
1656 emac_read(EMAC_TXCARRIERSENSE);
1657 emac_write(EMAC_TXCARRIERSENSE, stats_clear_mask);
1659 ndev->stats.tx_fifo_errors += emac_read(EMAC_TXUNDERRUN);
1660 emac_write(EMAC_TXUNDERRUN, stats_clear_mask);
1662 pm_runtime_put(&priv->pdev->dev);
1664 return &ndev->stats;
1667 static const struct net_device_ops emac_netdev_ops = {
1668 .ndo_open = emac_dev_open,
1669 .ndo_stop = emac_dev_stop,
1670 .ndo_start_xmit = emac_dev_xmit,
1671 .ndo_set_rx_mode = emac_dev_mcast_set,
1672 .ndo_set_mac_address = emac_dev_setmac_addr,
1673 .ndo_do_ioctl = emac_devioctl,
1674 .ndo_tx_timeout = emac_dev_tx_timeout,
1675 .ndo_get_stats = emac_dev_getnetstats,
1676 #ifdef CONFIG_NET_POLL_CONTROLLER
1677 .ndo_poll_controller = emac_poll_controller,
1678 #endif
1681 static const struct of_device_id davinci_emac_of_match[];
1683 static struct emac_platform_data *
1684 davinci_emac_of_get_pdata(struct platform_device *pdev, struct emac_priv *priv)
1686 struct device_node *np;
1687 const struct of_device_id *match;
1688 const struct emac_platform_data *auxdata;
1689 struct emac_platform_data *pdata = NULL;
1690 const u8 *mac_addr;
1692 if (!IS_ENABLED(CONFIG_OF) || !pdev->dev.of_node)
1693 return dev_get_platdata(&pdev->dev);
1695 pdata = devm_kzalloc(&pdev->dev, sizeof(*pdata), GFP_KERNEL);
1696 if (!pdata)
1697 return NULL;
1699 np = pdev->dev.of_node;
1700 pdata->version = EMAC_VERSION_2;
1702 if (!is_valid_ether_addr(pdata->mac_addr)) {
1703 mac_addr = of_get_mac_address(np);
1704 if (!IS_ERR(mac_addr))
1705 ether_addr_copy(pdata->mac_addr, mac_addr);
1708 of_property_read_u32(np, "ti,davinci-ctrl-reg-offset",
1709 &pdata->ctrl_reg_offset);
1711 of_property_read_u32(np, "ti,davinci-ctrl-mod-reg-offset",
1712 &pdata->ctrl_mod_reg_offset);
1714 of_property_read_u32(np, "ti,davinci-ctrl-ram-offset",
1715 &pdata->ctrl_ram_offset);
1717 of_property_read_u32(np, "ti,davinci-ctrl-ram-size",
1718 &pdata->ctrl_ram_size);
1720 of_property_read_u8(np, "ti,davinci-rmii-en", &pdata->rmii_en);
1722 pdata->no_bd_ram = of_property_read_bool(np, "ti,davinci-no-bd-ram");
1724 priv->phy_node = of_parse_phandle(np, "phy-handle", 0);
1725 if (!priv->phy_node) {
1726 if (!of_phy_is_fixed_link(np))
1727 pdata->phy_id = NULL;
1728 else if (of_phy_register_fixed_link(np) >= 0)
1729 priv->phy_node = of_node_get(np);
1732 auxdata = pdev->dev.platform_data;
1733 if (auxdata) {
1734 pdata->interrupt_enable = auxdata->interrupt_enable;
1735 pdata->interrupt_disable = auxdata->interrupt_disable;
1738 match = of_match_device(davinci_emac_of_match, &pdev->dev);
1739 if (match && match->data) {
1740 auxdata = match->data;
1741 pdata->version = auxdata->version;
1742 pdata->hw_ram_addr = auxdata->hw_ram_addr;
1745 return pdata;
1748 static int davinci_emac_try_get_mac(struct platform_device *pdev,
1749 int instance, u8 *mac_addr)
1751 if (!pdev->dev.of_node)
1752 return -EINVAL;
1754 return ti_cm_get_macid(&pdev->dev, instance, mac_addr);
1758 * davinci_emac_probe - EMAC device probe
1759 * @pdev: The DaVinci EMAC device that we are removing
1761 * Called when probing for emac devicesr. We get details of instances and
1762 * resource information from platform init and register a network device
1763 * and allocate resources necessary for driver to perform
1765 static int davinci_emac_probe(struct platform_device *pdev)
1767 struct device_node *np = pdev->dev.of_node;
1768 int rc = 0;
1769 struct resource *res, *res_ctrl;
1770 struct net_device *ndev;
1771 struct emac_priv *priv;
1772 unsigned long hw_ram_addr;
1773 struct emac_platform_data *pdata;
1774 struct cpdma_params dma_params;
1775 struct clk *emac_clk;
1776 unsigned long emac_bus_frequency;
1779 /* obtain emac clock from kernel */
1780 emac_clk = devm_clk_get(&pdev->dev, NULL);
1781 if (IS_ERR(emac_clk)) {
1782 dev_err(&pdev->dev, "failed to get EMAC clock\n");
1783 return -EBUSY;
1785 emac_bus_frequency = clk_get_rate(emac_clk);
1786 devm_clk_put(&pdev->dev, emac_clk);
1788 /* TODO: Probe PHY here if possible */
1790 ndev = alloc_etherdev(sizeof(struct emac_priv));
1791 if (!ndev)
1792 return -ENOMEM;
1794 platform_set_drvdata(pdev, ndev);
1795 priv = netdev_priv(ndev);
1796 priv->pdev = pdev;
1797 priv->ndev = ndev;
1798 priv->msg_enable = netif_msg_init(debug_level, DAVINCI_EMAC_DEBUG);
1800 spin_lock_init(&priv->lock);
1802 pdata = davinci_emac_of_get_pdata(pdev, priv);
1803 if (!pdata) {
1804 dev_err(&pdev->dev, "no platform data\n");
1805 rc = -ENODEV;
1806 goto err_free_netdev;
1809 /* MAC addr and PHY mask , RMII enable info from platform_data */
1810 memcpy(priv->mac_addr, pdata->mac_addr, ETH_ALEN);
1811 priv->phy_id = pdata->phy_id;
1812 priv->rmii_en = pdata->rmii_en;
1813 priv->version = pdata->version;
1814 priv->int_enable = pdata->interrupt_enable;
1815 priv->int_disable = pdata->interrupt_disable;
1817 priv->coal_intvl = 0;
1818 priv->bus_freq_mhz = (u32)(emac_bus_frequency / 1000000);
1820 /* Get EMAC platform data */
1821 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1822 priv->emac_base_phys = res->start + pdata->ctrl_reg_offset;
1823 priv->remap_addr = devm_ioremap_resource(&pdev->dev, res);
1824 if (IS_ERR(priv->remap_addr)) {
1825 rc = PTR_ERR(priv->remap_addr);
1826 goto no_pdata;
1829 res_ctrl = platform_get_resource(pdev, IORESOURCE_MEM, 1);
1830 if (res_ctrl) {
1831 priv->ctrl_base =
1832 devm_ioremap_resource(&pdev->dev, res_ctrl);
1833 if (IS_ERR(priv->ctrl_base)) {
1834 rc = PTR_ERR(priv->ctrl_base);
1835 goto no_pdata;
1837 } else {
1838 priv->ctrl_base = priv->remap_addr + pdata->ctrl_mod_reg_offset;
1841 priv->emac_base = priv->remap_addr + pdata->ctrl_reg_offset;
1842 ndev->base_addr = (unsigned long)priv->remap_addr;
1844 hw_ram_addr = pdata->hw_ram_addr;
1845 if (!hw_ram_addr)
1846 hw_ram_addr = (u32 __force)res->start + pdata->ctrl_ram_offset;
1848 memset(&dma_params, 0, sizeof(dma_params));
1849 dma_params.dev = &pdev->dev;
1850 dma_params.dmaregs = priv->emac_base;
1851 dma_params.rxthresh = priv->emac_base + 0x120;
1852 dma_params.rxfree = priv->emac_base + 0x140;
1853 dma_params.txhdp = priv->emac_base + 0x600;
1854 dma_params.rxhdp = priv->emac_base + 0x620;
1855 dma_params.txcp = priv->emac_base + 0x640;
1856 dma_params.rxcp = priv->emac_base + 0x660;
1857 dma_params.num_chan = EMAC_MAX_TXRX_CHANNELS;
1858 dma_params.min_packet_size = EMAC_DEF_MIN_ETHPKTSIZE;
1859 dma_params.desc_hw_addr = hw_ram_addr;
1860 dma_params.desc_mem_size = pdata->ctrl_ram_size;
1861 dma_params.desc_align = 16;
1863 dma_params.desc_mem_phys = pdata->no_bd_ram ? 0 :
1864 (u32 __force)res->start + pdata->ctrl_ram_offset;
1866 priv->dma = cpdma_ctlr_create(&dma_params);
1867 if (!priv->dma) {
1868 dev_err(&pdev->dev, "error initializing DMA\n");
1869 rc = -ENOMEM;
1870 goto no_pdata;
1873 priv->txchan = cpdma_chan_create(priv->dma, EMAC_DEF_TX_CH,
1874 emac_tx_handler, 0);
1875 if (IS_ERR(priv->txchan)) {
1876 dev_err(&pdev->dev, "error initializing tx dma channel\n");
1877 rc = PTR_ERR(priv->txchan);
1878 goto err_free_dma;
1881 priv->rxchan = cpdma_chan_create(priv->dma, EMAC_DEF_RX_CH,
1882 emac_rx_handler, 1);
1883 if (IS_ERR(priv->rxchan)) {
1884 dev_err(&pdev->dev, "error initializing rx dma channel\n");
1885 rc = PTR_ERR(priv->rxchan);
1886 goto err_free_txchan;
1889 res = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
1890 if (!res) {
1891 dev_err(&pdev->dev, "error getting irq res\n");
1892 rc = -ENOENT;
1893 goto err_free_rxchan;
1895 ndev->irq = res->start;
1897 rc = davinci_emac_try_get_mac(pdev, res_ctrl ? 0 : 1, priv->mac_addr);
1898 if (!rc)
1899 ether_addr_copy(ndev->dev_addr, priv->mac_addr);
1901 if (!is_valid_ether_addr(priv->mac_addr)) {
1902 /* Use random MAC if still none obtained. */
1903 eth_hw_addr_random(ndev);
1904 memcpy(priv->mac_addr, ndev->dev_addr, ndev->addr_len);
1905 dev_warn(&pdev->dev, "using random MAC addr: %pM\n",
1906 priv->mac_addr);
1909 ndev->netdev_ops = &emac_netdev_ops;
1910 ndev->ethtool_ops = &ethtool_ops;
1911 netif_napi_add(ndev, &priv->napi, emac_poll, EMAC_POLL_WEIGHT);
1913 pm_runtime_enable(&pdev->dev);
1914 rc = pm_runtime_get_sync(&pdev->dev);
1915 if (rc < 0) {
1916 pm_runtime_put_noidle(&pdev->dev);
1917 dev_err(&pdev->dev, "%s: failed to get_sync(%d)\n",
1918 __func__, rc);
1919 goto err_napi_del;
1922 /* register the network device */
1923 SET_NETDEV_DEV(ndev, &pdev->dev);
1924 rc = register_netdev(ndev);
1925 if (rc) {
1926 dev_err(&pdev->dev, "error in register_netdev\n");
1927 rc = -ENODEV;
1928 pm_runtime_put(&pdev->dev);
1929 goto err_napi_del;
1933 if (netif_msg_probe(priv)) {
1934 dev_notice(&pdev->dev, "DaVinci EMAC Probe found device "
1935 "(regs: %pa, irq: %d)\n",
1936 &priv->emac_base_phys, ndev->irq);
1938 pm_runtime_put(&pdev->dev);
1940 return 0;
1942 err_napi_del:
1943 netif_napi_del(&priv->napi);
1944 err_free_rxchan:
1945 cpdma_chan_destroy(priv->rxchan);
1946 err_free_txchan:
1947 cpdma_chan_destroy(priv->txchan);
1948 err_free_dma:
1949 cpdma_ctlr_destroy(priv->dma);
1950 no_pdata:
1951 if (of_phy_is_fixed_link(np))
1952 of_phy_deregister_fixed_link(np);
1953 of_node_put(priv->phy_node);
1954 err_free_netdev:
1955 free_netdev(ndev);
1956 return rc;
1960 * davinci_emac_remove - EMAC device remove
1961 * @pdev: The DaVinci EMAC device that we are removing
1963 * Called when removing the device driver. We disable clock usage and release
1964 * the resources taken up by the driver and unregister network device
1966 static int davinci_emac_remove(struct platform_device *pdev)
1968 struct net_device *ndev = platform_get_drvdata(pdev);
1969 struct emac_priv *priv = netdev_priv(ndev);
1970 struct device_node *np = pdev->dev.of_node;
1972 dev_notice(&ndev->dev, "DaVinci EMAC: davinci_emac_remove()\n");
1974 if (priv->txchan)
1975 cpdma_chan_destroy(priv->txchan);
1976 if (priv->rxchan)
1977 cpdma_chan_destroy(priv->rxchan);
1978 cpdma_ctlr_destroy(priv->dma);
1980 unregister_netdev(ndev);
1981 of_node_put(priv->phy_node);
1982 pm_runtime_disable(&pdev->dev);
1983 if (of_phy_is_fixed_link(np))
1984 of_phy_deregister_fixed_link(np);
1985 free_netdev(ndev);
1987 return 0;
1990 static int davinci_emac_suspend(struct device *dev)
1992 struct net_device *ndev = dev_get_drvdata(dev);
1994 if (netif_running(ndev))
1995 emac_dev_stop(ndev);
1997 return 0;
2000 static int davinci_emac_resume(struct device *dev)
2002 struct net_device *ndev = dev_get_drvdata(dev);
2004 if (netif_running(ndev))
2005 emac_dev_open(ndev);
2007 return 0;
2010 static const struct dev_pm_ops davinci_emac_pm_ops = {
2011 .suspend = davinci_emac_suspend,
2012 .resume = davinci_emac_resume,
2015 static const struct emac_platform_data am3517_emac_data = {
2016 .version = EMAC_VERSION_2,
2017 .hw_ram_addr = 0x01e20000,
2020 static const struct emac_platform_data dm816_emac_data = {
2021 .version = EMAC_VERSION_2,
2024 static const struct of_device_id davinci_emac_of_match[] = {
2025 {.compatible = "ti,davinci-dm6467-emac", },
2026 {.compatible = "ti,am3517-emac", .data = &am3517_emac_data, },
2027 {.compatible = "ti,dm816-emac", .data = &dm816_emac_data, },
2030 MODULE_DEVICE_TABLE(of, davinci_emac_of_match);
2032 /* davinci_emac_driver: EMAC platform driver structure */
2033 static struct platform_driver davinci_emac_driver = {
2034 .driver = {
2035 .name = "davinci_emac",
2036 .pm = &davinci_emac_pm_ops,
2037 .of_match_table = davinci_emac_of_match,
2039 .probe = davinci_emac_probe,
2040 .remove = davinci_emac_remove,
2044 * davinci_emac_init - EMAC driver module init
2046 * Called when initializing the driver. We register the driver with
2047 * the platform.
2049 static int __init davinci_emac_init(void)
2051 return platform_driver_register(&davinci_emac_driver);
2053 late_initcall(davinci_emac_init);
2056 * davinci_emac_exit - EMAC driver module exit
2058 * Called when exiting the driver completely. We unregister the driver with
2059 * the platform and exit
2061 static void __exit davinci_emac_exit(void)
2063 platform_driver_unregister(&davinci_emac_driver);
2065 module_exit(davinci_emac_exit);
2067 MODULE_LICENSE("GPL");
2068 MODULE_AUTHOR("DaVinci EMAC Maintainer: Anant Gole <anantgole@ti.com>");
2069 MODULE_AUTHOR("DaVinci EMAC Maintainer: Chaithrika U S <chaithrika@ti.com>");
2070 MODULE_DESCRIPTION("DaVinci EMAC Ethernet driver");