bootstd: Switch bootdev scanning to use labels

At present we set up the bootdev order at the start, then scan the
bootdevs one by one.

However this approach cannot be used with hunters, since the bootdevs may
not exist until the hunter is used. Nor can we just run all the hunters at
the start, since that violate's U-Boot's 'lazy init' requirement. It also
increases boot time.

So we need to adjust the algorithm to scan by labels instead. As a first
step, drop the dev_order[] array in favour of a list of labels. Update the
name of bootdev_setup_iter_order() to better reflect what it does.

Update some related comments and log messages. Also disable a few tests
until a later commit where we can use them.

Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
Simon Glass 2023-01-17 10:48:14 -07:00 committed by Tom Rini
parent 18552d2a72
commit 47aedc29dc
6 changed files with 147 additions and 152 deletions

View file

@ -265,21 +265,22 @@ int bootdev_find_by_any(const char *name, struct udevice **devp,
int *method_flagsp);
/**
* bootdev_setup_iter_order() - Set up the ordering of bootdevs to scan
* bootdev_setup_iter() - Set up iteration through bootdevs
*
* This sets up the ordering information in @iter, based on the priority of each
* bootdev and the bootdev-order property in the bootstd node
*
* If a single device is requested, no ordering is needed
* This sets up the an interation, based on the priority of each bootdev, the
* bootdev-order property in the bootstd node (or the boot_targets env var).
*
* @iter: Iterator to update with the order
* @devp: On entry, *devp is NULL to scan all, otherwise this is the (single)
* device to scan. Returns the first device to use, which is the passed-in
* @devp if it was non-NULL
* @method_flagsp: If non-NULL, returns any flags implied by the label
* (enum bootflow_meth_flags_t), 0 if none
* Return: 0 if OK, -ENOENT if no bootdevs, -ENOMEM if out of memory, other -ve
* on other error
*/
int bootdev_setup_iter_order(struct bootflow_iter *iter, struct udevice **devp);
int bootdev_setup_iter(struct bootflow_iter *iter, struct udevice **devp,
int *method_flagsp);
/**
* bootdev_list_hunters() - List the available bootdev hunters