
On Tue, 28 Nov 2023 at 16:37, neil.armstrong@linaro.org wrote:
Hi,
On 27/11/2023 13:56, Maxim Uvarov wrote:
Hello,
Please find updated version of lwip patches. Changes are in the changelog bellow.
I've ran it on the libretech-cc board, and tried to load grub over tftp, and I got this strange EFI boot error:
======================================================================================== U-Boot 2024.01-rc3-00056-g10d85cb3e3 (Nov 28 2023 - 11:17:24 +0100) libretech-cc
Model: Libre Computer AML-S905X-CC SoC: Amlogic Meson GXL (S905X) Revision 21:d (84:2) DRAM: 2 GiB
<snip>
Net: eth0: ethernet@c9410000 Hit any key to stop autoboot: 0 => setenv autoload no => dhcp ethernet@c9410000 LPA corruption - aneg restart ethernet@c9410000 Waiting for PHY auto negotiation to complete.... done Speed: 100, full duplex eth0: ethernet@c9410000 3e:a6:23:c0:39:4b active dhcp_tmo 20/20 dhcp_tmo 19/20 DHCP client bound to address 10.34.56.105 => tftpboot 8080000 grubaa64.efi init already done for ethernet@c9410000 Speed: 100, full duplex TFTP from server 10.34.56.1; our IP address is 10.34.56.105 Filename 'grubaa64.efi'. Load address: 0x8080000 Loading:############ done Bytes transferred = 4288512 (0x417000 hex) => crc32 8080000 0x417000 crc32 for 08080000 ... 08496fff ==> c79bc066
========================================================================================
- DHCP OK,
- transfer OK
- CRC32 value OK
but then trying to run the EFI binary:
======================================================================================== => bootefi 8080000 No EFI system partition No EFI system partition Failed to persist EFI variables No UEFI binary known at 8080000
========================================================================================
This is what I get on the current master without this patchset:
======================================================================================== U-Boot 2024.01-rc3-00013-gacae7eb5fe (Nov 28 2023 - 11:29:38 +0100) libretech-cc
Model: Libre Computer AML-S905X-CC SoC: Amlogic Meson GXL (S905X) Revision 21:d (84:2) DRAM: 2 GiB
<snip>
Net: eth0: ethernet@c9410000 Hit any key to stop autoboot: 0 => setenv autoload no => dhcp ethernet@c9410000 LPA corruption - aneg restart ethernet@c9410000 Waiting for PHY auto negotiation to complete.... done Speed: 100, full duplex BOOTP broadcast 1 BOOTP broadcast 2 BOOTP broadcast 3 DHCP client bound to address 10.34.56.105 (1008 ms) => tftpboot 8080000 grubaa64.efi Speed: 100, full duplex Using ethernet@c9410000 device TFTP from server 10.34.56.1; our IP address is 10.34.56.105 Filename 'grubaa64.efi'. Load address: 0x8080000 Loading: ##T #T T ############################################################## ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ################################################################# ########################################################## 199.2 KiB/s done Bytes transferred = 4288512 (417000 hex) => crc32 8080000 0x417000 crc32 for 08080000 ... 08496fff ==> c79bc066 => bootefi 8080000 No EFI system partition No EFI system partition Failed to persist EFI variables Booting /grubaa64.efi Welcome to GRUB!
<snip>
grub> net_ls_addr efinet0 3e:a6:23:c0:39:4b 10.34.56.105
========================================================================================
I don't see what's wrong, crc32 is good and env variables are the same: fileaddr=8080000 filesize=417000
Neil
Ok. You provided a small fix for this use case. Will take it into a new version.
Thank you, Maxim.
changelog: v11: - v11 is mosly respin of v10 patches with CI error fixes. Gitlab CI:
https://source.denx.de/u-boot/custodians/u-boot-tpm/-/pipelines/18368
Azure CI:
https://dev.azure.com/u-boot/u-boot/_build/results?buildId=7366&view=res...
(Azure CI, which is connected to github. Sometime I can
see
tftp timeout after some part of download there, but
that can not be
reproduced locally. While Gitblab CI is stable.
Because of num tries in
CI I suspect this CI was not always reliable.) Azure and Gitlab also have different toolchains and I would say Gitlab generates bigger code then Azure CI. Also many boards have a binary limit size of 800k (even qemu has limits). And increased limits to fit all the
code. Specially did it
patch by board config to show which boards are failing
to build. There I have
a question if we really want to support new
functionality for old boards (mips,
arm32 and etc...). I hope board owners can help me if it's valid to increase these limits. In this version I used git submodules and friend CI with submodules. But I don't mind if you decide to maintain it
in a different
way. v10: - fix ping with following tftp command issue with incorrect ping timeout clear. - Makefile on make will init submodules and if needed will do git clone. - wget - some minor code style changes. v9: - added first patch describing git submodule for lwip. So the build procedure is: git submodule init git submodule update make - reworked a little bit dhcp cmd state polling - fixed review comments for v8 v8: - comments for previous review - removed lwip timeout callback pointer - made lwip timeouts works, that also allowed to remove static vars. - setenv for filesize tftp and wget has to be in hex. - Makefile changes always compile it tftp,dns,wget,ping due to it can be used not only by CONFIG_CMD_. - Kconfig changes - simplify lwIP settings and support only one configuration. - tested with mini debian.iso load over http or tftp, mount and boot it (qemu, arm64). v7: - more review fixes. - support of multiply eth devices, were "ethact" selects the active device. v6: - fixed review comments for v5 (thanks Ilias and Simon). v5: - fixed Iliases comments and split big patch on the small ones. v4: - tested with tests/py/ did some minor fixes (out of tree build, variables set after downloads). - accounted review comments for documentation. - implemented dns command - corrected wget command to not use serverip variable and
use just
url string. v3: - use lwip commands for ping,tftp,wget,dhcp if this patch applied. Drop CONFIG_LIB_LWIP_REPLACE_<COMMAND> option. - docs: use rst variant and drop references to RFC.
Maxim Uvarov (43): submodule: add lwIP as git submodule net/lwip: add doc/develop/net_lwip.rst net/lwip: integrate lwIP library net/lwip: implement dns cmd net/lwip: implement dhcp cmd net/lwip: implement tftp cmd net/lwip: implement wget cmd net/lwip: implement ping cmd net/lwip: add lwIP configuration net/lwip: implement lwIP port to U-Boot net/lwip: update .gitignore with lwIP net/lwip: connection between cmd and lwip apps net/lwip: replace original net commands with lwip net/lwip: split net.h to net.h, arp.h and eth.h test_efi_loader.py: use $filesize var test_net: print out net list net: sandbox: fix NULL pointer derefences net/smc911x: fix return from smc911x_send sandbox: eth-raw-os: successful return code is 0 driver/net/rtl8139: remove debug print mach-socfpga: do not overlap defines with lwip bcm_ns3: fix overlap define with lwip rcar3_salvator-x_defconfig: increase binary size limit lwip: omap3: rename mem_init configs/turris_omnia_defconfig set limit to 0xf6000 configs/tbs2910_defconfig inc limit configs/socfpga_secu1_defconfig: enable LTO configs/turris_omnia_defconfig: enable LTO configs/am335x_boneblack_vboot_defconfig: enable LTO and increase SPL size configs/sheevaplug_defconfig: enable LTO and inc size configs/lschlv2_defconfig: enable LTO and inc size configs/lsxhl_defconfig: LTO + size configs/am335x_evm_defconfig: inc SPL size configs/bk4r1_defconfig: inc size configs/linkit-smart-7688_defconfig: increse size configs/gardena-smart-gateway-mt7688_defconfig: increase size configs/rcar3_ulcb_defconfig: increase size configs/qemu-x86_64_defconfig: increase ROM size Makefile: add dtbs to clean .azure-pipelines: init submodules mach-mtmips: inc SPL size limit configs/linkit-smart-7688_defconfig: increase board limit .gitlab-ci.yml: change ownership of the git files
.azure-pipelines.yml | 10 +- .gitlab-ci.yml | 15 +- .gitmodules | 4 + Makefile | 12 +- arch/arm/include/asm/arch-omap3/mem.h | 2 +- arch/arm/mach-omap2/omap3/board.c | 2 +- arch/arm/mach-omap2/omap3/emif4.c | 4 +- arch/arm/mach-omap2/omap3/sdrc.c | 6 +- .../mach-socfpga/include/mach/handoff_soc64.h | 6 - arch/arm/mach-socfpga/wrap_handoff_soc64.c | 9 + arch/mips/mach-mtmips/Kconfig | 2 +- arch/sandbox/cpu/eth-raw-os.c | 2 +- boot/bootmeth_efi.c | 18 +- boot/bootmeth_pxe.c | 21 +- cmd/Makefile | 1 + cmd/net-lwip.c | 307 ++++++++++++++++ cmd/net.c | 86 +---- cmd/pxe.c | 19 +- configs/am335x_boneblack_vboot_defconfig | 3 + configs/am335x_evm_defconfig | 1 + configs/bk4r1_defconfig | 2 +- .../gardena-smart-gateway-mt7688_defconfig | 2 +- configs/linkit-smart-7688_defconfig | 2 +- configs/lschlv2_defconfig | 3 +- configs/lsxhl_defconfig | 3 +- configs/qemu-x86_64_defconfig | 5 +- configs/rcar3_salvator-x_defconfig | 3 +- configs/rcar3_ulcb_defconfig | 1 + configs/sheevaplug_defconfig | 3 +- configs/socfpga_secu1_defconfig | 1 + configs/tbs2910_defconfig | 2 +- configs/turris_omnia_defconfig | 3 +- doc/develop/index.rst | 1 + doc/develop/net_lwip.rst | 75 ++++ drivers/net/rtl8139.c | 1 - drivers/net/sandbox.c | 5 + drivers/net/smc911x.c | 2 +- include/configs/bcm_ns3.h | 6 +- include/net.h | 197 +---------- include/net/arp.h | 9 + include/net/eth.h | 194 +++++++++++ include/net/lwip.h | 73 ++++ include/net/ulwip.h | 67 ++++ lib/Kconfig | 2 +- net/Kconfig | 3 + net/Makefile | 1 + net/eth-uclass.c | 37 +- net/lwip/.gitignore | 8 + net/lwip/Kconfig | 34 ++ net/lwip/Makefile | 70 ++++ net/lwip/apps/dhcp/lwip-dhcp.c | 86 +++++ net/lwip/apps/dns/lwip-dns.c | 63 ++++ net/lwip/apps/http/Makefile | 6 + net/lwip/apps/http/lwip-wget.c | 105 ++++++ net/lwip/apps/ping/Makefile | 12 + net/lwip/apps/ping/lwip_ping.c | 39 +++ net/lwip/apps/ping/lwip_ping.h | 15 + net/lwip/apps/ping/ping.h | 28 ++ net/lwip/apps/tftp/Makefile | 7 + net/lwip/apps/tftp/lwip-tftp.c | 132 +++++++ net/lwip/lwip-external | 1 + net/lwip/lwipopts.h | 178 ++++++++++ net/lwip/port/if.c | 327 ++++++++++++++++++ net/lwip/port/include/arch/cc.h | 44 +++ net/lwip/port/include/arch/sys_arch.h | 10 + net/lwip/port/include/limits.h | 0 net/lwip/port/sys-arch.c | 13 + net/net.c | 44 ++- test/py/tests/test_efi_loader.py | 4 +- test/py/tests/test_net.py | 2 + 70 files changed, 2113 insertions(+), 348 deletions(-) create mode 100644 .gitmodules create mode 100644 cmd/net-lwip.c create mode 100644 doc/develop/net_lwip.rst create mode 100644 include/net/arp.h create mode 100644 include/net/eth.h create mode 100644 include/net/lwip.h create mode 100644 include/net/ulwip.h create mode 100644 net/lwip/.gitignore create mode 100644 net/lwip/Kconfig create mode 100644 net/lwip/Makefile create mode 100644 net/lwip/apps/dhcp/lwip-dhcp.c create mode 100644 net/lwip/apps/dns/lwip-dns.c create mode 100644 net/lwip/apps/http/Makefile create mode 100644 net/lwip/apps/http/lwip-wget.c create mode 100644 net/lwip/apps/ping/Makefile create mode 100644 net/lwip/apps/ping/lwip_ping.c create mode 100644 net/lwip/apps/ping/lwip_ping.h create mode 100644 net/lwip/apps/ping/ping.h create mode 100644 net/lwip/apps/tftp/Makefile create mode 100644 net/lwip/apps/tftp/lwip-tftp.c create mode 160000 net/lwip/lwip-external create mode 100644 net/lwip/lwipopts.h create mode 100644 net/lwip/port/if.c create mode 100644 net/lwip/port/include/arch/cc.h create mode 100644 net/lwip/port/include/arch/sys_arch.h create mode 100644 net/lwip/port/include/limits.h create mode 100644 net/lwip/port/sys-arch.c