net: stmmac: rk: convert rk3588 to rk_set_reg_speed()

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>
This commit is contained in:
Russell King (Oracle) 2026-02-02 10:04:10 +00:00 committed by Jakub Kicinski
parent 82d1df4b41
commit 8e4b4004e8

View 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;
const struct rk_reg_speed_data *rsd;
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;
}
if (bsp_priv->id == 0)
rsd = &rk3588_gmac0_speed_data;
else
rsd = &rk3588_gmac1_speed_data;
regmap_write(bsp_priv->php_grf, RK3588_GRF_CLK_CON1, val);
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 = {