netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v2 1/2] dt-bindings: net: lpc-eth: document optional properties
@ 2019-10-17  9:47 Alexandre Belloni
  2019-10-17  9:47 ` [PATCH v2 2/2] net: lpc_eth: parse phy nodes from device tree Alexandre Belloni
  2019-10-17 16:18 ` [PATCH v2 1/2] dt-bindings: net: lpc-eth: document optional properties Andrew Lunn
  0 siblings, 2 replies; 5+ messages in thread
From: Alexandre Belloni @ 2019-10-17  9:47 UTC (permalink / raw)
  To: David S . Miller
  Cc: Andrew Lunn, Vladimir Zapolskiy, Sylvain Lemieux, netdev,
	linux-kernel, linux-arm-kernel, Alexandre Belloni

The Ethernet controller is also an mdio controller, to be able to parse
children (phys for example), #address-cells and #size-cells must be
present.

Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
---
 Documentation/devicetree/bindings/net/lpc-eth.txt | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/Documentation/devicetree/bindings/net/lpc-eth.txt b/Documentation/devicetree/bindings/net/lpc-eth.txt
index b92e927808b6..cfe0e5991d46 100644
--- a/Documentation/devicetree/bindings/net/lpc-eth.txt
+++ b/Documentation/devicetree/bindings/net/lpc-eth.txt
@@ -10,6 +10,11 @@ Optional properties:
   absent, "rmii" is assumed.
 - use-iram: Use LPC32xx internal SRAM (IRAM) for DMA buffering
 
