linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] net: phy: turn carrier off on phy attach
@ 2016-01-14 20:57 Sjoerd Simons
  2016-01-15 19:50 ` David Miller
  0 siblings, 1 reply; 7+ messages in thread
From: Sjoerd Simons @ 2016-01-14 20:57 UTC (permalink / raw)
  To: netdev; +Cc: Andrew Lunn, linux-kernel, Florian Fainelli

The operstate of a networking device initially IF_OPER_UNKNOWN aka
"unknown", updated on carrier state changes (with carrier state being on
by default). This means it will stay unknown unless the carrier state
goes to off at some point, which is not the case if the phy is already
up/connected at startup.

Explicitly turn off the carrier on phy attach, leaving the phy state
machine to turn the carrier on when it has done the initial negotiation.

Signed-off-by: Sjoerd Simons <sjoerd.simons@collabora.co.uk>

---

 drivers/net/phy/phy_device.c | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/drivers/net/phy/phy_device.c b/drivers/net/phy/phy_device.c
index 0bfbaba..0b407dd 100644
--- a/drivers/net/phy/phy_device.c
+++ b/drivers/net/phy/phy_device.c
@@ -668,6 +668,11 @@ int phy_attach_direct(struct net_device *dev, struct phy_device *phydev,
 
 	phydev->state = PHY_READY;
 
+	/* Initial carrier state is off as the phy is about to be
+	 * (re)initialized.
+	 */
+	netif_carrier_off(phydev->attached_dev);
+
 	/* Do initial configuration here, now that
 	 * we have certain key parameters
 	 * (dev_flags and interface)
-- 
2.7.0.rc3

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

* Re: [PATCH] net: phy: turn carrier off on phy attach
  2016-01-14 20:57 [PATCH] net: phy: turn carrier off on phy attach Sjoerd Simons
@ 2016-01-15 19:50 ` David Miller
  0 siblings, 0 replies; 7+ messages in thread
From: David Miller @ 2016-01-15 19:50 UTC (permalink / raw)
  To: sjoerd.simons; +Cc: netdev, andrew, linux-kernel, f.fainelli

From: Sjoerd Simons <sjoerd.simons@collabora.co.uk>
Date: Thu, 14 Jan 2016 21:57:18 +0100

> The operstate of a networking device initially IF_OPER_UNKNOWN aka
> "unknown", updated on carrier state changes (with carrier state being on
> by default). This means it will stay unknown unless the carrier state
> goes to off at some point, which is not the case if the phy is already
> up/connected at startup.
> 
> Explicitly turn off the carrier on phy attach, leaving the phy state
> machine to turn the carrier on when it has done the initial negotiation.
> 
> Signed-off-by: Sjoerd Simons <sjoerd.simons@collabora.co.uk>

Applied, thank you.

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

* Re: [PATCH] net: phy: turn carrier off on phy attach
  2016-01-13  1:31 ` Florian Fainelli
@ 2016-01-14 20:22   ` Sjoerd Simons
  0 siblings, 0 replies; 7+ messages in thread
From: Sjoerd Simons @ 2016-01-14 20:22 UTC (permalink / raw)
  To: Florian Fainelli, netdev, Andrew Lunn; +Cc: linux-kernel

On Tue, 2016-01-12 at 17:31 -0800, Florian Fainelli wrote:
> On January 9, 2016 10:44:05 AM PST, Sjoerd Simons <sjoerd.simons@coll
> abora.co.uk> wrote:
> > The operstate of a networking device initially IF_OPER_UNKNOWN aka
> > "unknown", updated on carrier state changes (with carrier state
> > being
> > on
> > by default). This means it will stay unknown unless the carrier
> > state
> > goes to off at some point, which is not the case if the phy is
> > already
> > up/connected at startup.
> 
> Correct, drivers typically call netif_carrier_off prior to
> registering the network device to give a predictable link state,
> regardless of whether or not they use PHYLIB.
> 
> > 
> > Explicitly turn off the carrier on phy attach, leaving the phy
> > state
> > machine to turn the carrier on when it has done the initial
> > negotiation.
> 
> Same comment as Andrew on the comment below.
> 
> Out of curiosity, was there a particular driver you ran into issues
> with?

Prepping a v2. This came up on Rada Rock2 board, so the (Rockchip)
DWMAC driver combined with a realtek phy (RTL8211E). Thanks for the
review

