summaryrefslogtreecommitdiff
path: root/drivers/core
diff options
context:
space:
mode:
authorMichal Suchanek <msuchanek@suse.de>2022-10-12 22:57:50 +0300
committerSimon Glass <sjg@chromium.org>2022-10-18 06:17:12 +0300
commitdfecd631922b61a062da3d1fa6a72f9fb93c0952 (patch)
treee8fc2f82951fafc1abc5c28f3231ba946be613ce /drivers/core
parente21ec17d42aa086a2ab95a1ffb1bd09495b9c8e8 (diff)
downloadu-boot-dfecd631922b61a062da3d1fa6a72f9fb93c0952.tar.xz
dm: core: Fix uclass_probe_all to really probe all devices
uclass_probe_all uses uclass_first_device/uclass_next_device assigning the return value. The interface for getting meaningful error is uclass_first_device_check/uclass_next_device_check, use it. Also do not stop iteration when an error is encountered. Probing all devices includes those that happen to be after a failing device in the uclass order. Fixes: a59153dfeb ("dm: core: add function uclass_probe_all() to probe all devices") Signed-off-by: Michal Suchanek <msuchanek@suse.de> Reviewed-by: Simon Glass <sjg@chromium.org>
Diffstat (limited to 'drivers/core')
-rw-r--r--drivers/core/uclass.c12
1 files changed, 5 insertions, 7 deletions
diff --git a/drivers/core/uclass.c b/drivers/core/uclass.c
index 08d9ed82de..a591e22403 100644
--- a/drivers/core/uclass.c
+++ b/drivers/core/uclass.c
@@ -799,20 +799,18 @@ int uclass_pre_remove_device(struct udevice *dev)
int uclass_probe_all(enum uclass_id id)
{
struct udevice *dev;
- int ret;
+ int ret, err;
- ret = uclass_first_device(id, &dev);
- if (ret || !dev)
- return ret;
+ err = uclass_first_device_check(id, &dev);
/* Scanning uclass to probe all devices */
while (dev) {
- ret = uclass_next_device(&dev);
+ ret = uclass_next_device_check(&dev);
if (ret)
- return ret;
+ err = ret;
}
- return 0;
+ return err;
}
int uclass_id_count(enum uclass_id id)