mirror of
https://github.com/torvalds/linux.git
synced 2026-06-03 03:53:37 +02:00
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:
parent
82d1df4b41
commit
8e4b4004e8
|
|
@ -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 = {
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user