]> git.ipfire.org Git - people/ms/u-boot.git/blobdiff - lib_ppc/board.c
* Patches by Yuli Barcohen, 13 Jul 2003:
[people/ms/u-boot.git] / lib_ppc / board.c
index 333d2d25c10406fc28e4643b50d14d0d33357bee..108244e296a96ade4c1cbf0cae8b5a2303ded53b 100644 (file)
@@ -46,9 +46,6 @@
 #include <status_led.h>
 #endif
 #include <net.h>
-#if (CONFIG_COMMANDS & CFG_CMD_BEDBUG)
-#include <cmd_bedbug.h>
-#endif
 #ifdef CFG_ALLOC_DPRAM
 #if !defined(CONFIG_8260)
 #include <commproc.h>
@@ -95,9 +92,12 @@ extern flash_info_t flash_info[];
 
 extern ulong __init_end;
 extern ulong _end;
-
 ulong monitor_flash_len;
 
+#if (CONFIG_COMMANDS & CFG_CMD_BEDBUG)
+#include <bedbug/type.h>
+#endif
+
 /*
  * Begin and End of memory area for malloc(), and current "brk"
  */
@@ -382,7 +382,7 @@ void board_init_f (ulong bootflag)
         * relocate the code and continue running from DRAM.
         *
         * Reserve memory at end of RAM for (top down in that order):
-         *  - kernel log buffer
+        *  - kernel log buffer
         *  - protected RAM
         *  - LCD framebuffer
         *  - monitor code
@@ -401,9 +401,7 @@ void board_init_f (ulong bootflag)
 #ifdef CONFIG_LOGBUFFER
        /* reserve kernel log buffer */
        addr -= (LOGBUFF_RESERVE);
-# ifdef DEBUG
-       printf ("Reserving %ldk for kernel logbuffer at %08lx\n", LOGBUFF_LEN, addr);
-# endif
+       debug ("Reserving %dk for kernel logbuffer at %08lx\n", LOGBUFF_LEN, addr);
 #endif
 
 #ifdef CONFIG_PRAM
@@ -413,16 +411,12 @@ void board_init_f (ulong bootflag)
        i = getenv_r ("pram", tmp, sizeof (tmp));
        reg = (i > 0) ? simple_strtoul (tmp, NULL, 10) : CONFIG_PRAM;
        addr -= (reg << 10);            /* size is in kB */
-# ifdef DEBUG
-       printf ("Reserving %ldk for protected RAM at %08lx\n", reg, addr);
-# endif
+       debug ("Reserving %ldk for protected RAM at %08lx\n", reg, addr);
 #endif /* CONFIG_PRAM */
 
        /* 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);
 
 #ifdef CONFIG_LCD
        /* reserve memory for LCD display (always full pages) */
@@ -438,14 +432,12 @@ void board_init_f (ulong bootflag)
 
        /*
         * reserve memory for U-Boot code, data & bss
-        * round down to next 16 kB limit
+        * round down to next 4 kB limit
         */
        addr -= len;
-       addr &= ~(16 * 1024 - 1);
+       addr &= ~(4096 - 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);
 
 #ifdef CONFIG_AMIGAONEG3SE
        gd->relocaddr = addr;
@@ -455,10 +447,8 @@ void board_init_f (ulong bootflag)
         * 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
@@ -467,16 +457,12 @@ 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
 
        /*
         * Finally, we set up a new (bigger) stack.
@@ -488,9 +474,7 @@ void board_init_f (ulong bootflag)
        addr_sp &= ~0xF;
        *((ulong *) addr_sp)-- = 0;
        *((ulong *) addr_sp)-- = 0;
-#ifdef DEBUG
-       printf ("Stack Pointer at: %08lx\n", addr_sp);
-#endif
+       debug ("Stack Pointer at: %08lx\n", addr_sp);
 
        /*
         * Save local variables to board info struct
@@ -536,15 +520,16 @@ void board_init_f (ulong bootflag)
 #endif
 #endif
 
-#ifdef DEBUG
-       printf ("New Stack Pointer is: %08lx\n", addr_sp);
-#endif
+       debug ("New Stack Pointer is: %08lx\n", addr_sp);
 
        WATCHDOG_RESET ();
 
 #ifdef CONFIG_POST
        post_bootmode_init();
-       post_run (NULL, POST_ROM | post_bootmode_get(0));
+       if (post_hotkeys_pressed(gd)) /* Force the long-running tests (memory) */
+               post_run (NULL, POST_ROM | POST_SLOWTEST);
+       else
+               post_run (NULL, POST_ROM | post_bootmode_get(0));
 #endif
 
        WATCHDOG_RESET();
