diff mbox series

[v2,5/6] net: dwc_eth_qos: use generic ethernet phy for stm32 variant

Message ID 20210426174647.v2.5.I52d5d9f5fb91b6bd92ec7fed517bfe36074d487d@changeid
State Awaiting Upstream
Delegated to: Ramon Fried
Headers show
Series net: dwc_eth_qos: add support of device tree configuration for reset delay | expand

Commit Message

Patrick Delaunay April 26, 2021, 3:46 p.m. UTC
Use the generic ethernet phy which already manages the correct binding
for gpio reset, including the assert an deassert delays.

Signed-off-by: Patrick Delaunay <patrick.delaunay@foss.st.com>
---

Changes in v2:
- use generic ethernet phy for stm32 variant, this patch is a REWORK of
  previous serie: the device parsing is done in eth-phy driver and the gpio
  support is removed in stm32 variant: eqos_start/stop_resets_stm32 and
  eqos_probe_resources_stm32.

 drivers/net/Kconfig       |  1 +
 drivers/net/dwc_eth_qos.c | 50 ---------------------------------------
 2 files changed, 1 insertion(+), 50 deletions(-)

Comments

Ramon Fried April 29, 2021, 8:13 p.m. UTC | #1
On Mon, Apr 26, 2021 at 6:47 PM Patrick Delaunay
<patrick.delaunay@foss.st.com> wrote:
>
> Use the generic ethernet phy which already manages the correct binding
> for gpio reset, including the assert an deassert delays.
>
> Signed-off-by: Patrick Delaunay <patrick.delaunay@foss.st.com>
> ---
>
> Changes in v2:
> - use generic ethernet phy for stm32 variant, this patch is a REWORK of
>   previous serie: the device parsing is done in eth-phy driver and the gpio
>   support is removed in stm32 variant: eqos_start/stop_resets_stm32 and
>   eqos_probe_resources_stm32.
>
>  drivers/net/Kconfig       |  1 +
>  drivers/net/dwc_eth_qos.c | 50 ---------------------------------------
>  2 files changed, 1 insertion(+), 50 deletions(-)
>
> diff --git a/drivers/net/Kconfig b/drivers/net/Kconfig
> index 382639044b..adf43fb42a 100644
> --- a/drivers/net/Kconfig
> +++ b/drivers/net/Kconfig
> @@ -206,6 +206,7 @@ config DWC_ETH_QOS_IMX
>  config DWC_ETH_QOS_STM32
>         bool "Synopsys DWC Ethernet QOS device support for STM32"
>         depends on DWC_ETH_QOS
> +       select DM_ETH_PHY
>         default y if ARCH_STM32MP
>         help
>           The Synopsys Designware Ethernet QOS IP block with the specific
> diff --git a/drivers/net/dwc_eth_qos.c b/drivers/net/dwc_eth_qos.c
> index e625aea8d1..3fb8bfaf3a 100644
> --- a/drivers/net/dwc_eth_qos.c
> +++ b/drivers/net/dwc_eth_qos.c
> @@ -700,29 +700,6 @@ static int eqos_start_resets_tegra186(struct udevice *dev)
>
>  static int eqos_start_resets_stm32(struct udevice *dev)
>  {
> -       struct eqos_priv *eqos = dev_get_priv(dev);
> -       int ret;
> -
> -       debug("%s(dev=%p):\n", __func__, dev);
> -       if (dm_gpio_is_valid(&eqos->phy_reset_gpio)) {
> -               ret = dm_gpio_set_value(&eqos->phy_reset_gpio, 1);
> -               if (ret < 0) {
> -                       pr_err("dm_gpio_set_value(phy_reset, assert) failed: %d",
> -                              ret);
> -                       return ret;
> -               }
> -
> -               udelay(2);
> -
> -               ret = dm_gpio_set_value(&eqos->phy_reset_gpio, 0);
> -               if (ret < 0) {
> -                       pr_err("dm_gpio_set_value(phy_reset, deassert) failed: %d",
> -                              ret);
> -                       return ret;
> -               }
> -       }
> -       debug("%s: OK\n", __func__);
> -
>         return 0;
>  }
>
> @@ -743,18 +720,6 @@ static int eqos_stop_resets_tegra186(struct udevice *dev)
>
>  static int eqos_stop_resets_stm32(struct udevice *dev)
>  {
> -       struct eqos_priv *eqos = dev_get_priv(dev);
> -       int ret;
> -
> -       if (dm_gpio_is_valid(&eqos->phy_reset_gpio)) {
> -               ret = dm_gpio_set_value(&eqos->phy_reset_gpio, 1);
> -               if (ret < 0) {
> -                       pr_err("dm_gpio_set_value(phy_reset, assert) failed: %d",
> -                              ret);
> -                       return ret;
> -               }
> -       }
> -
>         return 0;
>  }
>
> @@ -1785,7 +1750,6 @@ static int eqos_probe_resources_stm32(struct udevice *dev)
>         struct eqos_priv *eqos = dev_get_priv(dev);
>         int ret;
>         phy_interface_t interface;
> -       struct ofnode_phandle_args phandle_args;
>
>         debug("%s(dev=%p):\n", __func__, dev);
>
> @@ -1825,20 +1789,6 @@ static int eqos_probe_resources_stm32(struct udevice *dev)
>         if (ret)
>                 pr_warn("No phy clock provided %d", ret);
>
> -       ret = dev_read_phandle_with_args(dev, "phy-handle", NULL, 0, 0,
> -                                        &phandle_args);
> -       if (!ret) {
> -               /* search "reset-gpios" in phy node */
> -               ret = gpio_request_by_name_nodev(phandle_args.node,
> -                                                "reset-gpios", 0,
> -                                                &eqos->phy_reset_gpio,
> -                                                GPIOD_IS_OUT |
> -                                                GPIOD_IS_OUT_ACTIVE);
> -               if (ret)
> -                       pr_warn("gpio_request_by_name(phy reset) not provided %d",
> -                               ret);
> -       }
> -
>         debug("%s: OK\n", __func__);
>         return 0;
>
> --
> 2.17.1
>
Reviewed-by: Ramon Fried <rfried.dev@gmail.com>
diff mbox series

