diff options
Diffstat (limited to 'arch/arm/mach-imx/system.c')
-rw-r--r-- | arch/arm/mach-imx/system.c | 27 |
1 files changed, 17 insertions, 10 deletions
diff --git a/arch/arm/mach-imx/system.c b/arch/arm/mach-imx/system.c index 695e0d73bf85..02cf449094f1 100644 --- a/arch/arm/mach-imx/system.c +++ b/arch/arm/mach-imx/system.c | |||
@@ -30,6 +30,7 @@ | |||
30 | #include "hardware.h" | 30 | #include "hardware.h" |
31 | 31 | ||
32 | static void __iomem *wdog_base; | 32 | static void __iomem *wdog_base; |
33 | static struct clk *wdog_clk; | ||
33 | 34 | ||
34 | /* | 35 | /* |
35 | * Reset the system. It is called by machine_restart(). | 36 | * Reset the system. It is called by machine_restart(). |
@@ -38,16 +39,13 @@ void mxc_restart(char mode, const char *cmd) | |||
38 | { | 39 | { |
39 | unsigned int wcr_enable; | 40 | unsigned int wcr_enable; |
40 | 41 | ||
41 | if (cpu_is_mx1()) { | 42 | if (wdog_clk) |
42 | wcr_enable = (1 << 0); | 43 | clk_enable(wdog_clk); |
43 | } else { | ||
44 | struct clk *clk; | ||
45 | 44 | ||
46 | clk = clk_get_sys("imx2-wdt.0", NULL); | 45 | if (cpu_is_mx1()) |
47 | if (!IS_ERR(clk)) | 46 | wcr_enable = (1 << 0); |
48 | clk_prepare_enable(clk); | 47 | else |
49 | wcr_enable = (1 << 2); | 48 | wcr_enable = (1 << 2); |
50 | } | ||
51 | 49 | ||
52 | /* Assert SRS signal */ | 50 | /* Assert SRS signal */ |
53 | __raw_writew(wcr_enable, wdog_base); | 51 | __raw_writew(wcr_enable, wdog_base); |
@@ -55,7 +53,7 @@ void mxc_restart(char mode, const char *cmd) | |||
55 | /* wait for reset to assert... */ | 53 | /* wait for reset to assert... */ |
56 | mdelay(500); | 54 | mdelay(500); |
57 | 55 | ||
58 | printk(KERN_ERR "Watchdog reset failed to assert reset\n"); | 56 | pr_err("%s: Watchdog reset failed to assert reset\n", __func__); |
59 | 57 | ||
60 | /* delay to allow the serial port to show the message */ | 58 | /* delay to allow the serial port to show the message */ |
61 | mdelay(50); | 59 | mdelay(50); |
@@ -64,7 +62,16 @@ void mxc_restart(char mode, const char *cmd) | |||
64 | soft_restart(0); | 62 | soft_restart(0); |
65 | } | 63 | } |
66 | 64 | ||
67 | void mxc_arch_reset_init(void __iomem *base) | 65 | void __init mxc_arch_reset_init(void __iomem *base) |
68 | { | 66 | { |
69 | wdog_base = base; | 67 | wdog_base = base; |
68 | |||
69 | wdog_clk = clk_get_sys("imx2-wdt.0", NULL); | ||
70 | if (IS_ERR(wdog_clk)) { | ||
71 | pr_warn("%s: failed to get wdog clock\n", __func__); | ||
72 | wdog_clk = NULL; | ||
73 | return; | ||
74 | } | ||
75 | |||
76 | clk_prepare(wdog_clk); | ||
70 | } | 77 | } |