diff options
Diffstat (limited to 'drivers/net/bnx2x_link.c')
-rw-r--r-- | drivers/net/bnx2x_link.c | 57 |
1 files changed, 29 insertions, 28 deletions
diff --git a/drivers/net/bnx2x_link.c b/drivers/net/bnx2x_link.c index 876a968c5941..d7398a34f933 100644 --- a/drivers/net/bnx2x_link.c +++ b/drivers/net/bnx2x_link.c | |||
@@ -31,7 +31,7 @@ | |||
31 | 31 | ||
32 | /********************************************************/ | 32 | /********************************************************/ |
33 | #define SUPPORT_CL73 0 /* Currently no */ | 33 | #define SUPPORT_CL73 0 /* Currently no */ |
34 | #define ETH_HLEN 14 | 34 | #define ETH_HLEN 14 |
35 | #define ETH_OVREHEAD (ETH_HLEN + 8)/* 8 for CRC + VLAN*/ | 35 | #define ETH_OVREHEAD (ETH_HLEN + 8)/* 8 for CRC + VLAN*/ |
36 | #define ETH_MIN_PACKET_SIZE 60 | 36 | #define ETH_MIN_PACKET_SIZE 60 |
37 | #define ETH_MAX_PACKET_SIZE 1500 | 37 | #define ETH_MAX_PACKET_SIZE 1500 |
@@ -40,7 +40,7 @@ | |||
40 | #define BMAC_CONTROL_RX_ENABLE 2 | 40 | #define BMAC_CONTROL_RX_ENABLE 2 |
41 | 41 | ||
42 | /***********************************************************/ | 42 | /***********************************************************/ |
43 | /* Shortcut definitions */ | 43 | /* Shortcut definitions */ |
44 | /***********************************************************/ | 44 | /***********************************************************/ |
45 | 45 | ||
46 | #define NIG_STATUS_XGXS0_LINK10G \ | 46 | #define NIG_STATUS_XGXS0_LINK10G \ |
@@ -79,12 +79,12 @@ | |||
79 | 79 | ||
80 | #define AUTONEG_CL37 SHARED_HW_CFG_AN_ENABLE_CL37 | 80 | #define AUTONEG_CL37 SHARED_HW_CFG_AN_ENABLE_CL37 |
81 | #define AUTONEG_CL73 SHARED_HW_CFG_AN_ENABLE_CL73 | 81 | #define AUTONEG_CL73 SHARED_HW_CFG_AN_ENABLE_CL73 |
82 | #define AUTONEG_BAM SHARED_HW_CFG_AN_ENABLE_BAM | 82 | #define AUTONEG_BAM SHARED_HW_CFG_AN_ENABLE_BAM |
83 | #define AUTONEG_PARALLEL \ | 83 | #define AUTONEG_PARALLEL \ |
84 | SHARED_HW_CFG_AN_ENABLE_PARALLEL_DETECTION | 84 | SHARED_HW_CFG_AN_ENABLE_PARALLEL_DETECTION |
85 | #define AUTONEG_SGMII_FIBER_AUTODET \ | 85 | #define AUTONEG_SGMII_FIBER_AUTODET \ |
86 | SHARED_HW_CFG_AN_EN_SGMII_FIBER_AUTO_DETECT | 86 | SHARED_HW_CFG_AN_EN_SGMII_FIBER_AUTO_DETECT |
87 | #define AUTONEG_REMOTE_PHY SHARED_HW_CFG_AN_ENABLE_REMOTE_PHY | 87 | #define AUTONEG_REMOTE_PHY SHARED_HW_CFG_AN_ENABLE_REMOTE_PHY |
88 | 88 | ||
89 | #define GP_STATUS_PAUSE_RSOLUTION_TXSIDE \ | 89 | #define GP_STATUS_PAUSE_RSOLUTION_TXSIDE \ |
90 | MDIO_GP_STATUS_TOP_AN_STATUS1_PAUSE_RSOLUTION_TXSIDE | 90 | MDIO_GP_STATUS_TOP_AN_STATUS1_PAUSE_RSOLUTION_TXSIDE |
@@ -201,11 +201,10 @@ static void bnx2x_emac_init(struct link_params *params, | |||
201 | /* init emac - use read-modify-write */ | 201 | /* init emac - use read-modify-write */ |
202 | /* self clear reset */ | 202 | /* self clear reset */ |
203 | val = REG_RD(bp, emac_base + EMAC_REG_EMAC_MODE); | 203 | val = REG_RD(bp, emac_base + EMAC_REG_EMAC_MODE); |
204 | EMAC_WR(EMAC_REG_EMAC_MODE, (val | EMAC_MODE_RESET)); | 204 | EMAC_WR(bp, EMAC_REG_EMAC_MODE, (val | EMAC_MODE_RESET)); |
205 | 205 | ||
206 | timeout = 200; | 206 | timeout = 200; |
207 | do | 207 | do { |
208 | { | ||
209 | val = REG_RD(bp, emac_base + EMAC_REG_EMAC_MODE); | 208 | val = REG_RD(bp, emac_base + EMAC_REG_EMAC_MODE); |
210 | DP(NETIF_MSG_LINK, "EMAC reset reg is %u\n", val); | 209 | DP(NETIF_MSG_LINK, "EMAC reset reg is %u\n", val); |
211 | if (!timeout) { | 210 | if (!timeout) { |
@@ -213,18 +212,18 @@ static void bnx2x_emac_init(struct link_params *params, | |||
213 | return; | 212 | return; |
214 | } | 213 | } |
215 | timeout--; | 214 | timeout--; |
216 | }while (val & EMAC_MODE_RESET); | 215 | } while (val & EMAC_MODE_RESET); |
217 | 216 | ||
218 | /* Set mac address */ | 217 | /* Set mac address */ |
219 | val = ((params->mac_addr[0] << 8) | | 218 | val = ((params->mac_addr[0] << 8) | |
220 | params->mac_addr[1]); | 219 | params->mac_addr[1]); |
221 | EMAC_WR(EMAC_REG_EMAC_MAC_MATCH, val); | 220 | EMAC_WR(bp, EMAC_REG_EMAC_MAC_MATCH, val); |
222 | 221 | ||
223 | val = ((params->mac_addr[2] << 24) | | 222 | val = ((params->mac_addr[2] << 24) | |
224 | (params->mac_addr[3] << 16) | | 223 | (params->mac_addr[3] << 16) | |
225 | (params->mac_addr[4] << 8) | | 224 | (params->mac_addr[4] << 8) | |
226 | params->mac_addr[5]); | 225 | params->mac_addr[5]); |
227 | EMAC_WR(EMAC_REG_EMAC_MAC_MATCH + 4, val); | 226 | EMAC_WR(bp, EMAC_REG_EMAC_MAC_MATCH + 4, val); |
228 | } | 227 | } |
229 | 228 | ||
230 | static u8 bnx2x_emac_enable(struct link_params *params, | 229 | static u8 bnx2x_emac_enable(struct link_params *params, |
@@ -285,7 +284,7 @@ static u8 bnx2x_emac_enable(struct link_params *params, | |||
285 | if (CHIP_REV_IS_SLOW(bp)) { | 284 | if (CHIP_REV_IS_SLOW(bp)) { |
286 | /* config GMII mode */ | 285 | /* config GMII mode */ |
287 | val = REG_RD(bp, emac_base + EMAC_REG_EMAC_MODE); | 286 | val = REG_RD(bp, emac_base + EMAC_REG_EMAC_MODE); |
288 | EMAC_WR(EMAC_REG_EMAC_MODE, | 287 | EMAC_WR(bp, EMAC_REG_EMAC_MODE, |
289 | (val | EMAC_MODE_PORT_GMII)); | 288 | (val | EMAC_MODE_PORT_GMII)); |
290 | } else { /* ASIC */ | 289 | } else { /* ASIC */ |
291 | /* pause enable/disable */ | 290 | /* pause enable/disable */ |
@@ -309,7 +308,7 @@ static u8 bnx2x_emac_enable(struct link_params *params, | |||
309 | /* KEEP_VLAN_TAG, promiscuous */ | 308 | /* KEEP_VLAN_TAG, promiscuous */ |
310 | val = REG_RD(bp, emac_base + EMAC_REG_EMAC_RX_MODE); | 309 | val = REG_RD(bp, emac_base + EMAC_REG_EMAC_RX_MODE); |
311 | val |= EMAC_RX_MODE_KEEP_VLAN_TAG | EMAC_RX_MODE_PROMISCUOUS; | 310 | val |= EMAC_RX_MODE_KEEP_VLAN_TAG | EMAC_RX_MODE_PROMISCUOUS; |
312 | EMAC_WR(EMAC_REG_EMAC_RX_MODE, val); | 311 | EMAC_WR(bp, EMAC_REG_EMAC_RX_MODE, val); |
313 | 312 | ||
314 | /* Set Loopback */ | 313 | /* Set Loopback */ |
315 | val = REG_RD(bp, emac_base + EMAC_REG_EMAC_MODE); | 314 | val = REG_RD(bp, emac_base + EMAC_REG_EMAC_MODE); |
@@ -317,10 +316,10 @@ static u8 bnx2x_emac_enable(struct link_params *params, | |||
317 | val |= 0x810; | 316 | val |= 0x810; |
318 | else | 317 | else |
319 | val &= ~0x810; | 318 | val &= ~0x810; |
320 | EMAC_WR(EMAC_REG_EMAC_MODE, val); | 319 | EMAC_WR(bp, EMAC_REG_EMAC_MODE, val); |
321 | 320 | ||
322 | /* enable emac for jumbo packets */ | 321 | /* enable emac for jumbo packets */ |
323 | EMAC_WR(EMAC_REG_EMAC_RX_MTU_SIZE, | 322 | EMAC_WR(bp, EMAC_REG_EMAC_RX_MTU_SIZE, |
324 | (EMAC_RX_MTU_SIZE_JUMBO_ENA | | 323 | (EMAC_RX_MTU_SIZE_JUMBO_ENA | |
325 | (ETH_MAX_JUMBO_PACKET_SIZE + ETH_OVREHEAD))); | 324 | (ETH_MAX_JUMBO_PACKET_SIZE + ETH_OVREHEAD))); |
326 | 325 | ||
@@ -646,7 +645,7 @@ static void bnx2x_bmac_rx_disable(struct bnx2x *bp, u8 port) | |||
646 | u32 bmac_addr = port ? NIG_REG_INGRESS_BMAC1_MEM : | 645 | u32 bmac_addr = port ? NIG_REG_INGRESS_BMAC1_MEM : |
647 | NIG_REG_INGRESS_BMAC0_MEM; | 646 | NIG_REG_INGRESS_BMAC0_MEM; |
648 | u32 wb_data[2]; | 647 | u32 wb_data[2]; |
649 | u32 nig_bmac_enable = REG_RD(bp, NIG_REG_BMAC0_REGS_OUT_EN + port*4); | 648 | u32 nig_bmac_enable = REG_RD(bp, NIG_REG_BMAC0_REGS_OUT_EN + port*4); |
650 | 649 | ||
651 | /* Only if the bmac is out of reset */ | 650 | /* Only if the bmac is out of reset */ |
652 | if (REG_RD(bp, MISC_REG_RESET_REG_2) & | 651 | if (REG_RD(bp, MISC_REG_RESET_REG_2) & |
@@ -1036,7 +1035,7 @@ static void bnx2x_set_swap_lanes(struct link_params *params) | |||
1036 | } | 1035 | } |
1037 | 1036 | ||
1038 | static void bnx2x_set_parallel_detection(struct link_params *params, | 1037 | static void bnx2x_set_parallel_detection(struct link_params *params, |
1039 | u8 phy_flags) | 1038 | u8 phy_flags) |
1040 | { | 1039 | { |
1041 | struct bnx2x *bp = params->bp; | 1040 | struct bnx2x *bp = params->bp; |
1042 | u16 control2; | 1041 | u16 control2; |
@@ -1489,8 +1488,8 @@ static u8 bnx2x_ext_phy_resove_fc(struct link_params *params, | |||
1489 | { | 1488 | { |
1490 | struct bnx2x *bp = params->bp; | 1489 | struct bnx2x *bp = params->bp; |
1491 | u8 ext_phy_addr; | 1490 | u8 ext_phy_addr; |
1492 | u16 ld_pause; /* local */ | 1491 | u16 ld_pause; /* local */ |
1493 | u16 lp_pause; /* link partner */ | 1492 | u16 lp_pause; /* link partner */ |
1494 | u16 an_complete; /* AN complete */ | 1493 | u16 an_complete; /* AN complete */ |
1495 | u16 pause_result; | 1494 | u16 pause_result; |
1496 | u8 ret = 0; | 1495 | u8 ret = 0; |
@@ -1565,8 +1564,8 @@ static void bnx2x_flow_ctrl_resolve(struct link_params *params, | |||
1565 | u32 gp_status) | 1564 | u32 gp_status) |
1566 | { | 1565 | { |
1567 | struct bnx2x *bp = params->bp; | 1566 | struct bnx2x *bp = params->bp; |
1568 | u16 ld_pause; /* local driver */ | 1567 | u16 ld_pause; /* local driver */ |
1569 | u16 lp_pause; /* link partner */ | 1568 | u16 lp_pause; /* link partner */ |
1570 | u16 pause_result; | 1569 | u16 pause_result; |
1571 | 1570 | ||
1572 | vars->flow_ctrl = FLOW_CTRL_NONE; | 1571 | vars->flow_ctrl = FLOW_CTRL_NONE; |
@@ -1611,6 +1610,7 @@ static u8 bnx2x_link_settings_status(struct link_params *params, | |||
1611 | u32 gp_status) | 1610 | u32 gp_status) |
1612 | { | 1611 | { |
1613 | struct bnx2x *bp = params->bp; | 1612 | struct bnx2x *bp = params->bp; |
1613 | |||
1614 | u8 rc = 0; | 1614 | u8 rc = 0; |
1615 | vars->link_status = 0; | 1615 | vars->link_status = 0; |
1616 | 1616 | ||
@@ -3303,7 +3303,7 @@ static void bnx2x_link_int_enable(struct link_params *params) | |||
3303 | * link management | 3303 | * link management |
3304 | */ | 3304 | */ |
3305 | static void bnx2x_link_int_ack(struct link_params *params, | 3305 | static void bnx2x_link_int_ack(struct link_params *params, |
3306 | struct link_vars *vars, u16 is_10g) | 3306 | struct link_vars *vars, u8 is_10g) |
3307 | { | 3307 | { |
3308 | struct bnx2x *bp = params->bp; | 3308 | struct bnx2x *bp = params->bp; |
3309 | u8 port = params->port; | 3309 | u8 port = params->port; |
@@ -3781,7 +3781,7 @@ u8 bnx2x_set_led(struct bnx2x *bp, u8 port, u8 mode, u32 speed, | |||
3781 | SHARED_HW_CFG_LED_MAC1); | 3781 | SHARED_HW_CFG_LED_MAC1); |
3782 | 3782 | ||
3783 | tmp = EMAC_RD(bp, EMAC_REG_EMAC_LED); | 3783 | tmp = EMAC_RD(bp, EMAC_REG_EMAC_LED); |
3784 | EMAC_WR(EMAC_REG_EMAC_LED, (tmp | EMAC_LED_OVERRIDE)); | 3784 | EMAC_WR(bp, EMAC_REG_EMAC_LED, (tmp | EMAC_LED_OVERRIDE)); |
3785 | break; | 3785 | break; |
3786 | 3786 | ||
3787 | case LED_MODE_OPER: | 3787 | case LED_MODE_OPER: |
@@ -3794,7 +3794,7 @@ u8 bnx2x_set_led(struct bnx2x *bp, u8 port, u8 mode, u32 speed, | |||
3794 | REG_WR(bp, NIG_REG_LED_CONTROL_BLINK_RATE_ENA_P0 + | 3794 | REG_WR(bp, NIG_REG_LED_CONTROL_BLINK_RATE_ENA_P0 + |
3795 | port*4, 1); | 3795 | port*4, 1); |
3796 | tmp = EMAC_RD(bp, EMAC_REG_EMAC_LED); | 3796 | tmp = EMAC_RD(bp, EMAC_REG_EMAC_LED); |
3797 | EMAC_WR(EMAC_REG_EMAC_LED, | 3797 | EMAC_WR(bp, EMAC_REG_EMAC_LED, |
3798 | (tmp & (~EMAC_LED_OVERRIDE))); | 3798 | (tmp & (~EMAC_LED_OVERRIDE))); |
3799 | 3799 | ||
3800 | if (!CHIP_IS_E1H(bp) && | 3800 | if (!CHIP_IS_E1H(bp) && |
@@ -3917,7 +3917,7 @@ u8 bnx2x_phy_init(struct link_params *params, struct link_vars *vars) | |||
3917 | struct bnx2x *bp = params->bp; | 3917 | struct bnx2x *bp = params->bp; |
3918 | 3918 | ||
3919 | u32 val; | 3919 | u32 val; |
3920 | DP(NETIF_MSG_LINK, "Phy Initialization started\n"); | 3920 | DP(NETIF_MSG_LINK, "Phy Initialization started \n"); |
3921 | DP(NETIF_MSG_LINK, "req_speed = %d, req_flowctrl=%d\n", | 3921 | DP(NETIF_MSG_LINK, "req_speed = %d, req_flowctrl=%d\n", |
3922 | params->req_line_speed, params->req_flow_ctrl); | 3922 | params->req_line_speed, params->req_flow_ctrl); |
3923 | vars->link_status = 0; | 3923 | vars->link_status = 0; |
@@ -3933,6 +3933,7 @@ u8 bnx2x_phy_init(struct link_params *params, struct link_vars *vars) | |||
3933 | else | 3933 | else |
3934 | vars->phy_flags = PHY_XGXS_FLAG; | 3934 | vars->phy_flags = PHY_XGXS_FLAG; |
3935 | 3935 | ||
3936 | |||
3936 | /* disable attentions */ | 3937 | /* disable attentions */ |
3937 | bnx2x_bits_dis(bp, NIG_REG_MASK_INTERRUPT_PORT0 + params->port*4, | 3938 | bnx2x_bits_dis(bp, NIG_REG_MASK_INTERRUPT_PORT0 + params->port*4, |
3938 | (NIG_MASK_XGXS0_LINK_STATUS | | 3939 | (NIG_MASK_XGXS0_LINK_STATUS | |
@@ -4542,7 +4543,7 @@ static u8 bnx2x_sfx7101_flash_download(struct bnx2x *bp, u8 port, | |||
4542 | size = MAX_APP_SIZE+HEADER_SIZE; | 4543 | size = MAX_APP_SIZE+HEADER_SIZE; |
4543 | } | 4544 | } |
4544 | DP(NETIF_MSG_LINK, "File version is %c%c\n", data[0x14e], data[0x14f]); | 4545 | DP(NETIF_MSG_LINK, "File version is %c%c\n", data[0x14e], data[0x14f]); |
4545 | DP(NETIF_MSG_LINK, " %c%c\n", data[0x150], data[0x151]); | 4546 | DP(NETIF_MSG_LINK, " %c%c\n", data[0x150], data[0x151]); |
4546 | /* Put the DSP in download mode by setting FLASH_CFG[2] to 1 | 4547 | /* Put the DSP in download mode by setting FLASH_CFG[2] to 1 |
4547 | and issuing a reset.*/ | 4548 | and issuing a reset.*/ |
4548 | 4549 | ||
@@ -4824,7 +4825,7 @@ static u8 bnx2x_sfx7101_flash_download(struct bnx2x *bp, u8 port, | |||
4824 | MDIO_PMA_REG_7101_VER2, | 4825 | MDIO_PMA_REG_7101_VER2, |
4825 | &image_revision2); | 4826 | &image_revision2); |
4826 | 4827 | ||
4827 | if (data[0x14e] != (image_revision2&0xFF) || | 4828 | if (data[0x14e] != (image_revision2&0xFF) || |
4828 | data[0x14f] != ((image_revision2&0xFF00)>>8) || | 4829 | data[0x14f] != ((image_revision2&0xFF00)>>8) || |
4829 | data[0x150] != (image_revision1&0xFF) || | 4830 | data[0x150] != (image_revision1&0xFF) || |
4830 | data[0x151] != ((image_revision1&0xFF00)>>8)) { | 4831 | data[0x151] != ((image_revision1&0xFF00)>>8)) { |