Patch

diff --git a/drivers/net/Kconfig b/drivers/net/Kconfig
index 382639044b..adf43fb42a 100644
--- a/drivers/net/Kconfig
+++ b/drivers/net/Kconfig
@@ -206,6 +206,7 @@  config DWC_ETH_QOS_IMX
 config DWC_ETH_QOS_STM32
 	bool "Synopsys DWC Ethernet QOS device support for STM32"
 	depends on DWC_ETH_QOS
+	select DM_ETH_PHY
 	default y if ARCH_STM32MP
 	help
 	  The Synopsys Designware Ethernet QOS IP block with the specific
diff --git a/drivers/net/dwc_eth_qos.c b/drivers/net/dwc_eth_qos.c
index e625aea8d1..3fb8bfaf3a 100644
--- a/drivers/net/dwc_eth_qos.c
+++ b/drivers/net/dwc_eth_qos.c
@@ -700,29 +700,6 @@  static int eqos_start_resets_tegra186(struct udevice *dev)
 
 static int eqos_start_resets_stm32(struct udevice *dev)
 {
-	struct eqos_priv *eqos = dev_get_priv(dev);
-	int ret;
-
-	debug("%s(dev=%p):\n", __func__, dev);
-	if (dm_gpio_is_valid(&eqos->phy_reset_gpio)) {
-		ret = dm_gpio_set_value(&eqos->phy_reset_gpio, 1);
-		if (ret < 0) {
-			pr_err("dm_gpio_set_value(phy_reset, assert) failed: %d",
-			       ret);
-			return ret;
-		}
-
-		udelay(2);
-
-		ret = dm_gpio_set_value(&eqos->phy_reset_gpio, 0);
-		if (ret < 0) {
-			pr_err("dm_gpio_set_value(phy_reset, deassert) failed: %d",
-			       ret);
-			return ret;
-		}
-	}
-	debug("%s: OK\n", __func__);
-
 	return 0;
 }
 
@@ -743,18 +720,6 @@  static int eqos_stop_resets_tegra186(struct udevice *dev)
 
 static int eqos_stop_resets_stm32(struct udevice *dev)
 {
-	struct eqos_priv *eqos = dev_get_priv(dev);
-	int ret;
-
-	if (dm_gpio_is_valid(&eqos->phy_reset_gpio)) {
-		ret = dm_gpio_set_value(&eqos->phy_reset_gpio, 1);
-		if (ret < 0) {
-			pr_err("dm_gpio_set_value(phy_reset, assert) failed: %d",
-			       ret);
-			return ret;
-		}
-	}
-
 	return 0;
 }
 
@@ -1785,7 +1750,6 @@  static int eqos_probe_resources_stm32(struct udevice *dev)
 	struct eqos_priv *eqos = dev_get_priv(dev);
 	int ret;
 	phy_interface_t interface;
-	struct ofnode_phandle_args phandle_args;
 
 	debug("%s(dev=%p):\n", __func__, dev);
 
@@ -1825,20 +1789,6 @@  static int eqos_probe_resources_stm32(struct udevice *dev)
 	if (ret)
 		pr_warn("No phy clock provided %d", ret);
 
-	ret = dev_read_phandle_with_args(dev, "phy-handle", NULL, 0, 0,
-					 &phandle_args);
-	if (!ret) {
-		/* search "reset-gpios" in phy node */
-		ret = gpio_request_by_name_nodev(phandle_args.node,
-						 "reset-gpios", 0,
-						 &eqos->phy_reset_gpio,
-						 GPIOD_IS_OUT |
-						 GPIOD_IS_OUT_ACTIVE);
-		if (ret)
-			pr_warn("gpio_request_by_name(phy reset) not provided %d",
-				ret);
-	}
-
 	debug("%s: OK\n", __func__);
 	return 0;