2 * Xilinx Ethernet: Linux driver for Ethernet.
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.
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.
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
23 * 3. The SLCR clock divisors are hard coded for PEEP board.
26 #include <linux/module.h>
27 #include <linux/kernel.h>
28 #include <linux/init.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>
38 #include <linux/ethtool.h>
39 #include <linux/vmalloc.h>
40 #include <linux/version.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>
52 /************************** Constant Definitions *****************************/
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"
59 /* Transmission timeout is 3 seconds. */
60 #define TX_TIMEOUT (3*HZ)
62 /* for RX skb IP header word-aligned */
63 #define RX_IP_ALIGN_OFFSET 2
65 /* DMA buffer descriptors must be aligned on a 4-byte boundary. */
66 #define ALIGNMENT_BD 8
68 /* Maximum value for hash bits. 2**6 */
69 #define XEMACPS_MAX_HASH_BITS 64
72 * currently supporting 8, 16, 32, 48, 64, 96, 128, 224.
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 };
77 /* Specify the receive buffer size in bytes, 64, 128, 192, 10240 */
78 #define XEMACPS_RX_BUF_SIZE 1536
80 /* Number of receive buffer bytes as a unit, this is HW setup */
81 #define XEMACPS_RX_BUF_UNIT 64
83 /* Default SEND and RECV buffer descriptors (BD) numbers.
84 * BD Space needed is (XEMACPS_SEND_BD_CNT+XEMACPS_RECV_BD_CNT)*8
89 #define XEMACPS_SEND_BD_CNT 256
90 #define XEMACPS_RECV_BD_CNT 256
92 #define XEMACPS_NAPI_WEIGHT 64
94 /* Register offset definitions. Unless otherwise noted, register access is
95 * 32 bit. Names are self explained here.
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
133 #define XEMACPS_OCTTXH_OFFSET 0x00000104 /* Octects transmitted High
135 #define XEMACPS_TXCNT_OFFSET 0x00000108 /* Error-free Frmaes
136 transmitted counter */
137 #define XEMACPS_TXBCCNT_OFFSET 0x0000010C /* Error-free Broadcast
139 #define XEMACPS_TXMCCNT_OFFSET 0x00000110 /* Error-free Multicast
141 #define XEMACPS_TXPAUSECNT_OFFSET 0x00000114 /* Pause Frames Transmitted
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
158 #define XEMACPS_TXURUNCNT_OFFSET 0x00000134 /* TX under run error
160 #define XEMACPS_SNGLCOLLCNT_OFFSET 0x00000138 /* Single Collision Frame
162 #define XEMACPS_MULTICOLLCNT_OFFSET 0x0000013C /* Multiple Collision Frame
164 #define XEMACPS_EXCESSCOLLCNT_OFFSET 0x00000140 /* Excessive Collision Frame
166 #define XEMACPS_LATECOLLCNT_OFFSET 0x00000144 /* Late Collision Frame
168 #define XEMACPS_TXDEFERCNT_OFFSET 0x00000148 /* Deferred Transmission
170 #define XEMACPS_CSENSECNT_OFFSET 0x0000014C /* Carrier Sense Error
172 #define XEMACPS_OCTRXL_OFFSET 0x00000150 /* Octects Received register
174 #define XEMACPS_OCTRXH_OFFSET 0x00000154 /* Octects Received register
176 #define XEMACPS_RXCNT_OFFSET 0x00000158 /* Error-free Frames
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
184 #define XEMACPS_RX64CNT_OFFSET 0x00000168 /* Error-free 64 byte Frames
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
200 #define XEMACPS_RXOVRCNT_OFFSET 0x00000188 /* Oversize Frames Received
202 #define XEMACPS_RXJABCNT_OFFSET 0x0000018C /* Jabbers Received
204 #define XEMACPS_RXFCSCNT_OFFSET 0x00000190 /* Frame Check Sequence
206 #define XEMACPS_RXLENGTHCNT_OFFSET 0x00000194 /* Length Field Error
208 #define XEMACPS_RXSYMBCNT_OFFSET 0x00000198 /* Symbol Error Counter */
209 #define XEMACPS_RXALIGNCNT_OFFSET 0x0000019C /* Alignment Error
211 #define XEMACPS_RXRESERRCNT_OFFSET 0x000001A0 /* Receive Resource Error
213 #define XEMACPS_RXORCNT_OFFSET 0x000001A4 /* Receive Overrun */
214 #define XEMACPS_RXIPCCNT_OFFSET 0x000001A8 /* IP header Checksum Error
216 #define XEMACPS_RXTCPCCNT_OFFSET 0x000001AC /* TCP Checksum Error
218 #define XEMACPS_RXUDPCCNT_OFFSET 0x000001B0 /* UDP Checksum Error
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
231 #define XEMACPS_PTPERXNS_OFFSET 0x000001EC /* PTP Event Frame Received
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
239 #define XEMACPS_PTPPRXNS_OFFSET 0x000001EC /* PTP Peer Frame Received
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
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) */
252 #define XEMACPS_NWCTRL_STATWEN_MASK 0x00000080 /* Enable writing to
254 #define XEMACPS_NWCTRL_STATINC_MASK 0x00000040 /* Increment statistic
256 #define XEMACPS_NWCTRL_STATCLR_MASK 0x00000020 /* Clear statistic
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 */
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
269 #define XEMACPS_NWCFG_HDRXEN_MASK 0x02000000 /* RX half duplex */
270 #define XEMACPS_NWCFG_RXCHKSUMEN_MASK 0x01000000 /* enable RX checksum
272 #define XEMACPS_NWCFG_PAUSECOPYDI_MASK 0x00800000 /* Do not copy pause
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
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
288 #define XEMACPS_NWCFG_MCASTHASHEN_MASK 0x00000040 /* Receive multicast hash
290 #define XEMACPS_NWCFG_BCASTDI_MASK 0x00000020 /* Do not receive
292 #define XEMACPS_NWCFG_COPYALLEN_MASK 0x00000010 /* Copy all frames */
294 #define XEMACPS_NWCFG_NVLANDISC_MASK 0x00000004 /* Receive only VLAN
296 #define XEMACPS_NWCFG_FDEN_MASK 0x00000002 /* Full duplex */
297 #define XEMACPS_NWCFG_100_MASK 0x00000001 /* 10 or 100 Mbs */
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 */
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 */
307 /* DMA control register bit definitions */
308 #define XEMACPS_DMACR_RXBUF_MASK 0x00FF0000 /* Mask bit for RX buffer
310 #define XEMACPS_DMACR_RXBUF_SHIFT 16 /* Shift bit for RX buffer
312 #define XEMACPS_DMACR_TCPCKSUM_MASK 0x00000800 /* enable/disable TX
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 */
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
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 */
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)
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 */
349 #define XEMACPS_RXSR_ERROR_MASK (XEMACPS_RXSR_HRESPNOK_MASK | \
350 XEMACPS_RXSR_RXOVR_MASK | \
351 XEMACPS_RXSR_BUFFNA_MASK)
353 /* interrupts bit definitions
354 * Bits definitions are same in XEMACPS_ISR_OFFSET,
355 * XEMACPS_IER_OFFSET, XEMACPS_IDR_OFFSET, and XEMACPS_IMR_OFFSET
357 #define XEMACPS_IXR_PTPPSTX_MASK 0x02000000 /* PTP Psync transmitted */
358 #define XEMACPS_IXR_PTPPDRTX_MASK 0x01000000 /* PTP Pdelay_req
360 #define XEMACPS_IXR_PTPSTX_MASK 0x00800000 /* PTP Sync transmitted */
361 #define XEMACPS_IXR_PTPDRTX_MASK 0x00400000 /* PTP Delay_req
363 #define XEMACPS_IXR_PTPPSRX_MASK 0x00200000 /* PTP Psync received */
364 #define XEMACPS_IXR_PTPPDRRX_MASK 0x00100000 /* PTP Pdelay_req
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
370 #define XEMACPS_IXR_PAUSEZERO_MASK 0x00002000 /* Pause time has reached
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
376 #define XEMACPS_IXR_TXCOMPL_MASK 0x00000080 /* Frame transmitted ok */
377 #define XEMACPS_IXR_TXEXH_MASK 0x00000040 /* Transmit err occurred or
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 */
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)
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 */
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
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 */
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
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.
424 #define XEMACPS_TXBUF_USED_MASK 0x80000000 /* Used bit. */
425 #define XEMACPS_TXBUF_WRAP_MASK 0x40000000 /* Wrap bit, last
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 */
434 #define XEMACPS_TXBUF_ERR_MASK 0x3C000000 /* Mask for length field */
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
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
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 */
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 */
465 #define XEAMCPS_GEN_PURPOSE_TIMER_LOAD 100 /* timeout value is msecs */
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
472 #define BOARD_TYPE_ZYNQ 0x01
473 #define BOARD_TYPE_PEEP 0x02
476 #ifdef CONFIG_XILINX_PS_EMAC_HWTSTAMP
477 #define NS_PER_SEC 1000000000ULL /* Nanoseconds per
479 #define PEEP_TSU_CLK 50000000ULL /* PTP TSU CLOCK */
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)))
494 /* DMA buffer descriptor structure. Each BD is two words */
501 /* Our private device data. */
503 void __iomem *baseaddr;
506 struct notifier_block clk_rate_change_nb;
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;
513 struct xemacps_bd *rx_bd;
514 struct xemacps_bd *tx_bd;
516 dma_addr_t rx_bd_dma; /* physical address */
517 dma_addr_t tx_bd_dma; /* physical address */
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;
534 struct napi_struct napi; /* napi information for device */
535 struct net_device_stats stats; /* Statistics for this device */
537 struct timer_list gen_purpose_timer; /* Used for stats update */
539 /* Manage internal timer for packet timestamping */
540 struct cyclecounter cycles;
541 struct timecounter clock;
542 struct hwtstamp_config hwtstamp_config;
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;
551 /* RX ip/tcp/udp checksum */
553 unsigned int enetnum;
554 unsigned int board_type;
555 unsigned int lastrxfrmscntr;
556 #ifdef CONFIG_XILINX_PS_EMAC_HWTSTAMP
557 unsigned int ptpenetclk;
560 #define to_net_local(_nb) container_of(_nb, struct net_local,\
563 static struct net_device_ops netdev_ops;
566 * xemacps_mdio_read - Read current value of phy register indicated by
570 * @phyreg: phy register to be read
572 * @return: value read from specified phy register.
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
578 static int xemacps_mdio_read(struct mii_bus *bus, int mii_id, int phyreg)
580 struct net_local *lp = bus->priv;
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);
590 xemacps_write(lp->baseaddr, XEMACPS_PHYMNTNC_OFFSET, regval);
592 /* wait for end of transfer */
595 ipisr = xemacps_read(lp->baseaddr, XEMACPS_NWSR_OFFSET);
596 } while ((ipisr & XEMACPS_NWSR_MDIOIDLE_MASK) == 0);
598 value = xemacps_read(lp->baseaddr, XEMACPS_PHYMNTNC_OFFSET) &
599 XEMACPS_PHYMNTNC_DATA_MASK;
605 * xemacps_mdio_write - Write passed in value to phy register indicated
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
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
617 static int xemacps_mdio_write(struct mii_bus *bus, int mii_id, int phyreg,
620 struct net_local *lp = bus->priv;
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);
630 xemacps_write(lp->baseaddr, XEMACPS_PHYMNTNC_OFFSET, regval);
632 /* wait for end of transfer */
635 ipisr = xemacps_read(lp->baseaddr, XEMACPS_NWSR_OFFSET);
636 } while ((ipisr & XEMACPS_NWSR_MDIOIDLE_MASK) == 0);
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.
648 static int xemacps_mdio_reset(struct mii_bus *bus)
653 static void xemacps_phy_init(struct net_device *ndev)
655 struct net_local *lp = netdev_priv(ndev);
660 regval = xemacps_mdio_read(lp->mii_bus, lp->phy_dev->addr, 20);
661 /* 0x0080 for 100Mbps, 0x0060 for 1Gbps. */
663 xemacps_mdio_write(lp->mii_bus, lp->phy_dev->addr, 20, regval);
665 /* 0x2100 for 100Mbps, 0x0140 for 1Gbps. */
666 xemacps_mdio_write(lp->mii_bus, lp->phy_dev->addr, 0, 0x2100);
668 regval = xemacps_mdio_read(lp->mii_bus, lp->phy_dev->addr, 0);
670 xemacps_mdio_write(lp->mii_bus, lp->phy_dev->addr, 0, regval);
671 for (i = 0; i < 10; i++)
674 dev_dbg(&lp->pdev->dev,
675 "phy register dump, start from 0, four in a row.");
676 for (i = 0; i <= 30; i++) {
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);
682 dev_dbg(&lp->pdev->dev, "\n");
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
692 static void xemacps_set_freq(struct clk *clk, long rate, struct device *dev)
694 rate = clk_round_rate(clk, rate);
696 dev_warn(dev, "round rate failed\n");
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");
706 * xemacps_adjust_link - handles link status changes, such as speed,
707 * duplex, up/down, ...
708 * @ndev: network device
710 static void xemacps_adjust_link(struct net_device *ndev)
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;
719 if ((lp->speed != phydev->speed) ||
720 (lp->duplex != phydev->duplex)) {
721 regval = xemacps_read(lp->baseaddr,
722 XEMACPS_NWCFG_OFFSET);
724 regval |= XEMACPS_NWCFG_FDEN_MASK;
726 regval &= ~XEMACPS_NWCFG_FDEN_MASK;
728 if (phydev->speed == SPEED_1000) {
729 regval |= XEMACPS_NWCFG_1000_MASK;
730 xemacps_set_freq(lp->devclk, 125000000,
733 regval &= ~XEMACPS_NWCFG_1000_MASK;
736 if (phydev->speed == SPEED_100) {
737 regval |= XEMACPS_NWCFG_100_MASK;
738 xemacps_set_freq(lp->devclk, 25000000,
741 regval &= ~XEMACPS_NWCFG_100_MASK;
744 if (phydev->speed == SPEED_10) {
745 xemacps_set_freq(lp->devclk, 2500000,
749 xemacps_write(lp->baseaddr, XEMACPS_NWCFG_OFFSET,
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);
763 xemacps_mdio_write(lp->mii_bus,
764 gmii2rgmii_phydev->addr,
765 XEMACPS_GMII2RGMII_REG_NUM,
766 XEMACPS_GMII2RGMII_SPEED10_FD);
769 lp->speed = phydev->speed;
770 lp->duplex = phydev->duplex;
775 if (phydev->link != lp->link) {
776 lp->link = phydev->link;
782 dev_info(&lp->pdev->dev, "link up (%d/%s)\n",
784 DUPLEX_FULL == phydev->duplex ?
787 dev_info(&lp->pdev->dev, "link down\n");
791 static int xemacps_clk_notifier_cb(struct notifier_block *nb, unsigned long
795 struct clk_notifier_data *ndata = data;
796 struct net_local *nl = to_net_local(nb);
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
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.
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 */
815 case ABORT_RATE_CHANGE:
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
827 static int xemacps_mii_probe(struct net_device *ndev)
829 struct net_local *lp = netdev_priv(ndev);
830 struct phy_device *phydev = NULL;
833 phydev = of_phy_connect(lp->ndev,
835 &xemacps_adjust_link,
839 dev_err(&lp->pdev->dev, "%s: no PHY found\n",
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);
849 phydev->supported &= (PHY_GBIT_FEATURES | SUPPORTED_Pause |
850 SUPPORTED_Asym_Pause);
851 phydev->advertising = phydev->supported;
856 lp->phy_dev = phydev;
858 if (lp->board_type == BOARD_TYPE_ZYNQ)
859 phy_start(lp->phy_dev);
861 xemacps_phy_init(lp->ndev);
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);
866 dev_dbg(&lp->pdev->dev, "attach [%s] phy driver\n",
867 lp->phy_dev->drv->name);
869 if (lp->gmii2rgmii_phy_node) {
870 phydev = of_phy_connect(lp->ndev,
871 lp->gmii2rgmii_phy_node,
875 dev_err(&lp->pdev->dev, "%s: no gmii to rgmii converter found\n",
881 lp->gmii2rgmii_phy_dev = phydev;
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
891 static int xemacps_mii_init(struct net_local *lp)
895 struct device_node *np = of_get_parent(lp->phy_node);
896 struct device_node *npp;
898 lp->mii_bus = mdiobus_alloc();
899 if (lp->mii_bus == NULL) {
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;
911 lp->mii_bus->irq = kmalloc(sizeof(int)*PHY_MAX_ADDR, GFP_KERNEL);
912 if (!lp->mii_bus->irq) {
914 goto err_out_free_mdiobus;
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;
928 err_out_free_mdio_irq:
929 kfree(lp->mii_bus->irq);
930 err_out_free_mdiobus:
931 mdiobus_free(lp->mii_bus);
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
941 static void xemacps_update_hwaddr(struct net_local *lp)
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;
956 if (is_valid_ether_addr(addr)) {
957 memcpy(lp->ndev->dev_addr, addr, sizeof(addr));
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]);
970 * xemacps_set_hwaddr - Set device's MAC address from ndev->dev_addr
971 * @lp: local device instance pointer
973 static void xemacps_set_hwaddr(struct net_local *lp)
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)));
982 regvall = cpu_to_be32(*((u32 *)lp->ndev->dev_addr));
983 regvalh = cpu_to_be16(*((u16 *)(lp->ndev->dev_addr + 4)));
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);
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",
995 (regvall & 0xff), ((regvall >> 8) & 0xff),
996 ((regvall >> 16) & 0xff), (regvall >> 24),
997 (regvalh & 0xff), (regvalh >> 8));
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
1007 static void xemacps_reset_hw(struct net_local *lp)
1010 /* make sure we have the buffer for ourselves */
1013 /* Have a clean start */
1014 xemacps_write(lp->baseaddr, XEMACPS_NWCTRL_OFFSET, 0);
1016 /* Clear statistic counters */
1017 xemacps_write(lp->baseaddr, XEMACPS_NWCTRL_OFFSET,
1018 XEMACPS_NWCTRL_STATCLR_MASK);
1020 /* Clear TX and RX status */
1021 xemacps_write(lp->baseaddr, XEMACPS_TXSR_OFFSET, ~0UL);
1022 xemacps_write(lp->baseaddr, XEMACPS_RXSR_OFFSET, ~0UL);
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);
1030 #ifdef CONFIG_XILINX_PS_EMAC_HWTSTAMP
1033 * xemacps_get_hwticks - get the current value of the GEM internal timer
1034 * @lp: local device instance pointer
1038 xemacps_get_hwticks(struct net_local *lp, u64 *sec, u64 *nsec)
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));
1047 * xemacps_read_clock - read raw cycle counter (to be used by time counter)
1049 static cycle_t xemacps_read_clock(const struct cyclecounter *tc)
1051 struct net_local *lp =
1052 container_of(tc, struct net_local, cycles);
1056 xemacps_get_hwticks(lp, &sec, &nsec);
1057 stamp = (sec << 32) | nsec;
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.
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
1072 static void xemacps_systim_to_hwtstamp(struct net_local *lp,
1073 struct skb_shared_hwtstamps *shhwtstamps,
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);
1086 xemacps_rx_hwtstamp(struct net_local *lp,
1087 struct sk_buff *skb, unsigned msg_type)
1089 u64 time64, sec, nsec;
1092 /* PTP Event Frame packets */
1093 sec = xemacps_read(lp->baseaddr, XEMACPS_PTPERXS_OFFSET);
1094 nsec = xemacps_read(lp->baseaddr, XEMACPS_PTPERXNS_OFFSET);
1096 /* PTP Peer Event Frame packets */
1097 sec = xemacps_read(lp->baseaddr, XEMACPS_PTPPRXS_OFFSET);
1098 nsec = xemacps_read(lp->baseaddr, XEMACPS_PTPPRXNS_OFFSET);
1100 time64 = (sec << 32) | nsec;
1101 xemacps_systim_to_hwtstamp(lp, skb_hwtstamps(skb), time64);
1105 xemacps_tx_hwtstamp(struct net_local *lp,
1106 struct sk_buff *skb, unsigned msg_type)
1108 u64 time64, sec, nsec;
1111 /* PTP Event Frame packets */
1112 sec = xemacps_read(lp->baseaddr, XEMACPS_PTPETXS_OFFSET);
1113 nsec = xemacps_read(lp->baseaddr, XEMACPS_PTPETXNS_OFFSET);
1115 /* PTP Peer Event Frame packets */
1116 sec = xemacps_read(lp->baseaddr, XEMACPS_PTPPTXS_OFFSET);
1117 nsec = xemacps_read(lp->baseaddr, XEMACPS_PTPPTXNS_OFFSET);
1120 time64 = (sec << 32) | nsec;
1121 xemacps_systim_to_hwtstamp(lp, skb_hwtstamps(skb), time64);
1122 skb_tstamp_tx(skb, skb_hwtstamps(skb));
1125 #endif /* CONFIG_XILINX_PS_EMAC_HWTSTAMP */
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
1133 static int xemacps_rx(struct net_local *lp, int budget)
1135 struct xemacps_bd *cur_p;
1137 struct sk_buff *skb;
1138 struct sk_buff *new_skb;
1140 unsigned int numbdfree = 0;
1145 cur_p = &lp->rx_bd[lp->rx_bd_ci];
1146 regval = cur_p->addr;
1148 while (regval & XEMACPS_RXBUF_NEW_MASK) {
1150 /* the packet length */
1151 len = cur_p->ctrl & XEMACPS_RXBUF_LEN_MASK;
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,
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);
1163 skb->ip_summed = lp->ip_summed;
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;
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.
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);
1188 #endif /* CONFIG_XILINX_PS_EMAC_HWTSTAMP */
1191 netif_receive_skb(skb);
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");
1198 /* Get dma handle of skb->data */
1199 new_skb_baddr = (u32) dma_map_single(lp->ndev->dev.parent,
1201 XEMACPS_RX_BUF_SIZE,
1203 cur_p->addr = (cur_p->addr & ~XEMACPS_RXBUF_ADD_MASK)
1205 lp->rx_skb[lp->rx_bd_ci].skb = new_skb;
1206 lp->rx_skb[lp->rx_bd_ci].mapping = new_skb_baddr;
1209 cur_p->addr &= (~XEMACPS_RXBUF_NEW_MASK);
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;
1218 if (numbdfree == budget)
1222 lp->stats.rx_packets += packets;
1223 lp->stats.rx_bytes += size;
1228 * xemacps_rx_poll - NAPI poll routine
1229 * napi: pointer to napi struct
1232 static int xemacps_rx_poll(struct napi_struct *napi, int budget)
1234 struct net_local *lp = container_of(napi, struct net_local, napi);
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)
1249 if (work_done >= budget) {
1250 spin_unlock(&lp->rx_lock);
1254 napi_complete(napi);
1255 /* We disabled RX interrupts in interrupt service
1256 * routine, now it is time to enable it back.
1258 xemacps_write(lp->baseaddr,
1259 XEMACPS_IER_OFFSET, XEMACPS_IXR_FRAMERX_MASK);
1260 spin_unlock(&lp->rx_lock);
1265 * xemacps_tx_poll - tx bd reclaim tasklet handler
1266 * @data: pointer to network interface device structure
1268 static void xemacps_tx_poll(unsigned long data)
1270 struct net_device *ndev = (struct net_device *)data;
1271 struct net_local *lp = netdev_priv(ndev);
1275 unsigned int bdcount = 0;
1276 unsigned int bdpartialcount = 0;
1277 unsigned int sop = 0;
1278 struct xemacps_bd *cur_p;
1281 struct ring_info *rp;
1282 struct sk_buff *skb;
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);
1289 /* This may happen when a buffer becomes complete
1290 * between reading the ISR and scanning the descriptors.
1291 * Nothing to worry about.
1293 if (!(regval & XEMACPS_TXSR_TXCOMPL_MASK))
1296 cur_i = lp->tx_bd_ci;
1297 cur_p = &lp->tx_bd[cur_i];
1298 while (bdcount < XEMACPS_SEND_BD_CNT) {
1300 if (cur_p->ctrl & XEMACPS_TXBUF_USED_MASK)
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.
1314 if ((sop == 1) && (cur_p->ctrl & XEMACPS_TXBUF_LAST_MASK)) {
1320 cur_i = cur_i % XEMACPS_SEND_BD_CNT;
1321 cur_p = &lp->tx_bd[cur_i];
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];
1330 leninbd = cur_p->ctrl & XEMACPS_TXBUF_LEN_MASK;
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;
1338 skb_reset_mac_header(skb);
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);
1350 #endif /* CONFIG_XILINX_PS_EMAC_HWTSTAMP */
1352 dma_unmap_single(&lp->pdev->dev, rp->mapping, leninbd,
1357 /* log tx completed packets and bytes, errors logs
1358 * are in other error counters.
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;
1367 /* Preserve used and wrap bits; clear everything else. */
1368 cur_p->ctrl &= (XEMACPS_TXBUF_USED_MASK |
1369 XEMACPS_TXBUF_WRAP_MASK);
1372 lp->tx_bd_ci = lp->tx_bd_ci % XEMACPS_SEND_BD_CNT;
1373 cur_p = &lp->tx_bd[lp->tx_bd_ci];
1379 if (netif_queue_stopped(ndev))
1380 netif_start_queue(ndev);
1381 spin_unlock(&lp->tx_lock);
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
1390 static irqreturn_t xemacps_interrupt(int irq, void *dev_id)
1392 struct net_device *ndev = dev_id;
1393 struct net_local *lp = netdev_priv(ndev);
1397 regisr = xemacps_read(lp->baseaddr, XEMACPS_ISR_OFFSET);
1398 if (unlikely(!regisr))
1401 xemacps_write(lp->baseaddr, XEMACPS_ISR_OFFSET, regisr);
1404 if (regisr & (XEMACPS_IXR_TXCOMPL_MASK |
1405 XEMACPS_IXR_TX_ERR_MASK)) {
1406 tasklet_schedule(&lp->tx_bdreclaim_tasklet);
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);
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);
1422 regisr = xemacps_read(lp->baseaddr, XEMACPS_ISR_OFFSET);
1423 xemacps_write(lp->baseaddr, XEMACPS_ISR_OFFSET, regisr);
1430 * Free all packets presently in the descriptor rings.
1432 static void xemacps_clean_rings(struct net_local *lp)
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,
1443 dev_kfree_skb(lp->rx_skb[i].skb);
1444 lp->rx_skb[i].skb = NULL;
1445 lp->rx_skb[i].mapping = 0;
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,
1456 dev_kfree_skb(lp->tx_skb[i].skb);
1457 lp->tx_skb[i].skb = NULL;
1458 lp->tx_skb[i].mapping = 0;
1464 * xemacps_descriptor_free - Free allocated TX and RX BDs
1465 * @lp: local device instance pointer
1467 static void xemacps_descriptor_free(struct net_local *lp)
1471 xemacps_clean_rings(lp);
1473 /* kfree(NULL) is safe, no need to check here */
1479 size = XEMACPS_RECV_BD_CNT * sizeof(struct xemacps_bd);
1481 dma_free_coherent(&lp->pdev->dev, size,
1482 lp->rx_bd, lp->rx_bd_dma);
1486 size = XEMACPS_SEND_BD_CNT * sizeof(struct xemacps_bd);
1488 dma_free_coherent(&lp->pdev->dev, size,
1489 lp->tx_bd, lp->tx_bd_dma);
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
1499 static int xemacps_descriptor_init(struct net_local *lp)
1502 struct sk_buff *new_skb;
1505 struct xemacps_bd *cur_p;
1507 /* Reset the indexes which are used for accessing the BDs */
1512 size = XEMACPS_SEND_BD_CNT * sizeof(struct ring_info);
1513 lp->tx_skb = kzalloc(size, GFP_KERNEL);
1516 size = XEMACPS_RECV_BD_CNT * sizeof(struct ring_info);
1517 lp->rx_skb = kzalloc(size, GFP_KERNEL);
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);
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);
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);
1534 if (new_skb == NULL) {
1535 dev_err(&lp->ndev->dev, "alloc_skb error %d\n", i);
1539 /* Get dma handle of skb->data */
1540 new_skb_baddr = (u32) dma_map_single(lp->ndev->dev.parent,
1542 XEMACPS_RX_BUF_SIZE,
1544 cur_p->addr = (cur_p->addr & ~XEMACPS_RXBUF_ADD_MASK)
1546 lp->rx_skb[i].skb = new_skb;
1547 lp->rx_skb[i].mapping = new_skb_baddr;
1550 cur_p = &lp->rx_bd[XEMACPS_RECV_BD_CNT - 1];
1551 /* wrap bit set for last BD, bdptr is moved to last here */
1553 cur_p->addr |= XEMACPS_RXBUF_WRAP_MASK;
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);
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);
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;
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;
1574 for (i = 0; i < XEMACPS_RECV_BD_CNT; i++) {
1575 cur_p = &lp->rx_bd[i];
1577 /* Assign ownership back to hardware */
1578 cur_p->addr &= (~XEMACPS_RXBUF_NEW_MASK);
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);
1592 xemacps_descriptor_free(lp);
1598 #ifdef CONFIG_XILINX_PS_EMAC_HWTSTAMP
1600 * Initialize the GEM Time Stamp Unit
1602 static void xemacps_init_tsu(struct net_local *lp)
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;
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);
1615 /* program the timer increment register with the numer of nanoseconds
1618 * Note: The value is calculated based on the current operating
1621 xemacps_write(lp->baseaddr, XEMACPS_1588INC_OFFSET,
1622 (NS_PER_SEC/lp->ptpenetclk));
1624 timecounter_init(&lp->clock, &lp->cycles,
1625 ktime_to_ns(ktime_get_real()));
1627 * Synchronize our NIC clock against system wall clock.
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);
1635 /* Initialize hwstamp config */
1636 lp->hwtstamp_config.rx_filter = HWTSTAMP_FILTER_NONE;
1637 lp->hwtstamp_config.tx_type = HWTSTAMP_TX_OFF;
1640 #endif /* CONFIG_XILINX_PS_EMAC_HWTSTAMP */
1643 * xemacps_init_hw - Initialize hardware to known good state
1644 * @lp: local device instance pointer
1646 static void xemacps_init_hw(struct net_local *lp)
1650 xemacps_reset_hw(lp);
1651 xemacps_set_hwaddr(lp);
1653 /* network configuration */
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;
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);
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);
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;
1686 regval |= XEMACPS_DMACR_ENDIAN_MASK;
1688 regval |= XEMACPS_DMACR_BLENGTH_INCR16;
1689 xemacps_write(lp->baseaddr, XEMACPS_DMACR_OFFSET, regval);
1691 /* Enable TX, RX and MDIO port */
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);
1698 #ifdef CONFIG_XILINX_PS_EMAC_HWTSTAMP
1699 /* Initialize the Time Stamp Unit */
1700 xemacps_init_tsu(lp);
1703 /* Enable interrupts */
1704 regval = XEMACPS_IXR_ALL_MASK;
1705 xemacps_write(lp->baseaddr, XEMACPS_IER_OFFSET, regval);
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
1713 static void xemacps_resetrx_for_no_rxdata(unsigned long data)
1715 struct net_local *lp = (struct net_local *)data;
1716 unsigned long regctrl;
1717 unsigned long tempcntr;
1718 unsigned long flags;
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);
1735 lp->lastrxfrmscntr = tempcntr;
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
1743 static void xemacps_update_stats(unsigned long data)
1745 struct net_local *lp = (struct net_local *)data;
1746 struct net_device_stats *nstat = &lp->stats;
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);
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));
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
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.
1811 static void xemacps_gen_purpose_timerhandler(unsigned long data)
1813 struct net_local *lp = (struct net_local *)data;
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));
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
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.
1832 * note: if error(s), allocated resources before error require to be
1833 * released or system issues (such as memory) leak might happen.
1835 static int xemacps_open(struct net_device *ndev)
1837 struct net_local *lp = netdev_priv(ndev);
1840 dev_dbg(&lp->pdev->dev, "open\n");
1841 if (!is_valid_ether_addr(ndev->dev_addr))
1842 return -EADDRNOTAVAIL;
1844 rc = xemacps_descriptor_init(lp);
1846 dev_err(&lp->pdev->dev,
1847 "Unable to allocate DMA memory, rc %d\n", rc);
1851 rc = pm_runtime_get(&lp->pdev->dev);
1853 dev_err(&lp->pdev->dev, "pm_runtime_get() failed, rc %d\n", rc);
1854 goto err_free_rings;
1857 xemacps_init_hw(lp);
1858 napi_enable(&lp->napi);
1859 rc = xemacps_mii_probe(ndev);
1861 dev_err(&lp->pdev->dev,
1862 "%s mii_probe fail.\n", lp->mii_bus->name);
1864 mdiobus_unregister(lp->mii_bus);
1865 kfree(lp->mii_bus->irq);
1866 mdiobus_free(lp->mii_bus);
1872 setup_timer(&(lp->gen_purpose_timer), xemacps_gen_purpose_timerhandler,
1874 mod_timer(&(lp->gen_purpose_timer),
1875 jiffies + msecs_to_jiffies(XEAMCPS_GEN_PURPOSE_TIMER_LOAD));
1877 netif_carrier_on(ndev);
1878 netif_start_queue(ndev);
1879 tasklet_enable(&lp->tx_bdreclaim_tasklet);
1884 pm_runtime_put(&lp->pdev->dev);
1886 xemacps_descriptor_free(lp);
1892 * xemacps_close - disable a network interface
1893 * @ndev: network interface device structure
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.
1901 static int xemacps_close(struct net_device *ndev)
1903 struct net_local *lp = netdev_priv(ndev);
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);
1916 if (lp->board_type == BOARD_TYPE_ZYNQ)
1917 phy_disconnect(lp->phy_dev);
1919 if (lp->gmii2rgmii_phy_node)
1920 phy_disconnect(lp->gmii2rgmii_phy_dev);
1922 xemacps_descriptor_free(lp);
1924 pm_runtime_put(&lp->pdev->dev);
1930 * xemacps_reinit_for_txtimeout - work queue scheduled for the tx timeout
1932 * @ndev: queue work structure
1934 static void xemacps_reinit_for_txtimeout(struct work_struct *data)
1936 struct net_local *lp = container_of(data, struct net_local,
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);
1948 if (lp->board_type == BOARD_TYPE_ZYNQ)
1949 phy_stop(lp->phy_dev);
1952 xemacps_descriptor_free(lp);
1953 rc = xemacps_descriptor_init(lp);
1955 dev_err(&lp->pdev->dev,
1956 "Unable to allocate DMA memory, rc %d\n", rc);
1960 xemacps_init_hw(lp);
1966 if (lp->board_type == BOARD_TYPE_ZYNQ)
1967 phy_start(lp->phy_dev);
1969 napi_enable(&lp->napi);
1970 tasklet_enable(&lp->tx_bdreclaim_tasklet);
1971 netif_start_queue(lp->ndev);
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
1979 static void xemacps_tx_timeout(struct net_device *ndev)
1981 struct net_local *lp = netdev_priv(ndev);
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);
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
1994 static int xemacps_set_mac_address(struct net_device *ndev, void *addr)
1996 struct net_local *lp = netdev_priv(ndev);
1997 struct sockaddr *hwaddr = (struct sockaddr *)addr;
1999 if (netif_running(ndev))
2002 if (!is_valid_ether_addr(hwaddr->sa_data))
2003 return -EADDRNOTAVAIL;
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]);
2009 memcpy(ndev->dev_addr, hwaddr->sa_data, ndev->addr_len);
2011 xemacps_set_hwaddr(lp);
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
2021 static int xemacps_start_xmit(struct sk_buff *skb, struct net_device *ndev)
2023 struct net_local *lp = netdev_priv(ndev);
2025 unsigned int nr_frags, len;
2030 struct xemacps_bd *cur_p;
2032 nr_frags = skb_shinfo(skb)->nr_frags + 1;
2033 spin_lock_bh(&lp->tx_lock);
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;
2041 lp->tx_bd_freecnt -= nr_frags;
2042 frag = &skb_shinfo(skb)->frags[0];
2044 for (i = 0; i < nr_frags; i++) {
2046 len = skb_headlen(skb);
2047 mapping = dma_map_single(&lp->pdev->dev, skb->data,
2048 len, DMA_TO_DEVICE);
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);
2058 lp->tx_skb[lp->tx_bd_tail].skb = skb;
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;
2064 /* Preserve only critical status bits. Packet is NOT to be
2065 * committed to hardware at this time.
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;
2078 lp->tx_bd_tail = lp->tx_bd_tail % XEMACPS_SEND_BD_CNT;
2080 cur_p = &(lp->tx_bd[lp->tx_bd_tail]);
2084 regval = xemacps_read(lp->baseaddr, XEMACPS_NWCTRL_OFFSET);
2085 xemacps_write(lp->baseaddr, XEMACPS_NWCTRL_OFFSET,
2086 (regval | XEMACPS_NWCTRL_STARTTX_MASK));
2088 spin_unlock_bh(&lp->tx_lock);
2089 ndev->trans_start = jiffies;
2094 * Get the MAC Address bit from the specified position
2096 static unsigned get_bit(u8 *mac, unsigned bit)
2100 byte = mac[bit / 8];
2101 byte >>= (bit & 0x7);
2108 * Calculate a GEM MAC Address hash index
2110 static unsigned calc_mac_hash(u8 *mac)
2112 int index_bit, mac_bit;
2113 unsigned hash_index;
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))
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
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.
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.
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]
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.
2170 static void xemacps_set_hashtable(struct net_device *ndev)
2172 struct netdev_hw_addr *curr;
2173 u32 regvalh, regvall, hash_index;
2175 struct net_local *lp;
2177 lp = netdev_priv(ndev);
2179 regvalh = regvall = 0;
2181 netdev_for_each_mc_addr(curr, ndev) {
2182 if (!curr) /* end of list */
2184 mc_addr = curr->addr;
2185 hash_index = calc_mac_hash(mc_addr);
2187 if (hash_index >= XEMACPS_MAX_HASH_BITS) {
2188 dev_err(&lp->pdev->dev,
2189 "hash calculation out of range %d\n",
2193 if (hash_index < 32)
2194 regvall |= (1 << hash_index);
2196 regvalh |= (1 << (hash_index - 32));
2199 xemacps_write(lp->baseaddr, XEMACPS_HASHL_OFFSET, regvall);
2200 xemacps_write(lp->baseaddr, XEMACPS_HASHH_OFFSET, regvalh);
2204 * xemacps_set_rx_mode - enable/disable promiscuous and multicast modes
2205 * @ndev: network interface device structure
2207 static void xemacps_set_rx_mode(struct net_device *ndev)
2209 struct net_local *lp = netdev_priv(ndev);
2212 regval = xemacps_read(lp->baseaddr, XEMACPS_NWCFG_OFFSET);
2215 if (ndev->flags & IFF_PROMISC)
2216 regval |= XEMACPS_NWCFG_COPYALLEN_MASK;
2217 if (!(ndev->flags & IFF_PROMISC))
2218 regval &= ~XEMACPS_NWCFG_COPYALLEN_MASK;
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 */
2232 xemacps_write(lp->baseaddr, XEMACPS_HASHL_OFFSET, 0x0);
2233 xemacps_write(lp->baseaddr, XEMACPS_HASHH_OFFSET, 0x0);
2234 regval &= ~XEMACPS_NWCFG_MCASTHASHEN_MASK;
2237 /* broadcast mode */
2238 if (ndev->flags & IFF_BROADCAST)
2239 regval &= ~XEMACPS_NWCFG_BCASTDI_MASK;
2241 if (!(ndev->flags & IFF_BROADCAST))
2242 regval |= XEMACPS_NWCFG_BCASTDI_MASK;
2244 xemacps_write(lp->baseaddr, XEMACPS_NWCFG_OFFSET, regval);
2248 #define MAX_MTU 1500
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.
2255 static int xemacps_change_mtu(struct net_device *ndev, int new_mtu)
2257 if ((new_mtu < MIN_MTU) ||
2258 ((new_mtu + ndev->hard_header_len) > MAX_MTU))
2261 ndev->mtu = new_mtu; /* change mtu in net_device structure */
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.
2273 xemacps_get_settings(struct net_device *ndev, struct ethtool_cmd *ecmd)
2275 struct net_local *lp = netdev_priv(ndev);
2276 struct phy_device *phydev = lp->phy_dev;
2281 return phy_ethtool_gset(phydev, ecmd);
2285 * xemacps_set_settings - set device specific settings.
2286 * Usage: Issue "ethtool -s ethX speed 1000" under linux prompt
2288 * @ndev: network device
2289 * @ecmd: ethtool command structure
2290 * return: 0 on success, negative value if error.
2293 xemacps_set_settings(struct net_device *ndev, struct ethtool_cmd *ecmd)
2295 struct net_local *lp = netdev_priv(ndev);
2296 struct phy_device *phydev = lp->phy_dev;
2301 return phy_ethtool_sset(phydev, ecmd);
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
2311 xemacps_get_drvinfo(struct net_device *ndev, struct ethtool_drvinfo *ed)
2313 struct net_local *lp = netdev_priv(ndev);
2315 memset(ed, 0, sizeof(struct ethtool_drvinfo));
2316 strcpy(ed->driver, lp->pdev->dev.driver->name);
2317 strcpy(ed->version, DRIVER_VERSION);
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
2327 xemacps_get_ringparam(struct net_device *ndev, struct ethtool_ringparam *erp)
2329 memset(erp, 0, sizeof(struct ethtool_ringparam));
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;
2338 * xemacps_get_wol - get device wake on lan status
2339 * Usage: Issue "ethtool ethX" under linux prompt
2340 * @ndev: network device
2344 xemacps_get_wol(struct net_device *ndev, struct ethtool_wolinfo *ewol)
2346 struct net_local *lp = netdev_priv(ndev);
2347 unsigned long flags;
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);
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
2372 * @ndev: network device
2374 * return 0 on success, negative value if not supported
2377 xemacps_set_wol(struct net_device *ndev, struct ethtool_wolinfo *ewol)
2379 struct net_local *lp = netdev_priv(ndev);
2380 unsigned long flags;
2383 if (ewol->wolopts & ~(WAKE_MAGIC | WAKE_ARP | WAKE_UCAST | WAKE_MCAST))
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);
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;
2401 xemacps_write(lp->baseaddr, XEMACPS_WOL_OFFSET, regval);
2402 spin_unlock(&lp->rx_lock);
2403 spin_unlock_irqrestore(&lp->tx_lock, flags);
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
2414 * note: hardware supports only tx flow control
2417 xemacps_get_pauseparam(struct net_device *ndev,
2418 struct ethtool_pauseparam *epauseparm)
2420 struct net_local *lp = netdev_priv(ndev);
2421 unsigned long flags;
2424 epauseparm->autoneg = 0;
2425 epauseparm->rx_pause = 0;
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);
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
2442 * note: hardware supports only tx flow control
2445 xemacps_set_pauseparam(struct net_device *ndev,
2446 struct ethtool_pauseparam *epauseparm)
2448 struct net_local *lp = netdev_priv(ndev);
2449 unsigned long flags;
2452 if (netif_running(ndev)) {
2453 dev_err(&lp->pdev->dev,
2454 "Please stop netif before apply configruation\n");
2458 spin_lock_irqsave(&lp->tx_lock, flags);
2459 spin_lock(&lp->rx_lock);
2460 regval = xemacps_read(lp->baseaddr, XEMACPS_NWCFG_OFFSET);
2462 if (epauseparm->tx_pause)
2463 regval |= XEMACPS_NWCFG_PAUSEEN_MASK;
2464 if (!(epauseparm->tx_pause))
2465 regval &= ~XEMACPS_NWCFG_PAUSEEN_MASK;
2467 xemacps_write(lp->baseaddr, XEMACPS_NWCFG_OFFSET, regval);
2468 spin_unlock(&lp->rx_lock);
2469 spin_unlock_irqrestore(&lp->tx_lock, flags);
2475 * xemacps_get_stats - get device statistic raw data in 64bit mode
2476 * @ndev: network device
2478 static struct net_device_stats
2479 *xemacps_get_stats(struct net_device *ndev)
2481 struct net_local *lp = netdev_priv(ndev);
2482 struct net_device_stats *nstat = &lp->stats;
2484 xemacps_update_stats((unsigned long)lp);
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,
2500 #ifdef CONFIG_XILINX_PS_EMAC_HWTSTAMP
2501 static int xemacps_hwtstamp_ioctl(struct net_device *netdev,
2502 struct ifreq *ifr, int cmd)
2504 struct hwtstamp_config config;
2505 struct net_local *lp;
2508 lp = netdev_priv(netdev);
2510 if (copy_from_user(&config, ifr->ifr_data, sizeof(config)))
2513 /* reserved for future extensions */
2517 if ((config.tx_type != HWTSTAMP_TX_OFF) &&
2518 (config.tx_type != HWTSTAMP_TX_ON))
2521 switch (config.rx_filter) {
2522 case HWTSTAMP_FILTER_NONE:
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));
2546 config.tx_type = HWTSTAMP_TX_ON;
2547 lp->hwtstamp_config = config;
2549 return copy_to_user(ifr->ifr_data, &config, sizeof(config)) ?
2552 #endif /* CONFIG_XILINX_PS_EMAC_HWTSTAMP */
2555 * xemacps_ioctl - ioctl entry point
2556 * @ndev: network device
2557 * @rq: interface request ioctl
2558 * @cmd: command code
2560 * Called when user issues an ioctl request to the network device.
2562 static int xemacps_ioctl(struct net_device *ndev, struct ifreq *rq, int cmd)
2564 struct net_local *lp = netdev_priv(ndev);
2565 struct phy_device *phydev = lp->phy_dev;
2567 if (!netif_running(ndev))
2577 return phy_mii_ioctl(phydev, rq, cmd);
2578 #ifdef CONFIG_XILINX_PS_EMAC_HWTSTAMP
2580 return xemacps_hwtstamp_ioctl(ndev, rq, cmd);
2583 dev_info(&lp->pdev->dev, "ioctl %d not implemented.\n", cmd);
2590 * xemacps_probe - Platform driver probe
2591 * @pdev: Pointer to platform device structure
2593 * Return 0 on success, negative value if error
2595 static int xemacps_probe(struct platform_device *pdev)
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;
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");
2614 ndev = alloc_etherdev(sizeof(*lp));
2616 dev_err(&pdev->dev, "etherdev allocation failed.\n");
2621 SET_NETDEV_DEV(ndev, &pdev->dev);
2623 lp = netdev_priv(ndev);
2627 spin_lock_init(&lp->tx_lock);
2628 spin_lock_init(&lp->rx_lock);
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");
2634 goto err_out_free_netdev;
2637 dev_dbg(&lp->pdev->dev, "BASEADDRESS hw: %p virt: %p\n",
2638 (void *)r_mem->start, lp->baseaddr);
2640 ndev->irq = platform_get_irq(pdev, 0);
2642 rc = request_irq(ndev->irq, xemacps_interrupt, 0,
2645 dev_err(&lp->pdev->dev, "Unable to request IRQ %p, error %d\n",
2647 goto err_out_iounmap;
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);
2657 lp->ip_summed = CHECKSUM_UNNECESSARY;
2658 lp->board_type = BOARD_TYPE_ZYNQ;
2660 rc = register_netdev(ndev);
2662 dev_err(&pdev->dev, "Cannot register net device, aborting.\n");
2663 goto err_out_free_irq;
2666 if (ndev->irq == 54)
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);
2676 if ((strcmp((const char *)prop, "xlnx,zynq-ep107")) == 0)
2677 lp->board_type = BOARD_TYPE_PEEP;
2679 lp->board_type = BOARD_TYPE_ZYNQ;
2681 lp->board_type = BOARD_TYPE_ZYNQ;
2683 if (lp->board_type == BOARD_TYPE_ZYNQ) {
2684 if (lp->enetnum == 0)
2685 lp->aperclk = clk_get_sys("GEM0_APER", NULL);
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;
2693 if (lp->enetnum == 0)
2694 lp->devclk = clk_get_sys("GEM0", NULL);
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;
2703 rc = clk_prepare_enable(lp->aperclk);
2705 dev_err(&pdev->dev, "Unable to enable APER clock.\n");
2706 goto err_out_clk_put;
2708 rc = clk_prepare_enable(lp->devclk);
2710 dev_err(&pdev->dev, "Unable to enable device clock.\n");
2711 goto err_out_clk_dis_aper;
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");
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);
2726 lp->ptpenetclk = (u32)be32_to_cpup(prop);
2728 lp->ptpenetclk = 133333328;
2730 lp->ptpenetclk = PEEP_TSU_CLK;
2734 lp->phy_node = of_parse_phandle(lp->pdev->dev.of_node,
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);
2740 dev_err(&lp->pdev->dev, "error in getting phy i/f\n");
2741 goto err_out_unregister_clk_notifier;
2744 lp->phy_interface = rc;
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);
2752 regval = XEMACPS_NWCTRL_MDEN_MASK;
2753 xemacps_write(lp->baseaddr, XEMACPS_NWCTRL_OFFSET, regval);
2755 rc = xemacps_mii_init(lp);
2757 dev_err(&lp->pdev->dev, "error in xemacps_mii_init\n");
2758 goto err_out_unregister_clk_notifier;
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);
2766 lp->txtimeout_handler_wq = create_singlethread_workqueue(DRIVER_NAME);
2767 INIT_WORK(&lp->txtimeout_reinit, xemacps_reinit_for_txtimeout);
2769 platform_set_drvdata(pdev, ndev);
2770 pm_runtime_set_active(&pdev->dev);
2771 pm_runtime_enable(&pdev->dev);
2773 dev_info(&lp->pdev->dev, "pdev->id %d, baseaddr 0x%08lx, irq %d\n",
2774 pdev->id, ndev->base_addr, ndev->irq);
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);
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);
2790 free_irq(ndev->irq, ndev);
2792 iounmap(lp->baseaddr);
2793 err_out_free_netdev:
2796 platform_set_drvdata(pdev, NULL);
2801 * xemacps_remove - called when platform driver is unregistered
2802 * @pdev: Pointer to the platform device structure
2804 * return: 0 on success
2806 static int __exit xemacps_remove(struct platform_device *pdev)
2808 struct net_device *ndev = platform_get_drvdata(pdev);
2809 struct net_local *lp;
2812 lp = netdev_priv(ndev);
2814 phy_disconnect(lp->phy_dev);
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);
2823 platform_set_drvdata(pdev, NULL);
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);
2836 #ifdef CONFIG_PM_SLEEP
2838 * xemacps_suspend - Suspend event
2839 * @device: Pointer to device structure
2843 static int xemacps_suspend(struct device *device)
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);
2850 netif_device_detach(ndev);
2851 if (!pm_runtime_suspended(device)) {
2852 clk_disable(lp->devclk);
2853 clk_disable(lp->aperclk);
2859 * xemacps_resume - Resume after previous suspend
2860 * @pdev: Pointer to platform device structure
2862 * Returns 0 on success, errno otherwise.
2864 static int xemacps_resume(struct device *device)
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);
2871 if (!pm_runtime_suspended(device)) {
2874 ret = clk_enable(lp->aperclk);
2878 ret = clk_enable(lp->devclk);
2880 clk_disable(lp->aperclk);
2884 netif_device_attach(ndev);
2887 #endif /* ! CONFIG_PM_SLEEP */
2889 #ifdef CONFIG_PM_RUNTIME
2890 static int xemacps_runtime_idle(struct device *dev)
2892 return pm_schedule_suspend(dev, 1);
2895 static int xemacps_runtime_resume(struct device *device)
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);
2903 ret = clk_enable(lp->aperclk);
2907 ret = clk_enable(lp->devclk);
2909 clk_disable(lp->aperclk);
2916 static int xemacps_runtime_suspend(struct device *device)
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);
2923 clk_disable(lp->devclk);
2924 clk_disable(lp->aperclk);
2927 #endif /* CONFIG_PM_RUNTIME */
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)
2934 #define XEMACPS_PM (&xemacps_dev_pm_ops)
2935 #else /* ! CONFIG_PM */
2936 #define XEMACPS_PM NULL
2937 #endif /* ! CONFIG_PM */
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,
2951 static struct of_device_id xemacps_of_match[] = {
2952 { .compatible = "xlnx,ps7-ethernet-1.00.a", },
2953 { /* end of table */}
2955 MODULE_DEVICE_TABLE(of, xemacps_of_match);
2957 static struct platform_driver xemacps_driver = {
2958 .probe = xemacps_probe,
2959 .remove = xemacps_remove,
2961 .name = DRIVER_NAME,
2962 .owner = THIS_MODULE,
2963 .of_match_table = xemacps_of_match,
2968 module_platform_driver(xemacps_driver);
2970 MODULE_AUTHOR("Xilinx, Inc.");
2971 MODULE_DESCRIPTION("Xilinx Ethernet driver");
2972 MODULE_LICENSE("GPL v2");