summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Glass <[email protected]>2025-10-15 16:44:14 +0100
committerTom Rini <[email protected]>2025-10-22 14:16:56 -0600
commit6a56d10fdcf1309d2070b62dc15e80a047da971b (patch)
tree71eed5c423cb81260e92ac32d37e5395d62c9393
parent060ce66b83e5ed19180103c26e525d85c2a2aa8b (diff)
boot: Run the EFI bootmgr just before network devices
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 <[email protected]>
-rw-r--r--boot/bootmeth_efi_mgr.c9
-rw-r--r--test/boot/bootflow.c4
2 files changed, 11 insertions, 2 deletions
diff --git a/boot/bootmeth_efi_mgr.c b/boot/bootmeth_efi_mgr.c
index 42b8863815e..05fc35d01a9 100644
--- a/boot/bootmeth_efi_mgr.c
+++ b/boot/bootmeth_efi_mgr.c
@@ -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;
}
diff --git a/test/boot/bootflow.c b/test/boot/bootflow.c
index 20297136e3f..cc5eed75d83 100644
--- a/test/boot/bootflow.c
+++ b/test/boot/bootflow.c
@@ -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();