diff --git a/drivers/core/root.c b/drivers/core/root.c index 4f9c7e708a..393dd98b9d 100644 --- a/drivers/core/root.c +++ b/drivers/core/root.c @@ -108,6 +108,11 @@ int dm_scan_fdt(const void *blob, bool pre_reloc_only) } #endif +__weak int dm_scan_other(bool pre_reloc_only) +{ + return 0; +} + int dm_init_and_scan(bool pre_reloc_only) { int ret; @@ -129,6 +134,9 @@ int dm_init_and_scan(bool pre_reloc_only) return ret; } #endif + ret = dm_scan_other(pre_reloc_only); + if (ret) + return ret; return 0; } diff --git a/include/dm/root.h b/include/dm/root.h index 33f951b0cc..c7f0c1d5ca 100644 --- a/include/dm/root.h +++ b/include/dm/root.h @@ -61,6 +61,19 @@ int dm_scan_fdt(const void *blob, bool pre_reloc_only); int dm_scan_fdt_node(struct udevice *parent, const void *blob, int offset, bool pre_reloc_only); +/** + * dm_scan_other() - Scan for other devices + * + * Some devices may not be visible to Driver Model. This weak function can + * be provided by boards which wish to create their own devices + * programmaticaly. They should do this by calling device_bind() on each + * device. + * + * @pre_reloc_only: If true, bind only drivers with the DM_FLAG_PRE_RELOC + * flag. If false bind all drivers. + */ +int dm_scan_other(bool pre_reloc_only); + /** * dm_init_and_scan() - Initialise Driver Model structures and scan for devices *