Merge branch 'net-stmmac-rk-simplify-per-soc-configuration'

Russell King says:

====================
net: stmmac: rk: simplify per-SoC configuration [part]
====================

Link: https://patch.msgid.link/aXdTi4ViCkhhXvFI@shell.armlinux.org.uk
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
Jakub Kicinski 2026-01-27 10:40:18 -08:00
commit 62777c8015

View File

@ -162,15 +162,17 @@ static int rk_set_clk_mac_speed(struct rk_priv_data *bsp_priv,
((rx) ? soc##_GMAC_RXCLK_DLY_ENABLE : soc##_GMAC_RXCLK_DLY_DISABLE))
#define RK_GRF_MACPHY_CON0 0xb00
#define RK_GRF_MACPHY_CON1 0xb04
#define RK_GRF_MACPHY_CON2 0xb08
#define RK_GRF_MACPHY_CON3 0xb0c
#define RK_MACPHY_ENABLE GRF_BIT(0)
#define RK_MACPHY_DISABLE GRF_CLR_BIT(0)
#define RK_MACPHY_CFG_CLK_50M GRF_BIT(14)
#define RK_GMAC2PHY_RMII_MODE GRF_FIELD(7, 6, 1)
#define RK_GRF_MACPHY_CON1 0xb04
#define RK_GRF_MACPHY_CON2 0xb08
#define RK_GRF_CON2_MACPHY_ID GRF_FIELD(15, 0, 0x1234)
#define RK_GRF_MACPHY_CON3 0xb0c
#define RK_GRF_CON3_MACPHY_ID GRF_FIELD(5, 0, 0x35)
static void rk_gmac_integrated_ephy_powerup(struct rk_priv_data *priv)
@ -570,8 +572,7 @@ static void rk3328_set_to_rmii(struct rk_priv_data *bsp_priv)
{
unsigned int reg;
reg = bsp_priv->integrated_phy ? RK3328_GRF_MAC_CON2 :
RK3328_GRF_MAC_CON1;
reg = bsp_priv->id ? RK3328_GRF_MAC_CON2 : RK3328_GRF_MAC_CON1;
regmap_write(bsp_priv->grf, reg,
RK3328_GMAC_PHY_INTF_SEL(PHY_INTF_SEL_RMII) |
@ -591,10 +592,7 @@ static int rk3328_set_speed(struct rk_priv_data *bsp_priv,
{
unsigned int reg;
if (interface == PHY_INTERFACE_MODE_RMII && bsp_priv->integrated_phy)
reg = RK3328_GRF_MAC_CON2;
else
reg = RK3328_GRF_MAC_CON1;
reg = bsp_priv->id ? RK3328_GRF_MAC_CON2 : RK3328_GRF_MAC_CON1;
return rk_set_reg_speed(bsp_priv, &rk3328_reg_speed_data, reg,
interface, speed);
@ -614,6 +612,13 @@ static const struct rk_gmac_ops rk3328_ops = {
.set_speed = rk3328_set_speed,
.integrated_phy_powerup = rk3328_integrated_phy_powerup,
.integrated_phy_powerdown = rk_gmac_integrated_ephy_powerdown,
.regs_valid = true,
.regs = {
0xff540000, /* gmac2io */
0xff550000, /* gmac2phy */
0, /* sentinel */
},
};
#define RK3366_GRF_SOC_CON6 0x0418
@ -1498,23 +1503,26 @@ static int gmac_clk_enable(struct rk_priv_data *bsp_priv, bool enable)
return 0;
}
static int phy_power_on(struct rk_priv_data *bsp_priv, bool enable)
static int rk_phy_powerup(struct rk_priv_data *bsp_priv)
{
struct regulator *ldo = bsp_priv->regulator;
struct device *dev = bsp_priv->dev;
int ret;
if (enable) {
ret = regulator_enable(ldo);
if (ret)
dev_err(dev, "fail to enable phy-supply\n");
} else {
ret = regulator_disable(ldo);
if (ret)
dev_err(dev, "fail to disable phy-supply\n");
}
ret = regulator_enable(ldo);
if (ret)
dev_err(bsp_priv->dev, "fail to enable phy-supply\n");
return 0;
return ret;
}
static void rk_phy_powerdown(struct rk_priv_data *bsp_priv)
{
struct regulator *ldo = bsp_priv->regulator;
int ret;
ret = regulator_disable(ldo);
if (ret)
dev_err(bsp_priv->dev, "fail to disable phy-supply\n");
}
static struct rk_priv_data *rk_gmac_setup(struct platform_device *pdev,
@ -1692,7 +1700,7 @@ static int rk_gmac_powerup(struct rk_priv_data *bsp_priv)
dev_err(dev, "NO interface defined!\n");
}
ret = phy_power_on(bsp_priv, true);
ret = rk_phy_powerup(bsp_priv);
if (ret) {
gmac_clk_enable(bsp_priv, false);
return ret;
@ -1713,7 +1721,7 @@ static void rk_gmac_powerdown(struct rk_priv_data *gmac)
pm_runtime_put_sync(gmac->dev);
phy_power_on(gmac, false);
rk_phy_powerdown(gmac);
gmac_clk_enable(gmac, false);
}