aboutsummaryrefslogtreecommitdiff
path: root/drivers/core/root.c
diff options
context:
space:
mode:
authorSimon Glass2014-07-23 06:55:04 -0600
committerSimon Glass2014-07-23 14:07:24 +0100
commitab7cd62790c4f7831b91eab8a2ec81742d01bb54 (patch)
treea298371967a59815b09ef034e165493b50826eea /drivers/core/root.c
parent00606d7e39da4a8ecfbbc19d5af252bdfdd1fcc9 (diff)
dm: Support driver model prior to relocation
Initialise devices marked 'pre-reloc' and make them available prior to relocation. Note that this requires pre-reloc malloc() to be available. Signed-off-by: Simon Glass <sjg@chromium.org>
Diffstat (limited to 'drivers/core/root.c')
-rw-r--r--drivers/core/root.c25
1 files changed, 25 insertions, 0 deletions
diff --git a/drivers/core/root.c b/drivers/core/root.c
index ce4eef30540..60597563d6c 100644
--- a/drivers/core/root.c
+++ b/drivers/core/root.c
@@ -105,6 +105,31 @@ int dm_scan_fdt(const void *blob, bool pre_reloc_only)
}
#endif
+int dm_init_and_scan(bool pre_reloc_only)
+{
+ int ret;
+
+ ret = dm_init();
+ if (ret) {
+ debug("dm_init() failed: %d\n", ret);
+ return ret;
+ }
+ ret = dm_scan_platdata(pre_reloc_only);
+ if (ret) {
+ debug("dm_scan_platdata() failed: %d\n", ret);
+ return ret;
+ }
+#ifdef CONFIG_OF_CONTROL
+ ret = dm_scan_fdt(gd->fdt_blob, pre_reloc_only);
+ if (ret) {
+ debug("dm_scan_fdt() failed: %d\n", ret);
+ return ret;
+ }
+#endif
+
+ return 0;
+}
+
/* This is the root driver - all drivers are children of this */
U_BOOT_DRIVER(root_driver) = {
.name = "root_driver",