
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.andreas86@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 */