v3s emac soft reset tooks quit longer if autonegation is active
on 100 Mbit full duplex pairs what can result in
`sun8i_emac_eth_start: Timeout` error

wait_for_bit_le32 polls register value each ms.
Increasing the timeout for setup to 1000 ms and above results still in start 
timeouts.

Linux kernel driver dwmac-sun8i work very nice and don't provide a soft reset.
Skip soft reset on u-boot for V3s provide the expected behavior
on all connection permutations. If cable is not plugged in, the timeout
comes form the phy driver itself.

Signed-off-by: Andreas Rehn <rehn.andrea...@gmail.com>
---
Changes in v2:
        - skip soft reset if MACH_SUN8I_V3S is enabled
        - depends on PATCH v2 4/6

 drivers/net/sun8i_emac.c | 14 ++++++++------
 1 file changed, 8 insertions(+), 6 deletions(-)

diff --git a/drivers/net/sun8i_emac.c b/drivers/net/sun8i_emac.c
index ab9f61994c..403e9b9d31 100644
--- a/drivers/net/sun8i_emac.c
+++ b/drivers/net/sun8i_emac.c
@@ -474,12 +474,14 @@ static int sun8i_emac_eth_start(struct udevice *dev)
        int ret;
 
        /* Soft reset MAC */
-       writel(EMAC_CTL1_SOFT_RST, priv->mac_reg + EMAC_CTL1);
-       ret = wait_for_bit_le32(priv->mac_reg + EMAC_CTL1,
-                               EMAC_CTL1_SOFT_RST, false, 10, true);
-       if (ret) {
-               printf("%s: Timeout\n", __func__);
-               return ret;
+       if (!IS_ENABLED(CONFIG_MACH_SUN8I_V3S)) {
+               writel(EMAC_CTL1_SOFT_RST, priv->mac_reg + EMAC_CTL1);
+               ret = wait_for_bit_le32(priv->mac_reg + EMAC_CTL1,
+                                       EMAC_CTL1_SOFT_RST, false, 10, true);
+               if (ret) {
+                       printf("%s: Timeout\n", __func__);
+                       return ret;
+               }
        }
 
        /* Rewrite mac address after reset */
-- 
2.25.1

Reply via email to