This source file includes following definitions.
- emac_get_drvinfo
- emac_get_coalesce
- emac_set_coalesce
- emac_update_phystatus
- hash_get
- emac_hash_add
- emac_hash_del
- emac_add_mcast
- emac_dev_mcast_set
- emac_int_disable
- emac_int_enable
- emac_irq
- emac_rx_alloc
- emac_rx_handler
- emac_tx_handler
- emac_dev_xmit
- emac_dev_tx_timeout
- emac_set_type0addr
- emac_set_type1addr
- emac_set_type2addr
- emac_setmac
- emac_dev_setmac_addr
- emac_hw_enable
- emac_poll
- emac_poll_controller
- emac_adjust_link
- emac_devioctl
- match_first_device
- emac_dev_open
- emac_dev_stop
- emac_dev_getnetstats
- davinci_emac_of_get_pdata
- davinci_emac_try_get_mac
- davinci_emac_probe
- davinci_emac_remove
- davinci_emac_suspend
- davinci_emac_resume
- davinci_emac_init
- davinci_emac_exit
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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>
56
57 #include <asm/irq.h>
58 #include <asm/page.h>
59
60 #include "cpsw.h"
61 #include "davinci_cpdma.h"
62
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)");
66
67
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)
83
84
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";
90
91
92 #define EMAC_DEF_PASS_CRC (0)
93 #define EMAC_DEF_QOS_EN (0)
94 #define EMAC_DEF_NO_BUFF_CHAIN (0)
95 #define EMAC_DEF_MACCTRL_FRAME_EN (0)
96 #define EMAC_DEF_SHORT_FRAME_EN (0)
97 #define EMAC_DEF_ERROR_FRAME_EN (0)
98 #define EMAC_DEF_PROM_EN (0)
99 #define EMAC_DEF_PROM_CH (0)
100 #define EMAC_DEF_BCAST_EN (1)
101 #define EMAC_DEF_BCAST_CH (0)
102 #define EMAC_DEF_MCAST_EN (1)
103 #define EMAC_DEF_MCAST_CH (0)
104
105 #define EMAC_DEF_TXPRIO_FIXED (1)
106 #define EMAC_DEF_TXPACING_EN (0)
107
108 #define EMAC_DEF_BUFFER_OFFSET (0)
109 #define EMAC_DEF_MIN_ETHPKTSIZE (60)
110 #define EMAC_DEF_MAX_FRAME_SIZE (1500 + 14 + 4 + 4)
111 #define EMAC_DEF_TX_CH (0)
112 #define EMAC_DEF_RX_CH (0)
113 #define EMAC_DEF_RX_NUM_DESC (128)
114 #define EMAC_DEF_MAX_TX_CH (1)
115 #define EMAC_DEF_MAX_RX_CH (1)
116 #define EMAC_POLL_WEIGHT (64)
117
118
119 #define EMAC_DEF_TX_MAX_SERVICE (32)
120 #define EMAC_DEF_RX_MAX_SERVICE (64)
121
122
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)
130
131
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)
148
149
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)
156
157
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)
164
165
166 #define EMAC_DM646X_MACCONTORL_GIG BIT(7)
167 #define EMAC_DM646X_MACCONTORL_GIGFORCE BIT(17)
168
169
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)
178
179
180 #define EMAC_RX_MAX_LEN_MASK (0xFFFF)
181 #define EMAC_RX_BUFFER_OFFSET_MASK (0xFFFF)
182
183
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)
188
189
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)
194
195
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)
204 #define EMAC_RX_BD_PKT_LENGTH_MASK (0xFFFF)
205
206
207 #define EMAC_MAX_TXRX_CHANNELS (8)
208 #define EMAC_DEF_MAX_MULTICAST_ADDRESSES (64)
209
210
211 #define EMAC_MACINVECTOR 0x90
212
213 #define EMAC_DM646X_MACEOIVECTOR 0x94
214
215 #define EMAC_MACINTSTATRAW 0xB0
216 #define EMAC_MACINTSTATMASKED 0xB4
217 #define EMAC_MACINTMASKSET 0xB8
218 #define EMAC_MACINTMASKCLEAR 0xBC
219
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
226
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
240
241
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
272
273
274 #define EMAC_CTRL_EWCTL (0x4)
275 #define EMAC_CTRL_EWINTTCNT (0x8)
276
277
278 #define EMAC_DM644X_EWINTCNT_MASK 0x1FFFF
279 #define EMAC_DM644X_INTMIN_INTVL 0x1
280 #define EMAC_DM644X_INTMAX_INTVL (EMAC_DM644X_EWINTCNT_MASK)
281
282
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
288
289
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)
296
297
298
299 #define EMAC_DM646X_MAC_EOI_C0_RXEN (0x01)
300 #define EMAC_DM646X_MAC_EOI_C0_TXEN (0x02)
301
302
303 #define EMAC_STATS_CLR_MASK (0xFFFFFFFF)
304
305
306
307
308
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;
323 u32 speed;
324 u32 duplex;
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
339 void (*int_enable) (void);
340 void (*int_disable) (void);
341 };
342
343
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"
350 };
351
352
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"
358 };
359
360
361 #define emac_read(reg) ioread32(priv->emac_base + (reg))
362 #define emac_write(reg, val) iowrite32(val, priv->emac_base + (reg))
363
364 #define emac_ctrl_read(reg) ioread32((priv->ctrl_base + (reg)))
365 #define emac_ctrl_write(reg, val) iowrite32(val, (priv->ctrl_base + (reg)))
366
367
368
369
370
371
372
373
374
375 static void emac_get_drvinfo(struct net_device *ndev,
376 struct ethtool_drvinfo *info)
377 {
378 strlcpy(info->driver, emac_version_string, sizeof(info->driver));
379 strlcpy(info->version, EMAC_MODULE_VERSION, sizeof(info->version));
380 }
381
382
383
384
385
386
387
388
389
390 static int emac_get_coalesce(struct net_device *ndev,
391 struct ethtool_coalesce *coal)
392 {
393 struct emac_priv *priv = netdev_priv(ndev);
394
395 coal->rx_coalesce_usecs = priv->coal_intvl;
396 return 0;
397
398 }
399
400
401
402
403
404
405
406
407
408 static int emac_set_coalesce(struct net_device *ndev,
409 struct ethtool_coalesce *coal)
410 {
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;
414
415 if (!coal->rx_coalesce_usecs)
416 return -EINVAL;
417
418 coal_intvl = coal->rx_coalesce_usecs;
419
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;
424
425 if (coal_intvl < EMAC_DM646X_CMINTMIN_INTVL)
426 coal_intvl = EMAC_DM646X_CMINTMIN_INTVL;
427
428 if (coal_intvl > EMAC_DM646X_CMINTMAX_INTVL) {
429
430
431
432
433 addnl_dvdr = EMAC_DM646X_INTPRESCALE_MASK / prescale;
434
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;
444 }
445 }
446
447 num_interrupts = (1000 * addnl_dvdr) / coal_intvl;
448
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);
453
454 emac_ctrl_write(EMAC_DM646X_CMRXINTMAX, num_interrupts);
455 emac_ctrl_write(EMAC_DM646X_CMTXINTMAX, num_interrupts);
456
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;
465 }
466 emac_ctrl_write(EMAC_CTRL_EWINTTCNT, (int_ctrl | prescale));
467
468 break;
469 }
470
471 printk(KERN_INFO"Set coalesce to %d usecs.\n", coal_intvl);
472 priv->coal_intvl = coal_intvl;
473
474 return 0;
475
476 }
477
478
479
480
481
482
483 static const struct ethtool_ops ethtool_ops = {
484 .get_drvinfo = emac_get_drvinfo,
485 .get_link = ethtool_op_get_link,
486 .get_coalesce = emac_get_coalesce,
487 .set_coalesce = emac_set_coalesce,
488 .get_ts_info = ethtool_op_get_ts_info,
489 .get_link_ksettings = phy_ethtool_get_link_ksettings,
490 .set_link_ksettings = phy_ethtool_set_link_ksettings,
491 };
492
493
494
495
496
497
498
499
500
501 static void emac_update_phystatus(struct emac_priv *priv)
502 {
503 u32 mac_control;
504 u32 new_duplex;
505 u32 cur_duplex;
506 struct net_device *ndev = priv->ndev;
507
508 mac_control = emac_read(EMAC_MACCONTROL);
509 cur_duplex = (mac_control & EMAC_MACCONTROL_FULLDUPLEXEN) ?
510 DUPLEX_FULL : DUPLEX_HALF;
511 if (ndev->phydev)
512 new_duplex = ndev->phydev->duplex;
513 else
514 new_duplex = DUPLEX_FULL;
515
516
517 if ((priv->link) && (new_duplex != cur_duplex)) {
518 priv->duplex = new_duplex;
519 if (DUPLEX_FULL == priv->duplex)
520 mac_control |= (EMAC_MACCONTROL_FULLDUPLEXEN);
521 else
522 mac_control &= ~(EMAC_MACCONTROL_FULLDUPLEXEN);
523 }
524
525 if (priv->speed == SPEED_1000 && (priv->version == EMAC_VERSION_2)) {
526 mac_control = emac_read(EMAC_MACCONTROL);
527 mac_control |= (EMAC_DM646X_MACCONTORL_GIG |
528 EMAC_DM646X_MACCONTORL_GIGFORCE);
529 } else {
530
531 mac_control &= ~(EMAC_DM646X_MACCONTORL_GIGFORCE |
532 EMAC_DM646X_MACCONTORL_GIG);
533
534 if (priv->rmii_en && (priv->speed == SPEED_100))
535 mac_control |= EMAC_MACCONTROL_RMIISPEED_MASK;
536 else
537 mac_control &= ~EMAC_MACCONTROL_RMIISPEED_MASK;
538 }
539
540
541 emac_write(EMAC_MACCONTROL, mac_control);
542
543 if (priv->link) {
544
545 if (!netif_carrier_ok(ndev))
546 netif_carrier_on(ndev);
547
548 if (netif_running(ndev) && netif_queue_stopped(ndev))
549 netif_wake_queue(ndev);
550 } else {
551
552 if (netif_carrier_ok(ndev))
553 netif_carrier_off(ndev);
554 if (!netif_queue_stopped(ndev))
555 netif_stop_queue(ndev);
556 }
557 }
558
559
560
561
562
563
564
565
566 static u32 hash_get(u8 *addr)
567 {
568 u32 hash;
569 u8 tmpval;
570 int cnt;
571 hash = 0;
572
573 for (cnt = 0; cnt < 2; cnt++) {
574 tmpval = *addr++;
575 hash ^= (tmpval >> 2) ^ (tmpval << 4);
576 tmpval = *addr++;
577 hash ^= (tmpval >> 4) ^ (tmpval << 2);
578 tmpval = *addr++;
579 hash ^= (tmpval >> 6) ^ (tmpval);
580 }
581
582 return hash & 0x3F;
583 }
584
585
586
587
588
589
590
591
592
593 static int emac_hash_add(struct emac_priv *priv, u8 *mac_addr)
594 {
595 struct device *emac_dev = &priv->ndev->dev;
596 u32 rc = 0;
597 u32 hash_bit;
598 u32 hash_value = hash_get(mac_addr);
599
600 if (hash_value >= EMAC_NUM_MULTICAST_BITS) {
601 if (netif_msg_drv(priv)) {
602 dev_err(emac_dev, "DaVinci EMAC: emac_hash_add(): Invalid "\
603 "Hash %08x, should not be greater than %08x",
604 hash_value, (EMAC_NUM_MULTICAST_BITS - 1));
605 }
606 return -1;
607 }
608
609
610 if (priv->multicast_hash_cnt[hash_value] == 0) {
611 rc = 1;
612 if (hash_value < 32) {
613 hash_bit = BIT(hash_value);
614 priv->mac_hash1 |= hash_bit;
615 } else {
616 hash_bit = BIT((hash_value - 32));
617 priv->mac_hash2 |= hash_bit;
618 }
619 }
620
621
622 ++priv->multicast_hash_cnt[hash_value];
623
624 return rc;
625 }
626
627
628
629
630
631
632
633
634
635 static int emac_hash_del(struct emac_priv *priv, u8 *mac_addr)
636 {
637 u32 hash_value;
638 u32 hash_bit;
639
640 hash_value = hash_get(mac_addr);
641 if (priv->multicast_hash_cnt[hash_value] > 0) {
642
643 --priv->multicast_hash_cnt[hash_value];
644 }
645
646
647
648 if (priv->multicast_hash_cnt[hash_value] > 0)
649 return 0;
650
651 if (hash_value < 32) {
652 hash_bit = BIT(hash_value);
653 priv->mac_hash1 &= ~hash_bit;
654 } else {
655 hash_bit = BIT((hash_value - 32));
656 priv->mac_hash2 &= ~hash_bit;
657 }
658
659
660 return 1;
661 }
662
663
664 #define EMAC_MULTICAST_ADD 0
665 #define EMAC_MULTICAST_DEL 1
666 #define EMAC_ALL_MULTI_SET 2
667 #define EMAC_ALL_MULTI_CLR 3
668
669
670
671
672
673
674
675
676
677
678 static void emac_add_mcast(struct emac_priv *priv, u32 action, u8 *mac_addr)
679 {
680 struct device *emac_dev = &priv->ndev->dev;
681 int update = -1;
682
683 switch (action) {
684 case EMAC_MULTICAST_ADD:
685 update = emac_hash_add(priv, mac_addr);
686 break;
687 case EMAC_MULTICAST_DEL:
688 update = emac_hash_del(priv, mac_addr);
689 break;
690 case EMAC_ALL_MULTI_SET:
691 update = 1;
692 priv->mac_hash1 = EMAC_ALL_MULTI_REG_VALUE;
693 priv->mac_hash2 = EMAC_ALL_MULTI_REG_VALUE;
694 break;
695 case EMAC_ALL_MULTI_CLR:
696 update = 1;
697 priv->mac_hash1 = 0;
698 priv->mac_hash2 = 0;
699 memset(&(priv->multicast_hash_cnt[0]), 0,
700 sizeof(priv->multicast_hash_cnt[0]) *
701 EMAC_NUM_MULTICAST_BITS);
702 break;
703 default:
704 if (netif_msg_drv(priv))
705 dev_err(emac_dev, "DaVinci EMAC: add_mcast"\
706 ": bad operation %d", action);
707 break;
708 }
709
710
711 if (update > 0) {
712 emac_write(EMAC_MACHASH1, priv->mac_hash1);
713 emac_write(EMAC_MACHASH2, priv->mac_hash2);
714 }
715 }
716
717
718
719
720
721
722
723
724 static void emac_dev_mcast_set(struct net_device *ndev)
725 {
726 u32 mbp_enable;
727 struct emac_priv *priv = netdev_priv(ndev);
728
729 mbp_enable = emac_read(EMAC_RXMBPENABLE);
730 if (ndev->flags & IFF_PROMISC) {
731 mbp_enable &= (~EMAC_MBP_PROMISCCH(EMAC_DEF_PROM_CH));
732 mbp_enable |= (EMAC_MBP_RXPROMISC);
733 } else {
734 mbp_enable = (mbp_enable & ~EMAC_MBP_RXPROMISC);
735 if ((ndev->flags & IFF_ALLMULTI) ||
736 netdev_mc_count(ndev) > EMAC_DEF_MAX_MULTICAST_ADDRESSES) {
737 mbp_enable = (mbp_enable | EMAC_MBP_RXMCAST);
738 emac_add_mcast(priv, EMAC_ALL_MULTI_SET, NULL);
739 } else if (!netdev_mc_empty(ndev)) {
740 struct netdev_hw_addr *ha;
741
742 mbp_enable = (mbp_enable | EMAC_MBP_RXMCAST);
743 emac_add_mcast(priv, EMAC_ALL_MULTI_CLR, NULL);
744
745 netdev_for_each_mc_addr(ha, ndev) {
746 emac_add_mcast(priv, EMAC_MULTICAST_ADD,
747 (u8 *) ha->addr);
748 }
749 } else {
750 mbp_enable = (mbp_enable & ~EMAC_MBP_RXMCAST);
751 emac_add_mcast(priv, EMAC_ALL_MULTI_CLR, NULL);
752 }
753 }
754
755 emac_write(EMAC_RXMBPENABLE, mbp_enable);
756 }
757
758
759
760
761
762
763
764
765
766
767
768
769 static void emac_int_disable(struct emac_priv *priv)
770 {
771 if (priv->version == EMAC_VERSION_2) {
772 unsigned long flags;
773
774 local_irq_save(flags);
775
776
777
778 emac_ctrl_write(EMAC_DM646X_CMRXINTEN, 0x0);
779 emac_ctrl_write(EMAC_DM646X_CMTXINTEN, 0x0);
780
781 if (priv->int_disable)
782 priv->int_disable();
783
784
785
786
787 emac_write(EMAC_DM646X_MACEOIVECTOR,
788 EMAC_DM646X_MAC_EOI_C0_RXEN);
789
790
791 emac_write(EMAC_DM646X_MACEOIVECTOR,
792 EMAC_DM646X_MAC_EOI_C0_TXEN);
793
794 local_irq_restore(flags);
795
796 } else {
797
798 emac_ctrl_write(EMAC_CTRL_EWCTL, 0x0);
799 }
800 }
801
802
803
804
805
806
807
808
809 static void emac_int_enable(struct emac_priv *priv)
810 {
811 if (priv->version == EMAC_VERSION_2) {
812 if (priv->int_enable)
813 priv->int_enable();
814
815 emac_ctrl_write(EMAC_DM646X_CMRXINTEN, 0xff);
816 emac_ctrl_write(EMAC_DM646X_CMTXINTEN, 0xff);
817
818
819
820
821
822
823 } else {
824
825 emac_ctrl_write(EMAC_CTRL_EWCTL, 0x1);
826 }
827 }
828
829
830
831
832
833
834
835
836
837
838
839 static irqreturn_t emac_irq(int irq, void *dev_id)
840 {
841 struct net_device *ndev = (struct net_device *)dev_id;
842 struct emac_priv *priv = netdev_priv(ndev);
843
844 ++priv->isr_count;
845 if (likely(netif_running(priv->ndev))) {
846 emac_int_disable(priv);
847 napi_schedule(&priv->napi);
848 } else {
849
850 }
851 return IRQ_HANDLED;
852 }
853
854 static struct sk_buff *emac_rx_alloc(struct emac_priv *priv)
855 {
856 struct sk_buff *skb = netdev_alloc_skb(priv->ndev, priv->rx_buf_size);
857 if (WARN_ON(!skb))
858 return NULL;
859 skb_reserve(skb, NET_IP_ALIGN);
860 return skb;
861 }
862
863 static void emac_rx_handler(void *token, int len, int status)
864 {
865 struct sk_buff *skb = token;
866 struct net_device *ndev = skb->dev;
867 struct emac_priv *priv = netdev_priv(ndev);
868 struct device *emac_dev = &ndev->dev;
869 int ret;
870
871
872 if (unlikely(!netif_running(ndev))) {
873 dev_kfree_skb_any(skb);
874 return;
875 }
876
877
878 if (status < 0) {
879 ndev->stats.rx_errors++;
880 goto recycle;
881 }
882
883
884 skb_put(skb, len);
885 skb->protocol = eth_type_trans(skb, ndev);
886 netif_receive_skb(skb);
887 ndev->stats.rx_bytes += len;
888 ndev->stats.rx_packets++;
889
890
891 skb = emac_rx_alloc(priv);
892 if (!skb) {
893 if (netif_msg_rx_err(priv) && net_ratelimit())
894 dev_err(emac_dev, "failed rx buffer alloc\n");
895 return;
896 }
897
898 recycle:
899 ret = cpdma_chan_submit(priv->rxchan, skb, skb->data,
900 skb_tailroom(skb), 0);
901
902 WARN_ON(ret == -ENOMEM);
903 if (unlikely(ret < 0))
904 dev_kfree_skb_any(skb);
905 }
906
907 static void emac_tx_handler(void *token, int len, int status)
908 {
909 struct sk_buff *skb = token;
910 struct net_device *ndev = skb->dev;
911
912
913
914
915 if (unlikely(netif_queue_stopped(ndev)))
916 netif_wake_queue(ndev);
917 ndev->stats.tx_packets++;
918 ndev->stats.tx_bytes += len;
919 dev_kfree_skb_any(skb);
920 }
921
922
923
924
925
926
927
928
929
930
931
932 static int emac_dev_xmit(struct sk_buff *skb, struct net_device *ndev)
933 {
934 struct device *emac_dev = &ndev->dev;
935 int ret_code;
936 struct emac_priv *priv = netdev_priv(ndev);
937
938
939 if (unlikely(!priv->link)) {
940 if (netif_msg_tx_err(priv) && net_ratelimit())
941 dev_err(emac_dev, "DaVinci EMAC: No link to transmit");
942 goto fail_tx;
943 }
944
945 ret_code = skb_padto(skb, EMAC_DEF_MIN_ETHPKTSIZE);
946 if (unlikely(ret_code < 0)) {
947 if (netif_msg_tx_err(priv) && net_ratelimit())
948 dev_err(emac_dev, "DaVinci EMAC: packet pad failed");
949 goto fail_tx;
950 }
951
952 skb_tx_timestamp(skb);
953
954 ret_code = cpdma_chan_submit(priv->txchan, skb, skb->data, skb->len,
955 0);
956 if (unlikely(ret_code != 0)) {
957 if (netif_msg_tx_err(priv) && net_ratelimit())
958 dev_err(emac_dev, "DaVinci EMAC: desc submit failed");
959 goto fail_tx;
960 }
961
962
963
964
965 if (unlikely(!cpdma_check_free_tx_desc(priv->txchan)))
966 netif_stop_queue(ndev);
967
968 return NETDEV_TX_OK;
969
970 fail_tx:
971 ndev->stats.tx_dropped++;
972 netif_stop_queue(ndev);
973 return NETDEV_TX_BUSY;
974 }
975
976
977
978
979
980
981
982
983
984
985
986 static void emac_dev_tx_timeout(struct net_device *ndev)
987 {
988 struct emac_priv *priv = netdev_priv(ndev);
989 struct device *emac_dev = &ndev->dev;
990
991 if (netif_msg_tx_err(priv))
992 dev_err(emac_dev, "DaVinci EMAC: xmit timeout, restarting TX");
993
994 ndev->stats.tx_errors++;
995 emac_int_disable(priv);
996 cpdma_chan_stop(priv->txchan);
997 cpdma_chan_start(priv->txchan);
998 emac_int_enable(priv);
999 }
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011 static void emac_set_type0addr(struct emac_priv *priv, u32 ch, char *mac_addr)
1012 {
1013 u32 val;
1014 val = ((mac_addr[5] << 8) | (mac_addr[4]));
1015 emac_write(EMAC_MACSRCADDRLO, val);
1016
1017 val = ((mac_addr[3] << 24) | (mac_addr[2] << 16) | \
1018 (mac_addr[1] << 8) | (mac_addr[0]));
1019 emac_write(EMAC_MACSRCADDRHI, val);
1020 val = emac_read(EMAC_RXUNICASTSET);
1021 val |= BIT(ch);
1022 emac_write(EMAC_RXUNICASTSET, val);
1023 val = emac_read(EMAC_RXUNICASTCLEAR);
1024 val &= ~BIT(ch);
1025 emac_write(EMAC_RXUNICASTCLEAR, val);
1026 }
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038 static void emac_set_type1addr(struct emac_priv *priv, u32 ch, char *mac_addr)
1039 {
1040 u32 val;
1041 emac_write(EMAC_MACINDEX, ch);
1042 val = ((mac_addr[5] << 8) | mac_addr[4]);
1043 emac_write(EMAC_MACADDRLO, val);
1044 val = ((mac_addr[3] << 24) | (mac_addr[2] << 16) | \
1045 (mac_addr[1] << 8) | (mac_addr[0]));
1046 emac_write(EMAC_MACADDRHI, val);
1047 emac_set_type0addr(priv, ch, mac_addr);
1048 }
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062 static void emac_set_type2addr(struct emac_priv *priv, u32 ch,
1063 char *mac_addr, int index, int match)
1064 {
1065 u32 val;
1066 emac_write(EMAC_MACINDEX, index);
1067 val = ((mac_addr[3] << 24) | (mac_addr[2] << 16) | \
1068 (mac_addr[1] << 8) | (mac_addr[0]));
1069 emac_write(EMAC_MACADDRHI, val);
1070 val = ((mac_addr[5] << 8) | mac_addr[4] | ((ch & 0x7) << 16) | \
1071 (match << 19) | BIT(20));
1072 emac_write(EMAC_MACADDRLO, val);
1073 emac_set_type0addr(priv, ch, mac_addr);
1074 }
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086 static void emac_setmac(struct emac_priv *priv, u32 ch, char *mac_addr)
1087 {
1088 struct device *emac_dev = &priv->ndev->dev;
1089
1090 if (priv->rx_addr_type == 0) {
1091 emac_set_type0addr(priv, ch, mac_addr);
1092 } else if (priv->rx_addr_type == 1) {
1093 u32 cnt;
1094 for (cnt = 0; cnt < EMAC_MAX_TXRX_CHANNELS; cnt++)
1095 emac_set_type1addr(priv, ch, mac_addr);
1096 } else if (priv->rx_addr_type == 2) {
1097 emac_set_type2addr(priv, ch, mac_addr, ch, 1);
1098 emac_set_type0addr(priv, ch, mac_addr);
1099 } else {
1100 if (netif_msg_drv(priv))
1101 dev_err(emac_dev, "DaVinci EMAC: Wrong addressing\n");
1102 }
1103 }
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114 static int emac_dev_setmac_addr(struct net_device *ndev, void *addr)
1115 {
1116 struct emac_priv *priv = netdev_priv(ndev);
1117 struct device *emac_dev = &priv->ndev->dev;
1118 struct sockaddr *sa = addr;
1119
1120 if (!is_valid_ether_addr(sa->sa_data))
1121 return -EADDRNOTAVAIL;
1122
1123
1124 memcpy(priv->mac_addr, sa->sa_data, ndev->addr_len);
1125 memcpy(ndev->dev_addr, sa->sa_data, ndev->addr_len);
1126
1127
1128 if (netif_running(ndev)) {
1129 emac_setmac(priv, EMAC_DEF_RX_CH, priv->mac_addr);
1130 }
1131
1132 if (netif_msg_drv(priv))
1133 dev_notice(emac_dev, "DaVinci EMAC: emac_dev_setmac_addr %pM\n",
1134 priv->mac_addr);
1135
1136 return 0;
1137 }
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148 static int emac_hw_enable(struct emac_priv *priv)
1149 {
1150 u32 val, mbp_enable, mac_control;
1151
1152
1153 emac_write(EMAC_SOFTRESET, 1);
1154 while (emac_read(EMAC_SOFTRESET))
1155 cpu_relax();
1156
1157
1158 emac_int_disable(priv);
1159
1160
1161 mac_control =
1162 (((EMAC_DEF_TXPRIO_FIXED) ? (EMAC_MACCONTROL_TXPTYPE) : 0x0) |
1163 ((priv->speed == 1000) ? EMAC_MACCONTROL_GIGABITEN : 0x0) |
1164 ((EMAC_DEF_TXPACING_EN) ? (EMAC_MACCONTROL_TXPACEEN) : 0x0) |
1165 ((priv->duplex == DUPLEX_FULL) ? 0x1 : 0));
1166 emac_write(EMAC_MACCONTROL, mac_control);
1167
1168 mbp_enable =
1169 (((EMAC_DEF_PASS_CRC) ? (EMAC_RXMBP_PASSCRC_MASK) : 0x0) |
1170 ((EMAC_DEF_QOS_EN) ? (EMAC_RXMBP_QOSEN_MASK) : 0x0) |
1171 ((EMAC_DEF_NO_BUFF_CHAIN) ? (EMAC_RXMBP_NOCHAIN_MASK) : 0x0) |
1172 ((EMAC_DEF_MACCTRL_FRAME_EN) ? (EMAC_RXMBP_CMFEN_MASK) : 0x0) |
1173 ((EMAC_DEF_SHORT_FRAME_EN) ? (EMAC_RXMBP_CSFEN_MASK) : 0x0) |
1174 ((EMAC_DEF_ERROR_FRAME_EN) ? (EMAC_RXMBP_CEFEN_MASK) : 0x0) |
1175 ((EMAC_DEF_PROM_EN) ? (EMAC_RXMBP_CAFEN_MASK) : 0x0) |
1176 ((EMAC_DEF_PROM_CH & EMAC_RXMBP_CHMASK) << \
1177 EMAC_RXMBP_PROMCH_SHIFT) |
1178 ((EMAC_DEF_BCAST_EN) ? (EMAC_RXMBP_BROADEN_MASK) : 0x0) |
1179 ((EMAC_DEF_BCAST_CH & EMAC_RXMBP_CHMASK) << \
1180 EMAC_RXMBP_BROADCH_SHIFT) |
1181 ((EMAC_DEF_MCAST_EN) ? (EMAC_RXMBP_MULTIEN_MASK) : 0x0) |
1182 ((EMAC_DEF_MCAST_CH & EMAC_RXMBP_CHMASK) << \
1183 EMAC_RXMBP_MULTICH_SHIFT));
1184 emac_write(EMAC_RXMBPENABLE, mbp_enable);
1185 emac_write(EMAC_RXMAXLEN, (EMAC_DEF_MAX_FRAME_SIZE &
1186 EMAC_RX_MAX_LEN_MASK));
1187 emac_write(EMAC_RXBUFFEROFFSET, (EMAC_DEF_BUFFER_OFFSET &
1188 EMAC_RX_BUFFER_OFFSET_MASK));
1189 emac_write(EMAC_RXFILTERLOWTHRESH, 0);
1190 emac_write(EMAC_RXUNICASTCLEAR, EMAC_RX_UNICAST_CLEAR_ALL);
1191 priv->rx_addr_type = (emac_read(EMAC_MACCONFIG) >> 8) & 0xFF;
1192
1193 emac_write(EMAC_MACINTMASKSET, EMAC_MAC_HOST_ERR_INTMASK_VAL);
1194
1195 emac_setmac(priv, EMAC_DEF_RX_CH, priv->mac_addr);
1196
1197
1198 val = emac_read(EMAC_MACCONTROL);
1199 val |= (EMAC_MACCONTROL_GMIIEN);
1200 emac_write(EMAC_MACCONTROL, val);
1201
1202
1203 napi_enable(&priv->napi);
1204 emac_int_enable(priv);
1205 return 0;
1206
1207 }
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222 static int emac_poll(struct napi_struct *napi, int budget)
1223 {
1224 unsigned int mask;
1225 struct emac_priv *priv = container_of(napi, struct emac_priv, napi);
1226 struct net_device *ndev = priv->ndev;
1227 struct device *emac_dev = &ndev->dev;
1228 u32 status = 0;
1229 u32 num_tx_pkts = 0, num_rx_pkts = 0;
1230
1231
1232 status = emac_read(EMAC_MACINVECTOR);
1233
1234 mask = EMAC_DM644X_MAC_IN_VECTOR_TX_INT_VEC;
1235
1236 if (priv->version == EMAC_VERSION_2)
1237 mask = EMAC_DM646X_MAC_IN_VECTOR_TX_INT_VEC;
1238
1239 if (status & mask) {
1240 num_tx_pkts = cpdma_chan_process(priv->txchan,
1241 EMAC_DEF_TX_MAX_SERVICE);
1242 }
1243
1244 mask = EMAC_DM644X_MAC_IN_VECTOR_RX_INT_VEC;
1245
1246 if (priv->version == EMAC_VERSION_2)
1247 mask = EMAC_DM646X_MAC_IN_VECTOR_RX_INT_VEC;
1248
1249 if (status & mask) {
1250 num_rx_pkts = cpdma_chan_process(priv->rxchan, budget);
1251 }
1252
1253 mask = EMAC_DM644X_MAC_IN_VECTOR_HOST_INT;
1254 if (priv->version == EMAC_VERSION_2)
1255 mask = EMAC_DM646X_MAC_IN_VECTOR_HOST_INT;
1256
1257 if (unlikely(status & mask)) {
1258 u32 ch, cause;
1259 dev_err(emac_dev, "DaVinci EMAC: Fatal Hardware Error\n");
1260 netif_stop_queue(ndev);
1261 napi_disable(&priv->napi);
1262
1263 status = emac_read(EMAC_MACSTATUS);
1264 cause = ((status & EMAC_MACSTATUS_TXERRCODE_MASK) >>
1265 EMAC_MACSTATUS_TXERRCODE_SHIFT);
1266 if (cause) {
1267 ch = ((status & EMAC_MACSTATUS_TXERRCH_MASK) >>
1268 EMAC_MACSTATUS_TXERRCH_SHIFT);
1269 if (net_ratelimit()) {
1270 dev_err(emac_dev, "TX Host error %s on ch=%d\n",
1271 &emac_txhost_errcodes[cause][0], ch);
1272 }
1273 }
1274 cause = ((status & EMAC_MACSTATUS_RXERRCODE_MASK) >>
1275 EMAC_MACSTATUS_RXERRCODE_SHIFT);
1276 if (cause) {
1277 ch = ((status & EMAC_MACSTATUS_RXERRCH_MASK) >>
1278 EMAC_MACSTATUS_RXERRCH_SHIFT);
1279 if (netif_msg_hw(priv) && net_ratelimit())
1280 dev_err(emac_dev, "RX Host error %s on ch=%d\n",
1281 &emac_rxhost_errcodes[cause][0], ch);
1282 }
1283 } else if (num_rx_pkts < budget) {
1284 napi_complete_done(napi, num_rx_pkts);
1285 emac_int_enable(priv);
1286 }
1287
1288 return num_rx_pkts;
1289 }
1290
1291 #ifdef CONFIG_NET_POLL_CONTROLLER
1292
1293
1294
1295
1296
1297
1298
1299 static void emac_poll_controller(struct net_device *ndev)
1300 {
1301 struct emac_priv *priv = netdev_priv(ndev);
1302
1303 emac_int_disable(priv);
1304 emac_irq(ndev->irq, ndev);
1305 emac_int_enable(priv);
1306 }
1307 #endif
1308
1309 static void emac_adjust_link(struct net_device *ndev)
1310 {
1311 struct emac_priv *priv = netdev_priv(ndev);
1312 struct phy_device *phydev = ndev->phydev;
1313 unsigned long flags;
1314 int new_state = 0;
1315
1316 spin_lock_irqsave(&priv->lock, flags);
1317
1318 if (phydev->link) {
1319
1320 if (phydev->duplex != priv->duplex) {
1321 new_state = 1;
1322 priv->duplex = phydev->duplex;
1323 }
1324 if (phydev->speed != priv->speed) {
1325 new_state = 1;
1326 priv->speed = phydev->speed;
1327 }
1328 if (!priv->link) {
1329 new_state = 1;
1330 priv->link = 1;
1331 }
1332
1333 } else if (priv->link) {
1334 new_state = 1;
1335 priv->link = 0;
1336 priv->speed = 0;
1337 priv->duplex = ~0;
1338 }
1339 if (new_state) {
1340 emac_update_phystatus(priv);
1341 phy_print_status(ndev->phydev);
1342 }
1343
1344 spin_unlock_irqrestore(&priv->lock, flags);
1345 }
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361 static int emac_devioctl(struct net_device *ndev, struct ifreq *ifrq, int cmd)
1362 {
1363 if (!(netif_running(ndev)))
1364 return -EINVAL;
1365
1366
1367
1368 if (ndev->phydev)
1369 return phy_mii_ioctl(ndev->phydev, ifrq, cmd);
1370 else
1371 return -EOPNOTSUPP;
1372 }
1373
1374 static int match_first_device(struct device *dev, const void *data)
1375 {
1376 if (dev->parent && dev->parent->of_node)
1377 return of_device_is_compatible(dev->parent->of_node,
1378 "ti,davinci_mdio");
1379
1380 return !strncmp(dev_name(dev), "davinci_mdio", 12);
1381 }
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393 static int emac_dev_open(struct net_device *ndev)
1394 {
1395 struct device *emac_dev = &ndev->dev;
1396 u32 cnt;
1397 struct resource *res;
1398 int q, m, ret;
1399 int res_num = 0, irq_num = 0;
1400 int i = 0;
1401 struct emac_priv *priv = netdev_priv(ndev);
1402 struct phy_device *phydev = NULL;
1403 struct device *phy = NULL;
1404
1405 ret = pm_runtime_get_sync(&priv->pdev->dev);
1406 if (ret < 0) {
1407 pm_runtime_put_noidle(&priv->pdev->dev);
1408 dev_err(&priv->pdev->dev, "%s: failed to get_sync(%d)\n",
1409 __func__, ret);
1410 return ret;
1411 }
1412
1413 netif_carrier_off(ndev);
1414 for (cnt = 0; cnt < ETH_ALEN; cnt++)
1415 ndev->dev_addr[cnt] = priv->mac_addr[cnt];
1416
1417
1418 priv->rx_buf_size = EMAC_DEF_MAX_FRAME_SIZE + NET_IP_ALIGN;
1419
1420 priv->mac_hash1 = 0;
1421 priv->mac_hash2 = 0;
1422 emac_write(EMAC_MACHASH1, 0);
1423 emac_write(EMAC_MACHASH2, 0);
1424
1425 for (i = 0; i < EMAC_DEF_RX_NUM_DESC; i++) {
1426 struct sk_buff *skb = emac_rx_alloc(priv);
1427
1428 if (!skb)
1429 break;
1430
1431 ret = cpdma_chan_idle_submit(priv->rxchan, skb, skb->data,
1432 skb_tailroom(skb), 0);
1433 if (WARN_ON(ret < 0))
1434 break;
1435 }
1436
1437
1438 while ((res = platform_get_resource(priv->pdev, IORESOURCE_IRQ,
1439 res_num))) {
1440 for (irq_num = res->start; irq_num <= res->end; irq_num++) {
1441 if (request_irq(irq_num, emac_irq, 0, ndev->name,
1442 ndev)) {
1443 dev_err(emac_dev,
1444 "DaVinci EMAC: request_irq() failed\n");
1445 ret = -EBUSY;
1446
1447 goto rollback;
1448 }
1449 }
1450 res_num++;
1451 }
1452
1453 res_num--;
1454 irq_num--;
1455
1456
1457 emac_hw_enable(priv);
1458
1459
1460 if (priv->coal_intvl != 0) {
1461 struct ethtool_coalesce coal;
1462
1463 coal.rx_coalesce_usecs = (priv->coal_intvl << 4);
1464 emac_set_coalesce(ndev, &coal);
1465 }
1466
1467 cpdma_ctlr_start(priv->dma);
1468
1469 if (priv->phy_node) {
1470 phydev = of_phy_connect(ndev, priv->phy_node,
1471 &emac_adjust_link, 0, 0);
1472 if (!phydev) {
1473 dev_err(emac_dev, "could not connect to phy %pOF\n",
1474 priv->phy_node);
1475 ret = -ENODEV;
1476 goto err;
1477 }
1478 }
1479
1480
1481 if (!phydev && !priv->phy_id) {
1482
1483
1484
1485
1486
1487
1488 phy = bus_find_device(&mdio_bus_type, NULL, NULL,
1489 match_first_device);
1490 if (phy) {
1491 priv->phy_id = dev_name(phy);
1492 if (!priv->phy_id || !*priv->phy_id)
1493 put_device(phy);
1494 }
1495 }
1496
1497 if (!phydev && priv->phy_id && *priv->phy_id) {
1498 phydev = phy_connect(ndev, priv->phy_id,
1499 &emac_adjust_link,
1500 PHY_INTERFACE_MODE_MII);
1501 put_device(phy);
1502 if (IS_ERR(phydev)) {
1503 dev_err(emac_dev, "could not connect to phy %s\n",
1504 priv->phy_id);
1505 ret = PTR_ERR(phydev);
1506 goto err;
1507 }
1508
1509 priv->link = 0;
1510 priv->speed = 0;
1511 priv->duplex = ~0;
1512
1513 phy_attached_info(phydev);
1514 }
1515
1516 if (!phydev) {
1517
1518 dev_notice(emac_dev, "no phy, defaulting to 100/full\n");
1519 priv->link = 1;
1520 priv->speed = SPEED_100;
1521 priv->duplex = DUPLEX_FULL;
1522 emac_update_phystatus(priv);
1523 }
1524
1525 if (netif_msg_drv(priv))
1526 dev_notice(emac_dev, "DaVinci EMAC: Opened %s\n", ndev->name);
1527
1528 if (phydev)
1529 phy_start(phydev);
1530
1531 return 0;
1532
1533 err:
1534 emac_int_disable(priv);
1535 napi_disable(&priv->napi);
1536
1537 rollback:
1538 for (q = res_num; q >= 0; q--) {
1539 res = platform_get_resource(priv->pdev, IORESOURCE_IRQ, q);
1540
1541
1542
1543 if (q != res_num)
1544 irq_num = res->end;
1545
1546 for (m = irq_num; m >= res->start; m--)
1547 free_irq(m, ndev);
1548 }
1549 cpdma_ctlr_stop(priv->dma);
1550 pm_runtime_put(&priv->pdev->dev);
1551 return ret;
1552 }
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563 static int emac_dev_stop(struct net_device *ndev)
1564 {
1565 struct resource *res;
1566 int i = 0;
1567 int irq_num;
1568 struct emac_priv *priv = netdev_priv(ndev);
1569 struct device *emac_dev = &ndev->dev;
1570
1571
1572 netif_stop_queue(ndev);
1573 napi_disable(&priv->napi);
1574
1575 netif_carrier_off(ndev);
1576 emac_int_disable(priv);
1577 cpdma_ctlr_stop(priv->dma);
1578 emac_write(EMAC_SOFTRESET, 1);
1579
1580 if (ndev->phydev)
1581 phy_disconnect(ndev->phydev);
1582
1583
1584 while ((res = platform_get_resource(priv->pdev, IORESOURCE_IRQ, i))) {
1585 for (irq_num = res->start; irq_num <= res->end; irq_num++)
1586 free_irq(irq_num, priv->ndev);
1587 i++;
1588 }
1589
1590 if (netif_msg_drv(priv))
1591 dev_notice(emac_dev, "DaVinci EMAC: %s stopped\n", ndev->name);
1592
1593 pm_runtime_put(&priv->pdev->dev);
1594 return 0;
1595 }
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605 static struct net_device_stats *emac_dev_getnetstats(struct net_device *ndev)
1606 {
1607 struct emac_priv *priv = netdev_priv(ndev);
1608 u32 mac_control;
1609 u32 stats_clear_mask;
1610 int err;
1611
1612 err = pm_runtime_get_sync(&priv->pdev->dev);
1613 if (err < 0) {
1614 pm_runtime_put_noidle(&priv->pdev->dev);
1615 dev_err(&priv->pdev->dev, "%s: failed to get_sync(%d)\n",
1616 __func__, err);
1617 return &ndev->stats;
1618 }
1619
1620
1621
1622 mac_control = emac_read(EMAC_MACCONTROL);
1623
1624 if (mac_control & EMAC_MACCONTROL_GMIIEN)
1625 stats_clear_mask = EMAC_STATS_CLR_MASK;
1626 else
1627 stats_clear_mask = 0;
1628
1629 ndev->stats.multicast += emac_read(EMAC_RXMCASTFRAMES);
1630 emac_write(EMAC_RXMCASTFRAMES, stats_clear_mask);
1631
1632 ndev->stats.collisions += (emac_read(EMAC_TXCOLLISION) +
1633 emac_read(EMAC_TXSINGLECOLL) +
1634 emac_read(EMAC_TXMULTICOLL));
1635 emac_write(EMAC_TXCOLLISION, stats_clear_mask);
1636 emac_write(EMAC_TXSINGLECOLL, stats_clear_mask);
1637 emac_write(EMAC_TXMULTICOLL, stats_clear_mask);
1638
1639 ndev->stats.rx_length_errors += (emac_read(EMAC_RXOVERSIZED) +
1640 emac_read(EMAC_RXJABBER) +
1641 emac_read(EMAC_RXUNDERSIZED));
1642 emac_write(EMAC_RXOVERSIZED, stats_clear_mask);
1643 emac_write(EMAC_RXJABBER, stats_clear_mask);
1644 emac_write(EMAC_RXUNDERSIZED, stats_clear_mask);
1645
1646 ndev->stats.rx_over_errors += (emac_read(EMAC_RXSOFOVERRUNS) +
1647 emac_read(EMAC_RXMOFOVERRUNS));
1648 emac_write(EMAC_RXSOFOVERRUNS, stats_clear_mask);
1649 emac_write(EMAC_RXMOFOVERRUNS, stats_clear_mask);
1650
1651 ndev->stats.rx_fifo_errors += emac_read(EMAC_RXDMAOVERRUNS);
1652 emac_write(EMAC_RXDMAOVERRUNS, stats_clear_mask);
1653
1654 ndev->stats.tx_carrier_errors +=
1655 emac_read(EMAC_TXCARRIERSENSE);
1656 emac_write(EMAC_TXCARRIERSENSE, stats_clear_mask);
1657
1658 ndev->stats.tx_fifo_errors += emac_read(EMAC_TXUNDERRUN);
1659 emac_write(EMAC_TXUNDERRUN, stats_clear_mask);
1660
1661 pm_runtime_put(&priv->pdev->dev);
1662
1663 return &ndev->stats;
1664 }
1665
1666 static const struct net_device_ops emac_netdev_ops = {
1667 .ndo_open = emac_dev_open,
1668 .ndo_stop = emac_dev_stop,
1669 .ndo_start_xmit = emac_dev_xmit,
1670 .ndo_set_rx_mode = emac_dev_mcast_set,
1671 .ndo_set_mac_address = emac_dev_setmac_addr,
1672 .ndo_do_ioctl = emac_devioctl,
1673 .ndo_tx_timeout = emac_dev_tx_timeout,
1674 .ndo_get_stats = emac_dev_getnetstats,
1675 #ifdef CONFIG_NET_POLL_CONTROLLER
1676 .ndo_poll_controller = emac_poll_controller,
1677 #endif
1678 };
1679
1680 static const struct of_device_id davinci_emac_of_match[];
1681
1682 static struct emac_platform_data *
1683 davinci_emac_of_get_pdata(struct platform_device *pdev, struct emac_priv *priv)
1684 {
1685 struct device_node *np;
1686 const struct of_device_id *match;
1687 const struct emac_platform_data *auxdata;
1688 struct emac_platform_data *pdata = NULL;
1689 const u8 *mac_addr;
1690
1691 if (!IS_ENABLED(CONFIG_OF) || !pdev->dev.of_node)
1692 return dev_get_platdata(&pdev->dev);
1693
1694 pdata = devm_kzalloc(&pdev->dev, sizeof(*pdata), GFP_KERNEL);
1695 if (!pdata)
1696 return NULL;
1697
1698 np = pdev->dev.of_node;
1699 pdata->version = EMAC_VERSION_2;
1700
1701 if (!is_valid_ether_addr(pdata->mac_addr)) {
1702 mac_addr = of_get_mac_address(np);
1703 if (!IS_ERR(mac_addr))
1704 ether_addr_copy(pdata->mac_addr, mac_addr);
1705 }
1706
1707 of_property_read_u32(np, "ti,davinci-ctrl-reg-offset",
1708 &pdata->ctrl_reg_offset);
1709
1710 of_property_read_u32(np, "ti,davinci-ctrl-mod-reg-offset",
1711 &pdata->ctrl_mod_reg_offset);
1712
1713 of_property_read_u32(np, "ti,davinci-ctrl-ram-offset",
1714 &pdata->ctrl_ram_offset);
1715
1716 of_property_read_u32(np, "ti,davinci-ctrl-ram-size",
1717 &pdata->ctrl_ram_size);
1718
1719 of_property_read_u8(np, "ti,davinci-rmii-en", &pdata->rmii_en);
1720
1721 pdata->no_bd_ram = of_property_read_bool(np, "ti,davinci-no-bd-ram");
1722
1723 priv->phy_node = of_parse_phandle(np, "phy-handle", 0);
1724 if (!priv->phy_node) {
1725 if (!of_phy_is_fixed_link(np))
1726 pdata->phy_id = NULL;
1727 else if (of_phy_register_fixed_link(np) >= 0)
1728 priv->phy_node = of_node_get(np);
1729 }
1730
1731 auxdata = pdev->dev.platform_data;
1732 if (auxdata) {
1733 pdata->interrupt_enable = auxdata->interrupt_enable;
1734 pdata->interrupt_disable = auxdata->interrupt_disable;
1735 }
1736
1737 match = of_match_device(davinci_emac_of_match, &pdev->dev);
1738 if (match && match->data) {
1739 auxdata = match->data;
1740 pdata->version = auxdata->version;
1741 pdata->hw_ram_addr = auxdata->hw_ram_addr;
1742 }
1743
1744 return pdata;
1745 }
1746
1747 static int davinci_emac_try_get_mac(struct platform_device *pdev,
1748 int instance, u8 *mac_addr)
1749 {
1750 if (!pdev->dev.of_node)
1751 return -EINVAL;
1752
1753 return ti_cm_get_macid(&pdev->dev, instance, mac_addr);
1754 }
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764 static int davinci_emac_probe(struct platform_device *pdev)
1765 {
1766 struct device_node *np = pdev->dev.of_node;
1767 int rc = 0;
1768 struct resource *res, *res_ctrl;
1769 struct net_device *ndev;
1770 struct emac_priv *priv;
1771 unsigned long hw_ram_addr;
1772 struct emac_platform_data *pdata;
1773 struct cpdma_params dma_params;
1774 struct clk *emac_clk;
1775 unsigned long emac_bus_frequency;
1776
1777
1778
1779 emac_clk = devm_clk_get(&pdev->dev, NULL);
1780 if (IS_ERR(emac_clk)) {
1781 dev_err(&pdev->dev, "failed to get EMAC clock\n");
1782 return -EBUSY;
1783 }
1784 emac_bus_frequency = clk_get_rate(emac_clk);
1785 devm_clk_put(&pdev->dev, emac_clk);
1786
1787
1788
1789 ndev = alloc_etherdev(sizeof(struct emac_priv));
1790 if (!ndev)
1791 return -ENOMEM;
1792
1793 platform_set_drvdata(pdev, ndev);
1794 priv = netdev_priv(ndev);
1795 priv->pdev = pdev;
1796 priv->ndev = ndev;
1797 priv->msg_enable = netif_msg_init(debug_level, DAVINCI_EMAC_DEBUG);
1798
1799 spin_lock_init(&priv->lock);
1800
1801 pdata = davinci_emac_of_get_pdata(pdev, priv);
1802 if (!pdata) {
1803 dev_err(&pdev->dev, "no platform data\n");
1804 rc = -ENODEV;
1805 goto err_free_netdev;
1806 }
1807
1808
1809 memcpy(priv->mac_addr, pdata->mac_addr, ETH_ALEN);
1810 priv->phy_id = pdata->phy_id;
1811 priv->rmii_en = pdata->rmii_en;
1812 priv->version = pdata->version;
1813 priv->int_enable = pdata->interrupt_enable;
1814 priv->int_disable = pdata->interrupt_disable;
1815
1816 priv->coal_intvl = 0;
1817 priv->bus_freq_mhz = (u32)(emac_bus_frequency / 1000000);
1818
1819
1820 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1821 priv->emac_base_phys = res->start + pdata->ctrl_reg_offset;
1822 priv->remap_addr = devm_ioremap_resource(&pdev->dev, res);
1823 if (IS_ERR(priv->remap_addr)) {
1824 rc = PTR_ERR(priv->remap_addr);
1825 goto no_pdata;
1826 }
1827
1828 res_ctrl = platform_get_resource(pdev, IORESOURCE_MEM, 1);
1829 if (res_ctrl) {
1830 priv->ctrl_base =
1831 devm_ioremap_resource(&pdev->dev, res_ctrl);
1832 if (IS_ERR(priv->ctrl_base)) {
1833 rc = PTR_ERR(priv->ctrl_base);
1834 goto no_pdata;
1835 }
1836 } else {
1837 priv->ctrl_base = priv->remap_addr + pdata->ctrl_mod_reg_offset;
1838 }
1839
1840 priv->emac_base = priv->remap_addr + pdata->ctrl_reg_offset;
1841 ndev->base_addr = (unsigned long)priv->remap_addr;
1842
1843 hw_ram_addr = pdata->hw_ram_addr;
1844 if (!hw_ram_addr)
1845 hw_ram_addr = (u32 __force)res->start + pdata->ctrl_ram_offset;
1846
1847 memset(&dma_params, 0, sizeof(dma_params));
1848 dma_params.dev = &pdev->dev;
1849 dma_params.dmaregs = priv->emac_base;
1850 dma_params.rxthresh = priv->emac_base + 0x120;
1851 dma_params.rxfree = priv->emac_base + 0x140;
1852 dma_params.txhdp = priv->emac_base + 0x600;
1853 dma_params.rxhdp = priv->emac_base + 0x620;
1854 dma_params.txcp = priv->emac_base + 0x640;
1855 dma_params.rxcp = priv->emac_base + 0x660;
1856 dma_params.num_chan = EMAC_MAX_TXRX_CHANNELS;
1857 dma_params.min_packet_size = EMAC_DEF_MIN_ETHPKTSIZE;
1858 dma_params.desc_hw_addr = hw_ram_addr;
1859 dma_params.desc_mem_size = pdata->ctrl_ram_size;
1860 dma_params.desc_align = 16;
1861
1862 dma_params.desc_mem_phys = pdata->no_bd_ram ? 0 :
1863 (u32 __force)res->start + pdata->ctrl_ram_offset;
1864
1865 priv->dma = cpdma_ctlr_create(&dma_params);
1866 if (!priv->dma) {
1867 dev_err(&pdev->dev, "error initializing DMA\n");
1868 rc = -ENOMEM;
1869 goto no_pdata;
1870 }
1871
1872 priv->txchan = cpdma_chan_create(priv->dma, EMAC_DEF_TX_CH,
1873 emac_tx_handler, 0);
1874 if (IS_ERR(priv->txchan)) {
1875 dev_err(&pdev->dev, "error initializing tx dma channel\n");
1876 rc = PTR_ERR(priv->txchan);
1877 goto err_free_dma;
1878 }
1879
1880 priv->rxchan = cpdma_chan_create(priv->dma, EMAC_DEF_RX_CH,
1881 emac_rx_handler, 1);
1882 if (IS_ERR(priv->rxchan)) {
1883 dev_err(&pdev->dev, "error initializing rx dma channel\n");
1884 rc = PTR_ERR(priv->rxchan);
1885 goto err_free_txchan;
1886 }
1887
1888 res = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
1889 if (!res) {
1890 dev_err(&pdev->dev, "error getting irq res\n");
1891 rc = -ENOENT;
1892 goto err_free_rxchan;
1893 }
1894 ndev->irq = res->start;
1895
1896 rc = davinci_emac_try_get_mac(pdev, res_ctrl ? 0 : 1, priv->mac_addr);
1897 if (!rc)
1898 ether_addr_copy(ndev->dev_addr, priv->mac_addr);
1899
1900 if (!is_valid_ether_addr(priv->mac_addr)) {
1901
1902 eth_hw_addr_random(ndev);
1903 memcpy(priv->mac_addr, ndev->dev_addr, ndev->addr_len);
1904 dev_warn(&pdev->dev, "using random MAC addr: %pM\n",
1905 priv->mac_addr);
1906 }
1907
1908 ndev->netdev_ops = &emac_netdev_ops;
1909 ndev->ethtool_ops = ðtool_ops;
1910 netif_napi_add(ndev, &priv->napi, emac_poll, EMAC_POLL_WEIGHT);
1911
1912 pm_runtime_enable(&pdev->dev);
1913 rc = pm_runtime_get_sync(&pdev->dev);
1914 if (rc < 0) {
1915 pm_runtime_put_noidle(&pdev->dev);
1916 dev_err(&pdev->dev, "%s: failed to get_sync(%d)\n",
1917 __func__, rc);
1918 goto err_napi_del;
1919 }
1920
1921
1922 SET_NETDEV_DEV(ndev, &pdev->dev);
1923 rc = register_netdev(ndev);
1924 if (rc) {
1925 dev_err(&pdev->dev, "error in register_netdev\n");
1926 rc = -ENODEV;
1927 pm_runtime_put(&pdev->dev);
1928 goto err_napi_del;
1929 }
1930
1931
1932 if (netif_msg_probe(priv)) {
1933 dev_notice(&pdev->dev, "DaVinci EMAC Probe found device "
1934 "(regs: %pa, irq: %d)\n",
1935 &priv->emac_base_phys, ndev->irq);
1936 }
1937 pm_runtime_put(&pdev->dev);
1938
1939 return 0;
1940
1941 err_napi_del:
1942 netif_napi_del(&priv->napi);
1943 err_free_rxchan:
1944 cpdma_chan_destroy(priv->rxchan);
1945 err_free_txchan:
1946 cpdma_chan_destroy(priv->txchan);
1947 err_free_dma:
1948 cpdma_ctlr_destroy(priv->dma);
1949 no_pdata:
1950 if (of_phy_is_fixed_link(np))
1951 of_phy_deregister_fixed_link(np);
1952 of_node_put(priv->phy_node);
1953 err_free_netdev:
1954 free_netdev(ndev);
1955 return rc;
1956 }
1957
1958
1959
1960
1961
1962
1963
1964
1965 static int davinci_emac_remove(struct platform_device *pdev)
1966 {
1967 struct net_device *ndev = platform_get_drvdata(pdev);
1968 struct emac_priv *priv = netdev_priv(ndev);
1969 struct device_node *np = pdev->dev.of_node;
1970
1971 dev_notice(&ndev->dev, "DaVinci EMAC: davinci_emac_remove()\n");
1972
1973 if (priv->txchan)
1974 cpdma_chan_destroy(priv->txchan);
1975 if (priv->rxchan)
1976 cpdma_chan_destroy(priv->rxchan);
1977 cpdma_ctlr_destroy(priv->dma);
1978
1979 unregister_netdev(ndev);
1980 of_node_put(priv->phy_node);
1981 pm_runtime_disable(&pdev->dev);
1982 if (of_phy_is_fixed_link(np))
1983 of_phy_deregister_fixed_link(np);
1984 free_netdev(ndev);
1985
1986 return 0;
1987 }
1988
1989 static int davinci_emac_suspend(struct device *dev)
1990 {
1991 struct net_device *ndev = dev_get_drvdata(dev);
1992
1993 if (netif_running(ndev))
1994 emac_dev_stop(ndev);
1995
1996 return 0;
1997 }
1998
1999 static int davinci_emac_resume(struct device *dev)
2000 {
2001 struct net_device *ndev = dev_get_drvdata(dev);
2002
2003 if (netif_running(ndev))
2004 emac_dev_open(ndev);
2005
2006 return 0;
2007 }
2008
2009 static const struct dev_pm_ops davinci_emac_pm_ops = {
2010 .suspend = davinci_emac_suspend,
2011 .resume = davinci_emac_resume,
2012 };
2013
2014 static const struct emac_platform_data am3517_emac_data = {
2015 .version = EMAC_VERSION_2,
2016 .hw_ram_addr = 0x01e20000,
2017 };
2018
2019 static const struct emac_platform_data dm816_emac_data = {
2020 .version = EMAC_VERSION_2,
2021 };
2022
2023 static const struct of_device_id davinci_emac_of_match[] = {
2024 {.compatible = "ti,davinci-dm6467-emac", },
2025 {.compatible = "ti,am3517-emac", .data = &am3517_emac_data, },
2026 {.compatible = "ti,dm816-emac", .data = &dm816_emac_data, },
2027 {},
2028 };
2029 MODULE_DEVICE_TABLE(of, davinci_emac_of_match);
2030
2031
2032 static struct platform_driver davinci_emac_driver = {
2033 .driver = {
2034 .name = "davinci_emac",
2035 .pm = &davinci_emac_pm_ops,
2036 .of_match_table = davinci_emac_of_match,
2037 },
2038 .probe = davinci_emac_probe,
2039 .remove = davinci_emac_remove,
2040 };
2041
2042
2043
2044
2045
2046
2047
2048 static int __init davinci_emac_init(void)
2049 {
2050 return platform_driver_register(&davinci_emac_driver);
2051 }
2052 late_initcall(davinci_emac_init);
2053
2054
2055
2056
2057
2058
2059
2060 static void __exit davinci_emac_exit(void)
2061 {
2062 platform_driver_unregister(&davinci_emac_driver);
2063 }
2064 module_exit(davinci_emac_exit);
2065
2066 MODULE_LICENSE("GPL");
2067 MODULE_AUTHOR("DaVinci EMAC Maintainer: Anant Gole <anantgole@ti.com>");
2068 MODULE_AUTHOR("DaVinci EMAC Maintainer: Chaithrika U S <chaithrika@ti.com>");
2069 MODULE_DESCRIPTION("DaVinci EMAC Ethernet driver");