diff options
| -rw-r--r-- | drivers/net/ixgbe/ixgbe_82598.c | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/drivers/net/ixgbe/ixgbe_82598.c b/drivers/net/ixgbe/ixgbe_82598.c index 3103f4165311..35a06b47587b 100644 --- a/drivers/net/ixgbe/ixgbe_82598.c +++ b/drivers/net/ixgbe/ixgbe_82598.c | |||
| @@ -357,12 +357,34 @@ static s32 ixgbe_fc_enable_82598(struct ixgbe_hw *hw, s32 packetbuf_num) | |||
| 357 | u32 fctrl_reg; | 357 | u32 fctrl_reg; |
| 358 | u32 rmcs_reg; | 358 | u32 rmcs_reg; |
| 359 | u32 reg; | 359 | u32 reg; |
| 360 | u32 link_speed = 0; | ||
| 361 | bool link_up; | ||
| 360 | 362 | ||
| 361 | #ifdef CONFIG_DCB | 363 | #ifdef CONFIG_DCB |
| 362 | if (hw->fc.requested_mode == ixgbe_fc_pfc) | 364 | if (hw->fc.requested_mode == ixgbe_fc_pfc) |
| 363 | goto out; | 365 | goto out; |
| 364 | 366 | ||
| 365 | #endif /* CONFIG_DCB */ | 367 | #endif /* CONFIG_DCB */ |
| 368 | /* | ||
| 369 | * On 82598 having Rx FC on causes resets while doing 1G | ||
| 370 | * so if it's on turn it off once we know link_speed. For | ||
| 371 | * more details see 82598 Specification update. | ||
| 372 | */ | ||
| 373 | hw->mac.ops.check_link(hw, &link_speed, &link_up, false); | ||
| 374 | if (link_up && link_speed == IXGBE_LINK_SPEED_1GB_FULL) { | ||
| 375 | switch (hw->fc.requested_mode) { | ||
| 376 | case ixgbe_fc_full: | ||
| 377 | hw->fc.requested_mode = ixgbe_fc_tx_pause; | ||
| 378 | break; | ||
| 379 | case ixgbe_fc_rx_pause: | ||
| 380 | hw->fc.requested_mode = ixgbe_fc_none; | ||
| 381 | break; | ||
| 382 | default: | ||
| 383 | /* no change */ | ||
| 384 | break; | ||
| 385 | } | ||
| 386 | } | ||
| 387 | |||
| 366 | /* Negotiate the fc mode to use */ | 388 | /* Negotiate the fc mode to use */ |
| 367 | ret_val = ixgbe_fc_autoneg(hw); | 389 | ret_val = ixgbe_fc_autoneg(hw); |
| 368 | if (ret_val) | 390 | if (ret_val) |
