arm: ls1021a: Add timer_init() in board_init_f for SPL
authorAlison Wang <alison.wang@nxp.com>
Tue, 16 Oct 2018 08:19:22 +0000 (16:19 +0800)
committerYork Sun <york.sun@nxp.com>
Thu, 6 Dec 2018 22:37:19 +0000 (14:37 -0800)
I2C is used to access DDR SPD in the DDR initialization for SPL. In
i2c_write process, get_timer() will be called. In board_init_f for SPL,
timer_init() is not called before. The system counter is not enabled and
the counter frequency is not set to 12.5MHz in SPL. The parameters for
do_div() are zero too.

It could not be found until CONFIG_USE_PRIVATE_LIBGCC is enabled in
default. When CONFIG_USE_PRIVATE_LIBGCC is enabled, U-Boot will use its
own set of libgcc functions. As the parameters for do_div() are zero,
__div0 will be called. Then the processor will stay in an endless loop
after calling hang().

This patch will add timer_init() in board_init_f for SPL and fix a
series of issues it caused.

Signed-off-by: Alison Wang <alison.wang@nxp.com>
Reviewed-by: York Sun <york.sun@nxp.com>
board/freescale/ls1021aqds/ls1021aqds.c
board/freescale/ls1021atwr/ls1021atwr.c

index c828dacf9ee455136d04fc126e6519bf9c0c04a2..c08be1ee461b955b7c49c56f4fe00b9f04ea6482 100644 (file)
@@ -244,6 +244,7 @@ void board_init_f(ulong dummy)
        if (major == SOC_MAJOR_VER_1_0)
                out_le32(&cci->ctrl_ord, CCI400_CTRLORD_TERM_BARRIER);
 
+       timer_init();
        dram_init();
 
        /* Allow OCRAM access permission as R/W */
index dcd6d933ea85f201d938afbd6c4882e1bf6ff570..beb82cebb627d294a611395343b13183be4ea0df 100644 (file)
@@ -467,6 +467,7 @@ void board_init_f(ulong dummy)
 
        preloader_console_init();
 
+       timer_init();
        dram_init();
 
        /* Allow OCRAM access permission as R/W */