Commit 598ca0d0 authored by Vladimir Oltean's avatar Vladimir Oltean Committed by Jakub Kicinski

net: enetc: move phylink_start/stop out of enetc_start/stop

We want to introduce a fast interface reconfiguration procedure, which
involves temporarily stopping the rings.

But we want enetc_start() and enetc_stop() to not restart PHY autoneg,
because that can take a few seconds until it completes again.

So we need part of enetc_start() and enetc_stop(), but not all of them.
Move phylink_start() right next to phylink_of_phy_connect(), and
phylink_stop() right next to phylink_disconnect_phy(), both still in
ndo_open() and ndo_stop().
Signed-off-by: default avatarVladimir Oltean <vladimir.oltean@nxp.com>
Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent f3ce29e1
...@@ -2322,8 +2322,11 @@ static int enetc_phylink_connect(struct net_device *ndev) ...@@ -2322,8 +2322,11 @@ static int enetc_phylink_connect(struct net_device *ndev)
struct ethtool_eee edata; struct ethtool_eee edata;
int err; int err;
if (!priv->phylink) if (!priv->phylink) {
return 0; /* phy-less mode */ /* phy-less mode */
netif_carrier_on(ndev);
return 0;
}
err = phylink_of_phy_connect(priv->phylink, priv->dev->of_node, 0); err = phylink_of_phy_connect(priv->phylink, priv->dev->of_node, 0);
if (err) { if (err) {
...@@ -2335,6 +2338,8 @@ static int enetc_phylink_connect(struct net_device *ndev) ...@@ -2335,6 +2338,8 @@ static int enetc_phylink_connect(struct net_device *ndev)
memset(&edata, 0, sizeof(struct ethtool_eee)); memset(&edata, 0, sizeof(struct ethtool_eee));
phylink_ethtool_set_eee(priv->phylink, &edata); phylink_ethtool_set_eee(priv->phylink, &edata);
phylink_start(priv->phylink);
return 0; return 0;
} }
...@@ -2376,11 +2381,6 @@ void enetc_start(struct net_device *ndev) ...@@ -2376,11 +2381,6 @@ void enetc_start(struct net_device *ndev)
enable_irq(irq); enable_irq(irq);
} }
if (priv->phylink)
phylink_start(priv->phylink);
else
netif_carrier_on(ndev);
netif_tx_start_all_queues(ndev); netif_tx_start_all_queues(ndev);
} }
...@@ -2461,11 +2461,6 @@ void enetc_stop(struct net_device *ndev) ...@@ -2461,11 +2461,6 @@ void enetc_stop(struct net_device *ndev)
napi_disable(&priv->int_vector[i]->napi); napi_disable(&priv->int_vector[i]->napi);
} }
if (priv->phylink)
phylink_stop(priv->phylink);
else
netif_carrier_off(ndev);
enetc_clear_interrupts(priv); enetc_clear_interrupts(priv);
} }
...@@ -2476,8 +2471,13 @@ int enetc_close(struct net_device *ndev) ...@@ -2476,8 +2471,13 @@ int enetc_close(struct net_device *ndev)
enetc_stop(ndev); enetc_stop(ndev);
enetc_clear_bdrs(priv); enetc_clear_bdrs(priv);
if (priv->phylink) if (priv->phylink) {
phylink_stop(priv->phylink);
phylink_disconnect_phy(priv->phylink); phylink_disconnect_phy(priv->phylink);
} else {
netif_carrier_off(ndev);
}
enetc_free_rxtx_rings(priv); enetc_free_rxtx_rings(priv);
/* Avoids dangling pointers and also frees old resources */ /* Avoids dangling pointers and also frees old resources */
......
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