From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Brent Roman Date: Sat, 30 Dec 2023 12:04:32 -0800 Subject: fix10MbitEthernet drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c Signed-off-by: Brent Roman --- drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c | 27 ++++++---- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c b/drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c index 111111111111..222222222222 100644 --- a/drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c @@ -505,8 +505,8 @@ static const struct rk_gmac_ops rk3288_ops = { /* RK3308_GRF_MAC_CON0 */ #define RK3308_GMAC_PHY_INTF_SEL_RMII (GRF_CLR_BIT(2) | GRF_CLR_BIT(3) | \ GRF_BIT(4)) -#define RK3308_GMAC_FLOW_CTRL GRF_BIT(3) -#define RK3308_GMAC_FLOW_CTRL_CLR GRF_CLR_BIT(3) +#define RK3308_GMAC_FLOW_CTRL GRF_BIT(1) +#define RK3308_GMAC_FLOW_CTRL_CLR GRF_CLR_BIT(1) #define RK3308_GMAC_SPEED_10M GRF_CLR_BIT(0) #define RK3308_GMAC_SPEED_100M GRF_BIT(0) @@ -526,20 +526,27 @@ static void rk3308_set_to_rmii(struct rk_priv_data *bsp_priv) static void rk3308_set_rmii_speed(struct rk_priv_data *bsp_priv, int speed) { struct device *dev = &bsp_priv->pdev->dev; + int rateMode; if (IS_ERR(bsp_priv->grf)) { dev_err(dev, "Missing rockchip,grf property\n"); return; } - if (speed == 10) { - regmap_write(bsp_priv->grf, RK3308_GRF_MAC_CON0, - RK3308_GMAC_SPEED_10M); - } else if (speed == 100) { - regmap_write(bsp_priv->grf, RK3308_GRF_MAC_CON0, - RK3308_GMAC_SPEED_100M); - } else { - dev_err(dev, "unknown speed value for RMII! speed=%d", speed); + if (speed == 10) + rateMode = RK3308_GMAC_SPEED_10M; + else if (speed == 100) + rateMode = RK3308_GMAC_SPEED_100M; + else { + dev_err(dev, "RMII does not support %dMbps", speed); + return; + } + regmap_write(bsp_priv->grf, RK3308_GRF_MAC_CON0, rateMode); + { + int ret = clk_set_rate(bsp_priv->clks[RK_CLK_MAC_SPEED].clk, 250000*speed); + if (ret) + dev_err(dev, "%s: clk_set_rate for %dMbps returned: %d\n", + __func__, speed, ret); } } -- Armbian