]> git.ipfire.org Git - thirdparty/u-boot.git/commitdiff
boot: Run the EFI bootmgr just before network devices
authorSimon Glass <sjg@chromium.org>
Wed, 15 Oct 2025 15:44:14 +0000 (16:44 +0100)
committerTom Rini <trini@konsulko.com>
Wed, 22 Oct 2025 20:16:56 +0000 (14:16 -0600)
At present the EFI bootmgr scans all devices in the system before
deciding which one to boot. Ideally it would use the bootstd iterator
for this, but in the meantime, give it a lower priority, so it runs
just before the network devices.

Note that if there are no hunted network devices hunted, then it will
run at the end, after all bootdevs are exhausted. In other words, it
will always run.

Signed-off-by: Simon Glass <sjg@chromium.org>
boot/bootmeth_efi_mgr.c
test/boot/bootflow.c

index 42b8863815e7dfcf06602eaeaa017dfd2d0b3886..05fc35d01a978545e56ae2794b60bdaa3fd7d896 100644 (file)
@@ -99,6 +99,15 @@ static int bootmeth_efi_mgr_bind(struct udevice *dev)
        plat->desc = "EFI bootmgr flow";
        plat->flags = BOOTMETHF_GLOBAL;
 
+       /*
+        * bootmgr scans all available devices which can take a while,
+        * especially for network devices. So choose the priority so that it
+        * comes just before the 'very slow' devices. This allows systems which
+        * don't rely on bootmgr to boot quickly, while allowing bootmgr to run
+        * on systems which need it.
+        */
+       plat->glob_prio = BOOTDEVP_6_NET_BASE;
+
        return 0;
 }
 
index 20297136e3f8027e6dfa256a9029dfe2fa75a101..cc5eed75d83bb1f40fd8238493d28b13da4604ba 100644 (file)
@@ -454,11 +454,11 @@ static int bootflow_system(struct unit_test_state *uts)
        ut_assertok(device_probe(dev));
        sandbox_set_fake_efi_mgr_dev(dev, true);
 
-       /* We should get a single 'bootmgr' method at the start */
+       /* We should get a single 'bootmgr' method at the end */
        bootstd_clear_glob();
        ut_assertok(run_command("bootflow scan -lH", 0));
        ut_assert_skip_to_line(
-               "  0  efi_mgr      ready   (none)       0  <NULL>                    ");
+               "  1  efi_mgr      ready   (none)       0  <NULL>                    ");
        ut_assert_skip_to_line("No more bootdevs");
        ut_assert_skip_to_line("(2 bootflows, 2 valid)");
        ut_assert_console_end();