| From fb73188a4a20be3b610121a8c3ae927d81cc8b9a Mon Sep 17 00:00:00 2001 |
| From: Manfred Rudigier <manfred.rudigier@omicronenergy.com> |
| Date: Wed, 4 Dec 2019 11:40:26 +0100 |
| Subject: [PATCH] igb: Fix SGMII SFP module discovery for 100FX/LX. |
| |
| commit 5365ec1aeff5b9f2962a9c9b31d63f9dad7e0e2d upstream. |
| |
| Changing the link mode should also be done for 100BaseFX SGMII modules, |
| otherwise they just don't work when the default link mode in CTRL_EXT |
| coming from the EEPROM is SERDES. |
| |
| Additionally 100Base-LX SGMII SFP modules are also supported now, which |
| was not the case before. |
| |
| Tested with an i210 using Flexoptix S.1303.2M.G 100FX and |
| S.1303.10.G 100LX SGMII SFP modules. |
| |
| Signed-off-by: Manfred Rudigier <manfred.rudigier@omicronenergy.com> |
| Tested-by: Aaron Brown <aaron.f.brown@intel.com> |
| Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com> |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/drivers/net/ethernet/intel/igb/e1000_82575.c b/drivers/net/ethernet/intel/igb/e1000_82575.c |
| index bafdcf70a353..fdab974b245b 100644 |
| --- a/drivers/net/ethernet/intel/igb/e1000_82575.c |
| +++ b/drivers/net/ethernet/intel/igb/e1000_82575.c |
| @@ -530,7 +530,7 @@ static s32 igb_set_sfp_media_type_82575(struct e1000_hw *hw) |
| dev_spec->module_plugged = true; |
| if (eth_flags->e1000_base_lx || eth_flags->e1000_base_sx) { |
| hw->phy.media_type = e1000_media_type_internal_serdes; |
| - } else if (eth_flags->e100_base_fx) { |
| + } else if (eth_flags->e100_base_fx || eth_flags->e100_base_lx) { |
| dev_spec->sgmii_active = true; |
| hw->phy.media_type = e1000_media_type_internal_serdes; |
| } else if (eth_flags->e1000_base_t) { |
| @@ -657,14 +657,10 @@ static s32 igb_get_invariants_82575(struct e1000_hw *hw) |
| break; |
| } |
| |
| - /* do not change link mode for 100BaseFX */ |
| - if (dev_spec->eth_flags.e100_base_fx) |
| - break; |
| - |
| /* change current link mode setting */ |
| ctrl_ext &= ~E1000_CTRL_EXT_LINK_MODE_MASK; |
| |
| - if (hw->phy.media_type == e1000_media_type_copper) |
| + if (dev_spec->sgmii_active) |
| ctrl_ext |= E1000_CTRL_EXT_LINK_MODE_SGMII; |
| else |
| ctrl_ext |= E1000_CTRL_EXT_LINK_MODE_PCIE_SERDES; |
| diff --git a/drivers/net/ethernet/intel/igb/igb_ethtool.c b/drivers/net/ethernet/intel/igb/igb_ethtool.c |
| index c645d9e648e0..de95e96246b8 100644 |
| --- a/drivers/net/ethernet/intel/igb/igb_ethtool.c |
| +++ b/drivers/net/ethernet/intel/igb/igb_ethtool.c |
| @@ -181,7 +181,7 @@ static int igb_get_link_ksettings(struct net_device *netdev, |
| advertising &= ~ADVERTISED_1000baseKX_Full; |
| } |
| } |
| - if (eth_flags->e100_base_fx) { |
| + if (eth_flags->e100_base_fx || eth_flags->e100_base_lx) { |
| supported |= SUPPORTED_100baseT_Full; |
| advertising |= ADVERTISED_100baseT_Full; |
| } |
| -- |
| 2.7.4 |
| |