mirror of
https://github.com/torvalds/linux.git
synced 2026-05-05 23:05:25 -04:00
net: stmmac: move PHY handling out of __stmmac_open()/release()
Move the PHY attachment/detachment from the network driver out of __stmmac_open() and __stmmac_release() into stmmac_open() and stmmac_release() where these actions will only happen when the interface is administratively brought up or down. It does not make sense to detach and re-attach the PHY during a change of MTU. Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk> Reviewed-by: Maxime Chevallier <maxime.chevallier@bootlin.com> Link: https://patch.msgid.link/E1v11A3-0000000774G-3PKY@rmk-PC.armlinux.org.uk Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
committed by
Jakub Kicinski
parent
bae62989a3
commit
db299a0c09
@@ -3937,10 +3937,6 @@ static int __stmmac_open(struct net_device *dev,
|
||||
u32 chan;
|
||||
int ret;
|
||||
|
||||
ret = stmmac_init_phy(dev);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
for (int i = 0; i < MTL_MAX_TX_QUEUES; i++)
|
||||
if (priv->dma_conf.tx_queue[i].tbs & STMMAC_TBS_EN)
|
||||
dma_conf->tx_queue[i].tbs = priv->dma_conf.tx_queue[i].tbs;
|
||||
@@ -3990,7 +3986,6 @@ irq_error:
|
||||
|
||||
stmmac_release_ptp(priv);
|
||||
init_error:
|
||||
phylink_disconnect_phy(priv->phylink);
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -4010,18 +4005,28 @@ static int stmmac_open(struct net_device *dev)
|
||||
|
||||
ret = pm_runtime_resume_and_get(priv->device);
|
||||
if (ret < 0)
|
||||
goto err;
|
||||
goto err_dma_resources;
|
||||
|
||||
ret = stmmac_init_phy(dev);
|
||||
if (ret)
|
||||
goto err_runtime_pm;
|
||||
|
||||
ret = __stmmac_open(dev, dma_conf);
|
||||
if (ret) {
|
||||
pm_runtime_put(priv->device);
|
||||
err:
|
||||
free_dma_desc_resources(priv, dma_conf);
|
||||
}
|
||||
if (ret)
|
||||
goto err_disconnect_phy;
|
||||
|
||||
kfree(dma_conf);
|
||||
|
||||
return ret;
|
||||
|
||||
err_disconnect_phy:
|
||||
phylink_disconnect_phy(priv->phylink);
|
||||
err_runtime_pm:
|
||||
pm_runtime_put(priv->device);
|
||||
err_dma_resources:
|
||||
free_dma_desc_resources(priv, dma_conf);
|
||||
kfree(dma_conf);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void __stmmac_release(struct net_device *dev)
|
||||
@@ -4038,7 +4043,6 @@ static void __stmmac_release(struct net_device *dev)
|
||||
|
||||
/* Stop and disconnect the PHY */
|
||||
phylink_stop(priv->phylink);
|
||||
phylink_disconnect_phy(priv->phylink);
|
||||
|
||||
stmmac_disable_all_queues(priv);
|
||||
|
||||
@@ -4078,6 +4082,7 @@ static int stmmac_release(struct net_device *dev)
|
||||
|
||||
__stmmac_release(dev);
|
||||
|
||||
phylink_disconnect_phy(priv->phylink);
|
||||
pm_runtime_put(priv->device);
|
||||
|
||||
return 0;
|
||||
|
||||
Reference in New Issue
Block a user