dm: timer: Avoid using timer before it is ready
authorSimon Glass <sjg@chromium.org>
Sun, 29 Nov 2015 05:16:35 +0000 (22:16 -0700)
committerSimon Glass <sjg@chromium.org>
Tue, 1 Dec 2015 13:26:12 +0000 (06:26 -0700)
At present bootstage will try to read the timer very early after relocation.
When driver model is used to provide the timer, we cannot read it until
driver model is ready. Correct this by adding a separate stage for the
post-relocation bootstage init.

This fixes booting on chromebook_link.

Signed-off-by: Simon Glass <sjg@chromium.org>
Acked-by: Thomas Chou <thomas@wytron.com.tw>
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
Reviewed-by: Mugunthan V N <mugunthanvnm@ti.com>
common/board_r.c

index f7118e8fc486e74c6218762d6902fe07a2cbf413..a41fb547a3c95d6d4e3182716846e6407fd21ff0 100644 (file)
@@ -109,7 +109,6 @@ static int initr_reloc(void)
 {
        /* tell others: relocation done */
        gd->flags |= GD_FLG_RELOC | GD_FLG_FULL_MALLOC_INIT;
-       bootstage_mark_name(BOOTSTAGE_ID_START_UBOOT_R, "board_init_r");
 
        return 0;
 }
@@ -310,6 +309,14 @@ static int initr_dm(void)
 }
 #endif
 
+static int initr_bootstage(void)
+{
+       /* We cannot do this before initr_dm() */
+       bootstage_mark_name(BOOTSTAGE_ID_START_UBOOT_R, "board_init_r");
+
+       return 0;
+}
+
 __weak int power_init_board(void)
 {
        return 0;
@@ -748,6 +755,7 @@ init_fnc_t init_sequence_r[] = {
 #ifdef CONFIG_DM
        initr_dm,
 #endif
+       initr_bootstage,
 #if defined(CONFIG_ARM) || defined(CONFIG_NDS32)
        board_init,     /* Setup chipselects */
 #endif