[PATCH] [v2] fec: convert to gpio descriptor

Subsystems: freescale imx / mxc fec driver, networking drivers, the rest

STALE1312d

5 messages, 4 authors, 2023-01-31 · open the first message on its own page

[PATCH] [v2] fec: convert to gpio descriptor

From: Arnd Bergmann <arnd@kernel.org>
Date: 2023-01-26 21:07:07

From: Arnd Bergmann <arnd@arndb.de>

The driver can be trivially converted, as it only triggers the gpio
pin briefly to do a reset, and it already only supports DT.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
---
v2 changes, suggested by Andrew Lunn:
 - reorder header inclusions,
 - use dev_err_probe()
---
 drivers/net/ethernet/freescale/fec_main.c | 25 ++++++++---------------
 1 file changed, 9 insertions(+), 16 deletions(-)
diff --git a/drivers/net/ethernet/freescale/fec_main.c b/drivers/net/ethernet/freescale/fec_main.c
index 5ff45b1a74a5..2716898e0b9b 100644
--- a/drivers/net/ethernet/freescale/fec_main.c
+++ b/drivers/net/ethernet/freescale/fec_main.c
@@ -56,12 +56,12 @@
 #include <linux/fec.h>
 #include <linux/of.h>
 #include <linux/of_device.h>
-#include <linux/of_gpio.h>
 #include <linux/of_mdio.h>
 #include <linux/of_net.h>
 #include <linux/regulator/consumer.h>
 #include <linux/if_vlan.h>
 #include <linux/pinctrl/consumer.h>
+#include <linux/gpio/consumer.h>
 #include <linux/prefetch.h>
 #include <linux/mfd/syscon.h>
 #include <linux/regmap.h>
@@ -4035,10 +4035,11 @@ static int fec_enet_init(struct net_device *ndev)
 #ifdef CONFIG_OF
 static int fec_reset_phy(struct platform_device *pdev)
 {
-	int err, phy_reset;
+	struct gpio_desc *phy_reset;
 	bool active_high = false;
 	int msec = 1, phy_post_delay = 0;
 	struct device_node *np = pdev->dev.of_node;
+	int err;
 
 	if (!np)
 		return 0;
@@ -4048,12 +4049,6 @@ static int fec_reset_phy(struct platform_device *pdev)
 	if (!err && msec > 1000)
 		msec = 1;
 
-	phy_reset = of_get_named_gpio(np, "phy-reset-gpios", 0);
-	if (phy_reset == -EPROBE_DEFER)
-		return phy_reset;
-	else if (!gpio_is_valid(phy_reset))
-		return 0;
-
 	err = of_property_read_u32(np, "phy-reset-post-delay", &phy_post_delay);
 	/* valid reset duration should be less than 1s */
 	if (!err && phy_post_delay > 1000)
@@ -4061,20 +4056,18 @@ static int fec_reset_phy(struct platform_device *pdev)
 
 	active_high = of_property_read_bool(np, "phy-reset-active-high");
 
-	err = devm_gpio_request_one(&pdev->dev, phy_reset,
-			active_high ? GPIOF_OUT_INIT_HIGH : GPIOF_OUT_INIT_LOW,
-			"phy-reset");
-	if (err) {
-		dev_err(&pdev->dev, "failed to get phy-reset-gpios: %d\n", err);
-		return err;
-	}
+	phy_reset = devm_gpiod_get(&pdev->dev, "phy-reset",
+			active_high ? GPIOD_OUT_HIGH : GPIOD_OUT_LOW);
+	if (IS_ERR(phy_reset))
+		return dev_err_probe(&pdev->dev, PTR_ERR(phy_reset),
+				     "failed to get phy-reset-gpios\n");
 
 	if (msec > 20)
 		msleep(msec);
 	else
 		usleep_range(msec * 1000, msec * 1000 + 1000);
 
-	gpio_set_value_cansleep(phy_reset, !active_high);
+	gpiod_set_value_cansleep(phy_reset, !active_high);
 
 	if (!phy_post_delay)
 		return 0;
-- 
2.39.0

Re: [PATCH] [v2] fec: convert to gpio descriptor

From: Andrew Lunn <andrew@lunn.ch>
Date: 2023-01-26 22:10:45

On Thu, Jan 26, 2023 at 10:05:59PM +0100, Arnd Bergmann wrote:
From: Arnd Bergmann <arnd@arndb.de>

The driver can be trivially converted, as it only triggers the gpio
pin briefly to do a reset, and it already only supports DT.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>

    Andrew

Re: [PATCH] [v2] fec: convert to gpio descriptor

From: patchwork-bot+netdevbpf@kernel.org
Date: 2023-01-30 07:30:29

Hello:

This patch was applied to netdev/net-next.git (master)
by David S. Miller [off-list ref]:

On Thu, 26 Jan 2023 22:05:59 +0100 you wrote:
From: Arnd Bergmann <arnd@arndb.de>

The driver can be trivially converted, as it only triggers the gpio
pin briefly to do a reset, and it already only supports DT.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>

[...]
Here is the summary with links:
  - [v2] fec: convert to gpio descriptor
    https://git.kernel.org/netdev/net-next/c/468ba54bd616

You are awesome, thank you!
-- 
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html

Re: [PATCH] [v2] fec: convert to gpio descriptor

From: Marc Kleine-Budde <mkl@pengutronix.de>
Date: 2023-01-31 15:39:47

On 26.01.2023 22:05:59, Arnd Bergmann wrote:
From: Arnd Bergmann <arnd@arndb.de>

The driver can be trivially converted, as it only triggers the gpio
pin briefly to do a reset, and it already only supports DT.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
On current net-next/main 6a8ab436831d ("Merge branch
'add-support-for-the-the-vsc7512-internal-copper-phys'") this causes the
riot board (arch/arm/boot/dts/imx6dl-riotboard.dts) to not probe the
fec:

| Jan 31 16:32:12 riot kernel: fec 2188000.ethernet: error -ENOENT: failed to get phy-reset-gpios
| Jan 31 16:32:12 riot kernel: fec: probe of 2188000.ethernet failed with error -2

reverting 468ba54bd616 ("fec: convert to gpio descriptor") solves the
problem.

regards,
Marc

-- 
Pengutronix e.K.                 | Marc Kleine-Budde           |
Embedded Linux                   | https://www.pengutronix.de  |
Vertretung West/Dortmund         | Phone: +49-231-2826-924     |
Amtsgericht Hildesheim, HRA 2686 | Fax:   +49-5121-206917-5555 |

Re: [PATCH] [v2] fec: convert to gpio descriptor

From: Andrew Lunn <andrew@lunn.ch>
Date: 2023-01-31 17:25:51

On Tue, Jan 31, 2023 at 04:38:51PM +0100, Marc Kleine-Budde wrote:
On 26.01.2023 22:05:59, Arnd Bergmann wrote:
quoted
From: Arnd Bergmann <arnd@arndb.de>

The driver can be trivially converted, as it only triggers the gpio
pin briefly to do a reset, and it already only supports DT.

Signed-off-by: Arnd Bergmann <arnd@arndb.de>
On current net-next/main 6a8ab436831d ("Merge branch
'add-support-for-the-the-vsc7512-internal-copper-phys'") this causes the
riot board (arch/arm/boot/dts/imx6dl-riotboard.dts) to not probe the
fec:

| Jan 31 16:32:12 riot kernel: fec 2188000.ethernet: error -ENOENT: failed to get phy-reset-gpios
| Jan 31 16:32:12 riot kernel: fec: probe of 2188000.ethernet failed with error -2
Hi Marc

Could you try swapping the devm_gpiod_get() for
devm_gpiod_get_optional().

It is kind of hidden, but:

-       else if (!gpio_is_valid(phy_reset))
-               return 0;

made the GPIO optional, since -2 is not a valid GPIO number and so it
would silently return.

The real fix will need to be a bit more complex, since we don't want
to do the sleeps etc if the GPIO is not present.

	Andrew
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help