-- 
Sjoerd Simons
Collabora Ltd.

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

* Re: [PATCH] net: phy: turn carrier off on phy attach
  2016-01-09 18:44 Sjoerd Simons
  2016-01-11 22:17 ` David Miller
  2016-01-12  0:57 ` Andrew Lunn
@ 2016-01-13  1:31 ` Florian Fainelli
  2016-01-14 20:22   ` Sjoerd Simons
  2 siblings, 1 reply; 7+ messages in thread
From: Florian Fainelli @ 2016-01-13  1:31 UTC (permalink / raw)
  To: Sjoerd Simons, netdev, Andrew Lunn; +Cc: linux-kernel

On January 9, 2016 10:44:05 AM PST, Sjoerd Simons <sjoerd.simons@collabora.co.uk> wrote:
>The operstate of a networking device initially IF_OPER_UNKNOWN aka
>"unknown", updated on carrier state changes (with carrier state being
>on
>by default). This means it will stay unknown unless the carrier state
>goes to off at some point, which is not the case if the phy is already
>up/connected at startup.

Correct, drivers typically call netif_carrier_off prior to registering the network device to give a predictable link state, regardless of whether or not they use PHYLIB.

>
>Explicitly turn off the carrier on phy attach, leaving the phy state
>machine to turn the carrier on when it has done the initial
>negotiation.

Same comment as Andrew on the comment below.

Out of curiosity, was there a particular driver you ran into issues with?

-- 
Florian

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

* Re: [PATCH] net: phy: turn carrier off on phy attach
  2016-01-09 18:44 Sjoerd Simons
  2016-01-11 22:17 ` David Miller
@ 2016-01-12  0:57 ` Andrew Lunn
  2016-01-13  1:31 ` Florian Fainelli
  2 siblings, 0 replies; 7+ messages in thread
From: Andrew Lunn @ 2016-01-12  0:57 UTC (permalink / raw)
  To: Sjoerd Simons; +Cc: netdev, linux-kernel, Florian Fainelli

On Sat, Jan 09, 2016 at 07:44:05PM +0100, Sjoerd Simons wrote:
> The operstate of a networking device initially IF_OPER_UNKNOWN aka
> "unknown", updated on carrier state changes (with carrier state being on
> by default). This means it will stay unknown unless the carrier state
> goes to off at some point, which is not the case if the phy is already
> up/connected at startup.
> 
> Explicitly turn off the carrier on phy attach, leaving the phy state
> machine to turn the carrier on when it has done the initial negotiation.

RFC 2863 says:

   Whenever an interface table entry is created (usually as a result
   of system initialization), the relevant instance of ifAdminStatus
   is set to down, and ifOperStatus will be down or notPresent.

and

   The notPresent state is a refinement on the down state which
   indicates that the relevant interface is down specifically because
   some component (typically, a hardware component) is not present in
   the managed system.

So if we have a PHY, setting it to down is correct with respect to the
RFC.

> Signed-off-by: Sjoerd Simons <sjoerd.simons@collabora.co.uk>
> 
> ---
> 
>  drivers/net/phy/phy_device.c | 5 +++++
>  1 file changed, 5 insertions(+)
> 
> diff --git a/drivers/net/phy/phy_device.c b/drivers/net/phy/phy_device.c
> index 0bfbaba..a30ce1a 100644
> --- a/drivers/net/phy/phy_device.c
> +++ b/drivers/net/phy/phy_device.c
> @@ -668,6 +668,11 @@ int phy_attach_direct(struct net_device *dev, struct phy_device *phydev,
>  
>  	phydev->state = PHY_READY;
>  
> +	/* Signal to the core network layer the phy supports
> +	 *  carrier detection
> +	 */

I don't agree with the comment. All we are doing is getting the core
state to agree with the phy state. The next thing we do with the phy
is reset it, so the carrier is going to be off.

Please rewrite the comment, and then i can give a reviewed-by.

Thanks
	Andrew

> +	netif_carrier_off(phydev->attached_dev);
> +
>  	/* Do initial configuration here, now that
>  	 * we have certain key parameters
>  	 * (dev_flags and interface)
> -- 
> 2.7.0.rc3
> 

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

* Re: [PATCH] net: phy: turn carrier off on phy attach
  2016-01-09 18:44 Sjoerd Simons
@ 2016-01-11 22:17 ` David Miller
  2016-01-12  0:57 ` Andrew Lunn
  2016-01-13  1:31 ` Florian Fainelli
  2 siblings, 0 replies; 7+ messages in thread
