xref: /linux/drivers/clk/samsung/clk-exynos7.c (revision 34138a59)
1d2912cb1SThomas Gleixner // SPDX-License-Identifier: GPL-2.0-only
2532abc3aSNaveen Krishna Ch /*
3532abc3aSNaveen Krishna Ch  * Copyright (c) 2014 Samsung Electronics Co., Ltd.
4532abc3aSNaveen Krishna Ch  * Author: Naveen Krishna Ch <naveenkrishna.ch@gmail.com>
5532abc3aSNaveen Krishna Ch */
6532abc3aSNaveen Krishna Ch 
7532abc3aSNaveen Krishna Ch #include <linux/clk-provider.h>
8532abc3aSNaveen Krishna Ch #include <linux/of.h>
9532abc3aSNaveen Krishna Ch 
10532abc3aSNaveen Krishna Ch #include "clk.h"
11532abc3aSNaveen Krishna Ch #include <dt-bindings/clock/exynos7-clk.h>
12532abc3aSNaveen Krishna Ch 
13532abc3aSNaveen Krishna Ch /* Register Offset definitions for CMU_TOPC (0x10570000) */
14532abc3aSNaveen Krishna Ch #define CC_PLL_LOCK		0x0000
15532abc3aSNaveen Krishna Ch #define BUS0_PLL_LOCK		0x0004
16532abc3aSNaveen Krishna Ch #define BUS1_DPLL_LOCK		0x0008
17532abc3aSNaveen Krishna Ch #define MFC_PLL_LOCK		0x000C
18532abc3aSNaveen Krishna Ch #define AUD_PLL_LOCK		0x0010
19532abc3aSNaveen Krishna Ch #define CC_PLL_CON0		0x0100
20532abc3aSNaveen Krishna Ch #define BUS0_PLL_CON0		0x0110
21532abc3aSNaveen Krishna Ch #define BUS1_DPLL_CON0		0x0120
22532abc3aSNaveen Krishna Ch #define MFC_PLL_CON0		0x0130
23532abc3aSNaveen Krishna Ch #define AUD_PLL_CON0		0x0140
24532abc3aSNaveen Krishna Ch #define MUX_SEL_TOPC0		0x0200
25532abc3aSNaveen Krishna Ch #define MUX_SEL_TOPC1		0x0204
26f5e127cdSNaveen Krishna Ch #define MUX_SEL_TOPC2		0x0208
27532abc3aSNaveen Krishna Ch #define MUX_SEL_TOPC3		0x020C
28f5e127cdSNaveen Krishna Ch #define DIV_TOPC0		0x0600
29532abc3aSNaveen Krishna Ch #define DIV_TOPC1		0x0604
30532abc3aSNaveen Krishna Ch #define DIV_TOPC3		0x060C
312cbb5157SAlim Akhtar #define ENABLE_ACLK_TOPC0	0x0800
3249cab82cSTony K Nadackal #define ENABLE_ACLK_TOPC1	0x0804
332cbb5157SAlim Akhtar #define ENABLE_SCLK_TOPC1	0x0A04
34532abc3aSNaveen Krishna Ch 
35a3618933SKrzysztof Kozlowski static const struct samsung_fixed_factor_clock topc_fixed_factor_clks[] __initconst = {
36dc504b22SAlim Akhtar 	FFACTOR(0, "ffac_topc_bus0_pll_div2", "mout_topc_bus0_pll", 1, 2, 0),
37532abc3aSNaveen Krishna Ch 	FFACTOR(0, "ffac_topc_bus0_pll_div4",
38532abc3aSNaveen Krishna Ch 		"ffac_topc_bus0_pll_div2", 1, 2, 0),
39dc504b22SAlim Akhtar 	FFACTOR(0, "ffac_topc_bus1_pll_div2", "mout_topc_bus1_pll", 1, 2, 0),
40dc504b22SAlim Akhtar 	FFACTOR(0, "ffac_topc_cc_pll_div2", "mout_topc_cc_pll", 1, 2, 0),
41dc504b22SAlim Akhtar 	FFACTOR(0, "ffac_topc_mfc_pll_div2", "mout_topc_mfc_pll", 1, 2, 0),
42532abc3aSNaveen Krishna Ch };
43532abc3aSNaveen Krishna Ch 
44532abc3aSNaveen Krishna Ch /* List of parent clocks for Muxes in CMU_TOPC */
45dc504b22SAlim Akhtar PNAME(mout_topc_aud_pll_ctrl_p)	= { "fin_pll", "fout_aud_pll" };
46dc504b22SAlim Akhtar PNAME(mout_topc_bus0_pll_ctrl_p)	= { "fin_pll", "fout_bus0_pll" };
47dc504b22SAlim Akhtar PNAME(mout_topc_bus1_pll_ctrl_p)	= { "fin_pll", "fout_bus1_pll" };
48dc504b22SAlim Akhtar PNAME(mout_topc_cc_pll_ctrl_p)	= { "fin_pll", "fout_cc_pll" };
49dc504b22SAlim Akhtar PNAME(mout_topc_mfc_pll_ctrl_p)	= { "fin_pll", "fout_mfc_pll" };
50532abc3aSNaveen Krishna Ch 
51dc504b22SAlim Akhtar PNAME(mout_topc_group2) = { "mout_topc_bus0_pll_half",
52dc504b22SAlim Akhtar 	"mout_topc_bus1_pll_half", "mout_topc_cc_pll_half",
53dc504b22SAlim Akhtar 	"mout_topc_mfc_pll_half" };
54532abc3aSNaveen Krishna Ch 
55dc504b22SAlim Akhtar PNAME(mout_topc_bus0_pll_half_p) = { "mout_topc_bus0_pll",
56532abc3aSNaveen Krishna Ch 	"ffac_topc_bus0_pll_div2", "ffac_topc_bus0_pll_div4"};
57dc504b22SAlim Akhtar PNAME(mout_topc_bus1_pll_half_p) = { "mout_topc_bus1_pll",
58532abc3aSNaveen Krishna Ch 	"ffac_topc_bus1_pll_div2"};
59dc504b22SAlim Akhtar PNAME(mout_topc_cc_pll_half_p) = { "mout_topc_cc_pll",
60532abc3aSNaveen Krishna Ch 	"ffac_topc_cc_pll_div2"};
61dc504b22SAlim Akhtar PNAME(mout_topc_mfc_pll_half_p) = { "mout_topc_mfc_pll",
62532abc3aSNaveen Krishna Ch 	"ffac_topc_mfc_pll_div2"};
63532abc3aSNaveen Krishna Ch 
64532abc3aSNaveen Krishna Ch 
65dc504b22SAlim Akhtar PNAME(mout_topc_bus0_pll_out_p) = {"mout_topc_bus0_pll",
66532abc3aSNaveen Krishna Ch 	"ffac_topc_bus0_pll_div2"};
67532abc3aSNaveen Krishna Ch 
68a3618933SKrzysztof Kozlowski static const unsigned long topc_clk_regs[] __initconst = {
69532abc3aSNaveen Krishna Ch 	CC_PLL_LOCK,
70532abc3aSNaveen Krishna Ch 	BUS0_PLL_LOCK,
71532abc3aSNaveen Krishna Ch 	BUS1_DPLL_LOCK,
72532abc3aSNaveen Krishna Ch 	MFC_PLL_LOCK,
73532abc3aSNaveen Krishna Ch 	AUD_PLL_LOCK,
74532abc3aSNaveen Krishna Ch 	CC_PLL_CON0,
75532abc3aSNaveen Krishna Ch 	BUS0_PLL_CON0,
76532abc3aSNaveen Krishna Ch 	BUS1_DPLL_CON0,
77532abc3aSNaveen Krishna Ch 	MFC_PLL_CON0,
78532abc3aSNaveen Krishna Ch 	AUD_PLL_CON0,
79532abc3aSNaveen Krishna Ch 	MUX_SEL_TOPC0,
80532abc3aSNaveen Krishna Ch 	MUX_SEL_TOPC1,
81f5e127cdSNaveen Krishna Ch 	MUX_SEL_TOPC2,
82532abc3aSNaveen Krishna Ch 	MUX_SEL_TOPC3,
83f5e127cdSNaveen Krishna Ch 	DIV_TOPC0,
84532abc3aSNaveen Krishna Ch 	DIV_TOPC1,
85532abc3aSNaveen Krishna Ch 	DIV_TOPC3,
86532abc3aSNaveen Krishna Ch };
87532abc3aSNaveen Krishna Ch 
88a3618933SKrzysztof Kozlowski static const struct samsung_mux_clock topc_mux_clks[] __initconst = {
89dc504b22SAlim Akhtar 	MUX(0, "mout_topc_bus0_pll", mout_topc_bus0_pll_ctrl_p,
90dc504b22SAlim Akhtar 		MUX_SEL_TOPC0, 0, 1),
91dc504b22SAlim Akhtar 	MUX(0, "mout_topc_bus1_pll", mout_topc_bus1_pll_ctrl_p,
92dc504b22SAlim Akhtar 		MUX_SEL_TOPC0, 4, 1),
93dc504b22SAlim Akhtar 	MUX(0, "mout_topc_cc_pll", mout_topc_cc_pll_ctrl_p,
94dc504b22SAlim Akhtar 		MUX_SEL_TOPC0, 8, 1),
95dc504b22SAlim Akhtar 	MUX(0, "mout_topc_mfc_pll", mout_topc_mfc_pll_ctrl_p,
96dc504b22SAlim Akhtar 		MUX_SEL_TOPC0, 12, 1),
97dc504b22SAlim Akhtar 	MUX(0, "mout_topc_bus0_pll_half", mout_topc_bus0_pll_half_p,
98532abc3aSNaveen Krishna Ch 		MUX_SEL_TOPC0, 16, 2),
99dc504b22SAlim Akhtar 	MUX(0, "mout_topc_bus1_pll_half", mout_topc_bus1_pll_half_p,
100532abc3aSNaveen Krishna Ch 		MUX_SEL_TOPC0, 20, 1),
101dc504b22SAlim Akhtar 	MUX(0, "mout_topc_cc_pll_half", mout_topc_cc_pll_half_p,
102532abc3aSNaveen Krishna Ch 		MUX_SEL_TOPC0, 24, 1),
103dc504b22SAlim Akhtar 	MUX(0, "mout_topc_mfc_pll_half", mout_topc_mfc_pll_half_p,
104532abc3aSNaveen Krishna Ch 		MUX_SEL_TOPC0, 28, 1),
105532abc3aSNaveen Krishna Ch 
106dc504b22SAlim Akhtar 	MUX(0, "mout_topc_aud_pll", mout_topc_aud_pll_ctrl_p,
107dc504b22SAlim Akhtar 		MUX_SEL_TOPC1, 0, 1),
108dc504b22SAlim Akhtar 	MUX(0, "mout_topc_bus0_pll_out", mout_topc_bus0_pll_out_p,
109532abc3aSNaveen Krishna Ch 		MUX_SEL_TOPC1, 16, 1),
110532abc3aSNaveen Krishna Ch 
111f5e127cdSNaveen Krishna Ch 	MUX(0, "mout_aclk_ccore_133", mout_topc_group2,	MUX_SEL_TOPC2, 4, 2),
112f5e127cdSNaveen Krishna Ch 
11349cab82cSTony K Nadackal 	MUX(0, "mout_aclk_mscl_532", mout_topc_group2, MUX_SEL_TOPC3, 20, 2),
114532abc3aSNaveen Krishna Ch 	MUX(0, "mout_aclk_peris_66", mout_topc_group2, MUX_SEL_TOPC3, 24, 2),
115532abc3aSNaveen Krishna Ch };
116532abc3aSNaveen Krishna Ch 
117a3618933SKrzysztof Kozlowski static const struct samsung_div_clock topc_div_clks[] __initconst = {
118f5e127cdSNaveen Krishna Ch 	DIV(DOUT_ACLK_CCORE_133, "dout_aclk_ccore_133", "mout_aclk_ccore_133",
119f5e127cdSNaveen Krishna Ch 		DIV_TOPC0, 4, 4),
120f5e127cdSNaveen Krishna Ch 
12149cab82cSTony K Nadackal 	DIV(DOUT_ACLK_MSCL_532, "dout_aclk_mscl_532", "mout_aclk_mscl_532",
12249cab82cSTony K Nadackal 		DIV_TOPC1, 20, 4),
123532abc3aSNaveen Krishna Ch 	DIV(DOUT_ACLK_PERIS, "dout_aclk_peris_66", "mout_aclk_peris_66",
124532abc3aSNaveen Krishna Ch 		DIV_TOPC1, 24, 4),
125532abc3aSNaveen Krishna Ch 
126dc504b22SAlim Akhtar 	DIV(DOUT_SCLK_BUS0_PLL, "dout_sclk_bus0_pll", "mout_topc_bus0_pll_out",
127fa9f3a52SAlim Akhtar 		DIV_TOPC3, 0, 4),
128dc504b22SAlim Akhtar 	DIV(DOUT_SCLK_BUS1_PLL, "dout_sclk_bus1_pll", "mout_topc_bus1_pll",
129fa9f3a52SAlim Akhtar 		DIV_TOPC3, 8, 4),
130dc504b22SAlim Akhtar 	DIV(DOUT_SCLK_CC_PLL, "dout_sclk_cc_pll", "mout_topc_cc_pll",
131fa9f3a52SAlim Akhtar 		DIV_TOPC3, 12, 4),
132dc504b22SAlim Akhtar 	DIV(DOUT_SCLK_MFC_PLL, "dout_sclk_mfc_pll", "mout_topc_mfc_pll",
133fa9f3a52SAlim Akhtar 		DIV_TOPC3, 16, 4),
134dc504b22SAlim Akhtar 	DIV(DOUT_SCLK_AUD_PLL, "dout_sclk_aud_pll", "mout_topc_aud_pll",
135fa9f3a52SAlim Akhtar 		DIV_TOPC3, 28, 4),
1369f930a39SPadmavathi Venna };
1379f930a39SPadmavathi Venna 
138a3618933SKrzysztof Kozlowski static const struct samsung_pll_rate_table pll1460x_24mhz_tbl[] __initconst = {
1391d5013f1SAndrzej Hajda 	PLL_36XX_RATE(24 * MHZ, 491519897, 20, 1, 0, 31457),
1409f930a39SPadmavathi Venna 	{},
141532abc3aSNaveen Krishna Ch };
142532abc3aSNaveen Krishna Ch 
143a3618933SKrzysztof Kozlowski static const struct samsung_gate_clock topc_gate_clks[] __initconst = {
1442cbb5157SAlim Akhtar 	GATE(ACLK_CCORE_133, "aclk_ccore_133", "dout_aclk_ccore_133",
1459da752f0SAlim Akhtar 		ENABLE_ACLK_TOPC0, 4, CLK_IS_CRITICAL, 0),
1462cbb5157SAlim Akhtar 
14749cab82cSTony K Nadackal 	GATE(ACLK_MSCL_532, "aclk_mscl_532", "dout_aclk_mscl_532",
14849cab82cSTony K Nadackal 		ENABLE_ACLK_TOPC1, 20, 0, 0),
1492cbb5157SAlim Akhtar 
1502cbb5157SAlim Akhtar 	GATE(ACLK_PERIS_66, "aclk_peris_66", "dout_aclk_peris_66",
1512cbb5157SAlim Akhtar 		ENABLE_ACLK_TOPC1, 24, 0, 0),
1522cbb5157SAlim Akhtar 
1532cbb5157SAlim Akhtar 	GATE(SCLK_AUD_PLL, "sclk_aud_pll", "dout_sclk_aud_pll",
1542cbb5157SAlim Akhtar 		ENABLE_SCLK_TOPC1, 20, 0, 0),
1552cbb5157SAlim Akhtar 	GATE(SCLK_MFC_PLL_B, "sclk_mfc_pll_b", "dout_sclk_mfc_pll",
1562cbb5157SAlim Akhtar 		ENABLE_SCLK_TOPC1, 17, 0, 0),
1572cbb5157SAlim Akhtar 	GATE(SCLK_MFC_PLL_A, "sclk_mfc_pll_a", "dout_sclk_mfc_pll",
1582cbb5157SAlim Akhtar 		ENABLE_SCLK_TOPC1, 16, 0, 0),
1592cbb5157SAlim Akhtar 	GATE(SCLK_BUS1_PLL_B, "sclk_bus1_pll_b", "dout_sclk_bus1_pll",
1602cbb5157SAlim Akhtar 		ENABLE_SCLK_TOPC1, 13, 0, 0),
1612cbb5157SAlim Akhtar 	GATE(SCLK_BUS1_PLL_A, "sclk_bus1_pll_a", "dout_sclk_bus1_pll",
1622cbb5157SAlim Akhtar 		ENABLE_SCLK_TOPC1, 12, 0, 0),
1632cbb5157SAlim Akhtar 	GATE(SCLK_BUS0_PLL_B, "sclk_bus0_pll_b", "dout_sclk_bus0_pll",
1642cbb5157SAlim Akhtar 		ENABLE_SCLK_TOPC1, 5, 0, 0),
1652cbb5157SAlim Akhtar 	GATE(SCLK_BUS0_PLL_A, "sclk_bus0_pll_a", "dout_sclk_bus0_pll",
1662cbb5157SAlim Akhtar 		ENABLE_SCLK_TOPC1, 4, 0, 0),
1672cbb5157SAlim Akhtar 	GATE(SCLK_CC_PLL_B, "sclk_cc_pll_b", "dout_sclk_cc_pll",
1682cbb5157SAlim Akhtar 		ENABLE_SCLK_TOPC1, 1, 0, 0),
1692cbb5157SAlim Akhtar 	GATE(SCLK_CC_PLL_A, "sclk_cc_pll_a", "dout_sclk_cc_pll",
1702cbb5157SAlim Akhtar 		ENABLE_SCLK_TOPC1, 0, 0, 0),
17149cab82cSTony K Nadackal };
17249cab82cSTony K Nadackal 
173a3618933SKrzysztof Kozlowski static const struct samsung_pll_clock topc_pll_clks[] __initconst = {
174532abc3aSNaveen Krishna Ch 	PLL(pll_1451x, 0, "fout_bus0_pll", "fin_pll", BUS0_PLL_LOCK,
175532abc3aSNaveen Krishna Ch 		BUS0_PLL_CON0, NULL),
176532abc3aSNaveen Krishna Ch 	PLL(pll_1452x, 0, "fout_cc_pll", "fin_pll", CC_PLL_LOCK,
177532abc3aSNaveen Krishna Ch 		CC_PLL_CON0, NULL),
178532abc3aSNaveen Krishna Ch 	PLL(pll_1452x, 0, "fout_bus1_pll", "fin_pll", BUS1_DPLL_LOCK,
179532abc3aSNaveen Krishna Ch 		BUS1_DPLL_CON0, NULL),
180532abc3aSNaveen Krishna Ch 	PLL(pll_1452x, 0, "fout_mfc_pll", "fin_pll", MFC_PLL_LOCK,
181532abc3aSNaveen Krishna Ch 		MFC_PLL_CON0, NULL),
1829f930a39SPadmavathi Venna 	PLL(pll_1460x, FOUT_AUD_PLL, "fout_aud_pll", "fin_pll", AUD_PLL_LOCK,
1839f930a39SPadmavathi Venna 		AUD_PLL_CON0, pll1460x_24mhz_tbl),
184532abc3aSNaveen Krishna Ch };
185532abc3aSNaveen Krishna Ch 
186a3618933SKrzysztof Kozlowski static const struct samsung_cmu_info topc_cmu_info __initconst = {
187532abc3aSNaveen Krishna Ch 	.pll_clks		= topc_pll_clks,
188532abc3aSNaveen Krishna Ch 	.nr_pll_clks		= ARRAY_SIZE(topc_pll_clks),
189532abc3aSNaveen Krishna Ch 	.mux_clks		= topc_mux_clks,
190532abc3aSNaveen Krishna Ch 	.nr_mux_clks		= ARRAY_SIZE(topc_mux_clks),
191532abc3aSNaveen Krishna Ch 	.div_clks		= topc_div_clks,
192532abc3aSNaveen Krishna Ch 	.nr_div_clks		= ARRAY_SIZE(topc_div_clks),
19349cab82cSTony K Nadackal 	.gate_clks		= topc_gate_clks,
19449cab82cSTony K Nadackal 	.nr_gate_clks		= ARRAY_SIZE(topc_gate_clks),
195532abc3aSNaveen Krishna Ch 	.fixed_factor_clks	= topc_fixed_factor_clks,
196532abc3aSNaveen Krishna Ch 	.nr_fixed_factor_clks	= ARRAY_SIZE(topc_fixed_factor_clks),
197532abc3aSNaveen Krishna Ch 	.nr_clk_ids		= TOPC_NR_CLK,
198532abc3aSNaveen Krishna Ch 	.clk_regs		= topc_clk_regs,
199532abc3aSNaveen Krishna Ch 	.nr_clk_regs		= ARRAY_SIZE(topc_clk_regs),
200532abc3aSNaveen Krishna Ch };
201532abc3aSNaveen Krishna Ch 
exynos7_clk_topc_init(struct device_node * np)202532abc3aSNaveen Krishna Ch static void __init exynos7_clk_topc_init(struct device_node *np)
203532abc3aSNaveen Krishna Ch {
204532abc3aSNaveen Krishna Ch 	samsung_cmu_register_one(np, &topc_cmu_info);
205532abc3aSNaveen Krishna Ch }
206532abc3aSNaveen Krishna Ch 
207532abc3aSNaveen Krishna Ch CLK_OF_DECLARE(exynos7_clk_topc, "samsung,exynos7-clock-topc",
208532abc3aSNaveen Krishna Ch 	exynos7_clk_topc_init);
209532abc3aSNaveen Krishna Ch 
210532abc3aSNaveen Krishna Ch /* Register Offset definitions for CMU_TOP0 (0x105D0000) */
211532abc3aSNaveen Krishna Ch #define MUX_SEL_TOP00			0x0200
212532abc3aSNaveen Krishna Ch #define MUX_SEL_TOP01			0x0204
213532abc3aSNaveen Krishna Ch #define MUX_SEL_TOP03			0x020C
2149f930a39SPadmavathi Venna #define MUX_SEL_TOP0_PERIC0		0x0230
215ee74b56aSPadmavathi Venna #define MUX_SEL_TOP0_PERIC1		0x0234
216ee74b56aSPadmavathi Venna #define MUX_SEL_TOP0_PERIC2		0x0238
217532abc3aSNaveen Krishna Ch #define MUX_SEL_TOP0_PERIC3		0x023C
218532abc3aSNaveen Krishna Ch #define DIV_TOP03			0x060C
2199f930a39SPadmavathi Venna #define DIV_TOP0_PERIC0			0x0630
220ee74b56aSPadmavathi Venna #define DIV_TOP0_PERIC1			0x0634
221ee74b56aSPadmavathi Venna #define DIV_TOP0_PERIC2			0x0638
222532abc3aSNaveen Krishna Ch #define DIV_TOP0_PERIC3			0x063C
2233f54fb1eSAlim Akhtar #define ENABLE_ACLK_TOP03		0x080C
2249f930a39SPadmavathi Venna #define ENABLE_SCLK_TOP0_PERIC0		0x0A30
225ee74b56aSPadmavathi Venna #define ENABLE_SCLK_TOP0_PERIC1		0x0A34
226ee74b56aSPadmavathi Venna #define ENABLE_SCLK_TOP0_PERIC2		0x0A38
227532abc3aSNaveen Krishna Ch #define ENABLE_SCLK_TOP0_PERIC3		0x0A3C
228532abc3aSNaveen Krishna Ch 
229532abc3aSNaveen Krishna Ch /* List of parent clocks for Muxes in CMU_TOP0 */
230cf5ee64cSAlim Akhtar PNAME(mout_top0_bus0_pll_user_p)	= { "fin_pll", "sclk_bus0_pll_a" };
231cf5ee64cSAlim Akhtar PNAME(mout_top0_bus1_pll_user_p)	= { "fin_pll", "sclk_bus1_pll_a" };
232cf5ee64cSAlim Akhtar PNAME(mout_top0_cc_pll_user_p)	= { "fin_pll", "sclk_cc_pll_a" };
233cf5ee64cSAlim Akhtar PNAME(mout_top0_mfc_pll_user_p)	= { "fin_pll", "sclk_mfc_pll_a" };
234cf5ee64cSAlim Akhtar PNAME(mout_top0_aud_pll_user_p)	= { "fin_pll", "sclk_aud_pll" };
235532abc3aSNaveen Krishna Ch 
236cf5ee64cSAlim Akhtar PNAME(mout_top0_bus0_pll_half_p) = {"mout_top0_bus0_pll_user",
237532abc3aSNaveen Krishna Ch 	"ffac_top0_bus0_pll_div2"};
238cf5ee64cSAlim Akhtar PNAME(mout_top0_bus1_pll_half_p) = {"mout_top0_bus1_pll_user",
239532abc3aSNaveen Krishna Ch 	"ffac_top0_bus1_pll_div2"};
240cf5ee64cSAlim Akhtar PNAME(mout_top0_cc_pll_half_p) = {"mout_top0_cc_pll_user",
241532abc3aSNaveen Krishna Ch 	"ffac_top0_cc_pll_div2"};
242cf5ee64cSAlim Akhtar PNAME(mout_top0_mfc_pll_half_p) = {"mout_top0_mfc_pll_user",
243532abc3aSNaveen Krishna Ch 	"ffac_top0_mfc_pll_div2"};
244532abc3aSNaveen Krishna Ch 
245cf5ee64cSAlim Akhtar PNAME(mout_top0_group1) = {"mout_top0_bus0_pll_half",
246cf5ee64cSAlim Akhtar 	"mout_top0_bus1_pll_half", "mout_top0_cc_pll_half",
247cf5ee64cSAlim Akhtar 	"mout_top0_mfc_pll_half"};
2489f930a39SPadmavathi Venna PNAME(mout_top0_group3) = {"ioclk_audiocdclk0",
2499f930a39SPadmavathi Venna 	"ioclk_audiocdclk1", "ioclk_spdif_extclk",
250cf5ee64cSAlim Akhtar 	"mout_top0_aud_pll_user", "mout_top0_bus0_pll_half",
251cf5ee64cSAlim Akhtar 	"mout_top0_bus1_pll_half"};
252cf5ee64cSAlim Akhtar PNAME(mout_top0_group4) = {"ioclk_audiocdclk1", "mout_top0_aud_pll_user",
253cf5ee64cSAlim Akhtar 	"mout_top0_bus0_pll_half", "mout_top0_bus1_pll_half"};
254532abc3aSNaveen Krishna Ch 
255a3618933SKrzysztof Kozlowski static const unsigned long top0_clk_regs[] __initconst = {
256532abc3aSNaveen Krishna Ch 	MUX_SEL_TOP00,
257532abc3aSNaveen Krishna Ch 	MUX_SEL_TOP01,
258532abc3aSNaveen Krishna Ch 	MUX_SEL_TOP03,
2599f930a39SPadmavathi Venna 	MUX_SEL_TOP0_PERIC0,
260ee74b56aSPadmavathi Venna 	MUX_SEL_TOP0_PERIC1,
261ee74b56aSPadmavathi Venna 	MUX_SEL_TOP0_PERIC2,
262532abc3aSNaveen Krishna Ch 	MUX_SEL_TOP0_PERIC3,
263532abc3aSNaveen Krishna Ch 	DIV_TOP03,
2649f930a39SPadmavathi Venna 	DIV_TOP0_PERIC0,
265ee74b56aSPadmavathi Venna 	DIV_TOP0_PERIC1,
266ee74b56aSPadmavathi Venna 	DIV_TOP0_PERIC2,
267532abc3aSNaveen Krishna Ch 	DIV_TOP0_PERIC3,
2689f930a39SPadmavathi Venna 	ENABLE_SCLK_TOP0_PERIC0,
269ee74b56aSPadmavathi Venna 	ENABLE_SCLK_TOP0_PERIC1,
270ee74b56aSPadmavathi Venna 	ENABLE_SCLK_TOP0_PERIC2,
271532abc3aSNaveen Krishna Ch 	ENABLE_SCLK_TOP0_PERIC3,
272532abc3aSNaveen Krishna Ch };
273532abc3aSNaveen Krishna Ch 
274a3618933SKrzysztof Kozlowski static const struct samsung_mux_clock top0_mux_clks[] __initconst = {
275cf5ee64cSAlim Akhtar 	MUX(0, "mout_top0_aud_pll_user", mout_top0_aud_pll_user_p,
276cf5ee64cSAlim Akhtar 		MUX_SEL_TOP00, 0, 1),
277cf5ee64cSAlim Akhtar 	MUX(0, "mout_top0_mfc_pll_user", mout_top0_mfc_pll_user_p,
278cf5ee64cSAlim Akhtar 		MUX_SEL_TOP00, 4, 1),
279cf5ee64cSAlim Akhtar 	MUX(0, "mout_top0_cc_pll_user", mout_top0_cc_pll_user_p,
280cf5ee64cSAlim Akhtar 		MUX_SEL_TOP00, 8, 1),
281cf5ee64cSAlim Akhtar 	MUX(0, "mout_top0_bus1_pll_user", mout_top0_bus1_pll_user_p,
282cf5ee64cSAlim Akhtar 		MUX_SEL_TOP00, 12, 1),
283cf5ee64cSAlim Akhtar 	MUX(0, "mout_top0_bus0_pll_user", mout_top0_bus0_pll_user_p,
284cf5ee64cSAlim Akhtar 		MUX_SEL_TOP00, 16, 1),
285532abc3aSNaveen Krishna Ch 
286cf5ee64cSAlim Akhtar 	MUX(0, "mout_top0_mfc_pll_half", mout_top0_mfc_pll_half_p,
287532abc3aSNaveen Krishna Ch 		MUX_SEL_TOP01, 4, 1),
288cf5ee64cSAlim Akhtar 	MUX(0, "mout_top0_cc_pll_half", mout_top0_cc_pll_half_p,
289532abc3aSNaveen Krishna Ch 		MUX_SEL_TOP01, 8, 1),
290cf5ee64cSAlim Akhtar 	MUX(0, "mout_top0_bus1_pll_half", mout_top0_bus1_pll_half_p,
291532abc3aSNaveen Krishna Ch 		MUX_SEL_TOP01, 12, 1),
292cf5ee64cSAlim Akhtar 	MUX(0, "mout_top0_bus0_pll_half", mout_top0_bus0_pll_half_p,
293532abc3aSNaveen Krishna Ch 		MUX_SEL_TOP01, 16, 1),
294532abc3aSNaveen Krishna Ch 
295532abc3aSNaveen Krishna Ch 	MUX(0, "mout_aclk_peric1_66", mout_top0_group1, MUX_SEL_TOP03, 12, 2),
296532abc3aSNaveen Krishna Ch 	MUX(0, "mout_aclk_peric0_66", mout_top0_group1, MUX_SEL_TOP03, 20, 2),
297532abc3aSNaveen Krishna Ch 
2989f930a39SPadmavathi Venna 	MUX(0, "mout_sclk_spdif", mout_top0_group3, MUX_SEL_TOP0_PERIC0, 4, 3),
2999f930a39SPadmavathi Venna 	MUX(0, "mout_sclk_pcm1", mout_top0_group4, MUX_SEL_TOP0_PERIC0, 8, 2),
3009f930a39SPadmavathi Venna 	MUX(0, "mout_sclk_i2s1", mout_top0_group4, MUX_SEL_TOP0_PERIC0, 20, 2),
3019f930a39SPadmavathi Venna 
302ee74b56aSPadmavathi Venna 	MUX(0, "mout_sclk_spi1", mout_top0_group1, MUX_SEL_TOP0_PERIC1, 8, 2),
303ee74b56aSPadmavathi Venna 	MUX(0, "mout_sclk_spi0", mout_top0_group1, MUX_SEL_TOP0_PERIC1, 20, 2),
304ee74b56aSPadmavathi Venna 
305ee74b56aSPadmavathi Venna 	MUX(0, "mout_sclk_spi3", mout_top0_group1, MUX_SEL_TOP0_PERIC2, 8, 2),
306ee74b56aSPadmavathi Venna 	MUX(0, "mout_sclk_spi2", mout_top0_group1, MUX_SEL_TOP0_PERIC2, 20, 2),
307532abc3aSNaveen Krishna Ch 	MUX(0, "mout_sclk_uart3", mout_top0_group1, MUX_SEL_TOP0_PERIC3, 4, 2),
308532abc3aSNaveen Krishna Ch 	MUX(0, "mout_sclk_uart2", mout_top0_group1, MUX_SEL_TOP0_PERIC3, 8, 2),
309532abc3aSNaveen Krishna Ch 	MUX(0, "mout_sclk_uart1", mout_top0_group1, MUX_SEL_TOP0_PERIC3, 12, 2),
310532abc3aSNaveen Krishna Ch 	MUX(0, "mout_sclk_uart0", mout_top0_group1, MUX_SEL_TOP0_PERIC3, 16, 2),
311ee74b56aSPadmavathi Venna 	MUX(0, "mout_sclk_spi4", mout_top0_group1, MUX_SEL_TOP0_PERIC3, 20, 2),
312532abc3aSNaveen Krishna Ch };
313532abc3aSNaveen Krishna Ch 
314a3618933SKrzysztof Kozlowski static const struct samsung_div_clock top0_div_clks[] __initconst = {
315532abc3aSNaveen Krishna Ch 	DIV(DOUT_ACLK_PERIC1, "dout_aclk_peric1_66", "mout_aclk_peric1_66",
316532abc3aSNaveen Krishna Ch 		DIV_TOP03, 12, 6),
317532abc3aSNaveen Krishna Ch 	DIV(DOUT_ACLK_PERIC0, "dout_aclk_peric0_66", "mout_aclk_peric0_66",
318532abc3aSNaveen Krishna Ch 		DIV_TOP03, 20, 6),
319532abc3aSNaveen Krishna Ch 
3209f930a39SPadmavathi Venna 	DIV(0, "dout_sclk_spdif", "mout_sclk_spdif", DIV_TOP0_PERIC0, 4, 4),
3219f930a39SPadmavathi Venna 	DIV(0, "dout_sclk_pcm1", "mout_sclk_pcm1", DIV_TOP0_PERIC0, 8, 12),
3229f930a39SPadmavathi Venna 	DIV(0, "dout_sclk_i2s1", "mout_sclk_i2s1", DIV_TOP0_PERIC0, 20, 10),
3239f930a39SPadmavathi Venna 
324ee74b56aSPadmavathi Venna 	DIV(0, "dout_sclk_spi1", "mout_sclk_spi1", DIV_TOP0_PERIC1, 8, 12),
325ee74b56aSPadmavathi Venna 	DIV(0, "dout_sclk_spi0", "mout_sclk_spi0", DIV_TOP0_PERIC1, 20, 12),
326ee74b56aSPadmavathi Venna 
327ee74b56aSPadmavathi Venna 	DIV(0, "dout_sclk_spi3", "mout_sclk_spi3", DIV_TOP0_PERIC2, 8, 12),
328ee74b56aSPadmavathi Venna 	DIV(0, "dout_sclk_spi2", "mout_sclk_spi2", DIV_TOP0_PERIC2, 20, 12),
329ee74b56aSPadmavathi Venna 
330532abc3aSNaveen Krishna Ch 	DIV(0, "dout_sclk_uart3", "mout_sclk_uart3", DIV_TOP0_PERIC3, 4, 4),
331532abc3aSNaveen Krishna Ch 	DIV(0, "dout_sclk_uart2", "mout_sclk_uart2", DIV_TOP0_PERIC3, 8, 4),
332532abc3aSNaveen Krishna Ch 	DIV(0, "dout_sclk_uart1", "mout_sclk_uart1", DIV_TOP0_PERIC3, 12, 4),
333532abc3aSNaveen Krishna Ch 	DIV(0, "dout_sclk_uart0", "mout_sclk_uart0", DIV_TOP0_PERIC3, 16, 4),
334ee74b56aSPadmavathi Venna 	DIV(0, "dout_sclk_spi4", "mout_sclk_spi4", DIV_TOP0_PERIC3, 20, 12),
335532abc3aSNaveen Krishna Ch };
336532abc3aSNaveen Krishna Ch 
337a3618933SKrzysztof Kozlowski static const struct samsung_gate_clock top0_gate_clks[] __initconst = {
3383f54fb1eSAlim Akhtar 	GATE(CLK_ACLK_PERIC0_66, "aclk_peric0_66", "dout_aclk_peric0_66",
3393f54fb1eSAlim Akhtar 		ENABLE_ACLK_TOP03, 20, CLK_SET_RATE_PARENT, 0),
34033b8b739SAlim Akhtar 	GATE(CLK_ACLK_PERIC1_66, "aclk_peric1_66", "dout_aclk_peric1_66",
34133b8b739SAlim Akhtar 		ENABLE_ACLK_TOP03, 12, CLK_SET_RATE_PARENT, 0),
3423f54fb1eSAlim Akhtar 
3439f930a39SPadmavathi Venna 	GATE(CLK_SCLK_SPDIF, "sclk_spdif", "dout_sclk_spdif",
3449f930a39SPadmavathi Venna 		ENABLE_SCLK_TOP0_PERIC0, 4, CLK_SET_RATE_PARENT, 0),
3459f930a39SPadmavathi Venna 	GATE(CLK_SCLK_PCM1, "sclk_pcm1", "dout_sclk_pcm1",
3469f930a39SPadmavathi Venna 		ENABLE_SCLK_TOP0_PERIC0, 8, CLK_SET_RATE_PARENT, 0),
3479f930a39SPadmavathi Venna 	GATE(CLK_SCLK_I2S1, "sclk_i2s1", "dout_sclk_i2s1",
3489f930a39SPadmavathi Venna 		ENABLE_SCLK_TOP0_PERIC0, 20, CLK_SET_RATE_PARENT, 0),
3499f930a39SPadmavathi Venna 
350ee74b56aSPadmavathi Venna 	GATE(CLK_SCLK_SPI1, "sclk_spi1", "dout_sclk_spi1",
351ee74b56aSPadmavathi Venna 		ENABLE_SCLK_TOP0_PERIC1, 8, CLK_SET_RATE_PARENT, 0),
352ee74b56aSPadmavathi Venna 	GATE(CLK_SCLK_SPI0, "sclk_spi0", "dout_sclk_spi0",
353ee74b56aSPadmavathi Venna 		ENABLE_SCLK_TOP0_PERIC1, 20, CLK_SET_RATE_PARENT, 0),
354ee74b56aSPadmavathi Venna 
355ee74b56aSPadmavathi Venna 	GATE(CLK_SCLK_SPI3, "sclk_spi3", "dout_sclk_spi3",
356ee74b56aSPadmavathi Venna 		ENABLE_SCLK_TOP0_PERIC2, 8, CLK_SET_RATE_PARENT, 0),
357ee74b56aSPadmavathi Venna 	GATE(CLK_SCLK_SPI2, "sclk_spi2", "dout_sclk_spi2",
358ee74b56aSPadmavathi Venna 		ENABLE_SCLK_TOP0_PERIC2, 20, CLK_SET_RATE_PARENT, 0),
359532abc3aSNaveen Krishna Ch 	GATE(CLK_SCLK_UART3, "sclk_uart3", "dout_sclk_uart3",
360532abc3aSNaveen Krishna Ch 		ENABLE_SCLK_TOP0_PERIC3, 4, 0, 0),
361532abc3aSNaveen Krishna Ch 	GATE(CLK_SCLK_UART2, "sclk_uart2", "dout_sclk_uart2",
362532abc3aSNaveen Krishna Ch 		ENABLE_SCLK_TOP0_PERIC3, 8, 0, 0),
363532abc3aSNaveen Krishna Ch 	GATE(CLK_SCLK_UART1, "sclk_uart1", "dout_sclk_uart1",
364532abc3aSNaveen Krishna Ch 		ENABLE_SCLK_TOP0_PERIC3, 12, 0, 0),
365532abc3aSNaveen Krishna Ch 	GATE(CLK_SCLK_UART0, "sclk_uart0", "dout_sclk_uart0",
366532abc3aSNaveen Krishna Ch 		ENABLE_SCLK_TOP0_PERIC3, 16, 0, 0),
367ee74b56aSPadmavathi Venna 	GATE(CLK_SCLK_SPI4, "sclk_spi4", "dout_sclk_spi4",
368ee74b56aSPadmavathi Venna 		ENABLE_SCLK_TOP0_PERIC3, 20, CLK_SET_RATE_PARENT, 0),
369532abc3aSNaveen Krishna Ch };
370532abc3aSNaveen Krishna Ch 
371a3618933SKrzysztof Kozlowski static const struct samsung_fixed_factor_clock top0_fixed_factor_clks[] __initconst = {
372cf5ee64cSAlim Akhtar 	FFACTOR(0, "ffac_top0_bus0_pll_div2", "mout_top0_bus0_pll_user",
373cf5ee64cSAlim Akhtar 		1, 2, 0),
374cf5ee64cSAlim Akhtar 	FFACTOR(0, "ffac_top0_bus1_pll_div2", "mout_top0_bus1_pll_user",
375cf5ee64cSAlim Akhtar 		1, 2, 0),
376cf5ee64cSAlim Akhtar 	FFACTOR(0, "ffac_top0_cc_pll_div2", "mout_top0_cc_pll_user", 1, 2, 0),
377cf5ee64cSAlim Akhtar 	FFACTOR(0, "ffac_top0_mfc_pll_div2", "mout_top0_mfc_pll_user", 1, 2, 0),
378532abc3aSNaveen Krishna Ch };
379532abc3aSNaveen Krishna Ch 
380a3618933SKrzysztof Kozlowski static const struct samsung_cmu_info top0_cmu_info __initconst = {
381532abc3aSNaveen Krishna Ch 	.mux_clks		= top0_mux_clks,
382532abc3aSNaveen Krishna Ch 	.nr_mux_clks		= ARRAY_SIZE(top0_mux_clks),
383532abc3aSNaveen Krishna Ch 	.div_clks		= top0_div_clks,
384532abc3aSNaveen Krishna Ch 	.nr_div_clks		= ARRAY_SIZE(top0_div_clks),
385532abc3aSNaveen Krishna Ch 	.gate_clks		= top0_gate_clks,
386532abc3aSNaveen Krishna Ch 	.nr_gate_clks		= ARRAY_SIZE(top0_gate_clks),
387532abc3aSNaveen Krishna Ch 	.fixed_factor_clks	= top0_fixed_factor_clks,
388532abc3aSNaveen Krishna Ch 	.nr_fixed_factor_clks	= ARRAY_SIZE(top0_fixed_factor_clks),
389532abc3aSNaveen Krishna Ch 	.nr_clk_ids		= TOP0_NR_CLK,
390532abc3aSNaveen Krishna Ch 	.clk_regs		= top0_clk_regs,
391532abc3aSNaveen Krishna Ch 	.nr_clk_regs		= ARRAY_SIZE(top0_clk_regs),
392532abc3aSNaveen Krishna Ch };
393532abc3aSNaveen Krishna Ch 
exynos7_clk_top0_init(struct device_node * np)394532abc3aSNaveen Krishna Ch static void __init exynos7_clk_top0_init(struct device_node *np)
395532abc3aSNaveen Krishna Ch {
396532abc3aSNaveen Krishna Ch 	samsung_cmu_register_one(np, &top0_cmu_info);
397532abc3aSNaveen Krishna Ch }
398532abc3aSNaveen Krishna Ch 
399532abc3aSNaveen Krishna Ch CLK_OF_DECLARE(exynos7_clk_top0, "samsung,exynos7-clock-top0",
400532abc3aSNaveen Krishna Ch 	exynos7_clk_top0_init);
401532abc3aSNaveen Krishna Ch 
4026d0c8c72SNaveen Krishna Ch /* Register Offset definitions for CMU_TOP1 (0x105E0000) */
4036d0c8c72SNaveen Krishna Ch #define MUX_SEL_TOP10			0x0200
4046d0c8c72SNaveen Krishna Ch #define MUX_SEL_TOP11			0x0204
4056d0c8c72SNaveen Krishna Ch #define MUX_SEL_TOP13			0x020C
4066d0c8c72SNaveen Krishna Ch #define MUX_SEL_TOP1_FSYS0		0x0224
4076d0c8c72SNaveen Krishna Ch #define MUX_SEL_TOP1_FSYS1		0x0228
408cfc7588aSAlim Akhtar #define MUX_SEL_TOP1_FSYS11		0x022C
4096d0c8c72SNaveen Krishna Ch #define DIV_TOP13			0x060C
4106d0c8c72SNaveen Krishna Ch #define DIV_TOP1_FSYS0			0x0624
4116d0c8c72SNaveen Krishna Ch #define DIV_TOP1_FSYS1			0x0628
412cfc7588aSAlim Akhtar #define DIV_TOP1_FSYS11			0x062C
4136d0c8c72SNaveen Krishna Ch #define ENABLE_ACLK_TOP13		0x080C
4146d0c8c72SNaveen Krishna Ch #define ENABLE_SCLK_TOP1_FSYS0		0x0A24
4156d0c8c72SNaveen Krishna Ch #define ENABLE_SCLK_TOP1_FSYS1		0x0A28
416cfc7588aSAlim Akhtar #define ENABLE_SCLK_TOP1_FSYS11		0x0A2C
4176d0c8c72SNaveen Krishna Ch 
4186d0c8c72SNaveen Krishna Ch /* List of parent clocks for Muxes in CMU_TOP1 */
4199b3ad363SAlim Akhtar PNAME(mout_top1_bus0_pll_user_p)	= { "fin_pll", "sclk_bus0_pll_b" };
4209b3ad363SAlim Akhtar PNAME(mout_top1_bus1_pll_user_p)	= { "fin_pll", "sclk_bus1_pll_b" };
4219b3ad363SAlim Akhtar PNAME(mout_top1_cc_pll_user_p)	= { "fin_pll", "sclk_cc_pll_b" };
4229b3ad363SAlim Akhtar PNAME(mout_top1_mfc_pll_user_p)	= { "fin_pll", "sclk_mfc_pll_b" };
4236d0c8c72SNaveen Krishna Ch 
4249b3ad363SAlim Akhtar PNAME(mout_top1_bus0_pll_half_p) = {"mout_top1_bus0_pll_user",
4256d0c8c72SNaveen Krishna Ch 	"ffac_top1_bus0_pll_div2"};
4269b3ad363SAlim Akhtar PNAME(mout_top1_bus1_pll_half_p) = {"mout_top1_bus1_pll_user",
4276d0c8c72SNaveen Krishna Ch 	"ffac_top1_bus1_pll_div2"};
4289b3ad363SAlim Akhtar PNAME(mout_top1_cc_pll_half_p) = {"mout_top1_cc_pll_user",
4296d0c8c72SNaveen Krishna Ch 	"ffac_top1_cc_pll_div2"};
4309b3ad363SAlim Akhtar PNAME(mout_top1_mfc_pll_half_p) = {"mout_top1_mfc_pll_user",
4316d0c8c72SNaveen Krishna Ch 	"ffac_top1_mfc_pll_div2"};
4326d0c8c72SNaveen Krishna Ch 
4339b3ad363SAlim Akhtar PNAME(mout_top1_group1) = {"mout_top1_bus0_pll_half",
4349b3ad363SAlim Akhtar 	"mout_top1_bus1_pll_half", "mout_top1_cc_pll_half",
4359b3ad363SAlim Akhtar 	"mout_top1_mfc_pll_half"};
4366d0c8c72SNaveen Krishna Ch 
437a3618933SKrzysztof Kozlowski static const unsigned long top1_clk_regs[] __initconst = {
4386d0c8c72SNaveen Krishna Ch 	MUX_SEL_TOP10,
4396d0c8c72SNaveen Krishna Ch 	MUX_SEL_TOP11,
4406d0c8c72SNaveen Krishna Ch 	MUX_SEL_TOP13,
4416d0c8c72SNaveen Krishna Ch 	MUX_SEL_TOP1_FSYS0,
4426d0c8c72SNaveen Krishna Ch 	MUX_SEL_TOP1_FSYS1,
443cfc7588aSAlim Akhtar 	MUX_SEL_TOP1_FSYS11,
4446d0c8c72SNaveen Krishna Ch 	DIV_TOP13,
4456d0c8c72SNaveen Krishna Ch 	DIV_TOP1_FSYS0,
4466d0c8c72SNaveen Krishna Ch 	DIV_TOP1_FSYS1,
447cfc7588aSAlim Akhtar 	DIV_TOP1_FSYS11,
4486d0c8c72SNaveen Krishna Ch 	ENABLE_ACLK_TOP13,
4496d0c8c72SNaveen Krishna Ch 	ENABLE_SCLK_TOP1_FSYS0,
4506d0c8c72SNaveen Krishna Ch 	ENABLE_SCLK_TOP1_FSYS1,
451cfc7588aSAlim Akhtar 	ENABLE_SCLK_TOP1_FSYS11,
4526d0c8c72SNaveen Krishna Ch };
4536d0c8c72SNaveen Krishna Ch 
454a3618933SKrzysztof Kozlowski static const struct samsung_mux_clock top1_mux_clks[] __initconst = {
4559b3ad363SAlim Akhtar 	MUX(0, "mout_top1_mfc_pll_user", mout_top1_mfc_pll_user_p,
4569b3ad363SAlim Akhtar 		MUX_SEL_TOP10, 4, 1),
4579b3ad363SAlim Akhtar 	MUX(0, "mout_top1_cc_pll_user", mout_top1_cc_pll_user_p,
4589b3ad363SAlim Akhtar 		MUX_SEL_TOP10, 8, 1),
4599b3ad363SAlim Akhtar 	MUX(0, "mout_top1_bus1_pll_user", mout_top1_bus1_pll_user_p,
4606d0c8c72SNaveen Krishna Ch 		MUX_SEL_TOP10, 12, 1),
4619b3ad363SAlim Akhtar 	MUX(0, "mout_top1_bus0_pll_user", mout_top1_bus0_pll_user_p,
4626d0c8c72SNaveen Krishna Ch 		MUX_SEL_TOP10, 16, 1),
4636d0c8c72SNaveen Krishna Ch 
4649b3ad363SAlim Akhtar 	MUX(0, "mout_top1_mfc_pll_half", mout_top1_mfc_pll_half_p,
4656d0c8c72SNaveen Krishna Ch 		MUX_SEL_TOP11, 4, 1),
4669b3ad363SAlim Akhtar 	MUX(0, "mout_top1_cc_pll_half", mout_top1_cc_pll_half_p,
4676d0c8c72SNaveen Krishna Ch 		MUX_SEL_TOP11, 8, 1),
4689b3ad363SAlim Akhtar 	MUX(0, "mout_top1_bus1_pll_half", mout_top1_bus1_pll_half_p,
4696d0c8c72SNaveen Krishna Ch 		MUX_SEL_TOP11, 12, 1),
4709b3ad363SAlim Akhtar 	MUX(0, "mout_top1_bus0_pll_half", mout_top1_bus0_pll_half_p,
4716d0c8c72SNaveen Krishna Ch 		MUX_SEL_TOP11, 16, 1),
4726d0c8c72SNaveen Krishna Ch 
4736d0c8c72SNaveen Krishna Ch 	MUX(0, "mout_aclk_fsys1_200", mout_top1_group1, MUX_SEL_TOP13, 24, 2),
4746d0c8c72SNaveen Krishna Ch 	MUX(0, "mout_aclk_fsys0_200", mout_top1_group1, MUX_SEL_TOP13, 28, 2),
4756d0c8c72SNaveen Krishna Ch 
4767993b3ebSAlim Akhtar 	MUX(0, "mout_sclk_phy_fsys0_26m", mout_top1_group1,
4777993b3ebSAlim Akhtar 		MUX_SEL_TOP1_FSYS0, 0, 2),
478cfc7588aSAlim Akhtar 	MUX(0, "mout_sclk_mmc2", mout_top1_group1, MUX_SEL_TOP1_FSYS0, 16, 2),
47983f191a7SVivek Gautam 	MUX(0, "mout_sclk_usbdrd300", mout_top1_group1,
48083f191a7SVivek Gautam 		MUX_SEL_TOP1_FSYS0, 28, 2),
4816d0c8c72SNaveen Krishna Ch 
4827993b3ebSAlim Akhtar 	MUX(0, "mout_sclk_phy_fsys1", mout_top1_group1,
4837993b3ebSAlim Akhtar 		MUX_SEL_TOP1_FSYS1, 0, 2),
4847993b3ebSAlim Akhtar 	MUX(0, "mout_sclk_ufsunipro20", mout_top1_group1,
4857993b3ebSAlim Akhtar 		MUX_SEL_TOP1_FSYS1, 16, 2),
4867993b3ebSAlim Akhtar 
487cfc7588aSAlim Akhtar 	MUX(0, "mout_sclk_mmc1", mout_top1_group1, MUX_SEL_TOP1_FSYS11, 0, 2),
488cfc7588aSAlim Akhtar 	MUX(0, "mout_sclk_mmc0", mout_top1_group1, MUX_SEL_TOP1_FSYS11, 12, 2),
4897993b3ebSAlim Akhtar 	MUX(0, "mout_sclk_phy_fsys1_26m", mout_top1_group1,
4907993b3ebSAlim Akhtar 		MUX_SEL_TOP1_FSYS11, 24, 2),
4916d0c8c72SNaveen Krishna Ch };
4926d0c8c72SNaveen Krishna Ch 
493a3618933SKrzysztof Kozlowski static const struct samsung_div_clock top1_div_clks[] __initconst = {
4946d0c8c72SNaveen Krishna Ch 	DIV(DOUT_ACLK_FSYS1_200, "dout_aclk_fsys1_200", "mout_aclk_fsys1_200",
4956d0c8c72SNaveen Krishna Ch 		DIV_TOP13, 24, 4),
4966d0c8c72SNaveen Krishna Ch 	DIV(DOUT_ACLK_FSYS0_200, "dout_aclk_fsys0_200", "mout_aclk_fsys0_200",
4976d0c8c72SNaveen Krishna Ch 		DIV_TOP13, 28, 4),
4986d0c8c72SNaveen Krishna Ch 
4997993b3ebSAlim Akhtar 	DIV(DOUT_SCLK_PHY_FSYS1, "dout_sclk_phy_fsys1",
5007993b3ebSAlim Akhtar 		"mout_sclk_phy_fsys1", DIV_TOP1_FSYS1, 0, 6),
5017993b3ebSAlim Akhtar 
5027993b3ebSAlim Akhtar 	DIV(DOUT_SCLK_UFSUNIPRO20, "dout_sclk_ufsunipro20",
5037993b3ebSAlim Akhtar 		"mout_sclk_ufsunipro20",
5047993b3ebSAlim Akhtar 		DIV_TOP1_FSYS1, 16, 6),
5057993b3ebSAlim Akhtar 
5066d0c8c72SNaveen Krishna Ch 	DIV(DOUT_SCLK_MMC2, "dout_sclk_mmc2", "mout_sclk_mmc2",
507cfc7588aSAlim Akhtar 		DIV_TOP1_FSYS0, 16, 10),
50883f191a7SVivek Gautam 	DIV(0, "dout_sclk_usbdrd300", "mout_sclk_usbdrd300",
50983f191a7SVivek Gautam 		DIV_TOP1_FSYS0, 28, 4),
5106d0c8c72SNaveen Krishna Ch 
5116d0c8c72SNaveen Krishna Ch 	DIV(DOUT_SCLK_MMC1, "dout_sclk_mmc1", "mout_sclk_mmc1",
512cfc7588aSAlim Akhtar 		DIV_TOP1_FSYS11, 0, 10),
5136d0c8c72SNaveen Krishna Ch 	DIV(DOUT_SCLK_MMC0, "dout_sclk_mmc0", "mout_sclk_mmc0",
514cfc7588aSAlim Akhtar 		DIV_TOP1_FSYS11, 12, 10),
5157993b3ebSAlim Akhtar 
5167993b3ebSAlim Akhtar 	DIV(DOUT_SCLK_PHY_FSYS1_26M, "dout_sclk_phy_fsys1_26m",
5177993b3ebSAlim Akhtar 		"mout_sclk_phy_fsys1_26m", DIV_TOP1_FSYS11, 24, 6),
5186d0c8c72SNaveen Krishna Ch };
5196d0c8c72SNaveen Krishna Ch 
520a3618933SKrzysztof Kozlowski static const struct samsung_gate_clock top1_gate_clks[] __initconst = {
5216d0c8c72SNaveen Krishna Ch 	GATE(CLK_SCLK_MMC2, "sclk_mmc2", "dout_sclk_mmc2",
522cfc7588aSAlim Akhtar 		ENABLE_SCLK_TOP1_FSYS0, 16, CLK_SET_RATE_PARENT, 0),
52383f191a7SVivek Gautam 	GATE(0, "sclk_usbdrd300", "dout_sclk_usbdrd300",
52483f191a7SVivek Gautam 		ENABLE_SCLK_TOP1_FSYS0, 28, 0, 0),
5256d0c8c72SNaveen Krishna Ch 
5267993b3ebSAlim Akhtar 	GATE(CLK_SCLK_PHY_FSYS1, "sclk_phy_fsys1", "dout_sclk_phy_fsys1",
5277993b3ebSAlim Akhtar 		ENABLE_SCLK_TOP1_FSYS1, 0, CLK_SET_RATE_PARENT, 0),
5287993b3ebSAlim Akhtar 
5297993b3ebSAlim Akhtar 	GATE(CLK_SCLK_UFSUNIPRO20, "sclk_ufsunipro20", "dout_sclk_ufsunipro20",
5307993b3ebSAlim Akhtar 		ENABLE_SCLK_TOP1_FSYS1, 16, CLK_SET_RATE_PARENT, 0),
5317993b3ebSAlim Akhtar 
5326d0c8c72SNaveen Krishna Ch 	GATE(CLK_SCLK_MMC1, "sclk_mmc1", "dout_sclk_mmc1",
533cfc7588aSAlim Akhtar 		ENABLE_SCLK_TOP1_FSYS11, 0, CLK_SET_RATE_PARENT, 0),
5346d0c8c72SNaveen Krishna Ch 	GATE(CLK_SCLK_MMC0, "sclk_mmc0", "dout_sclk_mmc0",
535cfc7588aSAlim Akhtar 		ENABLE_SCLK_TOP1_FSYS11, 12, CLK_SET_RATE_PARENT, 0),
536a259a61bSAlim Akhtar 
537a259a61bSAlim Akhtar 	GATE(CLK_ACLK_FSYS0_200, "aclk_fsys0_200", "dout_aclk_fsys0_200",
5389da752f0SAlim Akhtar 		ENABLE_ACLK_TOP13, 28, CLK_SET_RATE_PARENT |
5399da752f0SAlim Akhtar 		CLK_IS_CRITICAL, 0),
540*34138a59SPaweł Chmiel 	/*
541*34138a59SPaweł Chmiel 	 * This clock is required for the CMU_FSYS1 registers access, keep it
542*34138a59SPaweł Chmiel 	 * enabled permanently until proper runtime PM support is added.
543*34138a59SPaweł Chmiel 	 */
544753195a7SAlim Akhtar 	GATE(CLK_ACLK_FSYS1_200, "aclk_fsys1_200", "dout_aclk_fsys1_200",
545*34138a59SPaweł Chmiel 		ENABLE_ACLK_TOP13, 24, CLK_SET_RATE_PARENT |
546*34138a59SPaweł Chmiel 		CLK_IS_CRITICAL, 0),
5477993b3ebSAlim Akhtar 
5487993b3ebSAlim Akhtar 	GATE(CLK_SCLK_PHY_FSYS1_26M, "sclk_phy_fsys1_26m",
5497993b3ebSAlim Akhtar 		"dout_sclk_phy_fsys1_26m", ENABLE_SCLK_TOP1_FSYS11,
5507993b3ebSAlim Akhtar 		24, CLK_SET_RATE_PARENT, 0),
5516d0c8c72SNaveen Krishna Ch };
5526d0c8c72SNaveen Krishna Ch 
553a3618933SKrzysztof Kozlowski static const struct samsung_fixed_factor_clock top1_fixed_factor_clks[] __initconst = {
5549b3ad363SAlim Akhtar 	FFACTOR(0, "ffac_top1_bus0_pll_div2", "mout_top1_bus0_pll_user",
5559b3ad363SAlim Akhtar 		1, 2, 0),
5569b3ad363SAlim Akhtar 	FFACTOR(0, "ffac_top1_bus1_pll_div2", "mout_top1_bus1_pll_user",
5579b3ad363SAlim Akhtar 		1, 2, 0),
5589b3ad363SAlim Akhtar 	FFACTOR(0, "ffac_top1_cc_pll_div2", "mout_top1_cc_pll_user", 1, 2, 0),
5599b3ad363SAlim Akhtar 	FFACTOR(0, "ffac_top1_mfc_pll_div2", "mout_top1_mfc_pll_user", 1, 2, 0),
5606d0c8c72SNaveen Krishna Ch };
5616d0c8c72SNaveen Krishna Ch 
562a3618933SKrzysztof Kozlowski static const struct samsung_cmu_info top1_cmu_info __initconst = {
5636d0c8c72SNaveen Krishna Ch 	.mux_clks		= top1_mux_clks,
5646d0c8c72SNaveen Krishna Ch 	.nr_mux_clks		= ARRAY_SIZE(top1_mux_clks),
5656d0c8c72SNaveen Krishna Ch 	.div_clks		= top1_div_clks,
5666d0c8c72SNaveen Krishna Ch 	.nr_div_clks		= ARRAY_SIZE(top1_div_clks),
5676d0c8c72SNaveen Krishna Ch 	.gate_clks		= top1_gate_clks,
5686d0c8c72SNaveen Krishna Ch 	.nr_gate_clks		= ARRAY_SIZE(top1_gate_clks),
5696d0c8c72SNaveen Krishna Ch 	.fixed_factor_clks	= top1_fixed_factor_clks,
5706d0c8c72SNaveen Krishna Ch 	.nr_fixed_factor_clks	= ARRAY_SIZE(top1_fixed_factor_clks),
5716d0c8c72SNaveen Krishna Ch 	.nr_clk_ids		= TOP1_NR_CLK,
5726d0c8c72SNaveen Krishna Ch 	.clk_regs		= top1_clk_regs,
5736d0c8c72SNaveen Krishna Ch 	.nr_clk_regs		= ARRAY_SIZE(top1_clk_regs),
5746d0c8c72SNaveen Krishna Ch };
5756d0c8c72SNaveen Krishna Ch 
exynos7_clk_top1_init(struct device_node * np)5766d0c8c72SNaveen Krishna Ch static void __init exynos7_clk_top1_init(struct device_node *np)
5776d0c8c72SNaveen Krishna Ch {
5786d0c8c72SNaveen Krishna Ch 	samsung_cmu_register_one(np, &top1_cmu_info);
5796d0c8c72SNaveen Krishna Ch }
5806d0c8c72SNaveen Krishna Ch 
5816d0c8c72SNaveen Krishna Ch CLK_OF_DECLARE(exynos7_clk_top1, "samsung,exynos7-clock-top1",
5826d0c8c72SNaveen Krishna Ch 	exynos7_clk_top1_init);
5836d0c8c72SNaveen Krishna Ch 
584f5e127cdSNaveen Krishna Ch /* Register Offset definitions for CMU_CCORE (0x105B0000) */
585f5e127cdSNaveen Krishna Ch #define MUX_SEL_CCORE			0x0200
586f5e127cdSNaveen Krishna Ch #define DIV_CCORE			0x0600
587f5e127cdSNaveen Krishna Ch #define ENABLE_ACLK_CCORE0		0x0800
588f5e127cdSNaveen Krishna Ch #define ENABLE_ACLK_CCORE1		0x0804
589f5e127cdSNaveen Krishna Ch #define ENABLE_PCLK_CCORE		0x0900
590f5e127cdSNaveen Krishna Ch 
591f5e127cdSNaveen Krishna Ch /*
592f5e127cdSNaveen Krishna Ch  * List of parent clocks for Muxes in CMU_CCORE
593f5e127cdSNaveen Krishna Ch  */
59456365ee8SAlim Akhtar PNAME(mout_aclk_ccore_133_user_p)	= { "fin_pll", "aclk_ccore_133" };
595f5e127cdSNaveen Krishna Ch 
596a3618933SKrzysztof Kozlowski static const unsigned long ccore_clk_regs[] __initconst = {
597f5e127cdSNaveen Krishna Ch 	MUX_SEL_CCORE,
598f5e127cdSNaveen Krishna Ch 	ENABLE_PCLK_CCORE,
599f5e127cdSNaveen Krishna Ch };
600f5e127cdSNaveen Krishna Ch 
601a3618933SKrzysztof Kozlowski static const struct samsung_mux_clock ccore_mux_clks[] __initconst = {
60256365ee8SAlim Akhtar 	MUX(0, "mout_aclk_ccore_133_user", mout_aclk_ccore_133_user_p,
603f5e127cdSNaveen Krishna Ch 		MUX_SEL_CCORE, 1, 1),
604f5e127cdSNaveen Krishna Ch };
605f5e127cdSNaveen Krishna Ch 
606a3618933SKrzysztof Kozlowski static const struct samsung_gate_clock ccore_gate_clks[] __initconst = {
607f5e127cdSNaveen Krishna Ch 	GATE(PCLK_RTC, "pclk_rtc", "mout_aclk_ccore_133_user",
608f5e127cdSNaveen Krishna Ch 		ENABLE_PCLK_CCORE, 8, 0, 0),
609f5e127cdSNaveen Krishna Ch };
610f5e127cdSNaveen Krishna Ch 
611a3618933SKrzysztof Kozlowski static const struct samsung_cmu_info ccore_cmu_info __initconst = {
612f5e127cdSNaveen Krishna Ch 	.mux_clks		= ccore_mux_clks,
613f5e127cdSNaveen Krishna Ch 	.nr_mux_clks		= ARRAY_SIZE(ccore_mux_clks),
614f5e127cdSNaveen Krishna Ch 	.gate_clks		= ccore_gate_clks,
615f5e127cdSNaveen Krishna Ch 	.nr_gate_clks		= ARRAY_SIZE(ccore_gate_clks),
616f5e127cdSNaveen Krishna Ch 	.nr_clk_ids		= CCORE_NR_CLK,
617f5e127cdSNaveen Krishna Ch 	.clk_regs		= ccore_clk_regs,
618f5e127cdSNaveen Krishna Ch 	.nr_clk_regs		= ARRAY_SIZE(ccore_clk_regs),
619f5e127cdSNaveen Krishna Ch };
620f5e127cdSNaveen Krishna Ch 
exynos7_clk_ccore_init(struct device_node * np)621f5e127cdSNaveen Krishna Ch static void __init exynos7_clk_ccore_init(struct device_node *np)
622f5e127cdSNaveen Krishna Ch {
623f5e127cdSNaveen Krishna Ch 	samsung_cmu_register_one(np, &ccore_cmu_info);
624f5e127cdSNaveen Krishna Ch }
625f5e127cdSNaveen Krishna Ch 
626f5e127cdSNaveen Krishna Ch CLK_OF_DECLARE(exynos7_clk_ccore, "samsung,exynos7-clock-ccore",
627f5e127cdSNaveen Krishna Ch 	exynos7_clk_ccore_init);
628f5e127cdSNaveen Krishna Ch 
629532abc3aSNaveen Krishna Ch /* Register Offset definitions for CMU_PERIC0 (0x13610000) */
630532abc3aSNaveen Krishna Ch #define MUX_SEL_PERIC0			0x0200
631532abc3aSNaveen Krishna Ch #define ENABLE_PCLK_PERIC0		0x0900
632532abc3aSNaveen Krishna Ch #define ENABLE_SCLK_PERIC0		0x0A00
633532abc3aSNaveen Krishna Ch 
634532abc3aSNaveen Krishna Ch /* List of parent clocks for Muxes in CMU_PERIC0 */
6353f54fb1eSAlim Akhtar PNAME(mout_aclk_peric0_66_user_p)	= { "fin_pll", "aclk_peric0_66" };
6363f54fb1eSAlim Akhtar PNAME(mout_sclk_uart0_user_p)	= { "fin_pll", "sclk_uart0" };
637532abc3aSNaveen Krishna Ch 
638a3618933SKrzysztof Kozlowski static const unsigned long peric0_clk_regs[] __initconst = {
639532abc3aSNaveen Krishna Ch 	MUX_SEL_PERIC0,
640532abc3aSNaveen Krishna Ch 	ENABLE_PCLK_PERIC0,
641532abc3aSNaveen Krishna Ch 	ENABLE_SCLK_PERIC0,
642532abc3aSNaveen Krishna Ch };
643532abc3aSNaveen Krishna Ch 
644a3618933SKrzysztof Kozlowski static const struct samsung_mux_clock peric0_mux_clks[] __initconst = {
6453f54fb1eSAlim Akhtar 	MUX(0, "mout_aclk_peric0_66_user", mout_aclk_peric0_66_user_p,
646532abc3aSNaveen Krishna Ch 		MUX_SEL_PERIC0, 0, 1),
6473f54fb1eSAlim Akhtar 	MUX(0, "mout_sclk_uart0_user", mout_sclk_uart0_user_p,
648532abc3aSNaveen Krishna Ch 		MUX_SEL_PERIC0, 16, 1),
649532abc3aSNaveen Krishna Ch };
650532abc3aSNaveen Krishna Ch 
651a3618933SKrzysztof Kozlowski static const struct samsung_gate_clock peric0_gate_clks[] __initconst = {
65257a2b485SNaveen Krishna Ch 	GATE(PCLK_HSI2C0, "pclk_hsi2c0", "mout_aclk_peric0_66_user",
65357a2b485SNaveen Krishna Ch 		ENABLE_PCLK_PERIC0, 8, 0, 0),
65457a2b485SNaveen Krishna Ch 	GATE(PCLK_HSI2C1, "pclk_hsi2c1", "mout_aclk_peric0_66_user",
65557a2b485SNaveen Krishna Ch 		ENABLE_PCLK_PERIC0, 9, 0, 0),
65657a2b485SNaveen Krishna Ch 	GATE(PCLK_HSI2C4, "pclk_hsi2c4", "mout_aclk_peric0_66_user",
65757a2b485SNaveen Krishna Ch 		ENABLE_PCLK_PERIC0, 10, 0, 0),
65857a2b485SNaveen Krishna Ch 	GATE(PCLK_HSI2C5, "pclk_hsi2c5", "mout_aclk_peric0_66_user",
65957a2b485SNaveen Krishna Ch 		ENABLE_PCLK_PERIC0, 11, 0, 0),
66057a2b485SNaveen Krishna Ch 	GATE(PCLK_HSI2C9, "pclk_hsi2c9", "mout_aclk_peric0_66_user",
66157a2b485SNaveen Krishna Ch 		ENABLE_PCLK_PERIC0, 12, 0, 0),
66257a2b485SNaveen Krishna Ch 	GATE(PCLK_HSI2C10, "pclk_hsi2c10", "mout_aclk_peric0_66_user",
66357a2b485SNaveen Krishna Ch 		ENABLE_PCLK_PERIC0, 13, 0, 0),
66457a2b485SNaveen Krishna Ch 	GATE(PCLK_HSI2C11, "pclk_hsi2c11", "mout_aclk_peric0_66_user",
66557a2b485SNaveen Krishna Ch 		ENABLE_PCLK_PERIC0, 14, 0, 0),
666532abc3aSNaveen Krishna Ch 	GATE(PCLK_UART0, "pclk_uart0", "mout_aclk_peric0_66_user",
667532abc3aSNaveen Krishna Ch 		ENABLE_PCLK_PERIC0, 16, 0, 0),
668932e9822SAbhilash Kesavan 	GATE(PCLK_ADCIF, "pclk_adcif", "mout_aclk_peric0_66_user",
669932e9822SAbhilash Kesavan 		ENABLE_PCLK_PERIC0, 20, 0, 0),
6702ab2dfe5SNaveen Krishna Ch 	GATE(PCLK_PWM, "pclk_pwm", "mout_aclk_peric0_66_user",
6712ab2dfe5SNaveen Krishna Ch 		ENABLE_PCLK_PERIC0, 21, 0, 0),
672532abc3aSNaveen Krishna Ch 
673532abc3aSNaveen Krishna Ch 	GATE(SCLK_UART0, "sclk_uart0_user", "mout_sclk_uart0_user",
674532abc3aSNaveen Krishna Ch 		ENABLE_SCLK_PERIC0, 16, 0, 0),
6752ab2dfe5SNaveen Krishna Ch 	GATE(SCLK_PWM, "sclk_pwm", "fin_pll", ENABLE_SCLK_PERIC0, 21, 0, 0),
676532abc3aSNaveen Krishna Ch };
677532abc3aSNaveen Krishna Ch 
678a3618933SKrzysztof Kozlowski static const struct samsung_cmu_info peric0_cmu_info __initconst = {
679532abc3aSNaveen Krishna Ch 	.mux_clks		= peric0_mux_clks,
680532abc3aSNaveen Krishna Ch 	.nr_mux_clks		= ARRAY_SIZE(peric0_mux_clks),
681532abc3aSNaveen Krishna Ch 	.gate_clks		= peric0_gate_clks,
682532abc3aSNaveen Krishna Ch 	.nr_gate_clks		= ARRAY_SIZE(peric0_gate_clks),
683532abc3aSNaveen Krishna Ch 	.nr_clk_ids		= PERIC0_NR_CLK,
684532abc3aSNaveen Krishna Ch 	.clk_regs		= peric0_clk_regs,
685532abc3aSNaveen Krishna Ch 	.nr_clk_regs		= ARRAY_SIZE(peric0_clk_regs),
686532abc3aSNaveen Krishna Ch };
687532abc3aSNaveen Krishna Ch 
exynos7_clk_peric0_init(struct device_node * np)688532abc3aSNaveen Krishna Ch static void __init exynos7_clk_peric0_init(struct device_node *np)
689532abc3aSNaveen Krishna Ch {
690532abc3aSNaveen Krishna Ch 	samsung_cmu_register_one(np, &peric0_cmu_info);
691532abc3aSNaveen Krishna Ch }
692532abc3aSNaveen Krishna Ch 
693532abc3aSNaveen Krishna Ch /* Register Offset definitions for CMU_PERIC1 (0x14C80000) */
694532abc3aSNaveen Krishna Ch #define MUX_SEL_PERIC10			0x0200
695532abc3aSNaveen Krishna Ch #define MUX_SEL_PERIC11			0x0204
696ee74b56aSPadmavathi Venna #define MUX_SEL_PERIC12			0x0208
697532abc3aSNaveen Krishna Ch #define ENABLE_PCLK_PERIC1		0x0900
698532abc3aSNaveen Krishna Ch #define ENABLE_SCLK_PERIC10		0x0A00
699532abc3aSNaveen Krishna Ch 
700532abc3aSNaveen Krishna Ch CLK_OF_DECLARE(exynos7_clk_peric0, "samsung,exynos7-clock-peric0",
701532abc3aSNaveen Krishna Ch 	exynos7_clk_peric0_init);
702532abc3aSNaveen Krishna Ch 
703532abc3aSNaveen Krishna Ch /* List of parent clocks for Muxes in CMU_PERIC1 */
70433b8b739SAlim Akhtar PNAME(mout_aclk_peric1_66_user_p)	= { "fin_pll", "aclk_peric1_66" };
70533b8b739SAlim Akhtar PNAME(mout_sclk_uart1_user_p)	= { "fin_pll", "sclk_uart1" };
70633b8b739SAlim Akhtar PNAME(mout_sclk_uart2_user_p)	= { "fin_pll", "sclk_uart2" };
70733b8b739SAlim Akhtar PNAME(mout_sclk_uart3_user_p)	= { "fin_pll", "sclk_uart3" };
70833b8b739SAlim Akhtar PNAME(mout_sclk_spi0_user_p)		= { "fin_pll", "sclk_spi0" };
70933b8b739SAlim Akhtar PNAME(mout_sclk_spi1_user_p)		= { "fin_pll", "sclk_spi1" };
71033b8b739SAlim Akhtar PNAME(mout_sclk_spi2_user_p)		= { "fin_pll", "sclk_spi2" };
71133b8b739SAlim Akhtar PNAME(mout_sclk_spi3_user_p)		= { "fin_pll", "sclk_spi3" };
71233b8b739SAlim Akhtar PNAME(mout_sclk_spi4_user_p)		= { "fin_pll", "sclk_spi4" };
713532abc3aSNaveen Krishna Ch 
714a3618933SKrzysztof Kozlowski static const unsigned long peric1_clk_regs[] __initconst = {
715532abc3aSNaveen Krishna Ch 	MUX_SEL_PERIC10,
716532abc3aSNaveen Krishna Ch 	MUX_SEL_PERIC11,
717ee74b56aSPadmavathi Venna 	MUX_SEL_PERIC12,
718532abc3aSNaveen Krishna Ch 	ENABLE_PCLK_PERIC1,
719532abc3aSNaveen Krishna Ch 	ENABLE_SCLK_PERIC10,
720532abc3aSNaveen Krishna Ch };
721532abc3aSNaveen Krishna Ch 
722a3618933SKrzysztof Kozlowski static const struct samsung_mux_clock peric1_mux_clks[] __initconst = {
72333b8b739SAlim Akhtar 	MUX(0, "mout_aclk_peric1_66_user", mout_aclk_peric1_66_user_p,
724532abc3aSNaveen Krishna Ch 		MUX_SEL_PERIC10, 0, 1),
725532abc3aSNaveen Krishna Ch 
72633b8b739SAlim Akhtar 	MUX_F(0, "mout_sclk_spi0_user", mout_sclk_spi0_user_p,
727ee74b56aSPadmavathi Venna 		MUX_SEL_PERIC11, 0, 1, CLK_SET_RATE_PARENT, 0),
72833b8b739SAlim Akhtar 	MUX_F(0, "mout_sclk_spi1_user", mout_sclk_spi1_user_p,
729ee74b56aSPadmavathi Venna 		MUX_SEL_PERIC11, 4, 1, CLK_SET_RATE_PARENT, 0),
73033b8b739SAlim Akhtar 	MUX_F(0, "mout_sclk_spi2_user", mout_sclk_spi2_user_p,
731ee74b56aSPadmavathi Venna 		MUX_SEL_PERIC11, 8, 1, CLK_SET_RATE_PARENT, 0),
73233b8b739SAlim Akhtar 	MUX_F(0, "mout_sclk_spi3_user", mout_sclk_spi3_user_p,
733ee74b56aSPadmavathi Venna 		MUX_SEL_PERIC11, 12, 1, CLK_SET_RATE_PARENT, 0),
73433b8b739SAlim Akhtar 	MUX_F(0, "mout_sclk_spi4_user", mout_sclk_spi4_user_p,
735ee74b56aSPadmavathi Venna 		MUX_SEL_PERIC11, 16, 1, CLK_SET_RATE_PARENT, 0),
73633b8b739SAlim Akhtar 	MUX(0, "mout_sclk_uart1_user", mout_sclk_uart1_user_p,
737532abc3aSNaveen Krishna Ch 		MUX_SEL_PERIC11, 20, 1),
73833b8b739SAlim Akhtar 	MUX(0, "mout_sclk_uart2_user", mout_sclk_uart2_user_p,
739532abc3aSNaveen Krishna Ch 		MUX_SEL_PERIC11, 24, 1),
74033b8b739SAlim Akhtar 	MUX(0, "mout_sclk_uart3_user", mout_sclk_uart3_user_p,
741532abc3aSNaveen Krishna Ch 		MUX_SEL_PERIC11, 28, 1),
742532abc3aSNaveen Krishna Ch };
743532abc3aSNaveen Krishna Ch 
744a3618933SKrzysztof Kozlowski static const struct samsung_gate_clock peric1_gate_clks[] __initconst = {
74557a2b485SNaveen Krishna Ch 	GATE(PCLK_HSI2C2, "pclk_hsi2c2", "mout_aclk_peric1_66_user",
74657a2b485SNaveen Krishna Ch 		ENABLE_PCLK_PERIC1, 4, 0, 0),
74757a2b485SNaveen Krishna Ch 	GATE(PCLK_HSI2C3, "pclk_hsi2c3", "mout_aclk_peric1_66_user",
74857a2b485SNaveen Krishna Ch 		ENABLE_PCLK_PERIC1, 5, 0, 0),
74957a2b485SNaveen Krishna Ch 	GATE(PCLK_HSI2C6, "pclk_hsi2c6", "mout_aclk_peric1_66_user",
75057a2b485SNaveen Krishna Ch 		ENABLE_PCLK_PERIC1, 6, 0, 0),
75157a2b485SNaveen Krishna Ch 	GATE(PCLK_HSI2C7, "pclk_hsi2c7", "mout_aclk_peric1_66_user",
75257a2b485SNaveen Krishna Ch 		ENABLE_PCLK_PERIC1, 7, 0, 0),
75357a2b485SNaveen Krishna Ch 	GATE(PCLK_HSI2C8, "pclk_hsi2c8", "mout_aclk_peric1_66_user",
75457a2b485SNaveen Krishna Ch 		ENABLE_PCLK_PERIC1, 8, 0, 0),
755532abc3aSNaveen Krishna Ch 	GATE(PCLK_UART1, "pclk_uart1", "mout_aclk_peric1_66_user",
756532abc3aSNaveen Krishna Ch 		ENABLE_PCLK_PERIC1, 9, 0, 0),
757532abc3aSNaveen Krishna Ch 	GATE(PCLK_UART2, "pclk_uart2", "mout_aclk_peric1_66_user",
758532abc3aSNaveen Krishna Ch 		ENABLE_PCLK_PERIC1, 10, 0, 0),
759532abc3aSNaveen Krishna Ch 	GATE(PCLK_UART3, "pclk_uart3", "mout_aclk_peric1_66_user",
760532abc3aSNaveen Krishna Ch 		ENABLE_PCLK_PERIC1, 11, 0, 0),
761ee74b56aSPadmavathi Venna 	GATE(PCLK_SPI0, "pclk_spi0", "mout_aclk_peric1_66_user",
762ee74b56aSPadmavathi Venna 		ENABLE_PCLK_PERIC1, 12, 0, 0),
763ee74b56aSPadmavathi Venna 	GATE(PCLK_SPI1, "pclk_spi1", "mout_aclk_peric1_66_user",
764ee74b56aSPadmavathi Venna 		ENABLE_PCLK_PERIC1, 13, 0, 0),
765ee74b56aSPadmavathi Venna 	GATE(PCLK_SPI2, "pclk_spi2", "mout_aclk_peric1_66_user",
766ee74b56aSPadmavathi Venna 		ENABLE_PCLK_PERIC1, 14, 0, 0),
767ee74b56aSPadmavathi Venna 	GATE(PCLK_SPI3, "pclk_spi3", "mout_aclk_peric1_66_user",
768ee74b56aSPadmavathi Venna 		ENABLE_PCLK_PERIC1, 15, 0, 0),
769ee74b56aSPadmavathi Venna 	GATE(PCLK_SPI4, "pclk_spi4", "mout_aclk_peric1_66_user",
770ee74b56aSPadmavathi Venna 		ENABLE_PCLK_PERIC1, 16, 0, 0),
7719f930a39SPadmavathi Venna 	GATE(PCLK_I2S1, "pclk_i2s1", "mout_aclk_peric1_66_user",
7729f930a39SPadmavathi Venna 		ENABLE_PCLK_PERIC1, 17, CLK_SET_RATE_PARENT, 0),
7739f930a39SPadmavathi Venna 	GATE(PCLK_PCM1, "pclk_pcm1", "mout_aclk_peric1_66_user",
7749f930a39SPadmavathi Venna 		ENABLE_PCLK_PERIC1, 18, 0, 0),
7759f930a39SPadmavathi Venna 	GATE(PCLK_SPDIF, "pclk_spdif", "mout_aclk_peric1_66_user",
7769f930a39SPadmavathi Venna 		ENABLE_PCLK_PERIC1, 19, 0, 0),
777532abc3aSNaveen Krishna Ch 
778532abc3aSNaveen Krishna Ch 	GATE(SCLK_UART1, "sclk_uart1_user", "mout_sclk_uart1_user",
779532abc3aSNaveen Krishna Ch 		ENABLE_SCLK_PERIC10, 9, 0, 0),
780532abc3aSNaveen Krishna Ch 	GATE(SCLK_UART2, "sclk_uart2_user", "mout_sclk_uart2_user",
781532abc3aSNaveen Krishna Ch 		ENABLE_SCLK_PERIC10, 10, 0, 0),
782532abc3aSNaveen Krishna Ch 	GATE(SCLK_UART3, "sclk_uart3_user", "mout_sclk_uart3_user",
783532abc3aSNaveen Krishna Ch 		ENABLE_SCLK_PERIC10, 11, 0, 0),
784ee74b56aSPadmavathi Venna 	GATE(SCLK_SPI0, "sclk_spi0_user", "mout_sclk_spi0_user",
785ee74b56aSPadmavathi Venna 		ENABLE_SCLK_PERIC10, 12, CLK_SET_RATE_PARENT, 0),
786ee74b56aSPadmavathi Venna 	GATE(SCLK_SPI1, "sclk_spi1_user", "mout_sclk_spi1_user",
787ee74b56aSPadmavathi Venna 		ENABLE_SCLK_PERIC10, 13, CLK_SET_RATE_PARENT, 0),
788ee74b56aSPadmavathi Venna 	GATE(SCLK_SPI2, "sclk_spi2_user", "mout_sclk_spi2_user",
789ee74b56aSPadmavathi Venna 		ENABLE_SCLK_PERIC10, 14, CLK_SET_RATE_PARENT, 0),
790ee74b56aSPadmavathi Venna 	GATE(SCLK_SPI3, "sclk_spi3_user", "mout_sclk_spi3_user",
791ee74b56aSPadmavathi Venna 		ENABLE_SCLK_PERIC10, 15, CLK_SET_RATE_PARENT, 0),
792ee74b56aSPadmavathi Venna 	GATE(SCLK_SPI4, "sclk_spi4_user", "mout_sclk_spi4_user",
793ee74b56aSPadmavathi Venna 		ENABLE_SCLK_PERIC10, 16, CLK_SET_RATE_PARENT, 0),
7949f930a39SPadmavathi Venna 	GATE(SCLK_I2S1, "sclk_i2s1_user", "sclk_i2s1",
7959f930a39SPadmavathi Venna 		ENABLE_SCLK_PERIC10, 17, CLK_SET_RATE_PARENT, 0),
7969f930a39SPadmavathi Venna 	GATE(SCLK_PCM1, "sclk_pcm1_user", "sclk_pcm1",
7979f930a39SPadmavathi Venna 		ENABLE_SCLK_PERIC10, 18, CLK_SET_RATE_PARENT, 0),
7989f930a39SPadmavathi Venna 	GATE(SCLK_SPDIF, "sclk_spdif_user", "sclk_spdif",
7999f930a39SPadmavathi Venna 		ENABLE_SCLK_PERIC10, 19, CLK_SET_RATE_PARENT, 0),
800532abc3aSNaveen Krishna Ch };
801532abc3aSNaveen Krishna Ch 
802a3618933SKrzysztof Kozlowski static const struct samsung_cmu_info peric1_cmu_info __initconst = {
803532abc3aSNaveen Krishna Ch 	.mux_clks		= peric1_mux_clks,
804532abc3aSNaveen Krishna Ch 	.nr_mux_clks		= ARRAY_SIZE(peric1_mux_clks),
805532abc3aSNaveen Krishna Ch 	.gate_clks		= peric1_gate_clks,
806532abc3aSNaveen Krishna Ch 	.nr_gate_clks		= ARRAY_SIZE(peric1_gate_clks),
807532abc3aSNaveen Krishna Ch 	.nr_clk_ids		= PERIC1_NR_CLK,
808532abc3aSNaveen Krishna Ch 	.clk_regs		= peric1_clk_regs,
809532abc3aSNaveen Krishna Ch 	.nr_clk_regs		= ARRAY_SIZE(peric1_clk_regs),
810532abc3aSNaveen Krishna Ch };
811532abc3aSNaveen Krishna Ch 
exynos7_clk_peric1_init(struct device_node * np)812532abc3aSNaveen Krishna Ch static void __init exynos7_clk_peric1_init(struct device_node *np)
813532abc3aSNaveen Krishna Ch {
814532abc3aSNaveen Krishna Ch 	samsung_cmu_register_one(np, &peric1_cmu_info);
815532abc3aSNaveen Krishna Ch }
816532abc3aSNaveen Krishna Ch 
817532abc3aSNaveen Krishna Ch CLK_OF_DECLARE(exynos7_clk_peric1, "samsung,exynos7-clock-peric1",
818532abc3aSNaveen Krishna Ch 	exynos7_clk_peric1_init);
819532abc3aSNaveen Krishna Ch 
820532abc3aSNaveen Krishna Ch /* Register Offset definitions for CMU_PERIS (0x10040000) */
821532abc3aSNaveen Krishna Ch #define MUX_SEL_PERIS			0x0200
8222ab2dfe5SNaveen Krishna Ch #define ENABLE_PCLK_PERIS		0x0900
823532abc3aSNaveen Krishna Ch #define ENABLE_PCLK_PERIS_SECURE_CHIPID	0x0910
8242ab2dfe5SNaveen Krishna Ch #define ENABLE_SCLK_PERIS		0x0A00
825532abc3aSNaveen Krishna Ch #define ENABLE_SCLK_PERIS_SECURE_CHIPID	0x0A10
826532abc3aSNaveen Krishna Ch 
827532abc3aSNaveen Krishna Ch /* List of parent clocks for Muxes in CMU_PERIS */
8286ce0f5cfSAlim Akhtar PNAME(mout_aclk_peris_66_user_p) = { "fin_pll", "aclk_peris_66" };
829532abc3aSNaveen Krishna Ch 
830a3618933SKrzysztof Kozlowski static const unsigned long peris_clk_regs[] __initconst = {
831532abc3aSNaveen Krishna Ch 	MUX_SEL_PERIS,
8322ab2dfe5SNaveen Krishna Ch 	ENABLE_PCLK_PERIS,
833532abc3aSNaveen Krishna Ch 	ENABLE_PCLK_PERIS_SECURE_CHIPID,
8342ab2dfe5SNaveen Krishna Ch 	ENABLE_SCLK_PERIS,
835532abc3aSNaveen Krishna Ch 	ENABLE_SCLK_PERIS_SECURE_CHIPID,
836532abc3aSNaveen Krishna Ch };
837532abc3aSNaveen Krishna Ch 
838a3618933SKrzysztof Kozlowski static const struct samsung_mux_clock peris_mux_clks[] __initconst = {
839532abc3aSNaveen Krishna Ch 	MUX(0, "mout_aclk_peris_66_user",
8406ce0f5cfSAlim Akhtar 		mout_aclk_peris_66_user_p, MUX_SEL_PERIS, 0, 1),
841532abc3aSNaveen Krishna Ch };
842532abc3aSNaveen Krishna Ch 
843a3618933SKrzysztof Kozlowski static const struct samsung_gate_clock peris_gate_clks[] __initconst = {
8442ab2dfe5SNaveen Krishna Ch 	GATE(PCLK_WDT, "pclk_wdt", "mout_aclk_peris_66_user",
8452ab2dfe5SNaveen Krishna Ch 		ENABLE_PCLK_PERIS, 6, 0, 0),
8462ab2dfe5SNaveen Krishna Ch 	GATE(PCLK_TMU, "pclk_tmu_apbif", "mout_aclk_peris_66_user",
8472ab2dfe5SNaveen Krishna Ch 		ENABLE_PCLK_PERIS, 10, 0, 0),
8482ab2dfe5SNaveen Krishna Ch 
849532abc3aSNaveen Krishna Ch 	GATE(PCLK_CHIPID, "pclk_chipid", "mout_aclk_peris_66_user",
850532abc3aSNaveen Krishna Ch 		ENABLE_PCLK_PERIS_SECURE_CHIPID, 0, 0, 0),
851532abc3aSNaveen Krishna Ch 	GATE(SCLK_CHIPID, "sclk_chipid", "fin_pll",
852532abc3aSNaveen Krishna Ch 		ENABLE_SCLK_PERIS_SECURE_CHIPID, 0, 0, 0),
8532ab2dfe5SNaveen Krishna Ch 
8542ab2dfe5SNaveen Krishna Ch 	GATE(SCLK_TMU, "sclk_tmu", "fin_pll", ENABLE_SCLK_PERIS, 10, 0, 0),
855532abc3aSNaveen Krishna Ch };
856532abc3aSNaveen Krishna Ch 
857a3618933SKrzysztof Kozlowski static const struct samsung_cmu_info peris_cmu_info __initconst = {
858532abc3aSNaveen Krishna Ch 	.mux_clks		= peris_mux_clks,
859532abc3aSNaveen Krishna Ch 	.nr_mux_clks		= ARRAY_SIZE(peris_mux_clks),
860532abc3aSNaveen Krishna Ch 	.gate_clks		= peris_gate_clks,
861532abc3aSNaveen Krishna Ch 	.nr_gate_clks		= ARRAY_SIZE(peris_gate_clks),
862532abc3aSNaveen Krishna Ch 	.nr_clk_ids		= PERIS_NR_CLK,
863532abc3aSNaveen Krishna Ch 	.clk_regs		= peris_clk_regs,
864532abc3aSNaveen Krishna Ch 	.nr_clk_regs		= ARRAY_SIZE(peris_clk_regs),
865532abc3aSNaveen Krishna Ch };
866532abc3aSNaveen Krishna Ch 
exynos7_clk_peris_init(struct device_node * np)867532abc3aSNaveen Krishna Ch static void __init exynos7_clk_peris_init(struct device_node *np)
868532abc3aSNaveen Krishna Ch {
869532abc3aSNaveen Krishna Ch 	samsung_cmu_register_one(np, &peris_cmu_info);
870532abc3aSNaveen Krishna Ch }
871532abc3aSNaveen Krishna Ch 
872532abc3aSNaveen Krishna Ch CLK_OF_DECLARE(exynos7_clk_peris, "samsung,exynos7-clock-peris",
873532abc3aSNaveen Krishna Ch 	exynos7_clk_peris_init);
8746d0c8c72SNaveen Krishna Ch 
8756d0c8c72SNaveen Krishna Ch /* Register Offset definitions for CMU_FSYS0 (0x10E90000) */
8766d0c8c72SNaveen Krishna Ch #define MUX_SEL_FSYS00			0x0200
8776d0c8c72SNaveen Krishna Ch #define MUX_SEL_FSYS01			0x0204
87883f191a7SVivek Gautam #define MUX_SEL_FSYS02			0x0208
87983f191a7SVivek Gautam #define ENABLE_ACLK_FSYS00		0x0800
8806d0c8c72SNaveen Krishna Ch #define ENABLE_ACLK_FSYS01		0x0804
88183f191a7SVivek Gautam #define ENABLE_SCLK_FSYS01		0x0A04
88283f191a7SVivek Gautam #define ENABLE_SCLK_FSYS02		0x0A08
88383f191a7SVivek Gautam #define ENABLE_SCLK_FSYS04		0x0A10
8846d0c8c72SNaveen Krishna Ch 
8856d0c8c72SNaveen Krishna Ch /*
8866d0c8c72SNaveen Krishna Ch  * List of parent clocks for Muxes in CMU_FSYS0
8876d0c8c72SNaveen Krishna Ch  */
888a259a61bSAlim Akhtar PNAME(mout_aclk_fsys0_200_user_p)	= { "fin_pll", "aclk_fsys0_200" };
889a259a61bSAlim Akhtar PNAME(mout_sclk_mmc2_user_p)		= { "fin_pll", "sclk_mmc2" };
8906d0c8c72SNaveen Krishna Ch 
891a259a61bSAlim Akhtar PNAME(mout_sclk_usbdrd300_user_p)	= { "fin_pll", "sclk_usbdrd300" };
892a259a61bSAlim Akhtar PNAME(mout_phyclk_usbdrd300_udrd30_phyclk_user_p)	= { "fin_pll",
89383f191a7SVivek Gautam 				"phyclk_usbdrd300_udrd30_phyclock" };
894a259a61bSAlim Akhtar PNAME(mout_phyclk_usbdrd300_udrd30_pipe_pclk_user_p)	= { "fin_pll",
89583f191a7SVivek Gautam 				"phyclk_usbdrd300_udrd30_pipe_pclk" };
89683f191a7SVivek Gautam 
89783f191a7SVivek Gautam /* fixed rate clocks used in the FSYS0 block */
898a3618933SKrzysztof Kozlowski static const struct samsung_fixed_rate_clock fixed_rate_clks_fsys0[] __initconst = {
899728f288dSStephen Boyd 	FRATE(0, "phyclk_usbdrd300_udrd30_phyclock", NULL, 0, 60000000),
900728f288dSStephen Boyd 	FRATE(0, "phyclk_usbdrd300_udrd30_pipe_pclk", NULL, 0, 125000000),
90183f191a7SVivek Gautam };
90283f191a7SVivek Gautam 
903a3618933SKrzysztof Kozlowski static const unsigned long fsys0_clk_regs[] __initconst = {
9046d0c8c72SNaveen Krishna Ch 	MUX_SEL_FSYS00,
9056d0c8c72SNaveen Krishna Ch 	MUX_SEL_FSYS01,
90683f191a7SVivek Gautam 	MUX_SEL_FSYS02,
90783f191a7SVivek Gautam 	ENABLE_ACLK_FSYS00,
9086d0c8c72SNaveen Krishna Ch 	ENABLE_ACLK_FSYS01,
90983f191a7SVivek Gautam 	ENABLE_SCLK_FSYS01,
91083f191a7SVivek Gautam 	ENABLE_SCLK_FSYS02,
91183f191a7SVivek Gautam 	ENABLE_SCLK_FSYS04,
9126d0c8c72SNaveen Krishna Ch };
9136d0c8c72SNaveen Krishna Ch 
914a3618933SKrzysztof Kozlowski static const struct samsung_mux_clock fsys0_mux_clks[] __initconst = {
915a259a61bSAlim Akhtar 	MUX(0, "mout_aclk_fsys0_200_user", mout_aclk_fsys0_200_user_p,
9166d0c8c72SNaveen Krishna Ch 		MUX_SEL_FSYS00, 24, 1),
9176d0c8c72SNaveen Krishna Ch 
918a259a61bSAlim Akhtar 	MUX(0, "mout_sclk_mmc2_user", mout_sclk_mmc2_user_p,
919a259a61bSAlim Akhtar 		MUX_SEL_FSYS01, 24, 1),
920a259a61bSAlim Akhtar 	MUX(0, "mout_sclk_usbdrd300_user", mout_sclk_usbdrd300_user_p,
92183f191a7SVivek Gautam 		MUX_SEL_FSYS01, 28, 1),
92283f191a7SVivek Gautam 
92383f191a7SVivek Gautam 	MUX(0, "mout_phyclk_usbdrd300_udrd30_pipe_pclk_user",
924a259a61bSAlim Akhtar 		mout_phyclk_usbdrd300_udrd30_pipe_pclk_user_p,
92583f191a7SVivek Gautam 		MUX_SEL_FSYS02, 24, 1),
92683f191a7SVivek Gautam 	MUX(0, "mout_phyclk_usbdrd300_udrd30_phyclk_user",
927a259a61bSAlim Akhtar 		mout_phyclk_usbdrd300_udrd30_phyclk_user_p,
92883f191a7SVivek Gautam 		MUX_SEL_FSYS02, 28, 1),
9296d0c8c72SNaveen Krishna Ch };
9306d0c8c72SNaveen Krishna Ch 
931a3618933SKrzysztof Kozlowski static const struct samsung_gate_clock fsys0_gate_clks[] __initconst = {
9329cc2a0c9SPadmavathi Venna 	GATE(ACLK_PDMA1, "aclk_pdma1", "mout_aclk_fsys0_200_user",
9339cc2a0c9SPadmavathi Venna 			ENABLE_ACLK_FSYS00, 3, 0, 0),
9349cc2a0c9SPadmavathi Venna 	GATE(ACLK_PDMA0, "aclk_pdma0", "mout_aclk_fsys0_200_user",
9359cc2a0c9SPadmavathi Venna 			ENABLE_ACLK_FSYS00, 4, 0, 0),
9367cca2e07SAlim Akhtar 	GATE(ACLK_AXIUS_USBDRD30X_FSYS0X, "aclk_axius_usbdrd30x_fsys0x",
9377cca2e07SAlim Akhtar 		"mout_aclk_fsys0_200_user",
9387cca2e07SAlim Akhtar 		ENABLE_ACLK_FSYS00, 19, 0, 0),
93983f191a7SVivek Gautam 
94083f191a7SVivek Gautam 	GATE(ACLK_USBDRD300, "aclk_usbdrd300", "mout_aclk_fsys0_200_user",
94183f191a7SVivek Gautam 		ENABLE_ACLK_FSYS01, 29, 0, 0),
9426d0c8c72SNaveen Krishna Ch 	GATE(ACLK_MMC2, "aclk_mmc2", "mout_aclk_fsys0_200_user",
9436d0c8c72SNaveen Krishna Ch 		ENABLE_ACLK_FSYS01, 31, 0, 0),
94483f191a7SVivek Gautam 
94583f191a7SVivek Gautam 	GATE(SCLK_USBDRD300_SUSPENDCLK, "sclk_usbdrd300_suspendclk",
94683f191a7SVivek Gautam 		"mout_sclk_usbdrd300_user",
94783f191a7SVivek Gautam 		ENABLE_SCLK_FSYS01, 4, 0, 0),
94883f191a7SVivek Gautam 	GATE(SCLK_USBDRD300_REFCLK, "sclk_usbdrd300_refclk", "fin_pll",
94983f191a7SVivek Gautam 		ENABLE_SCLK_FSYS01, 8, 0, 0),
95083f191a7SVivek Gautam 
95183f191a7SVivek Gautam 	GATE(PHYCLK_USBDRD300_UDRD30_PIPE_PCLK_USER,
95283f191a7SVivek Gautam 		"phyclk_usbdrd300_udrd30_pipe_pclk_user",
95383f191a7SVivek Gautam 		"mout_phyclk_usbdrd300_udrd30_pipe_pclk_user",
95483f191a7SVivek Gautam 		ENABLE_SCLK_FSYS02, 24, 0, 0),
95583f191a7SVivek Gautam 	GATE(PHYCLK_USBDRD300_UDRD30_PHYCLK_USER,
95683f191a7SVivek Gautam 		"phyclk_usbdrd300_udrd30_phyclk_user",
95783f191a7SVivek Gautam 		"mout_phyclk_usbdrd300_udrd30_phyclk_user",
95883f191a7SVivek Gautam 		ENABLE_SCLK_FSYS02, 28, 0, 0),
95983f191a7SVivek Gautam 
96083f191a7SVivek Gautam 	GATE(OSCCLK_PHY_CLKOUT_USB30_PHY, "oscclk_phy_clkout_usb30_phy",
96183f191a7SVivek Gautam 		"fin_pll",
96283f191a7SVivek Gautam 		ENABLE_SCLK_FSYS04, 28, 0, 0),
9636d0c8c72SNaveen Krishna Ch };
9646d0c8c72SNaveen Krishna Ch 
965a3618933SKrzysztof Kozlowski static const struct samsung_cmu_info fsys0_cmu_info __initconst = {
966ad108e10SAlim Akhtar 	.fixed_clks		= fixed_rate_clks_fsys0,
967ad108e10SAlim Akhtar 	.nr_fixed_clks		= ARRAY_SIZE(fixed_rate_clks_fsys0),
9686d0c8c72SNaveen Krishna Ch 	.mux_clks		= fsys0_mux_clks,
9696d0c8c72SNaveen Krishna Ch 	.nr_mux_clks		= ARRAY_SIZE(fsys0_mux_clks),
9706d0c8c72SNaveen Krishna Ch 	.gate_clks		= fsys0_gate_clks,
9716d0c8c72SNaveen Krishna Ch 	.nr_gate_clks		= ARRAY_SIZE(fsys0_gate_clks),
9727cca2e07SAlim Akhtar 	.nr_clk_ids		= FSYS0_NR_CLK,
9736d0c8c72SNaveen Krishna Ch 	.clk_regs		= fsys0_clk_regs,
9746d0c8c72SNaveen Krishna Ch 	.nr_clk_regs		= ARRAY_SIZE(fsys0_clk_regs),
9756d0c8c72SNaveen Krishna Ch };
9766d0c8c72SNaveen Krishna Ch 
exynos7_clk_fsys0_init(struct device_node * np)9776d0c8c72SNaveen Krishna Ch static void __init exynos7_clk_fsys0_init(struct device_node *np)
9786d0c8c72SNaveen Krishna Ch {
9796d0c8c72SNaveen Krishna Ch 	samsung_cmu_register_one(np, &fsys0_cmu_info);
9806d0c8c72SNaveen Krishna Ch }
9816d0c8c72SNaveen Krishna Ch 
9826d0c8c72SNaveen Krishna Ch CLK_OF_DECLARE(exynos7_clk_fsys0, "samsung,exynos7-clock-fsys0",
9836d0c8c72SNaveen Krishna Ch 	exynos7_clk_fsys0_init);
9846d0c8c72SNaveen Krishna Ch 
9856d0c8c72SNaveen Krishna Ch /* Register Offset definitions for CMU_FSYS1 (0x156E0000) */
9866d0c8c72SNaveen Krishna Ch #define MUX_SEL_FSYS10			0x0200
9876d0c8c72SNaveen Krishna Ch #define MUX_SEL_FSYS11			0x0204
9887993b3ebSAlim Akhtar #define MUX_SEL_FSYS12			0x0208
9897993b3ebSAlim Akhtar #define DIV_FSYS1			0x0600
9906d0c8c72SNaveen Krishna Ch #define ENABLE_ACLK_FSYS1		0x0800
9917993b3ebSAlim Akhtar #define ENABLE_PCLK_FSYS1               0x0900
9927993b3ebSAlim Akhtar #define ENABLE_SCLK_FSYS11              0x0A04
9937993b3ebSAlim Akhtar #define ENABLE_SCLK_FSYS12              0x0A08
9947993b3ebSAlim Akhtar #define ENABLE_SCLK_FSYS13              0x0A0C
9956d0c8c72SNaveen Krishna Ch 
9966d0c8c72SNaveen Krishna Ch /*
9976d0c8c72SNaveen Krishna Ch  * List of parent clocks for Muxes in CMU_FSYS1
9986d0c8c72SNaveen Krishna Ch  */
999753195a7SAlim Akhtar PNAME(mout_aclk_fsys1_200_user_p)	= { "fin_pll", "aclk_fsys1_200" };
10007993b3ebSAlim Akhtar PNAME(mout_fsys1_group_p)	= { "fin_pll", "fin_pll_26m",
10017993b3ebSAlim Akhtar 				"sclk_phy_fsys1_26m" };
1002753195a7SAlim Akhtar PNAME(mout_sclk_mmc0_user_p)		= { "fin_pll", "sclk_mmc0" };
1003753195a7SAlim Akhtar PNAME(mout_sclk_mmc1_user_p)		= { "fin_pll", "sclk_mmc1" };
10047993b3ebSAlim Akhtar PNAME(mout_sclk_ufsunipro20_user_p)  = { "fin_pll", "sclk_ufsunipro20" };
10057993b3ebSAlim Akhtar PNAME(mout_phyclk_ufs20_tx0_user_p) = { "fin_pll", "phyclk_ufs20_tx0_symbol" };
10067993b3ebSAlim Akhtar PNAME(mout_phyclk_ufs20_rx0_user_p) = { "fin_pll", "phyclk_ufs20_rx0_symbol" };
10077993b3ebSAlim Akhtar PNAME(mout_phyclk_ufs20_rx1_user_p) = { "fin_pll", "phyclk_ufs20_rx1_symbol" };
10087993b3ebSAlim Akhtar 
10097993b3ebSAlim Akhtar /* fixed rate clocks used in the FSYS1 block */
1010a3618933SKrzysztof Kozlowski static const struct samsung_fixed_rate_clock fixed_rate_clks_fsys1[] __initconst = {
10117993b3ebSAlim Akhtar 	FRATE(PHYCLK_UFS20_TX0_SYMBOL, "phyclk_ufs20_tx0_symbol", NULL,
1012728f288dSStephen Boyd 			0, 300000000),
10137993b3ebSAlim Akhtar 	FRATE(PHYCLK_UFS20_RX0_SYMBOL, "phyclk_ufs20_rx0_symbol", NULL,
1014728f288dSStephen Boyd 			0, 300000000),
10157993b3ebSAlim Akhtar 	FRATE(PHYCLK_UFS20_RX1_SYMBOL, "phyclk_ufs20_rx1_symbol", NULL,
1016728f288dSStephen Boyd 			0, 300000000),
10177993b3ebSAlim Akhtar };
10186d0c8c72SNaveen Krishna Ch 
1019a3618933SKrzysztof Kozlowski static const unsigned long fsys1_clk_regs[] __initconst = {
10206d0c8c72SNaveen Krishna Ch 	MUX_SEL_FSYS10,
10216d0c8c72SNaveen Krishna Ch 	MUX_SEL_FSYS11,
10227993b3ebSAlim Akhtar 	MUX_SEL_FSYS12,
10237993b3ebSAlim Akhtar 	DIV_FSYS1,
10246d0c8c72SNaveen Krishna Ch 	ENABLE_ACLK_FSYS1,
10257993b3ebSAlim Akhtar 	ENABLE_PCLK_FSYS1,
10267993b3ebSAlim Akhtar 	ENABLE_SCLK_FSYS11,
10277993b3ebSAlim Akhtar 	ENABLE_SCLK_FSYS12,
10287993b3ebSAlim Akhtar 	ENABLE_SCLK_FSYS13,
10296d0c8c72SNaveen Krishna Ch };
10306d0c8c72SNaveen Krishna Ch 
1031a3618933SKrzysztof Kozlowski static const struct samsung_mux_clock fsys1_mux_clks[] __initconst = {
10327993b3ebSAlim Akhtar 	MUX(MOUT_FSYS1_PHYCLK_SEL1, "mout_fsys1_phyclk_sel1",
10337993b3ebSAlim Akhtar 		mout_fsys1_group_p, MUX_SEL_FSYS10, 16, 2),
10347993b3ebSAlim Akhtar 	MUX(0, "mout_fsys1_phyclk_sel0", mout_fsys1_group_p,
10357993b3ebSAlim Akhtar 		 MUX_SEL_FSYS10, 20, 2),
1036753195a7SAlim Akhtar 	MUX(0, "mout_aclk_fsys1_200_user", mout_aclk_fsys1_200_user_p,
10376d0c8c72SNaveen Krishna Ch 		MUX_SEL_FSYS10, 28, 1),
10386d0c8c72SNaveen Krishna Ch 
1039753195a7SAlim Akhtar 	MUX(0, "mout_sclk_mmc1_user", mout_sclk_mmc1_user_p,
1040753195a7SAlim Akhtar 		MUX_SEL_FSYS11, 24, 1),
1041753195a7SAlim Akhtar 	MUX(0, "mout_sclk_mmc0_user", mout_sclk_mmc0_user_p,
1042753195a7SAlim Akhtar 		MUX_SEL_FSYS11, 28, 1),
10437993b3ebSAlim Akhtar 	MUX(0, "mout_sclk_ufsunipro20_user", mout_sclk_ufsunipro20_user_p,
10447993b3ebSAlim Akhtar 		MUX_SEL_FSYS11, 20, 1),
10457993b3ebSAlim Akhtar 
10467993b3ebSAlim Akhtar 	MUX(0, "mout_phyclk_ufs20_rx1_symbol_user",
10477993b3ebSAlim Akhtar 		mout_phyclk_ufs20_rx1_user_p, MUX_SEL_FSYS12, 16, 1),
10487993b3ebSAlim Akhtar 	MUX(0, "mout_phyclk_ufs20_rx0_symbol_user",
10497993b3ebSAlim Akhtar 		mout_phyclk_ufs20_rx0_user_p, MUX_SEL_FSYS12, 24, 1),
10507993b3ebSAlim Akhtar 	MUX(0, "mout_phyclk_ufs20_tx0_symbol_user",
10517993b3ebSAlim Akhtar 		mout_phyclk_ufs20_tx0_user_p, MUX_SEL_FSYS12, 28, 1),
10527993b3ebSAlim Akhtar };
10537993b3ebSAlim Akhtar 
1054a3618933SKrzysztof Kozlowski static const struct samsung_div_clock fsys1_div_clks[] __initconst = {
10557993b3ebSAlim Akhtar 	DIV(DOUT_PCLK_FSYS1, "dout_pclk_fsys1", "mout_aclk_fsys1_200_user",
10567993b3ebSAlim Akhtar 		DIV_FSYS1, 0, 2),
10576d0c8c72SNaveen Krishna Ch };
10586d0c8c72SNaveen Krishna Ch 
1059a3618933SKrzysztof Kozlowski static const struct samsung_gate_clock fsys1_gate_clks[] __initconst = {
10607993b3ebSAlim Akhtar 	GATE(SCLK_UFSUNIPRO20_USER, "sclk_ufsunipro20_user",
10617993b3ebSAlim Akhtar 		"mout_sclk_ufsunipro20_user",
10627993b3ebSAlim Akhtar 		ENABLE_SCLK_FSYS11, 20, 0, 0),
10637993b3ebSAlim Akhtar 
10646d0c8c72SNaveen Krishna Ch 	GATE(ACLK_MMC1, "aclk_mmc1", "mout_aclk_fsys1_200_user",
10656d0c8c72SNaveen Krishna Ch 		ENABLE_ACLK_FSYS1, 29, 0, 0),
10666d0c8c72SNaveen Krishna Ch 	GATE(ACLK_MMC0, "aclk_mmc0", "mout_aclk_fsys1_200_user",
10676d0c8c72SNaveen Krishna Ch 		ENABLE_ACLK_FSYS1, 30, 0, 0),
10687993b3ebSAlim Akhtar 
10697993b3ebSAlim Akhtar 	GATE(ACLK_UFS20_LINK, "aclk_ufs20_link", "dout_pclk_fsys1",
10707993b3ebSAlim Akhtar 		ENABLE_ACLK_FSYS1, 31, 0, 0),
10717993b3ebSAlim Akhtar 	GATE(PCLK_GPIO_FSYS1, "pclk_gpio_fsys1", "mout_aclk_fsys1_200_user",
10727993b3ebSAlim Akhtar 		ENABLE_PCLK_FSYS1, 30, 0, 0),
10737993b3ebSAlim Akhtar 
10747993b3ebSAlim Akhtar 	GATE(PHYCLK_UFS20_RX1_SYMBOL_USER, "phyclk_ufs20_rx1_symbol_user",
10757993b3ebSAlim Akhtar 		"mout_phyclk_ufs20_rx1_symbol_user",
10767993b3ebSAlim Akhtar 		ENABLE_SCLK_FSYS12, 16, 0, 0),
10777993b3ebSAlim Akhtar 	GATE(PHYCLK_UFS20_RX0_SYMBOL_USER, "phyclk_ufs20_rx0_symbol_user",
10787993b3ebSAlim Akhtar 		"mout_phyclk_ufs20_rx0_symbol_user",
10797993b3ebSAlim Akhtar 		ENABLE_SCLK_FSYS12, 24, 0, 0),
10807993b3ebSAlim Akhtar 	GATE(PHYCLK_UFS20_TX0_SYMBOL_USER, "phyclk_ufs20_tx0_symbol_user",
10817993b3ebSAlim Akhtar 		"mout_phyclk_ufs20_tx0_symbol_user",
10827993b3ebSAlim Akhtar 		ENABLE_SCLK_FSYS12, 28, 0, 0),
10837993b3ebSAlim Akhtar 
10847993b3ebSAlim Akhtar 	GATE(OSCCLK_PHY_CLKOUT_EMBEDDED_COMBO_PHY,
10857993b3ebSAlim Akhtar 		"oscclk_phy_clkout_embedded_combo_phy",
10867993b3ebSAlim Akhtar 		"fin_pll",
10877993b3ebSAlim Akhtar 		ENABLE_SCLK_FSYS12, 4, CLK_IGNORE_UNUSED, 0),
10887993b3ebSAlim Akhtar 
10897993b3ebSAlim Akhtar 	GATE(SCLK_COMBO_PHY_EMBEDDED_26M, "sclk_combo_phy_embedded_26m",
10907993b3ebSAlim Akhtar 		"mout_fsys1_phyclk_sel1",
10917993b3ebSAlim Akhtar 		ENABLE_SCLK_FSYS13, 24, CLK_IGNORE_UNUSED, 0),
10926d0c8c72SNaveen Krishna Ch };
10936d0c8c72SNaveen Krishna Ch 
1094a3618933SKrzysztof Kozlowski static const struct samsung_cmu_info fsys1_cmu_info __initconst = {
10957993b3ebSAlim Akhtar 	.fixed_clks		= fixed_rate_clks_fsys1,
10967993b3ebSAlim Akhtar 	.nr_fixed_clks		= ARRAY_SIZE(fixed_rate_clks_fsys1),
10976d0c8c72SNaveen Krishna Ch 	.mux_clks		= fsys1_mux_clks,
10986d0c8c72SNaveen Krishna Ch 	.nr_mux_clks		= ARRAY_SIZE(fsys1_mux_clks),
10997993b3ebSAlim Akhtar 	.div_clks		= fsys1_div_clks,
11007993b3ebSAlim Akhtar 	.nr_div_clks		= ARRAY_SIZE(fsys1_div_clks),
11016d0c8c72SNaveen Krishna Ch 	.gate_clks		= fsys1_gate_clks,
11026d0c8c72SNaveen Krishna Ch 	.nr_gate_clks		= ARRAY_SIZE(fsys1_gate_clks),
1103167c9e4dSAlim Akhtar 	.nr_clk_ids		= FSYS1_NR_CLK,
11046d0c8c72SNaveen Krishna Ch 	.clk_regs		= fsys1_clk_regs,
11056d0c8c72SNaveen Krishna Ch 	.nr_clk_regs		= ARRAY_SIZE(fsys1_clk_regs),
11066d0c8c72SNaveen Krishna Ch };
11076d0c8c72SNaveen Krishna Ch 
exynos7_clk_fsys1_init(struct device_node * np)11086d0c8c72SNaveen Krishna Ch static void __init exynos7_clk_fsys1_init(struct device_node *np)
11096d0c8c72SNaveen Krishna Ch {
11106d0c8c72SNaveen Krishna Ch 	samsung_cmu_register_one(np, &fsys1_cmu_info);
11116d0c8c72SNaveen Krishna Ch }
11126d0c8c72SNaveen Krishna Ch 
11136d0c8c72SNaveen Krishna Ch CLK_OF_DECLARE(exynos7_clk_fsys1, "samsung,exynos7-clock-fsys1",
11146d0c8c72SNaveen Krishna Ch 	exynos7_clk_fsys1_init);
111549cab82cSTony K Nadackal 
111649cab82cSTony K Nadackal #define MUX_SEL_MSCL			0x0200
111749cab82cSTony K Nadackal #define DIV_MSCL			0x0600
111849cab82cSTony K Nadackal #define ENABLE_ACLK_MSCL		0x0800
111949cab82cSTony K Nadackal #define ENABLE_PCLK_MSCL		0x0900
112049cab82cSTony K Nadackal 
112149cab82cSTony K Nadackal /* List of parent clocks for Muxes in CMU_MSCL */
112249cab82cSTony K Nadackal PNAME(mout_aclk_mscl_532_user_p)	= { "fin_pll", "aclk_mscl_532" };
112349cab82cSTony K Nadackal 
1124a3618933SKrzysztof Kozlowski static const unsigned long mscl_clk_regs[] __initconst = {
112549cab82cSTony K Nadackal 	MUX_SEL_MSCL,
112649cab82cSTony K Nadackal 	DIV_MSCL,
112749cab82cSTony K Nadackal 	ENABLE_ACLK_MSCL,
112849cab82cSTony K Nadackal 	ENABLE_PCLK_MSCL,
112949cab82cSTony K Nadackal };
113049cab82cSTony K Nadackal 
1131a3618933SKrzysztof Kozlowski static const struct samsung_mux_clock mscl_mux_clks[] __initconst = {
113249cab82cSTony K Nadackal 	MUX(USERMUX_ACLK_MSCL_532, "usermux_aclk_mscl_532",
113349cab82cSTony K Nadackal 		mout_aclk_mscl_532_user_p, MUX_SEL_MSCL, 0, 1),
113449cab82cSTony K Nadackal };
1135a3618933SKrzysztof Kozlowski static const struct samsung_div_clock mscl_div_clks[] __initconst = {
113649cab82cSTony K Nadackal 	DIV(DOUT_PCLK_MSCL, "dout_pclk_mscl", "usermux_aclk_mscl_532",
113749cab82cSTony K Nadackal 			DIV_MSCL, 0, 3),
113849cab82cSTony K Nadackal };
1139a3618933SKrzysztof Kozlowski static const struct samsung_gate_clock mscl_gate_clks[] __initconst = {
114049cab82cSTony K Nadackal 
114149cab82cSTony K Nadackal 	GATE(ACLK_MSCL_0, "aclk_mscl_0", "usermux_aclk_mscl_532",
114249cab82cSTony K Nadackal 			ENABLE_ACLK_MSCL, 31, 0, 0),
114349cab82cSTony K Nadackal 	GATE(ACLK_MSCL_1, "aclk_mscl_1", "usermux_aclk_mscl_532",
114449cab82cSTony K Nadackal 			ENABLE_ACLK_MSCL, 30, 0, 0),
114549cab82cSTony K Nadackal 	GATE(ACLK_JPEG, "aclk_jpeg", "usermux_aclk_mscl_532",
114649cab82cSTony K Nadackal 			ENABLE_ACLK_MSCL, 29, 0, 0),
114749cab82cSTony K Nadackal 	GATE(ACLK_G2D, "aclk_g2d", "usermux_aclk_mscl_532",
114849cab82cSTony K Nadackal 			ENABLE_ACLK_MSCL, 28, 0, 0),
114949cab82cSTony K Nadackal 	GATE(ACLK_LH_ASYNC_SI_MSCL_0, "aclk_lh_async_si_mscl_0",
115049cab82cSTony K Nadackal 			"usermux_aclk_mscl_532",
115149cab82cSTony K Nadackal 			ENABLE_ACLK_MSCL, 27, 0, 0),
115249cab82cSTony K Nadackal 	GATE(ACLK_LH_ASYNC_SI_MSCL_1, "aclk_lh_async_si_mscl_1",
115349cab82cSTony K Nadackal 			"usermux_aclk_mscl_532",
115449cab82cSTony K Nadackal 			ENABLE_ACLK_MSCL, 26, 0, 0),
115549cab82cSTony K Nadackal 	GATE(ACLK_XIU_MSCLX_0, "aclk_xiu_msclx_0", "usermux_aclk_mscl_532",
115649cab82cSTony K Nadackal 			ENABLE_ACLK_MSCL, 25, 0, 0),
115749cab82cSTony K Nadackal 	GATE(ACLK_XIU_MSCLX_1, "aclk_xiu_msclx_1", "usermux_aclk_mscl_532",
115849cab82cSTony K Nadackal 			ENABLE_ACLK_MSCL, 24, 0, 0),
115949cab82cSTony K Nadackal 	GATE(ACLK_AXI2ACEL_BRIDGE, "aclk_axi2acel_bridge",
116049cab82cSTony K Nadackal 			"usermux_aclk_mscl_532",
116149cab82cSTony K Nadackal 			ENABLE_ACLK_MSCL, 23, 0, 0),
116249cab82cSTony K Nadackal 	GATE(ACLK_QE_MSCL_0, "aclk_qe_mscl_0", "usermux_aclk_mscl_532",
116349cab82cSTony K Nadackal 			ENABLE_ACLK_MSCL, 22, 0, 0),
116449cab82cSTony K Nadackal 	GATE(ACLK_QE_MSCL_1, "aclk_qe_mscl_1", "usermux_aclk_mscl_532",
116549cab82cSTony K Nadackal 			ENABLE_ACLK_MSCL, 21, 0, 0),
116649cab82cSTony K Nadackal 	GATE(ACLK_QE_JPEG, "aclk_qe_jpeg", "usermux_aclk_mscl_532",
116749cab82cSTony K Nadackal 			ENABLE_ACLK_MSCL, 20, 0, 0),
116849cab82cSTony K Nadackal 	GATE(ACLK_QE_G2D, "aclk_qe_g2d", "usermux_aclk_mscl_532",
116949cab82cSTony K Nadackal 			ENABLE_ACLK_MSCL, 19, 0, 0),
117049cab82cSTony K Nadackal 	GATE(ACLK_PPMU_MSCL_0, "aclk_ppmu_mscl_0", "usermux_aclk_mscl_532",
117149cab82cSTony K Nadackal 			ENABLE_ACLK_MSCL, 18, 0, 0),
117249cab82cSTony K Nadackal 	GATE(ACLK_PPMU_MSCL_1, "aclk_ppmu_mscl_1", "usermux_aclk_mscl_532",
117349cab82cSTony K Nadackal 			ENABLE_ACLK_MSCL, 17, 0, 0),
117449cab82cSTony K Nadackal 	GATE(ACLK_MSCLNP_133, "aclk_msclnp_133", "usermux_aclk_mscl_532",
117549cab82cSTony K Nadackal 			ENABLE_ACLK_MSCL, 16, 0, 0),
117649cab82cSTony K Nadackal 	GATE(ACLK_AHB2APB_MSCL0P, "aclk_ahb2apb_mscl0p",
117749cab82cSTony K Nadackal 			"usermux_aclk_mscl_532",
117849cab82cSTony K Nadackal 			ENABLE_ACLK_MSCL, 15, 0, 0),
117949cab82cSTony K Nadackal 	GATE(ACLK_AHB2APB_MSCL1P, "aclk_ahb2apb_mscl1p",
118049cab82cSTony K Nadackal 			"usermux_aclk_mscl_532",
118149cab82cSTony K Nadackal 			ENABLE_ACLK_MSCL, 14, 0, 0),
118249cab82cSTony K Nadackal 
118349cab82cSTony K Nadackal 	GATE(PCLK_MSCL_0, "pclk_mscl_0", "dout_pclk_mscl",
118449cab82cSTony K Nadackal 			ENABLE_PCLK_MSCL, 31, 0, 0),
118549cab82cSTony K Nadackal 	GATE(PCLK_MSCL_1, "pclk_mscl_1", "dout_pclk_mscl",
118649cab82cSTony K Nadackal 			ENABLE_PCLK_MSCL, 30, 0, 0),
118749cab82cSTony K Nadackal 	GATE(PCLK_JPEG, "pclk_jpeg", "dout_pclk_mscl",
118849cab82cSTony K Nadackal 			ENABLE_PCLK_MSCL, 29, 0, 0),
118949cab82cSTony K Nadackal 	GATE(PCLK_G2D, "pclk_g2d", "dout_pclk_mscl",
119049cab82cSTony K Nadackal 			ENABLE_PCLK_MSCL, 28, 0, 0),
119149cab82cSTony K Nadackal 	GATE(PCLK_QE_MSCL_0, "pclk_qe_mscl_0", "dout_pclk_mscl",
119249cab82cSTony K Nadackal 			ENABLE_PCLK_MSCL, 27, 0, 0),
119349cab82cSTony K Nadackal 	GATE(PCLK_QE_MSCL_1, "pclk_qe_mscl_1", "dout_pclk_mscl",
119449cab82cSTony K Nadackal 			ENABLE_PCLK_MSCL, 26, 0, 0),
119549cab82cSTony K Nadackal 	GATE(PCLK_QE_JPEG, "pclk_qe_jpeg", "dout_pclk_mscl",
119649cab82cSTony K Nadackal 			ENABLE_PCLK_MSCL, 25, 0, 0),
119749cab82cSTony K Nadackal 	GATE(PCLK_QE_G2D, "pclk_qe_g2d", "dout_pclk_mscl",
119849cab82cSTony K Nadackal 			ENABLE_PCLK_MSCL, 24, 0, 0),
119949cab82cSTony K Nadackal 	GATE(PCLK_PPMU_MSCL_0, "pclk_ppmu_mscl_0", "dout_pclk_mscl",
120049cab82cSTony K Nadackal 			ENABLE_PCLK_MSCL, 23, 0, 0),
120149cab82cSTony K Nadackal 	GATE(PCLK_PPMU_MSCL_1, "pclk_ppmu_mscl_1", "dout_pclk_mscl",
120249cab82cSTony K Nadackal 			ENABLE_PCLK_MSCL, 22, 0, 0),
120349cab82cSTony K Nadackal 	GATE(PCLK_AXI2ACEL_BRIDGE, "pclk_axi2acel_bridge", "dout_pclk_mscl",
120449cab82cSTony K Nadackal 			ENABLE_PCLK_MSCL, 21, 0, 0),
120549cab82cSTony K Nadackal 	GATE(PCLK_PMU_MSCL, "pclk_pmu_mscl", "dout_pclk_mscl",
120649cab82cSTony K Nadackal 			ENABLE_PCLK_MSCL, 20, 0, 0),
120749cab82cSTony K Nadackal };
120849cab82cSTony K Nadackal 
1209a3618933SKrzysztof Kozlowski static const struct samsung_cmu_info mscl_cmu_info __initconst = {
121049cab82cSTony K Nadackal 	.mux_clks		= mscl_mux_clks,
121149cab82cSTony K Nadackal 	.nr_mux_clks		= ARRAY_SIZE(mscl_mux_clks),
121249cab82cSTony K Nadackal 	.div_clks		= mscl_div_clks,
121349cab82cSTony K Nadackal 	.nr_div_clks		= ARRAY_SIZE(mscl_div_clks),
121449cab82cSTony K Nadackal 	.gate_clks		= mscl_gate_clks,
121549cab82cSTony K Nadackal 	.nr_gate_clks		= ARRAY_SIZE(mscl_gate_clks),
121649cab82cSTony K Nadackal 	.nr_clk_ids		= MSCL_NR_CLK,
121749cab82cSTony K Nadackal 	.clk_regs		= mscl_clk_regs,
121849cab82cSTony K Nadackal 	.nr_clk_regs		= ARRAY_SIZE(mscl_clk_regs),
121949cab82cSTony K Nadackal };
122049cab82cSTony K Nadackal 
exynos7_clk_mscl_init(struct device_node * np)122149cab82cSTony K Nadackal static void __init exynos7_clk_mscl_init(struct device_node *np)
122249cab82cSTony K Nadackal {
122349cab82cSTony K Nadackal 	samsung_cmu_register_one(np, &mscl_cmu_info);
122449cab82cSTony K Nadackal }
122549cab82cSTony K Nadackal 
122649cab82cSTony K Nadackal CLK_OF_DECLARE(exynos7_clk_mscl, "samsung,exynos7-clock-mscl",
122749cab82cSTony K Nadackal 		exynos7_clk_mscl_init);
12289f930a39SPadmavathi Venna 
12299f930a39SPadmavathi Venna /* Register Offset definitions for CMU_AUD (0x114C0000) */
12309f930a39SPadmavathi Venna #define	MUX_SEL_AUD			0x0200
12319f930a39SPadmavathi Venna #define	DIV_AUD0			0x0600
12329f930a39SPadmavathi Venna #define	DIV_AUD1			0x0604
12339f930a39SPadmavathi Venna #define	ENABLE_ACLK_AUD			0x0800
12349f930a39SPadmavathi Venna #define	ENABLE_PCLK_AUD			0x0900
12359f930a39SPadmavathi Venna #define	ENABLE_SCLK_AUD			0x0A00
12369f930a39SPadmavathi Venna 
12379f930a39SPadmavathi Venna /*
12389f930a39SPadmavathi Venna  * List of parent clocks for Muxes in CMU_AUD
12399f930a39SPadmavathi Venna  */
12409f930a39SPadmavathi Venna PNAME(mout_aud_pll_user_p) = { "fin_pll", "fout_aud_pll" };
12419f930a39SPadmavathi Venna PNAME(mout_aud_group_p) = { "dout_aud_cdclk", "ioclk_audiocdclk0" };
12429f930a39SPadmavathi Venna 
1243a3618933SKrzysztof Kozlowski static const unsigned long aud_clk_regs[] __initconst = {
12449f930a39SPadmavathi Venna 	MUX_SEL_AUD,
12459f930a39SPadmavathi Venna 	DIV_AUD0,
12469f930a39SPadmavathi Venna 	DIV_AUD1,
12479f930a39SPadmavathi Venna 	ENABLE_ACLK_AUD,
12489f930a39SPadmavathi Venna 	ENABLE_PCLK_AUD,
12499f930a39SPadmavathi Venna 	ENABLE_SCLK_AUD,
12509f930a39SPadmavathi Venna };
12519f930a39SPadmavathi Venna 
1252a3618933SKrzysztof Kozlowski static const struct samsung_mux_clock aud_mux_clks[] __initconst = {
12539f930a39SPadmavathi Venna 	MUX(0, "mout_sclk_i2s", mout_aud_group_p, MUX_SEL_AUD, 12, 1),
12549f930a39SPadmavathi Venna 	MUX(0, "mout_sclk_pcm", mout_aud_group_p, MUX_SEL_AUD, 16, 1),
12559f930a39SPadmavathi Venna 	MUX(0, "mout_aud_pll_user", mout_aud_pll_user_p, MUX_SEL_AUD, 20, 1),
12569f930a39SPadmavathi Venna };
12579f930a39SPadmavathi Venna 
1258a3618933SKrzysztof Kozlowski static const struct samsung_div_clock aud_div_clks[] __initconst = {
12599f930a39SPadmavathi Venna 	DIV(0, "dout_aud_ca5", "mout_aud_pll_user", DIV_AUD0, 0, 4),
12609f930a39SPadmavathi Venna 	DIV(0, "dout_aclk_aud", "dout_aud_ca5", DIV_AUD0, 4, 4),
12619f930a39SPadmavathi Venna 	DIV(0, "dout_aud_pclk_dbg", "dout_aud_ca5", DIV_AUD0, 8, 4),
12629f930a39SPadmavathi Venna 
12639f930a39SPadmavathi Venna 	DIV(0, "dout_sclk_i2s", "mout_sclk_i2s", DIV_AUD1, 0, 4),
12649f930a39SPadmavathi Venna 	DIV(0, "dout_sclk_pcm", "mout_sclk_pcm", DIV_AUD1, 4, 8),
12659f930a39SPadmavathi Venna 	DIV(0, "dout_sclk_uart", "dout_aud_cdclk", DIV_AUD1, 12, 4),
12669f930a39SPadmavathi Venna 	DIV(0, "dout_sclk_slimbus", "dout_aud_cdclk", DIV_AUD1, 16, 5),
12679f930a39SPadmavathi Venna 	DIV(0, "dout_aud_cdclk", "mout_aud_pll_user", DIV_AUD1, 24, 4),
12689f930a39SPadmavathi Venna };
12699f930a39SPadmavathi Venna 
1270a3618933SKrzysztof Kozlowski static const struct samsung_gate_clock aud_gate_clks[] __initconst = {
12719f930a39SPadmavathi Venna 	GATE(SCLK_PCM, "sclk_pcm", "dout_sclk_pcm",
12729f930a39SPadmavathi Venna 			ENABLE_SCLK_AUD, 27, CLK_SET_RATE_PARENT, 0),
12739f930a39SPadmavathi Venna 	GATE(SCLK_I2S, "sclk_i2s", "dout_sclk_i2s",
12749f930a39SPadmavathi Venna 			ENABLE_SCLK_AUD, 28, CLK_SET_RATE_PARENT, 0),
12759f930a39SPadmavathi Venna 	GATE(0, "sclk_uart", "dout_sclk_uart", ENABLE_SCLK_AUD, 29, 0, 0),
12769f930a39SPadmavathi Venna 	GATE(0, "sclk_slimbus", "dout_sclk_slimbus",
12779f930a39SPadmavathi Venna 			ENABLE_SCLK_AUD, 30, 0, 0),
12789f930a39SPadmavathi Venna 
12799f930a39SPadmavathi Venna 	GATE(0, "pclk_dbg_aud", "dout_aud_pclk_dbg", ENABLE_PCLK_AUD, 19, 0, 0),
12809f930a39SPadmavathi Venna 	GATE(0, "pclk_gpio_aud", "dout_aclk_aud", ENABLE_PCLK_AUD, 20, 0, 0),
12819f930a39SPadmavathi Venna 	GATE(0, "pclk_wdt1", "dout_aclk_aud", ENABLE_PCLK_AUD, 22, 0, 0),
12829f930a39SPadmavathi Venna 	GATE(0, "pclk_wdt0", "dout_aclk_aud", ENABLE_PCLK_AUD, 23, 0, 0),
12839f930a39SPadmavathi Venna 	GATE(0, "pclk_slimbus", "dout_aclk_aud", ENABLE_PCLK_AUD, 24, 0, 0),
12849f930a39SPadmavathi Venna 	GATE(0, "pclk_uart", "dout_aclk_aud", ENABLE_PCLK_AUD, 25, 0, 0),
12859f930a39SPadmavathi Venna 	GATE(PCLK_PCM, "pclk_pcm", "dout_aclk_aud",
12869f930a39SPadmavathi Venna 			ENABLE_PCLK_AUD, 26, CLK_SET_RATE_PARENT, 0),
12879f930a39SPadmavathi Venna 	GATE(PCLK_I2S, "pclk_i2s", "dout_aclk_aud",
12889f930a39SPadmavathi Venna 			ENABLE_PCLK_AUD, 27, CLK_SET_RATE_PARENT, 0),
12899f930a39SPadmavathi Venna 	GATE(0, "pclk_timer", "dout_aclk_aud", ENABLE_PCLK_AUD, 28, 0, 0),
12909f930a39SPadmavathi Venna 	GATE(0, "pclk_smmu_aud", "dout_aclk_aud", ENABLE_PCLK_AUD, 31, 0, 0),
12919f930a39SPadmavathi Venna 
12929f930a39SPadmavathi Venna 	GATE(0, "aclk_smmu_aud", "dout_aclk_aud", ENABLE_ACLK_AUD, 27, 0, 0),
12939f930a39SPadmavathi Venna 	GATE(0, "aclk_acel_lh_async_si_top", "dout_aclk_aud",
12949f930a39SPadmavathi Venna 			 ENABLE_ACLK_AUD, 28, 0, 0),
12959f930a39SPadmavathi Venna 	GATE(ACLK_ADMA, "aclk_dmac", "dout_aclk_aud", ENABLE_ACLK_AUD, 31, 0, 0),
12969f930a39SPadmavathi Venna };
12979f930a39SPadmavathi Venna 
1298a3618933SKrzysztof Kozlowski static const struct samsung_cmu_info aud_cmu_info __initconst = {
12999f930a39SPadmavathi Venna 	.mux_clks		= aud_mux_clks,
13009f930a39SPadmavathi Venna 	.nr_mux_clks		= ARRAY_SIZE(aud_mux_clks),
13019f930a39SPadmavathi Venna 	.div_clks		= aud_div_clks,
13029f930a39SPadmavathi Venna 	.nr_div_clks		= ARRAY_SIZE(aud_div_clks),
13039f930a39SPadmavathi Venna 	.gate_clks		= aud_gate_clks,
13049f930a39SPadmavathi Venna 	.nr_gate_clks		= ARRAY_SIZE(aud_gate_clks),
13059f930a39SPadmavathi Venna 	.nr_clk_ids		= AUD_NR_CLK,
13069f930a39SPadmavathi Venna 	.clk_regs		= aud_clk_regs,
13079f930a39SPadmavathi Venna 	.nr_clk_regs		= ARRAY_SIZE(aud_clk_regs),
13089f930a39SPadmavathi Venna };
13099f930a39SPadmavathi Venna 
exynos7_clk_aud_init(struct device_node * np)13109f930a39SPadmavathi Venna static void __init exynos7_clk_aud_init(struct device_node *np)
13119f930a39SPadmavathi Venna {
13129f930a39SPadmavathi Venna 	samsung_cmu_register_one(np, &aud_cmu_info);
13139f930a39SPadmavathi Venna }
13149f930a39SPadmavathi Venna 
13159f930a39SPadmavathi Venna CLK_OF_DECLARE(exynos7_clk_aud, "samsung,exynos7-clock-aud",
13169f930a39SPadmavathi Venna 		exynos7_clk_aud_init);
1317