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

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(+)
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

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

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

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

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
participants (3)
-
Igor Opaniuk
-
Philippe Schenker
-
Stefano Babic