]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
net: stmmac: rk: convert rk3588 to rk_set_reg_speed()
authorRussell King (Oracle) <rmk+kernel@armlinux.org.uk>
Mon, 2 Feb 2026 10:04:10 +0000 (10:04 +0000)
committerJakub Kicinski <kuba@kernel.org>
Wed, 4 Feb 2026 01:59:08 +0000 (17:59 -0800)
Update rk_set_reg_speed() to use either the grf or php_grf regmap
depending on the SoC's requirements and convert rk3588, removing
its custom code.

Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
Link: https://patch.msgid.link/E1vmqmw-00000007VCb-3glG@rmk-PC.armlinux.org.uk
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c

index fce8cc3db4ee6bcc5e9d9c6f60361435802fb743..f00f4ffdc2f2779ddf4ef828cb77d425d62acb43 100644 (file)
@@ -53,6 +53,7 @@ struct rk_gmac_ops {
        u16 clock_grf_reg;
 
        bool gmac_grf_reg_in_php;
+       bool clock_grf_reg_in_php;
        bool php_grf_required;
        bool regs_valid;
        u32 regs[];
@@ -145,7 +146,14 @@ static int rk_write_gmac_grf_reg(struct rk_priv_data *bsp_priv, u32 val)
 
 static int rk_write_clock_grf_reg(struct rk_priv_data *bsp_priv, u32 val)
 {
-       return regmap_write(bsp_priv->grf, bsp_priv->clock_grf_reg, val);
+       struct regmap *regmap;
+
+       if (bsp_priv->ops->clock_grf_reg_in_php)
+               regmap = bsp_priv->php_grf;
+       else
+               regmap = bsp_priv->grf;
+
+       return regmap_write(regmap, bsp_priv->clock_grf_reg, val);
 }
 
 static int rk_set_reg_speed(struct rk_priv_data *bsp_priv,
@@ -1338,39 +1346,33 @@ static void rk3588_set_to_rmii(struct rk_priv_data *bsp_priv)
                     RK3588_GMAC_CLK_RMII_MODE(bsp_priv->id));
 }
 
+static const struct rk_reg_speed_data rk3588_gmac0_speed_data = {
+       .rgmii_10 = RK3588_GMAC_CLK_RGMII(0, GMAC_CLK_DIV50_2_5M),
+       .rgmii_100 = RK3588_GMAC_CLK_RGMII(0, GMAC_CLK_DIV5_25M),
+       .rgmii_1000 = RK3588_GMAC_CLK_RGMII(0, GMAC_CLK_DIV1_125M),
+       .rmii_10 = RK3588_GMA_CLK_RMII_DIV20(0),
+       .rmii_100 = RK3588_GMA_CLK_RMII_DIV2(0),
+};
+
+static const struct rk_reg_speed_data rk3588_gmac1_speed_data = {
+       .rgmii_10 = RK3588_GMAC_CLK_RGMII(1, GMAC_CLK_DIV50_2_5M),
+       .rgmii_100 = RK3588_GMAC_CLK_RGMII(1, GMAC_CLK_DIV5_25M),
+       .rgmii_1000 = RK3588_GMAC_CLK_RGMII(1, GMAC_CLK_DIV1_125M),
+       .rmii_10 = RK3588_GMA_CLK_RMII_DIV20(1),
+       .rmii_100 = RK3588_GMA_CLK_RMII_DIV2(1),
+};
+
 static int rk3588_set_gmac_speed(struct rk_priv_data *bsp_priv,
                                 phy_interface_t interface, int speed)
 {
-       unsigned int val = 0, id = bsp_priv->id;
-
-       switch (speed) {
-       case 10:
-               if (interface == PHY_INTERFACE_MODE_RMII)
-                       val = RK3588_GMA_CLK_RMII_DIV20(id);
-               else
-                       val = RK3588_GMAC_CLK_RGMII(id, GMAC_CLK_DIV50_2_5M);
-               break;
-       case 100:
-               if (interface == PHY_INTERFACE_MODE_RMII)
-                       val = RK3588_GMA_CLK_RMII_DIV2(id);
-               else
-                       val = RK3588_GMAC_CLK_RGMII(id, GMAC_CLK_DIV5_25M);
-               break;
-       case 1000:
-               if (interface != PHY_INTERFACE_MODE_RMII)
-                       val = RK3588_GMAC_CLK_RGMII(id, GMAC_CLK_DIV1_125M);
-               else
-                       goto err;
-               break;
-       default:
-               goto err;
-       }
+       const struct rk_reg_speed_data *rsd;
 
-       regmap_write(bsp_priv->php_grf, RK3588_GRF_CLK_CON1, val);
+       if (bsp_priv->id == 0)
+               rsd = &rk3588_gmac0_speed_data;
+       else
+               rsd = &rk3588_gmac1_speed_data;
 
-       return 0;
-err:
-       return -EINVAL;
+       return rk_set_reg_speed(bsp_priv, rsd, interface, speed);
 }
 
 static void rk3588_set_clock_selection(struct rk_priv_data *bsp_priv, bool input,
@@ -1395,6 +1397,9 @@ static const struct rk_gmac_ops rk3588_ops = {
        .gmac_grf_reg_in_php = true,
        .gmac_grf_reg = RK3588_GRF_GMAC_CON0,
 
+       .clock_grf_reg_in_php = true,
+       .clock_grf_reg = RK3588_GRF_CLK_CON1,
+
        .php_grf_required = true,
        .regs_valid = true,
        .regs = {