diff mbox series

[U-Boot,v2] apalis_imx6: increase phy autoneg timeout

Message ID 20190624083914.14170-1-igor.opaniuk@gmail.com
State Accepted
Commit 0ac662da35e48b859b5d43e0c86f233f25730ee5
Delegated to: Stefano Babic
Headers show
Series [U-Boot,v2] apalis_imx6: increase phy autoneg timeout | expand

Commit Message

Igor Opaniuk June 24, 2019, 8:39 a.m. UTC
From: Igor Opaniuk <igor.opaniuk@toradex.com>

Default value (4000ms) of PHY_ANEG_TIMEOUT for Micrel KSZ9031 contoller
isn't sufficient to finish auto-negotiation, which sometimes leads to
timeout errors:

Apalis iMX6 # dhcp
FEC Waiting for PHY auto negotiation to complete......... TIMEOUT !

Increase the auto-negotiation time-out to 15000ms.

Signed-off-by: Igor Opaniuk <igor.opaniuk@toradex.com>
---

v2:
- Based on empirical results from Philippe Schenker, increased timeout
  value to 15s, just to be on the safe side

 include/configs/apalis_imx6.h | 1 +
 1 file changed, 1 insertion(+)

Comments

Philippe Schenker June 25, 2019, 11:04 a.m. UTC | #1
On Mon, 2019-06-24 at 11:39 +0300, Igor Opaniuk wrote:
> From: Igor Opaniuk <igor.opaniuk@toradex.com>
> 
> Default value (4000ms) of PHY_ANEG_TIMEOUT for Micrel KSZ9031 contoller
> isn't sufficient to finish auto-negotiation, which sometimes leads to
> timeout errors:
> 
> Apalis iMX6 # dhcp
> FEC Waiting for PHY auto negotiation to complete......... TIMEOUT !
> 
> Increase the auto-negotiation time-out to 15000ms.
> 
> Signed-off-by: Igor Opaniuk <igor.opaniuk@toradex.com>

Reviewed-by: Philippe Schenker <philippe.schenker@toradex.com>

> ---
> 
> v2:
> - Based on empirical results from Philippe Schenker, increased timeout
>   value to 15s, just to be on the safe side
> 
>  include/configs/apalis_imx6.h | 1 +
>  1 file changed, 1 insertion(+)
> 
> diff --git a/include/configs/apalis_imx6.h b/include/configs/apalis_imx6.h
> index 4b0a3fb26b..df31cf6fe7 100644
> --- a/include/configs/apalis_imx6.h
> +++ b/include/configs/apalis_imx6.h
> @@ -58,6 +58,7 @@
>  #define IMX_FEC_BASE			ENET_BASE_ADDR
>  #define CONFIG_FEC_XCV_TYPE		RGMII
>  #define CONFIG_ETHPRIME			"FEC"
> +#define PHY_ANEG_TIMEOUT		15000 /* PHY needs longer aneg time */
>  #define CONFIG_FEC_MXC_PHYADDR		6
>  #define CONFIG_TFTP_TSIZE
>
Stefano Babic June 27, 2019, 12:03 p.m. UTC | #2
Hi Igor,

On 24/06/19 10:39, Igor Opaniuk wrote:
> From: Igor Opaniuk <igor.opaniuk@toradex.com>
> 
> Default value (4000ms) of PHY_ANEG_TIMEOUT for Micrel KSZ9031 contoller
> isn't sufficient to finish auto-negotiation, which sometimes leads to
> timeout errors:
> 
> Apalis iMX6 # dhcp
> FEC Waiting for PHY auto negotiation to complete......... TIMEOUT !
> 
> Increase the auto-negotiation time-out to 15000ms.
> 

I have no problems to merge this, it is your board. But this seems just
hide the issue. 15 seconds for autonegotiation timeout is just a
work-around. This means that the autonegotiation fails several times and
(maybe with some switches) it has a bigger probability to succeed if we
increase the timeout, that is the phy tries more time to set up the link.

Best regards,
Stefano Babic

