dm: timer: Correct timer init ordering after relocation
authorSimon Glass <sjg@chromium.org>
Sat, 12 Mar 2016 05:06:46 +0000 (22:06 -0700)
committerBin Meng <bmeng.cn@gmail.com>
Thu, 17 Mar 2016 02:27:24 +0000 (10:27 +0800)
Commit 1057e6c broke use of the timer with driver model. If the timer is used
before relocation, then it becomes broken after relocation. This prevents
some x86 boards from booting. Fix it.

Fixes: 1057e6c (timer: Set up the real timer after driver model is available)

Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
common/board_r.c

index 2cb68364352435b8e9b5213d1e6b733f51037e1e..ad02549311ea84f64c377601de81aa6d3cd636e1 100644 (file)
@@ -322,11 +322,13 @@ static int initr_dm(void)
        /* Save the pre-reloc driver model and start a new one */
        gd->dm_root_f = gd->dm_root;
        gd->dm_root = NULL;
+#ifdef CONFIG_TIMER
+       gd->timer = NULL;
+#endif
        ret = dm_init_and_scan(false);
        if (ret)
                return ret;
 #ifdef CONFIG_TIMER_EARLY
-       gd->timer = NULL;
        ret = dm_timer_init();
        if (ret)
                return ret;