[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