diff options
author | Tom Rini <trini@konsulko.com> | 2024-08-27 10:09:11 -0600 |
---|---|---|
committer | Tom Rini <trini@konsulko.com> | 2024-08-27 11:17:39 -0600 |
commit | a41c1aeefb990a579663a2c7c192e590ffcf625f (patch) | |
tree | eefacc722f753f740f668fd03e89c9ceca13957b /boot | |
parent | e5a6ce5d33db4f4d5c70d1b8250d2eaefb59918b (diff) | |
parent | cae1ad02f7aa2ee67ecd0b18eb29c51dd8021267 (diff) | |
download | u-boot-a41c1aeefb990a579663a2c7c192e590ffcf625f.tar.gz |
Merge patch series "bootstd: Try again to resolve infinite-loop bug"
Simon Glass <sjg@chromium.org> says:
This little series tries to resolve a problem found with an earlier
fix.
Diffstat (limited to 'boot')
-rw-r--r-- | boot/bootdev-uclass.c | 23 |
1 files changed, 7 insertions, 16 deletions
diff --git a/boot/bootdev-uclass.c b/boot/bootdev-uclass.c index 7c7bba088c9..807f8dfb064 100644 --- a/boot/bootdev-uclass.c +++ b/boot/bootdev-uclass.c @@ -632,7 +632,7 @@ int bootdev_next_label(struct bootflow_iter *iter, struct udevice **devp, int bootdev_next_prio(struct bootflow_iter *iter, struct udevice **devp) { - struct udevice *dev = *devp, *last_dev = NULL; + struct udevice *dev = *devp; bool found; int ret; @@ -640,6 +640,7 @@ int bootdev_next_prio(struct bootflow_iter *iter, struct udevice **devp) *devp = NULL; log_debug("next prio %d: dev=%p/%s\n", iter->cur_prio, dev, dev ? dev->name : "none"); + found = false; do { /* * Don't probe devices here since they may not be of the @@ -682,23 +683,13 @@ int bootdev_next_prio(struct bootflow_iter *iter, struct udevice **devp) } } else { ret = device_probe(dev); - if (!ret) - last_dev = dev; - if (ret) { - log_warning("Device '%s' failed to probe\n", + if (ret) + log_debug("Device '%s' failed to probe\n", dev->name); - if (last_dev == dev) { - /* - * We have already tried this device - * and it failed to probe. Give up. - */ - return log_msg_ret("probe", ret); - } - last_dev = dev; - dev = NULL; - } + else + found = true; } - } while (!dev); + } while (!found); *devp = dev; |