Commit 62777c80 authored by Jakub Kicinski's avatar Jakub Kicinski
Browse files

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: default avatarJakub Kicinski <kuba@kernel.org>
parents a18056a6 a7ad67e9
Loading
Loading
Loading
Loading
+32 −24
Original line number Diff line number Diff line
@@ -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");
		dev_err(bsp_priv->dev, "fail to enable phy-supply\n");

	return ret;
}

	return 0;
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);
}