diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c b/drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c index 548ee82ff3b4..9c2d790d3a90 100644 --- a/drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c @@ -2557,6 +2557,9 @@ static const struct rk_gmac_ops rv1126_ops = { #define RV1126B_RK_MACPHY_DISABLE 0 #define RV1126B_RK_MACPHY_ENABLE BIT(31) +#define RV1126B_RK_MACPHY_EXTCLK_SEL_OUTPUT 0 +#define RV1126B_RK_MACPHY_EXTCLK_SEL_INPUT BIT(8) + #define RV1126B_RK_MACPHY_CLK_24M 0 #define RV1126B_RK_MACPHY_CLK_50M BIT(11) @@ -2680,11 +2683,14 @@ static void rv1126b_integrated_phy_power(struct rk_priv_data *priv, bool up) usleep_range(20, 40); if (priv->clk_phy_rate == 50000000) - regmap_write(priv->grf, RV1126B_VI_GRF_RK_MACPHY_CON2, - RV1126B_RK_MACPHY_CLK_50M); + value = RV1126B_RK_MACPHY_CLK_50M; else - regmap_write(priv->grf, RV1126B_VI_GRF_RK_MACPHY_CON2, - RV1126B_RK_MACPHY_CLK_24M); + value = RV1126B_RK_MACPHY_CLK_24M; + + value |= priv->clock_input ? RV1126B_RK_MACPHY_EXTCLK_SEL_INPUT : + RV1126B_RK_MACPHY_EXTCLK_SEL_OUTPUT; + + regmap_write(priv->grf, RV1126B_VI_GRF_RK_MACPHY_CON2, value); regmap_write(priv->grf, RV1126B_VI_GRF_RK_MACPHY_CON0, RV1126B_RK_MACPHY_PHY_ID | RV1126B_RK_MACPHY_PHY_ADDR);