arm: socfpga: fix SPL on gen5 after moving to DM serial
authorSimon Goldschmidt <simon.k.r.goldschmidt@gmail.com>
Mon, 13 Aug 2018 07:33:44 +0000 (09:33 +0200)
committerMarek Vasut <marex@denx.de>
Mon, 13 Aug 2018 13:29:54 +0000 (15:29 +0200)
There were NULL pointers dereferenced because DM was used
too early without correct initialization:
- malloc_simple returned NULL when called from preloader_console_init()
  because gd->malloc_limit was 0
- uclass_add dereferenced gd->uclass_root members which were NULL because
  dm_init (or one of its relatives) has not been called.

All this is fixed by calling spl_early_init before calling
preloader_console_init.

This fixes commit 73172753f4f3 ("ARM: socfpga: Convert to DM serial")

Signed-off-by: Simon Goldschmidt <simon.k.r.goldschmidt@gmail.com>
arch/arm/mach-socfpga/spl_gen5.c

index d6fe7d35af1766f6f734870820c8d468a347afda..9bdfaa3c1e1dfd7fe64b482362b9e39938b980ee 100644 (file)
@@ -86,6 +86,7 @@ void board_init_f(ulong dummy)
        const struct cm_config *cm_default_cfg = cm_get_default_config();
        unsigned long sdram_size;
        unsigned long reg;
+       int ret;
 
        /*
         * First C code to run. Clear fake OCRAM ECC first as SBE
@@ -152,6 +153,12 @@ void board_init_f(ulong dummy)
        /* unfreeze / thaw all IO banks */
        sys_mgr_frzctrl_thaw_req();
 
+       ret = spl_early_init();
+       if (ret) {
+               debug("spl_early_init() failed: %d\n", ret);
+               hang();
+       }
+
        /* enable console uart printing */
        preloader_console_init();