|
@@ -17,6 +17,7 @@
|
|
|
#include <malloc.h>
|
|
|
#include <dm/root.h>
|
|
|
#include <linux/compiler.h>
|
|
|
+#include <fdt_support.h>
|
|
|
|
|
|
DECLARE_GLOBAL_DATA_PTR;
|
|
|
|
|
@@ -56,6 +57,14 @@ __weak int spl_start_uboot(void)
|
|
|
return 1;
|
|
|
}
|
|
|
|
|
|
+/* weak default platform specific function to initialize
|
|
|
+ * dram banks
|
|
|
+ */
|
|
|
+__weak int dram_init_banksize(void)
|
|
|
+{
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
/*
|
|
|
* Weak default function for arch specific zImage check. Return zero
|
|
|
* and fill start and end address if image is recognized.
|
|
@@ -66,6 +75,33 @@ int __weak bootz_setup(ulong image, ulong *start, ulong *end)
|
|
|
}
|
|
|
#endif
|
|
|
|
|
|
+void spl_fixup_fdt(void)
|
|
|
+{
|
|
|
+#if defined(CONFIG_SPL_OF_LIBFDT) && defined(CONFIG_SYS_SPL_ARGS_ADDR)
|
|
|
+ void *fdt_blob = (void *)CONFIG_SYS_SPL_ARGS_ADDR;
|
|
|
+ int err;
|
|
|
+
|
|
|
+ err = fdt_check_header(fdt_blob);
|
|
|
+ if (err < 0) {
|
|
|
+ printf("fdt_root: %s\n", fdt_strerror(err));
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ /* fixup the memory dt node */
|
|
|
+ err = fdt_shrink_to_minimum(fdt_blob, 0);
|
|
|
+ if (err == 0) {
|
|
|
+ printf("spl: fdt_shrink_to_minimum err - %d\n", err);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ err = arch_fixup_fdt(fdt_blob);
|
|
|
+ if (err) {
|
|
|
+ printf("spl: arch_fixup_fdt err - %d\n", err);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+#endif
|
|
|
+}
|
|
|
+
|
|
|
/*
|
|
|
* Weak default function for board specific cleanup/preparation before
|
|
|
* Linux boot. Some boards/platforms might not need it, so just provide
|
|
@@ -323,6 +359,9 @@ void board_init_r(gd_t *dummy1, ulong dummy2)
|
|
|
|
|
|
debug(">>spl:board_init_r()\n");
|
|
|
gd->bd = &bdata;
|
|
|
+#ifdef CONFIG_SPL_OS_BOOT
|
|
|
+ dram_init_banksize();
|
|
|
+#endif
|
|
|
|
|
|
#if defined(CONFIG_SYS_SPL_MALLOC_START)
|
|
|
mem_malloc_init(CONFIG_SYS_SPL_MALLOC_START,
|
|
@@ -364,6 +403,7 @@ void board_init_r(gd_t *dummy1, ulong dummy2)
|
|
|
#ifdef CONFIG_SPL_OS_BOOT
|
|
|
case IH_OS_LINUX:
|
|
|
debug("Jumping to Linux\n");
|
|
|
+ spl_fixup_fdt();
|
|
|
spl_board_prepare_for_linux();
|
|
|
jump_to_image_linux(&spl_image);
|
|
|
#endif
|