docs/how-to-build.md: use proper markup for directory names
[unleashed/tickless.git] / include / sys / nxge / nxge_mac_hw.h
blob29913cba43cd78e6efb2c3bfe5219b1805bd1923
1 /*
2 * CDDL HEADER START
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License (the "License").
6 * You may not use this file except in compliance with the License.
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 * or http://www.opensolaris.org/os/licensing.
10 * See the License for the specific language governing permissions
11 * and limitations under the License.
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
19 * CDDL HEADER END
22 * Copyright 2008 Sun Microsystems, Inc. All rights reserved.
23 * Use is subject to license terms.
26 #ifndef _SYS_MAC_NXGE_MAC_HW_H
27 #define _SYS_MAC_NXGE_MAC_HW_H
29 #pragma ident "%Z%%M% %I% %E% SMI"
31 #ifdef __cplusplus
32 extern "C" {
33 #endif
35 #include <nxge_defs.h>
37 /* -------------------------- From May's template --------------------------- */
39 #define NXGE_1GETHERMIN 255
40 #define NXGE_ETHERMIN 97
41 #define NXGE_MAX_HEADER 250
43 /* Hardware reset */
44 typedef enum {
45 NXGE_TX_DISABLE, /* Disable Tx side */
46 NXGE_RX_DISABLE, /* Disable Rx side */
47 NXGE_CHIP_RESET /* Full chip reset */
48 } nxge_reset_t;
50 #define NXGE_DELAY_AFTER_TXRX 10000 /* 10ms after idling rx/tx */
51 #define NXGE_DELAY_AFTER_RESET 1000 /* 1ms after the reset */
52 #define NXGE_DELAY_AFTER_EE_RESET 10000 /* 10ms after EEPROM reset */
53 #define NXGE_DELAY_AFTER_LINK_RESET 13 /* 13 Us after link reset */
54 #define NXGE_LINK_RESETS 8 /* Max PHY resets to wait for */
55 /* linkup */
57 #define FILTER_M_CTL 0xDCEF1
58 #define HASH_BITS 8
59 #define NMCFILTER_BITS (1 << HASH_BITS)
60 #define HASH_REG_WIDTH 16
61 #define BROADCAST_HASH_WORD 0x0f
62 #define BROADCAST_HASH_BIT 0x8000
63 #define NMCFILTER_REGS NMCFILTER_BITS / HASH_REG_WIDTH
64 /* Number of multicast filter regs */
66 /* -------------------------------------------------------------------------- */
68 #define XMAC_PORT_0 0
69 #define XMAC_PORT_1 1
70 #define BMAC_PORT_0 2
71 #define BMAC_PORT_1 3
73 #define MAC_RESET_WAIT 10 /* usecs */
75 #define MAC_ADDR_REG_MASK 0xFFFF
78 * Neptune port PHY type and Speed encoding.
80 * Per port, 4 bits are reserved for port speed (1G/10G) and 4 bits
81 * are reserved for port PHY type (Copper/Fibre). Bits 0 thru 3 are for port0
82 * speed, bits 4 thru 7 are for port1 speed, bits 8 thru 11 are for port2 speed
83 * and bits 12 thru 15 are for port3 speed. Thus, the first 16 bits hold the
84 * speed encoding for the 4 ports. The next 16 bits (16 thru 31) hold the phy
85 * type encoding for the ports 0 thru 3.
87 * p3phy p2phy p1phy p0phy p3spd p2spd p1spd p0spd
88 * | | | | | | | |
89 * --- --- --- --- --- --- --- ---
90 * / \ / \ / \ / \ / \ / \ / \ / \
91 * 31..28 27..24 23..20 19..16 15..12 11.. 8 7.. 4 3.. 0
94 #define NXGE_PORT_SPD_NONE 0x0
95 #define NXGE_PORT_SPD_1G 0x1
96 #define NXGE_PORT_SPD_10G 0x2
97 #define NXGE_PORT_SPD_RSVD 0x7
99 #define NXGE_PHY_NONE 0x0
100 #define NXGE_PHY_COPPER 0x1
101 #define NXGE_PHY_FIBRE 0x2
102 #define NXGE_PHY_SERDES 0x3
103 #define NXGE_PHY_RGMII_FIBER 0x4
104 #define NXGE_PHY_TN1010 0x5
105 #define NXGE_PHY_RSVD 0x7
107 #define NXGE_PORT_SPD_SHIFT 0
108 #define NXGE_PORT_SPD_MASK 0x0f
110 #define NXGE_PHY_SHIFT 16
111 #define NXGE_PHY_MASK 0x0f0000
114 * "xgc" as a possible value for the device property "phy-type"
115 * was intended for the portmode == PORT_10G_COPPER case. But
116 * the first 10G copper network I/O device available is the
117 * TN1010 based copper XAUI card and we use PORT_10G_TN1010 or
118 * PORT_1G_TN1010 as the portmode, so PORT_10G_COPPER is never
119 * used as portmode. The driver code related to PORT_10G_COPPER
120 * is kept in the driver as a place holder for possble future
121 * 10G copper devices.
123 #define NXGE_PORT_10G_COPPER (NXGE_PORT_SPD_10G | \
124 (NXGE_PHY_COPPER << NXGE_PHY_SHIFT))
126 #define NXGE_PORT_1G_COPPER (NXGE_PORT_SPD_1G | \
127 (NXGE_PHY_COPPER << NXGE_PHY_SHIFT))
128 #define NXGE_PORT_1G_FIBRE (NXGE_PORT_SPD_1G | \
129 (NXGE_PHY_FIBRE << NXGE_PHY_SHIFT))
130 #define NXGE_PORT_10G_FIBRE (NXGE_PORT_SPD_10G | \
131 (NXGE_PHY_FIBRE << NXGE_PHY_SHIFT))
132 #define NXGE_PORT_1G_SERDES (NXGE_PORT_SPD_1G | \
133 (NXGE_PHY_SERDES << NXGE_PHY_SHIFT))
134 #define NXGE_PORT_10G_SERDES (NXGE_PORT_SPD_10G | \
135 (NXGE_PHY_SERDES << NXGE_PHY_SHIFT))
136 #define NXGE_PORT_1G_RGMII_FIBER (NXGE_PORT_SPD_1G | \
137 (NXGE_PHY_RGMII_FIBER << NXGE_PHY_SHIFT))
139 /* The speed of TN1010 will be determined by each nxge instance */
140 #define NXGE_PORT_TN1010 (NXGE_PORT_SPD_NONE | \
141 (NXGE_PHY_TN1010 << NXGE_PHY_SHIFT))
143 #define NXGE_PORT_NONE (NXGE_PORT_SPD_NONE | \
144 (NXGE_PHY_NONE << NXGE_PHY_SHIFT))
145 #define NXGE_PORT_RSVD (NXGE_PORT_SPD_RSVD | \
146 (NXGE_PHY_RSVD << NXGE_PHY_SHIFT))
148 #define NXGE_PORT_TYPE_MASK (NXGE_PORT_SPD_MASK | NXGE_PHY_MASK)
150 /* number of bits used for phy/spd encoding per port */
151 #define NXGE_PORT_TYPE_SHIFT 4
153 /* Network Modes */
155 typedef enum nxge_network_mode {
156 NET_2_10GE_FIBER = 1,
157 NET_2_10GE_COPPER,
158 NET_1_10GE_FIBER_3_1GE_COPPER,
159 NET_1_10GE_COPPER_3_1GE_COPPER,
160 NET_1_10GE_FIBER_3_1GE_FIBER,
161 NET_1_10GE_COPPER_3_1GE_FIBER,
162 NET_2_1GE_FIBER_2_1GE_COPPER,
163 NET_QGE_FIBER,
164 NET_QGE_COPPER
165 } nxge_network_mode_t;
167 typedef enum nxge_port {
168 PORT_TYPE_XMAC = 1,
169 PORT_TYPE_BMAC,
170 PORT_TYPE_LOGICAL
171 } nxge_port_t;
173 typedef enum nxge_port_mode {
174 PORT_1G_COPPER = 1,
175 PORT_1G_FIBER,
176 PORT_10G_COPPER,
177 PORT_10G_FIBER,
178 PORT_10G_SERDES, /* Port0 or 1 of Alonso or Monza */
179 PORT_1G_SERDES, /* Port0 or 1 of Alonso or Monza */
180 PORT_1G_RGMII_FIBER, /* Port2 or 3 of Alonso or ARTM */
181 PORT_HSP_MODE,
182 PORT_LOGICAL,
183 PORT_1G_TN1010, /* Teranetics PHY in 1G mode */
184 PORT_10G_TN1010 /* Teranetics PHY in 10G mode */
185 } nxge_port_mode_t;
187 typedef enum nxge_linkchk_mode {
188 LINKCHK_INTR = 1,
189 LINKCHK_TIMER
190 } nxge_linkchk_mode_t;
192 typedef enum {
193 LINK_INTR_STOP,
194 LINK_INTR_START
195 } link_intr_enable_t, *link_intr_enable_pt;
197 typedef enum {
198 LINK_MONITOR_STOP,
199 LINK_MONITOR_START,
200 LINK_MONITOR_STOPPING
201 } link_mon_enable_t, *link_mon_enable_pt;
203 typedef enum {
204 NO_XCVR,
205 INT_MII_XCVR,
206 EXT_MII_XCVR,
207 PCS_XCVR,
208 XPCS_XCVR,
209 HSP_XCVR,
210 LOGICAL_XCVR
211 } xcvr_inuse_t;
213 /* macros for port offset calculations */
215 #define PORT_1_OFFSET 0x6000
216 #define PORT_GT_1_OFFSET 0x4000
218 /* XMAC address macros */
220 #define XMAC_ADDR_OFFSET_0 0
221 #define XMAC_ADDR_OFFSET_1 0x6000
223 #define XMAC_ADDR_OFFSET(port_num)\
224 (XMAC_ADDR_OFFSET_0 + ((port_num) * PORT_1_OFFSET))
226 #define XMAC_REG_ADDR(port_num, reg)\
227 (FZC_MAC + (XMAC_ADDR_OFFSET(port_num)) + (reg))
229 #define XMAC_PORT_ADDR(port_num)\
230 (FZC_MAC + XMAC_ADDR_OFFSET(port_num))
232 /* BMAC address macros */
234 #define BMAC_ADDR_OFFSET_2 0x0C000
235 #define BMAC_ADDR_OFFSET_3 0x10000
237 #define BMAC_ADDR_OFFSET(port_num)\
238 (BMAC_ADDR_OFFSET_2 + (((port_num) - 2) * PORT_GT_1_OFFSET))
240 #define BMAC_REG_ADDR(port_num, reg)\
241 (FZC_MAC + (BMAC_ADDR_OFFSET(port_num)) + (reg))
243 #define BMAC_PORT_ADDR(port_num)\
244 (FZC_MAC + BMAC_ADDR_OFFSET(port_num))
246 /* PCS address macros */
248 #define PCS_ADDR_OFFSET_0 0x04000
249 #define PCS_ADDR_OFFSET_1 0x0A000
250 #define PCS_ADDR_OFFSET_2 0x0E000
251 #define PCS_ADDR_OFFSET_3 0x12000
253 #define PCS_ADDR_OFFSET(port_num)\
254 ((port_num <= 1) ? \
255 (PCS_ADDR_OFFSET_0 + (port_num) * PORT_1_OFFSET) : \
256 (PCS_ADDR_OFFSET_2 + (((port_num) - 2) * PORT_GT_1_OFFSET)))
258 #define PCS_REG_ADDR(port_num, reg)\
259 (FZC_MAC + (PCS_ADDR_OFFSET((port_num)) + (reg)))
261 #define PCS_PORT_ADDR(port_num)\
262 (FZC_MAC + (PCS_ADDR_OFFSET(port_num)))
264 /* XPCS address macros */
266 #define XPCS_ADDR_OFFSET_0 0x02000
267 #define XPCS_ADDR_OFFSET_1 0x08000
268 #define XPCS_ADDR_OFFSET(port_num)\
269 (XPCS_ADDR_OFFSET_0 + ((port_num) * PORT_1_OFFSET))
271 #define XPCS_ADDR(port_num, reg)\
272 (FZC_MAC + (XPCS_ADDR_OFFSET((port_num)) + (reg)))
274 #define XPCS_PORT_ADDR(port_num)\
275 (FZC_MAC + (XPCS_ADDR_OFFSET(port_num)))
277 /* ESR address macro */
278 #define ESR_ADDR_OFFSET 0x14000
279 #define ESR_ADDR(reg)\
280 (FZC_MAC + (ESR_ADDR_OFFSET) + (reg))
282 /* MIF address macros */
283 #define MIF_ADDR_OFFSET 0x16000
284 #define MIF_ADDR(reg)\
285 (FZC_MAC + (MIF_ADDR_OFFSET) + (reg))
287 /* BMAC registers offset */
288 #define BTXMAC_SW_RST_REG 0x000 /* TX MAC software reset */
289 #define BRXMAC_SW_RST_REG 0x008 /* RX MAC software reset */
290 #define MAC_SEND_PAUSE_REG 0x010 /* send pause command */
291 #define BTXMAC_STATUS_REG 0x020 /* TX MAC status */
292 #define BRXMAC_STATUS_REG 0x028 /* RX MAC status */
293 #define BMAC_CTRL_STAT_REG 0x030 /* MAC control status */
294 #define BTXMAC_STAT_MSK_REG 0x040 /* TX MAC mask */
295 #define BRXMAC_STAT_MSK_REG 0x048 /* RX MAC mask */
296 #define BMAC_C_S_MSK_REG 0x050 /* MAC control mask */
297 #define TXMAC_CONFIG_REG 0x060 /* TX MAC config */
298 /* cfg register bitmap */
300 typedef union _btxmac_config_t {
301 uint64_t value;
303 struct {
304 #if defined(_BIG_ENDIAN)
305 uint32_t msw; /* Most significant word */
306 uint32_t lsw; /* Least significant word */
307 #elif defined(_LITTLE_ENDIAN)
308 uint32_t lsw; /* Least significant word */
309 uint32_t msw; /* Most significant word */
310 #endif
311 } val;
312 struct {
313 #if defined(_BIG_ENDIAN)
314 uint32_t w1;
315 #endif
316 struct {
317 #if defined(_BIT_FIELDS_HTOL)
318 uint32_t rsrvd : 22;
319 uint32_t hdx_ctrl2 : 1;
320 uint32_t no_fcs : 1;
321 uint32_t hdx_ctrl : 7;
322 uint32_t txmac_enable : 1;
323 #elif defined(_BIT_FIELDS_LTOH)
324 uint32_t txmac_enable : 1;
325 uint32_t hdx_ctrl : 7;
326 uint32_t no_fcs : 1;
327 uint32_t hdx_ctrl2 : 1;
328 uint32_t rsrvd : 22;
329 #endif
330 } w0;
332 #if defined(_LITTLE_ENDIAN)
333 uint32_t w1;
334 #endif
335 } bits;
336 } btxmac_config_t, *p_btxmac_config_t;
338 #define RXMAC_CONFIG_REG 0x068 /* RX MAC config */
340 typedef union _brxmac_config_t {
341 uint64_t value;
343 struct {
344 #if defined(_BIG_ENDIAN)
345 uint32_t msw; /* Most significant word */
346 uint32_t lsw; /* Least significant word */
347 #elif defined(_LITTLE_ENDIAN)
348 uint32_t lsw; /* Least significant word */
349 uint32_t msw; /* Most significant word */
350 #endif
351 } val;
352 struct {
353 #if defined(_BIG_ENDIAN)
354 uint32_t w1;
355 #endif
356 struct {
357 #if defined(_BIT_FIELDS_HTOL)
358 uint32_t rsrvd : 20;
359 uint32_t mac_reg_sw_test : 2;
360 uint32_t mac2ipp_pkt_cnt_en : 1;
361 uint32_t rx_crs_extend_en : 1;
362 uint32_t error_chk_dis : 1;
363 uint32_t addr_filter_en : 1;
364 uint32_t hash_filter_en : 1;
365 uint32_t promiscuous_group : 1;
366 uint32_t promiscuous : 1;
367 uint32_t strip_fcs : 1;
368 uint32_t strip_pad : 1;
369 uint32_t rxmac_enable : 1;
370 #elif defined(_BIT_FIELDS_LTOH)
371 uint32_t rxmac_enable : 1;
372 uint32_t strip_pad : 1;
373 uint32_t strip_fcs : 1;
374 uint32_t promiscuous : 1;
375 uint32_t promiscuous_group : 1;
376 uint32_t hash_filter_en : 1;
377 uint32_t addr_filter_en : 1;
378 uint32_t error_chk_dis : 1;
379 uint32_t rx_crs_extend_en : 1;
380 uint32_t mac2ipp_pkt_cnt_en : 1;
381 uint32_t mac_reg_sw_test : 2;
382 uint32_t rsrvd : 20;
383 #endif
384 } w0;
386 #if defined(_LITTLE_ENDIAN)
387 uint32_t w1;
388 #endif
389 } bits;
390 } brxmac_config_t, *p_brxmac_config_t;
392 #define MAC_CTRL_CONFIG_REG 0x070 /* MAC control config */
393 #define MAC_XIF_CONFIG_REG 0x078 /* XIF config */
395 typedef union _bxif_config_t {
396 uint64_t value;
398 struct {
399 #if defined(_BIG_ENDIAN)
400 uint32_t msw; /* Most significant word */
401 uint32_t lsw; /* Least significant word */
402 #elif defined(_LITTLE_ENDIAN)
403 uint32_t lsw; /* Least significant word */
404 uint32_t msw; /* Most significant word */
405 #endif
406 } val;
407 struct {
408 #if defined(_BIG_ENDIAN)
409 uint32_t w1;
410 #endif
411 struct {
412 #if defined(_BIT_FIELDS_HTOL)
413 uint32_t rsrvd2 : 24;
414 uint32_t sel_clk_25mhz : 1;
415 uint32_t led_polarity : 1;
416 uint32_t force_led_on : 1;
417 uint32_t used : 1;
418 uint32_t gmii_mode : 1;
419 uint32_t rsrvd : 1;
420 uint32_t loopback : 1;
421 uint32_t tx_output_en : 1;
422 #elif defined(_BIT_FIELDS_LTOH)
423 uint32_t tx_output_en : 1;
424 uint32_t loopback : 1;
425 uint32_t rsrvd : 1;
426 uint32_t gmii_mode : 1;
427 uint32_t used : 1;
428 uint32_t force_led_on : 1;
429 uint32_t led_polarity : 1;
430 uint32_t sel_clk_25mhz : 1;
431 uint32_t rsrvd2 : 24;
432 #endif
433 } w0;
435 #if defined(_LITTLE_ENDIAN)
436 uint32_t w1;
437 #endif
438 } bits;
439 } bxif_config_t, *p_bxif_config_t;
441 #define BMAC_MIN_REG 0x0a0 /* min frame size */
442 #define BMAC_MAX_REG 0x0a8 /* max frame size reg */
443 #define MAC_PA_SIZE_REG 0x0b0 /* num of preamble bytes */
444 #define MAC_CTRL_TYPE_REG 0x0c8 /* type field of MAC ctrl */
445 #define BMAC_ADDR0_REG 0x100 /* MAC unique ad0 reg (HI 0) */
446 #define BMAC_ADDR1_REG 0x108 /* MAC unique ad1 reg */
447 #define BMAC_ADDR2_REG 0x110 /* MAC unique ad2 reg */
448 #define BMAC_ADDR3_REG 0x118 /* MAC alt ad0 reg (HI 1) */
449 #define BMAC_ADDR4_REG 0x120 /* MAC alt ad0 reg */
450 #define BMAC_ADDR5_REG 0x128 /* MAC alt ad0 reg */
451 #define BMAC_ADDR6_REG 0x130 /* MAC alt ad1 reg (HI 2) */
452 #define BMAC_ADDR7_REG 0x138 /* MAC alt ad1 reg */
453 #define BMAC_ADDR8_REG 0x140 /* MAC alt ad1 reg */
454 #define BMAC_ADDR9_REG 0x148 /* MAC alt ad2 reg (HI 3) */
455 #define BMAC_ADDR10_REG 0x150 /* MAC alt ad2 reg */
456 #define BMAC_ADDR11_REG 0x158 /* MAC alt ad2 reg */
457 #define BMAC_ADDR12_REG 0x160 /* MAC alt ad3 reg (HI 4) */
458 #define BMAC_ADDR13_REG 0x168 /* MAC alt ad3 reg */
459 #define BMAC_ADDR14_REG 0x170 /* MAC alt ad3 reg */
460 #define BMAC_ADDR15_REG 0x178 /* MAC alt ad4 reg (HI 5) */
461 #define BMAC_ADDR16_REG 0x180 /* MAC alt ad4 reg */
462 #define BMAC_ADDR17_REG 0x188 /* MAC alt ad4 reg */
463 #define BMAC_ADDR18_REG 0x190 /* MAC alt ad5 reg (HI 6) */
464 #define BMAC_ADDR19_REG 0x198 /* MAC alt ad5 reg */
465 #define BMAC_ADDR20_REG 0x1a0 /* MAC alt ad5 reg */
466 #define BMAC_ADDR21_REG 0x1a8 /* MAC alt ad6 reg (HI 7) */
467 #define BMAC_ADDR22_REG 0x1b0 /* MAC alt ad6 reg */
468 #define BMAC_ADDR23_REG 0x1b8 /* MAC alt ad6 reg */
469 #define MAC_FC_ADDR0_REG 0x268 /* FC frame addr0 (HI 0, p3) */
470 #define MAC_FC_ADDR1_REG 0x270 /* FC frame addr1 */
471 #define MAC_FC_ADDR2_REG 0x278 /* FC frame addr2 */
472 #define MAC_ADDR_FILT0_REG 0x298 /* bits [47:32] (HI 0, p2) */
473 #define MAC_ADDR_FILT1_REG 0x2a0 /* bits [31:16] */
474 #define MAC_ADDR_FILT2_REG 0x2a8 /* bits [15:0] */
475 #define MAC_ADDR_FILT12_MASK_REG 0x2b0 /* addr filter 2 & 1 mask */
476 #define MAC_ADDR_FILT00_MASK_REG 0x2b8 /* addr filter 0 mask */
477 #define MAC_HASH_TBL0_REG 0x2c0 /* hash table 0 reg */
478 #define MAC_HASH_TBL1_REG 0x2c8 /* hash table 1 reg */
479 #define MAC_HASH_TBL2_REG 0x2d0 /* hash table 2 reg */
480 #define MAC_HASH_TBL3_REG 0x2d8 /* hash table 3 reg */
481 #define MAC_HASH_TBL4_REG 0x2e0 /* hash table 4 reg */
482 #define MAC_HASH_TBL5_REG 0x2e8 /* hash table 5 reg */
483 #define MAC_HASH_TBL6_REG 0x2f0 /* hash table 6 reg */
484 #define MAC_HASH_TBL7_REG 0x2f8 /* hash table 7 reg */
485 #define MAC_HASH_TBL8_REG 0x300 /* hash table 8 reg */
486 #define MAC_HASH_TBL9_REG 0x308 /* hash table 9 reg */
487 #define MAC_HASH_TBL10_REG 0x310 /* hash table 10 reg */
488 #define MAC_HASH_TBL11_REG 0x318 /* hash table 11 reg */
489 #define MAC_HASH_TBL12_REG 0x320 /* hash table 12 reg */
490 #define MAC_HASH_TBL13_REG 0x328 /* hash table 13 reg */
491 #define MAC_HASH_TBL14_REG 0x330 /* hash table 14 reg */
492 #define MAC_HASH_TBL15_REG 0x338 /* hash table 15 reg */
493 #define RXMAC_FRM_CNT_REG 0x370 /* receive frame counter */
494 #define MAC_LEN_ER_CNT_REG 0x378 /* length error counter */
495 #define BMAC_AL_ER_CNT_REG 0x380 /* alignment error counter */
496 #define BMAC_CRC_ER_CNT_REG 0x388 /* FCS error counter */
497 #define BMAC_CD_VIO_CNT_REG 0x390 /* RX code violation err */
498 #define BMAC_SM_REG 0x3a0 /* (ro) state machine reg */
499 #define BMAC_ALTAD_CMPEN_REG 0x3f8 /* Alt addr compare enable */
500 #define BMAC_HOST_INF0_REG 0x400 /* Host info */
501 /* (own da, add filter, fc) */
502 #define BMAC_HOST_INF1_REG 0x408 /* Host info (alt ad 0) */
503 #define BMAC_HOST_INF2_REG 0x410 /* Host info (alt ad 1) */
504 #define BMAC_HOST_INF3_REG 0x418 /* Host info (alt ad 2) */
505 #define BMAC_HOST_INF4_REG 0x420 /* Host info (alt ad 3) */
506 #define BMAC_HOST_INF5_REG 0x428 /* Host info (alt ad 4) */
507 #define BMAC_HOST_INF6_REG 0x430 /* Host info (alt ad 5) */
508 #define BMAC_HOST_INF7_REG 0x438 /* Host info (alt ad 6) */
509 #define BMAC_HOST_INF8_REG 0x440 /* Host info (hash hit, miss) */
510 #define BTXMAC_BYTE_CNT_REG 0x448 /* Tx byte count */
511 #define BTXMAC_FRM_CNT_REG 0x450 /* frame count */
512 #define BRXMAC_BYTE_CNT_REG 0x458 /* Rx byte count */
513 /* x ranges from 0 to 6 (BMAC_MAX_ALT_ADDR_ENTRY - 1) */
514 #define BMAC_ALT_ADDR0N_REG_ADDR(x) (BMAC_ADDR3_REG + (x) * 24)
515 #define BMAC_ALT_ADDR1N_REG_ADDR(x) (BMAC_ADDR3_REG + 8 + (x) * 24)
516 #define BMAC_ALT_ADDR2N_REG_ADDR(x) (BMAC_ADDR3_REG + 0x10 + (x) * 24)
517 #define BMAC_HASH_TBLN_REG_ADDR(x) (MAC_HASH_TBL0_REG + (x) * 8)
518 #define BMAC_HOST_INFN_REG_ADDR(x) (BMAC_HOST_INF0_REG + (x) * 8)
520 /* XMAC registers offset */
521 #define XTXMAC_SW_RST_REG 0x000 /* XTX MAC soft reset */
522 #define XRXMAC_SW_RST_REG 0x008 /* XRX MAC soft reset */
523 #define XTXMAC_STATUS_REG 0x020 /* XTX MAC status */
524 #define XRXMAC_STATUS_REG 0x028 /* XRX MAC status */
525 #define XMAC_CTRL_STAT_REG 0x030 /* Control / Status */
526 #define XTXMAC_STAT_MSK_REG 0x040 /* XTX MAC Status mask */
527 #define XRXMAC_STAT_MSK_REG 0x048 /* XRX MAC Status mask */
528 #define XMAC_C_S_MSK_REG 0x050 /* Control / Status mask */
529 #define XMAC_CONFIG_REG 0x060 /* Configuration */
531 /* xmac config bit fields */
532 typedef union _xmac_cfg_t {
533 uint64_t value;
535 struct {
536 #if defined(_BIG_ENDIAN)
537 uint32_t msw; /* Most significant word */
538 uint32_t lsw; /* Least significant word */
539 #elif defined(_LITTLE_ENDIAN)
540 uint32_t lsw; /* Least significant word */
541 uint32_t msw; /* Most significant word */
542 #endif
543 } val;
544 struct {
545 #if defined(_BIG_ENDIAN)
546 uint32_t w1;
547 #endif
548 struct {
549 #if defined(_BIT_FIELDS_HTOL)
550 uint32_t sel_clk_25mhz : 1;
551 uint32_t pcs_bypass : 1;
552 uint32_t xpcs_bypass : 1;
553 uint32_t mii_gmii_mode : 2;
554 uint32_t lfs_disable : 1;
555 uint32_t loopback : 1;
556 uint32_t tx_output_en : 1;
557 uint32_t sel_por_clk_src : 1;
558 uint32_t led_polarity : 1;
559 uint32_t force_led_on : 1;
560 uint32_t pass_fctl_frames : 1;
561 uint32_t recv_pause_en : 1;
562 uint32_t mac2ipp_pkt_cnt_en : 1;
563 uint32_t strip_crc : 1;
564 uint32_t addr_filter_en : 1;
565 uint32_t hash_filter_en : 1;
566 uint32_t code_viol_chk_dis : 1;
567 uint32_t reserved_mcast : 1;
568 uint32_t rx_crc_chk_dis : 1;
569 uint32_t error_chk_dis : 1;
570 uint32_t promisc_grp : 1;
571 uint32_t promiscuous : 1;
572 uint32_t rx_mac_enable : 1;
573 uint32_t warning_msg_en : 1;
574 uint32_t used : 3;
575 uint32_t always_no_crc : 1;
576 uint32_t var_min_ipg_en : 1;
577 uint32_t strech_mode : 1;
578 uint32_t tx_enable : 1;
579 #elif defined(_BIT_FIELDS_LTOH)
580 uint32_t tx_enable : 1;
581 uint32_t strech_mode : 1;
582 uint32_t var_min_ipg_en : 1;
583 uint32_t always_no_crc : 1;
584 uint32_t used : 3;
585 uint32_t warning_msg_en : 1;
586 uint32_t rx_mac_enable : 1;
587 uint32_t promiscuous : 1;
588 uint32_t promisc_grp : 1;
589 uint32_t error_chk_dis : 1;
590 uint32_t rx_crc_chk_dis : 1;
591 uint32_t reserved_mcast : 1;
592 uint32_t code_viol_chk_dis : 1;
593 uint32_t hash_filter_en : 1;
594 uint32_t addr_filter_en : 1;
595 uint32_t strip_crc : 1;
596 uint32_t mac2ipp_pkt_cnt_en : 1;
597 uint32_t recv_pause_en : 1;
598 uint32_t pass_fctl_frames : 1;
599 uint32_t force_led_on : 1;
600 uint32_t led_polarity : 1;
601 uint32_t sel_por_clk_src : 1;
602 uint32_t tx_output_en : 1;
603 uint32_t loopback : 1;
604 uint32_t lfs_disable : 1;
605 uint32_t mii_gmii_mode : 2;
606 uint32_t xpcs_bypass : 1;
607 uint32_t pcs_bypass : 1;
608 uint32_t sel_clk_25mhz : 1;
609 #endif
610 } w0;
612 #if defined(_LITTLE_ENDIAN)
613 uint32_t w1;
614 #endif
615 } bits;
616 } xmac_cfg_t, *p_xmac_cfg_t;
618 #define XMAC_IPG_REG 0x080 /* Inter-Packet-Gap */
619 #define XMAC_MIN_REG 0x088 /* min frame size register */
620 #define XMAC_MAX_REG 0x090 /* max frame/burst size */
621 #define XMAC_ADDR0_REG 0x0a0 /* [47:32] of MAC addr (HI17) */
622 #define XMAC_ADDR1_REG 0x0a8 /* [31:16] of MAC addr */
623 #define XMAC_ADDR2_REG 0x0b0 /* [15:0] of MAC addr */
624 #define XRXMAC_BT_CNT_REG 0x100 /* bytes received / 8 */
625 #define XRXMAC_BC_FRM_CNT_REG 0x108 /* good BC frames received */
626 #define XRXMAC_MC_FRM_CNT_REG 0x110 /* good MC frames received */
627 #define XRXMAC_FRAG_CNT_REG 0x118 /* frag frames rejected */
628 #define XRXMAC_HIST_CNT1_REG 0x120 /* 64 bytes frames */
629 #define XRXMAC_HIST_CNT2_REG 0x128 /* 65-127 bytes frames */
630 #define XRXMAC_HIST_CNT3_REG 0x130 /* 128-255 bytes frames */
631 #define XRXMAC_HIST_CNT4_REG 0x138 /* 256-511 bytes frames */
632 #define XRXMAC_HIST_CNT5_REG 0x140 /* 512-1023 bytes frames */
633 #define XRXMAC_HIST_CNT6_REG 0x148 /* 1024-1522 bytes frames */
634 #define XRXMAC_MPSZER_CNT_REG 0x150 /* frames > maxframesize */
635 #define XRXMAC_CRC_ER_CNT_REG 0x158 /* frames failed CRC */
636 #define XRXMAC_CD_VIO_CNT_REG 0x160 /* frames with code vio */
637 #define XRXMAC_AL_ER_CNT_REG 0x168 /* frames with align error */
638 #define XTXMAC_FRM_CNT_REG 0x170 /* tx frames */
639 #define XTXMAC_BYTE_CNT_REG 0x178 /* tx bytes / 8 */
640 #define XMAC_LINK_FLT_CNT_REG 0x180 /* link faults */
641 #define XRXMAC_HIST_CNT7_REG 0x188 /* MAC2IPP/>1523 bytes frames */
642 #define XMAC_SM_REG 0x1a8 /* State machine */
643 #define XMAC_INTERN1_REG 0x1b0 /* internal signals for diag */
644 #define XMAC_INTERN2_REG 0x1b8 /* internal signals for diag */
645 #define XMAC_ADDR_CMPEN_REG 0x208 /* alt MAC addr check */
646 #define XMAC_ADDR3_REG 0x218 /* alt MAC addr 0 (HI 0) */
647 #define XMAC_ADDR4_REG 0x220 /* alt MAC addr 0 */
648 #define XMAC_ADDR5_REG 0x228 /* alt MAC addr 0 */
649 #define XMAC_ADDR6_REG 0x230 /* alt MAC addr 1 (HI 1) */
650 #define XMAC_ADDR7_REG 0x238 /* alt MAC addr 1 */
651 #define XMAC_ADDR8_REG 0x240 /* alt MAC addr 1 */
652 #define XMAC_ADDR9_REG 0x248 /* alt MAC addr 2 (HI 2) */
653 #define XMAC_ADDR10_REG 0x250 /* alt MAC addr 2 */
654 #define XMAC_ADDR11_REG 0x258 /* alt MAC addr 2 */
655 #define XMAC_ADDR12_REG 0x260 /* alt MAC addr 3 (HI 3) */
656 #define XMAC_ADDR13_REG 0x268 /* alt MAC addr 3 */
657 #define XMAC_ADDR14_REG 0x270 /* alt MAC addr 3 */
658 #define XMAC_ADDR15_REG 0x278 /* alt MAC addr 4 (HI 4) */
659 #define XMAC_ADDR16_REG 0x280 /* alt MAC addr 4 */
660 #define XMAC_ADDR17_REG 0x288 /* alt MAC addr 4 */
661 #define XMAC_ADDR18_REG 0x290 /* alt MAC addr 5 (HI 5) */
662 #define XMAC_ADDR19_REG 0x298 /* alt MAC addr 5 */
663 #define XMAC_ADDR20_REG 0x2a0 /* alt MAC addr 5 */
664 #define XMAC_ADDR21_REG 0x2a8 /* alt MAC addr 6 (HI 6) */
665 #define XMAC_ADDR22_REG 0x2b0 /* alt MAC addr 6 */
666 #define XMAC_ADDR23_REG 0x2b8 /* alt MAC addr 6 */
667 #define XMAC_ADDR24_REG 0x2c0 /* alt MAC addr 7 (HI 7) */
668 #define XMAC_ADDR25_REG 0x2c8 /* alt MAC addr 7 */
669 #define XMAC_ADDR26_REG 0x2d0 /* alt MAC addr 7 */
670 #define XMAC_ADDR27_REG 0x2d8 /* alt MAC addr 8 (HI 8) */
671 #define XMAC_ADDR28_REG 0x2e0 /* alt MAC addr 8 */
672 #define XMAC_ADDR29_REG 0x2e8 /* alt MAC addr 8 */
673 #define XMAC_ADDR30_REG 0x2f0 /* alt MAC addr 9 (HI 9) */
674 #define XMAC_ADDR31_REG 0x2f8 /* alt MAC addr 9 */
675 #define XMAC_ADDR32_REG 0x300 /* alt MAC addr 9 */
676 #define XMAC_ADDR33_REG 0x308 /* alt MAC addr 10 (HI 10) */
677 #define XMAC_ADDR34_REG 0x310 /* alt MAC addr 10 */
678 #define XMAC_ADDR35_REG 0x318 /* alt MAC addr 10 */
679 #define XMAC_ADDR36_REG 0x320 /* alt MAC addr 11 (HI 11) */
680 #define XMAC_ADDR37_REG 0x328 /* alt MAC addr 11 */
681 #define XMAC_ADDR38_REG 0x330 /* alt MAC addr 11 */
682 #define XMAC_ADDR39_REG 0x338 /* alt MAC addr 12 (HI 12) */
683 #define XMAC_ADDR40_REG 0x340 /* alt MAC addr 12 */
684 #define XMAC_ADDR41_REG 0x348 /* alt MAC addr 12 */
685 #define XMAC_ADDR42_REG 0x350 /* alt MAC addr 13 (HI 13) */
686 #define XMAC_ADDR43_REG 0x358 /* alt MAC addr 13 */
687 #define XMAC_ADDR44_REG 0x360 /* alt MAC addr 13 */
688 #define XMAC_ADDR45_REG 0x368 /* alt MAC addr 14 (HI 14) */
689 #define XMAC_ADDR46_REG 0x370 /* alt MAC addr 14 */
690 #define XMAC_ADDR47_REG 0x378 /* alt MAC addr 14 */
691 #define XMAC_ADDR48_REG 0x380 /* alt MAC addr 15 (HI 15) */
692 #define XMAC_ADDR49_REG 0x388 /* alt MAC addr 15 */
693 #define XMAC_ADDR50_REG 0x390 /* alt MAC addr 15 */
694 #define XMAC_ADDR_FILT0_REG 0x818 /* [47:32] addr filter (HI18) */
695 #define XMAC_ADDR_FILT1_REG 0x820 /* [31:16] of addr filter */
696 #define XMAC_ADDR_FILT2_REG 0x828 /* [15:0] of addr filter */
697 #define XMAC_ADDR_FILT12_MASK_REG 0x830 /* addr filter 2 & 1 mask */
698 #define XMAC_ADDR_FILT0_MASK_REG 0x838 /* addr filter 0 mask */
699 #define XMAC_HASH_TBL0_REG 0x840 /* hash table 0 reg */
700 #define XMAC_HASH_TBL1_REG 0x848 /* hash table 1 reg */
701 #define XMAC_HASH_TBL2_REG 0x850 /* hash table 2 reg */
702 #define XMAC_HASH_TBL3_REG 0x858 /* hash table 3 reg */
703 #define XMAC_HASH_TBL4_REG 0x860 /* hash table 4 reg */
704 #define XMAC_HASH_TBL5_REG 0x868 /* hash table 5 reg */
705 #define XMAC_HASH_TBL6_REG 0x870 /* hash table 6 reg */
706 #define XMAC_HASH_TBL7_REG 0x878 /* hash table 7 reg */
707 #define XMAC_HASH_TBL8_REG 0x880 /* hash table 8 reg */
708 #define XMAC_HASH_TBL9_REG 0x888 /* hash table 9 reg */
709 #define XMAC_HASH_TBL10_REG 0x890 /* hash table 10 reg */
710 #define XMAC_HASH_TBL11_REG 0x898 /* hash table 11 reg */
711 #define XMAC_HASH_TBL12_REG 0x8a0 /* hash table 12 reg */
712 #define XMAC_HASH_TBL13_REG 0x8a8 /* hash table 13 reg */
713 #define XMAC_HASH_TBL14_REG 0x8b0 /* hash table 14 reg */
714 #define XMAC_HASH_TBL15_REG 0x8b8 /* hash table 15 reg */
715 #define XMAC_HOST_INF0_REG 0x900 /* Host info 0 (alt ad 0) */
716 #define XMAC_HOST_INF1_REG 0x908 /* Host info 1 (alt ad 1) */
717 #define XMAC_HOST_INF2_REG 0x910 /* Host info 2 (alt ad 2) */
718 #define XMAC_HOST_INF3_REG 0x918 /* Host info 3 (alt ad 3) */
719 #define XMAC_HOST_INF4_REG 0x920 /* Host info 4 (alt ad 4) */
720 #define XMAC_HOST_INF5_REG 0x928 /* Host info 5 (alt ad 5) */
721 #define XMAC_HOST_INF6_REG 0x930 /* Host info 6 (alt ad 6) */
722 #define XMAC_HOST_INF7_REG 0x938 /* Host info 7 (alt ad 7) */
723 #define XMAC_HOST_INF8_REG 0x940 /* Host info 8 (alt ad 8) */
724 #define XMAC_HOST_INF9_REG 0x948 /* Host info 9 (alt ad 9) */
725 #define XMAC_HOST_INF10_REG 0x950 /* Host info 10 (alt ad 10) */
726 #define XMAC_HOST_INF11_REG 0x958 /* Host info 11 (alt ad 11) */
727 #define XMAC_HOST_INF12_REG 0x960 /* Host info 12 (alt ad 12) */
728 #define XMAC_HOST_INF13_REG 0x968 /* Host info 13 (alt ad 13) */
729 #define XMAC_HOST_INF14_REG 0x970 /* Host info 14 (alt ad 14) */
730 #define XMAC_HOST_INF15_REG 0x978 /* Host info 15 (alt ad 15) */
731 #define XMAC_HOST_INF16_REG 0x980 /* Host info 16 (hash hit) */
732 #define XMAC_HOST_INF17_REG 0x988 /* Host info 17 (own da) */
733 #define XMAC_HOST_INF18_REG 0x990 /* Host info 18 (filter hit) */
734 #define XMAC_HOST_INF19_REG 0x998 /* Host info 19 (fc hit) */
735 #define XMAC_PA_DATA0_REG 0xb80 /* preamble [31:0] */
736 #define XMAC_PA_DATA1_REG 0xb88 /* preamble [63:32] */
737 #define XMAC_DEBUG_SEL_REG 0xb90 /* debug select */
738 #define XMAC_TRAINING_VECT_REG 0xb98 /* training vector */
739 /* x ranges from 0 to 15 (XMAC_MAX_ALT_ADDR_ENTRY - 1) */
740 #define XMAC_ALT_ADDR0N_REG_ADDR(x) (XMAC_ADDR3_REG + (x) * 24)
741 #define XMAC_ALT_ADDR1N_REG_ADDR(x) (XMAC_ADDR3_REG + 8 + (x) * 24)
742 #define XMAC_ALT_ADDR2N_REG_ADDR(x) (XMAC_ADDR3_REG + 16 + (x) * 24)
743 #define XMAC_HASH_TBLN_REG_ADDR(x) (XMAC_HASH_TBL0_REG + (x) * 8)
744 #define XMAC_HOST_INFN_REG_ADDR(x) (XMAC_HOST_INF0_REG + (x) * 8)
746 /* MIF registers offset */
747 #define MIF_BB_MDC_REG 0 /* MIF bit-bang clock */
748 #define MIF_BB_MDO_REG 0x008 /* MIF bit-bang data */
749 #define MIF_BB_MDO_EN_REG 0x010 /* MIF bit-bang output en */
750 #define MIF_OUTPUT_FRAME_REG 0x018 /* MIF frame/output reg */
751 #define MIF_CONFIG_REG 0x020 /* MIF config reg */
752 #define MIF_POLL_STATUS_REG 0x028 /* MIF poll status reg */
753 #define MIF_POLL_MASK_REG 0x030 /* MIF poll mask reg */
754 #define MIF_STATE_MACHINE_REG 0x038 /* MIF state machine reg */
755 #define MIF_STATUS_REG 0x040 /* MIF status reg */
756 #define MIF_MASK_REG 0x048 /* MIF mask reg */
759 /* PCS registers offset */
760 #define PCS_MII_CTRL_REG 0 /* PCS MII control reg */
761 #define PCS_MII_STATUS_REG 0x008 /* PCS MII status reg */
762 #define PCS_MII_ADVERT_REG 0x010 /* PCS MII advertisement */
763 #define PCS_MII_LPA_REG 0x018 /* link partner ability */
764 #define PCS_CONFIG_REG 0x020 /* PCS config reg */
765 #define PCS_STATE_MACHINE_REG 0x028 /* PCS state machine */
766 #define PCS_INTR_STATUS_REG 0x030 /* PCS interrupt status */
767 #define PCS_DATAPATH_MODE_REG 0x0a0 /* datapath mode reg */
768 #define PCS_PACKET_COUNT_REG 0x0c0 /* PCS packet counter */
770 #define XPCS_CTRL_1_REG 0 /* Control */
771 #define XPCS_STATUS_1_REG 0x008
772 #define XPCS_DEV_ID_REG 0x010 /* 32bits IEEE manufacture ID */
773 #define XPCS_SPEED_ABILITY_REG 0x018
774 #define XPCS_DEV_IN_PKG_REG 0x020
775 #define XPCS_CTRL_2_REG 0x028
776 #define XPCS_STATUS_2_REG 0x030
777 #define XPCS_PKG_ID_REG 0x038 /* Package ID */
778 #define XPCS_STATUS_REG 0x040
779 #define XPCS_TEST_CTRL_REG 0x048
780 #define XPCS_CFG_VENDOR_1_REG 0x050
781 #define XPCS_DIAG_VENDOR_2_REG 0x058
782 #define XPCS_MASK_1_REG 0x060
783 #define XPCS_PKT_CNTR_REG 0x068
784 #define XPCS_TX_STATE_MC_REG 0x070
785 #define XPCS_DESKEW_ERR_CNTR_REG 0x078
786 #define XPCS_SYM_ERR_CNTR_L0_L1_REG 0x080
787 #define XPCS_SYM_ERR_CNTR_L2_L3_REG 0x088
788 #define XPCS_TRAINING_VECTOR_REG 0x090
790 /* ESR registers offset */
791 #define ESR_RESET_REG 0
792 #define ESR_CONFIG_REG 0x008
793 #define ESR_0_PLL_CONFIG_REG 0x010
794 #define ESR_0_CONTROL_REG 0x018
795 #define ESR_0_TEST_CONFIG_REG 0x020
796 #define ESR_1_PLL_CONFIG_REG 0x028
797 #define ESR_1_CONTROL_REG 0x030
798 #define ESR_1_TEST_CONFIG_REG 0x038
799 #define ESR_ENET_RGMII_CFG_REG 0x040
800 #define ESR_INTERNAL_SIGNALS_REG 0x800
801 #define ESR_DEBUG_SEL_REG 0x808
804 /* Reset Register */
805 #define MAC_SEND_PAUSE_TIME_MASK 0x0000FFFF /* value of pause time */
806 #define MAC_SEND_PAUSE_SEND 0x00010000 /* send pause flow ctrl */
808 /* Tx MAC Status Register */
809 #define MAC_TX_FRAME_XMIT 0x00000001 /* successful tx frame */
810 #define MAC_TX_UNDERRUN 0x00000002 /* starvation in xmit */
811 #define MAC_TX_MAX_PACKET_ERR 0x00000004 /* TX frame exceeds max */
812 #define MAC_TX_BYTE_CNT_EXP 0x00000400 /* TX byte cnt overflow */
813 #define MAC_TX_FRAME_CNT_EXP 0x00000800 /* Tx frame cnt overflow */
815 /* Rx MAC Status Register */
816 #define MAC_RX_FRAME_RECV 0x00000001 /* successful rx frame */
817 #define MAC_RX_OVERFLOW 0x00000002 /* RX FIFO overflow */
818 #define MAC_RX_FRAME_COUNT 0x00000004 /* rx frame cnt rollover */
819 #define MAC_RX_ALIGN_ERR 0x00000008 /* alignment err rollover */
820 #define MAC_RX_CRC_ERR 0x00000010 /* crc error cnt rollover */
821 #define MAC_RX_LEN_ERR 0x00000020 /* length err cnt rollover */
822 #define MAC_RX_VIOL_ERR 0x00000040 /* code vio err rollover */
823 #define MAC_RX_BYTE_CNT_EXP 0x00000080 /* RX MAC byte rollover */
825 /* MAC Control Status Register */
826 #define MAC_CTRL_PAUSE_RECEIVED 0x00000001 /* successful pause frame */
827 #define MAC_CTRL_PAUSE_STATE 0x00000002 /* notpause-->pause */
828 #define MAC_CTRL_NOPAUSE_STATE 0x00000004 /* pause-->notpause */
829 #define MAC_CTRL_PAUSE_TIME_MASK 0xFFFF0000 /* value of pause time */
830 #define MAC_CTRL_PAUSE_TIME_SHIFT 16
832 /* Tx MAC Configuration Register */
833 #define MAC_TX_CFG_TXMAC_ENABLE 0x00000001 /* enable TX MAC. */
834 #define MAC_TX_CFG_NO_FCS 0x00000100 /* TX not generate CRC */
836 /* Rx MAC Configuration Register */
837 #define MAC_RX_CFG_RXMAC_ENABLE 0x00000001 /* enable RX MAC */
838 #define MAC_RX_CFG_STRIP_PAD 0x00000002 /* not supported, set to 0 */
839 #define MAC_RX_CFG_STRIP_FCS 0x00000004 /* strip last 4bytes (CRC) */
840 #define MAC_RX_CFG_PROMISC 0x00000008 /* promisc mode enable */
841 #define MAC_RX_CFG_PROMISC_GROUP 0x00000010 /* accept all MC frames */
842 #define MAC_RX_CFG_HASH_FILTER_EN 0x00000020 /* use hash table */
843 #define MAC_RX_CFG_ADDR_FILTER_EN 0x00000040 /* use address filter */
844 #define MAC_RX_CFG_DISABLE_DISCARD 0x00000080 /* do not set abort bit */
845 #define MAC_RX_MAC2IPP_PKT_CNT_EN 0x00000200 /* rx pkt cnt -> BMAC-IPP */
846 #define MAC_RX_MAC_REG_RW_TEST_MASK 0x00000c00 /* BMAC reg RW test */
847 #define MAC_RX_MAC_REG_RW_TEST_SHIFT 10
849 /* MAC Control Configuration Register */
850 #define MAC_CTRL_CFG_SEND_PAUSE_EN 0x00000001 /* send pause flow ctrl */
851 #define MAC_CTRL_CFG_RECV_PAUSE_EN 0x00000002 /* receive pause flow ctrl */
852 #define MAC_CTRL_CFG_PASS_CTRL 0x00000004 /* accept MAC ctrl pkts */
854 /* MAC XIF Configuration Register */
855 #define MAC_XIF_TX_OUTPUT_EN 0x00000001 /* enable Tx output driver */
856 #define MAC_XIF_MII_INT_LOOPBACK 0x00000002 /* loopback GMII xmit data */
857 #define MAC_XIF_GMII_MODE 0x00000008 /* operates with GMII clks */
858 #define MAC_XIF_LINK_LED 0x00000020 /* LINKLED# active (low) */
859 #define MAC_XIF_LED_POLARITY 0x00000040 /* LED polarity */
860 #define MAC_XIF_SEL_CLK_25MHZ 0x00000080 /* Select 10/100Mbps */
862 /* MAC IPG Registers */
863 #define BMAC_MIN_FRAME_MASK 0x3FF /* 10-bit reg */
865 /* MAC Max Frame Size Register */
866 #define BMAC_MAX_BURST_MASK 0x3FFF0000 /* max burst size [30:16] */
867 #define BMAC_MAX_BURST_SHIFT 16
868 #define BMAC_MAX_FRAME_MASK 0x00007FFF /* max frame size [14:0] */
869 #define BMAC_MAX_FRAME_SHIFT 0
871 /* MAC Preamble size register */
872 #define BMAC_PA_SIZE_MASK 0x000003FF
873 /* # of preable bytes TxMAC sends at the beginning of each frame */
876 * mac address registers:
877 * register contains comparison
878 * -------- -------- ----------
879 * 0 16 MSB of primary MAC addr [47:32] of DA field
880 * 1 16 middle bits "" [31:16] of DA field
881 * 2 16 LSB "" [15:0] of DA field
882 * 3*x 16MSB of alt MAC addr 1-7 [47:32] of DA field
883 * 4*x 16 middle bits "" [31:16]
884 * 5*x 16 LSB "" [15:0]
885 * 42 16 MSB of MAC CTRL addr [47:32] of DA.
886 * 43 16 middle bits "" [31:16]
887 * 44 16 LSB "" [15:0]
888 * MAC CTRL addr must be the reserved multicast addr for MAC CTRL frames.
889 * if there is a match, MAC will set the bit for alternative address
890 * filter pass [15]
892 * here is the map of registers given MAC address notation: a:b:c:d:e:f
893 * ab cd ef
894 * primary addr reg 2 reg 1 reg 0
895 * alt addr 1 reg 5 reg 4 reg 3
896 * alt addr x reg 5*x reg 4*x reg 3*x
897 * | | | |
898 * | | | |
899 * alt addr 7 reg 23 reg 22 reg 21
900 * ctrl addr reg 44 reg 43 reg 42
903 #define BMAC_ALT_ADDR_BASE 0x118
904 #define BMAC_MAX_ALT_ADDR_ENTRY 7 /* 7 alternate MAC addr */
905 #define BMAC_MAX_ADDR_ENTRY (BMAC_MAX_ALT_ADDR_ENTRY + 1)
907 /* hash table registers */
908 #define MAC_MAX_HASH_ENTRY 16
910 /* 27-bit register has the current state for key state machines in the MAC */
911 #define MAC_SM_RLM_MASK 0x07800000
912 #define MAC_SM_RLM_SHIFT 23
913 #define MAC_SM_RX_FC_MASK 0x00700000
914 #define MAC_SM_RX_FC_SHIFT 20
915 #define MAC_SM_TLM_MASK 0x000F0000
916 #define MAC_SM_TLM_SHIFT 16
917 #define MAC_SM_ENCAP_SM_MASK 0x0000F000
918 #define MAC_SM_ENCAP_SM_SHIFT 12
919 #define MAC_SM_TX_REQ_MASK 0x00000C00
920 #define MAC_SM_TX_REQ_SHIFT 10
921 #define MAC_SM_TX_FC_MASK 0x000003C0
922 #define MAC_SM_TX_FC_SHIFT 6
923 #define MAC_SM_FIFO_WRITE_SEL_MASK 0x00000038
924 #define MAC_SM_FIFO_WRITE_SEL_SHIFT 3
925 #define MAC_SM_TX_FIFO_EMPTY_MASK 0x00000007
926 #define MAC_SM_TX_FIFO_EMPTY_SHIFT 0
928 #define BMAC_ADDR0_CMPEN 0x00000001
929 #define BMAC_ADDRN_CMPEN(x) (BMAC_ADDR0_CMP_EN << (x))
931 /* MAC Host Info Table Registers */
932 #define BMAC_MAX_HOST_INFO_ENTRY 9 /* 9 host entries */
935 * ********************* XMAC registers *********************************
938 /* Reset Register */
939 #define XTXMAC_SOFT_RST 0x00000001 /* XTX MAC software reset */
940 #define XTXMAC_REG_RST 0x00000002 /* XTX MAC registers reset */
941 #define XRXMAC_SOFT_RST 0x00000001 /* XRX MAC software reset */
942 #define XRXMAC_REG_RST 0x00000002 /* XRX MAC registers reset */
944 /* XTX MAC Status Register */
945 #define XMAC_TX_FRAME_XMIT 0x00000001 /* successful tx frame */
946 #define XMAC_TX_UNDERRUN 0x00000002 /* starvation in xmit */
947 #define XMAC_TX_MAX_PACKET_ERR 0x00000004 /* XTX frame exceeds max */
948 #define XMAC_TX_OVERFLOW 0x00000008 /* XTX byte cnt overflow */
949 #define XMAC_TX_FIFO_XFR_ERR 0x00000010 /* xtlm state mach error */
950 #define XMAC_TX_BYTE_CNT_EXP 0x00000400 /* XTX byte cnt overflow */
951 #define XMAC_TX_FRAME_CNT_EXP 0x00000800 /* XTX frame cnt overflow */
953 /* XRX MAC Status Register */
954 #define XMAC_RX_FRAME_RCVD 0x00000001 /* successful rx frame */
955 #define XMAC_RX_OVERFLOW 0x00000002 /* RX FIFO overflow */
956 #define XMAC_RX_UNDERFLOW 0x00000004 /* RX FIFO underrun */
957 #define XMAC_RX_CRC_ERR_CNT_EXP 0x00000008 /* crc error cnt rollover */
958 #define XMAC_RX_LEN_ERR_CNT_EXP 0x00000010 /* length err cnt rollover */
959 #define XMAC_RX_VIOL_ERR_CNT_EXP 0x00000020 /* code vio err rollover */
960 #define XMAC_RX_OCT_CNT_EXP 0x00000040 /* XRX MAC byte rollover */
961 #define XMAC_RX_HST_CNT1_EXP 0x00000080 /* XRX MAC hist1 rollover */
962 #define XMAC_RX_HST_CNT2_EXP 0x00000100 /* XRX MAC hist2 rollover */
963 #define XMAC_RX_HST_CNT3_EXP 0x00000200 /* XRX MAC hist3 rollover */
964 #define XMAC_RX_HST_CNT4_EXP 0x00000400 /* XRX MAC hist4 rollover */
965 #define XMAC_RX_HST_CNT5_EXP 0x00000800 /* XRX MAC hist5 rollover */
966 #define XMAC_RX_HST_CNT6_EXP 0x00001000 /* XRX MAC hist6 rollover */
967 #define XMAC_RX_BCAST_CNT_EXP 0x00002000 /* XRX BC cnt rollover */
968 #define XMAC_RX_MCAST_CNT_EXP 0x00004000 /* XRX MC cnt rollover */
969 #define XMAC_RX_FRAG_CNT_EXP 0x00008000 /* fragment cnt rollover */
970 #define XMAC_RX_ALIGNERR_CNT_EXP 0x00010000 /* framealign err rollover */
971 #define XMAC_RX_LINK_FLT_CNT_EXP 0x00020000 /* link fault cnt rollover */
972 #define XMAC_RX_REMOTE_FLT_DET 0x00040000 /* Remote Fault detected */
973 #define XMAC_RX_LOCAL_FLT_DET 0x00080000 /* Local Fault detected */
974 #define XMAC_RX_HST_CNT7_EXP 0x00100000 /* XRX MAC hist7 rollover */
977 #define XMAC_CTRL_PAUSE_RCVD 0x00000001 /* successful pause frame */
978 #define XMAC_CTRL_PAUSE_STATE 0x00000002 /* notpause-->pause */
979 #define XMAC_CTRL_NOPAUSE_STATE 0x00000004 /* pause-->notpause */
980 #define XMAC_CTRL_PAUSE_TIME_MASK 0xFFFF0000 /* value of pause time */
981 #define XMAC_CTRL_PAUSE_TIME_SHIFT 16
983 /* XMAC Configuration Register */
984 #define XMAC_CONFIG_TX_BIT_MASK 0x000000ff /* bits [7:0] */
985 #define XMAC_CONFIG_RX_BIT_MASK 0x001fff00 /* bits [20:8] */
986 #define XMAC_CONFIG_XIF_BIT_MASK 0xffe00000 /* bits [31:21] */
988 /* XTX MAC config bits */
989 #define XMAC_TX_CFG_TX_ENABLE 0x00000001 /* enable XTX MAC */
990 #define XMAC_TX_CFG_STRETCH_MD 0x00000002 /* WAN application */
991 #define XMAC_TX_CFG_VAR_MIN_IPG_EN 0x00000004 /* Transmit pkts < minpsz */
992 #define XMAC_TX_CFG_ALWAYS_NO_CRC 0x00000008 /* No CRC generated */
994 #define XMAC_WARNING_MSG_ENABLE 0x00000080 /* Sim warning msg enable */
996 /* XRX MAC config bits */
997 #define XMAC_RX_CFG_RX_ENABLE 0x00000100 /* enable XRX MAC */
998 #define XMAC_RX_CFG_PROMISC 0x00000200 /* promisc mode enable */
999 #define XMAC_RX_CFG_PROMISC_GROUP 0x00000400 /* accept all MC frames */
1000 #define XMAC_RX_CFG_ERR_CHK_DISABLE 0x00000800 /* do not set abort bit */
1001 #define XMAC_RX_CFG_CRC_CHK_DISABLE 0x00001000 /* disable CRC logic */
1002 #define XMAC_RX_CFG_RESERVED_MCAST 0x00002000 /* reserved MCaddr compare */
1003 #define XMAC_RX_CFG_CD_VIO_CHK 0x00004000 /* rx code violation chk */
1004 #define XMAC_RX_CFG_HASH_FILTER_EN 0x00008000 /* use hash table */
1005 #define XMAC_RX_CFG_ADDR_FILTER_EN 0x00010000 /* use alt addr filter */
1006 #define XMAC_RX_CFG_STRIP_CRC 0x00020000 /* strip last 4bytes (CRC) */
1007 #define XMAC_RX_MAC2IPP_PKT_CNT_EN 0x00040000 /* histo_cntr7 cnt mode */
1008 #define XMAC_RX_CFG_RX_PAUSE_EN 0x00080000 /* receive pause flow ctrl */
1009 #define XMAC_RX_CFG_PASS_FLOW_CTRL 0x00100000 /* accept MAC ctrl pkts */
1012 /* MAC transceiver (XIF) configuration registers */
1014 #define XMAC_XIF_FORCE_LED_ON 0x00200000 /* Force Link LED on */
1015 #define XMAC_XIF_LED_POLARITY 0x00400000 /* LED polarity */
1016 #define XMAC_XIF_SEL_POR_CLK_SRC 0x00800000 /* Select POR clk src */
1017 #define XMAC_XIF_TX_OUTPUT_EN 0x01000000 /* enable MII/GMII modes */
1018 #define XMAC_XIF_LOOPBACK 0x02000000 /* loopback xmac xgmii tx */
1019 #define XMAC_XIF_LFS_DISABLE 0x04000000 /* disable link fault sig */
1020 #define XMAC_XIF_MII_MODE_MASK 0x18000000 /* MII/GMII/XGMII mode */
1021 #define XMAC_XIF_MII_MODE_SHIFT 27
1022 #define XMAC_XIF_XGMII_MODE 0x00
1023 #define XMAC_XIF_GMII_MODE 0x01
1024 #define XMAC_XIF_MII_MODE 0x02
1025 #define XMAC_XIF_ILLEGAL_MODE 0x03
1026 #define XMAC_XIF_XPCS_BYPASS 0x20000000 /* use external xpcs */
1027 #define XMAC_XIF_1G_PCS_BYPASS 0x40000000 /* use external pcs */
1028 #define XMAC_XIF_SEL_CLK_25MHZ 0x80000000 /* 25Mhz clk for 100mbps */
1030 /* IPG register */
1031 #define XMAC_IPG_VALUE_MASK 0x00000007 /* IPG in XGMII mode */
1032 #define XMAC_IPG_VALUE_SHIFT 0
1033 #define XMAC_IPG_VALUE1_MASK 0x0000ff00 /* IPG in GMII/MII mode */
1034 #define XMAC_IPG_VALUE1_SHIFT 8
1035 #define XMAC_IPG_STRETCH_RATIO_MASK 0x001f0000
1036 #define XMAC_IPG_STRETCH_RATIO_SHIFT 16
1037 #define XMAC_IPG_STRETCH_CONST_MASK 0x00e00000
1038 #define XMAC_IPG_STRETCH_CONST_SHIFT 21
1040 #define IPG_12_15_BYTE 3
1041 #define IPG_16_19_BYTE 4
1042 #define IPG_20_23_BYTE 5
1043 #define IPG1_12_BYTES 10
1044 #define IPG1_13_BYTES 11
1045 #define IPG1_14_BYTES 12
1046 #define IPG1_15_BYTES 13
1047 #define IPG1_16_BYTES 14
1050 #define XMAC_MIN_TX_FRM_SZ_MASK 0x3ff /* Min tx frame size */
1051 #define XMAC_MIN_TX_FRM_SZ_SHIFT 0
1052 #define XMAC_SLOT_TIME_MASK 0x0003fc00 /* slot time */
1053 #define XMAC_SLOT_TIME_SHIFT 10
1054 #define XMAC_MIN_RX_FRM_SZ_MASK 0x3ff00000 /* Min rx frame size */
1055 #define XMAC_MIN_RX_FRM_SZ_SHIFT 20
1056 #define XMAC_MAX_FRM_SZ_MASK 0x00003fff /* max tx frame size */
1058 /* State Machine Register */
1059 #define XMAC_SM_TX_LNK_MGMT_MASK 0x00000007
1060 #define XMAC_SM_TX_LNK_MGMT_SHIFT 0
1061 #define XMAC_SM_SOP_DETECT 0x00000008
1062 #define XMAC_SM_LNK_FLT_SIG_MASK 0x00000030
1063 #define XMAC_SM_LNK_FLT_SIG_SHIFT 4
1064 #define XMAC_SM_MII_GMII_MD_RX_LNK 0x00000040
1065 #define XMAC_SM_XGMII_MD_RX_LNK 0x00000080
1066 #define XMAC_SM_XGMII_ONLY_VAL_SIG 0x00000100
1067 #define XMAC_SM_ALT_ADR_N_HSH_FN_SIG 0x00000200
1068 #define XMAC_SM_RXMAC_IPP_STAT_MASK 0x00001c00
1069 #define XMAC_SM_RXMAC_IPP_STAT_SHIFT 10
1070 #define XMAC_SM_RXFIFO_WPTR_CLK_MASK 0x007c0000
1071 #define XMAC_SM_RXFIFO_WPTR_CLK_SHIFT 18
1072 #define XMAC_SM_RXFIFO_RPTR_CLK_MASK 0x0F800000
1073 #define XMAC_SM_RXFIFO_RPTR_CLK_SHIFT 23
1074 #define XMAC_SM_TXFIFO_FULL_CLK 0x10000000
1075 #define XMAC_SM_TXFIFO_EMPTY_CLK 0x20000000
1076 #define XMAC_SM_RXFIFO_FULL_CLK 0x40000000
1077 #define XMAC_SM_RXFIFO_EMPTY_CLK 0x80000000
1079 /* Internal Signals 1 Register */
1080 #define XMAC_IS1_OPP_TXMAC_STAT_MASK 0x0000000F
1081 #define XMAC_IS1_OPP_TXMAC_STAT_SHIFT 0
1082 #define XMAC_IS1_OPP_TXMAC_ABORT 0x00000010
1083 #define XMAC_IS1_OPP_TXMAC_TAG 0x00000020
1084 #define XMAC_IS1_OPP_TXMAC_ACK 0x00000040
1085 #define XMAC_IS1_TXMAC_OPP_REQ 0x00000080
1086 #define XMAC_IS1_RXMAC_IPP_STAT_MASK 0x0FFFFF00
1087 #define XMAC_IS1_RXMAC_IPP_STAT_SHIFT 8
1088 #define XMAC_IS1_RXMAC_IPP_CTRL 0x10000000
1089 #define XMAC_IS1_RXMAC_IPP_TAG 0x20000000
1090 #define XMAC_IS1_IPP_RXMAC_REQ 0x40000000
1091 #define XMAC_IS1_RXMAC_IPP_ACK 0x80000000
1093 /* Internal Signals 2 Register */
1094 #define XMAC_IS2_TX_HB_TIMER_MASK 0x0000000F
1095 #define XMAC_IS2_TX_HB_TIMER_SHIFT 0
1096 #define XMAC_IS2_RX_HB_TIMER_MASK 0x000000F0
1097 #define XMAC_IS2_RX_HB_TIMER_SHIFT 4
1098 #define XMAC_IS2_XPCS_RXC_MASK 0x0000FF00
1099 #define XMAC_IS2_XPCS_RXC_SHIFT 8
1100 #define XMAC_IS2_XPCS_TXC_MASK 0x00FF0000
1101 #define XMAC_IS2_XPCS_TXC_SHIFT 16
1102 #define XMAC_IS2_LOCAL_FLT_OC_SYNC 0x01000000
1103 #define XMAC_IS2_RMT_FLT_OC_SYNC 0x02000000
1105 /* Register size masking */
1107 #define XTXMAC_FRM_CNT_MASK 0xFFFFFFFF
1108 #define XTXMAC_BYTE_CNT_MASK 0xFFFFFFFF
1109 #define XRXMAC_CRC_ER_CNT_MASK 0x000000FF
1110 #define XRXMAC_MPSZER_CNT_MASK 0x000000FF
1111 #define XRXMAC_CD_VIO_CNT_MASK 0x000000FF
1112 #define XRXMAC_BT_CNT_MASK 0xFFFFFFFF
1113 #define XRXMAC_HIST_CNT1_MASK 0x001FFFFF
1114 #define XRXMAC_HIST_CNT2_MASK 0x001FFFFF
1115 #define XRXMAC_HIST_CNT3_MASK 0x000FFFFF
1116 #define XRXMAC_HIST_CNT4_MASK 0x0007FFFF
1117 #define XRXMAC_HIST_CNT5_MASK 0x0003FFFF
1118 #define XRXMAC_HIST_CNT6_MASK 0x0001FFFF
1119 #define XRXMAC_HIST_CNT7_MASK 0x07FFFFFF
1120 #define XRXMAC_BC_FRM_CNT_MASK 0x001FFFFF
1121 #define XRXMAC_MC_FRM_CNT_MASK 0x001FFFFF
1122 #define XRXMAC_FRAG_CNT_MASK 0x001FFFFF
1123 #define XRXMAC_AL_ER_CNT_MASK 0x000000FF
1124 #define XMAC_LINK_FLT_CNT_MASK 0x000000FF
1125 #define BTXMAC_FRM_CNT_MASK 0x001FFFFF
1126 #define BTXMAC_BYTE_CNT_MASK 0x07FFFFFF
1127 #define RXMAC_FRM_CNT_MASK 0x0000FFFF
1128 #define BRXMAC_BYTE_CNT_MASK 0x07FFFFFF
1129 #define BMAC_AL_ER_CNT_MASK 0x0000FFFF
1130 #define MAC_LEN_ER_CNT_MASK 0x0000FFFF
1131 #define BMAC_CRC_ER_CNT_MASK 0x0000FFFF
1132 #define BMAC_CD_VIO_CNT_MASK 0x0000FFFF
1133 #define XMAC_XPCS_DESKEW_ERR_CNT_MASK 0x000000FF
1134 #define XMAC_XPCS_SYM_ERR_CNT_L0_MASK 0x0000FFFF
1135 #define XMAC_XPCS_SYM_ERR_CNT_L1_MASK 0xFFFF0000
1136 #define XMAC_XPCS_SYM_ERR_CNT_L1_SHIFT 16
1137 #define XMAC_XPCS_SYM_ERR_CNT_L2_MASK 0x0000FFFF
1138 #define XMAC_XPCS_SYM_ERR_CNT_L3_MASK 0xFFFF0000
1139 #define XMAC_XPCS_SYM_ERR_CNT_L3_SHIFT 16
1141 /* Alternate MAC address registers */
1142 #define XMAC_MAX_ALT_ADDR_ENTRY 16 /* 16 alternate MAC addrs */
1143 #define XMAC_MAX_ADDR_ENTRY (XMAC_MAX_ALT_ADDR_ENTRY + 1)
1145 /* Max / Min parameters for Neptune MAC */
1147 #define MAC_MAX_ALT_ADDR_ENTRY XMAC_MAX_ALT_ADDR_ENTRY
1148 #define MAC_MAX_HOST_INFO_ENTRY XMAC_MAX_HOST_INFO_ENTRY
1150 /* HostInfo entry for the unique MAC address */
1151 #define XMAC_UNIQUE_HOST_INFO_ENTRY 17
1152 #define BMAC_UNIQUE_HOST_INFO_ENTRY 0
1154 /* HostInfo entry for the multicat address */
1155 #define XMAC_MULTI_HOST_INFO_ENTRY 16
1156 #define BMAC_MULTI_HOST_INFO_ENTRY 8
1158 /* XMAC Host Info Register */
1159 typedef union hostinfo {
1161 uint64_t value;
1163 struct {
1164 #if defined(_BIG_ENDIAN)
1165 uint32_t msw; /* Most significant word */
1166 uint32_t lsw; /* Least significant word */
1167 #elif defined(_LITTLE_ENDIAN)
1168 uint32_t lsw; /* Least significant word */
1169 uint32_t msw; /* Most significant word */
1170 #endif
1171 } val;
1172 struct {
1173 #if defined(_BIG_ENDIAN)
1174 uint32_t w1;
1175 #endif
1176 struct {
1177 #if defined(_BIT_FIELDS_HTOL)
1178 uint32_t reserved2 : 23;
1179 uint32_t mac_pref : 1;
1180 uint32_t reserved1 : 5;
1181 uint32_t rdc_tbl_num : 3;
1182 #elif defined(_BIT_FIELDS_LTOH)
1183 uint32_t rdc_tbl_num : 3;
1184 uint32_t reserved1 : 5;
1185 uint32_t mac_pref : 1;
1186 uint32_t reserved2 : 23;
1187 #endif
1188 } w0;
1190 #if defined(_LITTLE_ENDIAN)
1191 uint32_t w1;
1192 #endif
1193 } bits;
1195 } hostinfo_t;
1197 typedef union hostinfo *hostinfo_pt;
1199 #define XMAC_HI_RDC_TBL_NUM_MASK 0x00000007
1200 #define XMAC_HI_MAC_PREF 0x00000100
1202 #define XMAC_MAX_HOST_INFO_ENTRY 20 /* 20 host entries */
1205 * ******************** MIF registers *********************************
1209 * 32-bit register serves as an instruction register when the MIF is
1210 * programmed in frame mode. load this register w/ a valid instruction
1211 * (as per IEEE 802.3u MII spec). poll this register to check for instruction
1212 * execution completion. during a read operation, this register will also
1213 * contain the 16-bit data returned by the transceiver. unless specified
1214 * otherwise, fields are considered "don't care" when polling for
1215 * completion.
1218 #define MIF_FRAME_START_MASK 0xC0000000 /* start of frame mask */
1219 #define MIF_FRAME_ST_22 0x40000000 /* STart of frame, Cl 22 */
1220 #define MIF_FRAME_ST_45 0x00000000 /* STart of frame, Cl 45 */
1221 #define MIF_FRAME_OPCODE_MASK 0x30000000 /* opcode */
1222 #define MIF_FRAME_OP_READ_22 0x20000000 /* read OPcode, Cl 22 */
1223 #define MIF_FRAME_OP_WRITE_22 0x10000000 /* write OPcode, Cl 22 */
1224 #define MIF_FRAME_OP_ADDR_45 0x00000000 /* addr of reg to access */
1225 #define MIF_FRAME_OP_READ_45 0x30000000 /* read OPcode, Cl 45 */
1226 #define MIF_FRAME_OP_WRITE_45 0x10000000 /* write OPcode, Cl 45 */
1227 #define MIF_FRAME_OP_P_R_I_A_45 0x10000000 /* post-read-inc-addr */
1228 #define MIF_FRAME_PHY_ADDR_MASK 0x0F800000 /* phy address mask */
1229 #define MIF_FRAME_PHY_ADDR_SHIFT 23
1230 #define MIF_FRAME_REG_ADDR_MASK 0x007C0000 /* reg addr in Cl 22 */
1231 /* dev addr in Cl 45 */
1232 #define MIF_FRAME_REG_ADDR_SHIFT 18
1233 #define MIF_FRAME_TURN_AROUND_MSB 0x00020000 /* turn around, MSB. */
1234 #define MIF_FRAME_TURN_AROUND_LSB 0x00010000 /* turn around, LSB. */
1235 #define MIF_FRAME_DATA_MASK 0x0000FFFF /* instruction payload */
1237 /* Clause 45 frame field values */
1238 #define FRAME45_ST 0
1239 #define FRAME45_OP_ADDR 0
1240 #define FRAME45_OP_WRITE 1
1241 #define FRAME45_OP_READ_INC 2
1242 #define FRAME45_OP_READ 3
1244 typedef union _mif_frame_t {
1246 uint64_t value;
1248 struct {
1249 #if defined(_BIG_ENDIAN)
1250 uint32_t msw; /* Most significant word */
1251 uint32_t lsw; /* Least significant word */
1252 #elif defined(_LITTLE_ENDIAN)
1253 uint32_t lsw; /* Least significant word */
1254 uint32_t msw; /* Most significant word */
1255 #endif
1256 } val;
1257 struct {
1258 #if defined(_BIG_ENDIAN)
1259 uint32_t w1;
1260 #endif
1261 struct {
1262 #if defined(_BIT_FIELDS_HTOL)
1263 uint32_t st : 2;
1264 uint32_t op : 2;
1265 uint32_t phyad : 5;
1266 uint32_t regad : 5;
1267 uint32_t ta_msb : 1;
1268 uint32_t ta_lsb : 1;
1269 uint32_t data : 16;
1270 #elif defined(_BIT_FIELDS_LTOH)
1271 uint32_t data : 16;
1272 uint32_t ta_lsb : 1;
1273 uint32_t ta_msb : 1;
1274 uint32_t regad : 5;
1275 uint32_t phyad : 5;
1276 uint32_t op : 2;
1277 uint32_t st : 2;
1278 #endif
1279 } w0;
1281 #if defined(_LITTLE_ENDIAN)
1282 uint32_t w1;
1283 #endif
1284 } bits;
1285 } mif_frame_t;
1287 #define MIF_CFG_POLL_EN 0x00000008 /* enable polling */
1288 #define MIF_CFG_BB_MODE 0x00000010 /* bit-bang mode */
1289 #define MIF_CFG_POLL_REG_MASK 0x000003E0 /* reg addr to be polled */
1290 #define MIF_CFG_POLL_REG_SHIFT 5
1291 #define MIF_CFG_POLL_PHY_MASK 0x00007C00 /* XCVR addr to be polled */
1292 #define MIF_CFG_POLL_PHY_SHIFT 10
1293 #define MIF_CFG_INDIRECT_MODE 0x0000800
1294 /* used to decide if Cl 22 */
1295 /* or Cl 45 frame is */
1296 /* constructed. */
1297 /* 1 = Clause 45,ST = '00' */
1298 /* 0 = Clause 22,ST = '01' */
1299 #define MIF_CFG_ATCE_GE_EN 0x00010000 /* Enable ATCA gigabit mode */
1301 typedef union _mif_cfg_t {
1303 uint64_t value;
1305 struct {
1306 #if defined(_BIG_ENDIAN)
1307 uint32_t msw; /* Most significant word */
1308 uint32_t lsw; /* Least significant word */
1310 #elif defined(_LITTLE_ENDIAN)
1311 uint32_t lsw; /* Least significant word */
1312 uint32_t msw; /* Most significant word */
1313 #endif
1314 } val;
1315 struct {
1316 #if defined(_BIG_ENDIAN)
1317 uint32_t w1;
1318 #endif
1319 struct {
1320 #if defined(_BIT_FIELDS_HTOL)
1321 uint32_t res2 : 15;
1322 uint32_t atca_ge : 1;
1323 uint32_t indirect_md : 1;
1324 uint32_t phy_addr : 5;
1325 uint32_t reg_addr : 5;
1326 uint32_t bb_mode : 1;
1327 uint32_t poll_en : 1;
1328 uint32_t res1 : 2;
1329 uint32_t res : 1;
1330 #elif defined(_BIT_FIELDS_LTOH)
1331 uint32_t res : 1;
1332 uint32_t res1 : 2;
1333 uint32_t poll_en : 1;
1334 uint32_t bb_mode : 1;
1335 uint32_t reg_addr : 5;
1336 uint32_t phy_addr : 5;
1337 uint32_t indirect_md : 1;
1338 uint32_t atca_ge : 1;
1339 uint32_t res2 : 15;
1340 #endif
1341 } w0;
1343 #if defined(_LITTLE_ENDIAN)
1344 uint32_t w1;
1345 #endif
1346 } bits;
1348 } mif_cfg_t;
1350 #define MIF_POLL_STATUS_DATA_MASK 0xffff0000
1351 #define MIF_POLL_STATUS_STAT_MASK 0x0000ffff
1353 typedef union _mif_poll_stat_t {
1354 uint64_t value;
1356 struct {
1357 #if defined(_BIG_ENDIAN)
1358 uint32_t msw; /* Most significant word */
1359 uint32_t lsw; /* Least significant word */
1360 #elif defined(_LITTLE_ENDIAN)
1361 uint32_t lsw; /* Least significant word */
1362 uint32_t msw; /* Most significant word */
1363 #endif
1364 } val;
1365 struct {
1366 #if defined(_BIG_ENDIAN)
1367 uint32_t w1;
1368 #endif
1369 struct {
1370 #if defined(_BIT_FIELDS_HTOL)
1371 uint16_t data;
1372 uint16_t status;
1373 #elif defined(_BIT_FIELDS_LTOH)
1374 uint16_t status;
1375 uint16_t data;
1376 #endif
1377 } w0;
1379 #if defined(_LITTLE_ENDIAN)
1380 uint32_t w1;
1381 #endif
1382 } bits;
1383 } mif_poll_stat_t;
1386 #define MIF_POLL_MASK_MASK 0x0000ffff
1388 typedef union _mif_poll_mask_t {
1389 uint64_t value;
1391 struct {
1392 #if defined(_BIG_ENDIAN)
1393 uint32_t msw; /* Most significant word */
1394 uint32_t lsw; /* Least significant word */
1395 #elif defined(_LITTLE_ENDIAN)
1396 uint32_t lsw; /* Least significant word */
1397 uint32_t msw; /* Most significant word */
1398 #endif
1399 } val;
1400 struct {
1401 #if defined(_BIG_ENDIAN)
1402 uint32_t w1;
1403 #endif
1404 struct {
1405 #if defined(_BIT_FIELDS_HTOL)
1406 uint16_t rsvd;
1407 uint16_t mask;
1408 #elif defined(_BIT_FIELDS_LTOH)
1409 uint16_t mask;
1410 uint16_t rsvd;
1411 #endif
1412 } w0;
1414 #if defined(_LITTLE_ENDIAN)
1415 uint32_t w1;
1416 #endif
1417 } bits;
1418 } mif_poll_mask_t;
1420 #define MIF_STATUS_INIT_DONE_MASK 0x00000001
1421 #define MIF_STATUS_XGE_ERR0_MASK 0x00000002
1422 #define MIF_STATUS_XGE_ERR1_MASK 0x00000004
1423 #define MIF_STATUS_PEU_ERR_MASK 0x00000008
1424 #define MIF_STATUS_EXT_PHY_INTR0_MASK 0x00000010
1425 #define MIF_STATUS_EXT_PHY_INTR1_MASK 0x00000020
1427 typedef union _mif_stat_t {
1428 uint64_t value;
1430 struct {
1431 #if defined(_BIG_ENDIAN)
1432 uint32_t msw; /* Most significant word */
1433 uint32_t lsw; /* Least significant word */
1434 #elif defined(_LITTLE_ENDIAN)
1435 uint32_t lsw; /* Least significant word */
1436 uint32_t msw; /* Most significant word */
1437 #endif
1438 } val;
1439 struct {
1440 #if defined(_BIG_ENDIAN)
1441 uint32_t w1;
1442 #endif
1443 struct {
1444 #if defined(_BIT_FIELDS_HTOL)
1445 uint32_t rsvd:26;
1446 uint32_t ext_phy_intr_flag1:1;
1447 uint32_t ext_phy_intr_flag0:1;
1448 uint32_t peu_err:1;
1449 uint32_t xge_err1:1;
1450 uint32_t xge_err0:1;
1451 uint32_t mif_init_done_stat:1;
1453 #elif defined(_BIT_FIELDS_LTOH)
1454 uint32_t mif_init_done_stat:1;
1455 uint32_t xge_err0:1;
1456 uint32_t xge_err1:1;
1457 uint32_t ext_phy_intr_flag0:1;
1458 uint32_t ext_phy_intr_flag1:1;
1459 uint32_t rsvd:26;
1460 #endif
1461 } w0;
1463 #if defined(_LITTLE_ENDIAN)
1464 uint32_t w1;
1465 #endif
1466 } bits;
1467 } mif_stat_t;
1469 /* MIF State Machine Register */
1471 #define MIF_SM_EXECUTION_MASK 0x0000003f /* execution state */
1472 #define MIF_SM_EXECUTION_SHIFT 0
1473 #define MIF_SM_CONTROL_MASK 0x000001c0 /* control state */
1474 #define MIF_SM_CONTROL_MASK_SHIFT 6
1475 #define MIF_SM_MDI 0x00000200
1476 #define MIF_SM_MDO 0x00000400
1477 #define MIF_SM_MDO_EN 0x00000800
1478 #define MIF_SM_MDC 0x00001000
1479 #define MIF_SM_MDI_0 0x00002000
1480 #define MIF_SM_MDI_1 0x00004000
1481 #define MIF_SM_MDI_2 0x00008000
1482 #define MIF_SM_PORT_ADDR_MASK 0x001f0000
1483 #define MIF_SM_PORT_ADDR_SHIFT 16
1484 #define MIF_SM_INT_SIG_MASK 0xffe00000
1485 #define MIF_SM_INT_SIG_SHIFT 21
1489 * ******************** PCS registers *********************************
1492 /* PCS Registers */
1493 #define PCS_MII_CTRL_1000_SEL 0x0040 /* reads 1. ignored on wr */
1494 #define PCS_MII_CTRL_COLLISION_TEST 0x0080 /* COL signal */
1495 #define PCS_MII_CTRL_DUPLEX 0x0100 /* forced 0x0. */
1496 #define PCS_MII_RESTART_AUTONEG 0x0200 /* self clearing. */
1497 #define PCS_MII_ISOLATE 0x0400 /* read 0. ignored on wr */
1498 #define PCS_MII_POWER_DOWN 0x0800 /* read 0. ignored on wr */
1499 #define PCS_MII_AUTONEG_EN 0x1000 /* autonegotiation */
1500 #define PCS_MII_10_100_SEL 0x2000 /* read 0. ignored on wr */
1501 #define PCS_MII_RESET 0x8000 /* reset PCS. */
1503 typedef union _pcs_ctrl_t {
1504 uint64_t value;
1506 struct {
1507 #if defined(_BIG_ENDIAN)
1508 uint32_t msw; /* Most significant word */
1509 uint32_t lsw; /* Least significant word */
1510 #elif defined(_LITTLE_ENDIAN)
1511 uint32_t lsw; /* Least significant word */
1512 uint32_t msw; /* Most significant word */
1513 #endif
1514 } val;
1515 struct {
1516 #if defined(_BIG_ENDIAN)
1517 uint32_t w1;
1518 #endif
1519 struct {
1520 #if defined(_BIT_FIELDS_HTOL)
1521 uint32_t res0 : 16;
1522 uint32_t reset : 1;
1523 uint32_t res1 : 1;
1524 uint32_t sel_10_100 : 1;
1525 uint32_t an_enable : 1;
1526 uint32_t pwr_down : 1;
1527 uint32_t isolate : 1;
1528 uint32_t restart_an : 1;
1529 uint32_t duplex : 1;
1530 uint32_t col_test : 1;
1531 uint32_t sel_1000 : 1;
1532 uint32_t res2 : 6;
1533 #elif defined(_BIT_FIELDS_LTOH)
1534 uint32_t res2 : 6;
1535 uint32_t sel_1000 : 1;
1536 uint32_t col_test : 1;
1537 uint32_t duplex : 1;
1538 uint32_t restart_an : 1;
1539 uint32_t isolate : 1;
1540 uint32_t pwr_down : 1;
1541 uint32_t an_enable : 1;
1542 uint32_t sel_10_100 : 1;
1543 uint32_t res1 : 1;
1544 uint32_t reset : 1;
1545 uint32_t res0 : 16;
1546 #endif
1547 } w0;
1549 #if defined(_LITTLE_ENDIAN)
1550 uint32_t w1;
1551 #endif
1552 } bits;
1553 } pcs_ctrl_t;
1555 #define PCS_MII_STATUS_EXTEND_CAP 0x0001 /* reads 0 */
1556 #define PCS_MII_STATUS_JABBER_DETECT 0x0002 /* reads 0 */
1557 #define PCS_MII_STATUS_LINK_STATUS 0x0004 /* link status */
1558 #define PCS_MII_STATUS_AUTONEG_ABLE 0x0008 /* reads 1 */
1559 #define PCS_MII_STATUS_REMOTE_FAULT 0x0010 /* remote fault detected */
1560 #define PCS_MII_STATUS_AUTONEG_COMP 0x0020 /* auto-neg completed */
1561 #define PCS_MII_STATUS_EXTEND_STATUS 0x0100 /* 1000 Base-X PHY */
1563 typedef union _pcs_stat_t {
1564 uint64_t value;
1566 struct {
1567 #if defined(_BIG_ENDIAN)
1568 uint32_t msw; /* Most significant word */
1569 uint32_t lsw; /* Least significant word */
1570 #elif defined(_LITTLE_ENDIAN)
1571 uint32_t lsw; /* Least significant word */
1572 uint32_t msw; /* Most significant word */
1573 #endif
1574 } val;
1575 struct {
1576 #if defined(_BIG_ENDIAN)
1577 uint32_t w1;
1578 #endif
1579 struct {
1580 #if defined(_BIT_FIELDS_HTOL)
1581 uint32_t res0 : 23;
1582 uint32_t ext_stat : 1;
1583 uint32_t res1 : 2;
1584 uint32_t an_complete : 1;
1585 uint32_t remote_fault : 1;
1586 uint32_t an_able : 1;
1587 uint32_t link_stat : 1;
1588 uint32_t jabber_detect : 1;
1589 uint32_t ext_cap : 1;
1590 #elif defined(_BIT_FIELDS_LTOH)
1591 uint32_t ext_cap : 1;
1592 uint32_t jabber_detect : 1;
1593 uint32_t link_stat : 1;
1594 uint32_t an_able : 1;
1595 uint32_t remote_fault : 1;
1596 uint32_t an_complete : 1;
1597 uint32_t res1 : 2;
1598 uint32_t ext_stat : 1;
1599 uint32_t res0 : 23;
1600 #endif
1601 } w0;
1603 #if defined(_LITTLE_ENDIAN)
1604 uint32_t w1;
1605 #endif
1606 } bits;
1607 } pcs_stat_t;
1609 #define PCS_MII_ADVERT_FD 0x0020 /* advertise full duplex */
1610 #define PCS_MII_ADVERT_HD 0x0040 /* advertise half-duplex */
1611 #define PCS_MII_ADVERT_SYM_PAUSE 0x0080 /* advertise PAUSE sym */
1612 #define PCS_MII_ADVERT_ASYM_PAUSE 0x0100 /* advertises PAUSE asym */
1613 #define PCS_MII_ADVERT_RF_MASK 0x3000 /* remote fault */
1614 #define PCS_MII_ADVERT_RF_SHIFT 12
1615 #define PCS_MII_ADVERT_ACK 0x4000 /* (ro) */
1616 #define PCS_MII_ADVERT_NEXT_PAGE 0x8000 /* (ro) forced 0x0 */
1618 #define PCS_MII_LPA_FD PCS_MII_ADVERT_FD
1619 #define PCS_MII_LPA_HD PCS_MII_ADVERT_HD
1620 #define PCS_MII_LPA_SYM_PAUSE PCS_MII_ADVERT_SYM_PAUSE
1621 #define PCS_MII_LPA_ASYM_PAUSE PCS_MII_ADVERT_ASYM_PAUSE
1622 #define PCS_MII_LPA_RF_MASK PCS_MII_ADVERT_RF_MASK
1623 #define PCS_MII_LPA_RF_SHIFT PCS_MII_ADVERT_RF_SHIFT
1624 #define PCS_MII_LPA_ACK PCS_MII_ADVERT_ACK
1625 #define PCS_MII_LPA_NEXT_PAGE PCS_MII_ADVERT_NEXT_PAGE
1627 typedef union _pcs_anar_t {
1628 uint64_t value;
1630 struct {
1631 #if defined(_BIG_ENDIAN)
1632 uint32_t msw; /* Most significant word */
1633 uint32_t lsw; /* Least significant word */
1634 #elif defined(_LITTLE_ENDIAN)
1635 uint32_t lsw; /* Least significant word */
1636 uint32_t msw; /* Most significant word */
1637 #endif
1638 } val;
1639 struct {
1640 #if defined(_BIG_ENDIAN)
1641 uint32_t w1;
1642 #endif
1643 struct {
1644 #if defined(_BIT_FIELDS_HTOL)
1645 uint32_t res0 : 16;
1646 uint32_t next_page : 1;
1647 uint32_t ack : 1;
1648 uint32_t remote_fault : 2;
1649 uint32_t res1 : 3;
1650 uint32_t asm_pause : 1;
1651 uint32_t pause : 1;
1652 uint32_t half_duplex : 1;
1653 uint32_t full_duplex : 1;
1654 uint32_t res2 : 5;
1655 #elif defined(_BIT_FIELDS_LTOH)
1656 uint32_t res2 : 5;
1657 uint32_t full_duplex : 1;
1658 uint32_t half_duplex : 1;
1659 uint32_t pause : 1;
1660 uint32_t asm_pause : 1;
1661 uint32_t res1 : 3;
1662 uint32_t remore_fault : 2;
1663 uint32_t ack : 1;
1664 uint32_t next_page : 1;
1665 uint32_t res0 : 16;
1666 #endif
1667 } w0;
1669 #if defined(_LITTLE_ENDIAN)
1670 uint32_t w1;
1671 #endif
1672 } bits;
1673 } pcs_anar_t, *p_pcs_anar_t;
1675 #define PCS_CFG_EN 0x0001 /* enable PCS. */
1676 #define PCS_CFG_SD_OVERRIDE 0x0002
1677 #define PCS_CFG_SD_ACTIVE_LOW 0x0004 /* sig detect active low */
1678 #define PCS_CFG_JITTER_STUDY_MASK 0x0018 /* jitter measurements */
1679 #define PCS_CFG_JITTER_STUDY_SHIFT 4
1680 #define PCS_CFG_10MS_TIMER_OVERRIDE 0x0020 /* shortens autoneg timer */
1681 #define PCS_CFG_MASK 0x0040 /* PCS global mask bit */
1683 typedef union _pcs_cfg_t {
1684 uint64_t value;
1686 struct {
1687 #if defined(_BIG_ENDIAN)
1688 uint32_t msw; /* Most significant word */
1689 uint32_t lsw; /* Least significant word */
1690 #elif defined(_LITTLE_ENDIAN)
1691 uint32_t lsw; /* Least significant word */
1692 uint32_t msw; /* Most significant word */
1693 #endif
1694 } val;
1695 struct {
1696 #if defined(_BIG_ENDIAN)
1697 uint32_t w1;
1698 #endif
1699 struct {
1700 #if defined(_BIT_FIELDS_HTOL)
1701 uint32_t res0 : 25;
1702 uint32_t mask : 1;
1703 uint32_t override_10ms_timer : 1;
1704 uint32_t jitter_study : 2;
1705 uint32_t sig_det_a_low : 1;
1706 uint32_t sig_det_override : 1;
1707 uint32_t enable : 1;
1708 #elif defined(_BIT_FIELDS_LTOH)
1709 uint32_t enable : 1;
1710 uint32_t sig_det_override : 1;
1711 uint32_t sig_det_a_low : 1;
1712 uint32_t jitter_study : 2;
1713 uint32_t override_10ms_timer : 1;
1714 uint32_t mask : 1;
1715 uint32_t res0 : 25;
1716 #endif
1717 } w0;
1719 #if defined(_LITTLE_ENDIAN)
1720 uint32_t w1;
1721 #endif
1722 } bits;
1723 } pcs_cfg_t, *p_pcs_cfg_t;
1726 /* used for diagnostic purposes. bits 20-22 autoclear on read */
1727 #define PCS_SM_TX_STATE_MASK 0x0000000F /* Tx idle state mask */
1728 #define PCS_SM_TX_STATE_SHIFT 0
1729 #define PCS_SM_RX_STATE_MASK 0x000000F0 /* Rx idle state mask */
1730 #define PCS_SM_RX_STATE_SHIFT 4
1731 #define PCS_SM_WORD_SYNC_STATE_MASK 0x00000700 /* loss of sync state mask */
1732 #define PCS_SM_WORD_SYNC_STATE_SHIFT 8
1733 #define PCS_SM_SEQ_DETECT_STATE_MASK 0x00001800 /* sequence detect */
1734 #define PCS_SM_SEQ_DETECT_STATE_SHIFT 11
1735 #define PCS_SM_LINK_STATE_MASK 0x0001E000 /* link state */
1736 #define PCS_SM_LINK_STATE_SHIFT 13
1737 #define PCS_SM_LOSS_LINK_C 0x00100000 /* loss of link */
1738 #define PCS_SM_LOSS_LINK_SYNC 0x00200000 /* loss of sync */
1739 #define PCS_SM_LOSS_SIGNAL_DETECT 0x00400000 /* signal detect fail */
1740 #define PCS_SM_NO_LINK_BREAKLINK 0x01000000 /* receipt of breaklink */
1741 #define PCS_SM_NO_LINK_SERDES 0x02000000 /* serdes initializing */
1742 #define PCS_SM_NO_LINK_C 0x04000000 /* C codes not stable */
1743 #define PCS_SM_NO_LINK_SYNC 0x08000000 /* word sync not achieved */
1744 #define PCS_SM_NO_LINK_WAIT_C 0x10000000 /* waiting for C codes */
1745 #define PCS_SM_NO_LINK_NO_IDLE 0x20000000 /* linkpartner send C code */
1747 typedef union _pcs_stat_mc_t {
1748 uint64_t value;
1750 struct {
1751 #if defined(_BIG_ENDIAN)
1752 uint32_t msw; /* Most significant word */
1753 uint32_t lsw; /* Least significant word */
1754 #elif defined(_LITTLE_ENDIAN)
1755 uint32_t lsw; /* Least significant word */
1756 uint32_t msw; /* Most significant word */
1757 #endif
1758 } val;
1759 struct {
1760 #if defined(_BIG_ENDIAN)
1761 uint32_t w1;
1762 #endif
1763 struct {
1764 #if defined(_BIT_FIELDS_HTOL)
1765 uint32_t res2 : 2;
1766 uint32_t lnk_dwn_ni : 1;
1767 uint32_t lnk_dwn_wc : 1;
1768 uint32_t lnk_dwn_ls : 1;
1769 uint32_t lnk_dwn_nc : 1;
1770 uint32_t lnk_dwn_ser : 1;
1771 uint32_t lnk_loss_bc : 1;
1772 uint32_t res1 : 1;
1773 uint32_t loss_sd : 1;
1774 uint32_t lnk_loss_sync : 1;
1775 uint32_t lnk_loss_c : 1;
1776 uint32_t res0 : 3;
1777 uint32_t link_cfg_stat : 4;
1778 uint32_t seq_detc_stat : 2;
1779 uint32_t word_sync : 3;
1780 uint32_t rx_ctrl : 4;
1781 uint32_t tx_ctrl : 4;
1782 #elif defined(_BIT_FIELDS_LTOH)
1783 uint32_t tx_ctrl : 4;
1784 uint32_t rx_ctrl : 4;
1785 uint32_t word_sync : 3;
1786 uint32_t seq_detc_stat : 2;
1787 uint32_t link_cfg_stat : 4;
1788 uint32_t res0 : 3;
1789 uint32_t lnk_loss_c : 1;
1790 uint32_t lnk_loss_sync : 1;
1791 uint32_t loss_sd : 1;
1792 uint32_t res1 : 1;
1793 uint32_t lnk_loss_bc : 1;
1794 uint32_t lnk_dwn_ser : 1;
1795 uint32_t lnk_dwn_nc : 1;
1796 uint32_t lnk_dwn_ls : 1;
1797 uint32_t lnk_dwn_wc : 1;
1798 uint32_t lnk_dwn_ni : 1;
1799 uint32_t res2 : 2;
1800 #endif
1801 } w0;
1803 #if defined(_LITTLE_ENDIAN)
1804 uint32_t w1;
1805 #endif
1806 } bits;
1807 } pcs_stat_mc_t, *p_pcs_stat_mc_t;
1809 #define PCS_INTR_STATUS_LINK_CHANGE 0x04 /* link status has changed */
1812 * control which network interface is used. no more than one bit should
1813 * be set.
1815 #define PCS_DATAPATH_MODE_PCS 0 /* Internal PCS is used */
1816 #define PCS_DATAPATH_MODE_MII 0x00000002 /* GMII/RGMII is selected. */
1818 #define PCS_PACKET_COUNT_TX_MASK 0x000007FF /* pkts xmitted by PCS */
1819 #define PCS_PACKET_COUNT_RX_MASK 0x07FF0000 /* pkts recvd by PCS */
1820 #define PCS_PACKET_COUNT_RX_SHIFT 16
1823 * ******************** XPCS registers *********************************
1826 /* XPCS Base 10G Control1 Register */
1827 #define XPCS_CTRL1_RST 0x8000 /* Self clearing reset. */
1828 #define XPCS_CTRL1_LOOPBK 0x4000 /* xpcs Loopback */
1829 #define XPCS_CTRL1_SPEED_SEL_3 0x2000 /* 1 indicates 10G speed */
1830 #define XPCS_CTRL1_LOW_PWR 0x0800 /* low power mode. */
1831 #define XPCS_CTRL1_SPEED_SEL_1 0x0040 /* 1 indicates 10G speed */
1832 #define XPCS_CTRL1_SPEED_SEL_0_MASK 0x003c /* 0 indicates 10G speed. */
1833 #define XPCS_CTRL1_SPEED_SEL_0_SHIFT 2
1837 typedef union _xpcs_ctrl1_t {
1838 uint64_t value;
1840 struct {
1841 #if defined(_BIG_ENDIAN)
1842 uint32_t msw; /* Most significant word */
1843 uint32_t lsw; /* Least significant word */
1844 #elif defined(_LITTLE_ENDIAN)
1845 uint32_t lsw; /* Least significant word */
1846 uint32_t msw; /* Most significant word */
1847 #endif
1848 } val;
1849 struct {
1850 #if defined(_BIG_ENDIAN)
1851 uint32_t w1;
1852 #endif
1853 struct {
1854 #if defined(_BIT_FIELDS_HTOL)
1855 uint32_t res3 : 16;
1856 uint32_t reset : 1;
1857 uint32_t csr_lb : 1;
1858 uint32_t csr_speed_sel3 : 1;
1859 uint32_t res2 : 1;
1860 uint32_t csr_low_pwr : 1;
1861 uint32_t res1 : 4;
1862 uint32_t csr_speed_sel1 : 1;
1863 uint32_t csr_speed_sel0 : 4;
1864 uint32_t res0 : 2;
1865 #elif defined(_BIT_FIELDS_LTOH)
1866 uint32_t res0 : 2;
1867 uint32_t csr_speed_sel0 : 4;
1868 uint32_t csr_speed_sel1 : 1;
1869 uint32_t res1 : 4;
1870 uint32_t csr_low_pwr : 1;
1871 uint32_t res2 : 1;
1872 uint32_t csr_speed_sel3 : 1;
1873 uint32_t csr_lb : 1;
1874 uint32_t reset : 1;
1875 uint32_t res3 : 16;
1876 #endif
1877 } w0;
1879 #if defined(_LITTLE_ENDIAN)
1880 uint32_t w1;
1881 #endif
1882 } bits;
1883 } xpcs_ctrl1_t;
1886 /* XPCS Base 10G Status1 Register (Read Only) */
1887 #define XPCS_STATUS1_FAULT 0x0080
1888 #define XPCS_STATUS1_RX_LINK_STATUS_UP 0x0004 /* Link status interrupt */
1889 #define XPCS_STATUS1_LOW_POWER_ABILITY 0x0002 /* low power mode */
1890 #define XPCS_STATUS_RX_LINK_STATUS_UP 0x1000 /* Link status interrupt */
1893 typedef union _xpcs_stat1_t {
1894 uint64_t value;
1896 struct {
1897 #if defined(_BIG_ENDIAN)
1898 uint32_t msw; /* Most significant word */
1899 uint32_t lsw; /* Least significant word */
1900 #elif defined(_LITTLE_ENDIAN)
1901 uint32_t lsw; /* Least significant word */
1902 uint32_t msw; /* Most significant word */
1903 #endif
1904 } val;
1905 struct {
1906 #if defined(_BIG_ENDIAN)
1907 uint32_t w1;
1908 #endif
1909 struct {
1910 #if defined(_BIT_FIELDS_HTOL)
1911 uint32_t res4 : 16;
1912 uint32_t res3 : 8;
1913 uint32_t csr_fault : 1;
1914 uint32_t res1 : 4;
1915 uint32_t csr_rx_link_stat : 1;
1916 uint32_t csr_low_pwr_ability : 1;
1917 uint32_t res0 : 1;
1918 #elif defined(_BIT_FIELDS_LTOH)
1919 uint32_t res0 : 1;
1920 uint32_t csr_low_pwr_ability : 1;
1921 uint32_t csr_rx_link_stat : 1;
1922 uint32_t res1 : 4;
1923 uint32_t csr_fault : 1;
1924 uint32_t res3 : 8;
1925 uint32_t res4 : 16;
1926 #endif
1927 } w0;
1929 #if defined(_LITTLE_ENDIAN)
1930 uint32_t w1;
1931 #endif
1932 } bits;
1933 } xpcs_stat1_t;
1936 /* XPCS Base Speed Ability Register. Indicates 10G capability */
1937 #define XPCS_SPEED_ABILITY_10_GIG 0x0001
1940 typedef union _xpcs_speed_ab_t {
1941 uint64_t value;
1943 struct {
1944 #if defined(_BIG_ENDIAN)
1945 uint32_t msw; /* Most significant word */
1946 uint32_t lsw; /* Least significant word */
1947 #elif defined(_LITTLE_ENDIAN)
1948 uint32_t lsw; /* Least significant word */
1949 uint32_t msw; /* Most significant word */
1950 #endif
1951 } val;
1952 struct {
1953 #if defined(_BIG_ENDIAN)
1954 uint32_t w1;
1955 #endif
1956 struct {
1957 #if defined(_BIT_FIELDS_HTOL)
1958 uint32_t res1 : 16;
1959 uint32_t res0 : 15;
1960 uint32_t csr_10gig : 1;
1961 #elif defined(_BIT_FIELDS_LTOH)
1962 uint32_t csr_10gig : 1;
1963 uint32_t res0 : 15;
1964 uint32_t res1 : 16;
1965 #endif
1966 } w0;
1968 #if defined(_LITTLE_ENDIAN)
1969 uint32_t w1;
1970 #endif
1971 } bits;
1972 } xpcs_speed_ab_t;
1975 /* XPCS Base 10G Devices in Package Register */
1976 #define XPCS_DEV_IN_PKG_CSR_VENDOR2 0x80000000
1977 #define XPCS_DEV_IN_PKG_CSR_VENDOR1 0x40000000
1978 #define XPCS_DEV_IN_PKG_DTE_XS 0x00000020
1979 #define XPCS_DEV_IN_PKG_PHY_XS 0x00000010
1980 #define XPCS_DEV_IN_PKG_PCS 0x00000008
1981 #define XPCS_DEV_IN_PKG_WIS 0x00000004
1982 #define XPCS_DEV_IN_PKG_PMD_PMA 0x00000002
1983 #define XPCS_DEV_IN_PKG_CLS_22_REG 0x00000000
1987 typedef union _xpcs_dev_in_pkg_t {
1988 uint64_t value;
1990 struct {
1991 #if defined(_BIG_ENDIAN)
1992 uint32_t msw; /* Most significant word */
1993 uint32_t lsw; /* Least significant word */
1994 #elif defined(_LITTLE_ENDIAN)
1995 uint32_t lsw; /* Least significant word */
1996 uint32_t msw; /* Most significant word */
1997 #endif
1998 } val;
1999 struct {
2000 #if defined(_BIG_ENDIAN)
2001 uint32_t w1;
2002 #endif
2003 struct {
2004 #if defined(_BIT_FIELDS_HTOL)
2005 uint32_t csr_vendor2 : 1;
2006 uint32_t csr_vendor1 : 1;
2007 uint32_t res1 : 14;
2008 uint32_t res0 : 10;
2009 uint32_t dte_xs : 1;
2010 uint32_t phy_xs : 1;
2011 uint32_t pcs : 1;
2012 uint32_t wis : 1;
2013 uint32_t pmd_pma : 1;
2014 uint32_t clause_22_reg : 1;
2015 #elif defined(_BIT_FIELDS_LTOH)
2016 uint32_t clause_22_reg : 1;
2017 uint32_t pmd_pma : 1;
2018 uint32_t wis : 1;
2019 uint32_t pcs : 1;
2020 uint32_t phy_xs : 1;
2021 uint32_t dte_xs : 1;
2022 uint32_t res0 : 10;
2023 uint32_t res1 : 14;
2024 uint32_t csr_vendor1 : 1;
2025 uint32_t csr_vendor2 : 1;
2026 #endif
2027 } w0;
2029 #if defined(_LITTLE_ENDIAN)
2030 uint32_t w1;
2031 #endif
2032 } bits;
2033 } xpcs_dev_in_pkg_t;
2036 /* XPCS Base 10G Control2 Register */
2037 #define XPCS_PSC_SEL_MASK 0x0003
2038 #define PSC_SEL_10G_BASE_X_PCS 0x0001
2041 typedef union _xpcs_ctrl2_t {
2042 uint64_t value;
2044 struct {
2045 #if defined(_BIG_ENDIAN)
2046 uint32_t msw; /* Most significant word */
2047 uint32_t lsw; /* Least significant word */
2048 #elif defined(_LITTLE_ENDIAN)
2049 uint32_t lsw; /* Least significant word */
2050 uint32_t msw; /* Most significant word */
2051 #endif
2052 } val;
2053 struct {
2054 #if defined(_BIG_ENDIAN)
2055 uint32_t w1;
2056 #endif
2057 struct {
2058 #if defined(_BIT_FIELDS_HTOL)
2059 uint32_t res1 : 16;
2060 uint32_t res0 : 14;
2061 uint32_t csr_psc_sel : 2;
2062 #elif defined(_BIT_FIELDS_LTOH)
2063 uint32_t csr_psc_sel : 2;
2064 uint32_t res0 : 14;
2065 uint32_t res1 : 16;
2066 #endif
2067 } w0;
2069 #if defined(_LITTLE_ENDIAN)
2070 uint32_t w1;
2071 #endif
2072 } bits;
2073 } xpcs_ctrl2_t;
2076 /* XPCS Base10G Status2 Register */
2077 #define XPCS_STATUS2_DEV_PRESENT_MASK 0xc000 /* ?????? */
2078 #define XPCS_STATUS2_TX_FAULT 0x0800 /* Fault on tx path */
2079 #define XPCS_STATUS2_RX_FAULT 0x0400 /* Fault on rx path */
2080 #define XPCS_STATUS2_TEN_GBASE_W 0x0004 /* 10G-Base-W */
2081 #define XPCS_STATUS2_TEN_GBASE_X 0x0002 /* 10G-Base-X */
2082 #define XPCS_STATUS2_TEN_GBASE_R 0x0001 /* 10G-Base-R */
2084 typedef union _xpcs_stat2_t {
2085 uint64_t value;
2087 struct {
2088 #if defined(_BIG_ENDIAN)
2089 uint32_t msw; /* Most significant word */
2090 uint32_t lsw; /* Least significant word */
2091 #elif defined(_LITTLE_ENDIAN)
2092 uint32_t lsw; /* Least significant word */
2093 uint32_t msw; /* Most significant word */
2094 #endif
2095 } val;
2096 struct {
2097 #if defined(_BIG_ENDIAN)
2098 uint32_t w1;
2099 #endif
2100 struct {
2101 #if defined(_BIT_FIELDS_HTOL)
2102 uint32_t res2 : 16;
2103 uint32_t csr_dev_pres : 2;
2104 uint32_t res1 : 2;
2105 uint32_t csr_tx_fault : 1;
2106 uint32_t csr_rx_fault : 1;
2107 uint32_t res0 : 7;
2108 uint32_t ten_gbase_w : 1;
2109 uint32_t ten_gbase_x : 1;
2110 uint32_t ten_gbase_r : 1;
2111 #elif defined(_BIT_FIELDS_LTOH)
2112 uint32_t ten_gbase_r : 1;
2113 uint32_t ten_gbase_x : 1;
2114 uint32_t ten_gbase_w : 1;
2115 uint32_t res0 : 7;
2116 uint32_t csr_rx_fault : 1;
2117 uint32_t csr_tx_fault : 1;
2118 uint32_t res1 : 2;
2119 uint32_t csr_dev_pres : 2;
2120 uint32_t res2 : 16;
2121 #endif
2122 } w0;
2124 #if defined(_LITTLE_ENDIAN)
2125 uint32_t w1;
2126 #endif
2127 } bits;
2128 } xpcs_stat2_t;
2132 /* XPCS Base10G Status Register */
2133 #define XPCS_STATUS_LANE_ALIGN 0x1000 /* 10GBaseX PCS rx lanes align */
2134 #define XPCS_STATUS_PATTERN_TEST_ABLE 0x0800 /* able to generate patterns. */
2135 #define XPCS_STATUS_LANE3_SYNC 0x0008 /* Lane 3 is synchronized */
2136 #define XPCS_STATUS_LANE2_SYNC 0x0004 /* Lane 2 is synchronized */
2137 #define XPCS_STATUS_LANE1_SYNC 0x0002 /* Lane 1 is synchronized */
2138 #define XPCS_STATUS_LANE0_SYNC 0x0001 /* Lane 0 is synchronized */
2140 typedef union _xpcs_stat_t {
2141 uint64_t value;
2143 struct {
2144 #if defined(_BIG_ENDIAN)
2145 uint32_t msw; /* Most significant word */
2146 uint32_t lsw; /* Least significant word */
2147 #elif defined(_LITTLE_ENDIAN)
2148 uint32_t lsw; /* Least significant word */
2149 uint32_t msw; /* Most significant word */
2150 #endif
2151 } val;
2152 struct {
2153 #if defined(_BIG_ENDIAN)
2154 uint32_t w1;
2155 #endif
2156 struct {
2157 #if defined(_BIT_FIELDS_HTOL)
2158 uint32_t res2 : 16;
2159 uint32_t res1 : 3;
2160 uint32_t csr_lane_align : 1;
2161 uint32_t csr_pattern_test_able : 1;
2162 uint32_t res0 : 7;
2163 uint32_t csr_lane3_sync : 1;
2164 uint32_t csr_lane2_sync : 1;
2165 uint32_t csr_lane1_sync : 1;
2166 uint32_t csr_lane0_sync : 1;
2167 #elif defined(_BIT_FIELDS_LTOH)
2168 uint32_t csr_lane0_sync : 1;
2169 uint32_t csr_lane1_sync : 1;
2170 uint32_t csr_lane2_sync : 1;
2171 uint32_t csr_lane3_sync : 1;
2172 uint32_t res0 : 7;
2173 uint32_t csr_pat_test_able : 1;
2174 uint32_t csr_lane_align : 1;
2175 uint32_t res1 : 3;
2176 uint32_t res2 : 16;
2177 #endif
2178 } w0;
2180 #if defined(_LITTLE_ENDIAN)
2181 uint32_t w1;
2182 #endif
2183 } bits;
2184 } xpcs_stat_t;
2186 /* XPCS Base10G Test Control Register */
2187 #define XPCS_TEST_CTRL_TX_TEST_ENABLE 0x0004
2188 #define XPCS_TEST_CTRL_TEST_PATTERN_SEL_MASK 0x0003
2189 #define TEST_PATTERN_HIGH_FREQ 0
2190 #define TEST_PATTERN_LOW_FREQ 1
2191 #define TEST_PATTERN_MIXED_FREQ 2
2193 typedef union _xpcs_test_ctl_t {
2194 uint64_t value;
2196 struct {
2197 #if defined(_BIG_ENDIAN)
2198 uint32_t msw; /* Most significant word */
2199 uint32_t lsw; /* Least significant word */
2200 #elif defined(_LITTLE_ENDIAN)
2201 uint32_t lsw; /* Least significant word */
2202 uint32_t msw; /* Most significant word */
2203 #endif
2204 } val;
2205 struct {
2206 #if defined(_BIG_ENDIAN)
2207 uint32_t w1;
2208 #endif
2209 struct {
2210 #if defined(_BIT_FIELDS_HTOL)
2211 uint32_t res1 : 16;
2212 uint32_t res0 : 13;
2213 uint32_t csr_tx_test_en : 1;
2214 uint32_t csr_test_pat_sel : 2;
2215 #elif defined(_BIT_FIELDS_LTOH)
2216 uint32_t csr_test_pat_sel : 2;
2217 uint32_t csr_tx_test_en : 1;
2218 uint32_t res0 : 13;
2219 uint32_t res1 : 16;
2220 #endif
2221 } w0;
2223 #if defined(_LITTLE_ENDIAN)
2224 uint32_t w1;
2225 #endif
2226 } bits;
2227 } xpcs_test_ctl_t;
2229 /* XPCS Base10G Diagnostic Register */
2230 #define XPCS_DIAG_EB_ALIGN_ERR3 0x40
2231 #define XPCS_DIAG_EB_ALIGN_ERR2 0x20
2232 #define XPCS_DIAG_EB_ALIGN_ERR1 0x10
2233 #define XPCS_DIAG_EB_DESKEW_OK 0x08
2234 #define XPCS_DIAG_EB_ALIGN_DET3 0x04
2235 #define XPCS_DIAG_EB_ALIGN_DET2 0x02
2236 #define XPCS_DIAG_EB_ALIGN_DET1 0x01
2237 #define XPCS_DIAG_EB_DESKEW_LOSS 0
2239 #define XPCS_DIAG_SYNC_3_INVALID 0x8
2240 #define XPCS_DIAG_SYNC_2_INVALID 0x4
2241 #define XPCS_DIAG_SYNC_1_INVALID 0x2
2242 #define XPCS_DIAG_SYNC_IN_SYNC 0x1
2243 #define XPCS_DIAG_SYNC_LOSS_SYNC 0
2245 #define XPCS_RX_SM_RECEIVE_STATE 1
2246 #define XPCS_RX_SM_FAULT_STATE 0
2248 typedef union _xpcs_diag_t {
2249 uint64_t value;
2251 struct {
2252 #if defined(_BIG_ENDIAN)
2253 uint32_t msw; /* Most significant word */
2254 uint32_t lsw; /* Least significant word */
2255 #elif defined(_LITTLE_ENDIAN)
2256 uint32_t lsw; /* Least significant word */
2257 uint32_t msw; /* Most significant word */
2258 #endif
2259 } val;
2260 struct {
2261 #if defined(_BIG_ENDIAN)
2262 uint32_t w1;
2263 #endif
2264 struct {
2265 #if defined(_BIT_FIELDS_HTOL)
2266 uint32_t res1 : 7;
2267 uint32_t sync_sm_lane3 : 4;
2268 uint32_t sync_sm_lane2 : 4;
2269 uint32_t sync_sm_lane1 : 4;
2270 uint32_t sync_sm_lane0 : 4;
2271 uint32_t elastic_buffer_sm : 8;
2272 uint32_t receive_sm : 1;
2273 #elif defined(_BIT_FIELDS_LTOH)
2274 uint32_t receive_sm : 1;
2275 uint32_t elastic_buffer_sm : 8;
2276 uint32_t sync_sm_lane0 : 4;
2277 uint32_t sync_sm_lane1 : 4;
2278 uint32_t sync_sm_lane2 : 4;
2279 uint32_t sync_sm_lane3 : 4;
2280 uint32_t res1 : 7;
2281 #endif
2282 } w0;
2284 #if defined(_LITTLE_ENDIAN)
2285 uint32_t w1;
2286 #endif
2287 } bits;
2288 } xpcs_diag_t;
2290 /* XPCS Base10G Tx State Machine Register */
2291 #define XPCS_TX_SM_SEND_UNDERRUN 0x9
2292 #define XPCS_TX_SM_SEND_RANDOM_Q 0x8
2293 #define XPCS_TX_SM_SEND_RANDOM_K 0x7
2294 #define XPCS_TX_SM_SEND_RANDOM_A 0x6
2295 #define XPCS_TX_SM_SEND_RANDOM_R 0x5
2296 #define XPCS_TX_SM_SEND_Q 0x4
2297 #define XPCS_TX_SM_SEND_K 0x3
2298 #define XPCS_TX_SM_SEND_A 0x2
2299 #define XPCS_TX_SM_SEND_SDP 0x1
2300 #define XPCS_TX_SM_SEND_DATA 0
2302 /* XPCS Base10G Configuration Register */
2303 #define XPCS_CFG_VENDOR_DBG_SEL_MASK 0x78
2304 #define XPCS_CFG_VENDOR_DBG_SEL_SHIFT 3
2305 #define XPCS_CFG_BYPASS_SIG_DETECT 0x0004
2306 #define XPCS_CFG_ENABLE_TX_BUFFERS 0x0002
2307 #define XPCS_CFG_XPCS_ENABLE 0x0001
2309 typedef union _xpcs_config_t {
2310 uint64_t value;
2312 struct {
2313 #if defined(_BIG_ENDIAN)
2314 uint32_t msw; /* Most significant word */
2315 uint32_t lsw; /* Least significant word */
2316 #elif defined(_LITTLE_ENDIAN)
2317 uint32_t lsw; /* Least significant word */
2318 uint32_t msw; /* Most significant word */
2319 #endif
2320 } val;
2321 struct {
2322 #if defined(_BIG_ENDIAN)
2323 uint32_t w1;
2324 #endif
2325 struct {
2326 #if defined(_BIT_FIELDS_HTOL)
2327 uint32_t res1 : 16;
2328 uint32_t res0 : 9;
2329 uint32_t csr_vendor_dbg_sel : 4;
2330 uint32_t csr_bypass_sig_detect : 1;
2331 uint32_t csr_en_tx_buf : 1;
2332 uint32_t csr_xpcs_en : 1;
2333 #elif defined(_BIT_FIELDS_LTOH)
2334 uint32_t csr_xpcs_en : 1;
2335 uint32_t csr_en_tx_buf : 1;
2336 uint32_t csr_bypass_sig_detect : 1;
2337 uint32_t csr_vendor_dbg_sel : 4;
2338 uint32_t res0 : 9;
2339 uint32_t res1 : 16;
2340 #endif
2341 } w0;
2343 #if defined(_LITTLE_ENDIAN)
2344 uint32_t w1;
2345 #endif
2346 } bits;
2347 } xpcs_config_t;
2351 /* XPCS Base10G Mask1 Register */
2352 #define XPCS_MASK1_FAULT_MASK 0x0080 /* mask fault interrupt. */
2353 #define XPCS_MASK1_RX_LINK_STATUS_MASK 0x0040 /* mask linkstat interrupt */
2355 /* XPCS Base10G Packet Counter */
2356 #define XPCS_PKT_CNTR_TX_PKT_CNT_MASK 0xffff0000
2357 #define XPCS_PKT_CNTR_TX_PKT_CNT_SHIFT 16
2358 #define XPCS_PKT_CNTR_RX_PKT_CNT_MASK 0x0000ffff
2359 #define XPCS_PKT_CNTR_RX_PKT_CNT_SHIFT 0
2361 /* XPCS Base10G TX State Machine status register */
2362 #define XPCS_TX_STATE_MC_TX_STATE_MASK 0x0f
2363 #define XPCS_DESKEW_ERR_CNTR_MASK 0xff
2365 /* XPCS Base10G Lane symbol error counters */
2366 #define XPCS_SYM_ERR_CNT_L1_MASK 0xffff0000
2367 #define XPCS_SYM_ERR_CNT_L0_MASK 0x0000ffff
2368 #define XPCS_SYM_ERR_CNT_L3_MASK 0xffff0000
2369 #define XPCS_SYM_ERR_CNT_L2_MASK 0x0000ffff
2371 #define XPCS_SYM_ERR_CNT_MULTIPLIER 16
2373 /* ESR Reset Register */
2374 #define ESR_RESET_1 2
2375 #define ESR_RESET_0 1
2377 /* ESR Configuration Register */
2378 #define ESR_BLUNT_END_LOOPBACK 2
2379 #define ESR_FORCE_SERDES_SERDES_RDY 1
2381 /* ESR Neptune Serdes PLL Configuration */
2382 #define ESR_PLL_CFG_FBDIV_0 0x1
2383 #define ESR_PLL_CFG_FBDIV_1 0x2
2384 #define ESR_PLL_CFG_FBDIV_2 0x4
2385 #define ESR_PLL_CFG_HALF_RATE_0 0x8
2386 #define ESR_PLL_CFG_HALF_RATE_1 0x10
2387 #define ESR_PLL_CFG_HALF_RATE_2 0x20
2388 #define ESR_PLL_CFG_HALF_RATE_3 0x40
2389 #define ESR_PLL_CFG_1G_SERDES (ESR_PLL_CFG_FBDIV_0 | \
2390 ESR_PLL_CFG_HALF_RATE_0 | \
2391 ESR_PLL_CFG_HALF_RATE_1 | \
2392 ESR_PLL_CFG_HALF_RATE_2 | \
2393 ESR_PLL_CFG_HALF_RATE_3)
2395 #define ESR_PLL_CFG_10G_SERDES ESR_PLL_CFG_FBDIV_2
2397 /* ESR Neptune Serdes Control Register */
2398 #define ESR_CTL_EN_SYNCDET_0 0x00000001
2399 #define ESR_CTL_EN_SYNCDET_1 0x00000002
2400 #define ESR_CTL_EN_SYNCDET_2 0x00000004
2401 #define ESR_CTL_EN_SYNCDET_3 0x00000008
2402 #define ESR_CTL_OUT_EMPH_0_MASK 0x00000070
2403 #define ESR_CTL_OUT_EMPH_0_SHIFT 4
2404 #define ESR_CTL_OUT_EMPH_1_MASK 0x00000380
2405 #define ESR_CTL_OUT_EMPH_1_SHIFT 7
2406 #define ESR_CTL_OUT_EMPH_2_MASK 0x00001c00
2407 #define ESR_CTL_OUT_EMPH_2_SHIFT 10
2408 #define ESR_CTL_OUT_EMPH_3_MASK 0x0000e000
2409 #define ESR_CTL_OUT_EMPH_3_SHIFT 13
2410 #define ESR_CTL_LOSADJ_0_MASK 0x00070000
2411 #define ESR_CTL_LOSADJ_0_SHIFT 16
2412 #define ESR_CTL_LOSADJ_1_MASK 0x00380000
2413 #define ESR_CTL_LOSADJ_1_SHIFT 19
2414 #define ESR_CTL_LOSADJ_2_MASK 0x01c00000
2415 #define ESR_CTL_LOSADJ_2_SHIFT 22
2416 #define ESR_CTL_LOSADJ_3_MASK 0x0e000000
2417 #define ESR_CTL_LOSADJ_3_SHIFT 25
2418 #define ESR_CTL_RXITERM_0 0x10000000
2419 #define ESR_CTL_RXITERM_1 0x20000000
2420 #define ESR_CTL_RXITERM_2 0x40000000
2421 #define ESR_CTL_RXITERM_3 0x80000000
2422 #define ESR_CTL_1G_SERDES (ESR_CTL_EN_SYNCDET_0 | \
2423 ESR_CTL_EN_SYNCDET_1 | \
2424 ESR_CTL_EN_SYNCDET_2 | \
2425 ESR_CTL_EN_SYNCDET_3 | \
2426 (0x1 << ESR_CTL_OUT_EMPH_0_SHIFT) | \
2427 (0x1 << ESR_CTL_OUT_EMPH_1_SHIFT) | \
2428 (0x1 << ESR_CTL_OUT_EMPH_2_SHIFT) | \
2429 (0x1 << ESR_CTL_OUT_EMPH_3_SHIFT) | \
2430 (0x1 << ESR_CTL_OUT_EMPH_3_SHIFT) | \
2431 (0x1 << ESR_CTL_LOSADJ_0_SHIFT) | \
2432 (0x1 << ESR_CTL_LOSADJ_1_SHIFT) | \
2433 (0x1 << ESR_CTL_LOSADJ_2_SHIFT) | \
2434 (0x1 << ESR_CTL_LOSADJ_3_SHIFT))
2436 /* ESR Neptune Serdes Test Configuration Register */
2437 #define ESR_TSTCFG_LBTEST_MD_0_MASK 0x00000003
2438 #define ESR_TSTCFG_LBTEST_MD_0_SHIFT 0
2439 #define ESR_TSTCFG_LBTEST_MD_1_MASK 0x0000000c
2440 #define ESR_TSTCFG_LBTEST_MD_1_SHIFT 2
2441 #define ESR_TSTCFG_LBTEST_MD_2_MASK 0x00000030
2442 #define ESR_TSTCFG_LBTEST_MD_2_SHIFT 4
2443 #define ESR_TSTCFG_LBTEST_MD_3_MASK 0x000000c0
2444 #define ESR_TSTCFG_LBTEST_MD_3_SHIFT 6
2445 #define ESR_TSTCFG_LBTEST_PAD (ESR_PAD_LOOPBACK_CH3 | \
2446 ESR_PAD_LOOPBACK_CH2 | \
2447 ESR_PAD_LOOPBACK_CH1 | \
2448 ESR_PAD_LOOPBACK_CH0)
2450 /* ESR Neptune Ethernet RGMII Configuration Register */
2451 #define ESR_RGMII_PT0_IN_USE 0x00000001
2452 #define ESR_RGMII_PT1_IN_USE 0x00000002
2453 #define ESR_RGMII_PT2_IN_USE 0x00000004
2454 #define ESR_RGMII_PT3_IN_USE 0x00000008
2455 #define ESR_RGMII_REG_RW_TEST 0x00000010
2457 /* ESR Internal Signals Observation Register */
2458 #define ESR_SIG_MASK 0xFFFFFFFF
2459 #define ESR_SIG_P0_BITS_MASK 0x33E0000F
2460 #define ESR_SIG_P1_BITS_MASK 0x0C1F00F0
2461 #define ESR_SIG_SERDES_RDY0_P0 0x20000000
2462 #define ESR_SIG_DETECT0_P0 0x10000000
2463 #define ESR_SIG_SERDES_RDY0_P1 0x08000000
2464 #define ESR_SIG_DETECT0_P1 0x04000000
2465 #define ESR_SIG_XSERDES_RDY_P0 0x02000000
2466 #define ESR_SIG_XDETECT_P0_CH3 0x01000000
2467 #define ESR_SIG_XDETECT_P0_CH2 0x00800000
2468 #define ESR_SIG_XDETECT_P0_CH1 0x00400000
2469 #define ESR_SIG_XDETECT_P0_CH0 0x00200000
2470 #define ESR_SIG_XSERDES_RDY_P1 0x00100000
2471 #define ESR_SIG_XDETECT_P1_CH3 0x00080000
2472 #define ESR_SIG_XDETECT_P1_CH2 0x00040000
2473 #define ESR_SIG_XDETECT_P1_CH1 0x00020000
2474 #define ESR_SIG_XDETECT_P1_CH0 0x00010000
2475 #define ESR_SIG_LOS_P1_CH3 0x00000080
2476 #define ESR_SIG_LOS_P1_CH2 0x00000040
2477 #define ESR_SIG_LOS_P1_CH1 0x00000020
2478 #define ESR_SIG_LOS_P1_CH0 0x00000010
2479 #define ESR_SIG_LOS_P0_CH3 0x00000008
2480 #define ESR_SIG_LOS_P0_CH2 0x00000004
2481 #define ESR_SIG_LOS_P0_CH1 0x00000002
2482 #define ESR_SIG_LOS_P0_CH0 0x00000001
2483 #define ESR_SIG_P0_BITS_MASK_1G (ESR_SIG_SERDES_RDY0_P0 | \
2484 ESR_SIG_DETECT0_P0)
2485 #define ESR_SIG_P1_BITS_MASK_1G (ESR_SIG_SERDES_RDY0_P1 | \
2486 ESR_SIG_DETECT0_P1)
2488 /* ESR Debug Selection Register */
2489 #define ESR_DEBUG_SEL_MASK 0x00000003f
2491 /* ESR Test Configuration Register */
2492 #define ESR_NO_LOOPBACK_CH3 (0x0 << 6)
2493 #define ESR_EWRAP_CH3 (0x1 << 6)
2494 #define ESR_PAD_LOOPBACK_CH3 (0x2 << 6)
2495 #define ESR_REVLOOPBACK_CH3 (0x3 << 6)
2496 #define ESR_NO_LOOPBACK_CH2 (0x0 << 4)
2497 #define ESR_EWRAP_CH2 (0x1 << 4)
2498 #define ESR_PAD_LOOPBACK_CH2 (0x2 << 4)
2499 #define ESR_REVLOOPBACK_CH2 (0x3 << 4)
2500 #define ESR_NO_LOOPBACK_CH1 (0x0 << 2)
2501 #define ESR_EWRAP_CH1 (0x1 << 2)
2502 #define ESR_PAD_LOOPBACK_CH1 (0x2 << 2)
2503 #define ESR_REVLOOPBACK_CH1 (0x3 << 2)
2504 #define ESR_NO_LOOPBACK_CH0 0x0
2505 #define ESR_EWRAP_CH0 0x1
2506 #define ESR_PAD_LOOPBACK_CH0 0x2
2507 #define ESR_REVLOOPBACK_CH0 0x3
2509 /* convert values */
2510 #define NXGE_BASE(x, y) \
2511 (((y) << (x ## _SHIFT)) & (x ## _MASK))
2513 #define NXGE_VAL_GET(fieldname, regval) \
2514 (((regval) & ((fieldname) ## _MASK)) >> ((fieldname) ## _SHIFT))
2516 #define NXGE_VAL_SET(fieldname, regval, val) \
2518 (regval) &= ~((fieldname) ## _MASK); \
2519 (regval) |= ((val) << (fieldname ## _SHIFT)); \
2523 #ifdef __cplusplus
2525 #endif
2527 #endif /* _SYS_MAC_NXGE_MAC_HW_H */