xref: /openbmc/linux/drivers/clk/qcom/gcc-msm8994.c (revision aec89f78cf01647d8f60713ac1a324ab1a7e2e31)
1*aec89f78SBastian Köcher /* Copyright (c) 2013-2016, The Linux Foundation. All rights reserved.
2*aec89f78SBastian Köcher  *
3*aec89f78SBastian Köcher  * This program is free software; you can redistribute it and/or modify
4*aec89f78SBastian Köcher  * it under the terms of the GNU General Public License version 2 and
5*aec89f78SBastian Köcher  * only version 2 as published by the Free Software Foundation.
6*aec89f78SBastian Köcher  *
7*aec89f78SBastian Köcher  * This program is distributed in the hope that it will be useful,
8*aec89f78SBastian Köcher  * but WITHOUT ANY WARRANTY; without even the implied warranty of
9*aec89f78SBastian Köcher  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10*aec89f78SBastian Köcher  * GNU General Public License for more details.
11*aec89f78SBastian Köcher  */
12*aec89f78SBastian Köcher 
13*aec89f78SBastian Köcher #include <linux/kernel.h>
14*aec89f78SBastian Köcher #include <linux/init.h>
15*aec89f78SBastian Köcher #include <linux/err.h>
16*aec89f78SBastian Köcher #include <linux/ctype.h>
17*aec89f78SBastian Köcher #include <linux/io.h>
18*aec89f78SBastian Köcher #include <linux/of.h>
19*aec89f78SBastian Köcher #include <linux/platform_device.h>
20*aec89f78SBastian Köcher #include <linux/module.h>
21*aec89f78SBastian Köcher #include <linux/regmap.h>
22*aec89f78SBastian Köcher 
23*aec89f78SBastian Köcher #include <dt-bindings/clock/qcom,gcc-msm8994.h>
24*aec89f78SBastian Köcher 
25*aec89f78SBastian Köcher #include "common.h"
26*aec89f78SBastian Köcher #include "clk-regmap.h"
27*aec89f78SBastian Köcher #include "clk-alpha-pll.h"
28*aec89f78SBastian Köcher #include "clk-rcg.h"
29*aec89f78SBastian Köcher #include "clk-branch.h"
30*aec89f78SBastian Köcher #include "reset.h"
31*aec89f78SBastian Köcher 
32*aec89f78SBastian Köcher enum {
33*aec89f78SBastian Köcher 	P_XO,
34*aec89f78SBastian Köcher 	P_GPLL0,
35*aec89f78SBastian Köcher 	P_GPLL4,
36*aec89f78SBastian Köcher };
37*aec89f78SBastian Köcher 
38*aec89f78SBastian Köcher static const struct parent_map gcc_xo_gpll0_map[] = {
39*aec89f78SBastian Köcher 	{ P_XO, 0 },
40*aec89f78SBastian Köcher 	{ P_GPLL0, 1 },
41*aec89f78SBastian Köcher };
42*aec89f78SBastian Köcher 
43*aec89f78SBastian Köcher static const char * const gcc_xo_gpll0[] = {
44*aec89f78SBastian Köcher 	"xo",
45*aec89f78SBastian Köcher 	"gpll0",
46*aec89f78SBastian Köcher };
47*aec89f78SBastian Köcher 
48*aec89f78SBastian Köcher static const struct parent_map gcc_xo_gpll0_gpll4_map[] = {
49*aec89f78SBastian Köcher 	{ P_XO, 0 },
50*aec89f78SBastian Köcher 	{ P_GPLL0, 1 },
51*aec89f78SBastian Köcher 	{ P_GPLL4, 5 },
52*aec89f78SBastian Köcher };
53*aec89f78SBastian Köcher 
54*aec89f78SBastian Köcher static const char * const gcc_xo_gpll0_gpll4[] = {
55*aec89f78SBastian Köcher 	"xo",
56*aec89f78SBastian Köcher 	"gpll0",
57*aec89f78SBastian Köcher 	"gpll4",
58*aec89f78SBastian Köcher };
59*aec89f78SBastian Köcher 
60*aec89f78SBastian Köcher #define F(f, s, h, m, n) { (f), (s), (2 * (h) - 1), (m), (n) }
61*aec89f78SBastian Köcher 
62*aec89f78SBastian Köcher static struct clk_fixed_factor xo = {
63*aec89f78SBastian Köcher 	.mult = 1,
64*aec89f78SBastian Köcher 	.div = 1,
65*aec89f78SBastian Köcher 	.hw.init = &(struct clk_init_data)
66*aec89f78SBastian Köcher 	{
67*aec89f78SBastian Köcher 		.name = "xo",
68*aec89f78SBastian Köcher 		.parent_names = (const char *[]) { "xo_board" },
69*aec89f78SBastian Köcher 		.num_parents = 1,
70*aec89f78SBastian Köcher 		.ops = &clk_fixed_factor_ops,
71*aec89f78SBastian Köcher 	},
72*aec89f78SBastian Köcher };
73*aec89f78SBastian Köcher 
74*aec89f78SBastian Köcher static struct clk_alpha_pll gpll0_early = {
75*aec89f78SBastian Köcher 	.offset = 0x00000,
76*aec89f78SBastian Köcher 	.clkr = {
77*aec89f78SBastian Köcher 		.enable_reg = 0x1480,
78*aec89f78SBastian Köcher 		.enable_mask = BIT(0),
79*aec89f78SBastian Köcher 		.hw.init = &(struct clk_init_data)
80*aec89f78SBastian Köcher 		{
81*aec89f78SBastian Köcher 			.name = "gpll0_early",
82*aec89f78SBastian Köcher 			.parent_names = (const char *[]) { "xo" },
83*aec89f78SBastian Köcher 			.num_parents = 1,
84*aec89f78SBastian Köcher 			.ops = &clk_alpha_pll_ops,
85*aec89f78SBastian Köcher 		},
86*aec89f78SBastian Köcher 	},
87*aec89f78SBastian Köcher };
88*aec89f78SBastian Köcher 
89*aec89f78SBastian Köcher static struct clk_alpha_pll_postdiv gpll0 = {
90*aec89f78SBastian Köcher 	.offset = 0x00000,
91*aec89f78SBastian Köcher 	.clkr.hw.init = &(struct clk_init_data)
92*aec89f78SBastian Köcher 	{
93*aec89f78SBastian Köcher 		.name = "gpll0",
94*aec89f78SBastian Köcher 		.parent_names = (const char *[]) { "gpll0_early" },
95*aec89f78SBastian Köcher 		.num_parents = 1,
96*aec89f78SBastian Köcher 		.ops = &clk_alpha_pll_postdiv_ops,
97*aec89f78SBastian Köcher 	},
98*aec89f78SBastian Köcher };
99*aec89f78SBastian Köcher 
100*aec89f78SBastian Köcher static struct clk_alpha_pll gpll4_early = {
101*aec89f78SBastian Köcher 	.offset = 0x1dc0,
102*aec89f78SBastian Köcher 	.clkr = {
103*aec89f78SBastian Köcher 		.enable_reg = 0x1480,
104*aec89f78SBastian Köcher 		.enable_mask = BIT(4),
105*aec89f78SBastian Köcher 		.hw.init = &(struct clk_init_data)
106*aec89f78SBastian Köcher 		{
107*aec89f78SBastian Köcher 			.name = "gpll4_early",
108*aec89f78SBastian Köcher 			.parent_names = (const char *[]) { "xo" },
109*aec89f78SBastian Köcher 			.num_parents = 1,
110*aec89f78SBastian Köcher 			.ops = &clk_alpha_pll_ops,
111*aec89f78SBastian Köcher 		},
112*aec89f78SBastian Köcher 	},
113*aec89f78SBastian Köcher };
114*aec89f78SBastian Köcher 
115*aec89f78SBastian Köcher static struct clk_alpha_pll_postdiv gpll4 = {
116*aec89f78SBastian Köcher 	.offset = 0x1dc0,
117*aec89f78SBastian Köcher 	.clkr.hw.init = &(struct clk_init_data)
118*aec89f78SBastian Köcher 	{
119*aec89f78SBastian Köcher 		.name = "gpll4",
120*aec89f78SBastian Köcher 		.parent_names = (const char *[]) { "gpll4_early" },
121*aec89f78SBastian Köcher 		.num_parents = 1,
122*aec89f78SBastian Köcher 		.ops = &clk_alpha_pll_postdiv_ops,
123*aec89f78SBastian Köcher 	},
124*aec89f78SBastian Köcher };
125*aec89f78SBastian Köcher 
126*aec89f78SBastian Köcher static struct freq_tbl ftbl_ufs_axi_clk_src[] = {
127*aec89f78SBastian Köcher 	F(50000000, P_GPLL0, 12, 0, 0),
128*aec89f78SBastian Köcher 	F(100000000, P_GPLL0, 6, 0, 0),
129*aec89f78SBastian Köcher 	F(150000000, P_GPLL0, 4, 0, 0),
130*aec89f78SBastian Köcher 	F(171430000, P_GPLL0, 3.5, 0, 0),
131*aec89f78SBastian Köcher 	F(200000000, P_GPLL0, 3, 0, 0),
132*aec89f78SBastian Köcher 	F(240000000, P_GPLL0, 2.5, 0, 0),
133*aec89f78SBastian Köcher 	{ }
134*aec89f78SBastian Köcher };
135*aec89f78SBastian Köcher 
136*aec89f78SBastian Köcher static struct clk_rcg2 ufs_axi_clk_src = {
137*aec89f78SBastian Köcher 	.cmd_rcgr = 0x1d68,
138*aec89f78SBastian Köcher 	.mnd_width = 8,
139*aec89f78SBastian Köcher 	.hid_width = 5,
140*aec89f78SBastian Köcher 	.parent_map = gcc_xo_gpll0_map,
141*aec89f78SBastian Köcher 	.freq_tbl = ftbl_ufs_axi_clk_src,
142*aec89f78SBastian Köcher 	.clkr.hw.init = &(struct clk_init_data)
143*aec89f78SBastian Köcher 	{
144*aec89f78SBastian Köcher 		.name = "ufs_axi_clk_src",
145*aec89f78SBastian Köcher 		.parent_names = gcc_xo_gpll0,
146*aec89f78SBastian Köcher 		.num_parents = 2,
147*aec89f78SBastian Köcher 		.ops = &clk_rcg2_ops,
148*aec89f78SBastian Köcher 	},
149*aec89f78SBastian Köcher };
150*aec89f78SBastian Köcher 
151*aec89f78SBastian Köcher static struct freq_tbl ftbl_usb30_master_clk_src[] = {
152*aec89f78SBastian Köcher 	F(19200000, P_XO, 1, 0, 0),
153*aec89f78SBastian Köcher 	F(125000000, P_GPLL0, 1, 5, 24),
154*aec89f78SBastian Köcher 	{ }
155*aec89f78SBastian Köcher };
156*aec89f78SBastian Köcher 
157*aec89f78SBastian Köcher static struct clk_rcg2 usb30_master_clk_src = {
158*aec89f78SBastian Köcher 	.cmd_rcgr = 0x03d4,
159*aec89f78SBastian Köcher 	.mnd_width = 8,
160*aec89f78SBastian Köcher 	.hid_width = 5,
161*aec89f78SBastian Köcher 	.parent_map = gcc_xo_gpll0_map,
162*aec89f78SBastian Köcher 	.freq_tbl = ftbl_usb30_master_clk_src,
163*aec89f78SBastian Köcher 	.clkr.hw.init = &(struct clk_init_data)
164*aec89f78SBastian Köcher 	{
165*aec89f78SBastian Köcher 		.name = "usb30_master_clk_src",
166*aec89f78SBastian Köcher 		.parent_names = gcc_xo_gpll0,
167*aec89f78SBastian Köcher 		.num_parents = 2,
168*aec89f78SBastian Köcher 		.ops = &clk_rcg2_ops,
169*aec89f78SBastian Köcher 	},
170*aec89f78SBastian Köcher };
171*aec89f78SBastian Köcher 
172*aec89f78SBastian Köcher static struct freq_tbl ftbl_blsp_i2c_apps_clk_src[] = {
173*aec89f78SBastian Köcher 	F(19200000, P_XO, 1, 0, 0),
174*aec89f78SBastian Köcher 	F(50000000, P_GPLL0, 12, 0, 0),
175*aec89f78SBastian Köcher 	{ }
176*aec89f78SBastian Köcher };
177*aec89f78SBastian Köcher 
178*aec89f78SBastian Köcher static struct clk_rcg2 blsp1_qup1_i2c_apps_clk_src = {
179*aec89f78SBastian Köcher 	.cmd_rcgr = 0x0660,
180*aec89f78SBastian Köcher 	.hid_width = 5,
181*aec89f78SBastian Köcher 	.parent_map = gcc_xo_gpll0_map,
182*aec89f78SBastian Köcher 	.freq_tbl = ftbl_blsp_i2c_apps_clk_src,
183*aec89f78SBastian Köcher 	.clkr.hw.init = &(struct clk_init_data)
184*aec89f78SBastian Köcher 	{
185*aec89f78SBastian Köcher 		.name = "blsp1_qup1_i2c_apps_clk_src",
186*aec89f78SBastian Köcher 		.parent_names = gcc_xo_gpll0,
187*aec89f78SBastian Köcher 		.num_parents = 2,
188*aec89f78SBastian Köcher 		.ops = &clk_rcg2_ops,
189*aec89f78SBastian Köcher 	},
190*aec89f78SBastian Köcher };
191*aec89f78SBastian Köcher 
192*aec89f78SBastian Köcher static struct freq_tbl ftbl_blspqup_spi_apps_clk_src[] = {
193*aec89f78SBastian Köcher 	F(960000, P_XO, 10, 1, 2),
194*aec89f78SBastian Köcher 	F(4800000, P_XO, 4, 0, 0),
195*aec89f78SBastian Köcher 	F(9600000, P_XO, 2, 0, 0),
196*aec89f78SBastian Köcher 	F(15000000, P_GPLL0, 10, 1, 4),
197*aec89f78SBastian Köcher 	F(19200000, P_XO, 1, 0, 0),
198*aec89f78SBastian Köcher 	F(24000000, P_GPLL0, 12.5, 1, 2),
199*aec89f78SBastian Köcher 	F(25000000, P_GPLL0, 12, 1, 2),
200*aec89f78SBastian Köcher 	F(48000000, P_GPLL0, 12.5, 0, 0),
201*aec89f78SBastian Köcher 	F(50000000, P_GPLL0, 12, 0, 0),
202*aec89f78SBastian Köcher 	{ }
203*aec89f78SBastian Köcher };
204*aec89f78SBastian Köcher 
205*aec89f78SBastian Köcher static struct clk_rcg2 blsp1_qup1_spi_apps_clk_src = {
206*aec89f78SBastian Köcher 	.cmd_rcgr = 0x064c,
207*aec89f78SBastian Köcher 	.mnd_width = 8,
208*aec89f78SBastian Köcher 	.hid_width = 5,
209*aec89f78SBastian Köcher 	.parent_map = gcc_xo_gpll0_map,
210*aec89f78SBastian Köcher 	.freq_tbl = ftbl_blspqup_spi_apps_clk_src,
211*aec89f78SBastian Köcher 	.clkr.hw.init = &(struct clk_init_data)
212*aec89f78SBastian Köcher 	{
213*aec89f78SBastian Köcher 		.name = "blsp1_qup1_spi_apps_clk_src",
214*aec89f78SBastian Köcher 		.parent_names = gcc_xo_gpll0,
215*aec89f78SBastian Köcher 		.num_parents = 2,
216*aec89f78SBastian Köcher 		.ops = &clk_rcg2_ops,
217*aec89f78SBastian Köcher 	},
218*aec89f78SBastian Köcher };
219*aec89f78SBastian Köcher 
220*aec89f78SBastian Köcher static struct clk_rcg2 blsp1_qup2_i2c_apps_clk_src = {
221*aec89f78SBastian Köcher 	.cmd_rcgr = 0x06e0,
222*aec89f78SBastian Köcher 	.hid_width = 5,
223*aec89f78SBastian Köcher 	.parent_map = gcc_xo_gpll0_map,
224*aec89f78SBastian Köcher 	.freq_tbl = ftbl_blsp_i2c_apps_clk_src,
225*aec89f78SBastian Köcher 	.clkr.hw.init = &(struct clk_init_data)
226*aec89f78SBastian Köcher 	{
227*aec89f78SBastian Köcher 		.name = "blsp1_qup2_i2c_apps_clk_src",
228*aec89f78SBastian Köcher 		.parent_names = gcc_xo_gpll0,
229*aec89f78SBastian Köcher 		.num_parents = 2,
230*aec89f78SBastian Köcher 		.ops = &clk_rcg2_ops,
231*aec89f78SBastian Köcher 	},
232*aec89f78SBastian Köcher };
233*aec89f78SBastian Köcher 
234*aec89f78SBastian Köcher static struct clk_rcg2 blsp1_qup2_spi_apps_clk_src = {
235*aec89f78SBastian Köcher 	.cmd_rcgr = 0x06cc,
236*aec89f78SBastian Köcher 	.mnd_width = 8,
237*aec89f78SBastian Köcher 	.hid_width = 5,
238*aec89f78SBastian Köcher 	.parent_map = gcc_xo_gpll0_map,
239*aec89f78SBastian Köcher 	.freq_tbl = ftbl_blspqup_spi_apps_clk_src,
240*aec89f78SBastian Köcher 	.clkr.hw.init = &(struct clk_init_data)
241*aec89f78SBastian Köcher 	{
242*aec89f78SBastian Köcher 		.name = "blsp1_qup2_spi_apps_clk_src",
243*aec89f78SBastian Köcher 		.parent_names = gcc_xo_gpll0,
244*aec89f78SBastian Köcher 		.num_parents = 2,
245*aec89f78SBastian Köcher 		.ops = &clk_rcg2_ops,
246*aec89f78SBastian Köcher 	},
247*aec89f78SBastian Köcher };
248*aec89f78SBastian Köcher 
249*aec89f78SBastian Köcher static struct clk_rcg2 blsp1_qup3_i2c_apps_clk_src = {
250*aec89f78SBastian Köcher 	.cmd_rcgr = 0x0760,
251*aec89f78SBastian Köcher 	.hid_width = 5,
252*aec89f78SBastian Köcher 	.parent_map = gcc_xo_gpll0_map,
253*aec89f78SBastian Köcher 	.freq_tbl = ftbl_blsp_i2c_apps_clk_src,
254*aec89f78SBastian Köcher 	.clkr.hw.init = &(struct clk_init_data)
255*aec89f78SBastian Köcher 	{
256*aec89f78SBastian Köcher 		.name = "blsp1_qup3_i2c_apps_clk_src",
257*aec89f78SBastian Köcher 		.parent_names = gcc_xo_gpll0,
258*aec89f78SBastian Köcher 		.num_parents = 2,
259*aec89f78SBastian Köcher 		.ops = &clk_rcg2_ops,
260*aec89f78SBastian Köcher 	},
261*aec89f78SBastian Köcher };
262*aec89f78SBastian Köcher 
263*aec89f78SBastian Köcher static struct clk_rcg2 blsp1_qup3_spi_apps_clk_src = {
264*aec89f78SBastian Köcher 	.cmd_rcgr = 0x074c,
265*aec89f78SBastian Köcher 	.mnd_width = 8,
266*aec89f78SBastian Köcher 	.hid_width = 5,
267*aec89f78SBastian Köcher 	.parent_map = gcc_xo_gpll0_map,
268*aec89f78SBastian Köcher 	.freq_tbl = ftbl_blspqup_spi_apps_clk_src,
269*aec89f78SBastian Köcher 	.clkr.hw.init = &(struct clk_init_data)
270*aec89f78SBastian Köcher 	{
271*aec89f78SBastian Köcher 		.name = "blsp1_qup3_spi_apps_clk_src",
272*aec89f78SBastian Köcher 		.parent_names = gcc_xo_gpll0,
273*aec89f78SBastian Köcher 		.num_parents = 2,
274*aec89f78SBastian Köcher 		.ops = &clk_rcg2_ops,
275*aec89f78SBastian Köcher 	},
276*aec89f78SBastian Köcher };
277*aec89f78SBastian Köcher 
278*aec89f78SBastian Köcher static struct clk_rcg2 blsp1_qup4_i2c_apps_clk_src = {
279*aec89f78SBastian Köcher 	.cmd_rcgr = 0x07e0,
280*aec89f78SBastian Köcher 	.hid_width = 5,
281*aec89f78SBastian Köcher 	.parent_map = gcc_xo_gpll0_map,
282*aec89f78SBastian Köcher 	.freq_tbl = ftbl_blsp_i2c_apps_clk_src,
283*aec89f78SBastian Köcher 	.clkr.hw.init = &(struct clk_init_data)
284*aec89f78SBastian Köcher 	{
285*aec89f78SBastian Köcher 		.name = "blsp1_qup4_i2c_apps_clk_src",
286*aec89f78SBastian Köcher 		.parent_names = gcc_xo_gpll0,
287*aec89f78SBastian Köcher 		.num_parents = 2,
288*aec89f78SBastian Köcher 		.ops = &clk_rcg2_ops,
289*aec89f78SBastian Köcher 	},
290*aec89f78SBastian Köcher };
291*aec89f78SBastian Köcher 
292*aec89f78SBastian Köcher static struct clk_rcg2 blsp1_qup4_spi_apps_clk_src = {
293*aec89f78SBastian Köcher 	.cmd_rcgr = 0x07cc,
294*aec89f78SBastian Köcher 	.mnd_width = 8,
295*aec89f78SBastian Köcher 	.hid_width = 5,
296*aec89f78SBastian Köcher 	.parent_map = gcc_xo_gpll0_map,
297*aec89f78SBastian Köcher 	.freq_tbl = ftbl_blspqup_spi_apps_clk_src,
298*aec89f78SBastian Köcher 	.clkr.hw.init = &(struct clk_init_data)
299*aec89f78SBastian Köcher 	{
300*aec89f78SBastian Köcher 		.name = "blsp1_qup4_spi_apps_clk_src",
301*aec89f78SBastian Köcher 		.parent_names = gcc_xo_gpll0,
302*aec89f78SBastian Köcher 		.num_parents = 2,
303*aec89f78SBastian Köcher 		.ops = &clk_rcg2_ops,
304*aec89f78SBastian Köcher 	},
305*aec89f78SBastian Köcher };
306*aec89f78SBastian Köcher 
307*aec89f78SBastian Köcher static struct clk_rcg2 blsp1_qup5_i2c_apps_clk_src = {
308*aec89f78SBastian Köcher 	.cmd_rcgr = 0x0860,
309*aec89f78SBastian Köcher 	.hid_width = 5,
310*aec89f78SBastian Köcher 	.parent_map = gcc_xo_gpll0_map,
311*aec89f78SBastian Köcher 	.freq_tbl = ftbl_blsp_i2c_apps_clk_src,
312*aec89f78SBastian Köcher 	.clkr.hw.init = &(struct clk_init_data)
313*aec89f78SBastian Köcher 	{
314*aec89f78SBastian Köcher 		.name = "blsp1_qup5_i2c_apps_clk_src",
315*aec89f78SBastian Köcher 		.parent_names = gcc_xo_gpll0,
316*aec89f78SBastian Köcher 		.num_parents = 2,
317*aec89f78SBastian Köcher 		.ops = &clk_rcg2_ops,
318*aec89f78SBastian Köcher 	},
319*aec89f78SBastian Köcher };
320*aec89f78SBastian Köcher 
321*aec89f78SBastian Köcher static struct clk_rcg2 blsp1_qup5_spi_apps_clk_src = {
322*aec89f78SBastian Köcher 	.cmd_rcgr = 0x084c,
323*aec89f78SBastian Köcher 	.mnd_width = 8,
324*aec89f78SBastian Köcher 	.hid_width = 5,
325*aec89f78SBastian Köcher 	.parent_map = gcc_xo_gpll0_map,
326*aec89f78SBastian Köcher 	.freq_tbl = ftbl_blspqup_spi_apps_clk_src,
327*aec89f78SBastian Köcher 	.clkr.hw.init = &(struct clk_init_data)
328*aec89f78SBastian Köcher 	{
329*aec89f78SBastian Köcher 		.name = "blsp1_qup5_spi_apps_clk_src",
330*aec89f78SBastian Köcher 		.parent_names = gcc_xo_gpll0,
331*aec89f78SBastian Köcher 		.num_parents = 2,
332*aec89f78SBastian Köcher 		.ops = &clk_rcg2_ops,
333*aec89f78SBastian Köcher 	},
334*aec89f78SBastian Köcher };
335*aec89f78SBastian Köcher 
336*aec89f78SBastian Köcher static struct clk_rcg2 blsp1_qup6_i2c_apps_clk_src = {
337*aec89f78SBastian Köcher 	.cmd_rcgr = 0x08e0,
338*aec89f78SBastian Köcher 	.hid_width = 5,
339*aec89f78SBastian Köcher 	.parent_map = gcc_xo_gpll0_map,
340*aec89f78SBastian Köcher 	.freq_tbl = ftbl_blsp_i2c_apps_clk_src,
341*aec89f78SBastian Köcher 	.clkr.hw.init = &(struct clk_init_data)
342*aec89f78SBastian Köcher 	{
343*aec89f78SBastian Köcher 		.name = "blsp1_qup6_i2c_apps_clk_src",
344*aec89f78SBastian Köcher 		.parent_names = gcc_xo_gpll0,
345*aec89f78SBastian Köcher 		.num_parents = 2,
346*aec89f78SBastian Köcher 		.ops = &clk_rcg2_ops,
347*aec89f78SBastian Köcher 	},
348*aec89f78SBastian Köcher };
349*aec89f78SBastian Köcher 
350*aec89f78SBastian Köcher static struct clk_rcg2 blsp1_qup6_spi_apps_clk_src = {
351*aec89f78SBastian Köcher 	.cmd_rcgr = 0x08cc,
352*aec89f78SBastian Köcher 	.mnd_width = 8,
353*aec89f78SBastian Köcher 	.hid_width = 5,
354*aec89f78SBastian Köcher 	.parent_map = gcc_xo_gpll0_map,
355*aec89f78SBastian Köcher 	.freq_tbl = ftbl_blspqup_spi_apps_clk_src,
356*aec89f78SBastian Köcher 	.clkr.hw.init = &(struct clk_init_data)
357*aec89f78SBastian Köcher 	{
358*aec89f78SBastian Köcher 		.name = "blsp1_qup6_spi_apps_clk_src",
359*aec89f78SBastian Köcher 		.parent_names = gcc_xo_gpll0,
360*aec89f78SBastian Köcher 		.num_parents = 2,
361*aec89f78SBastian Köcher 		.ops = &clk_rcg2_ops,
362*aec89f78SBastian Köcher 	},
363*aec89f78SBastian Köcher };
364*aec89f78SBastian Köcher 
365*aec89f78SBastian Köcher static struct freq_tbl ftbl_blsp_uart_apps_clk_src[] = {
366*aec89f78SBastian Köcher 	F(3686400, P_GPLL0, 1, 96, 15625),
367*aec89f78SBastian Köcher 	F(7372800, P_GPLL0, 1, 192, 15625),
368*aec89f78SBastian Köcher 	F(14745600, P_GPLL0, 1, 384, 15625),
369*aec89f78SBastian Köcher 	F(16000000, P_GPLL0, 5, 2, 15),
370*aec89f78SBastian Köcher 	F(19200000, P_XO, 1, 0, 0),
371*aec89f78SBastian Köcher 	F(24000000, P_GPLL0, 5, 1, 5),
372*aec89f78SBastian Köcher 	F(32000000, P_GPLL0, 1, 4, 75),
373*aec89f78SBastian Köcher 	F(40000000, P_GPLL0, 15, 0, 0),
374*aec89f78SBastian Köcher 	F(46400000, P_GPLL0, 1, 29, 375),
375*aec89f78SBastian Köcher 	F(48000000, P_GPLL0, 12.5, 0, 0),
376*aec89f78SBastian Köcher 	F(51200000, P_GPLL0, 1, 32, 375),
377*aec89f78SBastian Köcher 	F(56000000, P_GPLL0, 1, 7, 75),
378*aec89f78SBastian Köcher 	F(58982400, P_GPLL0, 1, 1536, 15625),
379*aec89f78SBastian Köcher 	F(60000000, P_GPLL0, 10, 0, 0),
380*aec89f78SBastian Köcher 	F(63160000, P_GPLL0, 9.5, 0, 0),
381*aec89f78SBastian Köcher 	{ }
382*aec89f78SBastian Köcher };
383*aec89f78SBastian Köcher 
384*aec89f78SBastian Köcher static struct clk_rcg2 blsp1_uart1_apps_clk_src = {
385*aec89f78SBastian Köcher 	.cmd_rcgr = 0x068c,
386*aec89f78SBastian Köcher 	.mnd_width = 16,
387*aec89f78SBastian Köcher 	.hid_width = 5,
388*aec89f78SBastian Köcher 	.parent_map = gcc_xo_gpll0_map,
389*aec89f78SBastian Köcher 	.freq_tbl = ftbl_blsp_uart_apps_clk_src,
390*aec89f78SBastian Köcher 	.clkr.hw.init = &(struct clk_init_data)
391*aec89f78SBastian Köcher 	{
392*aec89f78SBastian Köcher 		.name = "blsp1_uart1_apps_clk_src",
393*aec89f78SBastian Köcher 		.parent_names = gcc_xo_gpll0,
394*aec89f78SBastian Köcher 		.num_parents = 2,
395*aec89f78SBastian Köcher 		.ops = &clk_rcg2_ops,
396*aec89f78SBastian Köcher 	},
397*aec89f78SBastian Köcher };
398*aec89f78SBastian Köcher 
399*aec89f78SBastian Köcher static struct clk_rcg2 blsp1_uart2_apps_clk_src = {
400*aec89f78SBastian Köcher 	.cmd_rcgr = 0x070c,
401*aec89f78SBastian Köcher 	.mnd_width = 16,
402*aec89f78SBastian Köcher 	.hid_width = 5,
403*aec89f78SBastian Köcher 	.parent_map = gcc_xo_gpll0_map,
404*aec89f78SBastian Köcher 	.freq_tbl = ftbl_blsp_uart_apps_clk_src,
405*aec89f78SBastian Köcher 	.clkr.hw.init = &(struct clk_init_data)
406*aec89f78SBastian Köcher 	{
407*aec89f78SBastian Köcher 		.name = "blsp1_uart2_apps_clk_src",
408*aec89f78SBastian Köcher 		.parent_names = gcc_xo_gpll0,
409*aec89f78SBastian Köcher 		.num_parents = 2,
410*aec89f78SBastian Köcher 		.ops = &clk_rcg2_ops,
411*aec89f78SBastian Köcher 	},
412*aec89f78SBastian Köcher };
413*aec89f78SBastian Köcher 
414*aec89f78SBastian Köcher static struct clk_rcg2 blsp1_uart3_apps_clk_src = {
415*aec89f78SBastian Köcher 	.cmd_rcgr = 0x078c,
416*aec89f78SBastian Köcher 	.mnd_width = 16,
417*aec89f78SBastian Köcher 	.hid_width = 5,
418*aec89f78SBastian Köcher 	.parent_map = gcc_xo_gpll0_map,
419*aec89f78SBastian Köcher 	.freq_tbl = ftbl_blsp_uart_apps_clk_src,
420*aec89f78SBastian Köcher 	.clkr.hw.init = &(struct clk_init_data)
421*aec89f78SBastian Köcher 	{
422*aec89f78SBastian Köcher 		.name = "blsp1_uart3_apps_clk_src",
423*aec89f78SBastian Köcher 		.parent_names = gcc_xo_gpll0,
424*aec89f78SBastian Köcher 		.num_parents = 2,
425*aec89f78SBastian Köcher 		.ops = &clk_rcg2_ops,
426*aec89f78SBastian Köcher 	},
427*aec89f78SBastian Köcher };
428*aec89f78SBastian Köcher 
429*aec89f78SBastian Köcher static struct clk_rcg2 blsp1_uart4_apps_clk_src = {
430*aec89f78SBastian Köcher 	.cmd_rcgr = 0x080c,
431*aec89f78SBastian Köcher 	.mnd_width = 16,
432*aec89f78SBastian Köcher 	.hid_width = 5,
433*aec89f78SBastian Köcher 	.parent_map = gcc_xo_gpll0_map,
434*aec89f78SBastian Köcher 	.freq_tbl = ftbl_blsp_uart_apps_clk_src,
435*aec89f78SBastian Köcher 	.clkr.hw.init = &(struct clk_init_data)
436*aec89f78SBastian Köcher 	{
437*aec89f78SBastian Köcher 		.name = "blsp1_uart4_apps_clk_src",
438*aec89f78SBastian Köcher 		.parent_names = gcc_xo_gpll0,
439*aec89f78SBastian Köcher 		.num_parents = 2,
440*aec89f78SBastian Köcher 		.ops = &clk_rcg2_ops,
441*aec89f78SBastian Köcher 	},
442*aec89f78SBastian Köcher };
443*aec89f78SBastian Köcher 
444*aec89f78SBastian Köcher static struct clk_rcg2 blsp1_uart5_apps_clk_src = {
445*aec89f78SBastian Köcher 	.cmd_rcgr = 0x088c,
446*aec89f78SBastian Köcher 	.mnd_width = 16,
447*aec89f78SBastian Köcher 	.hid_width = 5,
448*aec89f78SBastian Köcher 	.parent_map = gcc_xo_gpll0_map,
449*aec89f78SBastian Köcher 	.freq_tbl = ftbl_blsp_uart_apps_clk_src,
450*aec89f78SBastian Köcher 	.clkr.hw.init = &(struct clk_init_data)
451*aec89f78SBastian Köcher 	{
452*aec89f78SBastian Köcher 		.name = "blsp1_uart5_apps_clk_src",
453*aec89f78SBastian Köcher 		.parent_names = gcc_xo_gpll0,
454*aec89f78SBastian Köcher 		.num_parents = 2,
455*aec89f78SBastian Köcher 		.ops = &clk_rcg2_ops,
456*aec89f78SBastian Köcher 	},
457*aec89f78SBastian Köcher };
458*aec89f78SBastian Köcher 
459*aec89f78SBastian Köcher static struct clk_rcg2 blsp1_uart6_apps_clk_src = {
460*aec89f78SBastian Köcher 	.cmd_rcgr = 0x090c,
461*aec89f78SBastian Köcher 	.mnd_width = 16,
462*aec89f78SBastian Köcher 	.hid_width = 5,
463*aec89f78SBastian Köcher 	.parent_map = gcc_xo_gpll0_map,
464*aec89f78SBastian Köcher 	.freq_tbl = ftbl_blsp_uart_apps_clk_src,
465*aec89f78SBastian Köcher 	.clkr.hw.init = &(struct clk_init_data)
466*aec89f78SBastian Köcher 	{
467*aec89f78SBastian Köcher 		.name = "blsp1_uart6_apps_clk_src",
468*aec89f78SBastian Köcher 		.parent_names = gcc_xo_gpll0,
469*aec89f78SBastian Köcher 		.num_parents = 2,
470*aec89f78SBastian Köcher 		.ops = &clk_rcg2_ops,
471*aec89f78SBastian Köcher 	},
472*aec89f78SBastian Köcher };
473*aec89f78SBastian Köcher 
474*aec89f78SBastian Köcher static struct clk_rcg2 blsp2_qup1_i2c_apps_clk_src = {
475*aec89f78SBastian Köcher 	.cmd_rcgr = 0x09a0,
476*aec89f78SBastian Köcher 	.hid_width = 5,
477*aec89f78SBastian Köcher 	.parent_map = gcc_xo_gpll0_map,
478*aec89f78SBastian Köcher 	.freq_tbl = ftbl_blsp_i2c_apps_clk_src,
479*aec89f78SBastian Köcher 	.clkr.hw.init = &(struct clk_init_data)
480*aec89f78SBastian Köcher 	{
481*aec89f78SBastian Köcher 		.name = "blsp2_qup1_i2c_apps_clk_src",
482*aec89f78SBastian Köcher 		.parent_names = gcc_xo_gpll0,
483*aec89f78SBastian Köcher 		.num_parents = 2,
484*aec89f78SBastian Köcher 		.ops = &clk_rcg2_ops,
485*aec89f78SBastian Köcher 	},
486*aec89f78SBastian Köcher };
487*aec89f78SBastian Köcher 
488*aec89f78SBastian Köcher static struct clk_rcg2 blsp2_qup1_spi_apps_clk_src = {
489*aec89f78SBastian Köcher 	.cmd_rcgr = 0x098c,
490*aec89f78SBastian Köcher 	.mnd_width = 8,
491*aec89f78SBastian Köcher 	.hid_width = 5,
492*aec89f78SBastian Köcher 	.parent_map = gcc_xo_gpll0_map,
493*aec89f78SBastian Köcher 	.freq_tbl = ftbl_blspqup_spi_apps_clk_src,
494*aec89f78SBastian Köcher 	.clkr.hw.init = &(struct clk_init_data)
495*aec89f78SBastian Köcher 	{
496*aec89f78SBastian Köcher 		.name = "blsp2_qup1_spi_apps_clk_src",
497*aec89f78SBastian Köcher 		.parent_names = gcc_xo_gpll0,
498*aec89f78SBastian Köcher 		.num_parents = 2,
499*aec89f78SBastian Köcher 		.ops = &clk_rcg2_ops,
500*aec89f78SBastian Köcher 	},
501*aec89f78SBastian Köcher };
502*aec89f78SBastian Köcher 
503*aec89f78SBastian Köcher static struct clk_rcg2 blsp2_qup2_i2c_apps_clk_src = {
504*aec89f78SBastian Köcher 	.cmd_rcgr = 0x0a20,
505*aec89f78SBastian Köcher 	.hid_width = 5,
506*aec89f78SBastian Köcher 	.parent_map = gcc_xo_gpll0_map,
507*aec89f78SBastian Köcher 	.freq_tbl = ftbl_blsp_i2c_apps_clk_src,
508*aec89f78SBastian Köcher 	.clkr.hw.init = &(struct clk_init_data)
509*aec89f78SBastian Köcher 	{
510*aec89f78SBastian Köcher 		.name = "blsp2_qup2_i2c_apps_clk_src",
511*aec89f78SBastian Köcher 		.parent_names = gcc_xo_gpll0,
512*aec89f78SBastian Köcher 		.num_parents = 2,
513*aec89f78SBastian Köcher 		.ops = &clk_rcg2_ops,
514*aec89f78SBastian Köcher 	},
515*aec89f78SBastian Köcher };
516*aec89f78SBastian Köcher 
517*aec89f78SBastian Köcher static struct clk_rcg2 blsp2_qup2_spi_apps_clk_src = {
518*aec89f78SBastian Köcher 	.cmd_rcgr = 0x0a0c,
519*aec89f78SBastian Köcher 	.mnd_width = 8,
520*aec89f78SBastian Köcher 	.hid_width = 5,
521*aec89f78SBastian Köcher 	.parent_map = gcc_xo_gpll0_map,
522*aec89f78SBastian Köcher 	.freq_tbl = ftbl_blspqup_spi_apps_clk_src,
523*aec89f78SBastian Köcher 	.clkr.hw.init = &(struct clk_init_data)
524*aec89f78SBastian Köcher 	{
525*aec89f78SBastian Köcher 		.name = "blsp2_qup2_spi_apps_clk_src",
526*aec89f78SBastian Köcher 		.parent_names = gcc_xo_gpll0,
527*aec89f78SBastian Köcher 		.num_parents = 2,
528*aec89f78SBastian Köcher 		.ops = &clk_rcg2_ops,
529*aec89f78SBastian Köcher 	},
530*aec89f78SBastian Köcher };
531*aec89f78SBastian Köcher 
532*aec89f78SBastian Köcher static struct clk_rcg2 blsp2_qup3_i2c_apps_clk_src = {
533*aec89f78SBastian Köcher 	.cmd_rcgr = 0x0aa0,
534*aec89f78SBastian Köcher 	.hid_width = 5,
535*aec89f78SBastian Köcher 	.parent_map = gcc_xo_gpll0_map,
536*aec89f78SBastian Köcher 	.freq_tbl = ftbl_blsp_i2c_apps_clk_src,
537*aec89f78SBastian Köcher 	.clkr.hw.init = &(struct clk_init_data)
538*aec89f78SBastian Köcher 	{
539*aec89f78SBastian Köcher 		.name = "blsp2_qup3_i2c_apps_clk_src",
540*aec89f78SBastian Köcher 		.parent_names = gcc_xo_gpll0,
541*aec89f78SBastian Köcher 		.num_parents = 2,
542*aec89f78SBastian Köcher 		.ops = &clk_rcg2_ops,
543*aec89f78SBastian Köcher 	},
544*aec89f78SBastian Köcher };
545*aec89f78SBastian Köcher 
546*aec89f78SBastian Köcher static struct clk_rcg2 blsp2_qup3_spi_apps_clk_src = {
547*aec89f78SBastian Köcher 	.cmd_rcgr = 0x0a8c,
548*aec89f78SBastian Köcher 	.mnd_width = 8,
549*aec89f78SBastian Köcher 	.hid_width = 5,
550*aec89f78SBastian Köcher 	.parent_map = gcc_xo_gpll0_map,
551*aec89f78SBastian Köcher 	.freq_tbl = ftbl_blspqup_spi_apps_clk_src,
552*aec89f78SBastian Köcher 	.clkr.hw.init = &(struct clk_init_data)
553*aec89f78SBastian Köcher 	{
554*aec89f78SBastian Köcher 		.name = "blsp2_qup3_spi_apps_clk_src",
555*aec89f78SBastian Köcher 		.parent_names = gcc_xo_gpll0,
556*aec89f78SBastian Köcher 		.num_parents = 2,
557*aec89f78SBastian Köcher 		.ops = &clk_rcg2_ops,
558*aec89f78SBastian Köcher 	},
559*aec89f78SBastian Köcher };
560*aec89f78SBastian Köcher 
561*aec89f78SBastian Köcher static struct clk_rcg2 blsp2_qup4_i2c_apps_clk_src = {
562*aec89f78SBastian Köcher 	.cmd_rcgr = 0x0b20,
563*aec89f78SBastian Köcher 	.hid_width = 5,
564*aec89f78SBastian Köcher 	.parent_map = gcc_xo_gpll0_map,
565*aec89f78SBastian Köcher 	.freq_tbl = ftbl_blsp_i2c_apps_clk_src,
566*aec89f78SBastian Köcher 	.clkr.hw.init = &(struct clk_init_data)
567*aec89f78SBastian Köcher 	{
568*aec89f78SBastian Köcher 		.name = "blsp2_qup4_i2c_apps_clk_src",
569*aec89f78SBastian Köcher 		.parent_names = gcc_xo_gpll0,
570*aec89f78SBastian Köcher 		.num_parents = 2,
571*aec89f78SBastian Köcher 		.ops = &clk_rcg2_ops,
572*aec89f78SBastian Köcher 	},
573*aec89f78SBastian Köcher };
574*aec89f78SBastian Köcher 
575*aec89f78SBastian Köcher static struct clk_rcg2 blsp2_qup4_spi_apps_clk_src = {
576*aec89f78SBastian Köcher 	.cmd_rcgr = 0x0b0c,
577*aec89f78SBastian Köcher 	.mnd_width = 8,
578*aec89f78SBastian Köcher 	.hid_width = 5,
579*aec89f78SBastian Köcher 	.parent_map = gcc_xo_gpll0_map,
580*aec89f78SBastian Köcher 	.freq_tbl = ftbl_blspqup_spi_apps_clk_src,
581*aec89f78SBastian Köcher 	.clkr.hw.init = &(struct clk_init_data)
582*aec89f78SBastian Köcher 	{
583*aec89f78SBastian Köcher 		.name = "blsp2_qup4_spi_apps_clk_src",
584*aec89f78SBastian Köcher 		.parent_names = gcc_xo_gpll0,
585*aec89f78SBastian Köcher 		.num_parents = 2,
586*aec89f78SBastian Köcher 		.ops = &clk_rcg2_ops,
587*aec89f78SBastian Köcher 	},
588*aec89f78SBastian Köcher };
589*aec89f78SBastian Köcher 
590*aec89f78SBastian Köcher static struct clk_rcg2 blsp2_qup5_i2c_apps_clk_src = {
591*aec89f78SBastian Köcher 	.cmd_rcgr = 0x0ba0,
592*aec89f78SBastian Köcher 	.hid_width = 5,
593*aec89f78SBastian Köcher 	.parent_map = gcc_xo_gpll0_map,
594*aec89f78SBastian Köcher 	.freq_tbl = ftbl_blsp_i2c_apps_clk_src,
595*aec89f78SBastian Köcher 	.clkr.hw.init = &(struct clk_init_data)
596*aec89f78SBastian Köcher 	{
597*aec89f78SBastian Köcher 		.name = "blsp2_qup5_i2c_apps_clk_src",
598*aec89f78SBastian Köcher 		.parent_names = gcc_xo_gpll0,
599*aec89f78SBastian Köcher 		.num_parents = 2,
600*aec89f78SBastian Köcher 		.ops = &clk_rcg2_ops,
601*aec89f78SBastian Köcher 	},
602*aec89f78SBastian Köcher };
603*aec89f78SBastian Köcher 
604*aec89f78SBastian Köcher static struct clk_rcg2 blsp2_qup5_spi_apps_clk_src = {
605*aec89f78SBastian Köcher 	.cmd_rcgr = 0x0b8c,
606*aec89f78SBastian Köcher 	.mnd_width = 8,
607*aec89f78SBastian Köcher 	.hid_width = 5,
608*aec89f78SBastian Köcher 	.parent_map = gcc_xo_gpll0_map,
609*aec89f78SBastian Köcher 	.freq_tbl = ftbl_blspqup_spi_apps_clk_src,
610*aec89f78SBastian Köcher 	.clkr.hw.init = &(struct clk_init_data)
611*aec89f78SBastian Köcher 	{
612*aec89f78SBastian Köcher 		.name = "blsp2_qup5_spi_apps_clk_src",
613*aec89f78SBastian Köcher 		.parent_names = gcc_xo_gpll0,
614*aec89f78SBastian Köcher 		.num_parents = 2,
615*aec89f78SBastian Köcher 		.ops = &clk_rcg2_ops,
616*aec89f78SBastian Köcher 	},
617*aec89f78SBastian Köcher };
618*aec89f78SBastian Köcher 
619*aec89f78SBastian Köcher static struct clk_rcg2 blsp2_qup6_i2c_apps_clk_src = {
620*aec89f78SBastian Köcher 	.cmd_rcgr = 0x0c20,
621*aec89f78SBastian Köcher 	.hid_width = 5,
622*aec89f78SBastian Köcher 	.parent_map = gcc_xo_gpll0_map,
623*aec89f78SBastian Köcher 	.freq_tbl = ftbl_blsp_i2c_apps_clk_src,
624*aec89f78SBastian Köcher 	.clkr.hw.init = &(struct clk_init_data)
625*aec89f78SBastian Köcher 	{
626*aec89f78SBastian Köcher 		.name = "blsp2_qup6_i2c_apps_clk_src",
627*aec89f78SBastian Köcher 		.parent_names = gcc_xo_gpll0,
628*aec89f78SBastian Köcher 		.num_parents = 2,
629*aec89f78SBastian Köcher 		.ops = &clk_rcg2_ops,
630*aec89f78SBastian Köcher 	},
631*aec89f78SBastian Köcher };
632*aec89f78SBastian Köcher 
633*aec89f78SBastian Köcher static struct clk_rcg2 blsp2_qup6_spi_apps_clk_src = {
634*aec89f78SBastian Köcher 	.cmd_rcgr = 0x0c0c,
635*aec89f78SBastian Köcher 	.mnd_width = 8,
636*aec89f78SBastian Köcher 	.hid_width = 5,
637*aec89f78SBastian Köcher 	.parent_map = gcc_xo_gpll0_map,
638*aec89f78SBastian Köcher 	.freq_tbl = ftbl_blspqup_spi_apps_clk_src,
639*aec89f78SBastian Köcher 	.clkr.hw.init = &(struct clk_init_data)
640*aec89f78SBastian Köcher 	{
641*aec89f78SBastian Köcher 		.name = "blsp2_qup6_spi_apps_clk_src",
642*aec89f78SBastian Köcher 		.parent_names = gcc_xo_gpll0,
643*aec89f78SBastian Köcher 		.num_parents = 2,
644*aec89f78SBastian Köcher 		.ops = &clk_rcg2_ops,
645*aec89f78SBastian Köcher 	},
646*aec89f78SBastian Köcher };
647*aec89f78SBastian Köcher 
648*aec89f78SBastian Köcher static struct clk_rcg2 blsp2_uart1_apps_clk_src = {
649*aec89f78SBastian Köcher 	.cmd_rcgr = 0x09cc,
650*aec89f78SBastian Köcher 	.mnd_width = 16,
651*aec89f78SBastian Köcher 	.hid_width = 5,
652*aec89f78SBastian Köcher 	.parent_map = gcc_xo_gpll0_map,
653*aec89f78SBastian Köcher 	.freq_tbl = ftbl_blsp_uart_apps_clk_src,
654*aec89f78SBastian Köcher 	.clkr.hw.init = &(struct clk_init_data)
655*aec89f78SBastian Köcher 	{
656*aec89f78SBastian Köcher 		.name = "blsp2_uart1_apps_clk_src",
657*aec89f78SBastian Köcher 		.parent_names = gcc_xo_gpll0,
658*aec89f78SBastian Köcher 		.num_parents = 2,
659*aec89f78SBastian Köcher 		.ops = &clk_rcg2_ops,
660*aec89f78SBastian Köcher 	},
661*aec89f78SBastian Köcher };
662*aec89f78SBastian Köcher 
663*aec89f78SBastian Köcher static struct clk_rcg2 blsp2_uart2_apps_clk_src = {
664*aec89f78SBastian Köcher 	.cmd_rcgr = 0x0a4c,
665*aec89f78SBastian Köcher 	.mnd_width = 16,
666*aec89f78SBastian Köcher 	.hid_width = 5,
667*aec89f78SBastian Köcher 	.parent_map = gcc_xo_gpll0_map,
668*aec89f78SBastian Köcher 	.freq_tbl = ftbl_blsp_uart_apps_clk_src,
669*aec89f78SBastian Köcher 	.clkr.hw.init = &(struct clk_init_data)
670*aec89f78SBastian Köcher 	{
671*aec89f78SBastian Köcher 		.name = "blsp2_uart2_apps_clk_src",
672*aec89f78SBastian Köcher 		.parent_names = gcc_xo_gpll0,
673*aec89f78SBastian Köcher 		.num_parents = 2,
674*aec89f78SBastian Köcher 		.ops = &clk_rcg2_ops,
675*aec89f78SBastian Köcher 	},
676*aec89f78SBastian Köcher };
677*aec89f78SBastian Köcher 
678*aec89f78SBastian Köcher static struct clk_rcg2 blsp2_uart3_apps_clk_src = {
679*aec89f78SBastian Köcher 	.cmd_rcgr = 0x0acc,
680*aec89f78SBastian Köcher 	.mnd_width = 16,
681*aec89f78SBastian Köcher 	.hid_width = 5,
682*aec89f78SBastian Köcher 	.parent_map = gcc_xo_gpll0_map,
683*aec89f78SBastian Köcher 	.freq_tbl = ftbl_blsp_uart_apps_clk_src,
684*aec89f78SBastian Köcher 	.clkr.hw.init = &(struct clk_init_data)
685*aec89f78SBastian Köcher 	{
686*aec89f78SBastian Köcher 		.name = "blsp2_uart3_apps_clk_src",
687*aec89f78SBastian Köcher 		.parent_names = gcc_xo_gpll0,
688*aec89f78SBastian Köcher 		.num_parents = 2,
689*aec89f78SBastian Köcher 		.ops = &clk_rcg2_ops,
690*aec89f78SBastian Köcher 	},
691*aec89f78SBastian Köcher };
692*aec89f78SBastian Köcher 
693*aec89f78SBastian Köcher static struct clk_rcg2 blsp2_uart4_apps_clk_src = {
694*aec89f78SBastian Köcher 	.cmd_rcgr = 0x0b4c,
695*aec89f78SBastian Köcher 	.mnd_width = 16,
696*aec89f78SBastian Köcher 	.hid_width = 5,
697*aec89f78SBastian Köcher 	.parent_map = gcc_xo_gpll0_map,
698*aec89f78SBastian Köcher 	.freq_tbl = ftbl_blsp_uart_apps_clk_src,
699*aec89f78SBastian Köcher 	.clkr.hw.init = &(struct clk_init_data)
700*aec89f78SBastian Köcher 	{
701*aec89f78SBastian Köcher 		.name = "blsp2_uart4_apps_clk_src",
702*aec89f78SBastian Köcher 		.parent_names = gcc_xo_gpll0,
703*aec89f78SBastian Köcher 		.num_parents = 2,
704*aec89f78SBastian Köcher 		.ops = &clk_rcg2_ops,
705*aec89f78SBastian Köcher 	},
706*aec89f78SBastian Köcher };
707*aec89f78SBastian Köcher 
708*aec89f78SBastian Köcher static struct clk_rcg2 blsp2_uart5_apps_clk_src = {
709*aec89f78SBastian Köcher 	.cmd_rcgr = 0x0bcc,
710*aec89f78SBastian Köcher 	.mnd_width = 16,
711*aec89f78SBastian Köcher 	.hid_width = 5,
712*aec89f78SBastian Köcher 	.parent_map = gcc_xo_gpll0_map,
713*aec89f78SBastian Köcher 	.freq_tbl = ftbl_blsp_uart_apps_clk_src,
714*aec89f78SBastian Köcher 	.clkr.hw.init = &(struct clk_init_data)
715*aec89f78SBastian Köcher 	{
716*aec89f78SBastian Köcher 		.name = "blsp2_uart5_apps_clk_src",
717*aec89f78SBastian Köcher 		.parent_names = gcc_xo_gpll0,
718*aec89f78SBastian Köcher 		.num_parents = 2,
719*aec89f78SBastian Köcher 		.ops = &clk_rcg2_ops,
720*aec89f78SBastian Köcher 	},
721*aec89f78SBastian Köcher };
722*aec89f78SBastian Köcher 
723*aec89f78SBastian Köcher static struct clk_rcg2 blsp2_uart6_apps_clk_src = {
724*aec89f78SBastian Köcher 	.cmd_rcgr = 0x0c4c,
725*aec89f78SBastian Köcher 	.mnd_width = 16,
726*aec89f78SBastian Köcher 	.hid_width = 5,
727*aec89f78SBastian Köcher 	.parent_map = gcc_xo_gpll0_map,
728*aec89f78SBastian Köcher 	.freq_tbl = ftbl_blsp_uart_apps_clk_src,
729*aec89f78SBastian Köcher 	.clkr.hw.init = &(struct clk_init_data)
730*aec89f78SBastian Köcher 	{
731*aec89f78SBastian Köcher 		.name = "blsp2_uart6_apps_clk_src",
732*aec89f78SBastian Köcher 		.parent_names = gcc_xo_gpll0,
733*aec89f78SBastian Köcher 		.num_parents = 2,
734*aec89f78SBastian Köcher 		.ops = &clk_rcg2_ops,
735*aec89f78SBastian Köcher 	},
736*aec89f78SBastian Köcher };
737*aec89f78SBastian Köcher 
738*aec89f78SBastian Köcher static struct freq_tbl ftbl_gp1_clk_src[] = {
739*aec89f78SBastian Köcher 	F(19200000, P_XO, 1, 0, 0),
740*aec89f78SBastian Köcher 	F(100000000, P_GPLL0, 6, 0, 0),
741*aec89f78SBastian Köcher 	F(200000000, P_GPLL0, 3, 0, 0),
742*aec89f78SBastian Köcher 	{ }
743*aec89f78SBastian Köcher };
744*aec89f78SBastian Köcher 
745*aec89f78SBastian Köcher static struct clk_rcg2 gp1_clk_src = {
746*aec89f78SBastian Köcher 	.cmd_rcgr = 0x1904,
747*aec89f78SBastian Köcher 	.mnd_width = 8,
748*aec89f78SBastian Köcher 	.hid_width = 5,
749*aec89f78SBastian Köcher 	.parent_map = gcc_xo_gpll0_map,
750*aec89f78SBastian Köcher 	.freq_tbl = ftbl_gp1_clk_src,
751*aec89f78SBastian Köcher 	.clkr.hw.init = &(struct clk_init_data)
752*aec89f78SBastian Köcher 	{
753*aec89f78SBastian Köcher 		.name = "gp1_clk_src",
754*aec89f78SBastian Köcher 		.parent_names = gcc_xo_gpll0,
755*aec89f78SBastian Köcher 		.num_parents = 2,
756*aec89f78SBastian Köcher 		.ops = &clk_rcg2_ops,
757*aec89f78SBastian Köcher 	},
758*aec89f78SBastian Köcher };
759*aec89f78SBastian Köcher 
760*aec89f78SBastian Köcher static struct freq_tbl ftbl_gp2_clk_src[] = {
761*aec89f78SBastian Köcher 	F(19200000, P_XO, 1, 0, 0),
762*aec89f78SBastian Köcher 	F(100000000, P_GPLL0, 6, 0, 0),
763*aec89f78SBastian Köcher 	F(200000000, P_GPLL0, 3, 0, 0),
764*aec89f78SBastian Köcher 	{ }
765*aec89f78SBastian Köcher };
766*aec89f78SBastian Köcher 
767*aec89f78SBastian Köcher static struct clk_rcg2 gp2_clk_src = {
768*aec89f78SBastian Köcher 	.cmd_rcgr = 0x1944,
769*aec89f78SBastian Köcher 	.mnd_width = 8,
770*aec89f78SBastian Köcher 	.hid_width = 5,
771*aec89f78SBastian Köcher 	.parent_map = gcc_xo_gpll0_map,
772*aec89f78SBastian Köcher 	.freq_tbl = ftbl_gp2_clk_src,
773*aec89f78SBastian Köcher 	.clkr.hw.init = &(struct clk_init_data)
774*aec89f78SBastian Köcher 	{
775*aec89f78SBastian Köcher 		.name = "gp2_clk_src",
776*aec89f78SBastian Köcher 		.parent_names = gcc_xo_gpll0,
777*aec89f78SBastian Köcher 		.num_parents = 2,
778*aec89f78SBastian Köcher 		.ops = &clk_rcg2_ops,
779*aec89f78SBastian Köcher 	},
780*aec89f78SBastian Köcher };
781*aec89f78SBastian Köcher 
782*aec89f78SBastian Köcher static struct freq_tbl ftbl_gp3_clk_src[] = {
783*aec89f78SBastian Köcher 	F(19200000, P_XO, 1, 0, 0),
784*aec89f78SBastian Köcher 	F(100000000, P_GPLL0, 6, 0, 0),
785*aec89f78SBastian Köcher 	F(200000000, P_GPLL0, 3, 0, 0),
786*aec89f78SBastian Köcher 	{ }
787*aec89f78SBastian Köcher };
788*aec89f78SBastian Köcher 
789*aec89f78SBastian Köcher static struct clk_rcg2 gp3_clk_src = {
790*aec89f78SBastian Köcher 	.cmd_rcgr = 0x1984,
791*aec89f78SBastian Köcher 	.mnd_width = 8,
792*aec89f78SBastian Köcher 	.hid_width = 5,
793*aec89f78SBastian Köcher 	.parent_map = gcc_xo_gpll0_map,
794*aec89f78SBastian Köcher 	.freq_tbl = ftbl_gp3_clk_src,
795*aec89f78SBastian Köcher 	.clkr.hw.init = &(struct clk_init_data)
796*aec89f78SBastian Köcher 	{
797*aec89f78SBastian Köcher 		.name = "gp3_clk_src",
798*aec89f78SBastian Köcher 		.parent_names = gcc_xo_gpll0,
799*aec89f78SBastian Köcher 		.num_parents = 2,
800*aec89f78SBastian Köcher 		.ops = &clk_rcg2_ops,
801*aec89f78SBastian Köcher 	},
802*aec89f78SBastian Köcher };
803*aec89f78SBastian Köcher 
804*aec89f78SBastian Köcher static struct freq_tbl ftbl_pcie_0_aux_clk_src[] = {
805*aec89f78SBastian Köcher 	F(1011000, P_XO, 1, 1, 19),
806*aec89f78SBastian Köcher 	{ }
807*aec89f78SBastian Köcher };
808*aec89f78SBastian Köcher 
809*aec89f78SBastian Köcher static struct clk_rcg2 pcie_0_aux_clk_src = {
810*aec89f78SBastian Köcher 	.cmd_rcgr = 0x1b00,
811*aec89f78SBastian Köcher 	.mnd_width = 8,
812*aec89f78SBastian Köcher 	.hid_width = 5,
813*aec89f78SBastian Köcher 	.freq_tbl = ftbl_pcie_0_aux_clk_src,
814*aec89f78SBastian Köcher 	.clkr.hw.init = &(struct clk_init_data)
815*aec89f78SBastian Köcher 	{
816*aec89f78SBastian Köcher 		.name = "pcie_0_aux_clk_src",
817*aec89f78SBastian Köcher 		.parent_names = (const char *[]) { "xo" },
818*aec89f78SBastian Köcher 		.num_parents = 1,
819*aec89f78SBastian Köcher 		.ops = &clk_rcg2_ops,
820*aec89f78SBastian Köcher 	},
821*aec89f78SBastian Köcher };
822*aec89f78SBastian Köcher 
823*aec89f78SBastian Köcher static struct freq_tbl ftbl_pcie_pipe_clk_src[] = {
824*aec89f78SBastian Köcher 	F(125000000, P_XO, 1, 0, 0),
825*aec89f78SBastian Köcher 	{ }
826*aec89f78SBastian Köcher };
827*aec89f78SBastian Köcher 
828*aec89f78SBastian Köcher static struct clk_rcg2 pcie_0_pipe_clk_src = {
829*aec89f78SBastian Köcher 	.cmd_rcgr = 0x1adc,
830*aec89f78SBastian Köcher 	.hid_width = 5,
831*aec89f78SBastian Köcher 	.freq_tbl = ftbl_pcie_pipe_clk_src,
832*aec89f78SBastian Köcher 	.clkr.hw.init = &(struct clk_init_data)
833*aec89f78SBastian Köcher 	{
834*aec89f78SBastian Köcher 		.name = "pcie_0_pipe_clk_src",
835*aec89f78SBastian Köcher 		.parent_names = (const char *[]) { "xo" },
836*aec89f78SBastian Köcher 		.num_parents = 1,
837*aec89f78SBastian Köcher 		.ops = &clk_rcg2_ops,
838*aec89f78SBastian Köcher 	},
839*aec89f78SBastian Köcher };
840*aec89f78SBastian Köcher 
841*aec89f78SBastian Köcher static struct freq_tbl ftbl_pcie_1_aux_clk_src[] = {
842*aec89f78SBastian Köcher 	F(1011000, P_XO, 1, 1, 19),
843*aec89f78SBastian Köcher 	{ }
844*aec89f78SBastian Köcher };
845*aec89f78SBastian Köcher 
846*aec89f78SBastian Köcher static struct clk_rcg2 pcie_1_aux_clk_src = {
847*aec89f78SBastian Köcher 	.cmd_rcgr = 0x1b80,
848*aec89f78SBastian Köcher 	.mnd_width = 8,
849*aec89f78SBastian Köcher 	.hid_width = 5,
850*aec89f78SBastian Köcher 	.freq_tbl = ftbl_pcie_1_aux_clk_src,
851*aec89f78SBastian Köcher 	.clkr.hw.init = &(struct clk_init_data)
852*aec89f78SBastian Köcher 	{
853*aec89f78SBastian Köcher 		.name = "pcie_1_aux_clk_src",
854*aec89f78SBastian Köcher 		.parent_names = (const char *[]) { "xo" },
855*aec89f78SBastian Köcher 		.num_parents = 1,
856*aec89f78SBastian Köcher 		.ops = &clk_rcg2_ops,
857*aec89f78SBastian Köcher 	},
858*aec89f78SBastian Köcher };
859*aec89f78SBastian Köcher 
860*aec89f78SBastian Köcher static struct clk_rcg2 pcie_1_pipe_clk_src = {
861*aec89f78SBastian Köcher 	.cmd_rcgr = 0x1b5c,
862*aec89f78SBastian Köcher 	.hid_width = 5,
863*aec89f78SBastian Köcher 	.freq_tbl = ftbl_pcie_pipe_clk_src,
864*aec89f78SBastian Köcher 	.clkr.hw.init = &(struct clk_init_data)
865*aec89f78SBastian Köcher 	{
866*aec89f78SBastian Köcher 		.name = "pcie_1_pipe_clk_src",
867*aec89f78SBastian Köcher 		.parent_names = (const char *[]) { "xo" },
868*aec89f78SBastian Köcher 		.num_parents = 1,
869*aec89f78SBastian Köcher 		.ops = &clk_rcg2_ops,
870*aec89f78SBastian Köcher 	},
871*aec89f78SBastian Köcher };
872*aec89f78SBastian Köcher 
873*aec89f78SBastian Köcher static struct freq_tbl ftbl_pdm2_clk_src[] = {
874*aec89f78SBastian Köcher 	F(60000000, P_GPLL0, 10, 0, 0),
875*aec89f78SBastian Köcher 	{ }
876*aec89f78SBastian Köcher };
877*aec89f78SBastian Köcher 
878*aec89f78SBastian Köcher static struct clk_rcg2 pdm2_clk_src = {
879*aec89f78SBastian Köcher 	.cmd_rcgr = 0x0cd0,
880*aec89f78SBastian Köcher 	.hid_width = 5,
881*aec89f78SBastian Köcher 	.parent_map = gcc_xo_gpll0_map,
882*aec89f78SBastian Köcher 	.freq_tbl = ftbl_pdm2_clk_src,
883*aec89f78SBastian Köcher 	.clkr.hw.init = &(struct clk_init_data)
884*aec89f78SBastian Köcher 	{
885*aec89f78SBastian Köcher 		.name = "pdm2_clk_src",
886*aec89f78SBastian Köcher 		.parent_names = gcc_xo_gpll0,
887*aec89f78SBastian Köcher 		.num_parents = 2,
888*aec89f78SBastian Köcher 		.ops = &clk_rcg2_ops,
889*aec89f78SBastian Köcher 	},
890*aec89f78SBastian Köcher };
891*aec89f78SBastian Köcher 
892*aec89f78SBastian Köcher static struct freq_tbl ftbl_sdcc1_apps_clk_src[] = {
893*aec89f78SBastian Köcher 	F(144000, P_XO, 16, 3, 25),
894*aec89f78SBastian Köcher 	F(400000, P_XO, 12, 1, 4),
895*aec89f78SBastian Köcher 	F(20000000, P_GPLL0, 15, 1, 2),
896*aec89f78SBastian Köcher 	F(25000000, P_GPLL0, 12, 1, 2),
897*aec89f78SBastian Köcher 	F(50000000, P_GPLL0, 12, 0, 0),
898*aec89f78SBastian Köcher 	F(100000000, P_GPLL0, 6, 0, 0),
899*aec89f78SBastian Köcher 	F(192000000, P_GPLL4, 2, 0, 0),
900*aec89f78SBastian Köcher 	F(384000000, P_GPLL4, 1, 0, 0),
901*aec89f78SBastian Köcher 	{ }
902*aec89f78SBastian Köcher };
903*aec89f78SBastian Köcher 
904*aec89f78SBastian Köcher static struct clk_rcg2 sdcc1_apps_clk_src = {
905*aec89f78SBastian Köcher 	.cmd_rcgr = 0x04d0,
906*aec89f78SBastian Köcher 	.mnd_width = 8,
907*aec89f78SBastian Köcher 	.hid_width = 5,
908*aec89f78SBastian Köcher 	.parent_map = gcc_xo_gpll0_gpll4_map,
909*aec89f78SBastian Köcher 	.freq_tbl = ftbl_sdcc1_apps_clk_src,
910*aec89f78SBastian Köcher 	.clkr.hw.init = &(struct clk_init_data)
911*aec89f78SBastian Köcher 	{
912*aec89f78SBastian Köcher 		.name = "sdcc1_apps_clk_src",
913*aec89f78SBastian Köcher 		.parent_names = gcc_xo_gpll0_gpll4,
914*aec89f78SBastian Köcher 		.num_parents = 3,
915*aec89f78SBastian Köcher 		.ops = &clk_rcg2_ops,
916*aec89f78SBastian Köcher 	},
917*aec89f78SBastian Köcher };
918*aec89f78SBastian Köcher 
919*aec89f78SBastian Köcher static struct freq_tbl ftbl_sdcc2_4_apps_clk_src[] = {
920*aec89f78SBastian Köcher 	F(144000, P_XO, 16, 3, 25),
921*aec89f78SBastian Köcher 	F(400000, P_XO, 12, 1, 4),
922*aec89f78SBastian Köcher 	F(20000000, P_GPLL0, 15, 1, 2),
923*aec89f78SBastian Köcher 	F(25000000, P_GPLL0, 12, 1, 2),
924*aec89f78SBastian Köcher 	F(50000000, P_GPLL0, 12, 0, 0),
925*aec89f78SBastian Köcher 	F(100000000, P_GPLL0, 6, 0, 0),
926*aec89f78SBastian Köcher 	F(200000000, P_GPLL0, 3, 0, 0),
927*aec89f78SBastian Köcher 	{ }
928*aec89f78SBastian Köcher };
929*aec89f78SBastian Köcher 
930*aec89f78SBastian Köcher static struct clk_rcg2 sdcc2_apps_clk_src = {
931*aec89f78SBastian Köcher 	.cmd_rcgr = 0x0510,
932*aec89f78SBastian Köcher 	.mnd_width = 8,
933*aec89f78SBastian Köcher 	.hid_width = 5,
934*aec89f78SBastian Köcher 	.parent_map = gcc_xo_gpll0_map,
935*aec89f78SBastian Köcher 	.freq_tbl = ftbl_sdcc2_4_apps_clk_src,
936*aec89f78SBastian Köcher 	.clkr.hw.init = &(struct clk_init_data)
937*aec89f78SBastian Köcher 	{
938*aec89f78SBastian Köcher 		.name = "sdcc2_apps_clk_src",
939*aec89f78SBastian Köcher 		.parent_names = gcc_xo_gpll0,
940*aec89f78SBastian Köcher 		.num_parents = 2,
941*aec89f78SBastian Köcher 		.ops = &clk_rcg2_ops,
942*aec89f78SBastian Köcher 	},
943*aec89f78SBastian Köcher };
944*aec89f78SBastian Köcher 
945*aec89f78SBastian Köcher static struct clk_rcg2 sdcc3_apps_clk_src = {
946*aec89f78SBastian Köcher 	.cmd_rcgr = 0x0550,
947*aec89f78SBastian Köcher 	.mnd_width = 8,
948*aec89f78SBastian Köcher 	.hid_width = 5,
949*aec89f78SBastian Köcher 	.parent_map = gcc_xo_gpll0_map,
950*aec89f78SBastian Köcher 	.freq_tbl = ftbl_sdcc2_4_apps_clk_src,
951*aec89f78SBastian Köcher 	.clkr.hw.init = &(struct clk_init_data)
952*aec89f78SBastian Köcher 	{
953*aec89f78SBastian Köcher 		.name = "sdcc3_apps_clk_src",
954*aec89f78SBastian Köcher 		.parent_names = gcc_xo_gpll0,
955*aec89f78SBastian Köcher 		.num_parents = 2,
956*aec89f78SBastian Köcher 		.ops = &clk_rcg2_ops,
957*aec89f78SBastian Köcher 	},
958*aec89f78SBastian Köcher };
959*aec89f78SBastian Köcher 
960*aec89f78SBastian Köcher static struct clk_rcg2 sdcc4_apps_clk_src = {
961*aec89f78SBastian Köcher 	.cmd_rcgr = 0x0590,
962*aec89f78SBastian Köcher 	.mnd_width = 8,
963*aec89f78SBastian Köcher 	.hid_width = 5,
964*aec89f78SBastian Köcher 	.parent_map = gcc_xo_gpll0_map,
965*aec89f78SBastian Köcher 	.freq_tbl = ftbl_sdcc2_4_apps_clk_src,
966*aec89f78SBastian Köcher 	.clkr.hw.init = &(struct clk_init_data)
967*aec89f78SBastian Köcher 	{
968*aec89f78SBastian Köcher 		.name = "sdcc4_apps_clk_src",
969*aec89f78SBastian Köcher 		.parent_names = gcc_xo_gpll0,
970*aec89f78SBastian Köcher 		.num_parents = 2,
971*aec89f78SBastian Köcher 		.ops = &clk_rcg2_ops,
972*aec89f78SBastian Köcher 	},
973*aec89f78SBastian Köcher };
974*aec89f78SBastian Köcher 
975*aec89f78SBastian Köcher static struct freq_tbl ftbl_tsif_ref_clk_src[] = {
976*aec89f78SBastian Köcher 	F(105500, P_XO, 1, 1, 182),
977*aec89f78SBastian Köcher 	{ }
978*aec89f78SBastian Köcher };
979*aec89f78SBastian Köcher 
980*aec89f78SBastian Köcher static struct clk_rcg2 tsif_ref_clk_src = {
981*aec89f78SBastian Köcher 	.cmd_rcgr = 0x0d90,
982*aec89f78SBastian Köcher 	.mnd_width = 8,
983*aec89f78SBastian Köcher 	.hid_width = 5,
984*aec89f78SBastian Köcher 	.freq_tbl = ftbl_tsif_ref_clk_src,
985*aec89f78SBastian Köcher 	.clkr.hw.init = &(struct clk_init_data)
986*aec89f78SBastian Köcher 	{
987*aec89f78SBastian Köcher 		.name = "tsif_ref_clk_src",
988*aec89f78SBastian Köcher 		.parent_names = (const char *[]) { "xo" },
989*aec89f78SBastian Köcher 		.num_parents = 1,
990*aec89f78SBastian Köcher 		.ops = &clk_rcg2_ops,
991*aec89f78SBastian Köcher 	},
992*aec89f78SBastian Köcher };
993*aec89f78SBastian Köcher 
994*aec89f78SBastian Köcher static struct freq_tbl ftbl_usb30_mock_utmi_clk_src[] = {
995*aec89f78SBastian Köcher 	F(19200000, P_XO, 1, 0, 0),
996*aec89f78SBastian Köcher 	F(60000000, P_GPLL0, 10, 0, 0),
997*aec89f78SBastian Köcher 	{ }
998*aec89f78SBastian Köcher };
999*aec89f78SBastian Köcher 
1000*aec89f78SBastian Köcher static struct clk_rcg2 usb30_mock_utmi_clk_src = {
1001*aec89f78SBastian Köcher 	.cmd_rcgr = 0x03e8,
1002*aec89f78SBastian Köcher 	.hid_width = 5,
1003*aec89f78SBastian Köcher 	.parent_map = gcc_xo_gpll0_map,
1004*aec89f78SBastian Köcher 	.freq_tbl = ftbl_usb30_mock_utmi_clk_src,
1005*aec89f78SBastian Köcher 	.clkr.hw.init = &(struct clk_init_data)
1006*aec89f78SBastian Köcher 	{
1007*aec89f78SBastian Köcher 		.name = "usb30_mock_utmi_clk_src",
1008*aec89f78SBastian Köcher 		.parent_names = gcc_xo_gpll0,
1009*aec89f78SBastian Köcher 		.num_parents = 2,
1010*aec89f78SBastian Köcher 		.ops = &clk_rcg2_ops,
1011*aec89f78SBastian Köcher 	},
1012*aec89f78SBastian Köcher };
1013*aec89f78SBastian Köcher 
1014*aec89f78SBastian Köcher static struct freq_tbl ftbl_usb3_phy_aux_clk_src[] = {
1015*aec89f78SBastian Köcher 	F(1200000, P_XO, 16, 0, 0),
1016*aec89f78SBastian Köcher 	{ }
1017*aec89f78SBastian Köcher };
1018*aec89f78SBastian Köcher 
1019*aec89f78SBastian Köcher static struct clk_rcg2 usb3_phy_aux_clk_src = {
1020*aec89f78SBastian Köcher 	.cmd_rcgr = 0x1414,
1021*aec89f78SBastian Köcher 	.hid_width = 5,
1022*aec89f78SBastian Köcher 	.freq_tbl = ftbl_usb3_phy_aux_clk_src,
1023*aec89f78SBastian Köcher 	.clkr.hw.init = &(struct clk_init_data)
1024*aec89f78SBastian Köcher 	{
1025*aec89f78SBastian Köcher 		.name = "usb3_phy_aux_clk_src",
1026*aec89f78SBastian Köcher 		.parent_names = (const char *[]) { "xo" },
1027*aec89f78SBastian Köcher 		.num_parents = 1,
1028*aec89f78SBastian Köcher 		.ops = &clk_rcg2_ops,
1029*aec89f78SBastian Köcher 	},
1030*aec89f78SBastian Köcher };
1031*aec89f78SBastian Köcher 
1032*aec89f78SBastian Köcher static struct freq_tbl ftbl_usb_hs_system_clk_src[] = {
1033*aec89f78SBastian Köcher 	F(75000000, P_GPLL0, 8, 0, 0),
1034*aec89f78SBastian Köcher 	{ }
1035*aec89f78SBastian Köcher };
1036*aec89f78SBastian Köcher 
1037*aec89f78SBastian Köcher static struct clk_rcg2 usb_hs_system_clk_src = {
1038*aec89f78SBastian Köcher 	.cmd_rcgr = 0x0490,
1039*aec89f78SBastian Köcher 	.hid_width = 5,
1040*aec89f78SBastian Köcher 	.parent_map = gcc_xo_gpll0_map,
1041*aec89f78SBastian Köcher 	.freq_tbl = ftbl_usb_hs_system_clk_src,
1042*aec89f78SBastian Köcher 	.clkr.hw.init = &(struct clk_init_data)
1043*aec89f78SBastian Köcher 	{
1044*aec89f78SBastian Köcher 		.name = "usb_hs_system_clk_src",
1045*aec89f78SBastian Köcher 		.parent_names = gcc_xo_gpll0,
1046*aec89f78SBastian Köcher 		.num_parents = 2,
1047*aec89f78SBastian Köcher 		.ops = &clk_rcg2_ops,
1048*aec89f78SBastian Köcher 	},
1049*aec89f78SBastian Köcher };
1050*aec89f78SBastian Köcher 
1051*aec89f78SBastian Köcher static struct clk_branch gcc_blsp1_ahb_clk = {
1052*aec89f78SBastian Köcher 	.halt_reg = 0x05c4,
1053*aec89f78SBastian Köcher 	.halt_check = BRANCH_HALT_VOTED,
1054*aec89f78SBastian Köcher 	.clkr = {
1055*aec89f78SBastian Köcher 		.enable_reg = 0x1484,
1056*aec89f78SBastian Köcher 		.enable_mask = BIT(17),
1057*aec89f78SBastian Köcher 		.hw.init = &(struct clk_init_data)
1058*aec89f78SBastian Köcher 		{
1059*aec89f78SBastian Köcher 			.name = "gcc_blsp1_ahb_clk",
1060*aec89f78SBastian Köcher 			.ops = &clk_branch2_ops,
1061*aec89f78SBastian Köcher 		},
1062*aec89f78SBastian Köcher 	},
1063*aec89f78SBastian Köcher };
1064*aec89f78SBastian Köcher 
1065*aec89f78SBastian Köcher static struct clk_branch gcc_blsp1_qup1_i2c_apps_clk = {
1066*aec89f78SBastian Köcher 	.halt_reg = 0x0648,
1067*aec89f78SBastian Köcher 	.clkr = {
1068*aec89f78SBastian Köcher 		.enable_reg = 0x0648,
1069*aec89f78SBastian Köcher 		.enable_mask = BIT(0),
1070*aec89f78SBastian Köcher 		.hw.init = &(struct clk_init_data)
1071*aec89f78SBastian Köcher 		{
1072*aec89f78SBastian Köcher 			.name = "gcc_blsp1_qup1_i2c_apps_clk",
1073*aec89f78SBastian Köcher 			.parent_names = (const char *[]) {
1074*aec89f78SBastian Köcher 				"blsp1_qup1_i2c_apps_clk_src",
1075*aec89f78SBastian Köcher 			},
1076*aec89f78SBastian Köcher 			.num_parents = 1,
1077*aec89f78SBastian Köcher 			.flags = CLK_SET_RATE_PARENT,
1078*aec89f78SBastian Köcher 			.ops = &clk_branch2_ops,
1079*aec89f78SBastian Köcher 		},
1080*aec89f78SBastian Köcher 	},
1081*aec89f78SBastian Köcher };
1082*aec89f78SBastian Köcher 
1083*aec89f78SBastian Köcher static struct clk_branch gcc_blsp1_qup1_spi_apps_clk = {
1084*aec89f78SBastian Köcher 	.halt_reg = 0x0644,
1085*aec89f78SBastian Köcher 	.clkr = {
1086*aec89f78SBastian Köcher 		.enable_reg = 0x0644,
1087*aec89f78SBastian Köcher 		.enable_mask = BIT(0),
1088*aec89f78SBastian Köcher 		.hw.init = &(struct clk_init_data)
1089*aec89f78SBastian Köcher 		{
1090*aec89f78SBastian Köcher 			.name = "gcc_blsp1_qup1_spi_apps_clk",
1091*aec89f78SBastian Köcher 			.parent_names = (const char *[]) {
1092*aec89f78SBastian Köcher 				"blsp1_qup1_spi_apps_clk_src",
1093*aec89f78SBastian Köcher 			},
1094*aec89f78SBastian Köcher 			.num_parents = 1,
1095*aec89f78SBastian Köcher 			.flags = CLK_SET_RATE_PARENT,
1096*aec89f78SBastian Köcher 			.ops = &clk_branch2_ops,
1097*aec89f78SBastian Köcher 		},
1098*aec89f78SBastian Köcher 	},
1099*aec89f78SBastian Köcher };
1100*aec89f78SBastian Köcher 
1101*aec89f78SBastian Köcher static struct clk_branch gcc_blsp1_qup2_i2c_apps_clk = {
1102*aec89f78SBastian Köcher 	.halt_reg = 0x06c8,
1103*aec89f78SBastian Köcher 	.clkr = {
1104*aec89f78SBastian Köcher 		.enable_reg = 0x06c8,
1105*aec89f78SBastian Köcher 		.enable_mask = BIT(0),
1106*aec89f78SBastian Köcher 		.hw.init = &(struct clk_init_data)
1107*aec89f78SBastian Köcher 		{
1108*aec89f78SBastian Köcher 			.name = "gcc_blsp1_qup2_i2c_apps_clk",
1109*aec89f78SBastian Köcher 			.parent_names = (const char *[]) {
1110*aec89f78SBastian Köcher 				"blsp1_qup2_i2c_apps_clk_src",
1111*aec89f78SBastian Köcher 			},
1112*aec89f78SBastian Köcher 			.num_parents = 1,
1113*aec89f78SBastian Köcher 			.flags = CLK_SET_RATE_PARENT,
1114*aec89f78SBastian Köcher 			.ops = &clk_branch2_ops,
1115*aec89f78SBastian Köcher 		},
1116*aec89f78SBastian Köcher 	},
1117*aec89f78SBastian Köcher };
1118*aec89f78SBastian Köcher 
1119*aec89f78SBastian Köcher static struct clk_branch gcc_blsp1_qup2_spi_apps_clk = {
1120*aec89f78SBastian Köcher 	.halt_reg = 0x06c4,
1121*aec89f78SBastian Köcher 	.clkr = {
1122*aec89f78SBastian Köcher 		.enable_reg = 0x06c4,
1123*aec89f78SBastian Köcher 		.enable_mask = BIT(0),
1124*aec89f78SBastian Köcher 		.hw.init = &(struct clk_init_data)
1125*aec89f78SBastian Köcher 		{
1126*aec89f78SBastian Köcher 			.name = "gcc_blsp1_qup2_spi_apps_clk",
1127*aec89f78SBastian Köcher 			.parent_names = (const char *[]) {
1128*aec89f78SBastian Köcher 				"blsp1_qup2_spi_apps_clk_src",
1129*aec89f78SBastian Köcher 			},
1130*aec89f78SBastian Köcher 			.num_parents = 1,
1131*aec89f78SBastian Köcher 			.flags = CLK_SET_RATE_PARENT,
1132*aec89f78SBastian Köcher 			.ops = &clk_branch2_ops,
1133*aec89f78SBastian Köcher 		},
1134*aec89f78SBastian Köcher 	},
1135*aec89f78SBastian Köcher };
1136*aec89f78SBastian Köcher 
1137*aec89f78SBastian Köcher static struct clk_branch gcc_blsp1_qup3_i2c_apps_clk = {
1138*aec89f78SBastian Köcher 	.halt_reg = 0x0748,
1139*aec89f78SBastian Köcher 	.clkr = {
1140*aec89f78SBastian Köcher 		.enable_reg = 0x0748,
1141*aec89f78SBastian Köcher 		.enable_mask = BIT(0),
1142*aec89f78SBastian Köcher 		.hw.init = &(struct clk_init_data)
1143*aec89f78SBastian Köcher 		{
1144*aec89f78SBastian Köcher 			.name = "gcc_blsp1_qup3_i2c_apps_clk",
1145*aec89f78SBastian Köcher 			.parent_names = (const char *[]) {
1146*aec89f78SBastian Köcher 				"blsp1_qup3_i2c_apps_clk_src",
1147*aec89f78SBastian Köcher 			},
1148*aec89f78SBastian Köcher 			.num_parents = 1,
1149*aec89f78SBastian Köcher 			.flags = CLK_SET_RATE_PARENT,
1150*aec89f78SBastian Köcher 			.ops = &clk_branch2_ops,
1151*aec89f78SBastian Köcher 		},
1152*aec89f78SBastian Köcher 	},
1153*aec89f78SBastian Köcher };
1154*aec89f78SBastian Köcher 
1155*aec89f78SBastian Köcher static struct clk_branch gcc_blsp1_qup3_spi_apps_clk = {
1156*aec89f78SBastian Köcher 	.halt_reg = 0x0744,
1157*aec89f78SBastian Köcher 	.clkr = {
1158*aec89f78SBastian Köcher 		.enable_reg = 0x0744,
1159*aec89f78SBastian Köcher 		.enable_mask = BIT(0),
1160*aec89f78SBastian Köcher 		.hw.init = &(struct clk_init_data)
1161*aec89f78SBastian Köcher 		{
1162*aec89f78SBastian Köcher 			.name = "gcc_blsp1_qup3_spi_apps_clk",
1163*aec89f78SBastian Köcher 			.parent_names = (const char *[]) {
1164*aec89f78SBastian Köcher 				"blsp1_qup3_spi_apps_clk_src",
1165*aec89f78SBastian Köcher 			},
1166*aec89f78SBastian Köcher 			.num_parents = 1,
1167*aec89f78SBastian Köcher 			.flags = CLK_SET_RATE_PARENT,
1168*aec89f78SBastian Köcher 			.ops = &clk_branch2_ops,
1169*aec89f78SBastian Köcher 		},
1170*aec89f78SBastian Köcher 	},
1171*aec89f78SBastian Köcher };
1172*aec89f78SBastian Köcher 
1173*aec89f78SBastian Köcher static struct clk_branch gcc_blsp1_qup4_i2c_apps_clk = {
1174*aec89f78SBastian Köcher 	.halt_reg = 0x07c8,
1175*aec89f78SBastian Köcher 	.clkr = {
1176*aec89f78SBastian Köcher 		.enable_reg = 0x07c8,
1177*aec89f78SBastian Köcher 		.enable_mask = BIT(0),
1178*aec89f78SBastian Köcher 		.hw.init = &(struct clk_init_data)
1179*aec89f78SBastian Köcher 		{
1180*aec89f78SBastian Köcher 			.name = "gcc_blsp1_qup4_i2c_apps_clk",
1181*aec89f78SBastian Köcher 			.parent_names = (const char *[]) {
1182*aec89f78SBastian Köcher 				"blsp1_qup4_i2c_apps_clk_src",
1183*aec89f78SBastian Köcher 			},
1184*aec89f78SBastian Köcher 			.num_parents = 1,
1185*aec89f78SBastian Köcher 			.flags = CLK_SET_RATE_PARENT,
1186*aec89f78SBastian Köcher 			.ops = &clk_branch2_ops,
1187*aec89f78SBastian Köcher 		},
1188*aec89f78SBastian Köcher 	},
1189*aec89f78SBastian Köcher };
1190*aec89f78SBastian Köcher 
1191*aec89f78SBastian Köcher static struct clk_branch gcc_blsp1_qup4_spi_apps_clk = {
1192*aec89f78SBastian Köcher 	.halt_reg = 0x07c4,
1193*aec89f78SBastian Köcher 	.clkr = {
1194*aec89f78SBastian Köcher 		.enable_reg = 0x07c4,
1195*aec89f78SBastian Köcher 		.enable_mask = BIT(0),
1196*aec89f78SBastian Köcher 		.hw.init = &(struct clk_init_data)
1197*aec89f78SBastian Köcher 		{
1198*aec89f78SBastian Köcher 			.name = "gcc_blsp1_qup4_spi_apps_clk",
1199*aec89f78SBastian Köcher 			.parent_names = (const char *[]) {
1200*aec89f78SBastian Köcher 				"blsp1_qup4_spi_apps_clk_src",
1201*aec89f78SBastian Köcher 			},
1202*aec89f78SBastian Köcher 			.num_parents = 1,
1203*aec89f78SBastian Köcher 			.flags = CLK_SET_RATE_PARENT,
1204*aec89f78SBastian Köcher 			.ops = &clk_branch2_ops,
1205*aec89f78SBastian Köcher 		},
1206*aec89f78SBastian Köcher 	},
1207*aec89f78SBastian Köcher };
1208*aec89f78SBastian Köcher 
1209*aec89f78SBastian Köcher static struct clk_branch gcc_blsp1_qup5_i2c_apps_clk = {
1210*aec89f78SBastian Köcher 	.halt_reg = 0x0848,
1211*aec89f78SBastian Köcher 	.clkr = {
1212*aec89f78SBastian Köcher 		.enable_reg = 0x0848,
1213*aec89f78SBastian Köcher 		.enable_mask = BIT(0),
1214*aec89f78SBastian Köcher 		.hw.init = &(struct clk_init_data)
1215*aec89f78SBastian Köcher 		{
1216*aec89f78SBastian Köcher 			.name = "gcc_blsp1_qup5_i2c_apps_clk",
1217*aec89f78SBastian Köcher 			.parent_names = (const char *[]) {
1218*aec89f78SBastian Köcher 				"blsp1_qup5_i2c_apps_clk_src",
1219*aec89f78SBastian Köcher 			},
1220*aec89f78SBastian Köcher 			.num_parents = 1,
1221*aec89f78SBastian Köcher 			.flags = CLK_SET_RATE_PARENT,
1222*aec89f78SBastian Köcher 			.ops = &clk_branch2_ops,
1223*aec89f78SBastian Köcher 		},
1224*aec89f78SBastian Köcher 	},
1225*aec89f78SBastian Köcher };
1226*aec89f78SBastian Köcher 
1227*aec89f78SBastian Köcher static struct clk_branch gcc_blsp1_qup5_spi_apps_clk = {
1228*aec89f78SBastian Köcher 	.halt_reg = 0x0844,
1229*aec89f78SBastian Köcher 	.clkr = {
1230*aec89f78SBastian Köcher 		.enable_reg = 0x0844,
1231*aec89f78SBastian Köcher 		.enable_mask = BIT(0),
1232*aec89f78SBastian Köcher 		.hw.init = &(struct clk_init_data)
1233*aec89f78SBastian Köcher 		{
1234*aec89f78SBastian Köcher 			.name = "gcc_blsp1_qup5_spi_apps_clk",
1235*aec89f78SBastian Köcher 			.parent_names = (const char *[]) {
1236*aec89f78SBastian Köcher 				"blsp1_qup5_spi_apps_clk_src",
1237*aec89f78SBastian Köcher 			},
1238*aec89f78SBastian Köcher 			.num_parents = 1,
1239*aec89f78SBastian Köcher 			.flags = CLK_SET_RATE_PARENT,
1240*aec89f78SBastian Köcher 			.ops = &clk_branch2_ops,
1241*aec89f78SBastian Köcher 		},
1242*aec89f78SBastian Köcher 	},
1243*aec89f78SBastian Köcher };
1244*aec89f78SBastian Köcher 
1245*aec89f78SBastian Köcher static struct clk_branch gcc_blsp1_qup6_i2c_apps_clk = {
1246*aec89f78SBastian Köcher 	.halt_reg = 0x08c8,
1247*aec89f78SBastian Köcher 	.clkr = {
1248*aec89f78SBastian Köcher 		.enable_reg = 0x08c8,
1249*aec89f78SBastian Köcher 		.enable_mask = BIT(0),
1250*aec89f78SBastian Köcher 		.hw.init = &(struct clk_init_data)
1251*aec89f78SBastian Köcher 		{
1252*aec89f78SBastian Köcher 			.name = "gcc_blsp1_qup6_i2c_apps_clk",
1253*aec89f78SBastian Köcher 			.parent_names = (const char *[]) {
1254*aec89f78SBastian Köcher 				"blsp1_qup6_i2c_apps_clk_src",
1255*aec89f78SBastian Köcher 			},
1256*aec89f78SBastian Köcher 			.num_parents = 1,
1257*aec89f78SBastian Köcher 			.flags = CLK_SET_RATE_PARENT,
1258*aec89f78SBastian Köcher 			.ops = &clk_branch2_ops,
1259*aec89f78SBastian Köcher 		},
1260*aec89f78SBastian Köcher 	},
1261*aec89f78SBastian Köcher };
1262*aec89f78SBastian Köcher 
1263*aec89f78SBastian Köcher static struct clk_branch gcc_blsp1_qup6_spi_apps_clk = {
1264*aec89f78SBastian Köcher 	.halt_reg = 0x08c4,
1265*aec89f78SBastian Köcher 	.clkr = {
1266*aec89f78SBastian Köcher 		.enable_reg = 0x08c4,
1267*aec89f78SBastian Köcher 		.enable_mask = BIT(0),
1268*aec89f78SBastian Köcher 		.hw.init = &(struct clk_init_data)
1269*aec89f78SBastian Köcher 		{
1270*aec89f78SBastian Köcher 			.name = "gcc_blsp1_qup6_spi_apps_clk",
1271*aec89f78SBastian Köcher 			.parent_names = (const char *[]) {
1272*aec89f78SBastian Köcher 				"blsp1_qup6_spi_apps_clk_src",
1273*aec89f78SBastian Köcher 			},
1274*aec89f78SBastian Köcher 			.num_parents = 1,
1275*aec89f78SBastian Köcher 			.flags = CLK_SET_RATE_PARENT,
1276*aec89f78SBastian Köcher 			.ops = &clk_branch2_ops,
1277*aec89f78SBastian Köcher 		},
1278*aec89f78SBastian Köcher 	},
1279*aec89f78SBastian Köcher };
1280*aec89f78SBastian Köcher 
1281*aec89f78SBastian Köcher static struct clk_branch gcc_blsp1_uart1_apps_clk = {
1282*aec89f78SBastian Köcher 	.halt_reg = 0x0684,
1283*aec89f78SBastian Köcher 	.clkr = {
1284*aec89f78SBastian Köcher 		.enable_reg = 0x0684,
1285*aec89f78SBastian Köcher 		.enable_mask = BIT(0),
1286*aec89f78SBastian Köcher 		.hw.init = &(struct clk_init_data)
1287*aec89f78SBastian Köcher 		{
1288*aec89f78SBastian Köcher 			.name = "gcc_blsp1_uart1_apps_clk",
1289*aec89f78SBastian Köcher 			.parent_names = (const char *[]) {
1290*aec89f78SBastian Köcher 				"blsp1_uart1_apps_clk_src",
1291*aec89f78SBastian Köcher 			},
1292*aec89f78SBastian Köcher 			.num_parents = 1,
1293*aec89f78SBastian Köcher 			.flags = CLK_SET_RATE_PARENT,
1294*aec89f78SBastian Köcher 			.ops = &clk_branch2_ops,
1295*aec89f78SBastian Köcher 		},
1296*aec89f78SBastian Köcher 	},
1297*aec89f78SBastian Köcher };
1298*aec89f78SBastian Köcher 
1299*aec89f78SBastian Köcher static struct clk_branch gcc_blsp1_uart2_apps_clk = {
1300*aec89f78SBastian Köcher 	.halt_reg = 0x0704,
1301*aec89f78SBastian Köcher 	.clkr = {
1302*aec89f78SBastian Köcher 		.enable_reg = 0x0704,
1303*aec89f78SBastian Köcher 		.enable_mask = BIT(0),
1304*aec89f78SBastian Köcher 		.hw.init = &(struct clk_init_data)
1305*aec89f78SBastian Köcher 		{
1306*aec89f78SBastian Köcher 			.name = "gcc_blsp1_uart2_apps_clk",
1307*aec89f78SBastian Köcher 			.parent_names = (const char *[]) {
1308*aec89f78SBastian Köcher 				"blsp1_uart2_apps_clk_src",
1309*aec89f78SBastian Köcher 			},
1310*aec89f78SBastian Köcher 			.num_parents = 1,
1311*aec89f78SBastian Köcher 			.flags = CLK_SET_RATE_PARENT,
1312*aec89f78SBastian Köcher 			.ops = &clk_branch2_ops,
1313*aec89f78SBastian Köcher 		},
1314*aec89f78SBastian Köcher 	},
1315*aec89f78SBastian Köcher };
1316*aec89f78SBastian Köcher 
1317*aec89f78SBastian Köcher static struct clk_branch gcc_blsp1_uart3_apps_clk = {
1318*aec89f78SBastian Köcher 	.halt_reg = 0x0784,
1319*aec89f78SBastian Köcher 	.clkr = {
1320*aec89f78SBastian Köcher 		.enable_reg = 0x0784,
1321*aec89f78SBastian Köcher 		.enable_mask = BIT(0),
1322*aec89f78SBastian Köcher 		.hw.init = &(struct clk_init_data)
1323*aec89f78SBastian Köcher 		{
1324*aec89f78SBastian Köcher 			.name = "gcc_blsp1_uart3_apps_clk",
1325*aec89f78SBastian Köcher 			.parent_names = (const char *[]) {
1326*aec89f78SBastian Köcher 				"blsp1_uart3_apps_clk_src",
1327*aec89f78SBastian Köcher 			},
1328*aec89f78SBastian Köcher 			.num_parents = 1,
1329*aec89f78SBastian Köcher 			.flags = CLK_SET_RATE_PARENT,
1330*aec89f78SBastian Köcher 			.ops = &clk_branch2_ops,
1331*aec89f78SBastian Köcher 		},
1332*aec89f78SBastian Köcher 	},
1333*aec89f78SBastian Köcher };
1334*aec89f78SBastian Köcher 
1335*aec89f78SBastian Köcher static struct clk_branch gcc_blsp1_uart4_apps_clk = {
1336*aec89f78SBastian Köcher 	.halt_reg = 0x0804,
1337*aec89f78SBastian Köcher 	.clkr = {
1338*aec89f78SBastian Köcher 		.enable_reg = 0x0804,
1339*aec89f78SBastian Köcher 		.enable_mask = BIT(0),
1340*aec89f78SBastian Köcher 		.hw.init = &(struct clk_init_data)
1341*aec89f78SBastian Köcher 		{
1342*aec89f78SBastian Köcher 			.name = "gcc_blsp1_uart4_apps_clk",
1343*aec89f78SBastian Köcher 			.parent_names = (const char *[]) {
1344*aec89f78SBastian Köcher 				"blsp1_uart4_apps_clk_src",
1345*aec89f78SBastian Köcher 			},
1346*aec89f78SBastian Köcher 			.num_parents = 1,
1347*aec89f78SBastian Köcher 			.flags = CLK_SET_RATE_PARENT,
1348*aec89f78SBastian Köcher 			.ops = &clk_branch2_ops,
1349*aec89f78SBastian Köcher 		},
1350*aec89f78SBastian Köcher 	},
1351*aec89f78SBastian Köcher };
1352*aec89f78SBastian Köcher 
1353*aec89f78SBastian Köcher static struct clk_branch gcc_blsp1_uart5_apps_clk = {
1354*aec89f78SBastian Köcher 	.halt_reg = 0x0884,
1355*aec89f78SBastian Köcher 	.clkr = {
1356*aec89f78SBastian Köcher 		.enable_reg = 0x0884,
1357*aec89f78SBastian Köcher 		.enable_mask = BIT(0),
1358*aec89f78SBastian Köcher 		.hw.init = &(struct clk_init_data)
1359*aec89f78SBastian Köcher 		{
1360*aec89f78SBastian Köcher 			.name = "gcc_blsp1_uart5_apps_clk",
1361*aec89f78SBastian Köcher 			.parent_names = (const char *[]) {
1362*aec89f78SBastian Köcher 				"blsp1_uart5_apps_clk_src",
1363*aec89f78SBastian Köcher 			},
1364*aec89f78SBastian Köcher 			.num_parents = 1,
1365*aec89f78SBastian Köcher 			.flags = CLK_SET_RATE_PARENT,
1366*aec89f78SBastian Köcher 			.ops = &clk_branch2_ops,
1367*aec89f78SBastian Köcher 		},
1368*aec89f78SBastian Köcher 	},
1369*aec89f78SBastian Köcher };
1370*aec89f78SBastian Köcher 
1371*aec89f78SBastian Köcher static struct clk_branch gcc_blsp1_uart6_apps_clk = {
1372*aec89f78SBastian Köcher 	.halt_reg = 0x0904,
1373*aec89f78SBastian Köcher 	.clkr = {
1374*aec89f78SBastian Köcher 		.enable_reg = 0x0904,
1375*aec89f78SBastian Köcher 		.enable_mask = BIT(0),
1376*aec89f78SBastian Köcher 		.hw.init = &(struct clk_init_data)
1377*aec89f78SBastian Köcher 		{
1378*aec89f78SBastian Köcher 			.name = "gcc_blsp1_uart6_apps_clk",
1379*aec89f78SBastian Köcher 			.parent_names = (const char *[]) {
1380*aec89f78SBastian Köcher 				"blsp1_uart6_apps_clk_src",
1381*aec89f78SBastian Köcher 			},
1382*aec89f78SBastian Köcher 			.num_parents = 1,
1383*aec89f78SBastian Köcher 			.flags = CLK_SET_RATE_PARENT,
1384*aec89f78SBastian Köcher 			.ops = &clk_branch2_ops,
1385*aec89f78SBastian Köcher 		},
1386*aec89f78SBastian Köcher 	},
1387*aec89f78SBastian Köcher };
1388*aec89f78SBastian Köcher 
1389*aec89f78SBastian Köcher static struct clk_branch gcc_blsp2_ahb_clk = {
1390*aec89f78SBastian Köcher 	.halt_reg = 0x0944,
1391*aec89f78SBastian Köcher 	.halt_check = BRANCH_HALT_VOTED,
1392*aec89f78SBastian Köcher 	.clkr = {
1393*aec89f78SBastian Köcher 		.enable_reg = 0x1484,
1394*aec89f78SBastian Köcher 		.enable_mask = BIT(15),
1395*aec89f78SBastian Köcher 		.hw.init = &(struct clk_init_data)
1396*aec89f78SBastian Köcher 		{
1397*aec89f78SBastian Köcher 			.name = "gcc_blsp2_ahb_clk",
1398*aec89f78SBastian Köcher 			.ops = &clk_branch2_ops,
1399*aec89f78SBastian Köcher 		},
1400*aec89f78SBastian Köcher 	},
1401*aec89f78SBastian Köcher };
1402*aec89f78SBastian Köcher 
1403*aec89f78SBastian Köcher static struct clk_branch gcc_blsp2_qup1_i2c_apps_clk = {
1404*aec89f78SBastian Köcher 	.halt_reg = 0x0988,
1405*aec89f78SBastian Köcher 	.clkr = {
1406*aec89f78SBastian Köcher 		.enable_reg = 0x0988,
1407*aec89f78SBastian Köcher 		.enable_mask = BIT(0),
1408*aec89f78SBastian Köcher 		.hw.init = &(struct clk_init_data)
1409*aec89f78SBastian Köcher 		{
1410*aec89f78SBastian Köcher 			.name = "gcc_blsp2_qup1_i2c_apps_clk",
1411*aec89f78SBastian Köcher 			.parent_names = (const char *[]) {
1412*aec89f78SBastian Köcher 				"blsp2_qup1_i2c_apps_clk_src",
1413*aec89f78SBastian Köcher 			},
1414*aec89f78SBastian Köcher 			.num_parents = 1,
1415*aec89f78SBastian Köcher 			.flags = CLK_SET_RATE_PARENT,
1416*aec89f78SBastian Köcher 			.ops = &clk_branch2_ops,
1417*aec89f78SBastian Köcher 		},
1418*aec89f78SBastian Köcher 	},
1419*aec89f78SBastian Köcher };
1420*aec89f78SBastian Köcher 
1421*aec89f78SBastian Köcher static struct clk_branch gcc_blsp2_qup1_spi_apps_clk = {
1422*aec89f78SBastian Köcher 	.halt_reg = 0x0984,
1423*aec89f78SBastian Köcher 	.clkr = {
1424*aec89f78SBastian Köcher 		.enable_reg = 0x0984,
1425*aec89f78SBastian Köcher 		.enable_mask = BIT(0),
1426*aec89f78SBastian Köcher 		.hw.init = &(struct clk_init_data)
1427*aec89f78SBastian Köcher 		{
1428*aec89f78SBastian Köcher 			.name = "gcc_blsp2_qup1_spi_apps_clk",
1429*aec89f78SBastian Köcher 			.parent_names = (const char *[]) {
1430*aec89f78SBastian Köcher 				"blsp2_qup1_spi_apps_clk_src",
1431*aec89f78SBastian Köcher 			},
1432*aec89f78SBastian Köcher 			.num_parents = 1,
1433*aec89f78SBastian Köcher 			.flags = CLK_SET_RATE_PARENT,
1434*aec89f78SBastian Köcher 			.ops = &clk_branch2_ops,
1435*aec89f78SBastian Köcher 		},
1436*aec89f78SBastian Köcher 	},
1437*aec89f78SBastian Köcher };
1438*aec89f78SBastian Köcher 
1439*aec89f78SBastian Köcher static struct clk_branch gcc_blsp2_qup2_i2c_apps_clk = {
1440*aec89f78SBastian Köcher 	.halt_reg = 0x0a08,
1441*aec89f78SBastian Köcher 	.clkr = {
1442*aec89f78SBastian Köcher 		.enable_reg = 0x0a08,
1443*aec89f78SBastian Köcher 		.enable_mask = BIT(0),
1444*aec89f78SBastian Köcher 		.hw.init = &(struct clk_init_data)
1445*aec89f78SBastian Köcher 		{
1446*aec89f78SBastian Köcher 			.name = "gcc_blsp2_qup2_i2c_apps_clk",
1447*aec89f78SBastian Köcher 			.parent_names = (const char *[]) {
1448*aec89f78SBastian Köcher 				"blsp2_qup2_i2c_apps_clk_src",
1449*aec89f78SBastian Köcher 			},
1450*aec89f78SBastian Köcher 			.num_parents = 1,
1451*aec89f78SBastian Köcher 			.flags = CLK_SET_RATE_PARENT,
1452*aec89f78SBastian Köcher 			.ops = &clk_branch2_ops,
1453*aec89f78SBastian Köcher 		},
1454*aec89f78SBastian Köcher 	},
1455*aec89f78SBastian Köcher };
1456*aec89f78SBastian Köcher 
1457*aec89f78SBastian Köcher static struct clk_branch gcc_blsp2_qup2_spi_apps_clk = {
1458*aec89f78SBastian Köcher 	.halt_reg = 0x0a04,
1459*aec89f78SBastian Köcher 	.clkr = {
1460*aec89f78SBastian Köcher 		.enable_reg = 0x0a04,
1461*aec89f78SBastian Köcher 		.enable_mask = BIT(0),
1462*aec89f78SBastian Köcher 		.hw.init = &(struct clk_init_data)
1463*aec89f78SBastian Köcher 		{
1464*aec89f78SBastian Köcher 			.name = "gcc_blsp2_qup2_spi_apps_clk",
1465*aec89f78SBastian Köcher 			.parent_names = (const char *[]) {
1466*aec89f78SBastian Köcher 				"blsp2_qup2_spi_apps_clk_src",
1467*aec89f78SBastian Köcher 			},
1468*aec89f78SBastian Köcher 			.num_parents = 1,
1469*aec89f78SBastian Köcher 			.flags = CLK_SET_RATE_PARENT,
1470*aec89f78SBastian Köcher 			.ops = &clk_branch2_ops,
1471*aec89f78SBastian Köcher 		},
1472*aec89f78SBastian Köcher 	},
1473*aec89f78SBastian Köcher };
1474*aec89f78SBastian Köcher 
1475*aec89f78SBastian Köcher static struct clk_branch gcc_blsp2_qup3_i2c_apps_clk = {
1476*aec89f78SBastian Köcher 	.halt_reg = 0x0a88,
1477*aec89f78SBastian Köcher 	.clkr = {
1478*aec89f78SBastian Köcher 		.enable_reg = 0x0a88,
1479*aec89f78SBastian Köcher 		.enable_mask = BIT(0),
1480*aec89f78SBastian Köcher 		.hw.init = &(struct clk_init_data)
1481*aec89f78SBastian Köcher 		{
1482*aec89f78SBastian Köcher 			.name = "gcc_blsp2_qup3_i2c_apps_clk",
1483*aec89f78SBastian Köcher 			.parent_names = (const char *[]) {
1484*aec89f78SBastian Köcher 				"blsp2_qup3_i2c_apps_clk_src",
1485*aec89f78SBastian Köcher 			},
1486*aec89f78SBastian Köcher 			.num_parents = 1,
1487*aec89f78SBastian Köcher 			.flags = CLK_SET_RATE_PARENT,
1488*aec89f78SBastian Köcher 			.ops = &clk_branch2_ops,
1489*aec89f78SBastian Köcher 		},
1490*aec89f78SBastian Köcher 	},
1491*aec89f78SBastian Köcher };
1492*aec89f78SBastian Köcher 
1493*aec89f78SBastian Köcher static struct clk_branch gcc_blsp2_qup3_spi_apps_clk = {
1494*aec89f78SBastian Köcher 	.halt_reg = 0x0a84,
1495*aec89f78SBastian Köcher 	.clkr = {
1496*aec89f78SBastian Köcher 		.enable_reg = 0x0a84,
1497*aec89f78SBastian Köcher 		.enable_mask = BIT(0),
1498*aec89f78SBastian Köcher 		.hw.init = &(struct clk_init_data)
1499*aec89f78SBastian Köcher 		{
1500*aec89f78SBastian Köcher 			.name = "gcc_blsp2_qup3_spi_apps_clk",
1501*aec89f78SBastian Köcher 			.parent_names = (const char *[]) {
1502*aec89f78SBastian Köcher 				"blsp2_qup3_spi_apps_clk_src",
1503*aec89f78SBastian Köcher 			},
1504*aec89f78SBastian Köcher 			.num_parents = 1,
1505*aec89f78SBastian Köcher 			.flags = CLK_SET_RATE_PARENT,
1506*aec89f78SBastian Köcher 			.ops = &clk_branch2_ops,
1507*aec89f78SBastian Köcher 		},
1508*aec89f78SBastian Köcher 	},
1509*aec89f78SBastian Köcher };
1510*aec89f78SBastian Köcher 
1511*aec89f78SBastian Köcher static struct clk_branch gcc_blsp2_qup4_i2c_apps_clk = {
1512*aec89f78SBastian Köcher 	.halt_reg = 0x0b08,
1513*aec89f78SBastian Köcher 	.clkr = {
1514*aec89f78SBastian Köcher 		.enable_reg = 0x0b08,
1515*aec89f78SBastian Köcher 		.enable_mask = BIT(0),
1516*aec89f78SBastian Köcher 		.hw.init = &(struct clk_init_data)
1517*aec89f78SBastian Köcher 		{
1518*aec89f78SBastian Köcher 			.name = "gcc_blsp2_qup4_i2c_apps_clk",
1519*aec89f78SBastian Köcher 			.parent_names = (const char *[]) {
1520*aec89f78SBastian Köcher 				"blsp2_qup4_i2c_apps_clk_src",
1521*aec89f78SBastian Köcher 			},
1522*aec89f78SBastian Köcher 			.num_parents = 1,
1523*aec89f78SBastian Köcher 			.flags = CLK_SET_RATE_PARENT,
1524*aec89f78SBastian Köcher 			.ops = &clk_branch2_ops,
1525*aec89f78SBastian Köcher 		},
1526*aec89f78SBastian Köcher 	},
1527*aec89f78SBastian Köcher };
1528*aec89f78SBastian Köcher 
1529*aec89f78SBastian Köcher static struct clk_branch gcc_blsp2_qup4_spi_apps_clk = {
1530*aec89f78SBastian Köcher 	.halt_reg = 0x0b04,
1531*aec89f78SBastian Köcher 	.clkr = {
1532*aec89f78SBastian Köcher 		.enable_reg = 0x0b04,
1533*aec89f78SBastian Köcher 		.enable_mask = BIT(0),
1534*aec89f78SBastian Köcher 		.hw.init = &(struct clk_init_data)
1535*aec89f78SBastian Köcher 		{
1536*aec89f78SBastian Köcher 			.name = "gcc_blsp2_qup4_spi_apps_clk",
1537*aec89f78SBastian Köcher 			.parent_names = (const char *[]) {
1538*aec89f78SBastian Köcher 				"blsp2_qup4_spi_apps_clk_src",
1539*aec89f78SBastian Köcher 			},
1540*aec89f78SBastian Köcher 			.num_parents = 1,
1541*aec89f78SBastian Köcher 			.flags = CLK_SET_RATE_PARENT,
1542*aec89f78SBastian Köcher 			.ops = &clk_branch2_ops,
1543*aec89f78SBastian Köcher 		},
1544*aec89f78SBastian Köcher 	},
1545*aec89f78SBastian Köcher };
1546*aec89f78SBastian Köcher 
1547*aec89f78SBastian Köcher static struct clk_branch gcc_blsp2_qup5_i2c_apps_clk = {
1548*aec89f78SBastian Köcher 	.halt_reg = 0x0b88,
1549*aec89f78SBastian Köcher 	.clkr = {
1550*aec89f78SBastian Köcher 		.enable_reg = 0x0b88,
1551*aec89f78SBastian Köcher 		.enable_mask = BIT(0),
1552*aec89f78SBastian Köcher 		.hw.init = &(struct clk_init_data)
1553*aec89f78SBastian Köcher 		{
1554*aec89f78SBastian Köcher 			.name = "gcc_blsp2_qup5_i2c_apps_clk",
1555*aec89f78SBastian Köcher 			.parent_names = (const char *[]) {
1556*aec89f78SBastian Köcher 				"blsp2_qup5_i2c_apps_clk_src",
1557*aec89f78SBastian Köcher 			},
1558*aec89f78SBastian Köcher 			.num_parents = 1,
1559*aec89f78SBastian Köcher 			.flags = CLK_SET_RATE_PARENT,
1560*aec89f78SBastian Köcher 			.ops = &clk_branch2_ops,
1561*aec89f78SBastian Köcher 		},
1562*aec89f78SBastian Köcher 	},
1563*aec89f78SBastian Köcher };
1564*aec89f78SBastian Köcher 
1565*aec89f78SBastian Köcher static struct clk_branch gcc_blsp2_qup5_spi_apps_clk = {
1566*aec89f78SBastian Köcher 	.halt_reg = 0x0b84,
1567*aec89f78SBastian Köcher 	.clkr = {
1568*aec89f78SBastian Köcher 		.enable_reg = 0x0b84,
1569*aec89f78SBastian Köcher 		.enable_mask = BIT(0),
1570*aec89f78SBastian Köcher 		.hw.init = &(struct clk_init_data)
1571*aec89f78SBastian Köcher 		{
1572*aec89f78SBastian Köcher 			.name = "gcc_blsp2_qup5_spi_apps_clk",
1573*aec89f78SBastian Köcher 			.parent_names = (const char *[]) {
1574*aec89f78SBastian Köcher 				"blsp2_qup5_spi_apps_clk_src",
1575*aec89f78SBastian Köcher 			},
1576*aec89f78SBastian Köcher 			.num_parents = 1,
1577*aec89f78SBastian Köcher 			.flags = CLK_SET_RATE_PARENT,
1578*aec89f78SBastian Köcher 			.ops = &clk_branch2_ops,
1579*aec89f78SBastian Köcher 		},
1580*aec89f78SBastian Köcher 	},
1581*aec89f78SBastian Köcher };
1582*aec89f78SBastian Köcher 
1583*aec89f78SBastian Köcher static struct clk_branch gcc_blsp2_qup6_i2c_apps_clk = {
1584*aec89f78SBastian Köcher 	.halt_reg = 0x0c08,
1585*aec89f78SBastian Köcher 	.clkr = {
1586*aec89f78SBastian Köcher 		.enable_reg = 0x0c08,
1587*aec89f78SBastian Köcher 		.enable_mask = BIT(0),
1588*aec89f78SBastian Köcher 		.hw.init = &(struct clk_init_data)
1589*aec89f78SBastian Köcher 		{
1590*aec89f78SBastian Köcher 			.name = "gcc_blsp2_qup6_i2c_apps_clk",
1591*aec89f78SBastian Köcher 			.parent_names = (const char *[]) {
1592*aec89f78SBastian Köcher 				"blsp2_qup6_i2c_apps_clk_src",
1593*aec89f78SBastian Köcher 			},
1594*aec89f78SBastian Köcher 			.num_parents = 1,
1595*aec89f78SBastian Köcher 			.flags = CLK_SET_RATE_PARENT,
1596*aec89f78SBastian Köcher 			.ops = &clk_branch2_ops,
1597*aec89f78SBastian Köcher 		},
1598*aec89f78SBastian Köcher 	},
1599*aec89f78SBastian Köcher };
1600*aec89f78SBastian Köcher 
1601*aec89f78SBastian Köcher static struct clk_branch gcc_blsp2_qup6_spi_apps_clk = {
1602*aec89f78SBastian Köcher 	.halt_reg = 0x0c04,
1603*aec89f78SBastian Köcher 	.clkr = {
1604*aec89f78SBastian Köcher 		.enable_reg = 0x0c04,
1605*aec89f78SBastian Köcher 		.enable_mask = BIT(0),
1606*aec89f78SBastian Köcher 		.hw.init = &(struct clk_init_data)
1607*aec89f78SBastian Köcher 		{
1608*aec89f78SBastian Köcher 			.name = "gcc_blsp2_qup6_spi_apps_clk",
1609*aec89f78SBastian Köcher 			.parent_names = (const char *[]) {
1610*aec89f78SBastian Köcher 				"blsp2_qup6_spi_apps_clk_src",
1611*aec89f78SBastian Köcher 			},
1612*aec89f78SBastian Köcher 			.num_parents = 1,
1613*aec89f78SBastian Köcher 			.flags = CLK_SET_RATE_PARENT,
1614*aec89f78SBastian Köcher 			.ops = &clk_branch2_ops,
1615*aec89f78SBastian Köcher 		},
1616*aec89f78SBastian Köcher 	},
1617*aec89f78SBastian Köcher };
1618*aec89f78SBastian Köcher 
1619*aec89f78SBastian Köcher static struct clk_branch gcc_blsp2_uart1_apps_clk = {
1620*aec89f78SBastian Köcher 	.halt_reg = 0x09c4,
1621*aec89f78SBastian Köcher 	.clkr = {
1622*aec89f78SBastian Köcher 		.enable_reg = 0x09c4,
1623*aec89f78SBastian Köcher 		.enable_mask = BIT(0),
1624*aec89f78SBastian Köcher 		.hw.init = &(struct clk_init_data)
1625*aec89f78SBastian Köcher 		{
1626*aec89f78SBastian Köcher 			.name = "gcc_blsp2_uart1_apps_clk",
1627*aec89f78SBastian Köcher 			.parent_names = (const char *[]) {
1628*aec89f78SBastian Köcher 				"blsp2_uart1_apps_clk_src",
1629*aec89f78SBastian Köcher 			},
1630*aec89f78SBastian Köcher 			.num_parents = 1,
1631*aec89f78SBastian Köcher 			.flags = CLK_SET_RATE_PARENT,
1632*aec89f78SBastian Köcher 			.ops = &clk_branch2_ops,
1633*aec89f78SBastian Köcher 		},
1634*aec89f78SBastian Köcher 	},
1635*aec89f78SBastian Köcher };
1636*aec89f78SBastian Köcher 
1637*aec89f78SBastian Köcher static struct clk_branch gcc_blsp2_uart2_apps_clk = {
1638*aec89f78SBastian Köcher 	.halt_reg = 0x0a44,
1639*aec89f78SBastian Köcher 	.clkr = {
1640*aec89f78SBastian Köcher 		.enable_reg = 0x0a44,
1641*aec89f78SBastian Köcher 		.enable_mask = BIT(0),
1642*aec89f78SBastian Köcher 		.hw.init = &(struct clk_init_data)
1643*aec89f78SBastian Köcher 		{
1644*aec89f78SBastian Köcher 			.name = "gcc_blsp2_uart2_apps_clk",
1645*aec89f78SBastian Köcher 			.parent_names = (const char *[]) {
1646*aec89f78SBastian Köcher 				"blsp2_uart2_apps_clk_src",
1647*aec89f78SBastian Köcher 			},
1648*aec89f78SBastian Köcher 			.num_parents = 1,
1649*aec89f78SBastian Köcher 			.flags = CLK_SET_RATE_PARENT,
1650*aec89f78SBastian Köcher 			.ops = &clk_branch2_ops,
1651*aec89f78SBastian Köcher 		},
1652*aec89f78SBastian Köcher 	},
1653*aec89f78SBastian Köcher };
1654*aec89f78SBastian Köcher 
1655*aec89f78SBastian Köcher static struct clk_branch gcc_blsp2_uart3_apps_clk = {
1656*aec89f78SBastian Köcher 	.halt_reg = 0x0ac4,
1657*aec89f78SBastian Köcher 	.clkr = {
1658*aec89f78SBastian Köcher 		.enable_reg = 0x0ac4,
1659*aec89f78SBastian Köcher 		.enable_mask = BIT(0),
1660*aec89f78SBastian Köcher 		.hw.init = &(struct clk_init_data)
1661*aec89f78SBastian Köcher 		{
1662*aec89f78SBastian Köcher 			.name = "gcc_blsp2_uart3_apps_clk",
1663*aec89f78SBastian Köcher 			.parent_names = (const char *[]) {
1664*aec89f78SBastian Köcher 				"blsp2_uart3_apps_clk_src",
1665*aec89f78SBastian Köcher 			},
1666*aec89f78SBastian Köcher 			.num_parents = 1,
1667*aec89f78SBastian Köcher 			.flags = CLK_SET_RATE_PARENT,
1668*aec89f78SBastian Köcher 			.ops = &clk_branch2_ops,
1669*aec89f78SBastian Köcher 		},
1670*aec89f78SBastian Köcher 	},
1671*aec89f78SBastian Köcher };
1672*aec89f78SBastian Köcher 
1673*aec89f78SBastian Köcher static struct clk_branch gcc_blsp2_uart4_apps_clk = {
1674*aec89f78SBastian Köcher 	.halt_reg = 0x0b44,
1675*aec89f78SBastian Köcher 	.clkr = {
1676*aec89f78SBastian Köcher 		.enable_reg = 0x0b44,
1677*aec89f78SBastian Köcher 		.enable_mask = BIT(0),
1678*aec89f78SBastian Köcher 		.hw.init = &(struct clk_init_data)
1679*aec89f78SBastian Köcher 		{
1680*aec89f78SBastian Köcher 			.name = "gcc_blsp2_uart4_apps_clk",
1681*aec89f78SBastian Köcher 			.parent_names = (const char *[]) {
1682*aec89f78SBastian Köcher 				"blsp2_uart4_apps_clk_src",
1683*aec89f78SBastian Köcher 			},
1684*aec89f78SBastian Köcher 			.num_parents = 1,
1685*aec89f78SBastian Köcher 			.flags = CLK_SET_RATE_PARENT,
1686*aec89f78SBastian Köcher 			.ops = &clk_branch2_ops,
1687*aec89f78SBastian Köcher 		},
1688*aec89f78SBastian Köcher 	},
1689*aec89f78SBastian Köcher };
1690*aec89f78SBastian Köcher 
1691*aec89f78SBastian Köcher static struct clk_branch gcc_blsp2_uart5_apps_clk = {
1692*aec89f78SBastian Köcher 	.halt_reg = 0x0bc4,
1693*aec89f78SBastian Köcher 	.clkr = {
1694*aec89f78SBastian Köcher 		.enable_reg = 0x0bc4,
1695*aec89f78SBastian Köcher 		.enable_mask = BIT(0),
1696*aec89f78SBastian Köcher 		.hw.init = &(struct clk_init_data)
1697*aec89f78SBastian Köcher 		{
1698*aec89f78SBastian Köcher 			.name = "gcc_blsp2_uart5_apps_clk",
1699*aec89f78SBastian Köcher 			.parent_names = (const char *[]) {
1700*aec89f78SBastian Köcher 				"blsp2_uart5_apps_clk_src",
1701*aec89f78SBastian Köcher 			},
1702*aec89f78SBastian Köcher 			.num_parents = 1,
1703*aec89f78SBastian Köcher 			.flags = CLK_SET_RATE_PARENT,
1704*aec89f78SBastian Köcher 			.ops = &clk_branch2_ops,
1705*aec89f78SBastian Köcher 		},
1706*aec89f78SBastian Köcher 	},
1707*aec89f78SBastian Köcher };
1708*aec89f78SBastian Köcher 
1709*aec89f78SBastian Köcher static struct clk_branch gcc_blsp2_uart6_apps_clk = {
1710*aec89f78SBastian Köcher 	.halt_reg = 0x0c44,
1711*aec89f78SBastian Köcher 	.clkr = {
1712*aec89f78SBastian Köcher 		.enable_reg = 0x0c44,
1713*aec89f78SBastian Köcher 		.enable_mask = BIT(0),
1714*aec89f78SBastian Köcher 		.hw.init = &(struct clk_init_data)
1715*aec89f78SBastian Köcher 		{
1716*aec89f78SBastian Köcher 			.name = "gcc_blsp2_uart6_apps_clk",
1717*aec89f78SBastian Köcher 			.parent_names = (const char *[]) {
1718*aec89f78SBastian Köcher 				"blsp2_uart6_apps_clk_src",
1719*aec89f78SBastian Köcher 			},
1720*aec89f78SBastian Köcher 			.num_parents = 1,
1721*aec89f78SBastian Köcher 			.flags = CLK_SET_RATE_PARENT,
1722*aec89f78SBastian Köcher 			.ops = &clk_branch2_ops,
1723*aec89f78SBastian Köcher 		},
1724*aec89f78SBastian Köcher 	},
1725*aec89f78SBastian Köcher };
1726*aec89f78SBastian Köcher 
1727*aec89f78SBastian Köcher static struct clk_branch gcc_gp1_clk = {
1728*aec89f78SBastian Köcher 	.halt_reg = 0x1900,
1729*aec89f78SBastian Köcher 	.clkr = {
1730*aec89f78SBastian Köcher 		.enable_reg = 0x1900,
1731*aec89f78SBastian Köcher 		.enable_mask = BIT(0),
1732*aec89f78SBastian Köcher 		.hw.init = &(struct clk_init_data)
1733*aec89f78SBastian Köcher 		{
1734*aec89f78SBastian Köcher 			.name = "gcc_gp1_clk",
1735*aec89f78SBastian Köcher 			.parent_names = (const char *[]) {
1736*aec89f78SBastian Köcher 				"gp1_clk_src",
1737*aec89f78SBastian Köcher 			},
1738*aec89f78SBastian Köcher 			.num_parents = 1,
1739*aec89f78SBastian Köcher 			.flags = CLK_SET_RATE_PARENT,
1740*aec89f78SBastian Köcher 			.ops = &clk_branch2_ops,
1741*aec89f78SBastian Köcher 		},
1742*aec89f78SBastian Köcher 	},
1743*aec89f78SBastian Köcher };
1744*aec89f78SBastian Köcher 
1745*aec89f78SBastian Köcher static struct clk_branch gcc_gp2_clk = {
1746*aec89f78SBastian Köcher 	.halt_reg = 0x1940,
1747*aec89f78SBastian Köcher 	.clkr = {
1748*aec89f78SBastian Köcher 		.enable_reg = 0x1940,
1749*aec89f78SBastian Köcher 		.enable_mask = BIT(0),
1750*aec89f78SBastian Köcher 		.hw.init = &(struct clk_init_data)
1751*aec89f78SBastian Köcher 		{
1752*aec89f78SBastian Köcher 			.name = "gcc_gp2_clk",
1753*aec89f78SBastian Köcher 			.parent_names = (const char *[]) {
1754*aec89f78SBastian Köcher 				"gp2_clk_src",
1755*aec89f78SBastian Köcher 			},
1756*aec89f78SBastian Köcher 			.num_parents = 1,
1757*aec89f78SBastian Köcher 			.flags = CLK_SET_RATE_PARENT,
1758*aec89f78SBastian Köcher 			.ops = &clk_branch2_ops,
1759*aec89f78SBastian Köcher 		},
1760*aec89f78SBastian Köcher 	},
1761*aec89f78SBastian Köcher };
1762*aec89f78SBastian Köcher 
1763*aec89f78SBastian Köcher static struct clk_branch gcc_gp3_clk = {
1764*aec89f78SBastian Köcher 	.halt_reg = 0x1980,
1765*aec89f78SBastian Köcher 	.clkr = {
1766*aec89f78SBastian Köcher 		.enable_reg = 0x1980,
1767*aec89f78SBastian Köcher 		.enable_mask = BIT(0),
1768*aec89f78SBastian Köcher 		.hw.init = &(struct clk_init_data)
1769*aec89f78SBastian Köcher 		{
1770*aec89f78SBastian Köcher 			.name = "gcc_gp3_clk",
1771*aec89f78SBastian Köcher 			.parent_names = (const char *[]) {
1772*aec89f78SBastian Köcher 				"gp3_clk_src",
1773*aec89f78SBastian Köcher 			},
1774*aec89f78SBastian Köcher 			.num_parents = 1,
1775*aec89f78SBastian Köcher 			.flags = CLK_SET_RATE_PARENT,
1776*aec89f78SBastian Köcher 			.ops = &clk_branch2_ops,
1777*aec89f78SBastian Köcher 		},
1778*aec89f78SBastian Köcher 	},
1779*aec89f78SBastian Köcher };
1780*aec89f78SBastian Köcher 
1781*aec89f78SBastian Köcher static struct clk_branch gcc_pcie_0_aux_clk = {
1782*aec89f78SBastian Köcher 	.halt_reg = 0x1ad4,
1783*aec89f78SBastian Köcher 	.clkr = {
1784*aec89f78SBastian Köcher 		.enable_reg = 0x1ad4,
1785*aec89f78SBastian Köcher 		.enable_mask = BIT(0),
1786*aec89f78SBastian Köcher 		.hw.init = &(struct clk_init_data)
1787*aec89f78SBastian Köcher 		{
1788*aec89f78SBastian Köcher 			.name = "gcc_pcie_0_aux_clk",
1789*aec89f78SBastian Köcher 			.parent_names = (const char *[]) {
1790*aec89f78SBastian Köcher 				"pcie_0_aux_clk_src",
1791*aec89f78SBastian Köcher 			},
1792*aec89f78SBastian Köcher 			.num_parents = 1,
1793*aec89f78SBastian Köcher 			.flags = CLK_SET_RATE_PARENT,
1794*aec89f78SBastian Köcher 			.ops = &clk_branch2_ops,
1795*aec89f78SBastian Köcher 		},
1796*aec89f78SBastian Köcher 	},
1797*aec89f78SBastian Köcher };
1798*aec89f78SBastian Köcher 
1799*aec89f78SBastian Köcher static struct clk_branch gcc_pcie_0_pipe_clk = {
1800*aec89f78SBastian Köcher 	.halt_reg = 0x1ad8,
1801*aec89f78SBastian Köcher 	.halt_check = BRANCH_HALT_DELAY,
1802*aec89f78SBastian Köcher 	.clkr = {
1803*aec89f78SBastian Köcher 		.enable_reg = 0x1ad8,
1804*aec89f78SBastian Köcher 		.enable_mask = BIT(0),
1805*aec89f78SBastian Köcher 		.hw.init = &(struct clk_init_data)
1806*aec89f78SBastian Köcher 		{
1807*aec89f78SBastian Köcher 			.name = "gcc_pcie_0_pipe_clk",
1808*aec89f78SBastian Köcher 			.parent_names = (const char *[]) {
1809*aec89f78SBastian Köcher 				"pcie_0_pipe_clk_src",
1810*aec89f78SBastian Köcher 			},
1811*aec89f78SBastian Köcher 			.num_parents = 1,
1812*aec89f78SBastian Köcher 			.flags = CLK_SET_RATE_PARENT,
1813*aec89f78SBastian Köcher 			.ops = &clk_branch2_ops,
1814*aec89f78SBastian Köcher 		},
1815*aec89f78SBastian Köcher 	},
1816*aec89f78SBastian Köcher };
1817*aec89f78SBastian Köcher 
1818*aec89f78SBastian Köcher static struct clk_branch gcc_pcie_1_aux_clk = {
1819*aec89f78SBastian Köcher 	.halt_reg = 0x1b54,
1820*aec89f78SBastian Köcher 	.clkr = {
1821*aec89f78SBastian Köcher 		.enable_reg = 0x1b54,
1822*aec89f78SBastian Köcher 		.enable_mask = BIT(0),
1823*aec89f78SBastian Köcher 		.hw.init = &(struct clk_init_data)
1824*aec89f78SBastian Köcher 		{
1825*aec89f78SBastian Köcher 			.name = "gcc_pcie_1_aux_clk",
1826*aec89f78SBastian Köcher 			.parent_names = (const char *[]) {
1827*aec89f78SBastian Köcher 				"pcie_1_aux_clk_src",
1828*aec89f78SBastian Köcher 			},
1829*aec89f78SBastian Köcher 			.num_parents = 1,
1830*aec89f78SBastian Köcher 			.flags = CLK_SET_RATE_PARENT,
1831*aec89f78SBastian Köcher 			.ops = &clk_branch2_ops,
1832*aec89f78SBastian Köcher 		},
1833*aec89f78SBastian Köcher 	},
1834*aec89f78SBastian Köcher };
1835*aec89f78SBastian Köcher 
1836*aec89f78SBastian Köcher static struct clk_branch gcc_pcie_1_pipe_clk = {
1837*aec89f78SBastian Köcher 	.halt_reg = 0x1b58,
1838*aec89f78SBastian Köcher 	.halt_check = BRANCH_HALT_DELAY,
1839*aec89f78SBastian Köcher 	.clkr = {
1840*aec89f78SBastian Köcher 		.enable_reg = 0x1b58,
1841*aec89f78SBastian Köcher 		.enable_mask = BIT(0),
1842*aec89f78SBastian Köcher 		.hw.init = &(struct clk_init_data)
1843*aec89f78SBastian Köcher 		{
1844*aec89f78SBastian Köcher 			.name = "gcc_pcie_1_pipe_clk",
1845*aec89f78SBastian Köcher 			.parent_names = (const char *[]) {
1846*aec89f78SBastian Köcher 				"pcie_1_pipe_clk_src",
1847*aec89f78SBastian Köcher 			},
1848*aec89f78SBastian Köcher 			.num_parents = 1,
1849*aec89f78SBastian Köcher 			.flags = CLK_SET_RATE_PARENT,
1850*aec89f78SBastian Köcher 			.ops = &clk_branch2_ops,
1851*aec89f78SBastian Köcher 		},
1852*aec89f78SBastian Köcher 	},
1853*aec89f78SBastian Köcher };
1854*aec89f78SBastian Köcher 
1855*aec89f78SBastian Köcher static struct clk_branch gcc_pdm2_clk = {
1856*aec89f78SBastian Köcher 	.halt_reg = 0x0ccc,
1857*aec89f78SBastian Köcher 	.clkr = {
1858*aec89f78SBastian Köcher 		.enable_reg = 0x0ccc,
1859*aec89f78SBastian Köcher 		.enable_mask = BIT(0),
1860*aec89f78SBastian Köcher 		.hw.init = &(struct clk_init_data)
1861*aec89f78SBastian Köcher 		{
1862*aec89f78SBastian Köcher 			.name = "gcc_pdm2_clk",
1863*aec89f78SBastian Köcher 			.parent_names = (const char *[]) {
1864*aec89f78SBastian Köcher 				"pdm2_clk_src",
1865*aec89f78SBastian Köcher 			},
1866*aec89f78SBastian Köcher 			.num_parents = 1,
1867*aec89f78SBastian Köcher 			.flags = CLK_SET_RATE_PARENT,
1868*aec89f78SBastian Köcher 			.ops = &clk_branch2_ops,
1869*aec89f78SBastian Köcher 		},
1870*aec89f78SBastian Köcher 	},
1871*aec89f78SBastian Köcher };
1872*aec89f78SBastian Köcher 
1873*aec89f78SBastian Köcher static struct clk_branch gcc_sdcc1_apps_clk = {
1874*aec89f78SBastian Köcher 	.halt_reg = 0x04c4,
1875*aec89f78SBastian Köcher 	.clkr = {
1876*aec89f78SBastian Köcher 		.enable_reg = 0x04c4,
1877*aec89f78SBastian Köcher 		.enable_mask = BIT(0),
1878*aec89f78SBastian Köcher 		.hw.init = &(struct clk_init_data)
1879*aec89f78SBastian Köcher 		{
1880*aec89f78SBastian Köcher 			.name = "gcc_sdcc1_apps_clk",
1881*aec89f78SBastian Köcher 			.parent_names = (const char *[]) {
1882*aec89f78SBastian Köcher 				"sdcc1_apps_clk_src",
1883*aec89f78SBastian Köcher 			},
1884*aec89f78SBastian Köcher 			.num_parents = 1,
1885*aec89f78SBastian Köcher 			.flags = CLK_SET_RATE_PARENT,
1886*aec89f78SBastian Köcher 			.ops = &clk_branch2_ops,
1887*aec89f78SBastian Köcher 		},
1888*aec89f78SBastian Köcher 	},
1889*aec89f78SBastian Köcher };
1890*aec89f78SBastian Köcher 
1891*aec89f78SBastian Köcher static struct clk_branch gcc_sdcc2_apps_clk = {
1892*aec89f78SBastian Köcher 	.halt_reg = 0x0504,
1893*aec89f78SBastian Köcher 	.clkr = {
1894*aec89f78SBastian Köcher 		.enable_reg = 0x0504,
1895*aec89f78SBastian Köcher 		.enable_mask = BIT(0),
1896*aec89f78SBastian Köcher 		.hw.init = &(struct clk_init_data)
1897*aec89f78SBastian Köcher 		{
1898*aec89f78SBastian Köcher 			.name = "gcc_sdcc2_apps_clk",
1899*aec89f78SBastian Köcher 			.parent_names = (const char *[]) {
1900*aec89f78SBastian Köcher 				"sdcc2_apps_clk_src",
1901*aec89f78SBastian Köcher 			},
1902*aec89f78SBastian Köcher 			.num_parents = 1,
1903*aec89f78SBastian Köcher 			.flags = CLK_SET_RATE_PARENT,
1904*aec89f78SBastian Köcher 			.ops = &clk_branch2_ops,
1905*aec89f78SBastian Köcher 		},
1906*aec89f78SBastian Köcher 	},
1907*aec89f78SBastian Köcher };
1908*aec89f78SBastian Köcher 
1909*aec89f78SBastian Köcher static struct clk_branch gcc_sdcc3_apps_clk = {
1910*aec89f78SBastian Köcher 	.halt_reg = 0x0544,
1911*aec89f78SBastian Köcher 	.clkr = {
1912*aec89f78SBastian Köcher 		.enable_reg = 0x0544,
1913*aec89f78SBastian Köcher 		.enable_mask = BIT(0),
1914*aec89f78SBastian Köcher 		.hw.init = &(struct clk_init_data)
1915*aec89f78SBastian Köcher 		{
1916*aec89f78SBastian Köcher 			.name = "gcc_sdcc3_apps_clk",
1917*aec89f78SBastian Köcher 			.parent_names = (const char *[]) {
1918*aec89f78SBastian Köcher 				"sdcc3_apps_clk_src",
1919*aec89f78SBastian Köcher 			},
1920*aec89f78SBastian Köcher 			.num_parents = 1,
1921*aec89f78SBastian Köcher 			.flags = CLK_SET_RATE_PARENT,
1922*aec89f78SBastian Köcher 			.ops = &clk_branch2_ops,
1923*aec89f78SBastian Köcher 		},
1924*aec89f78SBastian Köcher 	},
1925*aec89f78SBastian Köcher };
1926*aec89f78SBastian Köcher 
1927*aec89f78SBastian Köcher static struct clk_branch gcc_sdcc4_apps_clk = {
1928*aec89f78SBastian Köcher 	.halt_reg = 0x0584,
1929*aec89f78SBastian Köcher 	.clkr = {
1930*aec89f78SBastian Köcher 		.enable_reg = 0x0584,
1931*aec89f78SBastian Köcher 		.enable_mask = BIT(0),
1932*aec89f78SBastian Köcher 		.hw.init = &(struct clk_init_data)
1933*aec89f78SBastian Köcher 		{
1934*aec89f78SBastian Köcher 			.name = "gcc_sdcc4_apps_clk",
1935*aec89f78SBastian Köcher 			.parent_names = (const char *[]) {
1936*aec89f78SBastian Köcher 				"sdcc4_apps_clk_src",
1937*aec89f78SBastian Köcher 			},
1938*aec89f78SBastian Köcher 			.num_parents = 1,
1939*aec89f78SBastian Köcher 			.flags = CLK_SET_RATE_PARENT,
1940*aec89f78SBastian Köcher 			.ops = &clk_branch2_ops,
1941*aec89f78SBastian Köcher 		},
1942*aec89f78SBastian Köcher 	},
1943*aec89f78SBastian Köcher };
1944*aec89f78SBastian Köcher 
1945*aec89f78SBastian Köcher static struct clk_branch gcc_sys_noc_ufs_axi_clk = {
1946*aec89f78SBastian Köcher 	.halt_reg = 0x1d7c,
1947*aec89f78SBastian Köcher 	.clkr = {
1948*aec89f78SBastian Köcher 		.enable_reg = 0x1d7c,
1949*aec89f78SBastian Köcher 		.enable_mask = BIT(0),
1950*aec89f78SBastian Köcher 		.hw.init = &(struct clk_init_data)
1951*aec89f78SBastian Köcher 		{
1952*aec89f78SBastian Köcher 			.name = "gcc_sys_noc_ufs_axi_clk",
1953*aec89f78SBastian Köcher 			.parent_names = (const char *[]) {
1954*aec89f78SBastian Köcher 				"ufs_axi_clk_src",
1955*aec89f78SBastian Köcher 			},
1956*aec89f78SBastian Köcher 			.num_parents = 1,
1957*aec89f78SBastian Köcher 			.flags = CLK_SET_RATE_PARENT,
1958*aec89f78SBastian Köcher 			.ops = &clk_branch2_ops,
1959*aec89f78SBastian Köcher 		},
1960*aec89f78SBastian Köcher 	},
1961*aec89f78SBastian Köcher };
1962*aec89f78SBastian Köcher 
1963*aec89f78SBastian Köcher static struct clk_branch gcc_sys_noc_usb3_axi_clk = {
1964*aec89f78SBastian Köcher 	.halt_reg = 0x03fc,
1965*aec89f78SBastian Köcher 	.clkr = {
1966*aec89f78SBastian Köcher 		.enable_reg = 0x03fc,
1967*aec89f78SBastian Köcher 		.enable_mask = BIT(0),
1968*aec89f78SBastian Köcher 		.hw.init = &(struct clk_init_data)
1969*aec89f78SBastian Köcher 		{
1970*aec89f78SBastian Köcher 			.name = "gcc_sys_noc_usb3_axi_clk",
1971*aec89f78SBastian Köcher 			.parent_names = (const char *[]) {
1972*aec89f78SBastian Köcher 				"usb30_master_clk_src",
1973*aec89f78SBastian Köcher 			},
1974*aec89f78SBastian Köcher 			.num_parents = 1,
1975*aec89f78SBastian Köcher 			.flags = CLK_SET_RATE_PARENT,
1976*aec89f78SBastian Köcher 			.ops = &clk_branch2_ops,
1977*aec89f78SBastian Köcher 		},
1978*aec89f78SBastian Köcher 	},
1979*aec89f78SBastian Köcher };
1980*aec89f78SBastian Köcher 
1981*aec89f78SBastian Köcher static struct clk_branch gcc_tsif_ref_clk = {
1982*aec89f78SBastian Köcher 	.halt_reg = 0x0d88,
1983*aec89f78SBastian Köcher 	.clkr = {
1984*aec89f78SBastian Köcher 		.enable_reg = 0x0d88,
1985*aec89f78SBastian Köcher 		.enable_mask = BIT(0),
1986*aec89f78SBastian Köcher 		.hw.init = &(struct clk_init_data)
1987*aec89f78SBastian Köcher 		{
1988*aec89f78SBastian Köcher 			.name = "gcc_tsif_ref_clk",
1989*aec89f78SBastian Köcher 			.parent_names = (const char *[]) {
1990*aec89f78SBastian Köcher 				"tsif_ref_clk_src",
1991*aec89f78SBastian Köcher 			},
1992*aec89f78SBastian Köcher 			.num_parents = 1,
1993*aec89f78SBastian Köcher 			.flags = CLK_SET_RATE_PARENT,
1994*aec89f78SBastian Köcher 			.ops = &clk_branch2_ops,
1995*aec89f78SBastian Köcher 		},
1996*aec89f78SBastian Köcher 	},
1997*aec89f78SBastian Köcher };
1998*aec89f78SBastian Köcher 
1999*aec89f78SBastian Köcher static struct clk_branch gcc_ufs_axi_clk = {
2000*aec89f78SBastian Köcher 	.halt_reg = 0x1d48,
2001*aec89f78SBastian Köcher 	.clkr = {
2002*aec89f78SBastian Köcher 		.enable_reg = 0x1d48,
2003*aec89f78SBastian Köcher 		.enable_mask = BIT(0),
2004*aec89f78SBastian Köcher 		.hw.init = &(struct clk_init_data)
2005*aec89f78SBastian Köcher 		{
2006*aec89f78SBastian Köcher 			.name = "gcc_ufs_axi_clk",
2007*aec89f78SBastian Köcher 			.parent_names = (const char *[]) {
2008*aec89f78SBastian Köcher 				"ufs_axi_clk_src",
2009*aec89f78SBastian Köcher 			},
2010*aec89f78SBastian Köcher 			.num_parents = 1,
2011*aec89f78SBastian Köcher 			.flags = CLK_SET_RATE_PARENT,
2012*aec89f78SBastian Köcher 			.ops = &clk_branch2_ops,
2013*aec89f78SBastian Köcher 		},
2014*aec89f78SBastian Köcher 	},
2015*aec89f78SBastian Köcher };
2016*aec89f78SBastian Köcher 
2017*aec89f78SBastian Köcher static struct clk_branch gcc_ufs_rx_cfg_clk = {
2018*aec89f78SBastian Köcher 	.halt_reg = 0x1d54,
2019*aec89f78SBastian Köcher 	.clkr = {
2020*aec89f78SBastian Köcher 		.enable_reg = 0x1d54,
2021*aec89f78SBastian Köcher 		.enable_mask = BIT(0),
2022*aec89f78SBastian Köcher 		.hw.init = &(struct clk_init_data)
2023*aec89f78SBastian Köcher 		{
2024*aec89f78SBastian Köcher 			.name = "gcc_ufs_rx_cfg_clk",
2025*aec89f78SBastian Köcher 			.parent_names = (const char *[]) {
2026*aec89f78SBastian Köcher 				"ufs_axi_clk_src",
2027*aec89f78SBastian Köcher 			},
2028*aec89f78SBastian Köcher 			.num_parents = 1,
2029*aec89f78SBastian Köcher 			.flags = CLK_SET_RATE_PARENT,
2030*aec89f78SBastian Köcher 			.ops = &clk_branch2_ops,
2031*aec89f78SBastian Köcher 		},
2032*aec89f78SBastian Köcher 	},
2033*aec89f78SBastian Köcher };
2034*aec89f78SBastian Köcher 
2035*aec89f78SBastian Köcher static struct clk_branch gcc_ufs_tx_cfg_clk = {
2036*aec89f78SBastian Köcher 	.halt_reg = 0x1d50,
2037*aec89f78SBastian Köcher 	.clkr = {
2038*aec89f78SBastian Köcher 		.enable_reg = 0x1d50,
2039*aec89f78SBastian Köcher 		.enable_mask = BIT(0),
2040*aec89f78SBastian Köcher 		.hw.init = &(struct clk_init_data)
2041*aec89f78SBastian Köcher 		{
2042*aec89f78SBastian Köcher 			.name = "gcc_ufs_tx_cfg_clk",
2043*aec89f78SBastian Köcher 			.parent_names = (const char *[]) {
2044*aec89f78SBastian Köcher 				"ufs_axi_clk_src",
2045*aec89f78SBastian Köcher 			},
2046*aec89f78SBastian Köcher 			.num_parents = 1,
2047*aec89f78SBastian Köcher 			.flags = CLK_SET_RATE_PARENT,
2048*aec89f78SBastian Köcher 			.ops = &clk_branch2_ops,
2049*aec89f78SBastian Köcher 		},
2050*aec89f78SBastian Köcher 	},
2051*aec89f78SBastian Köcher };
2052*aec89f78SBastian Köcher 
2053*aec89f78SBastian Köcher static struct clk_branch gcc_usb30_master_clk = {
2054*aec89f78SBastian Köcher 	.halt_reg = 0x03c8,
2055*aec89f78SBastian Köcher 	.clkr = {
2056*aec89f78SBastian Köcher 		.enable_reg = 0x03c8,
2057*aec89f78SBastian Köcher 		.enable_mask = BIT(0),
2058*aec89f78SBastian Köcher 		.hw.init = &(struct clk_init_data)
2059*aec89f78SBastian Köcher 		{
2060*aec89f78SBastian Köcher 			.name = "gcc_usb30_master_clk",
2061*aec89f78SBastian Köcher 			.parent_names = (const char *[]) {
2062*aec89f78SBastian Köcher 				"usb30_master_clk_src",
2063*aec89f78SBastian Köcher 			},
2064*aec89f78SBastian Köcher 			.num_parents = 1,
2065*aec89f78SBastian Köcher 			.flags = CLK_SET_RATE_PARENT,
2066*aec89f78SBastian Köcher 			.ops = &clk_branch2_ops,
2067*aec89f78SBastian Köcher 		},
2068*aec89f78SBastian Köcher 	},
2069*aec89f78SBastian Köcher };
2070*aec89f78SBastian Köcher 
2071*aec89f78SBastian Köcher static struct clk_branch gcc_usb30_mock_utmi_clk = {
2072*aec89f78SBastian Köcher 	.halt_reg = 0x03d0,
2073*aec89f78SBastian Köcher 	.clkr = {
2074*aec89f78SBastian Köcher 		.enable_reg = 0x03d0,
2075*aec89f78SBastian Köcher 		.enable_mask = BIT(0),
2076*aec89f78SBastian Köcher 		.hw.init = &(struct clk_init_data)
2077*aec89f78SBastian Köcher 		{
2078*aec89f78SBastian Köcher 			.name = "gcc_usb30_mock_utmi_clk",
2079*aec89f78SBastian Köcher 			.parent_names = (const char *[]) {
2080*aec89f78SBastian Köcher 				"usb30_mock_utmi_clk_src",
2081*aec89f78SBastian Köcher 			},
2082*aec89f78SBastian Köcher 			.num_parents = 1,
2083*aec89f78SBastian Köcher 			.flags = CLK_SET_RATE_PARENT,
2084*aec89f78SBastian Köcher 			.ops = &clk_branch2_ops,
2085*aec89f78SBastian Köcher 		},
2086*aec89f78SBastian Köcher 	},
2087*aec89f78SBastian Köcher };
2088*aec89f78SBastian Köcher 
2089*aec89f78SBastian Köcher static struct clk_branch gcc_usb3_phy_aux_clk = {
2090*aec89f78SBastian Köcher 	.halt_reg = 0x1408,
2091*aec89f78SBastian Köcher 	.clkr = {
2092*aec89f78SBastian Köcher 		.enable_reg = 0x1408,
2093*aec89f78SBastian Köcher 		.enable_mask = BIT(0),
2094*aec89f78SBastian Köcher 		.hw.init = &(struct clk_init_data)
2095*aec89f78SBastian Köcher 		{
2096*aec89f78SBastian Köcher 			.name = "gcc_usb3_phy_aux_clk",
2097*aec89f78SBastian Köcher 			.parent_names = (const char *[]) {
2098*aec89f78SBastian Köcher 				"usb3_phy_aux_clk_src",
2099*aec89f78SBastian Köcher 			},
2100*aec89f78SBastian Köcher 			.num_parents = 1,
2101*aec89f78SBastian Köcher 			.flags = CLK_SET_RATE_PARENT,
2102*aec89f78SBastian Köcher 			.ops = &clk_branch2_ops,
2103*aec89f78SBastian Köcher 		},
2104*aec89f78SBastian Köcher 	},
2105*aec89f78SBastian Köcher };
2106*aec89f78SBastian Köcher 
2107*aec89f78SBastian Köcher static struct clk_branch gcc_usb_hs_system_clk = {
2108*aec89f78SBastian Köcher 	.halt_reg = 0x0484,
2109*aec89f78SBastian Köcher 	.clkr = {
2110*aec89f78SBastian Köcher 		.enable_reg = 0x0484,
2111*aec89f78SBastian Köcher 		.enable_mask = BIT(0),
2112*aec89f78SBastian Köcher 		.hw.init = &(struct clk_init_data)
2113*aec89f78SBastian Köcher 		{
2114*aec89f78SBastian Köcher 			.name = "gcc_usb_hs_system_clk",
2115*aec89f78SBastian Köcher 			.parent_names = (const char *[]) {
2116*aec89f78SBastian Köcher 				"usb_hs_system_clk_src",
2117*aec89f78SBastian Köcher 			},
2118*aec89f78SBastian Köcher 			.num_parents = 1,
2119*aec89f78SBastian Köcher 			.flags = CLK_SET_RATE_PARENT,
2120*aec89f78SBastian Köcher 			.ops = &clk_branch2_ops,
2121*aec89f78SBastian Köcher 		},
2122*aec89f78SBastian Köcher 	},
2123*aec89f78SBastian Köcher };
2124*aec89f78SBastian Köcher 
2125*aec89f78SBastian Köcher static struct clk_regmap *gcc_msm8994_clocks[] = {
2126*aec89f78SBastian Köcher 	[GPLL0_EARLY] = &gpll0_early.clkr,
2127*aec89f78SBastian Köcher 	[GPLL0] = &gpll0.clkr,
2128*aec89f78SBastian Köcher 	[GPLL4_EARLY] = &gpll4_early.clkr,
2129*aec89f78SBastian Köcher 	[GPLL4] = &gpll4.clkr,
2130*aec89f78SBastian Köcher 	[UFS_AXI_CLK_SRC] = &ufs_axi_clk_src.clkr,
2131*aec89f78SBastian Köcher 	[USB30_MASTER_CLK_SRC] = &usb30_master_clk_src.clkr,
2132*aec89f78SBastian Köcher 	[BLSP1_QUP1_I2C_APPS_CLK_SRC] = &blsp1_qup1_i2c_apps_clk_src.clkr,
2133*aec89f78SBastian Köcher 	[BLSP1_QUP1_SPI_APPS_CLK_SRC] = &blsp1_qup1_spi_apps_clk_src.clkr,
2134*aec89f78SBastian Köcher 	[BLSP1_QUP2_I2C_APPS_CLK_SRC] = &blsp1_qup2_i2c_apps_clk_src.clkr,
2135*aec89f78SBastian Köcher 	[BLSP1_QUP2_SPI_APPS_CLK_SRC] = &blsp1_qup2_spi_apps_clk_src.clkr,
2136*aec89f78SBastian Köcher 	[BLSP1_QUP3_I2C_APPS_CLK_SRC] = &blsp1_qup3_i2c_apps_clk_src.clkr,
2137*aec89f78SBastian Köcher 	[BLSP1_QUP3_SPI_APPS_CLK_SRC] = &blsp1_qup3_spi_apps_clk_src.clkr,
2138*aec89f78SBastian Köcher 	[BLSP1_QUP4_I2C_APPS_CLK_SRC] = &blsp1_qup4_i2c_apps_clk_src.clkr,
2139*aec89f78SBastian Köcher 	[BLSP1_QUP4_SPI_APPS_CLK_SRC] = &blsp1_qup4_spi_apps_clk_src.clkr,
2140*aec89f78SBastian Köcher 	[BLSP1_QUP5_I2C_APPS_CLK_SRC] = &blsp1_qup5_i2c_apps_clk_src.clkr,
2141*aec89f78SBastian Köcher 	[BLSP1_QUP5_SPI_APPS_CLK_SRC] = &blsp1_qup5_spi_apps_clk_src.clkr,
2142*aec89f78SBastian Köcher 	[BLSP1_QUP6_I2C_APPS_CLK_SRC] = &blsp1_qup6_i2c_apps_clk_src.clkr,
2143*aec89f78SBastian Köcher 	[BLSP1_QUP6_SPI_APPS_CLK_SRC] = &blsp1_qup6_spi_apps_clk_src.clkr,
2144*aec89f78SBastian Köcher 	[BLSP1_UART1_APPS_CLK_SRC] = &blsp1_uart1_apps_clk_src.clkr,
2145*aec89f78SBastian Köcher 	[BLSP1_UART2_APPS_CLK_SRC] = &blsp1_uart2_apps_clk_src.clkr,
2146*aec89f78SBastian Köcher 	[BLSP1_UART3_APPS_CLK_SRC] = &blsp1_uart3_apps_clk_src.clkr,
2147*aec89f78SBastian Köcher 	[BLSP1_UART4_APPS_CLK_SRC] = &blsp1_uart4_apps_clk_src.clkr,
2148*aec89f78SBastian Köcher 	[BLSP1_UART5_APPS_CLK_SRC] = &blsp1_uart5_apps_clk_src.clkr,
2149*aec89f78SBastian Köcher 	[BLSP1_UART6_APPS_CLK_SRC] = &blsp1_uart6_apps_clk_src.clkr,
2150*aec89f78SBastian Köcher 	[BLSP2_QUP1_I2C_APPS_CLK_SRC] = &blsp2_qup1_i2c_apps_clk_src.clkr,
2151*aec89f78SBastian Köcher 	[BLSP2_QUP1_SPI_APPS_CLK_SRC] = &blsp2_qup1_spi_apps_clk_src.clkr,
2152*aec89f78SBastian Köcher 	[BLSP2_QUP2_I2C_APPS_CLK_SRC] = &blsp2_qup2_i2c_apps_clk_src.clkr,
2153*aec89f78SBastian Köcher 	[BLSP2_QUP2_SPI_APPS_CLK_SRC] = &blsp2_qup2_spi_apps_clk_src.clkr,
2154*aec89f78SBastian Köcher 	[BLSP2_QUP3_I2C_APPS_CLK_SRC] = &blsp2_qup3_i2c_apps_clk_src.clkr,
2155*aec89f78SBastian Köcher 	[BLSP2_QUP3_SPI_APPS_CLK_SRC] = &blsp2_qup3_spi_apps_clk_src.clkr,
2156*aec89f78SBastian Köcher 	[BLSP2_QUP4_I2C_APPS_CLK_SRC] = &blsp2_qup4_i2c_apps_clk_src.clkr,
2157*aec89f78SBastian Köcher 	[BLSP2_QUP4_SPI_APPS_CLK_SRC] = &blsp2_qup4_spi_apps_clk_src.clkr,
2158*aec89f78SBastian Köcher 	[BLSP2_QUP5_I2C_APPS_CLK_SRC] = &blsp2_qup5_i2c_apps_clk_src.clkr,
2159*aec89f78SBastian Köcher 	[BLSP2_QUP5_SPI_APPS_CLK_SRC] = &blsp2_qup5_spi_apps_clk_src.clkr,
2160*aec89f78SBastian Köcher 	[BLSP2_QUP6_I2C_APPS_CLK_SRC] = &blsp2_qup6_i2c_apps_clk_src.clkr,
2161*aec89f78SBastian Köcher 	[BLSP2_QUP6_SPI_APPS_CLK_SRC] = &blsp2_qup6_spi_apps_clk_src.clkr,
2162*aec89f78SBastian Köcher 	[BLSP2_UART1_APPS_CLK_SRC] = &blsp2_uart1_apps_clk_src.clkr,
2163*aec89f78SBastian Köcher 	[BLSP2_UART2_APPS_CLK_SRC] = &blsp2_uart2_apps_clk_src.clkr,
2164*aec89f78SBastian Köcher 	[BLSP2_UART3_APPS_CLK_SRC] = &blsp2_uart3_apps_clk_src.clkr,
2165*aec89f78SBastian Köcher 	[BLSP2_UART4_APPS_CLK_SRC] = &blsp2_uart4_apps_clk_src.clkr,
2166*aec89f78SBastian Köcher 	[BLSP2_UART5_APPS_CLK_SRC] = &blsp2_uart5_apps_clk_src.clkr,
2167*aec89f78SBastian Köcher 	[BLSP2_UART6_APPS_CLK_SRC] = &blsp2_uart6_apps_clk_src.clkr,
2168*aec89f78SBastian Köcher 	[GP1_CLK_SRC] = &gp1_clk_src.clkr,
2169*aec89f78SBastian Köcher 	[GP2_CLK_SRC] = &gp2_clk_src.clkr,
2170*aec89f78SBastian Köcher 	[GP3_CLK_SRC] = &gp3_clk_src.clkr,
2171*aec89f78SBastian Köcher 	[PCIE_0_AUX_CLK_SRC] = &pcie_0_aux_clk_src.clkr,
2172*aec89f78SBastian Köcher 	[PCIE_0_PIPE_CLK_SRC] = &pcie_0_pipe_clk_src.clkr,
2173*aec89f78SBastian Köcher 	[PCIE_1_AUX_CLK_SRC] = &pcie_1_aux_clk_src.clkr,
2174*aec89f78SBastian Köcher 	[PCIE_1_PIPE_CLK_SRC] = &pcie_1_pipe_clk_src.clkr,
2175*aec89f78SBastian Köcher 	[PDM2_CLK_SRC] = &pdm2_clk_src.clkr,
2176*aec89f78SBastian Köcher 	[SDCC1_APPS_CLK_SRC] = &sdcc1_apps_clk_src.clkr,
2177*aec89f78SBastian Köcher 	[SDCC2_APPS_CLK_SRC] = &sdcc2_apps_clk_src.clkr,
2178*aec89f78SBastian Köcher 	[SDCC3_APPS_CLK_SRC] = &sdcc3_apps_clk_src.clkr,
2179*aec89f78SBastian Köcher 	[SDCC4_APPS_CLK_SRC] = &sdcc4_apps_clk_src.clkr,
2180*aec89f78SBastian Köcher 	[TSIF_REF_CLK_SRC] = &tsif_ref_clk_src.clkr,
2181*aec89f78SBastian Köcher 	[USB30_MOCK_UTMI_CLK_SRC] = &usb30_mock_utmi_clk_src.clkr,
2182*aec89f78SBastian Köcher 	[USB3_PHY_AUX_CLK_SRC] = &usb3_phy_aux_clk_src.clkr,
2183*aec89f78SBastian Köcher 	[USB_HS_SYSTEM_CLK_SRC] = &usb_hs_system_clk_src.clkr,
2184*aec89f78SBastian Köcher 	[GCC_BLSP1_AHB_CLK] = &gcc_blsp1_ahb_clk.clkr,
2185*aec89f78SBastian Köcher 	[GCC_BLSP1_QUP1_I2C_APPS_CLK] = &gcc_blsp1_qup1_i2c_apps_clk.clkr,
2186*aec89f78SBastian Köcher 	[GCC_BLSP1_QUP1_SPI_APPS_CLK] = &gcc_blsp1_qup1_spi_apps_clk.clkr,
2187*aec89f78SBastian Köcher 	[GCC_BLSP1_QUP2_I2C_APPS_CLK] = &gcc_blsp1_qup2_i2c_apps_clk.clkr,
2188*aec89f78SBastian Köcher 	[GCC_BLSP1_QUP2_SPI_APPS_CLK] = &gcc_blsp1_qup2_spi_apps_clk.clkr,
2189*aec89f78SBastian Köcher 	[GCC_BLSP1_QUP3_I2C_APPS_CLK] = &gcc_blsp1_qup3_i2c_apps_clk.clkr,
2190*aec89f78SBastian Köcher 	[GCC_BLSP1_QUP3_SPI_APPS_CLK] = &gcc_blsp1_qup3_spi_apps_clk.clkr,
2191*aec89f78SBastian Köcher 	[GCC_BLSP1_QUP4_I2C_APPS_CLK] = &gcc_blsp1_qup4_i2c_apps_clk.clkr,
2192*aec89f78SBastian Köcher 	[GCC_BLSP1_QUP4_SPI_APPS_CLK] = &gcc_blsp1_qup4_spi_apps_clk.clkr,
2193*aec89f78SBastian Köcher 	[GCC_BLSP1_QUP5_I2C_APPS_CLK] = &gcc_blsp1_qup5_i2c_apps_clk.clkr,
2194*aec89f78SBastian Köcher 	[GCC_BLSP1_QUP5_SPI_APPS_CLK] = &gcc_blsp1_qup5_spi_apps_clk.clkr,
2195*aec89f78SBastian Köcher 	[GCC_BLSP1_QUP6_I2C_APPS_CLK] = &gcc_blsp1_qup6_i2c_apps_clk.clkr,
2196*aec89f78SBastian Köcher 	[GCC_BLSP1_QUP6_SPI_APPS_CLK] = &gcc_blsp1_qup6_spi_apps_clk.clkr,
2197*aec89f78SBastian Köcher 	[GCC_BLSP1_UART1_APPS_CLK] = &gcc_blsp1_uart1_apps_clk.clkr,
2198*aec89f78SBastian Köcher 	[GCC_BLSP1_UART2_APPS_CLK] = &gcc_blsp1_uart2_apps_clk.clkr,
2199*aec89f78SBastian Köcher 	[GCC_BLSP1_UART3_APPS_CLK] = &gcc_blsp1_uart3_apps_clk.clkr,
2200*aec89f78SBastian Köcher 	[GCC_BLSP1_UART4_APPS_CLK] = &gcc_blsp1_uart4_apps_clk.clkr,
2201*aec89f78SBastian Köcher 	[GCC_BLSP1_UART5_APPS_CLK] = &gcc_blsp1_uart5_apps_clk.clkr,
2202*aec89f78SBastian Köcher 	[GCC_BLSP1_UART6_APPS_CLK] = &gcc_blsp1_uart6_apps_clk.clkr,
2203*aec89f78SBastian Köcher 	[GCC_BLSP2_AHB_CLK] = &gcc_blsp2_ahb_clk.clkr,
2204*aec89f78SBastian Köcher 	[GCC_BLSP2_QUP1_I2C_APPS_CLK] = &gcc_blsp2_qup1_i2c_apps_clk.clkr,
2205*aec89f78SBastian Köcher 	[GCC_BLSP2_QUP1_SPI_APPS_CLK] = &gcc_blsp2_qup1_spi_apps_clk.clkr,
2206*aec89f78SBastian Köcher 	[GCC_BLSP2_QUP2_I2C_APPS_CLK] = &gcc_blsp2_qup2_i2c_apps_clk.clkr,
2207*aec89f78SBastian Köcher 	[GCC_BLSP2_QUP2_SPI_APPS_CLK] = &gcc_blsp2_qup2_spi_apps_clk.clkr,
2208*aec89f78SBastian Köcher 	[GCC_BLSP2_QUP3_I2C_APPS_CLK] = &gcc_blsp2_qup3_i2c_apps_clk.clkr,
2209*aec89f78SBastian Köcher 	[GCC_BLSP2_QUP3_SPI_APPS_CLK] = &gcc_blsp2_qup3_spi_apps_clk.clkr,
2210*aec89f78SBastian Köcher 	[GCC_BLSP2_QUP4_I2C_APPS_CLK] = &gcc_blsp2_qup4_i2c_apps_clk.clkr,
2211*aec89f78SBastian Köcher 	[GCC_BLSP2_QUP4_SPI_APPS_CLK] = &gcc_blsp2_qup4_spi_apps_clk.clkr,
2212*aec89f78SBastian Köcher 	[GCC_BLSP2_QUP5_I2C_APPS_CLK] = &gcc_blsp2_qup5_i2c_apps_clk.clkr,
2213*aec89f78SBastian Köcher 	[GCC_BLSP2_QUP5_SPI_APPS_CLK] = &gcc_blsp2_qup5_spi_apps_clk.clkr,
2214*aec89f78SBastian Köcher 	[GCC_BLSP2_QUP6_I2C_APPS_CLK] = &gcc_blsp2_qup6_i2c_apps_clk.clkr,
2215*aec89f78SBastian Köcher 	[GCC_BLSP2_QUP6_SPI_APPS_CLK] = &gcc_blsp2_qup6_spi_apps_clk.clkr,
2216*aec89f78SBastian Köcher 	[GCC_BLSP2_UART1_APPS_CLK] = &gcc_blsp2_uart1_apps_clk.clkr,
2217*aec89f78SBastian Köcher 	[GCC_BLSP2_UART2_APPS_CLK] = &gcc_blsp2_uart2_apps_clk.clkr,
2218*aec89f78SBastian Köcher 	[GCC_BLSP2_UART3_APPS_CLK] = &gcc_blsp2_uart3_apps_clk.clkr,
2219*aec89f78SBastian Köcher 	[GCC_BLSP2_UART4_APPS_CLK] = &gcc_blsp2_uart4_apps_clk.clkr,
2220*aec89f78SBastian Köcher 	[GCC_BLSP2_UART5_APPS_CLK] = &gcc_blsp2_uart5_apps_clk.clkr,
2221*aec89f78SBastian Köcher 	[GCC_BLSP2_UART6_APPS_CLK] = &gcc_blsp2_uart6_apps_clk.clkr,
2222*aec89f78SBastian Köcher 	[GCC_GP1_CLK] = &gcc_gp1_clk.clkr,
2223*aec89f78SBastian Köcher 	[GCC_GP2_CLK] = &gcc_gp2_clk.clkr,
2224*aec89f78SBastian Köcher 	[GCC_GP3_CLK] = &gcc_gp3_clk.clkr,
2225*aec89f78SBastian Köcher 	[GCC_PCIE_0_AUX_CLK] = &gcc_pcie_0_aux_clk.clkr,
2226*aec89f78SBastian Köcher 	[GCC_PCIE_0_PIPE_CLK] = &gcc_pcie_0_pipe_clk.clkr,
2227*aec89f78SBastian Köcher 	[GCC_PCIE_1_AUX_CLK] = &gcc_pcie_1_aux_clk.clkr,
2228*aec89f78SBastian Köcher 	[GCC_PCIE_1_PIPE_CLK] = &gcc_pcie_1_pipe_clk.clkr,
2229*aec89f78SBastian Köcher 	[GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr,
2230*aec89f78SBastian Köcher 	[GCC_SDCC1_APPS_CLK] = &gcc_sdcc1_apps_clk.clkr,
2231*aec89f78SBastian Köcher 	[GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr,
2232*aec89f78SBastian Köcher 	[GCC_SDCC3_APPS_CLK] = &gcc_sdcc3_apps_clk.clkr,
2233*aec89f78SBastian Köcher 	[GCC_SDCC4_APPS_CLK] = &gcc_sdcc4_apps_clk.clkr,
2234*aec89f78SBastian Köcher 	[GCC_SYS_NOC_UFS_AXI_CLK] = &gcc_sys_noc_ufs_axi_clk.clkr,
2235*aec89f78SBastian Köcher 	[GCC_SYS_NOC_USB3_AXI_CLK] = &gcc_sys_noc_usb3_axi_clk.clkr,
2236*aec89f78SBastian Köcher 	[GCC_TSIF_REF_CLK] = &gcc_tsif_ref_clk.clkr,
2237*aec89f78SBastian Köcher 	[GCC_UFS_AXI_CLK] = &gcc_ufs_axi_clk.clkr,
2238*aec89f78SBastian Köcher 	[GCC_UFS_RX_CFG_CLK] = &gcc_ufs_rx_cfg_clk.clkr,
2239*aec89f78SBastian Köcher 	[GCC_UFS_TX_CFG_CLK] = &gcc_ufs_tx_cfg_clk.clkr,
2240*aec89f78SBastian Köcher 	[GCC_USB30_MASTER_CLK] = &gcc_usb30_master_clk.clkr,
2241*aec89f78SBastian Köcher 	[GCC_USB30_MOCK_UTMI_CLK] = &gcc_usb30_mock_utmi_clk.clkr,
2242*aec89f78SBastian Köcher 	[GCC_USB3_PHY_AUX_CLK] = &gcc_usb3_phy_aux_clk.clkr,
2243*aec89f78SBastian Köcher 	[GCC_USB_HS_SYSTEM_CLK] = &gcc_usb_hs_system_clk.clkr,
2244*aec89f78SBastian Köcher };
2245*aec89f78SBastian Köcher 
2246*aec89f78SBastian Köcher static const struct regmap_config gcc_msm8994_regmap_config = {
2247*aec89f78SBastian Köcher 	.reg_bits	= 32,
2248*aec89f78SBastian Köcher 	.reg_stride	= 4,
2249*aec89f78SBastian Köcher 	.val_bits	= 32,
2250*aec89f78SBastian Köcher 	.max_register	= 0x2000,
2251*aec89f78SBastian Köcher 	.fast_io	= true,
2252*aec89f78SBastian Köcher };
2253*aec89f78SBastian Köcher 
2254*aec89f78SBastian Köcher static const struct qcom_cc_desc gcc_msm8994_desc = {
2255*aec89f78SBastian Köcher 	.config = &gcc_msm8994_regmap_config,
2256*aec89f78SBastian Köcher 	.clks = gcc_msm8994_clocks,
2257*aec89f78SBastian Köcher 	.num_clks = ARRAY_SIZE(gcc_msm8994_clocks),
2258*aec89f78SBastian Köcher };
2259*aec89f78SBastian Köcher 
2260*aec89f78SBastian Köcher static const struct of_device_id gcc_msm8994_match_table[] = {
2261*aec89f78SBastian Köcher 	{ .compatible = "qcom,gcc-msm8994" },
2262*aec89f78SBastian Köcher 	{}
2263*aec89f78SBastian Köcher };
2264*aec89f78SBastian Köcher MODULE_DEVICE_TABLE(of, gcc_msm8994_match_table);
2265*aec89f78SBastian Köcher 
2266*aec89f78SBastian Köcher static int gcc_msm8994_probe(struct platform_device *pdev)
2267*aec89f78SBastian Köcher {
2268*aec89f78SBastian Köcher 	struct device *dev = &pdev->dev;
2269*aec89f78SBastian Köcher 	struct clk *clk;
2270*aec89f78SBastian Köcher 
2271*aec89f78SBastian Köcher 	clk = devm_clk_register(dev, &xo.hw);
2272*aec89f78SBastian Köcher 	if (IS_ERR(clk))
2273*aec89f78SBastian Köcher 		return PTR_ERR(clk);
2274*aec89f78SBastian Köcher 
2275*aec89f78SBastian Köcher 	return qcom_cc_probe(pdev, &gcc_msm8994_desc);
2276*aec89f78SBastian Köcher }
2277*aec89f78SBastian Köcher 
2278*aec89f78SBastian Köcher static struct platform_driver gcc_msm8994_driver = {
2279*aec89f78SBastian Köcher 	.probe		= gcc_msm8994_probe,
2280*aec89f78SBastian Köcher 	.driver		= {
2281*aec89f78SBastian Köcher 		.name	= "gcc-msm8994",
2282*aec89f78SBastian Köcher 		.of_match_table = gcc_msm8994_match_table,
2283*aec89f78SBastian Köcher 	},
2284*aec89f78SBastian Köcher };
2285*aec89f78SBastian Köcher 
2286*aec89f78SBastian Köcher static int __init gcc_msm8994_init(void)
2287*aec89f78SBastian Köcher {
2288*aec89f78SBastian Köcher 	return platform_driver_register(&gcc_msm8994_driver);
2289*aec89f78SBastian Köcher }
2290*aec89f78SBastian Köcher core_initcall(gcc_msm8994_init);
2291*aec89f78SBastian Köcher 
2292*aec89f78SBastian Köcher static void __exit gcc_msm8994_exit(void)
2293*aec89f78SBastian Köcher {
2294*aec89f78SBastian Köcher 	platform_driver_unregister(&gcc_msm8994_driver);
2295*aec89f78SBastian Köcher }
2296*aec89f78SBastian Köcher module_exit(gcc_msm8994_exit);
2297*aec89f78SBastian Köcher 
2298*aec89f78SBastian Köcher MODULE_DESCRIPTION("Qualcomm GCC MSM8994 Driver");
2299*aec89f78SBastian Köcher MODULE_LICENSE("GPL v2");
2300*aec89f78SBastian Köcher MODULE_ALIAS("platform:gcc-msm8994");
2301