Commit 1685e785 authored by Philippe Reynes's avatar Philippe Reynes Committed by David S. Miller

net: stmmac: use new api ethtool_{get|set}_link_ksettings

The ethtool api {get|set}_settings is deprecated.
We move this driver to new api {get|set}_link_ksettings.
Signed-off-by: default avatarPhilippe Reynes <tremyfr@gmail.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent d6d50c7e
...@@ -269,8 +269,8 @@ static void stmmac_ethtool_getdrvinfo(struct net_device *dev, ...@@ -269,8 +269,8 @@ static void stmmac_ethtool_getdrvinfo(struct net_device *dev,
strlcpy(info->version, DRV_MODULE_VERSION, sizeof(info->version)); strlcpy(info->version, DRV_MODULE_VERSION, sizeof(info->version));
} }
static int stmmac_ethtool_getsettings(struct net_device *dev, static int stmmac_ethtool_get_link_ksettings(struct net_device *dev,
struct ethtool_cmd *cmd) struct ethtool_link_ksettings *cmd)
{ {
struct stmmac_priv *priv = netdev_priv(dev); struct stmmac_priv *priv = netdev_priv(dev);
struct phy_device *phy = dev->phydev; struct phy_device *phy = dev->phydev;
...@@ -279,15 +279,16 @@ static int stmmac_ethtool_getsettings(struct net_device *dev, ...@@ -279,15 +279,16 @@ static int stmmac_ethtool_getsettings(struct net_device *dev,
if (priv->hw->pcs & STMMAC_PCS_RGMII || if (priv->hw->pcs & STMMAC_PCS_RGMII ||
priv->hw->pcs & STMMAC_PCS_SGMII) { priv->hw->pcs & STMMAC_PCS_SGMII) {
struct rgmii_adv adv; struct rgmii_adv adv;
u32 supported, advertising, lp_advertising;
if (!priv->xstats.pcs_link) { if (!priv->xstats.pcs_link) {
ethtool_cmd_speed_set(cmd, SPEED_UNKNOWN); cmd->base.speed = SPEED_UNKNOWN;
cmd->duplex = DUPLEX_UNKNOWN; cmd->base.duplex = DUPLEX_UNKNOWN;
return 0; return 0;
} }
cmd->duplex = priv->xstats.pcs_duplex; cmd->base.duplex = priv->xstats.pcs_duplex;
ethtool_cmd_speed_set(cmd, priv->xstats.pcs_speed); cmd->base.speed = priv->xstats.pcs_speed;
/* Get and convert ADV/LP_ADV from the HW AN registers */ /* Get and convert ADV/LP_ADV from the HW AN registers */
if (!priv->hw->mac->pcs_get_adv_lp) if (!priv->hw->mac->pcs_get_adv_lp)
...@@ -297,45 +298,59 @@ static int stmmac_ethtool_getsettings(struct net_device *dev, ...@@ -297,45 +298,59 @@ static int stmmac_ethtool_getsettings(struct net_device *dev,
/* Encoding of PSE bits is defined in 802.3z, 37.2.1.4 */ /* Encoding of PSE bits is defined in 802.3z, 37.2.1.4 */
ethtool_convert_link_mode_to_legacy_u32(
&supported, cmd->link_modes.supported);
ethtool_convert_link_mode_to_legacy_u32(
&advertising, cmd->link_modes.advertising);
ethtool_convert_link_mode_to_legacy_u32(
&lp_advertising, cmd->link_modes.lp_advertising);
if (adv.pause & STMMAC_PCS_PAUSE) if (adv.pause & STMMAC_PCS_PAUSE)
cmd->advertising |= ADVERTISED_Pause; advertising |= ADVERTISED_Pause;
if (adv.pause & STMMAC_PCS_ASYM_PAUSE) if (adv.pause & STMMAC_PCS_ASYM_PAUSE)
cmd->advertising |= ADVERTISED_Asym_Pause; advertising |= ADVERTISED_Asym_Pause;
if (adv.lp_pause & STMMAC_PCS_PAUSE) if (adv.lp_pause & STMMAC_PCS_PAUSE)
cmd->lp_advertising |= ADVERTISED_Pause; lp_advertising |= ADVERTISED_Pause;
if (adv.lp_pause & STMMAC_PCS_ASYM_PAUSE) if (adv.lp_pause & STMMAC_PCS_ASYM_PAUSE)
cmd->lp_advertising |= ADVERTISED_Asym_Pause; lp_advertising |= ADVERTISED_Asym_Pause;
/* Reg49[3] always set because ANE is always supported */ /* Reg49[3] always set because ANE is always supported */
cmd->autoneg = ADVERTISED_Autoneg; cmd->base.autoneg = ADVERTISED_Autoneg;
cmd->supported |= SUPPORTED_Autoneg; supported |= SUPPORTED_Autoneg;
cmd->advertising |= ADVERTISED_Autoneg; advertising |= ADVERTISED_Autoneg;
cmd->lp_advertising |= ADVERTISED_Autoneg; lp_advertising |= ADVERTISED_Autoneg;
if (adv.duplex) { if (adv.duplex) {
cmd->supported |= (SUPPORTED_1000baseT_Full | supported |= (SUPPORTED_1000baseT_Full |
SUPPORTED_100baseT_Full | SUPPORTED_100baseT_Full |
SUPPORTED_10baseT_Full); SUPPORTED_10baseT_Full);
cmd->advertising |= (ADVERTISED_1000baseT_Full | advertising |= (ADVERTISED_1000baseT_Full |
ADVERTISED_100baseT_Full | ADVERTISED_100baseT_Full |
ADVERTISED_10baseT_Full); ADVERTISED_10baseT_Full);
} else { } else {
cmd->supported |= (SUPPORTED_1000baseT_Half | supported |= (SUPPORTED_1000baseT_Half |
SUPPORTED_100baseT_Half | SUPPORTED_100baseT_Half |
SUPPORTED_10baseT_Half); SUPPORTED_10baseT_Half);
cmd->advertising |= (ADVERTISED_1000baseT_Half | advertising |= (ADVERTISED_1000baseT_Half |
ADVERTISED_100baseT_Half | ADVERTISED_100baseT_Half |
ADVERTISED_10baseT_Half); ADVERTISED_10baseT_Half);
} }
if (adv.lp_duplex) if (adv.lp_duplex)
cmd->lp_advertising |= (ADVERTISED_1000baseT_Full | lp_advertising |= (ADVERTISED_1000baseT_Full |
ADVERTISED_100baseT_Full | ADVERTISED_100baseT_Full |
ADVERTISED_10baseT_Full); ADVERTISED_10baseT_Full);
else else
cmd->lp_advertising |= (ADVERTISED_1000baseT_Half | lp_advertising |= (ADVERTISED_1000baseT_Half |
ADVERTISED_100baseT_Half | ADVERTISED_100baseT_Half |
ADVERTISED_10baseT_Half); ADVERTISED_10baseT_Half);
cmd->port = PORT_OTHER; cmd->base.port = PORT_OTHER;
ethtool_convert_legacy_u32_to_link_mode(
cmd->link_modes.supported, supported);
ethtool_convert_legacy_u32_to_link_mode(
cmd->link_modes.advertising, advertising);
ethtool_convert_legacy_u32_to_link_mode(
cmd->link_modes.lp_advertising, lp_advertising);
return 0; return 0;
} }
...@@ -350,13 +365,13 @@ static int stmmac_ethtool_getsettings(struct net_device *dev, ...@@ -350,13 +365,13 @@ static int stmmac_ethtool_getsettings(struct net_device *dev,
"link speed / duplex setting\n", dev->name); "link speed / duplex setting\n", dev->name);
return -EBUSY; return -EBUSY;
} }
cmd->transceiver = XCVR_INTERNAL; rc = phy_ethtool_ksettings_get(phy, cmd);
rc = phy_ethtool_gset(phy, cmd);
return rc; return rc;
} }
static int stmmac_ethtool_setsettings(struct net_device *dev, static int
struct ethtool_cmd *cmd) stmmac_ethtool_set_link_ksettings(struct net_device *dev,
const struct ethtool_link_ksettings *cmd)
{ {
struct stmmac_priv *priv = netdev_priv(dev); struct stmmac_priv *priv = netdev_priv(dev);
struct phy_device *phy = dev->phydev; struct phy_device *phy = dev->phydev;
...@@ -367,7 +382,7 @@ static int stmmac_ethtool_setsettings(struct net_device *dev, ...@@ -367,7 +382,7 @@ static int stmmac_ethtool_setsettings(struct net_device *dev,
u32 mask = ADVERTISED_Autoneg | ADVERTISED_Pause; u32 mask = ADVERTISED_Autoneg | ADVERTISED_Pause;
/* Only support ANE */ /* Only support ANE */
if (cmd->autoneg != AUTONEG_ENABLE) if (cmd->base.autoneg != AUTONEG_ENABLE)
return -EINVAL; return -EINVAL;
mask &= (ADVERTISED_1000baseT_Half | mask &= (ADVERTISED_1000baseT_Half |
...@@ -389,7 +404,7 @@ static int stmmac_ethtool_setsettings(struct net_device *dev, ...@@ -389,7 +404,7 @@ static int stmmac_ethtool_setsettings(struct net_device *dev,
} }
spin_lock(&priv->lock); spin_lock(&priv->lock);
rc = phy_ethtool_sset(phy, cmd); rc = phy_ethtool_ksettings_set(phy, cmd);
spin_unlock(&priv->lock); spin_unlock(&priv->lock);
return rc; return rc;
...@@ -850,8 +865,6 @@ static int stmmac_set_tunable(struct net_device *dev, ...@@ -850,8 +865,6 @@ static int stmmac_set_tunable(struct net_device *dev,
static const struct ethtool_ops stmmac_ethtool_ops = { static const struct ethtool_ops stmmac_ethtool_ops = {
.begin = stmmac_check_if_running, .begin = stmmac_check_if_running,
.get_drvinfo = stmmac_ethtool_getdrvinfo, .get_drvinfo = stmmac_ethtool_getdrvinfo,
.get_settings = stmmac_ethtool_getsettings,
.set_settings = stmmac_ethtool_setsettings,
.get_msglevel = stmmac_ethtool_getmsglevel, .get_msglevel = stmmac_ethtool_getmsglevel,
.set_msglevel = stmmac_ethtool_setmsglevel, .set_msglevel = stmmac_ethtool_setmsglevel,
.get_regs = stmmac_ethtool_gregs, .get_regs = stmmac_ethtool_gregs,
...@@ -871,6 +884,8 @@ static const struct ethtool_ops stmmac_ethtool_ops = { ...@@ -871,6 +884,8 @@ static const struct ethtool_ops stmmac_ethtool_ops = {
.set_coalesce = stmmac_set_coalesce, .set_coalesce = stmmac_set_coalesce,
.get_tunable = stmmac_get_tunable, .get_tunable = stmmac_get_tunable,
.set_tunable = stmmac_set_tunable, .set_tunable = stmmac_set_tunable,
.get_link_ksettings = stmmac_ethtool_get_link_ksettings,
.set_link_ksettings = stmmac_ethtool_set_link_ksettings,
}; };
void stmmac_set_ethtool_ops(struct net_device *netdev) void stmmac_set_ethtool_ops(struct net_device *netdev)
......
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