1 /* Copyright (c) 2013-2016, The Linux Foundation. All rights reserved.
3 * This program is free software; you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License version 2 and
5 * only version 2 as published by the Free Software Foundation.
7 * This program is distributed in the hope that it will be useful,
8 * but WITHOUT ANY WARRANTY; without even the implied warranty of
9 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10 * GNU General Public License for more details.
16 #include <linux/irqreturn.h>
17 #include <linux/netdevice.h>
18 #include <linux/clk.h>
19 #include <linux/platform_device.h>
22 #include "emac-sgmii.h"
24 /* EMAC base register offsets */
25 #define EMAC_DMA_MAS_CTRL 0x1400
26 #define EMAC_IRQ_MOD_TIM_INIT 0x1408
27 #define EMAC_BLK_IDLE_STS 0x140c
28 #define EMAC_PHY_LINK_DELAY 0x141c
29 #define EMAC_SYS_ALIV_CTRL 0x1434
30 #define EMAC_MAC_CTRL 0x1480
31 #define EMAC_MAC_IPGIFG_CTRL 0x1484
32 #define EMAC_MAC_STA_ADDR0 0x1488
33 #define EMAC_MAC_STA_ADDR1 0x148c
34 #define EMAC_HASH_TAB_REG0 0x1490
35 #define EMAC_HASH_TAB_REG1 0x1494
36 #define EMAC_MAC_HALF_DPLX_CTRL 0x1498
37 #define EMAC_MAX_FRAM_LEN_CTRL 0x149c
38 #define EMAC_WOL_CTRL0 0x14a0
39 #define EMAC_RSS_KEY0 0x14b0
40 #define EMAC_H1TPD_BASE_ADDR_LO 0x14e0
41 #define EMAC_H2TPD_BASE_ADDR_LO 0x14e4
42 #define EMAC_H3TPD_BASE_ADDR_LO 0x14e8
43 #define EMAC_INTER_SRAM_PART9 0x1534
44 #define EMAC_DESC_CTRL_0 0x1540
45 #define EMAC_DESC_CTRL_1 0x1544
46 #define EMAC_DESC_CTRL_2 0x1550
47 #define EMAC_DESC_CTRL_10 0x1554
48 #define EMAC_DESC_CTRL_12 0x1558
49 #define EMAC_DESC_CTRL_13 0x155c
50 #define EMAC_DESC_CTRL_3 0x1560
51 #define EMAC_DESC_CTRL_4 0x1564
52 #define EMAC_DESC_CTRL_5 0x1568
53 #define EMAC_DESC_CTRL_14 0x156c
54 #define EMAC_DESC_CTRL_15 0x1570
55 #define EMAC_DESC_CTRL_16 0x1574
56 #define EMAC_DESC_CTRL_6 0x1578
57 #define EMAC_DESC_CTRL_8 0x1580
58 #define EMAC_DESC_CTRL_9 0x1584
59 #define EMAC_DESC_CTRL_11 0x1588
60 #define EMAC_TXQ_CTRL_0 0x1590
61 #define EMAC_TXQ_CTRL_1 0x1594
62 #define EMAC_TXQ_CTRL_2 0x1598
63 #define EMAC_RXQ_CTRL_0 0x15a0
64 #define EMAC_RXQ_CTRL_1 0x15a4
65 #define EMAC_RXQ_CTRL_2 0x15a8
66 #define EMAC_RXQ_CTRL_3 0x15ac
67 #define EMAC_BASE_CPU_NUMBER 0x15b8
68 #define EMAC_DMA_CTRL 0x15c0
69 #define EMAC_MAILBOX_0 0x15e0
70 #define EMAC_MAILBOX_5 0x15e4
71 #define EMAC_MAILBOX_6 0x15e8
72 #define EMAC_MAILBOX_13 0x15ec
73 #define EMAC_MAILBOX_2 0x15f4
74 #define EMAC_MAILBOX_3 0x15f8
75 #define EMAC_INT_STATUS 0x1600
76 #define EMAC_INT_MASK 0x1604
77 #define EMAC_MAILBOX_11 0x160c
78 #define EMAC_AXI_MAST_CTRL 0x1610
79 #define EMAC_MAILBOX_12 0x1614
80 #define EMAC_MAILBOX_9 0x1618
81 #define EMAC_MAILBOX_10 0x161c
82 #define EMAC_ATHR_HEADER_CTRL 0x1620
83 #define EMAC_RXMAC_STATC_REG0 0x1700
84 #define EMAC_RXMAC_STATC_REG22 0x1758
85 #define EMAC_TXMAC_STATC_REG0 0x1760
86 #define EMAC_TXMAC_STATC_REG24 0x17c0
87 #define EMAC_CLK_GATE_CTRL 0x1814
88 #define EMAC_CORE_HW_VERSION 0x1974
89 #define EMAC_MISC_CTRL 0x1990
90 #define EMAC_MAILBOX_7 0x19e0
91 #define EMAC_MAILBOX_8 0x19e4
92 #define EMAC_IDT_TABLE0 0x1b00
93 #define EMAC_RXMAC_STATC_REG23 0x1bc8
94 #define EMAC_RXMAC_STATC_REG24 0x1bcc
95 #define EMAC_TXMAC_STATC_REG25 0x1bd0
96 #define EMAC_MAILBOX_15 0x1bd4
97 #define EMAC_MAILBOX_16 0x1bd8
98 #define EMAC_INT1_MASK 0x1bf0
99 #define EMAC_INT1_STATUS 0x1bf4
100 #define EMAC_INT2_MASK 0x1bf8
101 #define EMAC_INT2_STATUS 0x1bfc
102 #define EMAC_INT3_MASK 0x1c00
103 #define EMAC_INT3_STATUS 0x1c04
105 /* EMAC_DMA_MAS_CTRL */
106 #define DEV_ID_NUM_BMSK 0x7f000000
107 #define DEV_ID_NUM_SHFT 24
108 #define DEV_REV_NUM_BMSK 0xff0000
109 #define DEV_REV_NUM_SHFT 16
110 #define INT_RD_CLR_EN 0x4000
111 #define IRQ_MODERATOR2_EN 0x800
112 #define IRQ_MODERATOR_EN 0x400
113 #define LPW_CLK_SEL 0x80
114 #define LPW_STATE 0x20
115 #define LPW_MODE 0x10
118 /* EMAC_IRQ_MOD_TIM_INIT */
119 #define IRQ_MODERATOR2_INIT_BMSK 0xffff0000
120 #define IRQ_MODERATOR2_INIT_SHFT 16
121 #define IRQ_MODERATOR_INIT_BMSK 0xffff
122 #define IRQ_MODERATOR_INIT_SHFT 0
124 /* EMAC_INT_STATUS */
125 #define DIS_INT BIT(31)
126 #define PTP_INT BIT(30)
127 #define RFD4_UR_INT BIT(29)
128 #define TX_PKT_INT3 BIT(26)
129 #define TX_PKT_INT2 BIT(25)
130 #define TX_PKT_INT1 BIT(24)
131 #define RX_PKT_INT3 BIT(19)
132 #define RX_PKT_INT2 BIT(18)
133 #define RX_PKT_INT1 BIT(17)
134 #define RX_PKT_INT0 BIT(16)
135 #define TX_PKT_INT BIT(15)
136 #define TXQ_TO_INT BIT(14)
137 #define GPHY_WAKEUP_INT BIT(13)
138 #define GPHY_LINK_DOWN_INT BIT(12)
139 #define GPHY_LINK_UP_INT BIT(11)
140 #define DMAW_TO_INT BIT(10)
141 #define DMAR_TO_INT BIT(9)
142 #define TXF_UR_INT BIT(8)
143 #define RFD3_UR_INT BIT(7)
144 #define RFD2_UR_INT BIT(6)
145 #define RFD1_UR_INT BIT(5)
146 #define RFD0_UR_INT BIT(4)
147 #define RXF_OF_INT BIT(3)
148 #define SW_MAN_INT BIT(2)
151 #define RFD2_PROC_IDX_BMSK 0xfff0000
152 #define RFD2_PROC_IDX_SHFT 16
153 #define RFD2_PROD_IDX_BMSK 0xfff
154 #define RFD2_PROD_IDX_SHFT 0
156 /* EMAC_CORE_HW_VERSION */
157 #define MAJOR_BMSK 0xf0000000
158 #define MAJOR_SHFT 28
159 #define MINOR_BMSK 0xfff0000
160 #define MINOR_SHFT 16
161 #define STEP_BMSK 0xffff
164 /* EMAC_EMAC_WRAPPER_CSR1 */
165 #define TX_INDX_FIFO_SYNC_RST BIT(23)
166 #define TX_TS_FIFO_SYNC_RST BIT(22)
167 #define RX_TS_FIFO2_SYNC_RST BIT(21)
168 #define RX_TS_FIFO1_SYNC_RST BIT(20)
169 #define TX_TS_ENABLE BIT(16)
170 #define DIS_1588_CLKS BIT(11)
171 #define FREQ_MODE BIT(9)
172 #define ENABLE_RRD_TIMESTAMP BIT(3)
174 /* EMAC_EMAC_WRAPPER_CSR2 */
175 #define HDRIVE_BMSK 0x3000
176 #define HDRIVE_SHFT 12
177 #define SLB_EN BIT(9)
178 #define PLB_EN BIT(8)
179 #define WOL_EN BIT(3)
180 #define PHY_RESET BIT(0)
182 #define EMAC_DEV_ID 0x0040
184 /* SGMII v2 per lane registers */
185 #define SGMII_LN_RSM_START 0x029C
187 /* SGMII v2 PHY common registers */
188 #define SGMII_PHY_CMN_CTRL 0x0408
189 #define SGMII_PHY_CMN_RESET_CTRL 0x0410
191 /* SGMII v2 PHY registers per lane */
192 #define SGMII_PHY_LN_OFFSET 0x0400
193 #define SGMII_PHY_LN_LANE_STATUS 0x00DC
194 #define SGMII_PHY_LN_BIST_GEN0 0x008C
195 #define SGMII_PHY_LN_BIST_GEN1 0x0090
196 #define SGMII_PHY_LN_BIST_GEN2 0x0094
197 #define SGMII_PHY_LN_BIST_GEN3 0x0098
198 #define SGMII_PHY_LN_CDR_CTRL1 0x005C
211 #define EMAC_LINK_SPEED_UNKNOWN 0x0
212 #define EMAC_LINK_SPEED_10_HALF BIT(0)
213 #define EMAC_LINK_SPEED_10_FULL BIT(1)
214 #define EMAC_LINK_SPEED_100_HALF BIT(2)
215 #define EMAC_LINK_SPEED_100_FULL BIT(3)
216 #define EMAC_LINK_SPEED_1GB_FULL BIT(5)
218 #define EMAC_MAX_SETUP_LNK_CYCLE 100
222 u64 rx_ok
; /* good packets */
223 u64 rx_bcast
; /* good broadcast packets */
224 u64 rx_mcast
; /* good multicast packets */
225 u64 rx_pause
; /* pause packet */
226 u64 rx_ctrl
; /* control packets other than pause frame. */
227 u64 rx_fcs_err
; /* packets with bad FCS. */
228 u64 rx_len_err
; /* packets with length mismatch */
229 u64 rx_byte_cnt
; /* good bytes count (without FCS) */
230 u64 rx_runt
; /* runt packets */
231 u64 rx_frag
; /* fragment count */
232 u64 rx_sz_64
; /* packets that are 64 bytes */
233 u64 rx_sz_65_127
; /* packets that are 65-127 bytes */
234 u64 rx_sz_128_255
; /* packets that are 128-255 bytes */
235 u64 rx_sz_256_511
; /* packets that are 256-511 bytes */
236 u64 rx_sz_512_1023
; /* packets that are 512-1023 bytes */
237 u64 rx_sz_1024_1518
; /* packets that are 1024-1518 bytes */
238 u64 rx_sz_1519_max
; /* packets that are 1519-MTU bytes*/
239 u64 rx_sz_ov
; /* packets that are >MTU bytes (truncated) */
240 u64 rx_rxf_ov
; /* packets dropped due to RX FIFO overflow */
241 u64 rx_align_err
; /* alignment errors */
242 u64 rx_bcast_byte_cnt
; /* broadcast packets byte count (without FCS) */
243 u64 rx_mcast_byte_cnt
; /* multicast packets byte count (without FCS) */
244 u64 rx_err_addr
; /* packets dropped due to address filtering */
245 u64 rx_crc_align
; /* CRC align errors */
246 u64 rx_jabbers
; /* jabbers */
249 u64 tx_ok
; /* good packets */
250 u64 tx_bcast
; /* good broadcast packets */
251 u64 tx_mcast
; /* good multicast packets */
252 u64 tx_pause
; /* pause packets */
253 u64 tx_exc_defer
; /* packets with excessive deferral */
254 u64 tx_ctrl
; /* control packets other than pause frame */
255 u64 tx_defer
; /* packets that are deferred. */
256 u64 tx_byte_cnt
; /* good bytes count (without FCS) */
257 u64 tx_sz_64
; /* packets that are 64 bytes */
258 u64 tx_sz_65_127
; /* packets that are 65-127 bytes */
259 u64 tx_sz_128_255
; /* packets that are 128-255 bytes */
260 u64 tx_sz_256_511
; /* packets that are 256-511 bytes */
261 u64 tx_sz_512_1023
; /* packets that are 512-1023 bytes */
262 u64 tx_sz_1024_1518
; /* packets that are 1024-1518 bytes */
263 u64 tx_sz_1519_max
; /* packets that are 1519-MTU bytes */
264 u64 tx_1_col
; /* packets single prior collision */
265 u64 tx_2_col
; /* packets with multiple prior collisions */
266 u64 tx_late_col
; /* packets with late collisions */
267 u64 tx_abort_col
; /* packets aborted due to excess collisions */
268 u64 tx_underrun
; /* packets aborted due to FIFO underrun */
269 u64 tx_rd_eop
; /* count of reads beyond EOP */
270 u64 tx_len_err
; /* packets with length mismatch */
271 u64 tx_trunc
; /* packets truncated due to size >MTU */
272 u64 tx_bcast_byte
; /* broadcast packets byte count (without FCS) */
273 u64 tx_mcast_byte
; /* multicast packets byte count (without FCS) */
274 u64 tx_col
; /* collisions */
276 spinlock_t lock
; /* prevent multiple simultaneous readers */
279 /* RSS hstype Definitions */
280 #define EMAC_RSS_HSTYP_IPV4_EN 0x00000001
281 #define EMAC_RSS_HSTYP_TCP4_EN 0x00000002
282 #define EMAC_RSS_HSTYP_IPV6_EN 0x00000004
283 #define EMAC_RSS_HSTYP_TCP6_EN 0x00000008
284 #define EMAC_RSS_HSTYP_ALL_EN (\
285 EMAC_RSS_HSTYP_IPV4_EN |\
286 EMAC_RSS_HSTYP_TCP4_EN |\
287 EMAC_RSS_HSTYP_IPV6_EN |\
288 EMAC_RSS_HSTYP_TCP6_EN)
290 #define EMAC_VLAN_TO_TAG(_vlan, _tag) \
291 (_tag = ((((_vlan) >> 8) & 0xFF) | (((_vlan) & 0xFF) << 8)))
293 #define EMAC_TAG_TO_VLAN(_tag, _vlan) \
294 (_vlan = ((((_tag) >> 8) & 0xFF) | (((_tag) & 0xFF) << 8)))
296 #define EMAC_DEF_RX_BUF_SIZE 1536
297 #define EMAC_MAX_JUMBO_PKT_SIZE (9 * 1024)
298 #define EMAC_MAX_TX_OFFLOAD_THRESH (9 * 1024)
300 #define EMAC_MAX_ETH_FRAME_SIZE EMAC_MAX_JUMBO_PKT_SIZE
301 #define EMAC_MIN_ETH_FRAME_SIZE 68
303 #define EMAC_DEF_TX_QUEUES 1
304 #define EMAC_DEF_RX_QUEUES 1
306 #define EMAC_MIN_TX_DESCS 128
307 #define EMAC_MIN_RX_DESCS 128
309 #define EMAC_MAX_TX_DESCS 16383
310 #define EMAC_MAX_RX_DESCS 2047
312 #define EMAC_DEF_TX_DESCS 512
313 #define EMAC_DEF_RX_DESCS 256
315 #define EMAC_DEF_RX_IRQ_MOD 250
316 #define EMAC_DEF_TX_IRQ_MOD 250
318 #define EMAC_WATCHDOG_TIME (5 * HZ)
320 /* by default check link every 4 seconds */
321 #define EMAC_TRY_LINK_TIMEOUT (4 * HZ)
323 /* emac_irq per-device (per-adapter) irq properties.
325 * @mask mask to use over status register.
332 /* The device's main data structure */
333 struct emac_adapter
{
334 struct net_device
*netdev
;
335 struct mii_bus
*mii_bus
;
336 struct phy_device
*phydev
;
341 struct emac_sgmii phy
;
342 struct emac_stats stats
;
345 struct clk
*clk
[EMAC_CLK_CNT
];
347 /* All Descriptor memory */
348 struct emac_ring_header ring_header
;
349 struct emac_tx_queue tx_q
;
350 struct emac_rx_queue rx_q
;
351 unsigned int tx_desc_cnt
;
352 unsigned int rx_desc_cnt
;
353 unsigned int rrd_size
; /* in quad words */
354 unsigned int rfd_size
; /* in quad words */
355 unsigned int tpd_size
; /* in quad words */
357 unsigned int rxbuf_size
;
359 /* Flow control / pause frames support. If automatic=True, do whatever
360 * the PHY does. Otherwise, use tx_flow_control and rx_flow_control.
363 bool tx_flow_control
;
364 bool rx_flow_control
;
366 /* True == use single-pause-frame mode. */
367 bool single_pause_mode
;
372 unsigned int dmaw_dly_cnt
;
373 unsigned int dmar_dly_cnt
;
374 enum emac_dma_req_block dmar_block
;
375 enum emac_dma_req_block dmaw_block
;
376 enum emac_dma_order dma_order
;
381 struct work_struct work_thread
;
385 struct mutex reset_lock
;
388 int emac_reinit_locked(struct emac_adapter
*adpt
);
389 void emac_reg_update32(void __iomem
*addr
, u32 mask
, u32 val
);
391 void emac_set_ethtool_ops(struct net_device
*netdev
);
392 void emac_update_hw_stats(struct emac_adapter
*adpt
);
394 #endif /* _EMAC_H_ */