[U-Boot] [PATCH] net: macb: Add small delay after link establishment

Eugen.Hristev at microchip.com Eugen.Hristev at microchip.com
Fri Mar 29 14:40:49 UTC 2019



On 27.03.2019 12:20, Stefan Roese wrote:

> I've noticed that the first ethernet packet after PHY link establishment
> is not tranferred correctly most of the time on my AT91SAM9G25 board.
> Here I usually see a timeout of a few seconds, which is quite
> annoying.
> 
> Adding a small delay (10ms in this case) after the link establishment
> helps to solve this problem. With this patch applied, this timeout
> on the first packet is not seen any more.

Hi Stefan,

I find this a bit odd... maybe someone with a different board having 
this Ethernet controller can confirm or infirm this ?
Linux driver for macb has a similar issue ?
Adding a delay just for the sake of it might hide another issue that we 
are missing at this point: why exactly transfer fails right away... it 
is likely that we want to send packets but link in fact is not ready ?
Or any reason why the packet is not correctly transferred? Do you see 
errors on the line or the packet vanishes completely ?
What kind of packet is this first one ? Does it depend on the packet type ?

Sorry for maybe asking too many questions.

I have added Nicolas and Claudiu who have more experience with macb on 
at91 boards

Thanks,
Eugen

> 
> Signed-off-by: Stefan Roese <sr at denx.de>
> Cc: Wenyou Yang <wenyou.yang at atmel.com>
> Cc: Eugen Hristev <eugen.hristev at microchip.com>
> Cc: Joe Hershberger <joe.hershberger at ni.com>
> ---
>   drivers/net/macb.c | 8 +++++++-
>   1 file changed, 7 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/net/macb.c b/drivers/net/macb.c
> index 182331f61d..72614164e9 100644
> --- a/drivers/net/macb.c
> +++ b/drivers/net/macb.c
> @@ -550,8 +550,14 @@ static int macb_phy_init(struct macb_device *macb, const char *name)
>   
>   		for (i = 0; i < MACB_AUTONEG_TIMEOUT / 100; i++) {
>   			status = macb_mdio_read(macb, MII_BMSR);
> -			if (status & BMSR_LSTATUS)
> +			if (status & BMSR_LSTATUS) {
> +				/*
> +				 * Delay a bit after the link is established,
> +				 * so that the next xfer does not fail
> +				 */
> +				mdelay(10);
>   				break;
> +			}
>   			udelay(100);
>   		}
>   	}
> 


More information about the U-Boot mailing list