timer: Set up the real timer after driver model is available

When using the early timer, we need to manually trigger setting up the
real timer. This will not happen automatically. Do this immediately after
starting driver model.

Signed-off-by: Simon Glass <sjg@chromium.org>
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
This commit is contained in:
Simon Glass 2016-02-24 09:14:50 -07:00
parent c95fec3192
commit 1057e6cfe1
2 changed files with 18 additions and 2 deletions

View file

@ -45,6 +45,7 @@
#include <post.h>
#include <spi.h>
#include <status_led.h>
#include <timer.h>
#include <trace.h>
#include <video.h>
#include <watchdog.h>
@ -805,6 +806,11 @@ static int initf_dm(void)
if (ret)
return ret;
#endif
#ifdef CONFIG_TIMER_EARLY
ret = dm_timer_init();
if (ret)
return ret;
#endif
return 0;
}

View file

@ -46,6 +46,7 @@
#include <serial.h>
#include <spi.h>
#include <stdio_dev.h>
#include <timer.h>
#include <trace.h>
#include <watchdog.h>
#ifdef CONFIG_CMD_AMBAPP
@ -312,13 +313,22 @@ static int initr_noncached(void)
#ifdef CONFIG_DM
static int initr_dm(void)
{
int ret;
/* 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
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;
#endif
return dm_init_and_scan(false);
return 0;
}
#endif