linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] net: phy: handle state correctly in phy_stop_machine
@ 2017-03-22 20:27 Zach Brown
  2017-03-23 21:25 ` David Miller
                   ` (2 more replies)
  0 siblings, 3 replies; 5+ messages in thread
From: Zach Brown @ 2017-03-22 20:27 UTC (permalink / raw)
  To: f.fainelli; +Cc: netdev, linux-kernel

From: Nathan Sullivan <nathan.sullivan@ni.com>

If the PHY is halted on stop, then do not set the state to PHY_UP.  This
ensures the phy will be restarted later in phy_start when the machine is
started again.

Signed-off-by: Nathan Sullivan <nathan.sullivan@ni.com>
Signed-off-by: Brad Mouring <brad.mouring@ni.com>
Acked-by: Xander Huff <xander.huff@ni.com>
Acked-by: Kyle Roeschley <kyle.roeschley@ni.com>
---
 drivers/net/phy/phy.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/net/phy/phy.c b/drivers/net/phy/phy.c
index 7cc1b7d..fe2d4c4 100644
--- a/drivers/net/phy/phy.c
+++ b/drivers/net/phy/phy.c
@@ -678,7 +678,7 @@ void phy_stop_machine(struct phy_device *phydev)
 	cancel_delayed_work_sync(&phydev->state_queue);
 
 	mutex_lock(&phydev->lock);
-	if (phydev->state > PHY_UP)
+	if (phydev->state > PHY_UP && phydev->state != PHY_HALTED)
 		phydev->state = PHY_UP;
 	mutex_unlock(&phydev->lock);
 }
-- 
2.7.4

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

* Re: [PATCH] net: phy: handle state correctly in phy_stop_machine
  2017-03-22 20:27 [PATCH] net: phy: handle state correctly in phy_stop_machine Zach Brown
@ 2017-03-23 21:25 ` David Miller
  2017-03-23 21:41 ` Florian Fainelli
  2017-03-24 19:27 ` David Miller
  2 siblings, 0 replies; 5+ messages in thread
From: David Miller @ 2017-03-23 21:25 UTC (permalink / raw)
  To: zach.brown; +Cc: f.fainelli, netdev, linux-kernel

From: Zach Brown <zach.brown@ni.com>
Date: Wed, 22 Mar 2017 15:27:01 -0500

> From: Nathan Sullivan <nathan.sullivan@ni.com>
> 
> If the PHY is halted on stop, then do not set the state to PHY_UP.  This
> ensures the phy will be restarted later in phy_start when the machine is
> started again.
> 
> Signed-off-by: Nathan Sullivan <nathan.sullivan@ni.com>
> Signed-off-by: Brad Mouring <brad.mouring@ni.com>
> Acked-by: Xander Huff <xander.huff@ni.com>
> Acked-by: Kyle Roeschley <kyle.roeschley@ni.com>

Florian, please review.

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

* Re: [PATCH] net: phy: handle state correctly in phy_stop_machine
  2017-03-22 20:27 [PATCH] net: phy: handle state correctly in phy_stop_machine Zach Brown
  2017-03-23 21:25 ` David Miller
@ 2017-03-23 21:41 ` Florian Fainelli
  2017-03-23 21:45   ` Florian Fainelli
  2017-03-24 19:27 ` David Miller
  2 siblings, 1 reply; 5+ messages in thread
From: Florian Fainelli @ 2017-03-23 21:41 UTC (permalink / raw)
  To: Zach Brown; +Cc: netdev, linux-kernel, Andrew Lunn

On 03/22/2017 01:27 PM, Zach Brown wrote:
> From: Nathan Sullivan <nathan.sullivan@ni.com>
> 
> If the PHY is halted on stop, then do not set the state to PHY_UP.  This
> ensures the phy will be restarted later in phy_start when the machine is
> started again.

So essentially what you want to "defeat" here is entering phy_start()
with PHY_UP therefore not run this part:

        case PHY_HALTED:
                /* make sure interrupts are re-enabled for the PHY */
                if (phydev->irq != PHY_POLL) {
                        err = phy_enable_interrupts(phydev);
                        if (err < 0)
                                break;
                }

                phydev->state = PHY_RESUMING;
                do_resume = true;
                break;

which is what re-enables interrupts and makes sure the PHY is resumed,
right?

If that's the scenario, I guess:

Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>

> 
> Signed-off-by: Nathan Sullivan <nathan.sullivan@ni.com>
> Signed-off-by: Brad Mouring <brad.mouring@ni.com>
> Acked-by: Xander Huff <xander.huff@ni.com>
> Acked-by: Kyle Roeschley <kyle.roeschley@ni.com>
> ---
>  drivers/net/phy/phy.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/net/phy/phy.c b/drivers/net/phy/phy.c
> index 7cc1b7d..fe2d4c4 100644
> --- a/drivers/net/phy/phy.c
> +++ b/drivers/net/phy/phy.c
> @@ -678,7 +678,7 @@ void phy_stop_machine(struct phy_device *phydev)
>  	cancel_delayed_work_sync(&phydev->state_queue);
>  
>  	mutex_lock(&phydev->lock);
> -	if (phydev->state > PHY_UP)
> +	if (phydev->state > PHY_UP && phydev->state != PHY_HALTED)
>  		phydev->state = PHY_UP;
>  	mutex_unlock(&phydev->lock);
>  }
> 


-- 
Florian

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

* Re: [PATCH] net: phy: handle state correctly in phy_stop_machine
  2017-03-23 21:41 ` Florian Fainelli
