mirror of
https://github.com/torvalds/linux.git
synced 2026-06-04 12:35:52 +02:00
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: Vladimir Oltean <vladimir.oltean@nxp.com> Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
f3ce29e169
commit
598ca0d090
|
|
@ -2322,8 +2322,11 @@ static int enetc_phylink_connect(struct net_device *ndev)
|
|||
struct ethtool_eee edata;
|
||||
int err;
|
||||
|
||||
if (!priv->phylink)
|
||||
return 0; /* phy-less mode */
|
||||
if (!priv->phylink) {
|
||||
/* phy-less mode */
|
||||
netif_carrier_on(ndev);
|
||||
return 0;
|
||||
}
|
||||
|
||||
err = phylink_of_phy_connect(priv->phylink, priv->dev->of_node, 0);
|
||||
if (err) {
|
||||
|
|
@ -2335,6 +2338,8 @@ static int enetc_phylink_connect(struct net_device *ndev)
|
|||
memset(&edata, 0, sizeof(struct ethtool_eee));
|
||||
phylink_ethtool_set_eee(priv->phylink, &edata);
|
||||
|
||||
phylink_start(priv->phylink);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
@ -2376,11 +2381,6 @@ void enetc_start(struct net_device *ndev)
|
|||
enable_irq(irq);
|
||||
}
|
||||
|
||||
if (priv->phylink)
|
||||
phylink_start(priv->phylink);
|
||||
else
|
||||
netif_carrier_on(ndev);
|
||||
|
||||
netif_tx_start_all_queues(ndev);
|
||||
}
|
||||
|
||||
|
|
@ -2461,11 +2461,6 @@ void enetc_stop(struct net_device *ndev)
|
|||
napi_disable(&priv->int_vector[i]->napi);
|
||||
}
|
||||
|
||||
if (priv->phylink)
|
||||
phylink_stop(priv->phylink);
|
||||
else
|
||||
netif_carrier_off(ndev);
|
||||
|
||||
enetc_clear_interrupts(priv);
|
||||
}
|
||||
|
||||
|
|
@ -2476,8 +2471,13 @@ int enetc_close(struct net_device *ndev)
|
|||
enetc_stop(ndev);
|
||||
enetc_clear_bdrs(priv);
|
||||
|
||||
if (priv->phylink)
|
||||
if (priv->phylink) {
|
||||
phylink_stop(priv->phylink);
|
||||
phylink_disconnect_phy(priv->phylink);
|
||||
} else {
|
||||
netif_carrier_off(ndev);
|
||||
}
|
||||
|
||||
enetc_free_rxtx_rings(priv);
|
||||
|
||||
/* Avoids dangling pointers and also frees old resources */
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user