summaryrefslogtreecommitdiff
path: root/boot/bootflow.c
diff options
context:
space:
mode:
authorSimon Glass <[email protected]>2025-10-15 16:44:12 +0100
committerTom Rini <[email protected]>2025-10-22 14:16:56 -0600
commiteff1dca96330269c8281b17d00f5d2d0e62bd26e (patch)
treec73590db763042b09de96a1702f43d80bb852383 /boot/bootflow.c
parent4ce78089b2a615eab466347e8996fbd54a876234 (diff)
boot: Don't change the method count after global bootmeths
At present before scanning global bootmeths, the iterator sets the method count to the index of the first global bootmeth. Now that we support scanning the global bootmeths multiple times, we must leave this count alone. Check against have_global and first_glob_method instead. Signed-off-by: Simon Glass <[email protected]>
Diffstat (limited to 'boot/bootflow.c')
-rw-r--r--boot/bootflow.c18
1 files changed, 14 insertions, 4 deletions
diff --git a/boot/bootflow.c b/boot/bootflow.c
index 1a4cd0e28e8..38b8af916b2 100644
--- a/boot/bootflow.c
+++ b/boot/bootflow.c
@@ -304,9 +304,20 @@ static int iter_incr(struct bootflow_iter *iter)
for (iter->cur_method++; iter->cur_method < iter->num_methods;
iter->cur_method++) {
/* loop until we find a global bootmeth we haven't used */
- if (IS_ENABLED(CONFIG_BOOTMETH_GLOBAL) && iter->doing_global &&
- !bootmeth_glob_allowed(iter, iter->cur_method))
- continue;
+ if (IS_ENABLED(CONFIG_BOOTMETH_GLOBAL) && iter->doing_global) {
+ if (!bootmeth_glob_allowed(iter, iter->cur_method))
+ continue;
+
+ iter->method = iter->method_order[iter->cur_method];
+ log_debug("-> next global method '%s'\n",
+ iter->method->name);
+ return 0;
+ }
+
+ /* at this point we are only considering non-global bootmeths */
+ if (IS_ENABLED(CONFIG_BOOTMETH_GLOBAL) && iter->have_global &&
+ iter->cur_method >= iter->first_glob_method)
+ break;
iter->method = iter->method_order[iter->cur_method];
return 0;
@@ -317,7 +328,6 @@ static int iter_incr(struct bootflow_iter *iter)
* normal bootdev scan
*/
if (IS_ENABLED(CONFIG_BOOTMETH_GLOBAL) && global) {
- iter->num_methods = iter->first_glob_method;
iter->doing_global = false;
/*