dm: Set up driver model after relocation
authorSimon Glass <sjg@chromium.org>
Wed, 26 Feb 2014 22:59:20 +0000 (15:59 -0700)
committerTom Rini <trini@ti.com>
Tue, 4 Mar 2014 17:15:29 +0000 (12:15 -0500)
Make driver model available after relocation, by setting up data structures
and scanning for devices using compiled-in platform_data and (when available)
the device tree.

Signed-off-by: Simon Glass <sjg@chromium.org>
common/board_r.c

index 899f377e174fd1aa0223b98b0fcdd8cdc48300e5..8629a656c28a9afe30a25c0fe3ec39a63dbf8a65 100644 (file)
@@ -18,6 +18,7 @@
 #ifdef CONFIG_HAS_DATAFLASH
 #include <dataflash.h>
 #endif
+#include <dm.h>
 #include <environment.h>
 #include <fdtdec.h>
 #if defined(CONFIG_CMD_IDE)
@@ -51,7 +52,9 @@
 #ifdef CONFIG_X86
 #include <asm/init_helpers.h>
 #endif
+#include <dm/root.h>
 #include <linux/compiler.h>
+#include <linux/err.h>
 
 DECLARE_GLOBAL_DATA_PTR;
 
@@ -263,6 +266,33 @@ static int initr_malloc(void)
        return 0;
 }
 
+#ifdef CONFIG_DM
+static int initr_dm(void)
+{
+       int ret;
+
+       ret = dm_init();
+       if (ret) {
+               debug("dm_init() failed: %d\n", ret);
+               return ret;
+       }
+       ret = dm_scan_platdata();
+       if (ret) {
+               debug("dm_scan_platdata() failed: %d\n", ret);
+               return ret;
+       }
+#ifdef CONFIG_OF_CONTROL
+       ret = dm_scan_fdt(gd->fdt_blob);
+       if (ret) {
+               debug("dm_scan_fdt() failed: %d\n", ret);
+               return ret;
+       }
+#endif
+
+       return 0;
+}
+#endif
+
 __weak int power_init_board(void)
 {
        return 0;
@@ -761,6 +791,9 @@ init_fnc_t init_sequence_r[] = {
        initr_barrier,
        initr_malloc,
        bootstage_relocate,
+#ifdef CONFIG_DM
+       initr_dm,
+#endif
 #ifdef CONFIG_ARCH_EARLY_INIT_R
        arch_early_init_r,
 #endif