mirror of
https://github.com/torvalds/linux.git
synced 2025-12-07 20:06:24 +00:00
Merge branch 'net-stmmac-more-cleanups'
Russell King says: ==================== net: stmmac: more cleanups The subject for the cover message is wearing thin as I've used it a number of times, but the scope for cleaning up the driver continues, and continue it will do, because this is just a small fraction of the queue. 1. make a better job of one of my previous commits, moving the holding of the lock into stmmac_mdio.c 2. move the mac_finish() method to be in-order with the layout of struct phylink_mac_ops - this order was chosen because it reflects the order that the methods are called, thus making the flow more obvious when reading code. 3. continuing on the "removal of stuff that doesn't need to happen", patch 3 removes the phylink_speed_(up|down) out of the path that is used for MTU changes - we really don't need to fiddle with the PHY advertisement when changing the MTU! 4. clean up tc_init()'s initialisation of flow_entries_max - this is the sole place that this is written, and we might as well make the code more easy to follow. 5. stmmac_phy_setup() really confuses me when I read the code, it's not really about PHY setup, but about phylink setup. So, name its name reflect its functionality. ==================== Link: https://patch.msgid.link/aO_HIwT_YvxkDS8D@shell.armlinux.org.uk Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
@@ -162,7 +162,7 @@ static void tegra_eqos_fix_speed(void *bsp_priv, int speed, unsigned int mode)
|
||||
priv = netdev_priv(dev_get_drvdata(eqos->dev));
|
||||
|
||||
/* Calibration should be done with the MDIO bus idle */
|
||||
mutex_lock(&priv->mii->mdio_lock);
|
||||
stmmac_mdio_lock(priv);
|
||||
|
||||
/* calibrate */
|
||||
value = readl(eqos->regs + SDMEMCOMPPADCTRL);
|
||||
@@ -198,7 +198,7 @@ static void tegra_eqos_fix_speed(void *bsp_priv, int speed, unsigned int mode)
|
||||
value &= ~SDMEMCOMPPADCTRL_PAD_E_INPUT_OR_E_PWRD;
|
||||
writel(value, eqos->regs + SDMEMCOMPPADCTRL);
|
||||
|
||||
mutex_unlock(&priv->mii->mdio_lock);
|
||||
stmmac_mdio_unlock(priv);
|
||||
} else {
|
||||
value = readl(eqos->regs + AUTO_CAL_CONFIG);
|
||||
value &= ~AUTO_CAL_CONFIG_ENABLE;
|
||||
|
||||
@@ -388,6 +388,8 @@ static inline bool stmmac_wol_enabled_phy(struct stmmac_priv *priv)
|
||||
int stmmac_mdio_unregister(struct net_device *ndev);
|
||||
int stmmac_mdio_register(struct net_device *ndev);
|
||||
int stmmac_mdio_reset(struct mii_bus *mii);
|
||||
void stmmac_mdio_lock(struct stmmac_priv *priv);
|
||||
void stmmac_mdio_unlock(struct stmmac_priv *priv);
|
||||
int stmmac_pcs_setup(struct net_device *ndev);
|
||||
void stmmac_pcs_clean(struct net_device *ndev);
|
||||
void stmmac_set_ethtool_ops(struct net_device *netdev);
|
||||
|
||||
@@ -859,6 +859,18 @@ static void stmmac_mac_config(struct phylink_config *config, unsigned int mode,
|
||||
/* Nothing to do, xpcs_config() handles everything */
|
||||
}
|
||||
|
||||
static int stmmac_mac_finish(struct phylink_config *config, unsigned int mode,
|
||||
phy_interface_t interface)
|
||||
{
|
||||
struct net_device *ndev = to_net_dev(config->dev);
|
||||
struct stmmac_priv *priv = netdev_priv(ndev);
|
||||
|
||||
if (priv->plat->mac_finish)
|
||||
priv->plat->mac_finish(ndev, priv->plat->bsp_priv, mode, interface);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void stmmac_mac_link_down(struct phylink_config *config,
|
||||
unsigned int mode, phy_interface_t interface)
|
||||
{
|
||||
@@ -1053,27 +1065,15 @@ static int stmmac_mac_enable_tx_lpi(struct phylink_config *config, u32 timer,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int stmmac_mac_finish(struct phylink_config *config, unsigned int mode,
|
||||
phy_interface_t interface)
|
||||
{
|
||||
struct net_device *ndev = to_net_dev(config->dev);
|
||||
struct stmmac_priv *priv = netdev_priv(ndev);
|
||||
|
||||
if (priv->plat->mac_finish)
|
||||
priv->plat->mac_finish(ndev, priv->plat->bsp_priv, mode, interface);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static const struct phylink_mac_ops stmmac_phylink_mac_ops = {
|
||||
.mac_get_caps = stmmac_mac_get_caps,
|
||||
.mac_select_pcs = stmmac_mac_select_pcs,
|
||||
.mac_config = stmmac_mac_config,
|
||||
.mac_finish = stmmac_mac_finish,
|
||||
.mac_link_down = stmmac_mac_link_down,
|
||||
.mac_link_up = stmmac_mac_link_up,
|
||||
.mac_disable_tx_lpi = stmmac_mac_disable_tx_lpi,
|
||||
.mac_enable_tx_lpi = stmmac_mac_enable_tx_lpi,
|
||||
.mac_finish = stmmac_mac_finish,
|
||||
};
|
||||
|
||||
/**
|
||||
@@ -1185,7 +1185,7 @@ static int stmmac_init_phy(struct net_device *dev)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int stmmac_phy_setup(struct stmmac_priv *priv)
|
||||
static int stmmac_phylink_setup(struct stmmac_priv *priv)
|
||||
{
|
||||
struct stmmac_mdio_bus_data *mdio_bus_data;
|
||||
struct phylink_config *config;
|
||||
@@ -3963,8 +3963,6 @@ static int __stmmac_open(struct net_device *dev,
|
||||
stmmac_init_coalesce(priv);
|
||||
|
||||
phylink_start(priv->phylink);
|
||||
/* We may have called phylink_speed_down before */
|
||||
phylink_speed_up(priv->phylink);
|
||||
|
||||
ret = stmmac_request_irq(dev);
|
||||
if (ret)
|
||||
@@ -4015,6 +4013,9 @@ static int stmmac_open(struct net_device *dev)
|
||||
|
||||
kfree(dma_conf);
|
||||
|
||||
/* We may have called phylink_speed_down before */
|
||||
phylink_speed_up(priv->phylink);
|
||||
|
||||
return ret;
|
||||
|
||||
err_disconnect_phy:
|
||||
@@ -4032,13 +4033,6 @@ static void __stmmac_release(struct net_device *dev)
|
||||
struct stmmac_priv *priv = netdev_priv(dev);
|
||||
u32 chan;
|
||||
|
||||
/* If the PHY or MAC has WoL enabled, then the PHY will not be
|
||||
* suspended when phylink_stop() is called below. Set the PHY
|
||||
* to its slowest speed to save power.
|
||||
*/
|
||||
if (device_may_wakeup(priv->device))
|
||||
phylink_speed_down(priv->phylink, false);
|
||||
|
||||
/* Stop and disconnect the PHY */
|
||||
phylink_stop(priv->phylink);
|
||||
|
||||
@@ -4078,6 +4072,13 @@ static int stmmac_release(struct net_device *dev)
|
||||
{
|
||||
struct stmmac_priv *priv = netdev_priv(dev);
|
||||
|
||||
/* If the PHY or MAC has WoL enabled, then the PHY will not be
|
||||
* suspended when phylink_stop() is called below. Set the PHY
|
||||
* to its slowest speed to save power.
|
||||
*/
|
||||
if (device_may_wakeup(priv->device))
|
||||
phylink_speed_down(priv->phylink, false);
|
||||
|
||||
__stmmac_release(dev);
|
||||
|
||||
phylink_disconnect_phy(priv->phylink);
|
||||
@@ -7641,7 +7642,7 @@ int stmmac_dvr_probe(struct device *device,
|
||||
if (ret)
|
||||
goto error_pcs_setup;
|
||||
|
||||
ret = stmmac_phy_setup(priv);
|
||||
ret = stmmac_phylink_setup(priv);
|
||||
if (ret) {
|
||||
netdev_err(ndev, "failed to setup phy (%d)\n", ret);
|
||||
goto error_phy_setup;
|
||||
|
||||
@@ -734,3 +734,17 @@ int stmmac_mdio_unregister(struct net_device *ndev)
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void stmmac_mdio_lock(struct stmmac_priv *priv)
|
||||
{
|
||||
if (priv->mii)
|
||||
mutex_lock(&priv->mii->mdio_lock);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(stmmac_mdio_lock);
|
||||
|
||||
void stmmac_mdio_unlock(struct stmmac_priv *priv)
|
||||
{
|
||||
if (priv->mii)
|
||||
mutex_unlock(&priv->mii->mdio_lock);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(stmmac_mdio_unlock);
|
||||
|
||||
@@ -262,10 +262,10 @@ static int tc_init(struct stmmac_priv *priv)
|
||||
unsigned int count;
|
||||
int ret, i;
|
||||
|
||||
if (dma_cap->l3l4fnum) {
|
||||
priv->flow_entries_max = dma_cap->l3l4fnum;
|
||||
priv->flow_entries_max = dma_cap->l3l4fnum;
|
||||
if (priv->flow_entries_max) {
|
||||
priv->flow_entries = devm_kcalloc(priv->device,
|
||||
dma_cap->l3l4fnum,
|
||||
priv->flow_entries_max,
|
||||
sizeof(*priv->flow_entries),
|
||||
GFP_KERNEL);
|
||||
if (!priv->flow_entries)
|
||||
|
||||
Reference in New Issue
Block a user