> Signed-off-by: Igor Opaniuk <igor.opaniuk@toradex.com>
> ---
> 
> v2:
> - Based on empirical results from Philippe Schenker, increased timeout
>   value to 15s, just to be on the safe side
> 
>  include/configs/apalis_imx6.h | 1 +
>  1 file changed, 1 insertion(+)
> 
> diff --git a/include/configs/apalis_imx6.h b/include/configs/apalis_imx6.h
> index 4b0a3fb26b..df31cf6fe7 100644
> --- a/include/configs/apalis_imx6.h
> +++ b/include/configs/apalis_imx6.h
> @@ -58,6 +58,7 @@
>  #define IMX_FEC_BASE			ENET_BASE_ADDR
>  #define CONFIG_FEC_XCV_TYPE		RGMII
>  #define CONFIG_ETHPRIME			"FEC"
> +#define PHY_ANEG_TIMEOUT		15000 /* PHY needs longer aneg time */
>  #define CONFIG_FEC_MXC_PHYADDR		6
>  #define CONFIG_TFTP_TSIZE
>  
>
Philippe Schenker June 27, 2019, 12:17 p.m. UTC | #3
On Thu, 2019-06-27 at 14:03 +0200, Stefano Babic wrote:
> Hi Igor,
> 
> On 24/06/19 10:39, Igor Opaniuk wrote:
> > From: Igor Opaniuk <igor.opaniuk@toradex.com>
> > 
> > Default value (4000ms) of PHY_ANEG_TIMEOUT for Micrel KSZ9031 contoller
> > isn't sufficient to finish auto-negotiation, which sometimes leads to
> > timeout errors:
> > 
> > Apalis iMX6 # dhcp
> > FEC Waiting for PHY auto negotiation to complete......... TIMEOUT !
> > 
> > Increase the auto-negotiation time-out to 15000ms.
> > 
> 
> I have no problems to merge this, it is your board. But this seems just
> hide the issue. 15 seconds for autonegotiation timeout is just a
> work-around. This means that the autonegotiation fails several times and
> (maybe with some switches) it has a bigger probability to succeed if we
> increase the timeout, that is the phy tries more time to set up the link.
> 
> Best regards,
> Stefano Babic

Hi Stefano,

I know that 15s for this timeout is huge. But I tried a lot of things with this
PHY and had contact with Microchip about this with no outcome. We did some
improvements on the clock side that got things better.
To mention here is that the KSZ9031 is also not compliant with IEEE802.3 in
gigabit-mode. I suspect that the gigabit-part of that phy is just 'broken'. I
also compared the same switches I tried to other boards like Beagle-X15, they
have the same long aneg-times so I basically gave up on this and see this now as
is.

Good news is that Microchip has a follow-up phy, the KSZ9131. We've tried it and
it looks much better and also faster with autonegotiation. 

We could also limit speed of the phy to 100Mbps, there autonegotiation is much
faster, but this solution also hides just our problem. That's why we decided for
that time-out.

Best regards,
Philippe

> 
> > Signed-off-by: Igor Opaniuk <igor.opaniuk@toradex.com>
> > ---
> > 
> > v2:
> > - Based on empirical results from Philippe Schenker, increased timeout
> >   value to 15s, just to be on the safe side
> > 
> >  include/configs/apalis_imx6.h | 1 +
> >  1 file changed, 1 insertion(+)
> > 
> > diff --git a/include/configs/apalis_imx6.h b/include/configs/apalis_imx6.h
> > index 4b0a3fb26b..df31cf6fe7 100644
> > --- a/include/configs/apalis_imx6.h
> > +++ b/include/configs/apalis_imx6.h
> > @@ -58,6 +58,7 @@
> >  #define IMX_FEC_BASE			ENET_BASE_ADDR
> >  #define CONFIG_FEC_XCV_TYPE		RGMII
> >  #define CONFIG_ETHPRIME			"FEC"
> > +#define PHY_ANEG_TIMEOUT		15000 /* PHY needs longer aneg time */
> >  #define CONFIG_FEC_MXC_PHYADDR		6
> >  #define CONFIG_TFTP_TSIZE
> >  
> > 
> 
>
Stefano Babic June 27, 2019, 12:20 p.m. UTC | #4
Hi Philippe,

