]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
net: dwc_eth_qos: add support for phy-reset-gpios property
authorHeesub Shin <heesub@gmail.com>
Sun, 28 Apr 2024 14:24:05 +0000 (23:24 +0900)
committerPatrice Chotard <patrice.chotard@foss.st.com>
Tue, 18 Jun 2024 06:55:51 +0000 (08:55 +0200)
This commit adds support for a property 'phy-reset-gpios' to reset PHY
chipset.

Signed-off-by: Heesub Shin <heesub@gmail.com>
Reviewed-by: Patrice Chotard <patrice.chotard@foss.st.com>
drivers/net/dwc_eth_qos_stm32.c

index fbc08bba1d61b0696d6c688ef9fa46fc9a7bc427..cffaa10b7055b47d613062eb16f9fdabb89495c1 100644 (file)
@@ -266,6 +266,12 @@ static int eqos_probe_resources_stm32(struct udevice *dev)
        if (ret)
                dev_warn(dev, "No phy clock provided %d\n", ret);
 
+       /* Get reset gpio pin (optional) */
+       ret = gpio_request_by_name(dev, "phy-reset-gpios", 0,
+                                  &eqos->phy_reset_gpio, GPIOD_IS_OUT);
+       if (ret)
+               pr_warn("No phy reset gpio provided: %d\n", ret);
+
        dev_dbg(dev, "%s: OK\n", __func__);
 
        return 0;
@@ -277,6 +283,21 @@ err_probe:
        return ret;
 }
 
+static int eqos_start_resets_stm32(struct udevice *dev)
+{
+       struct eqos_priv *eqos = dev_get_priv(dev);
+
+       debug("%s(dev=%p):\n", __func__, dev);
+
+       if (dm_gpio_is_valid(&eqos->phy_reset_gpio)) {
+               dm_gpio_set_value(&eqos->phy_reset_gpio, 1);
+               udelay(2);
+               dm_gpio_set_value(&eqos->phy_reset_gpio, 0);
+       }
+
+       return 0;
+}
+
 static int eqos_remove_resources_stm32(struct udevice *dev)
 {
        dev_dbg(dev, "%s:\n", __func__);
@@ -292,7 +313,7 @@ static struct eqos_ops eqos_stm32_ops = {
        .eqos_probe_resources = eqos_probe_resources_stm32,
        .eqos_remove_resources = eqos_remove_resources_stm32,
        .eqos_stop_resets = eqos_null_ops,
-       .eqos_start_resets = eqos_null_ops,
+       .eqos_start_resets = eqos_start_resets_stm32,
        .eqos_stop_clks = eqos_stop_clks_stm32,
        .eqos_start_clks = eqos_start_clks_stm32,
        .eqos_calibrate_pads = eqos_null_ops,