* [U-Boot] [PATCH] net: macb: Add small delay after link establishment
@ 2019-03-27 10:20 Stefan Roese
2019-03-29 14:40 ` Eugen.Hristev at microchip.com
2019-04-05 1:35 ` Joe Hershberger
0 siblings, 2 replies; 8+ messages in thread
From: Stefan Roese @ 2019-03-27 10:20 UTC (permalink / raw)
To: u-boot
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.
Signed-off-by: Stefan Roese <sr@denx.de>
Cc: Wenyou Yang <wenyou.yang@atmel.com>
Cc: Eugen Hristev <eugen.hristev@microchip.com>
Cc: Joe Hershberger <joe.hershberger@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);
}
}
--
2.21.0
^ permalink raw reply related [flat|nested] 8+ messages in thread* [U-Boot] [PATCH] net: macb: Add small delay after link establishment
2019-03-27 10:20 [U-Boot] [PATCH] net: macb: Add small delay after link establishment Stefan Roese
@ 2019-03-29 14:40 ` Eugen.Hristev at microchip.com
2019-03-29 14:52 ` Stefan Roese
2019-04-05 1:35 ` Joe Hershberger
1 sibling, 1 reply; 8+ messages in thread
From: Eugen.Hristev at microchip.com @ 2019-03-29 14:40 UTC (permalink / raw)
To: u-boot
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@denx.de>
> Cc: Wenyou Yang <wenyou.yang@atmel.com>
> Cc: Eugen Hristev <eugen.hristev@microchip.com>
> Cc: Joe Hershberger <joe.hershberger@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);
> }
> }
>
^ permalink raw reply [flat|nested] 8+ messages in thread* [U-Boot] [PATCH] net: macb: Add small delay after link establishment
2019-03-29 14:40 ` Eugen.Hristev at microchip.com
@ 2019-03-29 14:52 ` Stefan Roese
2019-03-29 14:59 ` Eugen.Hristev at microchip.com
0 siblings, 1 reply; 8+ messages in thread
From: Stefan Roese @ 2019-03-29 14:52 UTC (permalink / raw)
To: u-boot
Hi Eugen,
On 29.03.19 15:40, Eugen.Hristev at microchip.com 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 ?
I've seen such issues of timeouts with the first ethernet packet
after link negotiation on other platforms / controllers a few
times before in U-Boot. Using a short delay after link-up always
did help here.
I'm not saying that this is the perfect solution, but its one that
works and removes these timeouts, which really annoy me.
> Linux driver for macb has a similar issue ?
Not that I am aware of. There might be some delay in the link
establishment hidden as well. I did not check yet.
> 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 ?
Yes, something like this.
> 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 ?
I did not check too closely, as this issue was so similar to the
ones I've seen before in U-Boot (see above). It happens upon
"ping" and "tftp" - that's what I did test with.
> Sorry for maybe asking too many questions.
No need to be sorry. If this can be solved in another perhaps
cleaner way, I'll gladly use another solution.
> I have added Nicolas and Claudiu who have more experience with macb on
> at91 boards
Sure, let's see what others have to say on this. Did someone else
notice these timeouts resulting in quite big delays?
Thanks,
Stefan
^ permalink raw reply [flat|nested] 8+ messages in thread
* [U-Boot] [PATCH] net: macb: Add small delay after link establishment
2019-03-29 14:52 ` Stefan Roese
@ 2019-03-29 14:59 ` Eugen.Hristev at microchip.com
2019-03-29 15:24 ` Stefan Roese
0 siblings, 1 reply; 8+ messages in thread
From: Eugen.Hristev at microchip.com @ 2019-03-29 14:59 UTC (permalink / raw)
To: u-boot
On 29.03.2019 16:52, Stefan Roese wrote:
> Hi Eugen,
>
> On 29.03.19 15:40, Eugen.Hristev at microchip.com 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 ?
>
> I've seen such issues of timeouts with the first ethernet packet
> after link negotiation on other platforms / controllers a few
> times before in U-Boot. Using a short delay after link-up always
> did help here.
>
> I'm not saying that this is the perfect solution, but its one that
> works and removes these timeouts, which really annoy me.
>
>> Linux driver for macb has a similar issue ?
>
> Not that I am aware of. There might be some delay in the link
> establishment hidden as well. I did not check yet.
>
>> 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 ?
>
> Yes, something like this.
I see there is a small udelay below your code, you add a delay 100 times
bigger... maybe that small delay is related ?
>
>> 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 ?
>
> I did not check too closely, as this issue was so similar to the
> ones I've seen before in U-Boot (see above). It happens upon
> "ping" and "tftp" - that's what I did test with.
>
>> Sorry for maybe asking too many questions.
>
> No need to be sorry. If this can be solved in another perhaps
> cleaner way, I'll gladly use another solution.
>
>> I have added Nicolas and Claudiu who have more experience with macb on
>> at91 boards
>
> Sure, let's see what others have to say on this. Did someone else
> notice these timeouts resulting in quite big delays?
>
> Thanks,
> Stefan
^ permalink raw reply [flat|nested] 8+ messages in thread
* [U-Boot] [PATCH] net: macb: Add small delay after link establishment
2019-03-29 14:59 ` Eugen.Hristev at microchip.com
@ 2019-03-29 15:24 ` Stefan Roese
2019-04-02 12:16 ` Eugen.Hristev at microchip.com
0 siblings, 1 reply; 8+ messages in thread
From: Stefan Roese @ 2019-03-29 15:24 UTC (permalink / raw)
To: u-boot
On 29.03.19 15:59, Eugen.Hristev at microchip.com wrote:
>
>
> On 29.03.2019 16:52, Stefan Roese wrote:
>
>> Hi Eugen,
>>
>> On 29.03.19 15:40, Eugen.Hristev at microchip.com 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 ?
>>
>> I've seen such issues of timeouts with the first ethernet packet
>> after link negotiation on other platforms / controllers a few
>> times before in U-Boot. Using a short delay after link-up always
>> did help here.
>>
>> I'm not saying that this is the perfect solution, but its one that
>> works and removes these timeouts, which really annoy me.
>>
>>> Linux driver for macb has a similar issue ?
>>
>> Not that I am aware of. There might be some delay in the link
>> establishment hidden as well. I did not check yet.
>>
>>> 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 ?
>>
>> Yes, something like this.
>
> I see there is a small udelay below your code, you add a delay 100 times
> bigger... maybe that small delay is related ?
The udelay(100) below is for the timeout handling of the link autoneg
loop. This should be probably moved to some loop using get_timer() so
that this udelay can be removed completely.
Coming back to your question, if these delays are related. No, they
are not. The one that I insert is explicitly added *after* the link
was established. I could experiment if a smaller value also works, but
I found that 100ms was working in all my test cases. Possibly 10ms
or even 1ms also works. Not sure.
Thanks,
Stefan
^ permalink raw reply [flat|nested] 8+ messages in thread
* [U-Boot] [PATCH] net: macb: Add small delay after link establishment
2019-03-29 15:24 ` Stefan Roese
@ 2019-04-02 12:16 ` Eugen.Hristev at microchip.com
0 siblings, 0 replies; 8+ messages in thread
From: Eugen.Hristev at microchip.com @ 2019-04-02 12:16 UTC (permalink / raw)
To: u-boot
On 29.03.2019 17:24, Stefan Roese wrote:
>
> On 29.03.19 15:59, Eugen.Hristev at microchip.com wrote:
>>
>>
>> On 29.03.2019 16:52, Stefan Roese wrote:
>>
>>> Hi Eugen,
>>>
>>> On 29.03.19 15:40, Eugen.Hristev at microchip.com 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 ?
>>>
>>> I've seen such issues of timeouts with the first ethernet packet
>>> after link negotiation on other platforms / controllers a few
>>> times before in U-Boot. Using a short delay after link-up always
>>> did help here.
>>>
>>> I'm not saying that this is the perfect solution, but its one that
>>> works and removes these timeouts, which really annoy me.
>>>
>>>> Linux driver for macb has a similar issue ?
>>>
>>> Not that I am aware of. There might be some delay in the link
>>> establishment hidden as well. I did not check yet.
>>>
>>>> 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 ?
>>>
>>> Yes, something like this.
>>
>> I see there is a small udelay below your code, you add a delay 100 times
>> bigger... maybe that small delay is related ?
>
> The udelay(100) below is for the timeout handling of the link autoneg
> loop. This should be probably moved to some loop using get_timer() so
> that this udelay can be removed completely.
>
> Coming back to your question, if these delays are related. No, they
> are not. The one that I insert is explicitly added *after* the link
> was established. I could experiment if a smaller value also works, but
> I found that 100ms was working in all my test cases. Possibly 10ms
> or even 1ms also works. Not sure.
Hi Joe,
If you agree with this change I will take it through my tree. Or any
feedback appreciated from you or someone familiar with the macb /
network devices.
Thanks !
Eugen
>
> Thanks,
> Stefan
^ permalink raw reply [flat|nested] 8+ messages in thread
* [U-Boot] [PATCH] net: macb: Add small delay after link establishment
2019-03-27 10:20 [U-Boot] [PATCH] net: macb: Add small delay after link establishment Stefan Roese
2019-03-29 14:40 ` Eugen.Hristev at microchip.com
@ 2019-04-05 1:35 ` Joe Hershberger
2019-04-08 6:02 ` Eugen.Hristev at microchip.com
1 sibling, 1 reply; 8+ messages in thread
From: Joe Hershberger @ 2019-04-05 1:35 UTC (permalink / raw)
To: u-boot
On Wed, Mar 27, 2019 at 5:20 AM Stefan Roese <sr@denx.de> 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.
>
> Signed-off-by: Stefan Roese <sr@denx.de>
> Cc: Wenyou Yang <wenyou.yang@atmel.com>
> Cc: Eugen Hristev <eugen.hristev@microchip.com>
> Cc: Joe Hershberger <joe.hershberger@ni.com>
Acked-by: Joe Hershberger <joe.hershberger@ni.com>
^ permalink raw reply [flat|nested] 8+ messages in thread
* [U-Boot] [PATCH] net: macb: Add small delay after link establishment
2019-04-05 1:35 ` Joe Hershberger
@ 2019-04-08 6:02 ` Eugen.Hristev at microchip.com
0 siblings, 0 replies; 8+ messages in thread
From: Eugen.Hristev at microchip.com @ 2019-04-08 6:02 UTC (permalink / raw)
To: u-boot
On 05.04.2019 04:35, Joe Hershberger wrote:
>
> On Wed, Mar 27, 2019 at 5:20 AM Stefan Roese <sr@denx.de> 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.
>>
>> Signed-off-by: Stefan Roese <sr@denx.de>
>> Cc: Wenyou Yang <wenyou.yang@atmel.com>
>> Cc: Eugen Hristev <eugen.hristev@microchip.com>
>> Cc: Joe Hershberger <joe.hershberger@ni.com>
>
> Acked-by: Joe Hershberger <joe.hershberger@ni.com>
> _______________________________________________
Applied to u-boot-atmel/next
Thanks !
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2019-04-08 6:02 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2019-03-27 10:20 [U-Boot] [PATCH] net: macb: Add small delay after link establishment Stefan Roese
2019-03-29 14:40 ` Eugen.Hristev at microchip.com
2019-03-29 14:52 ` Stefan Roese
2019-03-29 14:59 ` Eugen.Hristev at microchip.com
2019-03-29 15:24 ` Stefan Roese
2019-04-02 12:16 ` Eugen.Hristev at microchip.com
2019-04-05 1:35 ` Joe Hershberger
2019-04-08 6:02 ` Eugen.Hristev at microchip.com
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.