summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Glass <sjg@chromium.org>2015-03-05 12:25:16 -0700
committerSimon Glass <sjg@chromium.org>2015-04-16 19:27:41 -0600
commitd4c671cc2742927d3aef830b3b56e1ca2377c887 (patch)
tree1001348f1a6472c801e4f223db58217ef0c8f3c8
parent31f57c28736d9a070fe56c55d57e9da406ee86ba (diff)
downloadu-boot-imx-d4c671cc2742927d3aef830b3b56e1ca2377c887.zip
u-boot-imx-d4c671cc2742927d3aef830b3b56e1ca2377c887.tar.gz
u-boot-imx-d4c671cc2742927d3aef830b3b56e1ca2377c887.tar.bz2
dm: Add a new CPU init function which can use driver model
Since driver model is set up after arch_cpu_init(), that function cannot use drivers. Add a new arch_cpu_init_dm() function which is called immediately after driver model is ready, and can reference devices. This can be used to probe essential devices for the CPU. Signed-off-by: Simon Glass <sjg@chromium.org> Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
-rw-r--r--common/board_f.c6
-rw-r--r--include/common.h11
2 files changed, 17 insertions, 0 deletions
diff --git a/common/board_f.c b/common/board_f.c
index cb956b8..a570390 100644
--- a/common/board_f.c
+++ b/common/board_f.c
@@ -815,6 +815,11 @@ __weak int reserve_arch(void)
return 0;
}
+__weak int arch_cpu_init_dm(void)
+{
+ return 0;
+}
+
static init_fnc_t init_sequence_f[] = {
#ifdef CONFIG_SANDBOX
setup_ram_buf,
@@ -835,6 +840,7 @@ static init_fnc_t init_sequence_f[] = {
fdtdec_check_fdt,
#endif
initf_dm,
+ arch_cpu_init_dm,
#if defined(CONFIG_BOARD_EARLY_INIT_F)
board_early_init_f,
#endif
diff --git a/include/common.h b/include/common.h
index 6df05b8..9c0f1ba 100644
--- a/include/common.h
+++ b/include/common.h
@@ -253,6 +253,17 @@ int update_flash_size(int flash_size);
int arch_early_init_r(void);
/**
+ * arch_cpu_init_dm() - init CPU after driver model is available
+ *
+ * This is called immediately after driver model is available before
+ * relocation. This is similar to arch_cpu_init() but is able to reference
+ * devices
+ *
+ * @return 0 if OK, -ve on error
+ */
+int arch_cpu_init_dm(void);
+
+/**
* Reserve all necessary stacks
*
* This is used in generic board init sequence in common/board_f.c. Each