From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
From: Brent Roman <genosensor@gmail.com>
Date: Sat, 30 Dec 2023 12:04:32 -0800
Subject: fix10MbitEthernet
 drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c

Signed-off-by: Brent Roman <genosensor@gmail.com>
---
 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 cf682a9e3..512a7586c 100644
--- a/drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c
+++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-rk.c
@@ -504,12 +504,12 @@ static const struct rk_gmac_ops rk3288_ops = {
 #define RK3308_GRF_MAC_CON0		0x04a0
 
 /* 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)
 
 static void rk3308_set_to_rmii(struct rk_priv_data *bsp_priv)
 {
@@ -525,24 +525,31 @@ 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);
 	}
 }
 
 static const struct rk_gmac_ops rk3308_ops = {
 	.set_to_rmii = rk3308_set_to_rmii,
-- 
Created with Armbian build tools https://github.com/armbian/build

