]> git.kernelconcepts.de Git - karo-tx-uboot.git/blobdiff - common/board_f.c
Power: remove support for Freescale MPC8220
[karo-tx-uboot.git] / common / board_f.c
index 29b49c3ab69b2f07865eaa037e5ae4a3f34c2b7c..81edbdf8e45b5899cab64d798d4c9f510afa3809 100644 (file)
@@ -31,6 +31,7 @@
 #include <version.h>
 #include <environment.h>
 #include <fdtdec.h>
+#include <fs.h>
 #if defined(CONFIG_CMD_IDE)
 #include <ide.h>
 #endif
 #include <mpc5xxx.h>
 #endif
 
+#include <os.h>
 #include <post.h>
 #include <spi.h>
 #include <watchdog.h>
+#include <asm/errno.h>
 #include <asm/io.h>
 #ifdef CONFIG_MP
 #include <asm/mp.h>
@@ -61,6 +64,9 @@
 #include <asm/init_helpers.h>
 #include <asm/relocate.h>
 #endif
+#ifdef CONFIG_SANDBOX
+#include <asm/state.h>
+#endif
 #include <linux/compiler.h>
 
 /*
@@ -155,6 +161,7 @@ static int init_baud_rate(void)
 
 static int display_text_info(void)
 {
+#ifndef CONFIG_SANDBOX
        ulong bss_start, bss_end;
 
 #ifdef CONFIG_SYS_SYM_OFFSETS
@@ -166,6 +173,7 @@ static int display_text_info(void)
 #endif
        debug("U-Boot code: %08X -> %08lX  BSS: -> %08lX\n",
              CONFIG_SYS_TEXT_BASE, bss_start, bss_end);
+#endif
 
 #ifdef CONFIG_MODEM_SUPPORT
        debug("Modem Support enabled\n");
@@ -284,6 +292,8 @@ static int setup_mon_len(void)
 {
 #ifdef CONFIG_SYS_SYM_OFFSETS
        gd->mon_len = _bss_end_ofs;
+#elif defined(CONFIG_SANDBOX)
+       gd->mon_len = (ulong)&_end - (ulong)_init;
 #else
        /* TODO: use (ulong)&__bss_end - (ulong)&__text_start; ? */
        gd->mon_len = (ulong)&__bss_end - CONFIG_SYS_MONITOR_BASE;
@@ -296,6 +306,66 @@ __weak int arch_cpu_init(void)
        return 0;
 }
 
