]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
net: stmmac: qcom-ethqos: convert to set_clk_tx_rate() method
authorRussell King (Oracle) <rmk+kernel@armlinux.org.uk>
Mon, 23 Feb 2026 09:35:01 +0000 (09:35 +0000)
committerJakub Kicinski <kuba@kernel.org>
Wed, 25 Feb 2026 01:43:23 +0000 (17:43 -0800)
Set the RGMII link clock using the set_clk_tx_rate() method rather than
coding it into the .fix_mac_speed() method. This simplifies ethqos's
ethqos_fix_mac_speed().

Tested-by: Mohd Ayaan Anwar <mohd.anwar@oss.qualcomm.com>
Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
Link: https://patch.msgid.link/E1vuSLF-0000000ASci-42kh@rmk-PC.armlinux.org.uk
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/stmicro/stmmac/dwmac-qcom-ethqos.c

index 153f6abc77cdcc55c6916b87c2515307d3a80c3b..ad5b5d950fffc14b33bd83274d3589410ad29618 100644 (file)
@@ -103,7 +103,6 @@ struct qcom_ethqos {
        void (*configure_func)(struct qcom_ethqos *ethqos,
                               phy_interface_t interface, int speed);
 
-       unsigned int link_clk_rate;
        struct clk *link_clk;
        struct phy *serdes_phy;
        int serdes_speed;
@@ -175,19 +174,20 @@ static void rgmii_dump(void *priv)
                rgmii_readl(ethqos, EMAC_SYSTEM_LOW_POWER_DEBUG));
 }
 
-static void
-ethqos_update_link_clk(struct qcom_ethqos *ethqos, int speed)
+static int ethqos_set_clk_tx_rate(void *bsp_priv, struct clk *clk_tx_i,
+                                 phy_interface_t interface, int speed)
 {
+       struct qcom_ethqos *ethqos = bsp_priv;
        long rate;
 
-       if (!phy_interface_mode_is_rgmii(ethqos->phy_mode))
-               return;
+       if (!phy_interface_mode_is_rgmii(interface))
+               return 0;
 
        rate = rgmii_clock(speed);
-       if (rate > 0)
-               ethqos->link_clk_rate = rate * 2;
+       if (rate < 0)
+               return rate;
 
-       clk_set_rate(ethqos->link_clk, ethqos->link_clk_rate);
+       return clk_set_rate(ethqos->link_clk, rate * 2);
 }
 
 static void
@@ -643,7 +643,6 @@ static void ethqos_fix_mac_speed(void *priv, phy_interface_t interface,
 {
        struct qcom_ethqos *ethqos = priv;
 
-       ethqos_update_link_clk(ethqos, speed);
        ethqos_configure(ethqos, interface, speed);
 }
 
@@ -821,12 +820,14 @@ static int qcom_ethqos_probe(struct platform_device *pdev)
                                     "Failed to get serdes phy\n");
 
        ethqos->serdes_speed = SPEED_1000;
-       ethqos_update_link_clk(ethqos, SPEED_1000);
+       ethqos_set_clk_tx_rate(ethqos, NULL, plat_dat->phy_interface,
+                              SPEED_1000);
 
        qcom_ethqos_set_sgmii_loopback(ethqos, true);
        ethqos_set_func_clk_en(ethqos);
 
        plat_dat->bsp_priv = ethqos;
+       plat_dat->set_clk_tx_rate = ethqos_set_clk_tx_rate;
        plat_dat->fix_mac_speed = ethqos_fix_mac_speed;
        plat_dat->dump_debug_regs = rgmii_dump;
        plat_dat->ptp_clk_freq_config = ethqos_ptp_clk_freq_config;