Patchwork [U-Boot,2/3] net: macb: using phylib to configure phy device

login
register
mail settings
Submitter Bo Shen
Date April 24, 2013, 7:59 a.m.
Message ID <1366790368-22327-3-git-send-email-voice.shen@atmel.com>
Download mbox | patch
Permalink /patch/239063/
State Accepted
Delegated to: Joe Hershberger
Headers show

Comments

Bo Shen - April 24, 2013, 7:59 a.m.
using phylib to configure phy device in macb driver

Signed-off-by: Bo Shen <voice.shen@atmel.com>
---
 drivers/net/macb.c |   16 ++++++++++++++--
 1 file changed, 14 insertions(+), 2 deletions(-)
Andreas Bießmann - Aug. 15, 2013, 2:36 p.m.
Hi Bo,

I'm currently applying your patches. Patch 'arm: atmel: add gmac support
for sama5d3xek board' shows that this particular patch is defective ...
please send a fix or I will not apply the gmac for sama5.

On 04/24/2013 09:59 AM, Bo Shen wrote:
> using phylib to configure phy device in macb driver
> 
> Signed-off-by: Bo Shen <voice.shen@atmel.com>
> ---
>  drivers/net/macb.c |   16 ++++++++++++++--
>  1 file changed, 14 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/net/macb.c b/drivers/net/macb.c
> index 753fb96..b83d65a 100644
> --- a/drivers/net/macb.c
> +++ b/drivers/net/macb.c
> @@ -103,6 +103,7 @@ struct macb_device {
>  	const struct device	*dev;
>  	struct eth_device	netdev;
>  	unsigned short		phy_addr;
> +	struct mii_dev		*bus;
>  };
>  #define to_macb(_nd) container_of(_nd, struct macb_device, netdev)
>  
> @@ -163,7 +164,7 @@ static u16 macb_mdio_read(struct macb_device *macb, u8 reg)
>  	return MACB_BFEXT(DATA, frame);
>  }
>  
> -#if defined(CONFIG_CMD_MII)
> +#if defined(CONFIG_CMD_MII) || defined(CONFIG_PHYLIB)
>  
>  int macb_miiphy_read(const char *devname, u8 phy_adr, u8 reg, u16 *value)
>  {
> @@ -372,6 +373,9 @@ static int macb_phy_find(struct macb_device *macb)
>  static int macb_phy_init(struct macb_device *macb)
>  {
>  	struct eth_device *netdev = &macb->netdev;
> +#ifdef CONFIG_PHYLIB
> +	struct phy_device *phydev;
> +#endif
>  	u32 ncfgr;
>  	u16 phy_id, status, adv, lpa;
>  	int media, speed, duplex;
> @@ -391,6 +395,13 @@ static int macb_phy_init(struct macb_device *macb)
>  		return 0;
>  	}
>  
> +#ifdef CONFIG_PHYLIB
> +	phydev->bus = macb->bus;

phydev is uninitialized here ...

> +	phydev->dev = netdev;
> +	phydev->addr = macb->phy_addr;
> +	phy_config(phydev);
> +#endif
> +
>  	status = macb_mdio_read(macb, MII_BMSR);
>  	if (!(status & BMSR_LSTATUS)) {
>  		/* Try to re-negotiate if we don't have link already. */
> @@ -574,8 +585,9 @@ int macb_eth_initialize(int id, void *regs, unsigned int phy_addr)
>  
>  	eth_register(netdev);
>  
> -#if defined(CONFIG_CMD_MII)
> +#if defined(CONFIG_CMD_MII) || defined(CONFIG_PHYLIB)
>  	miiphy_register(netdev->name, macb_miiphy_read, macb_miiphy_write);
> +	macb->bus = miiphy_get_dev_by_name(netdev->name);
>  #endif
>  	return 0;
>  }
>
Bo Shen - Aug. 16, 2013, 1:53 a.m.
Hi Andreas,

On 8/15/2013 22:36, Andreas Bießmann wrote:
> Hi Bo,
>
> I'm currently applying your patches. Patch 'arm: atmel: add gmac support
> for sama5d3xek board' shows that this particular patch is defective ...
> please send a fix or I will not apply the gmac for sama5.

Thanks for point out this.
The fix patch has been sent out.
More information at: http://patchwork.ozlabs.org/patch/267530/ (net: 
macb: fix the building warning)

Best Regards,
Bo Shen

Patch

diff --git a/drivers/net/macb.c b/drivers/net/macb.c
index 753fb96..b83d65a 100644
--- a/drivers/net/macb.c
+++ b/drivers/net/macb.c
@@ -103,6 +103,7 @@  struct macb_device {
 	const struct device	*dev;
 	struct eth_device	netdev;
 	unsigned short		phy_addr;
+	struct mii_dev		*bus;
 };
 #define to_macb(_nd) container_of(_nd, struct macb_device, netdev)
 
@@ -163,7 +164,7 @@  static u16 macb_mdio_read(struct macb_device *macb, u8 reg)
 	return MACB_BFEXT(DATA, frame);
 }
 
-#if defined(CONFIG_CMD_MII)
+#if defined(CONFIG_CMD_MII) || defined(CONFIG_PHYLIB)
 
 int macb_miiphy_read(const char *devname, u8 phy_adr, u8 reg, u16 *value)
 {
@@ -372,6 +373,9 @@  static int macb_phy_find(struct macb_device *macb)
 static int macb_phy_init(struct macb_device *macb)
 {
 	struct eth_device *netdev = &macb->netdev;
+#ifdef CONFIG_PHYLIB
+	struct phy_device *phydev;
+#endif
 	u32 ncfgr;
 	u16 phy_id, status, adv, lpa;
 	int media, speed, duplex;
@@ -391,6 +395,13 @@  static int macb_phy_init(struct macb_device *macb)
 		return 0;
 	}
 
+#ifdef CONFIG_PHYLIB
+	phydev->bus = macb->bus;
+	phydev->dev = netdev;
+	phydev->addr = macb->phy_addr;
+	phy_config(phydev);
+#endif
+
 	status = macb_mdio_read(macb, MII_BMSR);
 	if (!(status & BMSR_LSTATUS)) {
 		/* Try to re-negotiate if we don't have link already. */
@@ -574,8 +585,9 @@  int macb_eth_initialize(int id, void *regs, unsigned int phy_addr)
 
 	eth_register(netdev);
 
-#if defined(CONFIG_CMD_MII)
+#if defined(CONFIG_CMD_MII) || defined(CONFIG_PHYLIB)
 	miiphy_register(netdev->name, macb_miiphy_read, macb_miiphy_write);
+	macb->bus = miiphy_get_dev_by_name(netdev->name);
 #endif
 	return 0;
 }