diff options
author | Anders Larsen <al@alarsen.net> | 2013-08-18 11:54:40 +0200 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2013-08-20 15:05:04 -0700 |
commit | c196ce05cfdb7b5a8af12a3096fac9e880d59617 (patch) | |
tree | a70f95ec53093a755910716f3626560eea89b331 /drivers/net/ethernet/oki-semi/pch_gbe | |
parent | 0aa857f83fe2674f973ad89ec7c0202f5c5d9554 (diff) | |
download | linux-stable-c196ce05cfdb7b5a8af12a3096fac9e880d59617.tar.gz linux-stable-c196ce05cfdb7b5a8af12a3096fac9e880d59617.tar.bz2 linux-stable-c196ce05cfdb7b5a8af12a3096fac9e880d59617.zip |
pch_gbe: ethtool cannot change parameters when link is down
When attempting to change e.g. the advertising mask when the link is down
ecmd->speed is -1 causing mii_ethtool_sset() to bail out.
This bug bit when connecting to a gigabit switch through a 4-pin (industrial)
cable, since link negotiation would not complete (both endpoints claimed to
be gigabit-capable, but this is not possible with only 4 pins).
Any attempt to fix this by setting autonegation to not offer 1000Mbps
failed as the setting would not be accepted while the link was still down...
Set ecmd->speed to SPEED_1000 to satisfy mii_ethtool_sset()
(the actual value of ecmd->speed doesn't matter as long as it is valid,
since a re-negotation is forced afterwards).
Signed-off-by: Anders Larsen <al@alarsen.net>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ethernet/oki-semi/pch_gbe')
-rw-r--r-- | drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_ethtool.c | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_ethtool.c b/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_ethtool.c index 1129db0cdf82..f0ceb89af931 100644 --- a/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_ethtool.c +++ b/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_ethtool.c @@ -118,6 +118,7 @@ static int pch_gbe_set_settings(struct net_device *netdev, * filled by get_settings() on a down link, speed is -1: */ if (speed == UINT_MAX) { speed = SPEED_1000; + ethtool_cmd_speed_set(ecmd, speed); ecmd->duplex = DUPLEX_FULL; } ret = mii_ethtool_sset(&adapter->mii, ecmd); |