]> rtime.felk.cvut.cz Git - zynq/linux.git/blob - drivers/net/ethernet/xilinx/xilinx_emacps.c
xilinx_emacps: Fixes bug in skb handling for fragmented packets
[zynq/linux.git] / drivers / net / ethernet / xilinx / xilinx_emacps.c
1 /*
2  * Xilinx Ethernet: Linux driver for Ethernet.
3  *
4  * Author: Xilinx, Inc.
5  *
6  * 2010 (c) Xilinx, Inc. This file is licensed uner the terms of the GNU
7  * General Public License version 2. This program is licensed "as is"
8  * without any warranty of any kind, whether express or implied.
9  *
10  * This is a driver for xilinx processor sub-system (ps) ethernet device.
11  * This driver is mainly used in Linux 2.6.30 and above and it does _not_
12  * support Linux 2.4 kernel due to certain new features (e.g. NAPI) is
13  * introduced in this driver.
14  *
15  * TODO:
16  * 1. JUMBO frame is not enabled per EPs spec. Please update it if this
17  *    support is added in and set MAX_MTU to 9000.
18  * 2. For PEEP boards the Linux PHY driver state machine is not used. Hence
19  *    no autonegotiation happens for PEEP. The speed of 100 Mbps is used and
20  *    it is fixed. The speed cannot be changed to 10 Mbps or 1000 Mbps. However
21  *    for Zynq there is no such issue and it can work at all 3 speeds after
22  *    autonegotiation.
23  * 3. The SLCR clock divisors are hard coded for PEEP board.
24  */
25
26 #include <linux/module.h>
27 #include <linux/kernel.h>
28 #include <linux/init.h>
29 #include <linux/mm.h>
30 #include <linux/netdevice.h>
31 #include <linux/etherdevice.h>
32 #include <linux/platform_device.h>
33 #include <linux/phy.h>
34 #include <linux/mii.h>
35 #include <linux/delay.h>
36 #include <linux/dma-mapping.h>
37 #include <linux/io.h>
38 #include <linux/ethtool.h>
39 #include <linux/vmalloc.h>
40 #include <linux/version.h>
41 #include <linux/of.h>
42 #include <linux/interrupt.h>
43 #include <linux/clocksource.h>
44 #include <linux/net_tstamp.h>
45 #include <linux/pm_runtime.h>
46 #include <linux/clk.h>
47 #include <linux/of_net.h>
48 #include <linux/of_address.h>
49 #include <linux/of_mdio.h>
50 #include <linux/timer.h>
51
52 /************************** Constant Definitions *****************************/
53
54 /* Must be shorter than length of ethtool_drvinfo.driver field to fit */
55 #define DRIVER_NAME                     "xemacps"
56 #define DRIVER_DESCRIPTION              "Xilinx Tri-Mode Ethernet MAC driver"
57 #define DRIVER_VERSION                  "1.00a"
58
59 /* Transmission timeout is 3 seconds. */
60 #define TX_TIMEOUT                      (3*HZ)
61
62 /* for RX skb IP header word-aligned */
63 #define RX_IP_ALIGN_OFFSET              2
64
65 /* DMA buffer descriptors must be aligned on a 4-byte boundary. */
66 #define ALIGNMENT_BD                    8
67
68 /* Maximum value for hash bits. 2**6 */
69 #define XEMACPS_MAX_HASH_BITS           64
70
71 /* MDC clock division
72  * currently supporting 8, 16, 32, 48, 64, 96, 128, 224.
73  */
74 enum { MDC_DIV_8 = 0, MDC_DIV_16, MDC_DIV_32, MDC_DIV_48,
75 MDC_DIV_64, MDC_DIV_96, MDC_DIV_128, MDC_DIV_224 };
76
77 /* Specify the receive buffer size in bytes, 64, 128, 192, 10240 */
78 #define XEMACPS_RX_BUF_SIZE             1536
79
80 /* Number of receive buffer bytes as a unit, this is HW setup */
81 #define XEMACPS_RX_BUF_UNIT             64
82
83 /* Default SEND and RECV buffer descriptors (BD) numbers.
84  * BD Space needed is (XEMACPS_SEND_BD_CNT+XEMACPS_RECV_BD_CNT)*8
85  */
86 #undef  DEBUG
87 #define DEBUG
88
89 #define XEMACPS_SEND_BD_CNT             256
90 #define XEMACPS_RECV_BD_CNT             256
91
92 #define XEMACPS_NAPI_WEIGHT             64
93
94 /* Register offset definitions. Unless otherwise noted, register access is
95  * 32 bit. Names are self explained here.
96  */
97 #define XEMACPS_NWCTRL_OFFSET           0x00000000 /* Network Control reg */
98 #define XEMACPS_NWCFG_OFFSET            0x00000004 /* Network Config reg */
99 #define XEMACPS_NWSR_OFFSET             0x00000008 /* Network Status reg */
100 #define XEMACPS_USERIO_OFFSET           0x0000000C /* User IO reg */
101 #define XEMACPS_DMACR_OFFSET            0x00000010 /* DMA Control reg */
102 #define XEMACPS_TXSR_OFFSET             0x00000014 /* TX Status reg */
103 #define XEMACPS_RXQBASE_OFFSET          0x00000018 /* RX Q Base address reg */
104 #define XEMACPS_TXQBASE_OFFSET          0x0000001C /* TX Q Base address reg */
105 #define XEMACPS_RXSR_OFFSET             0x00000020 /* RX Status reg */
106 #define XEMACPS_ISR_OFFSET              0x00000024 /* Interrupt Status reg */
107 #define XEMACPS_IER_OFFSET              0x00000028 /* Interrupt Enable reg */
108 #define XEMACPS_IDR_OFFSET              0x0000002C /* Interrupt Disable reg */
109 #define XEMACPS_IMR_OFFSET              0x00000030 /* Interrupt Mask reg */
110 #define XEMACPS_PHYMNTNC_OFFSET         0x00000034 /* Phy Maintaince reg */
111 #define XEMACPS_RXPAUSE_OFFSET          0x00000038 /* RX Pause Time reg */
112 #define XEMACPS_TXPAUSE_OFFSET          0x0000003C /* TX Pause Time reg */
113 #define XEMACPS_HASHL_OFFSET            0x00000080 /* Hash Low address reg */
114 #define XEMACPS_HASHH_OFFSET            0x00000084 /* Hash High address reg */
115 #define XEMACPS_LADDR1L_OFFSET          0x00000088 /* Specific1 addr low */
116 #define XEMACPS_LADDR1H_OFFSET          0x0000008C /* Specific1 addr high */
117 #define XEMACPS_LADDR2L_OFFSET          0x00000090 /* Specific2 addr low */
118 #define XEMACPS_LADDR2H_OFFSET          0x00000094 /* Specific2 addr high */
119 #define XEMACPS_LADDR3L_OFFSET          0x00000098 /* Specific3 addr low */
120 #define XEMACPS_LADDR3H_OFFSET          0x0000009C /* Specific3 addr high */
121 #define XEMACPS_LADDR4L_OFFSET          0x000000A0 /* Specific4 addr low */
122 #define XEMACPS_LADDR4H_OFFSET          0x000000A4 /* Specific4 addr high */
123 #define XEMACPS_MATCH1_OFFSET           0x000000A8 /* Type ID1 Match reg */
124 #define XEMACPS_MATCH2_OFFSET           0x000000AC /* Type ID2 Match reg */
125 #define XEMACPS_MATCH3_OFFSET           0x000000B0 /* Type ID3 Match reg */
126 #define XEMACPS_MATCH4_OFFSET           0x000000B4 /* Type ID4 Match reg */
127 #define XEMACPS_WOL_OFFSET              0x000000B8 /* Wake on LAN reg */
128 #define XEMACPS_STRETCH_OFFSET          0x000000BC /* IPG Stretch reg */
129 #define XEMACPS_SVLAN_OFFSET            0x000000C0 /* Stacked VLAN reg */
130 #define XEMACPS_MODID_OFFSET            0x000000FC /* Module ID reg */
131 #define XEMACPS_OCTTXL_OFFSET           0x00000100 /* Octects transmitted Low
132                                                 reg */
133 #define XEMACPS_OCTTXH_OFFSET           0x00000104 /* Octects transmitted High
134                                                 reg */
135 #define XEMACPS_TXCNT_OFFSET            0x00000108 /* Error-free Frmaes
136                                                 transmitted counter */
137 #define XEMACPS_TXBCCNT_OFFSET          0x0000010C /* Error-free Broadcast
138                                                 Frames counter*/
139 #define XEMACPS_TXMCCNT_OFFSET          0x00000110 /* Error-free Multicast
140                                                 Frame counter */
141 #define XEMACPS_TXPAUSECNT_OFFSET       0x00000114 /* Pause Frames Transmitted
142                                                 Counter */
143 #define XEMACPS_TX64CNT_OFFSET          0x00000118 /* Error-free 64 byte Frames
144                                                 Transmitted counter */
145 #define XEMACPS_TX65CNT_OFFSET          0x0000011C /* Error-free 65-127 byte
146                                                 Frames Transmitted counter */
147 #define XEMACPS_TX128CNT_OFFSET         0x00000120 /* Error-free 128-255 byte
148                                                 Frames Transmitted counter */
149 #define XEMACPS_TX256CNT_OFFSET         0x00000124 /* Error-free 256-511 byte
150                                                 Frames transmitted counter */
151 #define XEMACPS_TX512CNT_OFFSET         0x00000128 /* Error-free 512-1023 byte
152                                                 Frames transmitted counter */
153 #define XEMACPS_TX1024CNT_OFFSET        0x0000012C /* Error-free 1024-1518 byte
154                                                 Frames transmitted counter */
155 #define XEMACPS_TX1519CNT_OFFSET        0x00000130 /* Error-free larger than
156                                                 1519 byte Frames transmitted
157                                                 Counter */
158 #define XEMACPS_TXURUNCNT_OFFSET        0x00000134 /* TX under run error
159                                                 Counter */
160 #define XEMACPS_SNGLCOLLCNT_OFFSET      0x00000138 /* Single Collision Frame
161                                                 Counter */
162 #define XEMACPS_MULTICOLLCNT_OFFSET     0x0000013C /* Multiple Collision Frame
163                                                 Counter */
164 #define XEMACPS_EXCESSCOLLCNT_OFFSET    0x00000140 /* Excessive Collision Frame
165                                                 Counter */
166 #define XEMACPS_LATECOLLCNT_OFFSET      0x00000144 /* Late Collision Frame
167                                                 Counter */
168 #define XEMACPS_TXDEFERCNT_OFFSET       0x00000148 /* Deferred Transmission
169                                                 Frame Counter */
170 #define XEMACPS_CSENSECNT_OFFSET        0x0000014C /* Carrier Sense Error
171                                                 Counter */
172 #define XEMACPS_OCTRXL_OFFSET           0x00000150 /* Octects Received register
173                                                 Low */
174 #define XEMACPS_OCTRXH_OFFSET           0x00000154 /* Octects Received register
175                                                 High */
176 #define XEMACPS_RXCNT_OFFSET            0x00000158 /* Error-free Frames
177                                                 Received Counter */
178 #define XEMACPS_RXBROADCNT_OFFSET       0x0000015C /* Error-free Broadcast
179                                                 Frames Received Counter */
180 #define XEMACPS_RXMULTICNT_OFFSET       0x00000160 /* Error-free Multicast
181                                                 Frames Received Counter */
182 #define XEMACPS_RXPAUSECNT_OFFSET       0x00000164 /* Pause Frames
183                                                 Received Counter */
184 #define XEMACPS_RX64CNT_OFFSET          0x00000168 /* Error-free 64 byte Frames
185                                                 Received Counter */
186 #define XEMACPS_RX65CNT_OFFSET          0x0000016C /* Error-free 65-127 byte
187                                                 Frames Received Counter */
188 #define XEMACPS_RX128CNT_OFFSET         0x00000170 /* Error-free 128-255 byte
189                                                 Frames Received Counter */
190 #define XEMACPS_RX256CNT_OFFSET         0x00000174 /* Error-free 256-512 byte
191                                                 Frames Received Counter */
192 #define XEMACPS_RX512CNT_OFFSET         0x00000178 /* Error-free 512-1023 byte
193                                                 Frames Received Counter */
194 #define XEMACPS_RX1024CNT_OFFSET        0x0000017C /* Error-free 1024-1518 byte
195                                                 Frames Received Counter */
196 #define XEMACPS_RX1519CNT_OFFSET        0x00000180 /* Error-free 1519-max byte
197                                                 Frames Received Counter */
198 #define XEMACPS_RXUNDRCNT_OFFSET        0x00000184 /* Undersize Frames Received
199                                                 Counter */
200 #define XEMACPS_RXOVRCNT_OFFSET         0x00000188 /* Oversize Frames Received
201                                                 Counter */
202 #define XEMACPS_RXJABCNT_OFFSET         0x0000018C /* Jabbers Received
203                                                 Counter */
204 #define XEMACPS_RXFCSCNT_OFFSET         0x00000190 /* Frame Check Sequence
205                                                 Error Counter */
206 #define XEMACPS_RXLENGTHCNT_OFFSET      0x00000194 /* Length Field Error
207                                                 Counter */
208 #define XEMACPS_RXSYMBCNT_OFFSET        0x00000198 /* Symbol Error Counter */
209 #define XEMACPS_RXALIGNCNT_OFFSET       0x0000019C /* Alignment Error
210                                                 Counter */
211 #define XEMACPS_RXRESERRCNT_OFFSET      0x000001A0 /* Receive Resource Error
212                                                 Counter */
213 #define XEMACPS_RXORCNT_OFFSET          0x000001A4 /* Receive Overrun */
214 #define XEMACPS_RXIPCCNT_OFFSET         0x000001A8 /* IP header Checksum Error
215                                                 Counter */
216 #define XEMACPS_RXTCPCCNT_OFFSET        0x000001AC /* TCP Checksum Error
217                                                 Counter */
218 #define XEMACPS_RXUDPCCNT_OFFSET        0x000001B0 /* UDP Checksum Error
219                                                 Counter */
220
221 #define XEMACPS_1588S_OFFSET            0x000001D0 /* 1588 Timer Seconds */
222 #define XEMACPS_1588NS_OFFSET           0x000001D4 /* 1588 Timer Nanoseconds */
223 #define XEMACPS_1588ADJ_OFFSET          0x000001D8 /* 1588 Timer Adjust */
224 #define XEMACPS_1588INC_OFFSET          0x000001DC /* 1588 Timer Increment */
225 #define XEMACPS_PTPETXS_OFFSET          0x000001E0 /* PTP Event Frame
226                                                 Transmitted Seconds */
227 #define XEMACPS_PTPETXNS_OFFSET         0x000001E4 /* PTP Event Frame
228                                                 Transmitted Nanoseconds */
229 #define XEMACPS_PTPERXS_OFFSET          0x000001E8 /* PTP Event Frame Received
230                                                 Seconds */
231 #define XEMACPS_PTPERXNS_OFFSET         0x000001EC /* PTP Event Frame Received
232                                                 Nanoseconds */
233 #define XEMACPS_PTPPTXS_OFFSET          0x000001E0 /* PTP Peer Frame
234                                                 Transmitted Seconds */
235 #define XEMACPS_PTPPTXNS_OFFSET         0x000001E4 /* PTP Peer Frame
236                                                 Transmitted Nanoseconds */
237 #define XEMACPS_PTPPRXS_OFFSET          0x000001E8 /* PTP Peer Frame Received
238                                                 Seconds */
239 #define XEMACPS_PTPPRXNS_OFFSET         0x000001EC /* PTP Peer Frame Received
240                                                 Nanoseconds */
241
242 /* network control register bit definitions */
243 #define XEMACPS_NWCTRL_FLUSH_DPRAM_MASK 0x00040000
244 #define XEMACPS_NWCTRL_RXTSTAMP_MASK    0x00008000 /* RX Timestamp in CRC */
245 #define XEMACPS_NWCTRL_ZEROPAUSETX_MASK 0x00001000 /* Transmit zero quantum
246                                                 pause frame */
247 #define XEMACPS_NWCTRL_PAUSETX_MASK     0x00000800 /* Transmit pause frame */
248 #define XEMACPS_NWCTRL_HALTTX_MASK      0x00000400 /* Halt transmission
249                                                 after current frame */
250 #define XEMACPS_NWCTRL_STARTTX_MASK     0x00000200 /* Start tx (tx_go) */
251
252 #define XEMACPS_NWCTRL_STATWEN_MASK     0x00000080 /* Enable writing to
253                                                 stat counters */
254 #define XEMACPS_NWCTRL_STATINC_MASK     0x00000040 /* Increment statistic
255                                                 registers */
256 #define XEMACPS_NWCTRL_STATCLR_MASK     0x00000020 /* Clear statistic
257                                                 registers */
258 #define XEMACPS_NWCTRL_MDEN_MASK        0x00000010 /* Enable MDIO port */
259 #define XEMACPS_NWCTRL_TXEN_MASK        0x00000008 /* Enable transmit */
260 #define XEMACPS_NWCTRL_RXEN_MASK        0x00000004 /* Enable receive */
261 #define XEMACPS_NWCTRL_LOOPEN_MASK      0x00000002 /* local loopback */
262
263 /* name network configuration register bit definitions */
264 #define XEMACPS_NWCFG_BADPREAMBEN_MASK  0x20000000 /* disable rejection of
265                                                 non-standard preamble */
266 #define XEMACPS_NWCFG_IPDSTRETCH_MASK   0x10000000 /* enable transmit IPG */
267 #define XEMACPS_NWCFG_FCSIGNORE_MASK    0x04000000 /* disable rejection of
268                                                 FCS error */
269 #define XEMACPS_NWCFG_HDRXEN_MASK       0x02000000 /* RX half duplex */
270 #define XEMACPS_NWCFG_RXCHKSUMEN_MASK   0x01000000 /* enable RX checksum
271                                                 offload */
272 #define XEMACPS_NWCFG_PAUSECOPYDI_MASK  0x00800000 /* Do not copy pause
273                                                 Frames to memory */
274 #define XEMACPS_NWCFG_MDC_SHIFT_MASK    18 /* shift bits for MDC */
275 #define XEMACPS_NWCFG_MDCCLKDIV_MASK    0x001C0000 /* MDC Mask PCLK divisor */
276 #define XEMACPS_NWCFG_FCSREM_MASK       0x00020000 /* Discard FCS from
277                                                 received frames */
278 #define XEMACPS_NWCFG_LENGTHERRDSCRD_MASK 0x00010000
279 /* RX length error discard */
280 #define XEMACPS_NWCFG_RXOFFS_MASK       0x0000C000 /* RX buffer offset */
281 #define XEMACPS_NWCFG_PAUSEEN_MASK      0x00002000 /* Enable pause TX */
282 #define XEMACPS_NWCFG_RETRYTESTEN_MASK  0x00001000 /* Retry test */
283 #define XEMACPS_NWCFG_1000_MASK         0x00000400 /* Gigbit mode */
284 #define XEMACPS_NWCFG_EXTADDRMATCHEN_MASK       0x00000200
285 /* External address match enable */
286 #define XEMACPS_NWCFG_UCASTHASHEN_MASK  0x00000080 /* Receive unicast hash
287                                                 frames */
288 #define XEMACPS_NWCFG_MCASTHASHEN_MASK  0x00000040 /* Receive multicast hash
289                                                 frames */
290 #define XEMACPS_NWCFG_BCASTDI_MASK      0x00000020 /* Do not receive
291                                                 broadcast frames */
292 #define XEMACPS_NWCFG_COPYALLEN_MASK    0x00000010 /* Copy all frames */
293
294 #define XEMACPS_NWCFG_NVLANDISC_MASK    0x00000004 /* Receive only VLAN
295                                                 frames */
296 #define XEMACPS_NWCFG_FDEN_MASK         0x00000002 /* Full duplex */
297 #define XEMACPS_NWCFG_100_MASK          0x00000001 /* 10 or 100 Mbs */
298
299 /* network status register bit definitaions */
300 #define XEMACPS_NWSR_MDIOIDLE_MASK      0x00000004 /* PHY management idle */
301 #define XEMACPS_NWSR_MDIO_MASK          0x00000002 /* Status of mdio_in */
302
303 /* MAC address register word 1 mask */
304 #define XEMACPS_LADDR_MACH_MASK         0x0000FFFF /* Address bits[47:32]
305                                                 bit[31:0] are in BOTTOM */
306
307 /* DMA control register bit definitions */
308 #define XEMACPS_DMACR_RXBUF_MASK        0x00FF0000 /* Mask bit for RX buffer
309                                                 size */
310 #define XEMACPS_DMACR_RXBUF_SHIFT       16 /* Shift bit for RX buffer
311                                                 size */
312 #define XEMACPS_DMACR_TCPCKSUM_MASK     0x00000800 /* enable/disable TX
313                                                 checksum offload */
314 #define XEMACPS_DMACR_TXSIZE_MASK       0x00000400 /* TX buffer memory size */
315 #define XEMACPS_DMACR_RXSIZE_MASK       0x00000300 /* RX buffer memory size */
316 #define XEMACPS_DMACR_ENDIAN_MASK       0x00000080 /* Endian configuration */
317 #define XEMACPS_DMACR_BLENGTH_MASK      0x0000001F /* Buffer burst length */
318 #define XEMACPS_DMACR_BLENGTH_INCR16    0x00000010 /* Buffer burst length */
319 #define XEMACPS_DMACR_BLENGTH_INCR8     0x00000008 /* Buffer burst length */
320 #define XEMACPS_DMACR_BLENGTH_INCR4     0x00000004 /* Buffer burst length */
321 #define XEMACPS_DMACR_BLENGTH_SINGLE    0x00000002 /* Buffer burst length */
322
323 /* transmit status register bit definitions */
324 #define XEMACPS_TXSR_HRESPNOK_MASK      0x00000100 /* Transmit hresp not OK */
325 #define XEMACPS_TXSR_COL1000_MASK       0x00000080 /* Collision Gbs mode */
326 #define XEMACPS_TXSR_URUN_MASK          0x00000040 /* Transmit underrun */
327 #define XEMACPS_TXSR_TXCOMPL_MASK       0x00000020 /* Transmit completed OK */
328 #define XEMACPS_TXSR_BUFEXH_MASK        0x00000010 /* Transmit buffs exhausted
329                                                 mid frame */
330 #define XEMACPS_TXSR_TXGO_MASK          0x00000008 /* Status of go flag */
331 #define XEMACPS_TXSR_RXOVR_MASK         0x00000004 /* Retry limit exceeded */
332 #define XEMACPS_TXSR_COL100_MASK        0x00000002 /* Collision 10/100  mode */
333 #define XEMACPS_TXSR_USEDREAD_MASK      0x00000001 /* TX buffer used bit set */
334
335 #define XEMACPS_TXSR_ERROR_MASK (XEMACPS_TXSR_HRESPNOK_MASK |           \
336                                         XEMACPS_TXSR_COL1000_MASK |     \
337                                         XEMACPS_TXSR_URUN_MASK |        \
338                                         XEMACPS_TXSR_BUFEXH_MASK |      \
339                                         XEMACPS_TXSR_RXOVR_MASK |       \
340                                         XEMACPS_TXSR_COL100_MASK |      \
341                                         XEMACPS_TXSR_USEDREAD_MASK)
342
343 /* receive status register bit definitions */
344 #define XEMACPS_RXSR_HRESPNOK_MASK      0x00000008 /* Receive hresp not OK */
345 #define XEMACPS_RXSR_RXOVR_MASK         0x00000004 /* Receive overrun */
346 #define XEMACPS_RXSR_FRAMERX_MASK       0x00000002 /* Frame received OK */
347 #define XEMACPS_RXSR_BUFFNA_MASK        0x00000001 /* RX buffer used bit set */
348
349 #define XEMACPS_RXSR_ERROR_MASK (XEMACPS_RXSR_HRESPNOK_MASK | \
350                                         XEMACPS_RXSR_RXOVR_MASK | \
351                                         XEMACPS_RXSR_BUFFNA_MASK)
352
353 /* interrupts bit definitions
354  * Bits definitions are same in XEMACPS_ISR_OFFSET,
355  * XEMACPS_IER_OFFSET, XEMACPS_IDR_OFFSET, and XEMACPS_IMR_OFFSET
356  */
357 #define XEMACPS_IXR_PTPPSTX_MASK        0x02000000 /* PTP Psync transmitted */
358 #define XEMACPS_IXR_PTPPDRTX_MASK       0x01000000 /* PTP Pdelay_req
359                                                         transmitted */
360 #define XEMACPS_IXR_PTPSTX_MASK         0x00800000 /* PTP Sync transmitted */
361 #define XEMACPS_IXR_PTPDRTX_MASK        0x00400000 /* PTP Delay_req
362                                                         transmitted */
363 #define XEMACPS_IXR_PTPPSRX_MASK        0x00200000 /* PTP Psync received */
364 #define XEMACPS_IXR_PTPPDRRX_MASK       0x00100000 /* PTP Pdelay_req
365                                                         received */
366 #define XEMACPS_IXR_PTPSRX_MASK         0x00080000 /* PTP Sync received */
367 #define XEMACPS_IXR_PTPDRRX_MASK        0x00040000 /* PTP Delay_req received */
368 #define XEMACPS_IXR_PAUSETX_MASK        0x00004000 /* Pause frame
369                                                         transmitted */
370 #define XEMACPS_IXR_PAUSEZERO_MASK      0x00002000 /* Pause time has reached
371                                                         zero */
372 #define XEMACPS_IXR_PAUSENZERO_MASK     0x00001000 /* Pause frame received */
373 #define XEMACPS_IXR_HRESPNOK_MASK       0x00000800 /* hresp not ok */
374 #define XEMACPS_IXR_RXOVR_MASK          0x00000400 /* Receive overrun
375                                                         occurred */
376 #define XEMACPS_IXR_TXCOMPL_MASK        0x00000080 /* Frame transmitted ok */
377 #define XEMACPS_IXR_TXEXH_MASK          0x00000040 /* Transmit err occurred or
378                                                         no buffers*/
379 #define XEMACPS_IXR_RETRY_MASK          0x00000020 /* Retry limit exceeded */
380 #define XEMACPS_IXR_URUN_MASK           0x00000010 /* Transmit underrun */
381 #define XEMACPS_IXR_TXUSED_MASK         0x00000008 /* Tx buffer used bit read */
382 #define XEMACPS_IXR_RXUSED_MASK         0x00000004 /* Rx buffer used bit read */
383 #define XEMACPS_IXR_FRAMERX_MASK        0x00000002 /* Frame received ok */
384 #define XEMACPS_IXR_MGMNT_MASK          0x00000001 /* PHY management complete */
385 #define XEMACPS_IXR_ALL_MASK            0x03FC7FFE /* Everything except MDIO */
386
387 #define XEMACPS_IXR_TX_ERR_MASK (XEMACPS_IXR_TXEXH_MASK |               \
388                                         XEMACPS_IXR_RETRY_MASK |        \
389                                         XEMACPS_IXR_URUN_MASK |         \
390                                         XEMACPS_IXR_TXUSED_MASK)
391
392 #define XEMACPS_IXR_RX_ERR_MASK (XEMACPS_IXR_HRESPNOK_MASK |            \
393                                         XEMACPS_IXR_RXUSED_MASK |       \
394                                         XEMACPS_IXR_RXOVR_MASK)
395 /* PHY Maintenance bit definitions */
396 #define XEMACPS_PHYMNTNC_OP_MASK        0x40020000 /* operation mask bits */
397 #define XEMACPS_PHYMNTNC_OP_R_MASK      0x20000000 /* read operation */
398 #define XEMACPS_PHYMNTNC_OP_W_MASK      0x10000000 /* write operation */
399 #define XEMACPS_PHYMNTNC_ADDR_MASK      0x0F800000 /* Address bits */
400 #define XEMACPS_PHYMNTNC_REG_MASK       0x007C0000 /* register bits */
401 #define XEMACPS_PHYMNTNC_DATA_MASK      0x0000FFFF /* data bits */
402 #define XEMACPS_PHYMNTNC_PHYAD_SHIFT_MASK       23 /* Shift bits for PHYAD */
403 #define XEMACPS_PHYMNTNC_PHREG_SHIFT_MASK       18 /* Shift bits for PHREG */
404
405 /* Wake on LAN bit definition */
406 #define XEMACPS_WOL_MCAST_MASK          0x00080000
407 #define XEMACPS_WOL_SPEREG1_MASK        0x00040000
408 #define XEMACPS_WOL_ARP_MASK            0x00020000
409 #define XEMACPS_WOL_MAGIC_MASK          0x00010000
410 #define XEMACPS_WOL_ARP_ADDR_MASK       0x0000FFFF
411
412 /* Buffer descriptor status words offset */
413 #define XEMACPS_BD_ADDR_OFFSET          0x00000000 /**< word 0/addr of BDs */
414 #define XEMACPS_BD_STAT_OFFSET          0x00000004 /**< word 1/status of BDs */
415
416 /* Transmit buffer descriptor status words bit positions.
417  * Transmit buffer descriptor consists of two 32-bit registers,
418  * the first - word0 contains a 32-bit address pointing to the location of
419  * the transmit data.
420  * The following register - word1, consists of various information to
421  * control transmit process.  After transmit, this is updated with status
422  * information, whether the frame was transmitted OK or why it had failed.
423  */
424 #define XEMACPS_TXBUF_USED_MASK         0x80000000 /* Used bit. */
425 #define XEMACPS_TXBUF_WRAP_MASK         0x40000000 /* Wrap bit, last
426                                                         descriptor */
427 #define XEMACPS_TXBUF_RETRY_MASK        0x20000000 /* Retry limit exceeded */
428 #define XEMACPS_TXBUF_EXH_MASK          0x08000000 /* Buffers exhausted */
429 #define XEMACPS_TXBUF_LAC_MASK          0x04000000 /* Late collision. */
430 #define XEMACPS_TXBUF_NOCRC_MASK        0x00010000 /* No CRC */
431 #define XEMACPS_TXBUF_LAST_MASK         0x00008000 /* Last buffer */
432 #define XEMACPS_TXBUF_LEN_MASK          0x00003FFF /* Mask for length field */
433
434 #define XEMACPS_TXBUF_ERR_MASK          0x3C000000 /* Mask for length field */
435
436 /* Receive buffer descriptor status words bit positions.
437  * Receive buffer descriptor consists of two 32-bit registers,
438  * the first - word0 contains a 32-bit word aligned address pointing to the
439  * address of the buffer. The lower two bits make up the wrap bit indicating
440  * the last descriptor and the ownership bit to indicate it has been used.
441  * The following register - word1, contains status information regarding why
442  * the frame was received (the filter match condition) as well as other
443  * useful info.
444  */
445 #define XEMACPS_RXBUF_BCAST_MASK        0x80000000 /* Broadcast frame */
446 #define XEMACPS_RXBUF_MULTIHASH_MASK    0x40000000 /* Multicast hashed frame */
447 #define XEMACPS_RXBUF_UNIHASH_MASK      0x20000000 /* Unicast hashed frame */
448 #define XEMACPS_RXBUF_EXH_MASK          0x08000000 /* buffer exhausted */
449 #define XEMACPS_RXBUF_AMATCH_MASK       0x06000000 /* Specific address
450                                                 matched */
451 #define XEMACPS_RXBUF_IDFOUND_MASK      0x01000000 /* Type ID matched */
452 #define XEMACPS_RXBUF_IDMATCH_MASK      0x00C00000 /* ID matched mask */
453 #define XEMACPS_RXBUF_VLAN_MASK         0x00200000 /* VLAN tagged */
454 #define XEMACPS_RXBUF_PRI_MASK          0x00100000 /* Priority tagged */
455 #define XEMACPS_RXBUF_VPRI_MASK         0x000E0000 /* Vlan priority */
456 #define XEMACPS_RXBUF_CFI_MASK          0x00010000 /* CFI frame */
457 #define XEMACPS_RXBUF_EOF_MASK          0x00008000 /* End of frame. */
458 #define XEMACPS_RXBUF_SOF_MASK          0x00004000 /* Start of frame. */
459 #define XEMACPS_RXBUF_LEN_MASK          0x00003FFF /* Mask for length field */
460
461 #define XEMACPS_RXBUF_WRAP_MASK         0x00000002 /* Wrap bit, last BD */
462 #define XEMACPS_RXBUF_NEW_MASK          0x00000001 /* Used bit.. */
463 #define XEMACPS_RXBUF_ADD_MASK          0xFFFFFFFC /* Mask for address */
464
465 #define XEAMCPS_GEN_PURPOSE_TIMER_LOAD  100 /* timeout value is msecs */
466
467 #define XEMACPS_GMII2RGMII_SPEED1000_FD         0x140
468 #define XEMACPS_GMII2RGMII_SPEED100_FD          0x2100
469 #define XEMACPS_GMII2RGMII_SPEED10_FD           0x100
470 #define XEMACPS_GMII2RGMII_REG_NUM                      0x10
471
472 #define BOARD_TYPE_ZYNQ                 0x01
473 #define BOARD_TYPE_PEEP                 0x02
474
475
476 #ifdef CONFIG_XILINX_PS_EMAC_HWTSTAMP
477 #define NS_PER_SEC                      1000000000ULL /* Nanoseconds per
478                                                         second */
479 #define PEEP_TSU_CLK                    50000000ULL /* PTP TSU CLOCK */
480 #endif
481
482 #define xemacps_read(base, reg)                                         \
483         __raw_readl((void __iomem *)((base) + (reg)))
484 #define xemacps_write(base, reg, val)                                   \
485         __raw_writel((val), (void __iomem *)((base) + (reg)))
486
487
488
489 struct ring_info {
490         struct sk_buff *skb;
491         dma_addr_t mapping;
492 };
493
494 /* DMA buffer descriptor structure. Each BD is two words */
495 struct xemacps_bd {
496         u32 addr;
497         u32 ctrl;
498 };
499
500
501 /* Our private device data. */
502 struct net_local {
503         void __iomem *baseaddr;
504         struct clk *devclk;
505         struct clk *aperclk;
506         struct notifier_block clk_rate_change_nb;
507
508         struct device_node *phy_node;
509         struct device_node *gmii2rgmii_phy_node;
510         struct ring_info *tx_skb;
511         struct ring_info *rx_skb;
512
513         struct xemacps_bd *rx_bd;
514         struct xemacps_bd *tx_bd;
515
516         dma_addr_t rx_bd_dma; /* physical address */
517         dma_addr_t tx_bd_dma; /* physical address */
518
519         u32 tx_bd_ci;
520         u32 tx_bd_tail;
521         u32 rx_bd_ci;
522
523         u32 tx_bd_freecnt;
524
525         spinlock_t tx_lock;
526         spinlock_t rx_lock;
527
528         struct platform_device *pdev;
529         struct net_device *ndev; /* this device */
530         struct tasklet_struct tx_bdreclaim_tasklet;
531         struct workqueue_struct *txtimeout_handler_wq;
532         struct work_struct txtimeout_reinit;
533
534         struct napi_struct napi; /* napi information for device */
535         struct net_device_stats stats; /* Statistics for this device */
536
537         struct timer_list gen_purpose_timer; /* Used for stats update */
538
539         /* Manage internal timer for packet timestamping */
540         struct cyclecounter cycles;
541         struct timecounter clock;
542         struct hwtstamp_config hwtstamp_config;
543
544         struct mii_bus *mii_bus;
545         struct phy_device *phy_dev;
546         struct phy_device *gmii2rgmii_phy_dev;
547         phy_interface_t phy_interface;
548         unsigned int link;
549         unsigned int speed;
550         unsigned int duplex;
551         /* RX ip/tcp/udp checksum */
552         unsigned ip_summed;
553         unsigned int enetnum;
554         unsigned int board_type;
555         unsigned int lastrxfrmscntr;
556 #ifdef CONFIG_XILINX_PS_EMAC_HWTSTAMP
557         unsigned int ptpenetclk;
558 #endif
559 };
560 #define to_net_local(_nb)       container_of(_nb, struct net_local,\
561                 clk_rate_change_nb)
562
563 static struct net_device_ops netdev_ops;
564
565 /**
566  * xemacps_mdio_read - Read current value of phy register indicated by
567  * phyreg.
568  * @bus: mdio bus
569  * @mii_id: mii id
570  * @phyreg: phy register to be read
571  *
572  * @return: value read from specified phy register.
573  *
574  * note: This is for 802.3 clause 22 phys access. For 802.3 clause 45 phys
575  * access, set bit 30 to be 1. e.g. change XEMACPS_PHYMNTNC_OP_MASK to
576  * 0x00020000.
577  */
578 static int xemacps_mdio_read(struct mii_bus *bus, int mii_id, int phyreg)
579 {
580         struct net_local *lp = bus->priv;
581         u32 regval;
582         int value;
583         volatile u32 ipisr;
584
585         regval  = XEMACPS_PHYMNTNC_OP_MASK;
586         regval |= XEMACPS_PHYMNTNC_OP_R_MASK;
587         regval |= (mii_id << XEMACPS_PHYMNTNC_PHYAD_SHIFT_MASK);
588         regval |= (phyreg << XEMACPS_PHYMNTNC_PHREG_SHIFT_MASK);
589
590         xemacps_write(lp->baseaddr, XEMACPS_PHYMNTNC_OFFSET, regval);
591
592         /* wait for end of transfer */
593         do {
594                 cpu_relax();
595                 ipisr = xemacps_read(lp->baseaddr, XEMACPS_NWSR_OFFSET);
596         } while ((ipisr & XEMACPS_NWSR_MDIOIDLE_MASK) == 0);
597
598         value = xemacps_read(lp->baseaddr, XEMACPS_PHYMNTNC_OFFSET) &
599                         XEMACPS_PHYMNTNC_DATA_MASK;
600
601         return value;
602 }
603
604 /**
605  * xemacps_mdio_write - Write passed in value to phy register indicated
606  * by phyreg.
607  * @bus: mdio bus
608  * @mii_id: mii id
609  * @phyreg: phy register to be configured.
610  * @value: value to be written to phy register.
611  * return 0. This API requires to be int type or compile warning generated
612  *
613  * note: This is for 802.3 clause 22 phys access. For 802.3 clause 45 phys
614  * access, set bit 30 to be 1. e.g. change XEMACPS_PHYMNTNC_OP_MASK to
615  * 0x00020000.
616  */
617 static int xemacps_mdio_write(struct mii_bus *bus, int mii_id, int phyreg,
618         u16 value)
619 {
620         struct net_local *lp = bus->priv;
621         u32 regval;
622         volatile u32 ipisr;
623
624         regval  = XEMACPS_PHYMNTNC_OP_MASK;
625         regval |= XEMACPS_PHYMNTNC_OP_W_MASK;
626         regval |= (mii_id << XEMACPS_PHYMNTNC_PHYAD_SHIFT_MASK);
627         regval |= (phyreg << XEMACPS_PHYMNTNC_PHREG_SHIFT_MASK);
628         regval |= value;
629
630         xemacps_write(lp->baseaddr, XEMACPS_PHYMNTNC_OFFSET, regval);
631
632         /* wait for end of transfer */
633         do {
634                 cpu_relax();
635                 ipisr = xemacps_read(lp->baseaddr, XEMACPS_NWSR_OFFSET);
636         } while ((ipisr & XEMACPS_NWSR_MDIOIDLE_MASK) == 0);
637
638         return 0;
639 }
640
641
642 /**
643  * xemacps_mdio_reset - mdio reset. It seems to be required per open
644  * source documentation phy.txt. But there is no reset in this device.
645  * Provide function API for now.
646  * @bus: mdio bus
647  **/
648 static int xemacps_mdio_reset(struct mii_bus *bus)
649 {
650         return 0;
651 }
652
653 static void xemacps_phy_init(struct net_device *ndev)
654 {
655         struct net_local *lp = netdev_priv(ndev);
656         u16 regval;
657         int i = 0;
658
659         /* set RX delay */
660         regval = xemacps_mdio_read(lp->mii_bus, lp->phy_dev->addr, 20);
661         /* 0x0080 for 100Mbps, 0x0060 for 1Gbps. */
662         regval |= 0x0080;
663         xemacps_mdio_write(lp->mii_bus, lp->phy_dev->addr, 20, regval);
664
665         /* 0x2100 for 100Mbps, 0x0140 for 1Gbps. */
666         xemacps_mdio_write(lp->mii_bus, lp->phy_dev->addr, 0, 0x2100);
667
668         regval = xemacps_mdio_read(lp->mii_bus, lp->phy_dev->addr, 0);
669         regval |= 0x8000;
670         xemacps_mdio_write(lp->mii_bus, lp->phy_dev->addr, 0, regval);
671         for (i = 0; i < 10; i++)
672                 mdelay(500);
673 #ifdef DEBUG_VERBOSE
674         dev_dbg(&lp->pdev->dev,
675                         "phy register dump, start from 0, four in a row.");
676         for (i = 0; i <= 30; i++) {
677                 if (!(i%4))
678                         dev_dbg(&lp->pdev->dev, "\n %02d:  ", i);
679                 regval = xemacps_mdio_read(lp->mii_bus, lp->phy_dev->addr, i);
680                 dev_dbg(&lp->pdev->dev, " 0x%08x", regval);
681         }
682         dev_dbg(&lp->pdev->dev, "\n");
683 #endif
684 }
685
686 /**
687  * xemacps_set_freq() - Set a clock to a new frequency
688  * @clk         Pointer to the clock to change
689  * @rate        New frequency in Hz
690  * @dev         Pointer to the struct device
691  */
692 static void xemacps_set_freq(struct clk *clk, long rate, struct device *dev)
693 {
694         rate = clk_round_rate(clk, rate);
695         if (rate < 0) {
696                 dev_warn(dev, "round rate failed\n");
697                 return;
698         }
699
700         dev_info(dev, "Set clk to %ld Hz\n", rate);
701         if (clk_set_rate(clk, rate))
702                 dev_err(dev, "Setting new clock rate failed.\n");
703 }
704
705 /**
706  * xemacps_adjust_link - handles link status changes, such as speed,
707  * duplex, up/down, ...
708  * @ndev: network device
709  */
710 static void xemacps_adjust_link(struct net_device *ndev)
711 {
712         struct net_local *lp = netdev_priv(ndev);
713         struct phy_device *phydev = lp->phy_dev;
714         struct phy_device *gmii2rgmii_phydev = lp->gmii2rgmii_phy_dev;
715         int status_change = 0;
716         u32 regval;
717
718         if (phydev->link) {
719                 if ((lp->speed != phydev->speed) ||
720                         (lp->duplex != phydev->duplex)) {
721                         regval = xemacps_read(lp->baseaddr,
722                                 XEMACPS_NWCFG_OFFSET);
723                         if (phydev->duplex)
724                                 regval |= XEMACPS_NWCFG_FDEN_MASK;
725                         else
726                                 regval &= ~XEMACPS_NWCFG_FDEN_MASK;
727
728                         if (phydev->speed == SPEED_1000) {
729                                 regval |= XEMACPS_NWCFG_1000_MASK;
730                                 xemacps_set_freq(lp->devclk, 125000000,
731                                                 &lp->pdev->dev);
732                         } else {
733                                 regval &= ~XEMACPS_NWCFG_1000_MASK;
734                         }
735
736                         if (phydev->speed == SPEED_100) {
737                                 regval |= XEMACPS_NWCFG_100_MASK;
738                                 xemacps_set_freq(lp->devclk, 25000000,
739                                                 &lp->pdev->dev);
740                         } else {
741                                 regval &= ~XEMACPS_NWCFG_100_MASK;
742                         }
743
744                         if (phydev->speed == SPEED_10) {
745                                 xemacps_set_freq(lp->devclk, 2500000,
746                                                 &lp->pdev->dev);
747                         }
748
749                         xemacps_write(lp->baseaddr, XEMACPS_NWCFG_OFFSET,
750                         regval);
751
752                         if (regval & XEMACPS_NWCFG_1000_MASK) {
753                                 xemacps_mdio_write(lp->mii_bus,
754                                 gmii2rgmii_phydev->addr,
755                                 XEMACPS_GMII2RGMII_REG_NUM,
756                                 XEMACPS_GMII2RGMII_SPEED1000_FD);
757                         } else if (regval & XEMACPS_NWCFG_100_MASK) {
758                                 xemacps_mdio_write(lp->mii_bus,
759                                 gmii2rgmii_phydev->addr,
760                                 XEMACPS_GMII2RGMII_REG_NUM,
761                                 XEMACPS_GMII2RGMII_SPEED100_FD);
762                         } else {
763                                 xemacps_mdio_write(lp->mii_bus,
764                                 gmii2rgmii_phydev->addr,
765                                 XEMACPS_GMII2RGMII_REG_NUM,
766                                 XEMACPS_GMII2RGMII_SPEED10_FD);
767                         }
768
769                         lp->speed = phydev->speed;
770                         lp->duplex = phydev->duplex;
771                         status_change = 1;
772                 }
773         }
774
775         if (phydev->link != lp->link) {
776                 lp->link = phydev->link;
777                 status_change = 1;
778         }
779
780         if (status_change) {
781                 if (phydev->link)
782                         dev_info(&lp->pdev->dev, "link up (%d/%s)\n",
783                                 phydev->speed,
784                                 DUPLEX_FULL == phydev->duplex ?
785                                 "FULL" : "HALF");
786                 else
787                         dev_info(&lp->pdev->dev, "link down\n");
788         }
789 }
790
791 static int xemacps_clk_notifier_cb(struct notifier_block *nb, unsigned long
792                 event, void *data)
793 {
794 /*
795         struct clk_notifier_data *ndata = data;
796         struct net_local *nl = to_net_local(nb);
797 */
798
799         switch (event) {
800         case PRE_RATE_CHANGE:
801                 /* if a rate change is announced we need to check whether we can
802                  * maintain the current frequency by changing the clock
803                  * dividers.
804                  * I don't see how this can be done using the current fmwk!?
805                  * For now we always allow the rate change. Otherwise we would
806                  * even prevent ourself to change the rate.
807                  */
808                 return NOTIFY_OK;
809         case POST_RATE_CHANGE:
810                 /* not sure this will work. actually i'm sure it does not. this
811                  * callback is not allowed to call back into COMMON_CLK, what
812                  * adjust_link() does...*/
813                 /*xemacps_adjust_link(nl->ndev); would likely lock up kernel */
814                 return NOTIFY_OK;
815         case ABORT_RATE_CHANGE:
816         default:
817                 return NOTIFY_DONE;
818         }
819 }
820
821 /**
822  * xemacps_mii_probe - probe mii bus, find the right bus_id to register
823  * phy callback function.
824  * @ndev: network interface device structure
825  * return 0 on success, negative value if error
826  **/
827 static int xemacps_mii_probe(struct net_device *ndev)
828 {
829         struct net_local *lp = netdev_priv(ndev);
830         struct phy_device *phydev = NULL;
831
832         if (lp->phy_node) {
833                 phydev = of_phy_connect(lp->ndev,
834                                         lp->phy_node,
835                                         &xemacps_adjust_link,
836                                         0,
837                                         lp->phy_interface);
838                 if (!phydev) {
839                         dev_err(&lp->pdev->dev, "%s: no PHY found\n",
840                         ndev->name);
841                         return -1;
842                 }
843         }
844
845         dev_dbg(&lp->pdev->dev,
846                 "GEM: phydev %p, phydev->phy_id 0x%x, phydev->addr 0x%x\n",
847                 phydev, phydev->phy_id, phydev->addr);
848
849         phydev->supported &= (PHY_GBIT_FEATURES | SUPPORTED_Pause |
850                                                         SUPPORTED_Asym_Pause);
851         phydev->advertising = phydev->supported;
852
853         lp->link    = 0;
854         lp->speed   = 0;
855         lp->duplex  = -1;
856         lp->phy_dev = phydev;
857
858         if (lp->board_type == BOARD_TYPE_ZYNQ)
859                 phy_start(lp->phy_dev);
860         else
861                 xemacps_phy_init(lp->ndev);
862
863         dev_dbg(&lp->pdev->dev, "phy_addr 0x%x, phy_id 0x%08x\n",
864                         lp->phy_dev->addr, lp->phy_dev->phy_id);
865
866         dev_dbg(&lp->pdev->dev, "attach [%s] phy driver\n",
867                         lp->phy_dev->drv->name);
868
869         if (lp->gmii2rgmii_phy_node) {
870                 phydev = of_phy_connect(lp->ndev,
871                                         lp->gmii2rgmii_phy_node,
872                                         NULL,
873                                         0, 0);
874                 if (!phydev) {
875                         dev_err(&lp->pdev->dev, "%s: no gmii to rgmii converter found\n",
876                         ndev->name);
877                         return -1;
878                 }
879         }
880
881         lp->gmii2rgmii_phy_dev = phydev;
882
883         return 0;
884 }
885
886 /**
887  * xemacps_mii_init - Initialize and register mii bus to network device
888  * @lp: local device instance pointer
889  * return 0 on success, negative value if error
890  **/
891 static int xemacps_mii_init(struct net_local *lp)
892 {
893         int rc = -ENXIO, i;
894         struct resource res;
895         struct device_node *np = of_get_parent(lp->phy_node);
896         struct device_node *npp;
897
898         lp->mii_bus = mdiobus_alloc();
899         if (lp->mii_bus == NULL) {
900                 rc = -ENOMEM;
901                 goto err_out;
902         }
903
904         lp->mii_bus->name  = "XEMACPS mii bus";
905         lp->mii_bus->read  = &xemacps_mdio_read;
906         lp->mii_bus->write = &xemacps_mdio_write;
907         lp->mii_bus->reset = &xemacps_mdio_reset;
908         lp->mii_bus->priv = lp;
909         lp->mii_bus->parent = &lp->ndev->dev;
910
911         lp->mii_bus->irq = kmalloc(sizeof(int)*PHY_MAX_ADDR, GFP_KERNEL);
912         if (!lp->mii_bus->irq) {
913                 rc = -ENOMEM;
914                 goto err_out_free_mdiobus;
915         }
916
917         for (i = 0; i < PHY_MAX_ADDR; i++)
918                 lp->mii_bus->irq[i] = PHY_POLL;
919         npp = of_get_parent(np);
920         of_address_to_resource(npp, 0, &res);
921         snprintf(lp->mii_bus->id, MII_BUS_ID_SIZE, "%.8llx",
922                  (unsigned long long)res.start);
923         if (of_mdiobus_register(lp->mii_bus, np))
924                 goto err_out_free_mdio_irq;
925
926         return 0;
927
928 err_out_free_mdio_irq:
929         kfree(lp->mii_bus->irq);
930 err_out_free_mdiobus:
931         mdiobus_free(lp->mii_bus);
932 err_out:
933         return rc;
934 }
935
936 /**
937  * xemacps_update_hdaddr - Update device's MAC address when configured
938  * MAC address is not valid, reconfigure with a good one.
939  * @lp: local device instance pointer
940  **/
941 static void xemacps_update_hwaddr(struct net_local *lp)
942 {
943         u32 regvall;
944         u16 regvalh;
945         u8  addr[6];
946
947         regvall = xemacps_read(lp->baseaddr, XEMACPS_LADDR1L_OFFSET);
948         regvalh = xemacps_read(lp->baseaddr, XEMACPS_LADDR1H_OFFSET);
949         addr[0] = regvall & 0xFF;
950         addr[1] = (regvall >> 8) & 0xFF;
951         addr[2] = (regvall >> 16) & 0xFF;
952         addr[3] = (regvall >> 24) & 0xFF;
953         addr[4] = regvalh & 0xFF;
954         addr[5] = (regvalh >> 8) & 0xFF;
955
956         if (is_valid_ether_addr(addr)) {
957                 memcpy(lp->ndev->dev_addr, addr, sizeof(addr));
958         } else {
959                 dev_info(&lp->pdev->dev, "invalid address, use assigned\n");
960                 random_ether_addr(lp->ndev->dev_addr);
961                 dev_info(&lp->pdev->dev,
962                                 "MAC updated %02x:%02x:%02x:%02x:%02x:%02x\n",
963                                 lp->ndev->dev_addr[0], lp->ndev->dev_addr[1],
964                                 lp->ndev->dev_addr[2], lp->ndev->dev_addr[3],
965                                 lp->ndev->dev_addr[4], lp->ndev->dev_addr[5]);
966         }
967 }
968
969 /**
970  * xemacps_set_hwaddr - Set device's MAC address from ndev->dev_addr
971  * @lp: local device instance pointer
972  **/
973 static void xemacps_set_hwaddr(struct net_local *lp)
974 {
975         u32 regvall = 0;
976         u16 regvalh = 0;
977 #ifdef __LITTLE_ENDIAN
978         regvall = cpu_to_le32(*((u32 *)lp->ndev->dev_addr));
979         regvalh = cpu_to_le16(*((u16 *)(lp->ndev->dev_addr + 4)));
980 #endif
981 #ifdef __BIG_ENDIAN
982         regvall = cpu_to_be32(*((u32 *)lp->ndev->dev_addr));
983         regvalh = cpu_to_be16(*((u16 *)(lp->ndev->dev_addr + 4)));
984 #endif
985         /* LADDRXH has to be wriiten latter than LADDRXL to enable
986          * this address even if these 16 bits are zeros. */
987         xemacps_write(lp->baseaddr, XEMACPS_LADDR1L_OFFSET, regvall);
988         xemacps_write(lp->baseaddr, XEMACPS_LADDR1H_OFFSET, regvalh);
989 #ifdef DEBUG
990         regvall = xemacps_read(lp->baseaddr, XEMACPS_LADDR1L_OFFSET);
991         regvalh = xemacps_read(lp->baseaddr, XEMACPS_LADDR1H_OFFSET);
992         dev_dbg(&lp->pdev->dev,
993                         "MAC 0x%08x, 0x%08x, %02x:%02x:%02x:%02x:%02x:%02x\n",
994                 regvall, regvalh,
995                 (regvall & 0xff), ((regvall >> 8) & 0xff),
996                 ((regvall >> 16) & 0xff), (regvall >> 24),
997                 (regvalh & 0xff), (regvalh >> 8));
998 #endif
999 }
1000
1001 /*
1002  * xemacps_reset_hw - Helper function to reset the underlying hardware.
1003  * This is called when we get into such deep trouble that we don't know
1004  * how to handle otherwise.
1005  * @lp: local device instance pointer
1006  */
1007 static void xemacps_reset_hw(struct net_local *lp)
1008 {
1009         u32 regisr;
1010         /* make sure we have the buffer for ourselves */
1011         wmb();
1012
1013         /* Have a clean start */
1014         xemacps_write(lp->baseaddr, XEMACPS_NWCTRL_OFFSET, 0);
1015
1016         /* Clear statistic counters */
1017         xemacps_write(lp->baseaddr, XEMACPS_NWCTRL_OFFSET,
1018                 XEMACPS_NWCTRL_STATCLR_MASK);
1019
1020         /* Clear TX and RX status */
1021         xemacps_write(lp->baseaddr, XEMACPS_TXSR_OFFSET, ~0UL);
1022         xemacps_write(lp->baseaddr, XEMACPS_RXSR_OFFSET, ~0UL);
1023
1024         /* Disable all interrupts */
1025         xemacps_write(lp->baseaddr, XEMACPS_IDR_OFFSET, ~0UL);
1026         regisr = xemacps_read(lp->baseaddr, XEMACPS_ISR_OFFSET);
1027         xemacps_write(lp->baseaddr, XEMACPS_ISR_OFFSET, regisr);
1028 }
1029
1030 #ifdef CONFIG_XILINX_PS_EMAC_HWTSTAMP
1031
1032 /**
1033  * xemacps_get_hwticks - get the current value of the GEM internal timer
1034  * @lp: local device instance pointer
1035  * return: nothing
1036  **/
1037 static inline void
1038 xemacps_get_hwticks(struct net_local *lp, u64 *sec, u64 *nsec)
1039 {
1040         do {
1041                 *nsec = xemacps_read(lp->baseaddr, XEMACPS_1588NS_OFFSET);
1042                 *sec = xemacps_read(lp->baseaddr, XEMACPS_1588S_OFFSET);
1043         } while (*nsec > xemacps_read(lp->baseaddr, XEMACPS_1588NS_OFFSET));
1044 }
1045
1046 /**
1047  * xemacps_read_clock - read raw cycle counter (to be used by time counter)
1048  */
1049 static cycle_t xemacps_read_clock(const struct cyclecounter *tc)
1050 {
1051         struct net_local *lp =
1052                         container_of(tc, struct net_local, cycles);
1053         u64 stamp;
1054         u64 sec, nsec;
1055
1056         xemacps_get_hwticks(lp, &sec, &nsec);
1057         stamp = (sec << 32) | nsec;
1058
1059         return stamp;
1060 }
1061
1062
1063 /**
1064  * xemacps_systim_to_hwtstamp - convert system time value to hw timestamp
1065  * @adapter: board private structure
1066  * @shhwtstamps: timestamp structure to update
1067  * @regval: unsigned 64bit system time value.
1068  *
1069  * We need to convert the system time value stored in the RX/TXSTMP registers
1070  * into a hwtstamp which can be used by the upper level timestamping functions
1071  */
1072 static void xemacps_systim_to_hwtstamp(struct net_local *lp,
1073                                 struct skb_shared_hwtstamps *shhwtstamps,
1074                                 u64 regval)
1075 {
1076         u64 ns;
1077
1078         ns = timecounter_cyc2time(&lp->clock, regval);
1079         timecompare_update(&lp->compare, ns);
1080         memset(shhwtstamps, 0, sizeof(struct skb_shared_hwtstamps));
1081         shhwtstamps->hwtstamp = ns_to_ktime(ns);
1082         shhwtstamps->syststamp = timecompare_transform(&lp->compare, ns);
1083 }
1084
1085 static void
1086 xemacps_rx_hwtstamp(struct net_local *lp,
1087                         struct sk_buff *skb, unsigned msg_type)
1088 {
1089         u64 time64, sec, nsec;
1090
1091         if (!msg_type) {
1092                 /* PTP Event Frame packets */
1093                 sec = xemacps_read(lp->baseaddr, XEMACPS_PTPERXS_OFFSET);
1094                 nsec = xemacps_read(lp->baseaddr, XEMACPS_PTPERXNS_OFFSET);
1095         } else {
1096                 /* PTP Peer Event Frame packets */
1097                 sec = xemacps_read(lp->baseaddr, XEMACPS_PTPPRXS_OFFSET);
1098                 nsec = xemacps_read(lp->baseaddr, XEMACPS_PTPPRXNS_OFFSET);
1099         }
1100         time64 = (sec << 32) | nsec;
1101         xemacps_systim_to_hwtstamp(lp, skb_hwtstamps(skb), time64);
1102 }
1103
1104 static void
1105 xemacps_tx_hwtstamp(struct net_local *lp,
1106                         struct sk_buff *skb, unsigned msg_type)
1107 {
1108         u64 time64, sec, nsec;
1109
1110         if (!msg_type) {
1111                 /* PTP Event Frame packets */
1112                 sec = xemacps_read(lp->baseaddr, XEMACPS_PTPETXS_OFFSET);
1113                 nsec = xemacps_read(lp->baseaddr, XEMACPS_PTPETXNS_OFFSET);
1114         } else {
1115                 /* PTP Peer Event Frame packets */
1116                 sec = xemacps_read(lp->baseaddr, XEMACPS_PTPPTXS_OFFSET);
1117                 nsec = xemacps_read(lp->baseaddr, XEMACPS_PTPPTXNS_OFFSET);
1118         }
1119
1120         time64 = (sec << 32) | nsec;
1121         xemacps_systim_to_hwtstamp(lp, skb_hwtstamps(skb), time64);
1122         skb_tstamp_tx(skb, skb_hwtstamps(skb));
1123 }
1124
1125 #endif /* CONFIG_XILINX_PS_EMAC_HWTSTAMP */
1126
1127 /**
1128  * xemacps_rx - process received packets when napi called
1129  * @lp: local device instance pointer
1130  * @budget: NAPI budget
1131  * return: number of BDs processed
1132  **/
1133 static int xemacps_rx(struct net_local *lp, int budget)
1134 {
1135         struct xemacps_bd *cur_p;
1136         u32 len;
1137         struct sk_buff *skb;
1138         struct sk_buff *new_skb;
1139         u32 new_skb_baddr;
1140         unsigned int numbdfree = 0;
1141         u32 size = 0;
1142         u32 packets = 0;
1143         u32 regval;
1144
1145         cur_p = &lp->rx_bd[lp->rx_bd_ci];
1146         regval = cur_p->addr;
1147         rmb();
1148         while (regval & XEMACPS_RXBUF_NEW_MASK) {
1149
1150                 /* the packet length */
1151                 len = cur_p->ctrl & XEMACPS_RXBUF_LEN_MASK;
1152                 rmb();
1153                 skb = lp->rx_skb[lp->rx_bd_ci].skb;
1154                 dma_unmap_single(lp->ndev->dev.parent,
1155                                 lp->rx_skb[lp->rx_bd_ci].mapping,
1156                                 XEMACPS_RX_BUF_SIZE,
1157                                 DMA_FROM_DEVICE);
1158
1159                 /* setup received skb and send it upstream */
1160                 skb_put(skb, len);  /* Tell the skb how much data we got. */
1161                 skb->protocol = eth_type_trans(skb, lp->ndev);
1162
1163                 skb->ip_summed = lp->ip_summed;
1164
1165 #ifdef CONFIG_XILINX_PS_EMAC_HWTSTAMP
1166                 if ((lp->hwtstamp_config.rx_filter == HWTSTAMP_FILTER_ALL) &&
1167                     (ntohs(skb->protocol) == 0x800)) {
1168                         unsigned ip_proto, dest_port, msg_type;
1169
1170                         /* While the GEM can timestamp PTP packets, it does
1171                          * not mark the RX descriptor to identify them.  This
1172                          * is entirely the wrong place to be parsing UDP
1173                          * headers, but some minimal effort must be made.
1174                          * NOTE: the below parsing of ip_proto and dest_port
1175                          * depend on the use of Ethernet_II encapsulation,
1176                          * IPv4 without any options.
1177                          */
1178                         ip_proto = *((u8 *)skb->mac_header + 14 + 9);
1179                         dest_port = ntohs(*(((u16 *)skb->mac_header) +
1180                                                 ((14 + 20 + 2)/2)));
1181                         msg_type = *((u8 *)skb->mac_header + 42);
1182                         if ((ip_proto == IPPROTO_UDP) &&
1183                             (dest_port == 0x13F)) {
1184                                 /* Timestamp this packet */
1185                                 xemacps_rx_hwtstamp(lp, skb, msg_type & 0x2);
1186                         }
1187                 }
1188 #endif /* CONFIG_XILINX_PS_EMAC_HWTSTAMP */
1189                 size += len;
1190                 packets++;
1191                 netif_receive_skb(skb);
1192
1193                 new_skb = netdev_alloc_skb(lp->ndev, XEMACPS_RX_BUF_SIZE);
1194                 if (new_skb == NULL) {
1195                         dev_err(&lp->ndev->dev, "no memory for new sk_buff\n");
1196                         return 0;
1197                 }
1198                 /* Get dma handle of skb->data */
1199                 new_skb_baddr = (u32) dma_map_single(lp->ndev->dev.parent,
1200                                         new_skb->data,
1201                                         XEMACPS_RX_BUF_SIZE,
1202                                         DMA_FROM_DEVICE);
1203                 cur_p->addr = (cur_p->addr & ~XEMACPS_RXBUF_ADD_MASK)
1204                                         | (new_skb_baddr);
1205                 lp->rx_skb[lp->rx_bd_ci].skb = new_skb;
1206                 lp->rx_skb[lp->rx_bd_ci].mapping = new_skb_baddr;
1207
1208                 cur_p->ctrl = 0;
1209                 cur_p->addr &= (~XEMACPS_RXBUF_NEW_MASK);
1210                 wmb();
1211
1212                 lp->rx_bd_ci++;
1213                 lp->rx_bd_ci = lp->rx_bd_ci % XEMACPS_RECV_BD_CNT;
1214                 cur_p = &lp->rx_bd[lp->rx_bd_ci];
1215                 regval = cur_p->addr;
1216                 rmb();
1217                 numbdfree++;
1218                 if (numbdfree == budget)
1219                         break;
1220         }
1221         wmb();
1222         lp->stats.rx_packets += packets;
1223         lp->stats.rx_bytes += size;
1224         return numbdfree;
1225 }
1226
1227 /**
1228  * xemacps_rx_poll - NAPI poll routine
1229  * napi: pointer to napi struct
1230  * budget:
1231  **/
1232 static int xemacps_rx_poll(struct napi_struct *napi, int budget)
1233 {
1234         struct net_local *lp = container_of(napi, struct net_local, napi);
1235         int work_done = 0;
1236         int temp_work_done;
1237         u32 regval;
1238
1239         spin_lock(&lp->rx_lock);
1240         while (work_done < budget) {
1241                 regval = xemacps_read(lp->baseaddr, XEMACPS_RXSR_OFFSET);
1242                 xemacps_write(lp->baseaddr, XEMACPS_RXSR_OFFSET, regval);
1243                 temp_work_done = xemacps_rx(lp, budget - work_done);
1244                 work_done += temp_work_done;
1245                 if (temp_work_done <= 0)
1246                         break;
1247         }
1248
1249         if (work_done >= budget) {
1250                 spin_unlock(&lp->rx_lock);
1251                 return work_done;
1252         }
1253
1254         napi_complete(napi);
1255         /* We disabled RX interrupts in interrupt service
1256          * routine, now it is time to enable it back.
1257          */
1258         xemacps_write(lp->baseaddr,
1259                 XEMACPS_IER_OFFSET, XEMACPS_IXR_FRAMERX_MASK);
1260         spin_unlock(&lp->rx_lock);
1261         return work_done;
1262 }
1263
1264 /**
1265  * xemacps_tx_poll - tx bd reclaim tasklet handler
1266  * @data: pointer to network interface device structure
1267  **/
1268 static void xemacps_tx_poll(unsigned long data)
1269 {
1270         struct net_device *ndev = (struct net_device *)data;
1271         struct net_local *lp = netdev_priv(ndev);
1272         u32 regval;
1273         u32 len = 0;
1274         u32 leninbd = 0;
1275         unsigned int bdcount = 0;
1276         unsigned int bdpartialcount = 0;
1277         unsigned int sop = 0;
1278         struct xemacps_bd *cur_p;
1279         u32 cur_i;
1280         u32 numbdstofree;
1281         struct ring_info *rp;
1282         struct sk_buff *skb;
1283
1284         spin_lock(&lp->tx_lock);
1285         regval = xemacps_read(lp->baseaddr, XEMACPS_TXSR_OFFSET);
1286         xemacps_write(lp->baseaddr, XEMACPS_TXSR_OFFSET, regval);
1287         dev_dbg(&lp->pdev->dev, "TX status 0x%x\n", regval);
1288
1289         /* This may happen when a buffer becomes complete
1290          * between reading the ISR and scanning the descriptors.
1291          * Nothing to worry about.
1292          */
1293         if (!(regval & XEMACPS_TXSR_TXCOMPL_MASK))
1294                 goto tx_poll_out;
1295
1296         cur_i = lp->tx_bd_ci;
1297         cur_p = &lp->tx_bd[cur_i];
1298         while (bdcount < XEMACPS_SEND_BD_CNT) {
1299                 if (sop == 0) {
1300                         if (cur_p->ctrl & XEMACPS_TXBUF_USED_MASK)
1301                                 sop = 1;
1302                         else
1303                                 break;
1304                 }
1305
1306                 if (sop == 1) {
1307                         bdcount++;
1308                         bdpartialcount++;
1309                 }
1310                 /* hardware has processed this BD so check the "last" bit.
1311                  * If it is clear, then there are more BDs for the current
1312                  * packet. Keep a count of these partial packet BDs.
1313                  */
1314                 if ((sop == 1) && (cur_p->ctrl & XEMACPS_TXBUF_LAST_MASK)) {
1315                         sop = 0;
1316                         bdpartialcount = 0;
1317                 }
1318
1319                 cur_i++;
1320                 cur_i = cur_i % XEMACPS_SEND_BD_CNT;
1321                 cur_p = &lp->tx_bd[cur_i];
1322         }
1323         numbdstofree = bdcount - bdpartialcount;
1324         lp->tx_bd_freecnt += numbdstofree;
1325         cur_p = &lp->tx_bd[lp->tx_bd_ci];
1326         while (numbdstofree) {
1327                 rp = &lp->tx_skb[lp->tx_bd_ci];
1328                 skb = rp->skb;
1329
1330                 leninbd = cur_p->ctrl & XEMACPS_TXBUF_LEN_MASK;
1331                 len += leninbd;
1332
1333 #ifdef CONFIG_XILINX_PS_EMAC_HWTSTAMP
1334                 if ((lp->hwtstamp_config.tx_type == HWTSTAMP_TX_ON) &&
1335                         (ntohs(skb->protocol) == 0x800)) {
1336                         unsigned ip_proto, dest_port, msg_type;
1337
1338                         skb_reset_mac_header(skb);
1339
1340                         ip_proto = *((u8 *)skb->mac_header + 14 + 9);
1341                         dest_port = ntohs(*(((u16 *)skb->mac_header) +
1342                                         ((14 + 20 + 2)/2)));
1343                         msg_type = *((u8 *)skb->mac_header + 42);
1344                         if ((ip_proto == IPPROTO_UDP) &&
1345                                 (dest_port == 0x13F)) {
1346                                 /* Timestamp this packet */
1347                                 xemacps_tx_hwtstamp(lp, skb, msg_type & 0x2);
1348                         }
1349                 }
1350 #endif /* CONFIG_XILINX_PS_EMAC_HWTSTAMP */
1351
1352                 dma_unmap_single(&lp->pdev->dev, rp->mapping, leninbd,
1353                         DMA_TO_DEVICE);
1354                 if (skb != NULL)
1355                         dev_kfree_skb(skb);
1356                 rp->skb = NULL;
1357                 /* log tx completed packets and bytes, errors logs
1358                  * are in other error counters.
1359                  */
1360                 if (cur_p->ctrl & XEMACPS_TXBUF_LAST_MASK) {
1361                         if (!(cur_p->ctrl & XEMACPS_TXBUF_ERR_MASK)) {
1362                                 lp->stats.tx_packets++;
1363                                 lp->stats.tx_bytes += len;
1364                         }
1365                 }
1366
1367                 /* Preserve used and wrap bits; clear everything else. */
1368                 cur_p->ctrl &= (XEMACPS_TXBUF_USED_MASK |
1369                                         XEMACPS_TXBUF_WRAP_MASK);
1370
1371                 lp->tx_bd_ci++;
1372                 lp->tx_bd_ci = lp->tx_bd_ci % XEMACPS_SEND_BD_CNT;
1373                 cur_p = &lp->tx_bd[lp->tx_bd_ci];
1374                 numbdstofree--;
1375         }
1376         wmb();
1377
1378 tx_poll_out:
1379         if (netif_queue_stopped(ndev))
1380                 netif_start_queue(ndev);
1381         spin_unlock(&lp->tx_lock);
1382 }
1383
1384 /**
1385  * xemacps_interrupt - interrupt main service routine
1386  * @irq: interrupt number
1387  * @dev_id: pointer to a network device structure
1388  * return IRQ_HANDLED or IRQ_NONE
1389  **/
1390 static irqreturn_t xemacps_interrupt(int irq, void *dev_id)
1391 {
1392         struct net_device *ndev = dev_id;
1393         struct net_local *lp = netdev_priv(ndev);
1394         u32 regisr;
1395         u32 regctrl;
1396
1397         regisr = xemacps_read(lp->baseaddr, XEMACPS_ISR_OFFSET);
1398         if (unlikely(!regisr))
1399                 return IRQ_NONE;
1400
1401         xemacps_write(lp->baseaddr, XEMACPS_ISR_OFFSET, regisr);
1402
1403         while (regisr) {
1404                 if (regisr & (XEMACPS_IXR_TXCOMPL_MASK |
1405                                 XEMACPS_IXR_TX_ERR_MASK)) {
1406                         tasklet_schedule(&lp->tx_bdreclaim_tasklet);
1407                 }
1408
1409                 if (regisr & XEMACPS_IXR_RXUSED_MASK) {
1410                         regctrl = xemacps_read(lp->baseaddr,
1411                                         XEMACPS_NWCTRL_OFFSET);
1412                         regctrl |= XEMACPS_NWCTRL_FLUSH_DPRAM_MASK;
1413                         xemacps_write(lp->baseaddr,
1414                                         XEMACPS_NWCTRL_OFFSET, regctrl);
1415                 }
1416
1417                 if (regisr & XEMACPS_IXR_FRAMERX_MASK) {
1418                         xemacps_write(lp->baseaddr,
1419                                 XEMACPS_IDR_OFFSET, XEMACPS_IXR_FRAMERX_MASK);
1420                         napi_schedule(&lp->napi);
1421                 }
1422                 regisr = xemacps_read(lp->baseaddr, XEMACPS_ISR_OFFSET);
1423                 xemacps_write(lp->baseaddr, XEMACPS_ISR_OFFSET, regisr);
1424         }
1425
1426         return IRQ_HANDLED;
1427 }
1428
1429 /*
1430  * Free all packets presently in the descriptor rings.
1431  */
1432 static void xemacps_clean_rings(struct net_local *lp)
1433 {
1434         int i;
1435
1436         for (i = 0; i < XEMACPS_RECV_BD_CNT; i++) {
1437                 if (lp->rx_skb && lp->rx_skb[i].skb) {
1438                         dma_unmap_single(lp->ndev->dev.parent,
1439                                          lp->rx_skb[i].mapping,
1440                                          XEMACPS_RX_BUF_SIZE,
1441                                          DMA_FROM_DEVICE);
1442
1443                         dev_kfree_skb(lp->rx_skb[i].skb);
1444                         lp->rx_skb[i].skb = NULL;
1445                         lp->rx_skb[i].mapping = 0;
1446                 }
1447         }
1448
1449         for (i = 0; i < XEMACPS_SEND_BD_CNT; i++) {
1450                 if (lp->tx_skb && lp->tx_skb[i].skb) {
1451                         dma_unmap_single(lp->ndev->dev.parent,
1452                                          lp->tx_skb[i].mapping,
1453                                          lp->tx_skb[i].skb->len,
1454                                          DMA_TO_DEVICE);
1455
1456                         dev_kfree_skb(lp->tx_skb[i].skb);
1457                         lp->tx_skb[i].skb = NULL;
1458                         lp->tx_skb[i].mapping = 0;
1459                 }
1460         }
1461 }
1462
1463 /**
1464  * xemacps_descriptor_free - Free allocated TX and RX BDs
1465  * @lp: local device instance pointer
1466  **/
1467 static void xemacps_descriptor_free(struct net_local *lp)
1468 {
1469         int size;
1470
1471         xemacps_clean_rings(lp);
1472
1473         /* kfree(NULL) is safe, no need to check here */
1474         kfree(lp->tx_skb);
1475         lp->tx_skb = NULL;
1476         kfree(lp->rx_skb);
1477         lp->rx_skb = NULL;
1478
1479         size = XEMACPS_RECV_BD_CNT * sizeof(struct xemacps_bd);
1480         if (lp->rx_bd) {
1481                 dma_free_coherent(&lp->pdev->dev, size,
1482                         lp->rx_bd, lp->rx_bd_dma);
1483                 lp->rx_bd = NULL;
1484         }
1485
1486         size = XEMACPS_SEND_BD_CNT * sizeof(struct xemacps_bd);
1487         if (lp->tx_bd) {
1488                 dma_free_coherent(&lp->pdev->dev, size,
1489                         lp->tx_bd, lp->tx_bd_dma);
1490                 lp->tx_bd = NULL;
1491         }
1492 }
1493
1494 /**
1495  * xemacps_descriptor_init - Allocate both TX and RX BDs
1496  * @lp: local device instance pointer
1497  * return 0 on success, negative value if error
1498  **/
1499 static int xemacps_descriptor_init(struct net_local *lp)
1500 {
1501         int size;
1502         struct sk_buff *new_skb;
1503         u32 new_skb_baddr;
1504         u32 i;
1505         struct xemacps_bd *cur_p;
1506
1507         /* Reset the indexes which are used for accessing the BDs */
1508         lp->tx_bd_ci = 0;
1509         lp->tx_bd_tail = 0;
1510         lp->rx_bd_ci = 0;
1511
1512         size = XEMACPS_SEND_BD_CNT * sizeof(struct ring_info);
1513         lp->tx_skb = kzalloc(size, GFP_KERNEL);
1514         if (!lp->tx_skb)
1515                 goto err_out;
1516         size = XEMACPS_RECV_BD_CNT * sizeof(struct ring_info);
1517         lp->rx_skb = kzalloc(size, GFP_KERNEL);
1518         if (!lp->rx_skb)
1519                 goto err_out;
1520
1521         size = XEMACPS_RECV_BD_CNT * sizeof(struct xemacps_bd);
1522         lp->rx_bd = dma_alloc_coherent(&lp->pdev->dev, size,
1523                         &lp->rx_bd_dma, GFP_KERNEL);
1524         if (!lp->rx_bd)
1525                 goto err_out;
1526         dev_dbg(&lp->pdev->dev, "RX ring %d bytes at 0x%x mapped %p\n",
1527                         size, lp->rx_bd_dma, lp->rx_bd);
1528
1529         memset(lp->rx_bd, 0, sizeof(*lp->rx_bd) * XEMACPS_RECV_BD_CNT);
1530         for (i = 0; i < XEMACPS_RECV_BD_CNT; i++) {
1531                 cur_p = &lp->rx_bd[i];
1532                 new_skb = netdev_alloc_skb(lp->ndev, XEMACPS_RX_BUF_SIZE);
1533
1534                 if (new_skb == NULL) {
1535                         dev_err(&lp->ndev->dev, "alloc_skb error %d\n", i);
1536                         goto err_out;
1537                 }
1538
1539                 /* Get dma handle of skb->data */
1540                 new_skb_baddr = (u32) dma_map_single(lp->ndev->dev.parent,
1541                                                         new_skb->data,
1542                                                         XEMACPS_RX_BUF_SIZE,
1543                                                         DMA_FROM_DEVICE);
1544                 cur_p->addr = (cur_p->addr & ~XEMACPS_RXBUF_ADD_MASK)
1545                                         | (new_skb_baddr);
1546                 lp->rx_skb[i].skb = new_skb;
1547                 lp->rx_skb[i].mapping = new_skb_baddr;
1548                 wmb();
1549         }
1550         cur_p = &lp->rx_bd[XEMACPS_RECV_BD_CNT - 1];
1551         /* wrap bit set for last BD, bdptr is moved to last here */
1552         cur_p->ctrl = 0;
1553         cur_p->addr |= XEMACPS_RXBUF_WRAP_MASK;
1554
1555         size = XEMACPS_SEND_BD_CNT * sizeof(struct xemacps_bd);
1556         lp->tx_bd = dma_alloc_coherent(&lp->pdev->dev, size,
1557                         &lp->tx_bd_dma, GFP_KERNEL);
1558         if (!lp->tx_bd)
1559                 goto err_out;
1560         dev_dbg(&lp->pdev->dev, "TX ring %d bytes at 0x%x mapped %p\n",
1561                         size, lp->tx_bd_dma, lp->tx_bd);
1562
1563         memset(lp->tx_bd, 0, sizeof(*lp->tx_bd) * XEMACPS_SEND_BD_CNT);
1564         for (i = 0; i < XEMACPS_SEND_BD_CNT; i++) {
1565                 cur_p = &lp->tx_bd[i];
1566                 cur_p->ctrl = XEMACPS_TXBUF_USED_MASK;
1567         }
1568         cur_p = &lp->tx_bd[XEMACPS_SEND_BD_CNT - 1];
1569         /* wrap bit set for last BD, bdptr is moved to last here */
1570         cur_p->ctrl = (XEMACPS_TXBUF_WRAP_MASK | XEMACPS_TXBUF_USED_MASK);
1571         lp->tx_bd_freecnt = XEMACPS_SEND_BD_CNT;
1572
1573
1574         for (i = 0; i < XEMACPS_RECV_BD_CNT; i++) {
1575                 cur_p = &lp->rx_bd[i];
1576                 cur_p->ctrl = 0;
1577                 /* Assign ownership back to hardware */
1578                 cur_p->addr &= (~XEMACPS_RXBUF_NEW_MASK);
1579         }
1580         wmb();
1581
1582         dev_dbg(&lp->pdev->dev,
1583                 "lp->tx_bd %p lp->tx_bd_dma %p lp->tx_skb %p\n",
1584                 lp->tx_bd, (void *)lp->tx_bd_dma, lp->tx_skb);
1585         dev_dbg(&lp->pdev->dev,
1586                 "lp->rx_bd %p lp->rx_bd_dma %p lp->rx_skb %p\n",
1587                 lp->rx_bd, (void *)lp->rx_bd_dma, lp->rx_skb);
1588
1589         return 0;
1590
1591 err_out:
1592         xemacps_descriptor_free(lp);
1593         return -ENOMEM;
1594 }
1595
1596
1597
1598 #ifdef CONFIG_XILINX_PS_EMAC_HWTSTAMP
1599 /*
1600  * Initialize the GEM Time Stamp Unit
1601  */
1602 static void xemacps_init_tsu(struct net_local *lp)
1603 {
1604
1605         memset(&lp->cycles, 0, sizeof(lp->cycles));
1606         lp->cycles.read = xemacps_read_clock;
1607         lp->cycles.mask = CLOCKSOURCE_MASK(64);
1608         lp->cycles.mult = 1;
1609         lp->cycles.shift = 0;
1610
1611         /* Set registers so that rollover occurs soon to test this. */
1612         xemacps_write(lp->baseaddr, XEMACPS_1588NS_OFFSET, 0x00000000);
1613         xemacps_write(lp->baseaddr, XEMACPS_1588S_OFFSET, 0xFF800000);
1614
1615         /* program the timer increment register with the numer of nanoseconds
1616          * per clock tick.
1617          *
1618          * Note: The value is calculated based on the current operating
1619          * frequency 50MHz
1620          */
1621         xemacps_write(lp->baseaddr, XEMACPS_1588INC_OFFSET,
1622                         (NS_PER_SEC/lp->ptpenetclk));
1623
1624         timecounter_init(&lp->clock, &lp->cycles,
1625                                 ktime_to_ns(ktime_get_real()));
1626         /*
1627          * Synchronize our NIC clock against system wall clock.
1628          */
1629         memset(&lp->compare, 0, sizeof(lp->compare));
1630         lp->compare.source = &lp->clock;
1631         lp->compare.target = ktime_get_real;
1632         lp->compare.num_samples = 10;
1633         timecompare_update(&lp->compare, 0);
1634
1635         /* Initialize hwstamp config */
1636         lp->hwtstamp_config.rx_filter = HWTSTAMP_FILTER_NONE;
1637         lp->hwtstamp_config.tx_type = HWTSTAMP_TX_OFF;
1638
1639 }
1640 #endif /* CONFIG_XILINX_PS_EMAC_HWTSTAMP */
1641
1642 /**
1643  * xemacps_init_hw - Initialize hardware to known good state
1644  * @lp: local device instance pointer
1645  **/
1646 static void xemacps_init_hw(struct net_local *lp)
1647 {
1648         u32 regval;
1649
1650         xemacps_reset_hw(lp);
1651         xemacps_set_hwaddr(lp);
1652
1653         /* network configuration */
1654         regval  = 0;
1655         regval |= XEMACPS_NWCFG_FDEN_MASK;
1656         regval |= XEMACPS_NWCFG_RXCHKSUMEN_MASK;
1657         regval |= XEMACPS_NWCFG_PAUSECOPYDI_MASK;
1658         regval |= XEMACPS_NWCFG_FCSREM_MASK;
1659         regval |= XEMACPS_NWCFG_PAUSEEN_MASK;
1660         regval |= XEMACPS_NWCFG_100_MASK;
1661         regval |= XEMACPS_NWCFG_HDRXEN_MASK;
1662
1663         if (lp->board_type == BOARD_TYPE_ZYNQ)
1664                 regval |= (MDC_DIV_224 << XEMACPS_NWCFG_MDC_SHIFT_MASK);
1665         if (lp->ndev->flags & IFF_PROMISC)      /* copy all */
1666                 regval |= XEMACPS_NWCFG_COPYALLEN_MASK;
1667         if (!(lp->ndev->flags & IFF_BROADCAST)) /* No broadcast */
1668                 regval |= XEMACPS_NWCFG_BCASTDI_MASK;
1669         xemacps_write(lp->baseaddr, XEMACPS_NWCFG_OFFSET, regval);
1670
1671         /* Init TX and RX DMA Q address */
1672         xemacps_write(lp->baseaddr, XEMACPS_RXQBASE_OFFSET, lp->rx_bd_dma);
1673         xemacps_write(lp->baseaddr, XEMACPS_TXQBASE_OFFSET, lp->tx_bd_dma);
1674
1675         /* DMACR configurations */
1676         regval  = (((XEMACPS_RX_BUF_SIZE / XEMACPS_RX_BUF_UNIT) +
1677                 ((XEMACPS_RX_BUF_SIZE % XEMACPS_RX_BUF_UNIT) ? 1 : 0)) <<
1678                 XEMACPS_DMACR_RXBUF_SHIFT);
1679         regval |= XEMACPS_DMACR_RXSIZE_MASK;
1680         regval |= XEMACPS_DMACR_TXSIZE_MASK;
1681         regval |= XEMACPS_DMACR_TCPCKSUM_MASK;
1682 #ifdef __LITTLE_ENDIAN
1683         regval &= ~XEMACPS_DMACR_ENDIAN_MASK;
1684 #endif
1685 #ifdef __BIG_ENDIAN
1686         regval |= XEMACPS_DMACR_ENDIAN_MASK;
1687 #endif
1688         regval |= XEMACPS_DMACR_BLENGTH_INCR16;
1689         xemacps_write(lp->baseaddr, XEMACPS_DMACR_OFFSET, regval);
1690
1691         /* Enable TX, RX and MDIO port */
1692         regval  = 0;
1693         regval |= XEMACPS_NWCTRL_MDEN_MASK;
1694         regval |= XEMACPS_NWCTRL_TXEN_MASK;
1695         regval |= XEMACPS_NWCTRL_RXEN_MASK;
1696         xemacps_write(lp->baseaddr, XEMACPS_NWCTRL_OFFSET, regval);
1697
1698 #ifdef CONFIG_XILINX_PS_EMAC_HWTSTAMP
1699         /* Initialize the Time Stamp Unit */
1700         xemacps_init_tsu(lp);
1701 #endif
1702
1703         /* Enable interrupts */
1704         regval  = XEMACPS_IXR_ALL_MASK;
1705         xemacps_write(lp->baseaddr, XEMACPS_IER_OFFSET, regval);
1706 }
1707
1708 /**
1709  * xemacps_resetrx_for_no_rxdata - Resets the Rx if there is no data
1710  * for a while (presently 100 msecs)
1711  * @data: Used for net_local instance pointer
1712  **/
1713 static void xemacps_resetrx_for_no_rxdata(unsigned long data)
1714 {
1715         struct net_local *lp = (struct net_local *)data;
1716         unsigned long regctrl;
1717         unsigned long tempcntr;
1718         unsigned long flags;
1719
1720         tempcntr = xemacps_read(lp->baseaddr, XEMACPS_RXCNT_OFFSET);
1721         if ((!tempcntr) && (!(lp->lastrxfrmscntr))) {
1722                 spin_lock_bh(&lp->tx_lock);
1723                 spin_lock_irqsave(&lp->rx_lock, flags);
1724                 regctrl = xemacps_read(lp->baseaddr,
1725                                 XEMACPS_NWCTRL_OFFSET);
1726                 regctrl &= (~XEMACPS_NWCTRL_RXEN_MASK);
1727                 xemacps_write(lp->baseaddr,
1728                                 XEMACPS_NWCTRL_OFFSET, regctrl);
1729                 regctrl = xemacps_read(lp->baseaddr, XEMACPS_NWCTRL_OFFSET);
1730                 regctrl |= (XEMACPS_NWCTRL_RXEN_MASK);
1731                 xemacps_write(lp->baseaddr, XEMACPS_NWCTRL_OFFSET, regctrl);
1732                 spin_unlock_irqrestore(&lp->rx_lock, flags);
1733                 spin_unlock_bh(&lp->tx_lock);
1734         }
1735         lp->lastrxfrmscntr = tempcntr;
1736 }
1737
1738 /**
1739  * xemacps_update_stats - Update the statistic structure entries from
1740  * the corresponding emacps hardware statistic registers
1741  * @data: Used for net_local instance pointer
1742  **/
1743 static void xemacps_update_stats(unsigned long data)
1744 {
1745         struct net_local *lp = (struct net_local *)data;
1746         struct net_device_stats *nstat = &lp->stats;
1747
1748         nstat->rx_errors +=
1749                         (xemacps_read(lp->baseaddr, XEMACPS_RXUNDRCNT_OFFSET) +
1750                         xemacps_read(lp->baseaddr, XEMACPS_RXOVRCNT_OFFSET) +
1751                         xemacps_read(lp->baseaddr, XEMACPS_RXJABCNT_OFFSET) +
1752                         xemacps_read(lp->baseaddr, XEMACPS_RXFCSCNT_OFFSET) +
1753                         xemacps_read(lp->baseaddr, XEMACPS_RXLENGTHCNT_OFFSET) +
1754                         xemacps_read(lp->baseaddr, XEMACPS_RXORCNT_OFFSET) +
1755                         xemacps_read(lp->baseaddr, XEMACPS_RXRESERRCNT_OFFSET) +
1756                         xemacps_read(lp->baseaddr, XEMACPS_RXALIGNCNT_OFFSET));
1757         nstat->rx_length_errors +=
1758                         (xemacps_read(lp->baseaddr, XEMACPS_RXUNDRCNT_OFFSET) +
1759                         xemacps_read(lp->baseaddr, XEMACPS_RXOVRCNT_OFFSET) +
1760                         xemacps_read(lp->baseaddr, XEMACPS_RXJABCNT_OFFSET) +
1761                         xemacps_read(lp->baseaddr, XEMACPS_RXLENGTHCNT_OFFSET));
1762         nstat->rx_over_errors +=
1763                         xemacps_read(lp->baseaddr, XEMACPS_RXORCNT_OFFSET);
1764         nstat->rx_crc_errors +=
1765                         xemacps_read(lp->baseaddr, XEMACPS_RXFCSCNT_OFFSET);
1766         nstat->rx_frame_errors +=
1767                         xemacps_read(lp->baseaddr, XEMACPS_RXALIGNCNT_OFFSET);
1768         nstat->rx_fifo_errors +=
1769                         xemacps_read(lp->baseaddr, XEMACPS_RXORCNT_OFFSET);
1770         nstat->tx_errors +=
1771                         (xemacps_read(lp->baseaddr, XEMACPS_TXURUNCNT_OFFSET) +
1772                         xemacps_read(lp->baseaddr,
1773                                         XEMACPS_SNGLCOLLCNT_OFFSET) +
1774                         xemacps_read(lp->baseaddr,
1775                                         XEMACPS_MULTICOLLCNT_OFFSET) +
1776                         xemacps_read(lp->baseaddr,
1777                                         XEMACPS_EXCESSCOLLCNT_OFFSET) +
1778                         xemacps_read(lp->baseaddr,
1779                                         XEMACPS_LATECOLLCNT_OFFSET) +
1780                         xemacps_read(lp->baseaddr,
1781                                         XEMACPS_CSENSECNT_OFFSET));
1782         nstat->tx_aborted_errors +=
1783                         xemacps_read(lp->baseaddr,
1784                                         XEMACPS_EXCESSCOLLCNT_OFFSET);
1785         nstat->tx_carrier_errors +=
1786                         xemacps_read(lp->baseaddr, XEMACPS_CSENSECNT_OFFSET);
1787         nstat->tx_fifo_errors +=
1788                         xemacps_read(lp->baseaddr, XEMACPS_TXURUNCNT_OFFSET);
1789         nstat->collisions +=
1790                         (xemacps_read(lp->baseaddr,
1791                                         XEMACPS_SNGLCOLLCNT_OFFSET) +
1792                         xemacps_read(lp->baseaddr,
1793                                         XEMACPS_MULTICOLLCNT_OFFSET) +
1794                         xemacps_read(lp->baseaddr,
1795                                         XEMACPS_EXCESSCOLLCNT_OFFSET) +
1796                         xemacps_read(lp->baseaddr,
1797                                         XEMACPS_LATECOLLCNT_OFFSET));
1798 }
1799
1800 /**
1801  * xemacps_gen_purpose_timerhandler - Timer handler that is called at regular
1802  * intervals upon expiry of the gen_purpose_timer defined in net_local struct.
1803  * @data: Used for net_local instance pointer
1804  *
1805  * This timer handler is used to update the statistics by calling the API
1806  * xemacps_update_stats. The statistics register can typically overflow pretty
1807  * quickly under heavy load conditions. This timer is used to periodically
1808  * read the stats registers and update the corresponding stats structure
1809  * entries. The stats registers when read reset to 0.
1810  **/
1811 static void xemacps_gen_purpose_timerhandler(unsigned long data)
1812 {
1813         struct net_local *lp = (struct net_local *)data;
1814
1815         xemacps_update_stats(data);
1816         xemacps_resetrx_for_no_rxdata(data);
1817         mod_timer(&(lp->gen_purpose_timer),
1818                 jiffies + msecs_to_jiffies(XEAMCPS_GEN_PURPOSE_TIMER_LOAD));
1819 }
1820
1821 /**
1822  * xemacps_open - Called when a network device is made active
1823  * @ndev: network interface device structure
1824  * return 0 on success, negative value if error
1825  *
1826  * The open entry point is called when a network interface is made active
1827  * by the system (IFF_UP). At this point all resources needed for transmit
1828  * and receive operations are allocated, the interrupt handler is
1829  * registered with OS, the watchdog timer is started, and the stack is
1830  * notified that the interface is ready.
1831  *
1832  * note: if error(s), allocated resources before error require to be
1833  * released or system issues (such as memory) leak might happen.
1834  **/
1835 static int xemacps_open(struct net_device *ndev)
1836 {
1837         struct net_local *lp = netdev_priv(ndev);
1838         int rc;
1839
1840         dev_dbg(&lp->pdev->dev, "open\n");
1841         if (!is_valid_ether_addr(ndev->dev_addr))
1842                 return  -EADDRNOTAVAIL;
1843
1844         rc = xemacps_descriptor_init(lp);
1845         if (rc) {
1846                 dev_err(&lp->pdev->dev,
1847                         "Unable to allocate DMA memory, rc %d\n", rc);
1848                 return rc;
1849         }
1850
1851         rc = pm_runtime_get(&lp->pdev->dev);
1852         if (rc < 0) {
1853                 dev_err(&lp->pdev->dev, "pm_runtime_get() failed, rc %d\n", rc);
1854                 goto err_free_rings;
1855         }
1856
1857         xemacps_init_hw(lp);
1858         napi_enable(&lp->napi);
1859         rc = xemacps_mii_probe(ndev);
1860         if (rc != 0) {
1861                 dev_err(&lp->pdev->dev,
1862                         "%s mii_probe fail.\n", lp->mii_bus->name);
1863                 if (rc == (-2)) {
1864                         mdiobus_unregister(lp->mii_bus);
1865                         kfree(lp->mii_bus->irq);
1866                         mdiobus_free(lp->mii_bus);
1867                 }
1868                 rc = -ENXIO;
1869                 goto err_pm_put;
1870         }
1871
1872         setup_timer(&(lp->gen_purpose_timer), xemacps_gen_purpose_timerhandler,
1873                                                         (unsigned long)lp);
1874         mod_timer(&(lp->gen_purpose_timer),
1875                 jiffies + msecs_to_jiffies(XEAMCPS_GEN_PURPOSE_TIMER_LOAD));
1876
1877         netif_carrier_on(ndev);
1878         netif_start_queue(ndev);
1879         tasklet_enable(&lp->tx_bdreclaim_tasklet);
1880
1881         return 0;
1882
1883 err_pm_put:
1884         pm_runtime_put(&lp->pdev->dev);
1885 err_free_rings:
1886         xemacps_descriptor_free(lp);
1887
1888         return rc;
1889 }
1890
1891 /**
1892  * xemacps_close - disable a network interface
1893  * @ndev: network interface device structure
1894  * return 0
1895  *
1896  * The close entry point is called when a network interface is de-activated
1897  * by OS. The hardware is still under the driver control, but needs to be
1898  * disabled. A global MAC reset is issued to stop the hardware, and all
1899  * transmit and receive resources are freed.
1900  **/
1901 static int xemacps_close(struct net_device *ndev)
1902 {
1903         struct net_local *lp = netdev_priv(ndev);
1904
1905         del_timer(&(lp->gen_purpose_timer));
1906         netif_stop_queue(ndev);
1907         napi_disable(&lp->napi);
1908         tasklet_disable(&lp->tx_bdreclaim_tasklet);
1909         spin_lock_bh(&lp->tx_lock);
1910         spin_lock(&lp->rx_lock);
1911         xemacps_reset_hw(lp);
1912         netif_carrier_off(ndev);
1913         spin_unlock(&lp->rx_lock);
1914         spin_unlock_bh(&lp->tx_lock);
1915         if (lp->phy_dev) {
1916                 if (lp->board_type == BOARD_TYPE_ZYNQ)
1917                         phy_disconnect(lp->phy_dev);
1918         }
1919         if (lp->gmii2rgmii_phy_node)
1920                 phy_disconnect(lp->gmii2rgmii_phy_dev);
1921
1922         xemacps_descriptor_free(lp);
1923
1924         pm_runtime_put(&lp->pdev->dev);
1925
1926         return 0;
1927 }
1928
1929 /**
1930  * xemacps_reinit_for_txtimeout - work queue scheduled for the tx timeout
1931  * handling.
1932  * @ndev: queue work structure
1933  **/
1934 static void xemacps_reinit_for_txtimeout(struct work_struct *data)
1935 {
1936         struct net_local *lp = container_of(data, struct net_local,
1937                 txtimeout_reinit);
1938         int rc;
1939
1940         netif_stop_queue(lp->ndev);
1941         spin_lock_bh(&lp->tx_lock);
1942         napi_disable(&lp->napi);
1943         tasklet_disable(&lp->tx_bdreclaim_tasklet);
1944         xemacps_reset_hw(lp);
1945         spin_unlock_bh(&lp->tx_lock);
1946
1947         if (lp->phy_dev) {
1948                 if (lp->board_type == BOARD_TYPE_ZYNQ)
1949                         phy_stop(lp->phy_dev);
1950         }
1951
1952         xemacps_descriptor_free(lp);
1953         rc = xemacps_descriptor_init(lp);
1954         if (rc) {
1955                 dev_err(&lp->pdev->dev,
1956                         "Unable to allocate DMA memory, rc %d\n", rc);
1957                 return;
1958         }
1959
1960         xemacps_init_hw(lp);
1961
1962         lp->link    = 0;
1963         lp->speed   = 0;
1964         lp->duplex  = -1;
1965         if (lp->phy_dev) {
1966                 if (lp->board_type == BOARD_TYPE_ZYNQ)
1967                         phy_start(lp->phy_dev);
1968         }
1969         napi_enable(&lp->napi);
1970         tasklet_enable(&lp->tx_bdreclaim_tasklet);
1971         netif_start_queue(lp->ndev);
1972 }
1973
1974 /**
1975  * xemacps_tx_timeout - callback used when the transmitter has not made
1976  * any progress for dev->watchdog ticks.
1977  * @ndev: network interface device structure
1978  **/
1979 static void xemacps_tx_timeout(struct net_device *ndev)
1980 {
1981         struct net_local *lp = netdev_priv(ndev);
1982
1983         dev_err(&lp->pdev->dev, "transmit timeout %lu ms, reseting...\n",
1984                 TX_TIMEOUT * 1000UL / HZ);
1985         queue_work(lp->txtimeout_handler_wq, &lp->txtimeout_reinit);
1986 }
1987
1988 /**
1989  * xemacps_set_mac_address - set network interface mac address
1990  * @ndev: network interface device structure
1991  * @addr: pointer to MAC address
1992  * return 0 on success, negative value if error
1993  **/
1994 static int xemacps_set_mac_address(struct net_device *ndev, void *addr)
1995 {
1996         struct net_local *lp = netdev_priv(ndev);
1997         struct sockaddr *hwaddr = (struct sockaddr *)addr;
1998
1999         if (netif_running(ndev))
2000                 return -EBUSY;
2001
2002         if (!is_valid_ether_addr(hwaddr->sa_data))
2003                 return -EADDRNOTAVAIL;
2004
2005         dev_dbg(&lp->pdev->dev, "hwaddr 0x%x 0x%x 0x%x 0x%x 0x%x 0x%x\n",
2006                 hwaddr->sa_data[0], hwaddr->sa_data[1], hwaddr->sa_data[2],
2007                 hwaddr->sa_data[3], hwaddr->sa_data[4], hwaddr->sa_data[5]);
2008
2009         memcpy(ndev->dev_addr, hwaddr->sa_data, ndev->addr_len);
2010
2011         xemacps_set_hwaddr(lp);
2012         return 0;
2013 }
2014
2015 /**
2016  * xemacps_start_xmit - transmit a packet (called by kernel)
2017  * @skb: socket buffer
2018  * @ndev: network interface device structure
2019  * return 0 on success, other value if error
2020  **/
2021 static int xemacps_start_xmit(struct sk_buff *skb, struct net_device *ndev)
2022 {
2023         struct net_local *lp = netdev_priv(ndev);
2024         dma_addr_t  mapping;
2025         unsigned int nr_frags, len;
2026         int i;
2027         u32 regval;
2028         void       *virt_addr;
2029         skb_frag_t *frag;
2030         struct xemacps_bd *cur_p;
2031
2032         nr_frags = skb_shinfo(skb)->nr_frags + 1;
2033         spin_lock_bh(&lp->tx_lock);
2034
2035         cur_p = &(lp->tx_bd[lp->tx_bd_tail]);
2036         if (nr_frags >= lp->tx_bd_freecnt) {
2037                 netif_stop_queue(ndev); /* stop send queue */
2038                 spin_unlock_bh(&lp->tx_lock);
2039                 return NETDEV_TX_BUSY;
2040         }
2041         lp->tx_bd_freecnt -= nr_frags;
2042         frag = &skb_shinfo(skb)->frags[0];
2043
2044         for (i = 0; i < nr_frags; i++) {
2045                 if (i == 0) {
2046                         len = skb_headlen(skb);
2047                         mapping = dma_map_single(&lp->pdev->dev, skb->data,
2048                                 len, DMA_TO_DEVICE);
2049                 } else {
2050                         len = skb_frag_size(frag);
2051                         virt_addr = skb_frag_address(frag);
2052                         mapping = dma_map_single(&lp->pdev->dev, virt_addr,
2053                                 len, DMA_TO_DEVICE);
2054                         frag++;
2055                 }
2056
2057                 if (i == 0)
2058                         lp->tx_skb[lp->tx_bd_tail].skb = skb;
2059                 else
2060                         lp->tx_skb[lp->tx_bd_tail].skb = NULL;
2061                 lp->tx_skb[lp->tx_bd_tail].mapping = mapping;
2062                 cur_p->addr = mapping;
2063
2064                 /* Preserve only critical status bits.  Packet is NOT to be
2065                  * committed to hardware at this time.
2066                  */
2067                 regval = cur_p->ctrl;
2068                 regval &= (XEMACPS_TXBUF_USED_MASK | XEMACPS_TXBUF_WRAP_MASK);
2069                 /* update length field */
2070                 regval |= ((regval & ~XEMACPS_TXBUF_LEN_MASK) | len);
2071                 regval &= ~XEMACPS_TXBUF_USED_MASK;
2072                 /* last fragment of this packet? */
2073                 if (i == (nr_frags - 1))
2074                         regval |= XEMACPS_TXBUF_LAST_MASK;
2075                 cur_p->ctrl = regval;
2076
2077                 lp->tx_bd_tail++;
2078                 lp->tx_bd_tail = lp->tx_bd_tail % XEMACPS_SEND_BD_CNT;
2079
2080                 cur_p = &(lp->tx_bd[lp->tx_bd_tail]);
2081         }
2082         wmb();
2083
2084         regval = xemacps_read(lp->baseaddr, XEMACPS_NWCTRL_OFFSET);
2085         xemacps_write(lp->baseaddr, XEMACPS_NWCTRL_OFFSET,
2086                         (regval | XEMACPS_NWCTRL_STARTTX_MASK));
2087
2088         spin_unlock_bh(&lp->tx_lock);
2089         ndev->trans_start = jiffies;
2090         return 0;
2091 }
2092
2093 /*
2094  * Get the MAC Address bit from the specified position
2095  */
2096 static unsigned get_bit(u8 *mac, unsigned bit)
2097 {
2098         unsigned byte;
2099
2100         byte = mac[bit / 8];
2101         byte >>= (bit & 0x7);
2102         byte &= 1;
2103
2104         return byte;
2105 }
2106
2107 /*
2108  * Calculate a GEM MAC Address hash index
2109  */
2110 static unsigned calc_mac_hash(u8 *mac)
2111 {
2112         int index_bit, mac_bit;
2113         unsigned hash_index;
2114
2115         hash_index = 0;
2116         mac_bit = 5;
2117         for (index_bit = 5; index_bit >= 0; index_bit--) {
2118                 hash_index |= (get_bit(mac,  mac_bit) ^
2119                                         get_bit(mac, mac_bit + 6) ^
2120                                         get_bit(mac, mac_bit + 12) ^
2121                                         get_bit(mac, mac_bit + 18) ^
2122                                         get_bit(mac, mac_bit + 24) ^
2123                                         get_bit(mac, mac_bit + 30) ^
2124                                         get_bit(mac, mac_bit + 36) ^
2125                                         get_bit(mac, mac_bit + 42))
2126                                                 << index_bit;
2127                 mac_bit--;
2128         }
2129
2130         return hash_index;
2131 }
2132
2133 /**
2134  * xemacps_set_hashtable - Add multicast addresses to the internal
2135  * multicast-hash table. Called from xemac_set_rx_mode().
2136  * @ndev: network interface device structure
2137  *
2138  * The hash address register is 64 bits long and takes up two
2139  * locations in the memory map.  The least significant bits are stored
2140  * in EMAC_HSL and the most significant bits in EMAC_HSH.
2141  *
2142  * The unicast hash enable and the multicast hash enable bits in the
2143  * network configuration register enable the reception of hash matched
2144  * frames. The destination address is reduced to a 6 bit index into
2145  * the 64 bit hash register using the following hash function.  The
2146  * hash function is an exclusive or of every sixth bit of the
2147  * destination address.
2148  *
2149  * hi[5] = da[5] ^ da[11] ^ da[17] ^ da[23] ^ da[29] ^ da[35] ^ da[41] ^ da[47]
2150  * hi[4] = da[4] ^ da[10] ^ da[16] ^ da[22] ^ da[28] ^ da[34] ^ da[40] ^ da[46]
2151  * hi[3] = da[3] ^ da[09] ^ da[15] ^ da[21] ^ da[27] ^ da[33] ^ da[39] ^ da[45]
2152  * hi[2] = da[2] ^ da[08] ^ da[14] ^ da[20] ^ da[26] ^ da[32] ^ da[38] ^ da[44]
2153  * hi[1] = da[1] ^ da[07] ^ da[13] ^ da[19] ^ da[25] ^ da[31] ^ da[37] ^ da[43]
2154  * hi[0] = da[0] ^ da[06] ^ da[12] ^ da[18] ^ da[24] ^ da[30] ^ da[36] ^ da[42]
2155  *
2156  * da[0] represents the least significant bit of the first byte
2157  * received, that is, the multicast/unicast indicator, and da[47]
2158  * represents the most significant bit of the last byte received.  If
2159  * the hash index, hi[n], points to a bit that is set in the hash
2160  * register then the frame will be matched according to whether the
2161  * frame is multicast or unicast.  A multicast match will be signalled
2162  * if the multicast hash enable bit is set, da[0] is 1 and the hash
2163  * index points to a bit set in the hash register.  A unicast match
2164  * will be signalled if the unicast hash enable bit is set, da[0] is 0
2165  * and the hash index points to a bit set in the hash register.  To
2166  * receive all multicast frames, the hash register should be set with
2167  * all ones and the multicast hash enable bit should be set in the
2168  * network configuration register.
2169  **/
2170 static void xemacps_set_hashtable(struct net_device *ndev)
2171 {
2172         struct netdev_hw_addr *curr;
2173         u32 regvalh, regvall, hash_index;
2174         u8 *mc_addr;
2175         struct net_local *lp;
2176
2177         lp = netdev_priv(ndev);
2178
2179         regvalh = regvall = 0;
2180
2181         netdev_for_each_mc_addr(curr, ndev) {
2182                 if (!curr)      /* end of list */
2183                         break;
2184                 mc_addr = curr->addr;
2185                 hash_index = calc_mac_hash(mc_addr);
2186
2187                 if (hash_index >= XEMACPS_MAX_HASH_BITS) {
2188                         dev_err(&lp->pdev->dev,
2189                                         "hash calculation out of range %d\n",
2190                                         hash_index);
2191                         break;
2192                 }
2193                 if (hash_index < 32)
2194                         regvall |= (1 << hash_index);
2195                 else
2196                         regvalh |= (1 << (hash_index - 32));
2197         }
2198
2199         xemacps_write(lp->baseaddr, XEMACPS_HASHL_OFFSET, regvall);
2200         xemacps_write(lp->baseaddr, XEMACPS_HASHH_OFFSET, regvalh);
2201 }
2202
2203 /**
2204  * xemacps_set_rx_mode - enable/disable promiscuous and multicast modes
2205  * @ndev: network interface device structure
2206  **/
2207 static void xemacps_set_rx_mode(struct net_device *ndev)
2208 {
2209         struct net_local *lp = netdev_priv(ndev);
2210         u32 regval;
2211
2212         regval = xemacps_read(lp->baseaddr, XEMACPS_NWCFG_OFFSET);
2213
2214         /* promisc mode */
2215         if (ndev->flags & IFF_PROMISC)
2216                 regval |= XEMACPS_NWCFG_COPYALLEN_MASK;
2217         if (!(ndev->flags & IFF_PROMISC))
2218                 regval &= ~XEMACPS_NWCFG_COPYALLEN_MASK;
2219
2220         /* All multicast mode */
2221         if (ndev->flags & IFF_ALLMULTI) {
2222                 regval |= XEMACPS_NWCFG_MCASTHASHEN_MASK;
2223                 xemacps_write(lp->baseaddr, XEMACPS_HASHL_OFFSET, ~0UL);
2224                 xemacps_write(lp->baseaddr, XEMACPS_HASHH_OFFSET, ~0UL);
2225         /* Specific multicast mode */
2226         } else if ((ndev->flags & IFF_MULTICAST)
2227                         && (netdev_mc_count(ndev) > 0)) {
2228                 regval |= XEMACPS_NWCFG_MCASTHASHEN_MASK;
2229                 xemacps_set_hashtable(ndev);
2230         /* Disable multicast mode */
2231         } else {
2232                 xemacps_write(lp->baseaddr, XEMACPS_HASHL_OFFSET, 0x0);
2233                 xemacps_write(lp->baseaddr, XEMACPS_HASHH_OFFSET, 0x0);
2234                 regval &= ~XEMACPS_NWCFG_MCASTHASHEN_MASK;
2235         }
2236
2237         /* broadcast mode */
2238         if (ndev->flags & IFF_BROADCAST)
2239                 regval &= ~XEMACPS_NWCFG_BCASTDI_MASK;
2240         /* No broadcast */
2241         if (!(ndev->flags & IFF_BROADCAST))
2242                 regval |= XEMACPS_NWCFG_BCASTDI_MASK;
2243
2244         xemacps_write(lp->baseaddr, XEMACPS_NWCFG_OFFSET, regval);
2245 }
2246
2247 #define MIN_MTU 60
2248 #define MAX_MTU 1500
2249 /**
2250  * xemacps_change_mtu - Change maximum transfer unit
2251  * @ndev: network interface device structure
2252  * @new_mtu: new vlaue for maximum frame size
2253  * return: 0 on success, negative value if error.
2254  **/
2255 static int xemacps_change_mtu(struct net_device *ndev, int new_mtu)
2256 {
2257         if ((new_mtu < MIN_MTU) ||
2258                 ((new_mtu + ndev->hard_header_len) > MAX_MTU))
2259                 return -EINVAL;
2260
2261         ndev->mtu = new_mtu;    /* change mtu in net_device structure */
2262         return 0;
2263 }
2264
2265 /**
2266  * xemacps_get_settings - get device specific settings.
2267  * Usage: Issue "ethtool ethX" under linux prompt.
2268  * @ndev: network device
2269  * @ecmd: ethtool command structure
2270  * return: 0 on success, negative value if error.
2271  **/
2272 static int
2273 xemacps_get_settings(struct net_device *ndev, struct ethtool_cmd *ecmd)
2274 {
2275         struct net_local *lp = netdev_priv(ndev);
2276         struct phy_device *phydev = lp->phy_dev;
2277
2278         if (!phydev)
2279                 return -ENODEV;
2280
2281         return phy_ethtool_gset(phydev, ecmd);
2282 }
2283
2284 /**
2285  * xemacps_set_settings - set device specific settings.
2286  * Usage: Issue "ethtool -s ethX speed 1000" under linux prompt
2287  * to change speed
2288  * @ndev: network device
2289  * @ecmd: ethtool command structure
2290  * return: 0 on success, negative value if error.
2291  **/
2292 static int
2293 xemacps_set_settings(struct net_device *ndev, struct ethtool_cmd *ecmd)
2294 {
2295         struct net_local *lp = netdev_priv(ndev);
2296         struct phy_device *phydev = lp->phy_dev;
2297
2298         if (!phydev)
2299                 return -ENODEV;
2300
2301         return phy_ethtool_sset(phydev, ecmd);
2302 }
2303
2304 /**
2305  * xemacps_get_drvinfo - report driver information
2306  * Usage: Issue "ethtool -i ethX" under linux prompt
2307  * @ndev: network device
2308  * @ed: device driver information structure
2309  **/
2310 static void
2311 xemacps_get_drvinfo(struct net_device *ndev, struct ethtool_drvinfo *ed)
2312 {
2313         struct net_local *lp = netdev_priv(ndev);
2314
2315         memset(ed, 0, sizeof(struct ethtool_drvinfo));
2316         strcpy(ed->driver, lp->pdev->dev.driver->name);
2317         strcpy(ed->version, DRIVER_VERSION);
2318 }
2319
2320 /**
2321  * xemacps_get_ringparam - get device dma ring information.
2322  * Usage: Issue "ethtool -g ethX" under linux prompt
2323  * @ndev: network device
2324  * @erp: ethtool ring parameter structure
2325  **/
2326 static void
2327 xemacps_get_ringparam(struct net_device *ndev, struct ethtool_ringparam *erp)
2328 {
2329         memset(erp, 0, sizeof(struct ethtool_ringparam));
2330
2331         erp->rx_max_pending = XEMACPS_RECV_BD_CNT;
2332         erp->tx_max_pending = XEMACPS_SEND_BD_CNT;
2333         erp->rx_pending = 0;
2334         erp->tx_pending = 0;
2335 }
2336
2337 /**
2338  * xemacps_get_wol - get device wake on lan status
2339  * Usage: Issue "ethtool ethX" under linux prompt
2340  * @ndev: network device
2341  * @ewol: wol status
2342  **/
2343 static void
2344 xemacps_get_wol(struct net_device *ndev, struct ethtool_wolinfo *ewol)
2345 {
2346         struct net_local *lp = netdev_priv(ndev);
2347         unsigned long flags;
2348         u32 regval;
2349
2350         ewol->supported = WAKE_MAGIC | WAKE_ARP | WAKE_UCAST | WAKE_MCAST;
2351         spin_lock_irqsave(&lp->tx_lock, flags);
2352         spin_lock(&lp->rx_lock);
2353         regval = xemacps_read(lp->baseaddr, XEMACPS_WOL_OFFSET);
2354         if (regval | XEMACPS_WOL_MCAST_MASK)
2355                 ewol->wolopts |= WAKE_MCAST;
2356         if (regval | XEMACPS_WOL_ARP_MASK)
2357                 ewol->wolopts |= WAKE_ARP;
2358         if (regval | XEMACPS_WOL_SPEREG1_MASK)
2359                 ewol->wolopts |= WAKE_UCAST;
2360         if (regval | XEMACPS_WOL_MAGIC_MASK)
2361                 ewol->wolopts |= WAKE_MAGIC;
2362         spin_unlock(&lp->rx_lock);
2363         spin_unlock_irqrestore(&lp->tx_lock, flags);
2364 }
2365
2366 /**
2367  * xemacps_set_wol - set device wake on lan configuration
2368  * Usage: Issue "ethtool -s ethX wol u|m|b|g" under linux prompt to enable
2369  * specified type of packet.
2370  * Usage: Issue "ethtool -s ethX wol d" under linux prompt to disable
2371  * this feature.
2372  * @ndev: network device
2373  * @ewol: wol status
2374  * return 0 on success, negative value if not supported
2375  **/
2376 static int
2377 xemacps_set_wol(struct net_device *ndev, struct ethtool_wolinfo *ewol)
2378 {
2379         struct net_local *lp = netdev_priv(ndev);
2380         unsigned long flags;
2381         u32 regval;
2382
2383         if (ewol->wolopts & ~(WAKE_MAGIC | WAKE_ARP | WAKE_UCAST | WAKE_MCAST))
2384                 return -EOPNOTSUPP;
2385
2386         spin_lock_irqsave(&lp->tx_lock, flags);
2387         spin_lock(&lp->rx_lock);
2388         regval  = xemacps_read(lp->baseaddr, XEMACPS_WOL_OFFSET);
2389         regval &= ~(XEMACPS_WOL_MCAST_MASK | XEMACPS_WOL_ARP_MASK |
2390                 XEMACPS_WOL_SPEREG1_MASK | XEMACPS_WOL_MAGIC_MASK);
2391
2392         if (ewol->wolopts & WAKE_MAGIC)
2393                 regval |= XEMACPS_WOL_MAGIC_MASK;
2394         if (ewol->wolopts & WAKE_ARP)
2395                 regval |= XEMACPS_WOL_ARP_MASK;
2396         if (ewol->wolopts & WAKE_UCAST)
2397                 regval |= XEMACPS_WOL_SPEREG1_MASK;
2398         if (ewol->wolopts & WAKE_MCAST)
2399                 regval |= XEMACPS_WOL_MCAST_MASK;
2400
2401         xemacps_write(lp->baseaddr, XEMACPS_WOL_OFFSET, regval);
2402         spin_unlock(&lp->rx_lock);
2403         spin_unlock_irqrestore(&lp->tx_lock, flags);
2404
2405         return 0;
2406 }
2407
2408 /**
2409  * xemacps_get_pauseparam - get device pause status
2410  * Usage: Issue "ethtool -a ethX" under linux prompt
2411  * @ndev: network device
2412  * @epauseparam: pause parameter
2413  *
2414  * note: hardware supports only tx flow control
2415  **/
2416 static void
2417 xemacps_get_pauseparam(struct net_device *ndev,
2418                 struct ethtool_pauseparam *epauseparm)
2419 {
2420         struct net_local *lp = netdev_priv(ndev);
2421         unsigned long flags;
2422         u32 regval;
2423
2424         epauseparm->autoneg  = 0;
2425         epauseparm->rx_pause = 0;
2426
2427         spin_lock_irqsave(&lp->tx_lock, flags);
2428         spin_lock(&lp->rx_lock);
2429         regval = xemacps_read(lp->baseaddr, XEMACPS_NWCFG_OFFSET);
2430         epauseparm->tx_pause = regval & XEMACPS_NWCFG_PAUSEEN_MASK;
2431         spin_unlock(&lp->rx_lock);
2432         spin_unlock_irqrestore(&lp->tx_lock, flags);
2433 }
2434
2435 /**
2436  * xemacps_set_pauseparam - set device pause parameter(flow control)
2437  * Usage: Issue "ethtool -A ethX tx on|off" under linux prompt
2438  * @ndev: network device
2439  * @epauseparam: pause parameter
2440  * return 0 on success, negative value if not supported
2441  *
2442  * note: hardware supports only tx flow control
2443  **/
2444 static int
2445 xemacps_set_pauseparam(struct net_device *ndev,
2446                 struct ethtool_pauseparam *epauseparm)
2447 {
2448         struct net_local *lp = netdev_priv(ndev);
2449         unsigned long flags;
2450         u32 regval;
2451
2452         if (netif_running(ndev)) {
2453                 dev_err(&lp->pdev->dev,
2454                         "Please stop netif before apply configruation\n");
2455                 return -EFAULT;
2456         }
2457
2458         spin_lock_irqsave(&lp->tx_lock, flags);
2459         spin_lock(&lp->rx_lock);
2460         regval = xemacps_read(lp->baseaddr, XEMACPS_NWCFG_OFFSET);
2461
2462         if (epauseparm->tx_pause)
2463                 regval |= XEMACPS_NWCFG_PAUSEEN_MASK;
2464         if (!(epauseparm->tx_pause))
2465                 regval &= ~XEMACPS_NWCFG_PAUSEEN_MASK;
2466
2467         xemacps_write(lp->baseaddr, XEMACPS_NWCFG_OFFSET, regval);
2468         spin_unlock(&lp->rx_lock);
2469         spin_unlock_irqrestore(&lp->tx_lock, flags);
2470
2471         return 0;
2472 }
2473
2474 /**
2475  * xemacps_get_stats - get device statistic raw data in 64bit mode
2476  * @ndev: network device
2477  **/
2478 static struct net_device_stats
2479 *xemacps_get_stats(struct net_device *ndev)
2480 {
2481         struct net_local *lp = netdev_priv(ndev);
2482         struct net_device_stats *nstat = &lp->stats;
2483
2484         xemacps_update_stats((unsigned long)lp);
2485         return nstat;
2486 }
2487
2488 static struct ethtool_ops xemacps_ethtool_ops = {
2489         .get_settings   = xemacps_get_settings,
2490         .set_settings   = xemacps_set_settings,
2491         .get_drvinfo    = xemacps_get_drvinfo,
2492         .get_link       = ethtool_op_get_link, /* ethtool default */
2493         .get_ringparam  = xemacps_get_ringparam,
2494         .get_wol        = xemacps_get_wol,
2495         .set_wol        = xemacps_set_wol,
2496         .get_pauseparam = xemacps_get_pauseparam,
2497         .set_pauseparam = xemacps_set_pauseparam,
2498 };
2499
2500 #ifdef CONFIG_XILINX_PS_EMAC_HWTSTAMP
2501 static int xemacps_hwtstamp_ioctl(struct net_device *netdev,
2502                                 struct ifreq *ifr, int cmd)
2503 {
2504         struct hwtstamp_config config;
2505         struct net_local *lp;
2506         u32 regval;
2507
2508         lp = netdev_priv(netdev);
2509
2510         if (copy_from_user(&config, ifr->ifr_data, sizeof(config)))
2511                 return -EFAULT;
2512
2513         /* reserved for future extensions */
2514         if (config.flags)
2515                 return -EINVAL;
2516
2517         if ((config.tx_type != HWTSTAMP_TX_OFF) &&
2518                 (config.tx_type != HWTSTAMP_TX_ON))
2519                 return -ERANGE;
2520
2521         switch (config.rx_filter) {
2522         case HWTSTAMP_FILTER_NONE:
2523                 break;
2524         case HWTSTAMP_FILTER_PTP_V1_L4_EVENT:
2525         case HWTSTAMP_FILTER_PTP_V2_L4_EVENT:
2526         case HWTSTAMP_FILTER_PTP_V2_L2_EVENT:
2527         case HWTSTAMP_FILTER_ALL:
2528         case HWTSTAMP_FILTER_PTP_V1_L4_SYNC:
2529         case HWTSTAMP_FILTER_PTP_V1_L4_DELAY_REQ:
2530         case HWTSTAMP_FILTER_PTP_V2_L2_SYNC:
2531         case HWTSTAMP_FILTER_PTP_V2_L4_SYNC:
2532         case HWTSTAMP_FILTER_PTP_V2_L2_DELAY_REQ:
2533         case HWTSTAMP_FILTER_PTP_V2_L4_DELAY_REQ:
2534         case HWTSTAMP_FILTER_PTP_V2_EVENT:
2535         case HWTSTAMP_FILTER_PTP_V2_SYNC:
2536         case HWTSTAMP_FILTER_PTP_V2_DELAY_REQ:
2537                 config.rx_filter = HWTSTAMP_FILTER_ALL;
2538                 regval = xemacps_read(lp->baseaddr, XEMACPS_NWCTRL_OFFSET);
2539                 xemacps_write(lp->baseaddr, XEMACPS_NWCTRL_OFFSET,
2540                         (regval | XEMACPS_NWCTRL_RXTSTAMP_MASK));
2541                 break;
2542         default:
2543                 return -ERANGE;
2544         }
2545
2546         config.tx_type = HWTSTAMP_TX_ON;
2547         lp->hwtstamp_config = config;
2548
2549         return copy_to_user(ifr->ifr_data, &config, sizeof(config)) ?
2550                 -EFAULT : 0;
2551 }
2552 #endif /* CONFIG_XILINX_PS_EMAC_HWTSTAMP */
2553
2554 /**
2555  * xemacps_ioctl - ioctl entry point
2556  * @ndev: network device
2557  * @rq: interface request ioctl
2558  * @cmd: command code
2559  *
2560  * Called when user issues an ioctl request to the network device.
2561  **/
2562 static int xemacps_ioctl(struct net_device *ndev, struct ifreq *rq, int cmd)
2563 {
2564         struct net_local *lp = netdev_priv(ndev);
2565         struct phy_device *phydev = lp->phy_dev;
2566
2567         if (!netif_running(ndev))
2568                 return -EINVAL;
2569
2570         if (!phydev)
2571                 return -ENODEV;
2572
2573         switch (cmd) {
2574         case SIOCGMIIPHY:
2575         case SIOCGMIIREG:
2576         case SIOCSMIIREG:
2577                 return phy_mii_ioctl(phydev, rq, cmd);
2578 #ifdef CONFIG_XILINX_PS_EMAC_HWTSTAMP
2579         case SIOCSHWTSTAMP:
2580                 return xemacps_hwtstamp_ioctl(ndev, rq, cmd);
2581 #endif
2582         default:
2583                 dev_info(&lp->pdev->dev, "ioctl %d not implemented.\n", cmd);
2584                 return -EOPNOTSUPP;
2585         }
2586
2587 }
2588
2589 /**
2590  * xemacps_probe - Platform driver probe
2591  * @pdev: Pointer to platform device structure
2592  *
2593  * Return 0 on success, negative value if error
2594  */
2595 static int xemacps_probe(struct platform_device *pdev)
2596 {
2597         struct resource *r_mem = NULL;
2598         struct resource *r_irq = NULL;
2599         struct net_device *ndev;
2600         struct net_local *lp;
2601         struct device_node *np;
2602         const void *prop;
2603         u32 regval = 0;
2604         int rc = -ENXIO;
2605
2606         r_mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
2607         r_irq = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
2608         if (!r_mem || !r_irq) {
2609                 dev_err(&pdev->dev, "no IO resource defined.\n");
2610                 rc = -ENXIO;
2611                 goto err_out;
2612         }
2613
2614         ndev = alloc_etherdev(sizeof(*lp));
2615         if (!ndev) {
2616                 dev_err(&pdev->dev, "etherdev allocation failed.\n");
2617                 rc = -ENOMEM;
2618                 goto err_out;
2619         }
2620
2621         SET_NETDEV_DEV(ndev, &pdev->dev);
2622
2623         lp = netdev_priv(ndev);
2624         lp->pdev = pdev;
2625         lp->ndev = ndev;
2626
2627         spin_lock_init(&lp->tx_lock);
2628         spin_lock_init(&lp->rx_lock);
2629
2630         lp->baseaddr = ioremap(r_mem->start, (r_mem->end - r_mem->start + 1));
2631         if (!lp->baseaddr) {
2632                 dev_err(&pdev->dev, "failed to map baseaddress.\n");
2633                 rc = -ENOMEM;
2634                 goto err_out_free_netdev;
2635         }
2636
2637         dev_dbg(&lp->pdev->dev, "BASEADDRESS hw: %p virt: %p\n",
2638                         (void *)r_mem->start, lp->baseaddr);
2639
2640         ndev->irq = platform_get_irq(pdev, 0);
2641
2642         rc = request_irq(ndev->irq, xemacps_interrupt, 0,
2643                 ndev->name, ndev);
2644         if (rc) {
2645                 dev_err(&lp->pdev->dev, "Unable to request IRQ %p, error %d\n",
2646                                 r_irq, rc);
2647                 goto err_out_iounmap;
2648         }
2649
2650         ndev->netdev_ops = &netdev_ops;
2651         ndev->watchdog_timeo = TX_TIMEOUT;
2652         ndev->ethtool_ops = &xemacps_ethtool_ops;
2653         ndev->base_addr = r_mem->start;
2654         ndev->features = NETIF_F_IP_CSUM | NETIF_F_FRAGLIST | NETIF_F_SG;
2655         netif_napi_add(ndev, &lp->napi, xemacps_rx_poll, XEMACPS_NAPI_WEIGHT);
2656
2657         lp->ip_summed = CHECKSUM_UNNECESSARY;
2658         lp->board_type = BOARD_TYPE_ZYNQ;
2659
2660         rc = register_netdev(ndev);
2661         if (rc) {
2662                 dev_err(&pdev->dev, "Cannot register net device, aborting.\n");
2663                 goto err_out_free_irq;
2664         }
2665
2666         if (ndev->irq == 54)
2667                 lp->enetnum = 0;
2668         else
2669                 lp->enetnum = 1;
2670
2671         np = of_get_next_parent(lp->pdev->dev.of_node);
2672         np = of_get_next_parent(np);
2673         prop = of_get_property(np, "compatible", NULL);
2674
2675         if (prop != NULL) {
2676                 if ((strcmp((const char *)prop, "xlnx,zynq-ep107")) == 0)
2677                         lp->board_type = BOARD_TYPE_PEEP;
2678                 else
2679                         lp->board_type = BOARD_TYPE_ZYNQ;
2680         } else {
2681                 lp->board_type = BOARD_TYPE_ZYNQ;
2682         }
2683         if (lp->board_type == BOARD_TYPE_ZYNQ) {
2684                 if (lp->enetnum == 0)
2685                         lp->aperclk = clk_get_sys("GEM0_APER", NULL);
2686                 else
2687                         lp->aperclk = clk_get_sys("GEM1_APER", NULL);
2688                 if (IS_ERR(lp->aperclk)) {
2689                         dev_err(&pdev->dev, "APER clock not found.\n");
2690                         rc = PTR_ERR(lp->aperclk);
2691                         goto err_out_unregister_netdev;
2692                 }
2693                 if (lp->enetnum == 0)
2694                         lp->devclk = clk_get_sys("GEM0", NULL);
2695                 else
2696                         lp->devclk = clk_get_sys("GEM1", NULL);
2697                 if (IS_ERR(lp->devclk)) {
2698                         dev_err(&pdev->dev, "Device clock not found.\n");
2699                         rc = PTR_ERR(lp->devclk);
2700                         goto err_out_clk_put_aper;
2701                 }
2702
2703                 rc = clk_prepare_enable(lp->aperclk);
2704                 if (rc) {
2705                         dev_err(&pdev->dev, "Unable to enable APER clock.\n");
2706                         goto err_out_clk_put;
2707                 }
2708                 rc = clk_prepare_enable(lp->devclk);
2709                 if (rc) {
2710                         dev_err(&pdev->dev, "Unable to enable device clock.\n");
2711                         goto err_out_clk_dis_aper;
2712                 }
2713
2714                 lp->clk_rate_change_nb.notifier_call = xemacps_clk_notifier_cb;
2715                 lp->clk_rate_change_nb.next = NULL;
2716                 if (clk_notifier_register(lp->devclk, &lp->clk_rate_change_nb))
2717                         dev_warn(&pdev->dev,
2718                                 "Unable to register clock notifier.\n");
2719         }
2720
2721 #ifdef CONFIG_XILINX_PS_EMAC_HWTSTAMP
2722         if (lp->board_type == BOARD_TYPE_ZYNQ) {
2723                 prop = of_get_property(lp->pdev->dev.of_node,
2724                                         "xlnx,ptp-enet-clock", NULL);
2725                 if (prop)
2726                         lp->ptpenetclk = (u32)be32_to_cpup(prop);
2727                 else
2728                         lp->ptpenetclk = 133333328;
2729         } else {
2730                 lp->ptpenetclk = PEEP_TSU_CLK;
2731         }
2732 #endif
2733
2734         lp->phy_node = of_parse_phandle(lp->pdev->dev.of_node,
2735                                                 "phy-handle", 0);
2736         lp->gmii2rgmii_phy_node = of_parse_phandle(lp->pdev->dev.of_node,
2737                                                 "gmii2rgmii-phy-handle", 0);
2738         rc = of_get_phy_mode(lp->pdev->dev.of_node);
2739         if (rc < 0) {
2740                 dev_err(&lp->pdev->dev, "error in getting phy i/f\n");
2741                 goto err_out_unregister_clk_notifier;
2742         }
2743
2744         lp->phy_interface = rc;
2745
2746         if (lp->board_type == BOARD_TYPE_ZYNQ) {
2747                 /* Set MDIO clock divider */
2748                 regval = (MDC_DIV_224 << XEMACPS_NWCFG_MDC_SHIFT_MASK);
2749                 xemacps_write(lp->baseaddr, XEMACPS_NWCFG_OFFSET, regval);
2750         }
2751
2752         regval = XEMACPS_NWCTRL_MDEN_MASK;
2753         xemacps_write(lp->baseaddr, XEMACPS_NWCTRL_OFFSET, regval);
2754
2755         rc = xemacps_mii_init(lp);
2756         if (rc) {
2757                 dev_err(&lp->pdev->dev, "error in xemacps_mii_init\n");
2758                 goto err_out_unregister_clk_notifier;
2759         }
2760
2761         xemacps_update_hwaddr(lp);
2762         tasklet_init(&lp->tx_bdreclaim_tasklet, xemacps_tx_poll,
2763                      (unsigned long) ndev);
2764         tasklet_disable(&lp->tx_bdreclaim_tasklet);
2765
2766         lp->txtimeout_handler_wq = create_singlethread_workqueue(DRIVER_NAME);
2767         INIT_WORK(&lp->txtimeout_reinit, xemacps_reinit_for_txtimeout);
2768
2769         platform_set_drvdata(pdev, ndev);
2770         pm_runtime_set_active(&pdev->dev);
2771         pm_runtime_enable(&pdev->dev);
2772
2773         dev_info(&lp->pdev->dev, "pdev->id %d, baseaddr 0x%08lx, irq %d\n",
2774                 pdev->id, ndev->base_addr, ndev->irq);
2775
2776         return 0;
2777
2778 err_out_unregister_clk_notifier:
2779         clk_notifier_unregister(lp->devclk, &lp->clk_rate_change_nb);
2780         clk_disable_unprepare(lp->devclk);
2781 err_out_clk_dis_aper:
2782         clk_disable_unprepare(lp->aperclk);
2783 err_out_clk_put:
2784         clk_put(lp->devclk);
2785 err_out_clk_put_aper:
2786         clk_put(lp->aperclk);
2787 err_out_unregister_netdev:
2788         unregister_netdev(ndev);
2789 err_out_free_irq:
2790         free_irq(ndev->irq, ndev);
2791 err_out_iounmap:
2792         iounmap(lp->baseaddr);
2793 err_out_free_netdev:
2794         free_netdev(ndev);
2795 err_out:
2796         platform_set_drvdata(pdev, NULL);
2797         return rc;
2798 }
2799
2800 /**
2801  * xemacps_remove - called when platform driver is unregistered
2802  * @pdev: Pointer to the platform device structure
2803  *
2804  * return: 0 on success
2805  */
2806 static int __exit xemacps_remove(struct platform_device *pdev)
2807 {
2808         struct net_device *ndev = platform_get_drvdata(pdev);
2809         struct net_local *lp;
2810
2811         if (ndev) {
2812                 lp = netdev_priv(ndev);
2813                 if (lp->phy_dev)
2814                         phy_disconnect(lp->phy_dev);
2815
2816                 mdiobus_unregister(lp->mii_bus);
2817                 kfree(lp->mii_bus->irq);
2818                 mdiobus_free(lp->mii_bus);
2819                 unregister_netdev(ndev);
2820                 free_irq(ndev->irq, ndev);
2821                 iounmap(lp->baseaddr);
2822                 free_netdev(ndev);
2823                 platform_set_drvdata(pdev, NULL);
2824
2825                 clk_notifier_unregister(lp->devclk, &lp->clk_rate_change_nb);
2826                 clk_disable_unprepare(lp->devclk);
2827                 clk_put(lp->devclk);
2828                 clk_disable_unprepare(lp->aperclk);
2829                 clk_put(lp->aperclk);
2830         }
2831
2832         return 0;
2833 }
2834
2835 #ifdef CONFIG_PM
2836 #ifdef CONFIG_PM_SLEEP
2837 /**
2838  * xemacps_suspend - Suspend event
2839  * @device: Pointer to device structure
2840  *
2841  * Return 0
2842  */
2843 static int xemacps_suspend(struct device *device)
2844 {
2845         struct platform_device *pdev = container_of(device,
2846                         struct platform_device, dev);
2847         struct net_device *ndev = platform_get_drvdata(pdev);
2848         struct net_local *lp = netdev_priv(ndev);
2849
2850         netif_device_detach(ndev);
2851         if (!pm_runtime_suspended(device)) {
2852                 clk_disable(lp->devclk);
2853                 clk_disable(lp->aperclk);
2854         }
2855         return 0;
2856 }
2857
2858 /**
2859  * xemacps_resume - Resume after previous suspend
2860  * @pdev: Pointer to platform device structure
2861  *
2862  * Returns 0 on success, errno otherwise.
2863  */
2864 static int xemacps_resume(struct device *device)
2865 {
2866         struct platform_device *pdev = container_of(device,
2867                         struct platform_device, dev);
2868         struct net_device *ndev = platform_get_drvdata(pdev);
2869         struct net_local *lp = netdev_priv(ndev);
2870
2871         if (!pm_runtime_suspended(device)) {
2872                 int ret;
2873
2874                 ret = clk_enable(lp->aperclk);
2875                 if (ret)
2876                         return ret;
2877
2878                 ret = clk_enable(lp->devclk);
2879                 if (ret) {
2880                         clk_disable(lp->aperclk);
2881                         return ret;
2882                 }
2883         }
2884         netif_device_attach(ndev);
2885         return 0;
2886 }
2887 #endif /* ! CONFIG_PM_SLEEP */
2888
2889 #ifdef CONFIG_PM_RUNTIME
2890 static int xemacps_runtime_idle(struct device *dev)
2891 {
2892         return pm_schedule_suspend(dev, 1);
2893 }
2894
2895 static int xemacps_runtime_resume(struct device *device)
2896 {
2897         int ret;
2898         struct platform_device *pdev = container_of(device,
2899                         struct platform_device, dev);
2900         struct net_device *ndev = platform_get_drvdata(pdev);
2901         struct net_local *lp = netdev_priv(ndev);
2902
2903         ret = clk_enable(lp->aperclk);
2904         if (ret)
2905                 return ret;
2906
2907         ret = clk_enable(lp->devclk);
2908         if (ret) {
2909                 clk_disable(lp->aperclk);
2910                 return ret;
2911         }
2912
2913         return 0;
2914 }
2915
2916 static int xemacps_runtime_suspend(struct device *device)
2917 {
2918         struct platform_device *pdev = container_of(device,
2919                         struct platform_device, dev);
2920         struct net_device *ndev = platform_get_drvdata(pdev);
2921         struct net_local *lp = netdev_priv(ndev);
2922
2923         clk_disable(lp->devclk);
2924         clk_disable(lp->aperclk);
2925         return 0;
2926 }
2927 #endif /* CONFIG_PM_RUNTIME */
2928
2929 static const struct dev_pm_ops xemacps_dev_pm_ops = {
2930         SET_SYSTEM_SLEEP_PM_OPS(xemacps_suspend, xemacps_resume)
2931         SET_RUNTIME_PM_OPS(xemacps_runtime_suspend, xemacps_runtime_resume,
2932                         xemacps_runtime_idle)
2933 };
2934 #define XEMACPS_PM      (&xemacps_dev_pm_ops)
2935 #else /* ! CONFIG_PM */
2936 #define XEMACPS_PM      NULL
2937 #endif /* ! CONFIG_PM */
2938
2939 static struct net_device_ops netdev_ops = {
2940         .ndo_open               = xemacps_open,
2941         .ndo_stop               = xemacps_close,
2942         .ndo_start_xmit         = xemacps_start_xmit,
2943         .ndo_set_rx_mode        = xemacps_set_rx_mode,
2944         .ndo_set_mac_address    = xemacps_set_mac_address,
2945         .ndo_do_ioctl           = xemacps_ioctl,
2946         .ndo_change_mtu         = xemacps_change_mtu,
2947         .ndo_tx_timeout         = xemacps_tx_timeout,
2948         .ndo_get_stats          = xemacps_get_stats,
2949 };
2950
2951 static struct of_device_id xemacps_of_match[] = {
2952         { .compatible = "xlnx,ps7-ethernet-1.00.a", },
2953         { /* end of table */}
2954 };
2955 MODULE_DEVICE_TABLE(of, xemacps_of_match);
2956
2957 static struct platform_driver xemacps_driver = {
2958         .probe   = xemacps_probe,
2959         .remove  = xemacps_remove,
2960         .driver  = {
2961                 .name  = DRIVER_NAME,
2962                 .owner = THIS_MODULE,
2963                 .of_match_table = xemacps_of_match,
2964                 .pm = XEMACPS_PM,
2965         },
2966 };
2967
2968 module_platform_driver(xemacps_driver);
2969
2970 MODULE_AUTHOR("Xilinx, Inc.");
2971 MODULE_DESCRIPTION("Xilinx Ethernet driver");
2972 MODULE_LICENSE("GPL v2");