[PATCH v2 0/3] net: lwip: halt ethernet after network commands
David Lechner
dlechner at baylibre.com
Tue May 12 23:48:12 CEST 2026
Background:
While testing [1], I found that it would take down my local network if
I left the command prompt open for more than 30 seconds after running
any network command. The network activity light on the board running
U-Boot would go crazy and other network adapters on the network would
start getting watchdog timeouts. So apparently, it is doing something
quite low-level and I don't have any hardware to sniff that (Wireshark
on another computer was no help since all network adapters on the
network stopped working.) So I took a logical approach of looking at
the code to see if I could find anything that would cause this. This
seemed to only happen after I switched from the legacy network
implementation to the lwIP implementation, so I looked for differences
between the two implementations.
After some investigation, I found that the lwIP implementation was
different from the legacy implementation in that it does not call
eth_halt() after a network command. Since the problem happened only
when at the command prompt with no command running, this seemed like a
likely culprit. And indeed, it does seem to fix the issue for me.
For reference, the legacy implementation does something like this
as documented in doc/develop/driver-model/ethernet.rst:
(some net operation (ping / tftp / whatever...))
eth_init()
ops->start()
eth_send()
ops->send()
eth_rx()
ops->recv()
(process packet)
if (ops->free_pkt)
ops->free_pkt()
eth_halt()
ops->stop()
After this patch, the lwIP implementation will do the same thing for
all ethernet commands.
[1]: https://lore.kernel.org/u-boot/20260429-add-ethernet-support-for-genio-520-720-v4-0-be54e17239b7@baylibre.com/
During review of v1, we noticed some existing bugs in wget_handle_request()
so two new patches were added to fix those first before attempting the
primary objective.
Signed-off-by: David Lechner <dlechner at baylibre.com>
---
Changes in v2:
- Added two new patches to address existing bugs in the code.
- Don't remove eth_halt() before eth_init().
- Link to v1: https://patch.msgid.link/20260509-net-lwip-add-stop-function-v1-1-62d854bfa66a@baylibre.com
To: Jerome Forissier <jerome.forissier at arm.com>
To: Tom Rini <trini at konsulko.com>
To: Ilias Apalodimas <ilias.apalodimas at linaro.org>
Cc: Julien Stephan <jstephan at baylibre.com>
Cc: u-boot at lists.denx.de
---
David Lechner (3):
net: lwip: wget: fix error handling in wget_do_request()
net: lwip: wget: return errno codes from wget_do_request()
net: lwip: introduce net_lwip_eth_stop() function
cmd/lwip/ping.c | 10 ++++-
cmd/lwip/sntp.c | 10 ++++-
include/net-lwip.h | 1 +
net/lwip/dhcp.c | 15 ++++++--
net/lwip/dns.c | 7 +++-
net/lwip/net-lwip.c | 5 +++
net/lwip/nfs.c | 4 ++
net/lwip/tftp.c | 4 ++
net/lwip/wget.c | 107 ++++++++++++++++++++++++++++++----------------------
9 files changed, 108 insertions(+), 55 deletions(-)
---
base-commit: 36d4c653580824b16574560b21d4401614d8b68e
change-id: 20260509-net-lwip-add-stop-function-7f7794074844
Best regards,
--
David Lechner <dlechner at baylibre.com>
More information about the U-Boot
mailing list