[go: nahoru, domu]

1/*
2 * Allwinner EMAC Fast Ethernet driver for Linux.
3 *
4 * Copyright 2012-2013 Stefan Roese <sr@denx.de>
5 * Copyright 2013 Maxime Ripard <maxime.ripard@free-electrons.com>
6 *
7 * Based on the Linux driver provided by Allwinner:
8 * Copyright (C) 1997  Sten Wang
9 *
10 * This file is licensed under the terms of the GNU General Public
11 * License version 2. This program is licensed "as is" without any
12 * warranty of any kind, whether express or implied.
13 */
14
15#include <linux/clk.h>
16#include <linux/etherdevice.h>
17#include <linux/ethtool.h>
18#include <linux/gpio.h>
19#include <linux/interrupt.h>
20#include <linux/irq.h>
21#include <linux/mii.h>
22#include <linux/module.h>
23#include <linux/netdevice.h>
24#include <linux/of_address.h>
25#include <linux/of_irq.h>
26#include <linux/of_mdio.h>
27#include <linux/of_net.h>
28#include <linux/of_platform.h>
29#include <linux/platform_device.h>
30#include <linux/phy.h>
31
32#include "sun4i-emac.h"
33
34#define DRV_NAME		"sun4i-emac"
35#define DRV_VERSION		"1.02"
36
37#define EMAC_MAX_FRAME_LEN	0x0600
38
39/* Transmit timeout, default 5 seconds. */
40static int watchdog = 5000;
41module_param(watchdog, int, 0400);
42MODULE_PARM_DESC(watchdog, "transmit timeout in milliseconds");
43
44/* EMAC register address locking.
45 *
46 * The EMAC uses an address register to control where data written
47 * to the data register goes. This means that the address register
48 * must be preserved over interrupts or similar calls.
49 *
50 * During interrupt and other critical calls, a spinlock is used to
51 * protect the system, but the calls themselves save the address
52 * in the address register in case they are interrupting another
53 * access to the device.
54 *
55 * For general accesses a lock is provided so that calls which are
56 * allowed to sleep are serialised so that the address register does
57 * not need to be saved. This lock also serves to serialise access
58 * to the EEPROM and PHY access registers which are shared between
59 * these two devices.
60 */
61
62/* The driver supports the original EMACE, and now the two newer
63 * devices, EMACA and EMACB.
64 */
65
66struct emac_board_info {
67	struct clk		*clk;
68	struct device		*dev;
69	struct platform_device	*pdev;
70	spinlock_t		lock;
71	void __iomem		*membase;
72	u32			msg_enable;
73	struct net_device	*ndev;
74	struct sk_buff		*skb_last;
75	u16			tx_fifo_stat;
76
77	int			emacrx_completed_flag;
78
79	struct phy_device	*phy_dev;
80	struct device_node	*phy_node;
81	unsigned int		link;
82	unsigned int		speed;
83	unsigned int		duplex;
84
85	phy_interface_t		phy_interface;
86};
87
88static void emac_update_speed(struct net_device *dev)
89{
90	struct emac_board_info *db = netdev_priv(dev);
91	unsigned int reg_val;
92
93	/* set EMAC SPEED, depend on PHY  */
94	reg_val = readl(db->membase + EMAC_MAC_SUPP_REG);
95	reg_val &= ~(0x1 << 8);
96	if (db->speed == SPEED_100)
97		reg_val |= 1 << 8;
98	writel(reg_val, db->membase + EMAC_MAC_SUPP_REG);
99}
100
101static void emac_update_duplex(struct net_device *dev)
102{
103	struct emac_board_info *db = netdev_priv(dev);
104	unsigned int reg_val;
105
106	/* set duplex depend on phy */
107	reg_val = readl(db->membase + EMAC_MAC_CTL1_REG);
108	reg_val &= ~EMAC_MAC_CTL1_DUPLEX_EN;
109	if (db->duplex)
110		reg_val |= EMAC_MAC_CTL1_DUPLEX_EN;
111	writel(reg_val, db->membase + EMAC_MAC_CTL1_REG);
112}
113
114static void emac_handle_link_change(struct net_device *dev)
115{
116	struct emac_board_info *db = netdev_priv(dev);
117	struct phy_device *phydev = db->phy_dev;
118	unsigned long flags;
119	int status_change = 0;
120
121	if (phydev->link) {
122		if (db->speed != phydev->speed) {
123			spin_lock_irqsave(&db->lock, flags);
124			db->speed = phydev->speed;
125			emac_update_speed(dev);
126			spin_unlock_irqrestore(&db->lock, flags);
127			status_change = 1;
128		}
129
130		if (db->duplex != phydev->duplex) {
131			spin_lock_irqsave(&db->lock, flags);
132			db->duplex = phydev->duplex;
133			emac_update_duplex(dev);
134			spin_unlock_irqrestore(&db->lock, flags);
135			status_change = 1;
136		}
137	}
138
139	if (phydev->link != db->link) {
140		if (!phydev->link) {
141			db->speed = 0;
142			db->duplex = -1;
143		}
144		db->link = phydev->link;
145
146		status_change = 1;
147	}
148
149	if (status_change)
150		phy_print_status(phydev);
151}
152
153static int emac_mdio_probe(struct net_device *dev)
154{
155	struct emac_board_info *db = netdev_priv(dev);
156
157	/* to-do: PHY interrupts are currently not supported */
158
159	/* attach the mac to the phy */
160	db->phy_dev = of_phy_connect(db->ndev, db->phy_node,
161				     &emac_handle_link_change, 0,
162				     db->phy_interface);
163	if (!db->phy_dev) {
164		netdev_err(db->ndev, "could not find the PHY\n");
165		return -ENODEV;
166	}
167
168	/* mask with MAC supported features */
169	db->phy_dev->supported &= PHY_BASIC_FEATURES;
170	db->phy_dev->advertising = db->phy_dev->supported;
171
172	db->link = 0;
173	db->speed = 0;
174	db->duplex = -1;
175
176	return 0;
177}
178
179static void emac_mdio_remove(struct net_device *dev)
180{
181	struct emac_board_info *db = netdev_priv(dev);
182
183	phy_disconnect(db->phy_dev);
184	db->phy_dev = NULL;
185}
186
187static void emac_reset(struct emac_board_info *db)
188{
189	dev_dbg(db->dev, "resetting device\n");
190
191	/* RESET device */
192	writel(0, db->membase + EMAC_CTL_REG);
193	udelay(200);
194	writel(EMAC_CTL_RESET, db->membase + EMAC_CTL_REG);
195	udelay(200);
196}
197
198static void emac_outblk_32bit(void __iomem *reg, void *data, int count)
199{
200	writesl(reg, data, round_up(count, 4) / 4);
201}
202
203static void emac_inblk_32bit(void __iomem *reg, void *data, int count)
204{
205	readsl(reg, data, round_up(count, 4) / 4);
206}
207
208static int emac_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
209{
210	struct emac_board_info *dm = netdev_priv(dev);
211	struct phy_device *phydev = dm->phy_dev;
212
213	if (!netif_running(dev))
214		return -EINVAL;
215
216	if (!phydev)
217		return -ENODEV;
218
219	return phy_mii_ioctl(phydev, rq, cmd);
220}
221
222/* ethtool ops */
223static void emac_get_drvinfo(struct net_device *dev,
224			      struct ethtool_drvinfo *info)
225{
226	strlcpy(info->driver, DRV_NAME, sizeof(DRV_NAME));
227	strlcpy(info->version, DRV_VERSION, sizeof(DRV_VERSION));
228	strlcpy(info->bus_info, dev_name(&dev->dev), sizeof(info->bus_info));
229}
230
231static int emac_get_settings(struct net_device *dev, struct ethtool_cmd *cmd)
232{
233	struct emac_board_info *dm = netdev_priv(dev);
234	struct phy_device *phydev = dm->phy_dev;
235
236	if (!phydev)
237		return -ENODEV;
238
239	return phy_ethtool_gset(phydev, cmd);
240}
241
242static int emac_set_settings(struct net_device *dev, struct ethtool_cmd *cmd)
243{
244	struct emac_board_info *dm = netdev_priv(dev);
245	struct phy_device *phydev = dm->phy_dev;
246
247	if (!phydev)
248		return -ENODEV;
249
250	return phy_ethtool_sset(phydev, cmd);
251}
252
253static const struct ethtool_ops emac_ethtool_ops = {
254	.get_drvinfo	= emac_get_drvinfo,
255	.get_settings	= emac_get_settings,
256	.set_settings	= emac_set_settings,
257	.get_link	= ethtool_op_get_link,
258};
259
260static unsigned int emac_setup(struct net_device *ndev)
261{
262	struct emac_board_info *db = netdev_priv(ndev);
263	unsigned int reg_val;
264
265	/* set up TX */
266	reg_val = readl(db->membase + EMAC_TX_MODE_REG);
267
268	writel(reg_val | EMAC_TX_MODE_ABORTED_FRAME_EN,
269		db->membase + EMAC_TX_MODE_REG);
270
271	/* set MAC */
272	/* set MAC CTL0 */
273	reg_val = readl(db->membase + EMAC_MAC_CTL0_REG);
274	writel(reg_val | EMAC_MAC_CTL0_RX_FLOW_CTL_EN |
275		EMAC_MAC_CTL0_TX_FLOW_CTL_EN,
276		db->membase + EMAC_MAC_CTL0_REG);
277
278	/* set MAC CTL1 */
279	reg_val = readl(db->membase + EMAC_MAC_CTL1_REG);
280	reg_val |= EMAC_MAC_CTL1_LEN_CHECK_EN;
281	reg_val |= EMAC_MAC_CTL1_CRC_EN;
282	reg_val |= EMAC_MAC_CTL1_PAD_EN;
283	writel(reg_val, db->membase + EMAC_MAC_CTL1_REG);
284
285	/* set up IPGT */
286	writel(EMAC_MAC_IPGT_FULL_DUPLEX, db->membase + EMAC_MAC_IPGT_REG);
287
288	/* set up IPGR */
289	writel((EMAC_MAC_IPGR_IPG1 << 8) | EMAC_MAC_IPGR_IPG2,
290		db->membase + EMAC_MAC_IPGR_REG);
291
292	/* set up Collison window */
293	writel((EMAC_MAC_CLRT_COLLISION_WINDOW << 8) | EMAC_MAC_CLRT_RM,
294		db->membase + EMAC_MAC_CLRT_REG);
295
296	/* set up Max Frame Length */
297	writel(EMAC_MAX_FRAME_LEN,
298		db->membase + EMAC_MAC_MAXF_REG);
299
300	return 0;
301}
302
303static void emac_set_rx_mode(struct net_device *ndev)
304{
305	struct emac_board_info *db = netdev_priv(ndev);
306	unsigned int reg_val;
307
308	/* set up RX */
309	reg_val = readl(db->membase + EMAC_RX_CTL_REG);
310
311	if (ndev->flags & IFF_PROMISC)
312		reg_val |= EMAC_RX_CTL_PASS_ALL_EN;
313	else
314		reg_val &= ~EMAC_RX_CTL_PASS_ALL_EN;
315
316	writel(reg_val | EMAC_RX_CTL_PASS_LEN_OOR_EN |
317		EMAC_RX_CTL_ACCEPT_UNICAST_EN | EMAC_RX_CTL_DA_FILTER_EN |
318		EMAC_RX_CTL_ACCEPT_MULTICAST_EN |
319		EMAC_RX_CTL_ACCEPT_BROADCAST_EN,
320		db->membase + EMAC_RX_CTL_REG);
321}
322
323static unsigned int emac_powerup(struct net_device *ndev)
324{
325	struct emac_board_info *db = netdev_priv(ndev);
326	unsigned int reg_val;
327
328	/* initial EMAC */
329	/* flush RX FIFO */
330	reg_val = readl(db->membase + EMAC_RX_CTL_REG);
331	reg_val |= 0x8;
332	writel(reg_val, db->membase + EMAC_RX_CTL_REG);
333	udelay(1);
334
335	/* initial MAC */
336	/* soft reset MAC */
337	reg_val = readl(db->membase + EMAC_MAC_CTL0_REG);
338	reg_val &= ~EMAC_MAC_CTL0_SOFT_RESET;
339	writel(reg_val, db->membase + EMAC_MAC_CTL0_REG);
340
341	/* set MII clock */
342	reg_val = readl(db->membase + EMAC_MAC_MCFG_REG);
343	reg_val &= (~(0xf << 2));
344	reg_val |= (0xD << 2);
345	writel(reg_val, db->membase + EMAC_MAC_MCFG_REG);
346
347	/* clear RX counter */
348	writel(0x0, db->membase + EMAC_RX_FBC_REG);
349
350	/* disable all interrupt and clear interrupt status */
351	writel(0, db->membase + EMAC_INT_CTL_REG);
352	reg_val = readl(db->membase + EMAC_INT_STA_REG);
353	writel(reg_val, db->membase + EMAC_INT_STA_REG);
354
355	udelay(1);
356
357	/* set up EMAC */
358	emac_setup(ndev);
359
360	/* set mac_address to chip */
361	writel(ndev->dev_addr[0] << 16 | ndev->dev_addr[1] << 8 | ndev->
362	       dev_addr[2], db->membase + EMAC_MAC_A1_REG);
363	writel(ndev->dev_addr[3] << 16 | ndev->dev_addr[4] << 8 | ndev->
364	       dev_addr[5], db->membase + EMAC_MAC_A0_REG);
365
366	mdelay(1);
367
368	return 0;
369}
370
371static int emac_set_mac_address(struct net_device *dev, void *p)
372{
373	struct sockaddr *addr = p;
374	struct emac_board_info *db = netdev_priv(dev);
375
376	if (netif_running(dev))
377		return -EBUSY;
378
379	memcpy(dev->dev_addr, addr->sa_data, ETH_ALEN);
380
381	writel(dev->dev_addr[0] << 16 | dev->dev_addr[1] << 8 | dev->
382	       dev_addr[2], db->membase + EMAC_MAC_A1_REG);
383	writel(dev->dev_addr[3] << 16 | dev->dev_addr[4] << 8 | dev->
384	       dev_addr[5], db->membase + EMAC_MAC_A0_REG);
385
386	return 0;
387}
388
389/* Initialize emac board */
390static void emac_init_device(struct net_device *dev)
391{
392	struct emac_board_info *db = netdev_priv(dev);
393	unsigned long flags;
394	unsigned int reg_val;
395
396	spin_lock_irqsave(&db->lock, flags);
397
398	emac_update_speed(dev);
399	emac_update_duplex(dev);
400
401	/* enable RX/TX */
402	reg_val = readl(db->membase + EMAC_CTL_REG);
403	writel(reg_val | EMAC_CTL_RESET | EMAC_CTL_TX_EN | EMAC_CTL_RX_EN,
404		db->membase + EMAC_CTL_REG);
405
406	/* enable RX/TX0/RX Hlevel interrup */
407	reg_val = readl(db->membase + EMAC_INT_CTL_REG);
408	reg_val |= (0xf << 0) | (0x01 << 8);
409	writel(reg_val, db->membase + EMAC_INT_CTL_REG);
410
411	spin_unlock_irqrestore(&db->lock, flags);
412}
413
414/* Our watchdog timed out. Called by the networking layer */
415static void emac_timeout(struct net_device *dev)
416{
417	struct emac_board_info *db = netdev_priv(dev);
418	unsigned long flags;
419
420	if (netif_msg_timer(db))
421		dev_err(db->dev, "tx time out.\n");
422
423	/* Save previous register address */
424	spin_lock_irqsave(&db->lock, flags);
425
426	netif_stop_queue(dev);
427	emac_reset(db);
428	emac_init_device(dev);
429	/* We can accept TX packets again */
430	dev->trans_start = jiffies;
431	netif_wake_queue(dev);
432
433	/* Restore previous register address */
434	spin_unlock_irqrestore(&db->lock, flags);
435}
436
437/* Hardware start transmission.
438 * Send a packet to media from the upper layer.
439 */
440static int emac_start_xmit(struct sk_buff *skb, struct net_device *dev)
441{
442	struct emac_board_info *db = netdev_priv(dev);
443	unsigned long channel;
444	unsigned long flags;
445
446	channel = db->tx_fifo_stat & 3;
447	if (channel == 3)
448		return 1;
449
450	channel = (channel == 1 ? 1 : 0);
451
452	spin_lock_irqsave(&db->lock, flags);
453
454	writel(channel, db->membase + EMAC_TX_INS_REG);
455
456	emac_outblk_32bit(db->membase + EMAC_TX_IO_DATA_REG,
457			skb->data, skb->len);
458	dev->stats.tx_bytes += skb->len;
459
460	db->tx_fifo_stat |= 1 << channel;
461	/* TX control: First packet immediately send, second packet queue */
462	if (channel == 0) {
463		/* set TX len */
464		writel(skb->len, db->membase + EMAC_TX_PL0_REG);
465		/* start translate from fifo to phy */
466		writel(readl(db->membase + EMAC_TX_CTL0_REG) | 1,
467		       db->membase + EMAC_TX_CTL0_REG);
468
469		/* save the time stamp */
470		dev->trans_start = jiffies;
471	} else if (channel == 1) {
472		/* set TX len */
473		writel(skb->len, db->membase + EMAC_TX_PL1_REG);
474		/* start translate from fifo to phy */
475		writel(readl(db->membase + EMAC_TX_CTL1_REG) | 1,
476		       db->membase + EMAC_TX_CTL1_REG);
477
478		/* save the time stamp */
479		dev->trans_start = jiffies;
480	}
481
482	if ((db->tx_fifo_stat & 3) == 3) {
483		/* Second packet */
484		netif_stop_queue(dev);
485	}
486
487	spin_unlock_irqrestore(&db->lock, flags);
488
489	/* free this SKB */
490	dev_consume_skb_any(skb);
491
492	return NETDEV_TX_OK;
493}
494
495/* EMAC interrupt handler
496 * receive the packet to upper layer, free the transmitted packet
497 */
498static void emac_tx_done(struct net_device *dev, struct emac_board_info *db,
499			  unsigned int tx_status)
500{
501	/* One packet sent complete */
502	db->tx_fifo_stat &= ~(tx_status & 3);
503	if (3 == (tx_status & 3))
504		dev->stats.tx_packets += 2;
505	else
506		dev->stats.tx_packets++;
507
508	if (netif_msg_tx_done(db))
509		dev_dbg(db->dev, "tx done, NSR %02x\n", tx_status);
510
511	netif_wake_queue(dev);
512}
513
514/* Received a packet and pass to upper layer
515 */
516static void emac_rx(struct net_device *dev)
517{
518	struct emac_board_info *db = netdev_priv(dev);
519	struct sk_buff *skb;
520	u8 *rdptr;
521	bool good_packet;
522	static int rxlen_last;
523	unsigned int reg_val;
524	u32 rxhdr, rxstatus, rxcount, rxlen;
525
526	/* Check packet ready or not */
527	while (1) {
528		/* race warning: the first packet might arrive with
529		 * the interrupts disabled, but the second will fix
530		 * it
531		 */
532		rxcount = readl(db->membase + EMAC_RX_FBC_REG);
533
534		if (netif_msg_rx_status(db))
535			dev_dbg(db->dev, "RXCount: %x\n", rxcount);
536
537		if ((db->skb_last != NULL) && (rxlen_last > 0)) {
538			dev->stats.rx_bytes += rxlen_last;
539
540			/* Pass to upper layer */
541			db->skb_last->protocol = eth_type_trans(db->skb_last,
542								dev);
543			netif_rx(db->skb_last);
544			dev->stats.rx_packets++;
545			db->skb_last = NULL;
546			rxlen_last = 0;
547
548			reg_val = readl(db->membase + EMAC_RX_CTL_REG);
549			reg_val &= ~EMAC_RX_CTL_DMA_EN;
550			writel(reg_val, db->membase + EMAC_RX_CTL_REG);
551		}
552
553		if (!rxcount) {
554			db->emacrx_completed_flag = 1;
555			reg_val = readl(db->membase + EMAC_INT_CTL_REG);
556			reg_val |= (0xf << 0) | (0x01 << 8);
557			writel(reg_val, db->membase + EMAC_INT_CTL_REG);
558
559			/* had one stuck? */
560			rxcount = readl(db->membase + EMAC_RX_FBC_REG);
561			if (!rxcount)
562				return;
563		}
564
565		reg_val = readl(db->membase + EMAC_RX_IO_DATA_REG);
566		if (netif_msg_rx_status(db))
567			dev_dbg(db->dev, "receive header: %x\n", reg_val);
568		if (reg_val != EMAC_UNDOCUMENTED_MAGIC) {
569			/* disable RX */
570			reg_val = readl(db->membase + EMAC_CTL_REG);
571			writel(reg_val & ~EMAC_CTL_RX_EN,
572			       db->membase + EMAC_CTL_REG);
573
574			/* Flush RX FIFO */
575			reg_val = readl(db->membase + EMAC_RX_CTL_REG);
576			writel(reg_val | (1 << 3),
577			       db->membase + EMAC_RX_CTL_REG);
578
579			do {
580				reg_val = readl(db->membase + EMAC_RX_CTL_REG);
581			} while (reg_val & (1 << 3));
582
583			/* enable RX */
584			reg_val = readl(db->membase + EMAC_CTL_REG);
585			writel(reg_val | EMAC_CTL_RX_EN,
586			       db->membase + EMAC_CTL_REG);
587			reg_val = readl(db->membase + EMAC_INT_CTL_REG);
588			reg_val |= (0xf << 0) | (0x01 << 8);
589			writel(reg_val, db->membase + EMAC_INT_CTL_REG);
590
591			db->emacrx_completed_flag = 1;
592
593			return;
594		}
595
596		/* A packet ready now  & Get status/length */
597		good_packet = true;
598
599		emac_inblk_32bit(db->membase + EMAC_RX_IO_DATA_REG,
600				&rxhdr, sizeof(rxhdr));
601
602		if (netif_msg_rx_status(db))
603			dev_dbg(db->dev, "rxhdr: %x\n", *((int *)(&rxhdr)));
604
605		rxlen = EMAC_RX_IO_DATA_LEN(rxhdr);
606		rxstatus = EMAC_RX_IO_DATA_STATUS(rxhdr);
607
608		if (netif_msg_rx_status(db))
609			dev_dbg(db->dev, "RX: status %02x, length %04x\n",
610				rxstatus, rxlen);
611
612		/* Packet Status check */
613		if (rxlen < 0x40) {
614			good_packet = false;
615			if (netif_msg_rx_err(db))
616				dev_dbg(db->dev, "RX: Bad Packet (runt)\n");
617		}
618
619		if (unlikely(!(rxstatus & EMAC_RX_IO_DATA_STATUS_OK))) {
620			good_packet = false;
621
622			if (rxstatus & EMAC_RX_IO_DATA_STATUS_CRC_ERR) {
623				if (netif_msg_rx_err(db))
624					dev_dbg(db->dev, "crc error\n");
625				dev->stats.rx_crc_errors++;
626			}
627
628			if (rxstatus & EMAC_RX_IO_DATA_STATUS_LEN_ERR) {
629				if (netif_msg_rx_err(db))
630					dev_dbg(db->dev, "length error\n");
631				dev->stats.rx_length_errors++;
632			}
633		}
634
635		/* Move data from EMAC */
636		if (good_packet) {
637			skb = netdev_alloc_skb(dev, rxlen + 4);
638			if (!skb)
639				continue;
640			skb_reserve(skb, 2);
641			rdptr = (u8 *) skb_put(skb, rxlen - 4);
642
643			/* Read received packet from RX SRAM */
644			if (netif_msg_rx_status(db))
645				dev_dbg(db->dev, "RxLen %x\n", rxlen);
646
647			emac_inblk_32bit(db->membase + EMAC_RX_IO_DATA_REG,
648					rdptr, rxlen);
649			dev->stats.rx_bytes += rxlen;
650
651			/* Pass to upper layer */
652			skb->protocol = eth_type_trans(skb, dev);
653			netif_rx(skb);
654			dev->stats.rx_packets++;
655		}
656	}
657}
658
659static irqreturn_t emac_interrupt(int irq, void *dev_id)
660{
661	struct net_device *dev = dev_id;
662	struct emac_board_info *db = netdev_priv(dev);
663	int int_status;
664	unsigned long flags;
665	unsigned int reg_val;
666
667	/* A real interrupt coming */
668
669	/* holders of db->lock must always block IRQs */
670	spin_lock_irqsave(&db->lock, flags);
671
672	/* Disable all interrupts */
673	writel(0, db->membase + EMAC_INT_CTL_REG);
674
675	/* Got EMAC interrupt status */
676	/* Got ISR */
677	int_status = readl(db->membase + EMAC_INT_STA_REG);
678	/* Clear ISR status */
679	writel(int_status, db->membase + EMAC_INT_STA_REG);
680
681	if (netif_msg_intr(db))
682		dev_dbg(db->dev, "emac interrupt %02x\n", int_status);
683
684	/* Received the coming packet */
685	if ((int_status & 0x100) && (db->emacrx_completed_flag == 1)) {
686		/* carrier lost */
687		db->emacrx_completed_flag = 0;
688		emac_rx(dev);
689	}
690
691	/* Transmit Interrupt check */
692	if (int_status & (0x01 | 0x02))
693		emac_tx_done(dev, db, int_status);
694
695	if (int_status & (0x04 | 0x08))
696		netdev_info(dev, " ab : %x\n", int_status);
697
698	/* Re-enable interrupt mask */
699	if (db->emacrx_completed_flag == 1) {
700		reg_val = readl(db->membase + EMAC_INT_CTL_REG);
701		reg_val |= (0xf << 0) | (0x01 << 8);
702		writel(reg_val, db->membase + EMAC_INT_CTL_REG);
703	}
704	spin_unlock_irqrestore(&db->lock, flags);
705
706	return IRQ_HANDLED;
707}
708
709#ifdef CONFIG_NET_POLL_CONTROLLER
710/*
711 * Used by netconsole
712 */
713static void emac_poll_controller(struct net_device *dev)
714{
715	disable_irq(dev->irq);
716	emac_interrupt(dev->irq, dev);
717	enable_irq(dev->irq);
718}
719#endif
720
721/*  Open the interface.
722 *  The interface is opened whenever "ifconfig" actives it.
723 */
724static int emac_open(struct net_device *dev)
725{
726	struct emac_board_info *db = netdev_priv(dev);
727	int ret;
728
729	if (netif_msg_ifup(db))
730		dev_dbg(db->dev, "enabling %s\n", dev->name);
731
732	if (request_irq(dev->irq, &emac_interrupt, 0, dev->name, dev))
733		return -EAGAIN;
734
735	/* Initialize EMAC board */
736	emac_reset(db);
737	emac_init_device(dev);
738
739	ret = emac_mdio_probe(dev);
740	if (ret < 0) {
741		free_irq(dev->irq, dev);
742		netdev_err(dev, "cannot probe MDIO bus\n");
743		return ret;
744	}
745
746	phy_start(db->phy_dev);
747	netif_start_queue(dev);
748
749	return 0;
750}
751
752static void emac_shutdown(struct net_device *dev)
753{
754	unsigned int reg_val;
755	struct emac_board_info *db = netdev_priv(dev);
756
757	/* Disable all interrupt */
758	writel(0, db->membase + EMAC_INT_CTL_REG);
759
760	/* clear interupt status */
761	reg_val = readl(db->membase + EMAC_INT_STA_REG);
762	writel(reg_val, db->membase + EMAC_INT_STA_REG);
763
764	/* Disable RX/TX */
765	reg_val = readl(db->membase + EMAC_CTL_REG);
766	reg_val &= ~(EMAC_CTL_TX_EN | EMAC_CTL_RX_EN | EMAC_CTL_RESET);
767	writel(reg_val, db->membase + EMAC_CTL_REG);
768}
769
770/* Stop the interface.
771 * The interface is stopped when it is brought.
772 */
773static int emac_stop(struct net_device *ndev)
774{
775	struct emac_board_info *db = netdev_priv(ndev);
776
777	if (netif_msg_ifdown(db))
778		dev_dbg(db->dev, "shutting down %s\n", ndev->name);
779
780	netif_stop_queue(ndev);
781	netif_carrier_off(ndev);
782
783	phy_stop(db->phy_dev);
784
785	emac_mdio_remove(ndev);
786
787	emac_shutdown(ndev);
788
789	free_irq(ndev->irq, ndev);
790
791	return 0;
792}
793
794static const struct net_device_ops emac_netdev_ops = {
795	.ndo_open		= emac_open,
796	.ndo_stop		= emac_stop,
797	.ndo_start_xmit		= emac_start_xmit,
798	.ndo_tx_timeout		= emac_timeout,
799	.ndo_set_rx_mode	= emac_set_rx_mode,
800	.ndo_do_ioctl		= emac_ioctl,
801	.ndo_change_mtu		= eth_change_mtu,
802	.ndo_validate_addr	= eth_validate_addr,
803	.ndo_set_mac_address	= emac_set_mac_address,
804#ifdef CONFIG_NET_POLL_CONTROLLER
805	.ndo_poll_controller	= emac_poll_controller,
806#endif
807};
808
809/* Search EMAC board, allocate space and register it
810 */
811static int emac_probe(struct platform_device *pdev)
812{
813	struct device_node *np = pdev->dev.of_node;
814	struct emac_board_info *db;
815	struct net_device *ndev;
816	int ret = 0;
817	const char *mac_addr;
818
819	ndev = alloc_etherdev(sizeof(struct emac_board_info));
820	if (!ndev) {
821		dev_err(&pdev->dev, "could not allocate device.\n");
822		return -ENOMEM;
823	}
824
825	SET_NETDEV_DEV(ndev, &pdev->dev);
826
827	db = netdev_priv(ndev);
828	memset(db, 0, sizeof(*db));
829
830	db->dev = &pdev->dev;
831	db->ndev = ndev;
832	db->pdev = pdev;
833
834	spin_lock_init(&db->lock);
835
836	db->membase = of_iomap(np, 0);
837	if (!db->membase) {
838		dev_err(&pdev->dev, "failed to remap registers\n");
839		ret = -ENOMEM;
840		goto out;
841	}
842
843	/* fill in parameters for net-dev structure */
844	ndev->base_addr = (unsigned long)db->membase;
845	ndev->irq = irq_of_parse_and_map(np, 0);
846	if (ndev->irq == -ENXIO) {
847		netdev_err(ndev, "No irq resource\n");
848		ret = ndev->irq;
849		goto out;
850	}
851
852	db->clk = devm_clk_get(&pdev->dev, NULL);
853	if (IS_ERR(db->clk))
854		goto out;
855
856	clk_prepare_enable(db->clk);
857
858	db->phy_node = of_parse_phandle(np, "phy", 0);
859	if (!db->phy_node) {
860		dev_err(&pdev->dev, "no associated PHY\n");
861		ret = -ENODEV;
862		goto out;
863	}
864
865	/* Read MAC-address from DT */
866	mac_addr = of_get_mac_address(np);
867	if (mac_addr)
868		memcpy(ndev->dev_addr, mac_addr, ETH_ALEN);
869
870	/* Check if the MAC address is valid, if not get a random one */
871	if (!is_valid_ether_addr(ndev->dev_addr)) {
872		eth_hw_addr_random(ndev);
873		dev_warn(&pdev->dev, "using random MAC address %pM\n",
874			 ndev->dev_addr);
875	}
876
877	db->emacrx_completed_flag = 1;
878	emac_powerup(ndev);
879	emac_reset(db);
880
881	ndev->netdev_ops = &emac_netdev_ops;
882	ndev->watchdog_timeo = msecs_to_jiffies(watchdog);
883	ndev->ethtool_ops = &emac_ethtool_ops;
884
885	platform_set_drvdata(pdev, ndev);
886
887	/* Carrier starts down, phylib will bring it up */
888	netif_carrier_off(ndev);
889
890	ret = register_netdev(ndev);
891	if (ret) {
892		dev_err(&pdev->dev, "Registering netdev failed!\n");
893		ret = -ENODEV;
894		goto out;
895	}
896
897	dev_info(&pdev->dev, "%s: at %p, IRQ %d MAC: %pM\n",
898		 ndev->name, db->membase, ndev->irq, ndev->dev_addr);
899
900	return 0;
901
902out:
903	dev_err(db->dev, "not found (%d).\n", ret);
904
905	free_netdev(ndev);
906
907	return ret;
908}
909
910static int emac_remove(struct platform_device *pdev)
911{
912	struct net_device *ndev = platform_get_drvdata(pdev);
913
914	unregister_netdev(ndev);
915	free_netdev(ndev);
916
917	dev_dbg(&pdev->dev, "released and freed device\n");
918	return 0;
919}
920
921static int emac_suspend(struct platform_device *dev, pm_message_t state)
922{
923	struct net_device *ndev = platform_get_drvdata(dev);
924
925	netif_carrier_off(ndev);
926	netif_device_detach(ndev);
927	emac_shutdown(ndev);
928
929	return 0;
930}
931
932static int emac_resume(struct platform_device *dev)
933{
934	struct net_device *ndev = platform_get_drvdata(dev);
935	struct emac_board_info *db = netdev_priv(ndev);
936
937	emac_reset(db);
938	emac_init_device(ndev);
939	netif_device_attach(ndev);
940
941	return 0;
942}
943
944static const struct of_device_id emac_of_match[] = {
945	{.compatible = "allwinner,sun4i-a10-emac",},
946
947	/* Deprecated */
948	{.compatible = "allwinner,sun4i-emac",},
949	{},
950};
951
952MODULE_DEVICE_TABLE(of, emac_of_match);
953
954static struct platform_driver emac_driver = {
955	.driver = {
956		.name = "sun4i-emac",
957		.of_match_table = emac_of_match,
958	},
959	.probe = emac_probe,
960	.remove = emac_remove,
961	.suspend = emac_suspend,
962	.resume = emac_resume,
963};
964
965module_platform_driver(emac_driver);
966
967MODULE_AUTHOR("Stefan Roese <sr@denx.de>");
968MODULE_AUTHOR("Maxime Ripard <maxime.ripard@free-electrons.com>");
969MODULE_DESCRIPTION("Allwinner A10 emac network driver");
970MODULE_LICENSE("GPL");
971