Hi Wolfgang,

please pull U-Boot/MIPS repository to pick up the following changes.

Thanks in advance,

  Shinya

---

The following changes since commit 2145188bea2df8f2b47a87ec3071b55027e8d0ae:
  Ben Warren (1):
        Fix compile error in building MBX860T.

are available in the git repository at:

  git://git.denx.de/u-boot-mips.git master

Stefan Roese (4):
      MIPS: Add onenand_init() to board.c and move nand_init()
      MIPS: Add board_early_init_f() to init_sequence
      MIPS: Add CONFIG_SKIP_LOWLEVEL_INIT
      MIPS: Flush data cache upon relocation

 cpu/mips/start.S |   32 +++++++++++++++++++++++++-------
 lib_mips/board.c |   25 ++++++++++++++++++++-----
 2 files changed, 45 insertions(+), 12 deletions(-)

diff --git a/cpu/mips/start.S b/cpu/mips/start.S
index 6a22302..57db589 100644
--- a/cpu/mips/start.S
+++ b/cpu/mips/start.S
@@ -243,9 +243,11 @@ reset:
        mtc0    zero, CP0_COUNT
        mtc0    zero, CP0_COMPARE
 
+#if !defined(CONFIG_SKIP_LOWLEVEL_INIT)
        /* CONFIG0 register */
        li      t0, CONF_CM_UNCACHED
        mtc0    t0, CP0_CONFIG
+#endif /* !CONFIG_SKIP_LOWLEVEL_INIT */
 
        /* Initialize $gp.
         */
@@ -255,6 +257,7 @@ reset:
 1:
        lw      gp, 0(ra)
 
+#if !defined(CONFIG_SKIP_LOWLEVEL_INIT)
        /* Initialize any external memory.
         */
        la      t9, lowlevel_init
@@ -271,6 +274,7 @@ reset:
         */
        li      t0, CONF_CM_CACHABLE_NONCOHERENT
        mtc0    t0, CP0_CONFIG
+#endif /* !CONFIG_SKIP_LOWLEVEL_INIT */
 
        /* Set up temporary stack.
         */
@@ -307,6 +311,7 @@ relocate_code:
        la      t3, in_ram
        lw      t2, -12(t3)     /* t2 <-- uboot_end_data        */
        move    t1, a2
+       move    s2, a2          /* s2 <-- destination address   */
 
        /*
         * Fix $gp:
@@ -316,13 +321,21 @@ relocate_code:
        move    t6, gp
        sub     gp, CONFIG_SYS_MONITOR_BASE
        add     gp, a2          /* gp now adjusted              */
-       sub     t6, gp, t6      /* t6 <-- relocation offset     */
+       sub     s1, gp, t6      /* s1 <-- relocation offset     */
 
        /*
         * t0 = source address
         * t1 = target address
         * t2 = source end address
         */
+
+       /*
+        * Save destination address and size for later usage in flush_cache()
+        */
+       move    s0, a1          /* save gd in s0                */
+       move    a0, t1          /* a0 <-- destination addr      */
+       sub     a1, t2, t0      /* a1 <-- size                  */
+
        /* On the purple board we copy the code earlier in a special way
         * in order to solve flash problems
         */
@@ -338,9 +351,14 @@ relocate_code:
        /* If caches were enabled, we would have to flush them here.
         */
 
+       /* a0 & a1 are already set up for flush_cache(start, size) */
+       la      t9, flush_cache
+       jalr    t9
+       nop
+
        /* Jump to where we've relocated ourselves.
         */
-       addi    t0, a2, in_ram - _start
+       addi    t0, s2, in_ram - _start
        jr      t0
        nop
 
@@ -367,7 +385,7 @@ in_ram:
 1:
        lw      t1, 0(t4)
        beqz    t1, 2f
-       add     t1, t6
+       add     t1, s1
        sw      t1, 0(t4)
 2:
        addi    t2, 1
@@ -378,8 +396,8 @@ in_ram:
         */
        lw      t1, -12(t0)     /* t1 <-- uboot_end_data        */
        lw      t2, -8(t0)      /* t2 <-- uboot_end             */
-       add     t1, t6          /* adjust pointers              */
-       add     t2, t6
+       add     t1, s1          /* adjust pointers              */
+       add     t2, s1
 
        sub     t1, 4
 1:
@@ -387,10 +405,10 @@ in_ram:
        bltl    t1, t2, 1b
        sw      zero, 0(t1)     /* delay slot                   */
 
-       move    a0, a1
+       move    a0, s0          /* a0 <-- gd                    */
        la      t9, board_init_r
        jr      t9
-       move    a1, a2          /* delay slot                   */
+       move    a1, s2          /* delay slot                   */
 
        .end    relocate_code
 
diff --git a/lib_mips/board.c b/lib_mips/board.c
index 9c997f1..dfe6831 100644
--- a/lib_mips/board.c
+++ b/lib_mips/board.c
@@ -30,6 +30,7 @@
 #include <net.h>
 #include <environment.h>
 #include <nand.h>
+#include <onenand_uboot.h>
 #include <spi.h>
 
 DECLARE_GLOBAL_DATA_PTR;
@@ -71,6 +72,15 @@ static ulong mem_malloc_brk;
  */
 unsigned long mips_io_port_base = -1;
 
+int __board_early_init_f(void)
+{
+       /*
+        * Nothing to do in this dummy implementation
+        */
+       return 0;
+}
+int board_early_init_f(void) __attribute__((weak, 
alias("__board_early_init_f")));
+
 /*
  * The Malloc area is immediately below the monitor copy in DRAM
  */
@@ -168,6 +178,7 @@ static int init_baudrate (void)
 typedef int (init_fnc_t) (void);
 
 init_fnc_t *init_sequence[] = {
+       board_early_init_f,
        timer_init,
        env_init,               /* initialize environment */
 #ifdef CONFIG_INCA_IP
@@ -378,6 +389,15 @@ void board_init_r (gd_t *id, ulong dest_addr)
        mem_malloc_init();
        malloc_bin_reloc();
 
+#ifdef CONFIG_CMD_NAND
+       puts ("NAND:  ");
+       nand_init ();           /* go init the NAND */
+#endif
+
+#if defined(CONFIG_CMD_ONENAND)
+       onenand_init();
+#endif
+
        /* relocate environment function pointers etc. */
        env_relocate();
 
@@ -419,11 +439,6 @@ void board_init_r (gd_t *id, ulong dest_addr)
        }
 #endif
 
-#ifdef CONFIG_CMD_NAND
-       puts ("NAND:  ");
-       nand_init ();           /* go init the NAND */
-#endif
-
 #ifdef CONFIG_CMD_SPI
        puts ("SPI:   ");
        spi_init ();            /* go init the SPI */

_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to