ARM: am33xx: Fix DDR initialization delays
authorRuss Dill <russ.dill@ti.com>
Thu, 5 May 2016 13:52:10 +0000 (08:52 -0500)
committerTom Rini <trini@konsulko.com>
Fri, 6 May 2016 14:10:20 +0000 (10:10 -0400)
The current delays in the DDR initialization routines for am33xx
architectures are sometimes not running long enough leading to DDR
init errors. On am437x, this shows up as an L3 NOC error after the
kernel boots. This is due to the timer not being initialized
properly, but instead still containing the timer init values from
the boot ROM which cause timers to expire in 1/4th the time
required.

timer_init is typically not called until board_init_r, however on
am33xx/am43xx udelay is required in sdram_init which is called
from board_init_f, so a call to timer_init is required earlier.

Note that this issue introduced in v2015.01 by:

b352dde "am33xx: Drop timer_init call from s_init".

Although this could instead fixed by reverting said commit, it
would cause timer_init to be called twice in both SPL and non-SPL
cases. This gives a little more fine grained control and also
matches what is being done on omap-command and fsl-layerscape.

Signed-off-by: Russ Dill <russ.dill@ti.com>
arch/arm/cpu/armv7/am33xx/clock.c

index 595c951ed245231f812ccd8c31f35f7237f9a1ab..9b9b78edddc7c97d27391836042673c6e7f33f3f 100644 (file)
@@ -237,4 +237,5 @@ void prcm_init()
        enable_basic_clocks();
        scale_vcores();
        setup_dplls();
+       timer_init();
 }