+Optional subnodes:
+- mdio : specifies the mdio bus, used as a container for phy nodes according to
+  phy.txt in the same directory
+
+
 Example:
 
 	mac: ethernet@31060000 {
-- 
2.21.0


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

* [PATCH v2 2/2] net: lpc_eth: parse phy nodes from device tree
  2019-10-17  9:47 [PATCH v2 1/2] dt-bindings: net: lpc-eth: document optional properties Alexandre Belloni
@ 2019-10-17  9:47 ` Alexandre Belloni
  2019-10-17 16:22   ` Andrew Lunn
  2019-10-17 18:11   ` David Miller
  2019-10-17 16:18 ` [PATCH v2 1/2] dt-bindings: net: lpc-eth: document optional properties Andrew Lunn
  1 sibling, 2 replies; 5+ messages in thread
From: Alexandre Belloni @ 2019-10-17  9:47 UTC (permalink / raw)
  To: David S . Miller
  Cc: Andrew Lunn, Vladimir Zapolskiy, Sylvain Lemieux, netdev,
	linux-kernel, linux-arm-kernel, Alexandre Belloni

When connected to a micrel phy, phy_find_first doesn't work properly
because the first phy found is on address 0, the broadcast address but, the
first thing the phy driver is doing is disabling this broadcast address.
The phy is then available only on address 1 but the mdio driver doesn't
know about it.

Instead, register the mdio bus using of_mdiobus_register and try to find
the phy description in device tree before falling back to phy_find_first.

This ultimately also allows to describe the interrupt the phy is connected
to.

Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>
---

Changes in v2:
 - move the phy decription in the mdio subnode.

 drivers/net/ethernet/nxp/lpc_eth.c | 28 ++++++++++++++++++++--------
 1 file changed, 20 insertions(+), 8 deletions(-)

diff --git a/drivers/net/ethernet/nxp/lpc_eth.c b/drivers/net/ethernet/nxp/lpc_eth.c
index 89d17399fb5a..a2cf5da398f3 100644
--- a/drivers/net/ethernet/nxp/lpc_eth.c
+++ b/drivers/net/ethernet/nxp/lpc_eth.c
@@ -23,6 +23,7 @@
 #include <linux/crc32.h>
 #include <linux/etherdevice.h>
 #include <linux/module.h>
+#include <linux/of_mdio.h>
 #include <linux/of_net.h>
 #include <linux/phy.h>
 #include <linux/platform_device.h>
@@ -402,6 +403,7 @@ struct rx_status_t {
 struct netdata_local {
 	struct platform_device	*pdev;
 	struct net_device	*ndev;
+	struct device_node	*phy_node;
 	spinlock_t		lock;
 	void __iomem		*net_base;
 	u32			msg_enable;
@@ -760,22 +762,26 @@ static void lpc_handle_link_change(struct net_device *ndev)
 static int lpc_mii_probe(struct net_device *ndev)
 {
 	struct netdata_local *pldat = netdev_priv(ndev);
-	struct phy_device *phydev = phy_find_first(pldat->mii_bus);
-
-	if (!phydev) {
-		netdev_err(ndev, "no PHY found\n");
-		return -ENODEV;
-	}
+	struct phy_device *phydev;
 
 	/* Attach to the PHY */
 	if (lpc_phy_interface_mode(&pldat->pdev->dev) == PHY_INTERFACE_MODE_MII)
 		netdev_info(ndev, "using MII interface\n");
 	else
 		netdev_info(ndev, "using RMII interface\n");
+
+	if (pldat->phy_node)
+		phydev =  of_phy_find_device(pldat->phy_node);
+	else
+		phydev = phy_find_first(pldat->mii_bus);
+	if (!phydev) {
+		netdev_err(ndev, "no PHY found\n");
+		return -ENODEV;
+	}
+
 	phydev = phy_connect(ndev, phydev_name(phydev),
 			     &lpc_handle_link_change,
 			     lpc_phy_interface_mode(&pldat->pdev->dev));
-
 	if (IS_ERR(phydev)) {
 		netdev_err(ndev, "Could not attach to PHY\n");
 		return PTR_ERR(phydev);
@@ -794,6 +800,7 @@ static int lpc_mii_probe(struct net_device *ndev)
 
 static int lpc_mii_init(struct netdata_local *pldat)
 {
+	struct device_node *node;
 	int err = -ENXIO;
 
 	pldat->mii_bus = mdiobus_alloc();
@@ -823,7 +830,10 @@ static int lpc_mii_init(struct netdata_local *pldat)
 
 	platform_set_drvdata(pldat->pdev, pldat->mii_bus);
 
-	if (mdiobus_register(pldat->mii_bus))
+	node = of_get_child_by_name(pldat->pdev->dev.of_node, "mdio");
+	err = of_mdiobus_register(pldat->mii_bus, node);
+	of_node_put(node);
+	if (err)
 		goto err_out_unregister_bus;
 
 	if (lpc_mii_probe(pldat->ndev) != 0)
@@ -1363,6 +1373,8 @@ static int lpc_eth_drv_probe(struct platform_device *pdev)
 	netdev_dbg(ndev, "DMA buffer V address :0x%p\n",
 			pldat->dma_buff_base_v);
 
+	pldat->phy_node = of_parse_phandle(np, "phy-handle", 0);
+
 	/* Get MAC address from current HW setting (POR state is all zeros) */
 	__lpc_get_mac(pldat, ndev->dev_addr);
 
-- 
2.21.0


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

* Re: [PATCH v2 1/2] dt-bindings: net: lpc-eth: document optional properties
  2019-10-17  9:47 [PATCH v2 1/2] dt-bindings: net: lpc-eth: document optional properties Alexandre Belloni
  2019-10-17  9:47 ` [PATCH v2 2/2] net: lpc_eth: parse phy nodes from device tree Alexandre Belloni
@ 2019-10-17 16:18 ` Andrew Lunn
  1 sibling, 0 replies; 5+ messages in thread
From: Andrew Lunn @ 2019-10-17 16:18 UTC (permalink / raw)
  To: Alexandre Belloni
  Cc: David S . Miller, Vladimir Zapolskiy, Sylvain Lemieux, netdev,
	linux-kernel, linux-arm-kernel

On Thu, Oct 17, 2019 at 11:47:56AM +0200, Alexandre Belloni wrote:
> The Ethernet controller is also an mdio controller, to be able to parse
> children (phys for example), #address-cells and #size-cells must be
> present.
> 
> Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>

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

    Andrew


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

* Re: [PATCH v2 2/2] net: lpc_eth: parse phy nodes from device tree
  2019-10-17  9:47 ` [PATCH v2 2/2] net: lpc_eth: parse phy nodes from device tree Alexandre Belloni
@ 2019-10-17 16:22   ` Andrew Lunn
  2019-10-17 18:11   ` David Miller
  1 sibling, 0 replies; 5+ messages in thread
From: Andrew Lunn @ 2019-10-17 16:22 UTC (permalink / raw)
  To: Alexandre Belloni
  Cc: David S . Miller, Vladimir Zapolskiy, Sylvain Lemieux, netdev,
	linux-kernel, linux-arm-kernel

On Thu, Oct 17, 2019 at 11:47:57AM +0200, Alexandre Belloni wrote:
> When connected to a micrel phy, phy_find_first doesn't work properly
> because the first phy found is on address 0, the broadcast address but, the
> first thing the phy driver is doing is disabling this broadcast address.
> The phy is then available only on address 1 but the mdio driver doesn't
> know about it.
> 
> Instead, register the mdio bus using of_mdiobus_register and try to find
> the phy description in device tree before falling back to phy_find_first.
> 
> This ultimately also allows to describe the interrupt the phy is connected
> to.
> 
> Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>

Hi Alexandre

It is normal to have a cover note for a patch series.

Otherwise:

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

    Andrew

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

* Re: [PATCH v2 2/2] net: lpc_eth: parse phy nodes from device tree
  2019-10-17  9:47 ` [PATCH v2 2/2] net: lpc_eth: parse phy nodes from device tree Alexandre Belloni
  2019-10-17 16:22   ` Andrew Lunn
@ 2019-10-17 18:11   ` David Miller
  1 sibling, 0 replies; 5+ messages in thread
From: David Miller @ 2019-10-17 18:11 UTC (permalink / raw)
  To: alexandre.belloni
  Cc: andrew, vz, slemieux.tyco, netdev, linux-kernel, linux-arm-kernel

From: Alexandre Belloni <alexandre.belloni@bootlin.com>
Date: Thu, 17 Oct 2019 11:47:57 +0200

> When connected to a micrel phy, phy_find_first doesn't work properly
> because the first phy found is on address 0, the broadcast address but, the
> first thing the phy driver is doing is disabling this broadcast address.
> The phy is then available only on address 1 but the mdio driver doesn't
> know about it.
> 
> Instead, register the mdio bus using of_mdiobus_register and try to find
> the phy description in device tree before falling back to phy_find_first.
> 
> This ultimately also allows to describe the interrupt the phy is connected
> to.
> 
> Signed-off-by: Alexandre Belloni <alexandre.belloni@bootlin.com>

You need to respin this series because this patch doesn't apply to any of
the networking trees.

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

end of thread, other threads:[~2019-10-17 18:11 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-10-17  9:47 [PATCH v2 1/2] dt-bindings: net: lpc-eth: document optional properties Alexandre Belloni
2019-10-17  9:47 ` [PATCH v2 2/2] net: lpc_eth: parse phy nodes from device tree Alexandre Belloni
2019-10-17 16:22   ` Andrew Lunn
2019-10-17 18:11   ` David Miller
2019-10-17 16:18 ` [PATCH v2 1/2] dt-bindings: net: lpc-eth: document optional properties Andrew Lunn

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).