From: Michal Suchanek Date: Tue, 27 Sep 2022 21:23:53 +0000 (+0200) Subject: dm: blk: Add probe in blk_first_device/blk_next_device X-Git-Url: http://git.dujemihanovic.xyz/?a=commitdiff_plain;h=168a0e45fcf49194fca55795f84a844f16b480f6;p=u-boot.git dm: blk: Add probe in blk_first_device/blk_next_device The description claims that the device is probed but it isn't. Add the device_probe() call. Also consolidate the iteration into one function. Fixes: 8a5cbc065d ("dm: blk: Use uclass_find_first/next_device() in blk_first/next_device()") Signed-off-by: Michal Suchanek --- diff --git a/drivers/block/blk-uclass.c b/drivers/block/blk-uclass.c index bd46bfb37f..c69fc4d518 100644 --- a/drivers/block/blk-uclass.c +++ b/drivers/block/blk-uclass.c @@ -369,45 +369,43 @@ int blk_dselect_hwpart(struct blk_desc *desc, int hwpart) return blk_select_hwpart(desc->bdev, hwpart); } -int blk_first_device(int uclass_id, struct udevice **devp) +static int _blk_next_device(int uclass_id, struct udevice **devp) { struct blk_desc *desc; - int ret; + int ret = 0; + + for (; *devp; uclass_find_next_device(devp)) { + desc = dev_get_uclass_plat(*devp); + if (desc->uclass_id == uclass_id) { + ret = device_probe(*devp); + if (!ret) + return 0; + } + } - ret = uclass_find_first_device(UCLASS_BLK, devp); if (ret) return ret; - if (!*devp) - return -ENODEV; - do { - desc = dev_get_uclass_plat(*devp); - if (desc->uclass_id == uclass_id) - return 0; - ret = uclass_find_next_device(devp); - if (ret) - return ret; - } while (*devp); return -ENODEV; } +int blk_first_device(int uclass_id, struct udevice **devp) +{ + uclass_find_first_device(UCLASS_BLK, devp); + + return _blk_next_device(uclass_id, devp); +} + int blk_next_device(struct udevice **devp) { struct blk_desc *desc; - int ret, uclass_id; + int uclass_id; desc = dev_get_uclass_plat(*devp); uclass_id = desc->uclass_id; - do { - ret = uclass_find_next_device(devp); - if (ret) - return ret; - if (!*devp) - return -ENODEV; - desc = dev_get_uclass_plat(*devp); - if (desc->uclass_id == uclass_id) - return 0; - } while (1); + uclass_find_next_device(devp); + + return _blk_next_device(uclass_id, devp); } int blk_find_device(int uclass_id, int devnum, struct udevice **devp)