Commit cce62943 authored by Ioana Radulescu's avatar Ioana Radulescu Committed by David S. Miller

dpaa2-eth: Use stored link settings

Whenever a link state change occurs, we get notified and save
the new link settings in the device's private data. In ethtool
get_link_ksettings, use the stored state instead of interrogating
the firmware each time.
Signed-off-by: default avatarIoana Radulescu <ruxandra.radulescu@nxp.com>
Reviewed-by: default avatarAndrew Lunn <andrew@lunn.ch>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent f7fe7e3d
...@@ -1222,9 +1222,8 @@ static int link_state_update(struct dpaa2_eth_priv *priv) ...@@ -1222,9 +1222,8 @@ static int link_state_update(struct dpaa2_eth_priv *priv)
/* Chech link state; speed / duplex changes are not treated yet */ /* Chech link state; speed / duplex changes are not treated yet */
if (priv->link_state.up == state.up) if (priv->link_state.up == state.up)
return 0; goto out;
priv->link_state = state;
if (state.up) { if (state.up) {
netif_carrier_on(priv->net_dev); netif_carrier_on(priv->net_dev);
netif_tx_start_all_queues(priv->net_dev); netif_tx_start_all_queues(priv->net_dev);
...@@ -1236,6 +1235,9 @@ static int link_state_update(struct dpaa2_eth_priv *priv) ...@@ -1236,6 +1235,9 @@ static int link_state_update(struct dpaa2_eth_priv *priv)
netdev_info(priv->net_dev, "Link Event: state %s\n", netdev_info(priv->net_dev, "Link Event: state %s\n",
state.up ? "up" : "down"); state.up ? "up" : "down");
out:
priv->link_state = state;
return 0; return 0;
} }
......
...@@ -78,23 +78,14 @@ static int ...@@ -78,23 +78,14 @@ static int
dpaa2_eth_get_link_ksettings(struct net_device *net_dev, dpaa2_eth_get_link_ksettings(struct net_device *net_dev,
struct ethtool_link_ksettings *link_settings) struct ethtool_link_ksettings *link_settings)
{ {
struct dpni_link_state state = {0};
int err = 0;
struct dpaa2_eth_priv *priv = netdev_priv(net_dev); struct dpaa2_eth_priv *priv = netdev_priv(net_dev);
err = dpni_get_link_state(priv->mc_io, 0, priv->mc_token, &state);
if (err) {
netdev_err(net_dev, "ERROR %d getting link state\n", err);
goto out;
}
link_settings->base.autoneg = AUTONEG_DISABLE; link_settings->base.autoneg = AUTONEG_DISABLE;
if (!(state.options & DPNI_LINK_OPT_HALF_DUPLEX)) if (!(priv->link_state.options & DPNI_LINK_OPT_HALF_DUPLEX))
link_settings->base.duplex = DUPLEX_FULL; link_settings->base.duplex = DUPLEX_FULL;
link_settings->base.speed = state.rate; link_settings->base.speed = priv->link_state.rate;
out: return 0;
return err;
} }
static void dpaa2_eth_get_strings(struct net_device *netdev, u32 stringset, static void dpaa2_eth_get_strings(struct net_device *netdev, u32 stringset,
......
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