ixgbe: fix link behavior for SFP+ when driver is brought down
We have had several requests to have ifconfig down command disable the SFP+ laser and thus make link go down. Likewise on ifconfig up the laser would be enabled and link would come up. This patch enables that behavior. Signed-off-by: Don Skidmore <donald.c.skidmore@intel.com> Tested-by: Stephen Ko <stephen.s.ko@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
e4d849b811
commit
c6ecf39a10
|
@ -65,9 +65,9 @@ static s32 ixgbe_verify_fw_version_82599(struct ixgbe_hw *hw);
|
|||
static void ixgbe_init_mac_link_ops_82599(struct ixgbe_hw *hw)
|
||||
{
|
||||
struct ixgbe_mac_info *mac = &hw->mac;
|
||||
if (hw->phy.multispeed_fiber) {
|
||||
/* Set up dual speed SFP+ support */
|
||||
mac->ops.setup_link = &ixgbe_setup_mac_link_multispeed_fiber;
|
||||
|
||||
/* enable the laser control functions for SFP+ fiber */
|
||||
if (mac->ops.get_media_type(hw) == ixgbe_media_type_fiber) {
|
||||
mac->ops.disable_tx_laser =
|
||||
&ixgbe_disable_tx_laser_multispeed_fiber;
|
||||
mac->ops.enable_tx_laser =
|
||||
|
@ -77,6 +77,12 @@ static void ixgbe_init_mac_link_ops_82599(struct ixgbe_hw *hw)
|
|||
mac->ops.disable_tx_laser = NULL;
|
||||
mac->ops.enable_tx_laser = NULL;
|
||||
mac->ops.flap_tx_laser = NULL;
|
||||
}
|
||||
|
||||
if (hw->phy.multispeed_fiber) {
|
||||
/* Set up dual speed SFP+ support */
|
||||
mac->ops.setup_link = &ixgbe_setup_mac_link_multispeed_fiber;
|
||||
} else {
|
||||
if ((mac->ops.get_media_type(hw) ==
|
||||
ixgbe_media_type_backplane) &&
|
||||
(hw->phy.smart_speed == ixgbe_smart_speed_auto ||
|
||||
|
|
|
@ -3793,8 +3793,11 @@ static int ixgbe_up_complete(struct ixgbe_adapter *adapter)
|
|||
else
|
||||
ixgbe_configure_msi_and_legacy(adapter);
|
||||
|
||||
/* enable the optics */
|
||||
if (hw->phy.multispeed_fiber && hw->mac.ops.enable_tx_laser)
|
||||
/* enable the optics for both mult-speed fiber and 82599 SFP+ fiber */
|
||||
if (hw->mac.ops.enable_tx_laser &&
|
||||
((hw->phy.multispeed_fiber) ||
|
||||
((hw->phy.type == ixgbe_media_type_fiber) &&
|
||||
(hw->mac.type == ixgbe_mac_82599EB))))
|
||||
hw->mac.ops.enable_tx_laser(hw);
|
||||
|
||||
clear_bit(__IXGBE_DOWN, &adapter->state);
|
||||
|
@ -4106,15 +4109,19 @@ void ixgbe_down(struct ixgbe_adapter *adapter)
|
|||
break;
|
||||
}
|
||||
|
||||
/* power down the optics */
|
||||
if (hw->phy.multispeed_fiber && hw->mac.ops.disable_tx_laser)
|
||||
hw->mac.ops.disable_tx_laser(hw);
|
||||
|
||||
/* clear n-tuple filters that are cached */
|
||||
ethtool_ntuple_flush(netdev);
|
||||
|
||||
if (!pci_channel_offline(adapter->pdev))
|
||||
ixgbe_reset(adapter);
|
||||
|
||||
/* power down the optics for multispeed fiber and 82599 SFP+ fiber */
|
||||
if (hw->mac.ops.disable_tx_laser &&
|
||||
((hw->phy.multispeed_fiber) ||
|
||||
((hw->phy.type == ixgbe_media_type_fiber) &&
|
||||
(hw->mac.type == ixgbe_mac_82599EB))))
|
||||
hw->mac.ops.disable_tx_laser(hw);
|
||||
|
||||
ixgbe_clean_all_tx_rings(adapter);
|
||||
ixgbe_clean_all_rx_rings(adapter);
|
||||
|
||||
|
@ -7197,8 +7204,11 @@ static int __devinit ixgbe_probe(struct pci_dev *pdev,
|
|||
goto err_eeprom;
|
||||
}
|
||||
|
||||
/* power down the optics */
|
||||
if (hw->phy.multispeed_fiber && hw->mac.ops.disable_tx_laser)
|
||||
/* power down the optics for multispeed fiber and 82599 SFP+ fiber */
|
||||
if (hw->mac.ops.disable_tx_laser &&
|
||||
((hw->phy.multispeed_fiber) ||
|
||||
((hw->phy.type == ixgbe_media_type_fiber) &&
|
||||
(hw->mac.type == ixgbe_mac_82599EB))))
|
||||
hw->mac.ops.disable_tx_laser(hw);
|
||||
|
||||
init_timer(&adapter->watchdog_timer);
|
||||
|
|
Loading…
Reference in New Issue