From: nicolas.ferre@atmel.com (Nicolas Ferre)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH v3 1/2] net/cadence/macb: add support for dt phy definition
Date: Tue, 27 Aug 2013 09:58:17 +0200 [thread overview]
Message-ID: <521C5C19.5070905@atmel.com> (raw)
In-Reply-To: <1377589070-3722-1-git-send-email-b.brezillon@overkiz.com>
On 27/08/2013 09:37, Boris BREZILLON :
> The macb driver only handle PHY description through platform_data
> (macb_platform_data).
> Thus, when using dt you cannot define phy properties like phy address or
> phy irq pin.
>
> This patch makes use of the of_mdiobus_register to add support for
> phy device definition using dt.
> A fallback to the autoscan procedure is added in case there is no phy
> devices defined in dt.
>
> Signed-off-by: Boris BREZILLON <b.brezillon@overkiz.com>
Acked-by: Nicolas Ferre <nicolas.ferre@atmel.com>
> ---
> drivers/net/ethernet/cadence/macb.c | 48 +++++++++++++++++++++++++++--------
> 1 file changed, 38 insertions(+), 10 deletions(-)
>
> diff --git a/drivers/net/ethernet/cadence/macb.c b/drivers/net/ethernet/cadence/macb.c
> index e866608..393afeb 100644
> --- a/drivers/net/ethernet/cadence/macb.c
> +++ b/drivers/net/ethernet/cadence/macb.c
> @@ -27,6 +27,7 @@
> #include <linux/phy.h>
> #include <linux/of.h>
> #include <linux/of_device.h>
> +#include <linux/of_mdio.h>
> #include <linux/of_net.h>
> #include <linux/pinctrl/consumer.h>
>
> @@ -275,7 +276,7 @@ static int macb_mii_probe(struct net_device *dev)
> phydev = phy_find_first(bp->mii_bus);
> if (!phydev) {
> netdev_err(dev, "no PHY found\n");
> - return -1;
> + return -ENXIO;
> }
>
> pdata = dev_get_platdata(&bp->pdev->dev);
> @@ -314,6 +315,7 @@ static int macb_mii_probe(struct net_device *dev)
> int macb_mii_init(struct macb *bp)
> {
> struct macb_platform_data *pdata;
> + struct device_node *np;
> int err = -ENXIO, i;
>
> /* Enable management port */
> @@ -335,26 +337,52 @@ int macb_mii_init(struct macb *bp)
> bp->mii_bus->parent = &bp->dev->dev;
> pdata = bp->pdev->dev.platform_data;
>
> - if (pdata)
> - bp->mii_bus->phy_mask = pdata->phy_mask;
> -
> bp->mii_bus->irq = kmalloc(sizeof(int)*PHY_MAX_ADDR, GFP_KERNEL);
> if (!bp->mii_bus->irq) {
> err = -ENOMEM;
> goto err_out_free_mdiobus;
> }
>
> - for (i = 0; i < PHY_MAX_ADDR; i++)
> - bp->mii_bus->irq[i] = PHY_POLL;
> -
> dev_set_drvdata(&bp->dev->dev, bp->mii_bus);
>
> - if (mdiobus_register(bp->mii_bus))
> + np = bp->pdev->dev.of_node;
> + if (np) {
> + /* try dt phy registration */
> + err = of_mdiobus_register(bp->mii_bus, np);
> +
> + /* fallback to standard phy registration if no phy were
> + * found during dt phy registration
> + */
> + if (!err && !phy_find_first(bp->mii_bus)) {
> + for (i = 0; i < PHY_MAX_ADDR; i++) {
> + struct phy_device *phydev;
> +
> + phydev = mdiobus_scan(bp->mii_bus, i);
> + if (IS_ERR(phydev)) {
> + err = PTR_ERR(phydev);
> + break;
> + }
> + }
> +
> + if (err)
> + goto err_out_unregister_bus;
> + }
> + } else {
> + for (i = 0; i < PHY_MAX_ADDR; i++)
> + bp->mii_bus->irq[i] = PHY_POLL;
> +
> + if (pdata)
> + bp->mii_bus->phy_mask = pdata->phy_mask;
> +
> + err = mdiobus_register(bp->mii_bus);
> + }
> +
> + if (err)
> goto err_out_free_mdio_irq;
>
> - if (macb_mii_probe(bp->dev) != 0) {
> + err = macb_mii_probe(bp->dev);
> + if (err)
> goto err_out_unregister_bus;
> - }
>
> return 0;
>
>
--
Nicolas Ferre
WARNING: multiple messages have this Message-ID (diff)
From: Nicolas Ferre <nicolas.ferre@atmel.com>
To: Boris BREZILLON <b.brezillon@overkiz.com>
Cc: Rob Herring <rob.herring@calxeda.com>,
Pawel Moll <pawel.moll@arm.com>,
Mark Rutland <mark.rutland@arm.com>,
Stephen Warren <swarren@wwwdotorg.org>,
Ian Campbell <ian.campbell@citrix.com>,
Russell King <linux@arm.linux.org.uk>,
devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org,
linux-kernel@vger.kernel.org, netdev@vger.kernel.org
Subject: Re: [PATCH v3 1/2] net/cadence/macb: add support for dt phy definition
Date: Tue, 27 Aug 2013 09:58:17 +0200 [thread overview]
Message-ID: <521C5C19.5070905@atmel.com> (raw)
In-Reply-To: <1377589070-3722-1-git-send-email-b.brezillon@overkiz.com>
On 27/08/2013 09:37, Boris BREZILLON :
> The macb driver only handle PHY description through platform_data
> (macb_platform_data).
> Thus, when using dt you cannot define phy properties like phy address or
> phy irq pin.
>
> This patch makes use of the of_mdiobus_register to add support for
> phy device definition using dt.
> A fallback to the autoscan procedure is added in case there is no phy
> devices defined in dt.
>
> Signed-off-by: Boris BREZILLON <b.brezillon@overkiz.com>
Acked-by: Nicolas Ferre <nicolas.ferre@atmel.com>
> ---
> drivers/net/ethernet/cadence/macb.c | 48 +++++++++++++++++++++++++++--------
> 1 file changed, 38 insertions(+), 10 deletions(-)
>
> diff --git a/drivers/net/ethernet/cadence/macb.c b/drivers/net/ethernet/cadence/macb.c
> index e866608..393afeb 100644
> --- a/drivers/net/ethernet/cadence/macb.c
> +++ b/drivers/net/ethernet/cadence/macb.c
> @@ -27,6 +27,7 @@
> #include <linux/phy.h>
> #include <linux/of.h>
> #include <linux/of_device.h>
> +#include <linux/of_mdio.h>
> #include <linux/of_net.h>
> #include <linux/pinctrl/consumer.h>
>
> @@ -275,7 +276,7 @@ static int macb_mii_probe(struct net_device *dev)
> phydev = phy_find_first(bp->mii_bus);
> if (!phydev) {
> netdev_err(dev, "no PHY found\n");
> - return -1;
> + return -ENXIO;
> }
>
> pdata = dev_get_platdata(&bp->pdev->dev);
> @@ -314,6 +315,7 @@ static int macb_mii_probe(struct net_device *dev)
> int macb_mii_init(struct macb *bp)
> {
> struct macb_platform_data *pdata;
> + struct device_node *np;
> int err = -ENXIO, i;
>
> /* Enable management port */
> @@ -335,26 +337,52 @@ int macb_mii_init(struct macb *bp)
> bp->mii_bus->parent = &bp->dev->dev;
> pdata = bp->pdev->dev.platform_data;
>
> - if (pdata)
> - bp->mii_bus->phy_mask = pdata->phy_mask;
> -
> bp->mii_bus->irq = kmalloc(sizeof(int)*PHY_MAX_ADDR, GFP_KERNEL);
> if (!bp->mii_bus->irq) {
> err = -ENOMEM;
> goto err_out_free_mdiobus;
> }
>
> - for (i = 0; i < PHY_MAX_ADDR; i++)
> - bp->mii_bus->irq[i] = PHY_POLL;
> -
> dev_set_drvdata(&bp->dev->dev, bp->mii_bus);
>
> - if (mdiobus_register(bp->mii_bus))
> + np = bp->pdev->dev.of_node;
> + if (np) {
> + /* try dt phy registration */
> + err = of_mdiobus_register(bp->mii_bus, np);
> +
> + /* fallback to standard phy registration if no phy were
> + * found during dt phy registration
> + */
> + if (!err && !phy_find_first(bp->mii_bus)) {
> + for (i = 0; i < PHY_MAX_ADDR; i++) {
> + struct phy_device *phydev;
> +
> + phydev = mdiobus_scan(bp->mii_bus, i);
> + if (IS_ERR(phydev)) {
> + err = PTR_ERR(phydev);
> + break;
> + }
> + }
> +
> + if (err)
> + goto err_out_unregister_bus;
> + }
> + } else {
> + for (i = 0; i < PHY_MAX_ADDR; i++)
> + bp->mii_bus->irq[i] = PHY_POLL;
> +
> + if (pdata)
> + bp->mii_bus->phy_mask = pdata->phy_mask;
> +
> + err = mdiobus_register(bp->mii_bus);
> + }
> +
> + if (err)
> goto err_out_free_mdio_irq;
>
> - if (macb_mii_probe(bp->dev) != 0) {
> + err = macb_mii_probe(bp->dev);
> + if (err)
> goto err_out_unregister_bus;
> - }
>
> return 0;
>
>
--
Nicolas Ferre
WARNING: multiple messages have this Message-ID (diff)
From: Nicolas Ferre <nicolas.ferre@atmel.com>
To: Boris BREZILLON <b.brezillon@overkiz.com>
Cc: Rob Herring <rob.herring@calxeda.com>,
Pawel Moll <pawel.moll@arm.com>,
Mark Rutland <mark.rutland@arm.com>,
Stephen Warren <swarren@wwwdotorg.org>,
Ian Campbell <ian.campbell@citrix.com>,
Russell King <linux@arm.linux.org.uk>,
<devicetree@vger.kernel.org>,
<linux-arm-kernel@lists.infradead.org>,
<linux-kernel@vger.kernel.org>, <netdev@vger.kernel.org>
Subject: Re: [PATCH v3 1/2] net/cadence/macb: add support for dt phy definition
Date: Tue, 27 Aug 2013 09:58:17 +0200 [thread overview]
Message-ID: <521C5C19.5070905@atmel.com> (raw)
In-Reply-To: <1377589070-3722-1-git-send-email-b.brezillon@overkiz.com>
On 27/08/2013 09:37, Boris BREZILLON :
> The macb driver only handle PHY description through platform_data
> (macb_platform_data).
> Thus, when using dt you cannot define phy properties like phy address or
> phy irq pin.
>
> This patch makes use of the of_mdiobus_register to add support for
> phy device definition using dt.
> A fallback to the autoscan procedure is added in case there is no phy
> devices defined in dt.
>
> Signed-off-by: Boris BREZILLON <b.brezillon@overkiz.com>
Acked-by: Nicolas Ferre <nicolas.ferre@atmel.com>
> ---
> drivers/net/ethernet/cadence/macb.c | 48 +++++++++++++++++++++++++++--------
> 1 file changed, 38 insertions(+), 10 deletions(-)
>
> diff --git a/drivers/net/ethernet/cadence/macb.c b/drivers/net/ethernet/cadence/macb.c
> index e866608..393afeb 100644
> --- a/drivers/net/ethernet/cadence/macb.c
> +++ b/drivers/net/ethernet/cadence/macb.c
> @@ -27,6 +27,7 @@
> #include <linux/phy.h>
> #include <linux/of.h>
> #include <linux/of_device.h>
> +#include <linux/of_mdio.h>
> #include <linux/of_net.h>
> #include <linux/pinctrl/consumer.h>
>
> @@ -275,7 +276,7 @@ static int macb_mii_probe(struct net_device *dev)
> phydev = phy_find_first(bp->mii_bus);
> if (!phydev) {
> netdev_err(dev, "no PHY found\n");
> - return -1;
> + return -ENXIO;
> }
>
> pdata = dev_get_platdata(&bp->pdev->dev);
> @@ -314,6 +315,7 @@ static int macb_mii_probe(struct net_device *dev)
> int macb_mii_init(struct macb *bp)
> {
> struct macb_platform_data *pdata;
> + struct device_node *np;
> int err = -ENXIO, i;
>
> /* Enable management port */
> @@ -335,26 +337,52 @@ int macb_mii_init(struct macb *bp)
> bp->mii_bus->parent = &bp->dev->dev;
> pdata = bp->pdev->dev.platform_data;
>
> - if (pdata)
> - bp->mii_bus->phy_mask = pdata->phy_mask;
> -
> bp->mii_bus->irq = kmalloc(sizeof(int)*PHY_MAX_ADDR, GFP_KERNEL);
> if (!bp->mii_bus->irq) {
> err = -ENOMEM;
> goto err_out_free_mdiobus;
> }
>
> - for (i = 0; i < PHY_MAX_ADDR; i++)
> - bp->mii_bus->irq[i] = PHY_POLL;
> -
> dev_set_drvdata(&bp->dev->dev, bp->mii_bus);
>
> - if (mdiobus_register(bp->mii_bus))
> + np = bp->pdev->dev.of_node;
> + if (np) {
> + /* try dt phy registration */
> + err = of_mdiobus_register(bp->mii_bus, np);
> +
> + /* fallback to standard phy registration if no phy were
> + * found during dt phy registration
> + */
> + if (!err && !phy_find_first(bp->mii_bus)) {
> + for (i = 0; i < PHY_MAX_ADDR; i++) {
> + struct phy_device *phydev;
> +
> + phydev = mdiobus_scan(bp->mii_bus, i);
> + if (IS_ERR(phydev)) {
> + err = PTR_ERR(phydev);
> + break;
> + }
> + }
> +
> + if (err)
> + goto err_out_unregister_bus;
> + }
> + } else {
> + for (i = 0; i < PHY_MAX_ADDR; i++)
> + bp->mii_bus->irq[i] = PHY_POLL;
> +
> + if (pdata)
> + bp->mii_bus->phy_mask = pdata->phy_mask;
> +
> + err = mdiobus_register(bp->mii_bus);
> + }
> +
> + if (err)
> goto err_out_free_mdio_irq;
>
> - if (macb_mii_probe(bp->dev) != 0) {
> + err = macb_mii_probe(bp->dev);
> + if (err)
> goto err_out_unregister_bus;
> - }
>
> return 0;
>
>
--
Nicolas Ferre
next prev parent reply other threads:[~2013-08-27 7:58 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-08-27 7:36 [PATCH v3 0/2] net/cadence/macb: add support for dt phy definition Boris BREZILLON
2013-08-27 7:36 ` Boris BREZILLON
2013-08-27 7:37 ` [PATCH v3 1/2] " Boris BREZILLON
2013-08-27 7:37 ` Boris BREZILLON
2013-08-27 7:58 ` Nicolas Ferre [this message]
2013-08-27 7:58 ` Nicolas Ferre
2013-08-27 7:58 ` Nicolas Ferre
2013-08-27 7:39 ` [PATCH v3 2/2] ARM: at91/dt: define phy available on sama5d3 mother board Boris BREZILLON
2013-08-27 7:39 ` Boris BREZILLON
2013-08-27 8:00 ` Nicolas Ferre
2013-08-27 8:00 ` Nicolas Ferre
2013-08-27 8:00 ` Nicolas Ferre
2013-08-27 7:48 ` [PATCH v3 0/2] net/cadence/macb: add support for dt phy definition boris brezillon
2013-08-27 7:48 ` boris brezillon
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=521C5C19.5070905@atmel.com \
--to=nicolas.ferre@atmel.com \
--cc=linux-arm-kernel@lists.infradead.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.