On 27/06/19 14:17, Philippe Schenker wrote:
> On Thu, 2019-06-27 at 14:03 +0200, Stefano Babic wrote:
>> Hi Igor,
>>
>> On 24/06/19 10:39, Igor Opaniuk wrote:
>>> From: Igor Opaniuk <igor.opaniuk@toradex.com>
>>>
>>> Default value (4000ms) of PHY_ANEG_TIMEOUT for Micrel KSZ9031 contoller
>>> isn't sufficient to finish auto-negotiation, which sometimes leads to
>>> timeout errors:
>>>
>>> Apalis iMX6 # dhcp
>>> FEC Waiting for PHY auto negotiation to complete......... TIMEOUT !
>>>
>>> Increase the auto-negotiation time-out to 15000ms.
>>>
>>
>> I have no problems to merge this, it is your board. But this seems just
>> hide the issue. 15 seconds for autonegotiation timeout is just a
>> work-around. This means that the autonegotiation fails several times and
>> (maybe with some switches) it has a bigger probability to succeed if we
>> increase the timeout, that is the phy tries more time to set up the link.
>>
>> Best regards,
>> Stefano Babic
> 
> Hi Stefano,
> 
> I know that 15s for this timeout is huge. But I tried a lot of things with this
> PHY and had contact with Microchip about this with no outcome.

ok

> We did some
> improvements on the clock side that got things better.
> To mention here is that the KSZ9031 is also not compliant with IEEE802.3 in
> gigabit-mode. I suspect that the gigabit-part of that phy is just 'broken'. I
> also compared the same switches I tried to other boards like Beagle-X15, they
> have the same long aneg-times so I basically gave up on this and see this now as
> is.

Ok - thanks for clarification.

> 
> Good news is that Microchip has a follow-up phy, the KSZ9131. We've tried it and
> it looks much better and also faster with autonegotiation. 
> 
> We could also limit speed of the phy to 100Mbps, there autonegotiation is much
> faster, but this solution also hides just our problem. That's why we decided for
> that time-out.

ok - so we know there is a HW issue, and we cannot solve it - just add
this work-around. I apply this still for 2019.04 as "fix".

Best regards,
Stefano

> 
> Best regards,
> Philippe
> 
>>
>>> Signed-off-by: Igor Opaniuk <igor.opaniuk@toradex.com>
>>> ---
>>>
>>> v2:
>>> - Based on empirical results from Philippe Schenker, increased timeout
>>>   value to 15s, just to be on the safe side
>>>
>>>  include/configs/apalis_imx6.h | 1 +
>>>  1 file changed, 1 insertion(+)
>>>
>>> diff --git a/include/configs/apalis_imx6.h b/include/configs/apalis_imx6.h
>>> index 4b0a3fb26b..df31cf6fe7 100644
>>> --- a/include/configs/apalis_imx6.h
>>> +++ b/include/configs/apalis_imx6.h
>>> @@ -58,6 +58,7 @@
>>>  #define IMX_FEC_BASE			ENET_BASE_ADDR
>>>  #define CONFIG_FEC_XCV_TYPE		RGMII
>>>  #define CONFIG_ETHPRIME			"FEC"
>>> +#define PHY_ANEG_TIMEOUT		15000 /* PHY needs longer aneg time */
>>>  #define CONFIG_FEC_MXC_PHYADDR		6
>>>  #define CONFIG_TFTP_TSIZE
>>>  
>>>
>>
>>
>
diff mbox series

Patch

diff --git a/include/configs/apalis_imx6.h b/include/configs/apalis_imx6.h
index 4b0a3fb26b..df31cf6fe7 100644
--- a/include/configs/apalis_imx6.h
+++ b/include/configs/apalis_imx6.h
@@ -58,6 +58,7 @@ 
 #define IMX_FEC_BASE			ENET_BASE_ADDR
 #define CONFIG_FEC_XCV_TYPE		RGMII
 #define CONFIG_ETHPRIME			"FEC"
+#define PHY_ANEG_TIMEOUT		15000 /* PHY needs longer aneg time */
 #define CONFIG_FEC_MXC_PHYADDR		6
 #define CONFIG_TFTP_TSIZE