Merge master.kernel.org:/pub/scm/linux/kernel/git/wim/linux-2.6-watchdog
[pandora-kernel.git] / arch / powerpc / platforms / 83xx / misc.c
index f0c6df6..f01806c 100644 (file)
 
 #include "mpc83xx.h"
 
+static __be32 __iomem *restart_reg_base;
+
+static int __init mpc83xx_restart_init(void)
+{
+       /* map reset restart_reg_baseister space */
+       restart_reg_base = ioremap(get_immrbase() + 0x900, 0xff);
+
+       return 0;
+}
+
+arch_initcall(mpc83xx_restart_init);
+
 void mpc83xx_restart(char *cmd)
 {
 #define RST_OFFSET     0x00000900
 #define RST_PROT_REG   0x00000018
 #define RST_CTRL_REG   0x0000001c
-       __be32 __iomem *reg;
-
-       /* map reset register space */
-       reg = ioremap(get_immrbase() + 0x900, 0xff);
 
        local_irq_disable();
 
-       /* enable software reset "RSTE" */
-       out_be32(reg + (RST_PROT_REG >> 2), 0x52535445);
+       if (restart_reg_base) {
+               /* enable software reset "RSTE" */
+               out_be32(restart_reg_base + (RST_PROT_REG >> 2), 0x52535445);
+
+               /* set software hard reset */
+               out_be32(restart_reg_base + (RST_CTRL_REG >> 2), 0x2);
+       } else {
+               printk (KERN_EMERG "Error: Restart registers not mapped, spinning!\n");
+       }
 
-       /* set software hard reset */
-       out_be32(reg + (RST_CTRL_REG >> 2), 0x2);
        for (;;) ;
 }