aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/clk/mediatek/clk-mt8173.c26
1 files changed, 21 insertions, 5 deletions
diff --git a/drivers/clk/mediatek/clk-mt8173.c b/drivers/clk/mediatek/clk-mt8173.c
index 4b9e04cdf7e8..8b6523d15fb8 100644
--- a/drivers/clk/mediatek/clk-mt8173.c
+++ b/drivers/clk/mediatek/clk-mt8173.c
@@ -700,6 +700,22 @@ static const struct mtk_composite peri_clks[] __initconst = {
700 MUX(CLK_PERI_UART3_SEL, "uart3_ck_sel", uart_ck_sel_parents, 0x40c, 3, 1), 700 MUX(CLK_PERI_UART3_SEL, "uart3_ck_sel", uart_ck_sel_parents, 0x40c, 3, 1),
701}; 701};
702 702
703static struct clk_onecell_data *mt8173_top_clk_data __initdata;
704static struct clk_onecell_data *mt8173_pll_clk_data __initdata;
705
706static void __init mtk_clk_enable_critical(void)
707{
708 if (!mt8173_top_clk_data || !mt8173_pll_clk_data)
709 return;
710
711 clk_prepare_enable(mt8173_pll_clk_data->clks[CLK_APMIXED_ARMCA15PLL]);
712 clk_prepare_enable(mt8173_pll_clk_data->clks[CLK_APMIXED_ARMCA7PLL]);
713 clk_prepare_enable(mt8173_top_clk_data->clks[CLK_TOP_MEM_SEL]);
714 clk_prepare_enable(mt8173_top_clk_data->clks[CLK_TOP_DDRPHYCFG_SEL]);
715 clk_prepare_enable(mt8173_top_clk_data->clks[CLK_TOP_CCI400_SEL]);
716 clk_prepare_enable(mt8173_top_clk_data->clks[CLK_TOP_RTC_SEL]);
717}
718
703static void __init mtk_topckgen_init(struct device_node *node) 719static void __init mtk_topckgen_init(struct device_node *node)
704{ 720{
705 struct clk_onecell_data *clk_data; 721 struct clk_onecell_data *clk_data;
@@ -712,19 +728,19 @@ static void __init mtk_topckgen_init(struct device_node *node)
712 return; 728 return;
713 } 729 }
714 730
715 clk_data = mtk_alloc_clk_data(CLK_TOP_NR_CLK); 731 mt8173_top_clk_data = clk_data = mtk_alloc_clk_data(CLK_TOP_NR_CLK);
716 732
717 mtk_clk_register_factors(root_clk_alias, ARRAY_SIZE(root_clk_alias), clk_data); 733 mtk_clk_register_factors(root_clk_alias, ARRAY_SIZE(root_clk_alias), clk_data);
718 mtk_clk_register_factors(top_divs, ARRAY_SIZE(top_divs), clk_data); 734 mtk_clk_register_factors(top_divs, ARRAY_SIZE(top_divs), clk_data);
719 mtk_clk_register_composites(top_muxes, ARRAY_SIZE(top_muxes), base, 735 mtk_clk_register_composites(top_muxes, ARRAY_SIZE(top_muxes), base,
720 &mt8173_clk_lock, clk_data); 736 &mt8173_clk_lock, clk_data);
721 737
722 clk_prepare_enable(clk_data->clks[CLK_TOP_CCI400_SEL]);
723
724 r = of_clk_add_provider(node, of_clk_src_onecell_get, clk_data); 738 r = of_clk_add_provider(node, of_clk_src_onecell_get, clk_data);
725 if (r) 739 if (r)
726 pr_err("%s(): could not register clock provider: %d\n", 740 pr_err("%s(): could not register clock provider: %d\n",
727 __func__, r); 741 __func__, r);
742
743 mtk_clk_enable_critical();
728} 744}
729CLK_OF_DECLARE(mtk_topckgen, "mediatek,mt8173-topckgen", mtk_topckgen_init); 745CLK_OF_DECLARE(mtk_topckgen, "mediatek,mt8173-topckgen", mtk_topckgen_init);
730 746
@@ -818,13 +834,13 @@ static void __init mtk_apmixedsys_init(struct device_node *node)
818{ 834{
819 struct clk_onecell_data *clk_data; 835 struct clk_onecell_data *clk_data;
820 836
821 clk_data = mtk_alloc_clk_data(CLK_APMIXED_NR_CLK); 837 mt8173_pll_clk_data = clk_data = mtk_alloc_clk_data(CLK_APMIXED_NR_CLK);
822 if (!clk_data) 838 if (!clk_data)
823 return; 839 return;
824 840
825 mtk_clk_register_plls(node, plls, ARRAY_SIZE(plls), clk_data); 841 mtk_clk_register_plls(node, plls, ARRAY_SIZE(plls), clk_data);
826 842
827 clk_prepare_enable(clk_data->clks[CLK_APMIXED_ARMCA15PLL]); 843 mtk_clk_enable_critical();
828} 844}
829CLK_OF_DECLARE(mtk_apmixedsys, "mediatek,mt8173-apmixedsys", 845CLK_OF_DECLARE(mtk_apmixedsys, "mediatek,mt8173-apmixedsys",
830 mtk_apmixedsys_init); 846 mtk_apmixedsys_init);