arm: Use image_setup_linux() instead of local code
authorSimon Glass <sjg@chromium.org>
Wed, 8 May 2013 08:06:03 +0000 (08:06 +0000)
committerTom Rini <trini@ti.com>
Tue, 14 May 2013 19:37:25 +0000 (15:37 -0400)
Use the common FDT setup function that is now available in image. Move
the FDT-specific code to a new bootm-fdt.c and remove unused headers
from bootm.c.

Signed-off-by: Simon Glass <sjg@chromium.org>
arch/arm/lib/Makefile
arch/arm/lib/bootm-fdt.c [new file with mode: 0644]
arch/arm/lib/bootm.c

index 6ae161a51dc147327925c158f31e845ba74b75ca..5b2cb61dc362e82bb256bc6c72bc6ab86e76464b 100644 (file)
@@ -45,6 +45,7 @@ endif
 COBJS-y += bss.o
 
 COBJS-y        += bootm.o
+COBJS-$(CONFIG_OF_LIBFDT) += bootm-fdt.o
 COBJS-$(CONFIG_SYS_L2_PL310) += cache-pl310.o
 SOBJS-$(CONFIG_USE_ARCH_MEMSET) += memset.o
 SOBJS-$(CONFIG_USE_ARCH_MEMCPY) += memcpy.o
diff --git a/arch/arm/lib/bootm-fdt.c b/arch/arm/lib/bootm-fdt.c
new file mode 100644 (file)
index 0000000..93888f8
--- /dev/null
@@ -0,0 +1,52 @@
+/*
+ * Copyright (c) 2013, Google Inc.
+ *
+ * Copyright (C) 2011
+ * Corscience GmbH & Co. KG - Simon Schwarz <schwarz@corscience.de>
+ *  - Added prep subcommand support
+ *  - Reorganized source - modeled after powerpc version
+ *
+ * (C) Copyright 2002
+ * Sysgo Real-Time Solutions, GmbH <www.elinos.com>
+ * Marius Groeger <mgroeger@sysgo.de>
+ *
+ * Copyright (C) 2001  Erik Mouw (J.A.K.Mouw@its.tudelft.nl)
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#include <common.h>
+#include <fdt_support.h>
+
+DECLARE_GLOBAL_DATA_PTR;
+
+int arch_fixup_memory_node(void *blob)
+{
+       bd_t *bd = gd->bd;
+       int bank;
+       u64 start[CONFIG_NR_DRAM_BANKS];
+       u64 size[CONFIG_NR_DRAM_BANKS];
+
+       for (bank = 0; bank < CONFIG_NR_DRAM_BANKS; bank++) {
+               start[bank] = bd->bi_dram[bank].start;
+               size[bank] = bd->bi_dram[bank].size;
+       }
+
+       return fdt_fixup_memory_banks(blob, start, size, CONFIG_NR_DRAM_BANKS);
+}
index 08c11b7c0d058158fe87cafea510a125efc31f4f..1b6e0ace45372417af0b671aac632fce309b12f3 100644 (file)
@@ -22,7 +22,6 @@
  * You should have received a copy of the GNU General Public License
  * along with this program; if not, write to the Free Software
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307         USA
- *
  */
 
 #include <common.h>
@@ -69,23 +68,6 @@ void arch_lmb_reserve(struct lmb *lmb)
                    gd->bd->bi_dram[0].start + gd->bd->bi_dram[0].size - sp);
 }
 
-#ifdef CONFIG_OF_LIBFDT
-static int fixup_memory_node(void *blob)
-{
-       bd_t    *bd = gd->bd;
-       int bank;
-       u64 start[CONFIG_NR_DRAM_BANKS];
-       u64 size[CONFIG_NR_DRAM_BANKS];
-
-       for (bank = 0; bank < CONFIG_NR_DRAM_BANKS; bank++) {
-               start[bank] = bd->bi_dram[bank].start;
-               size[bank] = bd->bi_dram[bank].size;
-       }
-
-       return fdt_fixup_memory_banks(blob, start, size, CONFIG_NR_DRAM_BANKS);
-}
-#endif
-
 static void announce_and_cleanup(void)
 {
        printf("\nStarting kernel ...\n\n");
@@ -202,43 +184,6 @@ static void setup_end_tag(bd_t *bd)
        params->hdr.size = 0;
 }
 
-#ifdef CONFIG_OF_LIBFDT
-static int create_fdt(bootm_headers_t *images)
-{
-       ulong of_size = images->ft_len;
-       char **of_flat_tree = &images->ft_addr;
-       ulong *initrd_start = &images->initrd_start;
-       ulong *initrd_end = &images->initrd_end;
-       struct lmb *lmb = &images->lmb;
-       ulong rd_len;
-       int ret;
-
-       debug("using: FDT\n");
-
-       boot_fdt_add_mem_rsv_regions(lmb, *of_flat_tree);
-
-       rd_len = images->rd_end - images->rd_start;
-       ret = boot_ramdisk_high(lmb, images->rd_start, rd_len,
-                       initrd_start, initrd_end);
-       if (ret)
-               return ret;
-
-       ret = boot_relocate_fdt(lmb, of_flat_tree, &of_size);
-       if (ret)
-               return ret;
-
-       fdt_chosen(*of_flat_tree, 1);
-       fixup_memory_node(*of_flat_tree);
-       fdt_fixup_ethernet(*of_flat_tree);
-       fdt_initrd(*of_flat_tree, *initrd_start, *initrd_end, 1);
-#ifdef CONFIG_OF_BOARD_SETUP
-       ft_board_setup(*of_flat_tree, gd->bd);
-#endif
-
-       return 0;
-}
-#endif
-
 __weak void setup_board_tags(struct tag **in_params) {}
 
 /* Subcommand: PREP */
@@ -249,7 +194,7 @@ static void boot_prep_linux(bootm_headers_t *images)
        if (IMAGE_ENABLE_OF_LIBFDT && images->ft_len) {
 #ifdef CONFIG_OF_LIBFDT
                debug("using: FDT\n");
-               if (create_fdt(images)) {
+               if (image_setup_linux(images)) {
                        printf("FDT creation failed! hanging...");
                        hang();
                }