diff options
author | Mallikarjuna R Chilakala <mallikarjuna.chilakala@intel.com> | 2009-06-04 07:11:13 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2009-06-07 08:20:19 -0400 |
commit | 620fa036b2459ca9acf7484c8074147f0dda68da (patch) | |
tree | 22ed490ea8f6c711c6c6e6779583dee475cc9729 /drivers | |
parent | 50ac58ba1d707df33f0c398ae700214e49bf918f (diff) |
ixgbe: Fix 82599 adapter link flickering issues
Fix autoneg restart issues in flow control path which might create
endless link flickering due to known timing issues with 82599
adapters.
Signed-off-by: Mallikarjuna R Chilakala <mallikarjuna.chilakakla@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/net/ixgbe/ixgbe_82598.c | 115 | ||||
-rw-r--r-- | drivers/net/ixgbe/ixgbe_82599.c | 13 | ||||
-rw-r--r-- | drivers/net/ixgbe/ixgbe_common.c | 245 | ||||
-rw-r--r-- | drivers/net/ixgbe/ixgbe_common.h | 4 | ||||
-rw-r--r-- | drivers/net/ixgbe/ixgbe_dcb_82599.c | 2 | ||||
-rw-r--r-- | drivers/net/ixgbe/ixgbe_ethtool.c | 28 | ||||
-rw-r--r-- | drivers/net/ixgbe/ixgbe_main.c | 6 | ||||
-rw-r--r-- | drivers/net/ixgbe/ixgbe_type.h | 7 |
8 files changed, 193 insertions, 227 deletions
diff --git a/drivers/net/ixgbe/ixgbe_82598.c b/drivers/net/ixgbe/ixgbe_82598.c index 88e8350aa786..b9923047ce11 100644 --- a/drivers/net/ixgbe/ixgbe_82598.c +++ b/drivers/net/ixgbe/ixgbe_82598.c | |||
@@ -293,6 +293,17 @@ static s32 ixgbe_fc_enable_82598(struct ixgbe_hw *hw, s32 packetbuf_num) | |||
293 | u32 rmcs_reg; | 293 | u32 rmcs_reg; |
294 | u32 reg; | 294 | u32 reg; |
295 | 295 | ||
296 | #ifdef CONFIG_DCB | ||
297 | if (hw->fc.requested_mode == ixgbe_fc_pfc) | ||
298 | goto out; | ||
299 | |||
300 | #endif /* CONFIG_DCB */ | ||
301 | /* Negotiate the fc mode to use */ | ||
302 | ret_val = ixgbe_fc_autoneg(hw); | ||
303 | if (ret_val) | ||
304 | goto out; | ||
305 | |||
306 | /* Disable any previous flow control settings */ | ||
296 | fctrl_reg = IXGBE_READ_REG(hw, IXGBE_FCTRL); | 307 | fctrl_reg = IXGBE_READ_REG(hw, IXGBE_FCTRL); |
297 | fctrl_reg &= ~(IXGBE_FCTRL_RFCE | IXGBE_FCTRL_RPFCE); | 308 | fctrl_reg &= ~(IXGBE_FCTRL_RFCE | IXGBE_FCTRL_RPFCE); |
298 | 309 | ||
@@ -304,14 +315,20 @@ static s32 ixgbe_fc_enable_82598(struct ixgbe_hw *hw, s32 packetbuf_num) | |||
304 | * 0: Flow control is completely disabled | 315 | * 0: Flow control is completely disabled |
305 | * 1: Rx flow control is enabled (we can receive pause frames, | 316 | * 1: Rx flow control is enabled (we can receive pause frames, |
306 | * but not send pause frames). | 317 | * but not send pause frames). |
307 | * 2: Tx flow control is enabled (we can send pause frames but | 318 | * 2: Tx flow control is enabled (we can send pause frames but |
308 | * we do not support receiving pause frames). | 319 | * we do not support receiving pause frames). |
309 | * 3: Both Rx and Tx flow control (symmetric) are enabled. | 320 | * 3: Both Rx and Tx flow control (symmetric) are enabled. |
310 | * other: Invalid. | 321 | * other: Invalid. |
322 | #ifdef CONFIG_DCB | ||
323 | * 4: Priority Flow Control is enabled. | ||
324 | #endif | ||
311 | */ | 325 | */ |
312 | switch (hw->fc.current_mode) { | 326 | switch (hw->fc.current_mode) { |
313 | case ixgbe_fc_none: | 327 | case ixgbe_fc_none: |
314 | /* Flow control completely disabled by software override. */ | 328 | /* |
329 | * Flow control is disabled by software override or autoneg. | ||
330 | * The code below will actually disable it in the HW. | ||
331 | */ | ||
315 | break; | 332 | break; |
316 | case ixgbe_fc_rx_pause: | 333 | case ixgbe_fc_rx_pause: |
317 | /* | 334 | /* |
@@ -336,6 +353,11 @@ static s32 ixgbe_fc_enable_82598(struct ixgbe_hw *hw, s32 packetbuf_num) | |||
336 | fctrl_reg |= IXGBE_FCTRL_RFCE; | 353 | fctrl_reg |= IXGBE_FCTRL_RFCE; |
337 | rmcs_reg |= IXGBE_RMCS_TFCE_802_3X; | 354 | rmcs_reg |= IXGBE_RMCS_TFCE_802_3X; |
338 | break; | 355 | break; |
356 | #ifdef CONFIG_DCB | ||
357 | case ixgbe_fc_pfc: | ||
358 | goto out; | ||
359 | break; | ||
360 | #endif /* CONFIG_DCB */ | ||
339 | default: | 361 | default: |
340 | hw_dbg(hw, "Flow control param set incorrectly\n"); | 362 | hw_dbg(hw, "Flow control param set incorrectly\n"); |
341 | ret_val = -IXGBE_ERR_CONFIG; | 363 | ret_val = -IXGBE_ERR_CONFIG; |
@@ -343,7 +365,7 @@ static s32 ixgbe_fc_enable_82598(struct ixgbe_hw *hw, s32 packetbuf_num) | |||
343 | break; | 365 | break; |
344 | } | 366 | } |
345 | 367 | ||
346 | /* Enable 802.3x based flow control settings. */ | 368 | /* Set 802.3x based flow control settings. */ |
347 | fctrl_reg |= IXGBE_FCTRL_DPF; | 369 | fctrl_reg |= IXGBE_FCTRL_DPF; |
348 | IXGBE_WRITE_REG(hw, IXGBE_FCTRL, fctrl_reg); | 370 | IXGBE_WRITE_REG(hw, IXGBE_FCTRL, fctrl_reg); |
349 | IXGBE_WRITE_REG(hw, IXGBE_RMCS, rmcs_reg); | 371 | IXGBE_WRITE_REG(hw, IXGBE_RMCS, rmcs_reg); |
@@ -377,79 +399,6 @@ out: | |||
377 | } | 399 | } |
378 | 400 | ||
379 | /** | 401 | /** |
380 | * ixgbe_setup_fc_82598 - Configure flow control settings | ||
381 | * @hw: pointer to hardware structure | ||
382 | * @packetbuf_num: packet buffer number (0-7) | ||
383 | * | ||
384 | * Configures the flow control settings based on SW configuration. This | ||
385 | * function is used for 802.3x flow control configuration only. | ||
386 | **/ | ||
387 | static s32 ixgbe_setup_fc_82598(struct ixgbe_hw *hw, s32 packetbuf_num) | ||
388 | { | ||
389 | s32 ret_val = 0; | ||
390 | ixgbe_link_speed speed; | ||
391 | bool link_up; | ||
392 | |||
393 | /* Validate the packetbuf configuration */ | ||
394 | if (packetbuf_num < 0 || packetbuf_num > 7) { | ||
395 | hw_dbg(hw, "Invalid packet buffer number [%d], expected range is" | ||
396 | " 0-7\n", packetbuf_num); | ||
397 | ret_val = IXGBE_ERR_INVALID_LINK_SETTINGS; | ||
398 | goto out; | ||
399 | } | ||
400 | |||
401 | /* | ||
402 | * Validate the water mark configuration. Zero water marks are invalid | ||
403 | * because it causes the controller to just blast out fc packets. | ||
404 | */ | ||
405 | if (!hw->fc.low_water || !hw->fc.high_water || !hw->fc.pause_time) { | ||
406 | if (hw->fc.requested_mode != ixgbe_fc_none) { | ||
407 | hw_dbg(hw, "Invalid water mark configuration\n"); | ||
408 | ret_val = IXGBE_ERR_INVALID_LINK_SETTINGS; | ||
409 | goto out; | ||
410 | } | ||
411 | } | ||
412 | |||
413 | /* | ||
414 | * Validate the requested mode. Strict IEEE mode does not allow | ||
415 | * ixgbe_fc_rx_pause because it will cause testing anomalies. | ||
416 | */ | ||
417 | if (hw->fc.strict_ieee && hw->fc.requested_mode == ixgbe_fc_rx_pause) { | ||
418 | hw_dbg(hw, "ixgbe_fc_rx_pause not valid in strict IEEE mode\n"); | ||
419 | ret_val = IXGBE_ERR_INVALID_LINK_SETTINGS; | ||
420 | goto out; | ||
421 | } | ||
422 | |||
423 | /* | ||
424 | * 10gig parts do not have a word in the EEPROM to determine the | ||
425 | * default flow control setting, so we explicitly set it to full. | ||
426 | */ | ||
427 | if (hw->fc.requested_mode == ixgbe_fc_default) | ||
428 | hw->fc.requested_mode = ixgbe_fc_full; | ||
429 | |||
430 | /* | ||
431 | * Save off the requested flow control mode for use later. Depending | ||
432 | * on the link partner's capabilities, we may or may not use this mode. | ||
433 | */ | ||
434 | |||
435 | hw->fc.current_mode = hw->fc.requested_mode; | ||
436 | |||
437 | /* Decide whether to use autoneg or not. */ | ||
438 | hw->mac.ops.check_link(hw, &speed, &link_up, false); | ||
439 | if (!hw->fc.disable_fc_autoneg && hw->phy.multispeed_fiber && | ||
440 | (speed == IXGBE_LINK_SPEED_1GB_FULL)) | ||
441 | ret_val = ixgbe_fc_autoneg(hw); | ||
442 | |||
443 | if (ret_val) | ||
444 | goto out; | ||
445 | |||
446 | ret_val = ixgbe_fc_enable_82598(hw, packetbuf_num); | ||
447 | |||
448 | out: | ||
449 | return ret_val; | ||
450 | } | ||
451 | |||
452 | /** | ||
453 | * ixgbe_setup_mac_link_82598 - Configures MAC link settings | 402 | * ixgbe_setup_mac_link_82598 - Configures MAC link settings |
454 | * @hw: pointer to hardware structure | 403 | * @hw: pointer to hardware structure |
455 | * | 404 | * |
@@ -488,13 +437,6 @@ static s32 ixgbe_setup_mac_link_82598(struct ixgbe_hw *hw) | |||
488 | } | 437 | } |
489 | } | 438 | } |
490 | 439 | ||
491 | /* | ||
492 | * We want to save off the original Flow Control configuration just in | ||
493 | * case we get disconnected and then reconnected into a different hub | ||
494 | * or switch with different Flow Control capabilities. | ||
495 | */ | ||
496 | ixgbe_setup_fc_82598(hw, 0); | ||
497 | |||
498 | /* Add delay to filter out noises during initial link setup */ | 440 | /* Add delay to filter out noises during initial link setup */ |
499 | msleep(50); | 441 | msleep(50); |
500 | 442 | ||
@@ -581,6 +523,11 @@ static s32 ixgbe_check_mac_link_82598(struct ixgbe_hw *hw, | |||
581 | else | 523 | else |
582 | *speed = IXGBE_LINK_SPEED_1GB_FULL; | 524 | *speed = IXGBE_LINK_SPEED_1GB_FULL; |
583 | 525 | ||
526 | /* if link is down, zero out the current_mode */ | ||
527 | if (*link_up == false) { | ||
528 | hw->fc.current_mode = ixgbe_fc_none; | ||
529 | hw->fc.fc_was_autonegged = false; | ||
530 | } | ||
584 | out: | 531 | out: |
585 | return 0; | 532 | return 0; |
586 | } | 533 | } |
@@ -1168,7 +1115,7 @@ static struct ixgbe_mac_operations mac_ops_82598 = { | |||
1168 | .disable_mc = &ixgbe_disable_mc_generic, | 1115 | .disable_mc = &ixgbe_disable_mc_generic, |
1169 | .clear_vfta = &ixgbe_clear_vfta_82598, | 1116 | .clear_vfta = &ixgbe_clear_vfta_82598, |
1170 | .set_vfta = &ixgbe_set_vfta_82598, | 1117 | .set_vfta = &ixgbe_set_vfta_82598, |
1171 | .setup_fc = &ixgbe_setup_fc_82598, | 1118 | .fc_enable = &ixgbe_fc_enable_82598, |
1172 | }; | 1119 | }; |
1173 | 1120 | ||
1174 | static struct ixgbe_eeprom_operations eeprom_ops_82598 = { | 1121 | static struct ixgbe_eeprom_operations eeprom_ops_82598 = { |
diff --git a/drivers/net/ixgbe/ixgbe_82599.c b/drivers/net/ixgbe/ixgbe_82599.c index 84b83f7b473f..4d83e5916593 100644 --- a/drivers/net/ixgbe/ixgbe_82599.c +++ b/drivers/net/ixgbe/ixgbe_82599.c | |||
@@ -413,9 +413,6 @@ s32 ixgbe_setup_mac_link_82599(struct ixgbe_hw *hw) | |||
413 | } | 413 | } |
414 | } | 414 | } |
415 | 415 | ||
416 | /* Set up flow control */ | ||
417 | status = ixgbe_setup_fc_generic(hw, 0); | ||
418 | |||
419 | /* Add delay to filter out noises during initial link setup */ | 416 | /* Add delay to filter out noises during initial link setup */ |
420 | msleep(50); | 417 | msleep(50); |
421 | 418 | ||
@@ -641,6 +638,11 @@ s32 ixgbe_check_mac_link_82599(struct ixgbe_hw *hw, ixgbe_link_speed *speed, | |||
641 | else | 638 | else |
642 | *speed = IXGBE_LINK_SPEED_100_FULL; | 639 | *speed = IXGBE_LINK_SPEED_100_FULL; |
643 | 640 | ||
641 | /* if link is down, zero out the current_mode */ | ||
642 | if (*link_up == false) { | ||
643 | hw->fc.current_mode = ixgbe_fc_none; | ||
644 | hw->fc.fc_was_autonegged = false; | ||
645 | } | ||
644 | 646 | ||
645 | return 0; | 647 | return 0; |
646 | } | 648 | } |
@@ -747,9 +749,6 @@ s32 ixgbe_setup_mac_link_speed_82599(struct ixgbe_hw *hw, | |||
747 | } | 749 | } |
748 | } | 750 | } |
749 | 751 | ||
750 | /* Set up flow control */ | ||
751 | status = ixgbe_setup_fc_generic(hw, 0); | ||
752 | |||
753 | /* Add delay to filter out noises during initial link setup */ | 752 | /* Add delay to filter out noises during initial link setup */ |
754 | msleep(50); | 753 | msleep(50); |
755 | } | 754 | } |
@@ -1509,7 +1508,7 @@ static struct ixgbe_mac_operations mac_ops_82599 = { | |||
1509 | .disable_mc = &ixgbe_disable_mc_generic, | 1508 | .disable_mc = &ixgbe_disable_mc_generic, |
1510 | .clear_vfta = &ixgbe_clear_vfta_82599, | 1509 | .clear_vfta = &ixgbe_clear_vfta_82599, |
1511 | .set_vfta = &ixgbe_set_vfta_82599, | 1510 | .set_vfta = &ixgbe_set_vfta_82599, |
1512 | .setup_fc = &ixgbe_setup_fc_generic, | 1511 | .fc_enable = &ixgbe_fc_enable_generic, |
1513 | .init_uta_tables = &ixgbe_init_uta_tables_82599, | 1512 | .init_uta_tables = &ixgbe_init_uta_tables_82599, |
1514 | .setup_sfp = &ixgbe_setup_sfp_modules_82599, | 1513 | .setup_sfp = &ixgbe_setup_sfp_modules_82599, |
1515 | }; | 1514 | }; |
diff --git a/drivers/net/ixgbe/ixgbe_common.c b/drivers/net/ixgbe/ixgbe_common.c index 4d36cd32cd30..db339d6fe63d 100644 --- a/drivers/net/ixgbe/ixgbe_common.c +++ b/drivers/net/ixgbe/ixgbe_common.c | |||
@@ -85,6 +85,9 @@ s32 ixgbe_start_hw_generic(struct ixgbe_hw *hw) | |||
85 | IXGBE_WRITE_REG(hw, IXGBE_CTRL_EXT, ctrl_ext); | 85 | IXGBE_WRITE_REG(hw, IXGBE_CTRL_EXT, ctrl_ext); |
86 | IXGBE_WRITE_FLUSH(hw); | 86 | IXGBE_WRITE_FLUSH(hw); |
87 | 87 | ||
88 | /* Setup flow control */ | ||
89 | ixgbe_setup_fc(hw, 0); | ||
90 | |||
88 | /* Clear adapter stopped flag */ | 91 | /* Clear adapter stopped flag */ |
89 | hw->adapter_stopped = false; | 92 | hw->adapter_stopped = false; |
90 | 93 | ||
@@ -1577,17 +1580,16 @@ s32 ixgbe_disable_mc_generic(struct ixgbe_hw *hw) | |||
1577 | } | 1580 | } |
1578 | 1581 | ||
1579 | /** | 1582 | /** |
1580 | * ixgbe_fc_enable - Enable flow control | 1583 | * ixgbe_fc_enable_generic - Enable flow control |
1581 | * @hw: pointer to hardware structure | 1584 | * @hw: pointer to hardware structure |
1582 | * @packetbuf_num: packet buffer number (0-7) | 1585 | * @packetbuf_num: packet buffer number (0-7) |
1583 | * | 1586 | * |
1584 | * Enable flow control according to the current settings. | 1587 | * Enable flow control according to the current settings. |
1585 | **/ | 1588 | **/ |
1586 | s32 ixgbe_fc_enable(struct ixgbe_hw *hw, s32 packetbuf_num) | 1589 | s32 ixgbe_fc_enable_generic(struct ixgbe_hw *hw, s32 packetbuf_num) |
1587 | { | 1590 | { |
1588 | s32 ret_val = 0; | 1591 | s32 ret_val = 0; |
1589 | u32 mflcn_reg; | 1592 | u32 mflcn_reg, fccfg_reg; |
1590 | u32 fccfg_reg; | ||
1591 | u32 reg; | 1593 | u32 reg; |
1592 | u32 rx_pba_size; | 1594 | u32 rx_pba_size; |
1593 | 1595 | ||
@@ -1596,7 +1598,12 @@ s32 ixgbe_fc_enable(struct ixgbe_hw *hw, s32 packetbuf_num) | |||
1596 | goto out; | 1598 | goto out; |
1597 | 1599 | ||
1598 | #endif /* CONFIG_DCB */ | 1600 | #endif /* CONFIG_DCB */ |
1601 | /* Negotiate the fc mode to use */ | ||
1602 | ret_val = ixgbe_fc_autoneg(hw); | ||
1603 | if (ret_val) | ||
1604 | goto out; | ||
1599 | 1605 | ||
1606 | /* Disable any previous flow control settings */ | ||
1600 | mflcn_reg = IXGBE_READ_REG(hw, IXGBE_MFLCN); | 1607 | mflcn_reg = IXGBE_READ_REG(hw, IXGBE_MFLCN); |
1601 | mflcn_reg &= ~(IXGBE_MFLCN_RFCE | IXGBE_MFLCN_RPFCE); | 1608 | mflcn_reg &= ~(IXGBE_MFLCN_RFCE | IXGBE_MFLCN_RPFCE); |
1602 | 1609 | ||
@@ -1616,7 +1623,10 @@ s32 ixgbe_fc_enable(struct ixgbe_hw *hw, s32 packetbuf_num) | |||
1616 | */ | 1623 | */ |
1617 | switch (hw->fc.current_mode) { | 1624 | switch (hw->fc.current_mode) { |
1618 | case ixgbe_fc_none: | 1625 | case ixgbe_fc_none: |
1619 | /* Flow control completely disabled by software override. */ | 1626 | /* |
1627 | * Flow control is disabled by software override or autoneg. | ||
1628 | * The code below will actually disable it in the HW. | ||
1629 | */ | ||
1620 | break; | 1630 | break; |
1621 | case ixgbe_fc_rx_pause: | 1631 | case ixgbe_fc_rx_pause: |
1622 | /* | 1632 | /* |
@@ -1645,7 +1655,7 @@ s32 ixgbe_fc_enable(struct ixgbe_hw *hw, s32 packetbuf_num) | |||
1645 | case ixgbe_fc_pfc: | 1655 | case ixgbe_fc_pfc: |
1646 | goto out; | 1656 | goto out; |
1647 | break; | 1657 | break; |
1648 | #endif | 1658 | #endif /* CONFIG_DCB */ |
1649 | default: | 1659 | default: |
1650 | hw_dbg(hw, "Flow control param set incorrectly\n"); | 1660 | hw_dbg(hw, "Flow control param set incorrectly\n"); |
1651 | ret_val = -IXGBE_ERR_CONFIG; | 1661 | ret_val = -IXGBE_ERR_CONFIG; |
@@ -1653,7 +1663,7 @@ s32 ixgbe_fc_enable(struct ixgbe_hw *hw, s32 packetbuf_num) | |||
1653 | break; | 1663 | break; |
1654 | } | 1664 | } |
1655 | 1665 | ||
1656 | /* Enable 802.3x based flow control settings. */ | 1666 | /* Set 802.3x based flow control settings. */ |
1657 | mflcn_reg |= IXGBE_MFLCN_DPF; | 1667 | mflcn_reg |= IXGBE_MFLCN_DPF; |
1658 | IXGBE_WRITE_REG(hw, IXGBE_MFLCN, mflcn_reg); | 1668 | IXGBE_WRITE_REG(hw, IXGBE_MFLCN, mflcn_reg); |
1659 | IXGBE_WRITE_REG(hw, IXGBE_FCCFG, fccfg_reg); | 1669 | IXGBE_WRITE_REG(hw, IXGBE_FCCFG, fccfg_reg); |
@@ -1661,10 +1671,12 @@ s32 ixgbe_fc_enable(struct ixgbe_hw *hw, s32 packetbuf_num) | |||
1661 | reg = IXGBE_READ_REG(hw, IXGBE_MTQC); | 1671 | reg = IXGBE_READ_REG(hw, IXGBE_MTQC); |
1662 | /* Thresholds are different for link flow control when in DCB mode */ | 1672 | /* Thresholds are different for link flow control when in DCB mode */ |
1663 | if (reg & IXGBE_MTQC_RT_ENA) { | 1673 | if (reg & IXGBE_MTQC_RT_ENA) { |
1674 | rx_pba_size = IXGBE_READ_REG(hw, IXGBE_RXPBSIZE(packetbuf_num)); | ||
1675 | |||
1664 | /* Always disable XON for LFC when in DCB mode */ | 1676 | /* Always disable XON for LFC when in DCB mode */ |
1665 | IXGBE_WRITE_REG(hw, IXGBE_FCRTL_82599(packetbuf_num), 0); | 1677 | reg = (rx_pba_size >> 5) & 0xFFE0; |
1678 | IXGBE_WRITE_REG(hw, IXGBE_FCRTL_82599(packetbuf_num), reg); | ||
1666 | 1679 | ||
1667 | rx_pba_size = IXGBE_READ_REG(hw, IXGBE_RXPBSIZE(packetbuf_num)); | ||
1668 | reg = (rx_pba_size >> 2) & 0xFFE0; | 1680 | reg = (rx_pba_size >> 2) & 0xFFE0; |
1669 | if (hw->fc.current_mode & ixgbe_fc_tx_pause) | 1681 | if (hw->fc.current_mode & ixgbe_fc_tx_pause) |
1670 | reg |= IXGBE_FCRTH_FCEN; | 1682 | reg |= IXGBE_FCRTH_FCEN; |
@@ -1709,100 +1721,41 @@ out: | |||
1709 | * ixgbe_fc_autoneg - Configure flow control | 1721 | * ixgbe_fc_autoneg - Configure flow control |
1710 | * @hw: pointer to hardware structure | 1722 | * @hw: pointer to hardware structure |
1711 | * | 1723 | * |
1712 | * Negotiates flow control capabilities with link partner using autoneg and | 1724 | * Compares our advertised flow control capabilities to those advertised by |
1713 | * applies the results. | 1725 | * our link partner, and determines the proper flow control mode to use. |
1714 | **/ | 1726 | **/ |
1715 | s32 ixgbe_fc_autoneg(struct ixgbe_hw *hw) | 1727 | s32 ixgbe_fc_autoneg(struct ixgbe_hw *hw) |
1716 | { | 1728 | { |
1717 | s32 ret_val = 0; | 1729 | s32 ret_val = 0; |
1718 | u32 i, reg, pcs_anadv_reg, pcs_lpab_reg; | 1730 | ixgbe_link_speed speed; |
1719 | 1731 | u32 pcs_anadv_reg, pcs_lpab_reg, linkstat; | |
1720 | reg = IXGBE_READ_REG(hw, IXGBE_PCS1GANA); | 1732 | bool link_up; |
1721 | 1733 | ||
1722 | /* | 1734 | /* |
1723 | * The possible values of fc.current_mode are: | 1735 | * AN should have completed when the cable was plugged in. |
1724 | * 0: Flow control is completely disabled | 1736 | * Look for reasons to bail out. Bail out if: |
1725 | * 1: Rx flow control is enabled (we can receive pause frames, | 1737 | * - FC autoneg is disabled, or if |
1726 | * but not send pause frames). | 1738 | * - we don't have multispeed fiber, or if |
1727 | * 2: Tx flow control is enabled (we can send pause frames but | 1739 | * - we're not running at 1G, or if |
1728 | * we do not support receiving pause frames). | 1740 | * - link is not up, or if |
1729 | * 3: Both Rx and Tx flow control (symmetric) are enabled. | 1741 | * - link is up but AN did not complete, or if |
1730 | * 4: Priority Flow Control is enabled. | 1742 | * - link is up and AN completed but timed out |
1731 | * other: Invalid. | 1743 | * |
1744 | * Since we're being called from an LSC, link is already know to be up. | ||
1745 | * So use link_up_wait_to_complete=false. | ||
1732 | */ | 1746 | */ |
1733 | switch (hw->fc.current_mode) { | 1747 | hw->mac.ops.check_link(hw, &speed, &link_up, false); |
1734 | case ixgbe_fc_none: | 1748 | linkstat = IXGBE_READ_REG(hw, IXGBE_PCS1GLSTA); |
1735 | /* Flow control completely disabled by software override. */ | 1749 | |
1736 | reg &= ~(IXGBE_PCS1GANA_SYM_PAUSE | IXGBE_PCS1GANA_ASM_PAUSE); | 1750 | if (hw->fc.disable_fc_autoneg || |
1737 | break; | 1751 | !hw->phy.multispeed_fiber || |
1738 | case ixgbe_fc_rx_pause: | 1752 | (speed != IXGBE_LINK_SPEED_1GB_FULL) || |
1739 | /* | 1753 | !link_up || |
1740 | * Rx Flow control is enabled and Tx Flow control is | 1754 | ((linkstat & IXGBE_PCS1GLSTA_AN_COMPLETE) == 0) || |
1741 | * disabled by software override. Since there really | 1755 | ((linkstat & IXGBE_PCS1GLSTA_AN_TIMED_OUT) == 1)) { |
1742 | * isn't a way to advertise that we are capable of RX | 1756 | hw->fc.fc_was_autonegged = false; |
1743 | * Pause ONLY, we will advertise that we support both | 1757 | hw->fc.current_mode = hw->fc.requested_mode; |
1744 | * symmetric and asymmetric Rx PAUSE. Later, we will | 1758 | hw_dbg(hw, "Autoneg FC was skipped.\n"); |
1745 | * disable the adapter's ability to send PAUSE frames. | ||
1746 | */ | ||
1747 | reg |= (IXGBE_PCS1GANA_SYM_PAUSE | IXGBE_PCS1GANA_ASM_PAUSE); | ||
1748 | break; | ||
1749 | case ixgbe_fc_tx_pause: | ||
1750 | /* | ||
1751 | * Tx Flow control is enabled, and Rx Flow control is | ||
1752 | * disabled by software override. | ||
1753 | */ | ||
1754 | reg |= (IXGBE_PCS1GANA_ASM_PAUSE); | ||
1755 | reg &= ~(IXGBE_PCS1GANA_SYM_PAUSE); | ||
1756 | break; | ||
1757 | case ixgbe_fc_full: | ||
1758 | /* Flow control (both Rx and Tx) is enabled by SW override. */ | ||
1759 | reg |= (IXGBE_PCS1GANA_SYM_PAUSE | IXGBE_PCS1GANA_ASM_PAUSE); | ||
1760 | break; | ||
1761 | #ifdef CONFIG_DCB | ||
1762 | case ixgbe_fc_pfc: | ||
1763 | goto out; | ||
1764 | break; | ||
1765 | #endif | ||
1766 | default: | ||
1767 | hw_dbg(hw, "Flow control param set incorrectly\n"); | ||
1768 | ret_val = -IXGBE_ERR_CONFIG; | ||
1769 | goto out; | ||
1770 | break; | ||
1771 | } | ||
1772 | |||
1773 | IXGBE_WRITE_REG(hw, IXGBE_PCS1GANA, reg); | ||
1774 | reg = IXGBE_READ_REG(hw, IXGBE_PCS1GLCTL); | ||
1775 | |||
1776 | /* Set PCS register for autoneg */ | ||
1777 | /* Enable and restart autoneg */ | ||
1778 | reg |= IXGBE_PCS1GLCTL_AN_ENABLE | IXGBE_PCS1GLCTL_AN_RESTART; | ||
1779 | |||
1780 | /* Disable AN timeout */ | ||
1781 | if (hw->fc.strict_ieee) | ||
1782 | reg &= ~IXGBE_PCS1GLCTL_AN_1G_TIMEOUT_EN; | ||
1783 | |||
1784 | hw_dbg(hw, "Configuring Autoneg; PCS_LCTL = 0x%08X\n", reg); | ||
1785 | IXGBE_WRITE_REG(hw, IXGBE_PCS1GLCTL, reg); | ||
1786 | |||
1787 | /* See if autonegotiation has succeeded */ | ||
1788 | hw->mac.autoneg_succeeded = 0; | ||
1789 | for (i = 0; i < FIBER_LINK_UP_LIMIT; i++) { | ||
1790 | msleep(10); | ||
1791 | reg = IXGBE_READ_REG(hw, IXGBE_PCS1GLSTA); | ||
1792 | if ((reg & (IXGBE_PCS1GLSTA_LINK_OK | | ||
1793 | IXGBE_PCS1GLSTA_AN_COMPLETE)) == | ||
1794 | (IXGBE_PCS1GLSTA_LINK_OK | | ||
1795 | IXGBE_PCS1GLSTA_AN_COMPLETE)) { | ||
1796 | if (!(reg & IXGBE_PCS1GLSTA_AN_TIMED_OUT)) | ||
1797 | hw->mac.autoneg_succeeded = 1; | ||
1798 | break; | ||
1799 | } | ||
1800 | } | ||
1801 | |||
1802 | if (!hw->mac.autoneg_succeeded) { | ||
1803 | /* Autoneg failed to achieve a link, so we turn fc off */ | ||
1804 | hw->fc.current_mode = ixgbe_fc_none; | ||
1805 | hw_dbg(hw, "Flow Control = NONE.\n"); | ||
1806 | goto out; | 1759 | goto out; |
1807 | } | 1760 | } |
1808 | 1761 | ||
@@ -1845,21 +1798,23 @@ s32 ixgbe_fc_autoneg(struct ixgbe_hw *hw) | |||
1845 | hw_dbg(hw, "Flow Control = NONE.\n"); | 1798 | hw_dbg(hw, "Flow Control = NONE.\n"); |
1846 | } | 1799 | } |
1847 | 1800 | ||
1801 | /* Record that current_mode is the result of a successful autoneg */ | ||
1802 | hw->fc.fc_was_autonegged = true; | ||
1803 | |||
1848 | out: | 1804 | out: |
1849 | return ret_val; | 1805 | return ret_val; |
1850 | } | 1806 | } |
1851 | 1807 | ||
1852 | /** | 1808 | /** |
1853 | * ixgbe_setup_fc_generic - Set up flow control | 1809 | * ixgbe_setup_fc - Set up flow control |
1854 | * @hw: pointer to hardware structure | 1810 | * @hw: pointer to hardware structure |
1855 | * | 1811 | * |
1856 | * Sets up flow control. | 1812 | * Called at init time to set up flow control. |
1857 | **/ | 1813 | **/ |
1858 | s32 ixgbe_setup_fc_generic(struct ixgbe_hw *hw, s32 packetbuf_num) | 1814 | s32 ixgbe_setup_fc(struct ixgbe_hw *hw, s32 packetbuf_num) |
1859 | { | 1815 | { |
1860 | s32 ret_val = 0; | 1816 | s32 ret_val = 0; |
1861 | ixgbe_link_speed speed; | 1817 | u32 reg; |
1862 | bool link_up; | ||
1863 | 1818 | ||
1864 | #ifdef CONFIG_DCB | 1819 | #ifdef CONFIG_DCB |
1865 | if (hw->fc.requested_mode == ixgbe_fc_pfc) { | 1820 | if (hw->fc.requested_mode == ixgbe_fc_pfc) { |
@@ -1881,16 +1836,14 @@ s32 ixgbe_setup_fc_generic(struct ixgbe_hw *hw, s32 packetbuf_num) | |||
1881 | * because it causes the controller to just blast out fc packets. | 1836 | * because it causes the controller to just blast out fc packets. |
1882 | */ | 1837 | */ |
1883 | if (!hw->fc.low_water || !hw->fc.high_water || !hw->fc.pause_time) { | 1838 | if (!hw->fc.low_water || !hw->fc.high_water || !hw->fc.pause_time) { |
1884 | if (hw->fc.requested_mode != ixgbe_fc_none) { | 1839 | hw_dbg(hw, "Invalid water mark configuration\n"); |
1885 | hw_dbg(hw, "Invalid water mark configuration\n"); | 1840 | ret_val = IXGBE_ERR_INVALID_LINK_SETTINGS; |
1886 | ret_val = IXGBE_ERR_INVALID_LINK_SETTINGS; | 1841 | goto out; |
1887 | goto out; | ||
1888 | } | ||
1889 | } | 1842 | } |
1890 | 1843 | ||
1891 | /* | 1844 | /* |
1892 | * Validate the requested mode. Strict IEEE mode does not allow | 1845 | * Validate the requested mode. Strict IEEE mode does not allow |
1893 | * ixgbe_fc_rx_pause because it will cause testing anomalies. | 1846 | * ixgbe_fc_rx_pause because it will cause us to fail at UNH. |
1894 | */ | 1847 | */ |
1895 | if (hw->fc.strict_ieee && hw->fc.requested_mode == ixgbe_fc_rx_pause) { | 1848 | if (hw->fc.strict_ieee && hw->fc.requested_mode == ixgbe_fc_rx_pause) { |
1896 | hw_dbg(hw, "ixgbe_fc_rx_pause not valid in strict " | 1849 | hw_dbg(hw, "ixgbe_fc_rx_pause not valid in strict " |
@@ -1907,21 +1860,77 @@ s32 ixgbe_setup_fc_generic(struct ixgbe_hw *hw, s32 packetbuf_num) | |||
1907 | hw->fc.requested_mode = ixgbe_fc_full; | 1860 | hw->fc.requested_mode = ixgbe_fc_full; |
1908 | 1861 | ||
1909 | /* | 1862 | /* |
1910 | * Save off the requested flow control mode for use later. Depending | 1863 | * Set up the 1G flow control advertisement registers so the HW will be |
1911 | * on the link partner's capabilities, we may or may not use this mode. | 1864 | * able to do fc autoneg once the cable is plugged in. If we end up |
1865 | * using 10g instead, this is harmless. | ||
1912 | */ | 1866 | */ |
1913 | hw->fc.current_mode = hw->fc.requested_mode; | 1867 | reg = IXGBE_READ_REG(hw, IXGBE_PCS1GANA); |
1914 | |||
1915 | /* Decide whether to use autoneg or not. */ | ||
1916 | hw->mac.ops.check_link(hw, &speed, &link_up, false); | ||
1917 | if (!hw->fc.disable_fc_autoneg && hw->phy.multispeed_fiber && | ||
1918 | (speed == IXGBE_LINK_SPEED_1GB_FULL)) | ||
1919 | ret_val = ixgbe_fc_autoneg(hw); | ||
1920 | 1868 | ||
1921 | if (ret_val) | 1869 | /* |
1870 | * The possible values of fc.requested_mode are: | ||
1871 | * 0: Flow control is completely disabled | ||
1872 | * 1: Rx flow control is enabled (we can receive pause frames, | ||
1873 | * but not send pause frames). | ||
1874 | * 2: Tx flow control is enabled (we can send pause frames but | ||
1875 | * we do not support receiving pause frames). | ||
1876 | * 3: Both Rx and Tx flow control (symmetric) are enabled. | ||
1877 | #ifdef CONFIG_DCB | ||
1878 | * 4: Priority Flow Control is enabled. | ||
1879 | #endif | ||
1880 | * other: Invalid. | ||
1881 | */ | ||
1882 | switch (hw->fc.requested_mode) { | ||
1883 | case ixgbe_fc_none: | ||
1884 | /* Flow control completely disabled by software override. */ | ||
1885 | reg &= ~(IXGBE_PCS1GANA_SYM_PAUSE | IXGBE_PCS1GANA_ASM_PAUSE); | ||
1886 | break; | ||
1887 | case ixgbe_fc_rx_pause: | ||
1888 | /* | ||
1889 | * Rx Flow control is enabled and Tx Flow control is | ||
1890 | * disabled by software override. Since there really | ||
1891 | * isn't a way to advertise that we are capable of RX | ||
1892 | * Pause ONLY, we will advertise that we support both | ||
1893 | * symmetric and asymmetric Rx PAUSE. Later, we will | ||
1894 | * disable the adapter's ability to send PAUSE frames. | ||
1895 | */ | ||
1896 | reg |= (IXGBE_PCS1GANA_SYM_PAUSE | IXGBE_PCS1GANA_ASM_PAUSE); | ||
1897 | break; | ||
1898 | case ixgbe_fc_tx_pause: | ||
1899 | /* | ||
1900 | * Tx Flow control is enabled, and Rx Flow control is | ||
1901 | * disabled by software override. | ||
1902 | */ | ||
1903 | reg |= (IXGBE_PCS1GANA_ASM_PAUSE); | ||
1904 | reg &= ~(IXGBE_PCS1GANA_SYM_PAUSE); | ||
1905 | break; | ||
1906 | case ixgbe_fc_full: | ||
1907 | /* Flow control (both Rx and Tx) is enabled by SW override. */ | ||
1908 | reg |= (IXGBE_PCS1GANA_SYM_PAUSE | IXGBE_PCS1GANA_ASM_PAUSE); | ||
1909 | break; | ||
1910 | #ifdef CONFIG_DCB | ||
1911 | case ixgbe_fc_pfc: | ||
1922 | goto out; | 1912 | goto out; |
1913 | break; | ||
1914 | #endif /* CONFIG_DCB */ | ||
1915 | default: | ||
1916 | hw_dbg(hw, "Flow control param set incorrectly\n"); | ||
1917 | ret_val = -IXGBE_ERR_CONFIG; | ||
1918 | goto out; | ||
1919 | break; | ||
1920 | } | ||
1921 | |||
1922 | IXGBE_WRITE_REG(hw, IXGBE_PCS1GANA, reg); | ||
1923 | reg = IXGBE_READ_REG(hw, IXGBE_PCS1GLCTL); | ||
1923 | 1924 | ||
1924 | ret_val = ixgbe_fc_enable(hw, packetbuf_num); | 1925 | /* Enable and restart autoneg to inform the link partner */ |
1926 | reg |= IXGBE_PCS1GLCTL_AN_ENABLE | IXGBE_PCS1GLCTL_AN_RESTART; | ||
1927 | |||
1928 | /* Disable AN timeout */ | ||
1929 | if (hw->fc.strict_ieee) | ||
1930 | reg &= ~IXGBE_PCS1GLCTL_AN_1G_TIMEOUT_EN; | ||
1931 | |||
1932 | IXGBE_WRITE_REG(hw, IXGBE_PCS1GLCTL, reg); | ||
1933 | hw_dbg(hw, "Set up FC; PCS1GLCTL = 0x%08X\n", reg); | ||
1925 | 1934 | ||
1926 | out: | 1935 | out: |
1927 | return ret_val; | 1936 | return ret_val; |
diff --git a/drivers/net/ixgbe/ixgbe_common.h b/drivers/net/ixgbe/ixgbe_common.h index b2a4b2c99c40..0d34d4d8244c 100644 --- a/drivers/net/ixgbe/ixgbe_common.h +++ b/drivers/net/ixgbe/ixgbe_common.h | |||
@@ -64,8 +64,8 @@ s32 ixgbe_update_uc_addr_list_generic(struct ixgbe_hw *hw, | |||
64 | s32 ixgbe_enable_mc_generic(struct ixgbe_hw *hw); | 64 | s32 ixgbe_enable_mc_generic(struct ixgbe_hw *hw); |
65 | s32 ixgbe_disable_mc_generic(struct ixgbe_hw *hw); | 65 | s32 ixgbe_disable_mc_generic(struct ixgbe_hw *hw); |
66 | s32 ixgbe_enable_rx_dma_generic(struct ixgbe_hw *hw, u32 regval); | 66 | s32 ixgbe_enable_rx_dma_generic(struct ixgbe_hw *hw, u32 regval); |
67 | s32 ixgbe_setup_fc_generic(struct ixgbe_hw *hw, s32 packetbuf_num); | 67 | s32 ixgbe_setup_fc(struct ixgbe_hw *hw, s32 packetbuf_num); |
68 | s32 ixgbe_fc_enable(struct ixgbe_hw *hw, s32 packtetbuf_num); | 68 | s32 ixgbe_fc_enable_generic(struct ixgbe_hw *hw, s32 packtetbuf_num); |
69 | s32 ixgbe_fc_autoneg(struct ixgbe_hw *hw); | 69 | s32 ixgbe_fc_autoneg(struct ixgbe_hw *hw); |
70 | 70 | ||
71 | s32 ixgbe_validate_mac_addr(u8 *mac_addr); | 71 | s32 ixgbe_validate_mac_addr(u8 *mac_addr); |
diff --git a/drivers/net/ixgbe/ixgbe_dcb_82599.c b/drivers/net/ixgbe/ixgbe_dcb_82599.c index f4417fc3b0fd..589f62c7062a 100644 --- a/drivers/net/ixgbe/ixgbe_dcb_82599.c +++ b/drivers/net/ixgbe/ixgbe_dcb_82599.c | |||
@@ -295,7 +295,7 @@ s32 ixgbe_dcb_config_pfc_82599(struct ixgbe_hw *hw, | |||
295 | /* If PFC is disabled globally then fall back to LFC. */ | 295 | /* If PFC is disabled globally then fall back to LFC. */ |
296 | if (!dcb_config->pfc_mode_enable) { | 296 | if (!dcb_config->pfc_mode_enable) { |
297 | for (i = 0; i < MAX_TRAFFIC_CLASS; i++) | 297 | for (i = 0; i < MAX_TRAFFIC_CLASS; i++) |
298 | hw->mac.ops.setup_fc(hw, i); | 298 | hw->mac.ops.fc_enable(hw, i); |
299 | goto out; | 299 | goto out; |
300 | } | 300 | } |
301 | 301 | ||
diff --git a/drivers/net/ixgbe/ixgbe_ethtool.c b/drivers/net/ixgbe/ixgbe_ethtool.c index 583cc5a3c4f9..1c110459d33b 100644 --- a/drivers/net/ixgbe/ixgbe_ethtool.c +++ b/drivers/net/ixgbe/ixgbe_ethtool.c | |||
@@ -283,6 +283,7 @@ static int ixgbe_set_pauseparam(struct net_device *netdev, | |||
283 | { | 283 | { |
284 | struct ixgbe_adapter *adapter = netdev_priv(netdev); | 284 | struct ixgbe_adapter *adapter = netdev_priv(netdev); |
285 | struct ixgbe_hw *hw = &adapter->hw; | 285 | struct ixgbe_hw *hw = &adapter->hw; |
286 | struct ixgbe_fc_info fc; | ||
286 | 287 | ||
287 | #ifdef CONFIG_DCB | 288 | #ifdef CONFIG_DCB |
288 | if (adapter->dcb_cfg.pfc_mode_enable || | 289 | if (adapter->dcb_cfg.pfc_mode_enable || |
@@ -291,26 +292,37 @@ static int ixgbe_set_pauseparam(struct net_device *netdev, | |||
291 | return -EINVAL; | 292 | return -EINVAL; |
292 | 293 | ||
293 | #endif | 294 | #endif |
295 | |||
296 | fc = hw->fc; | ||
297 | |||
294 | if (pause->autoneg != AUTONEG_ENABLE) | 298 | if (pause->autoneg != AUTONEG_ENABLE) |
295 | hw->fc.disable_fc_autoneg = true; | 299 | fc.disable_fc_autoneg = true; |
296 | else | 300 | else |
297 | hw->fc.disable_fc_autoneg = false; | 301 | fc.disable_fc_autoneg = false; |
298 | 302 | ||
299 | if (pause->rx_pause && pause->tx_pause) | 303 | if (pause->rx_pause && pause->tx_pause) |
300 | hw->fc.requested_mode = ixgbe_fc_full; | 304 | fc.requested_mode = ixgbe_fc_full; |
301 | else if (pause->rx_pause && !pause->tx_pause) | 305 | else if (pause->rx_pause && !pause->tx_pause) |
302 | hw->fc.requested_mode = ixgbe_fc_rx_pause; | 306 | fc.requested_mode = ixgbe_fc_rx_pause; |
303 | else if (!pause->rx_pause && pause->tx_pause) | 307 | else if (!pause->rx_pause && pause->tx_pause) |
304 | hw->fc.requested_mode = ixgbe_fc_tx_pause; | 308 | fc.requested_mode = ixgbe_fc_tx_pause; |
305 | else if (!pause->rx_pause && !pause->tx_pause) | 309 | else if (!pause->rx_pause && !pause->tx_pause) |
306 | hw->fc.requested_mode = ixgbe_fc_none; | 310 | fc.requested_mode = ixgbe_fc_none; |
307 | else | 311 | else |
308 | return -EINVAL; | 312 | return -EINVAL; |
309 | 313 | ||
310 | #ifdef CONFIG_DCB | 314 | #ifdef CONFIG_DCB |
311 | adapter->last_lfc_mode = hw->fc.requested_mode; | 315 | adapter->last_lfc_mode = fc.requested_mode; |
312 | #endif | 316 | #endif |
313 | hw->mac.ops.setup_fc(hw, 0); | 317 | |
318 | /* if the thing changed then we'll update and use new autoneg */ | ||
319 | if (memcmp(&fc, &hw->fc, sizeof(struct ixgbe_fc_info))) { | ||
320 | hw->fc = fc; | ||
321 | if (netif_running(netdev)) | ||
322 | ixgbe_reinit_locked(adapter); | ||
323 | else | ||
324 | ixgbe_reset(adapter); | ||
325 | } | ||
314 | 326 | ||
315 | return 0; | 327 | return 0; |
316 | } | 328 | } |
diff --git a/drivers/net/ixgbe/ixgbe_main.c b/drivers/net/ixgbe/ixgbe_main.c index 0a3e8a35a0b3..9684632f15b8 100644 --- a/drivers/net/ixgbe/ixgbe_main.c +++ b/drivers/net/ixgbe/ixgbe_main.c | |||
@@ -4344,12 +4344,12 @@ static void ixgbe_watchdog_task(struct work_struct *work) | |||
4344 | #ifdef CONFIG_DCB | 4344 | #ifdef CONFIG_DCB |
4345 | if (adapter->flags & IXGBE_FLAG_DCB_ENABLED) { | 4345 | if (adapter->flags & IXGBE_FLAG_DCB_ENABLED) { |
4346 | for (i = 0; i < MAX_TRAFFIC_CLASS; i++) | 4346 | for (i = 0; i < MAX_TRAFFIC_CLASS; i++) |
4347 | hw->mac.ops.setup_fc(hw, i); | 4347 | hw->mac.ops.fc_enable(hw, i); |
4348 | } else { | 4348 | } else { |
4349 | hw->mac.ops.setup_fc(hw, 0); | 4349 | hw->mac.ops.fc_enable(hw, 0); |
4350 | } | 4350 | } |
4351 | #else | 4351 | #else |
4352 | hw->mac.ops.setup_fc(hw, 0); | 4352 | hw->mac.ops.fc_enable(hw, 0); |
4353 | #endif | 4353 | #endif |
4354 | } | 4354 | } |
4355 | 4355 | ||
diff --git a/drivers/net/ixgbe/ixgbe_type.h b/drivers/net/ixgbe/ixgbe_type.h index 199b288c3459..4402552eb3ec 100644 --- a/drivers/net/ixgbe/ixgbe_type.h +++ b/drivers/net/ixgbe/ixgbe_type.h | |||
@@ -1368,8 +1368,6 @@ | |||
1368 | #define IXGBE_LINK_UP_TIME 90 /* 9.0 Seconds */ | 1368 | #define IXGBE_LINK_UP_TIME 90 /* 9.0 Seconds */ |
1369 | #define IXGBE_AUTO_NEG_TIME 45 /* 4.5 Seconds */ | 1369 | #define IXGBE_AUTO_NEG_TIME 45 /* 4.5 Seconds */ |
1370 | 1370 | ||
1371 | #define FIBER_LINK_UP_LIMIT 50 | ||
1372 | |||
1373 | /* PCS1GLSTA Bit Masks */ | 1371 | /* PCS1GLSTA Bit Masks */ |
1374 | #define IXGBE_PCS1GLSTA_LINK_OK 1 | 1372 | #define IXGBE_PCS1GLSTA_LINK_OK 1 |
1375 | #define IXGBE_PCS1GLSTA_SYNK_OK 0x10 | 1373 | #define IXGBE_PCS1GLSTA_SYNK_OK 0x10 |
@@ -2094,7 +2092,8 @@ struct ixgbe_fc_info { | |||
2094 | u16 pause_time; /* Flow Control Pause timer */ | 2092 | u16 pause_time; /* Flow Control Pause timer */ |
2095 | bool send_xon; /* Flow control send XON */ | 2093 | bool send_xon; /* Flow control send XON */ |
2096 | bool strict_ieee; /* Strict IEEE mode */ | 2094 | bool strict_ieee; /* Strict IEEE mode */ |
2097 | bool disable_fc_autoneg; /* Turn off autoneg FC mode */ | 2095 | bool disable_fc_autoneg; /* Do not autonegotiate FC */ |
2096 | bool fc_was_autonegged; /* Is current_mode the result of autonegging? */ | ||
2098 | enum ixgbe_fc_mode current_mode; /* FC mode in effect */ | 2097 | enum ixgbe_fc_mode current_mode; /* FC mode in effect */ |
2099 | enum ixgbe_fc_mode requested_mode; /* FC mode requested by caller */ | 2098 | enum ixgbe_fc_mode requested_mode; /* FC mode requested by caller */ |
2100 | }; | 2099 | }; |
@@ -2236,7 +2235,7 @@ struct ixgbe_mac_operations { | |||
2236 | s32 (*init_uta_tables)(struct ixgbe_hw *); | 2235 | s32 (*init_uta_tables)(struct ixgbe_hw *); |
2237 | 2236 | ||
2238 | /* Flow Control */ | 2237 | /* Flow Control */ |
2239 | s32 (*setup_fc)(struct ixgbe_hw *, s32); | 2238 | s32 (*fc_enable)(struct ixgbe_hw *, s32); |
2240 | }; | 2239 | }; |
2241 | 2240 | ||
2242 | struct ixgbe_phy_operations { | 2241 | struct ixgbe_phy_operations { |