[PATHv11 00/43] net/lwip: add lwip library for the network stack

neil.armstrong at linaro.org neil.armstrong at linaro.org
Tue Nov 28 11:37:50 CET 2023


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 at c9410000
Hit any key to stop autoboot:  0
=> setenv autoload no
=> dhcp
ethernet at c9410000 LPA corruption - aneg restart
ethernet at c9410000 Waiting for PHY auto negotiation to complete.... done
Speed: 100, full duplex
eth0: ethernet at 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 at 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 at c9410000
Hit any key to stop autoboot:  0
=> setenv autoload no
=> dhcp
ethernet at c9410000 LPA corruption - aneg restart
ethernet at 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 at 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


> 
> 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=results
>                  (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
> 



More information about the U-Boot mailing list