1 /*
2  * ks8842.c timberdale KS8842 ethernet driver
3  * Copyright (c) 2009 Intel Corporation
4  *
5  * This program is free software; you can redistribute it and/or modify
6  * it under the terms of the GNU General Public License version 2 as
7  * published by the Free Software Foundation.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program; if not, write to the Free Software
16  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
17  */
18 
19 /* Supports:
20  * The Micrel KS8842 behind the timberdale FPGA
21  * The genuine Micrel KS8841/42 device with ISA 16/32bit bus interface
22  */
23 
24 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
25 
26 #include <linux/interrupt.h>
27 #include <linux/kernel.h>
28 #include <linux/module.h>
29 #include <linux/platform_device.h>
30 #include <linux/netdevice.h>
31 #include <linux/etherdevice.h>
32 #include <linux/ethtool.h>
33 #include <linux/ks8842.h>
34 #include <linux/dmaengine.h>
35 #include <linux/dma-mapping.h>
36 #include <linux/scatterlist.h>
37 
38 #define DRV_NAME "ks8842"
39 
40 /* Timberdale specific Registers */
41 #define REG_TIMB_RST		0x1c
42 #define REG_TIMB_FIFO		0x20
43 #define REG_TIMB_ISR		0x24
44 #define REG_TIMB_IER		0x28
45 #define REG_TIMB_IAR		0x2C
46 #define REQ_TIMB_DMA_RESUME	0x30
47 
48 /* KS8842 registers */
49 
50 #define REG_SELECT_BANK 0x0e
51 
52 /* bank 0 registers */
53 #define REG_QRFCR	0x04
54 
55 /* bank 2 registers */
56 #define REG_MARL	0x00
57 #define REG_MARM	0x02
58 #define REG_MARH	0x04
59 
60 /* bank 3 registers */
61 #define REG_GRR		0x06
62 
63 /* bank 16 registers */
64 #define REG_TXCR	0x00
65 #define REG_TXSR	0x02
66 #define REG_RXCR	0x04
67 #define REG_TXMIR	0x08
68 #define REG_RXMIR	0x0A
69 
70 /* bank 17 registers */
71 #define REG_TXQCR	0x00
72 #define REG_RXQCR	0x02
73 #define REG_TXFDPR	0x04
74 #define REG_RXFDPR	0x06
75 #define REG_QMU_DATA_LO 0x08
76 #define REG_QMU_DATA_HI 0x0A
77 
78 /* bank 18 registers */
79 #define REG_IER		0x00
80 #define IRQ_LINK_CHANGE	0x8000
81 #define IRQ_TX		0x4000
82 #define IRQ_RX		0x2000
83 #define IRQ_RX_OVERRUN	0x0800
84 #define IRQ_TX_STOPPED	0x0200
85 #define IRQ_RX_STOPPED	0x0100
86 #define IRQ_RX_ERROR	0x0080
87 #define ENABLED_IRQS	(IRQ_LINK_CHANGE | IRQ_TX | IRQ_RX | IRQ_RX_STOPPED | \
88 		IRQ_TX_STOPPED | IRQ_RX_OVERRUN | IRQ_RX_ERROR)
89 /* When running via timberdale in DMA mode, the RX interrupt should be
90    enabled in the KS8842, but not in the FPGA IP, since the IP handles
91    RX DMA internally.
92    TX interrupts are not needed it is handled by the FPGA the driver is
93    notified via DMA callbacks.
94 */
95 #define ENABLED_IRQS_DMA_IP	(IRQ_LINK_CHANGE | IRQ_RX_STOPPED | \
96 	IRQ_TX_STOPPED | IRQ_RX_OVERRUN | IRQ_RX_ERROR)
97 #define ENABLED_IRQS_DMA	(ENABLED_IRQS_DMA_IP | IRQ_RX)
98 #define REG_ISR		0x02
99 #define REG_RXSR	0x04
100 #define RXSR_VALID	0x8000
101 #define RXSR_BROADCAST	0x80
102 #define RXSR_MULTICAST	0x40
103 #define RXSR_UNICAST	0x20
104 #define RXSR_FRAMETYPE	0x08
105 #define RXSR_TOO_LONG	0x04
106 #define RXSR_RUNT	0x02
107 #define RXSR_CRC_ERROR	0x01
108 #define RXSR_ERROR	(RXSR_TOO_LONG | RXSR_RUNT | RXSR_CRC_ERROR)
109 
110 /* bank 32 registers */
111 #define REG_SW_ID_AND_ENABLE	0x00
112 #define REG_SGCR1		0x02
113 #define REG_SGCR2		0x04
114 #define REG_SGCR3		0x06
115 
116 /* bank 39 registers */
117 #define REG_MACAR1		0x00
118 #define REG_MACAR2		0x02
119 #define REG_MACAR3		0x04
120 
121 /* bank 45 registers */
122 #define REG_P1MBCR		0x00
123 #define REG_P1MBSR		0x02
124 
125 /* bank 46 registers */
126 #define REG_P2MBCR		0x00
127 #define REG_P2MBSR		0x02
128 
129 /* bank 48 registers */
130 #define REG_P1CR2		0x02
131 
132 /* bank 49 registers */
133 #define REG_P1CR4		0x02
134 #define REG_P1SR		0x04
135 
136 /* flags passed by platform_device for configuration */
137 #define	MICREL_KS884X		0x01	/* 0=Timeberdale(FPGA), 1=Micrel */
138 #define	KS884X_16BIT		0x02	/*  1=16bit, 0=32bit */
139 
140 #define DMA_BUFFER_SIZE		2048
141 
142 struct ks8842_tx_dma_ctl {
143 	struct dma_chan *chan;
144 	struct dma_async_tx_descriptor *adesc;
145 	void *buf;
146 	struct scatterlist sg;
147 	int channel;
148 };
149 
150 struct ks8842_rx_dma_ctl {
151 	struct dma_chan *chan;
152 	struct dma_async_tx_descriptor *adesc;
153 	struct sk_buff  *skb;
154 	struct scatterlist sg;
155 	struct tasklet_struct tasklet;
156 	int channel;
157 };
158 
159 #define KS8842_USE_DMA(adapter) (((adapter)->dma_tx.channel != -1) && \
160 	 ((adapter)->dma_rx.channel != -1))
161 
162 struct ks8842_adapter {
163 	void __iomem	*hw_addr;
164 	int		irq;
165 	unsigned long	conf_flags;	/* copy of platform_device config */
166 	struct tasklet_struct	tasklet;
167 	spinlock_t	lock; /* spinlock to be interrupt safe */
168 	struct work_struct timeout_work;
169 	struct net_device *netdev;
170 	struct device *dev;
171 	struct ks8842_tx_dma_ctl	dma_tx;
172 	struct ks8842_rx_dma_ctl	dma_rx;
173 };
174 
175 static void ks8842_dma_rx_cb(void *data);
176 static void ks8842_dma_tx_cb(void *data);
177 
178 static inline void ks8842_resume_dma(struct ks8842_adapter *adapter)
179 {
180 	iowrite32(1, adapter->hw_addr + REQ_TIMB_DMA_RESUME);
181 }
182 
183 static inline void ks8842_select_bank(struct ks8842_adapter *adapter, u16 bank)
184 {
185 	iowrite16(bank, adapter->hw_addr + REG_SELECT_BANK);
186 }
187 
188 static inline void ks8842_write8(struct ks8842_adapter *adapter, u16 bank,
189 	u8 value, int offset)
190 {
191 	ks8842_select_bank(adapter, bank);
192 	iowrite8(value, adapter->hw_addr + offset);
193 }
194 
195 static inline void ks8842_write16(struct ks8842_adapter *adapter, u16 bank,
196 	u16 value, int offset)
197 {
198 	ks8842_select_bank(adapter, bank);
199 	iowrite16(value, adapter->hw_addr + offset);
200 }
201 
202 static inline void ks8842_enable_bits(struct ks8842_adapter *adapter, u16 bank,
203 	u16 bits, int offset)
204 {
205 	u16 reg;
206 	ks8842_select_bank(adapter, bank);
207 	reg = ioread16(adapter->hw_addr + offset);
208 	reg |= bits;
209 	iowrite16(reg, adapter->hw_addr + offset);
210 }
211 
212 static inline void ks8842_clear_bits(struct ks8842_adapter *adapter, u16 bank,
213 	u16 bits, int offset)
214 {
215 	u16 reg;
216 	ks8842_select_bank(adapter, bank);
217 	reg = ioread16(adapter->hw_addr + offset);
218 	reg &= ~bits;
219 	iowrite16(reg, adapter->hw_addr + offset);
220 }
221 
222 static inline void ks8842_write32(struct ks8842_adapter *adapter, u16 bank,
223 	u32 value, int offset)
224 {
225 	ks8842_select_bank(adapter, bank);
226 	iowrite32(value, adapter->hw_addr + offset);
227 }
228 
229 static inline u8 ks8842_read8(struct ks8842_adapter *adapter, u16 bank,
230 	int offset)
231 {
232 	ks8842_select_bank(adapter, bank);
233 	return ioread8(adapter->hw_addr + offset);
234 }
235 
236 static inline u16 ks8842_read16(struct ks8842_adapter *adapter, u16 bank,
237 	int offset)
238 {
239 	ks8842_select_bank(adapter, bank);
240 	return ioread16(adapter->hw_addr + offset);
241 }
242 
243 static inline u32 ks8842_read32(struct ks8842_adapter *adapter, u16 bank,
244 	int offset)
245 {
246 	ks8842_select_bank(adapter, bank);
247 	return ioread32(adapter->hw_addr + offset);
248 }
249 
250 static void ks8842_reset(struct ks8842_adapter *adapter)
251 {
252 	if (adapter->conf_flags & MICREL_KS884X) {
253 		ks8842_write16(adapter, 3, 1, REG_GRR);
254 		msleep(10);
255 		iowrite16(0, adapter->hw_addr + REG_GRR);
256 	} else {
257 		/* The KS8842 goes haywire when doing softare reset
258 		* a work around in the timberdale IP is implemented to
259 		* do a hardware reset instead
260 		ks8842_write16(adapter, 3, 1, REG_GRR);
261 		msleep(10);
262 		iowrite16(0, adapter->hw_addr + REG_GRR);
263 		*/
264 		iowrite32(0x1, adapter->hw_addr + REG_TIMB_RST);
265 		msleep(20);
266 	}
267 }
268 
269 static void ks8842_update_link_status(struct net_device *netdev,
270 	struct ks8842_adapter *adapter)
271 {
272 	/* check the status of the link */
273 	if (ks8842_read16(adapter, 45, REG_P1MBSR) & 0x4) {
274 		netif_carrier_on(netdev);
275 		netif_wake_queue(netdev);
276 	} else {
277 		netif_stop_queue(netdev);
278 		netif_carrier_off(netdev);
279 	}
280 }
281 
282 static void ks8842_enable_tx(struct ks8842_adapter *adapter)
283 {
284 	ks8842_enable_bits(adapter, 16, 0x01, REG_TXCR);
285 }
286 
287 static void ks8842_disable_tx(struct ks8842_adapter *adapter)
288 {
289 	ks8842_clear_bits(adapter, 16, 0x01, REG_TXCR);
290 }
291 
292 static void ks8842_enable_rx(struct ks8842_adapter *adapter)
293 {
294 	ks8842_enable_bits(adapter, 16, 0x01, REG_RXCR);
295 }
296 
297 static void ks8842_disable_rx(struct ks8842_adapter *adapter)
298 {
299 	ks8842_clear_bits(adapter, 16, 0x01, REG_RXCR);
300 }
301 
302 static void ks8842_reset_hw(struct ks8842_adapter *adapter)
303 {
304 	/* reset the HW */
305 	ks8842_reset(adapter);
306 
307 	/* Enable QMU Transmit flow control / transmit padding / Transmit CRC */
308 	ks8842_write16(adapter, 16, 0x000E, REG_TXCR);
309 
310 	/* enable the receiver, uni + multi + broadcast + flow ctrl
311 		+ crc strip */
312 	ks8842_write16(adapter, 16, 0x8 | 0x20 | 0x40 | 0x80 | 0x400,
313 		REG_RXCR);
314 
315 	/* TX frame pointer autoincrement */
316 	ks8842_write16(adapter, 17, 0x4000, REG_TXFDPR);
317 
318 	/* RX frame pointer autoincrement */
319 	ks8842_write16(adapter, 17, 0x4000, REG_RXFDPR);
320 
321 	/* RX 2 kb high watermark */
322 	ks8842_write16(adapter, 0, 0x1000, REG_QRFCR);
323 
324 	/* aggressive back off in half duplex */
325 	ks8842_enable_bits(adapter, 32, 1 << 8, REG_SGCR1);
326 
327 	/* enable no excessive collison drop */
328 	ks8842_enable_bits(adapter, 32, 1 << 3, REG_SGCR2);
329 
330 	/* Enable port 1 force flow control / back pressure / transmit / recv */
331 	ks8842_write16(adapter, 48, 0x1E07, REG_P1CR2);
332 
333 	/* restart port auto-negotiation */
334 	ks8842_enable_bits(adapter, 49, 1 << 13, REG_P1CR4);
335 
336 	/* Enable the transmitter */
337 	ks8842_enable_tx(adapter);
338 
339 	/* Enable the receiver */
340 	ks8842_enable_rx(adapter);
341 
342 	/* clear all interrupts */
343 	ks8842_write16(adapter, 18, 0xffff, REG_ISR);
344 
345 	/* enable interrupts */
346 	if (KS8842_USE_DMA(adapter)) {
347 		/* When running in DMA Mode the RX interrupt is not enabled in
348 		   timberdale because RX data is received by DMA callbacks
349 		   it must still be enabled in the KS8842 because it indicates
350 		   to timberdale when there is RX data for it's DMA FIFOs */
351 		iowrite16(ENABLED_IRQS_DMA_IP, adapter->hw_addr + REG_TIMB_IER);
352 		ks8842_write16(adapter, 18, ENABLED_IRQS_DMA, REG_IER);
353 	} else {
354 		if (!(adapter->conf_flags & MICREL_KS884X))
355 			iowrite16(ENABLED_IRQS,
356 				adapter->hw_addr + REG_TIMB_IER);
357 		ks8842_write16(adapter, 18, ENABLED_IRQS, REG_IER);
358 	}
359 	/* enable the switch */
360 	ks8842_write16(adapter, 32, 0x1, REG_SW_ID_AND_ENABLE);
361 }
362 
363 static void ks8842_read_mac_addr(struct ks8842_adapter *adapter, u8 *dest)
364 {
365 	int i;
366 	u16 mac;
367 
368 	for (i = 0; i < ETH_ALEN; i++)
369 		dest[ETH_ALEN - i - 1] = ks8842_read8(adapter, 2, REG_MARL + i);
370 
371 	if (adapter->conf_flags & MICREL_KS884X) {
372 		/*
373 		the sequence of saving mac addr between MAC and Switch is
374 		different.
375 		*/
376 
377 		mac = ks8842_read16(adapter, 2, REG_MARL);
378 		ks8842_write16(adapter, 39, mac, REG_MACAR3);
379 		mac = ks8842_read16(adapter, 2, REG_MARM);
380 		ks8842_write16(adapter, 39, mac, REG_MACAR2);
381 		mac = ks8842_read16(adapter, 2, REG_MARH);
382 		ks8842_write16(adapter, 39, mac, REG_MACAR1);
383 	} else {
384 
385 		/* make sure the switch port uses the same MAC as the QMU */
386 		mac = ks8842_read16(adapter, 2, REG_MARL);
387 		ks8842_write16(adapter, 39, mac, REG_MACAR1);
388 		mac = ks8842_read16(adapter, 2, REG_MARM);
389 		ks8842_write16(adapter, 39, mac, REG_MACAR2);
390 		mac = ks8842_read16(adapter, 2, REG_MARH);
391 		ks8842_write16(adapter, 39, mac, REG_MACAR3);
392 	}
393 }
394 
395 static void ks8842_write_mac_addr(struct ks8842_adapter *adapter, u8 *mac)
396 {
397 	unsigned long flags;
398 	unsigned i;
399 
400 	spin_lock_irqsave(&adapter->lock, flags);
401 	for (i = 0; i < ETH_ALEN; i++) {
402 		ks8842_write8(adapter, 2, mac[ETH_ALEN - i - 1], REG_MARL + i);
403 		if (!(adapter->conf_flags & MICREL_KS884X))
404 			ks8842_write8(adapter, 39, mac[ETH_ALEN - i - 1],
405 				REG_MACAR1 + i);
406 	}
407 
408 	if (adapter->conf_flags & MICREL_KS884X) {
409 		/*
410 		the sequence of saving mac addr between MAC and Switch is
411 		different.
412 		*/
413 
414 		u16 mac;
415 
416 		mac = ks8842_read16(adapter, 2, REG_MARL);
417 		ks8842_write16(adapter, 39, mac, REG_MACAR3);
418 		mac = ks8842_read16(adapter, 2, REG_MARM);
419 		ks8842_write16(adapter, 39, mac, REG_MACAR2);
420 		mac = ks8842_read16(adapter, 2, REG_MARH);
421 		ks8842_write16(adapter, 39, mac, REG_MACAR1);
422 	}
423 	spin_unlock_irqrestore(&adapter->lock, flags);
424 }
425 
426 static inline u16 ks8842_tx_fifo_space(struct ks8842_adapter *adapter)
427 {
428 	return ks8842_read16(adapter, 16, REG_TXMIR) & 0x1fff;
429 }
430 
431 static int ks8842_tx_frame_dma(struct sk_buff *skb, struct net_device *netdev)
432 {
433 	struct ks8842_adapter *adapter = netdev_priv(netdev);
434 	struct ks8842_tx_dma_ctl *ctl = &adapter->dma_tx;
435 	u8 *buf = ctl->buf;
436 
437 	if (ctl->adesc) {
438 		netdev_dbg(netdev, "%s: TX ongoing\n", __func__);
439 		/* transfer ongoing */
440 		return NETDEV_TX_BUSY;
441 	}
442 
443 	sg_dma_len(&ctl->sg) = skb->len + sizeof(u32);
444 
445 	/* copy data to the TX buffer */
446 	/* the control word, enable IRQ, port 1 and the length */
447 	*buf++ = 0x00;
448 	*buf++ = 0x01; /* Port 1 */
449 	*buf++ = skb->len & 0xff;
450 	*buf++ = (skb->len >> 8) & 0xff;
451 	skb_copy_from_linear_data(skb, buf, skb->len);
452 
453 	dma_sync_single_range_for_device(adapter->dev,
454 		sg_dma_address(&ctl->sg), 0, sg_dma_len(&ctl->sg),
455 		DMA_TO_DEVICE);
456 
457 	/* make sure the length is a multiple of 4 */
458 	if (sg_dma_len(&ctl->sg) % 4)
459 		sg_dma_len(&ctl->sg) += 4 - sg_dma_len(&ctl->sg) % 4;
460 
461 	ctl->adesc = dmaengine_prep_slave_sg(ctl->chan,
462 		&ctl->sg, 1, DMA_MEM_TO_DEV,
463 		DMA_PREP_INTERRUPT | DMA_COMPL_SKIP_SRC_UNMAP);
464 	if (!ctl->adesc)
465 		return NETDEV_TX_BUSY;
466 
467 	ctl->adesc->callback_param = netdev;
468 	ctl->adesc->callback = ks8842_dma_tx_cb;
469 	ctl->adesc->tx_submit(ctl->adesc);
470 
471 	netdev->stats.tx_bytes += skb->len;
472 
473 	dev_kfree_skb(skb);
474 
475 	return NETDEV_TX_OK;
476 }
477 
478 static int ks8842_tx_frame(struct sk_buff *skb, struct net_device *netdev)
479 {
480 	struct ks8842_adapter *adapter = netdev_priv(netdev);
481 	int len = skb->len;
482 
483 	netdev_dbg(netdev, "%s: len %u head %p data %p tail %p end %p\n",
484 		__func__, skb->len, skb->head, skb->data,
485 		skb_tail_pointer(skb), skb_end_pointer(skb));
486 
487 	/* check FIFO buffer space, we need space for CRC and command bits */
488 	if (ks8842_tx_fifo_space(adapter) < len + 8)
489 		return NETDEV_TX_BUSY;
490 
491 	if (adapter->conf_flags & KS884X_16BIT) {
492 		u16 *ptr16 = (u16 *)skb->data;
493 		ks8842_write16(adapter, 17, 0x8000 | 0x100, REG_QMU_DATA_LO);
494 		ks8842_write16(adapter, 17, (u16)len, REG_QMU_DATA_HI);
495 		netdev->stats.tx_bytes += len;
496 
497 		/* copy buffer */
498 		while (len > 0) {
499 			iowrite16(*ptr16++, adapter->hw_addr + REG_QMU_DATA_LO);
500 			iowrite16(*ptr16++, adapter->hw_addr + REG_QMU_DATA_HI);
501 			len -= sizeof(u32);
502 		}
503 	} else {
504 
505 		u32 *ptr = (u32 *)skb->data;
506 		u32 ctrl;
507 		/* the control word, enable IRQ, port 1 and the length */
508 		ctrl = 0x8000 | 0x100 | (len << 16);
509 		ks8842_write32(adapter, 17, ctrl, REG_QMU_DATA_LO);
510 
511 		netdev->stats.tx_bytes += len;
512 
513 		/* copy buffer */
514 		while (len > 0) {
515 			iowrite32(*ptr, adapter->hw_addr + REG_QMU_DATA_LO);
516 			len -= sizeof(u32);
517 			ptr++;
518 		}
519 	}
520 
521 	/* enqueue packet */
522 	ks8842_write16(adapter, 17, 1, REG_TXQCR);
523 
524 	dev_kfree_skb(skb);
525 
526 	return NETDEV_TX_OK;
527 }
528 
529 static void ks8842_update_rx_err_counters(struct net_device *netdev, u32 status)
530 {
531 	netdev_dbg(netdev, "RX error, status: %x\n", status);
532 
533 	netdev->stats.rx_errors++;
534 	if (status & RXSR_TOO_LONG)
535 		netdev->stats.rx_length_errors++;
536 	if (status & RXSR_CRC_ERROR)
537 		netdev->stats.rx_crc_errors++;
538 	if (status & RXSR_RUNT)
539 		netdev->stats.rx_frame_errors++;
540 }
541 
542 static void ks8842_update_rx_counters(struct net_device *netdev, u32 status,
543 	int len)
544 {
545 	netdev_dbg(netdev, "RX packet, len: %d\n", len);
546 
547 	netdev->stats.rx_packets++;
548 	netdev->stats.rx_bytes += len;
549 	if (status & RXSR_MULTICAST)
550 		netdev->stats.multicast++;
551 }
552 
553 static int __ks8842_start_new_rx_dma(struct net_device *netdev)
554 {
555 	struct ks8842_adapter *adapter = netdev_priv(netdev);
556 	struct ks8842_rx_dma_ctl *ctl = &adapter->dma_rx;
557 	struct scatterlist *sg = &ctl->sg;
558 	int err;
559 
560 	ctl->skb = netdev_alloc_skb(netdev, DMA_BUFFER_SIZE);
561 	if (ctl->skb) {
562 		sg_init_table(sg, 1);
563 		sg_dma_address(sg) = dma_map_single(adapter->dev,
564 			ctl->skb->data, DMA_BUFFER_SIZE, DMA_FROM_DEVICE);
565 		err = dma_mapping_error(adapter->dev, sg_dma_address(sg));
566 		if (unlikely(err)) {
567 			sg_dma_address(sg) = 0;
568 			goto out;
569 		}
570 
571 		sg_dma_len(sg) = DMA_BUFFER_SIZE;
572 
573 		ctl->adesc = dmaengine_prep_slave_sg(ctl->chan,
574 			sg, 1, DMA_DEV_TO_MEM,
575 			DMA_PREP_INTERRUPT | DMA_COMPL_SKIP_SRC_UNMAP);
576 
577 		if (!ctl->adesc)
578 			goto out;
579 
580 		ctl->adesc->callback_param = netdev;
581 		ctl->adesc->callback = ks8842_dma_rx_cb;
582 		ctl->adesc->tx_submit(ctl->adesc);
583 	} else {
584 		err = -ENOMEM;
585 		sg_dma_address(sg) = 0;
586 		goto out;
587 	}
588 
589 	return err;
590 out:
591 	if (sg_dma_address(sg))
592 		dma_unmap_single(adapter->dev, sg_dma_address(sg),
593 			DMA_BUFFER_SIZE, DMA_FROM_DEVICE);
594 	sg_dma_address(sg) = 0;
595 	if (ctl->skb)
596 		dev_kfree_skb(ctl->skb);
597 
598 	ctl->skb = NULL;
599 
600 	printk(KERN_ERR DRV_NAME": Failed to start RX DMA: %d\n", err);
601 	return err;
602 }
603 
604 static void ks8842_rx_frame_dma_tasklet(unsigned long arg)
605 {
606 	struct net_device *netdev = (struct net_device *)arg;
607 	struct ks8842_adapter *adapter = netdev_priv(netdev);
608 	struct ks8842_rx_dma_ctl *ctl = &adapter->dma_rx;
609 	struct sk_buff *skb = ctl->skb;
610 	dma_addr_t addr = sg_dma_address(&ctl->sg);
611 	u32 status;
612 
613 	ctl->adesc = NULL;
614 
615 	/* kick next transfer going */
616 	__ks8842_start_new_rx_dma(netdev);
617 
618 	/* now handle the data we got */
619 	dma_unmap_single(adapter->dev, addr, DMA_BUFFER_SIZE, DMA_FROM_DEVICE);
620 
621 	status = *((u32 *)skb->data);
622 
623 	netdev_dbg(netdev, "%s - rx_data: status: %x\n",
624 		__func__, status & 0xffff);
625 
626 	/* check the status */
627 	if ((status & RXSR_VALID) && !(status & RXSR_ERROR)) {
628 		int len = (status >> 16) & 0x7ff;
629 
630 		ks8842_update_rx_counters(netdev, status, len);
631 
632 		/* reserve 4 bytes which is the status word */
633 		skb_reserve(skb, 4);
634 		skb_put(skb, len);
635 
636 		skb->protocol = eth_type_trans(skb, netdev);
637 		netif_rx(skb);
638 	} else {
639 		ks8842_update_rx_err_counters(netdev, status);
640 		dev_kfree_skb(skb);
641 	}
642 }
643 
644 static void ks8842_rx_frame(struct net_device *netdev,
645 	struct ks8842_adapter *adapter)
646 {
647 	u32 status;
648 	int len;
649 
650 	if (adapter->conf_flags & KS884X_16BIT) {
651 		status = ks8842_read16(adapter, 17, REG_QMU_DATA_LO);
652 		len = ks8842_read16(adapter, 17, REG_QMU_DATA_HI);
653 		netdev_dbg(netdev, "%s - rx_data: status: %x\n",
654 			   __func__, status);
655 	} else {
656 		status = ks8842_read32(adapter, 17, REG_QMU_DATA_LO);
657 		len = (status >> 16) & 0x7ff;
658 		status &= 0xffff;
659 		netdev_dbg(netdev, "%s - rx_data: status: %x\n",
660 			   __func__, status);
661 	}
662 
663 	/* check the status */
664 	if ((status & RXSR_VALID) && !(status & RXSR_ERROR)) {
665 		struct sk_buff *skb = netdev_alloc_skb_ip_align(netdev, len + 3);
666 
667 		if (skb) {
668 
669 			ks8842_update_rx_counters(netdev, status, len);
670 
671 			if (adapter->conf_flags & KS884X_16BIT) {
672 				u16 *data16 = (u16 *)skb_put(skb, len);
673 				ks8842_select_bank(adapter, 17);
674 				while (len > 0) {
675 					*data16++ = ioread16(adapter->hw_addr +
676 						REG_QMU_DATA_LO);
677 					*data16++ = ioread16(adapter->hw_addr +
678 						REG_QMU_DATA_HI);
679 					len -= sizeof(u32);
680 				}
681 			} else {
682 				u32 *data = (u32 *)skb_put(skb, len);
683 
684 				ks8842_select_bank(adapter, 17);
685 				while (len > 0) {
686 					*data++ = ioread32(adapter->hw_addr +
687 						REG_QMU_DATA_LO);
688 					len -= sizeof(u32);
689 				}
690 			}
691 			skb->protocol = eth_type_trans(skb, netdev);
692 			netif_rx(skb);
693 		} else
694 			netdev->stats.rx_dropped++;
695 	} else
696 		ks8842_update_rx_err_counters(netdev, status);
697 
698 	/* set high watermark to 3K */
699 	ks8842_clear_bits(adapter, 0, 1 << 12, REG_QRFCR);
700 
701 	/* release the frame */
702 	ks8842_write16(adapter, 17, 0x01, REG_RXQCR);
703 
704 	/* set high watermark to 2K */
705 	ks8842_enable_bits(adapter, 0, 1 << 12, REG_QRFCR);
706 }
707 
708 static void ks8842_handle_rx(struct net_device *netdev,
709 	struct ks8842_adapter *adapter)
710 {
711 	u16 rx_data = ks8842_read16(adapter, 16, REG_RXMIR) & 0x1fff;
712 	netdev_dbg(netdev, "%s Entry - rx_data: %d\n", __func__, rx_data);
713 	while (rx_data) {
714 		ks8842_rx_frame(netdev, adapter);
715 		rx_data = ks8842_read16(adapter, 16, REG_RXMIR) & 0x1fff;
716 	}
717 }
718 
719 static void ks8842_handle_tx(struct net_device *netdev,
720 	struct ks8842_adapter *adapter)
721 {
722 	u16 sr = ks8842_read16(adapter, 16, REG_TXSR);
723 	netdev_dbg(netdev, "%s - entry, sr: %x\n", __func__, sr);
724 	netdev->stats.tx_packets++;
725 	if (netif_queue_stopped(netdev))
726 		netif_wake_queue(netdev);
727 }
728 
729 static void ks8842_handle_rx_overrun(struct net_device *netdev,
730 	struct ks8842_adapter *adapter)
731 {
732 	netdev_dbg(netdev, "%s: entry\n", __func__);
733 	netdev->stats.rx_errors++;
734 	netdev->stats.rx_fifo_errors++;
735 }
736 
737 static void ks8842_tasklet(unsigned long arg)
738 {
739 	struct net_device *netdev = (struct net_device *)arg;
740 	struct ks8842_adapter *adapter = netdev_priv(netdev);
741 	u16 isr;
742 	unsigned long flags;
743 	u16 entry_bank;
744 
745 	/* read current bank to be able to set it back */
746 	spin_lock_irqsave(&adapter->lock, flags);
747 	entry_bank = ioread16(adapter->hw_addr + REG_SELECT_BANK);
748 	spin_unlock_irqrestore(&adapter->lock, flags);
749 
750 	isr = ks8842_read16(adapter, 18, REG_ISR);
751 	netdev_dbg(netdev, "%s - ISR: 0x%x\n", __func__, isr);
752 
753 	/* when running in DMA mode, do not ack RX interrupts, it is handled
754 	   internally by timberdale, otherwise it's DMA FIFO:s would stop
755 	*/
756 	if (KS8842_USE_DMA(adapter))
757 		isr &= ~IRQ_RX;
758 
759 	/* Ack */
760 	ks8842_write16(adapter, 18, isr, REG_ISR);
761 
762 	if (!(adapter->conf_flags & MICREL_KS884X))
763 		/* Ack in the timberdale IP as well */
764 		iowrite32(0x1, adapter->hw_addr + REG_TIMB_IAR);
765 
766 	if (!netif_running(netdev))
767 		return;
768 
769 	if (isr & IRQ_LINK_CHANGE)
770 		ks8842_update_link_status(netdev, adapter);
771 
772 	/* should not get IRQ_RX when running DMA mode */
773 	if (isr & (IRQ_RX | IRQ_RX_ERROR) && !KS8842_USE_DMA(adapter))
774 		ks8842_handle_rx(netdev, adapter);
775 
776 	/* should only happen when in PIO mode */
777 	if (isr & IRQ_TX)
778 		ks8842_handle_tx(netdev, adapter);
779 
780 	if (isr & IRQ_RX_OVERRUN)
781 		ks8842_handle_rx_overrun(netdev, adapter);
782 
783 	if (isr & IRQ_TX_STOPPED) {
784 		ks8842_disable_tx(adapter);
785 		ks8842_enable_tx(adapter);
786 	}
787 
788 	if (isr & IRQ_RX_STOPPED) {
789 		ks8842_disable_rx(adapter);
790 		ks8842_enable_rx(adapter);
791 	}
792 
793 	/* re-enable interrupts, put back the bank selection register */
794 	spin_lock_irqsave(&adapter->lock, flags);
795 	if (KS8842_USE_DMA(adapter))
796 		ks8842_write16(adapter, 18, ENABLED_IRQS_DMA, REG_IER);
797 	else
798 		ks8842_write16(adapter, 18, ENABLED_IRQS, REG_IER);
799 	iowrite16(entry_bank, adapter->hw_addr + REG_SELECT_BANK);
800 
801 	/* Make sure timberdale continues DMA operations, they are stopped while
802 	   we are handling the ks8842 because we might change bank */
803 	if (KS8842_USE_DMA(adapter))
804 		ks8842_resume_dma(adapter);
805 
806 	spin_unlock_irqrestore(&adapter->lock, flags);
807 }
808 
809 static irqreturn_t ks8842_irq(int irq, void *devid)
810 {
811 	struct net_device *netdev = devid;
812 	struct ks8842_adapter *adapter = netdev_priv(netdev);
813 	u16 isr;
814 	u16 entry_bank = ioread16(adapter->hw_addr + REG_SELECT_BANK);
815 	irqreturn_t ret = IRQ_NONE;
816 
817 	isr = ks8842_read16(adapter, 18, REG_ISR);
818 	netdev_dbg(netdev, "%s - ISR: 0x%x\n", __func__, isr);
819 
820 	if (isr) {
821 		if (KS8842_USE_DMA(adapter))
822 			/* disable all but RX IRQ, since the FPGA relies on it*/
823 			ks8842_write16(adapter, 18, IRQ_RX, REG_IER);
824 		else
825 			/* disable IRQ */
826 			ks8842_write16(adapter, 18, 0x00, REG_IER);
827 
828 		/* schedule tasklet */
829 		tasklet_schedule(&adapter->tasklet);
830 
831 		ret = IRQ_HANDLED;
832 	}
833 
834 	iowrite16(entry_bank, adapter->hw_addr + REG_SELECT_BANK);
835 
836 	/* After an interrupt, tell timberdale to continue DMA operations.
837 	   DMA is disabled while we are handling the ks8842 because we might
838 	   change bank */
839 	ks8842_resume_dma(adapter);
840 
841 	return ret;
842 }
843 
844 static void ks8842_dma_rx_cb(void *data)
845 {
846 	struct net_device	*netdev = data;
847 	struct ks8842_adapter	*adapter = netdev_priv(netdev);
848 
849 	netdev_dbg(netdev, "RX DMA finished\n");
850 	/* schedule tasklet */
851 	if (adapter->dma_rx.adesc)
852 		tasklet_schedule(&adapter->dma_rx.tasklet);
853 }
854 
855 static void ks8842_dma_tx_cb(void *data)
856 {
857 	struct net_device		*netdev = data;
858 	struct ks8842_adapter		*adapter = netdev_priv(netdev);
859 	struct ks8842_tx_dma_ctl	*ctl = &adapter->dma_tx;
860 
861 	netdev_dbg(netdev, "TX DMA finished\n");
862 
863 	if (!ctl->adesc)
864 		return;
865 
866 	netdev->stats.tx_packets++;
867 	ctl->adesc = NULL;
868 
869 	if (netif_queue_stopped(netdev))
870 		netif_wake_queue(netdev);
871 }
872 
873 static void ks8842_stop_dma(struct ks8842_adapter *adapter)
874 {
875 	struct ks8842_tx_dma_ctl *tx_ctl = &adapter->dma_tx;
876 	struct ks8842_rx_dma_ctl *rx_ctl = &adapter->dma_rx;
877 
878 	tx_ctl->adesc = NULL;
879 	if (tx_ctl->chan)
880 		tx_ctl->chan->device->device_control(tx_ctl->chan,
881 			DMA_TERMINATE_ALL, 0);
882 
883 	rx_ctl->adesc = NULL;
884 	if (rx_ctl->chan)
885 		rx_ctl->chan->device->device_control(rx_ctl->chan,
886 			DMA_TERMINATE_ALL, 0);
887 
888 	if (sg_dma_address(&rx_ctl->sg))
889 		dma_unmap_single(adapter->dev, sg_dma_address(&rx_ctl->sg),
890 			DMA_BUFFER_SIZE, DMA_FROM_DEVICE);
891 	sg_dma_address(&rx_ctl->sg) = 0;
892 
893 	dev_kfree_skb(rx_ctl->skb);
894 	rx_ctl->skb = NULL;
895 }
896 
897 static void ks8842_dealloc_dma_bufs(struct ks8842_adapter *adapter)
898 {
899 	struct ks8842_tx_dma_ctl *tx_ctl = &adapter->dma_tx;
900 	struct ks8842_rx_dma_ctl *rx_ctl = &adapter->dma_rx;
901 
902 	ks8842_stop_dma(adapter);
903 
904 	if (tx_ctl->chan)
905 		dma_release_channel(tx_ctl->chan);
906 	tx_ctl->chan = NULL;
907 
908 	if (rx_ctl->chan)
909 		dma_release_channel(rx_ctl->chan);
910 	rx_ctl->chan = NULL;
911 
912 	tasklet_kill(&rx_ctl->tasklet);
913 
914 	if (sg_dma_address(&tx_ctl->sg))
915 		dma_unmap_single(adapter->dev, sg_dma_address(&tx_ctl->sg),
916 			DMA_BUFFER_SIZE, DMA_TO_DEVICE);
917 	sg_dma_address(&tx_ctl->sg) = 0;
918 
919 	kfree(tx_ctl->buf);
920 	tx_ctl->buf = NULL;
921 }
922 
923 static bool ks8842_dma_filter_fn(struct dma_chan *chan, void *filter_param)
924 {
925 	return chan->chan_id == (long)filter_param;
926 }
927 
928 static int ks8842_alloc_dma_bufs(struct net_device *netdev)
929 {
930 	struct ks8842_adapter *adapter = netdev_priv(netdev);
931 	struct ks8842_tx_dma_ctl *tx_ctl = &adapter->dma_tx;
932 	struct ks8842_rx_dma_ctl *rx_ctl = &adapter->dma_rx;
933 	int err;
934 
935 	dma_cap_mask_t mask;
936 
937 	dma_cap_zero(mask);
938 	dma_cap_set(DMA_SLAVE, mask);
939 	dma_cap_set(DMA_PRIVATE, mask);
940 
941 	sg_init_table(&tx_ctl->sg, 1);
942 
943 	tx_ctl->chan = dma_request_channel(mask, ks8842_dma_filter_fn,
944 					   (void *)(long)tx_ctl->channel);
945 	if (!tx_ctl->chan) {
946 		err = -ENODEV;
947 		goto err;
948 	}
949 
950 	/* allocate DMA buffer */
951 	tx_ctl->buf = kmalloc(DMA_BUFFER_SIZE, GFP_KERNEL);
952 	if (!tx_ctl->buf) {
953 		err = -ENOMEM;
954 		goto err;
955 	}
956 
957 	sg_dma_address(&tx_ctl->sg) = dma_map_single(adapter->dev,
958 		tx_ctl->buf, DMA_BUFFER_SIZE, DMA_TO_DEVICE);
959 	err = dma_mapping_error(adapter->dev,
960 		sg_dma_address(&tx_ctl->sg));
961 	if (err) {
962 		sg_dma_address(&tx_ctl->sg) = 0;
963 		goto err;
964 	}
965 
966 	rx_ctl->chan = dma_request_channel(mask, ks8842_dma_filter_fn,
967 					   (void *)(long)rx_ctl->channel);
968 	if (!rx_ctl->chan) {
969 		err = -ENODEV;
970 		goto err;
971 	}
972 
973 	tasklet_init(&rx_ctl->tasklet, ks8842_rx_frame_dma_tasklet,
974 		(unsigned long)netdev);
975 
976 	return 0;
977 err:
978 	ks8842_dealloc_dma_bufs(adapter);
979 	return err;
980 }
981 
982 /* Netdevice operations */
983 
984 static int ks8842_open(struct net_device *netdev)
985 {
986 	struct ks8842_adapter *adapter = netdev_priv(netdev);
987 	int err;
988 
989 	netdev_dbg(netdev, "%s - entry\n", __func__);
990 
991 	if (KS8842_USE_DMA(adapter)) {
992 		err = ks8842_alloc_dma_bufs(netdev);
993 
994 		if (!err) {
995 			/* start RX dma */
996 			err = __ks8842_start_new_rx_dma(netdev);
997 			if (err)
998 				ks8842_dealloc_dma_bufs(adapter);
999 		}
1000 
1001 		if (err) {
1002 			printk(KERN_WARNING DRV_NAME
1003 				": Failed to initiate DMA, running PIO\n");
1004 			ks8842_dealloc_dma_bufs(adapter);
1005 			adapter->dma_rx.channel = -1;
1006 			adapter->dma_tx.channel = -1;
1007 		}
1008 	}
1009 
1010 	/* reset the HW */
1011 	ks8842_reset_hw(adapter);
1012 
1013 	ks8842_write_mac_addr(adapter, netdev->dev_addr);
1014 
1015 	ks8842_update_link_status(netdev, adapter);
1016 
1017 	err = request_irq(adapter->irq, ks8842_irq, IRQF_SHARED, DRV_NAME,
1018 		netdev);
1019 	if (err) {
1020 		pr_err("Failed to request IRQ: %d: %d\n", adapter->irq, err);
1021 		return err;
1022 	}
1023 
1024 	return 0;
1025 }
1026 
1027 static int ks8842_close(struct net_device *netdev)
1028 {
1029 	struct ks8842_adapter *adapter = netdev_priv(netdev);
1030 
1031 	netdev_dbg(netdev, "%s - entry\n", __func__);
1032 
1033 	cancel_work_sync(&adapter->timeout_work);
1034 
1035 	if (KS8842_USE_DMA(adapter))
1036 		ks8842_dealloc_dma_bufs(adapter);
1037 
1038 	/* free the irq */
1039 	free_irq(adapter->irq, netdev);
1040 
1041 	/* disable the switch */
1042 	ks8842_write16(adapter, 32, 0x0, REG_SW_ID_AND_ENABLE);
1043 
1044 	return 0;
1045 }
1046 
1047 static netdev_tx_t ks8842_xmit_frame(struct sk_buff *skb,
1048 				     struct net_device *netdev)
1049 {
1050 	int ret;
1051 	struct ks8842_adapter *adapter = netdev_priv(netdev);
1052 
1053 	netdev_dbg(netdev, "%s: entry\n", __func__);
1054 
1055 	if (KS8842_USE_DMA(adapter)) {
1056 		unsigned long flags;
1057 		ret = ks8842_tx_frame_dma(skb, netdev);
1058 		/* for now only allow one transfer at the time */
1059 		spin_lock_irqsave(&adapter->lock, flags);
1060 		if (adapter->dma_tx.adesc)
1061 			netif_stop_queue(netdev);
1062 		spin_unlock_irqrestore(&adapter->lock, flags);
1063 		return ret;
1064 	}
1065 
1066 	ret = ks8842_tx_frame(skb, netdev);
1067 
1068 	if (ks8842_tx_fifo_space(adapter) <  netdev->mtu + 8)
1069 		netif_stop_queue(netdev);
1070 
1071 	return ret;
1072 }
1073 
1074 static int ks8842_set_mac(struct net_device *netdev, void *p)
1075 {
1076 	struct ks8842_adapter *adapter = netdev_priv(netdev);
1077 	struct sockaddr *addr = p;
1078 	char *mac = (u8 *)addr->sa_data;
1079 
1080 	netdev_dbg(netdev, "%s: entry\n", __func__);
1081 
1082 	if (!is_valid_ether_addr(addr->sa_data))
1083 		return -EADDRNOTAVAIL;
1084 
1085 	memcpy(netdev->dev_addr, mac, netdev->addr_len);
1086 
1087 	ks8842_write_mac_addr(adapter, mac);
1088 	return 0;
1089 }
1090 
1091 static void ks8842_tx_timeout_work(struct work_struct *work)
1092 {
1093 	struct ks8842_adapter *adapter =
1094 		container_of(work, struct ks8842_adapter, timeout_work);
1095 	struct net_device *netdev = adapter->netdev;
1096 	unsigned long flags;
1097 
1098 	netdev_dbg(netdev, "%s: entry\n", __func__);
1099 
1100 	spin_lock_irqsave(&adapter->lock, flags);
1101 
1102 	if (KS8842_USE_DMA(adapter))
1103 		ks8842_stop_dma(adapter);
1104 
1105 	/* disable interrupts */
1106 	ks8842_write16(adapter, 18, 0, REG_IER);
1107 	ks8842_write16(adapter, 18, 0xFFFF, REG_ISR);
1108 
1109 	netif_stop_queue(netdev);
1110 
1111 	spin_unlock_irqrestore(&adapter->lock, flags);
1112 
1113 	ks8842_reset_hw(adapter);
1114 
1115 	ks8842_write_mac_addr(adapter, netdev->dev_addr);
1116 
1117 	ks8842_update_link_status(netdev, adapter);
1118 
1119 	if (KS8842_USE_DMA(adapter))
1120 		__ks8842_start_new_rx_dma(netdev);
1121 }
1122 
1123 static void ks8842_tx_timeout(struct net_device *netdev)
1124 {
1125 	struct ks8842_adapter *adapter = netdev_priv(netdev);
1126 
1127 	netdev_dbg(netdev, "%s: entry\n", __func__);
1128 
1129 	schedule_work(&adapter->timeout_work);
1130 }
1131 
1132 static const struct net_device_ops ks8842_netdev_ops = {
1133 	.ndo_open		= ks8842_open,
1134 	.ndo_stop		= ks8842_close,
1135 	.ndo_start_xmit		= ks8842_xmit_frame,
1136 	.ndo_set_mac_address	= ks8842_set_mac,
1137 	.ndo_tx_timeout 	= ks8842_tx_timeout,
1138 	.ndo_validate_addr	= eth_validate_addr
1139 };
1140 
1141 static const struct ethtool_ops ks8842_ethtool_ops = {
1142 	.get_link		= ethtool_op_get_link,
1143 };
1144 
1145 static int ks8842_probe(struct platform_device *pdev)
1146 {
1147 	int err = -ENOMEM;
1148 	struct resource *iomem;
1149 	struct net_device *netdev;
1150 	struct ks8842_adapter *adapter;
1151 	struct ks8842_platform_data *pdata = dev_get_platdata(&pdev->dev);
1152 	u16 id;
1153 	unsigned i;
1154 
1155 	iomem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1156 	if (!request_mem_region(iomem->start, resource_size(iomem), DRV_NAME))
1157 		goto err_mem_region;
1158 
1159 	netdev = alloc_etherdev(sizeof(struct ks8842_adapter));
1160 	if (!netdev)
1161 		goto err_alloc_etherdev;
1162 
1163 	SET_NETDEV_DEV(netdev, &pdev->dev);
1164 
1165 	adapter = netdev_priv(netdev);
1166 	adapter->netdev = netdev;
1167 	INIT_WORK(&adapter->timeout_work, ks8842_tx_timeout_work);
1168 	adapter->hw_addr = ioremap(iomem->start, resource_size(iomem));
1169 	adapter->conf_flags = iomem->flags;
1170 
1171 	if (!adapter->hw_addr)
1172 		goto err_ioremap;
1173 
1174 	adapter->irq = platform_get_irq(pdev, 0);
1175 	if (adapter->irq < 0) {
1176 		err = adapter->irq;
1177 		goto err_get_irq;
1178 	}
1179 
1180 	adapter->dev = (pdev->dev.parent) ? pdev->dev.parent : &pdev->dev;
1181 
1182 	/* DMA is only supported when accessed via timberdale */
1183 	if (!(adapter->conf_flags & MICREL_KS884X) && pdata &&
1184 		(pdata->tx_dma_channel != -1) &&
1185 		(pdata->rx_dma_channel != -1)) {
1186 		adapter->dma_rx.channel = pdata->rx_dma_channel;
1187 		adapter->dma_tx.channel = pdata->tx_dma_channel;
1188 	} else {
1189 		adapter->dma_rx.channel = -1;
1190 		adapter->dma_tx.channel = -1;
1191 	}
1192 
1193 	tasklet_init(&adapter->tasklet, ks8842_tasklet, (unsigned long)netdev);
1194 	spin_lock_init(&adapter->lock);
1195 
1196 	netdev->netdev_ops = &ks8842_netdev_ops;
1197 	netdev->ethtool_ops = &ks8842_ethtool_ops;
1198 
1199 	/* Check if a mac address was given */
1200 	i = netdev->addr_len;
1201 	if (pdata) {
1202 		for (i = 0; i < netdev->addr_len; i++)
1203 			if (pdata->macaddr[i] != 0)
1204 				break;
1205 
1206 		if (i < netdev->addr_len)
1207 			/* an address was passed, use it */
1208 			memcpy(netdev->dev_addr, pdata->macaddr,
1209 				netdev->addr_len);
1210 	}
1211 
1212 	if (i == netdev->addr_len) {
1213 		ks8842_read_mac_addr(adapter, netdev->dev_addr);
1214 
1215 		if (!is_valid_ether_addr(netdev->dev_addr))
1216 			eth_hw_addr_random(netdev);
1217 	}
1218 
1219 	id = ks8842_read16(adapter, 32, REG_SW_ID_AND_ENABLE);
1220 
1221 	strcpy(netdev->name, "eth%d");
1222 	err = register_netdev(netdev);
1223 	if (err)
1224 		goto err_register;
1225 
1226 	platform_set_drvdata(pdev, netdev);
1227 
1228 	pr_info("Found chip, family: 0x%x, id: 0x%x, rev: 0x%x\n",
1229 		(id >> 8) & 0xff, (id >> 4) & 0xf, (id >> 1) & 0x7);
1230 
1231 	return 0;
1232 
1233 err_register:
1234 err_get_irq:
1235 	iounmap(adapter->hw_addr);
1236 err_ioremap:
1237 	free_netdev(netdev);
1238 err_alloc_etherdev:
1239 	release_mem_region(iomem->start, resource_size(iomem));
1240 err_mem_region:
1241 	return err;
1242 }
1243 
1244 static int ks8842_remove(struct platform_device *pdev)
1245 {
1246 	struct net_device *netdev = platform_get_drvdata(pdev);
1247 	struct ks8842_adapter *adapter = netdev_priv(netdev);
1248 	struct resource *iomem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1249 
1250 	unregister_netdev(netdev);
1251 	tasklet_kill(&adapter->tasklet);
1252 	iounmap(adapter->hw_addr);
1253 	free_netdev(netdev);
1254 	release_mem_region(iomem->start, resource_size(iomem));
1255 	return 0;
1256 }
1257 
1258 
1259 static struct platform_driver ks8842_platform_driver = {
1260 	.driver = {
1261 		.name	= DRV_NAME,
1262 		.owner	= THIS_MODULE,
1263 	},
1264 	.probe		= ks8842_probe,
1265 	.remove		= ks8842_remove,
1266 };
1267 
1268 module_platform_driver(ks8842_platform_driver);
1269 
1270 MODULE_DESCRIPTION("Timberdale KS8842 ethernet driver");
1271 MODULE_AUTHOR("Mocean Laboratories <info@mocean-labs.com>");
1272 MODULE_LICENSE("GPL v2");
1273 MODULE_ALIAS("platform:ks8842");
1274 
1275