Skip to content

Commit

Permalink
net: enetc: move phylink_start/stop out of enetc_start/stop
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Vladimir Oltean authored and Jakub Kicinski committed Jan 19, 2023
1 parent f3ce29e commit 598ca0d
Showing 1 changed file with 13 additions and 13 deletions.
26 changes: 13 additions & 13 deletions drivers/net/ethernet/freescale/enetc/enetc.c
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand All @@ -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;
}

Expand Down Expand Up @@ -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);
}

Expand Down Expand Up @@ -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);
}

Expand All @@ -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 */
Expand Down

0 comments on commit 598ca0d

Please sign in to comment.