Merge to Fedora kernel-2.6.18-1.2224_FC5 patched with stable patch-2.6.18.1-vs2.0...
[linux-2.6.git] / arch / mips / au1000 / common / reset.c
index 5bbc6cf..de5447e 100644 (file)
@@ -27,7 +27,6 @@
  *  with this program; if not, write  to the Free Software Foundation, Inc.,
  *  675 Mass Ave, Cambridge, MA 02139, USA.
  */
-#include <linux/config.h>
 #include <linux/sched.h>
 #include <linux/mm.h>
 #include <asm/io.h>
@@ -43,6 +42,7 @@ extern void (*flush_cache_all)(void);
 void au1000_restart(char *command)
 {
        /* Set all integrated peripherals to disabled states */
+       extern void board_reset (void);
        u32 prid = read_c0_prid();
 
        printk(KERN_NOTICE "\n** Resetting Integrated Peripherals\n");
@@ -150,38 +150,33 @@ void au1000_restart(char *command)
        }
 
        set_c0_status(ST0_BEV | ST0_ERL);
-       set_c0_config(CONF_CM_UNCACHED);
+       change_c0_config(CONF_CM_CMASK, CONF_CM_UNCACHED);
        flush_cache_all();
        write_c0_wired(0);
 
-#if defined(CONFIG_MIPS_PB1500) || defined(CONFIG_MIPS_PB1100) || defined(CONFIG_MIPS_DB1000) || defined(CONFIG_MIPS_DB1100) || defined(CONFIG_MIPS_DB1500)
-       /* Do a HW reset if the board can do it */
-
-       au_writel(0x00000000, 0xAE00001C);
-#endif
-
-#if defined(CONFIG_MIPS_PB1550)
-        /* reset entire system */
-       au_writew(au_readw(0xAF00001C) & ~(1<<15), 0xAF00001C);
-       au_sync();
-#endif
+       /* Give board a chance to do a hardware reset */
+       board_reset();
 
+       /* Jump to the beggining in case board_reset() is empty */
        __asm__ __volatile__("jr\t%0"::"r"(0xbfc00000));
 }
 
 void au1000_halt(void)
 {
-#if defined(CONFIG_MIPS_PB1550)
+#if defined(CONFIG_MIPS_PB1550) || defined(CONFIG_MIPS_DB1550)
        /* power off system */
-       printk("\n** Powering off Pb1550\n");
+       printk("\n** Powering off...\n");
        au_writew(au_readw(0xAF00001C) | (3<<14), 0xAF00001C);
        au_sync();
        while(1); /* should not get here */
-#endif
+#else
        printk(KERN_NOTICE "\n** You can safely turn off the power\n");
 #ifdef CONFIG_MIPS_MIRAGE
        au_writel((1 << 26) | (1 << 10), GPIO2_OUTPUT);
 #endif
+#ifdef CONFIG_MIPS_DB1200
+       au_writew(au_readw(0xB980001C) | (1<<14), 0xB980001C);
+#endif
 #ifdef CONFIG_PM
        au_sleep();
 
@@ -194,6 +189,7 @@ void au1000_halt(void)
                        "wait\n\t"
                        ".set\tmips0");
 #endif
+#endif /* defined(CONFIG_MIPS_PB1550) || defined(CONFIG_MIPS_DB1550) */
 }
 
 void au1000_power_off(void)