]> git.kernelconcepts.de Git - karo-tx-uboot.git/blobdiff - lib_mips/board.c
[BUILD] Generate include/autoconf.mk from board config files
[karo-tx-uboot.git] / lib_mips / board.c
index 072709553498a37a43fe6702dec02dfb61d4a410..c1a0acf46986e00e229be005c054f46fba497182 100644 (file)
@@ -29,6 +29,8 @@
 #include <net.h>
 #include <environment.h>
 
+DECLARE_GLOBAL_DATA_PTR;
+
 #if ( ((CFG_ENV_ADDR+CFG_ENV_SIZE) < CFG_MONITOR_BASE) || \
       (CFG_ENV_ADDR >= (CFG_MONITOR_BASE + CFG_MONITOR_LEN)) ) || \
     defined(CFG_ENV_IS_IN_NVRAM)
@@ -60,14 +62,17 @@ static ulong mem_malloc_start;
 static ulong mem_malloc_end;
 static ulong mem_malloc_brk;
 
+/*
+ * mips_io_port_base is the begin of the address space to which x86 style
+ * I/O ports are mapped.
+ */
+unsigned long mips_io_port_base = -1;
 
 /*
  * The Malloc area is immediately below the monitor copy in DRAM
  */
 static void mem_malloc_init (void)
 {
-       DECLARE_GLOBAL_DATA_PTR;
-
        ulong dest_addr = CFG_MONITOR_BASE + gd->reloc_off;
 
        mem_malloc_end = dest_addr;
@@ -94,8 +99,6 @@ void *sbrk (ptrdiff_t increment)
 
 static int init_func_ram (void)
 {
-       DECLARE_GLOBAL_DATA_PTR;
-
 #ifdef CONFIG_BOARD_TYPES
        int board_type = gd->board_type;
 #else
@@ -127,9 +130,7 @@ static void display_flash_config(ulong size)
 
 static int init_baudrate (void)
 {
-       DECLARE_GLOBAL_DATA_PTR;
-
-       uchar tmp[64];  /* long enough for environment variables */
+       char tmp[64];   /* long enough for environment variables */
        int i = getenv_r ("baudrate", tmp, sizeof (tmp));
 
        gd->baudrate = (i > 0)
@@ -180,19 +181,21 @@ init_fnc_t *init_sequence[] = {
 
 void board_init_f(ulong bootflag)
 {
-       DECLARE_GLOBAL_DATA_PTR;
-
        gd_t gd_data, *id;
        bd_t *bd;
        init_fnc_t **init_fnc_ptr;
        ulong addr, addr_sp, len = (ulong)&uboot_end - CFG_MONITOR_BASE;
+       ulong *s;
 #ifdef CONFIG_PURPLE
        void copy_code (ulong);
 #endif
 
-               /* Pointer is writable since we allocated a register for it.
-                */
+       /* Pointer is writable since we allocated a register for it.
+        */
        gd = &gd_data;
+       /* compiler optimization barrier needed for GCC >= 3.4 */
+       __asm__ __volatile__("": : :"memory");
+
        memset ((void *)gd, 0, sizeof (gd_t));
 
        for (init_fnc_ptr = init_sequence; *init_fnc_ptr; ++init_fnc_ptr) {
@@ -207,33 +210,27 @@ void board_init_f(ulong bootflag)
         */
        addr = CFG_SDRAM_BASE + gd->ram_size;
 
-               /* We can reserve some RAM "on top" here.
-                */
+       /* We can reserve some RAM "on top" here.
+        */
 
-               /* round down to next 4 kB limit.
-                */
+       /* round down to next 4 kB limit.
+        */
        addr &= ~(4096 - 1);
-#ifdef DEBUG
-       printf ("Top of RAM usable for U-Boot at: %08lx\n", addr);
-#endif
+       debug ("Top of RAM usable for U-Boot at: %08lx\n", addr);
 
-               /* Reserve memory for U-Boot code, data & bss
-                * round down to next 16 kB limit
-                */
+       /* Reserve memory for U-Boot code, data & bss
+        * round down to next 16 kB limit
+        */
        addr -= len;
        addr &= ~(16 * 1024 - 1);
 
-#ifdef DEBUG
-       printf ("Reserving %ldk for U-Boot at: %08lx\n", len >> 10, addr);
-#endif
+       debug ("Reserving %ldk for U-Boot at: %08lx\n", len >> 10, addr);
 
-               /* Reserve memory for malloc() arena.
-                */
+        /* Reserve memory for malloc() arena.
+        */
        addr_sp = addr - TOTAL_MALLOC_LEN;
-#ifdef DEBUG
-       printf ("Reserving %dk for malloc() at: %08lx\n",
+       debug ("Reserving %dk for malloc() at: %08lx\n",
                        TOTAL_MALLOC_LEN >> 10, addr_sp);
-#endif
 
        /*
         * (permanently) allocate a Board Info struct
@@ -242,25 +239,20 @@ void board_init_f(ulong bootflag)
        addr_sp -= sizeof(bd_t);
        bd = (bd_t *)addr_sp;
        gd->bd = bd;
-#ifdef DEBUG
-       printf ("Reserving %d Bytes for Board Info at: %08lx\n",
+       debug ("Reserving %d Bytes for Board Info at: %08lx\n",
                        sizeof(bd_t), addr_sp);
-#endif
+
        addr_sp -= sizeof(gd_t);
        id = (gd_t *)addr_sp;
-#ifdef DEBUG
-       printf ("Reserving %d Bytes for Global Data at: %08lx\n",
+       debug ("Reserving %d Bytes for Global Data at: %08lx\n",
                        sizeof (gd_t), addr_sp);
-#endif
 
-               /* Reserve memory for boot params.
-                */
+       /* Reserve memory for boot params.
+        */
        addr_sp -= CFG_BOOTPARAMS_LEN;
        bd->bi_boot_params = addr_sp;
-#ifdef DEBUG
-       printf ("Reserving %dk for malloc() at: %08lx\n",
+       debug ("Reserving %dk for boot params() at: %08lx\n",
                        CFG_BOOTPARAMS_LEN >> 10, addr_sp);
-#endif
 
        /*
         * Finally, we set up a new (bigger) stack.
@@ -270,11 +262,12 @@ void board_init_f(ulong bootflag)
         */
        addr_sp -= 16;
        addr_sp &= ~0xF;
-       *((ulong *) addr_sp)-- = 0;
-       *((ulong *) addr_sp)-- = 0;
-#ifdef DEBUG
-       printf ("Stack Pointer at: %08lx\n", addr_sp);
-#endif
+       s = (ulong *)addr_sp;
+       *s-- = 0;
+       *s-- = 0;
+       addr_sp = (ulong)s;
+       debug ("Stack Pointer at: %08lx\n", addr_sp);
+
        /*
         * Save local variables to board info struct
         */
@@ -307,7 +300,6 @@ void board_init_f(ulong bootflag)
 
 void board_init_r (gd_t *id, ulong dest_addr)
 {
-       DECLARE_GLOBAL_DATA_PTR;
        cmd_tbl_t *cmdtp;
        ulong size;
        extern void malloc_bin_reloc (void);
@@ -321,9 +313,7 @@ void board_init_r (gd_t *id, ulong dest_addr)
        gd = id;
        gd->flags |= GD_FLG_RELOC;      /* tell others: relocation done */
 
-#ifdef DEBUG
-       printf ("Now running in RAM - U-Boot at: %08lx\n", dest_addr);
-#endif
+       debug ("Now running in RAM - U-Boot at: %08lx\n", dest_addr);
 
        gd->reloc_off = dest_addr - CFG_MONITOR_BASE;
 
@@ -393,6 +383,13 @@ void board_init_r (gd_t *id, ulong dest_addr)
        /* IP Address */
        bd->bi_ip_addr = getenv_IPaddr("ipaddr");
 
+#if defined(CONFIG_PCI)
+       /*
+        * Do pci configuration
+        */
+       pci_init();
+#endif
+
 /** leave this here (after malloc(), environment and PCI are working) **/
        /* Initialize devices */
        devices_init ();
@@ -407,19 +404,21 @@ void board_init_r (gd_t *id, ulong dest_addr)
        if ((s = getenv ("loadaddr")) != NULL) {
                load_addr = simple_strtoul (s, NULL, 16);
        }
-#if (CONFIG_COMMANDS & CFG_CMD_NET)
+#if defined(CONFIG_CMD_NET)
        if ((s = getenv ("bootfile")) != NULL) {
                copy_filename (BootFile, s, sizeof (BootFile));
        }
-#endif /* CFG_CMD_NET */
+#endif
 
 #if defined(CONFIG_MISC_INIT_R)
        /* miscellaneous platform dependent initialisations */
        misc_init_r ();
 #endif
 
-#if (CONFIG_COMMANDS & CFG_CMD_NET) && defined(CONFIG_NET_MULTI)
+#if defined(CONFIG_CMD_NET)
+#if defined(CONFIG_NET_MULTI)
        puts ("Net:   ");
+#endif
        eth_initialize(gd->bd);
 #endif