aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/ethernet/freescale
diff options
context:
space:
mode:
authorChris Healy <cphealy@gmail.com>2013-06-17 10:25:06 -0400
committerDavid S. Miller <davem@davemloft.net>2013-06-17 19:34:14 -0400
commit32bc9b46d840d08e1c8f58eaf500d0e596c33659 (patch)
treef6f67d111b0fa05643241e402e28973de40182b0 /drivers/net/ethernet/freescale
parentcedb743f3e8db12cc76a706888792497953e93bb (diff)
fec: Add support to restart autonegotiate
Add ethtool operation to restart autonegotiation via the PHY. Tested on i.MX28EVK. Signed-off-by: Chris Healy <cphealy@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ethernet/freescale')
-rw-r--r--drivers/net/ethernet/freescale/fec_main.c12
1 files changed, 12 insertions, 0 deletions
diff --git a/drivers/net/ethernet/freescale/fec_main.c b/drivers/net/ethernet/freescale/fec_main.c
index c540055e4f4f..46f2544fd1a7 100644
--- a/drivers/net/ethernet/freescale/fec_main.c
+++ b/drivers/net/ethernet/freescale/fec_main.c
@@ -1435,6 +1435,17 @@ static int fec_enet_set_pauseparam(struct net_device *ndev,
1435 return 0; 1435 return 0;
1436} 1436}
1437 1437
1438static int fec_enet_nway_reset(struct net_device *dev)
1439{
1440 struct fec_enet_private *fep = netdev_priv(dev);
1441 struct phy_device *phydev = fep->phy_dev;
1442
1443 if (!phydev)
1444 return -ENODEV;
1445
1446 return genphy_restart_aneg(phydev);
1447}
1448
1438static const struct ethtool_ops fec_enet_ethtool_ops = { 1449static const struct ethtool_ops fec_enet_ethtool_ops = {
1439 .get_pauseparam = fec_enet_get_pauseparam, 1450 .get_pauseparam = fec_enet_get_pauseparam,
1440 .set_pauseparam = fec_enet_set_pauseparam, 1451 .set_pauseparam = fec_enet_set_pauseparam,
@@ -1443,6 +1454,7 @@ static const struct ethtool_ops fec_enet_ethtool_ops = {
1443 .get_drvinfo = fec_enet_get_drvinfo, 1454 .get_drvinfo = fec_enet_get_drvinfo,
1444 .get_link = ethtool_op_get_link, 1455 .get_link = ethtool_op_get_link,
1445 .get_ts_info = fec_enet_get_ts_info, 1456 .get_ts_info = fec_enet_get_ts_info,
1457 .nway_reset = fec_enet_nway_reset,
1446}; 1458};
1447 1459
1448static int fec_enet_ioctl(struct net_device *ndev, struct ifreq *rq, int cmd) 1460static int fec_enet_ioctl(struct net_device *ndev, struct ifreq *rq, int cmd)