aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDong Aisheng <aisheng.dong@nxp.com>2016-06-30 05:31:18 -0400
committerStephen Boyd <sboyd@codeaurora.org>2016-07-01 20:43:21 -0400
commite8e628fb3f47ec7a45f9a026561e88ec8884776c (patch)
tree1cf5dbc27d2d788992400a839d812ee69425662d
parentcbeac74a5883e4d3caa1e3ad2efdd39a9c52ee73 (diff)
clk: imx7d: only enable minimum required clocks
Formerly clk core does not support imx7d clock type well that all its clock operations requires the parent clock on. Therefore we enabled all clocks by default in clock driver initialization for other module clocks operate well. After patch 'clk: imx7d: using api with flag CLK_OPS_PARENT_ENABLE', clk core can handle such clock type well, so we don't have to enable them all by default anymore. Instead, we only enable a minimum required set of clocks. Cc: Michael Turquette <mturquette@baylibre.com> Cc: Stephen Boyd <sboyd@codeaurora.org> Cc: Shawn Guo <shawnguo@kernel.org> Signed-off-by: Dong Aisheng <aisheng.dong@nxp.com> Signed-off-by: Stephen Boyd <sboyd@codeaurora.org>
-rw-r--r--drivers/clk/imx/clk-imx7d.c18
1 files changed, 10 insertions, 8 deletions
diff --git a/drivers/clk/imx/clk-imx7d.c b/drivers/clk/imx/clk-imx7d.c
index 62e25c37c6d6..79293edeb380 100644
--- a/drivers/clk/imx/clk-imx7d.c
+++ b/drivers/clk/imx/clk-imx7d.c
@@ -361,6 +361,14 @@ static const char *pll_enet_bypass_sel[] = { "pll_enet_main", "pll_enet_main_src
361static const char *pll_audio_bypass_sel[] = { "pll_audio_main", "pll_audio_main_src", }; 361static const char *pll_audio_bypass_sel[] = { "pll_audio_main", "pll_audio_main_src", };
362static const char *pll_video_bypass_sel[] = { "pll_video_main", "pll_video_main_src", }; 362static const char *pll_video_bypass_sel[] = { "pll_video_main", "pll_video_main_src", };
363 363
364static int const clks_init_on[] __initconst = {
365 IMX7D_ARM_A7_ROOT_CLK, IMX7D_MAIN_AXI_ROOT_CLK,
366 IMX7D_PLL_SYS_MAIN_480M_CLK, IMX7D_NAND_USDHC_BUS_ROOT_CLK,
367 IMX7D_DRAM_PHYM_ROOT_CLK, IMX7D_DRAM_ROOT_CLK,
368 IMX7D_DRAM_PHYM_ALT_ROOT_CLK, IMX7D_DRAM_ALT_ROOT_CLK,
369 IMX7D_AHB_CHANNEL_ROOT_CLK,
370};
371
364static struct clk_onecell_data clk_data; 372static struct clk_onecell_data clk_data;
365 373
366static struct clk ** const uart_clks[] __initconst = { 374static struct clk ** const uart_clks[] __initconst = {
@@ -846,14 +854,8 @@ static void __init imx7d_clocks_init(struct device_node *ccm_node)
846 clk_data.clk_num = ARRAY_SIZE(clks); 854 clk_data.clk_num = ARRAY_SIZE(clks);
847 of_clk_add_provider(np, of_clk_src_onecell_get, &clk_data); 855 of_clk_add_provider(np, of_clk_src_onecell_get, &clk_data);
848 856
849 /* TO BE FIXED LATER 857 for (i = 0; i < ARRAY_SIZE(clks_init_on); i++)
850 * Enable all clock to bring up imx7, otherwise system will be halt and block 858 clk_prepare_enable(clks[clks_init_on[i]]);
851 * the other part upstream Because imx7d clock design changed, clock framework
852 * need do a little modify.
853 * Dong Aisheng is working on this. After that, this part need be changed.
854 */
855 for (i = 0; i < IMX7D_CLK_END; i++)
856 clk_prepare_enable(clks[i]);
857 859
858 /* use old gpt clk setting, gpt1 root clk must be twice as gpt counter freq */ 860 /* use old gpt clk setting, gpt1 root clk must be twice as gpt counter freq */
859 clk_set_parent(clks[IMX7D_GPT1_ROOT_SRC], clks[IMX7D_OSC_24M_CLK]); 861 clk_set_parent(clks[IMX7D_GPT1_ROOT_SRC], clks[IMX7D_OSC_24M_CLK]);