浏览代码

net:stmmac:dwc-qos: add support for external rmii_rtx clocks

JH7110A use external rmii_rtx clk for tx clk on 100M/10M mode.

Signed-off-by: Samin Guo <samin.guo@linux.starfivetech.com>
Samin Guo 1 年之前
父节点
当前提交
1cbbd9f9de
共有 2 个文件被更改,包括 17 次插入4 次删除
  1. 8 4
      arch/riscv/dts/jh7110.dtsi
  2. 9 0
      drivers/net/dwc_eth_qos.c

+ 8 - 4
arch/riscv/dts/jh7110.dtsi

@@ -795,13 +795,15 @@
 				"ptp_ref",
 				"stmmaceth",
 				"pclk",
-				"gtxc";
+				"gtxc",
+				"rmii_rtx";
 			clocks = <&clkgen JH7110_GMAC0_GTXCLK>,
 				 <&clkgen JH7110_U0_GMAC5_CLK_TX>,
 				 <&clkgen JH7110_GMAC0_PTP>,
 				 <&clkgen JH7110_U0_GMAC5_CLK_AHB>,
 				 <&clkgen JH7110_U0_GMAC5_CLK_AXI>,
-				 <&clkgen JH7110_GMAC0_GTXC>;
+				 <&clkgen JH7110_GMAC0_GTXC>,
+				 <&clkgen JH7110_GMAC0_RMII_RTX>;
 			resets = <&rstgen RSTN_U0_DW_GMAC5_AXI64_AHB>,
 				 <&rstgen RSTN_U0_DW_GMAC5_AXI64_AXI>;
 			reset-names = "ahb", "stmmaceth";
@@ -836,13 +838,15 @@
 				"ptp_ref",
 				"stmmaceth",
 				"pclk",
-				"gtxc";
+				"gtxc",
+				"rmii_rtx";
 			clocks = <&clkgen JH7110_GMAC1_GTXCLK>,
 				 <&clkgen JH7110_GMAC5_CLK_TX>,
 				 <&clkgen JH7110_GMAC5_CLK_PTP>,
 				 <&clkgen JH7110_GMAC5_CLK_AHB>,
 				 <&clkgen JH7110_GMAC5_CLK_AXI>,
-				 <&clkgen JH7110_GMAC1_GTXC>;
+				 <&clkgen JH7110_GMAC1_GTXC>,
+				 <&clkgen JH7110_GMAC1_RMII_RTX>;
 			resets = <&rstgen RSTN_U1_DW_GMAC5_AXI64_H_N>,
 				 <&rstgen RSTN_U1_DW_GMAC5_AXI64_A_I>;
 			reset-names = "ahb", "stmmaceth";

+ 9 - 0
drivers/net/dwc_eth_qos.c

@@ -321,6 +321,7 @@ struct eqos_priv {
 	bool clk_ck_enabled;
 	struct reset_ctl_bulk reset_bulk;
 	struct clk_bulk clk_bulk;
+	struct clk rmii_rtx;
 };
 
 /*
@@ -1006,6 +1007,8 @@ static int eqos_set_tx_clk_speed_jh7110(struct udevice *dev)
 		return ret;
 	}
 
+	clk_set_rate(&eqos->rmii_rtx, rate);
+
 	return 0;
 }
 
@@ -1909,6 +1912,12 @@ static int eqos_probe_resources_jh7110(struct udevice *dev)
 		goto err_free_reset_eqos;
 	}
 
+	ret = clk_get_by_name(dev, "rmii_rtx", &eqos->rmii_rtx);
+	if (ret) {
+		pr_err("clk_get_by_name(rmii_rtx) failed: %d", ret);
+		goto err_free_reset_eqos;
+	}
+
 	ret = clk_get_bulk(dev, &eqos->clk_bulk);
 	if (ret) {
 		pr_err("clk_get_bulk failed: %d", ret);