1
2
3
4
5
6
7
8
9
10
11
12
13#ifndef _EMAC_H_
14#define _EMAC_H_
15
16#include <linux/irqreturn.h>
17#include <linux/netdevice.h>
18#include <linux/clk.h>
19#include <linux/platform_device.h>
20#include "emac-mac.h"
21#include "emac-phy.h"
22#include "emac-sgmii.h"
23
24
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
104
105
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
116#define SOFT_RST 0x1
117
118
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
123
124
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)
149
150
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
155
156
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
162#define STEP_SHFT 0
163
164
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)
173
174
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)
181
182#define EMAC_DEV_ID 0x0040
183
184
185#define SGMII_LN_RSM_START 0x029C
186
187
188#define SGMII_PHY_CMN_CTRL 0x0408
189#define SGMII_PHY_CMN_RESET_CTRL 0x0410
190
191
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
199
200enum emac_clk_id {
201 EMAC_CLK_AXI,
202 EMAC_CLK_CFG_AHB,
203 EMAC_CLK_HIGH_SPEED,
204 EMAC_CLK_MDIO,
205 EMAC_CLK_TX,
206 EMAC_CLK_RX,
207 EMAC_CLK_SYS,
208 EMAC_CLK_CNT
209};
210
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)
217
218#define EMAC_MAX_SETUP_LNK_CYCLE 100
219
220struct emac_stats {
221
222 u64 rx_ok;
223 u64 rx_bcast;
224 u64 rx_mcast;
225 u64 rx_pause;
226 u64 rx_ctrl;
227 u64 rx_fcs_err;
228 u64 rx_len_err;
229 u64 rx_byte_cnt;
230 u64 rx_runt;
231 u64 rx_frag;
232 u64 rx_sz_64;
233 u64 rx_sz_65_127;
234 u64 rx_sz_128_255;
235 u64 rx_sz_256_511;
236 u64 rx_sz_512_1023;
237 u64 rx_sz_1024_1518;
238 u64 rx_sz_1519_max;
239 u64 rx_sz_ov;
240 u64 rx_rxf_ov;
241 u64 rx_align_err;
242 u64 rx_bcast_byte_cnt;
243 u64 rx_mcast_byte_cnt;
244 u64 rx_err_addr;
245 u64 rx_crc_align;
246 u64 rx_jabbers;
247
248
249 u64 tx_ok;
250 u64 tx_bcast;
251 u64 tx_mcast;
252 u64 tx_pause;
253 u64 tx_exc_defer;
254 u64 tx_ctrl;
255 u64 tx_defer;
256 u64 tx_byte_cnt;
257 u64 tx_sz_64;
258 u64 tx_sz_65_127;
259 u64 tx_sz_128_255;
260 u64 tx_sz_256_511;
261 u64 tx_sz_512_1023;
262 u64 tx_sz_1024_1518;
263 u64 tx_sz_1519_max;
264 u64 tx_1_col;
265 u64 tx_2_col;
266 u64 tx_late_col;
267 u64 tx_abort_col;
268 u64 tx_underrun;
269 u64 tx_rd_eop;
270 u64 tx_len_err;
271 u64 tx_trunc;
272 u64 tx_bcast_byte;
273 u64 tx_mcast_byte;
274 u64 tx_col;
275
276 spinlock_t lock;
277};
278
279
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)
289
290#define EMAC_VLAN_TO_TAG(_vlan, _tag) \
291 (_tag = ((((_vlan) >> 8) & 0xFF) | (((_vlan) & 0xFF) << 8)))
292
293#define EMAC_TAG_TO_VLAN(_tag, _vlan) \
294 (_vlan = ((((_tag) >> 8) & 0xFF) | (((_tag) & 0xFF) << 8)))
295
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)
299
300#define EMAC_MAX_ETH_FRAME_SIZE EMAC_MAX_JUMBO_PKT_SIZE
301#define EMAC_MIN_ETH_FRAME_SIZE 68
302
303#define EMAC_DEF_TX_QUEUES 1
304#define EMAC_DEF_RX_QUEUES 1
305
306#define EMAC_MIN_TX_DESCS 128
307#define EMAC_MIN_RX_DESCS 128
308
309#define EMAC_MAX_TX_DESCS 16383
310#define EMAC_MAX_RX_DESCS 2047
311
312#define EMAC_DEF_TX_DESCS 512
313#define EMAC_DEF_RX_DESCS 256
314
315#define EMAC_DEF_RX_IRQ_MOD 250
316#define EMAC_DEF_TX_IRQ_MOD 250
317
318#define EMAC_WATCHDOG_TIME (5 * HZ)
319
320
321#define EMAC_TRY_LINK_TIMEOUT (4 * HZ)
322
323
324
325
326
327struct emac_irq {
328 unsigned int irq;
329 u32 mask;
330};
331
332
333struct emac_adapter {
334 struct net_device *netdev;
335 struct mii_bus *mii_bus;
336 struct phy_device *phydev;
337
338 void __iomem *base;
339 void __iomem *csr;
340
341 struct emac_sgmii phy;
342 struct emac_stats stats;
343
344 struct emac_irq irq;
345 struct clk *clk[EMAC_CLK_CNT];
346
347
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;
354 unsigned int rfd_size;
355 unsigned int tpd_size;
356
357 unsigned int rxbuf_size;
358
359
360
361
362 bool automatic;
363 bool tx_flow_control;
364 bool rx_flow_control;
365
366
367 bool single_pause_mode;
368
369
370 u8 tpd_burst;
371 u8 rfd_burst;
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;
377
378 u32 irq_mod;
379 u32 preamble;
380
381 struct work_struct work_thread;
382
383 u16 msg_enable;
384
385 struct mutex reset_lock;
386};
387
388int emac_reinit_locked(struct emac_adapter *adpt);
389void emac_reg_update32(void __iomem *addr, u32 mask, u32 val);
390
391void emac_set_ethtool_ops(struct net_device *netdev);
392void emac_update_hw_stats(struct emac_adapter *adpt);
393
394#endif
395