From: David Miller @ 2016-01-11 22:17 UTC (permalink / raw)
  To: sjoerd.simons; +Cc: netdev, linux-kernel, f.fainelli, andrew

From: Sjoerd Simons <sjoerd.simons@collabora.co.uk>
Date: Sat,  9 Jan 2016 19:44:05 +0100

> The operstate of a networking device initially IF_OPER_UNKNOWN aka
> "unknown", updated on carrier state changes (with carrier state being on
> by default). This means it will stay unknown unless the carrier state
> goes to off at some point, which is not the case if the phy is already
> up/connected at startup.
> 
> Explicitly turn off the carrier on phy attach, leaving the phy state
> machine to turn the carrier on when it has done the initial negotiation.
> 
> Signed-off-by: Sjoerd Simons <sjoerd.simons@collabora.co.uk>

Florian or Andrew, please review this.

Thanks.

> 
> ---
> 
>  drivers/net/phy/phy_device.c | 5 +++++
>  1 file changed, 5 insertions(+)
> 
> diff --git a/drivers/net/phy/phy_device.c b/drivers/net/phy/phy_device.c
> index 0bfbaba..a30ce1a 100644
> --- a/drivers/net/phy/phy_device.c
> +++ b/drivers/net/phy/phy_device.c
> @@ -668,6 +668,11 @@ int phy_attach_direct(struct net_device *dev, struct phy_device *phydev,
>  
>  	phydev->state = PHY_READY;
>  
> +	/* Signal to the core network layer the phy supports
> +	 *  carrier detection
> +	 */
> +	netif_carrier_off(phydev->attached_dev);
> +
>  	/* Do initial configuration here, now that
>  	 * we have certain key parameters
>  	 * (dev_flags and interface)
> -- 
> 2.7.0.rc3
> 

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

* [PATCH] net: phy: turn carrier off on phy attach
@ 2016-01-09 18:44 Sjoerd Simons
  2016-01-11 22:17 ` David Miller
                   ` (2 more replies)
  0 siblings, 3 replies; 7+ messages in thread
From: Sjoerd Simons @ 2016-01-09 18:44 UTC (permalink / raw)
  To: netdev; +Cc: linux-kernel, Florian Fainelli

The operstate of a networking device initially IF_OPER_UNKNOWN aka
"unknown", updated on carrier state changes (with carrier state being on
by default). This means it will stay unknown unless the carrier state
goes to off at some point, which is not the case if the phy is already
up/connected at startup.

Explicitly turn off the carrier on phy attach, leaving the phy state
machine to turn the carrier on when it has done the initial negotiation.

Signed-off-by: Sjoerd Simons <sjoerd.simons@collabora.co.uk>

---

 drivers/net/phy/phy_device.c | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/drivers/net/phy/phy_device.c b/drivers/net/phy/phy_device.c
index 0bfbaba..a30ce1a 100644
--- a/drivers/net/phy/phy_device.c
+++ b/drivers/net/phy/phy_device.c
@@ -668,6 +668,11 @@ int phy_attach_direct(struct net_device *dev, struct phy_device *phydev,
 
 	phydev->state = PHY_READY;
 
+	/* Signal to the core network layer the phy supports
+	 *  carrier detection
+	 */
+	netif_carrier_off(phydev->attached_dev);
+
 	/* Do initial configuration here, now that
 	 * we have certain key parameters
 	 * (dev_flags and interface)
-- 
2.7.0.rc3

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

end of thread, other threads:[~2016-01-15 19:50 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-01-14 20:57 [PATCH] net: phy: turn carrier off on phy attach Sjoerd Simons
2016-01-15 19:50 ` David Miller
  -- strict thread matches above, loose matches on Subject: below --
2016-01-09 18:44 Sjoerd Simons
2016-01-11 22:17 ` David Miller
2016-01-12  0:57 ` Andrew Lunn
2016-01-13  1:31 ` Florian Fainelli
2016-01-14 20:22   ` Sjoerd Simons

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