summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--boot/bootflow.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/boot/bootflow.c b/boot/bootflow.c
index 73deba24d30..ca1fe741bab 100644
--- a/boot/bootflow.c
+++ b/boot/bootflow.c
@@ -294,7 +294,13 @@ static int iter_incr(struct bootflow_iter *iter)
return BF_NO_MORE_DEVICES;
/* Get the next boothmethod */
- if (++iter->cur_method < iter->num_methods) {
+ 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;
+
iter->method = iter->method_order[iter->cur_method];
return 0;
}