board_r: Move early-timer init later
authorSimon Glass <sjg@chromium.org>
Sat, 7 Dec 2019 04:41:46 +0000 (21:41 -0700)
committerBin Meng <bmeng.cn@gmail.com>
Sun, 15 Dec 2019 03:44:09 +0000 (11:44 +0800)
At present the early timer init happens as soon as driver model is set up.
This makes it impossible to do anything that needs driver model but must
run before devices are probed (as needed with Intel's FSP-S, for example).

In any case it is not a good idea to tie probing of particular drivers too
closely to the DM init.

Create a new function to init the timer and put it a bit later in the
sequence.

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

index 9902c51..9a25f6e 100644 (file)
@@ -311,16 +311,24 @@ static int initr_dm(void)
        bootstage_accum(BOOTSTATE_ID_ACCUM_DM_R);
        if (ret)
                return ret;
-#ifdef CONFIG_TIMER_EARLY
-       ret = dm_timer_init();
-       if (ret)
-               return ret;
-#endif
 
        return 0;
 }
 #endif
 
+static int initr_dm_devices(void)
+{
+       int ret;
+
+       if (IS_ENABLED(CONFIG_TIMER_EARLY)) {
+               ret = dm_timer_init();
+               if (ret)
+                       return ret;
+       }
+
+       return 0;
+}
+
 static int initr_bootstage(void)
 {
        bootstage_mark_name(BOOTSTAGE_ID_START_UBOOT_R, "board_init_r");
@@ -707,6 +715,7 @@ static init_fnc_t init_sequence_r[] = {
        efi_memory_init,
 #endif
        initr_binman,
+       initr_dm_devices,
        stdio_init_tables,
        initr_serial,
        initr_announce,