net: xilinx_emaclite: fix receive buffer overflow
[pandora-kernel.git] / drivers / net / ethernet / xilinx / xilinx_emaclite.c
1 /*
2  * Xilinx EmacLite Linux driver for the Xilinx Ethernet MAC Lite device.
3  *
4  * This is a new flat driver which is based on the original emac_lite
5  * driver from John Williams <john.williams@petalogix.com>.
6  *
7  * 2007-2009 (c) Xilinx, Inc.
8  *
9  * This program is free software; you can redistribute it and/or modify it
10  * under the terms of the GNU General Public License as published by the
11  * Free Software Foundation; either version 2 of the License, or (at your
12  * option) any later version.
13  */
14
15 #include <linux/module.h>
16 #include <linux/uaccess.h>
17 #include <linux/init.h>
18 #include <linux/netdevice.h>
19 #include <linux/etherdevice.h>
20 #include <linux/skbuff.h>
21 #include <linux/io.h>
22 #include <linux/slab.h>
23 #include <linux/of_address.h>
24 #include <linux/of_device.h>
25 #include <linux/of_platform.h>
26 #include <linux/of_mdio.h>
27 #include <linux/of_net.h>
28 #include <linux/phy.h>
29 #include <linux/interrupt.h>
30
31 #define DRIVER_NAME "xilinx_emaclite"
32
33 /* Register offsets for the EmacLite Core */
34 #define XEL_TXBUFF_OFFSET       0x0             /* Transmit Buffer */
35 #define XEL_MDIOADDR_OFFSET     0x07E4          /* MDIO Address Register */
36 #define XEL_MDIOWR_OFFSET       0x07E8          /* MDIO Write Data Register */
37 #define XEL_MDIORD_OFFSET       0x07EC          /* MDIO Read Data Register */
38 #define XEL_MDIOCTRL_OFFSET     0x07F0          /* MDIO Control Register */
39 #define XEL_GIER_OFFSET         0x07F8          /* GIE Register */
40 #define XEL_TSR_OFFSET          0x07FC          /* Tx status */
41 #define XEL_TPLR_OFFSET         0x07F4          /* Tx packet length */
42
43 #define XEL_RXBUFF_OFFSET       0x1000          /* Receive Buffer */
44 #define XEL_RPLR_OFFSET         0x100C          /* Rx packet length */
45 #define XEL_RSR_OFFSET          0x17FC          /* Rx status */
46
47 #define XEL_BUFFER_OFFSET       0x0800          /* Next Tx/Rx buffer's offset */
48
49 /* MDIO Address Register Bit Masks */
50 #define XEL_MDIOADDR_REGADR_MASK  0x0000001F    /* Register Address */
51 #define XEL_MDIOADDR_PHYADR_MASK  0x000003E0    /* PHY Address */
52 #define XEL_MDIOADDR_PHYADR_SHIFT 5
53 #define XEL_MDIOADDR_OP_MASK      0x00000400    /* RD/WR Operation */
54
55 /* MDIO Write Data Register Bit Masks */
56 #define XEL_MDIOWR_WRDATA_MASK    0x0000FFFF    /* Data to be Written */
57
58 /* MDIO Read Data Register Bit Masks */
59 #define XEL_MDIORD_RDDATA_MASK    0x0000FFFF    /* Data to be Read */
60
61 /* MDIO Control Register Bit Masks */
62 #define XEL_MDIOCTRL_MDIOSTS_MASK 0x00000001    /* MDIO Status Mask */
63 #define XEL_MDIOCTRL_MDIOEN_MASK  0x00000008    /* MDIO Enable */
64
65 /* Global Interrupt Enable Register (GIER) Bit Masks */
66 #define XEL_GIER_GIE_MASK       0x80000000      /* Global Enable */
67
68 /* Transmit Status Register (TSR) Bit Masks */
69 #define XEL_TSR_XMIT_BUSY_MASK   0x00000001     /* Tx complete */
70 #define XEL_TSR_PROGRAM_MASK     0x00000002     /* Program the MAC address */
71 #define XEL_TSR_XMIT_IE_MASK     0x00000008     /* Tx interrupt enable bit */
72 #define XEL_TSR_XMIT_ACTIVE_MASK 0x80000000     /* Buffer is active, SW bit
73                                                  * only. This is not documented
74                                                  * in the HW spec */
75
76 /* Define for programming the MAC address into the EmacLite */
77 #define XEL_TSR_PROG_MAC_ADDR   (XEL_TSR_XMIT_BUSY_MASK | XEL_TSR_PROGRAM_MASK)
78
79 /* Receive Status Register (RSR) */
80 #define XEL_RSR_RECV_DONE_MASK  0x00000001      /* Rx complete */
81 #define XEL_RSR_RECV_IE_MASK    0x00000008      /* Rx interrupt enable bit */
82
83 /* Transmit Packet Length Register (TPLR) */
84 #define XEL_TPLR_LENGTH_MASK    0x0000FFFF      /* Tx packet length */
85
86 /* Receive Packet Length Register (RPLR) */
87 #define XEL_RPLR_LENGTH_MASK    0x0000FFFF      /* Rx packet length */
88
89 #define XEL_HEADER_OFFSET       12              /* Offset to length field */
90 #define XEL_HEADER_SHIFT        16              /* Shift value for length */
91
92 /* General Ethernet Definitions */
93 #define XEL_ARP_PACKET_SIZE             28      /* Max ARP packet size */
94 #define XEL_HEADER_IP_LENGTH_OFFSET     16      /* IP Length Offset */
95
96
97
98 #define TX_TIMEOUT              (60*HZ)         /* Tx timeout is 60 seconds. */
99 #define ALIGNMENT               4
100
101 /* BUFFER_ALIGN(adr) calculates the number of bytes to the next alignment. */
102 #define BUFFER_ALIGN(adr) ((ALIGNMENT - ((u32) adr)) % ALIGNMENT)
103
104 /**
105  * struct net_local - Our private per device data
106  * @ndev:               instance of the network device
107  * @tx_ping_pong:       indicates whether Tx Pong buffer is configured in HW
108  * @rx_ping_pong:       indicates whether Rx Pong buffer is configured in HW
109  * @next_tx_buf_to_use: next Tx buffer to write to
110  * @next_rx_buf_to_use: next Rx buffer to read from
111  * @base_addr:          base address of the Emaclite device
112  * @reset_lock:         lock used for synchronization
113  * @deferred_skb:       holds an skb (for transmission at a later time) when the
114  *                      Tx buffer is not free
115  * @phy_dev:            pointer to the PHY device
116  * @phy_node:           pointer to the PHY device node
117  * @mii_bus:            pointer to the MII bus
118  * @mdio_irqs:          IRQs table for MDIO bus
119  * @last_link:          last link status
120  * @has_mdio:           indicates whether MDIO is included in the HW
121  */
122 struct net_local {
123
124         struct net_device *ndev;
125
126         bool tx_ping_pong;
127         bool rx_ping_pong;
128         u32 next_tx_buf_to_use;
129         u32 next_rx_buf_to_use;
130         void __iomem *base_addr;
131
132         spinlock_t reset_lock;
133         struct sk_buff *deferred_skb;
134
135         struct phy_device *phy_dev;
136         struct device_node *phy_node;
137
138         struct mii_bus *mii_bus;
139         int mdio_irqs[PHY_MAX_ADDR];
140
141         int last_link;
142         bool has_mdio;
143 };
144
145
146 /*************************/
147 /* EmacLite driver calls */
148 /*************************/
149
150 /**
151  * xemaclite_enable_interrupts - Enable the interrupts for the EmacLite device
152  * @drvdata:    Pointer to the Emaclite device private data
153  *
154  * This function enables the Tx and Rx interrupts for the Emaclite device along
155  * with the Global Interrupt Enable.
156  */
157 static void xemaclite_enable_interrupts(struct net_local *drvdata)
158 {
159         u32 reg_data;
160
161         /* Enable the Tx interrupts for the first Buffer */
162         reg_data = in_be32(drvdata->base_addr + XEL_TSR_OFFSET);
163         out_be32(drvdata->base_addr + XEL_TSR_OFFSET,
164                  reg_data | XEL_TSR_XMIT_IE_MASK);
165
166         /* Enable the Tx interrupts for the second Buffer if
167          * configured in HW */
168         if (drvdata->tx_ping_pong != 0) {
169                 reg_data = in_be32(drvdata->base_addr +
170                                    XEL_BUFFER_OFFSET + XEL_TSR_OFFSET);
171                 out_be32(drvdata->base_addr + XEL_BUFFER_OFFSET +
172                          XEL_TSR_OFFSET,
173                          reg_data | XEL_TSR_XMIT_IE_MASK);
174         }
175
176         /* Enable the Rx interrupts for the first buffer */
177         out_be32(drvdata->base_addr + XEL_RSR_OFFSET,
178                  XEL_RSR_RECV_IE_MASK);
179
180         /* Enable the Rx interrupts for the second Buffer if
181          * configured in HW */
182         if (drvdata->rx_ping_pong != 0) {
183                 out_be32(drvdata->base_addr + XEL_BUFFER_OFFSET +
184                          XEL_RSR_OFFSET,
185                          XEL_RSR_RECV_IE_MASK);
186         }
187
188         /* Enable the Global Interrupt Enable */
189         out_be32(drvdata->base_addr + XEL_GIER_OFFSET, XEL_GIER_GIE_MASK);
190 }
191
192 /**
193  * xemaclite_disable_interrupts - Disable the interrupts for the EmacLite device
194  * @drvdata:    Pointer to the Emaclite device private data
195  *
196  * This function disables the Tx and Rx interrupts for the Emaclite device,
197  * along with the Global Interrupt Enable.
198  */
199 static void xemaclite_disable_interrupts(struct net_local *drvdata)
200 {
201         u32 reg_data;
202
203         /* Disable the Global Interrupt Enable */
204         out_be32(drvdata->base_addr + XEL_GIER_OFFSET, XEL_GIER_GIE_MASK);
205
206         /* Disable the Tx interrupts for the first buffer */
207         reg_data = in_be32(drvdata->base_addr + XEL_TSR_OFFSET);
208         out_be32(drvdata->base_addr + XEL_TSR_OFFSET,
209                  reg_data & (~XEL_TSR_XMIT_IE_MASK));
210
211         /* Disable the Tx interrupts for the second Buffer
212          * if configured in HW */
213         if (drvdata->tx_ping_pong != 0) {
214                 reg_data = in_be32(drvdata->base_addr + XEL_BUFFER_OFFSET +
215                                    XEL_TSR_OFFSET);
216                 out_be32(drvdata->base_addr + XEL_BUFFER_OFFSET +
217                          XEL_TSR_OFFSET,
218                          reg_data & (~XEL_TSR_XMIT_IE_MASK));
219         }
220
221         /* Disable the Rx interrupts for the first buffer */
222         reg_data = in_be32(drvdata->base_addr + XEL_RSR_OFFSET);
223         out_be32(drvdata->base_addr + XEL_RSR_OFFSET,
224                  reg_data & (~XEL_RSR_RECV_IE_MASK));
225
226         /* Disable the Rx interrupts for the second buffer
227          * if configured in HW */
228         if (drvdata->rx_ping_pong != 0) {
229
230                 reg_data = in_be32(drvdata->base_addr + XEL_BUFFER_OFFSET +
231                                    XEL_RSR_OFFSET);
232                 out_be32(drvdata->base_addr + XEL_BUFFER_OFFSET +
233                          XEL_RSR_OFFSET,
234                          reg_data & (~XEL_RSR_RECV_IE_MASK));
235         }
236 }
237
238 /**
239  * xemaclite_aligned_write - Write from 16-bit aligned to 32-bit aligned address
240  * @src_ptr:    Void pointer to the 16-bit aligned source address
241  * @dest_ptr:   Pointer to the 32-bit aligned destination address
242  * @length:     Number bytes to write from source to destination
243  *
244  * This function writes data from a 16-bit aligned buffer to a 32-bit aligned
245  * address in the EmacLite device.
246  */
247 static void xemaclite_aligned_write(void *src_ptr, u32 *dest_ptr,
248                                     unsigned length)
249 {
250         u32 align_buffer;
251         u32 *to_u32_ptr;
252         u16 *from_u16_ptr, *to_u16_ptr;
253
254         to_u32_ptr = dest_ptr;
255         from_u16_ptr = src_ptr;
256         align_buffer = 0;
257
258         for (; length > 3; length -= 4) {
259                 to_u16_ptr = (u16 *)&align_buffer;
260                 *to_u16_ptr++ = *from_u16_ptr++;
261                 *to_u16_ptr++ = *from_u16_ptr++;
262
263                 /* Output a word */
264                 *to_u32_ptr++ = align_buffer;
265         }
266         if (length) {
267                 u8 *from_u8_ptr, *to_u8_ptr;
268
269                 /* Set up to output the remaining data */
270                 align_buffer = 0;
271                 to_u8_ptr = (u8 *) &align_buffer;
272                 from_u8_ptr = (u8 *) from_u16_ptr;
273
274                 /* Output the remaining data */
275                 for (; length > 0; length--)
276                         *to_u8_ptr++ = *from_u8_ptr++;
277
278                 *to_u32_ptr = align_buffer;
279         }
280 }
281
282 /**
283  * xemaclite_aligned_read - Read from 32-bit aligned to 16-bit aligned buffer
284  * @src_ptr:    Pointer to the 32-bit aligned source address
285  * @dest_ptr:   Pointer to the 16-bit aligned destination address
286  * @length:     Number bytes to read from source to destination
287  *
288  * This function reads data from a 32-bit aligned address in the EmacLite device
289  * to a 16-bit aligned buffer.
290  */
291 static void xemaclite_aligned_read(u32 *src_ptr, u8 *dest_ptr,
292                                    unsigned length)
293 {
294         u16 *to_u16_ptr, *from_u16_ptr;
295         u32 *from_u32_ptr;
296         u32 align_buffer;
297
298         from_u32_ptr = src_ptr;
299         to_u16_ptr = (u16 *) dest_ptr;
300
301         for (; length > 3; length -= 4) {
302                 /* Copy each word into the temporary buffer */
303                 align_buffer = *from_u32_ptr++;
304                 from_u16_ptr = (u16 *)&align_buffer;
305
306                 /* Read data from source */
307                 *to_u16_ptr++ = *from_u16_ptr++;
308                 *to_u16_ptr++ = *from_u16_ptr++;
309         }
310
311         if (length) {
312                 u8 *to_u8_ptr, *from_u8_ptr;
313
314                 /* Set up to read the remaining data */
315                 to_u8_ptr = (u8 *) to_u16_ptr;
316                 align_buffer = *from_u32_ptr++;
317                 from_u8_ptr = (u8 *) &align_buffer;
318
319                 /* Read the remaining data */
320                 for (; length > 0; length--)
321                         *to_u8_ptr = *from_u8_ptr;
322         }
323 }
324
325 /**
326  * xemaclite_send_data - Send an Ethernet frame
327  * @drvdata:    Pointer to the Emaclite device private data
328  * @data:       Pointer to the data to be sent
329  * @byte_count: Total frame size, including header
330  *
331  * This function checks if the Tx buffer of the Emaclite device is free to send
332  * data. If so, it fills the Tx buffer with data for transmission. Otherwise, it
333  * returns an error.
334  *
335  * Return:      0 upon success or -1 if the buffer(s) are full.
336  *
337  * Note:        The maximum Tx packet size can not be more than Ethernet header
338  *              (14 Bytes) + Maximum MTU (1500 bytes). This is excluding FCS.
339  */
340 static int xemaclite_send_data(struct net_local *drvdata, u8 *data,
341                                unsigned int byte_count)
342 {
343         u32 reg_data;
344         void __iomem *addr;
345
346         /* Determine the expected Tx buffer address */
347         addr = drvdata->base_addr + drvdata->next_tx_buf_to_use;
348
349         /* If the length is too large, truncate it */
350         if (byte_count > ETH_FRAME_LEN)
351                 byte_count = ETH_FRAME_LEN;
352
353         /* Check if the expected buffer is available */
354         reg_data = in_be32(addr + XEL_TSR_OFFSET);
355         if ((reg_data & (XEL_TSR_XMIT_BUSY_MASK |
356              XEL_TSR_XMIT_ACTIVE_MASK)) == 0) {
357
358                 /* Switch to next buffer if configured */
359                 if (drvdata->tx_ping_pong != 0)
360                         drvdata->next_tx_buf_to_use ^= XEL_BUFFER_OFFSET;
361         } else if (drvdata->tx_ping_pong != 0) {
362                 /* If the expected buffer is full, try the other buffer,
363                  * if it is configured in HW */
364
365                 addr = (void __iomem __force *)((u32 __force)addr ^
366                                                  XEL_BUFFER_OFFSET);
367                 reg_data = in_be32(addr + XEL_TSR_OFFSET);
368
369                 if ((reg_data & (XEL_TSR_XMIT_BUSY_MASK |
370                      XEL_TSR_XMIT_ACTIVE_MASK)) != 0)
371                         return -1; /* Buffers were full, return failure */
372         } else
373                 return -1; /* Buffer was full, return failure */
374
375         /* Write the frame to the buffer */
376         xemaclite_aligned_write(data, (u32 __force *) addr, byte_count);
377
378         out_be32(addr + XEL_TPLR_OFFSET, (byte_count & XEL_TPLR_LENGTH_MASK));
379
380         /* Update the Tx Status Register to indicate that there is a
381          * frame to send. Set the XEL_TSR_XMIT_ACTIVE_MASK flag which
382          * is used by the interrupt handler to check whether a frame
383          * has been transmitted */
384         reg_data = in_be32(addr + XEL_TSR_OFFSET);
385         reg_data |= (XEL_TSR_XMIT_BUSY_MASK | XEL_TSR_XMIT_ACTIVE_MASK);
386         out_be32(addr + XEL_TSR_OFFSET, reg_data);
387
388         return 0;
389 }
390
391 /**
392  * xemaclite_recv_data - Receive a frame
393  * @drvdata:    Pointer to the Emaclite device private data
394  * @data:       Address where the data is to be received
395  *
396  * This function is intended to be called from the interrupt context or
397  * with a wrapper which waits for the receive frame to be available.
398  *
399  * Return:      Total number of bytes received
400  */
401 static u16 xemaclite_recv_data(struct net_local *drvdata, u8 *data, int maxlen)
402 {
403         void __iomem *addr;
404         u16 length, proto_type;
405         u32 reg_data;
406
407         /* Determine the expected buffer address */
408         addr = (drvdata->base_addr + drvdata->next_rx_buf_to_use);
409
410         /* Verify which buffer has valid data */
411         reg_data = in_be32(addr + XEL_RSR_OFFSET);
412
413         if ((reg_data & XEL_RSR_RECV_DONE_MASK) == XEL_RSR_RECV_DONE_MASK) {
414                 if (drvdata->rx_ping_pong != 0)
415                         drvdata->next_rx_buf_to_use ^= XEL_BUFFER_OFFSET;
416         } else {
417                 /* The instance is out of sync, try other buffer if other
418                  * buffer is configured, return 0 otherwise. If the instance is
419                  * out of sync, do not update the 'next_rx_buf_to_use' since it
420                  * will correct on subsequent calls */
421                 if (drvdata->rx_ping_pong != 0)
422                         addr = (void __iomem __force *)((u32 __force)addr ^
423                                                          XEL_BUFFER_OFFSET);
424                 else
425                         return 0;       /* No data was available */
426
427                 /* Verify that buffer has valid data */
428                 reg_data = in_be32(addr + XEL_RSR_OFFSET);
429                 if ((reg_data & XEL_RSR_RECV_DONE_MASK) !=
430                      XEL_RSR_RECV_DONE_MASK)
431                         return 0;       /* No data was available */
432         }
433
434         /* Get the protocol type of the ethernet frame that arrived */
435         proto_type = ((ntohl(in_be32(addr + XEL_HEADER_OFFSET +
436                         XEL_RXBUFF_OFFSET)) >> XEL_HEADER_SHIFT) &
437                         XEL_RPLR_LENGTH_MASK);
438
439         /* Check if received ethernet frame is a raw ethernet frame
440          * or an IP packet or an ARP packet */
441         if (proto_type > ETH_DATA_LEN) {
442
443                 if (proto_type == ETH_P_IP) {
444                         length = ((ntohl(in_be32(addr +
445                                         XEL_HEADER_IP_LENGTH_OFFSET +
446                                         XEL_RXBUFF_OFFSET)) >>
447                                         XEL_HEADER_SHIFT) &
448                                         XEL_RPLR_LENGTH_MASK);
449                         length = min_t(u16, length, ETH_DATA_LEN);
450                         length += ETH_HLEN + ETH_FCS_LEN;
451
452                 } else if (proto_type == ETH_P_ARP)
453                         length = XEL_ARP_PACKET_SIZE + ETH_HLEN + ETH_FCS_LEN;
454                 else
455                         /* Field contains type other than IP or ARP, use max
456                          * frame size and let user parse it */
457                         length = ETH_FRAME_LEN + ETH_FCS_LEN;
458         } else
459                 /* Use the length in the frame, plus the header and trailer */
460                 length = proto_type + ETH_HLEN + ETH_FCS_LEN;
461
462         if (WARN_ON(length > maxlen))
463                 length = maxlen;
464
465         /* Read from the EmacLite device */
466         xemaclite_aligned_read((u32 __force *) (addr + XEL_RXBUFF_OFFSET),
467                                 data, length);
468
469         /* Acknowledge the frame */
470         reg_data = in_be32(addr + XEL_RSR_OFFSET);
471         reg_data &= ~XEL_RSR_RECV_DONE_MASK;
472         out_be32(addr + XEL_RSR_OFFSET, reg_data);
473
474         return length;
475 }
476
477 /**
478  * xemaclite_update_address - Update the MAC address in the device
479  * @drvdata:    Pointer to the Emaclite device private data
480  * @address_ptr:Pointer to the MAC address (MAC address is a 48-bit value)
481  *
482  * Tx must be idle and Rx should be idle for deterministic results.
483  * It is recommended that this function should be called after the
484  * initialization and before transmission of any packets from the device.
485  * The MAC address can be programmed using any of the two transmit
486  * buffers (if configured).
487  */
488 static void xemaclite_update_address(struct net_local *drvdata,
489                                      u8 *address_ptr)
490 {
491         void __iomem *addr;
492         u32 reg_data;
493
494         /* Determine the expected Tx buffer address */
495         addr = drvdata->base_addr + drvdata->next_tx_buf_to_use;
496
497         xemaclite_aligned_write(address_ptr, (u32 __force *) addr, ETH_ALEN);
498
499         out_be32(addr + XEL_TPLR_OFFSET, ETH_ALEN);
500
501         /* Update the MAC address in the EmacLite */
502         reg_data = in_be32(addr + XEL_TSR_OFFSET);
503         out_be32(addr + XEL_TSR_OFFSET, reg_data | XEL_TSR_PROG_MAC_ADDR);
504
505         /* Wait for EmacLite to finish with the MAC address update */
506         while ((in_be32(addr + XEL_TSR_OFFSET) &
507                 XEL_TSR_PROG_MAC_ADDR) != 0)
508                 ;
509 }
510
511 /**
512  * xemaclite_set_mac_address - Set the MAC address for this device
513  * @dev:        Pointer to the network device instance
514  * @addr:       Void pointer to the sockaddr structure
515  *
516  * This function copies the HW address from the sockaddr strucutre to the
517  * net_device structure and updates the address in HW.
518  *
519  * Return:      Error if the net device is busy or 0 if the addr is set
520  *              successfully
521  */
522 static int xemaclite_set_mac_address(struct net_device *dev, void *address)
523 {
524         struct net_local *lp = netdev_priv(dev);
525         struct sockaddr *addr = address;
526
527         if (netif_running(dev))
528                 return -EBUSY;
529
530         memcpy(dev->dev_addr, addr->sa_data, dev->addr_len);
531         xemaclite_update_address(lp, dev->dev_addr);
532         return 0;
533 }
534
535 /**
536  * xemaclite_tx_timeout - Callback for Tx Timeout
537  * @dev:        Pointer to the network device
538  *
539  * This function is called when Tx time out occurs for Emaclite device.
540  */
541 static void xemaclite_tx_timeout(struct net_device *dev)
542 {
543         struct net_local *lp = netdev_priv(dev);
544         unsigned long flags;
545
546         dev_err(&lp->ndev->dev, "Exceeded transmit timeout of %lu ms\n",
547                 TX_TIMEOUT * 1000UL / HZ);
548
549         dev->stats.tx_errors++;
550
551         /* Reset the device */
552         spin_lock_irqsave(&lp->reset_lock, flags);
553
554         /* Shouldn't really be necessary, but shouldn't hurt */
555         netif_stop_queue(dev);
556
557         xemaclite_disable_interrupts(lp);
558         xemaclite_enable_interrupts(lp);
559
560         if (lp->deferred_skb) {
561                 dev_kfree_skb(lp->deferred_skb);
562                 lp->deferred_skb = NULL;
563                 dev->stats.tx_errors++;
564         }
565
566         /* To exclude tx timeout */
567         dev->trans_start = jiffies; /* prevent tx timeout */
568
569         /* We're all ready to go. Start the queue */
570         netif_wake_queue(dev);
571         spin_unlock_irqrestore(&lp->reset_lock, flags);
572 }
573
574 /**********************/
575 /* Interrupt Handlers */
576 /**********************/
577
578 /**
579  * xemaclite_tx_handler - Interrupt handler for frames sent
580  * @dev:        Pointer to the network device
581  *
582  * This function updates the number of packets transmitted and handles the
583  * deferred skb, if there is one.
584  */
585 static void xemaclite_tx_handler(struct net_device *dev)
586 {
587         struct net_local *lp = netdev_priv(dev);
588
589         dev->stats.tx_packets++;
590         if (lp->deferred_skb) {
591                 if (xemaclite_send_data(lp,
592                                         (u8 *) lp->deferred_skb->data,
593                                         lp->deferred_skb->len) != 0)
594                         return;
595                 else {
596                         dev->stats.tx_bytes += lp->deferred_skb->len;
597                         dev_kfree_skb_irq(lp->deferred_skb);
598                         lp->deferred_skb = NULL;
599                         dev->trans_start = jiffies; /* prevent tx timeout */
600                         netif_wake_queue(dev);
601                 }
602         }
603 }
604
605 /**
606  * xemaclite_rx_handler- Interrupt handler for frames received
607  * @dev:        Pointer to the network device
608  *
609  * This function allocates memory for a socket buffer, fills it with data
610  * received and hands it over to the TCP/IP stack.
611  */
612 static void xemaclite_rx_handler(struct net_device *dev)
613 {
614         struct net_local *lp = netdev_priv(dev);
615         struct sk_buff *skb;
616         unsigned int align;
617         u32 len;
618
619         len = ETH_FRAME_LEN + ETH_FCS_LEN;
620         skb = dev_alloc_skb(len + ALIGNMENT);
621         if (!skb) {
622                 /* Couldn't get memory. */
623                 dev->stats.rx_dropped++;
624                 dev_err(&lp->ndev->dev, "Could not allocate receive buffer\n");
625                 return;
626         }
627
628         /*
629          * A new skb should have the data halfword aligned, but this code is
630          * here just in case that isn't true. Calculate how many
631          * bytes we should reserve to get the data to start on a word
632          * boundary */
633         align = BUFFER_ALIGN(skb->data);
634         if (align)
635                 skb_reserve(skb, align);
636
637         skb_reserve(skb, 2);
638
639         len = xemaclite_recv_data(lp, (u8 *) skb->data, len);
640
641         if (!len) {
642                 dev->stats.rx_errors++;
643                 dev_kfree_skb_irq(skb);
644                 return;
645         }
646
647         skb_put(skb, len);      /* Tell the skb how much data we got */
648
649         skb->protocol = eth_type_trans(skb, dev);
650         skb_checksum_none_assert(skb);
651
652         dev->stats.rx_packets++;
653         dev->stats.rx_bytes += len;
654
655         if (!skb_defer_rx_timestamp(skb))
656                 netif_rx(skb);  /* Send the packet upstream */
657 }
658
659 /**
660  * xemaclite_interrupt - Interrupt handler for this driver
661  * @irq:        Irq of the Emaclite device
662  * @dev_id:     Void pointer to the network device instance used as callback
663  *              reference
664  *
665  * This function handles the Tx and Rx interrupts of the EmacLite device.
666  */
667 static irqreturn_t xemaclite_interrupt(int irq, void *dev_id)
668 {
669         bool tx_complete = 0;
670         struct net_device *dev = dev_id;
671         struct net_local *lp = netdev_priv(dev);
672         void __iomem *base_addr = lp->base_addr;
673         u32 tx_status;
674
675         /* Check if there is Rx Data available */
676         if ((in_be32(base_addr + XEL_RSR_OFFSET) & XEL_RSR_RECV_DONE_MASK) ||
677                         (in_be32(base_addr + XEL_BUFFER_OFFSET + XEL_RSR_OFFSET)
678                          & XEL_RSR_RECV_DONE_MASK))
679
680                 xemaclite_rx_handler(dev);
681
682         /* Check if the Transmission for the first buffer is completed */
683         tx_status = in_be32(base_addr + XEL_TSR_OFFSET);
684         if (((tx_status & XEL_TSR_XMIT_BUSY_MASK) == 0) &&
685                 (tx_status & XEL_TSR_XMIT_ACTIVE_MASK) != 0) {
686
687                 tx_status &= ~XEL_TSR_XMIT_ACTIVE_MASK;
688                 out_be32(base_addr + XEL_TSR_OFFSET, tx_status);
689
690                 tx_complete = 1;
691         }
692
693         /* Check if the Transmission for the second buffer is completed */
694         tx_status = in_be32(base_addr + XEL_BUFFER_OFFSET + XEL_TSR_OFFSET);
695         if (((tx_status & XEL_TSR_XMIT_BUSY_MASK) == 0) &&
696                 (tx_status & XEL_TSR_XMIT_ACTIVE_MASK) != 0) {
697
698                 tx_status &= ~XEL_TSR_XMIT_ACTIVE_MASK;
699                 out_be32(base_addr + XEL_BUFFER_OFFSET + XEL_TSR_OFFSET,
700                          tx_status);
701
702                 tx_complete = 1;
703         }
704
705         /* If there was a Tx interrupt, call the Tx Handler */
706         if (tx_complete != 0)
707                 xemaclite_tx_handler(dev);
708
709         return IRQ_HANDLED;
710 }
711
712 /**********************/
713 /* MDIO Bus functions */
714 /**********************/
715
716 /**
717  * xemaclite_mdio_wait - Wait for the MDIO to be ready to use
718  * @lp:         Pointer to the Emaclite device private data
719  *
720  * This function waits till the device is ready to accept a new MDIO
721  * request.
722  *
723  * Return:      0 for success or ETIMEDOUT for a timeout
724  */
725
726 static int xemaclite_mdio_wait(struct net_local *lp)
727 {
728         long end = jiffies + 2;
729
730         /* wait for the MDIO interface to not be busy or timeout
731            after some time.
732         */
733         while (in_be32(lp->base_addr + XEL_MDIOCTRL_OFFSET) &
734                         XEL_MDIOCTRL_MDIOSTS_MASK) {
735                 if (end - jiffies <= 0) {
736                         WARN_ON(1);
737                         return -ETIMEDOUT;
738                 }
739                 msleep(1);
740         }
741         return 0;
742 }
743
744 /**
745  * xemaclite_mdio_read - Read from a given MII management register
746  * @bus:        the mii_bus struct
747  * @phy_id:     the phy address
748  * @reg:        register number to read from
749  *
750  * This function waits till the device is ready to accept a new MDIO
751  * request and then writes the phy address to the MDIO Address register
752  * and reads data from MDIO Read Data register, when its available.
753  *
754  * Return:      Value read from the MII management register
755  */
756 static int xemaclite_mdio_read(struct mii_bus *bus, int phy_id, int reg)
757 {
758         struct net_local *lp = bus->priv;
759         u32 ctrl_reg;
760         u32 rc;
761
762         if (xemaclite_mdio_wait(lp))
763                 return -ETIMEDOUT;
764
765         /* Write the PHY address, register number and set the OP bit in the
766          * MDIO Address register. Set the Status bit in the MDIO Control
767          * register to start a MDIO read transaction.
768          */
769         ctrl_reg = in_be32(lp->base_addr + XEL_MDIOCTRL_OFFSET);
770         out_be32(lp->base_addr + XEL_MDIOADDR_OFFSET,
771                  XEL_MDIOADDR_OP_MASK |
772                  ((phy_id << XEL_MDIOADDR_PHYADR_SHIFT) | reg));
773         out_be32(lp->base_addr + XEL_MDIOCTRL_OFFSET,
774                  ctrl_reg | XEL_MDIOCTRL_MDIOSTS_MASK);
775
776         if (xemaclite_mdio_wait(lp))
777                 return -ETIMEDOUT;
778
779         rc = in_be32(lp->base_addr + XEL_MDIORD_OFFSET);
780
781         dev_dbg(&lp->ndev->dev,
782                 "xemaclite_mdio_read(phy_id=%i, reg=%x) == %x\n",
783                 phy_id, reg, rc);
784
785         return rc;
786 }
787
788 /**
789  * xemaclite_mdio_write - Write to a given MII management register
790  * @bus:        the mii_bus struct
791  * @phy_id:     the phy address
792  * @reg:        register number to write to
793  * @val:        value to write to the register number specified by reg
794  *
795  * This function waits till the device is ready to accept a new MDIO
796  * request and then writes the val to the MDIO Write Data register.
797  */
798 static int xemaclite_mdio_write(struct mii_bus *bus, int phy_id, int reg,
799                                 u16 val)
800 {
801         struct net_local *lp = bus->priv;
802         u32 ctrl_reg;
803
804         dev_dbg(&lp->ndev->dev,
805                 "xemaclite_mdio_write(phy_id=%i, reg=%x, val=%x)\n",
806                 phy_id, reg, val);
807
808         if (xemaclite_mdio_wait(lp))
809                 return -ETIMEDOUT;
810
811         /* Write the PHY address, register number and clear the OP bit in the
812          * MDIO Address register and then write the value into the MDIO Write
813          * Data register. Finally, set the Status bit in the MDIO Control
814          * register to start a MDIO write transaction.
815          */
816         ctrl_reg = in_be32(lp->base_addr + XEL_MDIOCTRL_OFFSET);
817         out_be32(lp->base_addr + XEL_MDIOADDR_OFFSET,
818                  ~XEL_MDIOADDR_OP_MASK &
819                  ((phy_id << XEL_MDIOADDR_PHYADR_SHIFT) | reg));
820         out_be32(lp->base_addr + XEL_MDIOWR_OFFSET, val);
821         out_be32(lp->base_addr + XEL_MDIOCTRL_OFFSET,
822                  ctrl_reg | XEL_MDIOCTRL_MDIOSTS_MASK);
823
824         return 0;
825 }
826
827 /**
828  * xemaclite_mdio_reset - Reset the mdio bus.
829  * @bus:        Pointer to the MII bus
830  *
831  * This function is required(?) as per Documentation/networking/phy.txt.
832  * There is no reset in this device; this function always returns 0.
833  */
834 static int xemaclite_mdio_reset(struct mii_bus *bus)
835 {
836         return 0;
837 }
838
839 /**
840  * xemaclite_mdio_setup - Register mii_bus for the Emaclite device
841  * @lp:         Pointer to the Emaclite device private data
842  * @ofdev:      Pointer to OF device structure
843  *
844  * This function enables MDIO bus in the Emaclite device and registers a
845  * mii_bus.
846  *
847  * Return:      0 upon success or a negative error upon failure
848  */
849 static int xemaclite_mdio_setup(struct net_local *lp, struct device *dev)
850 {
851         struct mii_bus *bus;
852         int rc;
853         struct resource res;
854         struct device_node *np = of_get_parent(lp->phy_node);
855
856         /* Don't register the MDIO bus if the phy_node or its parent node
857          * can't be found.
858          */
859         if (!np)
860                 return -ENODEV;
861
862         /* Enable the MDIO bus by asserting the enable bit in MDIO Control
863          * register.
864          */
865         out_be32(lp->base_addr + XEL_MDIOCTRL_OFFSET,
866                  XEL_MDIOCTRL_MDIOEN_MASK);
867
868         bus = mdiobus_alloc();
869         if (!bus)
870                 return -ENOMEM;
871
872         of_address_to_resource(np, 0, &res);
873         snprintf(bus->id, MII_BUS_ID_SIZE, "%.8llx",
874                  (unsigned long long)res.start);
875         bus->priv = lp;
876         bus->name = "Xilinx Emaclite MDIO";
877         bus->read = xemaclite_mdio_read;
878         bus->write = xemaclite_mdio_write;
879         bus->reset = xemaclite_mdio_reset;
880         bus->parent = dev;
881         bus->irq = lp->mdio_irqs; /* preallocated IRQ table */
882
883         lp->mii_bus = bus;
884
885         rc = of_mdiobus_register(bus, np);
886         if (rc)
887                 goto err_register;
888
889         return 0;
890
891 err_register:
892         mdiobus_free(bus);
893         return rc;
894 }
895
896 /**
897  * xemaclite_adjust_link - Link state callback for the Emaclite device
898  * @ndev: pointer to net_device struct
899  *
900  * There's nothing in the Emaclite device to be configured when the link
901  * state changes. We just print the status.
902  */
903 void xemaclite_adjust_link(struct net_device *ndev)
904 {
905         struct net_local *lp = netdev_priv(ndev);
906         struct phy_device *phy = lp->phy_dev;
907         int link_state;
908
909         /* hash together the state values to decide if something has changed */
910         link_state = phy->speed | (phy->duplex << 1) | phy->link;
911
912         if (lp->last_link != link_state) {
913                 lp->last_link = link_state;
914                 phy_print_status(phy);
915         }
916 }
917
918 /**
919  * xemaclite_open - Open the network device
920  * @dev:        Pointer to the network device
921  *
922  * This function sets the MAC address, requests an IRQ and enables interrupts
923  * for the Emaclite device and starts the Tx queue.
924  * It also connects to the phy device, if MDIO is included in Emaclite device.
925  */
926 static int xemaclite_open(struct net_device *dev)
927 {
928         struct net_local *lp = netdev_priv(dev);
929         int retval;
930
931         /* Just to be safe, stop the device first */
932         xemaclite_disable_interrupts(lp);
933
934         if (lp->phy_node) {
935                 u32 bmcr;
936
937                 lp->phy_dev = of_phy_connect(lp->ndev, lp->phy_node,
938                                              xemaclite_adjust_link, 0,
939                                              PHY_INTERFACE_MODE_MII);
940                 if (!lp->phy_dev) {
941                         dev_err(&lp->ndev->dev, "of_phy_connect() failed\n");
942                         return -ENODEV;
943                 }
944
945                 /* EmacLite doesn't support giga-bit speeds */
946                 lp->phy_dev->supported &= (PHY_BASIC_FEATURES);
947                 lp->phy_dev->advertising = lp->phy_dev->supported;
948
949                 /* Don't advertise 1000BASE-T Full/Half duplex speeds */
950                 phy_write(lp->phy_dev, MII_CTRL1000, 0);
951
952                 /* Advertise only 10 and 100mbps full/half duplex speeds */
953                 phy_write(lp->phy_dev, MII_ADVERTISE, ADVERTISE_ALL);
954
955                 /* Restart auto negotiation */
956                 bmcr = phy_read(lp->phy_dev, MII_BMCR);
957                 bmcr |= (BMCR_ANENABLE | BMCR_ANRESTART);
958                 phy_write(lp->phy_dev, MII_BMCR, bmcr);
959
960                 phy_start(lp->phy_dev);
961         }
962
963         /* Set the MAC address each time opened */
964         xemaclite_update_address(lp, dev->dev_addr);
965
966         /* Grab the IRQ */
967         retval = request_irq(dev->irq, xemaclite_interrupt, 0, dev->name, dev);
968         if (retval) {
969                 dev_err(&lp->ndev->dev, "Could not allocate interrupt %d\n",
970                         dev->irq);
971                 if (lp->phy_dev)
972                         phy_disconnect(lp->phy_dev);
973                 lp->phy_dev = NULL;
974
975                 return retval;
976         }
977
978         /* Enable Interrupts */
979         xemaclite_enable_interrupts(lp);
980
981         /* We're ready to go */
982         netif_start_queue(dev);
983
984         return 0;
985 }
986
987 /**
988  * xemaclite_close - Close the network device
989  * @dev:        Pointer to the network device
990  *
991  * This function stops the Tx queue, disables interrupts and frees the IRQ for
992  * the Emaclite device.
993  * It also disconnects the phy device associated with the Emaclite device.
994  */
995 static int xemaclite_close(struct net_device *dev)
996 {
997         struct net_local *lp = netdev_priv(dev);
998
999         netif_stop_queue(dev);
1000         xemaclite_disable_interrupts(lp);
1001         free_irq(dev->irq, dev);
1002
1003         if (lp->phy_dev)
1004                 phy_disconnect(lp->phy_dev);
1005         lp->phy_dev = NULL;
1006
1007         return 0;
1008 }
1009
1010 /**
1011  * xemaclite_send - Transmit a frame
1012  * @orig_skb:   Pointer to the socket buffer to be transmitted
1013  * @dev:        Pointer to the network device
1014  *
1015  * This function checks if the Tx buffer of the Emaclite device is free to send
1016  * data. If so, it fills the Tx buffer with data from socket buffer data,
1017  * updates the stats and frees the socket buffer. The Tx completion is signaled
1018  * by an interrupt. If the Tx buffer isn't free, then the socket buffer is
1019  * deferred and the Tx queue is stopped so that the deferred socket buffer can
1020  * be transmitted when the Emaclite device is free to transmit data.
1021  *
1022  * Return:      0, always.
1023  */
1024 static int xemaclite_send(struct sk_buff *orig_skb, struct net_device *dev)
1025 {
1026         struct net_local *lp = netdev_priv(dev);
1027         struct sk_buff *new_skb;
1028         unsigned int len;
1029         unsigned long flags;
1030
1031         len = orig_skb->len;
1032
1033         new_skb = orig_skb;
1034
1035         spin_lock_irqsave(&lp->reset_lock, flags);
1036         if (xemaclite_send_data(lp, (u8 *) new_skb->data, len) != 0) {
1037                 /* If the Emaclite Tx buffer is busy, stop the Tx queue and
1038                  * defer the skb for transmission during the ISR, after the
1039                  * current transmission is complete */
1040                 netif_stop_queue(dev);
1041                 lp->deferred_skb = new_skb;
1042                 /* Take the time stamp now, since we can't do this in an ISR. */
1043                 skb_tx_timestamp(new_skb);
1044                 spin_unlock_irqrestore(&lp->reset_lock, flags);
1045                 return 0;
1046         }
1047         spin_unlock_irqrestore(&lp->reset_lock, flags);
1048
1049         skb_tx_timestamp(new_skb);
1050
1051         dev->stats.tx_bytes += len;
1052         dev_kfree_skb(new_skb);
1053
1054         return 0;
1055 }
1056
1057 /**
1058  * xemaclite_remove_ndev - Free the network device
1059  * @ndev:       Pointer to the network device to be freed
1060  *
1061  * This function un maps the IO region of the Emaclite device and frees the net
1062  * device.
1063  */
1064 static void xemaclite_remove_ndev(struct net_device *ndev)
1065 {
1066         if (ndev) {
1067                 struct net_local *lp = netdev_priv(ndev);
1068
1069                 if (lp->base_addr)
1070                         iounmap((void __iomem __force *) (lp->base_addr));
1071                 free_netdev(ndev);
1072         }
1073 }
1074
1075 /**
1076  * get_bool - Get a parameter from the OF device
1077  * @ofdev:      Pointer to OF device structure
1078  * @s:          Property to be retrieved
1079  *
1080  * This function looks for a property in the device node and returns the value
1081  * of the property if its found or 0 if the property is not found.
1082  *
1083  * Return:      Value of the parameter if the parameter is found, or 0 otherwise
1084  */
1085 static bool get_bool(struct platform_device *ofdev, const char *s)
1086 {
1087         u32 *p = (u32 *)of_get_property(ofdev->dev.of_node, s, NULL);
1088
1089         if (p) {
1090                 return (bool)*p;
1091         } else {
1092                 dev_warn(&ofdev->dev, "Parameter %s not found,"
1093                         "defaulting to false\n", s);
1094                 return 0;
1095         }
1096 }
1097
1098 static struct net_device_ops xemaclite_netdev_ops;
1099
1100 /**
1101  * xemaclite_of_probe - Probe method for the Emaclite device.
1102  * @ofdev:      Pointer to OF device structure
1103  * @match:      Pointer to the structure used for matching a device
1104  *
1105  * This function probes for the Emaclite device in the device tree.
1106  * It initializes the driver data structure and the hardware, sets the MAC
1107  * address and registers the network device.
1108  * It also registers a mii_bus for the Emaclite device, if MDIO is included
1109  * in the device.
1110  *
1111  * Return:      0, if the driver is bound to the Emaclite device, or
1112  *              a negative error if there is failure.
1113  */
1114 static int __devinit xemaclite_of_probe(struct platform_device *ofdev)
1115 {
1116         struct resource r_irq; /* Interrupt resources */
1117         struct resource r_mem; /* IO mem resources */
1118         struct net_device *ndev = NULL;
1119         struct net_local *lp = NULL;
1120         struct device *dev = &ofdev->dev;
1121         const void *mac_address;
1122
1123         int rc = 0;
1124
1125         dev_info(dev, "Device Tree Probing\n");
1126
1127         /* Get iospace for the device */
1128         rc = of_address_to_resource(ofdev->dev.of_node, 0, &r_mem);
1129         if (rc) {
1130                 dev_err(dev, "invalid address\n");
1131                 return rc;
1132         }
1133
1134         /* Get IRQ for the device */
1135         rc = of_irq_to_resource(ofdev->dev.of_node, 0, &r_irq);
1136         if (rc == NO_IRQ) {
1137                 dev_err(dev, "no IRQ found\n");
1138                 return rc;
1139         }
1140
1141         /* Create an ethernet device instance */
1142         ndev = alloc_etherdev(sizeof(struct net_local));
1143         if (!ndev) {
1144                 dev_err(dev, "Could not allocate network device\n");
1145                 return -ENOMEM;
1146         }
1147
1148         dev_set_drvdata(dev, ndev);
1149         SET_NETDEV_DEV(ndev, &ofdev->dev);
1150
1151         ndev->irq = r_irq.start;
1152         ndev->mem_start = r_mem.start;
1153         ndev->mem_end = r_mem.end;
1154
1155         lp = netdev_priv(ndev);
1156         lp->ndev = ndev;
1157
1158         if (!request_mem_region(ndev->mem_start,
1159                                 ndev->mem_end - ndev->mem_start + 1,
1160                                 DRIVER_NAME)) {
1161                 dev_err(dev, "Couldn't lock memory region at %p\n",
1162                         (void *)ndev->mem_start);
1163                 rc = -EBUSY;
1164                 goto error2;
1165         }
1166
1167         /* Get the virtual base address for the device */
1168         lp->base_addr = ioremap(r_mem.start, resource_size(&r_mem));
1169         if (NULL == lp->base_addr) {
1170                 dev_err(dev, "EmacLite: Could not allocate iomem\n");
1171                 rc = -EIO;
1172                 goto error1;
1173         }
1174
1175         spin_lock_init(&lp->reset_lock);
1176         lp->next_tx_buf_to_use = 0x0;
1177         lp->next_rx_buf_to_use = 0x0;
1178         lp->tx_ping_pong = get_bool(ofdev, "xlnx,tx-ping-pong");
1179         lp->rx_ping_pong = get_bool(ofdev, "xlnx,rx-ping-pong");
1180         mac_address = of_get_mac_address(ofdev->dev.of_node);
1181
1182         if (mac_address)
1183                 /* Set the MAC address. */
1184                 memcpy(ndev->dev_addr, mac_address, 6);
1185         else
1186                 dev_warn(dev, "No MAC address found\n");
1187
1188         /* Clear the Tx CSR's in case this is a restart */
1189         out_be32(lp->base_addr + XEL_TSR_OFFSET, 0);
1190         out_be32(lp->base_addr + XEL_BUFFER_OFFSET + XEL_TSR_OFFSET, 0);
1191
1192         /* Set the MAC address in the EmacLite device */
1193         xemaclite_update_address(lp, ndev->dev_addr);
1194
1195         lp->phy_node = of_parse_phandle(ofdev->dev.of_node, "phy-handle", 0);
1196         rc = xemaclite_mdio_setup(lp, &ofdev->dev);
1197         if (rc)
1198                 dev_warn(&ofdev->dev, "error registering MDIO bus\n");
1199
1200         dev_info(dev, "MAC address is now %pM\n", ndev->dev_addr);
1201
1202         ndev->netdev_ops = &xemaclite_netdev_ops;
1203         ndev->flags &= ~IFF_MULTICAST;
1204         ndev->watchdog_timeo = TX_TIMEOUT;
1205
1206         /* Finally, register the device */
1207         rc = register_netdev(ndev);
1208         if (rc) {
1209                 dev_err(dev,
1210                         "Cannot register network device, aborting\n");
1211                 goto error1;
1212         }
1213
1214         dev_info(dev,
1215                  "Xilinx EmacLite at 0x%08X mapped to 0x%08X, irq=%d\n",
1216                  (unsigned int __force)ndev->mem_start,
1217                  (unsigned int __force)lp->base_addr, ndev->irq);
1218         return 0;
1219
1220 error1:
1221         release_mem_region(ndev->mem_start, resource_size(&r_mem));
1222
1223 error2:
1224         xemaclite_remove_ndev(ndev);
1225         return rc;
1226 }
1227
1228 /**
1229  * xemaclite_of_remove - Unbind the driver from the Emaclite device.
1230  * @of_dev:     Pointer to OF device structure
1231  *
1232  * This function is called if a device is physically removed from the system or
1233  * if the driver module is being unloaded. It frees any resources allocated to
1234  * the device.
1235  *
1236  * Return:      0, always.
1237  */
1238 static int __devexit xemaclite_of_remove(struct platform_device *of_dev)
1239 {
1240         struct device *dev = &of_dev->dev;
1241         struct net_device *ndev = dev_get_drvdata(dev);
1242
1243         struct net_local *lp = netdev_priv(ndev);
1244
1245         /* Un-register the mii_bus, if configured */
1246         if (lp->has_mdio) {
1247                 mdiobus_unregister(lp->mii_bus);
1248                 kfree(lp->mii_bus->irq);
1249                 mdiobus_free(lp->mii_bus);
1250                 lp->mii_bus = NULL;
1251         }
1252
1253         unregister_netdev(ndev);
1254
1255         if (lp->phy_node)
1256                 of_node_put(lp->phy_node);
1257         lp->phy_node = NULL;
1258
1259         release_mem_region(ndev->mem_start, ndev->mem_end-ndev->mem_start + 1);
1260
1261         xemaclite_remove_ndev(ndev);
1262         dev_set_drvdata(dev, NULL);
1263
1264         return 0;
1265 }
1266
1267 #ifdef CONFIG_NET_POLL_CONTROLLER
1268 static void
1269 xemaclite_poll_controller(struct net_device *ndev)
1270 {
1271         disable_irq(ndev->irq);
1272         xemaclite_interrupt(ndev->irq, ndev);
1273         enable_irq(ndev->irq);
1274 }
1275 #endif
1276
1277 static struct net_device_ops xemaclite_netdev_ops = {
1278         .ndo_open               = xemaclite_open,
1279         .ndo_stop               = xemaclite_close,
1280         .ndo_start_xmit         = xemaclite_send,
1281         .ndo_set_mac_address    = xemaclite_set_mac_address,
1282         .ndo_tx_timeout         = xemaclite_tx_timeout,
1283 #ifdef CONFIG_NET_POLL_CONTROLLER
1284         .ndo_poll_controller = xemaclite_poll_controller,
1285 #endif
1286 };
1287
1288 /* Match table for OF platform binding */
1289 static struct of_device_id xemaclite_of_match[] __devinitdata = {
1290         { .compatible = "xlnx,opb-ethernetlite-1.01.a", },
1291         { .compatible = "xlnx,opb-ethernetlite-1.01.b", },
1292         { .compatible = "xlnx,xps-ethernetlite-1.00.a", },
1293         { .compatible = "xlnx,xps-ethernetlite-2.00.a", },
1294         { .compatible = "xlnx,xps-ethernetlite-2.01.a", },
1295         { .compatible = "xlnx,xps-ethernetlite-3.00.a", },
1296         { /* end of list */ },
1297 };
1298 MODULE_DEVICE_TABLE(of, xemaclite_of_match);
1299
1300 static struct platform_driver xemaclite_of_driver = {
1301         .driver = {
1302                 .name = DRIVER_NAME,
1303                 .owner = THIS_MODULE,
1304                 .of_match_table = xemaclite_of_match,
1305         },
1306         .probe          = xemaclite_of_probe,
1307         .remove         = __devexit_p(xemaclite_of_remove),
1308 };
1309
1310 /**
1311  * xgpiopss_init - Initial driver registration call
1312  *
1313  * Return:      0 upon success, or a negative error upon failure.
1314  */
1315 static int __init xemaclite_init(void)
1316 {
1317         /* No kernel boot options used, we just need to register the driver */
1318         return platform_driver_register(&xemaclite_of_driver);
1319 }
1320
1321 /**
1322  * xemaclite_cleanup - Driver un-registration call
1323  */
1324 static void __exit xemaclite_cleanup(void)
1325 {
1326         platform_driver_unregister(&xemaclite_of_driver);
1327 }
1328
1329 module_init(xemaclite_init);
1330 module_exit(xemaclite_cleanup);
1331
1332 MODULE_AUTHOR("Xilinx, Inc.");
1333 MODULE_DESCRIPTION("Xilinx Ethernet MAC Lite driver");
1334 MODULE_LICENSE("GPL");