aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/net/ethernet/intel/igb/igb_ethtool.c26
1 files changed, 15 insertions, 11 deletions
diff --git a/drivers/net/ethernet/intel/igb/igb_ethtool.c b/drivers/net/ethernet/intel/igb/igb_ethtool.c
index ce9b5a9e480c..48cbc833b051 100644
--- a/drivers/net/ethernet/intel/igb/igb_ethtool.c
+++ b/drivers/net/ethernet/intel/igb/igb_ethtool.c
@@ -172,10 +172,7 @@ static int igb_get_settings(struct net_device *netdev, struct ethtool_cmd *ecmd)
172 SUPPORTED_Autoneg | 172 SUPPORTED_Autoneg |
173 SUPPORTED_Pause); 173 SUPPORTED_Pause);
174 ecmd->advertising = ADVERTISED_FIBRE; 174 ecmd->advertising = ADVERTISED_FIBRE;
175 if (hw->mac.type == e1000_i354) { 175
176 ecmd->supported |= SUPPORTED_2500baseX_Full;
177 ecmd->advertising |= ADVERTISED_2500baseX_Full;
178 }
179 if ((eth_flags->e1000_base_lx) || (eth_flags->e1000_base_sx)) { 176 if ((eth_flags->e1000_base_lx) || (eth_flags->e1000_base_sx)) {
180 ecmd->supported |= SUPPORTED_1000baseT_Full; 177 ecmd->supported |= SUPPORTED_1000baseT_Full;
181 ecmd->advertising |= ADVERTISED_1000baseT_Full; 178 ecmd->advertising |= ADVERTISED_1000baseT_Full;
@@ -209,16 +206,23 @@ static int igb_get_settings(struct net_device *netdev, struct ethtool_cmd *ecmd)
209 status = rd32(E1000_STATUS); 206 status = rd32(E1000_STATUS);
210 207
211 if (status & E1000_STATUS_LU) { 208 if (status & E1000_STATUS_LU) {
212 if ((hw->mac.type == e1000_i354) && 209 if (hw->mac.type == e1000_i354) {
213 (status & E1000_STATUS_2P5_SKU) && 210 if ((status & E1000_STATUS_2P5_SKU) &&
214 !(status & E1000_STATUS_2P5_SKU_OVER)) 211 !(status & E1000_STATUS_2P5_SKU_OVER)) {
215 ecmd->speed = SPEED_2500; 212 ecmd->supported = SUPPORTED_2500baseX_Full;
216 else if (status & E1000_STATUS_SPEED_1000) 213 ecmd->advertising = ADVERTISED_2500baseX_Full;
214 ecmd->speed = SPEED_2500;
215 } else {
216 ecmd->supported = SUPPORTED_1000baseT_Full;
217 ecmd->advertising = ADVERTISED_1000baseT_Full;
218 }
219 } else if (status & E1000_STATUS_SPEED_1000) {
217 ecmd->speed = SPEED_1000; 220 ecmd->speed = SPEED_1000;
218 else if (status & E1000_STATUS_SPEED_100) 221 } else if (status & E1000_STATUS_SPEED_100) {
219 ecmd->speed = SPEED_100; 222 ecmd->speed = SPEED_100;
220 else 223 } else {
221 ecmd->speed = SPEED_10; 224 ecmd->speed = SPEED_10;
225 }
222 if ((status & E1000_STATUS_FD) || 226 if ((status & E1000_STATUS_FD) ||
223 hw->phy.media_type != e1000_media_type_copper) 227 hw->phy.media_type != e1000_media_type_copper)
224 ecmd->duplex = DUPLEX_FULL; 228 ecmd->duplex = DUPLEX_FULL;