blob: 586c2c12788f082ef83142a73daceb47a4743e69 [file] [log] [blame]
Naveen Krishna Ch532abc32014-09-22 10:17:04 +05301/*
2 * Copyright (c) 2014 Samsung Electronics Co., Ltd.
3 * Author: Naveen Krishna Ch <naveenkrishna.ch@gmail.com>
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License version 2 as
7 * published by the Free Software Foundation.
8 *
9*/
10
Naveen Krishna Ch532abc32014-09-22 10:17:04 +053011#include <linux/clk-provider.h>
12#include <linux/of.h>
13
14#include "clk.h"
15#include <dt-bindings/clock/exynos7-clk.h>
16
17/* Register Offset definitions for CMU_TOPC (0x10570000) */
18#define CC_PLL_LOCK 0x0000
19#define BUS0_PLL_LOCK 0x0004
20#define BUS1_DPLL_LOCK 0x0008
21#define MFC_PLL_LOCK 0x000C
22#define AUD_PLL_LOCK 0x0010
23#define CC_PLL_CON0 0x0100
24#define BUS0_PLL_CON0 0x0110
25#define BUS1_DPLL_CON0 0x0120
26#define MFC_PLL_CON0 0x0130
27#define AUD_PLL_CON0 0x0140
28#define MUX_SEL_TOPC0 0x0200
29#define MUX_SEL_TOPC1 0x0204
Naveen Krishna Chf5e127c2014-10-28 16:48:53 +053030#define MUX_SEL_TOPC2 0x0208
Naveen Krishna Ch532abc32014-09-22 10:17:04 +053031#define MUX_SEL_TOPC3 0x020C
Naveen Krishna Chf5e127c2014-10-28 16:48:53 +053032#define DIV_TOPC0 0x0600
Naveen Krishna Ch532abc32014-09-22 10:17:04 +053033#define DIV_TOPC1 0x0604
34#define DIV_TOPC3 0x060C
Alim Akhtar2cbb5152015-09-10 14:14:27 +053035#define ENABLE_ACLK_TOPC0 0x0800
Tony K Nadackal49cab822014-12-17 13:03:37 +053036#define ENABLE_ACLK_TOPC1 0x0804
Alim Akhtar2cbb5152015-09-10 14:14:27 +053037#define ENABLE_SCLK_TOPC1 0x0A04
Naveen Krishna Ch532abc32014-09-22 10:17:04 +053038
39static struct samsung_fixed_factor_clock topc_fixed_factor_clks[] __initdata = {
Alim Akhtardc504b22015-09-10 14:14:26 +053040 FFACTOR(0, "ffac_topc_bus0_pll_div2", "mout_topc_bus0_pll", 1, 2, 0),
Naveen Krishna Ch532abc32014-09-22 10:17:04 +053041 FFACTOR(0, "ffac_topc_bus0_pll_div4",
42 "ffac_topc_bus0_pll_div2", 1, 2, 0),
Alim Akhtardc504b22015-09-10 14:14:26 +053043 FFACTOR(0, "ffac_topc_bus1_pll_div2", "mout_topc_bus1_pll", 1, 2, 0),
44 FFACTOR(0, "ffac_topc_cc_pll_div2", "mout_topc_cc_pll", 1, 2, 0),
45 FFACTOR(0, "ffac_topc_mfc_pll_div2", "mout_topc_mfc_pll", 1, 2, 0),
Naveen Krishna Ch532abc32014-09-22 10:17:04 +053046};
47
48/* List of parent clocks for Muxes in CMU_TOPC */
Alim Akhtardc504b22015-09-10 14:14:26 +053049PNAME(mout_topc_aud_pll_ctrl_p) = { "fin_pll", "fout_aud_pll" };
50PNAME(mout_topc_bus0_pll_ctrl_p) = { "fin_pll", "fout_bus0_pll" };
51PNAME(mout_topc_bus1_pll_ctrl_p) = { "fin_pll", "fout_bus1_pll" };
52PNAME(mout_topc_cc_pll_ctrl_p) = { "fin_pll", "fout_cc_pll" };
53PNAME(mout_topc_mfc_pll_ctrl_p) = { "fin_pll", "fout_mfc_pll" };
Naveen Krishna Ch532abc32014-09-22 10:17:04 +053054
Alim Akhtardc504b22015-09-10 14:14:26 +053055PNAME(mout_topc_group2) = { "mout_topc_bus0_pll_half",
56 "mout_topc_bus1_pll_half", "mout_topc_cc_pll_half",
57 "mout_topc_mfc_pll_half" };
Naveen Krishna Ch532abc32014-09-22 10:17:04 +053058
Alim Akhtardc504b22015-09-10 14:14:26 +053059PNAME(mout_topc_bus0_pll_half_p) = { "mout_topc_bus0_pll",
Naveen Krishna Ch532abc32014-09-22 10:17:04 +053060 "ffac_topc_bus0_pll_div2", "ffac_topc_bus0_pll_div4"};
Alim Akhtardc504b22015-09-10 14:14:26 +053061PNAME(mout_topc_bus1_pll_half_p) = { "mout_topc_bus1_pll",
Naveen Krishna Ch532abc32014-09-22 10:17:04 +053062 "ffac_topc_bus1_pll_div2"};
Alim Akhtardc504b22015-09-10 14:14:26 +053063PNAME(mout_topc_cc_pll_half_p) = { "mout_topc_cc_pll",
Naveen Krishna Ch532abc32014-09-22 10:17:04 +053064 "ffac_topc_cc_pll_div2"};
Alim Akhtardc504b22015-09-10 14:14:26 +053065PNAME(mout_topc_mfc_pll_half_p) = { "mout_topc_mfc_pll",
Naveen Krishna Ch532abc32014-09-22 10:17:04 +053066 "ffac_topc_mfc_pll_div2"};
67
68
Alim Akhtardc504b22015-09-10 14:14:26 +053069PNAME(mout_topc_bus0_pll_out_p) = {"mout_topc_bus0_pll",
Naveen Krishna Ch532abc32014-09-22 10:17:04 +053070 "ffac_topc_bus0_pll_div2"};
71
72static unsigned long topc_clk_regs[] __initdata = {
73 CC_PLL_LOCK,
74 BUS0_PLL_LOCK,
75 BUS1_DPLL_LOCK,
76 MFC_PLL_LOCK,
77 AUD_PLL_LOCK,
78 CC_PLL_CON0,
79 BUS0_PLL_CON0,
80 BUS1_DPLL_CON0,
81 MFC_PLL_CON0,
82 AUD_PLL_CON0,
83 MUX_SEL_TOPC0,
84 MUX_SEL_TOPC1,
Naveen Krishna Chf5e127c2014-10-28 16:48:53 +053085 MUX_SEL_TOPC2,
Naveen Krishna Ch532abc32014-09-22 10:17:04 +053086 MUX_SEL_TOPC3,
Naveen Krishna Chf5e127c2014-10-28 16:48:53 +053087 DIV_TOPC0,
Naveen Krishna Ch532abc32014-09-22 10:17:04 +053088 DIV_TOPC1,
89 DIV_TOPC3,
90};
91
92static struct samsung_mux_clock topc_mux_clks[] __initdata = {
Alim Akhtardc504b22015-09-10 14:14:26 +053093 MUX(0, "mout_topc_bus0_pll", mout_topc_bus0_pll_ctrl_p,
94 MUX_SEL_TOPC0, 0, 1),
95 MUX(0, "mout_topc_bus1_pll", mout_topc_bus1_pll_ctrl_p,
96 MUX_SEL_TOPC0, 4, 1),
97 MUX(0, "mout_topc_cc_pll", mout_topc_cc_pll_ctrl_p,
98 MUX_SEL_TOPC0, 8, 1),
99 MUX(0, "mout_topc_mfc_pll", mout_topc_mfc_pll_ctrl_p,
100 MUX_SEL_TOPC0, 12, 1),
101 MUX(0, "mout_topc_bus0_pll_half", mout_topc_bus0_pll_half_p,
Naveen Krishna Ch532abc32014-09-22 10:17:04 +0530102 MUX_SEL_TOPC0, 16, 2),
Alim Akhtardc504b22015-09-10 14:14:26 +0530103 MUX(0, "mout_topc_bus1_pll_half", mout_topc_bus1_pll_half_p,
Naveen Krishna Ch532abc32014-09-22 10:17:04 +0530104 MUX_SEL_TOPC0, 20, 1),
Alim Akhtardc504b22015-09-10 14:14:26 +0530105 MUX(0, "mout_topc_cc_pll_half", mout_topc_cc_pll_half_p,
Naveen Krishna Ch532abc32014-09-22 10:17:04 +0530106 MUX_SEL_TOPC0, 24, 1),
Alim Akhtardc504b22015-09-10 14:14:26 +0530107 MUX(0, "mout_topc_mfc_pll_half", mout_topc_mfc_pll_half_p,
Naveen Krishna Ch532abc32014-09-22 10:17:04 +0530108 MUX_SEL_TOPC0, 28, 1),
109
Alim Akhtardc504b22015-09-10 14:14:26 +0530110 MUX(0, "mout_topc_aud_pll", mout_topc_aud_pll_ctrl_p,
111 MUX_SEL_TOPC1, 0, 1),
112 MUX(0, "mout_topc_bus0_pll_out", mout_topc_bus0_pll_out_p,
Naveen Krishna Ch532abc32014-09-22 10:17:04 +0530113 MUX_SEL_TOPC1, 16, 1),
114
Naveen Krishna Chf5e127c2014-10-28 16:48:53 +0530115 MUX(0, "mout_aclk_ccore_133", mout_topc_group2, MUX_SEL_TOPC2, 4, 2),
116
Tony K Nadackal49cab822014-12-17 13:03:37 +0530117 MUX(0, "mout_aclk_mscl_532", mout_topc_group2, MUX_SEL_TOPC3, 20, 2),
Naveen Krishna Ch532abc32014-09-22 10:17:04 +0530118 MUX(0, "mout_aclk_peris_66", mout_topc_group2, MUX_SEL_TOPC3, 24, 2),
119};
120
121static struct samsung_div_clock topc_div_clks[] __initdata = {
Naveen Krishna Chf5e127c2014-10-28 16:48:53 +0530122 DIV(DOUT_ACLK_CCORE_133, "dout_aclk_ccore_133", "mout_aclk_ccore_133",
123 DIV_TOPC0, 4, 4),
124
Tony K Nadackal49cab822014-12-17 13:03:37 +0530125 DIV(DOUT_ACLK_MSCL_532, "dout_aclk_mscl_532", "mout_aclk_mscl_532",
126 DIV_TOPC1, 20, 4),
Naveen Krishna Ch532abc32014-09-22 10:17:04 +0530127 DIV(DOUT_ACLK_PERIS, "dout_aclk_peris_66", "mout_aclk_peris_66",
128 DIV_TOPC1, 24, 4),
129
Alim Akhtardc504b22015-09-10 14:14:26 +0530130 DIV(DOUT_SCLK_BUS0_PLL, "dout_sclk_bus0_pll", "mout_topc_bus0_pll_out",
Alim Akhtarfa9f3a52015-08-26 09:00:41 +0530131 DIV_TOPC3, 0, 4),
Alim Akhtardc504b22015-09-10 14:14:26 +0530132 DIV(DOUT_SCLK_BUS1_PLL, "dout_sclk_bus1_pll", "mout_topc_bus1_pll",
Alim Akhtarfa9f3a52015-08-26 09:00:41 +0530133 DIV_TOPC3, 8, 4),
Alim Akhtardc504b22015-09-10 14:14:26 +0530134 DIV(DOUT_SCLK_CC_PLL, "dout_sclk_cc_pll", "mout_topc_cc_pll",
Alim Akhtarfa9f3a52015-08-26 09:00:41 +0530135 DIV_TOPC3, 12, 4),
Alim Akhtardc504b22015-09-10 14:14:26 +0530136 DIV(DOUT_SCLK_MFC_PLL, "dout_sclk_mfc_pll", "mout_topc_mfc_pll",
Alim Akhtarfa9f3a52015-08-26 09:00:41 +0530137 DIV_TOPC3, 16, 4),
Alim Akhtardc504b22015-09-10 14:14:26 +0530138 DIV(DOUT_SCLK_AUD_PLL, "dout_sclk_aud_pll", "mout_topc_aud_pll",
Alim Akhtarfa9f3a52015-08-26 09:00:41 +0530139 DIV_TOPC3, 28, 4),
Padmavathi Venna9f930a32015-01-13 16:57:42 +0530140};
141
142static struct samsung_pll_rate_table pll1460x_24mhz_tbl[] __initdata = {
143 PLL_36XX_RATE(491520000, 20, 1, 0, 31457),
144 {},
Naveen Krishna Ch532abc32014-09-22 10:17:04 +0530145};
146
Tony K Nadackal49cab822014-12-17 13:03:37 +0530147static struct samsung_gate_clock topc_gate_clks[] __initdata = {
Alim Akhtar2cbb5152015-09-10 14:14:27 +0530148 GATE(ACLK_CCORE_133, "aclk_ccore_133", "dout_aclk_ccore_133",
149 ENABLE_ACLK_TOPC0, 4, 0, 0),
150
Tony K Nadackal49cab822014-12-17 13:03:37 +0530151 GATE(ACLK_MSCL_532, "aclk_mscl_532", "dout_aclk_mscl_532",
152 ENABLE_ACLK_TOPC1, 20, 0, 0),
Alim Akhtar2cbb5152015-09-10 14:14:27 +0530153
154 GATE(ACLK_PERIS_66, "aclk_peris_66", "dout_aclk_peris_66",
155 ENABLE_ACLK_TOPC1, 24, 0, 0),
156
157 GATE(SCLK_AUD_PLL, "sclk_aud_pll", "dout_sclk_aud_pll",
158 ENABLE_SCLK_TOPC1, 20, 0, 0),
159 GATE(SCLK_MFC_PLL_B, "sclk_mfc_pll_b", "dout_sclk_mfc_pll",
160 ENABLE_SCLK_TOPC1, 17, 0, 0),
161 GATE(SCLK_MFC_PLL_A, "sclk_mfc_pll_a", "dout_sclk_mfc_pll",
162 ENABLE_SCLK_TOPC1, 16, 0, 0),
163 GATE(SCLK_BUS1_PLL_B, "sclk_bus1_pll_b", "dout_sclk_bus1_pll",
164 ENABLE_SCLK_TOPC1, 13, 0, 0),
165 GATE(SCLK_BUS1_PLL_A, "sclk_bus1_pll_a", "dout_sclk_bus1_pll",
166 ENABLE_SCLK_TOPC1, 12, 0, 0),
167 GATE(SCLK_BUS0_PLL_B, "sclk_bus0_pll_b", "dout_sclk_bus0_pll",
168 ENABLE_SCLK_TOPC1, 5, 0, 0),
169 GATE(SCLK_BUS0_PLL_A, "sclk_bus0_pll_a", "dout_sclk_bus0_pll",
170 ENABLE_SCLK_TOPC1, 4, 0, 0),
171 GATE(SCLK_CC_PLL_B, "sclk_cc_pll_b", "dout_sclk_cc_pll",
172 ENABLE_SCLK_TOPC1, 1, 0, 0),
173 GATE(SCLK_CC_PLL_A, "sclk_cc_pll_a", "dout_sclk_cc_pll",
174 ENABLE_SCLK_TOPC1, 0, 0, 0),
Tony K Nadackal49cab822014-12-17 13:03:37 +0530175};
176
Naveen Krishna Ch532abc32014-09-22 10:17:04 +0530177static struct samsung_pll_clock topc_pll_clks[] __initdata = {
178 PLL(pll_1451x, 0, "fout_bus0_pll", "fin_pll", BUS0_PLL_LOCK,
179 BUS0_PLL_CON0, NULL),
180 PLL(pll_1452x, 0, "fout_cc_pll", "fin_pll", CC_PLL_LOCK,
181 CC_PLL_CON0, NULL),
182 PLL(pll_1452x, 0, "fout_bus1_pll", "fin_pll", BUS1_DPLL_LOCK,
183 BUS1_DPLL_CON0, NULL),
184 PLL(pll_1452x, 0, "fout_mfc_pll", "fin_pll", MFC_PLL_LOCK,
185 MFC_PLL_CON0, NULL),
Padmavathi Venna9f930a32015-01-13 16:57:42 +0530186 PLL(pll_1460x, FOUT_AUD_PLL, "fout_aud_pll", "fin_pll", AUD_PLL_LOCK,
187 AUD_PLL_CON0, pll1460x_24mhz_tbl),
Naveen Krishna Ch532abc32014-09-22 10:17:04 +0530188};
189
190static struct samsung_cmu_info topc_cmu_info __initdata = {
191 .pll_clks = topc_pll_clks,
192 .nr_pll_clks = ARRAY_SIZE(topc_pll_clks),
193 .mux_clks = topc_mux_clks,
194 .nr_mux_clks = ARRAY_SIZE(topc_mux_clks),
195 .div_clks = topc_div_clks,
196 .nr_div_clks = ARRAY_SIZE(topc_div_clks),
Tony K Nadackal49cab822014-12-17 13:03:37 +0530197 .gate_clks = topc_gate_clks,
198 .nr_gate_clks = ARRAY_SIZE(topc_gate_clks),
Naveen Krishna Ch532abc32014-09-22 10:17:04 +0530199 .fixed_factor_clks = topc_fixed_factor_clks,
200 .nr_fixed_factor_clks = ARRAY_SIZE(topc_fixed_factor_clks),
201 .nr_clk_ids = TOPC_NR_CLK,
202 .clk_regs = topc_clk_regs,
203 .nr_clk_regs = ARRAY_SIZE(topc_clk_regs),
204};
205
206static void __init exynos7_clk_topc_init(struct device_node *np)
207{
208 samsung_cmu_register_one(np, &topc_cmu_info);
209}
210
211CLK_OF_DECLARE(exynos7_clk_topc, "samsung,exynos7-clock-topc",
212 exynos7_clk_topc_init);
213
214/* Register Offset definitions for CMU_TOP0 (0x105D0000) */
215#define MUX_SEL_TOP00 0x0200
216#define MUX_SEL_TOP01 0x0204
217#define MUX_SEL_TOP03 0x020C
Padmavathi Venna9f930a32015-01-13 16:57:42 +0530218#define MUX_SEL_TOP0_PERIC0 0x0230
Padmavathi Vennaee74b562015-01-13 16:57:41 +0530219#define MUX_SEL_TOP0_PERIC1 0x0234
220#define MUX_SEL_TOP0_PERIC2 0x0238
Naveen Krishna Ch532abc32014-09-22 10:17:04 +0530221#define MUX_SEL_TOP0_PERIC3 0x023C
222#define DIV_TOP03 0x060C
Padmavathi Venna9f930a32015-01-13 16:57:42 +0530223#define DIV_TOP0_PERIC0 0x0630
Padmavathi Vennaee74b562015-01-13 16:57:41 +0530224#define DIV_TOP0_PERIC1 0x0634
225#define DIV_TOP0_PERIC2 0x0638
Naveen Krishna Ch532abc32014-09-22 10:17:04 +0530226#define DIV_TOP0_PERIC3 0x063C
Padmavathi Venna9f930a32015-01-13 16:57:42 +0530227#define ENABLE_SCLK_TOP0_PERIC0 0x0A30
Padmavathi Vennaee74b562015-01-13 16:57:41 +0530228#define ENABLE_SCLK_TOP0_PERIC1 0x0A34
229#define ENABLE_SCLK_TOP0_PERIC2 0x0A38
Naveen Krishna Ch532abc32014-09-22 10:17:04 +0530230#define ENABLE_SCLK_TOP0_PERIC3 0x0A3C
231
232/* List of parent clocks for Muxes in CMU_TOP0 */
233PNAME(mout_bus0_pll_p) = { "fin_pll", "dout_sclk_bus0_pll" };
234PNAME(mout_bus1_pll_p) = { "fin_pll", "dout_sclk_bus1_pll" };
235PNAME(mout_cc_pll_p) = { "fin_pll", "dout_sclk_cc_pll" };
236PNAME(mout_mfc_pll_p) = { "fin_pll", "dout_sclk_mfc_pll" };
Padmavathi Venna9f930a32015-01-13 16:57:42 +0530237PNAME(mout_aud_pll_p) = { "fin_pll", "dout_sclk_aud_pll" };
Naveen Krishna Ch532abc32014-09-22 10:17:04 +0530238
239PNAME(mout_top0_half_bus0_pll_p) = {"mout_top0_bus0_pll",
240 "ffac_top0_bus0_pll_div2"};
241PNAME(mout_top0_half_bus1_pll_p) = {"mout_top0_bus1_pll",
242 "ffac_top0_bus1_pll_div2"};
243PNAME(mout_top0_half_cc_pll_p) = {"mout_top0_cc_pll",
244 "ffac_top0_cc_pll_div2"};
245PNAME(mout_top0_half_mfc_pll_p) = {"mout_top0_mfc_pll",
246 "ffac_top0_mfc_pll_div2"};
247
248PNAME(mout_top0_group1) = {"mout_top0_half_bus0_pll",
249 "mout_top0_half_bus1_pll", "mout_top0_half_cc_pll",
250 "mout_top0_half_mfc_pll"};
Padmavathi Venna9f930a32015-01-13 16:57:42 +0530251PNAME(mout_top0_group3) = {"ioclk_audiocdclk0",
252 "ioclk_audiocdclk1", "ioclk_spdif_extclk",
253 "mout_top0_aud_pll", "mout_top0_half_bus0_pll",
254 "mout_top0_half_bus1_pll"};
255PNAME(mout_top0_group4) = {"ioclk_audiocdclk1", "mout_top0_aud_pll",
256 "mout_top0_half_bus0_pll", "mout_top0_half_bus1_pll"};
Naveen Krishna Ch532abc32014-09-22 10:17:04 +0530257
258static unsigned long top0_clk_regs[] __initdata = {
259 MUX_SEL_TOP00,
260 MUX_SEL_TOP01,
261 MUX_SEL_TOP03,
Padmavathi Venna9f930a32015-01-13 16:57:42 +0530262 MUX_SEL_TOP0_PERIC0,
Padmavathi Vennaee74b562015-01-13 16:57:41 +0530263 MUX_SEL_TOP0_PERIC1,
264 MUX_SEL_TOP0_PERIC2,
Naveen Krishna Ch532abc32014-09-22 10:17:04 +0530265 MUX_SEL_TOP0_PERIC3,
266 DIV_TOP03,
Padmavathi Venna9f930a32015-01-13 16:57:42 +0530267 DIV_TOP0_PERIC0,
Padmavathi Vennaee74b562015-01-13 16:57:41 +0530268 DIV_TOP0_PERIC1,
269 DIV_TOP0_PERIC2,
Naveen Krishna Ch532abc32014-09-22 10:17:04 +0530270 DIV_TOP0_PERIC3,
Padmavathi Venna9f930a32015-01-13 16:57:42 +0530271 ENABLE_SCLK_TOP0_PERIC0,
Padmavathi Vennaee74b562015-01-13 16:57:41 +0530272 ENABLE_SCLK_TOP0_PERIC1,
273 ENABLE_SCLK_TOP0_PERIC2,
Naveen Krishna Ch532abc32014-09-22 10:17:04 +0530274 ENABLE_SCLK_TOP0_PERIC3,
275};
276
277static struct samsung_mux_clock top0_mux_clks[] __initdata = {
Padmavathi Venna9f930a32015-01-13 16:57:42 +0530278 MUX(0, "mout_top0_aud_pll", mout_aud_pll_p, MUX_SEL_TOP00, 0, 1),
Naveen Krishna Ch532abc32014-09-22 10:17:04 +0530279 MUX(0, "mout_top0_mfc_pll", mout_mfc_pll_p, MUX_SEL_TOP00, 4, 1),
280 MUX(0, "mout_top0_cc_pll", mout_cc_pll_p, MUX_SEL_TOP00, 8, 1),
281 MUX(0, "mout_top0_bus1_pll", mout_bus1_pll_p, MUX_SEL_TOP00, 12, 1),
282 MUX(0, "mout_top0_bus0_pll", mout_bus0_pll_p, MUX_SEL_TOP00, 16, 1),
283
284 MUX(0, "mout_top0_half_mfc_pll", mout_top0_half_mfc_pll_p,
285 MUX_SEL_TOP01, 4, 1),
286 MUX(0, "mout_top0_half_cc_pll", mout_top0_half_cc_pll_p,
287 MUX_SEL_TOP01, 8, 1),
288 MUX(0, "mout_top0_half_bus1_pll", mout_top0_half_bus1_pll_p,
289 MUX_SEL_TOP01, 12, 1),
290 MUX(0, "mout_top0_half_bus0_pll", mout_top0_half_bus0_pll_p,
291 MUX_SEL_TOP01, 16, 1),
292
293 MUX(0, "mout_aclk_peric1_66", mout_top0_group1, MUX_SEL_TOP03, 12, 2),
294 MUX(0, "mout_aclk_peric0_66", mout_top0_group1, MUX_SEL_TOP03, 20, 2),
295
Padmavathi Venna9f930a32015-01-13 16:57:42 +0530296 MUX(0, "mout_sclk_spdif", mout_top0_group3, MUX_SEL_TOP0_PERIC0, 4, 3),
297 MUX(0, "mout_sclk_pcm1", mout_top0_group4, MUX_SEL_TOP0_PERIC0, 8, 2),
298 MUX(0, "mout_sclk_i2s1", mout_top0_group4, MUX_SEL_TOP0_PERIC0, 20, 2),
299
Padmavathi Vennaee74b562015-01-13 16:57:41 +0530300 MUX(0, "mout_sclk_spi1", mout_top0_group1, MUX_SEL_TOP0_PERIC1, 8, 2),
301 MUX(0, "mout_sclk_spi0", mout_top0_group1, MUX_SEL_TOP0_PERIC1, 20, 2),
302
303 MUX(0, "mout_sclk_spi3", mout_top0_group1, MUX_SEL_TOP0_PERIC2, 8, 2),
304 MUX(0, "mout_sclk_spi2", mout_top0_group1, MUX_SEL_TOP0_PERIC2, 20, 2),
Naveen Krishna Ch532abc32014-09-22 10:17:04 +0530305 MUX(0, "mout_sclk_uart3", mout_top0_group1, MUX_SEL_TOP0_PERIC3, 4, 2),
306 MUX(0, "mout_sclk_uart2", mout_top0_group1, MUX_SEL_TOP0_PERIC3, 8, 2),
307 MUX(0, "mout_sclk_uart1", mout_top0_group1, MUX_SEL_TOP0_PERIC3, 12, 2),
308 MUX(0, "mout_sclk_uart0", mout_top0_group1, MUX_SEL_TOP0_PERIC3, 16, 2),
Padmavathi Vennaee74b562015-01-13 16:57:41 +0530309 MUX(0, "mout_sclk_spi4", mout_top0_group1, MUX_SEL_TOP0_PERIC3, 20, 2),
Naveen Krishna Ch532abc32014-09-22 10:17:04 +0530310};
311
312static struct samsung_div_clock top0_div_clks[] __initdata = {
313 DIV(DOUT_ACLK_PERIC1, "dout_aclk_peric1_66", "mout_aclk_peric1_66",
314 DIV_TOP03, 12, 6),
315 DIV(DOUT_ACLK_PERIC0, "dout_aclk_peric0_66", "mout_aclk_peric0_66",
316 DIV_TOP03, 20, 6),
317
Padmavathi Venna9f930a32015-01-13 16:57:42 +0530318 DIV(0, "dout_sclk_spdif", "mout_sclk_spdif", DIV_TOP0_PERIC0, 4, 4),
319 DIV(0, "dout_sclk_pcm1", "mout_sclk_pcm1", DIV_TOP0_PERIC0, 8, 12),
320 DIV(0, "dout_sclk_i2s1", "mout_sclk_i2s1", DIV_TOP0_PERIC0, 20, 10),
321
Padmavathi Vennaee74b562015-01-13 16:57:41 +0530322 DIV(0, "dout_sclk_spi1", "mout_sclk_spi1", DIV_TOP0_PERIC1, 8, 12),
323 DIV(0, "dout_sclk_spi0", "mout_sclk_spi0", DIV_TOP0_PERIC1, 20, 12),
324
325 DIV(0, "dout_sclk_spi3", "mout_sclk_spi3", DIV_TOP0_PERIC2, 8, 12),
326 DIV(0, "dout_sclk_spi2", "mout_sclk_spi2", DIV_TOP0_PERIC2, 20, 12),
327
Naveen Krishna Ch532abc32014-09-22 10:17:04 +0530328 DIV(0, "dout_sclk_uart3", "mout_sclk_uart3", DIV_TOP0_PERIC3, 4, 4),
329 DIV(0, "dout_sclk_uart2", "mout_sclk_uart2", DIV_TOP0_PERIC3, 8, 4),
330 DIV(0, "dout_sclk_uart1", "mout_sclk_uart1", DIV_TOP0_PERIC3, 12, 4),
331 DIV(0, "dout_sclk_uart0", "mout_sclk_uart0", DIV_TOP0_PERIC3, 16, 4),
Padmavathi Vennaee74b562015-01-13 16:57:41 +0530332 DIV(0, "dout_sclk_spi4", "mout_sclk_spi4", DIV_TOP0_PERIC3, 20, 12),
Naveen Krishna Ch532abc32014-09-22 10:17:04 +0530333};
334
335static struct samsung_gate_clock top0_gate_clks[] __initdata = {
Padmavathi Venna9f930a32015-01-13 16:57:42 +0530336 GATE(CLK_SCLK_SPDIF, "sclk_spdif", "dout_sclk_spdif",
337 ENABLE_SCLK_TOP0_PERIC0, 4, CLK_SET_RATE_PARENT, 0),
338 GATE(CLK_SCLK_PCM1, "sclk_pcm1", "dout_sclk_pcm1",
339 ENABLE_SCLK_TOP0_PERIC0, 8, CLK_SET_RATE_PARENT, 0),
340 GATE(CLK_SCLK_I2S1, "sclk_i2s1", "dout_sclk_i2s1",
341 ENABLE_SCLK_TOP0_PERIC0, 20, CLK_SET_RATE_PARENT, 0),
342
Padmavathi Vennaee74b562015-01-13 16:57:41 +0530343 GATE(CLK_SCLK_SPI1, "sclk_spi1", "dout_sclk_spi1",
344 ENABLE_SCLK_TOP0_PERIC1, 8, CLK_SET_RATE_PARENT, 0),
345 GATE(CLK_SCLK_SPI0, "sclk_spi0", "dout_sclk_spi0",
346 ENABLE_SCLK_TOP0_PERIC1, 20, CLK_SET_RATE_PARENT, 0),
347
348 GATE(CLK_SCLK_SPI3, "sclk_spi3", "dout_sclk_spi3",
349 ENABLE_SCLK_TOP0_PERIC2, 8, CLK_SET_RATE_PARENT, 0),
350 GATE(CLK_SCLK_SPI2, "sclk_spi2", "dout_sclk_spi2",
351 ENABLE_SCLK_TOP0_PERIC2, 20, CLK_SET_RATE_PARENT, 0),
Naveen Krishna Ch532abc32014-09-22 10:17:04 +0530352 GATE(CLK_SCLK_UART3, "sclk_uart3", "dout_sclk_uart3",
353 ENABLE_SCLK_TOP0_PERIC3, 4, 0, 0),
354 GATE(CLK_SCLK_UART2, "sclk_uart2", "dout_sclk_uart2",
355 ENABLE_SCLK_TOP0_PERIC3, 8, 0, 0),
356 GATE(CLK_SCLK_UART1, "sclk_uart1", "dout_sclk_uart1",
357 ENABLE_SCLK_TOP0_PERIC3, 12, 0, 0),
358 GATE(CLK_SCLK_UART0, "sclk_uart0", "dout_sclk_uart0",
359 ENABLE_SCLK_TOP0_PERIC3, 16, 0, 0),
Padmavathi Vennaee74b562015-01-13 16:57:41 +0530360 GATE(CLK_SCLK_SPI4, "sclk_spi4", "dout_sclk_spi4",
361 ENABLE_SCLK_TOP0_PERIC3, 20, CLK_SET_RATE_PARENT, 0),
Naveen Krishna Ch532abc32014-09-22 10:17:04 +0530362};
363
364static struct samsung_fixed_factor_clock top0_fixed_factor_clks[] __initdata = {
365 FFACTOR(0, "ffac_top0_bus0_pll_div2", "mout_top0_bus0_pll", 1, 2, 0),
366 FFACTOR(0, "ffac_top0_bus1_pll_div2", "mout_top0_bus1_pll", 1, 2, 0),
367 FFACTOR(0, "ffac_top0_cc_pll_div2", "mout_top0_cc_pll", 1, 2, 0),
368 FFACTOR(0, "ffac_top0_mfc_pll_div2", "mout_top0_mfc_pll", 1, 2, 0),
369};
370
371static struct samsung_cmu_info top0_cmu_info __initdata = {
372 .mux_clks = top0_mux_clks,
373 .nr_mux_clks = ARRAY_SIZE(top0_mux_clks),
374 .div_clks = top0_div_clks,
375 .nr_div_clks = ARRAY_SIZE(top0_div_clks),
376 .gate_clks = top0_gate_clks,
377 .nr_gate_clks = ARRAY_SIZE(top0_gate_clks),
378 .fixed_factor_clks = top0_fixed_factor_clks,
379 .nr_fixed_factor_clks = ARRAY_SIZE(top0_fixed_factor_clks),
380 .nr_clk_ids = TOP0_NR_CLK,
381 .clk_regs = top0_clk_regs,
382 .nr_clk_regs = ARRAY_SIZE(top0_clk_regs),
383};
384
385static void __init exynos7_clk_top0_init(struct device_node *np)
386{
387 samsung_cmu_register_one(np, &top0_cmu_info);
388}
389
390CLK_OF_DECLARE(exynos7_clk_top0, "samsung,exynos7-clock-top0",
391 exynos7_clk_top0_init);
392
Naveen Krishna Ch6d0c8c72014-10-21 11:13:52 +0530393/* Register Offset definitions for CMU_TOP1 (0x105E0000) */
394#define MUX_SEL_TOP10 0x0200
395#define MUX_SEL_TOP11 0x0204
396#define MUX_SEL_TOP13 0x020C
397#define MUX_SEL_TOP1_FSYS0 0x0224
398#define MUX_SEL_TOP1_FSYS1 0x0228
Alim Akhtarcfc75882015-08-26 09:00:42 +0530399#define MUX_SEL_TOP1_FSYS11 0x022C
Naveen Krishna Ch6d0c8c72014-10-21 11:13:52 +0530400#define DIV_TOP13 0x060C
401#define DIV_TOP1_FSYS0 0x0624
402#define DIV_TOP1_FSYS1 0x0628
Alim Akhtarcfc75882015-08-26 09:00:42 +0530403#define DIV_TOP1_FSYS11 0x062C
Naveen Krishna Ch6d0c8c72014-10-21 11:13:52 +0530404#define ENABLE_ACLK_TOP13 0x080C
405#define ENABLE_SCLK_TOP1_FSYS0 0x0A24
406#define ENABLE_SCLK_TOP1_FSYS1 0x0A28
Alim Akhtarcfc75882015-08-26 09:00:42 +0530407#define ENABLE_SCLK_TOP1_FSYS11 0x0A2C
Naveen Krishna Ch6d0c8c72014-10-21 11:13:52 +0530408
409/* List of parent clocks for Muxes in CMU_TOP1 */
410PNAME(mout_top1_bus0_pll_p) = { "fin_pll", "dout_sclk_bus0_pll" };
411PNAME(mout_top1_bus1_pll_p) = { "fin_pll", "dout_sclk_bus1_pll_b" };
412PNAME(mout_top1_cc_pll_p) = { "fin_pll", "dout_sclk_cc_pll_b" };
413PNAME(mout_top1_mfc_pll_p) = { "fin_pll", "dout_sclk_mfc_pll_b" };
414
415PNAME(mout_top1_half_bus0_pll_p) = {"mout_top1_bus0_pll",
416 "ffac_top1_bus0_pll_div2"};
417PNAME(mout_top1_half_bus1_pll_p) = {"mout_top1_bus1_pll",
418 "ffac_top1_bus1_pll_div2"};
419PNAME(mout_top1_half_cc_pll_p) = {"mout_top1_cc_pll",
420 "ffac_top1_cc_pll_div2"};
421PNAME(mout_top1_half_mfc_pll_p) = {"mout_top1_mfc_pll",
422 "ffac_top1_mfc_pll_div2"};
423
424PNAME(mout_top1_group1) = {"mout_top1_half_bus0_pll",
425 "mout_top1_half_bus1_pll", "mout_top1_half_cc_pll",
426 "mout_top1_half_mfc_pll"};
427
428static unsigned long top1_clk_regs[] __initdata = {
429 MUX_SEL_TOP10,
430 MUX_SEL_TOP11,
431 MUX_SEL_TOP13,
432 MUX_SEL_TOP1_FSYS0,
433 MUX_SEL_TOP1_FSYS1,
Alim Akhtarcfc75882015-08-26 09:00:42 +0530434 MUX_SEL_TOP1_FSYS11,
Naveen Krishna Ch6d0c8c72014-10-21 11:13:52 +0530435 DIV_TOP13,
436 DIV_TOP1_FSYS0,
437 DIV_TOP1_FSYS1,
Alim Akhtarcfc75882015-08-26 09:00:42 +0530438 DIV_TOP1_FSYS11,
Naveen Krishna Ch6d0c8c72014-10-21 11:13:52 +0530439 ENABLE_ACLK_TOP13,
440 ENABLE_SCLK_TOP1_FSYS0,
441 ENABLE_SCLK_TOP1_FSYS1,
Alim Akhtarcfc75882015-08-26 09:00:42 +0530442 ENABLE_SCLK_TOP1_FSYS11,
Naveen Krishna Ch6d0c8c72014-10-21 11:13:52 +0530443};
444
445static struct samsung_mux_clock top1_mux_clks[] __initdata = {
446 MUX(0, "mout_top1_mfc_pll", mout_top1_mfc_pll_p, MUX_SEL_TOP10, 4, 1),
447 MUX(0, "mout_top1_cc_pll", mout_top1_cc_pll_p, MUX_SEL_TOP10, 8, 1),
448 MUX(0, "mout_top1_bus1_pll", mout_top1_bus1_pll_p,
449 MUX_SEL_TOP10, 12, 1),
450 MUX(0, "mout_top1_bus0_pll", mout_top1_bus0_pll_p,
451 MUX_SEL_TOP10, 16, 1),
452
453 MUX(0, "mout_top1_half_mfc_pll", mout_top1_half_mfc_pll_p,
454 MUX_SEL_TOP11, 4, 1),
455 MUX(0, "mout_top1_half_cc_pll", mout_top1_half_cc_pll_p,
456 MUX_SEL_TOP11, 8, 1),
457 MUX(0, "mout_top1_half_bus1_pll", mout_top1_half_bus1_pll_p,
458 MUX_SEL_TOP11, 12, 1),
459 MUX(0, "mout_top1_half_bus0_pll", mout_top1_half_bus0_pll_p,
460 MUX_SEL_TOP11, 16, 1),
461
462 MUX(0, "mout_aclk_fsys1_200", mout_top1_group1, MUX_SEL_TOP13, 24, 2),
463 MUX(0, "mout_aclk_fsys0_200", mout_top1_group1, MUX_SEL_TOP13, 28, 2),
464
Alim Akhtarcfc75882015-08-26 09:00:42 +0530465 MUX(0, "mout_sclk_mmc2", mout_top1_group1, MUX_SEL_TOP1_FSYS0, 16, 2),
Vivek Gautam83f191a2014-11-21 19:05:51 +0530466 MUX(0, "mout_sclk_usbdrd300", mout_top1_group1,
467 MUX_SEL_TOP1_FSYS0, 28, 2),
Naveen Krishna Ch6d0c8c72014-10-21 11:13:52 +0530468
Alim Akhtarcfc75882015-08-26 09:00:42 +0530469 MUX(0, "mout_sclk_mmc1", mout_top1_group1, MUX_SEL_TOP1_FSYS11, 0, 2),
470 MUX(0, "mout_sclk_mmc0", mout_top1_group1, MUX_SEL_TOP1_FSYS11, 12, 2),
Naveen Krishna Ch6d0c8c72014-10-21 11:13:52 +0530471};
472
473static struct samsung_div_clock top1_div_clks[] __initdata = {
474 DIV(DOUT_ACLK_FSYS1_200, "dout_aclk_fsys1_200", "mout_aclk_fsys1_200",
475 DIV_TOP13, 24, 4),
476 DIV(DOUT_ACLK_FSYS0_200, "dout_aclk_fsys0_200", "mout_aclk_fsys0_200",
477 DIV_TOP13, 28, 4),
478
479 DIV(DOUT_SCLK_MMC2, "dout_sclk_mmc2", "mout_sclk_mmc2",
Alim Akhtarcfc75882015-08-26 09:00:42 +0530480 DIV_TOP1_FSYS0, 16, 10),
Vivek Gautam83f191a2014-11-21 19:05:51 +0530481 DIV(0, "dout_sclk_usbdrd300", "mout_sclk_usbdrd300",
482 DIV_TOP1_FSYS0, 28, 4),
Naveen Krishna Ch6d0c8c72014-10-21 11:13:52 +0530483
484 DIV(DOUT_SCLK_MMC1, "dout_sclk_mmc1", "mout_sclk_mmc1",
Alim Akhtarcfc75882015-08-26 09:00:42 +0530485 DIV_TOP1_FSYS11, 0, 10),
Naveen Krishna Ch6d0c8c72014-10-21 11:13:52 +0530486 DIV(DOUT_SCLK_MMC0, "dout_sclk_mmc0", "mout_sclk_mmc0",
Alim Akhtarcfc75882015-08-26 09:00:42 +0530487 DIV_TOP1_FSYS11, 12, 10),
Naveen Krishna Ch6d0c8c72014-10-21 11:13:52 +0530488};
489
490static struct samsung_gate_clock top1_gate_clks[] __initdata = {
491 GATE(CLK_SCLK_MMC2, "sclk_mmc2", "dout_sclk_mmc2",
Alim Akhtarcfc75882015-08-26 09:00:42 +0530492 ENABLE_SCLK_TOP1_FSYS0, 16, CLK_SET_RATE_PARENT, 0),
Vivek Gautam83f191a2014-11-21 19:05:51 +0530493 GATE(0, "sclk_usbdrd300", "dout_sclk_usbdrd300",
494 ENABLE_SCLK_TOP1_FSYS0, 28, 0, 0),
Naveen Krishna Ch6d0c8c72014-10-21 11:13:52 +0530495
496 GATE(CLK_SCLK_MMC1, "sclk_mmc1", "dout_sclk_mmc1",
Alim Akhtarcfc75882015-08-26 09:00:42 +0530497 ENABLE_SCLK_TOP1_FSYS11, 0, CLK_SET_RATE_PARENT, 0),
Naveen Krishna Ch6d0c8c72014-10-21 11:13:52 +0530498 GATE(CLK_SCLK_MMC0, "sclk_mmc0", "dout_sclk_mmc0",
Alim Akhtarcfc75882015-08-26 09:00:42 +0530499 ENABLE_SCLK_TOP1_FSYS11, 12, CLK_SET_RATE_PARENT, 0),
Naveen Krishna Ch6d0c8c72014-10-21 11:13:52 +0530500};
501
502static struct samsung_fixed_factor_clock top1_fixed_factor_clks[] __initdata = {
503 FFACTOR(0, "ffac_top1_bus0_pll_div2", "mout_top1_bus0_pll", 1, 2, 0),
504 FFACTOR(0, "ffac_top1_bus1_pll_div2", "mout_top1_bus1_pll", 1, 2, 0),
505 FFACTOR(0, "ffac_top1_cc_pll_div2", "mout_top1_cc_pll", 1, 2, 0),
506 FFACTOR(0, "ffac_top1_mfc_pll_div2", "mout_top1_mfc_pll", 1, 2, 0),
507};
508
509static struct samsung_cmu_info top1_cmu_info __initdata = {
510 .mux_clks = top1_mux_clks,
511 .nr_mux_clks = ARRAY_SIZE(top1_mux_clks),
512 .div_clks = top1_div_clks,
513 .nr_div_clks = ARRAY_SIZE(top1_div_clks),
514 .gate_clks = top1_gate_clks,
515 .nr_gate_clks = ARRAY_SIZE(top1_gate_clks),
516 .fixed_factor_clks = top1_fixed_factor_clks,
517 .nr_fixed_factor_clks = ARRAY_SIZE(top1_fixed_factor_clks),
518 .nr_clk_ids = TOP1_NR_CLK,
519 .clk_regs = top1_clk_regs,
520 .nr_clk_regs = ARRAY_SIZE(top1_clk_regs),
521};
522
523static void __init exynos7_clk_top1_init(struct device_node *np)
524{
525 samsung_cmu_register_one(np, &top1_cmu_info);
526}
527
528CLK_OF_DECLARE(exynos7_clk_top1, "samsung,exynos7-clock-top1",
529 exynos7_clk_top1_init);
530
Naveen Krishna Chf5e127c2014-10-28 16:48:53 +0530531/* Register Offset definitions for CMU_CCORE (0x105B0000) */
532#define MUX_SEL_CCORE 0x0200
533#define DIV_CCORE 0x0600
534#define ENABLE_ACLK_CCORE0 0x0800
535#define ENABLE_ACLK_CCORE1 0x0804
536#define ENABLE_PCLK_CCORE 0x0900
537
538/*
539 * List of parent clocks for Muxes in CMU_CCORE
540 */
541PNAME(mout_aclk_ccore_133_p) = { "fin_pll", "dout_aclk_ccore_133" };
542
543static unsigned long ccore_clk_regs[] __initdata = {
544 MUX_SEL_CCORE,
545 ENABLE_PCLK_CCORE,
546};
547
548static struct samsung_mux_clock ccore_mux_clks[] __initdata = {
549 MUX(0, "mout_aclk_ccore_133_user", mout_aclk_ccore_133_p,
550 MUX_SEL_CCORE, 1, 1),
551};
552
553static struct samsung_gate_clock ccore_gate_clks[] __initdata = {
554 GATE(PCLK_RTC, "pclk_rtc", "mout_aclk_ccore_133_user",
555 ENABLE_PCLK_CCORE, 8, 0, 0),
556};
557
558static struct samsung_cmu_info ccore_cmu_info __initdata = {
559 .mux_clks = ccore_mux_clks,
560 .nr_mux_clks = ARRAY_SIZE(ccore_mux_clks),
561 .gate_clks = ccore_gate_clks,
562 .nr_gate_clks = ARRAY_SIZE(ccore_gate_clks),
563 .nr_clk_ids = CCORE_NR_CLK,
564 .clk_regs = ccore_clk_regs,
565 .nr_clk_regs = ARRAY_SIZE(ccore_clk_regs),
566};
567
568static void __init exynos7_clk_ccore_init(struct device_node *np)
569{
570 samsung_cmu_register_one(np, &ccore_cmu_info);
571}
572
573CLK_OF_DECLARE(exynos7_clk_ccore, "samsung,exynos7-clock-ccore",
574 exynos7_clk_ccore_init);
575
Naveen Krishna Ch532abc32014-09-22 10:17:04 +0530576/* Register Offset definitions for CMU_PERIC0 (0x13610000) */
577#define MUX_SEL_PERIC0 0x0200
578#define ENABLE_PCLK_PERIC0 0x0900
579#define ENABLE_SCLK_PERIC0 0x0A00
580
581/* List of parent clocks for Muxes in CMU_PERIC0 */
582PNAME(mout_aclk_peric0_66_p) = { "fin_pll", "dout_aclk_peric0_66" };
583PNAME(mout_sclk_uart0_p) = { "fin_pll", "sclk_uart0" };
584
585static unsigned long peric0_clk_regs[] __initdata = {
586 MUX_SEL_PERIC0,
587 ENABLE_PCLK_PERIC0,
588 ENABLE_SCLK_PERIC0,
589};
590
591static struct samsung_mux_clock peric0_mux_clks[] __initdata = {
592 MUX(0, "mout_aclk_peric0_66_user", mout_aclk_peric0_66_p,
593 MUX_SEL_PERIC0, 0, 1),
594 MUX(0, "mout_sclk_uart0_user", mout_sclk_uart0_p,
595 MUX_SEL_PERIC0, 16, 1),
596};
597
598static struct samsung_gate_clock peric0_gate_clks[] __initdata = {
Naveen Krishna Ch57a2b482014-10-21 11:13:51 +0530599 GATE(PCLK_HSI2C0, "pclk_hsi2c0", "mout_aclk_peric0_66_user",
600 ENABLE_PCLK_PERIC0, 8, 0, 0),
601 GATE(PCLK_HSI2C1, "pclk_hsi2c1", "mout_aclk_peric0_66_user",
602 ENABLE_PCLK_PERIC0, 9, 0, 0),
603 GATE(PCLK_HSI2C4, "pclk_hsi2c4", "mout_aclk_peric0_66_user",
604 ENABLE_PCLK_PERIC0, 10, 0, 0),
605 GATE(PCLK_HSI2C5, "pclk_hsi2c5", "mout_aclk_peric0_66_user",
606 ENABLE_PCLK_PERIC0, 11, 0, 0),
607 GATE(PCLK_HSI2C9, "pclk_hsi2c9", "mout_aclk_peric0_66_user",
608 ENABLE_PCLK_PERIC0, 12, 0, 0),
609 GATE(PCLK_HSI2C10, "pclk_hsi2c10", "mout_aclk_peric0_66_user",
610 ENABLE_PCLK_PERIC0, 13, 0, 0),
611 GATE(PCLK_HSI2C11, "pclk_hsi2c11", "mout_aclk_peric0_66_user",
612 ENABLE_PCLK_PERIC0, 14, 0, 0),
Naveen Krishna Ch532abc32014-09-22 10:17:04 +0530613 GATE(PCLK_UART0, "pclk_uart0", "mout_aclk_peric0_66_user",
614 ENABLE_PCLK_PERIC0, 16, 0, 0),
Abhilash Kesavan932e9822014-10-28 16:48:55 +0530615 GATE(PCLK_ADCIF, "pclk_adcif", "mout_aclk_peric0_66_user",
616 ENABLE_PCLK_PERIC0, 20, 0, 0),
Naveen Krishna Ch2ab2dfe2014-10-28 16:48:54 +0530617 GATE(PCLK_PWM, "pclk_pwm", "mout_aclk_peric0_66_user",
618 ENABLE_PCLK_PERIC0, 21, 0, 0),
Naveen Krishna Ch532abc32014-09-22 10:17:04 +0530619
620 GATE(SCLK_UART0, "sclk_uart0_user", "mout_sclk_uart0_user",
621 ENABLE_SCLK_PERIC0, 16, 0, 0),
Naveen Krishna Ch2ab2dfe2014-10-28 16:48:54 +0530622 GATE(SCLK_PWM, "sclk_pwm", "fin_pll", ENABLE_SCLK_PERIC0, 21, 0, 0),
Naveen Krishna Ch532abc32014-09-22 10:17:04 +0530623};
624
625static struct samsung_cmu_info peric0_cmu_info __initdata = {
626 .mux_clks = peric0_mux_clks,
627 .nr_mux_clks = ARRAY_SIZE(peric0_mux_clks),
628 .gate_clks = peric0_gate_clks,
629 .nr_gate_clks = ARRAY_SIZE(peric0_gate_clks),
630 .nr_clk_ids = PERIC0_NR_CLK,
631 .clk_regs = peric0_clk_regs,
632 .nr_clk_regs = ARRAY_SIZE(peric0_clk_regs),
633};
634
635static void __init exynos7_clk_peric0_init(struct device_node *np)
636{
637 samsung_cmu_register_one(np, &peric0_cmu_info);
638}
639
640/* Register Offset definitions for CMU_PERIC1 (0x14C80000) */
641#define MUX_SEL_PERIC10 0x0200
642#define MUX_SEL_PERIC11 0x0204
Padmavathi Vennaee74b562015-01-13 16:57:41 +0530643#define MUX_SEL_PERIC12 0x0208
Naveen Krishna Ch532abc32014-09-22 10:17:04 +0530644#define ENABLE_PCLK_PERIC1 0x0900
645#define ENABLE_SCLK_PERIC10 0x0A00
646
647CLK_OF_DECLARE(exynos7_clk_peric0, "samsung,exynos7-clock-peric0",
648 exynos7_clk_peric0_init);
649
650/* List of parent clocks for Muxes in CMU_PERIC1 */
651PNAME(mout_aclk_peric1_66_p) = { "fin_pll", "dout_aclk_peric1_66" };
652PNAME(mout_sclk_uart1_p) = { "fin_pll", "sclk_uart1" };
653PNAME(mout_sclk_uart2_p) = { "fin_pll", "sclk_uart2" };
654PNAME(mout_sclk_uart3_p) = { "fin_pll", "sclk_uart3" };
Padmavathi Vennaee74b562015-01-13 16:57:41 +0530655PNAME(mout_sclk_spi0_p) = { "fin_pll", "sclk_spi0" };
656PNAME(mout_sclk_spi1_p) = { "fin_pll", "sclk_spi1" };
657PNAME(mout_sclk_spi2_p) = { "fin_pll", "sclk_spi2" };
658PNAME(mout_sclk_spi3_p) = { "fin_pll", "sclk_spi3" };
659PNAME(mout_sclk_spi4_p) = { "fin_pll", "sclk_spi4" };
Naveen Krishna Ch532abc32014-09-22 10:17:04 +0530660
661static unsigned long peric1_clk_regs[] __initdata = {
662 MUX_SEL_PERIC10,
663 MUX_SEL_PERIC11,
Padmavathi Vennaee74b562015-01-13 16:57:41 +0530664 MUX_SEL_PERIC12,
Naveen Krishna Ch532abc32014-09-22 10:17:04 +0530665 ENABLE_PCLK_PERIC1,
666 ENABLE_SCLK_PERIC10,
667};
668
669static struct samsung_mux_clock peric1_mux_clks[] __initdata = {
670 MUX(0, "mout_aclk_peric1_66_user", mout_aclk_peric1_66_p,
671 MUX_SEL_PERIC10, 0, 1),
672
Padmavathi Vennaee74b562015-01-13 16:57:41 +0530673 MUX_F(0, "mout_sclk_spi0_user", mout_sclk_spi0_p,
674 MUX_SEL_PERIC11, 0, 1, CLK_SET_RATE_PARENT, 0),
675 MUX_F(0, "mout_sclk_spi1_user", mout_sclk_spi1_p,
676 MUX_SEL_PERIC11, 4, 1, CLK_SET_RATE_PARENT, 0),
677 MUX_F(0, "mout_sclk_spi2_user", mout_sclk_spi2_p,
678 MUX_SEL_PERIC11, 8, 1, CLK_SET_RATE_PARENT, 0),
679 MUX_F(0, "mout_sclk_spi3_user", mout_sclk_spi3_p,
680 MUX_SEL_PERIC11, 12, 1, CLK_SET_RATE_PARENT, 0),
681 MUX_F(0, "mout_sclk_spi4_user", mout_sclk_spi4_p,
682 MUX_SEL_PERIC11, 16, 1, CLK_SET_RATE_PARENT, 0),
Naveen Krishna Ch532abc32014-09-22 10:17:04 +0530683 MUX(0, "mout_sclk_uart1_user", mout_sclk_uart1_p,
684 MUX_SEL_PERIC11, 20, 1),
685 MUX(0, "mout_sclk_uart2_user", mout_sclk_uart2_p,
686 MUX_SEL_PERIC11, 24, 1),
687 MUX(0, "mout_sclk_uart3_user", mout_sclk_uart3_p,
688 MUX_SEL_PERIC11, 28, 1),
689};
690
691static struct samsung_gate_clock peric1_gate_clks[] __initdata = {
Naveen Krishna Ch57a2b482014-10-21 11:13:51 +0530692 GATE(PCLK_HSI2C2, "pclk_hsi2c2", "mout_aclk_peric1_66_user",
693 ENABLE_PCLK_PERIC1, 4, 0, 0),
694 GATE(PCLK_HSI2C3, "pclk_hsi2c3", "mout_aclk_peric1_66_user",
695 ENABLE_PCLK_PERIC1, 5, 0, 0),
696 GATE(PCLK_HSI2C6, "pclk_hsi2c6", "mout_aclk_peric1_66_user",
697 ENABLE_PCLK_PERIC1, 6, 0, 0),
698 GATE(PCLK_HSI2C7, "pclk_hsi2c7", "mout_aclk_peric1_66_user",
699 ENABLE_PCLK_PERIC1, 7, 0, 0),
700 GATE(PCLK_HSI2C8, "pclk_hsi2c8", "mout_aclk_peric1_66_user",
701 ENABLE_PCLK_PERIC1, 8, 0, 0),
Naveen Krishna Ch532abc32014-09-22 10:17:04 +0530702 GATE(PCLK_UART1, "pclk_uart1", "mout_aclk_peric1_66_user",
703 ENABLE_PCLK_PERIC1, 9, 0, 0),
704 GATE(PCLK_UART2, "pclk_uart2", "mout_aclk_peric1_66_user",
705 ENABLE_PCLK_PERIC1, 10, 0, 0),
706 GATE(PCLK_UART3, "pclk_uart3", "mout_aclk_peric1_66_user",
707 ENABLE_PCLK_PERIC1, 11, 0, 0),
Padmavathi Vennaee74b562015-01-13 16:57:41 +0530708 GATE(PCLK_SPI0, "pclk_spi0", "mout_aclk_peric1_66_user",
709 ENABLE_PCLK_PERIC1, 12, 0, 0),
710 GATE(PCLK_SPI1, "pclk_spi1", "mout_aclk_peric1_66_user",
711 ENABLE_PCLK_PERIC1, 13, 0, 0),
712 GATE(PCLK_SPI2, "pclk_spi2", "mout_aclk_peric1_66_user",
713 ENABLE_PCLK_PERIC1, 14, 0, 0),
714 GATE(PCLK_SPI3, "pclk_spi3", "mout_aclk_peric1_66_user",
715 ENABLE_PCLK_PERIC1, 15, 0, 0),
716 GATE(PCLK_SPI4, "pclk_spi4", "mout_aclk_peric1_66_user",
717 ENABLE_PCLK_PERIC1, 16, 0, 0),
Padmavathi Venna9f930a32015-01-13 16:57:42 +0530718 GATE(PCLK_I2S1, "pclk_i2s1", "mout_aclk_peric1_66_user",
719 ENABLE_PCLK_PERIC1, 17, CLK_SET_RATE_PARENT, 0),
720 GATE(PCLK_PCM1, "pclk_pcm1", "mout_aclk_peric1_66_user",
721 ENABLE_PCLK_PERIC1, 18, 0, 0),
722 GATE(PCLK_SPDIF, "pclk_spdif", "mout_aclk_peric1_66_user",
723 ENABLE_PCLK_PERIC1, 19, 0, 0),
Naveen Krishna Ch532abc32014-09-22 10:17:04 +0530724
725 GATE(SCLK_UART1, "sclk_uart1_user", "mout_sclk_uart1_user",
726 ENABLE_SCLK_PERIC10, 9, 0, 0),
727 GATE(SCLK_UART2, "sclk_uart2_user", "mout_sclk_uart2_user",
728 ENABLE_SCLK_PERIC10, 10, 0, 0),
729 GATE(SCLK_UART3, "sclk_uart3_user", "mout_sclk_uart3_user",
730 ENABLE_SCLK_PERIC10, 11, 0, 0),
Padmavathi Vennaee74b562015-01-13 16:57:41 +0530731 GATE(SCLK_SPI0, "sclk_spi0_user", "mout_sclk_spi0_user",
732 ENABLE_SCLK_PERIC10, 12, CLK_SET_RATE_PARENT, 0),
733 GATE(SCLK_SPI1, "sclk_spi1_user", "mout_sclk_spi1_user",
734 ENABLE_SCLK_PERIC10, 13, CLK_SET_RATE_PARENT, 0),
735 GATE(SCLK_SPI2, "sclk_spi2_user", "mout_sclk_spi2_user",
736 ENABLE_SCLK_PERIC10, 14, CLK_SET_RATE_PARENT, 0),
737 GATE(SCLK_SPI3, "sclk_spi3_user", "mout_sclk_spi3_user",
738 ENABLE_SCLK_PERIC10, 15, CLK_SET_RATE_PARENT, 0),
739 GATE(SCLK_SPI4, "sclk_spi4_user", "mout_sclk_spi4_user",
740 ENABLE_SCLK_PERIC10, 16, CLK_SET_RATE_PARENT, 0),
Padmavathi Venna9f930a32015-01-13 16:57:42 +0530741 GATE(SCLK_I2S1, "sclk_i2s1_user", "sclk_i2s1",
742 ENABLE_SCLK_PERIC10, 17, CLK_SET_RATE_PARENT, 0),
743 GATE(SCLK_PCM1, "sclk_pcm1_user", "sclk_pcm1",
744 ENABLE_SCLK_PERIC10, 18, CLK_SET_RATE_PARENT, 0),
745 GATE(SCLK_SPDIF, "sclk_spdif_user", "sclk_spdif",
746 ENABLE_SCLK_PERIC10, 19, CLK_SET_RATE_PARENT, 0),
Naveen Krishna Ch532abc32014-09-22 10:17:04 +0530747};
748
749static struct samsung_cmu_info peric1_cmu_info __initdata = {
750 .mux_clks = peric1_mux_clks,
751 .nr_mux_clks = ARRAY_SIZE(peric1_mux_clks),
752 .gate_clks = peric1_gate_clks,
753 .nr_gate_clks = ARRAY_SIZE(peric1_gate_clks),
754 .nr_clk_ids = PERIC1_NR_CLK,
755 .clk_regs = peric1_clk_regs,
756 .nr_clk_regs = ARRAY_SIZE(peric1_clk_regs),
757};
758
759static void __init exynos7_clk_peric1_init(struct device_node *np)
760{
761 samsung_cmu_register_one(np, &peric1_cmu_info);
762}
763
764CLK_OF_DECLARE(exynos7_clk_peric1, "samsung,exynos7-clock-peric1",
765 exynos7_clk_peric1_init);
766
767/* Register Offset definitions for CMU_PERIS (0x10040000) */
768#define MUX_SEL_PERIS 0x0200
Naveen Krishna Ch2ab2dfe2014-10-28 16:48:54 +0530769#define ENABLE_PCLK_PERIS 0x0900
Naveen Krishna Ch532abc32014-09-22 10:17:04 +0530770#define ENABLE_PCLK_PERIS_SECURE_CHIPID 0x0910
Naveen Krishna Ch2ab2dfe2014-10-28 16:48:54 +0530771#define ENABLE_SCLK_PERIS 0x0A00
Naveen Krishna Ch532abc32014-09-22 10:17:04 +0530772#define ENABLE_SCLK_PERIS_SECURE_CHIPID 0x0A10
773
774/* List of parent clocks for Muxes in CMU_PERIS */
775PNAME(mout_aclk_peris_66_p) = { "fin_pll", "dout_aclk_peris_66" };
776
777static unsigned long peris_clk_regs[] __initdata = {
778 MUX_SEL_PERIS,
Naveen Krishna Ch2ab2dfe2014-10-28 16:48:54 +0530779 ENABLE_PCLK_PERIS,
Naveen Krishna Ch532abc32014-09-22 10:17:04 +0530780 ENABLE_PCLK_PERIS_SECURE_CHIPID,
Naveen Krishna Ch2ab2dfe2014-10-28 16:48:54 +0530781 ENABLE_SCLK_PERIS,
Naveen Krishna Ch532abc32014-09-22 10:17:04 +0530782 ENABLE_SCLK_PERIS_SECURE_CHIPID,
783};
784
785static struct samsung_mux_clock peris_mux_clks[] __initdata = {
786 MUX(0, "mout_aclk_peris_66_user",
787 mout_aclk_peris_66_p, MUX_SEL_PERIS, 0, 1),
788};
789
790static struct samsung_gate_clock peris_gate_clks[] __initdata = {
Naveen Krishna Ch2ab2dfe2014-10-28 16:48:54 +0530791 GATE(PCLK_WDT, "pclk_wdt", "mout_aclk_peris_66_user",
792 ENABLE_PCLK_PERIS, 6, 0, 0),
793 GATE(PCLK_TMU, "pclk_tmu_apbif", "mout_aclk_peris_66_user",
794 ENABLE_PCLK_PERIS, 10, 0, 0),
795
Naveen Krishna Ch532abc32014-09-22 10:17:04 +0530796 GATE(PCLK_CHIPID, "pclk_chipid", "mout_aclk_peris_66_user",
797 ENABLE_PCLK_PERIS_SECURE_CHIPID, 0, 0, 0),
798 GATE(SCLK_CHIPID, "sclk_chipid", "fin_pll",
799 ENABLE_SCLK_PERIS_SECURE_CHIPID, 0, 0, 0),
Naveen Krishna Ch2ab2dfe2014-10-28 16:48:54 +0530800
801 GATE(SCLK_TMU, "sclk_tmu", "fin_pll", ENABLE_SCLK_PERIS, 10, 0, 0),
Naveen Krishna Ch532abc32014-09-22 10:17:04 +0530802};
803
804static struct samsung_cmu_info peris_cmu_info __initdata = {
805 .mux_clks = peris_mux_clks,
806 .nr_mux_clks = ARRAY_SIZE(peris_mux_clks),
807 .gate_clks = peris_gate_clks,
808 .nr_gate_clks = ARRAY_SIZE(peris_gate_clks),
809 .nr_clk_ids = PERIS_NR_CLK,
810 .clk_regs = peris_clk_regs,
811 .nr_clk_regs = ARRAY_SIZE(peris_clk_regs),
812};
813
814static void __init exynos7_clk_peris_init(struct device_node *np)
815{
816 samsung_cmu_register_one(np, &peris_cmu_info);
817}
818
819CLK_OF_DECLARE(exynos7_clk_peris, "samsung,exynos7-clock-peris",
820 exynos7_clk_peris_init);
Naveen Krishna Ch6d0c8c72014-10-21 11:13:52 +0530821
822/* Register Offset definitions for CMU_FSYS0 (0x10E90000) */
823#define MUX_SEL_FSYS00 0x0200
824#define MUX_SEL_FSYS01 0x0204
Vivek Gautam83f191a2014-11-21 19:05:51 +0530825#define MUX_SEL_FSYS02 0x0208
826#define ENABLE_ACLK_FSYS00 0x0800
Naveen Krishna Ch6d0c8c72014-10-21 11:13:52 +0530827#define ENABLE_ACLK_FSYS01 0x0804
Vivek Gautam83f191a2014-11-21 19:05:51 +0530828#define ENABLE_SCLK_FSYS01 0x0A04
829#define ENABLE_SCLK_FSYS02 0x0A08
830#define ENABLE_SCLK_FSYS04 0x0A10
Naveen Krishna Ch6d0c8c72014-10-21 11:13:52 +0530831
832/*
833 * List of parent clocks for Muxes in CMU_FSYS0
834 */
835PNAME(mout_aclk_fsys0_200_p) = { "fin_pll", "dout_aclk_fsys0_200" };
836PNAME(mout_sclk_mmc2_p) = { "fin_pll", "sclk_mmc2" };
837
Vivek Gautam83f191a2014-11-21 19:05:51 +0530838PNAME(mout_sclk_usbdrd300_p) = { "fin_pll", "sclk_usbdrd300" };
839PNAME(mout_phyclk_usbdrd300_udrd30_phyclk_p) = { "fin_pll",
840 "phyclk_usbdrd300_udrd30_phyclock" };
841PNAME(mout_phyclk_usbdrd300_udrd30_pipe_pclk_p) = { "fin_pll",
842 "phyclk_usbdrd300_udrd30_pipe_pclk" };
843
844/* fixed rate clocks used in the FSYS0 block */
845struct samsung_fixed_rate_clock fixed_rate_clks_fsys0[] __initdata = {
846 FRATE(0, "phyclk_usbdrd300_udrd30_phyclock", NULL,
847 CLK_IS_ROOT, 60000000),
848 FRATE(0, "phyclk_usbdrd300_udrd30_pipe_pclk", NULL,
849 CLK_IS_ROOT, 125000000),
850};
851
Naveen Krishna Ch6d0c8c72014-10-21 11:13:52 +0530852static unsigned long fsys0_clk_regs[] __initdata = {
853 MUX_SEL_FSYS00,
854 MUX_SEL_FSYS01,
Vivek Gautam83f191a2014-11-21 19:05:51 +0530855 MUX_SEL_FSYS02,
856 ENABLE_ACLK_FSYS00,
Naveen Krishna Ch6d0c8c72014-10-21 11:13:52 +0530857 ENABLE_ACLK_FSYS01,
Vivek Gautam83f191a2014-11-21 19:05:51 +0530858 ENABLE_SCLK_FSYS01,
859 ENABLE_SCLK_FSYS02,
860 ENABLE_SCLK_FSYS04,
Naveen Krishna Ch6d0c8c72014-10-21 11:13:52 +0530861};
862
863static struct samsung_mux_clock fsys0_mux_clks[] __initdata = {
864 MUX(0, "mout_aclk_fsys0_200_user", mout_aclk_fsys0_200_p,
865 MUX_SEL_FSYS00, 24, 1),
866
867 MUX(0, "mout_sclk_mmc2_user", mout_sclk_mmc2_p, MUX_SEL_FSYS01, 24, 1),
Vivek Gautam83f191a2014-11-21 19:05:51 +0530868 MUX(0, "mout_sclk_usbdrd300_user", mout_sclk_usbdrd300_p,
869 MUX_SEL_FSYS01, 28, 1),
870
871 MUX(0, "mout_phyclk_usbdrd300_udrd30_pipe_pclk_user",
872 mout_phyclk_usbdrd300_udrd30_pipe_pclk_p,
873 MUX_SEL_FSYS02, 24, 1),
874 MUX(0, "mout_phyclk_usbdrd300_udrd30_phyclk_user",
875 mout_phyclk_usbdrd300_udrd30_phyclk_p,
876 MUX_SEL_FSYS02, 28, 1),
Naveen Krishna Ch6d0c8c72014-10-21 11:13:52 +0530877};
878
879static struct samsung_gate_clock fsys0_gate_clks[] __initdata = {
Padmavathi Venna9cc2a0c92015-01-13 16:57:40 +0530880 GATE(ACLK_PDMA1, "aclk_pdma1", "mout_aclk_fsys0_200_user",
881 ENABLE_ACLK_FSYS00, 3, 0, 0),
882 GATE(ACLK_PDMA0, "aclk_pdma0", "mout_aclk_fsys0_200_user",
883 ENABLE_ACLK_FSYS00, 4, 0, 0),
Alim Akhtar7cca2e02015-08-26 09:00:43 +0530884 GATE(ACLK_AXIUS_USBDRD30X_FSYS0X, "aclk_axius_usbdrd30x_fsys0x",
885 "mout_aclk_fsys0_200_user",
886 ENABLE_ACLK_FSYS00, 19, 0, 0),
Vivek Gautam83f191a2014-11-21 19:05:51 +0530887
888 GATE(ACLK_USBDRD300, "aclk_usbdrd300", "mout_aclk_fsys0_200_user",
889 ENABLE_ACLK_FSYS01, 29, 0, 0),
Naveen Krishna Ch6d0c8c72014-10-21 11:13:52 +0530890 GATE(ACLK_MMC2, "aclk_mmc2", "mout_aclk_fsys0_200_user",
891 ENABLE_ACLK_FSYS01, 31, 0, 0),
Vivek Gautam83f191a2014-11-21 19:05:51 +0530892
893 GATE(SCLK_USBDRD300_SUSPENDCLK, "sclk_usbdrd300_suspendclk",
894 "mout_sclk_usbdrd300_user",
895 ENABLE_SCLK_FSYS01, 4, 0, 0),
896 GATE(SCLK_USBDRD300_REFCLK, "sclk_usbdrd300_refclk", "fin_pll",
897 ENABLE_SCLK_FSYS01, 8, 0, 0),
898
899 GATE(PHYCLK_USBDRD300_UDRD30_PIPE_PCLK_USER,
900 "phyclk_usbdrd300_udrd30_pipe_pclk_user",
901 "mout_phyclk_usbdrd300_udrd30_pipe_pclk_user",
902 ENABLE_SCLK_FSYS02, 24, 0, 0),
903 GATE(PHYCLK_USBDRD300_UDRD30_PHYCLK_USER,
904 "phyclk_usbdrd300_udrd30_phyclk_user",
905 "mout_phyclk_usbdrd300_udrd30_phyclk_user",
906 ENABLE_SCLK_FSYS02, 28, 0, 0),
907
908 GATE(OSCCLK_PHY_CLKOUT_USB30_PHY, "oscclk_phy_clkout_usb30_phy",
909 "fin_pll",
910 ENABLE_SCLK_FSYS04, 28, 0, 0),
Naveen Krishna Ch6d0c8c72014-10-21 11:13:52 +0530911};
912
913static struct samsung_cmu_info fsys0_cmu_info __initdata = {
914 .mux_clks = fsys0_mux_clks,
915 .nr_mux_clks = ARRAY_SIZE(fsys0_mux_clks),
916 .gate_clks = fsys0_gate_clks,
917 .nr_gate_clks = ARRAY_SIZE(fsys0_gate_clks),
Alim Akhtar7cca2e02015-08-26 09:00:43 +0530918 .nr_clk_ids = FSYS0_NR_CLK,
Naveen Krishna Ch6d0c8c72014-10-21 11:13:52 +0530919 .clk_regs = fsys0_clk_regs,
920 .nr_clk_regs = ARRAY_SIZE(fsys0_clk_regs),
921};
922
923static void __init exynos7_clk_fsys0_init(struct device_node *np)
924{
925 samsung_cmu_register_one(np, &fsys0_cmu_info);
926}
927
928CLK_OF_DECLARE(exynos7_clk_fsys0, "samsung,exynos7-clock-fsys0",
929 exynos7_clk_fsys0_init);
930
931/* Register Offset definitions for CMU_FSYS1 (0x156E0000) */
932#define MUX_SEL_FSYS10 0x0200
933#define MUX_SEL_FSYS11 0x0204
934#define ENABLE_ACLK_FSYS1 0x0800
935
936/*
937 * List of parent clocks for Muxes in CMU_FSYS1
938 */
939PNAME(mout_aclk_fsys1_200_p) = { "fin_pll", "dout_aclk_fsys1_200" };
940PNAME(mout_sclk_mmc0_p) = { "fin_pll", "sclk_mmc0" };
941PNAME(mout_sclk_mmc1_p) = { "fin_pll", "sclk_mmc1" };
942
943static unsigned long fsys1_clk_regs[] __initdata = {
944 MUX_SEL_FSYS10,
945 MUX_SEL_FSYS11,
946 ENABLE_ACLK_FSYS1,
947};
948
949static struct samsung_mux_clock fsys1_mux_clks[] __initdata = {
950 MUX(0, "mout_aclk_fsys1_200_user", mout_aclk_fsys1_200_p,
951 MUX_SEL_FSYS10, 28, 1),
952
953 MUX(0, "mout_sclk_mmc1_user", mout_sclk_mmc1_p, MUX_SEL_FSYS11, 24, 1),
954 MUX(0, "mout_sclk_mmc0_user", mout_sclk_mmc0_p, MUX_SEL_FSYS11, 28, 1),
955};
956
957static struct samsung_gate_clock fsys1_gate_clks[] __initdata = {
958 GATE(ACLK_MMC1, "aclk_mmc1", "mout_aclk_fsys1_200_user",
959 ENABLE_ACLK_FSYS1, 29, 0, 0),
960 GATE(ACLK_MMC0, "aclk_mmc0", "mout_aclk_fsys1_200_user",
961 ENABLE_ACLK_FSYS1, 30, 0, 0),
962};
963
964static struct samsung_cmu_info fsys1_cmu_info __initdata = {
965 .mux_clks = fsys1_mux_clks,
966 .nr_mux_clks = ARRAY_SIZE(fsys1_mux_clks),
967 .gate_clks = fsys1_gate_clks,
968 .nr_gate_clks = ARRAY_SIZE(fsys1_gate_clks),
Alim Akhtar167c9e42015-08-26 09:00:44 +0530969 .nr_clk_ids = FSYS1_NR_CLK,
Naveen Krishna Ch6d0c8c72014-10-21 11:13:52 +0530970 .clk_regs = fsys1_clk_regs,
971 .nr_clk_regs = ARRAY_SIZE(fsys1_clk_regs),
972};
973
974static void __init exynos7_clk_fsys1_init(struct device_node *np)
975{
976 samsung_cmu_register_one(np, &fsys1_cmu_info);
977}
978
979CLK_OF_DECLARE(exynos7_clk_fsys1, "samsung,exynos7-clock-fsys1",
980 exynos7_clk_fsys1_init);
Tony K Nadackal49cab822014-12-17 13:03:37 +0530981
982#define MUX_SEL_MSCL 0x0200
983#define DIV_MSCL 0x0600
984#define ENABLE_ACLK_MSCL 0x0800
985#define ENABLE_PCLK_MSCL 0x0900
986
987/* List of parent clocks for Muxes in CMU_MSCL */
988PNAME(mout_aclk_mscl_532_user_p) = { "fin_pll", "aclk_mscl_532" };
989
990static unsigned long mscl_clk_regs[] __initdata = {
991 MUX_SEL_MSCL,
992 DIV_MSCL,
993 ENABLE_ACLK_MSCL,
994 ENABLE_PCLK_MSCL,
995};
996
997static struct samsung_mux_clock mscl_mux_clks[] __initdata = {
998 MUX(USERMUX_ACLK_MSCL_532, "usermux_aclk_mscl_532",
999 mout_aclk_mscl_532_user_p, MUX_SEL_MSCL, 0, 1),
1000};
1001static struct samsung_div_clock mscl_div_clks[] __initdata = {
1002 DIV(DOUT_PCLK_MSCL, "dout_pclk_mscl", "usermux_aclk_mscl_532",
1003 DIV_MSCL, 0, 3),
1004};
1005static struct samsung_gate_clock mscl_gate_clks[] __initdata = {
1006
1007 GATE(ACLK_MSCL_0, "aclk_mscl_0", "usermux_aclk_mscl_532",
1008 ENABLE_ACLK_MSCL, 31, 0, 0),
1009 GATE(ACLK_MSCL_1, "aclk_mscl_1", "usermux_aclk_mscl_532",
1010 ENABLE_ACLK_MSCL, 30, 0, 0),
1011 GATE(ACLK_JPEG, "aclk_jpeg", "usermux_aclk_mscl_532",
1012 ENABLE_ACLK_MSCL, 29, 0, 0),
1013 GATE(ACLK_G2D, "aclk_g2d", "usermux_aclk_mscl_532",
1014 ENABLE_ACLK_MSCL, 28, 0, 0),
1015 GATE(ACLK_LH_ASYNC_SI_MSCL_0, "aclk_lh_async_si_mscl_0",
1016 "usermux_aclk_mscl_532",
1017 ENABLE_ACLK_MSCL, 27, 0, 0),
1018 GATE(ACLK_LH_ASYNC_SI_MSCL_1, "aclk_lh_async_si_mscl_1",
1019 "usermux_aclk_mscl_532",
1020 ENABLE_ACLK_MSCL, 26, 0, 0),
1021 GATE(ACLK_XIU_MSCLX_0, "aclk_xiu_msclx_0", "usermux_aclk_mscl_532",
1022 ENABLE_ACLK_MSCL, 25, 0, 0),
1023 GATE(ACLK_XIU_MSCLX_1, "aclk_xiu_msclx_1", "usermux_aclk_mscl_532",
1024 ENABLE_ACLK_MSCL, 24, 0, 0),
1025 GATE(ACLK_AXI2ACEL_BRIDGE, "aclk_axi2acel_bridge",
1026 "usermux_aclk_mscl_532",
1027 ENABLE_ACLK_MSCL, 23, 0, 0),
1028 GATE(ACLK_QE_MSCL_0, "aclk_qe_mscl_0", "usermux_aclk_mscl_532",
1029 ENABLE_ACLK_MSCL, 22, 0, 0),
1030 GATE(ACLK_QE_MSCL_1, "aclk_qe_mscl_1", "usermux_aclk_mscl_532",
1031 ENABLE_ACLK_MSCL, 21, 0, 0),
1032 GATE(ACLK_QE_JPEG, "aclk_qe_jpeg", "usermux_aclk_mscl_532",
1033 ENABLE_ACLK_MSCL, 20, 0, 0),
1034 GATE(ACLK_QE_G2D, "aclk_qe_g2d", "usermux_aclk_mscl_532",
1035 ENABLE_ACLK_MSCL, 19, 0, 0),
1036 GATE(ACLK_PPMU_MSCL_0, "aclk_ppmu_mscl_0", "usermux_aclk_mscl_532",
1037 ENABLE_ACLK_MSCL, 18, 0, 0),
1038 GATE(ACLK_PPMU_MSCL_1, "aclk_ppmu_mscl_1", "usermux_aclk_mscl_532",
1039 ENABLE_ACLK_MSCL, 17, 0, 0),
1040 GATE(ACLK_MSCLNP_133, "aclk_msclnp_133", "usermux_aclk_mscl_532",
1041 ENABLE_ACLK_MSCL, 16, 0, 0),
1042 GATE(ACLK_AHB2APB_MSCL0P, "aclk_ahb2apb_mscl0p",
1043 "usermux_aclk_mscl_532",
1044 ENABLE_ACLK_MSCL, 15, 0, 0),
1045 GATE(ACLK_AHB2APB_MSCL1P, "aclk_ahb2apb_mscl1p",
1046 "usermux_aclk_mscl_532",
1047 ENABLE_ACLK_MSCL, 14, 0, 0),
1048
1049 GATE(PCLK_MSCL_0, "pclk_mscl_0", "dout_pclk_mscl",
1050 ENABLE_PCLK_MSCL, 31, 0, 0),
1051 GATE(PCLK_MSCL_1, "pclk_mscl_1", "dout_pclk_mscl",
1052 ENABLE_PCLK_MSCL, 30, 0, 0),
1053 GATE(PCLK_JPEG, "pclk_jpeg", "dout_pclk_mscl",
1054 ENABLE_PCLK_MSCL, 29, 0, 0),
1055 GATE(PCLK_G2D, "pclk_g2d", "dout_pclk_mscl",
1056 ENABLE_PCLK_MSCL, 28, 0, 0),
1057 GATE(PCLK_QE_MSCL_0, "pclk_qe_mscl_0", "dout_pclk_mscl",
1058 ENABLE_PCLK_MSCL, 27, 0, 0),
1059 GATE(PCLK_QE_MSCL_1, "pclk_qe_mscl_1", "dout_pclk_mscl",
1060 ENABLE_PCLK_MSCL, 26, 0, 0),
1061 GATE(PCLK_QE_JPEG, "pclk_qe_jpeg", "dout_pclk_mscl",
1062 ENABLE_PCLK_MSCL, 25, 0, 0),
1063 GATE(PCLK_QE_G2D, "pclk_qe_g2d", "dout_pclk_mscl",
1064 ENABLE_PCLK_MSCL, 24, 0, 0),
1065 GATE(PCLK_PPMU_MSCL_0, "pclk_ppmu_mscl_0", "dout_pclk_mscl",
1066 ENABLE_PCLK_MSCL, 23, 0, 0),
1067 GATE(PCLK_PPMU_MSCL_1, "pclk_ppmu_mscl_1", "dout_pclk_mscl",
1068 ENABLE_PCLK_MSCL, 22, 0, 0),
1069 GATE(PCLK_AXI2ACEL_BRIDGE, "pclk_axi2acel_bridge", "dout_pclk_mscl",
1070 ENABLE_PCLK_MSCL, 21, 0, 0),
1071 GATE(PCLK_PMU_MSCL, "pclk_pmu_mscl", "dout_pclk_mscl",
1072 ENABLE_PCLK_MSCL, 20, 0, 0),
1073};
1074
1075static struct samsung_cmu_info mscl_cmu_info __initdata = {
1076 .mux_clks = mscl_mux_clks,
1077 .nr_mux_clks = ARRAY_SIZE(mscl_mux_clks),
1078 .div_clks = mscl_div_clks,
1079 .nr_div_clks = ARRAY_SIZE(mscl_div_clks),
1080 .gate_clks = mscl_gate_clks,
1081 .nr_gate_clks = ARRAY_SIZE(mscl_gate_clks),
1082 .nr_clk_ids = MSCL_NR_CLK,
1083 .clk_regs = mscl_clk_regs,
1084 .nr_clk_regs = ARRAY_SIZE(mscl_clk_regs),
1085};
1086
1087static void __init exynos7_clk_mscl_init(struct device_node *np)
1088{
1089 samsung_cmu_register_one(np, &mscl_cmu_info);
1090}
1091
1092CLK_OF_DECLARE(exynos7_clk_mscl, "samsung,exynos7-clock-mscl",
1093 exynos7_clk_mscl_init);
Padmavathi Venna9f930a32015-01-13 16:57:42 +05301094
1095/* Register Offset definitions for CMU_AUD (0x114C0000) */
1096#define MUX_SEL_AUD 0x0200
1097#define DIV_AUD0 0x0600
1098#define DIV_AUD1 0x0604
1099#define ENABLE_ACLK_AUD 0x0800
1100#define ENABLE_PCLK_AUD 0x0900
1101#define ENABLE_SCLK_AUD 0x0A00
1102
1103/*
1104 * List of parent clocks for Muxes in CMU_AUD
1105 */
1106PNAME(mout_aud_pll_user_p) = { "fin_pll", "fout_aud_pll" };
1107PNAME(mout_aud_group_p) = { "dout_aud_cdclk", "ioclk_audiocdclk0" };
1108
1109static unsigned long aud_clk_regs[] __initdata = {
1110 MUX_SEL_AUD,
1111 DIV_AUD0,
1112 DIV_AUD1,
1113 ENABLE_ACLK_AUD,
1114 ENABLE_PCLK_AUD,
1115 ENABLE_SCLK_AUD,
1116};
1117
1118static struct samsung_mux_clock aud_mux_clks[] __initdata = {
1119 MUX(0, "mout_sclk_i2s", mout_aud_group_p, MUX_SEL_AUD, 12, 1),
1120 MUX(0, "mout_sclk_pcm", mout_aud_group_p, MUX_SEL_AUD, 16, 1),
1121 MUX(0, "mout_aud_pll_user", mout_aud_pll_user_p, MUX_SEL_AUD, 20, 1),
1122};
1123
1124static struct samsung_div_clock aud_div_clks[] __initdata = {
1125 DIV(0, "dout_aud_ca5", "mout_aud_pll_user", DIV_AUD0, 0, 4),
1126 DIV(0, "dout_aclk_aud", "dout_aud_ca5", DIV_AUD0, 4, 4),
1127 DIV(0, "dout_aud_pclk_dbg", "dout_aud_ca5", DIV_AUD0, 8, 4),
1128
1129 DIV(0, "dout_sclk_i2s", "mout_sclk_i2s", DIV_AUD1, 0, 4),
1130 DIV(0, "dout_sclk_pcm", "mout_sclk_pcm", DIV_AUD1, 4, 8),
1131 DIV(0, "dout_sclk_uart", "dout_aud_cdclk", DIV_AUD1, 12, 4),
1132 DIV(0, "dout_sclk_slimbus", "dout_aud_cdclk", DIV_AUD1, 16, 5),
1133 DIV(0, "dout_aud_cdclk", "mout_aud_pll_user", DIV_AUD1, 24, 4),
1134};
1135
1136static struct samsung_gate_clock aud_gate_clks[] __initdata = {
1137 GATE(SCLK_PCM, "sclk_pcm", "dout_sclk_pcm",
1138 ENABLE_SCLK_AUD, 27, CLK_SET_RATE_PARENT, 0),
1139 GATE(SCLK_I2S, "sclk_i2s", "dout_sclk_i2s",
1140 ENABLE_SCLK_AUD, 28, CLK_SET_RATE_PARENT, 0),
1141 GATE(0, "sclk_uart", "dout_sclk_uart", ENABLE_SCLK_AUD, 29, 0, 0),
1142 GATE(0, "sclk_slimbus", "dout_sclk_slimbus",
1143 ENABLE_SCLK_AUD, 30, 0, 0),
1144
1145 GATE(0, "pclk_dbg_aud", "dout_aud_pclk_dbg", ENABLE_PCLK_AUD, 19, 0, 0),
1146 GATE(0, "pclk_gpio_aud", "dout_aclk_aud", ENABLE_PCLK_AUD, 20, 0, 0),
1147 GATE(0, "pclk_wdt1", "dout_aclk_aud", ENABLE_PCLK_AUD, 22, 0, 0),
1148 GATE(0, "pclk_wdt0", "dout_aclk_aud", ENABLE_PCLK_AUD, 23, 0, 0),
1149 GATE(0, "pclk_slimbus", "dout_aclk_aud", ENABLE_PCLK_AUD, 24, 0, 0),
1150 GATE(0, "pclk_uart", "dout_aclk_aud", ENABLE_PCLK_AUD, 25, 0, 0),
1151 GATE(PCLK_PCM, "pclk_pcm", "dout_aclk_aud",
1152 ENABLE_PCLK_AUD, 26, CLK_SET_RATE_PARENT, 0),
1153 GATE(PCLK_I2S, "pclk_i2s", "dout_aclk_aud",
1154 ENABLE_PCLK_AUD, 27, CLK_SET_RATE_PARENT, 0),
1155 GATE(0, "pclk_timer", "dout_aclk_aud", ENABLE_PCLK_AUD, 28, 0, 0),
1156 GATE(0, "pclk_smmu_aud", "dout_aclk_aud", ENABLE_PCLK_AUD, 31, 0, 0),
1157
1158 GATE(0, "aclk_smmu_aud", "dout_aclk_aud", ENABLE_ACLK_AUD, 27, 0, 0),
1159 GATE(0, "aclk_acel_lh_async_si_top", "dout_aclk_aud",
1160 ENABLE_ACLK_AUD, 28, 0, 0),
1161 GATE(ACLK_ADMA, "aclk_dmac", "dout_aclk_aud", ENABLE_ACLK_AUD, 31, 0, 0),
1162};
1163
1164static struct samsung_cmu_info aud_cmu_info __initdata = {
1165 .mux_clks = aud_mux_clks,
1166 .nr_mux_clks = ARRAY_SIZE(aud_mux_clks),
1167 .div_clks = aud_div_clks,
1168 .nr_div_clks = ARRAY_SIZE(aud_div_clks),
1169 .gate_clks = aud_gate_clks,
1170 .nr_gate_clks = ARRAY_SIZE(aud_gate_clks),
1171 .nr_clk_ids = AUD_NR_CLK,
1172 .clk_regs = aud_clk_regs,
1173 .nr_clk_regs = ARRAY_SIZE(aud_clk_regs),
1174};
1175
1176static void __init exynos7_clk_aud_init(struct device_node *np)
1177{
1178 samsung_cmu_register_one(np, &aud_cmu_info);
1179}
1180
1181CLK_OF_DECLARE(exynos7_clk_aud, "samsung,exynos7-clock-aud",
1182 exynos7_clk_aud_init);