diff options
author | Michal Suchanek | 2022-10-12 21:57:50 +0200 |
---|---|---|
committer | Simon Glass | 2022-10-17 21:17:12 -0600 |
commit | dfecd631922b61a062da3d1fa6a72f9fb93c0952 (patch) | |
tree | e8fc2f82951fafc1abc5c28f3231ba946be613ce /drivers | |
parent | e21ec17d42aa086a2ab95a1ffb1bd09495b9c8e8 (diff) |
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')
-rw-r--r-- | drivers/core/uclass.c | 12 |
1 files changed, 5 insertions, 7 deletions
diff --git a/drivers/core/uclass.c b/drivers/core/uclass.c index 08d9ed82de2..a591e224032 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) |