drivers: ethernet: mdio: stm32: move stmmaceth clock to parent

move stmmaceth clock to parent, so it can also be
used by mdio and rename it to ``stm-eth``.

Signed-off-by: Fin Maaß <f.maass@vogl-electronic.com>
diff --git a/drivers/ethernet/eth_dwmac_stm32h7x.c b/drivers/ethernet/eth_dwmac_stm32h7x.c
index 846008c..bf96341 100644
--- a/drivers/ethernet/eth_dwmac_stm32h7x.c
+++ b/drivers/ethernet/eth_dwmac_stm32h7x.c
@@ -33,8 +33,8 @@
 	PINCTRL_DT_INST_DEV_CONFIG_GET(0);
 
 static const struct stm32_pclken pclken = {
-	.bus = DT_INST_CLOCKS_CELL_BY_NAME(0, stmmaceth, bus),
-	.enr = DT_INST_CLOCKS_CELL_BY_NAME(0, stmmaceth, bits),
+	.bus = DT_CLOCKS_CELL_BY_NAME(DT_INST_PARENT(0), stm_eth, bus),
+	.enr = DT_CLOCKS_CELL_BY_NAME(DT_INST_PARENT(0), stm_eth, bits),
 };
 static const struct stm32_pclken pclken_tx = {
 	.bus = DT_INST_CLOCKS_CELL_BY_NAME(0, mac_clk_tx, bus),
@@ -81,7 +81,7 @@
 	reg_val = sys_read32(reg_addr);
 	sys_write32(reg_val | 0x03800000, reg_addr);
 
-	p->base_addr = DT_INST_REG_ADDR(0);
+	p->base_addr = DT_REG_ADDR(DT_INST_PARENT(0));
 	return 0;
 }
 
diff --git a/drivers/ethernet/eth_stm32_hal.c b/drivers/ethernet/eth_stm32_hal.c
index 56dcc25..00cb843 100644
--- a/drivers/ethernet/eth_stm32_hal.c
+++ b/drivers/ethernet/eth_stm32_hal.c
@@ -1566,8 +1566,8 @@
 
 static const struct eth_stm32_hal_dev_cfg eth0_config = {
 	.config_func = eth0_irq_config,
-	.pclken = {.bus = DT_INST_CLOCKS_CELL_BY_NAME(0, stmmaceth, bus),
-		   .enr = DT_INST_CLOCKS_CELL_BY_NAME(0, stmmaceth, bits)},
+	.pclken = {.bus = DT_CLOCKS_CELL_BY_NAME(DT_INST_PARENT(0), stm_eth, bus),
+		   .enr = DT_CLOCKS_CELL_BY_NAME(DT_INST_PARENT(0), stm_eth, bits)},
 	.pclken_tx = {.bus = DT_INST_CLOCKS_CELL_BY_NAME(0, mac_clk_tx, bus),
 		      .enr = DT_INST_CLOCKS_CELL_BY_NAME(0, mac_clk_tx, bits)},
 	.pclken_rx = {.bus = DT_INST_CLOCKS_CELL_BY_NAME(0, mac_clk_rx, bus),
diff --git a/drivers/mdio/mdio_stm32_hal.c b/drivers/mdio/mdio_stm32_hal.c
index 2961195..a8af436 100644
--- a/drivers/mdio/mdio_stm32_hal.c
+++ b/drivers/mdio/mdio_stm32_hal.c
@@ -9,6 +9,8 @@
 #include <errno.h>
 #include <zephyr/device.h>
 #include <zephyr/kernel.h>
+#include <zephyr/drivers/clock_control.h>
+#include <zephyr/drivers/clock_control/stm32_clock_control.h>
 #include <zephyr/drivers/pinctrl.h>
 #include <zephyr/drivers/mdio.h>
 #include <zephyr/net/ethernet.h>
@@ -28,6 +30,7 @@
 
 struct mdio_stm32_config {
 	const struct pinctrl_dev_config *pincfg;
+	struct stm32_pclken pclken;
 };
 
 static int mdio_stm32_read(const struct device *dev, uint8_t prtad,
@@ -91,6 +94,14 @@
 	const struct mdio_stm32_config *const config = dev->config;
 	int ret;
 
+	/* enable clock */
+	ret = clock_control_on(DEVICE_DT_GET(STM32_CLOCK_CONTROL_NODE),
+			       (clock_control_subsys_t)&config->pclken);
+	if (ret < 0) {
+		LOG_ERR("Failed to enable ethernet clock needed for MDIO (%d)", ret);
+		return ret;
+	}
+
 	ret = pinctrl_apply_state(config->pincfg, PINCTRL_STATE_DEFAULT);
 	if (ret < 0) {
 		return ret;
@@ -106,18 +117,19 @@
 	.write = mdio_stm32_write,
 };
 
-#define MDIO_STM32_HAL_DEVICE(inst)								\
-	PINCTRL_DT_INST_DEFINE(inst);								\
-												\
-	static struct mdio_stm32_data mdio_stm32_data_##inst = {				\
-		.heth = {.Instance = (ETH_TypeDef *)DT_REG_ADDR(DT_INST_PARENT(inst))},		\
-	};											\
-	static struct mdio_stm32_config mdio_stm32_config_##inst = {				\
-		.pincfg = PINCTRL_DT_INST_DEV_CONFIG_GET(inst),					\
-	};											\
-	DEVICE_DT_INST_DEFINE(inst, &mdio_stm32_init, NULL,					\
-				&mdio_stm32_data_##inst, &mdio_stm32_config_##inst,		\
-				POST_KERNEL, CONFIG_ETH_INIT_PRIORITY,				\
-				&mdio_stm32_api);
+#define MDIO_STM32_HAL_DEVICE(inst)                                                                \
+	PINCTRL_DT_INST_DEFINE(inst);                                                              \
+                                                                                                   \
+	static struct mdio_stm32_data mdio_stm32_data_##inst = {                                   \
+		.heth = {.Instance = (ETH_TypeDef *)DT_REG_ADDR(DT_INST_PARENT(inst))},            \
+	};                                                                                         \
+	static struct mdio_stm32_config mdio_stm32_config_##inst = {                               \
+		.pincfg = PINCTRL_DT_INST_DEV_CONFIG_GET(inst),                                    \
+		.pclken = {.bus = DT_CLOCKS_CELL_BY_NAME(DT_INST_PARENT(inst), stm_eth, bus),      \
+			   .enr = DT_CLOCKS_CELL_BY_NAME(DT_INST_PARENT(inst), stm_eth, bits)},    \
+	};                                                                                         \
+	DEVICE_DT_INST_DEFINE(inst, &mdio_stm32_init, NULL, &mdio_stm32_data_##inst,               \
+			      &mdio_stm32_config_##inst, POST_KERNEL, CONFIG_MDIO_INIT_PRIORITY,   \
+			      &mdio_stm32_api);
 
 DT_INST_FOREACH_STATUS_OKAY(MDIO_STM32_HAL_DEVICE)
diff --git a/dts/arm/st/f1/stm32f107.dtsi b/dts/arm/st/f1/stm32f107.dtsi
index 8407919..8f4b2d6 100644
--- a/dts/arm/st/f1/stm32f107.dtsi
+++ b/dts/arm/st/f1/stm32f107.dtsi
@@ -21,13 +21,14 @@
 
 		ethernet@40028000 {
 			reg = <0x40028000 0x2000>;
+			clock-names = "stm-eth";
+			clocks = <&rcc STM32_CLOCK(AHB1, 14)>;
+
 			mac: ethernet {
 				compatible = "st,stm32-ethernet";
 				interrupts = <61 0>;
-				clock-names = "stmmaceth", "mac-clk-tx",
-					      "mac-clk-rx";
-				clocks = <&rcc STM32_CLOCK(AHB1, 14)>,
-					 <&rcc STM32_CLOCK(AHB1, 15)>,
+				clock-names = "mac-clk-tx", "mac-clk-rx";
+				clocks = <&rcc STM32_CLOCK(AHB1, 15)>,
 					 <&rcc STM32_CLOCK(AHB1, 16)>;
 				status = "disabled";
 			};
diff --git a/dts/arm/st/f2/stm32f207.dtsi b/dts/arm/st/f2/stm32f207.dtsi
index 07c38ad..53bd1a7 100644
--- a/dts/arm/st/f2/stm32f207.dtsi
+++ b/dts/arm/st/f2/stm32f207.dtsi
@@ -12,13 +12,16 @@
 
 		ethernet@40028000 {
 			reg = <0x40028000 0x8000>;
+			compatible = "st,stm32-ethernet-controller";
+			clock-names = "stm-eth";
+			clocks = <&rcc STM32_CLOCK(AHB1, 25)>;
+
 			mac: ethernet {
 				compatible = "st,stm32-ethernet";
 				interrupts = <61 0>;
-				clock-names = "stmmaceth", "mac-clk-tx",
-					      "mac-clk-rx", "mac-clk-ptp";
-				clocks = <&rcc STM32_CLOCK(AHB1, 25)>,
-					 <&rcc STM32_CLOCK(AHB1, 26)>,
+				clock-names = "mac-clk-tx", "mac-clk-rx",
+					      "mac-clk-ptp";
+				clocks = <&rcc STM32_CLOCK(AHB1, 26)>,
 					 <&rcc STM32_CLOCK(AHB1, 27)>,
 					 <&rcc STM32_CLOCK(AHB1, 28)>;
 				status = "disabled";
diff --git a/dts/arm/st/f4/stm32f407.dtsi b/dts/arm/st/f4/stm32f407.dtsi
index 948d917..f4ec4a6 100644
--- a/dts/arm/st/f4/stm32f407.dtsi
+++ b/dts/arm/st/f4/stm32f407.dtsi
@@ -12,13 +12,16 @@
 
 		ethernet@40028000 {
 			reg = <0x40028000 0x8000>;
+			compatible = "st,stm32-ethernet-controller";
+			clock-names = "stm-eth";
+			clocks = <&rcc STM32_CLOCK(AHB1, 25)>;
+
 			mac: ethernet {
 				compatible = "st,stm32-ethernet";
 				interrupts = <61 0>;
-				clock-names = "stmmaceth", "mac-clk-tx",
-					      "mac-clk-rx", "mac-clk-ptp";
-				clocks = <&rcc STM32_CLOCK(AHB1, 25)>,
-					 <&rcc STM32_CLOCK(AHB1, 26)>,
+				clock-names = "mac-clk-tx", "mac-clk-rx",
+					      "mac-clk-ptp";
+				clocks = <&rcc STM32_CLOCK(AHB1, 26)>,
 					 <&rcc STM32_CLOCK(AHB1, 27)>,
 					 <&rcc STM32_CLOCK(AHB1, 28)>;
 				status = "disabled";
diff --git a/dts/arm/st/f7/stm32f745.dtsi b/dts/arm/st/f7/stm32f745.dtsi
index d9e1bac..999da8e 100644
--- a/dts/arm/st/f7/stm32f745.dtsi
+++ b/dts/arm/st/f7/stm32f745.dtsi
@@ -77,13 +77,16 @@
 
 		ethernet@40028000 {
 			reg = <0x40028000 0x8000>;
+			compatible = "st,stm32-ethernet-controller";
+			clock-names = "stm-eth";
+			clocks = <&rcc STM32_CLOCK(AHB1, 25)>;
+
 			mac: ethernet {
 				compatible = "st,stm32-ethernet";
 				interrupts = <61 0>;
-				clock-names = "stmmaceth", "mac-clk-tx",
-					      "mac-clk-rx", "mac-clk-ptp";
-				clocks = <&rcc STM32_CLOCK(AHB1, 25)>,
-					 <&rcc STM32_CLOCK(AHB1, 26)>,
+				clock-names = "mac-clk-tx", "mac-clk-rx",
+					      "mac-clk-ptp";
+				clocks = <&rcc STM32_CLOCK(AHB1, 26)>,
 					 <&rcc STM32_CLOCK(AHB1, 27)>,
 					 <&rcc STM32_CLOCK(AHB1, 28)>;
 				status = "disabled";
diff --git a/dts/arm/st/f7/stm32f765.dtsi b/dts/arm/st/f7/stm32f765.dtsi
index 625bda1..a1148f1 100644
--- a/dts/arm/st/f7/stm32f765.dtsi
+++ b/dts/arm/st/f7/stm32f765.dtsi
@@ -70,13 +70,16 @@
 
 		ethernet@40028000 {
 			reg = <0x40028000 0x8000>;
+			compatible = "st,stm32-ethernet-controller";
+			clock-names = "stm-eth";
+			clocks = <&rcc STM32_CLOCK(AHB1, 25)>;
+
 			mac: ethernet {
 				compatible = "st,stm32-ethernet";
 				interrupts = <61 0>;
-				clock-names = "stmmaceth", "mac-clk-tx",
-					      "mac-clk-rx", "mac-clk-ptp";
-				clocks = <&rcc STM32_CLOCK(AHB1, 25)>,
-					 <&rcc STM32_CLOCK(AHB1, 26)>,
+				clock-names = "mac-clk-tx", "mac-clk-rx",
+					      "mac-clk-ptp";
+				clocks = <&rcc STM32_CLOCK(AHB1, 26)>,
 					 <&rcc STM32_CLOCK(AHB1, 27)>,
 					 <&rcc STM32_CLOCK(AHB1, 28)>;
 				status = "disabled";
diff --git a/dts/arm/st/h5/stm32h5.dtsi b/dts/arm/st/h5/stm32h5.dtsi
index 2f42e93..24e7604 100644
--- a/dts/arm/st/h5/stm32h5.dtsi
+++ b/dts/arm/st/h5/stm32h5.dtsi
@@ -540,12 +540,15 @@
 
 		ethernet@40028000 {
 			reg = <0x40028000 0x8000>;
+			compatible = "st,stm32-ethernet-controller";
+			clock-names = "stm-eth";
+			clocks = <&rcc STM32_CLOCK(AHB1, 19)>;
+
 			mac: ethernet {
 				compatible = "st,stm32h7-ethernet", "st,stm32-ethernet";
 				interrupts = <106 0>;
-				clock-names = "stmmaceth", "mac-clk-tx", "mac-clk-rx";
-				clocks = <&rcc STM32_CLOCK(AHB1, 19)>,
-					 <&rcc STM32_CLOCK(AHB1, 20)>,
+				clock-names = "mac-clk-tx", "mac-clk-rx";
+				clocks = <&rcc STM32_CLOCK(AHB1, 20)>,
 					 <&rcc STM32_CLOCK(AHB1, 21)>;
 				status = "disabled";
 			};
diff --git a/dts/arm/st/h7/stm32h7.dtsi b/dts/arm/st/h7/stm32h7.dtsi
index e8ac3c5..409d0bb 100644
--- a/dts/arm/st/h7/stm32h7.dtsi
+++ b/dts/arm/st/h7/stm32h7.dtsi
@@ -1027,12 +1027,15 @@
 
 		ethernet@40028000 {
 			reg = <0x40028000 0x8000>;
+			compatible = "st,stm32-ethernet-controller";
+			clock-names = "stm-eth";
+			clocks = <&rcc STM32_CLOCK(AHB1, 15)>;
+
 			mac: ethernet {
 				compatible = "st,stm32h7-ethernet", "st,stm32-ethernet";
 				interrupts = <61 0>;
-				clock-names = "stmmaceth", "mac-clk-tx", "mac-clk-rx";
-				clocks = <&rcc STM32_CLOCK(AHB1, 15)>,
-					 <&rcc STM32_CLOCK(AHB1, 16)>,
+				clock-names = "mac-clk-tx", "mac-clk-rx";
+				clocks = <&rcc STM32_CLOCK(AHB1, 16)>,
 					 <&rcc STM32_CLOCK(AHB1, 17)>;
 				status = "disabled";
 			};
diff --git a/dts/arm/st/n6/stm32n6.dtsi b/dts/arm/st/n6/stm32n6.dtsi
index 5363c42..a6e2e28 100644
--- a/dts/arm/st/n6/stm32n6.dtsi
+++ b/dts/arm/st/n6/stm32n6.dtsi
@@ -645,14 +645,16 @@
 
 		ethernet@58036000 {
 			reg = <0x58036000 0x8000>;
+			compatible = "st,stm32-ethernet-controller";
+			clock-names = "stm-eth";
+			clocks = <&rcc STM32_CLOCK(AHB5, 22)>;
+
 			mac: ethernet {
 				compatible = "st,stm32n6-ethernet", "st,stm32h7-ethernet",
 					"st,stm32-ethernet";
 				interrupts = <179 0>;
-				clock-names = "stmmaceth", "mac-clk-tx",
-					      "mac-clk-rx";
-				clocks = <&rcc STM32_CLOCK(AHB5, 22)>,
-					 <&rcc STM32_CLOCK(AHB5, 23)>,
+				clock-names = "mac-clk-tx", "mac-clk-rx";
+				clocks = <&rcc STM32_CLOCK(AHB5, 23)>,
 					 <&rcc STM32_CLOCK(AHB5, 24)>;
 				status = "disabled";
 			};
diff --git a/dts/bindings/ethernet/st,stm32-ethernet-controller.yaml b/dts/bindings/ethernet/st,stm32-ethernet-controller.yaml
new file mode 100644
index 0000000..eedc3f2
--- /dev/null
+++ b/dts/bindings/ethernet/st,stm32-ethernet-controller.yaml
@@ -0,0 +1,18 @@
+# Copyright The Zephyr Project Contributors
+# SPDX-License-Identifier: Apache-2.0
+
+description: |
+  ST STM32 Ethernet controller, contains the Ethernet MAC
+  and the MDIO as a child nodes.
+
+compatible: "st,stm32-ethernet-controller"
+
+include: base.yaml
+
+properties:
+  reg:
+    required: true
+  clocks:
+    required: true
+  clock-names:
+    required: true
diff --git a/dts/bindings/ethernet/st,stm32-ethernet.yaml b/dts/bindings/ethernet/st,stm32-ethernet.yaml
index 67f2111..1547294 100644
--- a/dts/bindings/ethernet/st,stm32-ethernet.yaml
+++ b/dts/bindings/ethernet/st,stm32-ethernet.yaml
@@ -2,7 +2,8 @@
 # Copyright (c) 2024, STMicroelectronics
 # SPDX-License-Identifier: Apache-2.0
 
-description: ST STM32 Ethernet
+description: |
+  ST STM32 Ethernet MAC, a child node of the Ethernet controller.
 
 compatible: "st,stm32-ethernet"