diff options
author | Stefan Roese <sr@denx.de> | 2015-07-15 15:36:52 +0200 |
---|---|---|
committer | Luka Perkov <luka.perkov@sartura.hr> | 2015-07-23 08:30:58 +0200 |
commit | ade741b3896b1a3872ff74437f04b50762d05849 (patch) | |
tree | 450c1c06704f2f0e1be2bec6374c3093917cbd39 | |
parent | e863f7f051687b682b948bf5c5493c8b60463113 (diff) | |
download | u-boot-imx-ade741b3896b1a3872ff74437f04b50762d05849.zip u-boot-imx-ade741b3896b1a3872ff74437f04b50762d05849.tar.gz u-boot-imx-ade741b3896b1a3872ff74437f04b50762d05849.tar.bz2 |
arm: mvebu: Call timer_init early before PHY and DDR init
Without calling timer_init(), the xdelay() functions return immediately.
We need to call timer_init() early, so that these functions work and
the PHY and DDR init code works correctly.
Signed-off-by: Stefan Roese <sr@denx.de>
Cc: Anton Schubert <anton.schubert@gmx.de>
Cc: Luka Perkov <luka.perkov@sartura.hr>
-rw-r--r-- | arch/arm/mach-mvebu/spl.c | 2 | ||||
-rw-r--r-- | arch/arm/mach-mvebu/timer.c | 7 |
2 files changed, 9 insertions, 0 deletions
diff --git a/arch/arm/mach-mvebu/spl.c b/arch/arm/mach-mvebu/spl.c index 402e520..ab045b0 100644 --- a/arch/arm/mach-mvebu/spl.c +++ b/arch/arm/mach-mvebu/spl.c @@ -28,6 +28,8 @@ void board_init_f(ulong dummy) preloader_console_init(); + timer_init(); + /* First init the serdes PHY's */ serdes_phy_config(); diff --git a/arch/arm/mach-mvebu/timer.c b/arch/arm/mach-mvebu/timer.c index 40c4bc2..c516c41 100644 --- a/arch/arm/mach-mvebu/timer.c +++ b/arch/arm/mach-mvebu/timer.c @@ -41,6 +41,8 @@ #define timestamp gd->arch.tbl #define lastdec gd->arch.lastinc +static int init_done; + /* Timer reload and current value registers */ struct kwtmr_val { u32 reload; /* Timer reload reg */ @@ -112,6 +114,11 @@ void __udelay(unsigned long usec) */ int timer_init(void) { + /* Only init the timer once */ + if (init_done) + return 0; + init_done = 1; + /* load value into timer */ writel(TIMER_LOAD_VAL, CNTMR_RELOAD_REG(UBOOT_CNTR)); writel(TIMER_LOAD_VAL, CNTMR_VAL_REG(UBOOT_CNTR)); |