mirror of
https://github.com/u-boot/u-boot.git
synced 2025-04-20 20:04:46 +00:00
bootstd: Make bootdev_next_prio() continue after failure
When a device fails to probe, the next device should be tried, until either we find a suitable device or run out of devices. A device should never be tried twice. When we run out of devices of a particular priority, the hunter should be used to generate devices of the next priority. Only if all attempts fail should this function return an error. Update the function to use the latent 'found' boolean to determine whether another loop iteration is warranted, rather than setting 'dev' to NULL, which creates confusion, suggesting that no devices have been scanned and the whole process is starting from the beginning. Note that the upcoming bootflow_efi() test is used to test this behaviour. Signed-off-by: Simon Glass <sjg@chromium.org> Fixes: https://source.denx.de/u-boot/custodians/u-boot-dm/-/issues/17
This commit is contained in:
parent
aad8b18a52
commit
cae1ad02f7
1 changed files with 5 additions and 4 deletions
|
@ -640,6 +640,7 @@ int bootdev_next_prio(struct bootflow_iter *iter, struct udevice **devp)
|
||||||
*devp = NULL;
|
*devp = NULL;
|
||||||
log_debug("next prio %d: dev=%p/%s\n", iter->cur_prio, dev,
|
log_debug("next prio %d: dev=%p/%s\n", iter->cur_prio, dev,
|
||||||
dev ? dev->name : "none");
|
dev ? dev->name : "none");
|
||||||
|
found = false;
|
||||||
do {
|
do {
|
||||||
/*
|
/*
|
||||||
* Don't probe devices here since they may not be of the
|
* Don't probe devices here since they may not be of the
|
||||||
|
@ -682,13 +683,13 @@ int bootdev_next_prio(struct bootflow_iter *iter, struct udevice **devp)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
ret = device_probe(dev);
|
ret = device_probe(dev);
|
||||||
if (ret) {
|
if (ret)
|
||||||
log_debug("Device '%s' failed to probe\n",
|
log_debug("Device '%s' failed to probe\n",
|
||||||
dev->name);
|
dev->name);
|
||||||
dev = NULL;
|
else
|
||||||
|
found = true;
|
||||||
}
|
}
|
||||||
}
|
} while (!found);
|
||||||
} while (!dev);
|
|
||||||
|
|
||||||
*devp = dev;
|
*devp = dev;
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue