diff mbox series

[4/5] net: dwc_eth_qos: add support for phy-reset-gpios property

Message ID 20240428142406.28445-4-heesub@gmail.com
State Accepted
Commit 0da5d2243e5aaaf971af57ceed3898bd6dd73590
Delegated to: Patrice Chotard
Headers show
Series [1/5] dts: stm32mp157c-odyssey: set PLL4_P to 125Mhz for ETH_CLK | expand

Commit Message

Heesub Shin April 28, 2024, 2:24 p.m. UTC
This commit adds support for a property 'phy-reset-gpios' to reset PHY
chipset.

Signed-off-by: Heesub Shin <heesub@gmail.com>
---
 drivers/net/dwc_eth_qos_stm32.c | 23 ++++++++++++++++++++++-
 1 file changed, 22 insertions(+), 1 deletion(-)

Comments

Patrice CHOTARD June 6, 2024, 2:38 p.m. UTC | #1
On 4/28/24 16:24, Heesub Shin wrote:
> This commit adds support for a property 'phy-reset-gpios' to reset PHY
> chipset.
> 
> Signed-off-by: Heesub Shin <heesub@gmail.com>
> ---
>  drivers/net/dwc_eth_qos_stm32.c | 23 ++++++++++++++++++++++-
>  1 file changed, 22 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/net/dwc_eth_qos_stm32.c b/drivers/net/dwc_eth_qos_stm32.c
> index fbc08bba1d..cffaa10b70 100644
> --- a/drivers/net/dwc_eth_qos_stm32.c
> +++ b/drivers/net/dwc_eth_qos_stm32.c
> @@ -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,
Reviewed-by: Patrice Chotard <patrice.chotard@foss.st.com>

Thanks
Patrice
Patrice CHOTARD June 14, 2024, 12:08 p.m. UTC | #2
On 4/28/24 16:24, Heesub Shin wrote:
> This commit adds support for a property 'phy-reset-gpios' to reset PHY
> chipset.
> 
> Signed-off-by: Heesub Shin <heesub@gmail.com>
> ---
>  drivers/net/dwc_eth_qos_stm32.c | 23 ++++++++++++++++++++++-
>  1 file changed, 22 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/net/dwc_eth_qos_stm32.c b/drivers/net/dwc_eth_qos_stm32.c
> index fbc08bba1d..cffaa10b70 100644
> --- a/drivers/net/dwc_eth_qos_stm32.c
> +++ b/drivers/net/dwc_eth_qos_stm32.c
> @@ -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,
Applied to u-boot-stm32/next

Thanks
Patrice
diff mbox series

Patch

diff --git a/drivers/net/dwc_eth_qos_stm32.c b/drivers/net/dwc_eth_qos_stm32.c
index fbc08bba1d..cffaa10b70 100644
--- a/drivers/net/dwc_eth_qos_stm32.c
+++ b/drivers/net/dwc_eth_qos_stm32.c
@@ -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,