diff options
author | Dmitry Osipenko <digetx@gmail.com> | 2018-01-10 08:59:42 -0500 |
---|---|---|
committer | Thierry Reding <treding@nvidia.com> | 2018-03-12 08:58:58 -0400 |
commit | 2dcabf053c6ecde46f7aa3612c5a57fb8bd185c4 (patch) | |
tree | 7fdbda65b1f0049027e070ade27d3fe415db6d6c | |
parent | e403d00573431e1e3de1710a91c6090c60ec16af (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.c | 2 | ||||
-rw-r--r-- | drivers/clk/tegra/clk-tegra-periph.c | 2 | ||||
-rw-r--r-- | drivers/clk/tegra/clk-tegra-super-gen4.c | 8 | ||||
-rw-r--r-- | drivers/clk/tegra/clk-tegra114.c | 3 | ||||
-rw-r--r-- | drivers/clk/tegra/clk-tegra124.c | 7 | ||||
-rw-r--r-- | drivers/clk/tegra/clk-tegra20.c | 23 | ||||
-rw-r--r-- | drivers/clk/tegra/clk-tegra210.c | 3 | ||||
-rw-r--r-- | drivers/clk/tegra/clk-tegra30.c | 14 |
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 | ||
581 | static unsigned long tegra20_clk_measure_input_freq(void) | 582 | static 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 | ||
824 | static const char *pll_e_parents[] = { "pll_ref", "pll_p" }; | 825 | static 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 }, |