aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDmitry Osipenko <digetx@gmail.com>2018-01-10 08:59:42 -0500
committerThierry Reding <treding@nvidia.com>2018-03-12 08:58:58 -0400
commit2dcabf053c6ecde46f7aa3612c5a57fb8bd185c4 (patch)
tree7fdbda65b1f0049027e070ade27d3fe415db6d6c
parente403d00573431e1e3de1710a91c6090c60ec16af (diff)
clk: tegra: Mark HCLK, SCLK and EMC as critical
Machine dies if HCLK, SCLK or EMC is disabled. Hence mark these clocks as critical. Signed-off-by: Dmitry Osipenko <digetx@gmail.com> Acked-by: Peter De Schrijver <pdeschrijver@nvidia.com> Cc: <stable@vger.kernel.org> # v4.16 Signed-off-by: Thierry Reding <treding@nvidia.com>
-rw-r--r--drivers/clk/tegra/clk-emc.c2
-rw-r--r--drivers/clk/tegra/clk-tegra-periph.c2
-rw-r--r--drivers/clk/tegra/clk-tegra-super-gen4.c8
-rw-r--r--drivers/clk/tegra/clk-tegra114.c3
-rw-r--r--drivers/clk/tegra/clk-tegra124.c7
-rw-r--r--drivers/clk/tegra/clk-tegra20.c23
-rw-r--r--drivers/clk/tegra/clk-tegra210.c3
-rw-r--r--drivers/clk/tegra/clk-tegra30.c14
8 files changed, 26 insertions, 36 deletions
diff --git a/drivers/clk/tegra/clk-emc.c b/drivers/clk/tegra/clk-emc.c
index 11a5066e5c27..5234acd30e89 100644
--- a/drivers/clk/tegra/clk-emc.c
+++ b/drivers/clk/tegra/clk-emc.c
@@ -515,7 +515,7 @@ struct clk *tegra_clk_register_emc(void __iomem *base, struct device_node *np,
515 515
516 init.name = "emc"; 516 init.name = "emc";
517 init.ops = &tegra_clk_emc_ops; 517 init.ops = &tegra_clk_emc_ops;
518 init.flags = 0; 518 init.flags = CLK_IS_CRITICAL;
519 init.parent_names = emc_parent_clk_names; 519 init.parent_names = emc_parent_clk_names;
520 init.num_parents = ARRAY_SIZE(emc_parent_clk_names); 520 init.num_parents = ARRAY_SIZE(emc_parent_clk_names);
521 521
diff --git a/drivers/clk/tegra/clk-tegra-periph.c b/drivers/clk/tegra/clk-tegra-periph.c
index c02711927d79..2acba2986bc6 100644
--- a/drivers/clk/tegra/clk-tegra-periph.c
+++ b/drivers/clk/tegra/clk-tegra-periph.c
@@ -830,7 +830,7 @@ static struct tegra_periph_init_data gate_clks[] = {
830 GATE("xusb_host", "xusb_host_src", 89, 0, tegra_clk_xusb_host, 0), 830 GATE("xusb_host", "xusb_host_src", 89, 0, tegra_clk_xusb_host, 0),
831 GATE("xusb_ss", "xusb_ss_src", 156, 0, tegra_clk_xusb_ss, 0), 831 GATE("xusb_ss", "xusb_ss_src", 156, 0, tegra_clk_xusb_ss, 0),
832 GATE("xusb_dev", "xusb_dev_src", 95, 0, tegra_clk_xusb_dev, 0), 832 GATE("xusb_dev", "xusb_dev_src", 95, 0, tegra_clk_xusb_dev, 0),
833 GATE("emc", "emc_mux", 57, 0, tegra_clk_emc, CLK_IGNORE_UNUSED), 833 GATE("emc", "emc_mux", 57, 0, tegra_clk_emc, CLK_IS_CRITICAL),
834 GATE("sata_cold", "clk_m", 129, TEGRA_PERIPH_ON_APB, tegra_clk_sata_cold, 0), 834 GATE("sata_cold", "clk_m", 129, TEGRA_PERIPH_ON_APB, tegra_clk_sata_cold, 0),
835 GATE("ispa", "isp", 23, 0, tegra_clk_ispa, 0), 835 GATE("ispa", "isp", 23, 0, tegra_clk_ispa, 0),
836 GATE("ispb", "isp", 3, 0, tegra_clk_ispb, 0), 836 GATE("ispb", "isp", 3, 0, tegra_clk_ispb, 0),
diff --git a/drivers/clk/tegra/clk-tegra-super-gen4.c b/drivers/clk/tegra/clk-tegra-super-gen4.c
index 10047107c1dc..89d6b47a27a8 100644
--- a/drivers/clk/tegra/clk-tegra-super-gen4.c
+++ b/drivers/clk/tegra/clk-tegra-super-gen4.c
@@ -125,7 +125,8 @@ static void __init tegra_sclk_init(void __iomem *clk_base,
125 /* SCLK */ 125 /* SCLK */
126 dt_clk = tegra_lookup_dt_id(tegra_clk_sclk, tegra_clks); 126 dt_clk = tegra_lookup_dt_id(tegra_clk_sclk, tegra_clks);
127 if (dt_clk) { 127 if (dt_clk) {
128 clk = clk_register_divider(NULL, "sclk", "sclk_mux", 0, 128 clk = clk_register_divider(NULL, "sclk", "sclk_mux",
129 CLK_IS_CRITICAL,
129 clk_base + SCLK_DIVIDER, 0, 8, 130 clk_base + SCLK_DIVIDER, 0, 8,
130 0, &sysrate_lock); 131 0, &sysrate_lock);
131 *dt_clk = clk; 132 *dt_clk = clk;
@@ -137,7 +138,8 @@ static void __init tegra_sclk_init(void __iomem *clk_base,
137 clk = tegra_clk_register_super_mux("sclk", 138 clk = tegra_clk_register_super_mux("sclk",
138 gen_info->sclk_parents, 139 gen_info->sclk_parents,
139 gen_info->num_sclk_parents, 140 gen_info->num_sclk_parents,
140 CLK_SET_RATE_PARENT, 141 CLK_SET_RATE_PARENT |
142 CLK_IS_CRITICAL,
141 clk_base + SCLK_BURST_POLICY, 143 clk_base + SCLK_BURST_POLICY,
142 0, 4, 0, 0, NULL); 144 0, 4, 0, 0, NULL);
143 *dt_clk = clk; 145 *dt_clk = clk;
@@ -151,7 +153,7 @@ static void __init tegra_sclk_init(void __iomem *clk_base,
151 clk_base + SYSTEM_CLK_RATE, 4, 2, 0, 153 clk_base + SYSTEM_CLK_RATE, 4, 2, 0,
152 &sysrate_lock); 154 &sysrate_lock);
153 clk = clk_register_gate(NULL, "hclk", "hclk_div", 155 clk = clk_register_gate(NULL, "hclk", "hclk_div",
154 CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED, 156 CLK_SET_RATE_PARENT | CLK_IS_CRITICAL,
155 clk_base + SYSTEM_CLK_RATE, 157 clk_base + SYSTEM_CLK_RATE,
156 7, CLK_GATE_SET_TO_DISABLE, &sysrate_lock); 158 7, CLK_GATE_SET_TO_DISABLE, &sysrate_lock);
157 *dt_clk = clk; 159 *dt_clk = clk;
diff --git a/drivers/clk/tegra/clk-tegra114.c b/drivers/clk/tegra/clk-tegra114.c
index 63087d17c3e2..c3945c683f60 100644
--- a/drivers/clk/tegra/clk-tegra114.c
+++ b/drivers/clk/tegra/clk-tegra114.c
@@ -955,8 +955,7 @@ static void __init tegra114_pll_init(void __iomem *clk_base,
955 955
956 /* PLLM */ 956 /* PLLM */
957 clk = tegra_clk_register_pllm("pll_m", "pll_ref", clk_base, pmc, 957 clk = tegra_clk_register_pllm("pll_m", "pll_ref", clk_base, pmc,
958 CLK_IGNORE_UNUSED | CLK_SET_RATE_GATE, 958 CLK_SET_RATE_GATE, &pll_m_params, NULL);
959 &pll_m_params, NULL);
960 clks[TEGRA114_CLK_PLL_M] = clk; 959 clks[TEGRA114_CLK_PLL_M] = clk;
961 960
962 /* PLLM_OUT1 */ 961 /* PLLM_OUT1 */
diff --git a/drivers/clk/tegra/clk-tegra124.c b/drivers/clk/tegra/clk-tegra124.c
index e81ea5b11577..230f9a2c1abf 100644
--- a/drivers/clk/tegra/clk-tegra124.c
+++ b/drivers/clk/tegra/clk-tegra124.c
@@ -1089,8 +1089,7 @@ static void __init tegra124_pll_init(void __iomem *clk_base,
1089 1089
1090 /* PLLM */ 1090 /* PLLM */
1091 clk = tegra_clk_register_pllm("pll_m", "pll_ref", clk_base, pmc, 1091 clk = tegra_clk_register_pllm("pll_m", "pll_ref", clk_base, pmc,
1092 CLK_IGNORE_UNUSED | CLK_SET_RATE_GATE, 1092 CLK_SET_RATE_GATE, &pll_m_params, NULL);
1093 &pll_m_params, NULL);
1094 clk_register_clkdev(clk, "pll_m", NULL); 1093 clk_register_clkdev(clk, "pll_m", NULL);
1095 clks[TEGRA124_CLK_PLL_M] = clk; 1094 clks[TEGRA124_CLK_PLL_M] = clk;
1096 1095
@@ -1099,7 +1098,7 @@ static void __init tegra124_pll_init(void __iomem *clk_base,
1099 clk_base + PLLM_OUT, 0, TEGRA_DIVIDER_ROUND_UP, 1098 clk_base + PLLM_OUT, 0, TEGRA_DIVIDER_ROUND_UP,
1100 8, 8, 1, NULL); 1099 8, 8, 1, NULL);
1101 clk = tegra_clk_register_pll_out("pll_m_out1", "pll_m_out1_div", 1100 clk = tegra_clk_register_pll_out("pll_m_out1", "pll_m_out1_div",
1102 clk_base + PLLM_OUT, 1, 0, CLK_IGNORE_UNUSED | 1101 clk_base + PLLM_OUT, 1, 0,
1103 CLK_SET_RATE_PARENT, 0, NULL); 1102 CLK_SET_RATE_PARENT, 0, NULL);
1104 clk_register_clkdev(clk, "pll_m_out1", NULL); 1103 clk_register_clkdev(clk, "pll_m_out1", NULL);
1105 clks[TEGRA124_CLK_PLL_M_OUT1] = clk; 1104 clks[TEGRA124_CLK_PLL_M_OUT1] = clk;
@@ -1272,7 +1271,7 @@ static struct tegra_clk_init_table common_init_table[] __initdata = {
1272 { TEGRA124_CLK_HOST1X, TEGRA124_CLK_PLL_P, 136000000, 1 }, 1271 { TEGRA124_CLK_HOST1X, TEGRA124_CLK_PLL_P, 136000000, 1 },
1273 { TEGRA124_CLK_DSIALP, TEGRA124_CLK_PLL_P, 68000000, 0 }, 1272 { TEGRA124_CLK_DSIALP, TEGRA124_CLK_PLL_P, 68000000, 0 },
1274 { TEGRA124_CLK_DSIBLP, TEGRA124_CLK_PLL_P, 68000000, 0 }, 1273 { TEGRA124_CLK_DSIBLP, TEGRA124_CLK_PLL_P, 68000000, 0 },
1275 { TEGRA124_CLK_SCLK, TEGRA124_CLK_PLL_P_OUT2, 102000000, 1 }, 1274 { TEGRA124_CLK_SCLK, TEGRA124_CLK_PLL_P_OUT2, 102000000, 0 },
1276 { TEGRA124_CLK_DFLL_SOC, TEGRA124_CLK_PLL_P, 51000000, 1 }, 1275 { TEGRA124_CLK_DFLL_SOC, TEGRA124_CLK_PLL_P, 51000000, 1 },
1277 { TEGRA124_CLK_DFLL_REF, TEGRA124_CLK_PLL_P, 51000000, 1 }, 1276 { TEGRA124_CLK_DFLL_REF, TEGRA124_CLK_PLL_P, 51000000, 1 },
1278 { TEGRA124_CLK_PLL_C, TEGRA124_CLK_CLK_MAX, 768000000, 0 }, 1277 { TEGRA124_CLK_PLL_C, TEGRA124_CLK_CLK_MAX, 768000000, 0 },
diff --git a/drivers/clk/tegra/clk-tegra20.c b/drivers/clk/tegra/clk-tegra20.c
index cbd5a2e5c569..e3392ca2c2fc 100644
--- a/drivers/clk/tegra/clk-tegra20.c
+++ b/drivers/clk/tegra/clk-tegra20.c
@@ -576,6 +576,7 @@ static struct tegra_clk tegra20_clks[tegra_clk_max] __initdata = {
576 [tegra_clk_afi] = { .dt_id = TEGRA20_CLK_AFI, .present = true }, 576 [tegra_clk_afi] = { .dt_id = TEGRA20_CLK_AFI, .present = true },
577 [tegra_clk_fuse] = { .dt_id = TEGRA20_CLK_FUSE, .present = true }, 577 [tegra_clk_fuse] = { .dt_id = TEGRA20_CLK_FUSE, .present = true },
578 [tegra_clk_kfuse] = { .dt_id = TEGRA20_CLK_KFUSE, .present = true }, 578 [tegra_clk_kfuse] = { .dt_id = TEGRA20_CLK_KFUSE, .present = true },
579 [tegra_clk_emc] = { .dt_id = TEGRA20_CLK_EMC, .present = true },
579}; 580};
580 581
581static unsigned long tegra20_clk_measure_input_freq(void) 582static unsigned long tegra20_clk_measure_input_freq(void)
@@ -651,8 +652,7 @@ static void tegra20_pll_init(void)
651 652
652 /* PLLM */ 653 /* PLLM */
653 clk = tegra_clk_register_pll("pll_m", "pll_ref", clk_base, NULL, 654 clk = tegra_clk_register_pll("pll_m", "pll_ref", clk_base, NULL,
654 CLK_IGNORE_UNUSED | CLK_SET_RATE_GATE, 655 CLK_SET_RATE_GATE, &pll_m_params, NULL);
655 &pll_m_params, NULL);
656 clks[TEGRA20_CLK_PLL_M] = clk; 656 clks[TEGRA20_CLK_PLL_M] = clk;
657 657
658 /* PLLM_OUT1 */ 658 /* PLLM_OUT1 */
@@ -660,7 +660,7 @@ static void tegra20_pll_init(void)
660 clk_base + PLLM_OUT, 0, TEGRA_DIVIDER_ROUND_UP, 660 clk_base + PLLM_OUT, 0, TEGRA_DIVIDER_ROUND_UP,
661 8, 8, 1, NULL); 661 8, 8, 1, NULL);
662 clk = tegra_clk_register_pll_out("pll_m_out1", "pll_m_out1_div", 662 clk = tegra_clk_register_pll_out("pll_m_out1", "pll_m_out1_div",
663 clk_base + PLLM_OUT, 1, 0, CLK_IGNORE_UNUSED | 663 clk_base + PLLM_OUT, 1, 0,
664 CLK_SET_RATE_PARENT, 0, NULL); 664 CLK_SET_RATE_PARENT, 0, NULL);
665 clks[TEGRA20_CLK_PLL_M_OUT1] = clk; 665 clks[TEGRA20_CLK_PLL_M_OUT1] = clk;
666 666
@@ -723,7 +723,8 @@ static void tegra20_super_clk_init(void)
723 723
724 /* SCLK */ 724 /* SCLK */
725 clk = tegra_clk_register_super_mux("sclk", sclk_parents, 725 clk = tegra_clk_register_super_mux("sclk", sclk_parents,
726 ARRAY_SIZE(sclk_parents), CLK_SET_RATE_PARENT, 726 ARRAY_SIZE(sclk_parents),
727 CLK_SET_RATE_PARENT | CLK_IS_CRITICAL,
727 clk_base + SCLK_BURST_POLICY, 0, 4, 0, 0, NULL); 728 clk_base + SCLK_BURST_POLICY, 0, 4, 0, 0, NULL);
728 clks[TEGRA20_CLK_SCLK] = clk; 729 clks[TEGRA20_CLK_SCLK] = clk;
729 730
@@ -814,9 +815,6 @@ static void __init tegra20_periph_clk_init(void)
814 CLK_SET_RATE_NO_REPARENT, 815 CLK_SET_RATE_NO_REPARENT,
815 clk_base + CLK_SOURCE_EMC, 816 clk_base + CLK_SOURCE_EMC,
816 30, 2, 0, &emc_lock); 817 30, 2, 0, &emc_lock);
817 clk = tegra_clk_register_periph_gate("emc", "emc_mux", 0, clk_base, 0,
818 57, periph_clk_enb_refcnt);
819 clks[TEGRA20_CLK_EMC] = clk;
820 818
821 clk = tegra_clk_register_mc("mc", "emc_mux", clk_base + CLK_SOURCE_EMC, 819 clk = tegra_clk_register_mc("mc", "emc_mux", clk_base + CLK_SOURCE_EMC,
822 &emc_lock); 820 &emc_lock);
@@ -1019,13 +1017,12 @@ static struct tegra_clk_init_table init_table[] __initdata = {
1019 { TEGRA20_CLK_PLL_P_OUT2, TEGRA20_CLK_CLK_MAX, 48000000, 1 }, 1017 { TEGRA20_CLK_PLL_P_OUT2, TEGRA20_CLK_CLK_MAX, 48000000, 1 },
1020 { TEGRA20_CLK_PLL_P_OUT3, TEGRA20_CLK_CLK_MAX, 72000000, 1 }, 1018 { TEGRA20_CLK_PLL_P_OUT3, TEGRA20_CLK_CLK_MAX, 72000000, 1 },
1021 { TEGRA20_CLK_PLL_P_OUT4, TEGRA20_CLK_CLK_MAX, 24000000, 1 }, 1019 { TEGRA20_CLK_PLL_P_OUT4, TEGRA20_CLK_CLK_MAX, 24000000, 1 },
1022 { TEGRA20_CLK_PLL_C, TEGRA20_CLK_CLK_MAX, 600000000, 1 }, 1020 { TEGRA20_CLK_PLL_C, TEGRA20_CLK_CLK_MAX, 600000000, 0 },
1023 { TEGRA20_CLK_PLL_C_OUT1, TEGRA20_CLK_CLK_MAX, 216000000, 1 }, 1021 { TEGRA20_CLK_PLL_C_OUT1, TEGRA20_CLK_CLK_MAX, 216000000, 0 },
1024 { TEGRA20_CLK_SCLK, TEGRA20_CLK_PLL_C_OUT1, 0, 1 }, 1022 { TEGRA20_CLK_SCLK, TEGRA20_CLK_PLL_C_OUT1, 0, 0 },
1025 { TEGRA20_CLK_HCLK, TEGRA20_CLK_CLK_MAX, 0, 1 }, 1023 { TEGRA20_CLK_HCLK, TEGRA20_CLK_CLK_MAX, 0, 0 },
1026 { TEGRA20_CLK_PCLK, TEGRA20_CLK_CLK_MAX, 60000000, 1 }, 1024 { TEGRA20_CLK_PCLK, TEGRA20_CLK_CLK_MAX, 60000000, 0 },
1027 { TEGRA20_CLK_CSITE, TEGRA20_CLK_CLK_MAX, 0, 1 }, 1025 { TEGRA20_CLK_CSITE, TEGRA20_CLK_CLK_MAX, 0, 1 },
1028 { TEGRA20_CLK_EMC, TEGRA20_CLK_CLK_MAX, 0, 1 },
1029 { TEGRA20_CLK_CCLK, TEGRA20_CLK_CLK_MAX, 0, 1 }, 1026 { TEGRA20_CLK_CCLK, TEGRA20_CLK_CLK_MAX, 0, 1 },
1030 { TEGRA20_CLK_UARTA, TEGRA20_CLK_PLL_P, 0, 0 }, 1027 { TEGRA20_CLK_UARTA, TEGRA20_CLK_PLL_P, 0, 0 },
1031 { TEGRA20_CLK_UARTB, TEGRA20_CLK_PLL_P, 0, 0 }, 1028 { TEGRA20_CLK_UARTB, TEGRA20_CLK_PLL_P, 0, 0 },
diff --git a/drivers/clk/tegra/clk-tegra210.c b/drivers/clk/tegra/clk-tegra210.c
index 946d708add1e..9fb5d51ccce4 100644
--- a/drivers/clk/tegra/clk-tegra210.c
+++ b/drivers/clk/tegra/clk-tegra210.c
@@ -3328,7 +3328,7 @@ static struct tegra_clk_init_table init_table[] __initdata = {
3328 { TEGRA210_CLK_I2S4, TEGRA210_CLK_PLL_A_OUT0, 11289600, 0 }, 3328 { TEGRA210_CLK_I2S4, TEGRA210_CLK_PLL_A_OUT0, 11289600, 0 },
3329 { TEGRA210_CLK_HOST1X, TEGRA210_CLK_PLL_P, 136000000, 1 }, 3329 { TEGRA210_CLK_HOST1X, TEGRA210_CLK_PLL_P, 136000000, 1 },
3330 { TEGRA210_CLK_SCLK_MUX, TEGRA210_CLK_PLL_P, 0, 1 }, 3330 { TEGRA210_CLK_SCLK_MUX, TEGRA210_CLK_PLL_P, 0, 1 },
3331 { TEGRA210_CLK_SCLK, TEGRA210_CLK_CLK_MAX, 102000000, 1 }, 3331 { TEGRA210_CLK_SCLK, TEGRA210_CLK_CLK_MAX, 102000000, 0 },
3332 { TEGRA210_CLK_DFLL_SOC, TEGRA210_CLK_PLL_P, 51000000, 1 }, 3332 { TEGRA210_CLK_DFLL_SOC, TEGRA210_CLK_PLL_P, 51000000, 1 },
3333 { TEGRA210_CLK_DFLL_REF, TEGRA210_CLK_PLL_P, 51000000, 1 }, 3333 { TEGRA210_CLK_DFLL_REF, TEGRA210_CLK_PLL_P, 51000000, 1 },
3334 { TEGRA210_CLK_SBC4, TEGRA210_CLK_PLL_P, 12000000, 1 }, 3334 { TEGRA210_CLK_SBC4, TEGRA210_CLK_PLL_P, 12000000, 1 },
@@ -3343,7 +3343,6 @@ static struct tegra_clk_init_table init_table[] __initdata = {
3343 { TEGRA210_CLK_XUSB_DEV_SRC, TEGRA210_CLK_PLL_P_OUT_XUSB, 102000000, 0 }, 3343 { TEGRA210_CLK_XUSB_DEV_SRC, TEGRA210_CLK_PLL_P_OUT_XUSB, 102000000, 0 },
3344 { TEGRA210_CLK_SATA, TEGRA210_CLK_PLL_P, 104000000, 0 }, 3344 { TEGRA210_CLK_SATA, TEGRA210_CLK_PLL_P, 104000000, 0 },
3345 { TEGRA210_CLK_SATA_OOB, TEGRA210_CLK_PLL_P, 204000000, 0 }, 3345 { TEGRA210_CLK_SATA_OOB, TEGRA210_CLK_PLL_P, 204000000, 0 },
3346 { TEGRA210_CLK_EMC, TEGRA210_CLK_CLK_MAX, 0, 1 },
3347 { TEGRA210_CLK_MSELECT, TEGRA210_CLK_CLK_MAX, 0, 1 }, 3346 { TEGRA210_CLK_MSELECT, TEGRA210_CLK_CLK_MAX, 0, 1 },
3348 { TEGRA210_CLK_CSITE, TEGRA210_CLK_CLK_MAX, 0, 1 }, 3347 { TEGRA210_CLK_CSITE, TEGRA210_CLK_CLK_MAX, 0, 1 },
3349 /* TODO find a way to enable this on-demand */ 3348 /* TODO find a way to enable this on-demand */
diff --git a/drivers/clk/tegra/clk-tegra30.c b/drivers/clk/tegra/clk-tegra30.c
index bee84c554932..8428895ad475 100644
--- a/drivers/clk/tegra/clk-tegra30.c
+++ b/drivers/clk/tegra/clk-tegra30.c
@@ -819,6 +819,7 @@ static struct tegra_clk tegra30_clks[tegra_clk_max] __initdata = {
819 [tegra_clk_pll_a] = { .dt_id = TEGRA30_CLK_PLL_A, .present = true }, 819 [tegra_clk_pll_a] = { .dt_id = TEGRA30_CLK_PLL_A, .present = true },
820 [tegra_clk_pll_a_out0] = { .dt_id = TEGRA30_CLK_PLL_A_OUT0, .present = true }, 820 [tegra_clk_pll_a_out0] = { .dt_id = TEGRA30_CLK_PLL_A_OUT0, .present = true },
821 [tegra_clk_cec] = { .dt_id = TEGRA30_CLK_CEC, .present = true }, 821 [tegra_clk_cec] = { .dt_id = TEGRA30_CLK_CEC, .present = true },
822 [tegra_clk_emc] = { .dt_id = TEGRA30_CLK_EMC, .present = true },
822}; 823};
823 824
824static const char *pll_e_parents[] = { "pll_ref", "pll_p" }; 825static const char *pll_e_parents[] = { "pll_ref", "pll_p" };
@@ -843,8 +844,7 @@ static void __init tegra30_pll_init(void)
843 844
844 /* PLLM */ 845 /* PLLM */
845 clk = tegra_clk_register_pll("pll_m", "pll_ref", clk_base, pmc_base, 846 clk = tegra_clk_register_pll("pll_m", "pll_ref", clk_base, pmc_base,
846 CLK_IGNORE_UNUSED | CLK_SET_RATE_GATE, 847 CLK_SET_RATE_GATE, &pll_m_params, NULL);
847 &pll_m_params, NULL);
848 clks[TEGRA30_CLK_PLL_M] = clk; 848 clks[TEGRA30_CLK_PLL_M] = clk;
849 849
850 /* PLLM_OUT1 */ 850 /* PLLM_OUT1 */
@@ -852,7 +852,7 @@ static void __init tegra30_pll_init(void)
852 clk_base + PLLM_OUT, 0, TEGRA_DIVIDER_ROUND_UP, 852 clk_base + PLLM_OUT, 0, TEGRA_DIVIDER_ROUND_UP,
853 8, 8, 1, NULL); 853 8, 8, 1, NULL);
854 clk = tegra_clk_register_pll_out("pll_m_out1", "pll_m_out1_div", 854 clk = tegra_clk_register_pll_out("pll_m_out1", "pll_m_out1_div",
855 clk_base + PLLM_OUT, 1, 0, CLK_IGNORE_UNUSED | 855 clk_base + PLLM_OUT, 1, 0,
856 CLK_SET_RATE_PARENT, 0, NULL); 856 CLK_SET_RATE_PARENT, 0, NULL);
857 clks[TEGRA30_CLK_PLL_M_OUT1] = clk; 857 clks[TEGRA30_CLK_PLL_M_OUT1] = clk;
858 858
@@ -990,7 +990,7 @@ static void __init tegra30_super_clk_init(void)
990 /* SCLK */ 990 /* SCLK */
991 clk = tegra_clk_register_super_mux("sclk", sclk_parents, 991 clk = tegra_clk_register_super_mux("sclk", sclk_parents,
992 ARRAY_SIZE(sclk_parents), 992 ARRAY_SIZE(sclk_parents),
993 CLK_SET_RATE_PARENT, 993 CLK_SET_RATE_PARENT | CLK_IS_CRITICAL,
994 clk_base + SCLK_BURST_POLICY, 994 clk_base + SCLK_BURST_POLICY,
995 0, 4, 0, 0, NULL); 995 0, 4, 0, 0, NULL);
996 clks[TEGRA30_CLK_SCLK] = clk; 996 clks[TEGRA30_CLK_SCLK] = clk;
@@ -1060,9 +1060,6 @@ static void __init tegra30_periph_clk_init(void)
1060 CLK_SET_RATE_NO_REPARENT, 1060 CLK_SET_RATE_NO_REPARENT,
1061 clk_base + CLK_SOURCE_EMC, 1061 clk_base + CLK_SOURCE_EMC,
1062 30, 2, 0, &emc_lock); 1062 30, 2, 0, &emc_lock);
1063 clk = tegra_clk_register_periph_gate("emc", "emc_mux", 0, clk_base, 0,
1064 57, periph_clk_enb_refcnt);
1065 clks[TEGRA30_CLK_EMC] = clk;
1066 1063
1067 clk = tegra_clk_register_mc("mc", "emc_mux", clk_base + CLK_SOURCE_EMC, 1064 clk = tegra_clk_register_mc("mc", "emc_mux", clk_base + CLK_SOURCE_EMC,
1068 &emc_lock); 1065 &emc_lock);
@@ -1252,10 +1249,7 @@ static struct tegra_clk_init_table init_table[] __initdata = {
1252 { TEGRA30_CLK_SDMMC1, TEGRA30_CLK_PLL_P, 48000000, 0 }, 1249 { TEGRA30_CLK_SDMMC1, TEGRA30_CLK_PLL_P, 48000000, 0 },
1253 { TEGRA30_CLK_SDMMC2, TEGRA30_CLK_PLL_P, 48000000, 0 }, 1250 { TEGRA30_CLK_SDMMC2, TEGRA30_CLK_PLL_P, 48000000, 0 },
1254 { TEGRA30_CLK_SDMMC3, TEGRA30_CLK_PLL_P, 48000000, 0 }, 1251 { TEGRA30_CLK_SDMMC3, TEGRA30_CLK_PLL_P, 48000000, 0 },
1255 { TEGRA30_CLK_PLL_M, TEGRA30_CLK_CLK_MAX, 0, 1 },
1256 { TEGRA30_CLK_PCLK, TEGRA30_CLK_CLK_MAX, 0, 1 },
1257 { TEGRA30_CLK_CSITE, TEGRA30_CLK_CLK_MAX, 0, 1 }, 1252 { TEGRA30_CLK_CSITE, TEGRA30_CLK_CLK_MAX, 0, 1 },
1258 { TEGRA30_CLK_EMC, TEGRA30_CLK_CLK_MAX, 0, 1 },
1259 { TEGRA30_CLK_MSELECT, TEGRA30_CLK_CLK_MAX, 0, 1 }, 1253 { TEGRA30_CLK_MSELECT, TEGRA30_CLK_CLK_MAX, 0, 1 },
1260 { TEGRA30_CLK_SBC1, TEGRA30_CLK_PLL_P, 100000000, 0 }, 1254 { TEGRA30_CLK_SBC1, TEGRA30_CLK_PLL_P, 100000000, 0 },
1261 { TEGRA30_CLK_SBC2, TEGRA30_CLK_PLL_P, 100000000, 0 }, 1255 { TEGRA30_CLK_SBC2, TEGRA30_CLK_PLL_P, 100000000, 0 },