net: eth_bootdev_hunt() should not run DHCP

Currently when booting dhcp_run() may be executed multiple times:
once in eth_bootdev_hunt() and once in the network booting bootmeth.

We need to call eth_bootdev_hunt() when setting up the EFI sub-system to
supply the simple network protocol. We don't need an IP address set up.

We can reduce the bootime by not executing dhcp_run() in
eth_bootdev_hunt().

Furthermore eth_bootdev_hunt() with autostart=yes leads on the legacy
network stack leads to downloading a file via TFTP and to booting the
downloaded file.

Instead of running dchp_run() just check that there is a network device
in eth_bootdev_hunt().

Reviewed-by: Ilias Apalodimas <ilias.apalodimas@linaro.org>
Signed-off-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
Heinrich Schuchardt 2024-11-27 08:06:29 +01:00
parent 37e0cf42cb
commit 1f68057e03

View file

@ -64,9 +64,23 @@ static int eth_bootdev_bind(struct udevice *dev)
return 0;
}
/**
* eth_bootdev_hunt() - probe all network devices
*
* Network devices can also come from USB, but that is a higher
* priority (BOOTDEVP_5_SCAN_SLOW) than network, so it should have been
* enumerated already. If something like 'bootflow scan dhcp' is used,
* then the user will need to run 'usb start' first.
*
* @info: info structure describing this hunter
* @show: true to show information from the hunter
*
* Return: 0 if device found, -EINVAL otherwise
*/
static int eth_bootdev_hunt(struct bootdev_hunter *info, bool show)
{
int ret;
struct udevice *dev = NULL;
if (!test_eth_enabled())
return 0;
@ -78,19 +92,11 @@ static int eth_bootdev_hunt(struct bootdev_hunter *info, bool show)
log_warning("Failed to init PCI (%dE)\n", ret);
}
/*
* Ethernet devices can also come from USB, but that is a higher
* priority (BOOTDEVP_5_SCAN_SLOW) than ethernet, so it should have been
* enumerated already. If something like 'bootflow scan dhcp' is used
* then the user will need to run 'usb start' first.
*/
if (IS_ENABLED(CONFIG_CMD_DHCP)) {
ret = dhcp_run(0, NULL, false);
if (ret)
return -EINVAL;
}
ret = -EINVAL;
uclass_foreach_dev_probe(UCLASS_ETH, dev)
ret = 0;
return 0;
return ret;
}
struct bootdev_ops eth_bootdev_ops = {