* [PATCH net-next 6/6] be2net: fix to set ecmd->autoneg correctly
@ 2011-08-05 20:01 Ajit Khaparde
2011-08-05 21:51 ` Ben Hutchings
0 siblings, 1 reply; 2+ messages in thread
From: Ajit Khaparde @ 2011-08-05 20:01 UTC (permalink / raw)
To: davem; +Cc: netdev
Set the autonegotation settings correctly based on the port speed.
Signed-off-by: Suresh Reddy <suresh.reddy@emulex.com>
Signed-off-by: Ajit Khaparde <ajit.khaparde@emulex.com>
---
drivers/net/benet/be_ethtool.c | 21 +++++++++++++++++----
1 files changed, 17 insertions(+), 4 deletions(-)
diff --git a/drivers/net/benet/be_ethtool.c b/drivers/net/benet/be_ethtool.c
index 5dd3ed6..2177c8c 100644
--- a/drivers/net/benet/be_ethtool.c
+++ b/drivers/net/benet/be_ethtool.c
@@ -353,6 +353,8 @@ static int be_get_settings(struct net_device *netdev, struct ethtool_cmd *ecmd)
u8 mac_speed = 0;
u16 link_speed = 0;
int status;
+ u16 port_speed = 0;
+ u16 dac_cable_len = 0;
if ((adapter->link_speed < 0) || (!(netdev->flags & IFF_UP))) {
status = be_cmd_link_status_query(adapter, &mac_speed,
@@ -397,11 +399,9 @@ static int be_get_settings(struct net_device *netdev, struct ethtool_cmd *ecmd)
switch (phy_info.interface_type) {
case PHY_TYPE_KR_10GB:
case PHY_TYPE_KX4_10GB:
- ecmd->autoneg = AUTONEG_ENABLE;
ecmd->transceiver = XCVR_INTERNAL;
break;
default:
- ecmd->autoneg = AUTONEG_DISABLE;
ecmd->transceiver = XCVR_EXTERNAL;
break;
}
@@ -411,12 +411,25 @@ static int be_get_settings(struct net_device *netdev, struct ethtool_cmd *ecmd)
adapter->link_speed = ethtool_cmd_speed(ecmd);
adapter->port_type = ecmd->port;
adapter->transceiver = ecmd->transceiver;
- adapter->autoneg = ecmd->autoneg;
} else {
ethtool_cmd_speed_set(ecmd, adapter->link_speed);
ecmd->port = adapter->port_type;
ecmd->transceiver = adapter->transceiver;
- ecmd->autoneg = adapter->autoneg;
+ }
+
+ be_cmd_get_port_speed(adapter, adapter->port_num,
+ &dac_cable_len, &port_speed);
+ switch (port_speed) {
+ case SPEED_FORCED_10GB:
+ case SPEED_FORCED_1GB:
+ case SPEED_FORCED_100MB:
+ case SPEED_FORCED_10MB:
+ case SPEED_DEFAULT:
+ ecmd->autoneg = AUTONEG_DISABLE;
+ break;
+ default:
+ ecmd->autoneg = AUTONEG_ENABLE;
+ break;
}
ecmd->duplex = DUPLEX_FULL;
--
1.7.4.1
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH net-next 6/6] be2net: fix to set ecmd->autoneg correctly
2011-08-05 20:01 [PATCH net-next 6/6] be2net: fix to set ecmd->autoneg correctly Ajit Khaparde
@ 2011-08-05 21:51 ` Ben Hutchings
0 siblings, 0 replies; 2+ messages in thread
From: Ben Hutchings @ 2011-08-05 21:51 UTC (permalink / raw)
To: Ajit Khaparde; +Cc: davem, netdev
On Fri, 2011-08-05 at 15:01 -0500, Ajit Khaparde wrote:
> Set the autonegotation settings correctly based on the port speed.
[...]
Autonegotiation and multi-speed are two entirely different things.
Selecting a single speed doesn't mean turning autoneg off. If you
enable only 1000BASE-T or only 10GBASE-T, the PHY must still go through
autoneg to determine whether it is the clock master for the link.
Enabling multiple speeds doesn't mean turning autoneg on. An SFP+ slot
can take 1G and 10G modules but the modules generally won't support
autoneg.
Ben.
--
Ben Hutchings, Staff Engineer, Solarflare
Not speaking for my employer; that's the marketing department's job.
They asked us to note that Solarflare product names are trademarked.
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2011-08-05 21:52 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-08-05 20:01 [PATCH net-next 6/6] be2net: fix to set ecmd->autoneg correctly Ajit Khaparde
2011-08-05 21:51 ` Ben Hutchings
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox