1 /* 2 * CDDL HEADER START 3 * 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. 7 * 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. 12 * 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] 18 * 19 * CDDL HEADER END 20 */ 21 /* 22 * Copyright 2008 Sun Microsystems, Inc. All rights reserved. 23 * Use is subject to license terms. 24 */ 25 26 #ifndef _SYS_MAC_NXGE_MAC_HW_H 27 #define _SYS_MAC_NXGE_MAC_HW_H 28 29 #pragma ident "%Z%%M% %I% %E% SMI" 30 31 #ifdef __cplusplus 32 extern "C" { 33 #endif 34 35 #include <nxge_defs.h> 36 37 /* -------------------------- From May's template --------------------------- */ 38 39 #define NXGE_1GETHERMIN 255 40 #define NXGE_ETHERMIN 97 41 #define NXGE_MAX_HEADER 250 42 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; 49 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 */ 56 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 */ 65 66 /* -------------------------------------------------------------------------- */ 67 68 #define XMAC_PORT_0 0 69 #define XMAC_PORT_1 1 70 #define BMAC_PORT_0 2 71 #define BMAC_PORT_1 3 72 73 #define MAC_RESET_WAIT 10 /* usecs */ 74 75 #define MAC_ADDR_REG_MASK 0xFFFF 76 77 /* 78 * Neptune port PHY type and Speed encoding. 79 * 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. 86 * 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 92 */ 93 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 98 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 106 107 #define NXGE_PORT_SPD_SHIFT 0 108 #define NXGE_PORT_SPD_MASK 0x0f 109 110 #define NXGE_PHY_SHIFT 16 111 #define NXGE_PHY_MASK 0x0f0000 112 113 /* 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. 122 */ 123 #define NXGE_PORT_10G_COPPER (NXGE_PORT_SPD_10G | \ 124 (NXGE_PHY_COPPER << NXGE_PHY_SHIFT)) 125 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)) 138 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)) 142 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)) 147 148 #define NXGE_PORT_TYPE_MASK (NXGE_PORT_SPD_MASK | NXGE_PHY_MASK) 149 150 /* number of bits used for phy/spd encoding per port */ 151 #define NXGE_PORT_TYPE_SHIFT 4 152 153 /* Network Modes */ 154 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; 166 167 typedef enum nxge_port { 168 PORT_TYPE_XMAC = 1, 169 PORT_TYPE_BMAC, 170 PORT_TYPE_LOGICAL 171 } nxge_port_t; 172 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; 186 187 typedef enum nxge_linkchk_mode { 188 LINKCHK_INTR = 1, 189 LINKCHK_TIMER 190 } nxge_linkchk_mode_t; 191 192 typedef enum { 193 LINK_INTR_STOP, 194 LINK_INTR_START 195 } link_intr_enable_t, *link_intr_enable_pt; 196 197 typedef enum { 198 LINK_MONITOR_STOP, 199 LINK_MONITOR_START, 200 LINK_MONITOR_STOPPING 201 } link_mon_enable_t, *link_mon_enable_pt; 202 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; 212 213 /* macros for port offset calculations */ 214 215 #define PORT_1_OFFSET 0x6000 216 #define PORT_GT_1_OFFSET 0x4000 217 218 /* XMAC address macros */ 219 220 #define XMAC_ADDR_OFFSET_0 0 221 #define XMAC_ADDR_OFFSET_1 0x6000 222 223 #define XMAC_ADDR_OFFSET(port_num)\ 224 (XMAC_ADDR_OFFSET_0 + ((port_num) * PORT_1_OFFSET)) 225 226 #define XMAC_REG_ADDR(port_num, reg)\ 227 (FZC_MAC + (XMAC_ADDR_OFFSET(port_num)) + (reg)) 228 229 #define XMAC_PORT_ADDR(port_num)\ 230 (FZC_MAC + XMAC_ADDR_OFFSET(port_num)) 231 232 /* BMAC address macros */ 233 234 #define BMAC_ADDR_OFFSET_2 0x0C000 235 #define BMAC_ADDR_OFFSET_3 0x10000 236 237 #define BMAC_ADDR_OFFSET(port_num)\ 238 (BMAC_ADDR_OFFSET_2 + (((port_num) - 2) * PORT_GT_1_OFFSET)) 239 240 #define BMAC_REG_ADDR(port_num, reg)\ 241 (FZC_MAC + (BMAC_ADDR_OFFSET(port_num)) + (reg)) 242 243 #define BMAC_PORT_ADDR(port_num)\ 244 (FZC_MAC + BMAC_ADDR_OFFSET(port_num)) 245 246 /* PCS address macros */ 247 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 252 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))) 257 258 #define PCS_REG_ADDR(port_num, reg)\ 259 (FZC_MAC + (PCS_ADDR_OFFSET((port_num)) + (reg))) 260 261 #define PCS_PORT_ADDR(port_num)\ 262 (FZC_MAC + (PCS_ADDR_OFFSET(port_num))) 263 264 /* XPCS address macros */ 265 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)) 270 271 #define XPCS_ADDR(port_num, reg)\ 272 (FZC_MAC + (XPCS_ADDR_OFFSET((port_num)) + (reg))) 273 274 #define XPCS_PORT_ADDR(port_num)\ 275 (FZC_MAC + (XPCS_ADDR_OFFSET(port_num))) 276 277 /* ESR address macro */ 278 #define ESR_ADDR_OFFSET 0x14000 279 #define ESR_ADDR(reg)\ 280 (FZC_MAC + (ESR_ADDR_OFFSET) + (reg)) 281 282 /* MIF address macros */ 283 #define MIF_ADDR_OFFSET 0x16000 284 #define MIF_ADDR(reg)\ 285 (FZC_MAC + (MIF_ADDR_OFFSET) + (reg)) 286 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 */ 299 300 typedef union _btxmac_config_t { 301 uint64_t value; 302 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; 331 332 #if defined(_LITTLE_ENDIAN) 333 uint32_t w1; 334 #endif 335 } bits; 336 } btxmac_config_t, *p_btxmac_config_t; 337 338 #define RXMAC_CONFIG_REG 0x068 /* RX MAC config */ 339 340 typedef union _brxmac_config_t { 341 uint64_t value; 342 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; 385 386 #if defined(_LITTLE_ENDIAN) 387 uint32_t w1; 388 #endif 389 } bits; 390 } brxmac_config_t, *p_brxmac_config_t; 391 392 #define MAC_CTRL_CONFIG_REG 0x070 /* MAC control config */ 393 #define MAC_XIF_CONFIG_REG 0x078 /* XIF config */ 394 395 typedef union _bxif_config_t { 396 uint64_t value; 397 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; 434 435 #if defined(_LITTLE_ENDIAN) 436 uint32_t w1; 437 #endif 438 } bits; 439 } bxif_config_t, *p_bxif_config_t; 440 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) 519 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 */ 530 531 /* xmac config bit fields */ 532 typedef union _xmac_cfg_t { 533 uint64_t value; 534 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; 611 612 #if defined(_LITTLE_ENDIAN) 613 uint32_t w1; 614 #endif 615 } bits; 616 } xmac_cfg_t, *p_xmac_cfg_t; 617 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) 745 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 */ 757 758 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 */ 769 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 789 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 802 803 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 */ 807 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 */ 814 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 */ 824 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 831 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 */ 835 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 848 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 */ 853 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 */ 861 862 /* MAC IPG Registers */ 863 #define BMAC_MIN_FRAME_MASK 0x3FF /* 10-bit reg */ 864 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 870 871 /* MAC Preamble size register */ 872 #define BMAC_PA_SIZE_MASK 0x000003FF 873 /* # of preable bytes TxMAC sends at the beginning of each frame */ 874 875 /* 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] 891 * 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 901 */ 902 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) 906 907 /* hash table registers */ 908 #define MAC_MAX_HASH_ENTRY 16 909 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 927 928 #define BMAC_ADDR0_CMPEN 0x00000001 929 #define BMAC_ADDRN_CMPEN(x) (BMAC_ADDR0_CMP_EN << (x)) 930 931 /* MAC Host Info Table Registers */ 932 #define BMAC_MAX_HOST_INFO_ENTRY 9 /* 9 host entries */ 933 934 /* 935 * ********************* XMAC registers ********************************* 936 */ 937 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 */ 943 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 */ 952 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 */ 975 976 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 982 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] */ 987 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 */ 993 994 #define XMAC_WARNING_MSG_ENABLE 0x00000080 /* Sim warning msg enable */ 995 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 */ 1010 1011 1012 /* MAC transceiver (XIF) configuration registers */ 1013 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 */ 1029 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 1039 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 1048 1049 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 */ 1057 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 1078 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 1092 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 1104 1105 /* Register size masking */ 1106 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 1140 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) 1144 1145 /* Max / Min parameters for Neptune MAC */ 1146 1147 #define MAC_MAX_ALT_ADDR_ENTRY XMAC_MAX_ALT_ADDR_ENTRY 1148 #define MAC_MAX_HOST_INFO_ENTRY XMAC_MAX_HOST_INFO_ENTRY 1149 1150 /* HostInfo entry for the unique MAC address */ 1151 #define XMAC_UNIQUE_HOST_INFO_ENTRY 17 1152 #define BMAC_UNIQUE_HOST_INFO_ENTRY 0 1153 1154 /* HostInfo entry for the multicat address */ 1155 #define XMAC_MULTI_HOST_INFO_ENTRY 16 1156 #define BMAC_MULTI_HOST_INFO_ENTRY 8 1157 1158 /* XMAC Host Info Register */ 1159 typedef union hostinfo { 1160 1161 uint64_t value; 1162 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; 1189 1190 #if defined(_LITTLE_ENDIAN) 1191 uint32_t w1; 1192 #endif 1193 } bits; 1194 1195 } hostinfo_t; 1196 1197 typedef union hostinfo *hostinfo_pt; 1198 1199 #define XMAC_HI_RDC_TBL_NUM_MASK 0x00000007 1200 #define XMAC_HI_MAC_PREF 0x00000100 1201 1202 #define XMAC_MAX_HOST_INFO_ENTRY 20 /* 20 host entries */ 1203 1204 /* 1205 * ******************** MIF registers ********************************* 1206 */ 1207 1208 /* 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. 1216 */ 1217 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 */ 1236 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 1243 1244 typedef union _mif_frame_t { 1245 1246 uint64_t value; 1247 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; 1280 1281 #if defined(_LITTLE_ENDIAN) 1282 uint32_t w1; 1283 #endif 1284 } bits; 1285 } mif_frame_t; 1286 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 */ 1300 1301 typedef union _mif_cfg_t { 1302 1303 uint64_t value; 1304 1305 struct { 1306 #if defined(_BIG_ENDIAN) 1307 uint32_t msw; /* Most significant word */ 1308 uint32_t lsw; /* Least significant word */ 1309 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; 1342 1343 #if defined(_LITTLE_ENDIAN) 1344 uint32_t w1; 1345 #endif 1346 } bits; 1347 1348 } mif_cfg_t; 1349 1350 #define MIF_POLL_STATUS_DATA_MASK 0xffff0000 1351 #define MIF_POLL_STATUS_STAT_MASK 0x0000ffff 1352 1353 typedef union _mif_poll_stat_t { 1354 uint64_t value; 1355 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; 1378 1379 #if defined(_LITTLE_ENDIAN) 1380 uint32_t w1; 1381 #endif 1382 } bits; 1383 } mif_poll_stat_t; 1384 1385 1386 #define MIF_POLL_MASK_MASK 0x0000ffff 1387 1388 typedef union _mif_poll_mask_t { 1389 uint64_t value; 1390 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; 1413 1414 #if defined(_LITTLE_ENDIAN) 1415 uint32_t w1; 1416 #endif 1417 } bits; 1418 } mif_poll_mask_t; 1419 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 1426 1427 typedef union _mif_stat_t { 1428 uint64_t value; 1429 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; 1452 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; 1462 1463 #if defined(_LITTLE_ENDIAN) 1464 uint32_t w1; 1465 #endif 1466 } bits; 1467 } mif_stat_t; 1468 1469 /* MIF State Machine Register */ 1470 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 1486 1487 1488 /* 1489 * ******************** PCS registers ********************************* 1490 */ 1491 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. */ 1502 1503 typedef union _pcs_ctrl_t { 1504 uint64_t value; 1505 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; 1548 1549 #if defined(_LITTLE_ENDIAN) 1550 uint32_t w1; 1551 #endif 1552 } bits; 1553 } pcs_ctrl_t; 1554 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 */ 1562 1563 typedef union _pcs_stat_t { 1564 uint64_t value; 1565 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; 1602 1603 #if defined(_LITTLE_ENDIAN) 1604 uint32_t w1; 1605 #endif 1606 } bits; 1607 } pcs_stat_t; 1608 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 */ 1617 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 1626 1627 typedef union _pcs_anar_t { 1628 uint64_t value; 1629 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; 1668 1669 #if defined(_LITTLE_ENDIAN) 1670 uint32_t w1; 1671 #endif 1672 } bits; 1673 } pcs_anar_t, *p_pcs_anar_t; 1674 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 */ 1682 1683 typedef union _pcs_cfg_t { 1684 uint64_t value; 1685 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; 1718 1719 #if defined(_LITTLE_ENDIAN) 1720 uint32_t w1; 1721 #endif 1722 } bits; 1723 } pcs_cfg_t, *p_pcs_cfg_t; 1724 1725 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 */ 1746 1747 typedef union _pcs_stat_mc_t { 1748 uint64_t value; 1749 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; 1802 1803 #if defined(_LITTLE_ENDIAN) 1804 uint32_t w1; 1805 #endif 1806 } bits; 1807 } pcs_stat_mc_t, *p_pcs_stat_mc_t; 1808 1809 #define PCS_INTR_STATUS_LINK_CHANGE 0x04 /* link status has changed */ 1810 1811 /* 1812 * control which network interface is used. no more than one bit should 1813 * be set. 1814 */ 1815 #define PCS_DATAPATH_MODE_PCS 0 /* Internal PCS is used */ 1816 #define PCS_DATAPATH_MODE_MII 0x00000002 /* GMII/RGMII is selected. */ 1817 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 1821 1822 /* 1823 * ******************** XPCS registers ********************************* 1824 */ 1825 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 1834 1835 1836 1837 typedef union _xpcs_ctrl1_t { 1838 uint64_t value; 1839 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; 1878 1879 #if defined(_LITTLE_ENDIAN) 1880 uint32_t w1; 1881 #endif 1882 } bits; 1883 } xpcs_ctrl1_t; 1884 1885 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 */ 1891 1892 1893 typedef union _xpcs_stat1_t { 1894 uint64_t value; 1895 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; 1928 1929 #if defined(_LITTLE_ENDIAN) 1930 uint32_t w1; 1931 #endif 1932 } bits; 1933 } xpcs_stat1_t; 1934 1935 1936 /* XPCS Base Speed Ability Register. Indicates 10G capability */ 1937 #define XPCS_SPEED_ABILITY_10_GIG 0x0001 1938 1939 1940 typedef union _xpcs_speed_ab_t { 1941 uint64_t value; 1942 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; 1967 1968 #if defined(_LITTLE_ENDIAN) 1969 uint32_t w1; 1970 #endif 1971 } bits; 1972 } xpcs_speed_ab_t; 1973 1974 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 1984 1985 1986 1987 typedef union _xpcs_dev_in_pkg_t { 1988 uint64_t value; 1989 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; 2028 2029 #if defined(_LITTLE_ENDIAN) 2030 uint32_t w1; 2031 #endif 2032 } bits; 2033 } xpcs_dev_in_pkg_t; 2034 2035 2036 /* XPCS Base 10G Control2 Register */ 2037 #define XPCS_PSC_SEL_MASK 0x0003 2038 #define PSC_SEL_10G_BASE_X_PCS 0x0001 2039 2040 2041 typedef union _xpcs_ctrl2_t { 2042 uint64_t value; 2043 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; 2068 2069 #if defined(_LITTLE_ENDIAN) 2070 uint32_t w1; 2071 #endif 2072 } bits; 2073 } xpcs_ctrl2_t; 2074 2075 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 */ 2083 2084 typedef union _xpcs_stat2_t { 2085 uint64_t value; 2086 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; 2123 2124 #if defined(_LITTLE_ENDIAN) 2125 uint32_t w1; 2126 #endif 2127 } bits; 2128 } xpcs_stat2_t; 2129 2130 2131 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 */ 2139 2140 typedef union _xpcs_stat_t { 2141 uint64_t value; 2142 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; 2179 2180 #if defined(_LITTLE_ENDIAN) 2181 uint32_t w1; 2182 #endif 2183 } bits; 2184 } xpcs_stat_t; 2185 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 2192 2193 typedef union _xpcs_test_ctl_t { 2194 uint64_t value; 2195 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; 2222 2223 #if defined(_LITTLE_ENDIAN) 2224 uint32_t w1; 2225 #endif 2226 } bits; 2227 } xpcs_test_ctl_t; 2228 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 2238 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 2244 2245 #define XPCS_RX_SM_RECEIVE_STATE 1 2246 #define XPCS_RX_SM_FAULT_STATE 0 2247 2248 typedef union _xpcs_diag_t { 2249 uint64_t value; 2250 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; 2283 2284 #if defined(_LITTLE_ENDIAN) 2285 uint32_t w1; 2286 #endif 2287 } bits; 2288 } xpcs_diag_t; 2289 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 2301 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 2308 2309 typedef union _xpcs_config_t { 2310 uint64_t value; 2311 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; 2342 2343 #if defined(_LITTLE_ENDIAN) 2344 uint32_t w1; 2345 #endif 2346 } bits; 2347 } xpcs_config_t; 2348 2349 2350 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 */ 2354 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 2360 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 2364 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 2370 2371 #define XPCS_SYM_ERR_CNT_MULTIPLIER 16 2372 2373 /* ESR Reset Register */ 2374 #define ESR_RESET_1 2 2375 #define ESR_RESET_0 1 2376 2377 /* ESR Configuration Register */ 2378 #define ESR_BLUNT_END_LOOPBACK 2 2379 #define ESR_FORCE_SERDES_SERDES_RDY 1 2380 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) 2394 2395 #define ESR_PLL_CFG_10G_SERDES ESR_PLL_CFG_FBDIV_2 2396 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)) 2435 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) 2449 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 2456 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) 2487 2488 /* ESR Debug Selection Register */ 2489 #define ESR_DEBUG_SEL_MASK 0x00000003f 2490 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 2508 2509 /* convert values */ 2510 #define NXGE_BASE(x, y) \ 2511 (((y) << (x ## _SHIFT)) & (x ## _MASK)) 2512 2513 #define NXGE_VAL_GET(fieldname, regval) \ 2514 (((regval) & ((fieldname) ## _MASK)) >> ((fieldname) ## _SHIFT)) 2515 2516 #define NXGE_VAL_SET(fieldname, regval, val) \ 2517 { \ 2518 (regval) &= ~((fieldname) ## _MASK); \ 2519 (regval) |= ((val) << (fieldname ## _SHIFT)); \ 2520 } 2521 2522 2523 #ifdef __cplusplus 2524 } 2525 #endif 2526 2527 #endif /* _SYS_MAC_NXGE_MAC_HW_H */ 2528