@@ -570,7 +555,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;
        char *s, *e;
        bd_t *bd;
@@ -589,22 +573,19 @@ void board_init_r (gd_t *id, ulong dest_addr)
 
        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);
 
        WATCHDOG_RESET ();
 
        gd->reloc_off = dest_addr - CFG_MONITOR_BASE;
-       
+
        monitor_flash_len = (ulong)&__init_end - dest_addr;
 
        /*
         * We have to relocate the command table manually
         */
-       for (cmdtp = &cmd_tbl[0]; cmdtp->name; cmdtp++) {
+       for (cmdtp = &__u_boot_cmd_start; cmdtp !=  &__u_boot_cmd_end; cmdtp++) {
                ulong addr;
-
                addr = (ulong) (cmdtp->cmd) + gd->reloc_off;
 #if 0
                printf ("Command \"%s\": 0x%08lx => 0x%08lx\n",
@@ -737,10 +718,10 @@ void board_init_r (gd_t *id, ulong dest_addr)
 
        /*
         * Fill in missing fields of bd_info.
-         * We do this here, where we have "normal" access to the
-         * environment; we used to do this still running from ROM,
-         * where had to use getenv_r(), which can be pretty slow when
-         * the environment is in EEPROM.
+        * We do this here, where we have "normal" access to the
+        * environment; we used to do this still running from ROM,
+        * where had to use getenv_r(), which can be pretty slow when
+        * the environment is in EEPROM.
         */
        s = getenv ("ethaddr");
 #if defined (CONFIG_MBX) || defined (CONFIG_RPXCLASSIC) || defined(CONFIG_IAD210)
@@ -820,7 +801,6 @@ void board_init_r (gd_t *id, ulong dest_addr)
     defined(CONFIG_COGENT)     || \
     defined(CONFIG_CPCI405)    || \
     defined(CONFIG_EVB64260)   || \
-    defined(CONFIG_HYMOD)      || \
     defined(CONFIG_KUP4K)      || \
     defined(CONFIG_LWMON)      || \
     defined(CONFIG_PCU_E)      || \
@@ -850,9 +830,7 @@ void board_init_r (gd_t *id, ulong dest_addr)
     defined(CONFIG_SPD823TS)   )
 
        WATCHDOG_RESET ();
-# ifdef DEBUG
-       puts ("Reset Ethernet PHY\n");
-# endif
+       debug ("Reset Ethernet PHY\n");
        reset_phy ();
 #endif
 
@@ -862,9 +840,7 @@ void board_init_r (gd_t *id, ulong dest_addr)
        kgdb_init ();
 #endif
 
-#ifdef DEBUG
-       printf ("U-Boot relocated to %08lx\n", dest_addr);
-#endif
+       debug ("U-Boot relocated to %08lx\n", dest_addr);
 
        /*
         * Enable Interrupts
@@ -924,8 +900,11 @@ void board_init_r (gd_t *id, ulong dest_addr)
 #endif
 
 #ifdef CONFIG_POST
-       post_run (NULL, POST_RAM | post_bootmode_get(0));
-       if (post_bootmode_get(0) & POST_POWERFAIL) {
+       if (gd->post_hotkeys_latch)
+               post_run (NULL, POST_RAM | POST_SLOWTEST);
+       else
+               post_run (NULL, POST_RAM | post_bootmode_get(0));
+       if (post_bootmode_get(0) & POST_SLOWTEST) {
                post_bootmode_clear();
                board_poweroff();
        }