From: Jeff Kirsher <hidden> Date: 2012-08-21 08:37:57
This series contains updates to ethtool.h, e1000, e1000e, and igb to
implement MDI/MDIx control.
The following are changes since commit 1d76efe1577b4323609b1bcbfafa8b731eda071a:
team: add support for non-ethernet devices
and are available in the git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/jkirsher/net-next master
Bruce W Allan (1):
e1000e: implement 82577/579 MDI setting support
Jesse Brandeburg (5):
ethtool.h: MDI setting support
igb: implement 580 MDI setting support
e1000: configure and read MDI settings
e1000e: implement MDI/MDI-X control
igb: update to allow reading/setting MDI state
drivers/net/ethernet/intel/e1000/e1000_ethtool.c | 39 ++++++++++++++++++++++
drivers/net/ethernet/intel/e1000/e1000_main.c | 4 +++
drivers/net/ethernet/intel/e1000e/ethtool.c | 41 +++++++++++++++++++++--
drivers/net/ethernet/intel/e1000e/phy.c | 31 +++++++++++++++--
drivers/net/ethernet/intel/igb/e1000_phy.c | 29 ++++++++++++++--
drivers/net/ethernet/intel/igb/e1000_phy.h | 5 +--
drivers/net/ethernet/intel/igb/igb_ethtool.c | 42 ++++++++++++++++++++++++
drivers/net/ethernet/intel/igb/igb_main.c | 4 +++
include/linux/ethtool.h | 17 ++++++----
9 files changed, 198 insertions(+), 14 deletions(-)
--
1.7.11.4
From: Jeff Kirsher <hidden> Date: 2012-08-21 08:37:58
From: Jesse Brandeburg <redacted>
This change modifies the core ethtool struct to allow a driver to
support setting of MDI/MDI-X state for twisted pair wiring. This
change uses a previously reserved u8 and should not change any
binary compatibility of ethtool.
Also as per Ben Hutchings' suggestion, the capabilities are
stored in a separate byte so the driver can report if it supports
changing settings.
see thread: http://kerneltrap.org/mailarchive/linux-netdev/2010/11/17/6289820/thread
see ethtool patches titled:
ethtool: allow setting MDI-X state
Signed-off-by: Jesse Brandeburg <redacted>
CC: Ben Hutchings <redacted>
Tested-by: Aaron Brown aaron.f.brown@intel.com
Signed-off-by: Jeff Kirsher <redacted>
---
include/linux/ethtool.h | 17 +++++++++++------
1 file changed, 11 insertions(+), 6 deletions(-)
@@ -45,8 +45,10 @@ struct ethtool_cmd {*bits)inMbps.Pleaseuse*ethtool_cmd_speed()/_set()to*accessit*/-__u8eth_tp_mdix;-__u8reserved2;+__u8eth_tp_mdix;/* twisted pair MDI-X status */+__u8eth_tp_mdix_ctrl;/* twisted pair MDI-X control, when set,+*linkshouldberenegotiatedifnecessary+*/__u32lp_advertising;/* Features the link partner advertises */__u32reserved[2];};
From: Jeff Kirsher <hidden> Date: 2012-08-21 08:37:58
From: Bruce W Allan <redacted>
In order for e1000e to support MDI setting support via
ethtool this code is needed to allow setting the MDI state
via software.
This is in regards to the related ethtool patch and
fixes bugzilla.kernel.org bug 11998
Signed-off-by: Bruce W Allan <redacted>
Signed-off-by: Jesse Brandeburg <redacted>
Tested-by: Aaron Brown aaron.f.brown@intel.com
Signed-off-by: Jeff Kirsher <redacted>
---
drivers/net/ethernet/intel/e1000e/phy.c | 31 +++++++++++++++++++++++++++++--
1 file changed, 29 insertions(+), 2 deletions(-)
From: Jeff Kirsher <hidden> Date: 2012-08-21 08:37:59
From: Jesse Brandeburg <redacted>
In order for igb to support MDI setting support via
ethtool this code is needed to allow setting the MDI state
via software.
This is in regards to the related ethtool patch
Signed-off-by: Jesse Brandeburg <redacted>
Tested-by: Aaron Brown aaron.f.brown@intel.com
Signed-off-by: Jeff Kirsher <redacted>
---
drivers/net/ethernet/intel/igb/e1000_phy.c | 29 +++++++++++++++++++++++++++--
drivers/net/ethernet/intel/igb/e1000_phy.h | 5 +++--
2 files changed, 30 insertions(+), 4 deletions(-)
From: Jeff Kirsher <hidden> Date: 2012-08-21 08:38:00
From: Jesse Brandeburg <redacted>
This is the implementation in e1000 to allow ethtool to force
MDI state, allowing users to work around some improperly
behaving switches.
Forcing in this driver is for now only allowed when auto-neg is enabled.
To use must have the matching version of ethtool app that supports
this functionality.
Signed-off-by: Jesse Brandeburg <redacted>
CC: Tushar Dave <redacted>
Tested-by: Aaron Brown aaron.f.brown@intel.com
Signed-off-by: Jeff Kirsher <redacted>
---
drivers/net/ethernet/intel/e1000/e1000_ethtool.c | 39 ++++++++++++++++++++++++
drivers/net/ethernet/intel/e1000/e1000_main.c | 4 +++
2 files changed, 43 insertions(+)
@@ -183,6 +197,22 @@ static int e1000_set_settings(struct net_device *netdev,structe1000_adapter*adapter=netdev_priv(netdev);structe1000_hw*hw=&adapter->hw;+/*+*MDIsettingisonlyallowedwhenautonegenabledbecause+*somehardwaredoesn'tallowMDIsettingwhenspeedor+*duplexisforced.+*/+if(ecmd->eth_tp_mdix_ctrl){+if(hw->media_type!=e1000_media_type_copper)+return-EOPNOTSUPP;++if((ecmd->eth_tp_mdix_ctrl!=ETH_TP_MDI_AUTO)&&+(ecmd->autoneg!=AUTONEG_ENABLE)){+e_err(drv,"forcing MDI/MDI-X state is not supported when link speed and/or duplex are forced\n");+return-EINVAL;+}+}+while(test_and_set_bit(__E1000_RESETTING,&adapter->flags))msleep(1);
@@ -199,12 +229,21 @@ static int e1000_set_settings(struct net_device *netdev,ecmd->advertising=hw->autoneg_advertised;}else{u32speed=ethtool_cmd_speed(ecmd);+/* calling this overrides forced MDI setting */if(e1000_set_spd_dplx(adapter,speed,ecmd->duplex)){clear_bit(__E1000_RESETTING,&adapter->flags);return-EINVAL;}}+/* MDI-X => 2; MDI => 1; Auto => 3 */+if(ecmd->eth_tp_mdix_ctrl){+if(ecmd->eth_tp_mdix_ctrl==ETH_TP_MDI_AUTO)+hw->mdix=AUTO_ALL_MODES;+else+hw->mdix=ecmd->eth_tp_mdix_ctrl;+}+/* reset the link */if(netif_running(adapter->netdev)){
From: Jeff Kirsher <hidden> Date: 2012-08-21 08:38:00
From: Jesse Brandeburg <redacted>
Some users report issues with link failing when connected to certain
switches. This gives the user the ability to control the MDI state
from the driver, allowing users to work around some improperly
behaving switches.
Forcing in this driver is for now only allowed when auto-neg is
enabled.
This is in regards to the related ethtool app patch and
bugzilla.kernel.org bug 11998
Signed-off-by: Jesse Brandeburg <redacted>
CC: bruce.w.allan@intel.com
CC: n.poppelier@xs4all.nl
CC: bastien@durel.org
CC: jsveiga@it.eng.br
Tested-by: Aaron Brown aaron.f.brown@intel.com
Signed-off-by: Jeff Kirsher <redacted>
---
drivers/net/ethernet/intel/e1000e/ethtool.c | 41 +++++++++++++++++++++++++++--
1 file changed, 39 insertions(+), 2 deletions(-)
@@ -199,6 +199,11 @@ static int e1000_get_settings(struct net_device *netdev,elseecmd->eth_tp_mdix=ETH_TP_MDI_INVALID;+if(hw->phy.mdix==AUTO_ALL_MODES)+ecmd->eth_tp_mdix_ctrl=ETH_TP_MDI_AUTO;+else+ecmd->eth_tp_mdix_ctrl=hw->phy.mdix;+return0;}
@@ -241,6 +246,10 @@ static int e1000_set_spd_dplx(struct e1000_adapter *adapter, u32 spd, u8 dplx)default:gotoerr_inval;}++/* clear MDI, MDI(-X) override is only allowed when autoneg enabled */+adapter->hw.phy.mdix=AUTO_ALL_MODES;+return0;err_inval:
@@ -264,6 +273,22 @@ static int e1000_set_settings(struct net_device *netdev,return-EINVAL;}+/*+*MDIsettingisonlyallowedwhenautonegenabledbecause+*somehardwaredoesn'tallowMDIsettingwhenspeedor+*duplexisforced.+*/+if(ecmd->eth_tp_mdix_ctrl){+if(hw->phy.media_type!=e1000_media_type_copper)+return-EOPNOTSUPP;++if((ecmd->eth_tp_mdix_ctrl!=ETH_TP_MDI_AUTO)&&+(ecmd->autoneg!=AUTONEG_ENABLE)){+e_err("forcing MDI/MDI-X state is not supported when link speed and/or duplex are forced\n");+return-EINVAL;+}+}+while(test_and_set_bit(__E1000_RESETTING,&adapter->state))usleep_range(1000,2000);
@@ -282,20 +307,32 @@ static int e1000_set_settings(struct net_device *netdev,hw->fc.requested_mode=e1000_fc_default;}else{u32speed=ethtool_cmd_speed(ecmd);+/* calling this overrides forced MDI setting */if(e1000_set_spd_dplx(adapter,speed,ecmd->duplex)){clear_bit(__E1000_RESETTING,&adapter->state);return-EINVAL;}}+/* MDI-X => 2; MDI => 1; Auto => 3 */+if(ecmd->eth_tp_mdix_ctrl){+/*+*fixupthevalueforauto(3=>0)aszeroismapped+*internallytoauto+*/+if(ecmd->eth_tp_mdix_ctrl==ETH_TP_MDI_AUTO)+hw->phy.mdix=AUTO_ALL_MODES;+else+hw->phy.mdix=ecmd->eth_tp_mdix_ctrl;+}+/* reset the link */if(netif_running(adapter->netdev)){e1000e_down(adapter);e1000e_up(adapter);-}else{+}elsee1000e_reset(adapter);-}clear_bit(__E1000_RESETTING,&adapter->state);return0;
From: Jeff Kirsher <hidden> Date: 2012-08-21 08:38:01
From: Jesse Brandeburg <redacted>
This is the implementation for igb to allow forcing MDI state
via ethtool, allowing users to work around some improperly
behaving switches.
Forcing in this driver is for now only allowed when auto-neg is
enabled.
Signed-off-by: Jesse Brandeburg <redacted>
CC: Carolyn Wyborny <redacted>
Tested-by: Aaron Brown aaron.f.brown@intel.com
Signed-off-by: Jeff Kirsher <redacted>
---
drivers/net/ethernet/intel/igb/igb_ethtool.c | 42 ++++++++++++++++++++++++++++
drivers/net/ethernet/intel/igb/igb_main.c | 4 +++
2 files changed, 46 insertions(+)
@@ -214,6 +227,22 @@ static int igb_set_settings(struct net_device *netdev, struct ethtool_cmd *ecmd)return-EINVAL;}+/*+*MDIsettingisonlyallowedwhenautonegenabledbecause+*somehardwaredoesn'tallowMDIsettingwhenspeedor+*duplexisforced.+*/+if(ecmd->eth_tp_mdix_ctrl){+if(hw->phy.media_type!=e1000_media_type_copper)+return-EOPNOTSUPP;++if((ecmd->eth_tp_mdix_ctrl!=ETH_TP_MDI_AUTO)&&+(ecmd->autoneg!=AUTONEG_ENABLE)){+dev_err(&adapter->pdev->dev,"forcing MDI/MDI-X state is not supported when link speed and/or duplex are forced\n");+return-EINVAL;+}+}+while(test_and_set_bit(__IGB_RESETTING,&adapter->state))msleep(1);
@@ -227,12 +256,25 @@ static int igb_set_settings(struct net_device *netdev, struct ethtool_cmd *ecmd)hw->fc.requested_mode=e1000_fc_default;}else{u32speed=ethtool_cmd_speed(ecmd);+/* calling this overrides forced MDI setting */if(igb_set_spd_dplx(adapter,speed,ecmd->duplex)){clear_bit(__IGB_RESETTING,&adapter->state);return-EINVAL;}}+/* MDI-X => 2; MDI => 1; Auto => 3 */+if(ecmd->eth_tp_mdix_ctrl){+/*+*fixupthevalueforauto(3=>0)aszeroismapped+*internallytoauto+*/+if(ecmd->eth_tp_mdix_ctrl==ETH_TP_MDI_AUTO)+hw->phy.mdix=AUTO_ALL_MODES;+else+hw->phy.mdix=ecmd->eth_tp_mdix_ctrl;+}+/* reset the link */if(netif_running(adapter->netdev)){igb_down(adapter);
From: Ben Hutchings <hidden> Date: 2012-08-21 15:12:54
On Tue, 2012-08-21 at 01:37 -0700, Jeff Kirsher wrote:
From: Jesse Brandeburg <redacted>
This change modifies the core ethtool struct to allow a driver to
support setting of MDI/MDI-X state for twisted pair wiring. This
change uses a previously reserved u8 and should not change any
binary compatibility of ethtool.
Also as per Ben Hutchings' suggestion, the capabilities are
stored in a separate byte so the driver can report if it supports
changing settings.
see thread: http://kerneltrap.org/mailarchive/linux-netdev/2010/11/17/6289820/thread
see ethtool patches titled:
ethtool: allow setting MDI-X state
Signed-off-by: Jesse Brandeburg <redacted>
CC: Ben Hutchings <redacted>
Tested-by: Aaron Brown aaron.f.brown@intel.com
Signed-off-by: Jeff Kirsher <redacted>
@@ -45,8 +45,10 @@ struct ethtool_cmd {*bits)inMbps.Pleaseuse*ethtool_cmd_speed()/_set()to*accessit*/-__u8eth_tp_mdix;-__u8reserved2;+__u8eth_tp_mdix;/* twisted pair MDI-X status */+__u8eth_tp_mdix_ctrl;/* twisted pair MDI-X control, when set,+*linkshouldberenegotiatedifnecessary+*/__u32lp_advertising;/* Features the link partner advertises */__u32reserved[2];};
--
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.
From: David Miller <davem@davemloft.net> Date: 2012-08-22 21:24:27
From: Jeff Kirsher <redacted>
Date: Tue, 21 Aug 2012 01:37:49 -0700
This series contains updates to ethtool.h, e1000, e1000e, and igb to
implement MDI/MDIx control.
The following are changes since commit 1d76efe1577b4323609b1bcbfafa8b731eda071a:
team: add support for non-ethernet devices
and are available in the git repository at:
git://git.kernel.org/pub/scm/linux/kernel/git/jkirsher/net-next master