diff options
author | Alexander Stein <alexander.stein@systec-electronic.com> | 2015-09-09 05:35:14 -0400 |
---|---|---|
committer | Shawn Guo <shawnguo@kernel.org> | 2015-09-22 21:03:15 -0400 |
commit | 8d449cb5e29a488cef44d81196f2819b92585513 (patch) | |
tree | 6628ca1b1e00a6ad07090d75b890df7f82c8cf96 | |
parent | 0753f56e411a5e216c9899c21e54bd11dde17313 (diff) |
clk: imx35: Do not call mxc_timer_init twice when booting with DT
mxc_timer_init must not be called from within mx35_clocks_init_dt. It will
eventually be called by imx31_timer_init_dt
(drivers/clocksource/timer-imx-gpt.c).
This arranges the initialization code similar to clk-imx27.c
Signed-off-by: Alexander Stein <alexander.stein@systec-electronic.com>
Signed-off-by: Shawn Guo <shawnguo@kernel.org>
-rw-r--r-- | drivers/clk/imx/clk-imx35.c | 49 |
1 files changed, 27 insertions, 22 deletions
diff --git a/drivers/clk/imx/clk-imx35.c b/drivers/clk/imx/clk-imx35.c index 8623cd4e49fd..76c463dcdb1c 100644 --- a/drivers/clk/imx/clk-imx35.c +++ b/drivers/clk/imx/clk-imx35.c | |||
@@ -84,7 +84,7 @@ enum mx35_clks { | |||
84 | 84 | ||
85 | static struct clk *clk[clk_max]; | 85 | static struct clk *clk[clk_max]; |
86 | 86 | ||
87 | int __init mx35_clocks_init(void) | 87 | static void __init _mx35_clocks_init(void) |
88 | { | 88 | { |
89 | void __iomem *base; | 89 | void __iomem *base; |
90 | u32 pdr0, consumer_sel, hsp_sel; | 90 | u32 pdr0, consumer_sel, hsp_sel; |
@@ -220,6 +220,30 @@ int __init mx35_clocks_init(void) | |||
220 | 220 | ||
221 | imx_check_clocks(clk, ARRAY_SIZE(clk)); | 221 | imx_check_clocks(clk, ARRAY_SIZE(clk)); |
222 | 222 | ||
223 | clk_prepare_enable(clk[spba_gate]); | ||
224 | clk_prepare_enable(clk[gpio1_gate]); | ||
225 | clk_prepare_enable(clk[gpio2_gate]); | ||
226 | clk_prepare_enable(clk[gpio3_gate]); | ||
227 | clk_prepare_enable(clk[iim_gate]); | ||
228 | clk_prepare_enable(clk[emi_gate]); | ||
229 | clk_prepare_enable(clk[max_gate]); | ||
230 | clk_prepare_enable(clk[iomuxc_gate]); | ||
231 | |||
232 | /* | ||
233 | * SCC is needed to boot via mmc after a watchdog reset. The clock code | ||
234 | * before conversion to common clk also enabled UART1 (which isn't | ||
235 | * handled here and not needed for mmc) and IIM (which is enabled | ||
236 | * unconditionally above). | ||
237 | */ | ||
238 | clk_prepare_enable(clk[scc_gate]); | ||
239 | |||
240 | imx_print_silicon_rev("i.MX35", mx35_revision()); | ||
241 | } | ||
242 | |||
243 | int __init mx35_clocks_init(void) | ||
244 | { | ||
245 | _mx35_clocks_init(); | ||
246 | |||
223 | clk_register_clkdev(clk[pata_gate], NULL, "pata_imx"); | 247 | clk_register_clkdev(clk[pata_gate], NULL, "pata_imx"); |
224 | clk_register_clkdev(clk[can1_gate], NULL, "flexcan.0"); | 248 | clk_register_clkdev(clk[can1_gate], NULL, "flexcan.0"); |
225 | clk_register_clkdev(clk[can2_gate], NULL, "flexcan.1"); | 249 | clk_register_clkdev(clk[can2_gate], NULL, "flexcan.1"); |
@@ -279,25 +303,6 @@ int __init mx35_clocks_init(void) | |||
279 | clk_register_clkdev(clk[csi_gate], NULL, "mx3-camera.0"); | 303 | clk_register_clkdev(clk[csi_gate], NULL, "mx3-camera.0"); |
280 | clk_register_clkdev(clk[admux_gate], "audmux", NULL); | 304 | clk_register_clkdev(clk[admux_gate], "audmux", NULL); |
281 | 305 | ||
282 | clk_prepare_enable(clk[spba_gate]); | ||
283 | clk_prepare_enable(clk[gpio1_gate]); | ||
284 | clk_prepare_enable(clk[gpio2_gate]); | ||
285 | clk_prepare_enable(clk[gpio3_gate]); | ||
286 | clk_prepare_enable(clk[iim_gate]); | ||
287 | clk_prepare_enable(clk[emi_gate]); | ||
288 | clk_prepare_enable(clk[max_gate]); | ||
289 | clk_prepare_enable(clk[iomuxc_gate]); | ||
290 | |||
291 | /* | ||
292 | * SCC is needed to boot via mmc after a watchdog reset. The clock code | ||
293 | * before conversion to common clk also enabled UART1 (which isn't | ||
294 | * handled here and not needed for mmc) and IIM (which is enabled | ||
295 | * unconditionally above). | ||
296 | */ | ||
297 | clk_prepare_enable(clk[scc_gate]); | ||
298 | |||
299 | imx_print_silicon_rev("i.MX35", mx35_revision()); | ||
300 | |||
301 | mxc_timer_init(MX35_GPT1_BASE_ADDR, MX35_INT_GPT, GPT_TYPE_IMX31); | 306 | mxc_timer_init(MX35_GPT1_BASE_ADDR, MX35_INT_GPT, GPT_TYPE_IMX31); |
302 | 307 | ||
303 | return 0; | 308 | return 0; |
@@ -305,10 +310,10 @@ int __init mx35_clocks_init(void) | |||
305 | 310 | ||
306 | static void __init mx35_clocks_init_dt(struct device_node *ccm_node) | 311 | static void __init mx35_clocks_init_dt(struct device_node *ccm_node) |
307 | { | 312 | { |
313 | _mx35_clocks_init(); | ||
314 | |||
308 | clk_data.clks = clk; | 315 | clk_data.clks = clk; |
309 | clk_data.clk_num = ARRAY_SIZE(clk); | 316 | clk_data.clk_num = ARRAY_SIZE(clk); |
310 | of_clk_add_provider(ccm_node, of_clk_src_onecell_get, &clk_data); | 317 | of_clk_add_provider(ccm_node, of_clk_src_onecell_get, &clk_data); |
311 | |||
312 | mx35_clocks_init(); | ||
313 | } | 318 | } |
314 | CLK_OF_DECLARE(imx35, "fsl,imx35-ccm", mx35_clocks_init_dt); | 319 | CLK_OF_DECLARE(imx35, "fsl,imx35-ccm", mx35_clocks_init_dt); |