@ 2017-03-23 21:45   ` Florian Fainelli
  0 siblings, 0 replies; 5+ messages in thread
From: Florian Fainelli @ 2017-03-23 21:45 UTC (permalink / raw)
  To: Zach Brown; +Cc: netdev, linux-kernel, Andrew Lunn

On 03/23/2017 02:41 PM, Florian Fainelli wrote:
> On 03/22/2017 01:27 PM, Zach Brown wrote:
>> From: Nathan Sullivan <nathan.sullivan@ni.com>
>>
>> If the PHY is halted on stop, then do not set the state to PHY_UP.  This
>> ensures the phy will be restarted later in phy_start when the machine is
>> started again.
> 
> So essentially what you want to "defeat" here is entering phy_start()
> with PHY_UP therefore not run this part:
> 
>         case PHY_HALTED:
>                 /* make sure interrupts are re-enabled for the PHY */
>                 if (phydev->irq != PHY_POLL) {
>                         err = phy_enable_interrupts(phydev);
>                         if (err < 0)
>                                 break;
>                 }
> 
>                 phydev->state = PHY_RESUMING;
>                 do_resume = true;
>                 break;
> 
> which is what re-enables interrupts and makes sure the PHY is resumed,
> right?
> 
> If that's the scenario, I guess:
> 
> Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>

And almost forgot:

Fixes: 00db8189d984 ("This patch adds a PHY Abstraction Layer to the
Linux Kernel, enabling ethernet drivers to remain as ignorant as is
reasonable of the connected PHY's design and operation details.")
-- 
Florian

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

* Re: [PATCH] net: phy: handle state correctly in phy_stop_machine
  2017-03-22 20:27 [PATCH] net: phy: handle state correctly in phy_stop_machine Zach Brown
  2017-03-23 21:25 ` David Miller
  2017-03-23 21:41 ` Florian Fainelli
@ 2017-03-24 19:27 ` David Miller
  2 siblings, 0 replies; 5+ messages in thread
From: David Miller @ 2017-03-24 19:27 UTC (permalink / raw)
  To: zach.brown; +Cc: f.fainelli, netdev, linux-kernel

From: Zach Brown <zach.brown@ni.com>
Date: Wed, 22 Mar 2017 15:27:01 -0500

> From: Nathan Sullivan <nathan.sullivan@ni.com>
> 
> If the PHY is halted on stop, then do not set the state to PHY_UP.  This
> ensures the phy will be restarted later in phy_start when the machine is
> started again.
> 
> Signed-off-by: Nathan Sullivan <nathan.sullivan@ni.com>
> Signed-off-by: Brad Mouring <brad.mouring@ni.com>
> Acked-by: Xander Huff <xander.huff@ni.com>
> Acked-by: Kyle Roeschley <kyle.roeschley@ni.com>

Applied and queued up for -stable, thanks.

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

end of thread, other threads:[~2017-03-24 19:28 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-03-22 20:27 [PATCH] net: phy: handle state correctly in phy_stop_machine Zach Brown
2017-03-23 21:25 ` David Miller
2017-03-23 21:41 ` Florian Fainelli
2017-03-23 21:45   ` Florian Fainelli
2017-03-24 19:27 ` David Miller

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