diff options
author | Shawn Guo <shawn.guo@linaro.org> | 2013-05-09 21:13:44 -0400 |
---|---|---|
committer | Shawn Guo <shawn.guo@linaro.org> | 2013-06-17 03:45:10 -0400 |
commit | 18cb680f1a003a1a1ec0e6097d7b763516a27f04 (patch) | |
tree | f9ef6d5b1fe540a4bb070fcbd1a222c11458afb1 /arch/arm | |
parent | 24a83fe4b039ef3779efd6b1fc88ee020e8af52f (diff) |
ARM: imx: move clk_prepare() out from mxc_restart()
It's inappropriate to call clk_prepare() in mxc_restart(), because the
restart routine could be called in atomic context. Move clk_get() and
clk_prepare() into mxc_arch_reset_init() and only have the atomic part
clk_enable() be called in mxc_restart().
As a result, mxc_arch_reset_init() needs to be called after clk gets
initialized.
While there, it also changes printk(KERN_ERR ...) to pr_err() and adds
__init annotation for mxc_arch_reset_init().
Signed-off-by: Shawn Guo <shawn.guo@linaro.org>
Diffstat (limited to 'arch/arm')
-rw-r--r-- | arch/arm/mach-imx/imx25-dt.c | 3 | ||||
-rw-r--r-- | arch/arm/mach-imx/imx27-dt.c | 3 | ||||
-rw-r--r-- | arch/arm/mach-imx/imx31-dt.c | 3 | ||||
-rw-r--r-- | arch/arm/mach-imx/imx51-dt.c | 3 | ||||
-rw-r--r-- | arch/arm/mach-imx/mach-imx53.c | 3 | ||||
-rw-r--r-- | arch/arm/mach-imx/mm-imx1.c | 2 | ||||
-rw-r--r-- | arch/arm/mach-imx/mm-imx21.c | 2 | ||||
-rw-r--r-- | arch/arm/mach-imx/mm-imx25.c | 2 | ||||
-rw-r--r-- | arch/arm/mach-imx/mm-imx27.c | 2 | ||||
-rw-r--r-- | arch/arm/mach-imx/mm-imx3.c | 4 | ||||
-rw-r--r-- | arch/arm/mach-imx/mm-imx5.c | 3 | ||||
-rw-r--r-- | arch/arm/mach-imx/system.c | 27 |
12 files changed, 39 insertions, 18 deletions
diff --git a/arch/arm/mach-imx/imx25-dt.c b/arch/arm/mach-imx/imx25-dt.c index 82348391582a..ec339917fbf4 100644 --- a/arch/arm/mach-imx/imx25-dt.c +++ b/arch/arm/mach-imx/imx25-dt.c | |||
@@ -15,10 +15,13 @@ | |||
15 | #include <asm/mach/arch.h> | 15 | #include <asm/mach/arch.h> |
16 | #include <asm/mach/time.h> | 16 | #include <asm/mach/time.h> |
17 | #include "common.h" | 17 | #include "common.h" |
18 | #include "hardware.h" | ||
18 | #include "mx25.h" | 19 | #include "mx25.h" |
19 | 20 | ||
20 | static void __init imx25_dt_init(void) | 21 | static void __init imx25_dt_init(void) |
21 | { | 22 | { |
23 | mxc_arch_reset_init(MX25_IO_ADDRESS(MX25_WDOG_BASE_ADDR)); | ||
24 | |||
22 | of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL); | 25 | of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL); |
23 | } | 26 | } |
24 | 27 | ||
diff --git a/arch/arm/mach-imx/imx27-dt.c b/arch/arm/mach-imx/imx27-dt.c index 4aaead0a77ff..93aef1aa0a8e 100644 --- a/arch/arm/mach-imx/imx27-dt.c +++ b/arch/arm/mach-imx/imx27-dt.c | |||
@@ -16,12 +16,15 @@ | |||
16 | #include <asm/mach/time.h> | 16 | #include <asm/mach/time.h> |
17 | 17 | ||
18 | #include "common.h" | 18 | #include "common.h" |
19 | #include "hardware.h" | ||
19 | #include "mx27.h" | 20 | #include "mx27.h" |
20 | 21 | ||
21 | static void __init imx27_dt_init(void) | 22 | static void __init imx27_dt_init(void) |
22 | { | 23 | { |
23 | struct platform_device_info devinfo = { .name = "cpufreq-cpu0", }; | 24 | struct platform_device_info devinfo = { .name = "cpufreq-cpu0", }; |
24 | 25 | ||
26 | mxc_arch_reset_init(MX27_IO_ADDRESS(MX27_WDOG_BASE_ADDR)); | ||
27 | |||
25 | of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL); | 28 | of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL); |
26 | 29 | ||
27 | platform_device_register_full(&devinfo); | 30 | platform_device_register_full(&devinfo); |
diff --git a/arch/arm/mach-imx/imx31-dt.c b/arch/arm/mach-imx/imx31-dt.c index 67de611e29ab..d8b3b22aeba7 100644 --- a/arch/arm/mach-imx/imx31-dt.c +++ b/arch/arm/mach-imx/imx31-dt.c | |||
@@ -16,10 +16,13 @@ | |||
16 | #include <asm/mach/time.h> | 16 | #include <asm/mach/time.h> |
17 | 17 | ||
18 | #include "common.h" | 18 | #include "common.h" |
19 | #include "hardware.h" | ||
19 | #include "mx31.h" | 20 | #include "mx31.h" |
20 | 21 | ||
21 | static void __init imx31_dt_init(void) | 22 | static void __init imx31_dt_init(void) |
22 | { | 23 | { |
24 | mxc_arch_reset_init(MX31_IO_ADDRESS(MX31_WDOG_BASE_ADDR)); | ||
25 | |||
23 | of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL); | 26 | of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL); |
24 | } | 27 | } |
25 | 28 | ||
diff --git a/arch/arm/mach-imx/imx51-dt.c b/arch/arm/mach-imx/imx51-dt.c index ab24cc322111..55f47a0f98c0 100644 --- a/arch/arm/mach-imx/imx51-dt.c +++ b/arch/arm/mach-imx/imx51-dt.c | |||
@@ -17,12 +17,15 @@ | |||
17 | #include <asm/mach/time.h> | 17 | #include <asm/mach/time.h> |
18 | 18 | ||
19 | #include "common.h" | 19 | #include "common.h" |
20 | #include "hardware.h" | ||
20 | #include "mx51.h" | 21 | #include "mx51.h" |
21 | 22 | ||
22 | static void __init imx51_dt_init(void) | 23 | static void __init imx51_dt_init(void) |
23 | { | 24 | { |
24 | struct platform_device_info devinfo = { .name = "cpufreq-cpu0", }; | 25 | struct platform_device_info devinfo = { .name = "cpufreq-cpu0", }; |
25 | 26 | ||
27 | mxc_arch_reset_init(MX51_IO_ADDRESS(MX51_WDOG1_BASE_ADDR)); | ||
28 | |||
26 | of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL); | 29 | of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL); |
27 | platform_device_register_full(&devinfo); | 30 | platform_device_register_full(&devinfo); |
28 | } | 31 | } |
diff --git a/arch/arm/mach-imx/mach-imx53.c b/arch/arm/mach-imx/mach-imx53.c index f579c616feed..7a5656128b60 100644 --- a/arch/arm/mach-imx/mach-imx53.c +++ b/arch/arm/mach-imx/mach-imx53.c | |||
@@ -21,6 +21,7 @@ | |||
21 | #include <asm/mach/time.h> | 21 | #include <asm/mach/time.h> |
22 | 22 | ||
23 | #include "common.h" | 23 | #include "common.h" |
24 | #include "hardware.h" | ||
24 | #include "mx53.h" | 25 | #include "mx53.h" |
25 | 26 | ||
26 | static void __init imx53_qsb_init(void) | 27 | static void __init imx53_qsb_init(void) |
@@ -38,6 +39,8 @@ static void __init imx53_qsb_init(void) | |||
38 | 39 | ||
39 | static void __init imx53_dt_init(void) | 40 | static void __init imx53_dt_init(void) |
40 | { | 41 | { |
42 | mxc_arch_reset_init(MX53_IO_ADDRESS(MX53_WDOG1_BASE_ADDR)); | ||
43 | |||
41 | if (of_machine_is_compatible("fsl,imx53-qsb")) | 44 | if (of_machine_is_compatible("fsl,imx53-qsb")) |
42 | imx53_qsb_init(); | 45 | imx53_qsb_init(); |
43 | 46 | ||
diff --git a/arch/arm/mach-imx/mm-imx1.c b/arch/arm/mach-imx/mm-imx1.c index 3c609c52d3eb..e065fedb3ad4 100644 --- a/arch/arm/mach-imx/mm-imx1.c +++ b/arch/arm/mach-imx/mm-imx1.c | |||
@@ -39,7 +39,6 @@ void __init mx1_map_io(void) | |||
39 | void __init imx1_init_early(void) | 39 | void __init imx1_init_early(void) |
40 | { | 40 | { |
41 | mxc_set_cpu_type(MXC_CPU_MX1); | 41 | mxc_set_cpu_type(MXC_CPU_MX1); |
42 | mxc_arch_reset_init(MX1_IO_ADDRESS(MX1_WDT_BASE_ADDR)); | ||
43 | imx_iomuxv1_init(MX1_IO_ADDRESS(MX1_GPIO_BASE_ADDR), | 42 | imx_iomuxv1_init(MX1_IO_ADDRESS(MX1_GPIO_BASE_ADDR), |
44 | MX1_NUM_GPIO_PORT); | 43 | MX1_NUM_GPIO_PORT); |
45 | } | 44 | } |
@@ -51,6 +50,7 @@ void __init mx1_init_irq(void) | |||
51 | 50 | ||
52 | void __init imx1_soc_init(void) | 51 | void __init imx1_soc_init(void) |
53 | { | 52 | { |
53 | mxc_arch_reset_init(MX1_IO_ADDRESS(MX1_WDT_BASE_ADDR)); | ||
54 | mxc_device_init(); | 54 | mxc_device_init(); |
55 | 55 | ||
56 | mxc_register_gpio("imx1-gpio", 0, MX1_GPIO1_BASE_ADDR, SZ_256, | 56 | mxc_register_gpio("imx1-gpio", 0, MX1_GPIO1_BASE_ADDR, SZ_256, |
diff --git a/arch/arm/mach-imx/mm-imx21.c b/arch/arm/mach-imx/mm-imx21.c index d8ccd3a8ec53..2e91ab2ca378 100644 --- a/arch/arm/mach-imx/mm-imx21.c +++ b/arch/arm/mach-imx/mm-imx21.c | |||
@@ -66,7 +66,6 @@ void __init mx21_map_io(void) | |||
66 | void __init imx21_init_early(void) | 66 | void __init imx21_init_early(void) |
67 | { | 67 | { |
68 | mxc_set_cpu_type(MXC_CPU_MX21); | 68 | mxc_set_cpu_type(MXC_CPU_MX21); |
69 | mxc_arch_reset_init(MX21_IO_ADDRESS(MX21_WDOG_BASE_ADDR)); | ||
70 | imx_iomuxv1_init(MX21_IO_ADDRESS(MX21_GPIO_BASE_ADDR), | 69 | imx_iomuxv1_init(MX21_IO_ADDRESS(MX21_GPIO_BASE_ADDR), |
71 | MX21_NUM_GPIO_PORT); | 70 | MX21_NUM_GPIO_PORT); |
72 | } | 71 | } |
@@ -82,6 +81,7 @@ static const struct resource imx21_audmux_res[] __initconst = { | |||
82 | 81 | ||
83 | void __init imx21_soc_init(void) | 82 | void __init imx21_soc_init(void) |
84 | { | 83 | { |
84 | mxc_arch_reset_init(MX21_IO_ADDRESS(MX21_WDOG_BASE_ADDR)); | ||
85 | mxc_device_init(); | 85 | mxc_device_init(); |
86 | 86 | ||
87 | mxc_register_gpio("imx21-gpio", 0, MX21_GPIO1_BASE_ADDR, SZ_256, MX21_INT_GPIO, 0); | 87 | mxc_register_gpio("imx21-gpio", 0, MX21_GPIO1_BASE_ADDR, SZ_256, MX21_INT_GPIO, 0); |
diff --git a/arch/arm/mach-imx/mm-imx25.c b/arch/arm/mach-imx/mm-imx25.c index 9357707bb7af..e065c117f5a6 100644 --- a/arch/arm/mach-imx/mm-imx25.c +++ b/arch/arm/mach-imx/mm-imx25.c | |||
@@ -54,7 +54,6 @@ void __init imx25_init_early(void) | |||
54 | { | 54 | { |
55 | mxc_set_cpu_type(MXC_CPU_MX25); | 55 | mxc_set_cpu_type(MXC_CPU_MX25); |
56 | mxc_iomux_v3_init(MX25_IO_ADDRESS(MX25_IOMUXC_BASE_ADDR)); | 56 | mxc_iomux_v3_init(MX25_IO_ADDRESS(MX25_IOMUXC_BASE_ADDR)); |
57 | mxc_arch_reset_init(MX25_IO_ADDRESS(MX25_WDOG_BASE_ADDR)); | ||
58 | } | 57 | } |
59 | 58 | ||
60 | void __init mx25_init_irq(void) | 59 | void __init mx25_init_irq(void) |
@@ -89,6 +88,7 @@ static const struct resource imx25_audmux_res[] __initconst = { | |||
89 | 88 | ||
90 | void __init imx25_soc_init(void) | 89 | void __init imx25_soc_init(void) |
91 | { | 90 | { |
91 | mxc_arch_reset_init(MX25_IO_ADDRESS(MX25_WDOG_BASE_ADDR)); | ||
92 | mxc_device_init(); | 92 | mxc_device_init(); |
93 | 93 | ||
94 | /* i.mx25 has the i.mx35 type gpio */ | 94 | /* i.mx25 has the i.mx35 type gpio */ |
diff --git a/arch/arm/mach-imx/mm-imx27.c b/arch/arm/mach-imx/mm-imx27.c index 4f1be65a7b5f..7d82a5a5b16b 100644 --- a/arch/arm/mach-imx/mm-imx27.c +++ b/arch/arm/mach-imx/mm-imx27.c | |||
@@ -66,7 +66,6 @@ void __init mx27_map_io(void) | |||
66 | void __init imx27_init_early(void) | 66 | void __init imx27_init_early(void) |
67 | { | 67 | { |
68 | mxc_set_cpu_type(MXC_CPU_MX27); | 68 | mxc_set_cpu_type(MXC_CPU_MX27); |
69 | mxc_arch_reset_init(MX27_IO_ADDRESS(MX27_WDOG_BASE_ADDR)); | ||
70 | imx_iomuxv1_init(MX27_IO_ADDRESS(MX27_GPIO_BASE_ADDR), | 69 | imx_iomuxv1_init(MX27_IO_ADDRESS(MX27_GPIO_BASE_ADDR), |
71 | MX27_NUM_GPIO_PORT); | 70 | MX27_NUM_GPIO_PORT); |
72 | } | 71 | } |
@@ -82,6 +81,7 @@ static const struct resource imx27_audmux_res[] __initconst = { | |||
82 | 81 | ||
83 | void __init imx27_soc_init(void) | 82 | void __init imx27_soc_init(void) |
84 | { | 83 | { |
84 | mxc_arch_reset_init(MX27_IO_ADDRESS(MX27_WDOG_BASE_ADDR)); | ||
85 | mxc_device_init(); | 85 | mxc_device_init(); |
86 | 86 | ||
87 | /* i.mx27 has the i.mx21 type gpio */ | 87 | /* i.mx27 has the i.mx21 type gpio */ |
diff --git a/arch/arm/mach-imx/mm-imx3.c b/arch/arm/mach-imx/mm-imx3.c index e0e69a682174..8f0f60697f55 100644 --- a/arch/arm/mach-imx/mm-imx3.c +++ b/arch/arm/mach-imx/mm-imx3.c | |||
@@ -138,7 +138,6 @@ void __init mx31_map_io(void) | |||
138 | void __init imx31_init_early(void) | 138 | void __init imx31_init_early(void) |
139 | { | 139 | { |
140 | mxc_set_cpu_type(MXC_CPU_MX31); | 140 | mxc_set_cpu_type(MXC_CPU_MX31); |
141 | mxc_arch_reset_init(MX31_IO_ADDRESS(MX31_WDOG_BASE_ADDR)); | ||
142 | arch_ioremap_caller = imx3_ioremap_caller; | 141 | arch_ioremap_caller = imx3_ioremap_caller; |
143 | arm_pm_idle = imx3_idle; | 142 | arm_pm_idle = imx3_idle; |
144 | mx3_ccm_base = MX31_IO_ADDRESS(MX31_CCM_BASE_ADDR); | 143 | mx3_ccm_base = MX31_IO_ADDRESS(MX31_CCM_BASE_ADDR); |
@@ -174,6 +173,7 @@ void __init imx31_soc_init(void) | |||
174 | 173 | ||
175 | imx3_init_l2x0(); | 174 | imx3_init_l2x0(); |
176 | 175 | ||
176 | mxc_arch_reset_init(MX31_IO_ADDRESS(MX31_WDOG_BASE_ADDR)); | ||
177 | mxc_device_init(); | 177 | mxc_device_init(); |
178 | 178 | ||
179 | mxc_register_gpio("imx31-gpio", 0, MX31_GPIO1_BASE_ADDR, SZ_16K, MX31_INT_GPIO1, 0); | 179 | mxc_register_gpio("imx31-gpio", 0, MX31_GPIO1_BASE_ADDR, SZ_16K, MX31_INT_GPIO1, 0); |
@@ -216,7 +216,6 @@ void __init imx35_init_early(void) | |||
216 | { | 216 | { |
217 | mxc_set_cpu_type(MXC_CPU_MX35); | 217 | mxc_set_cpu_type(MXC_CPU_MX35); |
218 | mxc_iomux_v3_init(MX35_IO_ADDRESS(MX35_IOMUXC_BASE_ADDR)); | 218 | mxc_iomux_v3_init(MX35_IO_ADDRESS(MX35_IOMUXC_BASE_ADDR)); |
219 | mxc_arch_reset_init(MX35_IO_ADDRESS(MX35_WDOG_BASE_ADDR)); | ||
220 | arm_pm_idle = imx3_idle; | 219 | arm_pm_idle = imx3_idle; |
221 | arch_ioremap_caller = imx3_ioremap_caller; | 220 | arch_ioremap_caller = imx3_ioremap_caller; |
222 | mx3_ccm_base = MX35_IO_ADDRESS(MX35_CCM_BASE_ADDR); | 221 | mx3_ccm_base = MX35_IO_ADDRESS(MX35_CCM_BASE_ADDR); |
@@ -272,6 +271,7 @@ void __init imx35_soc_init(void) | |||
272 | 271 | ||
273 | imx3_init_l2x0(); | 272 | imx3_init_l2x0(); |
274 | 273 | ||
274 | mxc_arch_reset_init(MX35_IO_ADDRESS(MX35_WDOG_BASE_ADDR)); | ||
275 | mxc_device_init(); | 275 | mxc_device_init(); |
276 | 276 | ||
277 | mxc_register_gpio("imx35-gpio", 0, MX35_GPIO1_BASE_ADDR, SZ_16K, MX35_INT_GPIO1, 0); | 277 | mxc_register_gpio("imx35-gpio", 0, MX35_GPIO1_BASE_ADDR, SZ_16K, MX35_INT_GPIO1, 0); |
diff --git a/arch/arm/mach-imx/mm-imx5.c b/arch/arm/mach-imx/mm-imx5.c index b7c4e70e5081..cf193d87274a 100644 --- a/arch/arm/mach-imx/mm-imx5.c +++ b/arch/arm/mach-imx/mm-imx5.c | |||
@@ -83,7 +83,6 @@ void __init imx51_init_early(void) | |||
83 | imx51_ipu_mipi_setup(); | 83 | imx51_ipu_mipi_setup(); |
84 | mxc_set_cpu_type(MXC_CPU_MX51); | 84 | mxc_set_cpu_type(MXC_CPU_MX51); |
85 | mxc_iomux_v3_init(MX51_IO_ADDRESS(MX51_IOMUXC_BASE_ADDR)); | 85 | mxc_iomux_v3_init(MX51_IO_ADDRESS(MX51_IOMUXC_BASE_ADDR)); |
86 | mxc_arch_reset_init(MX51_IO_ADDRESS(MX51_WDOG1_BASE_ADDR)); | ||
87 | imx_src_init(); | 86 | imx_src_init(); |
88 | } | 87 | } |
89 | 88 | ||
@@ -91,7 +90,6 @@ void __init imx53_init_early(void) | |||
91 | { | 90 | { |
92 | mxc_set_cpu_type(MXC_CPU_MX53); | 91 | mxc_set_cpu_type(MXC_CPU_MX53); |
93 | mxc_iomux_v3_init(MX53_IO_ADDRESS(MX53_IOMUXC_BASE_ADDR)); | 92 | mxc_iomux_v3_init(MX53_IO_ADDRESS(MX53_IOMUXC_BASE_ADDR)); |
94 | mxc_arch_reset_init(MX53_IO_ADDRESS(MX53_WDOG1_BASE_ADDR)); | ||
95 | imx_src_init(); | 93 | imx_src_init(); |
96 | } | 94 | } |
97 | 95 | ||
@@ -129,6 +127,7 @@ static const struct resource imx51_audmux_res[] __initconst = { | |||
129 | 127 | ||
130 | void __init imx51_soc_init(void) | 128 | void __init imx51_soc_init(void) |
131 | { | 129 | { |
130 | mxc_arch_reset_init(MX51_IO_ADDRESS(MX51_WDOG1_BASE_ADDR)); | ||
132 | mxc_device_init(); | 131 | mxc_device_init(); |
133 | 132 | ||
134 | /* i.mx51 has the i.mx35 type gpio */ | 133 | /* i.mx51 has the i.mx35 type gpio */ |
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 | } |