All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] net: dwc_eth_qos: Enable clock in probe
@ 2021-11-13  2:23 Marek Vasut
  2021-11-15  8:07 ` Patrice CHOTARD
  2021-11-16  5:53 ` Ramon Fried
  0 siblings, 2 replies; 6+ messages in thread
From: Marek Vasut @ 2021-11-13  2:23 UTC (permalink / raw)
  To: u-boot
  Cc: Marek Vasut, Joe Hershberger, Patrice Chotard, Patrick Delaunay,
	Ramon Fried, Stephen Warren

Enable DWC IP clock in driver probe, so the MII access is possible even
outside of active network transfers. This is particularly useful when
using 'mii' or 'mdio' commands to explore PHY state, neither of which
works with DWMAC currently due to the disabled clock.

Signed-off-by: Marek Vasut <marex@denx.de>
Cc: Joe Hershberger <joe.hershberger@ni.com>
Cc: Patrice Chotard <patrice.chotard@foss.st.com>
Cc: Patrick Delaunay <patrick.delaunay@foss.st.com>
Cc: Ramon Fried <rfried.dev@gmail.com>
Cc: Stephen Warren <swarren@nvidia.com>
---
 drivers/net/dwc_eth_qos.c | 22 +++++++++++-----------
 1 file changed, 11 insertions(+), 11 deletions(-)

diff --git a/drivers/net/dwc_eth_qos.c b/drivers/net/dwc_eth_qos.c
index 585101804d3..22dad5b2030 100644
--- a/drivers/net/dwc_eth_qos.c
+++ b/drivers/net/dwc_eth_qos.c
@@ -1045,16 +1045,10 @@ static int eqos_start(struct udevice *dev)
 	eqos->tx_desc_idx = 0;
 	eqos->rx_desc_idx = 0;
 
-	ret = eqos->config->ops->eqos_start_clks(dev);
-	if (ret < 0) {
-		pr_err("eqos_start_clks() failed: %d", ret);
-		goto err;
-	}
-
 	ret = eqos->config->ops->eqos_start_resets(dev);
 	if (ret < 0) {
 		pr_err("eqos_start_resets() failed: %d", ret);
-		goto err_stop_clks;
+		goto err;
 	}
 
 	udelay(10);
@@ -1360,8 +1354,6 @@ err_shutdown_phy:
 	phy_shutdown(eqos->phy);
 err_stop_resets:
 	eqos->config->ops->eqos_stop_resets(dev);
-err_stop_clks:
-	eqos->config->ops->eqos_stop_clks(dev);
 err:
 	pr_err("FAILED: %d", ret);
 	return ret;
@@ -1416,7 +1408,6 @@ static void eqos_stop(struct udevice *dev)
 		phy_shutdown(eqos->phy);
 	}
 	eqos->config->ops->eqos_stop_resets(dev);
-	eqos->config->ops->eqos_stop_clks(dev);
 
 	debug("%s: OK\n", __func__);
 }
@@ -1862,6 +1853,12 @@ static int eqos_probe(struct udevice *dev)
 		goto err_remove_resources_core;
 	}
 
+	ret = eqos->config->ops->eqos_start_clks(dev);
+	if (ret < 0) {
+		pr_err("eqos_start_clks() failed: %d", ret);
+		goto err_remove_resources_tegra;
+	}
+
 #ifdef CONFIG_DM_ETH_PHY
 	eqos->mii = eth_phy_get_mdio_bus(dev);
 #endif
@@ -1870,7 +1867,7 @@ static int eqos_probe(struct udevice *dev)
 		if (!eqos->mii) {
 			pr_err("mdio_alloc() failed");
 			ret = -ENOMEM;
-			goto err_remove_resources_tegra;
+			goto err_stop_clks;
 		}
 		eqos->mii->read = eqos_mdio_read;
 		eqos->mii->write = eqos_mdio_write;
@@ -1893,6 +1890,8 @@ static int eqos_probe(struct udevice *dev)
 
 err_free_mdio:
 	mdio_free(eqos->mii);
