common: Move autoprobe out to board init
Rather than doing autoprobe within the driver model code, move it out to the board-init code. This makes it clear that it is a separate step from binding devices. For now this is always done twice, before and after relocation, but we should discuss whether it might be possible to drop the post-relocation probe. For boards with SPL, the autoprobe is still done there as well. Note that with this change, autoprobe happens after the EVT_DM_POST_INIT_R/F events are sent, rather than before. Link: https://lore.kernel.org/u-boot/20240626235717.272219-1-marex@denx.de/ Signed-off-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
@@ -288,6 +288,15 @@ void *dm_priv_to_rw(void *priv)
|
||||
}
|
||||
#endif
|
||||
|
||||
/**
|
||||
* dm_probe_devices() - Check whether to probe a device and all children
|
||||
*
|
||||
* Probes the device if DM_FLAG_PROBE_AFTER_BIND is enabled for it. Then scans
|
||||
* all its children recursively to do the same.
|
||||
*
|
||||
* @dev: Device to (maybe) probe
|
||||
* Return 0 if OK, -ve on error
|
||||
*/
|
||||
static int dm_probe_devices(struct udevice *dev)
|
||||
{
|
||||
struct udevice *child;
|
||||
@@ -306,6 +315,17 @@ static int dm_probe_devices(struct udevice *dev)
|
||||
return 0;
|
||||
}
|
||||
|
||||
int dm_autoprobe(void)
|
||||
{
|
||||
int ret;
|
||||
|
||||
ret = dm_probe_devices(gd->dm_root);
|
||||
if (ret)
|
||||
return log_msg_ret("pro", ret);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* dm_scan() - Scan tables to bind devices
|
||||
*
|
||||
@@ -338,7 +358,7 @@ static int dm_scan(bool pre_reloc_only)
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
return dm_probe_devices(gd->dm_root);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int dm_init_and_scan(bool pre_reloc_only)
|
||||
|
Reference in New Issue
Block a user