rockchip: spl-boot-order: do not attempt to access fdt if OF_PLATDATA
authorUrja Rannikko <urjaman@gmail.com>
Wed, 13 May 2020 19:15:22 +0000 (19:15 +0000)
committerKever Yang <kever.yang@rock-chips.com>
Fri, 22 May 2020 12:53:20 +0000 (20:53 +0800)
gd->fdt_blob is null if using OF_PLATDATA in SPL, which causes a hang
after f0921f5098 ("fdt: Sync up to the latest libfdt").
We use the same test that is used in spl_common_init on whether to call
fdtdec_setup to unconditionally avoid linking in the fdt-using code
when not necessary and thus reduce SPL size.

Signed-off-by: Urja Rannikko <urjaman@gmail.com>
Reviewed-by: Kever Yang <kever.yang@rock-chips.com>
arch/arm/mach-rockchip/spl-boot-order.c

index c2e40230072f68458bcd371f4c9326e98463a02e..94673f34c9b8e72fe79abd67e7ca71c3628dedf3 100644 (file)
@@ -99,6 +99,12 @@ __weak const char *board_spl_was_booted_from(void)
 
 void board_boot_order(u32 *spl_boot_list)
 {
+       /* In case of no fdt (or only platdata), use spl_boot_device() */
+       if (!CONFIG_IS_ENABLED(OF_CONTROL) || CONFIG_IS_ENABLED(OF_PLATDATA)) {
+               spl_boot_list[0] = spl_boot_device();
+               return;
+       }
+
        const void *blob = gd->fdt_blob;
        int chosen_node = fdt_path_offset(blob, "/chosen");
        int idx = 0;