+err_stop_clks:
+	eqos->config->ops->eqos_stop_clks(dev);
 err_remove_resources_tegra:
 	eqos->config->ops->eqos_remove_resources(dev);
 err_remove_resources_core:
@@ -1910,6 +1909,7 @@ static int eqos_remove(struct udevice *dev)
 
 	mdio_unregister(eqos->mii);
 	mdio_free(eqos->mii);
+	eqos->config->ops->eqos_stop_clks(dev);
 	eqos->config->ops->eqos_remove_resources(dev);
 
 	eqos_probe_resources_core(dev);
-- 
2.33.0


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCH] net: dwc_eth_qos: Enable clock in probe
  2021-11-13  2:23 [PATCH] net: dwc_eth_qos: Enable clock in probe Marek Vasut
@ 2021-11-15  8:07 ` Patrice CHOTARD
  2021-11-16  5:53 ` Ramon Fried
  1 sibling, 0 replies; 6+ messages in thread
From: Patrice CHOTARD @ 2021-11-15  8:07 UTC (permalink / raw)
  To: Marek Vasut, u-boot
  Cc: Joe Hershberger, Patrick Delaunay, Ramon Fried, Stephen Warren

Hi Marek

On 11/13/21 3:23 AM, Marek Vasut wrote:
> Enable DWC IP clock in driver probe, so the MII access is possible even
> outside of active network transfers. This is particularly useful when
> using 'mii' or 'mdio' commands to explore PHY state, neither of which
> works with DWMAC currently due to the disabled clock.
> 
> Signed-off-by: Marek Vasut <marex@denx.de>
> Cc: Joe Hershberger <joe.hershberger@ni.com>
> Cc: Patrice Chotard <patrice.chotard@foss.st.com>
> Cc: Patrick Delaunay <patrick.delaunay@foss.st.com>
> Cc: Ramon Fried <rfried.dev@gmail.com>
> Cc: Stephen Warren <swarren@nvidia.com>
> ---
>  drivers/net/dwc_eth_qos.c | 22 +++++++++++-----------
>  1 file changed, 11 insertions(+), 11 deletions(-)
> 
> diff --git a/drivers/net/dwc_eth_qos.c b/drivers/net/dwc_eth_qos.c
> index 585101804d3..22dad5b2030 100644
> --- a/drivers/net/dwc_eth_qos.c
> +++ b/drivers/net/dwc_eth_qos.c
> @@ -1045,16 +1045,10 @@ static int eqos_start(struct udevice *dev)
>  	eqos->tx_desc_idx = 0;
>  	eqos->rx_desc_idx = 0;
>  
> -	ret = eqos->config->ops->eqos_start_clks(dev);
> -	if (ret < 0) {
> -		pr_err("eqos_start_clks() failed: %d", ret);
> -		goto err;
> -	}
> -
>  	ret = eqos->config->ops->eqos_start_resets(dev);
>  	if (ret < 0) {
>  		pr_err("eqos_start_resets() failed: %d", ret);
> -		goto err_stop_clks;
> +		goto err;
>  	}
>  
>  	udelay(10);
> @@ -1360,8 +1354,6 @@ err_shutdown_phy:
>  	phy_shutdown(eqos->phy);
>  err_stop_resets:
>  	eqos->config->ops->eqos_stop_resets(dev);
> -err_stop_clks:
> -	eqos->config->ops->eqos_stop_clks(dev);
>  err:
>  	pr_err("FAILED: %d", ret);
>  	return ret;
> @@ -1416,7 +1408,6 @@ static void eqos_stop(struct udevice *dev)
>  		phy_shutdown(eqos->phy);
>  	}
>  	eqos->config->ops->eqos_stop_resets(dev);
> -	eqos->config->ops->eqos_stop_clks(dev);
>  
>  	debug("%s: OK\n", __func__);
>  }
> @@ -1862,6 +1853,12 @@ static int eqos_probe(struct udevice *dev)
>  		goto err_remove_resources_core;
>  	}
>  
> +	ret = eqos->config->ops->eqos_start_clks(dev);
> +	if (ret < 0) {
> +		pr_err("eqos_start_clks() failed: %d", ret);
> +		goto err_remove_resources_tegra;
> +	}
> +
>  #ifdef CONFIG_DM_ETH_PHY
>  	eqos->mii = eth_phy_get_mdio_bus(dev);
>  #endif
> @@ -1870,7 +1867,7 @@ static int eqos_probe(struct udevice *dev)
>  		if (!eqos->mii) {
>  			pr_err("mdio_alloc() failed");
>  			ret = -ENOMEM;
> -			goto err_remove_resources_tegra;
> +			goto err_stop_clks;
>  		}
>  		eqos->mii->read = eqos_mdio_read;
>  		eqos->mii->write = eqos_mdio_write;
> @@ -1893,6 +1890,8 @@ static int eqos_probe(struct udevice *dev)
>  
>  err_free_mdio:
>  	mdio_free(eqos->mii);
> +err_stop_clks:
> +	eqos->config->ops->eqos_stop_clks(dev);
>  err_remove_resources_tegra:
>  	eqos->config->ops->eqos_remove_resources(dev);
>  err_remove_resources_core:
> @@ -1910,6 +1909,7 @@ static int eqos_remove(struct udevice *dev)
>  
>  	mdio_unregister(eqos->mii);
>  	mdio_free(eqos->mii);
> +	eqos->config->ops->eqos_stop_clks(dev);
>  	eqos->config->ops->eqos_remove_resources(dev);
>  
>  	eqos_probe_resources_core(dev);
> 
Reviewed-by: Patrice Chotard <patrice.chotard@foss.st.com>

Thanks
Patrice

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] net: dwc_eth_qos: Enable clock in probe
  2021-11-13  2:23 [PATCH] net: dwc_eth_qos: Enable clock in probe Marek Vasut
  2021-11-15  8:07 ` Patrice CHOTARD
@ 2021-11-16  5:53 ` Ramon Fried
  2021-12-02  5:04   ` Ramon Fried
  1 sibling, 1 reply; 6+ messages in thread
From: Ramon Fried @ 2021-11-16  5:53 UTC (permalink / raw)
  To: Marek Vasut
  Cc: U-Boot Mailing List, Joe Hershberger, Patrice Chotard,
	Patrick Delaunay, Stephen Warren

On Sat, Nov 13, 2021 at 4:23 AM Marek Vasut <marex@denx.de> wrote:
>
> Enable DWC IP clock in driver probe, so the MII access is possible even
> outside of active network transfers. This is particularly useful when
> using 'mii' or 'mdio' commands to explore PHY state, neither of which
> works with DWMAC currently due to the disabled clock.
>
> Signed-off-by: Marek Vasut <marex@denx.de>
> Cc: Joe Hershberger <joe.hershberger@ni.com>
> Cc: Patrice Chotard <patrice.chotard@foss.st.com>
> Cc: Patrick Delaunay <patrick.delaunay@foss.st.com>
> Cc: Ramon Fried <rfried.dev@gmail.com>
> Cc: Stephen Warren <swarren@nvidia.com>
> ---
>  drivers/net/dwc_eth_qos.c | 22 +++++++++++-----------
>  1 file changed, 11 insertions(+), 11 deletions(-)
>
> diff --git a/drivers/net/dwc_eth_qos.c b/drivers/net/dwc_eth_qos.c
> index 585101804d3..22dad5b2030 100644
> --- a/drivers/net/dwc_eth_qos.c
> +++ b/drivers/net/dwc_eth_qos.c
> @@ -1045,16 +1045,10 @@ static int eqos_start(struct udevice *dev)
>         eqos->tx_desc_idx = 0;
>         eqos->rx_desc_idx = 0;
>
> -       ret = eqos->config->ops->eqos_start_clks(dev);
> -       if (ret < 0) {
> -               pr_err("eqos_start_clks() failed: %d", ret);
> -               goto err;
> -       }
> -
>         ret = eqos->config->ops->eqos_start_resets(dev);
>         if (ret < 0) {
>                 pr_err("eqos_start_resets() failed: %d", ret);
> -               goto err_stop_clks;
> +               goto err;
>         }
>
>         udelay(10);
> @@ -1360,8 +1354,6 @@ err_shutdown_phy:
>         phy_shutdown(eqos->phy);
>  err_stop_resets:
>         eqos->config->ops->eqos_stop_resets(dev);
> -err_stop_clks:
> -       eqos->config->ops->eqos_stop_clks(dev);
>  err:
>         pr_err("FAILED: %d", ret);
>         return ret;
> @@ -1416,7 +1408,6 @@ static void eqos_stop(struct udevice *dev)
>                 phy_shutdown(eqos->phy);
>         }
>         eqos->config->ops->eqos_stop_resets(dev);
> -       eqos->config->ops->eqos_stop_clks(dev);
>
>         debug("%s: OK\n", __func__);
>  }
> @@ -1862,6 +1853,12 @@ static int eqos_probe(struct udevice *dev)
>                 goto err_remove_resources_core;
>         }
>
> +       ret = eqos->config->ops->eqos_start_clks(dev);
> +       if (ret < 0) {
> +               pr_err("eqos_start_clks() failed: %d", ret);
> +               goto err_remove_resources_tegra;
> +       }
> +
>  #ifdef CONFIG_DM_ETH_PHY
>         eqos->mii = eth_phy_get_mdio_bus(dev);
>  #endif
> @@ -1870,7 +1867,7 @@ static int eqos_probe(struct udevice *dev)
>                 if (!eqos->mii) {
>                         pr_err("mdio_alloc() failed");
>                         ret = -ENOMEM;
> -                       goto err_remove_resources_tegra;
> +                       goto err_stop_clks;
>                 }
>                 eqos->mii->read = eqos_mdio_read;
>                 eqos->mii->write = eqos_mdio_write;
> @@ -1893,6 +1890,8 @@ static int eqos_probe(struct udevice *dev)
>
>  err_free_mdio:
>         mdio_free(eqos->mii);
> +err_stop_clks:
> +       eqos->config->ops->eqos_stop_clks(dev);
>  err_remove_resources_tegra:
>         eqos->config->ops->eqos_remove_resources(dev);
>  err_remove_resources_core:
> @@ -1910,6 +1909,7 @@ static int eqos_remove(struct udevice *dev)
>
>         mdio_unregister(eqos->mii);
>         mdio_free(eqos->mii);
> +       eqos->config->ops->eqos_stop_clks(dev);
>         eqos->config->ops->eqos_remove_resources(dev);
>
>         eqos_probe_resources_core(dev);
> --
> 2.33.0
>
Reviewed-by: Ramon Fried <rfried.dev@gmail.com>

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] net: dwc_eth_qos: Enable clock in probe
  2021-11-16  5:53 ` Ramon Fried
@ 2021-12-02  5:04   ` Ramon Fried
  2021-12-02  5:36     ` Marek Vasut
  0 siblings, 1 reply; 6+ messages in thread
From: Ramon Fried @ 2021-12-02  5:04 UTC (permalink / raw)
  To: Marek Vasut
  Cc: U-Boot Mailing List, Joe Hershberger, Patrice Chotard,
	Patrick Delaunay, Stephen Warren

On Tue, Nov 16, 2021 at 7:53 AM Ramon Fried <rfried.dev@gmail.com> wrote:
>
> On Sat, Nov 13, 2021 at 4:23 AM Marek Vasut <marex@denx.de> wrote:
> >
> > Enable DWC IP clock in driver probe, so the MII access is possible even
> > outside of active network transfers. This is particularly useful when
> > using 'mii' or 'mdio' commands to explore PHY state, neither of which
> > works with DWMAC currently due to the disabled clock.
> >
> > Signed-off-by: Marek Vasut <marex@denx.de>
> > Cc: Joe Hershberger <joe.hershberger@ni.com>
> > Cc: Patrice Chotard <patrice.chotard@foss.st.com>
> > Cc: Patrick Delaunay <patrick.delaunay@foss.st.com>
> > Cc: Ramon Fried <rfried.dev@gmail.com>
> > Cc: Stephen Warren <swarren@nvidia.com>
> > ---
> >  drivers/net/dwc_eth_qos.c | 22 +++++++++++-----------
> >  1 file changed, 11 insertions(+), 11 deletions(-)
> >
> > diff --git a/drivers/net/dwc_eth_qos.c b/drivers/net/dwc_eth_qos.c
> > index 585101804d3..22dad5b2030 100644
> > --- a/drivers/net/dwc_eth_qos.c
> > +++ b/drivers/net/dwc_eth_qos.c
> > @@ -1045,16 +1045,10 @@ static int eqos_start(struct udevice *dev)
> >         eqos->tx_desc_idx = 0;
> >         eqos->rx_desc_idx = 0;
> >
> > -       ret = eqos->config->ops->eqos_start_clks(dev);
> > -       if (ret < 0) {
> > -               pr_err("eqos_start_clks() failed: %d", ret);
> > -               goto err;
> > -       }
> > -
> >         ret = eqos->config->ops->eqos_start_resets(dev);
> >         if (ret < 0) {
> >                 pr_err("eqos_start_resets() failed: %d", ret);
> > -               goto err_stop_clks;
> > +               goto err;
> >         }
> >
> >         udelay(10);
> > @@ -1360,8 +1354,6 @@ err_shutdown_phy:
> >         phy_shutdown(eqos->phy);
> >  err_stop_resets:
> >         eqos->config->ops->eqos_stop_resets(dev);
> > -err_stop_clks:
> > -       eqos->config->ops->eqos_stop_clks(dev);
> >  err:
> >         pr_err("FAILED: %d", ret);
> >         return ret;
> > @@ -1416,7 +1408,6 @@ static void eqos_stop(struct udevice *dev)
> >                 phy_shutdown(eqos->phy);
> >         }
> >         eqos->config->ops->eqos_stop_resets(dev);
> > -       eqos->config->ops->eqos_stop_clks(dev);
> >
> >         debug("%s: OK\n", __func__);
> >  }
> > @@ -1862,6 +1853,12 @@ static int eqos_probe(struct udevice *dev)
> >                 goto err_remove_resources_core;
> >         }
> >
> > +       ret = eqos->config->ops->eqos_start_clks(dev);
> > +       if (ret < 0) {
> > +               pr_err("eqos_start_clks() failed: %d", ret);
> > +               goto err_remove_resources_tegra;
> > +       }
> > +
> >  #ifdef CONFIG_DM_ETH_PHY
> >         eqos->mii = eth_phy_get_mdio_bus(dev);
> >  #endif
> > @@ -1870,7 +1867,7 @@ static int eqos_probe(struct udevice *dev)
> >                 if (!eqos->mii) {
> >                         pr_err("mdio_alloc() failed");
> >                         ret = -ENOMEM;
> > -                       goto err_remove_resources_tegra;
> > +                       goto err_stop_clks;
> >                 }
> >                 eqos->mii->read = eqos_mdio_read;
> >                 eqos->mii->write = eqos_mdio_write;
> > @@ -1893,6 +1890,8 @@ static int eqos_probe(struct udevice *dev)
> >
> >  err_free_mdio:
> >         mdio_free(eqos->mii);
> > +err_stop_clks:
> > +       eqos->config->ops->eqos_stop_clks(dev);
> >  err_remove_resources_tegra:
> >         eqos->config->ops->eqos_remove_resources(dev);
> >  err_remove_resources_core:
> > @@ -1910,6 +1909,7 @@ static int eqos_remove(struct udevice *dev)
> >
> >         mdio_unregister(eqos->mii);
> >         mdio_free(eqos->mii);
> > +       eqos->config->ops->eqos_stop_clks(dev);
> >         eqos->config->ops->eqos_remove_resources(dev);
> >
> >         eqos_probe_resources_core(dev);
> > --
> > 2.33.0
> >
> Reviewed-by: Ramon Fried <rfried.dev@gmail.com>
Applied to u-boot-net/next,
Thanks.

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] net: dwc_eth_qos: Enable clock in probe
  2021-12-02  5:04   ` Ramon Fried
@ 2021-12-02  5:36     ` Marek Vasut
  2021-12-02  6:25       ` Ramon Fried
  0 siblings, 1 reply; 6+ messages in thread
From: Marek Vasut @ 2021-12-02  5:36 UTC (permalink / raw)
  To: Ramon Fried
  Cc: U-Boot Mailing List, Joe Hershberger, Patrice Chotard,
	Patrick Delaunay, Stephen Warren

On 12/2/21 06:04, Ramon Fried wrote:
> On Tue, Nov 16, 2021 at 7:53 AM Ramon Fried <rfried.dev@gmail.com> wrote:
>>
>> On Sat, Nov 13, 2021 at 4:23 AM Marek Vasut <marex@denx.de> wrote:
>>>
>>> Enable DWC IP clock in driver probe, so the MII access is possible even
>>> outside of active network transfers. This is particularly useful when
>>> using 'mii' or 'mdio' commands to explore PHY state, neither of which
>>> works with DWMAC currently due to the disabled clock.
>>>
>>> Signed-off-by: Marek Vasut <marex@denx.de>
>>> Cc: Joe Hershberger <joe.hershberger@ni.com>
>>> Cc: Patrice Chotard <patrice.chotard@foss.st.com>
>>> Cc: Patrick Delaunay <patrick.delaunay@foss.st.com>
>>> Cc: Ramon Fried <rfried.dev@gmail.com>
>>> Cc: Stephen Warren <swarren@nvidia.com>
>>> ---
>>>   drivers/net/dwc_eth_qos.c | 22 +++++++++++-----------
>>>   1 file changed, 11 insertions(+), 11 deletions(-)
>>>
>>> diff --git a/drivers/net/dwc_eth_qos.c b/drivers/net/dwc_eth_qos.c
>>> index 585101804d3..22dad5b2030 100644
>>> --- a/drivers/net/dwc_eth_qos.c
>>> +++ b/drivers/net/dwc_eth_qos.c
>>> @@ -1045,16 +1045,10 @@ static int eqos_start(struct udevice *dev)
>>>          eqos->tx_desc_idx = 0;
>>>          eqos->rx_desc_idx = 0;
>>>
>>> -       ret = eqos->config->ops->eqos_start_clks(dev);
>>> -       if (ret < 0) {
>>> -               pr_err("eqos_start_clks() failed: %d", ret);
>>> -               goto err;
>>> -       }
>>> -
>>>          ret = eqos->config->ops->eqos_start_resets(dev);
>>>          if (ret < 0) {
>>>                  pr_err("eqos_start_resets() failed: %d", ret);
>>> -               goto err_stop_clks;
>>> +               goto err;
>>>          }
>>>
>>>          udelay(10);
>>> @@ -1360,8 +1354,6 @@ err_shutdown_phy:
>>>          phy_shutdown(eqos->phy);
>>>   err_stop_resets:
>>>          eqos->config->ops->eqos_stop_resets(dev);
>>> -err_stop_clks:
>>> -       eqos->config->ops->eqos_stop_clks(dev);
>>>   err:
>>>          pr_err("FAILED: %d", ret);
>>>          return ret;
>>> @@ -1416,7 +1408,6 @@ static void eqos_stop(struct udevice *dev)
>>>                  phy_shutdown(eqos->phy);
>>>          }
>>>          eqos->config->ops->eqos_stop_resets(dev);
>>> -       eqos->config->ops->eqos_stop_clks(dev);
>>>
>>>          debug("%s: OK\n", __func__);
>>>   }
>>> @@ -1862,6 +1853,12 @@ static int eqos_probe(struct udevice *dev)
>>>                  goto err_remove_resources_core;
>>>          }
>>>
>>> +       ret = eqos->config->ops->eqos_start_clks(dev);
>>> +       if (ret < 0) {
>>> +               pr_err("eqos_start_clks() failed: %d", ret);
>>> +               goto err_remove_resources_tegra;
>>> +       }
>>> +
>>>   #ifdef CONFIG_DM_ETH_PHY
>>>          eqos->mii = eth_phy_get_mdio_bus(dev);
>>>   #endif
>>> @@ -1870,7 +1867,7 @@ static int eqos_probe(struct udevice *dev)
>>>                  if (!eqos->mii) {
>>>                          pr_err("mdio_alloc() failed");
>>>                          ret = -ENOMEM;
>>> -                       goto err_remove_resources_tegra;
>>> +                       goto err_stop_clks;
>>>                  }
>>>                  eqos->mii->read = eqos_mdio_read;
>>>                  eqos->mii->write = eqos_mdio_write;
>>> @@ -1893,6 +1890,8 @@ static int eqos_probe(struct udevice *dev)
>>>
>>>   err_free_mdio:
>>>          mdio_free(eqos->mii);
>>> +err_stop_clks:
>>> +       eqos->config->ops->eqos_stop_clks(dev);
>>>   err_remove_resources_tegra:
>>>          eqos->config->ops->eqos_remove_resources(dev);
>>>   err_remove_resources_core:
>>> @@ -1910,6 +1909,7 @@ static int eqos_remove(struct udevice *dev)
>>>
>>>          mdio_unregister(eqos->mii);
>>>          mdio_free(eqos->mii);
>>> +       eqos->config->ops->eqos_stop_clks(dev);
>>>          eqos->config->ops->eqos_remove_resources(dev);
>>>
>>>          eqos_probe_resources_core(dev);
>>> --
>>> 2.33.0
>>>
>> Reviewed-by: Ramon Fried <rfried.dev@gmail.com>
> Applied to u-boot-net/next,

This should go into current release, otherwise MDIO access doesn't work 
with this MAC (i.e. mdio command is not working).

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] net: dwc_eth_qos: Enable clock in probe
  2021-12-02  5:36     ` Marek Vasut
@ 2021-12-02  6:25       ` Ramon Fried
  0 siblings, 0 replies; 6+ messages in thread
From: Ramon Fried @ 2021-12-02  6:25 UTC (permalink / raw)
  To: Marek Vasut
  Cc: U-Boot Mailing List, Joe Hershberger, Patrice Chotard,
	Patrick Delaunay, Stephen Warren

On Thu, Dec 2, 2021 at 7:36 AM Marek Vasut <marex@denx.de> wrote:
>
> On 12/2/21 06:04, Ramon Fried wrote:
> > On Tue, Nov 16, 2021 at 7:53 AM Ramon Fried <rfried.dev@gmail.com> wrote:
> >>
> >> On Sat, Nov 13, 2021 at 4:23 AM Marek Vasut <marex@denx.de> wrote:
> >>>
> >>> Enable DWC IP clock in driver probe, so the MII access is possible even
> >>> outside of active network transfers. This is particularly useful when
> >>> using 'mii' or 'mdio' commands to explore PHY state, neither of which
> >>> works with DWMAC currently due to the disabled clock.
> >>>
> >>> Signed-off-by: Marek Vasut <marex@denx.de>
> >>> Cc: Joe Hershberger <joe.hershberger@ni.com>
> >>> Cc: Patrice Chotard <patrice.chotard@foss.st.com>
> >>> Cc: Patrick Delaunay <patrick.delaunay@foss.st.com>
> >>> Cc: Ramon Fried <rfried.dev@gmail.com>
> >>> Cc: Stephen Warren <swarren@nvidia.com>
> >>> ---
> >>>   drivers/net/dwc_eth_qos.c | 22 +++++++++++-----------
> >>>   1 file changed, 11 insertions(+), 11 deletions(-)
> >>>
> >>> diff --git a/drivers/net/dwc_eth_qos.c b/drivers/net/dwc_eth_qos.c
> >>> index 585101804d3..22dad5b2030 100644
> >>> --- a/drivers/net/dwc_eth_qos.c
> >>> +++ b/drivers/net/dwc_eth_qos.c
> >>> @@ -1045,16 +1045,10 @@ static int eqos_start(struct udevice *dev)
> >>>          eqos->tx_desc_idx = 0;
> >>>          eqos->rx_desc_idx = 0;
> >>>
> >>> -       ret = eqos->config->ops->eqos_start_clks(dev);
> >>> -       if (ret < 0) {
> >>> -               pr_err("eqos_start_clks() failed: %d", ret);
> >>> -               goto err;
> >>> -       }
> >>> -
> >>>          ret = eqos->config->ops->eqos_start_resets(dev);
> >>>          if (ret < 0) {
> >>>                  pr_err("eqos_start_resets() failed: %d", ret);
> >>> -               goto err_stop_clks;
> >>> +               goto err;
> >>>          }
> >>>
> >>>          udelay(10);
> >>> @@ -1360,8 +1354,6 @@ err_shutdown_phy:
> >>>          phy_shutdown(eqos->phy);
> >>>   err_stop_resets:
> >>>          eqos->config->ops->eqos_stop_resets(dev);
> >>> -err_stop_clks:
> >>> -       eqos->config->ops->eqos_stop_clks(dev);
> >>>   err:
> >>>          pr_err("FAILED: %d", ret);
> >>>          return ret;
> >>> @@ -1416,7 +1408,6 @@ static void eqos_stop(struct udevice *dev)
> >>>                  phy_shutdown(eqos->phy);
> >>>          }
> >>>          eqos->config->ops->eqos_stop_resets(dev);
> >>> -       eqos->config->ops->eqos_stop_clks(dev);
> >>>
> >>>          debug("%s: OK\n", __func__);
> >>>   }
> >>> @@ -1862,6 +1853,12 @@ static int eqos_probe(struct udevice *dev)
> >>>                  goto err_remove_resources_core;
> >>>          }
> >>>
> >>> +       ret = eqos->config->ops->eqos_start_clks(dev);
> >>> +       if (ret < 0) {
> >>> +               pr_err("eqos_start_clks() failed: %d", ret);
> >>> +               goto err_remove_resources_tegra;
> >>> +       }
> >>> +
> >>>   #ifdef CONFIG_DM_ETH_PHY
> >>>          eqos->mii = eth_phy_get_mdio_bus(dev);
> >>>   #endif
> >>> @@ -1870,7 +1867,7 @@ static int eqos_probe(struct udevice *dev)
> >>>                  if (!eqos->mii) {
> >>>                          pr_err("mdio_alloc() failed");
> >>>                          ret = -ENOMEM;
> >>> -                       goto err_remove_resources_tegra;
> >>> +                       goto err_stop_clks;
> >>>                  }
> >>>                  eqos->mii->read = eqos_mdio_read;
> >>>                  eqos->mii->write = eqos_mdio_write;
> >>> @@ -1893,6 +1890,8 @@ static int eqos_probe(struct udevice *dev)
> >>>
> >>>   err_free_mdio:
> >>>          mdio_free(eqos->mii);
> >>> +err_stop_clks:
> >>> +       eqos->config->ops->eqos_stop_clks(dev);
> >>>   err_remove_resources_tegra:
> >>>          eqos->config->ops->eqos_remove_resources(dev);
> >>>   err_remove_resources_core:
> >>> @@ -1910,6 +1909,7 @@ static int eqos_remove(struct udevice *dev)
> >>>
> >>>          mdio_unregister(eqos->mii);
> >>>          mdio_free(eqos->mii);
> >>> +       eqos->config->ops->eqos_stop_clks(dev);
> >>>          eqos->config->ops->eqos_remove_resources(dev);
> >>>
> >>>          eqos_probe_resources_core(dev);
> >>> --
> >>> 2.33.0
> >>>
> >> Reviewed-by: Ramon Fried <rfried.dev@gmail.com>
> > Applied to u-boot-net/next,
>
> This should go into current release, otherwise MDIO access doesn't work
> with this MAC (i.e. mdio command is not working).
OK.

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2021-12-02  6:26 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-11-13  2:23 [PATCH] net: dwc_eth_qos: Enable clock in probe Marek Vasut
2021-11-15  8:07 ` Patrice CHOTARD
2021-11-16  5:53 ` Ramon Fried
2021-12-02  5:04   ` Ramon Fried
2021-12-02  5:36     ` Marek Vasut
2021-12-02  6:25       ` Ramon Fried

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.