提交 1ce60176 编写于 作者: S Simon Glass 提交者: Tom Rini

dm: Set up driver model after relocation

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: NSimon Glass <sjg@chromium.org>
上级 653ef91c
...@@ -18,6 +18,7 @@ ...@@ -18,6 +18,7 @@
#ifdef CONFIG_HAS_DATAFLASH #ifdef CONFIG_HAS_DATAFLASH
#include <dataflash.h> #include <dataflash.h>
#endif #endif
#include <dm.h>
#include <environment.h> #include <environment.h>
#include <fdtdec.h> #include <fdtdec.h>
#if defined(CONFIG_CMD_IDE) #if defined(CONFIG_CMD_IDE)
...@@ -51,7 +52,9 @@ ...@@ -51,7 +52,9 @@
#ifdef CONFIG_X86 #ifdef CONFIG_X86
#include <asm/init_helpers.h> #include <asm/init_helpers.h>
#endif #endif
#include <dm/root.h>
#include <linux/compiler.h> #include <linux/compiler.h>
#include <linux/err.h>
DECLARE_GLOBAL_DATA_PTR; DECLARE_GLOBAL_DATA_PTR;
...@@ -263,6 +266,33 @@ static int initr_malloc(void) ...@@ -263,6 +266,33 @@ static int initr_malloc(void)
return 0; 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) __weak int power_init_board(void)
{ {
return 0; return 0;
...@@ -761,6 +791,9 @@ init_fnc_t init_sequence_r[] = { ...@@ -761,6 +791,9 @@ init_fnc_t init_sequence_r[] = {
initr_barrier, initr_barrier,
initr_malloc, initr_malloc,
bootstage_relocate, bootstage_relocate,
#ifdef CONFIG_DM
initr_dm,
#endif
#ifdef CONFIG_ARCH_EARLY_INIT_R #ifdef CONFIG_ARCH_EARLY_INIT_R
arch_early_init_r, arch_early_init_r,
#endif #endif
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册