Commit c196ce05 authored by Anders Larsen's avatar Anders Larsen Committed by David S. Miller

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: default avatarAnders Larsen <al@alarsen.net>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 0aa857f8
...@@ -118,6 +118,7 @@ static int pch_gbe_set_settings(struct net_device *netdev, ...@@ -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: */ * filled by get_settings() on a down link, speed is -1: */
if (speed == UINT_MAX) { if (speed == UINT_MAX) {
speed = SPEED_1000; speed = SPEED_1000;
ethtool_cmd_speed_set(ecmd, speed);
ecmd->duplex = DUPLEX_FULL; ecmd->duplex = DUPLEX_FULL;
} }
ret = mii_ethtool_sset(&adapter->mii, ecmd); ret = mii_ethtool_sset(&adapter->mii, ecmd);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment