netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCHv3 net-next 0/9] net: ibm: emac: modernize a bit
@ 2024-09-05 20:14 Rosen Penev
  2024-09-05 20:14 ` [PATCHv3 net-next 1/9] net: ibm: emac: use devm for alloc_etherdev Rosen Penev
                   ` (8 more replies)
  0 siblings, 9 replies; 23+ messages in thread
From: Rosen Penev @ 2024-09-05 20:14 UTC (permalink / raw)
  To: netdev
  Cc: davem, edumazet, kuba, pabeni, linux-kernel, jacob.e.keller,
	horms, sd, chunkeey

It's a very old driver with a lot of potential for cleaning up code to
modern standards. This was a simple one dealing with mostly the probe
function and adding some devm to it.

v2: removed the waiting code in favor of EPROBE_DEFER.
v3: reverse xmas order fix, unnecessary assignment fix, wrong usage of
EPROBE_DEFER fix.

Rosen Penev (9):
  net: ibm: emac: use devm for alloc_etherdev
  net: ibm: emac: manage emac_irq with devm
  net: ibm: emac: use devm for of_iomap
  net: ibm: emac: remove mii_bus with devm
  net: ibm: emac: use devm for register_netdev
  net: ibm: emac: use netdev's phydev directly
  net: ibm: emac: replace of_get_property
  net: ibm: emac: remove all waiting code
  net: ibm: emac: get rid of wol_irq

 drivers/net/ethernet/ibm/emac/core.c | 214 +++++++++------------------
 drivers/net/ethernet/ibm/emac/core.h |   4 -
 2 files changed, 67 insertions(+), 151 deletions(-)

-- 
2.46.0


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

* [PATCHv3 net-next 1/9] net: ibm: emac: use devm for alloc_etherdev
  2024-09-05 20:14 [PATCHv3 net-next 0/9] net: ibm: emac: modernize a bit Rosen Penev
@ 2024-09-05 20:14 ` Rosen Penev
  2024-09-05 21:16   ` Andrew Lunn
  2024-09-05 20:14 ` [PATCHv3 net-next 2/9] net: ibm: emac: manage emac_irq with devm Rosen Penev
                   ` (7 subsequent siblings)
  8 siblings, 1 reply; 23+ messages in thread
From: Rosen Penev @ 2024-09-05 20:14 UTC (permalink / raw)
  To: netdev
  Cc: davem, edumazet, kuba, pabeni, linux-kernel, jacob.e.keller,
	horms, sd, chunkeey

Allows to simplify the code slightly. This is safe to do as free_netdev
gets called last.

Signed-off-by: Rosen Penev <rosenp@gmail.com>
---
 drivers/net/ethernet/ibm/emac/core.c | 9 +++------
 1 file changed, 3 insertions(+), 6 deletions(-)

diff --git a/drivers/net/ethernet/ibm/emac/core.c b/drivers/net/ethernet/ibm/emac/core.c
index a19d098f2e2b..348702f462bd 100644
--- a/drivers/net/ethernet/ibm/emac/core.c
+++ b/drivers/net/ethernet/ibm/emac/core.c
@@ -3053,7 +3053,7 @@ static int emac_probe(struct platform_device *ofdev)
 
 	/* Allocate our net_device structure */
 	err = -ENOMEM;
-	ndev = alloc_etherdev(sizeof(struct emac_instance));
+	ndev = devm_alloc_etherdev(&ofdev->dev, sizeof(struct emac_instance));
 	if (!ndev)
 		goto err_gone;
 
@@ -3072,7 +3072,7 @@ static int emac_probe(struct platform_device *ofdev)
 	/* Init various config data based on device-tree */
 	err = emac_init_config(dev);
 	if (err)
-		goto err_free;
+		goto err_gone;
 
 	/* Get interrupts. EMAC irq is mandatory, WOL irq is optional */
 	dev->emac_irq = irq_of_parse_and_map(np, 0);
@@ -3080,7 +3080,7 @@ static int emac_probe(struct platform_device *ofdev)
 	if (!dev->emac_irq) {
 		printk(KERN_ERR "%pOF: Can't map main interrupt\n", np);
 		err = -ENODEV;
-		goto err_free;
+		goto err_gone;
 	}
 	ndev->irq = dev->emac_irq;
 
@@ -3239,8 +3239,6 @@ static int emac_probe(struct platform_device *ofdev)
 		irq_dispose_mapping(dev->wol_irq);
 	if (dev->emac_irq)
 		irq_dispose_mapping(dev->emac_irq);
- err_free:
-	free_netdev(ndev);
  err_gone:
 	/* if we were on the bootlist, remove us as we won't show up and
 	 * wake up all waiters to notify them in case they were waiting
@@ -3289,7 +3287,6 @@ static void emac_remove(struct platform_device *ofdev)
 	if (dev->emac_irq)
 		irq_dispose_mapping(dev->emac_irq);
 
-	free_netdev(dev->ndev);
 }
 
 /* XXX Features in here should be replaced by properties... */
-- 
2.46.0


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

* [PATCHv3 net-next 2/9] net: ibm: emac: manage emac_irq with devm
  2024-09-05 20:14 [PATCHv3 net-next 0/9] net: ibm: emac: modernize a bit Rosen Penev
  2024-09-05 20:14 ` [PATCHv3 net-next 1/9] net: ibm: emac: use devm for alloc_etherdev Rosen Penev
@ 2024-09-05 20:14 ` Rosen Penev
  2024-09-05 21:17   ` Andrew Lunn
  2024-09-05 20:15 ` [PATCHv3 net-next 3/9] net: ibm: emac: use devm for of_iomap Rosen Penev
                   ` (6 subsequent siblings)
  8 siblings, 1 reply; 23+ messages in thread
From: Rosen Penev @ 2024-09-05 20:14 UTC (permalink / raw)
  To: netdev
  Cc: davem, edumazet, kuba, pabeni, linux-kernel, jacob.e.keller,
	horms, sd, chunkeey

It's the last to go in remove. Safe to let devm handle it.

Also move request_irq to probe for clarity. It's removed in _remove not
close.

Use dev_err_probe instead of printk. Handles EPROBE_DEFER automatically.

Signed-off-by: Rosen Penev <rosenp@gmail.com>
---
 drivers/net/ethernet/ibm/emac/core.c | 27 +++++++++------------------
 1 file changed, 9 insertions(+), 18 deletions(-)

diff --git a/drivers/net/ethernet/ibm/emac/core.c b/drivers/net/ethernet/ibm/emac/core.c
index 348702f462bd..4e260abbaa56 100644
--- a/drivers/net/ethernet/ibm/emac/core.c
+++ b/drivers/net/ethernet/ibm/emac/core.c
@@ -1228,18 +1228,10 @@ static void emac_print_link_status(struct emac_instance *dev)
 static int emac_open(struct net_device *ndev)
 {
 	struct emac_instance *dev = netdev_priv(ndev);
-	int err, i;
+	int i;
 
 	DBG(dev, "open" NL);
 
-	/* Setup error IRQ handler */
-	err = request_irq(dev->emac_irq, emac_irq, 0, "EMAC", dev);
-	if (err) {
-		printk(KERN_ERR "%s: failed to request IRQ %d\n",
-		       ndev->name, dev->emac_irq);
-		return err;
-	}
-
 	/* Allocate RX ring */
 	for (i = 0; i < NUM_RX_BUFF; ++i)
 		if (emac_alloc_rx_skb(dev, i)) {
@@ -1293,8 +1285,6 @@ static int emac_open(struct net_device *ndev)
 	return 0;
  oom:
 	emac_clean_rx_ring(dev);
-	free_irq(dev->emac_irq, dev);
-
 	return -ENOMEM;
 }
 
@@ -1408,8 +1398,6 @@ static int emac_close(struct net_device *ndev)
 	emac_clean_tx_ring(dev);
 	emac_clean_rx_ring(dev);
 
-	free_irq(dev->emac_irq, dev);
-
 	netif_carrier_off(ndev);
 
 	return 0;
@@ -3082,6 +3070,14 @@ static int emac_probe(struct platform_device *ofdev)
 		err = -ENODEV;
 		goto err_gone;
 	}
+
+	/* Setup error IRQ handler */
+	err = devm_request_irq(&ofdev->dev, dev->emac_irq, emac_irq, 0, "EMAC", dev);
+	if (err) {
+		dev_err_probe(&ofdev->dev, err, "failed to request IRQ %d", dev->emac_irq);
+		goto err_gone;
+	}
+
 	ndev->irq = dev->emac_irq;
 
 	/* Map EMAC regs */
@@ -3237,8 +3233,6 @@ static int emac_probe(struct platform_device *ofdev)
  err_irq_unmap:
 	if (dev->wol_irq)
 		irq_dispose_mapping(dev->wol_irq);
-	if (dev->emac_irq)
-		irq_dispose_mapping(dev->emac_irq);
  err_gone:
 	/* if we were on the bootlist, remove us as we won't show up and
 	 * wake up all waiters to notify them in case they were waiting
@@ -3284,9 +3278,6 @@ static void emac_remove(struct platform_device *ofdev)
 
 	if (dev->wol_irq)
 		irq_dispose_mapping(dev->wol_irq);
-	if (dev->emac_irq)
-		irq_dispose_mapping(dev->emac_irq);
-
 }
 
 /* XXX Features in here should be replaced by properties... */
-- 
2.46.0


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

* [PATCHv3 net-next 3/9] net: ibm: emac: use devm for of_iomap
  2024-09-05 20:14 [PATCHv3 net-next 0/9] net: ibm: emac: modernize a bit Rosen Penev
  2024-09-05 20:14 ` [PATCHv3 net-next 1/9] net: ibm: emac: use devm for alloc_etherdev Rosen Penev
  2024-09-05 20:14 ` [PATCHv3 net-next 2/9] net: ibm: emac: manage emac_irq with devm Rosen Penev
@ 2024-09-05 20:15 ` Rosen Penev
  2024-09-05 21:17   ` Andrew Lunn
  2024-09-05 20:15 ` [PATCHv3 net-next 4/9] net: ibm: emac: remove mii_bus with devm Rosen Penev
                   ` (5 subsequent siblings)
  8 siblings, 1 reply; 23+ messages in thread
From: Rosen Penev @ 2024-09-05 20:15 UTC (permalink / raw)
  To: netdev
  Cc: davem, edumazet, kuba, pabeni, linux-kernel, jacob.e.keller,
	horms, sd, chunkeey

Allows removing manual iounmap.

Signed-off-by: Rosen Penev <rosenp@gmail.com>
---
 drivers/net/ethernet/ibm/emac/core.c | 13 ++++---------
 1 file changed, 4 insertions(+), 9 deletions(-)

diff --git a/drivers/net/ethernet/ibm/emac/core.c b/drivers/net/ethernet/ibm/emac/core.c
index 4e260abbaa56..459f893a0a56 100644
--- a/drivers/net/ethernet/ibm/emac/core.c
+++ b/drivers/net/ethernet/ibm/emac/core.c
@@ -3082,10 +3082,9 @@ static int emac_probe(struct platform_device *ofdev)
 
 	/* Map EMAC regs */
 	// TODO : platform_get_resource() and devm_ioremap_resource()
-	dev->emacp = of_iomap(np, 0);
-	if (dev->emacp == NULL) {
-		printk(KERN_ERR "%pOF: Can't map device registers!\n", np);
-		err = -ENOMEM;
+	dev->emacp = devm_of_iomap(&ofdev->dev, np, 0, NULL);
+	if (!dev->emacp) {
+		err = dev_err_probe(&ofdev->dev, -ENOMEM, "can't map device registers");
 		goto err_irq_unmap;
 	}
 
@@ -3095,7 +3094,7 @@ static int emac_probe(struct platform_device *ofdev)
 		printk(KERN_ERR
 		       "%pOF: Timeout waiting for dependent devices\n", np);
 		/*  display more info about what's missing ? */
-		goto err_reg_unmap;
+		goto err_irq_unmap;
 	}
 	dev->mal = platform_get_drvdata(dev->mal_dev);
 	if (dev->mdio_dev != NULL)
@@ -3228,8 +3227,6 @@ static int emac_probe(struct platform_device *ofdev)
 	mal_unregister_commac(dev->mal, &dev->commac);
  err_rel_deps:
 	emac_put_deps(dev);
- err_reg_unmap:
-	iounmap(dev->emacp);
  err_irq_unmap:
 	if (dev->wol_irq)
 		irq_dispose_mapping(dev->wol_irq);
@@ -3274,8 +3271,6 @@ static void emac_remove(struct platform_device *ofdev)
 	mal_unregister_commac(dev->mal, &dev->commac);
 	emac_put_deps(dev);
 
-	iounmap(dev->emacp);
-
 	if (dev->wol_irq)
 		irq_dispose_mapping(dev->wol_irq);
 }
-- 
2.46.0


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

* [PATCHv3 net-next 4/9] net: ibm: emac: remove mii_bus with devm
  2024-09-05 20:14 [PATCHv3 net-next 0/9] net: ibm: emac: modernize a bit Rosen Penev
                   ` (2 preceding siblings ...)
  2024-09-05 20:15 ` [PATCHv3 net-next 3/9] net: ibm: emac: use devm for of_iomap Rosen Penev
@ 2024-09-05 20:15 ` Rosen Penev
  2024-09-05 21:19   ` Andrew Lunn
  2024-09-05 20:15 ` [PATCHv3 net-next 5/9] net: ibm: emac: use devm for register_netdev Rosen Penev
                   ` (4 subsequent siblings)
  8 siblings, 1 reply; 23+ messages in thread
From: Rosen Penev @ 2024-09-05 20:15 UTC (permalink / raw)
  To: netdev
  Cc: davem, edumazet, kuba, pabeni, linux-kernel, jacob.e.keller,
	horms, sd, chunkeey

Switching to devm management of mii_bus allows to remove
mdiobus_unregister calls and thus avoids needing a mii_bus global struct
member.

Signed-off-by: Rosen Penev <rosenp@gmail.com>
---
 drivers/net/ethernet/ibm/emac/core.c | 32 +++++++++++-----------------
 drivers/net/ethernet/ibm/emac/core.h |  1 -
 2 files changed, 13 insertions(+), 20 deletions(-)

diff --git a/drivers/net/ethernet/ibm/emac/core.c b/drivers/net/ethernet/ibm/emac/core.c
index 459f893a0a56..66e8be73e09b 100644
--- a/drivers/net/ethernet/ibm/emac/core.c
+++ b/drivers/net/ethernet/ibm/emac/core.c
@@ -2581,6 +2581,7 @@ static const struct mii_phy_ops emac_dt_mdio_phy_ops = {
 static int emac_dt_mdio_probe(struct emac_instance *dev)
 {
 	struct device_node *mii_np;
+	struct mii_bus *bus;
 	int res;
 
 	mii_np = of_get_child_by_name(dev->ofdev->dev.of_node, "mdio");
@@ -2594,23 +2595,23 @@ static int emac_dt_mdio_probe(struct emac_instance *dev)
 		goto put_node;
 	}
 
-	dev->mii_bus = devm_mdiobus_alloc(&dev->ofdev->dev);
-	if (!dev->mii_bus) {
+	bus = devm_mdiobus_alloc(&dev->ofdev->dev);
+	if (!bus) {
 		res = -ENOMEM;
 		goto put_node;
 	}
 
-	dev->mii_bus->priv = dev->ndev;
-	dev->mii_bus->parent = dev->ndev->dev.parent;
-	dev->mii_bus->name = "emac_mdio";
-	dev->mii_bus->read = &emac_mii_bus_read;
-	dev->mii_bus->write = &emac_mii_bus_write;
-	dev->mii_bus->reset = &emac_mii_bus_reset;
-	snprintf(dev->mii_bus->id, MII_BUS_ID_SIZE, "%s", dev->ofdev->name);
-	res = of_mdiobus_register(dev->mii_bus, mii_np);
+	bus->priv = dev->ndev;
+	bus->parent = dev->ndev->dev.parent;
+	bus->name = "emac_mdio";
+	bus->read = &emac_mii_bus_read;
+	bus->write = &emac_mii_bus_write;
+	bus->reset = &emac_mii_bus_reset;
+	snprintf(bus->id, MII_BUS_ID_SIZE, "%s", dev->ofdev->name);
+	res = devm_of_mdiobus_register(&dev->ofdev->dev, bus, mii_np);
 	if (res) {
 		dev_err(&dev->ofdev->dev, "cannot register MDIO bus %s (%d)",
-			dev->mii_bus->name, res);
+			bus->name, res);
 	}
 
  put_node:
@@ -2656,8 +2657,6 @@ static int emac_dt_phy_probe(struct emac_instance *dev)
 		res = emac_dt_mdio_probe(dev);
 		if (!res) {
 			res = emac_dt_phy_connect(dev, phy_handle);
-			if (res)
-				mdiobus_unregister(dev->mii_bus);
 		}
 	}
 
@@ -2697,10 +2696,8 @@ static int emac_init_phy(struct emac_instance *dev)
 
 			res = of_phy_register_fixed_link(np);
 			dev->phy_dev = of_phy_find_device(np);
-			if (res || !dev->phy_dev) {
-				mdiobus_unregister(dev->mii_bus);
+			if (res || !dev->phy_dev)
 				return res ? res : -EINVAL;
-			}
 			emac_adjust_link(dev->ndev);
 			put_device(&dev->phy_dev->mdio.dev);
 		}
@@ -3262,9 +3259,6 @@ static void emac_remove(struct platform_device *ofdev)
 	if (dev->phy_dev)
 		phy_disconnect(dev->phy_dev);
 
-	if (dev->mii_bus)
-		mdiobus_unregister(dev->mii_bus);
-
 	busy_phy_map &= ~(1 << dev->phy.address);
 	DBG(dev, "busy_phy_map now %#x" NL, busy_phy_map);
 
diff --git a/drivers/net/ethernet/ibm/emac/core.h b/drivers/net/ethernet/ibm/emac/core.h
index 295516b07662..f4bd4cd8ac4a 100644
--- a/drivers/net/ethernet/ibm/emac/core.h
+++ b/drivers/net/ethernet/ibm/emac/core.h
@@ -189,7 +189,6 @@ struct emac_instance {
 	struct mutex			mdio_lock;
 
 	/* Device-tree based phy configuration */
-	struct mii_bus			*mii_bus;
 	struct phy_device		*phy_dev;
 
 	/* ZMII infos if any */
-- 
2.46.0


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

* [PATCHv3 net-next 5/9] net: ibm: emac: use devm for register_netdev
  2024-09-05 20:14 [PATCHv3 net-next 0/9] net: ibm: emac: modernize a bit Rosen Penev
                   ` (3 preceding siblings ...)
  2024-09-05 20:15 ` [PATCHv3 net-next 4/9] net: ibm: emac: remove mii_bus with devm Rosen Penev
@ 2024-09-05 20:15 ` Rosen Penev
  2024-09-05 21:19   ` Andrew Lunn
  2024-09-05 20:15 ` [PATCHv3 net-next 6/9] net: ibm: emac: use netdev's phydev directly Rosen Penev
                   ` (3 subsequent siblings)
  8 siblings, 1 reply; 23+ messages in thread
From: Rosen Penev @ 2024-09-05 20:15 UTC (permalink / raw)
  To: netdev
  Cc: davem, edumazet, kuba, pabeni, linux-kernel, jacob.e.keller,
	horms, sd, chunkeey

Cleans it up automatically. No need to handle manually.

Signed-off-by: Rosen Penev <rosenp@gmail.com>
---
 drivers/net/ethernet/ibm/emac/core.c | 4 +---
 1 file changed, 1 insertion(+), 3 deletions(-)

diff --git a/drivers/net/ethernet/ibm/emac/core.c b/drivers/net/ethernet/ibm/emac/core.c
index 66e8be73e09b..e2abda947a51 100644
--- a/drivers/net/ethernet/ibm/emac/core.c
+++ b/drivers/net/ethernet/ibm/emac/core.c
@@ -3179,7 +3179,7 @@ static int emac_probe(struct platform_device *ofdev)
 
 	netif_carrier_off(ndev);
 
-	err = register_netdev(ndev);
+	err = devm_register_netdev(&ofdev->dev, ndev);
 	if (err) {
 		printk(KERN_ERR "%pOF: failed to register net device (%d)!\n",
 		       np, err);
@@ -3245,8 +3245,6 @@ static void emac_remove(struct platform_device *ofdev)
 
 	DBG(dev, "remove" NL);
 
-	unregister_netdev(dev->ndev);
-
 	cancel_work_sync(&dev->reset_work);
 
 	if (emac_has_feature(dev, EMAC_FTR_HAS_TAH))
-- 
2.46.0


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

* [PATCHv3 net-next 6/9] net: ibm: emac: use netdev's phydev directly
  2024-09-05 20:14 [PATCHv3 net-next 0/9] net: ibm: emac: modernize a bit Rosen Penev
                   ` (4 preceding siblings ...)
  2024-09-05 20:15 ` [PATCHv3 net-next 5/9] net: ibm: emac: use devm for register_netdev Rosen Penev
@ 2024-09-05 20:15 ` Rosen Penev
  2024-09-05 21:21   ` Andrew Lunn
  2024-09-07 19:32   ` Christophe JAILLET
  2024-09-05 20:15 ` [PATCHv3 net-next 7/9] net: ibm: emac: replace of_get_property Rosen Penev
                   ` (2 subsequent siblings)
  8 siblings, 2 replies; 23+ messages in thread
From: Rosen Penev @ 2024-09-05 20:15 UTC (permalink / raw)
  To: netdev
  Cc: davem, edumazet, kuba, pabeni, linux-kernel, jacob.e.keller,
	horms, sd, chunkeey

Avoids having to use own struct member.

Signed-off-by: Rosen Penev <rosenp@gmail.com>
---
 drivers/net/ethernet/ibm/emac/core.c | 47 +++++++++++++---------------
 drivers/net/ethernet/ibm/emac/core.h |  3 --
 2 files changed, 21 insertions(+), 29 deletions(-)

diff --git a/drivers/net/ethernet/ibm/emac/core.c b/drivers/net/ethernet/ibm/emac/core.c
index e2abda947a51..cda368701ae4 100644
--- a/drivers/net/ethernet/ibm/emac/core.c
+++ b/drivers/net/ethernet/ibm/emac/core.c
@@ -2459,7 +2459,7 @@ static int emac_read_uint_prop(struct device_node *np, const char *name,
 static void emac_adjust_link(struct net_device *ndev)
 {
 	struct emac_instance *dev = netdev_priv(ndev);
-	struct phy_device *phy = dev->phy_dev;
+	struct phy_device *phy = ndev->phydev;
 
 	dev->phy.autoneg = phy->autoneg;
 	dev->phy.speed = phy->speed;
@@ -2510,22 +2510,20 @@ static int emac_mdio_phy_start_aneg(struct mii_phy *phy,
 static int emac_mdio_setup_aneg(struct mii_phy *phy, u32 advertise)
 {
 	struct net_device *ndev = phy->dev;
-	struct emac_instance *dev = netdev_priv(ndev);
 
 	phy->autoneg = AUTONEG_ENABLE;
 	phy->advertising = advertise;
-	return emac_mdio_phy_start_aneg(phy, dev->phy_dev);
+	return emac_mdio_phy_start_aneg(phy, ndev->phydev);
 }
 
 static int emac_mdio_setup_forced(struct mii_phy *phy, int speed, int fd)
 {
 	struct net_device *ndev = phy->dev;
-	struct emac_instance *dev = netdev_priv(ndev);
 
 	phy->autoneg = AUTONEG_DISABLE;
 	phy->speed = speed;
 	phy->duplex = fd;
-	return emac_mdio_phy_start_aneg(phy, dev->phy_dev);
+	return emac_mdio_phy_start_aneg(phy, ndev->phydev);
 }
 
 static int emac_mdio_poll_link(struct mii_phy *phy)
@@ -2534,20 +2532,19 @@ static int emac_mdio_poll_link(struct mii_phy *phy)
 	struct emac_instance *dev = netdev_priv(ndev);
 	int res;
 
-	res = phy_read_status(dev->phy_dev);
+	res = phy_read_status(ndev->phydev);
 	if (res) {
 		dev_err(&dev->ofdev->dev, "link update failed (%d).", res);
 		return ethtool_op_get_link(ndev);
 	}
 
-	return dev->phy_dev->link;
+	return ndev->phydev->link;
 }
 
 static int emac_mdio_read_link(struct mii_phy *phy)
 {
 	struct net_device *ndev = phy->dev;
-	struct emac_instance *dev = netdev_priv(ndev);
-	struct phy_device *phy_dev = dev->phy_dev;
+	struct phy_device *phy_dev = ndev->phydev;
 	int res;
 
 	res = phy_read_status(phy_dev);
@@ -2564,10 +2561,9 @@ static int emac_mdio_read_link(struct mii_phy *phy)
 static int emac_mdio_init_phy(struct mii_phy *phy)
 {
 	struct net_device *ndev = phy->dev;
-	struct emac_instance *dev = netdev_priv(ndev);
 
-	phy_start(dev->phy_dev);
-	return phy_init_hw(dev->phy_dev);
+	phy_start(ndev->phydev);
+	return phy_init_hw(ndev->phydev);
 }
 
 static const struct mii_phy_ops emac_dt_mdio_phy_ops = {
@@ -2622,26 +2618,28 @@ static int emac_dt_mdio_probe(struct emac_instance *dev)
 static int emac_dt_phy_connect(struct emac_instance *dev,
 			       struct device_node *phy_handle)
 {
+	struct phy_device *phy_dev;
+
 	dev->phy.def = devm_kzalloc(&dev->ofdev->dev, sizeof(*dev->phy.def),
 				    GFP_KERNEL);
 	if (!dev->phy.def)
 		return -ENOMEM;
 
-	dev->phy_dev = of_phy_connect(dev->ndev, phy_handle, &emac_adjust_link,
+	phy_dev = of_phy_connect(dev->ndev, phy_handle, &emac_adjust_link,
 				      0, dev->phy_mode);
-	if (!dev->phy_dev) {
+	if (!phy_dev) {
 		dev_err(&dev->ofdev->dev, "failed to connect to PHY.\n");
 		return -ENODEV;
 	}
 
-	dev->phy.def->phy_id = dev->phy_dev->drv->phy_id;
-	dev->phy.def->phy_id_mask = dev->phy_dev->drv->phy_id_mask;
-	dev->phy.def->name = dev->phy_dev->drv->name;
+	dev->phy.def->phy_id = phy_dev->drv->phy_id;
+	dev->phy.def->phy_id_mask = phy_dev->drv->phy_id_mask;
+	dev->phy.def->name = phy_dev->drv->name;
 	dev->phy.def->ops = &emac_dt_mdio_phy_ops;
 	ethtool_convert_link_mode_to_legacy_u32(&dev->phy.features,
-						dev->phy_dev->supported);
-	dev->phy.address = dev->phy_dev->mdio.addr;
-	dev->phy.mode = dev->phy_dev->interface;
+						phy_dev->supported);
+	dev->phy.address = phy_dev->mdio.addr;
+	dev->phy.mode = phy_dev->interface;
 	return 0;
 }
 
@@ -2695,11 +2693,11 @@ static int emac_init_phy(struct emac_instance *dev)
 				return res;
 
 			res = of_phy_register_fixed_link(np);
-			dev->phy_dev = of_phy_find_device(np);
-			if (res || !dev->phy_dev)
+			ndev->phydev = of_phy_find_device(np);
+			if (res || !ndev->phydev)
 				return res ? res : -EINVAL;
 			emac_adjust_link(dev->ndev);
-			put_device(&dev->phy_dev->mdio.dev);
+			put_device(&ndev->phydev->mdio.dev);
 		}
 		return 0;
 	}
@@ -3254,9 +3252,6 @@ static void emac_remove(struct platform_device *ofdev)
 	if (emac_has_feature(dev, EMAC_FTR_HAS_ZMII))
 		zmii_detach(dev->zmii_dev, dev->zmii_port);
 
-	if (dev->phy_dev)
-		phy_disconnect(dev->phy_dev);
-
 	busy_phy_map &= ~(1 << dev->phy.address);
 	DBG(dev, "busy_phy_map now %#x" NL, busy_phy_map);
 
diff --git a/drivers/net/ethernet/ibm/emac/core.h b/drivers/net/ethernet/ibm/emac/core.h
index f4bd4cd8ac4a..b820a4f6e8c7 100644
--- a/drivers/net/ethernet/ibm/emac/core.h
+++ b/drivers/net/ethernet/ibm/emac/core.h
@@ -188,9 +188,6 @@ struct emac_instance {
 	struct emac_instance		*mdio_instance;
 	struct mutex			mdio_lock;
 
-	/* Device-tree based phy configuration */
-	struct phy_device		*phy_dev;
-
 	/* ZMII infos if any */
 	u32				zmii_ph;
 	u32				zmii_port;
-- 
2.46.0


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

* [PATCHv3 net-next 7/9] net: ibm: emac: replace of_get_property
  2024-09-05 20:14 [PATCHv3 net-next 0/9] net: ibm: emac: modernize a bit Rosen Penev
                   ` (5 preceding siblings ...)
  2024-09-05 20:15 ` [PATCHv3 net-next 6/9] net: ibm: emac: use netdev's phydev directly Rosen Penev
@ 2024-09-05 20:15 ` Rosen Penev
  2024-09-05 21:22   ` Andrew Lunn
  2024-09-05 20:15 ` [PATCHv3 net-next 8/9] net: ibm: emac: remove all waiting code Rosen Penev
  2024-09-05 20:15 ` [PATCHv3 net-next 9/9] net: ibm: emac: get rid of wol_irq Rosen Penev
  8 siblings, 1 reply; 23+ messages in thread
From: Rosen Penev @ 2024-09-05 20:15 UTC (permalink / raw)
  To: netdev
  Cc: davem, edumazet, kuba, pabeni, linux-kernel, jacob.e.keller,
	horms, sd, chunkeey

of_property_read_u32 can be used.

Signed-off-by: Rosen Penev <rosenp@gmail.com>
---
 drivers/net/ethernet/ibm/emac/core.c | 20 +++++++++-----------
 1 file changed, 9 insertions(+), 11 deletions(-)

diff --git a/drivers/net/ethernet/ibm/emac/core.c b/drivers/net/ethernet/ibm/emac/core.c
index cda368701ae4..f4126a1f1fff 100644
--- a/drivers/net/ethernet/ibm/emac/core.c
+++ b/drivers/net/ethernet/ibm/emac/core.c
@@ -2444,15 +2444,14 @@ static int emac_wait_deps(struct emac_instance *dev)
 static int emac_read_uint_prop(struct device_node *np, const char *name,
 			       u32 *val, int fatal)
 {
-	int len;
-	const u32 *prop = of_get_property(np, name, &len);
-	if (prop == NULL || len < sizeof(u32)) {
+	int err;
+
+	err = of_property_read_u32(np, name, val);
+	if (err) {
 		if (fatal)
-			printk(KERN_ERR "%pOF: missing %s property\n",
-			       np, name);
-		return -ENODEV;
+			pr_err("%pOF: missing %s property", np, name);
+		return err;
 	}
-	*val = *prop;
 	return 0;
 }
 
@@ -3298,16 +3297,15 @@ static void __init emac_make_bootlist(void)
 
 	/* Collect EMACs */
 	while((np = of_find_all_nodes(np)) != NULL) {
-		const u32 *idx;
+		u32 idx;
 
 		if (of_match_node(emac_match, np) == NULL)
 			continue;
 		if (of_property_read_bool(np, "unused"))
 			continue;
-		idx = of_get_property(np, "cell-index", NULL);
-		if (idx == NULL)
+		if (of_property_read_u32(np, "cell-index", &idx))
 			continue;
-		cell_indices[i] = *idx;
+		cell_indices[i] = idx;
 		emac_boot_list[i++] = of_node_get(np);
 		if (i >= EMAC_BOOT_LIST_SIZE) {
 			of_node_put(np);
-- 
2.46.0


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

* [PATCHv3 net-next 8/9] net: ibm: emac: remove all waiting code
  2024-09-05 20:14 [PATCHv3 net-next 0/9] net: ibm: emac: modernize a bit Rosen Penev
                   ` (6 preceding siblings ...)
  2024-09-05 20:15 ` [PATCHv3 net-next 7/9] net: ibm: emac: replace of_get_property Rosen Penev
@ 2024-09-05 20:15 ` Rosen Penev
  2024-09-05 20:15 ` [PATCHv3 net-next 9/9] net: ibm: emac: get rid of wol_irq Rosen Penev
  8 siblings, 0 replies; 23+ messages in thread
From: Rosen Penev @ 2024-09-05 20:15 UTC (permalink / raw)
  To: netdev
  Cc: davem, edumazet, kuba, pabeni, linux-kernel, jacob.e.keller,
	horms, sd, chunkeey

EPROBE_DEFER, which probably wasn't available when this driver was
written, can be used instead of waiting manually.

Signed-off-by: Rosen Penev <rosenp@gmail.com>
---
 drivers/net/ethernet/ibm/emac/core.c | 55 ++++------------------------
 1 file changed, 7 insertions(+), 48 deletions(-)

diff --git a/drivers/net/ethernet/ibm/emac/core.c b/drivers/net/ethernet/ibm/emac/core.c
index f4126a1f1fff..c643e99e77d9 100644
--- a/drivers/net/ethernet/ibm/emac/core.c
+++ b/drivers/net/ethernet/ibm/emac/core.c
@@ -32,7 +32,6 @@
 #include <linux/ethtool.h>
 #include <linux/mii.h>
 #include <linux/bitops.h>
-#include <linux/workqueue.h>
 #include <linux/of.h>
 #include <linux/of_address.h>
 #include <linux/of_irq.h>
@@ -96,11 +95,6 @@ MODULE_LICENSE("GPL");
 static u32 busy_phy_map;
 static DEFINE_MUTEX(emac_phy_map_lock);
 
-/* This is the wait queue used to wait on any event related to probe, that
- * is discovery of MALs, other EMACs, ZMII/RGMIIs, etc...
- */
-static DECLARE_WAIT_QUEUE_HEAD(emac_probe_wait);
-
 /* Having stable interface names is a doomed idea. However, it would be nice
  * if we didn't have completely random interface names at boot too :-) It's
  * just a matter of making everybody's life easier. Since we are doing
@@ -116,9 +110,6 @@ static DECLARE_WAIT_QUEUE_HEAD(emac_probe_wait);
 #define EMAC_BOOT_LIST_SIZE	4
 static struct device_node *emac_boot_list[EMAC_BOOT_LIST_SIZE];
 
-/* How long should I wait for dependent devices ? */
-#define EMAC_PROBE_DEP_TIMEOUT	(HZ * 5)
-
 /* I don't want to litter system log with timeout errors
  * when we have brain-damaged PHY.
  */
@@ -973,8 +964,6 @@ static void __emac_set_multicast_list(struct emac_instance *dev)
 	 * we need is just to stop RX channel. This seems to work on all
 	 * tested SoCs.                                                --ebs
 	 *
-	 * If we need the full reset, we might just trigger the workqueue
-	 * and do it async... a bit nasty but should work --BenH
 	 */
 	dev->mcast_pending = 0;
 	emac_rx_disable(dev);
@@ -2378,7 +2367,9 @@ static int emac_check_deps(struct emac_instance *dev,
 		if (deps[i].drvdata != NULL)
 			there++;
 	}
-	return there == EMAC_DEP_COUNT;
+	if (there != EMAC_DEP_COUNT)
+		return -EPROBE_DEFER;
+	return 0;
 }
 
 static void emac_put_deps(struct emac_instance *dev)
@@ -2390,19 +2381,6 @@ static void emac_put_deps(struct emac_instance *dev)
 	platform_device_put(dev->tah_dev);
 }
 
-static int emac_of_bus_notify(struct notifier_block *nb, unsigned long action,
-			      void *data)
-{
-	/* We are only intereted in device addition */
-	if (action == BUS_NOTIFY_BOUND_DRIVER)
-		wake_up_all(&emac_probe_wait);
-	return 0;
-}
-
-static struct notifier_block emac_of_bus_notifier = {
-	.notifier_call = emac_of_bus_notify
-};
-
 static int emac_wait_deps(struct emac_instance *dev)
 {
 	struct emac_depentry deps[EMAC_DEP_COUNT];
@@ -2419,18 +2397,13 @@ static int emac_wait_deps(struct emac_instance *dev)
 		deps[EMAC_DEP_MDIO_IDX].phandle = dev->mdio_ph;
 	if (dev->blist && dev->blist > emac_boot_list)
 		deps[EMAC_DEP_PREV_IDX].phandle = 0xffffffffu;
-	bus_register_notifier(&platform_bus_type, &emac_of_bus_notifier);
-	wait_event_timeout(emac_probe_wait,
-			   emac_check_deps(dev, deps),
-			   EMAC_PROBE_DEP_TIMEOUT);
-	bus_unregister_notifier(&platform_bus_type, &emac_of_bus_notifier);
-	err = emac_check_deps(dev, deps) ? 0 : -ENODEV;
+	err = emac_check_deps(dev, deps);
 	for (i = 0; i < EMAC_DEP_COUNT; i++) {
 		of_node_put(deps[i].node);
 		if (err)
 			platform_device_put(deps[i].ofdev);
 	}
-	if (err == 0) {
+	if (!err) {
 		dev->mal_dev = deps[EMAC_DEP_MAL_IDX].ofdev;
 		dev->zmii_dev = deps[EMAC_DEP_ZMII_IDX].ofdev;
 		dev->rgmii_dev = deps[EMAC_DEP_RGMII_IDX].ofdev;
@@ -3084,12 +3057,8 @@ static int emac_probe(struct platform_device *ofdev)
 
 	/* Wait for dependent devices */
 	err = emac_wait_deps(dev);
-	if (err) {
-		printk(KERN_ERR
-		       "%pOF: Timeout waiting for dependent devices\n", np);
-		/*  display more info about what's missing ? */
+	if (err)
 		goto err_irq_unmap;
-	}
 	dev->mal = platform_get_drvdata(dev->mal_dev);
 	if (dev->mdio_dev != NULL)
 		dev->mdio_instance = platform_get_drvdata(dev->mdio_dev);
@@ -3189,10 +3158,6 @@ static int emac_probe(struct platform_device *ofdev)
 	wmb();
 	platform_set_drvdata(ofdev, dev);
 
-	/* There's a new kid in town ! Let's tell everybody */
-	wake_up_all(&emac_probe_wait);
-
-
 	printk(KERN_INFO "%s: EMAC-%d %pOF, MAC %pM\n",
 	       ndev->name, dev->cell_index, np, ndev->dev_addr);
 
@@ -3225,14 +3190,8 @@ static int emac_probe(struct platform_device *ofdev)
 	if (dev->wol_irq)
 		irq_dispose_mapping(dev->wol_irq);
  err_gone:
-	/* if we were on the bootlist, remove us as we won't show up and
-	 * wake up all waiters to notify them in case they were waiting
-	 * on us
-	 */
-	if (blist) {
+	if (blist)
 		*blist = NULL;
-		wake_up_all(&emac_probe_wait);
-	}
 	return err;
 }
 
-- 
2.46.0


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

* [PATCHv3 net-next 9/9] net: ibm: emac: get rid of wol_irq
  2024-09-05 20:14 [PATCHv3 net-next 0/9] net: ibm: emac: modernize a bit Rosen Penev
                   ` (7 preceding siblings ...)
  2024-09-05 20:15 ` [PATCHv3 net-next 8/9] net: ibm: emac: remove all waiting code Rosen Penev
@ 2024-09-05 20:15 ` Rosen Penev
  2024-09-05 21:27   ` Andrew Lunn
                     ` (2 more replies)
  8 siblings, 3 replies; 23+ messages in thread
From: Rosen Penev @ 2024-09-05 20:15 UTC (permalink / raw)
  To: netdev
  Cc: davem, edumazet, kuba, pabeni, linux-kernel, jacob.e.keller,
	horms, sd, chunkeey

This is completely unused.

Signed-off-by: Rosen Penev <rosenp@gmail.com>
---
 drivers/net/ethernet/ibm/emac/core.c | 9 +--------
 1 file changed, 1 insertion(+), 8 deletions(-)

diff --git a/drivers/net/ethernet/ibm/emac/core.c b/drivers/net/ethernet/ibm/emac/core.c
index c643e99e77d9..249cb8e78a4b 100644
--- a/drivers/net/ethernet/ibm/emac/core.c
+++ b/drivers/net/ethernet/ibm/emac/core.c
@@ -3029,9 +3029,8 @@ static int emac_probe(struct platform_device *ofdev)
 	if (err)
 		goto err_gone;
 
-	/* Get interrupts. EMAC irq is mandatory, WOL irq is optional */
+	/* Get interrupts. EMAC irq is mandatory */
 	dev->emac_irq = irq_of_parse_and_map(np, 0);
-	dev->wol_irq = irq_of_parse_and_map(np, 1);
 	if (!dev->emac_irq) {
 		printk(KERN_ERR "%pOF: Can't map main interrupt\n", np);
 		err = -ENODEV;
@@ -3186,9 +3185,6 @@ static int emac_probe(struct platform_device *ofdev)
 	mal_unregister_commac(dev->mal, &dev->commac);
  err_rel_deps:
 	emac_put_deps(dev);
- err_irq_unmap:
-	if (dev->wol_irq)
-		irq_dispose_mapping(dev->wol_irq);
  err_gone:
 	if (blist)
 		*blist = NULL;
@@ -3215,9 +3211,6 @@ static void emac_remove(struct platform_device *ofdev)
 
 	mal_unregister_commac(dev->mal, &dev->commac);
 	emac_put_deps(dev);
-
-	if (dev->wol_irq)
-		irq_dispose_mapping(dev->wol_irq);
 }
 
 /* XXX Features in here should be replaced by properties... */
-- 
2.46.0


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

* Re: [PATCHv3 net-next 1/9] net: ibm: emac: use devm for alloc_etherdev
  2024-09-05 20:14 ` [PATCHv3 net-next 1/9] net: ibm: emac: use devm for alloc_etherdev Rosen Penev
@ 2024-09-05 21:16   ` Andrew Lunn
  0 siblings, 0 replies; 23+ messages in thread
From: Andrew Lunn @ 2024-09-05 21:16 UTC (permalink / raw)
  To: Rosen Penev
  Cc: netdev, davem, edumazet, kuba, pabeni, linux-kernel,
	jacob.e.keller, horms, sd, chunkeey

On Thu, Sep 05, 2024 at 01:14:58PM -0700, Rosen Penev wrote:
> Allows to simplify the code slightly. This is safe to do as free_netdev
> gets called last.
> 
> Signed-off-by: Rosen Penev <rosenp@gmail.com>

Reviewed-by: Andrew Lunn <andrew@lunn.ch>

    Andrew

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

* Re: [PATCHv3 net-next 2/9] net: ibm: emac: manage emac_irq with devm
  2024-09-05 20:14 ` [PATCHv3 net-next 2/9] net: ibm: emac: manage emac_irq with devm Rosen Penev
@ 2024-09-05 21:17   ` Andrew Lunn
  0 siblings, 0 replies; 23+ messages in thread
From: Andrew Lunn @ 2024-09-05 21:17 UTC (permalink / raw)
  To: Rosen Penev
  Cc: netdev, davem, edumazet, kuba, pabeni, linux-kernel,
	jacob.e.keller, horms, sd, chunkeey

On Thu, Sep 05, 2024 at 01:14:59PM -0700, Rosen Penev wrote:
> It's the last to go in remove. Safe to let devm handle it.
> 
> Also move request_irq to probe for clarity. It's removed in _remove not
> close.
> 
> Use dev_err_probe instead of printk. Handles EPROBE_DEFER automatically.
> 
> Signed-off-by: Rosen Penev <rosenp@gmail.com>

Reviewed-by: Andrew Lunn <andrew@lunn.ch>

    Andrew

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

* Re: [PATCHv3 net-next 3/9] net: ibm: emac: use devm for of_iomap
  2024-09-05 20:15 ` [PATCHv3 net-next 3/9] net: ibm: emac: use devm for of_iomap Rosen Penev
@ 2024-09-05 21:17   ` Andrew Lunn
  0 siblings, 0 replies; 23+ messages in thread
From: Andrew Lunn @ 2024-09-05 21:17 UTC (permalink / raw)
  To: Rosen Penev
  Cc: netdev, davem, edumazet, kuba, pabeni, linux-kernel,
	jacob.e.keller, horms, sd, chunkeey

On Thu, Sep 05, 2024 at 01:15:00PM -0700, Rosen Penev wrote:
> Allows removing manual iounmap.
> 
> Signed-off-by: Rosen Penev <rosenp@gmail.com>

Reviewed-by: Andrew Lunn <andrew@lunn.ch>

    Andrew

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

* Re: [PATCHv3 net-next 4/9] net: ibm: emac: remove mii_bus with devm
  2024-09-05 20:15 ` [PATCHv3 net-next 4/9] net: ibm: emac: remove mii_bus with devm Rosen Penev
@ 2024-09-05 21:19   ` Andrew Lunn
  0 siblings, 0 replies; 23+ messages in thread
From: Andrew Lunn @ 2024-09-05 21:19 UTC (permalink / raw)
  To: Rosen Penev
  Cc: netdev, davem, edumazet, kuba, pabeni, linux-kernel,
	jacob.e.keller, horms, sd, chunkeey

On Thu, Sep 05, 2024 at 01:15:01PM -0700, Rosen Penev wrote:
> Switching to devm management of mii_bus allows to remove
> mdiobus_unregister calls and thus avoids needing a mii_bus global struct
> member.
> 
> Signed-off-by: Rosen Penev <rosenp@gmail.com>

Reviewed-by: Andrew Lunn <andrew@lunn.ch>

    Andrew

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

* Re: [PATCHv3 net-next 5/9] net: ibm: emac: use devm for register_netdev
  2024-09-05 20:15 ` [PATCHv3 net-next 5/9] net: ibm: emac: use devm for register_netdev Rosen Penev
@ 2024-09-05 21:19   ` Andrew Lunn
  0 siblings, 0 replies; 23+ messages in thread
From: Andrew Lunn @ 2024-09-05 21:19 UTC (permalink / raw)
  To: Rosen Penev
  Cc: netdev, davem, edumazet, kuba, pabeni, linux-kernel,
	jacob.e.keller, horms, sd, chunkeey

On Thu, Sep 05, 2024 at 01:15:02PM -0700, Rosen Penev wrote:
> Cleans it up automatically. No need to handle manually.
> 
> Signed-off-by: Rosen Penev <rosenp@gmail.com>

Reviewed-by: Andrew Lunn <andrew@lunn.ch>

    Andrew

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

* Re: [PATCHv3 net-next 6/9] net: ibm: emac: use netdev's phydev directly
  2024-09-05 20:15 ` [PATCHv3 net-next 6/9] net: ibm: emac: use netdev's phydev directly Rosen Penev
@ 2024-09-05 21:21   ` Andrew Lunn
  2024-09-07 19:32   ` Christophe JAILLET
  1 sibling, 0 replies; 23+ messages in thread
From: Andrew Lunn @ 2024-09-05 21:21 UTC (permalink / raw)
  To: Rosen Penev
  Cc: netdev, davem, edumazet, kuba, pabeni, linux-kernel,
	jacob.e.keller, horms, sd, chunkeey

On Thu, Sep 05, 2024 at 01:15:03PM -0700, Rosen Penev wrote:
> Avoids having to use own struct member.
> 
> Signed-off-by: Rosen Penev <rosenp@gmail.com>

Reviewed-by: Andrew Lunn <andrew@lunn.ch>

    Andrew

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

* Re: [PATCHv3 net-next 7/9] net: ibm: emac: replace of_get_property
  2024-09-05 20:15 ` [PATCHv3 net-next 7/9] net: ibm: emac: replace of_get_property Rosen Penev
@ 2024-09-05 21:22   ` Andrew Lunn
  0 siblings, 0 replies; 23+ messages in thread
From: Andrew Lunn @ 2024-09-05 21:22 UTC (permalink / raw)
  To: Rosen Penev
  Cc: netdev, davem, edumazet, kuba, pabeni, linux-kernel,
	jacob.e.keller, horms, sd, chunkeey

On Thu, Sep 05, 2024 at 01:15:04PM -0700, Rosen Penev wrote:
> of_property_read_u32 can be used.
> 
> Signed-off-by: Rosen Penev <rosenp@gmail.com>

Reviewed-by: Andrew Lunn <andrew@lunn.ch>

    Andrew

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

* Re: [PATCHv3 net-next 9/9] net: ibm: emac: get rid of wol_irq
  2024-09-05 20:15 ` [PATCHv3 net-next 9/9] net: ibm: emac: get rid of wol_irq Rosen Penev
@ 2024-09-05 21:27   ` Andrew Lunn
  2024-09-05 22:28     ` Rosen Penev
  2024-09-07 18:29   ` kernel test robot
  2024-09-07 23:11   ` kernel test robot
  2 siblings, 1 reply; 23+ messages in thread
From: Andrew Lunn @ 2024-09-05 21:27 UTC (permalink / raw)
  To: Rosen Penev
  Cc: netdev, davem, edumazet, kuba, pabeni, linux-kernel,
	jacob.e.keller, horms, sd, chunkeey

On Thu, Sep 05, 2024 at 01:15:06PM -0700, Rosen Penev wrote:
> This is completely unused.
> 
> Signed-off-by: Rosen Penev <rosenp@gmail.com>

Seems reasonable, since there does not appear to be any WoL
support.

However, it might be possible to wire it up? You might then need the
interrupt? This patch could then be reverted if it is actually needed.

Reviewed-by: Andrew Lunn <andrew@lunn.ch>

    Andrew

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

* Re: [PATCHv3 net-next 9/9] net: ibm: emac: get rid of wol_irq
  2024-09-05 21:27   ` Andrew Lunn
@ 2024-09-05 22:28     ` Rosen Penev
  0 siblings, 0 replies; 23+ messages in thread
From: Rosen Penev @ 2024-09-05 22:28 UTC (permalink / raw)
  To: Andrew Lunn
  Cc: netdev, davem, edumazet, kuba, pabeni, linux-kernel,
	jacob.e.keller, horms, sd, chunkeey

On Thu, Sep 5, 2024 at 2:27 PM Andrew Lunn <andrew@lunn.ch> wrote:
>
> On Thu, Sep 05, 2024 at 01:15:06PM -0700, Rosen Penev wrote:
> > This is completely unused.
> >
> > Signed-off-by: Rosen Penev <rosenp@gmail.com>
>
> Seems reasonable, since there does not appear to be any WoL
> support.
>
> However, it might be possible to wire it up? You might then need the
> interrupt? This patch could then be reverted if it is actually needed.
I have no idea how to do so. Actually the device I have probably
doesn't support WoL. I'll leave that for someone else to figure out.
>
> Reviewed-by: Andrew Lunn <andrew@lunn.ch>
>
>     Andrew

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

* Re: [PATCHv3 net-next 9/9] net: ibm: emac: get rid of wol_irq
  2024-09-05 20:15 ` [PATCHv3 net-next 9/9] net: ibm: emac: get rid of wol_irq Rosen Penev
  2024-09-05 21:27   ` Andrew Lunn
@ 2024-09-07 18:29   ` kernel test robot
  2024-09-07 23:11   ` kernel test robot
  2 siblings, 0 replies; 23+ messages in thread
From: kernel test robot @ 2024-09-07 18:29 UTC (permalink / raw)
  To: Rosen Penev, netdev
  Cc: oe-kbuild-all, davem, edumazet, kuba, pabeni, linux-kernel,
	jacob.e.keller, horms, sd, chunkeey

Hi Rosen,

kernel test robot noticed the following build errors:

[auto build test ERROR on net-next/main]

url:    https://github.com/intel-lab-lkp/linux/commits/Rosen-Penev/net-ibm-emac-use-devm-for-alloc_etherdev/20240906-042738
base:   net-next/main
patch link:    https://lore.kernel.org/r/20240905201506.12679-10-rosenp%40gmail.com
patch subject: [PATCHv3 net-next 9/9] net: ibm: emac: get rid of wol_irq
config: powerpc-redwood_defconfig (https://download.01.org/0day-ci/archive/20240908/202409080218.RmYLjpwK-lkp@intel.com/config)
compiler: powerpc-linux-gcc (GCC) 13.3.0
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240908/202409080218.RmYLjpwK-lkp@intel.com/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202409080218.RmYLjpwK-lkp@intel.com/

All errors (new ones prefixed by >>):

   drivers/net/ethernet/ibm/emac/core.c: In function 'emac_probe':
>> drivers/net/ethernet/ibm/emac/core.c:3060:17: error: label 'err_irq_unmap' used but not defined
    3060 |                 goto err_irq_unmap;
         |                 ^~~~


vim +/err_irq_unmap +3060 drivers/net/ethernet/ibm/emac/core.c

15efc02b2625f1 drivers/net/ibm_newemac/core.c       Alexander Beregalov 2009-04-09  2988  
fe17dc1e2bae85 drivers/net/ethernet/ibm/emac/core.c Bill Pemberton      2012-12-03  2989  static int emac_probe(struct platform_device *ofdev)
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  2990  {
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  2991  	struct net_device *ndev;
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  2992  	struct emac_instance *dev;
61c7a080a5a061 drivers/net/ibm_newemac/core.c       Grant Likely        2010-04-13  2993  	struct device_node *np = ofdev->dev.of_node;
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  2994  	struct device_node **blist = NULL;
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  2995  	int err, i;
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  2996  
be63c09afe9153 drivers/net/ibm_newemac/core.c       Josh Boyer          2008-04-22  2997  	/* Skip unused/unwired EMACS.  We leave the check for an unused
be63c09afe9153 drivers/net/ibm_newemac/core.c       Josh Boyer          2008-04-22  2998  	 * property here for now, but new flat device trees should set a
be63c09afe9153 drivers/net/ibm_newemac/core.c       Josh Boyer          2008-04-22  2999  	 * status property to "disabled" instead.
be63c09afe9153 drivers/net/ibm_newemac/core.c       Josh Boyer          2008-04-22  3000  	 */
1a87e641d8a50c drivers/net/ethernet/ibm/emac/core.c Rob Herring         2023-03-14  3001  	if (of_property_read_bool(np, "unused") || !of_device_is_available(np))
3d722562d73483 drivers/net/ibm_newemac/core.c       Hugh Blemings       2007-12-05  3002  		return -ENODEV;
3d722562d73483 drivers/net/ibm_newemac/core.c       Hugh Blemings       2007-12-05  3003  
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3004  	/* Find ourselves in the bootlist if we are there */
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3005  	for (i = 0; i < EMAC_BOOT_LIST_SIZE; i++)
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3006  		if (emac_boot_list[i] == np)
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3007  			blist = &emac_boot_list[i];
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3008  
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3009  	/* Allocate our net_device structure */
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3010  	err = -ENOMEM;
c7de481bca2013 drivers/net/ethernet/ibm/emac/core.c Rosen Penev         2024-09-05  3011  	ndev = devm_alloc_etherdev(&ofdev->dev, sizeof(struct emac_instance));
41de8d4cff21a2 drivers/net/ethernet/ibm/emac/core.c Joe Perches         2012-01-29  3012  	if (!ndev)
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3013  		goto err_gone;
41de8d4cff21a2 drivers/net/ethernet/ibm/emac/core.c Joe Perches         2012-01-29  3014  
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3015  	dev = netdev_priv(ndev);
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3016  	dev->ndev = ndev;
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3017  	dev->ofdev = ofdev;
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3018  	dev->blist = blist;
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3019  	SET_NETDEV_DEV(ndev, &ofdev->dev);
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3020  
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3021  	/* Initialize some embedded data structures */
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3022  	mutex_init(&dev->mdio_lock);
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3023  	mutex_init(&dev->link_lock);
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3024  	spin_lock_init(&dev->lock);
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3025  	INIT_WORK(&dev->reset_work, emac_reset_work);
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3026  
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3027  	/* Init various config data based on device-tree */
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3028  	err = emac_init_config(dev);
138b57f0f89387 drivers/net/ethernet/ibm/emac/core.c Christophe Jaillet  2017-08-20  3029  	if (err)
c7de481bca2013 drivers/net/ethernet/ibm/emac/core.c Rosen Penev         2024-09-05  3030  		goto err_gone;
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3031  
cabb2424d4d5d4 drivers/net/ethernet/ibm/emac/core.c Rosen Penev         2024-09-05  3032  	/* Get interrupts. EMAC irq is mandatory */
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3033  	dev->emac_irq = irq_of_parse_and_map(np, 0);
99c1790e5bbd31 drivers/net/ethernet/ibm/emac/core.c Michael Ellerman    2016-09-10  3034  	if (!dev->emac_irq) {
f7ce91038d5278 drivers/net/ethernet/ibm/emac/core.c Rob Herring         2017-07-18  3035  		printk(KERN_ERR "%pOF: Can't map main interrupt\n", np);
138b57f0f89387 drivers/net/ethernet/ibm/emac/core.c Christophe Jaillet  2017-08-20  3036  		err = -ENODEV;
c7de481bca2013 drivers/net/ethernet/ibm/emac/core.c Rosen Penev         2024-09-05  3037  		goto err_gone;
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3038  	}
55b3f1525a5443 drivers/net/ethernet/ibm/emac/core.c Rosen Penev         2024-09-05  3039  
55b3f1525a5443 drivers/net/ethernet/ibm/emac/core.c Rosen Penev         2024-09-05  3040  	/* Setup error IRQ handler */
55b3f1525a5443 drivers/net/ethernet/ibm/emac/core.c Rosen Penev         2024-09-05  3041  	err = devm_request_irq(&ofdev->dev, dev->emac_irq, emac_irq, 0, "EMAC", dev);
55b3f1525a5443 drivers/net/ethernet/ibm/emac/core.c Rosen Penev         2024-09-05  3042  	if (err) {
55b3f1525a5443 drivers/net/ethernet/ibm/emac/core.c Rosen Penev         2024-09-05  3043  		dev_err_probe(&ofdev->dev, err, "failed to request IRQ %d", dev->emac_irq);
55b3f1525a5443 drivers/net/ethernet/ibm/emac/core.c Rosen Penev         2024-09-05  3044  		goto err_gone;
55b3f1525a5443 drivers/net/ethernet/ibm/emac/core.c Rosen Penev         2024-09-05  3045  	}
55b3f1525a5443 drivers/net/ethernet/ibm/emac/core.c Rosen Penev         2024-09-05  3046  
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3047  	ndev->irq = dev->emac_irq;
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3048  
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3049  	/* Map EMAC regs */
138b57f0f89387 drivers/net/ethernet/ibm/emac/core.c Christophe Jaillet  2017-08-20  3050  	// TODO : platform_get_resource() and devm_ioremap_resource()
154cc24d587dd8 drivers/net/ethernet/ibm/emac/core.c Rosen Penev         2024-09-05  3051  	dev->emacp = devm_of_iomap(&ofdev->dev, np, 0, NULL);
154cc24d587dd8 drivers/net/ethernet/ibm/emac/core.c Rosen Penev         2024-09-05  3052  	if (!dev->emacp) {
154cc24d587dd8 drivers/net/ethernet/ibm/emac/core.c Rosen Penev         2024-09-05  3053  		err = dev_err_probe(&ofdev->dev, -ENOMEM, "can't map device registers");
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3054  		goto err_irq_unmap;
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3055  	}
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3056  
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3057  	/* Wait for dependent devices */
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3058  	err = emac_wait_deps(dev);
b941327b6eb37f drivers/net/ethernet/ibm/emac/core.c Rosen Penev         2024-09-05  3059  	if (err)
154cc24d587dd8 drivers/net/ethernet/ibm/emac/core.c Rosen Penev         2024-09-05 @3060  		goto err_irq_unmap;
bc353832565635 drivers/net/ethernet/ibm/emac/core.c Jingoo Han          2013-09-02  3061  	dev->mal = platform_get_drvdata(dev->mal_dev);
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3062  	if (dev->mdio_dev != NULL)
bc353832565635 drivers/net/ethernet/ibm/emac/core.c Jingoo Han          2013-09-02  3063  		dev->mdio_instance = platform_get_drvdata(dev->mdio_dev);
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3064  
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3065  	/* Register with MAL */
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3066  	dev->commac.ops = &emac_commac_ops;
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3067  	dev->commac.dev = dev;
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3068  	dev->commac.tx_chan_mask = MAL_CHAN_MASK(dev->mal_tx_chan);
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3069  	dev->commac.rx_chan_mask = MAL_CHAN_MASK(dev->mal_rx_chan);
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3070  	err = mal_register_commac(dev->mal, &dev->commac);
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3071  	if (err) {
f7ce91038d5278 drivers/net/ethernet/ibm/emac/core.c Rob Herring         2017-07-18  3072  		printk(KERN_ERR "%pOF: failed to register with mal %pOF!\n",
f7ce91038d5278 drivers/net/ethernet/ibm/emac/core.c Rob Herring         2017-07-18  3073  		       np, dev->mal_dev->dev.of_node);
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3074  		goto err_rel_deps;
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3075  	}
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3076  	dev->rx_skb_size = emac_rx_skb_size(ndev->mtu);
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3077  	dev->rx_sync_size = emac_rx_sync_size(ndev->mtu);
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3078  
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3079  	/* Get pointers to BD rings */
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3080  	dev->tx_desc =
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3081  	    dev->mal->bd_virt + mal_tx_bd_offset(dev->mal, dev->mal_tx_chan);
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3082  	dev->rx_desc =
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3083  	    dev->mal->bd_virt + mal_rx_bd_offset(dev->mal, dev->mal_rx_chan);
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3084  
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3085  	DBG(dev, "tx_desc %p" NL, dev->tx_desc);
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3086  	DBG(dev, "rx_desc %p" NL, dev->rx_desc);
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3087  
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3088  	/* Clean rings */
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3089  	memset(dev->tx_desc, 0, NUM_TX_BUFF * sizeof(struct mal_descriptor));
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3090  	memset(dev->rx_desc, 0, NUM_RX_BUFF * sizeof(struct mal_descriptor));
ab9b30cc3ec868 drivers/net/ibm_newemac/core.c       Sathya Narayanan    2008-07-01  3091  	memset(dev->tx_skb, 0, NUM_TX_BUFF * sizeof(struct sk_buff *));
ab9b30cc3ec868 drivers/net/ibm_newemac/core.c       Sathya Narayanan    2008-07-01  3092  	memset(dev->rx_skb, 0, NUM_RX_BUFF * sizeof(struct sk_buff *));
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3093  
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3094  	/* Attach to ZMII, if needed */
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3095  	if (emac_has_feature(dev, EMAC_FTR_HAS_ZMII) &&
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3096  	    (err = zmii_attach(dev->zmii_dev, dev->zmii_port, &dev->phy_mode)) != 0)
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3097  		goto err_unreg_commac;
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3098  
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3099  	/* Attach to RGMII, if needed */
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3100  	if (emac_has_feature(dev, EMAC_FTR_HAS_RGMII) &&
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3101  	    (err = rgmii_attach(dev->rgmii_dev, dev->rgmii_port, dev->phy_mode)) != 0)
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3102  		goto err_detach_zmii;
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3103  
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3104  	/* Attach to TAH, if needed */
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3105  	if (emac_has_feature(dev, EMAC_FTR_HAS_TAH) &&
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3106  	    (err = tah_attach(dev->tah_dev, dev->tah_port)) != 0)
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3107  		goto err_detach_rgmii;
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3108  
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3109  	/* Set some link defaults before we can find out real parameters */
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3110  	dev->phy.speed = SPEED_100;
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3111  	dev->phy.duplex = DUPLEX_FULL;
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3112  	dev->phy.autoneg = AUTONEG_DISABLE;
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3113  	dev->phy.pause = dev->phy.asym_pause = 0;
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3114  	dev->stop_timeout = STOP_TIMEOUT_100;
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3115  	INIT_DELAYED_WORK(&dev->link_work, emac_link_timer);
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3116  
ae5d33723e3253 drivers/net/ethernet/ibm/emac/core.c Duc Dang            2012-03-05  3117  	/* Some SoCs like APM821xx does not support Half Duplex mode. */
ae5d33723e3253 drivers/net/ethernet/ibm/emac/core.c Duc Dang            2012-03-05  3118  	if (emac_has_feature(dev, EMAC_FTR_APM821XX_NO_HALF_DUPLEX)) {
ae5d33723e3253 drivers/net/ethernet/ibm/emac/core.c Duc Dang            2012-03-05  3119  		dev->phy_feat_exc = (SUPPORTED_1000baseT_Half |
ae5d33723e3253 drivers/net/ethernet/ibm/emac/core.c Duc Dang            2012-03-05  3120  				     SUPPORTED_100baseT_Half |
ae5d33723e3253 drivers/net/ethernet/ibm/emac/core.c Duc Dang            2012-03-05  3121  				     SUPPORTED_10baseT_Half);
ae5d33723e3253 drivers/net/ethernet/ibm/emac/core.c Duc Dang            2012-03-05  3122  	}
ae5d33723e3253 drivers/net/ethernet/ibm/emac/core.c Duc Dang            2012-03-05  3123  
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3124  	/* Find PHY if any */
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3125  	err = emac_init_phy(dev);
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3126  	if (err != 0)
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3127  		goto err_detach_tah;
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3128  
5e4011e2b8032c drivers/net/ibm_newemac/core.c       Michał Mirosław     2011-04-17  3129  	if (dev->tah_dev) {
5e4011e2b8032c drivers/net/ibm_newemac/core.c       Michał Mirosław     2011-04-17  3130  		ndev->hw_features = NETIF_F_IP_CSUM | NETIF_F_SG;
5e4011e2b8032c drivers/net/ibm_newemac/core.c       Michał Mirosław     2011-04-17  3131  		ndev->features |= ndev->hw_features | NETIF_F_RXCSUM;
5e4011e2b8032c drivers/net/ibm_newemac/core.c       Michał Mirosław     2011-04-17  3132  	}
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3133  	ndev->watchdog_timeo = 5 * HZ;
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3134  	if (emac_phy_supports_gige(dev->phy_mode)) {
15efc02b2625f1 drivers/net/ibm_newemac/core.c       Alexander Beregalov 2009-04-09  3135  		ndev->netdev_ops = &emac_gige_netdev_ops;
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3136  		dev->commac.ops = &emac_commac_sg_ops;
15efc02b2625f1 drivers/net/ibm_newemac/core.c       Alexander Beregalov 2009-04-09  3137  	} else
15efc02b2625f1 drivers/net/ibm_newemac/core.c       Alexander Beregalov 2009-04-09  3138  		ndev->netdev_ops = &emac_netdev_ops;
7ad24ea4bf620a drivers/net/ethernet/ibm/emac/core.c Wilfried Klaebe     2014-05-11  3139  	ndev->ethtool_ops = &emac_ethtool_ops;
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3140  
3d5d96acfeb9dd drivers/net/ethernet/ibm/emac/core.c Jarod Wilson        2016-10-17  3141  	/* MTU range: 46 - 1500 or whatever is in OF */
3d5d96acfeb9dd drivers/net/ethernet/ibm/emac/core.c Jarod Wilson        2016-10-17  3142  	ndev->min_mtu = EMAC_MIN_MTU;
3d5d96acfeb9dd drivers/net/ethernet/ibm/emac/core.c Jarod Wilson        2016-10-17  3143  	ndev->max_mtu = dev->max_mtu;
3d5d96acfeb9dd drivers/net/ethernet/ibm/emac/core.c Jarod Wilson        2016-10-17  3144  
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3145  	netif_carrier_off(ndev);
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3146  
19245845d17958 drivers/net/ethernet/ibm/emac/core.c Rosen Penev         2024-09-05  3147  	err = devm_register_netdev(&ofdev->dev, ndev);
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3148  	if (err) {
f7ce91038d5278 drivers/net/ethernet/ibm/emac/core.c Rob Herring         2017-07-18  3149  		printk(KERN_ERR "%pOF: failed to register net device (%d)!\n",
f7ce91038d5278 drivers/net/ethernet/ibm/emac/core.c Rob Herring         2017-07-18  3150  		       np, err);
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3151  		goto err_detach_tah;
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3152  	}
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3153  
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3154  	/* Set our drvdata last as we don't want them visible until we are
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3155  	 * fully initialized
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3156  	 */
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3157  	wmb();
bc353832565635 drivers/net/ethernet/ibm/emac/core.c Jingoo Han          2013-09-02  3158  	platform_set_drvdata(ofdev, dev);
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3159  
f7ce91038d5278 drivers/net/ethernet/ibm/emac/core.c Rob Herring         2017-07-18  3160  	printk(KERN_INFO "%s: EMAC-%d %pOF, MAC %pM\n",
f7ce91038d5278 drivers/net/ethernet/ibm/emac/core.c Rob Herring         2017-07-18  3161  	       ndev->name, dev->cell_index, np, ndev->dev_addr);
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3162  
78b69921a12568 drivers/net/ethernet/ibm/emac/core.c Christian Lamparter 2017-12-20  3163  	if (dev->phy_mode == PHY_INTERFACE_MODE_SGMII)
9e3cb29497561c drivers/net/ibm_newemac/core.c       Victor Gallardo     2008-10-01  3164  		printk(KERN_NOTICE "%s: in SGMII mode\n", ndev->name);
9e3cb29497561c drivers/net/ibm_newemac/core.c       Victor Gallardo     2008-10-01  3165  
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3166  	if (dev->phy.address >= 0)
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3167  		printk("%s: found %s PHY (0x%02x)\n", ndev->name,
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3168  		       dev->phy.def->name, dev->phy.address);
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3169  
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3170  	/* Life is good */
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3171  	return 0;
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3172  
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3173  	/* I have a bad feeling about this ... */
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3174  
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3175   err_detach_tah:
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3176  	if (emac_has_feature(dev, EMAC_FTR_HAS_TAH))
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3177  		tah_detach(dev->tah_dev, dev->tah_port);
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3178   err_detach_rgmii:
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3179  	if (emac_has_feature(dev, EMAC_FTR_HAS_RGMII))
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3180  		rgmii_detach(dev->rgmii_dev, dev->rgmii_port);
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3181   err_detach_zmii:
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3182  	if (emac_has_feature(dev, EMAC_FTR_HAS_ZMII))
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3183  		zmii_detach(dev->zmii_dev, dev->zmii_port);
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3184   err_unreg_commac:
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3185  	mal_unregister_commac(dev->mal, &dev->commac);
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3186   err_rel_deps:
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3187  	emac_put_deps(dev);
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3188   err_gone:
b941327b6eb37f drivers/net/ethernet/ibm/emac/core.c Rosen Penev         2024-09-05  3189  	if (blist)
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3190  		*blist = NULL;
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3191  	return err;
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3192  }
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3193  

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki

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

* Re: [PATCHv3 net-next 6/9] net: ibm: emac: use netdev's phydev directly
  2024-09-05 20:15 ` [PATCHv3 net-next 6/9] net: ibm: emac: use netdev's phydev directly Rosen Penev
  2024-09-05 21:21   ` Andrew Lunn
@ 2024-09-07 19:32   ` Christophe JAILLET
  2024-09-07 19:58     ` Rosen Penev
  1 sibling, 1 reply; 23+ messages in thread
From: Christophe JAILLET @ 2024-09-07 19:32 UTC (permalink / raw)
  To: Rosen Penev, netdev
  Cc: davem, edumazet, kuba, pabeni, linux-kernel, jacob.e.keller,
	horms, sd, chunkeey

Le 05/09/2024 à 22:15, Rosen Penev a écrit :
> Avoids having to use own struct member.
> 
> Signed-off-by: Rosen Penev <rosenp@gmail.com>
> ---
>   drivers/net/ethernet/ibm/emac/core.c | 47 +++++++++++++---------------
>   drivers/net/ethernet/ibm/emac/core.h |  3 --
>   2 files changed, 21 insertions(+), 29 deletions(-)
> 
> diff --git a/drivers/net/ethernet/ibm/emac/core.c b/drivers/net/ethernet/ibm/emac/core.c
> index e2abda947a51..cda368701ae4 100644
> --- a/drivers/net/ethernet/ibm/emac/core.c
> +++ b/drivers/net/ethernet/ibm/emac/core.c
> @@ -2459,7 +2459,7 @@ static int emac_read_uint_prop(struct device_node *np, const char *name,
>   static void emac_adjust_link(struct net_device *ndev)
>   {
>   	struct emac_instance *dev = netdev_priv(ndev);
> -	struct phy_device *phy = dev->phy_dev;
> +	struct phy_device *phy = ndev->phydev;
>   
>   	dev->phy.autoneg = phy->autoneg;
>   	dev->phy.speed = phy->speed;
> @@ -2510,22 +2510,20 @@ static int emac_mdio_phy_start_aneg(struct mii_phy *phy,
>   static int emac_mdio_setup_aneg(struct mii_phy *phy, u32 advertise)
>   {
>   	struct net_device *ndev = phy->dev;
> -	struct emac_instance *dev = netdev_priv(ndev);
>   
>   	phy->autoneg = AUTONEG_ENABLE;
>   	phy->advertising = advertise;
> -	return emac_mdio_phy_start_aneg(phy, dev->phy_dev);
> +	return emac_mdio_phy_start_aneg(phy, ndev->phydev);
>   }
>   
>   static int emac_mdio_setup_forced(struct mii_phy *phy, int speed, int fd)
>   {
>   	struct net_device *ndev = phy->dev;
> -	struct emac_instance *dev = netdev_priv(ndev);
>   
>   	phy->autoneg = AUTONEG_DISABLE;
>   	phy->speed = speed;
>   	phy->duplex = fd;
> -	return emac_mdio_phy_start_aneg(phy, dev->phy_dev);
> +	return emac_mdio_phy_start_aneg(phy, ndev->phydev);
>   }
>   
>   static int emac_mdio_poll_link(struct mii_phy *phy)
> @@ -2534,20 +2532,19 @@ static int emac_mdio_poll_link(struct mii_phy *phy)
>   	struct emac_instance *dev = netdev_priv(ndev);
>   	int res;
>   
> -	res = phy_read_status(dev->phy_dev);
> +	res = phy_read_status(ndev->phydev);
>   	if (res) {
>   		dev_err(&dev->ofdev->dev, "link update failed (%d).", res);
>   		return ethtool_op_get_link(ndev);
>   	}
>   
> -	return dev->phy_dev->link;
> +	return ndev->phydev->link;
>   }
>   
>   static int emac_mdio_read_link(struct mii_phy *phy)
>   {
>   	struct net_device *ndev = phy->dev;
> -	struct emac_instance *dev = netdev_priv(ndev);
> -	struct phy_device *phy_dev = dev->phy_dev;
> +	struct phy_device *phy_dev = ndev->phydev;
>   	int res;
>   
>   	res = phy_read_status(phy_dev);
> @@ -2564,10 +2561,9 @@ static int emac_mdio_read_link(struct mii_phy *phy)
>   static int emac_mdio_init_phy(struct mii_phy *phy)
>   {
>   	struct net_device *ndev = phy->dev;
> -	struct emac_instance *dev = netdev_priv(ndev);
>   
> -	phy_start(dev->phy_dev);
> -	return phy_init_hw(dev->phy_dev);
> +	phy_start(ndev->phydev);
> +	return phy_init_hw(ndev->phydev);
>   }
>   
>   static const struct mii_phy_ops emac_dt_mdio_phy_ops = {
> @@ -2622,26 +2618,28 @@ static int emac_dt_mdio_probe(struct emac_instance *dev)
>   static int emac_dt_phy_connect(struct emac_instance *dev,
>   			       struct device_node *phy_handle)
>   {
> +	struct phy_device *phy_dev;
> +
>   	dev->phy.def = devm_kzalloc(&dev->ofdev->dev, sizeof(*dev->phy.def),
>   				    GFP_KERNEL);
>   	if (!dev->phy.def)
>   		return -ENOMEM;
>   
> -	dev->phy_dev = of_phy_connect(dev->ndev, phy_handle, &emac_adjust_link,
> +	phy_dev = of_phy_connect(dev->ndev, phy_handle, &emac_adjust_link,
>   				      0, dev->phy_mode);
> -	if (!dev->phy_dev) {
> +	if (!phy_dev) {
>   		dev_err(&dev->ofdev->dev, "failed to connect to PHY.\n");
>   		return -ENODEV;
>   	}
>   
> -	dev->phy.def->phy_id = dev->phy_dev->drv->phy_id;
> -	dev->phy.def->phy_id_mask = dev->phy_dev->drv->phy_id_mask;
> -	dev->phy.def->name = dev->phy_dev->drv->name;
> +	dev->phy.def->phy_id = phy_dev->drv->phy_id;
> +	dev->phy.def->phy_id_mask = phy_dev->drv->phy_id_mask;
> +	dev->phy.def->name = phy_dev->drv->name;
>   	dev->phy.def->ops = &emac_dt_mdio_phy_ops;
>   	ethtool_convert_link_mode_to_legacy_u32(&dev->phy.features,
> -						dev->phy_dev->supported);
> -	dev->phy.address = dev->phy_dev->mdio.addr;
> -	dev->phy.mode = dev->phy_dev->interface;
> +						phy_dev->supported);
> +	dev->phy.address = phy_dev->mdio.addr;
> +	dev->phy.mode = phy_dev->interface;
>   	return 0;
>   }
>   
> @@ -2695,11 +2693,11 @@ static int emac_init_phy(struct emac_instance *dev)
>   				return res;
>   
>   			res = of_phy_register_fixed_link(np);
> -			dev->phy_dev = of_phy_find_device(np);
> -			if (res || !dev->phy_dev)
> +			ndev->phydev = of_phy_find_device(np);
> +			if (res || !ndev->phydev)
>   				return res ? res : -EINVAL;
>   			emac_adjust_link(dev->ndev);
> -			put_device(&dev->phy_dev->mdio.dev);
> +			put_device(&ndev->phydev->mdio.dev);
>   		}
>   		return 0;
>   	}
> @@ -3254,9 +3252,6 @@ static void emac_remove(struct platform_device *ofdev)
>   	if (emac_has_feature(dev, EMAC_FTR_HAS_ZMII))
>   		zmii_detach(dev->zmii_dev, dev->zmii_port);
>   
> -	if (dev->phy_dev)
> -		phy_disconnect(dev->phy_dev);
> -

Hi,

I guess that this call was to balance the of_phy_connect() from 
emac_dt_phy_connect().

Is it ok to just remove this phy_disconnect()?

CJ

>   	busy_phy_map &= ~(1 << dev->phy.address);
>   	DBG(dev, "busy_phy_map now %#x" NL, busy_phy_map);
>   
> diff --git a/drivers/net/ethernet/ibm/emac/core.h b/drivers/net/ethernet/ibm/emac/core.h
> index f4bd4cd8ac4a..b820a4f6e8c7 100644
> --- a/drivers/net/ethernet/ibm/emac/core.h
> +++ b/drivers/net/ethernet/ibm/emac/core.h
> @@ -188,9 +188,6 @@ struct emac_instance {
>   	struct emac_instance		*mdio_instance;
>   	struct mutex			mdio_lock;
>   
> -	/* Device-tree based phy configuration */
> -	struct phy_device		*phy_dev;
> -
>   	/* ZMII infos if any */
>   	u32				zmii_ph;
>   	u32				zmii_port;


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

* Re: [PATCHv3 net-next 6/9] net: ibm: emac: use netdev's phydev directly
  2024-09-07 19:32   ` Christophe JAILLET
@ 2024-09-07 19:58     ` Rosen Penev
  0 siblings, 0 replies; 23+ messages in thread
From: Rosen Penev @ 2024-09-07 19:58 UTC (permalink / raw)
  To: Christophe JAILLET
  Cc: netdev, davem, edumazet, kuba, pabeni, linux-kernel,
	jacob.e.keller, horms, sd, chunkeey

On Sat, Sep 7, 2024 at 12:32 PM Christophe JAILLET
<christophe.jaillet@wanadoo.fr> wrote:
>
> Le 05/09/2024 à 22:15, Rosen Penev a écrit :
> > Avoids having to use own struct member.
> >
> > Signed-off-by: Rosen Penev <rosenp@gmail.com>
> > ---
> >   drivers/net/ethernet/ibm/emac/core.c | 47 +++++++++++++---------------
> >   drivers/net/ethernet/ibm/emac/core.h |  3 --
> >   2 files changed, 21 insertions(+), 29 deletions(-)
> >
> > diff --git a/drivers/net/ethernet/ibm/emac/core.c b/drivers/net/ethernet/ibm/emac/core.c
> > index e2abda947a51..cda368701ae4 100644
> > --- a/drivers/net/ethernet/ibm/emac/core.c
> > +++ b/drivers/net/ethernet/ibm/emac/core.c
> > @@ -2459,7 +2459,7 @@ static int emac_read_uint_prop(struct device_node *np, const char *name,
> >   static void emac_adjust_link(struct net_device *ndev)
> >   {
> >       struct emac_instance *dev = netdev_priv(ndev);
> > -     struct phy_device *phy = dev->phy_dev;
> > +     struct phy_device *phy = ndev->phydev;
> >
> >       dev->phy.autoneg = phy->autoneg;
> >       dev->phy.speed = phy->speed;
> > @@ -2510,22 +2510,20 @@ static int emac_mdio_phy_start_aneg(struct mii_phy *phy,
> >   static int emac_mdio_setup_aneg(struct mii_phy *phy, u32 advertise)
> >   {
> >       struct net_device *ndev = phy->dev;
> > -     struct emac_instance *dev = netdev_priv(ndev);
> >
> >       phy->autoneg = AUTONEG_ENABLE;
> >       phy->advertising = advertise;
> > -     return emac_mdio_phy_start_aneg(phy, dev->phy_dev);
> > +     return emac_mdio_phy_start_aneg(phy, ndev->phydev);
> >   }
> >
> >   static int emac_mdio_setup_forced(struct mii_phy *phy, int speed, int fd)
> >   {
> >       struct net_device *ndev = phy->dev;
> > -     struct emac_instance *dev = netdev_priv(ndev);
> >
> >       phy->autoneg = AUTONEG_DISABLE;
> >       phy->speed = speed;
> >       phy->duplex = fd;
> > -     return emac_mdio_phy_start_aneg(phy, dev->phy_dev);
> > +     return emac_mdio_phy_start_aneg(phy, ndev->phydev);
> >   }
> >
> >   static int emac_mdio_poll_link(struct mii_phy *phy)
> > @@ -2534,20 +2532,19 @@ static int emac_mdio_poll_link(struct mii_phy *phy)
> >       struct emac_instance *dev = netdev_priv(ndev);
> >       int res;
> >
> > -     res = phy_read_status(dev->phy_dev);
> > +     res = phy_read_status(ndev->phydev);
> >       if (res) {
> >               dev_err(&dev->ofdev->dev, "link update failed (%d).", res);
> >               return ethtool_op_get_link(ndev);
> >       }
> >
> > -     return dev->phy_dev->link;
> > +     return ndev->phydev->link;
> >   }
> >
> >   static int emac_mdio_read_link(struct mii_phy *phy)
> >   {
> >       struct net_device *ndev = phy->dev;
> > -     struct emac_instance *dev = netdev_priv(ndev);
> > -     struct phy_device *phy_dev = dev->phy_dev;
> > +     struct phy_device *phy_dev = ndev->phydev;
> >       int res;
> >
> >       res = phy_read_status(phy_dev);
> > @@ -2564,10 +2561,9 @@ static int emac_mdio_read_link(struct mii_phy *phy)
> >   static int emac_mdio_init_phy(struct mii_phy *phy)
> >   {
> >       struct net_device *ndev = phy->dev;
> > -     struct emac_instance *dev = netdev_priv(ndev);
> >
> > -     phy_start(dev->phy_dev);
> > -     return phy_init_hw(dev->phy_dev);
> > +     phy_start(ndev->phydev);
> > +     return phy_init_hw(ndev->phydev);
> >   }
> >
> >   static const struct mii_phy_ops emac_dt_mdio_phy_ops = {
> > @@ -2622,26 +2618,28 @@ static int emac_dt_mdio_probe(struct emac_instance *dev)
> >   static int emac_dt_phy_connect(struct emac_instance *dev,
> >                              struct device_node *phy_handle)
> >   {
> > +     struct phy_device *phy_dev;
> > +
> >       dev->phy.def = devm_kzalloc(&dev->ofdev->dev, sizeof(*dev->phy.def),
> >                                   GFP_KERNEL);
> >       if (!dev->phy.def)
> >               return -ENOMEM;
> >
> > -     dev->phy_dev = of_phy_connect(dev->ndev, phy_handle, &emac_adjust_link,
> > +     phy_dev = of_phy_connect(dev->ndev, phy_handle, &emac_adjust_link,
> >                                     0, dev->phy_mode);
> > -     if (!dev->phy_dev) {
> > +     if (!phy_dev) {
> >               dev_err(&dev->ofdev->dev, "failed to connect to PHY.\n");
> >               return -ENODEV;
> >       }
> >
> > -     dev->phy.def->phy_id = dev->phy_dev->drv->phy_id;
> > -     dev->phy.def->phy_id_mask = dev->phy_dev->drv->phy_id_mask;
> > -     dev->phy.def->name = dev->phy_dev->drv->name;
> > +     dev->phy.def->phy_id = phy_dev->drv->phy_id;
> > +     dev->phy.def->phy_id_mask = phy_dev->drv->phy_id_mask;
> > +     dev->phy.def->name = phy_dev->drv->name;
> >       dev->phy.def->ops = &emac_dt_mdio_phy_ops;
> >       ethtool_convert_link_mode_to_legacy_u32(&dev->phy.features,
> > -                                             dev->phy_dev->supported);
> > -     dev->phy.address = dev->phy_dev->mdio.addr;
> > -     dev->phy.mode = dev->phy_dev->interface;
> > +                                             phy_dev->supported);
> > +     dev->phy.address = phy_dev->mdio.addr;
> > +     dev->phy.mode = phy_dev->interface;
> >       return 0;
> >   }
> >
> > @@ -2695,11 +2693,11 @@ static int emac_init_phy(struct emac_instance *dev)
> >                               return res;
> >
> >                       res = of_phy_register_fixed_link(np);
> > -                     dev->phy_dev = of_phy_find_device(np);
> > -                     if (res || !dev->phy_dev)
> > +                     ndev->phydev = of_phy_find_device(np);
> > +                     if (res || !ndev->phydev)
> >                               return res ? res : -EINVAL;
> >                       emac_adjust_link(dev->ndev);
> > -                     put_device(&dev->phy_dev->mdio.dev);
> > +                     put_device(&ndev->phydev->mdio.dev);
> >               }
> >               return 0;
> >       }
> > @@ -3254,9 +3252,6 @@ static void emac_remove(struct platform_device *ofdev)
> >       if (emac_has_feature(dev, EMAC_FTR_HAS_ZMII))
> >               zmii_detach(dev->zmii_dev, dev->zmii_port);
> >
> > -     if (dev->phy_dev)
> > -             phy_disconnect(dev->phy_dev);
> > -
>
> Hi,
>
> I guess that this call was to balance the of_phy_connect() from
> emac_dt_phy_connect().
>
> Is it ok to just remove this phy_disconnect()?
I would think free or unregister_netdev handles it given that phydev
is a member of netdev.

On a separate note, A lot of drivers seem to do this in open/close as
opposed to probe/remove.
>
> CJ
>
> >       busy_phy_map &= ~(1 << dev->phy.address);
> >       DBG(dev, "busy_phy_map now %#x" NL, busy_phy_map);
> >
> > diff --git a/drivers/net/ethernet/ibm/emac/core.h b/drivers/net/ethernet/ibm/emac/core.h
> > index f4bd4cd8ac4a..b820a4f6e8c7 100644
> > --- a/drivers/net/ethernet/ibm/emac/core.h
> > +++ b/drivers/net/ethernet/ibm/emac/core.h
> > @@ -188,9 +188,6 @@ struct emac_instance {
> >       struct emac_instance            *mdio_instance;
> >       struct mutex                    mdio_lock;
> >
> > -     /* Device-tree based phy configuration */
> > -     struct phy_device               *phy_dev;
> > -
> >       /* ZMII infos if any */
> >       u32                             zmii_ph;
> >       u32                             zmii_port;
>

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

* Re: [PATCHv3 net-next 9/9] net: ibm: emac: get rid of wol_irq
  2024-09-05 20:15 ` [PATCHv3 net-next 9/9] net: ibm: emac: get rid of wol_irq Rosen Penev
  2024-09-05 21:27   ` Andrew Lunn
  2024-09-07 18:29   ` kernel test robot
@ 2024-09-07 23:11   ` kernel test robot
  2 siblings, 0 replies; 23+ messages in thread
From: kernel test robot @ 2024-09-07 23:11 UTC (permalink / raw)
  To: Rosen Penev, netdev
  Cc: llvm, oe-kbuild-all, davem, edumazet, kuba, pabeni, linux-kernel,
	jacob.e.keller, horms, sd, chunkeey

Hi Rosen,

kernel test robot noticed the following build errors:

[auto build test ERROR on net-next/main]

url:    https://github.com/intel-lab-lkp/linux/commits/Rosen-Penev/net-ibm-emac-use-devm-for-alloc_etherdev/20240906-042738
base:   net-next/main
patch link:    https://lore.kernel.org/r/20240905201506.12679-10-rosenp%40gmail.com
patch subject: [PATCHv3 net-next 9/9] net: ibm: emac: get rid of wol_irq
config: powerpc-ebony_defconfig (https://download.01.org/0day-ci/archive/20240908/202409080648.nbPtsrf6-lkp@intel.com/config)
compiler: clang version 20.0.0git (https://github.com/llvm/llvm-project 05f5a91d00b02f4369f46d076411c700755ae041)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240908/202409080648.nbPtsrf6-lkp@intel.com/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202409080648.nbPtsrf6-lkp@intel.com/

All errors (new ones prefixed by >>):

   In file included from drivers/net/ethernet/ibm/emac/core.c:28:
   In file included from include/linux/pci.h:38:
   In file included from include/linux/interrupt.h:11:
   In file included from include/linux/hardirq.h:11:
   In file included from arch/powerpc/include/asm/hardirq.h:6:
   In file included from include/linux/irq.h:20:
   In file included from include/linux/io.h:14:
   In file included from arch/powerpc/include/asm/io.h:24:
   In file included from include/linux/mm.h:2228:
   include/linux/vmstat.h:517:36: warning: arithmetic between different enumeration types ('enum node_stat_item' and 'enum lru_list') [-Wenum-enum-conversion]
     517 |         return node_stat_name(NR_LRU_BASE + lru) + 3; // skip "nr_"
         |                               ~~~~~~~~~~~ ^ ~~~
>> drivers/net/ethernet/ibm/emac/core.c:3054:8: error: use of undeclared label 'err_irq_unmap'
    3054 |                 goto err_irq_unmap;
         |                      ^
   1 warning and 1 error generated.


vim +/err_irq_unmap +3054 drivers/net/ethernet/ibm/emac/core.c

15efc02b2625f1 drivers/net/ibm_newemac/core.c       Alexander Beregalov 2009-04-09  2988  
fe17dc1e2bae85 drivers/net/ethernet/ibm/emac/core.c Bill Pemberton      2012-12-03  2989  static int emac_probe(struct platform_device *ofdev)
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  2990  {
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  2991  	struct net_device *ndev;
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  2992  	struct emac_instance *dev;
61c7a080a5a061 drivers/net/ibm_newemac/core.c       Grant Likely        2010-04-13  2993  	struct device_node *np = ofdev->dev.of_node;
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  2994  	struct device_node **blist = NULL;
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  2995  	int err, i;
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  2996  
be63c09afe9153 drivers/net/ibm_newemac/core.c       Josh Boyer          2008-04-22  2997  	/* Skip unused/unwired EMACS.  We leave the check for an unused
be63c09afe9153 drivers/net/ibm_newemac/core.c       Josh Boyer          2008-04-22  2998  	 * property here for now, but new flat device trees should set a
be63c09afe9153 drivers/net/ibm_newemac/core.c       Josh Boyer          2008-04-22  2999  	 * status property to "disabled" instead.
be63c09afe9153 drivers/net/ibm_newemac/core.c       Josh Boyer          2008-04-22  3000  	 */
1a87e641d8a50c drivers/net/ethernet/ibm/emac/core.c Rob Herring         2023-03-14  3001  	if (of_property_read_bool(np, "unused") || !of_device_is_available(np))
3d722562d73483 drivers/net/ibm_newemac/core.c       Hugh Blemings       2007-12-05  3002  		return -ENODEV;
3d722562d73483 drivers/net/ibm_newemac/core.c       Hugh Blemings       2007-12-05  3003  
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3004  	/* Find ourselves in the bootlist if we are there */
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3005  	for (i = 0; i < EMAC_BOOT_LIST_SIZE; i++)
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3006  		if (emac_boot_list[i] == np)
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3007  			blist = &emac_boot_list[i];
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3008  
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3009  	/* Allocate our net_device structure */
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3010  	err = -ENOMEM;
c7de481bca2013 drivers/net/ethernet/ibm/emac/core.c Rosen Penev         2024-09-05  3011  	ndev = devm_alloc_etherdev(&ofdev->dev, sizeof(struct emac_instance));
41de8d4cff21a2 drivers/net/ethernet/ibm/emac/core.c Joe Perches         2012-01-29  3012  	if (!ndev)
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3013  		goto err_gone;
41de8d4cff21a2 drivers/net/ethernet/ibm/emac/core.c Joe Perches         2012-01-29  3014  
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3015  	dev = netdev_priv(ndev);
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3016  	dev->ndev = ndev;
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3017  	dev->ofdev = ofdev;
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3018  	dev->blist = blist;
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3019  	SET_NETDEV_DEV(ndev, &ofdev->dev);
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3020  
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3021  	/* Initialize some embedded data structures */
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3022  	mutex_init(&dev->mdio_lock);
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3023  	mutex_init(&dev->link_lock);
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3024  	spin_lock_init(&dev->lock);
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3025  	INIT_WORK(&dev->reset_work, emac_reset_work);
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3026  
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3027  	/* Init various config data based on device-tree */
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3028  	err = emac_init_config(dev);
138b57f0f89387 drivers/net/ethernet/ibm/emac/core.c Christophe Jaillet  2017-08-20  3029  	if (err)
c7de481bca2013 drivers/net/ethernet/ibm/emac/core.c Rosen Penev         2024-09-05  3030  		goto err_gone;
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3031  
cabb2424d4d5d4 drivers/net/ethernet/ibm/emac/core.c Rosen Penev         2024-09-05  3032  	/* Get interrupts. EMAC irq is mandatory */
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3033  	dev->emac_irq = irq_of_parse_and_map(np, 0);
99c1790e5bbd31 drivers/net/ethernet/ibm/emac/core.c Michael Ellerman    2016-09-10  3034  	if (!dev->emac_irq) {
f7ce91038d5278 drivers/net/ethernet/ibm/emac/core.c Rob Herring         2017-07-18  3035  		printk(KERN_ERR "%pOF: Can't map main interrupt\n", np);
138b57f0f89387 drivers/net/ethernet/ibm/emac/core.c Christophe Jaillet  2017-08-20  3036  		err = -ENODEV;
c7de481bca2013 drivers/net/ethernet/ibm/emac/core.c Rosen Penev         2024-09-05  3037  		goto err_gone;
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3038  	}
55b3f1525a5443 drivers/net/ethernet/ibm/emac/core.c Rosen Penev         2024-09-05  3039  
55b3f1525a5443 drivers/net/ethernet/ibm/emac/core.c Rosen Penev         2024-09-05  3040  	/* Setup error IRQ handler */
55b3f1525a5443 drivers/net/ethernet/ibm/emac/core.c Rosen Penev         2024-09-05  3041  	err = devm_request_irq(&ofdev->dev, dev->emac_irq, emac_irq, 0, "EMAC", dev);
55b3f1525a5443 drivers/net/ethernet/ibm/emac/core.c Rosen Penev         2024-09-05  3042  	if (err) {
55b3f1525a5443 drivers/net/ethernet/ibm/emac/core.c Rosen Penev         2024-09-05  3043  		dev_err_probe(&ofdev->dev, err, "failed to request IRQ %d", dev->emac_irq);
55b3f1525a5443 drivers/net/ethernet/ibm/emac/core.c Rosen Penev         2024-09-05  3044  		goto err_gone;
55b3f1525a5443 drivers/net/ethernet/ibm/emac/core.c Rosen Penev         2024-09-05  3045  	}
55b3f1525a5443 drivers/net/ethernet/ibm/emac/core.c Rosen Penev         2024-09-05  3046  
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3047  	ndev->irq = dev->emac_irq;
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3048  
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3049  	/* Map EMAC regs */
138b57f0f89387 drivers/net/ethernet/ibm/emac/core.c Christophe Jaillet  2017-08-20  3050  	// TODO : platform_get_resource() and devm_ioremap_resource()
154cc24d587dd8 drivers/net/ethernet/ibm/emac/core.c Rosen Penev         2024-09-05  3051  	dev->emacp = devm_of_iomap(&ofdev->dev, np, 0, NULL);
154cc24d587dd8 drivers/net/ethernet/ibm/emac/core.c Rosen Penev         2024-09-05  3052  	if (!dev->emacp) {
154cc24d587dd8 drivers/net/ethernet/ibm/emac/core.c Rosen Penev         2024-09-05  3053  		err = dev_err_probe(&ofdev->dev, -ENOMEM, "can't map device registers");
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23 @3054  		goto err_irq_unmap;
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3055  	}
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3056  
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3057  	/* Wait for dependent devices */
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3058  	err = emac_wait_deps(dev);
b941327b6eb37f drivers/net/ethernet/ibm/emac/core.c Rosen Penev         2024-09-05  3059  	if (err)
154cc24d587dd8 drivers/net/ethernet/ibm/emac/core.c Rosen Penev         2024-09-05  3060  		goto err_irq_unmap;
bc353832565635 drivers/net/ethernet/ibm/emac/core.c Jingoo Han          2013-09-02  3061  	dev->mal = platform_get_drvdata(dev->mal_dev);
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3062  	if (dev->mdio_dev != NULL)
bc353832565635 drivers/net/ethernet/ibm/emac/core.c Jingoo Han          2013-09-02  3063  		dev->mdio_instance = platform_get_drvdata(dev->mdio_dev);
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3064  
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3065  	/* Register with MAL */
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3066  	dev->commac.ops = &emac_commac_ops;
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3067  	dev->commac.dev = dev;
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3068  	dev->commac.tx_chan_mask = MAL_CHAN_MASK(dev->mal_tx_chan);
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3069  	dev->commac.rx_chan_mask = MAL_CHAN_MASK(dev->mal_rx_chan);
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3070  	err = mal_register_commac(dev->mal, &dev->commac);
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3071  	if (err) {
f7ce91038d5278 drivers/net/ethernet/ibm/emac/core.c Rob Herring         2017-07-18  3072  		printk(KERN_ERR "%pOF: failed to register with mal %pOF!\n",
f7ce91038d5278 drivers/net/ethernet/ibm/emac/core.c Rob Herring         2017-07-18  3073  		       np, dev->mal_dev->dev.of_node);
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3074  		goto err_rel_deps;
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3075  	}
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3076  	dev->rx_skb_size = emac_rx_skb_size(ndev->mtu);
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3077  	dev->rx_sync_size = emac_rx_sync_size(ndev->mtu);
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3078  
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3079  	/* Get pointers to BD rings */
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3080  	dev->tx_desc =
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3081  	    dev->mal->bd_virt + mal_tx_bd_offset(dev->mal, dev->mal_tx_chan);
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3082  	dev->rx_desc =
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3083  	    dev->mal->bd_virt + mal_rx_bd_offset(dev->mal, dev->mal_rx_chan);
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3084  
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3085  	DBG(dev, "tx_desc %p" NL, dev->tx_desc);
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3086  	DBG(dev, "rx_desc %p" NL, dev->rx_desc);
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3087  
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3088  	/* Clean rings */
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3089  	memset(dev->tx_desc, 0, NUM_TX_BUFF * sizeof(struct mal_descriptor));
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3090  	memset(dev->rx_desc, 0, NUM_RX_BUFF * sizeof(struct mal_descriptor));
ab9b30cc3ec868 drivers/net/ibm_newemac/core.c       Sathya Narayanan    2008-07-01  3091  	memset(dev->tx_skb, 0, NUM_TX_BUFF * sizeof(struct sk_buff *));
ab9b30cc3ec868 drivers/net/ibm_newemac/core.c       Sathya Narayanan    2008-07-01  3092  	memset(dev->rx_skb, 0, NUM_RX_BUFF * sizeof(struct sk_buff *));
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3093  
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3094  	/* Attach to ZMII, if needed */
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3095  	if (emac_has_feature(dev, EMAC_FTR_HAS_ZMII) &&
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3096  	    (err = zmii_attach(dev->zmii_dev, dev->zmii_port, &dev->phy_mode)) != 0)
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3097  		goto err_unreg_commac;
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3098  
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3099  	/* Attach to RGMII, if needed */
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3100  	if (emac_has_feature(dev, EMAC_FTR_HAS_RGMII) &&
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3101  	    (err = rgmii_attach(dev->rgmii_dev, dev->rgmii_port, dev->phy_mode)) != 0)
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3102  		goto err_detach_zmii;
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3103  
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3104  	/* Attach to TAH, if needed */
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3105  	if (emac_has_feature(dev, EMAC_FTR_HAS_TAH) &&
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3106  	    (err = tah_attach(dev->tah_dev, dev->tah_port)) != 0)
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3107  		goto err_detach_rgmii;
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3108  
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3109  	/* Set some link defaults before we can find out real parameters */
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3110  	dev->phy.speed = SPEED_100;
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3111  	dev->phy.duplex = DUPLEX_FULL;
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3112  	dev->phy.autoneg = AUTONEG_DISABLE;
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3113  	dev->phy.pause = dev->phy.asym_pause = 0;
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3114  	dev->stop_timeout = STOP_TIMEOUT_100;
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3115  	INIT_DELAYED_WORK(&dev->link_work, emac_link_timer);
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3116  
ae5d33723e3253 drivers/net/ethernet/ibm/emac/core.c Duc Dang            2012-03-05  3117  	/* Some SoCs like APM821xx does not support Half Duplex mode. */
ae5d33723e3253 drivers/net/ethernet/ibm/emac/core.c Duc Dang            2012-03-05  3118  	if (emac_has_feature(dev, EMAC_FTR_APM821XX_NO_HALF_DUPLEX)) {
ae5d33723e3253 drivers/net/ethernet/ibm/emac/core.c Duc Dang            2012-03-05  3119  		dev->phy_feat_exc = (SUPPORTED_1000baseT_Half |
ae5d33723e3253 drivers/net/ethernet/ibm/emac/core.c Duc Dang            2012-03-05  3120  				     SUPPORTED_100baseT_Half |
ae5d33723e3253 drivers/net/ethernet/ibm/emac/core.c Duc Dang            2012-03-05  3121  				     SUPPORTED_10baseT_Half);
ae5d33723e3253 drivers/net/ethernet/ibm/emac/core.c Duc Dang            2012-03-05  3122  	}
ae5d33723e3253 drivers/net/ethernet/ibm/emac/core.c Duc Dang            2012-03-05  3123  
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3124  	/* Find PHY if any */
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3125  	err = emac_init_phy(dev);
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3126  	if (err != 0)
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3127  		goto err_detach_tah;
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3128  
5e4011e2b8032c drivers/net/ibm_newemac/core.c       Michał Mirosław     2011-04-17  3129  	if (dev->tah_dev) {
5e4011e2b8032c drivers/net/ibm_newemac/core.c       Michał Mirosław     2011-04-17  3130  		ndev->hw_features = NETIF_F_IP_CSUM | NETIF_F_SG;
5e4011e2b8032c drivers/net/ibm_newemac/core.c       Michał Mirosław     2011-04-17  3131  		ndev->features |= ndev->hw_features | NETIF_F_RXCSUM;
5e4011e2b8032c drivers/net/ibm_newemac/core.c       Michał Mirosław     2011-04-17  3132  	}
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3133  	ndev->watchdog_timeo = 5 * HZ;
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3134  	if (emac_phy_supports_gige(dev->phy_mode)) {
15efc02b2625f1 drivers/net/ibm_newemac/core.c       Alexander Beregalov 2009-04-09  3135  		ndev->netdev_ops = &emac_gige_netdev_ops;
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3136  		dev->commac.ops = &emac_commac_sg_ops;
15efc02b2625f1 drivers/net/ibm_newemac/core.c       Alexander Beregalov 2009-04-09  3137  	} else
15efc02b2625f1 drivers/net/ibm_newemac/core.c       Alexander Beregalov 2009-04-09  3138  		ndev->netdev_ops = &emac_netdev_ops;
7ad24ea4bf620a drivers/net/ethernet/ibm/emac/core.c Wilfried Klaebe     2014-05-11  3139  	ndev->ethtool_ops = &emac_ethtool_ops;
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3140  
3d5d96acfeb9dd drivers/net/ethernet/ibm/emac/core.c Jarod Wilson        2016-10-17  3141  	/* MTU range: 46 - 1500 or whatever is in OF */
3d5d96acfeb9dd drivers/net/ethernet/ibm/emac/core.c Jarod Wilson        2016-10-17  3142  	ndev->min_mtu = EMAC_MIN_MTU;
3d5d96acfeb9dd drivers/net/ethernet/ibm/emac/core.c Jarod Wilson        2016-10-17  3143  	ndev->max_mtu = dev->max_mtu;
3d5d96acfeb9dd drivers/net/ethernet/ibm/emac/core.c Jarod Wilson        2016-10-17  3144  
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3145  	netif_carrier_off(ndev);
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3146  
19245845d17958 drivers/net/ethernet/ibm/emac/core.c Rosen Penev         2024-09-05  3147  	err = devm_register_netdev(&ofdev->dev, ndev);
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3148  	if (err) {
f7ce91038d5278 drivers/net/ethernet/ibm/emac/core.c Rob Herring         2017-07-18  3149  		printk(KERN_ERR "%pOF: failed to register net device (%d)!\n",
f7ce91038d5278 drivers/net/ethernet/ibm/emac/core.c Rob Herring         2017-07-18  3150  		       np, err);
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3151  		goto err_detach_tah;
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3152  	}
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3153  
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3154  	/* Set our drvdata last as we don't want them visible until we are
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3155  	 * fully initialized
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3156  	 */
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3157  	wmb();
bc353832565635 drivers/net/ethernet/ibm/emac/core.c Jingoo Han          2013-09-02  3158  	platform_set_drvdata(ofdev, dev);
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3159  
f7ce91038d5278 drivers/net/ethernet/ibm/emac/core.c Rob Herring         2017-07-18  3160  	printk(KERN_INFO "%s: EMAC-%d %pOF, MAC %pM\n",
f7ce91038d5278 drivers/net/ethernet/ibm/emac/core.c Rob Herring         2017-07-18  3161  	       ndev->name, dev->cell_index, np, ndev->dev_addr);
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3162  
78b69921a12568 drivers/net/ethernet/ibm/emac/core.c Christian Lamparter 2017-12-20  3163  	if (dev->phy_mode == PHY_INTERFACE_MODE_SGMII)
9e3cb29497561c drivers/net/ibm_newemac/core.c       Victor Gallardo     2008-10-01  3164  		printk(KERN_NOTICE "%s: in SGMII mode\n", ndev->name);
9e3cb29497561c drivers/net/ibm_newemac/core.c       Victor Gallardo     2008-10-01  3165  
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3166  	if (dev->phy.address >= 0)
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3167  		printk("%s: found %s PHY (0x%02x)\n", ndev->name,
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3168  		       dev->phy.def->name, dev->phy.address);
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3169  
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3170  	/* Life is good */
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3171  	return 0;
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3172  
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3173  	/* I have a bad feeling about this ... */
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3174  
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3175   err_detach_tah:
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3176  	if (emac_has_feature(dev, EMAC_FTR_HAS_TAH))
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3177  		tah_detach(dev->tah_dev, dev->tah_port);
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3178   err_detach_rgmii:
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3179  	if (emac_has_feature(dev, EMAC_FTR_HAS_RGMII))
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3180  		rgmii_detach(dev->rgmii_dev, dev->rgmii_port);
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3181   err_detach_zmii:
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3182  	if (emac_has_feature(dev, EMAC_FTR_HAS_ZMII))
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3183  		zmii_detach(dev->zmii_dev, dev->zmii_port);
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3184   err_unreg_commac:
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3185  	mal_unregister_commac(dev->mal, &dev->commac);
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3186   err_rel_deps:
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3187  	emac_put_deps(dev);
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3188   err_gone:
b941327b6eb37f drivers/net/ethernet/ibm/emac/core.c Rosen Penev         2024-09-05  3189  	if (blist)
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3190  		*blist = NULL;
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3191  	return err;
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3192  }
1d3bb996481e11 drivers/net/ibm_newemac/core.c       David Gibson        2007-08-23  3193  

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki

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

end of thread, other threads:[~2024-09-07 23:12 UTC | newest]

Thread overview: 23+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-09-05 20:14 [PATCHv3 net-next 0/9] net: ibm: emac: modernize a bit Rosen Penev
2024-09-05 20:14 ` [PATCHv3 net-next 1/9] net: ibm: emac: use devm for alloc_etherdev Rosen Penev
2024-09-05 21:16   ` Andrew Lunn
2024-09-05 20:14 ` [PATCHv3 net-next 2/9] net: ibm: emac: manage emac_irq with devm Rosen Penev
2024-09-05 21:17   ` Andrew Lunn
2024-09-05 20:15 ` [PATCHv3 net-next 3/9] net: ibm: emac: use devm for of_iomap Rosen Penev
2024-09-05 21:17   ` Andrew Lunn
2024-09-05 20:15 ` [PATCHv3 net-next 4/9] net: ibm: emac: remove mii_bus with devm Rosen Penev
2024-09-05 21:19   ` Andrew Lunn
2024-09-05 20:15 ` [PATCHv3 net-next 5/9] net: ibm: emac: use devm for register_netdev Rosen Penev
2024-09-05 21:19   ` Andrew Lunn
2024-09-05 20:15 ` [PATCHv3 net-next 6/9] net: ibm: emac: use netdev's phydev directly Rosen Penev
2024-09-05 21:21   ` Andrew Lunn
2024-09-07 19:32   ` Christophe JAILLET
2024-09-07 19:58     ` Rosen Penev
2024-09-05 20:15 ` [PATCHv3 net-next 7/9] net: ibm: emac: replace of_get_property Rosen Penev
2024-09-05 21:22   ` Andrew Lunn
2024-09-05 20:15 ` [PATCHv3 net-next 8/9] net: ibm: emac: remove all waiting code Rosen Penev
2024-09-05 20:15 ` [PATCHv3 net-next 9/9] net: ibm: emac: get rid of wol_irq Rosen Penev
2024-09-05 21:27   ` Andrew Lunn
2024-09-05 22:28     ` Rosen Penev
2024-09-07 18:29   ` kernel test robot
2024-09-07 23:11   ` kernel test robot

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).