summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--boot/bootmeth-uclass.c1
-rw-r--r--include/bootflow.h2
-rw-r--r--test/boot/bootflow.c4
3 files changed, 7 insertions, 0 deletions
diff --git a/boot/bootmeth-uclass.c b/boot/bootmeth-uclass.c
index bb2dd8447cf..a0aa6336c9b 100644
--- a/boot/bootmeth-uclass.c
+++ b/boot/bootmeth-uclass.c
@@ -209,6 +209,7 @@ int bootmeth_setup_iter_order(struct bootflow_iter *iter, bool include_global)
iter->first_glob_method != -1 && iter->first_glob_method != count) {
iter->cur_method = iter->first_glob_method;
iter->doing_global = true;
+ iter->have_global = true;
}
iter->method_order = order;
iter->num_methods = count;
diff --git a/include/bootflow.h b/include/bootflow.h
index 2ef6eb25cf5..b18baebb4ba 100644
--- a/include/bootflow.h
+++ b/include/bootflow.h
@@ -255,6 +255,7 @@ enum bootflow_meth_flags_t {
* @cur_prio: Current priority being scanned
* @method_order: List of bootmeth devices to use, in order. The normal methods
* appear first, then the global ones, if any
+ * @have_global: true if we have global bootmeths in @method_order[]
* @doing_global: true if we are iterating through the global bootmeths (which
* happens before the normal ones)
* @method_flags: flags controlling which methods should be used for this @dev
@@ -278,6 +279,7 @@ struct bootflow_iter {
int first_glob_method;
enum bootdev_prio_t cur_prio;
struct udevice **method_order;
+ bool have_global;
bool doing_global;
int method_flags;
};
diff --git a/test/boot/bootflow.c b/test/boot/bootflow.c
index 07bf239485c..83fb646babf 100644
--- a/test/boot/bootflow.c
+++ b/test/boot/bootflow.c
@@ -308,6 +308,7 @@ static int bootflow_iter(struct unit_test_state *uts)
ut_asserteq_str("extlinux", iter.method->name);
ut_asserteq(0, bflow.err);
ut_assert(!iter.doing_global);
+ ut_assert(!iter.have_global);
ut_asserteq(-1, iter.first_glob_method);
/*
@@ -405,6 +406,7 @@ static int bootflow_iter_glob(struct unit_test_state *uts)
BOOTFLOWIF_SHOW, &bflow));
ut_asserteq(3, iter.num_methods);
ut_assert(iter.doing_global);
+ ut_assert(iter.have_global);
ut_asserteq(2, iter.first_glob_method);
ut_asserteq(2, iter.cur_method);
@@ -421,6 +423,7 @@ static int bootflow_iter_glob(struct unit_test_state *uts)
ut_asserteq(2, iter.num_methods);
ut_asserteq(2, iter.first_glob_method);
ut_assert(!iter.doing_global);
+ ut_assert(iter.have_global);
ut_asserteq(0, iter.cur_method);
ut_asserteq(0, iter.part);
@@ -486,6 +489,7 @@ static int bootflow_iter_disable(struct unit_test_state *uts)
/* at this point the global bootmeths are stranded above num_methods */
ut_asserteq(3, iter.num_methods);
ut_assert(!iter.doing_global);
+ ut_assert(iter.have_global);
ut_asserteq(3, iter.first_glob_method);
ut_asserteq_str("sandbox", iter.method->name);
ut_assertok(inject_response(uts));