]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - arch/arm/mach-imx/system.c
ARM: imx: move clk_prepare() out from mxc_restart()
[karo-tx-linux.git] / arch / arm / mach-imx / system.c
index 695e0d73bf85e12308f878bcbfd322280b67ba76..02cf449094f104033c27de938f03b5a30418a82d 100644 (file)
@@ -30,6 +30,7 @@
 #include "hardware.h"
 
 static void __iomem *wdog_base;
+static struct clk *wdog_clk;
 
 /*
  * Reset the system. It is called by machine_restart().
@@ -38,16 +39,13 @@ void mxc_restart(char mode, const char *cmd)
 {
        unsigned int wcr_enable;
 
-       if (cpu_is_mx1()) {
-               wcr_enable = (1 << 0);
-       } else {
-               struct clk *clk;
+       if (wdog_clk)
+               clk_enable(wdog_clk);
 
-               clk = clk_get_sys("imx2-wdt.0", NULL);
-               if (!IS_ERR(clk))
-                       clk_prepare_enable(clk);
+       if (cpu_is_mx1())
+               wcr_enable = (1 << 0);
+       else
                wcr_enable = (1 << 2);
-       }
 
        /* Assert SRS signal */
        __raw_writew(wcr_enable, wdog_base);
@@ -55,7 +53,7 @@ void mxc_restart(char mode, const char *cmd)
        /* wait for reset to assert... */
        mdelay(500);
 
-       printk(KERN_ERR "Watchdog reset failed to assert reset\n");
+       pr_err("%s: Watchdog reset failed to assert reset\n", __func__);
 
        /* delay to allow the serial port to show the message */
        mdelay(50);
@@ -64,7 +62,16 @@ void mxc_restart(char mode, const char *cmd)
        soft_restart(0);
 }
 
-void mxc_arch_reset_init(void __iomem *base)
+void __init mxc_arch_reset_init(void __iomem *base)
 {
        wdog_base = base;
+
+       wdog_clk = clk_get_sys("imx2-wdt.0", NULL);
+       if (IS_ERR(wdog_clk)) {
+               pr_warn("%s: failed to get wdog clock\n", __func__);
+               wdog_clk = NULL;
+               return;
+       }
+
+       clk_prepare(wdog_clk);
 }