xref: /openbmc/linux/drivers/net/ethernet/ti/davinci_emac.c (revision 4f2c0a4acffbec01079c28f839422e64ddeff004)
1  // SPDX-License-Identifier: GPL-2.0+
2  /*
3   * DaVinci Ethernet Medium Access Controller
4   *
5   * DaVinci EMAC is based upon CPPI 3.0 TI DMA engine
6   *
7   * Copyright (C) 2009 Texas Instruments.
8   *
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
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  /* 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)
83  
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";
90  
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 */
104  
105  #define EMAC_DEF_TXPRIO_FIXED		(1) /* TX Priority is fixed */
106  #define EMAC_DEF_TXPACING_EN		(0) /* TX pacing NOT supported*/
107  
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  
117  /* Buffer descriptor parameters */
118  #define EMAC_DEF_TX_MAX_SERVICE		(32) /* TX max service BD's */
119  #define EMAC_DEF_RX_MAX_SERVICE		(64) /* should = netdev->weight */
120  
121  /* EMAC register related defines */
122  #define EMAC_ALL_MULTI_REG_VALUE	(0xFFFFFFFF)
123  #define EMAC_NUM_MULTICAST_BITS		(64)
124  #define EMAC_TX_CONTROL_TX_ENABLE_VAL	(0x1)
125  #define EMAC_RX_CONTROL_RX_ENABLE_VAL	(0x1)
126  #define EMAC_MAC_HOST_ERR_INTMASK_VAL	(0x2)
127  #define EMAC_RX_UNICAST_CLEAR_ALL	(0xFF)
128  #define EMAC_INT_MASK_CLEAR		(0xFF)
129  
130  /* RX MBP register bit positions */
131  #define EMAC_RXMBP_PASSCRC_MASK		BIT(30)
132  #define EMAC_RXMBP_QOSEN_MASK		BIT(29)
133  #define EMAC_RXMBP_NOCHAIN_MASK		BIT(28)
134  #define EMAC_RXMBP_CMFEN_MASK		BIT(24)
135  #define EMAC_RXMBP_CSFEN_MASK		BIT(23)
136  #define EMAC_RXMBP_CEFEN_MASK		BIT(22)
137  #define EMAC_RXMBP_CAFEN_MASK		BIT(21)
138  #define EMAC_RXMBP_PROMCH_SHIFT		(16)
139  #define EMAC_RXMBP_PROMCH_MASK		(0x7 << 16)
140  #define EMAC_RXMBP_BROADEN_MASK		BIT(13)
141  #define EMAC_RXMBP_BROADCH_SHIFT	(8)
142  #define EMAC_RXMBP_BROADCH_MASK		(0x7 << 8)
143  #define EMAC_RXMBP_MULTIEN_MASK		BIT(5)
144  #define EMAC_RXMBP_MULTICH_SHIFT	(0)
145  #define EMAC_RXMBP_MULTICH_MASK		(0x7)
146  #define EMAC_RXMBP_CHMASK		(0x7)
147  
148  /* EMAC register definitions/bit maps used */
149  # define EMAC_MBP_RXPROMISC		(0x00200000)
150  # define EMAC_MBP_PROMISCCH(ch)		(((ch) & 0x7) << 16)
151  # define EMAC_MBP_RXBCAST		(0x00002000)
152  # define EMAC_MBP_BCASTCHAN(ch)		(((ch) & 0x7) << 8)
153  # define EMAC_MBP_RXMCAST		(0x00000020)
154  # define EMAC_MBP_MCASTCHAN(ch)		((ch) & 0x7)
155  
156  /* EMAC mac_control register */
157  #define EMAC_MACCONTROL_TXPTYPE		BIT(9)
158  #define EMAC_MACCONTROL_TXPACEEN	BIT(6)
159  #define EMAC_MACCONTROL_GMIIEN		BIT(5)
160  #define EMAC_MACCONTROL_GIGABITEN	BIT(7)
161  #define EMAC_MACCONTROL_FULLDUPLEXEN	BIT(0)
162  #define EMAC_MACCONTROL_RMIISPEED_MASK	BIT(15)
163  
164  /* GIGABIT MODE related bits */
165  #define EMAC_DM646X_MACCONTORL_GIG	BIT(7)
166  #define EMAC_DM646X_MACCONTORL_GIGFORCE	BIT(17)
167  
168  /* EMAC mac_status register */
169  #define EMAC_MACSTATUS_TXERRCODE_MASK	(0xF00000)
170  #define EMAC_MACSTATUS_TXERRCODE_SHIFT	(20)
171  #define EMAC_MACSTATUS_TXERRCH_MASK	(0x70000)
172  #define EMAC_MACSTATUS_TXERRCH_SHIFT	(16)
173  #define EMAC_MACSTATUS_RXERRCODE_MASK	(0xF000)
174  #define EMAC_MACSTATUS_RXERRCODE_SHIFT	(12)
175  #define EMAC_MACSTATUS_RXERRCH_MASK	(0x700)
176  #define EMAC_MACSTATUS_RXERRCH_SHIFT	(8)
177  
178  /* EMAC RX register masks */
179  #define EMAC_RX_MAX_LEN_MASK		(0xFFFF)
180  #define EMAC_RX_BUFFER_OFFSET_MASK	(0xFFFF)
181  
182  /* MAC_IN_VECTOR (0x180) register bit fields */
183  #define EMAC_DM644X_MAC_IN_VECTOR_HOST_INT	BIT(17)
184  #define EMAC_DM644X_MAC_IN_VECTOR_STATPEND_INT	BIT(16)
185  #define EMAC_DM644X_MAC_IN_VECTOR_RX_INT_VEC	BIT(8)
186  #define EMAC_DM644X_MAC_IN_VECTOR_TX_INT_VEC	BIT(0)
187  
188  /** NOTE:: For DM646x the IN_VECTOR has changed */
189  #define EMAC_DM646X_MAC_IN_VECTOR_RX_INT_VEC	BIT(EMAC_DEF_RX_CH)
190  #define EMAC_DM646X_MAC_IN_VECTOR_TX_INT_VEC	BIT(16 + EMAC_DEF_TX_CH)
191  #define EMAC_DM646X_MAC_IN_VECTOR_HOST_INT	BIT(26)
192  #define EMAC_DM646X_MAC_IN_VECTOR_STATPEND_INT	BIT(27)
193  
194  /* CPPI bit positions */
195  #define EMAC_CPPI_SOP_BIT		BIT(31)
196  #define EMAC_CPPI_EOP_BIT		BIT(30)
197  #define EMAC_CPPI_OWNERSHIP_BIT		BIT(29)
198  #define EMAC_CPPI_EOQ_BIT		BIT(28)
199  #define EMAC_CPPI_TEARDOWN_COMPLETE_BIT BIT(27)
200  #define EMAC_CPPI_PASS_CRC_BIT		BIT(26)
201  #define EMAC_RX_BD_BUF_SIZE		(0xFFFF)
202  #define EMAC_BD_LENGTH_FOR_CACHE	(16) /* only CPPI bytes */
203  #define EMAC_RX_BD_PKT_LENGTH_MASK	(0xFFFF)
204  
205  /* Max hardware defines */
206  #define EMAC_MAX_TXRX_CHANNELS		 (8)  /* Max hardware channels */
207  #define EMAC_DEF_MAX_MULTICAST_ADDRESSES (64) /* Max mcast addr's */
208  
209  /* EMAC Peripheral Device Register Memory Layout structure */
210  #define EMAC_MACINVECTOR	0x90
211  
212  #define EMAC_DM646X_MACEOIVECTOR	0x94
213  
214  #define EMAC_MACINTSTATRAW	0xB0
215  #define EMAC_MACINTSTATMASKED	0xB4
216  #define EMAC_MACINTMASKSET	0xB8
217  #define EMAC_MACINTMASKCLEAR	0xBC
218  
219  #define EMAC_RXMBPENABLE	0x100
220  #define EMAC_RXUNICASTSET	0x104
221  #define EMAC_RXUNICASTCLEAR	0x108
222  #define EMAC_RXMAXLEN		0x10C
223  #define EMAC_RXBUFFEROFFSET	0x110
224  #define EMAC_RXFILTERLOWTHRESH	0x114
225  
226  #define EMAC_MACCONTROL		0x160
227  #define EMAC_MACSTATUS		0x164
228  #define EMAC_EMCONTROL		0x168
229  #define EMAC_FIFOCONTROL	0x16C
230  #define EMAC_MACCONFIG		0x170
231  #define EMAC_SOFTRESET		0x174
232  #define EMAC_MACSRCADDRLO	0x1D0
233  #define EMAC_MACSRCADDRHI	0x1D4
234  #define EMAC_MACHASH1		0x1D8
235  #define EMAC_MACHASH2		0x1DC
236  #define EMAC_MACADDRLO		0x500
237  #define EMAC_MACADDRHI		0x504
238  #define EMAC_MACINDEX		0x508
239  
240  /* EMAC statistics registers */
241  #define EMAC_RXGOODFRAMES	0x200
242  #define EMAC_RXBCASTFRAMES	0x204
243  #define EMAC_RXMCASTFRAMES	0x208
244  #define EMAC_RXPAUSEFRAMES	0x20C
245  #define EMAC_RXCRCERRORS	0x210
246  #define EMAC_RXALIGNCODEERRORS	0x214
247  #define EMAC_RXOVERSIZED	0x218
248  #define EMAC_RXJABBER		0x21C
249  #define EMAC_RXUNDERSIZED	0x220
250  #define EMAC_RXFRAGMENTS	0x224
251  #define EMAC_RXFILTERED		0x228
252  #define EMAC_RXQOSFILTERED	0x22C
253  #define EMAC_RXOCTETS		0x230
254  #define EMAC_TXGOODFRAMES	0x234
255  #define EMAC_TXBCASTFRAMES	0x238
256  #define EMAC_TXMCASTFRAMES	0x23C
257  #define EMAC_TXPAUSEFRAMES	0x240
258  #define EMAC_TXDEFERRED		0x244
259  #define EMAC_TXCOLLISION	0x248
260  #define EMAC_TXSINGLECOLL	0x24C
261  #define EMAC_TXMULTICOLL	0x250
262  #define EMAC_TXEXCESSIVECOLL	0x254
263  #define EMAC_TXLATECOLL		0x258
264  #define EMAC_TXUNDERRUN		0x25C
265  #define EMAC_TXCARRIERSENSE	0x260
266  #define EMAC_TXOCTETS		0x264
267  #define EMAC_NETOCTETS		0x280
268  #define EMAC_RXSOFOVERRUNS	0x284
269  #define EMAC_RXMOFOVERRUNS	0x288
270  #define EMAC_RXDMAOVERRUNS	0x28C
271  
272  /* EMAC DM644x control registers */
273  #define EMAC_CTRL_EWCTL		(0x4)
274  #define EMAC_CTRL_EWINTTCNT	(0x8)
275  
276  /* EMAC DM644x control module masks */
277  #define EMAC_DM644X_EWINTCNT_MASK	0x1FFFF
278  #define EMAC_DM644X_INTMIN_INTVL	0x1
279  #define EMAC_DM644X_INTMAX_INTVL	(EMAC_DM644X_EWINTCNT_MASK)
280  
281  /* EMAC DM646X control module registers */
282  #define EMAC_DM646X_CMINTCTRL	0x0C
283  #define EMAC_DM646X_CMRXINTEN	0x14
284  #define EMAC_DM646X_CMTXINTEN	0x18
285  #define EMAC_DM646X_CMRXINTMAX	0x70
286  #define EMAC_DM646X_CMTXINTMAX	0x74
287  
288  /* EMAC DM646X control module masks */
289  #define EMAC_DM646X_INTPACEEN		(0x3 << 16)
290  #define EMAC_DM646X_INTPRESCALE_MASK	(0x7FF << 0)
291  #define EMAC_DM646X_CMINTMAX_CNT	63
292  #define EMAC_DM646X_CMINTMIN_CNT	2
293  #define EMAC_DM646X_CMINTMAX_INTVL	(1000 / EMAC_DM646X_CMINTMIN_CNT)
294  #define EMAC_DM646X_CMINTMIN_INTVL	((1000 / EMAC_DM646X_CMINTMAX_CNT) + 1)
295  
296  
297  /* EMAC EOI codes for C0 */
298  #define EMAC_DM646X_MAC_EOI_C0_RXEN	(0x01)
299  #define EMAC_DM646X_MAC_EOI_C0_TXEN	(0x02)
300  
301  /* EMAC Stats Clear Mask */
302  #define EMAC_STATS_CLR_MASK    (0xFFFFFFFF)
303  
304  /* emac_priv: EMAC private data structure
305   *
306   * EMAC adapter private data structure
307   */
308  struct emac_priv {
309  	u32 msg_enable;
310  	struct net_device *ndev;
311  	struct platform_device *pdev;
312  	struct napi_struct napi;
313  	char mac_addr[6];
314  	void __iomem *remap_addr;
315  	u32 emac_base_phys;
316  	void __iomem *emac_base;
317  	void __iomem *ctrl_base;
318  	struct cpdma_ctlr *dma;
319  	struct cpdma_chan *txchan;
320  	struct cpdma_chan *rxchan;
321  	u32 link; /* 1=link on, 0=link off */
322  	u32 speed; /* 0=Auto Neg, 1=No PHY, 10,100, 1000 - mbps */
323  	u32 duplex; /* Link duplex: 0=Half, 1=Full */
324  	u32 rx_buf_size;
325  	u32 isr_count;
326  	u32 coal_intvl;
327  	u32 bus_freq_mhz;
328  	u8 rmii_en;
329  	u8 version;
330  	u32 mac_hash1;
331  	u32 mac_hash2;
332  	u32 multicast_hash_cnt[EMAC_NUM_MULTICAST_BITS];
333  	u32 rx_addr_type;
334  	const char *phy_id;
335  	struct device_node *phy_node;
336  	spinlock_t lock;
337  	/*platform specific members*/
338  	void (*int_enable) (void);
339  	void (*int_disable) (void);
340  };
341  
342  /* EMAC TX Host Error description strings */
343  static char *emac_txhost_errcodes[16] = {
344  	"No error", "SOP error", "Ownership bit not set in SOP buffer",
345  	"Zero Next Buffer Descriptor Pointer Without EOP",
346  	"Zero Buffer Pointer", "Zero Buffer Length", "Packet Length Error",
347  	"Reserved", "Reserved", "Reserved", "Reserved", "Reserved",
348  	"Reserved", "Reserved", "Reserved", "Reserved"
349  };
350  
351  /* EMAC RX Host Error description strings */
352  static char *emac_rxhost_errcodes[16] = {
353  	"No error", "Reserved", "Ownership bit not set in input buffer",
354  	"Reserved", "Zero Buffer Pointer", "Reserved", "Reserved",
355  	"Reserved", "Reserved", "Reserved", "Reserved", "Reserved",
356  	"Reserved", "Reserved", "Reserved", "Reserved"
357  };
358  
359  /* Helper macros */
360  #define emac_read(reg)		  ioread32(priv->emac_base + (reg))
361  #define emac_write(reg, val)      iowrite32(val, priv->emac_base + (reg))
362  
363  #define emac_ctrl_read(reg)	  ioread32((priv->ctrl_base + (reg)))
364  #define emac_ctrl_write(reg, val) iowrite32(val, (priv->ctrl_base + (reg)))
365  
366  /**
367   * emac_get_drvinfo - Get EMAC driver information
368   * @ndev: The DaVinci EMAC network adapter
369   * @info: ethtool info structure containing name and version
370   *
371   * Returns EMAC driver information (name and version)
372   *
373   */
emac_get_drvinfo(struct net_device * ndev,struct ethtool_drvinfo * info)374  static void emac_get_drvinfo(struct net_device *ndev,
375  			     struct ethtool_drvinfo *info)
376  {
377  	strscpy(info->driver, emac_version_string, sizeof(info->driver));
378  	strscpy(info->version, EMAC_MODULE_VERSION, sizeof(info->version));
379  }
380  
381  /**
382   * emac_get_coalesce - Get interrupt coalesce settings for this device
383   * @ndev : The DaVinci EMAC network adapter
384   * @coal : ethtool coalesce settings structure
385   * @kernel_coal: ethtool CQE mode setting structure
386   * @extack: extack for reporting error messages
387   *
388   * Fetch the current interrupt coalesce settings
389   *
390   */
emac_get_coalesce(struct net_device * ndev,struct ethtool_coalesce * coal,struct kernel_ethtool_coalesce * kernel_coal,struct netlink_ext_ack * extack)391  static int emac_get_coalesce(struct net_device *ndev,
392  			     struct ethtool_coalesce *coal,
393  			     struct kernel_ethtool_coalesce *kernel_coal,
394  			     struct netlink_ext_ack *extack)
395  {
396  	struct emac_priv *priv = netdev_priv(ndev);
397  
398  	coal->rx_coalesce_usecs = priv->coal_intvl;
399  	return 0;
400  
401  }
402  
403  /**
404   * emac_set_coalesce - Set interrupt coalesce settings for this device
405   * @ndev : The DaVinci EMAC network adapter
406   * @coal : ethtool coalesce settings structure
407   * @kernel_coal: ethtool CQE mode setting structure
408   * @extack: extack for reporting error messages
409   *
410   * Set interrupt coalesce parameters
411   *
412   */
emac_set_coalesce(struct net_device * ndev,struct ethtool_coalesce * coal,struct kernel_ethtool_coalesce * kernel_coal,struct netlink_ext_ack * extack)413  static int emac_set_coalesce(struct net_device *ndev,
414  			     struct ethtool_coalesce *coal,
415  			     struct kernel_ethtool_coalesce *kernel_coal,
416  			     struct netlink_ext_ack *extack)
417  {
418  	struct emac_priv *priv = netdev_priv(ndev);
419  	u32 int_ctrl, num_interrupts = 0;
420  	u32 prescale = 0, addnl_dvdr = 1, coal_intvl = 0;
421  
422  	if (!coal->rx_coalesce_usecs) {
423  		priv->coal_intvl = 0;
424  
425  		switch (priv->version) {
426  		case EMAC_VERSION_2:
427  			emac_ctrl_write(EMAC_DM646X_CMINTCTRL, 0);
428  			break;
429  		default:
430  			emac_ctrl_write(EMAC_CTRL_EWINTTCNT, 0);
431  			break;
432  		}
433  
434  		return 0;
435  	}
436  
437  	coal_intvl = coal->rx_coalesce_usecs;
438  
439  	switch (priv->version) {
440  	case EMAC_VERSION_2:
441  		int_ctrl =  emac_ctrl_read(EMAC_DM646X_CMINTCTRL);
442  		prescale = priv->bus_freq_mhz * 4;
443  
444  		if (coal_intvl < EMAC_DM646X_CMINTMIN_INTVL)
445  			coal_intvl = EMAC_DM646X_CMINTMIN_INTVL;
446  
447  		if (coal_intvl > EMAC_DM646X_CMINTMAX_INTVL) {
448  			/*
449  			 * Interrupt pacer works with 4us Pulse, we can
450  			 * throttle further by dilating the 4us pulse.
451  			 */
452  			addnl_dvdr = EMAC_DM646X_INTPRESCALE_MASK / prescale;
453  
454  			if (addnl_dvdr > 1) {
455  				prescale *= addnl_dvdr;
456  				if (coal_intvl > (EMAC_DM646X_CMINTMAX_INTVL
457  							* addnl_dvdr))
458  					coal_intvl = (EMAC_DM646X_CMINTMAX_INTVL
459  							* addnl_dvdr);
460  			} else {
461  				addnl_dvdr = 1;
462  				coal_intvl = EMAC_DM646X_CMINTMAX_INTVL;
463  			}
464  		}
465  
466  		num_interrupts = (1000 * addnl_dvdr) / coal_intvl;
467  
468  		int_ctrl |= EMAC_DM646X_INTPACEEN;
469  		int_ctrl &= (~EMAC_DM646X_INTPRESCALE_MASK);
470  		int_ctrl |= (prescale & EMAC_DM646X_INTPRESCALE_MASK);
471  		emac_ctrl_write(EMAC_DM646X_CMINTCTRL, int_ctrl);
472  
473  		emac_ctrl_write(EMAC_DM646X_CMRXINTMAX, num_interrupts);
474  		emac_ctrl_write(EMAC_DM646X_CMTXINTMAX, num_interrupts);
475  
476  		break;
477  	default:
478  		int_ctrl = emac_ctrl_read(EMAC_CTRL_EWINTTCNT);
479  		int_ctrl &= (~EMAC_DM644X_EWINTCNT_MASK);
480  		prescale = coal_intvl * priv->bus_freq_mhz;
481  		if (prescale > EMAC_DM644X_EWINTCNT_MASK) {
482  			prescale = EMAC_DM644X_EWINTCNT_MASK;
483  			coal_intvl = prescale / priv->bus_freq_mhz;
484  		}
485  		emac_ctrl_write(EMAC_CTRL_EWINTTCNT, (int_ctrl | prescale));
486  
487  		break;
488  	}
489  
490  	printk(KERN_INFO"Set coalesce to %d usecs.\n", coal_intvl);
491  	priv->coal_intvl = coal_intvl;
492  
493  	return 0;
494  
495  }
496  
497  
498  /* ethtool_ops: DaVinci EMAC Ethtool structure
499   *
500   * Ethtool support for EMAC adapter
501   */
502  static const struct ethtool_ops ethtool_ops = {
503  	.supported_coalesce_params = ETHTOOL_COALESCE_RX_USECS,
504  	.get_drvinfo = emac_get_drvinfo,
505  	.get_link = ethtool_op_get_link,
506  	.get_coalesce = emac_get_coalesce,
507  	.set_coalesce =  emac_set_coalesce,
508  	.get_ts_info = ethtool_op_get_ts_info,
509  	.get_link_ksettings = phy_ethtool_get_link_ksettings,
510  	.set_link_ksettings = phy_ethtool_set_link_ksettings,
511  };
512  
513  /**
514   * emac_update_phystatus - Update Phy status
515   * @priv: The DaVinci EMAC private adapter structure
516   *
517   * Updates phy status and takes action for network queue if required
518   * based upon link status
519   *
520   */
emac_update_phystatus(struct emac_priv * priv)521  static void emac_update_phystatus(struct emac_priv *priv)
522  {
523  	u32 mac_control;
524  	u32 new_duplex;
525  	u32 cur_duplex;
526  	struct net_device *ndev = priv->ndev;
527  
528  	mac_control = emac_read(EMAC_MACCONTROL);
529  	cur_duplex = (mac_control & EMAC_MACCONTROL_FULLDUPLEXEN) ?
530  			DUPLEX_FULL : DUPLEX_HALF;
531  	if (ndev->phydev)
532  		new_duplex = ndev->phydev->duplex;
533  	else
534  		new_duplex = DUPLEX_FULL;
535  
536  	/* We get called only if link has changed (speed/duplex/status) */
537  	if ((priv->link) && (new_duplex != cur_duplex)) {
538  		priv->duplex = new_duplex;
539  		if (DUPLEX_FULL == priv->duplex)
540  			mac_control |= (EMAC_MACCONTROL_FULLDUPLEXEN);
541  		else
542  			mac_control &= ~(EMAC_MACCONTROL_FULLDUPLEXEN);
543  	}
544  
545  	if (priv->speed == SPEED_1000 && (priv->version == EMAC_VERSION_2)) {
546  		mac_control = emac_read(EMAC_MACCONTROL);
547  		mac_control |= (EMAC_DM646X_MACCONTORL_GIG |
548  				EMAC_DM646X_MACCONTORL_GIGFORCE);
549  	} else {
550  		/* Clear the GIG bit and GIGFORCE bit */
551  		mac_control &= ~(EMAC_DM646X_MACCONTORL_GIGFORCE |
552  					EMAC_DM646X_MACCONTORL_GIG);
553  
554  		if (priv->rmii_en && (priv->speed == SPEED_100))
555  			mac_control |= EMAC_MACCONTROL_RMIISPEED_MASK;
556  		else
557  			mac_control &= ~EMAC_MACCONTROL_RMIISPEED_MASK;
558  	}
559  
560  	/* Update mac_control if changed */
561  	emac_write(EMAC_MACCONTROL, mac_control);
562  
563  	if (priv->link) {
564  		/* link ON */
565  		if (!netif_carrier_ok(ndev))
566  			netif_carrier_on(ndev);
567  	/* reactivate the transmit queue if it is stopped */
568  		if (netif_running(ndev) && netif_queue_stopped(ndev))
569  			netif_wake_queue(ndev);
570  	} else {
571  		/* link OFF */
572  		if (netif_carrier_ok(ndev))
573  			netif_carrier_off(ndev);
574  		if (!netif_queue_stopped(ndev))
575  			netif_stop_queue(ndev);
576  	}
577  }
578  
579  /**
580   * hash_get - Calculate hash value from mac address
581   * @addr: mac address to delete from hash table
582   *
583   * Calculates hash value from mac address
584   *
585   */
hash_get(u8 * addr)586  static u32 hash_get(u8 *addr)
587  {
588  	u32 hash;
589  	u8 tmpval;
590  	int cnt;
591  	hash = 0;
592  
593  	for (cnt = 0; cnt < 2; cnt++) {
594  		tmpval = *addr++;
595  		hash ^= (tmpval >> 2) ^ (tmpval << 4);
596  		tmpval = *addr++;
597  		hash ^= (tmpval >> 4) ^ (tmpval << 2);
598  		tmpval = *addr++;
599  		hash ^= (tmpval >> 6) ^ (tmpval);
600  	}
601  
602  	return hash & 0x3F;
603  }
604  
605  /**
606   * emac_hash_add - Hash function to add mac addr from hash table
607   * @priv: The DaVinci EMAC private adapter structure
608   * @mac_addr: mac address to delete from hash table
609   *
610   * Adds mac address to the internal hash table
611   *
612   */
emac_hash_add(struct emac_priv * priv,u8 * mac_addr)613  static int emac_hash_add(struct emac_priv *priv, u8 *mac_addr)
614  {
615  	struct device *emac_dev = &priv->ndev->dev;
616  	u32 rc = 0;
617  	u32 hash_bit;
618  	u32 hash_value = hash_get(mac_addr);
619  
620  	if (hash_value >= EMAC_NUM_MULTICAST_BITS) {
621  		if (netif_msg_drv(priv)) {
622  			dev_err(emac_dev, "DaVinci EMAC: emac_hash_add(): Invalid "\
623  				"Hash %08x, should not be greater than %08x",
624  				hash_value, (EMAC_NUM_MULTICAST_BITS - 1));
625  		}
626  		return -1;
627  	}
628  
629  	/* set the hash bit only if not previously set */
630  	if (priv->multicast_hash_cnt[hash_value] == 0) {
631  		rc = 1; /* hash value changed */
632  		if (hash_value < 32) {
633  			hash_bit = BIT(hash_value);
634  			priv->mac_hash1 |= hash_bit;
635  		} else {
636  			hash_bit = BIT((hash_value - 32));
637  			priv->mac_hash2 |= hash_bit;
638  		}
639  	}
640  
641  	/* incr counter for num of mcast addr's mapped to "this" hash bit */
642  	++priv->multicast_hash_cnt[hash_value];
643  
644  	return rc;
645  }
646  
647  /**
648   * emac_hash_del - Hash function to delete mac addr from hash table
649   * @priv: The DaVinci EMAC private adapter structure
650   * @mac_addr: mac address to delete from hash table
651   *
652   * Removes mac address from the internal hash table
653   *
654   */
emac_hash_del(struct emac_priv * priv,u8 * mac_addr)655  static int emac_hash_del(struct emac_priv *priv, u8 *mac_addr)
656  {
657  	u32 hash_value;
658  	u32 hash_bit;
659  
660  	hash_value = hash_get(mac_addr);
661  	if (priv->multicast_hash_cnt[hash_value] > 0) {
662  		/* dec cntr for num of mcast addr's mapped to this hash bit */
663  		--priv->multicast_hash_cnt[hash_value];
664  	}
665  
666  	/* if counter still > 0, at least one multicast address refers
667  	 * to this hash bit. so return 0 */
668  	if (priv->multicast_hash_cnt[hash_value] > 0)
669  		return 0;
670  
671  	if (hash_value < 32) {
672  		hash_bit = BIT(hash_value);
673  		priv->mac_hash1 &= ~hash_bit;
674  	} else {
675  		hash_bit = BIT((hash_value - 32));
676  		priv->mac_hash2 &= ~hash_bit;
677  	}
678  
679  	/* return 1 to indicate change in mac_hash registers reqd */
680  	return 1;
681  }
682  
683  /* EMAC multicast operation */
684  #define EMAC_MULTICAST_ADD	0
685  #define EMAC_MULTICAST_DEL	1
686  #define EMAC_ALL_MULTI_SET	2
687  #define EMAC_ALL_MULTI_CLR	3
688  
689  /**
690   * emac_add_mcast - Set multicast address in the EMAC adapter (Internal)
691   * @priv: The DaVinci EMAC private adapter structure
692   * @action: multicast operation to perform
693   * @mac_addr: mac address to set
694   *
695   * Set multicast addresses in EMAC adapter - internal function
696   *
697   */
emac_add_mcast(struct emac_priv * priv,u32 action,u8 * mac_addr)698  static void emac_add_mcast(struct emac_priv *priv, u32 action, u8 *mac_addr)
699  {
700  	struct device *emac_dev = &priv->ndev->dev;
701  	int update = -1;
702  
703  	switch (action) {
704  	case EMAC_MULTICAST_ADD:
705  		update = emac_hash_add(priv, mac_addr);
706  		break;
707  	case EMAC_MULTICAST_DEL:
708  		update = emac_hash_del(priv, mac_addr);
709  		break;
710  	case EMAC_ALL_MULTI_SET:
711  		update = 1;
712  		priv->mac_hash1 = EMAC_ALL_MULTI_REG_VALUE;
713  		priv->mac_hash2 = EMAC_ALL_MULTI_REG_VALUE;
714  		break;
715  	case EMAC_ALL_MULTI_CLR:
716  		update = 1;
717  		priv->mac_hash1 = 0;
718  		priv->mac_hash2 = 0;
719  		memset(&(priv->multicast_hash_cnt[0]), 0,
720  		sizeof(priv->multicast_hash_cnt[0]) *
721  		       EMAC_NUM_MULTICAST_BITS);
722  		break;
723  	default:
724  		if (netif_msg_drv(priv))
725  			dev_err(emac_dev, "DaVinci EMAC: add_mcast"\
726  				": bad operation %d", action);
727  		break;
728  	}
729  
730  	/* write to the hardware only if the register status chances */
731  	if (update > 0) {
732  		emac_write(EMAC_MACHASH1, priv->mac_hash1);
733  		emac_write(EMAC_MACHASH2, priv->mac_hash2);
734  	}
735  }
736  
737  /**
738   * emac_dev_mcast_set - Set multicast address in the EMAC adapter
739   * @ndev: The DaVinci EMAC network adapter
740   *
741   * Set multicast addresses in EMAC adapter
742   *
743   */
emac_dev_mcast_set(struct net_device * ndev)744  static void emac_dev_mcast_set(struct net_device *ndev)
745  {
746  	u32 mbp_enable;
747  	struct emac_priv *priv = netdev_priv(ndev);
748  
749  	mbp_enable = emac_read(EMAC_RXMBPENABLE);
750  	if (ndev->flags & IFF_PROMISC) {
751  		mbp_enable &= (~EMAC_MBP_PROMISCCH(EMAC_DEF_PROM_CH));
752  		mbp_enable |= (EMAC_MBP_RXPROMISC);
753  	} else {
754  		mbp_enable = (mbp_enable & ~EMAC_MBP_RXPROMISC);
755  		if ((ndev->flags & IFF_ALLMULTI) ||
756  		    netdev_mc_count(ndev) > EMAC_DEF_MAX_MULTICAST_ADDRESSES) {
757  			mbp_enable = (mbp_enable | EMAC_MBP_RXMCAST);
758  			emac_add_mcast(priv, EMAC_ALL_MULTI_SET, NULL);
759  		} else if (!netdev_mc_empty(ndev)) {
760  			struct netdev_hw_addr *ha;
761  
762  			mbp_enable = (mbp_enable | EMAC_MBP_RXMCAST);
763  			emac_add_mcast(priv, EMAC_ALL_MULTI_CLR, NULL);
764  			/* program multicast address list into EMAC hardware */
765  			netdev_for_each_mc_addr(ha, ndev) {
766  				emac_add_mcast(priv, EMAC_MULTICAST_ADD,
767  					       (u8 *) ha->addr);
768  			}
769  		} else {
770  			mbp_enable = (mbp_enable & ~EMAC_MBP_RXMCAST);
771  			emac_add_mcast(priv, EMAC_ALL_MULTI_CLR, NULL);
772  		}
773  	}
774  	/* Set mbp config register */
775  	emac_write(EMAC_RXMBPENABLE, mbp_enable);
776  }
777  
778  /*************************************************************************
779   *  EMAC Hardware manipulation
780   *************************************************************************/
781  
782  /**
783   * emac_int_disable - Disable EMAC module interrupt (from adapter)
784   * @priv: The DaVinci EMAC private adapter structure
785   *
786   * Disable EMAC interrupt on the adapter
787   *
788   */
emac_int_disable(struct emac_priv * priv)789  static void emac_int_disable(struct emac_priv *priv)
790  {
791  	if (priv->version == EMAC_VERSION_2) {
792  		unsigned long flags;
793  
794  		local_irq_save(flags);
795  
796  		/* Program C0_Int_En to zero to turn off
797  		* interrupts to the CPU */
798  		emac_ctrl_write(EMAC_DM646X_CMRXINTEN, 0x0);
799  		emac_ctrl_write(EMAC_DM646X_CMTXINTEN, 0x0);
800  		/* NOTE: Rx Threshold and Misc interrupts are not disabled */
801  		if (priv->int_disable)
802  			priv->int_disable();
803  
804  		/* NOTE: Rx Threshold and Misc interrupts are not enabled */
805  
806  		/* ack rxen only then a new pulse will be generated */
807  		emac_write(EMAC_DM646X_MACEOIVECTOR,
808  			EMAC_DM646X_MAC_EOI_C0_RXEN);
809  
810  		/* ack txen- only then a new pulse will be generated */
811  		emac_write(EMAC_DM646X_MACEOIVECTOR,
812  			EMAC_DM646X_MAC_EOI_C0_TXEN);
813  
814  		local_irq_restore(flags);
815  
816  	} else {
817  		/* Set DM644x control registers for interrupt control */
818  		emac_ctrl_write(EMAC_CTRL_EWCTL, 0x0);
819  	}
820  }
821  
822  /**
823   * emac_int_enable - Enable EMAC module interrupt (from adapter)
824   * @priv: The DaVinci EMAC private adapter structure
825   *
826   * Enable EMAC interrupt on the adapter
827   *
828   */
emac_int_enable(struct emac_priv * priv)829  static void emac_int_enable(struct emac_priv *priv)
830  {
831  	if (priv->version == EMAC_VERSION_2) {
832  		if (priv->int_enable)
833  			priv->int_enable();
834  
835  		emac_ctrl_write(EMAC_DM646X_CMRXINTEN, 0xff);
836  		emac_ctrl_write(EMAC_DM646X_CMTXINTEN, 0xff);
837  
838  		/* In addition to turning on interrupt Enable, we need
839  		 * ack by writing appropriate values to the EOI
840  		 * register */
841  
842  		/* NOTE: Rx Threshold and Misc interrupts are not enabled */
843  	} else {
844  		/* Set DM644x control registers for interrupt control */
845  		emac_ctrl_write(EMAC_CTRL_EWCTL, 0x1);
846  	}
847  }
848  
849  /**
850   * emac_irq - EMAC interrupt handler
851   * @irq: interrupt number
852   * @dev_id: EMAC network adapter data structure ptr
853   *
854   * EMAC Interrupt handler - we only schedule NAPI and not process any packets
855   * here. EVen the interrupt status is checked (TX/RX/Err) in NAPI poll function
856   *
857   * Returns interrupt handled condition
858   */
emac_irq(int irq,void * dev_id)859  static irqreturn_t emac_irq(int irq, void *dev_id)
860  {
861  	struct net_device *ndev = (struct net_device *)dev_id;
862  	struct emac_priv *priv = netdev_priv(ndev);
863  
864  	++priv->isr_count;
865  	if (likely(netif_running(priv->ndev))) {
866  		emac_int_disable(priv);
867  		napi_schedule(&priv->napi);
868  	} else {
869  		/* we are closing down, so dont process anything */
870  	}
871  	return IRQ_HANDLED;
872  }
873  
emac_rx_alloc(struct emac_priv * priv)874  static struct sk_buff *emac_rx_alloc(struct emac_priv *priv)
875  {
876  	struct sk_buff *skb = netdev_alloc_skb(priv->ndev, priv->rx_buf_size);
877  	if (WARN_ON(!skb))
878  		return NULL;
879  	skb_reserve(skb, NET_IP_ALIGN);
880  	return skb;
881  }
882  
emac_rx_handler(void * token,int len,int status)883  static void emac_rx_handler(void *token, int len, int status)
884  {
885  	struct sk_buff		*skb = token;
886  	struct net_device	*ndev = skb->dev;
887  	struct emac_priv	*priv = netdev_priv(ndev);
888  	struct device		*emac_dev = &ndev->dev;
889  	int			ret;
890  
891  	/* free and bail if we are shutting down */
892  	if (unlikely(!netif_running(ndev))) {
893  		dev_kfree_skb_any(skb);
894  		return;
895  	}
896  
897  	/* recycle on receive error */
898  	if (status < 0) {
899  		ndev->stats.rx_errors++;
900  		goto recycle;
901  	}
902  
903  	/* feed received packet up the stack */
904  	skb_put(skb, len);
905  	skb->protocol = eth_type_trans(skb, ndev);
906  	netif_receive_skb(skb);
907  	ndev->stats.rx_bytes += len;
908  	ndev->stats.rx_packets++;
909  
910  	/* alloc a new packet for receive */
911  	skb = emac_rx_alloc(priv);
912  	if (!skb) {
913  		if (netif_msg_rx_err(priv) && net_ratelimit())
914  			dev_err(emac_dev, "failed rx buffer alloc\n");
915  		return;
916  	}
917  
918  recycle:
919  	ret = cpdma_chan_submit(priv->rxchan, skb, skb->data,
920  			skb_tailroom(skb), 0);
921  
922  	WARN_ON(ret == -ENOMEM);
923  	if (unlikely(ret < 0))
924  		dev_kfree_skb_any(skb);
925  }
926  
emac_tx_handler(void * token,int len,int status)927  static void emac_tx_handler(void *token, int len, int status)
928  {
929  	struct sk_buff		*skb = token;
930  	struct net_device	*ndev = skb->dev;
931  
932  	/* Check whether the queue is stopped due to stalled tx dma, if the
933  	 * queue is stopped then start the queue as we have free desc for tx
934  	 */
935  	if (unlikely(netif_queue_stopped(ndev)))
936  		netif_wake_queue(ndev);
937  	ndev->stats.tx_packets++;
938  	ndev->stats.tx_bytes += len;
939  	dev_kfree_skb_any(skb);
940  }
941  
942  /**
943   * emac_dev_xmit - EMAC Transmit function
944   * @skb: SKB pointer
945   * @ndev: The DaVinci EMAC network adapter
946   *
947   * Called by the system to transmit a packet  - we queue the packet in
948   * EMAC hardware transmit queue
949   *
950   * Returns success(NETDEV_TX_OK) or error code (typically out of desc's)
951   */
emac_dev_xmit(struct sk_buff * skb,struct net_device * ndev)952  static netdev_tx_t emac_dev_xmit(struct sk_buff *skb, struct net_device *ndev)
953  {
954  	struct device *emac_dev = &ndev->dev;
955  	int ret_code;
956  	struct emac_priv *priv = netdev_priv(ndev);
957  
958  	/* If no link, return */
959  	if (unlikely(!priv->link)) {
960  		if (netif_msg_tx_err(priv) && net_ratelimit())
961  			dev_err(emac_dev, "DaVinci EMAC: No link to transmit");
962  		goto fail_tx;
963  	}
964  
965  	ret_code = skb_put_padto(skb, EMAC_DEF_MIN_ETHPKTSIZE);
966  	if (unlikely(ret_code < 0)) {
967  		if (netif_msg_tx_err(priv) && net_ratelimit())
968  			dev_err(emac_dev, "DaVinci EMAC: packet pad failed");
969  		goto fail_tx;
970  	}
971  
972  	skb_tx_timestamp(skb);
973  
974  	ret_code = cpdma_chan_submit(priv->txchan, skb, skb->data, skb->len,
975  				     0);
976  	if (unlikely(ret_code != 0)) {
977  		if (netif_msg_tx_err(priv) && net_ratelimit())
978  			dev_err(emac_dev, "DaVinci EMAC: desc submit failed");
979  		goto fail_tx;
980  	}
981  
982  	/* If there is no more tx desc left free then we need to
983  	 * tell the kernel to stop sending us tx frames.
984  	 */
985  	if (unlikely(!cpdma_check_free_tx_desc(priv->txchan)))
986  		netif_stop_queue(ndev);
987  
988  	return NETDEV_TX_OK;
989  
990  fail_tx:
991  	ndev->stats.tx_dropped++;
992  	netif_stop_queue(ndev);
993  	return NETDEV_TX_BUSY;
994  }
995  
996  /**
997   * emac_dev_tx_timeout - EMAC Transmit timeout function
998   * @ndev: The DaVinci EMAC network adapter
999   * @txqueue: the index of the hung transmit queue
1000   *
1001   * Called when system detects that a skb timeout period has expired
1002   * potentially due to a fault in the adapter in not being able to send
1003   * it out on the wire. We teardown the TX channel assuming a hardware
1004   * error and re-initialize the TX channel for hardware operation
1005   *
1006   */
emac_dev_tx_timeout(struct net_device * ndev,unsigned int txqueue)1007  static void emac_dev_tx_timeout(struct net_device *ndev, unsigned int txqueue)
1008  {
1009  	struct emac_priv *priv = netdev_priv(ndev);
1010  	struct device *emac_dev = &ndev->dev;
1011  
1012  	if (netif_msg_tx_err(priv))
1013  		dev_err(emac_dev, "DaVinci EMAC: xmit timeout, restarting TX");
1014  
1015  	ndev->stats.tx_errors++;
1016  	emac_int_disable(priv);
1017  	cpdma_chan_stop(priv->txchan);
1018  	cpdma_chan_start(priv->txchan);
1019  	emac_int_enable(priv);
1020  }
1021  
1022  /**
1023   * emac_set_type0addr - Set EMAC Type0 mac address
1024   * @priv: The DaVinci EMAC private adapter structure
1025   * @ch: RX channel number
1026   * @mac_addr: MAC address to set in device
1027   *
1028   * Called internally to set Type0 mac address of the adapter (Device)
1029   *
1030   * Returns success (0) or appropriate error code (none as of now)
1031   */
emac_set_type0addr(struct emac_priv * priv,u32 ch,char * mac_addr)1032  static void emac_set_type0addr(struct emac_priv *priv, u32 ch, char *mac_addr)
1033  {
1034  	u32 val;
1035  	val = ((mac_addr[5] << 8) | (mac_addr[4]));
1036  	emac_write(EMAC_MACSRCADDRLO, val);
1037  
1038  	val = ((mac_addr[3] << 24) | (mac_addr[2] << 16) | \
1039  	       (mac_addr[1] << 8) | (mac_addr[0]));
1040  	emac_write(EMAC_MACSRCADDRHI, val);
1041  	val = emac_read(EMAC_RXUNICASTSET);
1042  	val |= BIT(ch);
1043  	emac_write(EMAC_RXUNICASTSET, val);
1044  	val = emac_read(EMAC_RXUNICASTCLEAR);
1045  	val &= ~BIT(ch);
1046  	emac_write(EMAC_RXUNICASTCLEAR, val);
1047  }
1048  
1049  /**
1050   * emac_set_type1addr - Set EMAC Type1 mac address
1051   * @priv: The DaVinci EMAC private adapter structure
1052   * @ch: RX channel number
1053   * @mac_addr: MAC address to set in device
1054   *
1055   * Called internally to set Type1 mac address of the adapter (Device)
1056   *
1057   * Returns success (0) or appropriate error code (none as of now)
1058   */
emac_set_type1addr(struct emac_priv * priv,u32 ch,char * mac_addr)1059  static void emac_set_type1addr(struct emac_priv *priv, u32 ch, char *mac_addr)
1060  {
1061  	u32 val;
1062  	emac_write(EMAC_MACINDEX, ch);
1063  	val = ((mac_addr[5] << 8) | mac_addr[4]);
1064  	emac_write(EMAC_MACADDRLO, val);
1065  	val = ((mac_addr[3] << 24) | (mac_addr[2] << 16) | \
1066  	       (mac_addr[1] << 8) | (mac_addr[0]));
1067  	emac_write(EMAC_MACADDRHI, val);
1068  	emac_set_type0addr(priv, ch, mac_addr);
1069  }
1070  
1071  /**
1072   * emac_set_type2addr - Set EMAC Type2 mac address
1073   * @priv: The DaVinci EMAC private adapter structure
1074   * @ch: RX channel number
1075   * @mac_addr: MAC address to set in device
1076   * @index: index into RX address entries
1077   * @match: match parameter for RX address matching logic
1078   *
1079   * Called internally to set Type2 mac address of the adapter (Device)
1080   *
1081   * Returns success (0) or appropriate error code (none as of now)
1082   */
emac_set_type2addr(struct emac_priv * priv,u32 ch,char * mac_addr,int index,int match)1083  static void emac_set_type2addr(struct emac_priv *priv, u32 ch,
1084  			       char *mac_addr, int index, int match)
1085  {
1086  	u32 val;
1087  	emac_write(EMAC_MACINDEX, index);
1088  	val = ((mac_addr[3] << 24) | (mac_addr[2] << 16) | \
1089  	       (mac_addr[1] << 8) | (mac_addr[0]));
1090  	emac_write(EMAC_MACADDRHI, val);
1091  	val = ((mac_addr[5] << 8) | mac_addr[4] | ((ch & 0x7) << 16) | \
1092  	       (match << 19) | BIT(20));
1093  	emac_write(EMAC_MACADDRLO, val);
1094  	emac_set_type0addr(priv, ch, mac_addr);
1095  }
1096  
1097  /**
1098   * emac_setmac - Set mac address in the adapter (internal function)
1099   * @priv: The DaVinci EMAC private adapter structure
1100   * @ch: RX channel number
1101   * @mac_addr: MAC address to set in device
1102   *
1103   * Called internally to set the mac address of the adapter (Device)
1104   *
1105   * Returns success (0) or appropriate error code (none as of now)
1106   */
emac_setmac(struct emac_priv * priv,u32 ch,char * mac_addr)1107  static void emac_setmac(struct emac_priv *priv, u32 ch, char *mac_addr)
1108  {
1109  	struct device *emac_dev = &priv->ndev->dev;
1110  
1111  	if (priv->rx_addr_type == 0) {
1112  		emac_set_type0addr(priv, ch, mac_addr);
1113  	} else if (priv->rx_addr_type == 1) {
1114  		u32 cnt;
1115  		for (cnt = 0; cnt < EMAC_MAX_TXRX_CHANNELS; cnt++)
1116  			emac_set_type1addr(priv, ch, mac_addr);
1117  	} else if (priv->rx_addr_type == 2) {
1118  		emac_set_type2addr(priv, ch, mac_addr, ch, 1);
1119  		emac_set_type0addr(priv, ch, mac_addr);
1120  	} else {
1121  		if (netif_msg_drv(priv))
1122  			dev_err(emac_dev, "DaVinci EMAC: Wrong addressing\n");
1123  	}
1124  }
1125  
1126  /**
1127   * emac_dev_setmac_addr - Set mac address in the adapter
1128   * @ndev: The DaVinci EMAC network adapter
1129   * @addr: MAC address to set in device
1130   *
1131   * Called by the system to set the mac address of the adapter (Device)
1132   *
1133   * Returns success (0) or appropriate error code (none as of now)
1134   */
emac_dev_setmac_addr(struct net_device * ndev,void * addr)1135  static int emac_dev_setmac_addr(struct net_device *ndev, void *addr)
1136  {
1137  	struct emac_priv *priv = netdev_priv(ndev);
1138  	struct device *emac_dev = &priv->ndev->dev;
1139  	struct sockaddr *sa = addr;
1140  
1141  	if (!is_valid_ether_addr(sa->sa_data))
1142  		return -EADDRNOTAVAIL;
1143  
1144  	/* Store mac addr in priv and rx channel and set it in EMAC hw */
1145  	memcpy(priv->mac_addr, sa->sa_data, ndev->addr_len);
1146  	eth_hw_addr_set(ndev, sa->sa_data);
1147  
1148  	/* MAC address is configured only after the interface is enabled. */
1149  	if (netif_running(ndev)) {
1150  		emac_setmac(priv, EMAC_DEF_RX_CH, priv->mac_addr);
1151  	}
1152  
1153  	if (netif_msg_drv(priv))
1154  		dev_notice(emac_dev, "DaVinci EMAC: emac_dev_setmac_addr %pM\n",
1155  					priv->mac_addr);
1156  
1157  	return 0;
1158  }
1159  
1160  /**
1161   * emac_hw_enable - Enable EMAC hardware for packet transmission/reception
1162   * @priv: The DaVinci EMAC private adapter structure
1163   *
1164   * Enables EMAC hardware for packet processing - enables PHY, enables RX
1165   * for packet reception and enables device interrupts and then NAPI
1166   *
1167   * Returns success (0) or appropriate error code (none right now)
1168   */
emac_hw_enable(struct emac_priv * priv)1169  static int emac_hw_enable(struct emac_priv *priv)
1170  {
1171  	u32 val, mbp_enable, mac_control;
1172  
1173  	/* Soft reset */
1174  	emac_write(EMAC_SOFTRESET, 1);
1175  	while (emac_read(EMAC_SOFTRESET))
1176  		cpu_relax();
1177  
1178  	/* Disable interrupt & Set pacing for more interrupts initially */
1179  	emac_int_disable(priv);
1180  
1181  	/* Full duplex enable bit set when auto negotiation happens */
1182  	mac_control =
1183  		(((EMAC_DEF_TXPRIO_FIXED) ? (EMAC_MACCONTROL_TXPTYPE) : 0x0) |
1184  		((priv->speed == 1000) ? EMAC_MACCONTROL_GIGABITEN : 0x0) |
1185  		((EMAC_DEF_TXPACING_EN) ? (EMAC_MACCONTROL_TXPACEEN) : 0x0) |
1186  		((priv->duplex == DUPLEX_FULL) ? 0x1 : 0));
1187  	emac_write(EMAC_MACCONTROL, mac_control);
1188  
1189  	mbp_enable =
1190  		(((EMAC_DEF_PASS_CRC) ? (EMAC_RXMBP_PASSCRC_MASK) : 0x0) |
1191  		((EMAC_DEF_QOS_EN) ? (EMAC_RXMBP_QOSEN_MASK) : 0x0) |
1192  		 ((EMAC_DEF_NO_BUFF_CHAIN) ? (EMAC_RXMBP_NOCHAIN_MASK) : 0x0) |
1193  		 ((EMAC_DEF_MACCTRL_FRAME_EN) ? (EMAC_RXMBP_CMFEN_MASK) : 0x0) |
1194  		 ((EMAC_DEF_SHORT_FRAME_EN) ? (EMAC_RXMBP_CSFEN_MASK) : 0x0) |
1195  		 ((EMAC_DEF_ERROR_FRAME_EN) ? (EMAC_RXMBP_CEFEN_MASK) : 0x0) |
1196  		 ((EMAC_DEF_PROM_EN) ? (EMAC_RXMBP_CAFEN_MASK) : 0x0) |
1197  		 ((EMAC_DEF_PROM_CH & EMAC_RXMBP_CHMASK) << \
1198  			EMAC_RXMBP_PROMCH_SHIFT) |
1199  		 ((EMAC_DEF_BCAST_EN) ? (EMAC_RXMBP_BROADEN_MASK) : 0x0) |
1200  		 ((EMAC_DEF_BCAST_CH & EMAC_RXMBP_CHMASK) << \
1201  			EMAC_RXMBP_BROADCH_SHIFT) |
1202  		 ((EMAC_DEF_MCAST_EN) ? (EMAC_RXMBP_MULTIEN_MASK) : 0x0) |
1203  		 ((EMAC_DEF_MCAST_CH & EMAC_RXMBP_CHMASK) << \
1204  			EMAC_RXMBP_MULTICH_SHIFT));
1205  	emac_write(EMAC_RXMBPENABLE, mbp_enable);
1206  	emac_write(EMAC_RXMAXLEN, (EMAC_DEF_MAX_FRAME_SIZE &
1207  				   EMAC_RX_MAX_LEN_MASK));
1208  	emac_write(EMAC_RXBUFFEROFFSET, (EMAC_DEF_BUFFER_OFFSET &
1209  					 EMAC_RX_BUFFER_OFFSET_MASK));
1210  	emac_write(EMAC_RXFILTERLOWTHRESH, 0);
1211  	emac_write(EMAC_RXUNICASTCLEAR, EMAC_RX_UNICAST_CLEAR_ALL);
1212  	priv->rx_addr_type = (emac_read(EMAC_MACCONFIG) >> 8) & 0xFF;
1213  
1214  	emac_write(EMAC_MACINTMASKSET, EMAC_MAC_HOST_ERR_INTMASK_VAL);
1215  
1216  	emac_setmac(priv, EMAC_DEF_RX_CH, priv->mac_addr);
1217  
1218  	/* Enable MII */
1219  	val = emac_read(EMAC_MACCONTROL);
1220  	val |= (EMAC_MACCONTROL_GMIIEN);
1221  	emac_write(EMAC_MACCONTROL, val);
1222  
1223  	/* Enable NAPI and interrupts */
1224  	napi_enable(&priv->napi);
1225  	emac_int_enable(priv);
1226  	return 0;
1227  
1228  }
1229  
1230  /**
1231   * emac_poll - EMAC NAPI Poll function
1232   * @napi: pointer to the napi_struct containing The DaVinci EMAC network adapter
1233   * @budget: Number of receive packets to process (as told by NAPI layer)
1234   *
1235   * NAPI Poll function implemented to process packets as per budget. We check
1236   * the type of interrupt on the device and accordingly call the TX or RX
1237   * packet processing functions. We follow the budget for RX processing and
1238   * also put a cap on number of TX pkts processed through config param. The
1239   * NAPI schedule function is called if more packets pending.
1240   *
1241   * Returns number of packets received (in most cases; else TX pkts - rarely)
1242   */
emac_poll(struct napi_struct * napi,int budget)1243  static int emac_poll(struct napi_struct *napi, int budget)
1244  {
1245  	unsigned int mask;
1246  	struct emac_priv *priv = container_of(napi, struct emac_priv, napi);
1247  	struct net_device *ndev = priv->ndev;
1248  	struct device *emac_dev = &ndev->dev;
1249  	u32 status = 0;
1250  	u32 num_rx_pkts = 0;
1251  
1252  	/* Check interrupt vectors and call packet processing */
1253  	status = emac_read(EMAC_MACINVECTOR);
1254  
1255  	mask = EMAC_DM644X_MAC_IN_VECTOR_TX_INT_VEC;
1256  
1257  	if (priv->version == EMAC_VERSION_2)
1258  		mask = EMAC_DM646X_MAC_IN_VECTOR_TX_INT_VEC;
1259  
1260  	if (status & mask) {
1261  		cpdma_chan_process(priv->txchan, EMAC_DEF_TX_MAX_SERVICE);
1262  	} /* TX processing */
1263  
1264  	mask = EMAC_DM644X_MAC_IN_VECTOR_RX_INT_VEC;
1265  
1266  	if (priv->version == EMAC_VERSION_2)
1267  		mask = EMAC_DM646X_MAC_IN_VECTOR_RX_INT_VEC;
1268  
1269  	if (status & mask) {
1270  		num_rx_pkts = cpdma_chan_process(priv->rxchan, budget);
1271  	} /* RX processing */
1272  
1273  	mask = EMAC_DM644X_MAC_IN_VECTOR_HOST_INT;
1274  	if (priv->version == EMAC_VERSION_2)
1275  		mask = EMAC_DM646X_MAC_IN_VECTOR_HOST_INT;
1276  
1277  	if (unlikely(status & mask)) {
1278  		u32 ch, cause;
1279  		dev_err(emac_dev, "DaVinci EMAC: Fatal Hardware Error\n");
1280  		netif_stop_queue(ndev);
1281  		napi_disable(&priv->napi);
1282  
1283  		status = emac_read(EMAC_MACSTATUS);
1284  		cause = ((status & EMAC_MACSTATUS_TXERRCODE_MASK) >>
1285  			 EMAC_MACSTATUS_TXERRCODE_SHIFT);
1286  		if (cause) {
1287  			ch = ((status & EMAC_MACSTATUS_TXERRCH_MASK) >>
1288  			      EMAC_MACSTATUS_TXERRCH_SHIFT);
1289  			if (net_ratelimit()) {
1290  				dev_err(emac_dev, "TX Host error %s on ch=%d\n",
1291  					&emac_txhost_errcodes[cause][0], ch);
1292  			}
1293  		}
1294  		cause = ((status & EMAC_MACSTATUS_RXERRCODE_MASK) >>
1295  			 EMAC_MACSTATUS_RXERRCODE_SHIFT);
1296  		if (cause) {
1297  			ch = ((status & EMAC_MACSTATUS_RXERRCH_MASK) >>
1298  			      EMAC_MACSTATUS_RXERRCH_SHIFT);
1299  			if (netif_msg_hw(priv) && net_ratelimit())
1300  				dev_err(emac_dev, "RX Host error %s on ch=%d\n",
1301  					&emac_rxhost_errcodes[cause][0], ch);
1302  		}
1303  	} else if (num_rx_pkts < budget) {
1304  		napi_complete_done(napi, num_rx_pkts);
1305  		emac_int_enable(priv);
1306  	}
1307  
1308  	return num_rx_pkts;
1309  }
1310  
1311  #ifdef CONFIG_NET_POLL_CONTROLLER
1312  /**
1313   * emac_poll_controller - EMAC Poll controller function
1314   * @ndev: The DaVinci EMAC network adapter
1315   *
1316   * Polled functionality used by netconsole and others in non interrupt mode
1317   *
1318   */
emac_poll_controller(struct net_device * ndev)1319  static void emac_poll_controller(struct net_device *ndev)
1320  {
1321  	struct emac_priv *priv = netdev_priv(ndev);
1322  
1323  	emac_int_disable(priv);
1324  	emac_irq(ndev->irq, ndev);
1325  	emac_int_enable(priv);
1326  }
1327  #endif
1328  
emac_adjust_link(struct net_device * ndev)1329  static void emac_adjust_link(struct net_device *ndev)
1330  {
1331  	struct emac_priv *priv = netdev_priv(ndev);
1332  	struct phy_device *phydev = ndev->phydev;
1333  	unsigned long flags;
1334  	int new_state = 0;
1335  
1336  	spin_lock_irqsave(&priv->lock, flags);
1337  
1338  	if (phydev->link) {
1339  		/* check the mode of operation - full/half duplex */
1340  		if (phydev->duplex != priv->duplex) {
1341  			new_state = 1;
1342  			priv->duplex = phydev->duplex;
1343  		}
1344  		if (phydev->speed != priv->speed) {
1345  			new_state = 1;
1346  			priv->speed = phydev->speed;
1347  		}
1348  		if (!priv->link) {
1349  			new_state = 1;
1350  			priv->link = 1;
1351  		}
1352  
1353  	} else if (priv->link) {
1354  		new_state = 1;
1355  		priv->link = 0;
1356  		priv->speed = 0;
1357  		priv->duplex = ~0;
1358  	}
1359  	if (new_state) {
1360  		emac_update_phystatus(priv);
1361  		phy_print_status(ndev->phydev);
1362  	}
1363  
1364  	spin_unlock_irqrestore(&priv->lock, flags);
1365  }
1366  
1367  /*************************************************************************
1368   *  Linux Driver Model
1369   *************************************************************************/
1370  
1371  /**
1372   * emac_devioctl - EMAC adapter ioctl
1373   * @ndev: The DaVinci EMAC network adapter
1374   * @ifrq: request parameter
1375   * @cmd: command parameter
1376   *
1377   * EMAC driver ioctl function
1378   *
1379   * Returns success(0) or appropriate error code
1380   */
emac_devioctl(struct net_device * ndev,struct ifreq * ifrq,int cmd)1381  static int emac_devioctl(struct net_device *ndev, struct ifreq *ifrq, int cmd)
1382  {
1383  	if (!(netif_running(ndev)))
1384  		return -EINVAL;
1385  
1386  	/* TODO: Add phy read and write and private statistics get feature */
1387  
1388  	if (ndev->phydev)
1389  		return phy_mii_ioctl(ndev->phydev, ifrq, cmd);
1390  	else
1391  		return -EOPNOTSUPP;
1392  }
1393  
match_first_device(struct device * dev,const void * data)1394  static int match_first_device(struct device *dev, const void *data)
1395  {
1396  	if (dev->parent && dev->parent->of_node)
1397  		return of_device_is_compatible(dev->parent->of_node,
1398  					       "ti,davinci_mdio");
1399  
1400  	return !strncmp(dev_name(dev), "davinci_mdio", 12);
1401  }
1402  
1403  /**
1404   * emac_dev_open - EMAC device open
1405   * @ndev: The DaVinci EMAC network adapter
1406   *
1407   * Called when system wants to start the interface. We init TX/RX channels
1408   * and enable the hardware for packet reception/transmission and start the
1409   * network queue.
1410   *
1411   * Returns 0 for a successful open, or appropriate error code
1412   */
emac_dev_open(struct net_device * ndev)1413  static int emac_dev_open(struct net_device *ndev)
1414  {
1415  	struct device *emac_dev = &ndev->dev;
1416  	struct resource *res;
1417  	int q, m, ret;
1418  	int res_num = 0, irq_num = 0;
1419  	int i = 0;
1420  	struct emac_priv *priv = netdev_priv(ndev);
1421  	struct phy_device *phydev = NULL;
1422  	struct device *phy = NULL;
1423  
1424  	ret = pm_runtime_resume_and_get(&priv->pdev->dev);
1425  	if (ret < 0) {
1426  		dev_err(&priv->pdev->dev, "%s: failed to get_sync(%d)\n",
1427  			__func__, ret);
1428  		return ret;
1429  	}
1430  
1431  	netif_carrier_off(ndev);
1432  	eth_hw_addr_set(ndev, priv->mac_addr);
1433  
1434  	/* Configuration items */
1435  	priv->rx_buf_size = EMAC_DEF_MAX_FRAME_SIZE + NET_IP_ALIGN;
1436  
1437  	priv->mac_hash1 = 0;
1438  	priv->mac_hash2 = 0;
1439  	emac_write(EMAC_MACHASH1, 0);
1440  	emac_write(EMAC_MACHASH2, 0);
1441  
1442  	for (i = 0; i < EMAC_DEF_RX_NUM_DESC; i++) {
1443  		struct sk_buff *skb = emac_rx_alloc(priv);
1444  
1445  		if (!skb)
1446  			break;
1447  
1448  		ret = cpdma_chan_idle_submit(priv->rxchan, skb, skb->data,
1449  					     skb_tailroom(skb), 0);
1450  		if (WARN_ON(ret < 0))
1451  			break;
1452  	}
1453  
1454  	/* Request IRQ */
1455  	if (dev_of_node(&priv->pdev->dev)) {
1456  		while ((ret = platform_get_irq_optional(priv->pdev, res_num)) != -ENXIO) {
1457  			if (ret < 0)
1458  				goto rollback;
1459  
1460  			ret = request_irq(ret, emac_irq, 0, ndev->name, ndev);
1461  			if (ret) {
1462  				dev_err(emac_dev, "DaVinci EMAC: request_irq() failed\n");
1463  				goto rollback;
1464  			}
1465  			res_num++;
1466  		}
1467  	} else {
1468  		while ((res = platform_get_resource(priv->pdev, IORESOURCE_IRQ, res_num))) {
1469  			for (irq_num = res->start; irq_num <= res->end; irq_num++) {
1470  				ret = request_irq(irq_num, emac_irq, 0, ndev->name, ndev);
1471  				if (ret) {
1472  					dev_err(emac_dev, "DaVinci EMAC: request_irq() failed\n");
1473  					goto rollback;
1474  				}
1475  			}
1476  			res_num++;
1477  		}
1478  		/* prepare counters for rollback in case of an error */
1479  		res_num--;
1480  		irq_num--;
1481  	}
1482  
1483  	/* Start/Enable EMAC hardware */
1484  	emac_hw_enable(priv);
1485  
1486  	/* Enable Interrupt pacing if configured */
1487  	if (priv->coal_intvl != 0) {
1488  		struct ethtool_coalesce coal;
1489  
1490  		coal.rx_coalesce_usecs = (priv->coal_intvl << 4);
1491  		emac_set_coalesce(ndev, &coal, NULL, NULL);
1492  	}
1493  
1494  	cpdma_ctlr_start(priv->dma);
1495  
1496  	if (priv->phy_node) {
1497  		phydev = of_phy_connect(ndev, priv->phy_node,
1498  					&emac_adjust_link, 0, 0);
1499  		if (!phydev) {
1500  			dev_err(emac_dev, "could not connect to phy %pOF\n",
1501  				priv->phy_node);
1502  			ret = -ENODEV;
1503  			goto err;
1504  		}
1505  	}
1506  
1507  	/* use the first phy on the bus if pdata did not give us a phy id */
1508  	if (!phydev && !priv->phy_id) {
1509  		/* NOTE: we can't use bus_find_device_by_name() here because
1510  		 * the device name is not guaranteed to be 'davinci_mdio'. On
1511  		 * some systems it can be 'davinci_mdio.0' so we need to use
1512  		 * strncmp() against the first part of the string to correctly
1513  		 * match it.
1514  		 */
1515  		phy = bus_find_device(&mdio_bus_type, NULL, NULL,
1516  				      match_first_device);
1517  		if (phy) {
1518  			priv->phy_id = dev_name(phy);
1519  			if (!priv->phy_id || !*priv->phy_id)
1520  				put_device(phy);
1521  		}
1522  	}
1523  
1524  	if (!phydev && priv->phy_id && *priv->phy_id) {
1525  		phydev = phy_connect(ndev, priv->phy_id,
1526  				     &emac_adjust_link,
1527  				     PHY_INTERFACE_MODE_MII);
1528  		put_device(phy);	/* reference taken by bus_find_device */
1529  		if (IS_ERR(phydev)) {
1530  			dev_err(emac_dev, "could not connect to phy %s\n",
1531  				priv->phy_id);
1532  			ret = PTR_ERR(phydev);
1533  			goto err;
1534  		}
1535  
1536  		priv->link = 0;
1537  		priv->speed = 0;
1538  		priv->duplex = ~0;
1539  
1540  		phy_attached_info(phydev);
1541  	}
1542  
1543  	if (!phydev) {
1544  		/* No PHY , fix the link, speed and duplex settings */
1545  		dev_notice(emac_dev, "no phy, defaulting to 100/full\n");
1546  		priv->link = 1;
1547  		priv->speed = SPEED_100;
1548  		priv->duplex = DUPLEX_FULL;
1549  		emac_update_phystatus(priv);
1550  	}
1551  
1552  	if (netif_msg_drv(priv))
1553  		dev_notice(emac_dev, "DaVinci EMAC: Opened %s\n", ndev->name);
1554  
1555  	if (phydev)
1556  		phy_start(phydev);
1557  
1558  	return 0;
1559  
1560  err:
1561  	emac_int_disable(priv);
1562  	napi_disable(&priv->napi);
1563  
1564  rollback:
1565  	if (dev_of_node(&priv->pdev->dev)) {
1566  		for (q = res_num - 1; q >= 0; q--) {
1567  			irq_num = platform_get_irq(priv->pdev, q);
1568  			if (irq_num > 0)
1569  				free_irq(irq_num, ndev);
1570  		}
1571  	} else {
1572  		for (q = res_num; q >= 0; q--) {
1573  			res = platform_get_resource(priv->pdev, IORESOURCE_IRQ, q);
1574  			/* at the first iteration, irq_num is already set to the
1575  			 * right value
1576  			 */
1577  			if (q != res_num)
1578  				irq_num = res->end;
1579  
1580  			for (m = irq_num; m >= res->start; m--)
1581  				free_irq(m, ndev);
1582  		}
1583  	}
1584  	cpdma_ctlr_stop(priv->dma);
1585  	pm_runtime_put(&priv->pdev->dev);
1586  	return ret;
1587  }
1588  
1589  /**
1590   * emac_dev_stop - EMAC device stop
1591   * @ndev: The DaVinci EMAC network adapter
1592   *
1593   * Called when system wants to stop or down the interface. We stop the network
1594   * queue, disable interrupts and cleanup TX/RX channels.
1595   *
1596   * We return the statistics in net_device_stats structure pulled from emac
1597   */
emac_dev_stop(struct net_device * ndev)1598  static int emac_dev_stop(struct net_device *ndev)
1599  {
1600  	struct resource *res;
1601  	int i = 0;
1602  	int irq_num;
1603  	struct emac_priv *priv = netdev_priv(ndev);
1604  	struct device *emac_dev = &ndev->dev;
1605  	int ret = 0;
1606  
1607  	/* inform the upper layers. */
1608  	netif_stop_queue(ndev);
1609  	napi_disable(&priv->napi);
1610  
1611  	netif_carrier_off(ndev);
1612  	emac_int_disable(priv);
1613  	cpdma_ctlr_stop(priv->dma);
1614  	emac_write(EMAC_SOFTRESET, 1);
1615  
1616  	if (ndev->phydev)
1617  		phy_disconnect(ndev->phydev);
1618  
1619  	/* Free IRQ */
1620  	if (dev_of_node(&priv->pdev->dev)) {
1621  		do {
1622  			ret = platform_get_irq_optional(priv->pdev, i);
1623  			if (ret < 0 && ret != -ENXIO)
1624  				break;
1625  			if (ret > 0) {
1626  				free_irq(ret, priv->ndev);
1627  			} else {
1628  				ret = 0;
1629  				break;
1630  			}
1631  		} while (++i);
1632  	} else {
1633  		while ((res = platform_get_resource(priv->pdev, IORESOURCE_IRQ, i))) {
1634  			for (irq_num = res->start; irq_num <= res->end; irq_num++)
1635  				free_irq(irq_num, priv->ndev);
1636  			i++;
1637  		}
1638  	}
1639  
1640  	if (netif_msg_drv(priv))
1641  		dev_notice(emac_dev, "DaVinci EMAC: %s stopped\n", ndev->name);
1642  
1643  	pm_runtime_put(&priv->pdev->dev);
1644  	return ret;
1645  }
1646  
1647  /**
1648   * emac_dev_getnetstats - EMAC get statistics function
1649   * @ndev: The DaVinci EMAC network adapter
1650   *
1651   * Called when system wants to get statistics from the device.
1652   *
1653   * We return the statistics in net_device_stats structure pulled from emac
1654   */
emac_dev_getnetstats(struct net_device * ndev)1655  static struct net_device_stats *emac_dev_getnetstats(struct net_device *ndev)
1656  {
1657  	struct emac_priv *priv = netdev_priv(ndev);
1658  	u32 mac_control;
1659  	u32 stats_clear_mask;
1660  	int err;
1661  
1662  	err = pm_runtime_resume_and_get(&priv->pdev->dev);
1663  	if (err < 0) {
1664  		dev_err(&priv->pdev->dev, "%s: failed to get_sync(%d)\n",
1665  			__func__, err);
1666  		return &ndev->stats;
1667  	}
1668  
1669  	/* update emac hardware stats and reset the registers*/
1670  
1671  	mac_control = emac_read(EMAC_MACCONTROL);
1672  
1673  	if (mac_control & EMAC_MACCONTROL_GMIIEN)
1674  		stats_clear_mask = EMAC_STATS_CLR_MASK;
1675  	else
1676  		stats_clear_mask = 0;
1677  
1678  	ndev->stats.multicast += emac_read(EMAC_RXMCASTFRAMES);
1679  	emac_write(EMAC_RXMCASTFRAMES, stats_clear_mask);
1680  
1681  	ndev->stats.collisions += (emac_read(EMAC_TXCOLLISION) +
1682  					   emac_read(EMAC_TXSINGLECOLL) +
1683  					   emac_read(EMAC_TXMULTICOLL));
1684  	emac_write(EMAC_TXCOLLISION, stats_clear_mask);
1685  	emac_write(EMAC_TXSINGLECOLL, stats_clear_mask);
1686  	emac_write(EMAC_TXMULTICOLL, stats_clear_mask);
1687  
1688  	ndev->stats.rx_length_errors += (emac_read(EMAC_RXOVERSIZED) +
1689  						emac_read(EMAC_RXJABBER) +
1690  						emac_read(EMAC_RXUNDERSIZED));
1691  	emac_write(EMAC_RXOVERSIZED, stats_clear_mask);
1692  	emac_write(EMAC_RXJABBER, stats_clear_mask);
1693  	emac_write(EMAC_RXUNDERSIZED, stats_clear_mask);
1694  
1695  	ndev->stats.rx_over_errors += (emac_read(EMAC_RXSOFOVERRUNS) +
1696  					       emac_read(EMAC_RXMOFOVERRUNS));
1697  	emac_write(EMAC_RXSOFOVERRUNS, stats_clear_mask);
1698  	emac_write(EMAC_RXMOFOVERRUNS, stats_clear_mask);
1699  
1700  	ndev->stats.rx_fifo_errors += emac_read(EMAC_RXDMAOVERRUNS);
1701  	emac_write(EMAC_RXDMAOVERRUNS, stats_clear_mask);
1702  
1703  	ndev->stats.tx_carrier_errors +=
1704  		emac_read(EMAC_TXCARRIERSENSE);
1705  	emac_write(EMAC_TXCARRIERSENSE, stats_clear_mask);
1706  
1707  	ndev->stats.tx_fifo_errors += emac_read(EMAC_TXUNDERRUN);
1708  	emac_write(EMAC_TXUNDERRUN, stats_clear_mask);
1709  
1710  	pm_runtime_put(&priv->pdev->dev);
1711  
1712  	return &ndev->stats;
1713  }
1714  
1715  static const struct net_device_ops emac_netdev_ops = {
1716  	.ndo_open		= emac_dev_open,
1717  	.ndo_stop		= emac_dev_stop,
1718  	.ndo_start_xmit		= emac_dev_xmit,
1719  	.ndo_set_rx_mode	= emac_dev_mcast_set,
1720  	.ndo_set_mac_address	= emac_dev_setmac_addr,
1721  	.ndo_eth_ioctl		= emac_devioctl,
1722  	.ndo_tx_timeout		= emac_dev_tx_timeout,
1723  	.ndo_get_stats		= emac_dev_getnetstats,
1724  #ifdef CONFIG_NET_POLL_CONTROLLER
1725  	.ndo_poll_controller	= emac_poll_controller,
1726  #endif
1727  };
1728  
1729  static const struct of_device_id davinci_emac_of_match[];
1730  
1731  static struct emac_platform_data *
davinci_emac_of_get_pdata(struct platform_device * pdev,struct emac_priv * priv)1732  davinci_emac_of_get_pdata(struct platform_device *pdev, struct emac_priv *priv)
1733  {
1734  	struct device_node *np;
1735  	const struct of_device_id *match;
1736  	const struct emac_platform_data *auxdata;
1737  	struct emac_platform_data *pdata = NULL;
1738  
1739  	if (!IS_ENABLED(CONFIG_OF) || !pdev->dev.of_node)
1740  		return dev_get_platdata(&pdev->dev);
1741  
1742  	pdata = devm_kzalloc(&pdev->dev, sizeof(*pdata), GFP_KERNEL);
1743  	if (!pdata)
1744  		return NULL;
1745  
1746  	np = pdev->dev.of_node;
1747  	pdata->version = EMAC_VERSION_2;
1748  
1749  	if (!is_valid_ether_addr(pdata->mac_addr))
1750  		of_get_mac_address(np, pdata->mac_addr);
1751  
1752  	of_property_read_u32(np, "ti,davinci-ctrl-reg-offset",
1753  			     &pdata->ctrl_reg_offset);
1754  
1755  	of_property_read_u32(np, "ti,davinci-ctrl-mod-reg-offset",
1756  			     &pdata->ctrl_mod_reg_offset);
1757  
1758  	of_property_read_u32(np, "ti,davinci-ctrl-ram-offset",
1759  			     &pdata->ctrl_ram_offset);
1760  
1761  	of_property_read_u32(np, "ti,davinci-ctrl-ram-size",
1762  			     &pdata->ctrl_ram_size);
1763  
1764  	of_property_read_u8(np, "ti,davinci-rmii-en", &pdata->rmii_en);
1765  
1766  	pdata->no_bd_ram = of_property_read_bool(np, "ti,davinci-no-bd-ram");
1767  
1768  	priv->phy_node = of_parse_phandle(np, "phy-handle", 0);
1769  	if (!priv->phy_node) {
1770  		if (!of_phy_is_fixed_link(np))
1771  			pdata->phy_id = NULL;
1772  		else if (of_phy_register_fixed_link(np) >= 0)
1773  			priv->phy_node = of_node_get(np);
1774  	}
1775  
1776  	auxdata = pdev->dev.platform_data;
1777  	if (auxdata) {
1778  		pdata->interrupt_enable = auxdata->interrupt_enable;
1779  		pdata->interrupt_disable = auxdata->interrupt_disable;
1780  	}
1781  
1782  	match = of_match_device(davinci_emac_of_match, &pdev->dev);
1783  	if (match && match->data) {
1784  		auxdata = match->data;
1785  		pdata->version = auxdata->version;
1786  		pdata->hw_ram_addr = auxdata->hw_ram_addr;
1787  	}
1788  
1789  	return  pdata;
1790  }
1791  
davinci_emac_try_get_mac(struct platform_device * pdev,int instance,u8 * mac_addr)1792  static int davinci_emac_try_get_mac(struct platform_device *pdev,
1793  				    int instance, u8 *mac_addr)
1794  {
1795  	if (!pdev->dev.of_node)
1796  		return -EINVAL;
1797  
1798  	return ti_cm_get_macid(&pdev->dev, instance, mac_addr);
1799  }
1800  
1801  /**
1802   * davinci_emac_probe - EMAC device probe
1803   * @pdev: The DaVinci EMAC device that we are removing
1804   *
1805   * Called when probing for emac devicesr. We get details of instances and
1806   * resource information from platform init and register a network device
1807   * and allocate resources necessary for driver to perform
1808   */
davinci_emac_probe(struct platform_device * pdev)1809  static int davinci_emac_probe(struct platform_device *pdev)
1810  {
1811  	struct device_node *np = pdev->dev.of_node;
1812  	int rc = 0;
1813  	struct resource *res, *res_ctrl;
1814  	struct net_device *ndev;
1815  	struct emac_priv *priv;
1816  	unsigned long hw_ram_addr;
1817  	struct emac_platform_data *pdata;
1818  	struct cpdma_params dma_params;
1819  	struct clk *emac_clk;
1820  	unsigned long emac_bus_frequency;
1821  
1822  
1823  	/* obtain emac clock from kernel */
1824  	emac_clk = devm_clk_get(&pdev->dev, NULL);
1825  	if (IS_ERR(emac_clk)) {
1826  		dev_err(&pdev->dev, "failed to get EMAC clock\n");
1827  		return -EBUSY;
1828  	}
1829  	emac_bus_frequency = clk_get_rate(emac_clk);
1830  	devm_clk_put(&pdev->dev, emac_clk);
1831  
1832  	/* TODO: Probe PHY here if possible */
1833  
1834  	ndev = alloc_etherdev(sizeof(struct emac_priv));
1835  	if (!ndev)
1836  		return -ENOMEM;
1837  
1838  	platform_set_drvdata(pdev, ndev);
1839  	priv = netdev_priv(ndev);
1840  	priv->pdev = pdev;
1841  	priv->ndev = ndev;
1842  	priv->msg_enable = netif_msg_init(debug_level, DAVINCI_EMAC_DEBUG);
1843  
1844  	spin_lock_init(&priv->lock);
1845  
1846  	pdata = davinci_emac_of_get_pdata(pdev, priv);
1847  	if (!pdata) {
1848  		dev_err(&pdev->dev, "no platform data\n");
1849  		rc = -ENODEV;
1850  		goto err_free_netdev;
1851  	}
1852  
1853  	/* MAC addr and PHY mask , RMII enable info from platform_data */
1854  	memcpy(priv->mac_addr, pdata->mac_addr, ETH_ALEN);
1855  	priv->phy_id = pdata->phy_id;
1856  	priv->rmii_en = pdata->rmii_en;
1857  	priv->version = pdata->version;
1858  	priv->int_enable = pdata->interrupt_enable;
1859  	priv->int_disable = pdata->interrupt_disable;
1860  
1861  	priv->coal_intvl = 0;
1862  	priv->bus_freq_mhz = (u32)(emac_bus_frequency / 1000000);
1863  
1864  	/* Get EMAC platform data */
1865  	priv->remap_addr = devm_platform_get_and_ioremap_resource(pdev, 0, &res);
1866  	if (IS_ERR(priv->remap_addr)) {
1867  		rc = PTR_ERR(priv->remap_addr);
1868  		goto no_pdata;
1869  	}
1870  	priv->emac_base_phys = res->start + pdata->ctrl_reg_offset;
1871  
1872  	res_ctrl = platform_get_resource(pdev, IORESOURCE_MEM, 1);
1873  	if (res_ctrl) {
1874  		priv->ctrl_base =
1875  			devm_ioremap_resource(&pdev->dev, res_ctrl);
1876  		if (IS_ERR(priv->ctrl_base)) {
1877  			rc = PTR_ERR(priv->ctrl_base);
1878  			goto no_pdata;
1879  		}
1880  	} else {
1881  		priv->ctrl_base = priv->remap_addr + pdata->ctrl_mod_reg_offset;
1882  	}
1883  
1884  	priv->emac_base = priv->remap_addr + pdata->ctrl_reg_offset;
1885  	ndev->base_addr = (unsigned long)priv->remap_addr;
1886  
1887  	hw_ram_addr = pdata->hw_ram_addr;
1888  	if (!hw_ram_addr)
1889  		hw_ram_addr = (u32 __force)res->start + pdata->ctrl_ram_offset;
1890  
1891  	memset(&dma_params, 0, sizeof(dma_params));
1892  	dma_params.dev			= &pdev->dev;
1893  	dma_params.dmaregs		= priv->emac_base;
1894  	dma_params.rxthresh		= priv->emac_base + 0x120;
1895  	dma_params.rxfree		= priv->emac_base + 0x140;
1896  	dma_params.txhdp		= priv->emac_base + 0x600;
1897  	dma_params.rxhdp		= priv->emac_base + 0x620;
1898  	dma_params.txcp			= priv->emac_base + 0x640;
1899  	dma_params.rxcp			= priv->emac_base + 0x660;
1900  	dma_params.num_chan		= EMAC_MAX_TXRX_CHANNELS;
1901  	dma_params.min_packet_size	= EMAC_DEF_MIN_ETHPKTSIZE;
1902  	dma_params.desc_hw_addr		= hw_ram_addr;
1903  	dma_params.desc_mem_size	= pdata->ctrl_ram_size;
1904  	dma_params.desc_align		= 16;
1905  
1906  	dma_params.desc_mem_phys = pdata->no_bd_ram ? 0 :
1907  			(u32 __force)res->start + pdata->ctrl_ram_offset;
1908  
1909  	priv->dma = cpdma_ctlr_create(&dma_params);
1910  	if (!priv->dma) {
1911  		dev_err(&pdev->dev, "error initializing DMA\n");
1912  		rc = -ENOMEM;
1913  		goto no_pdata;
1914  	}
1915  
1916  	priv->txchan = cpdma_chan_create(priv->dma, EMAC_DEF_TX_CH,
1917  					 emac_tx_handler, 0);
1918  	if (IS_ERR(priv->txchan)) {
1919  		dev_err(&pdev->dev, "error initializing tx dma channel\n");
1920  		rc = PTR_ERR(priv->txchan);
1921  		goto err_free_dma;
1922  	}
1923  
1924  	priv->rxchan = cpdma_chan_create(priv->dma, EMAC_DEF_RX_CH,
1925  					 emac_rx_handler, 1);
1926  	if (IS_ERR(priv->rxchan)) {
1927  		dev_err(&pdev->dev, "error initializing rx dma channel\n");
1928  		rc = PTR_ERR(priv->rxchan);
1929  		goto err_free_txchan;
1930  	}
1931  
1932  	rc = platform_get_irq(pdev, 0);
1933  	if (rc < 0)
1934  		goto err_free_rxchan;
1935  	ndev->irq = rc;
1936  
1937  	rc = davinci_emac_try_get_mac(pdev, res_ctrl ? 0 : 1, priv->mac_addr);
1938  	if (!rc)
1939  		eth_hw_addr_set(ndev, priv->mac_addr);
1940  
1941  	if (!is_valid_ether_addr(priv->mac_addr)) {
1942  		/* Use random MAC if still none obtained. */
1943  		eth_hw_addr_random(ndev);
1944  		memcpy(priv->mac_addr, ndev->dev_addr, ndev->addr_len);
1945  		dev_warn(&pdev->dev, "using random MAC addr: %pM\n",
1946  			 priv->mac_addr);
1947  	}
1948  
1949  	ndev->netdev_ops = &emac_netdev_ops;
1950  	ndev->ethtool_ops = &ethtool_ops;
1951  	netif_napi_add(ndev, &priv->napi, emac_poll);
1952  
1953  	pm_runtime_enable(&pdev->dev);
1954  	rc = pm_runtime_resume_and_get(&pdev->dev);
1955  	if (rc < 0) {
1956  		dev_err(&pdev->dev, "%s: failed to get_sync(%d)\n",
1957  			__func__, rc);
1958  		goto err_napi_del;
1959  	}
1960  
1961  	/* register the network device */
1962  	SET_NETDEV_DEV(ndev, &pdev->dev);
1963  	rc = register_netdev(ndev);
1964  	if (rc) {
1965  		dev_err(&pdev->dev, "error in register_netdev\n");
1966  		rc = -ENODEV;
1967  		pm_runtime_put(&pdev->dev);
1968  		goto err_napi_del;
1969  	}
1970  
1971  
1972  	if (netif_msg_probe(priv)) {
1973  		dev_notice(&pdev->dev, "DaVinci EMAC Probe found device "
1974  			   "(regs: %pa, irq: %d)\n",
1975  			   &priv->emac_base_phys, ndev->irq);
1976  	}
1977  	pm_runtime_put(&pdev->dev);
1978  
1979  	return 0;
1980  
1981  err_napi_del:
1982  	netif_napi_del(&priv->napi);
1983  err_free_rxchan:
1984  	cpdma_chan_destroy(priv->rxchan);
1985  err_free_txchan:
1986  	cpdma_chan_destroy(priv->txchan);
1987  err_free_dma:
1988  	cpdma_ctlr_destroy(priv->dma);
1989  no_pdata:
1990  	if (of_phy_is_fixed_link(np))
1991  		of_phy_deregister_fixed_link(np);
1992  	of_node_put(priv->phy_node);
1993  err_free_netdev:
1994  	free_netdev(ndev);
1995  	return rc;
1996  }
1997  
1998  /**
1999   * davinci_emac_remove - EMAC device remove
2000   * @pdev: The DaVinci EMAC device that we are removing
2001   *
2002   * Called when removing the device driver. We disable clock usage and release
2003   * the resources taken up by the driver and unregister network device
2004   */
davinci_emac_remove(struct platform_device * pdev)2005  static int davinci_emac_remove(struct platform_device *pdev)
2006  {
2007  	struct net_device *ndev = platform_get_drvdata(pdev);
2008  	struct emac_priv *priv = netdev_priv(ndev);
2009  	struct device_node *np = pdev->dev.of_node;
2010  
2011  	dev_notice(&ndev->dev, "DaVinci EMAC: davinci_emac_remove()\n");
2012  
2013  	if (priv->txchan)
2014  		cpdma_chan_destroy(priv->txchan);
2015  	if (priv->rxchan)
2016  		cpdma_chan_destroy(priv->rxchan);
2017  	cpdma_ctlr_destroy(priv->dma);
2018  
2019  	unregister_netdev(ndev);
2020  	of_node_put(priv->phy_node);
2021  	pm_runtime_disable(&pdev->dev);
2022  	if (of_phy_is_fixed_link(np))
2023  		of_phy_deregister_fixed_link(np);
2024  	free_netdev(ndev);
2025  
2026  	return 0;
2027  }
2028  
davinci_emac_suspend(struct device * dev)2029  static int davinci_emac_suspend(struct device *dev)
2030  {
2031  	struct net_device *ndev = dev_get_drvdata(dev);
2032  
2033  	if (netif_running(ndev))
2034  		emac_dev_stop(ndev);
2035  
2036  	return 0;
2037  }
2038  
davinci_emac_resume(struct device * dev)2039  static int davinci_emac_resume(struct device *dev)
2040  {
2041  	struct net_device *ndev = dev_get_drvdata(dev);
2042  
2043  	if (netif_running(ndev))
2044  		emac_dev_open(ndev);
2045  
2046  	return 0;
2047  }
2048  
2049  static const struct dev_pm_ops davinci_emac_pm_ops = {
2050  	.suspend	= davinci_emac_suspend,
2051  	.resume		= davinci_emac_resume,
2052  };
2053  
2054  static const struct emac_platform_data am3517_emac_data = {
2055  	.version		= EMAC_VERSION_2,
2056  	.hw_ram_addr		= 0x01e20000,
2057  };
2058  
2059  static const struct emac_platform_data dm816_emac_data = {
2060  	.version		= EMAC_VERSION_2,
2061  };
2062  
2063  static const struct of_device_id davinci_emac_of_match[] = {
2064  	{.compatible = "ti,davinci-dm6467-emac", },
2065  	{.compatible = "ti,am3517-emac", .data = &am3517_emac_data, },
2066  	{.compatible = "ti,dm816-emac", .data = &dm816_emac_data, },
2067  	{},
2068  };
2069  MODULE_DEVICE_TABLE(of, davinci_emac_of_match);
2070  
2071  /* davinci_emac_driver: EMAC platform driver structure */
2072  static struct platform_driver davinci_emac_driver = {
2073  	.driver = {
2074  		.name	 = "davinci_emac",
2075  		.pm	 = &davinci_emac_pm_ops,
2076  		.of_match_table = davinci_emac_of_match,
2077  	},
2078  	.probe = davinci_emac_probe,
2079  	.remove = davinci_emac_remove,
2080  };
2081  
2082  /**
2083   * davinci_emac_init - EMAC driver module init
2084   *
2085   * Called when initializing the driver. We register the driver with
2086   * the platform.
2087   */
davinci_emac_init(void)2088  static int __init davinci_emac_init(void)
2089  {
2090  	return platform_driver_register(&davinci_emac_driver);
2091  }
2092  late_initcall(davinci_emac_init);
2093  
2094  /**
2095   * davinci_emac_exit - EMAC driver module exit
2096   *
2097   * Called when exiting the driver completely. We unregister the driver with
2098   * the platform and exit
2099   */
davinci_emac_exit(void)2100  static void __exit davinci_emac_exit(void)
2101  {
2102  	platform_driver_unregister(&davinci_emac_driver);
2103  }
2104  module_exit(davinci_emac_exit);
2105  
2106  MODULE_LICENSE("GPL");
2107  MODULE_AUTHOR("DaVinci EMAC Maintainer: Anant Gole <anantgole@ti.com>");
2108  MODULE_AUTHOR("DaVinci EMAC Maintainer: Chaithrika U S <chaithrika@ti.com>");
2109  MODULE_DESCRIPTION("DaVinci EMAC Ethernet driver");
2110