[PATCH net-next 04/14] net: stmmac: wrap phylink's rx_clk_stop functions
From: Russell King (Oracle) <hidden>
Date: 2026-01-19 12:34:06
Also in:
linux-arm-kernel, linux-arm-msm, linux-phy
Subsystem:
networking drivers, stmmac ethernet driver, the rest · Maintainers:
Andrew Lunn, "David S. Miller", Eric Dumazet, Jakub Kicinski, Paolo Abeni, Linus Torvalds
With generic SerDes support, stmmac will need to do more work to ensure that clk_rx_i is running in all configurations. Rather than turn each site that calls phylink_rx_clk_stop_xxx() into a list of functions, move these to their own pair of functions so that they can be augmented at a single location. Reviewed-by: Maxime Chevallier <maxime.chevallier@bootlin.com> Signed-off-by: Russell King (Oracle) <redacted> --- .../net/ethernet/stmicro/stmmac/stmmac_main.c | 32 ++++++++++++------- 1 file changed, 21 insertions(+), 11 deletions(-)
diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
index c2589f02ff7e..24a2555ca329 100644
--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c
+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_main.c@@ -3547,6 +3547,16 @@ static void stmmac_safety_feat_configuration(struct stmmac_priv *priv) } } +static void stmmac_clk_rx_i_require(struct stmmac_priv *priv) +{ + phylink_rx_clk_stop_block(priv->phylink); +} + +static void stmmac_clk_rx_i_release(struct stmmac_priv *priv) +{ + phylink_rx_clk_stop_unblock(priv->phylink); +} + /** * stmmac_hw_setup - setup mac in a usable state. * @dev : pointer to the device structure.
@@ -3578,12 +3588,12 @@ static int stmmac_hw_setup(struct net_device *dev) * Block the receive clock stop for LPI mode at the PHY in case * the link is established with EEE mode active. */ - phylink_rx_clk_stop_block(priv->phylink); + stmmac_clk_rx_i_require(priv); /* DMA initialization and SW reset */ ret = stmmac_init_dma_engine(priv); if (ret < 0) { - phylink_rx_clk_stop_unblock(priv->phylink); + stmmac_clk_rx_i_release(priv); netdev_err(priv->dev, "%s: DMA engine initialization failed\n", __func__); return ret;
@@ -3591,7 +3601,7 @@ static int stmmac_hw_setup(struct net_device *dev) /* Copy the MAC addr into the HW */ stmmac_set_umac_addr(priv, priv->hw, dev->dev_addr, 0); - phylink_rx_clk_stop_unblock(priv->phylink); + stmmac_clk_rx_i_release(priv); /* Initialize the MAC Core */ stmmac_core_init(priv, priv->hw, dev);
@@ -3670,9 +3680,9 @@ static int stmmac_hw_setup(struct net_device *dev) /* Start the ball rolling... */ stmmac_start_all_dma(priv); - phylink_rx_clk_stop_block(priv->phylink); + stmmac_clk_rx_i_require(priv); stmmac_set_hw_vlan_mode(priv, priv->hw); - phylink_rx_clk_stop_unblock(priv->phylink); + stmmac_clk_rx_i_release(priv); return 0; }
@@ -6107,9 +6117,9 @@ static int stmmac_set_features(struct net_device *netdev, else priv->hw->hw_vlan_en = false; - phylink_rx_clk_stop_block(priv->phylink); + stmmac_clk_rx_i_require(priv); stmmac_set_hw_vlan_mode(priv, priv->hw); - phylink_rx_clk_stop_unblock(priv->phylink); + stmmac_clk_rx_i_release(priv); return 0; }
@@ -6378,9 +6388,9 @@ static int stmmac_set_mac_address(struct net_device *ndev, void *addr) if (ret) goto set_mac_error; - phylink_rx_clk_stop_block(priv->phylink); + stmmac_clk_rx_i_require(priv); stmmac_set_umac_addr(priv, priv->hw, ndev->dev_addr, 0); - phylink_rx_clk_stop_unblock(priv->phylink); + stmmac_clk_rx_i_release(priv); set_mac_error: pm_runtime_put(priv->device);
@@ -8192,11 +8202,11 @@ int stmmac_resume(struct device *dev) stmmac_init_timestamping(priv); stmmac_init_coalesce(priv); - phylink_rx_clk_stop_block(priv->phylink); + stmmac_clk_rx_i_require(priv); stmmac_set_rx_mode(ndev); stmmac_restore_hw_vlan_rx_fltr(priv, ndev, priv->hw); - phylink_rx_clk_stop_unblock(priv->phylink); + stmmac_clk_rx_i_release(priv); stmmac_enable_all_queues(priv); stmmac_enable_all_dma_irq(priv);
--
2.47.3