Hi Heinrich, On Tue, 26 Nov 2024 at 00:42, Heinrich Schuchardt <heinrich.schucha...@canonical.com> wrote: > > On 11/26/24 01:32, Simon Glass wrote: > > Hi Heinrich, > > > > On Sat, 23 Nov 2024 at 14:46, Heinrich Schuchardt > > <heinrich.schucha...@canonical.com> wrote: > >> > >> eth_bootdev_hunt() should not execute dhcp_run() as this itself would load > >> a file and boot it if autostart=yes. > >> > >> Instead just check that there is a network device. > > > > If you look at dhcp_run() you will see an 'autoload' parameter. This > > is 'false' in this code, so it never loads a file. > > This is not the complete truth. > > If $autostart=true and CONFIG_NET=y, dhcp_run(false) still tries to load > a file.
Here is the code: int dhcp_run(ulong addr, const char *fname, bool autoload) { char *dhcp_argv[] = {"dhcp", NULL, (char *)fname, NULL}; struct cmd_tbl cmdtp = {}; /* dummy */ char file_addr[17]; int old_autoload; int ret, result; log_debug("addr=%lx, fname=%s, autoload=%d\n", addr, fname, autoload); old_autoload = env_get_yesno("autoload"); ret = env_set("autoload", autoload ? "y" : "n"); if (ret) return log_msg_ret("en1", -EINVAL); It respects the autoload parameter. If there is a bug in that, we should fix it, but it seems to work OK to me. Please fix your commit message. > > In all cases dhcp_run() wastes boot time. Yes, it uses time. With bootstd the hunters are only called as needed. In your case you are calling all of them at once. Is there a way to just call hunters which relate to block devices, perhaps? > > CONFIG_NET=y > => dhcp_run > BOOTP broadcast 1 > BOOTP broadcast 2 > BOOTP broadcast 3 > DHCP client bound to address 10.0.2.15 (1004 ms) > > => setenv autostart true > => dhcp run > BOOTP broadcast 1 > BOOTP broadcast 2 > BOOTP broadcast 3 > DHCP client bound to address 10.0.2.15 (1002 ms) > Using e1000#0 device > TFTP from server 10.0.2.2; our IP address is 10.0.2.15 > Filename 'run'. > Load address: 0x40200000 > Loading: * > TFTP error: 'File not found' (1) > Not retrying... > > CONFIG_NET_LWIP=y > => dhcp_run > DHCP client bound to address 10.0.2.15 (1007 ms) > > Where command dhcp_run is provided by: > > #include <command.h> > #include <env.h> > #include <net-common.h> > #include <vsprintf.h> > > static int do_dhcp_run(struct cmd_tbl *cmdtp, int flag, int argc, > char *const argv[]) > { > ulong addr = hextoul(env_get("loadaddr"), NULL); > > dhcp_run(addr, NULL, false); > > return 0; > } > > U_BOOT_CMD( > dhcp_run, CONFIG_SYS_MAXARGS, 1, do_dhcp_run, > "dhcp_run", > NULL > ); See above [..] Regards, Simon