diff mbox

[U-Boot] net: phy: atheros: Fix problem with phy_reset() clearing BMCR

Message ID 1455868348-3088-1-git-send-email-b18965@freescale.com
State Accepted
Commit 903d384d401bdfc517266787549caf4630a7f305
Delegated to: Joe Hershberger
Headers show

Commit Message

Alison Wang Feb. 19, 2016, 7:52 a.m. UTC
In commit <a058052c358c> [net: phy: do not read configuration register on
reset], phy_reset() will clear the BMCR register. Bit 12(AUTO_NEGOTIATION)
is cleared too. It causes auto-negotiation timeout error on Atheros's
PHY AR8033.

To fix this problem, genphy_config_aneg() and genphy_restart_aneg()
needs to be called in ar8035_config() to enable and restart
auto-negotiation.

Signed-off-by: Alison Wang <alison.wang@nxp.com>
---
 drivers/net/phy/atheros.c | 3 +++
 1 file changed, 3 insertions(+)

Comments

Fabio Estevam Feb. 19, 2016, 9:24 p.m. UTC | #1
On Fri, Feb 19, 2016 at 5:52 AM, Alison Wang <b18965@freescale.com> wrote:
> In commit <a058052c358c> [net: phy: do not read configuration register on
> reset], phy_reset() will clear the BMCR register. Bit 12(AUTO_NEGOTIATION)
> is cleared too. It causes auto-negotiation timeout error on Atheros's
> PHY AR8033.
>
> To fix this problem, genphy_config_aneg() and genphy_restart_aneg()
> needs to be called in ar8035_config() to enable and restart
> auto-negotiation.

It is always a good idea to put the author of the offending patch on Cc.

Added Stefan.

>
> Signed-off-by: Alison Wang <alison.wang@nxp.com>
> ---
>  drivers/net/phy/atheros.c | 3 +++
>  1 file changed, 3 insertions(+)
>
> diff --git a/drivers/net/phy/atheros.c b/drivers/net/phy/atheros.c
> index ba57b1a..e57c412 100644
> --- a/drivers/net/phy/atheros.c
> +++ b/drivers/net/phy/atheros.c
> @@ -33,6 +33,9 @@ static int ar8035_config(struct phy_device *phydev)
>
>         phydev->supported = phydev->drv->features;
>
> +       genphy_config_aneg(phydev);
> +       genphy_restart_aneg(phydev);
> +
>         return 0;
>  }
>
> --
> 2.1.0.27.g96db324
>
> _______________________________________________
> U-Boot mailing list
> U-Boot@lists.denx.de
> http://lists.denx.de/mailman/listinfo/u-boot
Stefan Agner Feb. 23, 2016, 5:12 a.m. UTC | #2
On 2016-02-19 13:24, Fabio Estevam wrote:
> On Fri, Feb 19, 2016 at 5:52 AM, Alison Wang <b18965@freescale.com> wrote:
>> In commit <a058052c358c> [net: phy: do not read configuration register on
>> reset], phy_reset() will clear the BMCR register. Bit 12(AUTO_NEGOTIATION)
>> is cleared too. It causes auto-negotiation timeout error on Atheros's
>> PHY AR8033.
>>
>> To fix this problem, genphy_config_aneg() and genphy_restart_aneg()
>> needs to be called in ar8035_config() to enable and restart
>> auto-negotiation.
> 
> It is always a good idea to put the author of the offending patch on Cc.
> 
> Added Stefan.
> 

Thanks.

Hm, even more fallout from my change, sorry about that.

I guess explicitly reconfigure and restart autonegotiation makes sense.

Acked-by: Stefan Agner <stefan@agner.ch>

--
Stefan

>>
>> Signed-off-by: Alison Wang <alison.wang@nxp.com>
>> ---
>>  drivers/net/phy/atheros.c | 3 +++
>>  1 file changed, 3 insertions(+)
>>
>> diff --git a/drivers/net/phy/atheros.c b/drivers/net/phy/atheros.c
>> index ba57b1a..e57c412 100644
>> --- a/drivers/net/phy/atheros.c
>> +++ b/drivers/net/phy/atheros.c
>> @@ -33,6 +33,9 @@ static int ar8035_config(struct phy_device *phydev)
>>
>>         phydev->supported = phydev->drv->features;
>>
>> +       genphy_config_aneg(phydev);
>> +       genphy_restart_aneg(phydev);
>> +
>>         return 0;
>>  }
>>
>> --
>> 2.1.0.27.g96db324
>>
>> _______________________________________________
>> U-Boot mailing list
>> U-Boot@lists.denx.de
>> http://lists.denx.de/mailman/listinfo/u-boot
Joe Hershberger Feb. 23, 2016, 7:13 p.m. UTC | #3
On Fri, Feb 19, 2016 at 1:52 AM, Alison Wang <b18965@freescale.com> wrote:
> In commit <a058052c358c> [net: phy: do not read configuration register on
> reset], phy_reset() will clear the BMCR register. Bit 12(AUTO_NEGOTIATION)
> is cleared too. It causes auto-negotiation timeout error on Atheros's
> PHY AR8033.
>
> To fix this problem, genphy_config_aneg() and genphy_restart_aneg()
> needs to be called in ar8035_config() to enable and restart
> auto-negotiation.
>
> Signed-off-by: Alison Wang <alison.wang@nxp.com>

Acked-by: Joe Hershberger <joe.hershberger@ni.com>
Joe Hershberger Feb. 26, 2016, 7:40 p.m. UTC | #4
Hi Alison,

https://patchwork.ozlabs.org/patch/585059/ was applied to u-boot-net.git.

Thanks!
-Joe
diff mbox

Patch

diff --git a/drivers/net/phy/atheros.c b/drivers/net/phy/atheros.c
index ba57b1a..e57c412 100644
--- a/drivers/net/phy/atheros.c
+++ b/drivers/net/phy/atheros.c
@@ -33,6 +33,9 @@  static int ar8035_config(struct phy_device *phydev)
 
 	phydev->supported = phydev->drv->features;
 
+	genphy_config_aneg(phydev);
+	genphy_restart_aneg(phydev);
+
 	return 0;
 }