All of lore.kernel.org
 help / color / mirror / Atom feed
From: Florian Fainelli <f.fainelli@gmail.com>
To: Andrew Lunn <andrew@lunn.ch>, davem@davemloft.net
Cc: netdev@vger.kernel.org
Subject: Re: [PATCH] net: dsa: slave: Fix autoneg for phys on switch MDIO bus
Date: Wed, 05 Nov 2014 12:53:35 -0800	[thread overview]
Message-ID: <545A8E4F.9040009@gmail.com> (raw)
In-Reply-To: <1415213248-29037-1-git-send-email-andrew@lunn.ch>

On 11/05/2014 10:47 AM, Andrew Lunn wrote:
> When the ports phys are connected to the switches internal MDIO bus,
> we need to connect the phy to the slave netdev, otherwise
> auto-negotiation etc, does not work.
> 
> Signed-off-by: Andrew Lunn <andrew@lunn.ch>
> ---
> 
> Hi Florian
> 
> Is this the right fix?
> 
> What i found is that ports on mv88E6171 we coming up as 10/half.  If i
> forced a renegotiation with ethtool -r lan0, the phy would then goto
> 1000/full.
> 
> The code for phys on internal switch MDIO buses never connect the phy
> to the device, only phys listed in DT get connected via
> of_phy_connect(). By connecting the phy, the state machine is active
> and does an autoneg when the slave interface is opened.

This looks fine to me, I think we might want to revisit/nuke the code at
the end of dsa_slave_create since it:

- is racy: netif_carrier_off() is called before register_netdev()
- is double racy: we should be bound to a PHY before calling
register_netdev() otherwise there could be MDIO accesses done to that
PHY without an actual PHY being registered

> 
> net/dsa/slave.c | 7 +++++--
>  1 file changed, 5 insertions(+), 2 deletions(-)
> 
> diff --git a/net/dsa/slave.c b/net/dsa/slave.c
> index 6d1817449c36..ab03e00ffe8f 100644
> --- a/net/dsa/slave.c
> +++ b/net/dsa/slave.c
> @@ -489,11 +489,14 @@ static void dsa_slave_phy_setup(struct dsa_slave_priv *p,
>  	/* We could not connect to a designated PHY, so use the switch internal
>  	 * MDIO bus instead
>  	 */
> -	if (!p->phy)
> +	if (!p->phy) {
>  		p->phy = ds->slave_mii_bus->phy_map[p->port];
> -	else
> +		phy_connect_direct(slave_dev, p->phy, dsa_slave_adjust_link,
> +				   p->phy_interface);
> +	} else {
>  		pr_info("attached PHY at address %d [%s]\n",
>  			p->phy->addr, p->phy->drv->name);
> +	}
>  }
>  
>  int dsa_slave_suspend(struct net_device *slave_dev)
> 

  reply	other threads:[~2014-11-05 20:54 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-11-05 18:47 [PATCH] net: dsa: slave: Fix autoneg for phys on switch MDIO bus Andrew Lunn
2014-11-05 20:53 ` Florian Fainelli [this message]
2014-11-06 20:06 ` David Miller

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=545A8E4F.9040009@gmail.com \
    --to=f.fainelli@gmail.com \
    --cc=andrew@lunn.ch \
    --cc=davem@davemloft.net \
    --cc=netdev@vger.kernel.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.