+#ifdef CONFIG_OF_HOSTFILE
+
+#define CHECK(x)               err = (x); if (err) goto failed;
+
+/* Create an empty device tree blob */
+static int make_empty_fdt(void *fdt)
+{
+       int err;
+
+       CHECK(fdt_create(fdt, 256));
+       CHECK(fdt_finish_reservemap(fdt));
+       CHECK(fdt_begin_node(fdt, ""));
+       CHECK(fdt_end_node(fdt));
+       CHECK(fdt_finish(fdt));
+
+       return 0;
+failed:
+       printf("Unable to create empty FDT: %s\n", fdt_strerror(err));
+       return -EACCES;
+}
+
+static int read_fdt_from_file(void)
+{
+       struct sandbox_state *state = state_get_current();
+       void *blob;
+       int size;
+       int err;
+
+       blob = map_sysmem(CONFIG_SYS_FDT_LOAD_ADDR, 0);
+       if (!state->fdt_fname) {
+               err = make_empty_fdt(blob);
+               if (!err)
+                       goto done;
+               return err;
+       }
+       err = fs_set_blk_dev("host", NULL, FS_TYPE_SANDBOX);
+       if (err)
+               return err;
+       size = fs_read(state->fdt_fname, CONFIG_SYS_FDT_LOAD_ADDR, 0, 0);
+       if (size < 0)
+               return -EIO;
+
+done:
+       gd->fdt_blob = blob;
+
+       return 0;
+}
+#endif
+
+#ifdef CONFIG_SANDBOX
+static int setup_ram_buf(void)
+{
+       gd->arch.ram_buf = os_malloc(CONFIG_SYS_SDRAM_SIZE);
+       assert(gd->arch.ram_buf);
+       gd->ram_size = CONFIG_SYS_SDRAM_SIZE;
+
+       return 0;
+}
+#endif
+
 static int setup_fdt(void)
 {
 #ifdef CONFIG_OF_EMBED
@@ -308,6 +378,11 @@ static int setup_fdt(void)
 # else
        gd->fdt_blob = (ulong *)&_end;
 # endif
+#elif defined(CONFIG_OF_HOSTFILE)
+       if (read_fdt_from_file()) {
+               puts("Failed to read control FDT\n");
+               return -1;
+       }
 #endif
        /* Allow the early environment to override the fdt address */
        gd->fdt_blob = (void *)getenv_ulong("fdtcontroladdr", 16,
@@ -470,7 +545,7 @@ static int reserve_malloc(void)
 static int reserve_board(void)
 {
        gd->dest_addr_sp -= sizeof(bd_t);
-       gd->bd = (bd_t *)gd->dest_addr_sp;
+       gd->bd = (bd_t *)map_sysmem(gd->dest_addr_sp, sizeof(bd_t));
        memset(gd->bd, '\0', sizeof(bd_t));
        debug("Reserving %zu Bytes for Board Info at: %08lx\n",
                        sizeof(bd_t), gd->dest_addr_sp);
@@ -489,7 +564,7 @@ static int setup_machine(void)
 static int reserve_global_data(void)
 {
        gd->dest_addr_sp -= sizeof(gd_t);
-       gd->new_gd = (gd_t *)gd->dest_addr_sp;
+       gd->new_gd = (gd_t *)map_sysmem(gd->dest_addr_sp, sizeof(gd_t));
        debug("Reserving %zu Bytes for Global Data at: %08lx\n",
                        sizeof(gd_t), gd->dest_addr_sp);
        return 0;
@@ -506,9 +581,9 @@ static int reserve_fdt(void)
                gd->fdt_size = ALIGN(fdt_totalsize(gd->fdt_blob) + 0x1000, 32);
 
                gd->dest_addr_sp -= gd->fdt_size;
-               gd->new_fdt = (void *)gd->dest_addr_sp;
-               debug("Reserving %lu Bytes for FDT at: %p\n",
-                     gd->fdt_size, gd->new_fdt);
+               gd->new_fdt = map_sysmem(gd->dest_addr_sp, gd->fdt_size);
+               debug("Reserving %lu Bytes for FDT at: %08lx\n",
+                     gd->fdt_size, gd->dest_addr_sp);
        }
 
        return 0;
@@ -592,27 +667,6 @@ static int setup_board_part1(void)
 #if defined(CONFIG_MPC83xx)
        bd->bi_immrbar = CONFIG_SYS_IMMR;
 #endif
-#if defined(CONFIG_MPC8220)
-       bd->bi_mbar_base = CONFIG_SYS_MBAR;     /* base of internal registers */
-       bd->bi_inpfreq = gd->arch.inp_clk;
-       bd->bi_pcifreq = gd->pci_clk;
-       bd->bi_vcofreq = gd->arch.vco_clk;
-       bd->bi_pevfreq = gd->arch.pev_clk;
-       bd->bi_flbfreq = gd->arch.flb_clk;
-
-       /* store bootparam to sram (backward compatible), here? */
-       {
-               u32 *sram = (u32 *) CONFIG_SYS_SRAM_BASE;
-
-               *sram++ = gd->ram_size;
-               *sram++ = gd->bus_clk;
-               *sram++ = gd->arch.inp_clk;
-               *sram++ = gd->cpu_clk;
-               *sram++ = gd->arch.vco_clk;
-               *sram++ = gd->arch.flb_clk;
-               *sram++ = 0xb8c3ba11;   /* boot signature */
-       }
-#endif
 
        return 0;
 }
@@ -709,8 +763,9 @@ static int setup_reloc(void)
        memcpy(gd->new_gd, (char *)gd, sizeof(gd_t));
 
        debug("Relocation Offset is: %08lx\n", gd->reloc_off);
-       debug("Relocating to %08lx, new gd at %p, sp at %08lx\n",
-             gd->dest_addr, gd->new_gd, gd->dest_addr_sp);
+       debug("Relocating to %08lx, new gd at %08lx, sp at %08lx\n",
+             gd->dest_addr, (ulong)map_to_sysmem(gd->new_gd),
+             gd->dest_addr_sp);
 
        return 0;
 }
@@ -736,6 +791,8 @@ static int jump_to_copy(void)
         * (CPU cache)
         */
        board_init_f_r_trampoline(gd->start_addr_sp);
+#elif defined(CONFIG_SANDBOX)
+       board_init_r(gd->new_gd, 0);
 #else
        relocate_code(gd->dest_addr_sp, gd->new_gd, gd->dest_addr);
 #endif
@@ -755,8 +812,11 @@ static int mark_bootstage(void)
 static init_fnc_t init_sequence_f[] = {
 #if !defined(CONFIG_CPM2) && !defined(CONFIG_MPC512X) && \
                !defined(CONFIG_MPC83xx) && !defined(CONFIG_MPC85xx) && \
-               !defined(CONFIG_MPC86xx)
+               !defined(CONFIG_MPC86xx) && !defined(CONFIG_X86)
        zero_global_data,
+#endif
+#ifdef CONFIG_SANDBOX
+       setup_ram_buf,
 #endif
        setup_fdt,
        setup_mon_len,
@@ -788,9 +848,6 @@ static init_fnc_t init_sequence_f[] = {
        /* TODO: can we rename this to timer_init()? */
        init_timebase,
 #endif
-#if defined(CONFIG_BOARD_EARLY_INIT_F)
-       board_early_init_f,
-#endif
 #ifdef CONFIG_ARM
        timer_init,             /* initialize timer */
 #endif
@@ -819,8 +876,11 @@ static init_fnc_t init_sequence_f[] = {
        init_baud_rate,         /* initialze baudrate settings */
        serial_init,            /* serial communications setup */
        console_init_f,         /* stage 1 init of console */
-#if defined(CONFIG_X86) && defined(CONFIG_OF_CONTROL)
-       prepare_fdt,            /* TODO(sjg@chromium.org): remove */
+#ifdef CONFIG_SANDBOX
+       sandbox_early_getopt_check,
+#endif
+#ifdef CONFIG_OF_CONTROL
+       fdtdec_prepare_fdt,
 #endif
        display_options,        /* say that we are here */
        display_text_info,      /* show debugging info if required */
@@ -840,9 +900,6 @@ static init_fnc_t init_sequence_f[] = {
 #if defined(CONFIG_MPC5xxx)
        prt_mpc5xxx_clks,
 #endif /* CONFIG_MPC5xxx */
-#if defined(CONFIG_MPC8220)
-       prt_mpc8220_clks,
-#endif
 #if defined(CONFIG_DISPLAY_BOARDINFO)
        checkboard,             /* display board info */
 #endif
@@ -859,8 +916,7 @@ static init_fnc_t init_sequence_f[] = {
 #endif
 #ifdef CONFIG_X86
        dram_init_f,            /* configure available RAM banks */
-       /* x86 would prefer that this happens after relocation */
-       dram_init,
+       calculate_relocation_address,
 #endif
        announce_dram_init,
        /* TODO: unify all these dram functions? */
@@ -1007,9 +1063,3 @@ void board_init_f_r(void)
        hang();
 }
 #endif /* CONFIG_X86 */
-
-void hang(void)
-{
-       puts("### ERROR ### Please RESET the board ###\n");
-       for (;;);
-}