diff mbox

[RFC,11/17] sh_eth: Don't unnecessarily reset the PHY

Message ID 1319144425-15547-12-git-send-email-Kyle.D.Moffett@boeing.com
State RFC, archived
Delegated to: David Miller
Headers show

Commit Message

Kyle Moffett Oct. 20, 2011, 9 p.m. UTC
The PHY is already reset during driver probing, and this manual reset
afterwards will wipe out board-specific PHY fixups and driver-specific
phy->drv->config_init() register tweaks.

Signed-off-by: Kyle Moffett <Kyle.D.Moffett@boeing.com>
---
 drivers/net/sh_eth.c |   19 +------------------
 1 files changed, 1 insertions(+), 18 deletions(-)

Comments

Yoshihiro Shimoda Oct. 25, 2011, 11:11 a.m. UTC | #1
Hi,

2011/10/21 6:00, Kyle Moffett wrote:
> The PHY is already reset during driver probing, and this manual reset
> afterwards will wipe out board-specific PHY fixups and driver-specific
> phy->drv->config_init() register tweaks.

Thank you for your patch. I think so.
However, the patch cannot work correctly on my environment.

> Signed-off-by: Kyle Moffett <Kyle.D.Moffett@boeing.com>
> ---
>  drivers/net/sh_eth.c |   19 +------------------
>  1 files changed, 1 insertions(+), 18 deletions(-)
> 
> diff --git a/drivers/net/sh_eth.c b/drivers/net/sh_eth.c
> index 1c1666e..7ef4378 100644
> --- a/drivers/net/sh_eth.c
> +++ b/drivers/net/sh_eth.c
> @@ -1235,23 +1235,6 @@ static int sh_eth_phy_init(struct net_device *ndev)
>  	return 0;
>  }
>  
> -/* PHY control start function */
> -static int sh_eth_phy_start(struct net_device *ndev)
> -{
> -	struct sh_eth_private *mdp = netdev_priv(ndev);
> -	int ret;
> -
> -	ret = sh_eth_phy_init(ndev);
> -	if (ret)
> -		return ret;
> -
> -	/* reset phy - this also wakes it from PDOWN */
> -	phy_write(mdp->phydev, MII_BMCR, BMCR_RESET);
> -	phy_start(mdp->phydev);

I think that the driver needs the phy_start().
So, I removed the phy_write() only. Then, the driver could work correctly.

Therefore, I would to remove the following code only.
Do you think about this?

> -	/* reset phy - this also wakes it from PDOWN */
> -	phy_write(mdp->phydev, MII_BMCR, BMCR_RESET);

Thanks,
Yoshihiro Shimoda
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Kyle Moffett Oct. 25, 2011, 4 p.m. UTC | #2
On Oct 25, 2011, at 07:11, Yoshihiro Shimoda wrote:
> 2011/10/21 6:00, Kyle Moffett wrote:
>> Signed-off-by: Kyle Moffett <Kyle.D.Moffett@boeing.com>
>> ---
>> drivers/net/sh_eth.c |   19 +------------------
>> 1 files changed, 1 insertions(+), 18 deletions(-)
>> 
>> diff --git a/drivers/net/sh_eth.c b/drivers/net/sh_eth.c
>> index 1c1666e..7ef4378 100644
>> --- a/drivers/net/sh_eth.c
>> +++ b/drivers/net/sh_eth.c
>> @@ -1235,23 +1235,6 @@ static int sh_eth_phy_init(struct net_device *ndev)
>> 	return 0;
>> }
>> 
>> -/* PHY control start function */
>> -static int sh_eth_phy_start(struct net_device *ndev)
>> -{
>> -	struct sh_eth_private *mdp = netdev_priv(ndev);
>> -	int ret;
>> -
>> -	ret = sh_eth_phy_init(ndev);
>> -	if (ret)
>> -		return ret;
>> -
>> -	/* reset phy - this also wakes it from PDOWN */
>> -	phy_write(mdp->phydev, MII_BMCR, BMCR_RESET);
>> -	phy_start(mdp->phydev);
> 
> I think that the driver needs the phy_start().
> So, I removed the phy_write() only. Then, the driver could work correctly.
> 
> Therefore, I would to remove the following code only.
> Do you think about this?
> 
>> -	/* reset phy - this also wakes it from PDOWN */
>> -	phy_write(mdp->phydev, MII_BMCR, BMCR_RESET);

You're right, sorry about that.  I think I mis-merged this when I rebased
from a much earlier commit.  The simple removal of the BMCR_RESET write
should achieve what I was intending.

Cheers,
Kyle Moffett

--
Curious about my work on the Debian powerpcspe port?
I'm keeping a blog here: http://pureperl.blogspot.com/

--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/drivers/net/sh_eth.c b/drivers/net/sh_eth.c
index 1c1666e..7ef4378 100644
--- a/drivers/net/sh_eth.c
+++ b/drivers/net/sh_eth.c
@@ -1235,23 +1235,6 @@  static int sh_eth_phy_init(struct net_device *ndev)
 	return 0;
 }
 
-/* PHY control start function */
-static int sh_eth_phy_start(struct net_device *ndev)
-{
-	struct sh_eth_private *mdp = netdev_priv(ndev);
-	int ret;
-
-	ret = sh_eth_phy_init(ndev);
-	if (ret)
-		return ret;
-
-	/* reset phy - this also wakes it from PDOWN */
-	phy_write(mdp->phydev, MII_BMCR, BMCR_RESET);
-	phy_start(mdp->phydev);
-
-	return 0;
-}
-
 static int sh_eth_get_settings(struct net_device *ndev,
 			struct ethtool_cmd *ecmd)
 {
@@ -1410,7 +1393,7 @@  static int sh_eth_open(struct net_device *ndev)
 		goto out_free_irq;
 
 	/* PHY control start*/
-	ret = sh_eth_phy_start(ndev);
+	ret = sh_eth_phy_init(ndev);
 	if (ret)
 		goto out_free_irq;