Hi Heinrich, On Thu, 14 Nov 2024 at 14:08, Heinrich Schuchardt <[email protected]> wrote: > > > > Jonas Karlman <[email protected]> schrieb am Do., 14. Nov. 2024, 21:26: >> >> Hi Heinrich, >> >> On 2024-11-13 20:55, Heinrich Schuchardt wrote: >> > Some hard devices need specific routines to scan for block devices, >> > e.g. NVMe (nvme scan), SCSI (scsi start). >> > >> > Invoke bootdev_hunt() to find all block devices. >> > >> > Signed-off-by: Heinrich Schuchardt <[email protected]> >> > --- >> > lib/efi_loader/efi_setup.c | 8 ++++++++ >> > 1 file changed, 8 insertions(+) >> > >> > diff --git a/lib/efi_loader/efi_setup.c b/lib/efi_loader/efi_setup.c >> > index aa59bc7779d..8e0ff16f3eb 100644 >> > --- a/lib/efi_loader/efi_setup.c >> > +++ b/lib/efi_loader/efi_setup.c >> > @@ -7,6 +7,7 @@ >> > >> > #define LOG_CATEGORY LOGC_EFI >> > >> > +#include <bootdev.h> >> > #include <efi_loader.h> >> > #include <efi_variable.h> >> > #include <log.h> >> > @@ -228,6 +229,13 @@ efi_status_t efi_init_obj_list(void) >> > * Probe block devices to find the ESP. >> > * efi_disks_register() must be called before efi_init_variables(). >> > */ >> > + if (CONFIG_IS_ENABLED(BOOTSTD)) { >> > + int r; >> > + >> > + r = bootdev_hunt(NULL, 0); >> > + if (r) >> > + log_debug("No boot device available\n"); >> > + } >> > ret = efi_disks_register(); >> > if (ret != EFI_SUCCESS) >> > goto out; >> >> This is causing significant slower boot when trying to boot using >> extlinux (or script) from mmc device on Rockchip, this will cause all >> slow devices to be initialized before a quick mmc boot, e.g. pci init, >> usb start and dhcp due to efi_mgr being the global bootmeth. > > > Specifically DHCP is very slow and not needed here. > > Maybe Simon has an idea how to filter it out. We should filter on UCLASS_BLK > related here.
Each bootdev has a prio field which indicates how slow it is, so you could have something which only runs the hunters for a certain priority. bootstd does this automatically (going from fastest to slowest), but bootmgr would need to handle that itself. Perhaps call bootdev_hunt_prio() with just a few priorities? > > Furthermore I don't know if global bootmeths are always have to run first or > if you could customize this. They run first, but we could change that. Regards, Simon Regards, Simon

