On Thu, 20 May 2021 00:10:47 +0200 Andreas Rehn <rehn.andrea...@gmail.com> wrote:
> hey, > > sure. I give it a try tomorrow. > with 250 ms, for example, I ran into timeouts after the first tftp download. > after a manual retry, it works fine but retry is not a valid production > behavior. Just read the arch timer after the SOFT_RST write and after the first read of 0 again, and I got 17-18 ticks on my OrangePi Zero (H2+). So at 24MHz this is less than a *micro*second for the MAC to reset. So the 10 ms are already plenty. Are you sure that it's this timeout value that is improving things for you? Cheers, Andre > greetings > Andreas > > Am Mi., 19. Mai 2021 um 23:45 Uhr schrieb Andre Przywara < > andre.przyw...@arm.com>: > > > On Wed, 19 May 2021 21:42:08 +0200 > > Andreas Rehn <rehn.andrea...@gmail.com> wrote: > > > > Hi, > > > > > 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 > > > > Mmmh, why the 500ms? Can you figure out how long it typically > > takes for you? By open-coding wait_for_bit_le32() and printing the time > > it took to flip the bit back? > > > > Happy to change this then when we have some data. > > > > Cheers, > > Andre > > > > > wait_for_bit_le32 polls register value each ms. > > > Increasing the timeout for setup do not effect current behavior > > > but reduces unexpected behaviors (e.g. timeouts on tftp download). > > > > > > Signed-off-by: Andreas Rehn <rehn.andrea...@gmail.com> > > > --- > > > drivers/net/sun8i_emac.c | 2 +- > > > 1 file changed, 1 insertion(+), 1 deletion(-) > > > > > > diff --git a/drivers/net/sun8i_emac.c b/drivers/net/sun8i_emac.c > > > index 0e7ad3b0d4..23fd35f9e1 100644 > > > --- a/drivers/net/sun8i_emac.c > > > +++ b/drivers/net/sun8i_emac.c > > > @@ -475,7 +475,7 @@ static int sun8i_emac_eth_start(struct udevice *dev) > > > /* 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); > > > + EMAC_CTL1_SOFT_RST, false, 500, true); > > > if (ret) { > > > printf("%s: Timeout\n", __func__); > > > return ret; > > > > >