arm: add workaround code
authorMinkyu Kang <mk7.kang@samsung.com>
Mon, 4 Oct 2010 11:04:41 +0000 (20:04 +0900)
committerMinkyu Kang <mk7.kang@samsung.com>
Mon, 4 Oct 2010 11:04:41 +0000 (20:04 +0900)
1. relocation the onenand sub command table
2. call arch_cpu_init after relocation (because of function pointer)

Signed-off-by: Minkyu Kang <mk7.kang@samsung.com>
arch/arm/lib/board.c
common/cmd_onenand.c

index 5f2dfd0..4d836c9 100644 (file)
@@ -695,6 +695,9 @@ void board_init_r (gd_t *id, ulong dest_addr)
 #if defined(CONFIG_CMD_I2C)
        extern void i2c_reloc(void);
 #endif
+#if defined(CONFIG_CMD_ONENAND)
+       extern void onenand_reloc(void);
+#endif
 #endif
 
        gd = id;
@@ -704,6 +707,10 @@ void board_init_r (gd_t *id, ulong dest_addr)
 
        monitor_flash_len = _bss_start - _TEXT_BASE;
        debug ("monitor flash len: %08lX\n", monitor_flash_len);
+
+       /* Workaround */
+       arch_cpu_init();
+
        board_init();   /* Setup chipselects */
 
 #ifdef CONFIG_SERIAL_MULTI
@@ -724,6 +731,9 @@ void board_init_r (gd_t *id, ulong dest_addr)
 #if defined(CONFIG_CMD_I2C)
        i2c_reloc();
 #endif
+#if defined(CONFIG_CMD_ONENAND)
+       onenand_reloc();
+#endif
 #endif /* !defined(CONFIG_RELOC_FIXUP_WORKS) */
 
 #ifdef CONFIG_LOGBUFFER
index e6dc0bd..8ee4d98 100644 (file)
@@ -570,6 +570,12 @@ static cmd_tbl_t cmd_onenand_sub[] = {
        U_BOOT_CMD_MKENT(lock, 3, 0, do_onenand_lock, "", ""),
 };
 
+#ifndef CONFIG_RELOC_FIXUP_WORKS
+void onenand_reloc(void) {
+       fixup_cmdtable(cmd_onenand_sub, ARRAY_SIZE(cmd_onenand_sub));
+}
+#endif
+
 int do_onenand(cmd_tbl_t * cmdtp, int flag, int argc, char * const argv[])
 {
        cmd_tbl_t *c;