xref: /openbmc/linux/drivers/clk/qcom/gcc-msm8994.c (revision 5e1e12d2)
1 // SPDX-License-Identifier: GPL-2.0-only
2 /* Copyright (c) 2013-2016, The Linux Foundation. All rights reserved.
3  */
4 
5 #include <linux/clk-provider.h>
6 #include <linux/kernel.h>
7 #include <linux/init.h>
8 #include <linux/err.h>
9 #include <linux/ctype.h>
10 #include <linux/io.h>
11 #include <linux/of.h>
12 #include <linux/of_device.h>
13 #include <linux/platform_device.h>
14 #include <linux/module.h>
15 #include <linux/regmap.h>
16 
17 #include <dt-bindings/clock/qcom,gcc-msm8994.h>
18 
19 #include "common.h"
20 #include "clk-regmap.h"
21 #include "clk-alpha-pll.h"
22 #include "clk-rcg.h"
23 #include "clk-branch.h"
24 #include "reset.h"
25 #include "gdsc.h"
26 
27 enum {
28 	P_XO,
29 	P_GPLL0,
30 	P_GPLL4,
31 };
32 
33 static struct clk_alpha_pll gpll0_early = {
34 	.offset = 0,
35 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
36 	.clkr = {
37 		.enable_reg = 0x1480,
38 		.enable_mask = BIT(0),
39 		.hw.init = &(struct clk_init_data){
40 			.name = "gpll0_early",
41 			.parent_data = &(const struct clk_parent_data){
42 				.fw_name = "xo",
43 			},
44 			.num_parents = 1,
45 			.ops = &clk_alpha_pll_ops,
46 		},
47 	},
48 };
49 
50 static struct clk_alpha_pll_postdiv gpll0 = {
51 	.offset = 0,
52 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
53 	.clkr.hw.init = &(struct clk_init_data){
54 		.name = "gpll0",
55 		.parent_hws = (const struct clk_hw*[]){
56 			&gpll0_early.clkr.hw
57 		},
58 		.num_parents = 1,
59 		.ops = &clk_alpha_pll_postdiv_ops,
60 	},
61 };
62 
63 static struct clk_alpha_pll gpll4_early = {
64 	.offset = 0x1dc0,
65 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
66 	.clkr = {
67 		.enable_reg = 0x1480,
68 		.enable_mask = BIT(4),
69 		.hw.init = &(struct clk_init_data){
70 			.name = "gpll4_early",
71 			.parent_data = &(const struct clk_parent_data){
72 				.fw_name = "xo",
73 			},
74 			.num_parents = 1,
75 			.ops = &clk_alpha_pll_ops,
76 		},
77 	},
78 };
79 
80 static struct clk_alpha_pll_postdiv gpll4 = {
81 	.offset = 0x1dc0,
82 	.width = 4,
83 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
84 	.clkr.hw.init = &(struct clk_init_data){
85 		.name = "gpll4",
86 		.parent_hws = (const struct clk_hw*[]){
87 			&gpll4_early.clkr.hw
88 		},
89 		.num_parents = 1,
90 		.ops = &clk_alpha_pll_postdiv_ops,
91 	},
92 };
93 
94 static const struct parent_map gcc_xo_gpll0_map[] = {
95 	{ P_XO, 0 },
96 	{ P_GPLL0, 1 },
97 };
98 
99 static const struct clk_parent_data gcc_xo_gpll0[] = {
100 	{ .fw_name = "xo" },
101 	{ .hw = &gpll0.clkr.hw },
102 };
103 
104 static const struct parent_map gcc_xo_gpll0_gpll4_map[] = {
105 	{ P_XO, 0 },
106 	{ P_GPLL0, 1 },
107 	{ P_GPLL4, 5 },
108 };
109 
110 static const struct clk_parent_data gcc_xo_gpll0_gpll4[] = {
111 	{ .fw_name = "xo" },
112 	{ .hw = &gpll0.clkr.hw },
113 	{ .hw = &gpll4.clkr.hw },
114 };
115 
116 static struct freq_tbl ftbl_ufs_axi_clk_src[] = {
117 	F(50000000, P_GPLL0, 12, 0, 0),
118 	F(100000000, P_GPLL0, 6, 0, 0),
119 	F(150000000, P_GPLL0, 4, 0, 0),
120 	F(171430000, P_GPLL0, 3.5, 0, 0),
121 	F(200000000, P_GPLL0, 3, 0, 0),
122 	F(240000000, P_GPLL0, 2.5, 0, 0),
123 	{ }
124 };
125 
126 static struct clk_rcg2 ufs_axi_clk_src = {
127 	.cmd_rcgr = 0x1d68,
128 	.mnd_width = 8,
129 	.hid_width = 5,
130 	.parent_map = gcc_xo_gpll0_map,
131 	.freq_tbl = ftbl_ufs_axi_clk_src,
132 	.clkr.hw.init = &(struct clk_init_data){
133 		.name = "ufs_axi_clk_src",
134 		.parent_data = gcc_xo_gpll0,
135 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
136 		.ops = &clk_rcg2_ops,
137 	},
138 };
139 
140 static struct freq_tbl ftbl_usb30_master_clk_src[] = {
141 	F(19200000, P_XO, 1, 0, 0),
142 	F(125000000, P_GPLL0, 1, 5, 24),
143 	{ }
144 };
145 
146 static struct clk_rcg2 usb30_master_clk_src = {
147 	.cmd_rcgr = 0x03d4,
148 	.mnd_width = 8,
149 	.hid_width = 5,
150 	.parent_map = gcc_xo_gpll0_map,
151 	.freq_tbl = ftbl_usb30_master_clk_src,
152 	.clkr.hw.init = &(struct clk_init_data){
153 		.name = "usb30_master_clk_src",
154 		.parent_data = gcc_xo_gpll0,
155 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
156 		.ops = &clk_rcg2_ops,
157 	},
158 };
159 
160 static struct freq_tbl ftbl_blsp_i2c_apps_clk_src[] = {
161 	F(19200000, P_XO, 1, 0, 0),
162 	F(50000000, P_GPLL0, 12, 0, 0),
163 	{ }
164 };
165 
166 static struct clk_rcg2 blsp1_qup1_i2c_apps_clk_src = {
167 	.cmd_rcgr = 0x0660,
168 	.hid_width = 5,
169 	.parent_map = gcc_xo_gpll0_map,
170 	.freq_tbl = ftbl_blsp_i2c_apps_clk_src,
171 	.clkr.hw.init = &(struct clk_init_data){
172 		.name = "blsp1_qup1_i2c_apps_clk_src",
173 		.parent_data = gcc_xo_gpll0,
174 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
175 		.ops = &clk_rcg2_ops,
176 	},
177 };
178 
179 static struct freq_tbl ftbl_blsp1_qup1_spi_apps_clk_src[] = {
180 	F(960000, P_XO, 10, 1, 2),
181 	F(4800000, P_XO, 4, 0, 0),
182 	F(9600000, P_XO, 2, 0, 0),
183 	F(15000000, P_GPLL0, 10, 1, 4),
184 	F(19200000, P_XO, 1, 0, 0),
185 	F(24000000, P_GPLL0, 12.5, 1, 2),
186 	F(25000000, P_GPLL0, 12, 1, 2),
187 	F(48000000, P_GPLL0, 12.5, 0, 0),
188 	F(50000000, P_GPLL0, 12, 0, 0),
189 	{ }
190 };
191 
192 static struct freq_tbl ftbl_blsp1_qup_spi_apps_clk_src_8992[] = {
193 	F(960000, P_XO, 10, 1, 2),
194 	F(4800000, P_XO, 4, 0, 0),
195 	F(9600000, P_XO, 2, 0, 0),
196 	F(15000000, P_GPLL0, 10, 1, 4),
197 	F(19200000, P_XO, 1, 0, 0),
198 	F(25000000, P_GPLL0, 12, 1, 2),
199 	F(50000000, P_GPLL0, 12, 0, 0),
200 	{ }
201 };
202 
203 static struct clk_rcg2 blsp1_qup1_spi_apps_clk_src = {
204 	.cmd_rcgr = 0x064c,
205 	.mnd_width = 8,
206 	.hid_width = 5,
207 	.parent_map = gcc_xo_gpll0_map,
208 	.freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
209 	.clkr.hw.init = &(struct clk_init_data){
210 		.name = "blsp1_qup1_spi_apps_clk_src",
211 		.parent_data = gcc_xo_gpll0,
212 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
213 		.ops = &clk_rcg2_ops,
214 	},
215 };
216 
217 static struct clk_rcg2 blsp1_qup2_i2c_apps_clk_src = {
218 	.cmd_rcgr = 0x06e0,
219 	.hid_width = 5,
220 	.parent_map = gcc_xo_gpll0_map,
221 	.freq_tbl = ftbl_blsp_i2c_apps_clk_src,
222 	.clkr.hw.init = &(struct clk_init_data){
223 		.name = "blsp1_qup2_i2c_apps_clk_src",
224 		.parent_data = gcc_xo_gpll0,
225 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
226 		.ops = &clk_rcg2_ops,
227 	},
228 };
229 
230 static struct freq_tbl ftbl_blsp1_qup2_spi_apps_clk_src[] = {
231 	F(960000, P_XO, 10, 1, 2),
232 	F(4800000, P_XO, 4, 0, 0),
233 	F(9600000, P_XO, 2, 0, 0),
234 	F(15000000, P_GPLL0, 10, 1, 4),
235 	F(19200000, P_XO, 1, 0, 0),
236 	F(24000000, P_GPLL0, 12.5, 1, 2),
237 	F(25000000, P_GPLL0, 12, 1, 2),
238 	F(42860000, P_GPLL0, 14, 0, 0),
239 	F(46150000, P_GPLL0, 13, 0, 0),
240 	{ }
241 };
242 
243 static struct clk_rcg2 blsp1_qup2_spi_apps_clk_src = {
244 	.cmd_rcgr = 0x06cc,
245 	.mnd_width = 8,
246 	.hid_width = 5,
247 	.parent_map = gcc_xo_gpll0_map,
248 	.freq_tbl = ftbl_blsp1_qup2_spi_apps_clk_src,
249 	.clkr.hw.init = &(struct clk_init_data){
250 		.name = "blsp1_qup2_spi_apps_clk_src",
251 		.parent_data = gcc_xo_gpll0,
252 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
253 		.ops = &clk_rcg2_ops,
254 	},
255 };
256 
257 static struct clk_rcg2 blsp1_qup3_i2c_apps_clk_src = {
258 	.cmd_rcgr = 0x0760,
259 	.hid_width = 5,
260 	.parent_map = gcc_xo_gpll0_map,
261 	.freq_tbl = ftbl_blsp_i2c_apps_clk_src,
262 	.clkr.hw.init = &(struct clk_init_data){
263 		.name = "blsp1_qup3_i2c_apps_clk_src",
264 		.parent_data = gcc_xo_gpll0,
265 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
266 		.ops = &clk_rcg2_ops,
267 	},
268 };
269 
270 static struct freq_tbl ftbl_blsp1_qup3_4_spi_apps_clk_src[] = {
271 	F(960000, P_XO, 10, 1, 2),
272 	F(4800000, P_XO, 4, 0, 0),
273 	F(9600000, P_XO, 2, 0, 0),
274 	F(15000000, P_GPLL0, 10, 1, 4),
275 	F(19200000, P_XO, 1, 0, 0),
276 	F(24000000, P_GPLL0, 12.5, 1, 2),
277 	F(25000000, P_GPLL0, 12, 1, 2),
278 	F(42860000, P_GPLL0, 14, 0, 0),
279 	F(44440000, P_GPLL0, 13.5, 0, 0),
280 	{ }
281 };
282 
283 static struct clk_rcg2 blsp1_qup3_spi_apps_clk_src = {
284 	.cmd_rcgr = 0x074c,
285 	.mnd_width = 8,
286 	.hid_width = 5,
287 	.parent_map = gcc_xo_gpll0_map,
288 	.freq_tbl = ftbl_blsp1_qup3_4_spi_apps_clk_src,
289 	.clkr.hw.init = &(struct clk_init_data){
290 		.name = "blsp1_qup3_spi_apps_clk_src",
291 		.parent_data = gcc_xo_gpll0,
292 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
293 		.ops = &clk_rcg2_ops,
294 	},
295 };
296 
297 static struct clk_rcg2 blsp1_qup4_i2c_apps_clk_src = {
298 	.cmd_rcgr = 0x07e0,
299 	.hid_width = 5,
300 	.parent_map = gcc_xo_gpll0_map,
301 	.freq_tbl = ftbl_blsp_i2c_apps_clk_src,
302 	.clkr.hw.init = &(struct clk_init_data){
303 		.name = "blsp1_qup4_i2c_apps_clk_src",
304 		.parent_data = gcc_xo_gpll0,
305 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
306 		.ops = &clk_rcg2_ops,
307 	},
308 };
309 
310 static struct clk_rcg2 blsp1_qup4_spi_apps_clk_src = {
311 	.cmd_rcgr = 0x07cc,
312 	.mnd_width = 8,
313 	.hid_width = 5,
314 	.parent_map = gcc_xo_gpll0_map,
315 	.freq_tbl = ftbl_blsp1_qup3_4_spi_apps_clk_src,
316 	.clkr.hw.init = &(struct clk_init_data){
317 		.name = "blsp1_qup4_spi_apps_clk_src",
318 		.parent_data = gcc_xo_gpll0,
319 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
320 		.ops = &clk_rcg2_ops,
321 	},
322 };
323 
324 static struct clk_rcg2 blsp1_qup5_i2c_apps_clk_src = {
325 	.cmd_rcgr = 0x0860,
326 	.hid_width = 5,
327 	.parent_map = gcc_xo_gpll0_map,
328 	.freq_tbl = ftbl_blsp_i2c_apps_clk_src,
329 	.clkr.hw.init = &(struct clk_init_data){
330 		.name = "blsp1_qup5_i2c_apps_clk_src",
331 		.parent_data = gcc_xo_gpll0,
332 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
333 		.ops = &clk_rcg2_ops,
334 	},
335 };
336 
337 static struct freq_tbl ftbl_blsp1_qup5_spi_apps_clk_src[] = {
338 	F(960000, P_XO, 10, 1, 2),
339 	F(4800000, P_XO, 4, 0, 0),
340 	F(9600000, P_XO, 2, 0, 0),
341 	F(15000000, P_GPLL0, 10, 1, 4),
342 	F(19200000, P_XO, 1, 0, 0),
343 	F(24000000, P_GPLL0, 12.5, 1, 2),
344 	F(25000000, P_GPLL0, 12, 1, 2),
345 	F(40000000, P_GPLL0, 15, 0, 0),
346 	F(42860000, P_GPLL0, 14, 0, 0),
347 	{ }
348 };
349 
350 static struct clk_rcg2 blsp1_qup5_spi_apps_clk_src = {
351 	.cmd_rcgr = 0x084c,
352 	.mnd_width = 8,
353 	.hid_width = 5,
354 	.parent_map = gcc_xo_gpll0_map,
355 	.freq_tbl = ftbl_blsp1_qup5_spi_apps_clk_src,
356 	.clkr.hw.init = &(struct clk_init_data){
357 		.name = "blsp1_qup5_spi_apps_clk_src",
358 		.parent_data = gcc_xo_gpll0,
359 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
360 		.ops = &clk_rcg2_ops,
361 	},
362 };
363 
364 static struct clk_rcg2 blsp1_qup6_i2c_apps_clk_src = {
365 	.cmd_rcgr = 0x08e0,
366 	.hid_width = 5,
367 	.parent_map = gcc_xo_gpll0_map,
368 	.freq_tbl = ftbl_blsp_i2c_apps_clk_src,
369 	.clkr.hw.init = &(struct clk_init_data){
370 		.name = "blsp1_qup6_i2c_apps_clk_src",
371 		.parent_data = gcc_xo_gpll0,
372 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
373 		.ops = &clk_rcg2_ops,
374 	},
375 };
376 
377 static struct freq_tbl ftbl_blsp1_qup6_spi_apps_clk_src[] = {
378 	F(960000, P_XO, 10, 1, 2),
379 	F(4800000, P_XO, 4, 0, 0),
380 	F(9600000, P_XO, 2, 0, 0),
381 	F(15000000, P_GPLL0, 10, 1, 4),
382 	F(19200000, P_XO, 1, 0, 0),
383 	F(24000000, P_GPLL0, 12.5, 1, 2),
384 	F(27906976, P_GPLL0, 1, 2, 43),
385 	F(41380000, P_GPLL0, 15, 0, 0),
386 	F(42860000, P_GPLL0, 14, 0, 0),
387 	{ }
388 };
389 
390 static struct clk_rcg2 blsp1_qup6_spi_apps_clk_src = {
391 	.cmd_rcgr = 0x08cc,
392 	.mnd_width = 8,
393 	.hid_width = 5,
394 	.parent_map = gcc_xo_gpll0_map,
395 	.freq_tbl = ftbl_blsp1_qup6_spi_apps_clk_src,
396 	.clkr.hw.init = &(struct clk_init_data){
397 		.name = "blsp1_qup6_spi_apps_clk_src",
398 		.parent_data = gcc_xo_gpll0,
399 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
400 		.ops = &clk_rcg2_ops,
401 	},
402 };
403 
404 static struct freq_tbl ftbl_blsp_uart_apps_clk_src[] = {
405 	F(3686400, P_GPLL0, 1, 96, 15625),
406 	F(7372800, P_GPLL0, 1, 192, 15625),
407 	F(14745600, P_GPLL0, 1, 384, 15625),
408 	F(16000000, P_GPLL0, 5, 2, 15),
409 	F(19200000, P_XO, 1, 0, 0),
410 	F(24000000, P_GPLL0, 5, 1, 5),
411 	F(32000000, P_GPLL0, 1, 4, 75),
412 	F(40000000, P_GPLL0, 15, 0, 0),
413 	F(46400000, P_GPLL0, 1, 29, 375),
414 	F(48000000, P_GPLL0, 12.5, 0, 0),
415 	F(51200000, P_GPLL0, 1, 32, 375),
416 	F(56000000, P_GPLL0, 1, 7, 75),
417 	F(58982400, P_GPLL0, 1, 1536, 15625),
418 	F(60000000, P_GPLL0, 10, 0, 0),
419 	F(63160000, P_GPLL0, 9.5, 0, 0),
420 	{ }
421 };
422 
423 static struct clk_rcg2 blsp1_uart1_apps_clk_src = {
424 	.cmd_rcgr = 0x068c,
425 	.mnd_width = 16,
426 	.hid_width = 5,
427 	.parent_map = gcc_xo_gpll0_map,
428 	.freq_tbl = ftbl_blsp_uart_apps_clk_src,
429 	.clkr.hw.init = &(struct clk_init_data){
430 		.name = "blsp1_uart1_apps_clk_src",
431 		.parent_data = gcc_xo_gpll0,
432 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
433 		.ops = &clk_rcg2_ops,
434 	},
435 };
436 
437 static struct clk_rcg2 blsp1_uart2_apps_clk_src = {
438 	.cmd_rcgr = 0x070c,
439 	.mnd_width = 16,
440 	.hid_width = 5,
441 	.parent_map = gcc_xo_gpll0_map,
442 	.freq_tbl = ftbl_blsp_uart_apps_clk_src,
443 	.clkr.hw.init = &(struct clk_init_data){
444 		.name = "blsp1_uart2_apps_clk_src",
445 		.parent_data = gcc_xo_gpll0,
446 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
447 		.ops = &clk_rcg2_ops,
448 	},
449 };
450 
451 static struct clk_rcg2 blsp1_uart3_apps_clk_src = {
452 	.cmd_rcgr = 0x078c,
453 	.mnd_width = 16,
454 	.hid_width = 5,
455 	.parent_map = gcc_xo_gpll0_map,
456 	.freq_tbl = ftbl_blsp_uart_apps_clk_src,
457 	.clkr.hw.init = &(struct clk_init_data){
458 		.name = "blsp1_uart3_apps_clk_src",
459 		.parent_data = gcc_xo_gpll0,
460 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
461 		.ops = &clk_rcg2_ops,
462 	},
463 };
464 
465 static struct clk_rcg2 blsp1_uart4_apps_clk_src = {
466 	.cmd_rcgr = 0x080c,
467 	.mnd_width = 16,
468 	.hid_width = 5,
469 	.parent_map = gcc_xo_gpll0_map,
470 	.freq_tbl = ftbl_blsp_uart_apps_clk_src,
471 	.clkr.hw.init = &(struct clk_init_data){
472 		.name = "blsp1_uart4_apps_clk_src",
473 		.parent_data = gcc_xo_gpll0,
474 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
475 		.ops = &clk_rcg2_ops,
476 	},
477 };
478 
479 static struct clk_rcg2 blsp1_uart5_apps_clk_src = {
480 	.cmd_rcgr = 0x088c,
481 	.mnd_width = 16,
482 	.hid_width = 5,
483 	.parent_map = gcc_xo_gpll0_map,
484 	.freq_tbl = ftbl_blsp_uart_apps_clk_src,
485 	.clkr.hw.init = &(struct clk_init_data){
486 		.name = "blsp1_uart5_apps_clk_src",
487 		.parent_data = gcc_xo_gpll0,
488 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
489 		.ops = &clk_rcg2_ops,
490 	},
491 };
492 
493 static struct clk_rcg2 blsp1_uart6_apps_clk_src = {
494 	.cmd_rcgr = 0x090c,
495 	.mnd_width = 16,
496 	.hid_width = 5,
497 	.parent_map = gcc_xo_gpll0_map,
498 	.freq_tbl = ftbl_blsp_uart_apps_clk_src,
499 	.clkr.hw.init = &(struct clk_init_data){
500 		.name = "blsp1_uart6_apps_clk_src",
501 		.parent_data = gcc_xo_gpll0,
502 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
503 		.ops = &clk_rcg2_ops,
504 	},
505 };
506 
507 static struct clk_rcg2 blsp2_qup1_i2c_apps_clk_src = {
508 	.cmd_rcgr = 0x09a0,
509 	.hid_width = 5,
510 	.parent_map = gcc_xo_gpll0_map,
511 	.freq_tbl = ftbl_blsp_i2c_apps_clk_src,
512 	.clkr.hw.init = &(struct clk_init_data){
513 		.name = "blsp2_qup1_i2c_apps_clk_src",
514 		.parent_data = gcc_xo_gpll0,
515 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
516 		.ops = &clk_rcg2_ops,
517 	},
518 };
519 
520 static struct freq_tbl ftbl_blsp2_qup1_2_spi_apps_clk_src[] = {
521 	F(960000, P_XO, 10, 1, 2),
522 	F(4800000, P_XO, 4, 0, 0),
523 	F(9600000, P_XO, 2, 0, 0),
524 	F(15000000, P_GPLL0, 10, 1, 4),
525 	F(19200000, P_XO, 1, 0, 0),
526 	F(24000000, P_GPLL0, 12.5, 1, 2),
527 	F(25000000, P_GPLL0, 12, 1, 2),
528 	F(42860000, P_GPLL0, 14, 0, 0),
529 	F(44440000, P_GPLL0, 13.5, 0, 0),
530 	{ }
531 };
532 
533 static struct clk_rcg2 blsp2_qup1_spi_apps_clk_src = {
534 	.cmd_rcgr = 0x098c,
535 	.mnd_width = 8,
536 	.hid_width = 5,
537 	.parent_map = gcc_xo_gpll0_map,
538 	.freq_tbl = ftbl_blsp2_qup1_2_spi_apps_clk_src,
539 	.clkr.hw.init = &(struct clk_init_data){
540 		.name = "blsp2_qup1_spi_apps_clk_src",
541 		.parent_data = gcc_xo_gpll0,
542 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
543 		.ops = &clk_rcg2_ops,
544 	},
545 };
546 
547 static struct clk_rcg2 blsp2_qup2_i2c_apps_clk_src = {
548 	.cmd_rcgr = 0x0a20,
549 	.hid_width = 5,
550 	.parent_map = gcc_xo_gpll0_map,
551 	.freq_tbl = ftbl_blsp_i2c_apps_clk_src,
552 	.clkr.hw.init = &(struct clk_init_data){
553 		.name = "blsp2_qup2_i2c_apps_clk_src",
554 		.parent_data = gcc_xo_gpll0,
555 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
556 		.ops = &clk_rcg2_ops,
557 	},
558 };
559 
560 static struct clk_rcg2 blsp2_qup2_spi_apps_clk_src = {
561 	.cmd_rcgr = 0x0a0c,
562 	.mnd_width = 8,
563 	.hid_width = 5,
564 	.parent_map = gcc_xo_gpll0_map,
565 	.freq_tbl = ftbl_blsp2_qup1_2_spi_apps_clk_src,
566 	.clkr.hw.init = &(struct clk_init_data){
567 		.name = "blsp2_qup2_spi_apps_clk_src",
568 		.parent_data = gcc_xo_gpll0,
569 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
570 		.ops = &clk_rcg2_ops,
571 	},
572 };
573 
574 static struct freq_tbl ftbl_blsp2_qup3_4_spi_apps_clk_src[] = {
575 	F(960000, P_XO, 10, 1, 2),
576 	F(4800000, P_XO, 4, 0, 0),
577 	F(9600000, P_XO, 2, 0, 0),
578 	F(15000000, P_GPLL0, 10, 1, 4),
579 	F(19200000, P_XO, 1, 0, 0),
580 	F(24000000, P_GPLL0, 12.5, 1, 2),
581 	F(25000000, P_GPLL0, 12, 1, 2),
582 	F(42860000, P_GPLL0, 14, 0, 0),
583 	F(48000000, P_GPLL0, 12.5, 0, 0),
584 	{ }
585 };
586 
587 static struct clk_rcg2 blsp2_qup3_i2c_apps_clk_src = {
588 	.cmd_rcgr = 0x0aa0,
589 	.hid_width = 5,
590 	.parent_map = gcc_xo_gpll0_map,
591 	.freq_tbl = ftbl_blsp_i2c_apps_clk_src,
592 	.clkr.hw.init = &(struct clk_init_data){
593 		.name = "blsp2_qup3_i2c_apps_clk_src",
594 		.parent_data = gcc_xo_gpll0,
595 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
596 		.ops = &clk_rcg2_ops,
597 	},
598 };
599 
600 static struct clk_rcg2 blsp2_qup3_spi_apps_clk_src = {
601 	.cmd_rcgr = 0x0a8c,
602 	.mnd_width = 8,
603 	.hid_width = 5,
604 	.parent_map = gcc_xo_gpll0_map,
605 	.freq_tbl = ftbl_blsp2_qup3_4_spi_apps_clk_src,
606 	.clkr.hw.init = &(struct clk_init_data){
607 		.name = "blsp2_qup3_spi_apps_clk_src",
608 		.parent_data = gcc_xo_gpll0,
609 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
610 		.ops = &clk_rcg2_ops,
611 	},
612 };
613 
614 static struct clk_rcg2 blsp2_qup4_i2c_apps_clk_src = {
615 	.cmd_rcgr = 0x0b20,
616 	.hid_width = 5,
617 	.parent_map = gcc_xo_gpll0_map,
618 	.freq_tbl = ftbl_blsp_i2c_apps_clk_src,
619 	.clkr.hw.init = &(struct clk_init_data){
620 		.name = "blsp2_qup4_i2c_apps_clk_src",
621 		.parent_data = gcc_xo_gpll0,
622 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
623 		.ops = &clk_rcg2_ops,
624 	},
625 };
626 
627 static struct clk_rcg2 blsp2_qup4_spi_apps_clk_src = {
628 	.cmd_rcgr = 0x0b0c,
629 	.mnd_width = 8,
630 	.hid_width = 5,
631 	.parent_map = gcc_xo_gpll0_map,
632 	.freq_tbl = ftbl_blsp2_qup3_4_spi_apps_clk_src,
633 	.clkr.hw.init = &(struct clk_init_data){
634 		.name = "blsp2_qup4_spi_apps_clk_src",
635 		.parent_data = gcc_xo_gpll0,
636 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
637 		.ops = &clk_rcg2_ops,
638 	},
639 };
640 
641 static struct clk_rcg2 blsp2_qup5_i2c_apps_clk_src = {
642 	.cmd_rcgr = 0x0ba0,
643 	.hid_width = 5,
644 	.parent_map = gcc_xo_gpll0_map,
645 	.freq_tbl = ftbl_blsp_i2c_apps_clk_src,
646 	.clkr.hw.init = &(struct clk_init_data){
647 		.name = "blsp2_qup5_i2c_apps_clk_src",
648 		.parent_data = gcc_xo_gpll0,
649 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
650 		.ops = &clk_rcg2_ops,
651 	},
652 };
653 
654 static struct clk_rcg2 blsp2_qup5_spi_apps_clk_src = {
655 	.cmd_rcgr = 0x0b8c,
656 	.mnd_width = 8,
657 	.hid_width = 5,
658 	.parent_map = gcc_xo_gpll0_map,
659 	/* BLSP1 QUP1 and BLSP2 QUP5 use the same freqs */
660 	.freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
661 	.clkr.hw.init = &(struct clk_init_data){
662 		.name = "blsp2_qup5_spi_apps_clk_src",
663 		.parent_data = gcc_xo_gpll0,
664 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
665 		.ops = &clk_rcg2_ops,
666 	},
667 };
668 
669 static struct clk_rcg2 blsp2_qup6_i2c_apps_clk_src = {
670 	.cmd_rcgr = 0x0c20,
671 	.hid_width = 5,
672 	.parent_map = gcc_xo_gpll0_map,
673 	.freq_tbl = ftbl_blsp_i2c_apps_clk_src,
674 	.clkr.hw.init = &(struct clk_init_data){
675 		.name = "blsp2_qup6_i2c_apps_clk_src",
676 		.parent_data = gcc_xo_gpll0,
677 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
678 		.ops = &clk_rcg2_ops,
679 	},
680 };
681 
682 static struct freq_tbl ftbl_blsp2_qup6_spi_apps_clk_src[] = {
683 	F(960000, P_XO, 10, 1, 2),
684 	F(4800000, P_XO, 4, 0, 0),
685 	F(9600000, P_XO, 2, 0, 0),
686 	F(15000000, P_GPLL0, 10, 1, 4),
687 	F(19200000, P_XO, 1, 0, 0),
688 	F(24000000, P_GPLL0, 12.5, 1, 2),
689 	F(25000000, P_GPLL0, 12, 1, 2),
690 	F(44440000, P_GPLL0, 13.5, 0, 0),
691 	F(48000000, P_GPLL0, 12.5, 0, 0),
692 	{ }
693 };
694 
695 static struct clk_rcg2 blsp2_qup6_spi_apps_clk_src = {
696 	.cmd_rcgr = 0x0c0c,
697 	.mnd_width = 8,
698 	.hid_width = 5,
699 	.parent_map = gcc_xo_gpll0_map,
700 	.freq_tbl = ftbl_blsp2_qup6_spi_apps_clk_src,
701 	.clkr.hw.init = &(struct clk_init_data){
702 		.name = "blsp2_qup6_spi_apps_clk_src",
703 		.parent_data = gcc_xo_gpll0,
704 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
705 		.ops = &clk_rcg2_ops,
706 	},
707 };
708 
709 static struct clk_rcg2 blsp2_uart1_apps_clk_src = {
710 	.cmd_rcgr = 0x09cc,
711 	.mnd_width = 16,
712 	.hid_width = 5,
713 	.parent_map = gcc_xo_gpll0_map,
714 	.freq_tbl = ftbl_blsp_uart_apps_clk_src,
715 	.clkr.hw.init = &(struct clk_init_data){
716 		.name = "blsp2_uart1_apps_clk_src",
717 		.parent_data = gcc_xo_gpll0,
718 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
719 		.ops = &clk_rcg2_ops,
720 	},
721 };
722 
723 static struct clk_rcg2 blsp2_uart2_apps_clk_src = {
724 	.cmd_rcgr = 0x0a4c,
725 	.mnd_width = 16,
726 	.hid_width = 5,
727 	.parent_map = gcc_xo_gpll0_map,
728 	.freq_tbl = ftbl_blsp_uart_apps_clk_src,
729 	.clkr.hw.init = &(struct clk_init_data){
730 		.name = "blsp2_uart2_apps_clk_src",
731 		.parent_data = gcc_xo_gpll0,
732 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
733 		.ops = &clk_rcg2_ops,
734 	},
735 };
736 
737 static struct clk_rcg2 blsp2_uart3_apps_clk_src = {
738 	.cmd_rcgr = 0x0acc,
739 	.mnd_width = 16,
740 	.hid_width = 5,
741 	.parent_map = gcc_xo_gpll0_map,
742 	.freq_tbl = ftbl_blsp_uart_apps_clk_src,
743 	.clkr.hw.init = &(struct clk_init_data){
744 		.name = "blsp2_uart3_apps_clk_src",
745 		.parent_data = gcc_xo_gpll0,
746 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
747 		.ops = &clk_rcg2_ops,
748 	},
749 };
750 
751 static struct clk_rcg2 blsp2_uart4_apps_clk_src = {
752 	.cmd_rcgr = 0x0b4c,
753 	.mnd_width = 16,
754 	.hid_width = 5,
755 	.parent_map = gcc_xo_gpll0_map,
756 	.freq_tbl = ftbl_blsp_uart_apps_clk_src,
757 	.clkr.hw.init = &(struct clk_init_data){
758 		.name = "blsp2_uart4_apps_clk_src",
759 		.parent_data = gcc_xo_gpll0,
760 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
761 		.ops = &clk_rcg2_ops,
762 	},
763 };
764 
765 static struct clk_rcg2 blsp2_uart5_apps_clk_src = {
766 	.cmd_rcgr = 0x0bcc,
767 	.mnd_width = 16,
768 	.hid_width = 5,
769 	.parent_map = gcc_xo_gpll0_map,
770 	.freq_tbl = ftbl_blsp_uart_apps_clk_src,
771 	.clkr.hw.init = &(struct clk_init_data){
772 		.name = "blsp2_uart5_apps_clk_src",
773 		.parent_data = gcc_xo_gpll0,
774 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
775 		.ops = &clk_rcg2_ops,
776 	},
777 };
778 
779 static struct clk_rcg2 blsp2_uart6_apps_clk_src = {
780 	.cmd_rcgr = 0x0c4c,
781 	.mnd_width = 16,
782 	.hid_width = 5,
783 	.parent_map = gcc_xo_gpll0_map,
784 	.freq_tbl = ftbl_blsp_uart_apps_clk_src,
785 	.clkr.hw.init = &(struct clk_init_data){
786 		.name = "blsp2_uart6_apps_clk_src",
787 		.parent_data = gcc_xo_gpll0,
788 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
789 		.ops = &clk_rcg2_ops,
790 	},
791 };
792 
793 static struct freq_tbl ftbl_gp1_clk_src[] = {
794 	F(19200000, P_XO, 1, 0, 0),
795 	F(100000000, P_GPLL0, 6, 0, 0),
796 	F(200000000, P_GPLL0, 3, 0, 0),
797 	{ }
798 };
799 
800 static struct clk_rcg2 gp1_clk_src = {
801 	.cmd_rcgr = 0x1904,
802 	.mnd_width = 8,
803 	.hid_width = 5,
804 	.parent_map = gcc_xo_gpll0_map,
805 	.freq_tbl = ftbl_gp1_clk_src,
806 	.clkr.hw.init = &(struct clk_init_data){
807 		.name = "gp1_clk_src",
808 		.parent_data = gcc_xo_gpll0,
809 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
810 		.ops = &clk_rcg2_ops,
811 	},
812 };
813 
814 static struct freq_tbl ftbl_gp2_clk_src[] = {
815 	F(19200000, P_XO, 1, 0, 0),
816 	F(100000000, P_GPLL0, 6, 0, 0),
817 	F(200000000, P_GPLL0, 3, 0, 0),
818 	{ }
819 };
820 
821 static struct clk_rcg2 gp2_clk_src = {
822 	.cmd_rcgr = 0x1944,
823 	.mnd_width = 8,
824 	.hid_width = 5,
825 	.parent_map = gcc_xo_gpll0_map,
826 	.freq_tbl = ftbl_gp2_clk_src,
827 	.clkr.hw.init = &(struct clk_init_data){
828 		.name = "gp2_clk_src",
829 		.parent_data = gcc_xo_gpll0,
830 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
831 		.ops = &clk_rcg2_ops,
832 	},
833 };
834 
835 static struct freq_tbl ftbl_gp3_clk_src[] = {
836 	F(19200000, P_XO, 1, 0, 0),
837 	F(100000000, P_GPLL0, 6, 0, 0),
838 	F(200000000, P_GPLL0, 3, 0, 0),
839 	{ }
840 };
841 
842 static struct clk_rcg2 gp3_clk_src = {
843 	.cmd_rcgr = 0x1984,
844 	.mnd_width = 8,
845 	.hid_width = 5,
846 	.parent_map = gcc_xo_gpll0_map,
847 	.freq_tbl = ftbl_gp3_clk_src,
848 	.clkr.hw.init = &(struct clk_init_data){
849 		.name = "gp3_clk_src",
850 		.parent_data = gcc_xo_gpll0,
851 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
852 		.ops = &clk_rcg2_ops,
853 	},
854 };
855 
856 static struct freq_tbl ftbl_pcie_0_aux_clk_src[] = {
857 	F(1011000, P_XO, 1, 1, 19),
858 	{ }
859 };
860 
861 static struct clk_rcg2 pcie_0_aux_clk_src = {
862 	.cmd_rcgr = 0x1b00,
863 	.mnd_width = 8,
864 	.hid_width = 5,
865 	.freq_tbl = ftbl_pcie_0_aux_clk_src,
866 	.clkr.hw.init = &(struct clk_init_data){
867 		.name = "pcie_0_aux_clk_src",
868 		.parent_data = &(const struct clk_parent_data){
869 				.fw_name = "xo",
870 		},
871 		.num_parents = 1,
872 		.ops = &clk_rcg2_ops,
873 	},
874 };
875 
876 static struct freq_tbl ftbl_pcie_pipe_clk_src[] = {
877 	F(125000000, P_XO, 1, 0, 0),
878 	{ }
879 };
880 
881 static struct clk_rcg2 pcie_0_pipe_clk_src = {
882 	.cmd_rcgr = 0x1adc,
883 	.hid_width = 5,
884 	.freq_tbl = ftbl_pcie_pipe_clk_src,
885 	.clkr.hw.init = &(struct clk_init_data){
886 		.name = "pcie_0_pipe_clk_src",
887 		.parent_data = &(const struct clk_parent_data){
888 				.fw_name = "xo",
889 		},
890 		.num_parents = 1,
891 		.ops = &clk_rcg2_ops,
892 	},
893 };
894 
895 static struct freq_tbl ftbl_pcie_1_aux_clk_src[] = {
896 	F(1011000, P_XO, 1, 1, 19),
897 	{ }
898 };
899 
900 static struct clk_rcg2 pcie_1_aux_clk_src = {
901 	.cmd_rcgr = 0x1b80,
902 	.mnd_width = 8,
903 	.hid_width = 5,
904 	.freq_tbl = ftbl_pcie_1_aux_clk_src,
905 	.clkr.hw.init = &(struct clk_init_data){
906 		.name = "pcie_1_aux_clk_src",
907 		.parent_data = &(const struct clk_parent_data){
908 				.fw_name = "xo",
909 		},
910 		.num_parents = 1,
911 		.ops = &clk_rcg2_ops,
912 	},
913 };
914 
915 static struct clk_rcg2 pcie_1_pipe_clk_src = {
916 	.cmd_rcgr = 0x1b5c,
917 	.hid_width = 5,
918 	.freq_tbl = ftbl_pcie_pipe_clk_src,
919 	.clkr.hw.init = &(struct clk_init_data){
920 		.name = "pcie_1_pipe_clk_src",
921 		.parent_data = &(const struct clk_parent_data){
922 				.fw_name = "xo",
923 		},
924 		.num_parents = 1,
925 		.ops = &clk_rcg2_ops,
926 	},
927 };
928 
929 static struct freq_tbl ftbl_pdm2_clk_src[] = {
930 	F(60000000, P_GPLL0, 10, 0, 0),
931 	{ }
932 };
933 
934 static struct clk_rcg2 pdm2_clk_src = {
935 	.cmd_rcgr = 0x0cd0,
936 	.hid_width = 5,
937 	.parent_map = gcc_xo_gpll0_map,
938 	.freq_tbl = ftbl_pdm2_clk_src,
939 	.clkr.hw.init = &(struct clk_init_data){
940 		.name = "pdm2_clk_src",
941 		.parent_data = gcc_xo_gpll0,
942 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
943 		.ops = &clk_rcg2_ops,
944 	},
945 };
946 
947 static struct freq_tbl ftbl_sdcc1_apps_clk_src[] = {
948 	F(144000, P_XO, 16, 3, 25),
949 	F(400000, P_XO, 12, 1, 4),
950 	F(20000000, P_GPLL0, 15, 1, 2),
951 	F(25000000, P_GPLL0, 12, 1, 2),
952 	F(50000000, P_GPLL0, 12, 0, 0),
953 	F(100000000, P_GPLL0, 6, 0, 0),
954 	F(192000000, P_GPLL4, 2, 0, 0),
955 	F(384000000, P_GPLL4, 1, 0, 0),
956 	{ }
957 };
958 
959 static struct freq_tbl ftbl_sdcc1_apps_clk_src_8992[] = {
960 	F(144000, P_XO, 16, 3, 25),
961 	F(400000, P_XO, 12, 1, 4),
962 	F(20000000, P_GPLL0, 15, 1, 2),
963 	F(25000000, P_GPLL0, 12, 1, 2),
964 	F(50000000, P_GPLL0, 12, 0, 0),
965 	F(100000000, P_GPLL0, 6, 0, 0),
966 	F(172000000, P_GPLL4, 2, 0, 0),
967 	F(344000000, P_GPLL4, 1, 0, 0),
968 	{ }
969 };
970 
971 static struct clk_rcg2 sdcc1_apps_clk_src = {
972 	.cmd_rcgr = 0x04d0,
973 	.mnd_width = 8,
974 	.hid_width = 5,
975 	.parent_map = gcc_xo_gpll0_gpll4_map,
976 	.freq_tbl = ftbl_sdcc1_apps_clk_src,
977 	.clkr.hw.init = &(struct clk_init_data){
978 		.name = "sdcc1_apps_clk_src",
979 		.parent_data = gcc_xo_gpll0_gpll4,
980 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll4),
981 		.ops = &clk_rcg2_floor_ops,
982 	},
983 };
984 
985 static struct freq_tbl ftbl_sdcc2_4_apps_clk_src[] = {
986 	F(144000, P_XO, 16, 3, 25),
987 	F(400000, P_XO, 12, 1, 4),
988 	F(20000000, P_GPLL0, 15, 1, 2),
989 	F(25000000, P_GPLL0, 12, 1, 2),
990 	F(50000000, P_GPLL0, 12, 0, 0),
991 	F(100000000, P_GPLL0, 6, 0, 0),
992 	F(200000000, P_GPLL0, 3, 0, 0),
993 	{ }
994 };
995 
996 static struct clk_rcg2 sdcc2_apps_clk_src = {
997 	.cmd_rcgr = 0x0510,
998 	.mnd_width = 8,
999 	.hid_width = 5,
1000 	.parent_map = gcc_xo_gpll0_map,
1001 	.freq_tbl = ftbl_sdcc2_4_apps_clk_src,
1002 	.clkr.hw.init = &(struct clk_init_data){
1003 		.name = "sdcc2_apps_clk_src",
1004 		.parent_data = gcc_xo_gpll0,
1005 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
1006 		.ops = &clk_rcg2_floor_ops,
1007 	},
1008 };
1009 
1010 static struct clk_rcg2 sdcc3_apps_clk_src = {
1011 	.cmd_rcgr = 0x0550,
1012 	.mnd_width = 8,
1013 	.hid_width = 5,
1014 	.parent_map = gcc_xo_gpll0_map,
1015 	.freq_tbl = ftbl_sdcc2_4_apps_clk_src,
1016 	.clkr.hw.init = &(struct clk_init_data){
1017 		.name = "sdcc3_apps_clk_src",
1018 		.parent_data = gcc_xo_gpll0,
1019 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
1020 		.ops = &clk_rcg2_floor_ops,
1021 	},
1022 };
1023 
1024 static struct clk_rcg2 sdcc4_apps_clk_src = {
1025 	.cmd_rcgr = 0x0590,
1026 	.mnd_width = 8,
1027 	.hid_width = 5,
1028 	.parent_map = gcc_xo_gpll0_map,
1029 	.freq_tbl = ftbl_sdcc2_4_apps_clk_src,
1030 	.clkr.hw.init = &(struct clk_init_data){
1031 		.name = "sdcc4_apps_clk_src",
1032 		.parent_data = gcc_xo_gpll0,
1033 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
1034 		.ops = &clk_rcg2_floor_ops,
1035 	},
1036 };
1037 
1038 static struct freq_tbl ftbl_tsif_ref_clk_src[] = {
1039 	F(105500, P_XO, 1, 1, 182),
1040 	{ }
1041 };
1042 
1043 static struct clk_rcg2 tsif_ref_clk_src = {
1044 	.cmd_rcgr = 0x0d90,
1045 	.mnd_width = 8,
1046 	.hid_width = 5,
1047 	.freq_tbl = ftbl_tsif_ref_clk_src,
1048 	.clkr.hw.init = &(struct clk_init_data){
1049 		.name = "tsif_ref_clk_src",
1050 		.parent_data = &(const struct clk_parent_data){
1051 				.fw_name = "xo",
1052 		},
1053 		.num_parents = 1,
1054 		.ops = &clk_rcg2_ops,
1055 	},
1056 };
1057 
1058 static struct freq_tbl ftbl_usb30_mock_utmi_clk_src[] = {
1059 	F(19200000, P_XO, 1, 0, 0),
1060 	F(60000000, P_GPLL0, 10, 0, 0),
1061 	{ }
1062 };
1063 
1064 static struct clk_rcg2 usb30_mock_utmi_clk_src = {
1065 	.cmd_rcgr = 0x03e8,
1066 	.hid_width = 5,
1067 	.parent_map = gcc_xo_gpll0_map,
1068 	.freq_tbl = ftbl_usb30_mock_utmi_clk_src,
1069 	.clkr.hw.init = &(struct clk_init_data){
1070 		.name = "usb30_mock_utmi_clk_src",
1071 		.parent_data = gcc_xo_gpll0,
1072 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
1073 		.ops = &clk_rcg2_ops,
1074 	},
1075 };
1076 
1077 static struct freq_tbl ftbl_usb3_phy_aux_clk_src[] = {
1078 	F(1200000, P_XO, 16, 0, 0),
1079 	{ }
1080 };
1081 
1082 static struct clk_rcg2 usb3_phy_aux_clk_src = {
1083 	.cmd_rcgr = 0x1414,
1084 	.hid_width = 5,
1085 	.freq_tbl = ftbl_usb3_phy_aux_clk_src,
1086 	.clkr.hw.init = &(struct clk_init_data){
1087 		.name = "usb3_phy_aux_clk_src",
1088 		.parent_data = &(const struct clk_parent_data){
1089 				.fw_name = "xo",
1090 		},
1091 		.num_parents = 1,
1092 		.ops = &clk_rcg2_ops,
1093 	},
1094 };
1095 
1096 static struct freq_tbl ftbl_usb_hs_system_clk_src[] = {
1097 	F(75000000, P_GPLL0, 8, 0, 0),
1098 	{ }
1099 };
1100 
1101 static struct clk_rcg2 usb_hs_system_clk_src = {
1102 	.cmd_rcgr = 0x0490,
1103 	.hid_width = 5,
1104 	.parent_map = gcc_xo_gpll0_map,
1105 	.freq_tbl = ftbl_usb_hs_system_clk_src,
1106 	.clkr.hw.init = &(struct clk_init_data){
1107 		.name = "usb_hs_system_clk_src",
1108 		.parent_data = gcc_xo_gpll0,
1109 		.num_parents = ARRAY_SIZE(gcc_xo_gpll0),
1110 		.ops = &clk_rcg2_ops,
1111 	},
1112 };
1113 
1114 static struct clk_branch gcc_blsp1_ahb_clk = {
1115 	.halt_reg = 0x05c4,
1116 	.halt_check = BRANCH_HALT_VOTED,
1117 	.clkr = {
1118 		.enable_reg = 0x1484,
1119 		.enable_mask = BIT(17),
1120 		.hw.init = &(struct clk_init_data){
1121 			.name = "gcc_blsp1_ahb_clk",
1122 			.ops = &clk_branch2_ops,
1123 		},
1124 	},
1125 };
1126 
1127 static struct clk_branch gcc_blsp1_qup1_i2c_apps_clk = {
1128 	.halt_reg = 0x0648,
1129 	.clkr = {
1130 		.enable_reg = 0x0648,
1131 		.enable_mask = BIT(0),
1132 		.hw.init = &(struct clk_init_data){
1133 			.name = "gcc_blsp1_qup1_i2c_apps_clk",
1134 			.parent_hws = (const struct clk_hw *[]){ &blsp1_qup1_i2c_apps_clk_src.clkr.hw },
1135 			.num_parents = 1,
1136 			.flags = CLK_SET_RATE_PARENT,
1137 			.ops = &clk_branch2_ops,
1138 		},
1139 	},
1140 };
1141 
1142 static struct clk_branch gcc_blsp1_qup1_spi_apps_clk = {
1143 	.halt_reg = 0x0644,
1144 	.clkr = {
1145 		.enable_reg = 0x0644,
1146 		.enable_mask = BIT(0),
1147 		.hw.init = &(struct clk_init_data){
1148 			.name = "gcc_blsp1_qup1_spi_apps_clk",
1149 			.parent_hws = (const struct clk_hw *[]){ &blsp1_qup1_spi_apps_clk_src.clkr.hw },
1150 			.num_parents = 1,
1151 			.flags = CLK_SET_RATE_PARENT,
1152 			.ops = &clk_branch2_ops,
1153 		},
1154 	},
1155 };
1156 
1157 static struct clk_branch gcc_blsp1_qup2_i2c_apps_clk = {
1158 	.halt_reg = 0x06c8,
1159 	.clkr = {
1160 		.enable_reg = 0x06c8,
1161 		.enable_mask = BIT(0),
1162 		.hw.init = &(struct clk_init_data){
1163 			.name = "gcc_blsp1_qup2_i2c_apps_clk",
1164 			.parent_hws = (const struct clk_hw *[]){ &blsp1_qup2_i2c_apps_clk_src.clkr.hw },
1165 			.num_parents = 1,
1166 			.flags = CLK_SET_RATE_PARENT,
1167 			.ops = &clk_branch2_ops,
1168 		},
1169 	},
1170 };
1171 
1172 static struct clk_branch gcc_blsp1_qup2_spi_apps_clk = {
1173 	.halt_reg = 0x06c4,
1174 	.clkr = {
1175 		.enable_reg = 0x06c4,
1176 		.enable_mask = BIT(0),
1177 		.hw.init = &(struct clk_init_data){
1178 			.name = "gcc_blsp1_qup2_spi_apps_clk",
1179 			.parent_hws = (const struct clk_hw *[]){ &blsp1_qup2_spi_apps_clk_src.clkr.hw },
1180 			.num_parents = 1,
1181 			.flags = CLK_SET_RATE_PARENT,
1182 			.ops = &clk_branch2_ops,
1183 		},
1184 	},
1185 };
1186 
1187 static struct clk_branch gcc_blsp1_qup3_i2c_apps_clk = {
1188 	.halt_reg = 0x0748,
1189 	.clkr = {
1190 		.enable_reg = 0x0748,
1191 		.enable_mask = BIT(0),
1192 		.hw.init = &(struct clk_init_data){
1193 			.name = "gcc_blsp1_qup3_i2c_apps_clk",
1194 			.parent_hws = (const struct clk_hw *[]){ &blsp1_qup3_i2c_apps_clk_src.clkr.hw },
1195 			.num_parents = 1,
1196 			.flags = CLK_SET_RATE_PARENT,
1197 			.ops = &clk_branch2_ops,
1198 		},
1199 	},
1200 };
1201 
1202 static struct clk_branch gcc_blsp1_qup3_spi_apps_clk = {
1203 	.halt_reg = 0x0744,
1204 	.clkr = {
1205 		.enable_reg = 0x0744,
1206 		.enable_mask = BIT(0),
1207 		.hw.init = &(struct clk_init_data){
1208 			.name = "gcc_blsp1_qup3_spi_apps_clk",
1209 			.parent_hws = (const struct clk_hw *[]){ &blsp1_qup3_spi_apps_clk_src.clkr.hw },
1210 			.num_parents = 1,
1211 			.flags = CLK_SET_RATE_PARENT,
1212 			.ops = &clk_branch2_ops,
1213 		},
1214 	},
1215 };
1216 
1217 static struct clk_branch gcc_blsp1_qup4_i2c_apps_clk = {
1218 	.halt_reg = 0x07c8,
1219 	.clkr = {
1220 		.enable_reg = 0x07c8,
1221 		.enable_mask = BIT(0),
1222 		.hw.init = &(struct clk_init_data){
1223 			.name = "gcc_blsp1_qup4_i2c_apps_clk",
1224 			.parent_hws = (const struct clk_hw *[]){ &blsp1_qup4_i2c_apps_clk_src.clkr.hw },
1225 			.num_parents = 1,
1226 			.flags = CLK_SET_RATE_PARENT,
1227 			.ops = &clk_branch2_ops,
1228 		},
1229 	},
1230 };
1231 
1232 static struct clk_branch gcc_blsp1_qup4_spi_apps_clk = {
1233 	.halt_reg = 0x07c4,
1234 	.clkr = {
1235 		.enable_reg = 0x07c4,
1236 		.enable_mask = BIT(0),
1237 		.hw.init = &(struct clk_init_data){
1238 			.name = "gcc_blsp1_qup4_spi_apps_clk",
1239 			.parent_hws = (const struct clk_hw *[]){ &blsp1_qup4_spi_apps_clk_src.clkr.hw },
1240 			.num_parents = 1,
1241 			.flags = CLK_SET_RATE_PARENT,
1242 			.ops = &clk_branch2_ops,
1243 		},
1244 	},
1245 };
1246 
1247 static struct clk_branch gcc_blsp1_qup5_i2c_apps_clk = {
1248 	.halt_reg = 0x0848,
1249 	.clkr = {
1250 		.enable_reg = 0x0848,
1251 		.enable_mask = BIT(0),
1252 		.hw.init = &(struct clk_init_data){
1253 			.name = "gcc_blsp1_qup5_i2c_apps_clk",
1254 			.parent_hws = (const struct clk_hw *[]){ &blsp1_qup5_i2c_apps_clk_src.clkr.hw },
1255 			.num_parents = 1,
1256 			.flags = CLK_SET_RATE_PARENT,
1257 			.ops = &clk_branch2_ops,
1258 		},
1259 	},
1260 };
1261 
1262 static struct clk_branch gcc_blsp1_qup5_spi_apps_clk = {
1263 	.halt_reg = 0x0844,
1264 	.clkr = {
1265 		.enable_reg = 0x0844,
1266 		.enable_mask = BIT(0),
1267 		.hw.init = &(struct clk_init_data){
1268 			.name = "gcc_blsp1_qup5_spi_apps_clk",
1269 			.parent_hws = (const struct clk_hw *[]){ &blsp1_qup5_spi_apps_clk_src.clkr.hw },
1270 			.num_parents = 1,
1271 			.flags = CLK_SET_RATE_PARENT,
1272 			.ops = &clk_branch2_ops,
1273 		},
1274 	},
1275 };
1276 
1277 static struct clk_branch gcc_blsp1_qup6_i2c_apps_clk = {
1278 	.halt_reg = 0x08c8,
1279 	.clkr = {
1280 		.enable_reg = 0x08c8,
1281 		.enable_mask = BIT(0),
1282 		.hw.init = &(struct clk_init_data){
1283 			.name = "gcc_blsp1_qup6_i2c_apps_clk",
1284 			.parent_hws = (const struct clk_hw *[]){ &blsp1_qup6_i2c_apps_clk_src.clkr.hw },
1285 			.num_parents = 1,
1286 			.flags = CLK_SET_RATE_PARENT,
1287 			.ops = &clk_branch2_ops,
1288 		},
1289 	},
1290 };
1291 
1292 static struct clk_branch gcc_blsp1_qup6_spi_apps_clk = {
1293 	.halt_reg = 0x08c4,
1294 	.clkr = {
1295 		.enable_reg = 0x08c4,
1296 		.enable_mask = BIT(0),
1297 		.hw.init = &(struct clk_init_data){
1298 			.name = "gcc_blsp1_qup6_spi_apps_clk",
1299 			.parent_hws = (const struct clk_hw *[]){ &blsp1_qup6_spi_apps_clk_src.clkr.hw },
1300 			.num_parents = 1,
1301 			.flags = CLK_SET_RATE_PARENT,
1302 			.ops = &clk_branch2_ops,
1303 		},
1304 	},
1305 };
1306 
1307 static struct clk_branch gcc_blsp1_uart1_apps_clk = {
1308 	.halt_reg = 0x0684,
1309 	.clkr = {
1310 		.enable_reg = 0x0684,
1311 		.enable_mask = BIT(0),
1312 		.hw.init = &(struct clk_init_data){
1313 			.name = "gcc_blsp1_uart1_apps_clk",
1314 			.parent_hws = (const struct clk_hw *[]){ &blsp1_uart1_apps_clk_src.clkr.hw },
1315 			.num_parents = 1,
1316 			.flags = CLK_SET_RATE_PARENT,
1317 			.ops = &clk_branch2_ops,
1318 		},
1319 	},
1320 };
1321 
1322 static struct clk_branch gcc_blsp1_uart2_apps_clk = {
1323 	.halt_reg = 0x0704,
1324 	.clkr = {
1325 		.enable_reg = 0x0704,
1326 		.enable_mask = BIT(0),
1327 		.hw.init = &(struct clk_init_data){
1328 			.name = "gcc_blsp1_uart2_apps_clk",
1329 			.parent_hws = (const struct clk_hw *[]){ &blsp1_uart2_apps_clk_src.clkr.hw },
1330 			.num_parents = 1,
1331 			.flags = CLK_SET_RATE_PARENT,
1332 			.ops = &clk_branch2_ops,
1333 		},
1334 	},
1335 };
1336 
1337 static struct clk_branch gcc_blsp1_uart3_apps_clk = {
1338 	.halt_reg = 0x0784,
1339 	.clkr = {
1340 		.enable_reg = 0x0784,
1341 		.enable_mask = BIT(0),
1342 		.hw.init = &(struct clk_init_data){
1343 			.name = "gcc_blsp1_uart3_apps_clk",
1344 			.parent_hws = (const struct clk_hw *[]){ &blsp1_uart3_apps_clk_src.clkr.hw },
1345 			.num_parents = 1,
1346 			.flags = CLK_SET_RATE_PARENT,
1347 			.ops = &clk_branch2_ops,
1348 		},
1349 	},
1350 };
1351 
1352 static struct clk_branch gcc_blsp1_uart4_apps_clk = {
1353 	.halt_reg = 0x0804,
1354 	.clkr = {
1355 		.enable_reg = 0x0804,
1356 		.enable_mask = BIT(0),
1357 		.hw.init = &(struct clk_init_data){
1358 			.name = "gcc_blsp1_uart4_apps_clk",
1359 			.parent_hws = (const struct clk_hw *[]){ &blsp1_uart4_apps_clk_src.clkr.hw },
1360 			.num_parents = 1,
1361 			.flags = CLK_SET_RATE_PARENT,
1362 			.ops = &clk_branch2_ops,
1363 		},
1364 	},
1365 };
1366 
1367 static struct clk_branch gcc_blsp1_uart5_apps_clk = {
1368 	.halt_reg = 0x0884,
1369 	.clkr = {
1370 		.enable_reg = 0x0884,
1371 		.enable_mask = BIT(0),
1372 		.hw.init = &(struct clk_init_data){
1373 			.name = "gcc_blsp1_uart5_apps_clk",
1374 			.parent_hws = (const struct clk_hw *[]){ &blsp1_uart5_apps_clk_src.clkr.hw },
1375 			.num_parents = 1,
1376 			.flags = CLK_SET_RATE_PARENT,
1377 			.ops = &clk_branch2_ops,
1378 		},
1379 	},
1380 };
1381 
1382 static struct clk_branch gcc_blsp1_uart6_apps_clk = {
1383 	.halt_reg = 0x0904,
1384 	.clkr = {
1385 		.enable_reg = 0x0904,
1386 		.enable_mask = BIT(0),
1387 		.hw.init = &(struct clk_init_data){
1388 			.name = "gcc_blsp1_uart6_apps_clk",
1389 			.parent_hws = (const struct clk_hw *[]){ &blsp1_uart6_apps_clk_src.clkr.hw },
1390 			.num_parents = 1,
1391 			.flags = CLK_SET_RATE_PARENT,
1392 			.ops = &clk_branch2_ops,
1393 		},
1394 	},
1395 };
1396 
1397 static struct clk_branch gcc_blsp2_ahb_clk = {
1398 	.halt_reg = 0x0944,
1399 	.halt_check = BRANCH_HALT_VOTED,
1400 	.clkr = {
1401 		.enable_reg = 0x1484,
1402 		.enable_mask = BIT(15),
1403 		.hw.init = &(struct clk_init_data){
1404 			.name = "gcc_blsp2_ahb_clk",
1405 			.ops = &clk_branch2_ops,
1406 		},
1407 	},
1408 };
1409 
1410 static struct clk_branch gcc_blsp2_qup1_i2c_apps_clk = {
1411 	.halt_reg = 0x0988,
1412 	.clkr = {
1413 		.enable_reg = 0x0988,
1414 		.enable_mask = BIT(0),
1415 		.hw.init = &(struct clk_init_data){
1416 			.name = "gcc_blsp2_qup1_i2c_apps_clk",
1417 			.parent_hws = (const struct clk_hw *[]){ &blsp2_qup1_i2c_apps_clk_src.clkr.hw },
1418 			.num_parents = 1,
1419 			.flags = CLK_SET_RATE_PARENT,
1420 			.ops = &clk_branch2_ops,
1421 		},
1422 	},
1423 };
1424 
1425 static struct clk_branch gcc_blsp2_qup1_spi_apps_clk = {
1426 	.halt_reg = 0x0984,
1427 	.clkr = {
1428 		.enable_reg = 0x0984,
1429 		.enable_mask = BIT(0),
1430 		.hw.init = &(struct clk_init_data){
1431 			.name = "gcc_blsp2_qup1_spi_apps_clk",
1432 			.parent_hws = (const struct clk_hw *[]){ &blsp2_qup1_spi_apps_clk_src.clkr.hw },
1433 			.num_parents = 1,
1434 			.flags = CLK_SET_RATE_PARENT,
1435 			.ops = &clk_branch2_ops,
1436 		},
1437 	},
1438 };
1439 
1440 static struct clk_branch gcc_blsp2_qup2_i2c_apps_clk = {
1441 	.halt_reg = 0x0a08,
1442 	.clkr = {
1443 		.enable_reg = 0x0a08,
1444 		.enable_mask = BIT(0),
1445 		.hw.init = &(struct clk_init_data){
1446 			.name = "gcc_blsp2_qup2_i2c_apps_clk",
1447 			.parent_hws = (const struct clk_hw *[]){ &blsp2_qup2_i2c_apps_clk_src.clkr.hw },
1448 			.num_parents = 1,
1449 			.flags = CLK_SET_RATE_PARENT,
1450 			.ops = &clk_branch2_ops,
1451 		},
1452 	},
1453 };
1454 
1455 static struct clk_branch gcc_blsp2_qup2_spi_apps_clk = {
1456 	.halt_reg = 0x0a04,
1457 	.clkr = {
1458 		.enable_reg = 0x0a04,
1459 		.enable_mask = BIT(0),
1460 		.hw.init = &(struct clk_init_data){
1461 			.name = "gcc_blsp2_qup2_spi_apps_clk",
1462 			.parent_hws = (const struct clk_hw *[]){ &blsp2_qup2_spi_apps_clk_src.clkr.hw },
1463 			.num_parents = 1,
1464 			.flags = CLK_SET_RATE_PARENT,
1465 			.ops = &clk_branch2_ops,
1466 		},
1467 	},
1468 };
1469 
1470 static struct clk_branch gcc_blsp2_qup3_i2c_apps_clk = {
1471 	.halt_reg = 0x0a88,
1472 	.clkr = {
1473 		.enable_reg = 0x0a88,
1474 		.enable_mask = BIT(0),
1475 		.hw.init = &(struct clk_init_data){
1476 			.name = "gcc_blsp2_qup3_i2c_apps_clk",
1477 			.parent_hws = (const struct clk_hw *[]){ &blsp2_qup3_i2c_apps_clk_src.clkr.hw },
1478 			.num_parents = 1,
1479 			.flags = CLK_SET_RATE_PARENT,
1480 			.ops = &clk_branch2_ops,
1481 		},
1482 	},
1483 };
1484 
1485 static struct clk_branch gcc_blsp2_qup3_spi_apps_clk = {
1486 	.halt_reg = 0x0a84,
1487 	.clkr = {
1488 		.enable_reg = 0x0a84,
1489 		.enable_mask = BIT(0),
1490 		.hw.init = &(struct clk_init_data){
1491 			.name = "gcc_blsp2_qup3_spi_apps_clk",
1492 			.parent_hws = (const struct clk_hw *[]){ &blsp2_qup3_spi_apps_clk_src.clkr.hw },
1493 			.num_parents = 1,
1494 			.flags = CLK_SET_RATE_PARENT,
1495 			.ops = &clk_branch2_ops,
1496 		},
1497 	},
1498 };
1499 
1500 static struct clk_branch gcc_blsp2_qup4_i2c_apps_clk = {
1501 	.halt_reg = 0x0b08,
1502 	.clkr = {
1503 		.enable_reg = 0x0b08,
1504 		.enable_mask = BIT(0),
1505 		.hw.init = &(struct clk_init_data){
1506 			.name = "gcc_blsp2_qup4_i2c_apps_clk",
1507 			.parent_hws = (const struct clk_hw *[]){ &blsp2_qup4_i2c_apps_clk_src.clkr.hw },
1508 			.num_parents = 1,
1509 			.flags = CLK_SET_RATE_PARENT,
1510 			.ops = &clk_branch2_ops,
1511 		},
1512 	},
1513 };
1514 
1515 static struct clk_branch gcc_blsp2_qup4_spi_apps_clk = {
1516 	.halt_reg = 0x0b04,
1517 	.clkr = {
1518 		.enable_reg = 0x0b04,
1519 		.enable_mask = BIT(0),
1520 		.hw.init = &(struct clk_init_data){
1521 			.name = "gcc_blsp2_qup4_spi_apps_clk",
1522 			.parent_hws = (const struct clk_hw *[]){ &blsp2_qup4_spi_apps_clk_src.clkr.hw },
1523 			.num_parents = 1,
1524 			.flags = CLK_SET_RATE_PARENT,
1525 			.ops = &clk_branch2_ops,
1526 		},
1527 	},
1528 };
1529 
1530 static struct clk_branch gcc_blsp2_qup5_i2c_apps_clk = {
1531 	.halt_reg = 0x0b88,
1532 	.clkr = {
1533 		.enable_reg = 0x0b88,
1534 		.enable_mask = BIT(0),
1535 		.hw.init = &(struct clk_init_data){
1536 			.name = "gcc_blsp2_qup5_i2c_apps_clk",
1537 			.parent_hws = (const struct clk_hw *[]){ &blsp2_qup5_i2c_apps_clk_src.clkr.hw },
1538 			.num_parents = 1,
1539 			.flags = CLK_SET_RATE_PARENT,
1540 			.ops = &clk_branch2_ops,
1541 		},
1542 	},
1543 };
1544 
1545 static struct clk_branch gcc_blsp2_qup5_spi_apps_clk = {
1546 	.halt_reg = 0x0b84,
1547 	.clkr = {
1548 		.enable_reg = 0x0b84,
1549 		.enable_mask = BIT(0),
1550 		.hw.init = &(struct clk_init_data){
1551 			.name = "gcc_blsp2_qup5_spi_apps_clk",
1552 			.parent_hws = (const struct clk_hw *[]){ &blsp2_qup5_spi_apps_clk_src.clkr.hw },
1553 			.num_parents = 1,
1554 			.flags = CLK_SET_RATE_PARENT,
1555 			.ops = &clk_branch2_ops,
1556 		},
1557 	},
1558 };
1559 
1560 static struct clk_branch gcc_blsp2_qup6_i2c_apps_clk = {
1561 	.halt_reg = 0x0c08,
1562 	.clkr = {
1563 		.enable_reg = 0x0c08,
1564 		.enable_mask = BIT(0),
1565 		.hw.init = &(struct clk_init_data){
1566 			.name = "gcc_blsp2_qup6_i2c_apps_clk",
1567 			.parent_hws = (const struct clk_hw *[]){ &blsp2_qup6_i2c_apps_clk_src.clkr.hw },
1568 			.num_parents = 1,
1569 			.flags = CLK_SET_RATE_PARENT,
1570 			.ops = &clk_branch2_ops,
1571 		},
1572 	},
1573 };
1574 
1575 static struct clk_branch gcc_blsp2_qup6_spi_apps_clk = {
1576 	.halt_reg = 0x0c04,
1577 	.clkr = {
1578 		.enable_reg = 0x0c04,
1579 		.enable_mask = BIT(0),
1580 		.hw.init = &(struct clk_init_data){
1581 			.name = "gcc_blsp2_qup6_spi_apps_clk",
1582 			.parent_hws = (const struct clk_hw *[]){ &blsp2_qup6_spi_apps_clk_src.clkr.hw },
1583 			.num_parents = 1,
1584 			.flags = CLK_SET_RATE_PARENT,
1585 			.ops = &clk_branch2_ops,
1586 		},
1587 	},
1588 };
1589 
1590 static struct clk_branch gcc_blsp2_uart1_apps_clk = {
1591 	.halt_reg = 0x09c4,
1592 	.clkr = {
1593 		.enable_reg = 0x09c4,
1594 		.enable_mask = BIT(0),
1595 		.hw.init = &(struct clk_init_data){
1596 			.name = "gcc_blsp2_uart1_apps_clk",
1597 			.parent_hws = (const struct clk_hw *[]){ &blsp2_uart1_apps_clk_src.clkr.hw },
1598 			.num_parents = 1,
1599 			.flags = CLK_SET_RATE_PARENT,
1600 			.ops = &clk_branch2_ops,
1601 		},
1602 	},
1603 };
1604 
1605 static struct clk_branch gcc_blsp2_uart2_apps_clk = {
1606 	.halt_reg = 0x0a44,
1607 	.clkr = {
1608 		.enable_reg = 0x0a44,
1609 		.enable_mask = BIT(0),
1610 		.hw.init = &(struct clk_init_data){
1611 			.name = "gcc_blsp2_uart2_apps_clk",
1612 			.parent_hws = (const struct clk_hw *[]){ &blsp2_uart2_apps_clk_src.clkr.hw },
1613 			.num_parents = 1,
1614 			.flags = CLK_SET_RATE_PARENT,
1615 			.ops = &clk_branch2_ops,
1616 		},
1617 	},
1618 };
1619 
1620 static struct clk_branch gcc_blsp2_uart3_apps_clk = {
1621 	.halt_reg = 0x0ac4,
1622 	.clkr = {
1623 		.enable_reg = 0x0ac4,
1624 		.enable_mask = BIT(0),
1625 		.hw.init = &(struct clk_init_data){
1626 			.name = "gcc_blsp2_uart3_apps_clk",
1627 			.parent_hws = (const struct clk_hw *[]){ &blsp2_uart3_apps_clk_src.clkr.hw },
1628 			.num_parents = 1,
1629 			.flags = CLK_SET_RATE_PARENT,
1630 			.ops = &clk_branch2_ops,
1631 		},
1632 	},
1633 };
1634 
1635 static struct clk_branch gcc_blsp2_uart4_apps_clk = {
1636 	.halt_reg = 0x0b44,
1637 	.clkr = {
1638 		.enable_reg = 0x0b44,
1639 		.enable_mask = BIT(0),
1640 		.hw.init = &(struct clk_init_data){
1641 			.name = "gcc_blsp2_uart4_apps_clk",
1642 			.parent_hws = (const struct clk_hw *[]){ &blsp2_uart4_apps_clk_src.clkr.hw },
1643 			.num_parents = 1,
1644 			.flags = CLK_SET_RATE_PARENT,
1645 			.ops = &clk_branch2_ops,
1646 		},
1647 	},
1648 };
1649 
1650 static struct clk_branch gcc_blsp2_uart5_apps_clk = {
1651 	.halt_reg = 0x0bc4,
1652 	.clkr = {
1653 		.enable_reg = 0x0bc4,
1654 		.enable_mask = BIT(0),
1655 		.hw.init = &(struct clk_init_data){
1656 			.name = "gcc_blsp2_uart5_apps_clk",
1657 			.parent_hws = (const struct clk_hw *[]){ &blsp2_uart5_apps_clk_src.clkr.hw },
1658 			.num_parents = 1,
1659 			.flags = CLK_SET_RATE_PARENT,
1660 			.ops = &clk_branch2_ops,
1661 		},
1662 	},
1663 };
1664 
1665 static struct clk_branch gcc_blsp2_uart6_apps_clk = {
1666 	.halt_reg = 0x0c44,
1667 	.clkr = {
1668 		.enable_reg = 0x0c44,
1669 		.enable_mask = BIT(0),
1670 		.hw.init = &(struct clk_init_data){
1671 			.name = "gcc_blsp2_uart6_apps_clk",
1672 			.parent_hws = (const struct clk_hw *[]){ &blsp2_uart6_apps_clk_src.clkr.hw },
1673 			.num_parents = 1,
1674 			.flags = CLK_SET_RATE_PARENT,
1675 			.ops = &clk_branch2_ops,
1676 		},
1677 	},
1678 };
1679 
1680 static struct clk_branch gcc_gp1_clk = {
1681 	.halt_reg = 0x1900,
1682 	.clkr = {
1683 		.enable_reg = 0x1900,
1684 		.enable_mask = BIT(0),
1685 		.hw.init = &(struct clk_init_data){
1686 			.name = "gcc_gp1_clk",
1687 			.parent_hws = (const struct clk_hw *[]){ &gp1_clk_src.clkr.hw },
1688 			.num_parents = 1,
1689 			.flags = CLK_SET_RATE_PARENT,
1690 			.ops = &clk_branch2_ops,
1691 		},
1692 	},
1693 };
1694 
1695 static struct clk_branch gcc_gp2_clk = {
1696 	.halt_reg = 0x1940,
1697 	.clkr = {
1698 		.enable_reg = 0x1940,
1699 		.enable_mask = BIT(0),
1700 		.hw.init = &(struct clk_init_data){
1701 			.name = "gcc_gp2_clk",
1702 			.parent_hws = (const struct clk_hw *[]){ &gp2_clk_src.clkr.hw },
1703 			.num_parents = 1,
1704 			.flags = CLK_SET_RATE_PARENT,
1705 			.ops = &clk_branch2_ops,
1706 		},
1707 	},
1708 };
1709 
1710 static struct clk_branch gcc_gp3_clk = {
1711 	.halt_reg = 0x1980,
1712 	.clkr = {
1713 		.enable_reg = 0x1980,
1714 		.enable_mask = BIT(0),
1715 		.hw.init = &(struct clk_init_data){
1716 			.name = "gcc_gp3_clk",
1717 			.parent_hws = (const struct clk_hw *[]){ &gp3_clk_src.clkr.hw },
1718 			.num_parents = 1,
1719 			.flags = CLK_SET_RATE_PARENT,
1720 			.ops = &clk_branch2_ops,
1721 		},
1722 	},
1723 };
1724 
1725 static struct clk_branch gcc_lpass_q6_axi_clk = {
1726 	.halt_reg = 0x0280,
1727 	.clkr = {
1728 		.enable_reg = 0x0280,
1729 		.enable_mask = BIT(0),
1730 		.hw.init = &(struct clk_init_data){
1731 			.name = "gcc_lpass_q6_axi_clk",
1732 			.ops = &clk_branch2_ops,
1733 		},
1734 	},
1735 };
1736 
1737 static struct clk_branch gcc_mss_q6_bimc_axi_clk = {
1738 	.halt_reg = 0x0284,
1739 	.clkr = {
1740 		.enable_reg = 0x0284,
1741 		.enable_mask = BIT(0),
1742 		.hw.init = &(struct clk_init_data){
1743 			.name = "gcc_mss_q6_bimc_axi_clk",
1744 			.ops = &clk_branch2_ops,
1745 		},
1746 	},
1747 };
1748 
1749 static struct clk_branch gcc_pcie_0_aux_clk = {
1750 	.halt_reg = 0x1ad4,
1751 	.clkr = {
1752 		.enable_reg = 0x1ad4,
1753 		.enable_mask = BIT(0),
1754 		.hw.init = &(struct clk_init_data){
1755 			.name = "gcc_pcie_0_aux_clk",
1756 			.parent_hws = (const struct clk_hw *[]){ &pcie_0_aux_clk_src.clkr.hw },
1757 			.num_parents = 1,
1758 			.flags = CLK_SET_RATE_PARENT,
1759 			.ops = &clk_branch2_ops,
1760 		},
1761 	},
1762 };
1763 
1764 static struct clk_branch gcc_pcie_0_cfg_ahb_clk = {
1765 	.halt_reg = 0x1ad0,
1766 	.clkr = {
1767 		.enable_reg = 0x1ad0,
1768 		.enable_mask = BIT(0),
1769 		.hw.init = &(struct clk_init_data){
1770 			.name = "gcc_pcie_0_cfg_ahb_clk",
1771 			.ops = &clk_branch2_ops,
1772 		},
1773 	},
1774 };
1775 
1776 static struct clk_branch gcc_pcie_0_mstr_axi_clk = {
1777 	.halt_reg = 0x1acc,
1778 	.clkr = {
1779 		.enable_reg = 0x1acc,
1780 		.enable_mask = BIT(0),
1781 		.hw.init = &(struct clk_init_data){
1782 			.name = "gcc_pcie_0_mstr_axi_clk",
1783 			.ops = &clk_branch2_ops,
1784 		},
1785 	},
1786 };
1787 
1788 static struct clk_branch gcc_pcie_0_pipe_clk = {
1789 	.halt_reg = 0x1ad8,
1790 	.halt_check = BRANCH_HALT_DELAY,
1791 	.clkr = {
1792 		.enable_reg = 0x1ad8,
1793 		.enable_mask = BIT(0),
1794 		.hw.init = &(struct clk_init_data){
1795 			.name = "gcc_pcie_0_pipe_clk",
1796 			.parent_hws = (const struct clk_hw *[]){ &pcie_0_pipe_clk_src.clkr.hw },
1797 			.num_parents = 1,
1798 			.flags = CLK_SET_RATE_PARENT,
1799 			.ops = &clk_branch2_ops,
1800 		},
1801 	},
1802 };
1803 
1804 static struct clk_branch gcc_pcie_0_slv_axi_clk = {
1805 	.halt_reg = 0x1ac8,
1806 	.halt_check = BRANCH_HALT_DELAY,
1807 	.clkr = {
1808 		.enable_reg = 0x1ac8,
1809 		.enable_mask = BIT(0),
1810 		.hw.init = &(struct clk_init_data){
1811 			.name = "gcc_pcie_0_slv_axi_clk",
1812 			.ops = &clk_branch2_ops,
1813 		},
1814 	},
1815 };
1816 
1817 static struct clk_branch gcc_pcie_1_aux_clk = {
1818 	.halt_reg = 0x1b54,
1819 	.clkr = {
1820 		.enable_reg = 0x1b54,
1821 		.enable_mask = BIT(0),
1822 		.hw.init = &(struct clk_init_data){
1823 			.name = "gcc_pcie_1_aux_clk",
1824 			.parent_hws = (const struct clk_hw *[]){ &pcie_1_aux_clk_src.clkr.hw },
1825 			.num_parents = 1,
1826 			.flags = CLK_SET_RATE_PARENT,
1827 			.ops = &clk_branch2_ops,
1828 		},
1829 	},
1830 };
1831 
1832 static struct clk_branch gcc_pcie_1_cfg_ahb_clk = {
1833 	.halt_reg = 0x1b54,
1834 	.clkr = {
1835 		.enable_reg = 0x1b54,
1836 		.enable_mask = BIT(0),
1837 		.hw.init = &(struct clk_init_data){
1838 			.name = "gcc_pcie_1_cfg_ahb_clk",
1839 			.ops = &clk_branch2_ops,
1840 		},
1841 	},
1842 };
1843 
1844 static struct clk_branch gcc_pcie_1_mstr_axi_clk = {
1845 	.halt_reg = 0x1b50,
1846 	.clkr = {
1847 		.enable_reg = 0x1b50,
1848 		.enable_mask = BIT(0),
1849 		.hw.init = &(struct clk_init_data){
1850 			.name = "gcc_pcie_1_mstr_axi_clk",
1851 			.ops = &clk_branch2_ops,
1852 		},
1853 	},
1854 };
1855 
1856 static struct clk_branch gcc_pcie_1_pipe_clk = {
1857 	.halt_reg = 0x1b58,
1858 	.halt_check = BRANCH_HALT_DELAY,
1859 	.clkr = {
1860 		.enable_reg = 0x1b58,
1861 		.enable_mask = BIT(0),
1862 		.hw.init = &(struct clk_init_data){
1863 			.name = "gcc_pcie_1_pipe_clk",
1864 			.parent_hws = (const struct clk_hw *[]){ &pcie_1_pipe_clk_src.clkr.hw },
1865 			.num_parents = 1,
1866 			.flags = CLK_SET_RATE_PARENT,
1867 			.ops = &clk_branch2_ops,
1868 		},
1869 	},
1870 };
1871 
1872 static struct clk_branch gcc_pcie_1_slv_axi_clk = {
1873 	.halt_reg = 0x1b48,
1874 	.clkr = {
1875 		.enable_reg = 0x1b48,
1876 		.enable_mask = BIT(0),
1877 		.hw.init = &(struct clk_init_data){
1878 			.name = "gcc_pcie_1_slv_axi_clk",
1879 			.ops = &clk_branch2_ops,
1880 		},
1881 	},
1882 };
1883 
1884 static struct clk_branch gcc_pdm2_clk = {
1885 	.halt_reg = 0x0ccc,
1886 	.clkr = {
1887 		.enable_reg = 0x0ccc,
1888 		.enable_mask = BIT(0),
1889 		.hw.init = &(struct clk_init_data){
1890 			.name = "gcc_pdm2_clk",
1891 			.parent_hws = (const struct clk_hw *[]){ &pdm2_clk_src.clkr.hw },
1892 			.num_parents = 1,
1893 			.flags = CLK_SET_RATE_PARENT,
1894 			.ops = &clk_branch2_ops,
1895 		},
1896 	},
1897 };
1898 
1899 static struct clk_branch gcc_pdm_ahb_clk = {
1900 	.halt_reg = 0x0cc4,
1901 	.clkr = {
1902 		.enable_reg = 0x0cc4,
1903 		.enable_mask = BIT(0),
1904 		.hw.init = &(struct clk_init_data){
1905 			.name = "gcc_pdm_ahb_clk",
1906 			.ops = &clk_branch2_ops,
1907 		},
1908 	},
1909 };
1910 
1911 static struct clk_branch gcc_sdcc1_apps_clk = {
1912 	.halt_reg = 0x04c4,
1913 	.clkr = {
1914 		.enable_reg = 0x04c4,
1915 		.enable_mask = BIT(0),
1916 		.hw.init = &(struct clk_init_data){
1917 			.name = "gcc_sdcc1_apps_clk",
1918 			.parent_hws = (const struct clk_hw *[]){ &sdcc1_apps_clk_src.clkr.hw },
1919 			.num_parents = 1,
1920 			.flags = CLK_SET_RATE_PARENT,
1921 			.ops = &clk_branch2_ops,
1922 		},
1923 	},
1924 };
1925 
1926 static struct clk_branch gcc_sdcc1_ahb_clk = {
1927 	.halt_reg = 0x04c8,
1928 	.clkr = {
1929 		.enable_reg = 0x04c8,
1930 		.enable_mask = BIT(0),
1931 		.hw.init = &(struct clk_init_data){
1932 			.name = "gcc_sdcc1_ahb_clk",
1933 			.ops = &clk_branch2_ops,
1934 		},
1935 	},
1936 };
1937 
1938 static struct clk_branch gcc_sdcc2_ahb_clk = {
1939 	.halt_reg = 0x0508,
1940 	.clkr = {
1941 		.enable_reg = 0x0508,
1942 		.enable_mask = BIT(0),
1943 		.hw.init = &(struct clk_init_data){
1944 			.name = "gcc_sdcc2_ahb_clk",
1945 			.ops = &clk_branch2_ops,
1946 		},
1947 	},
1948 };
1949 
1950 static struct clk_branch gcc_sdcc2_apps_clk = {
1951 	.halt_reg = 0x0504,
1952 	.clkr = {
1953 		.enable_reg = 0x0504,
1954 		.enable_mask = BIT(0),
1955 		.hw.init = &(struct clk_init_data){
1956 			.name = "gcc_sdcc2_apps_clk",
1957 			.parent_hws = (const struct clk_hw *[]){ &sdcc2_apps_clk_src.clkr.hw },
1958 			.num_parents = 1,
1959 			.flags = CLK_SET_RATE_PARENT,
1960 			.ops = &clk_branch2_ops,
1961 		},
1962 	},
1963 };
1964 
1965 static struct clk_branch gcc_sdcc3_ahb_clk = {
1966 	.halt_reg = 0x0548,
1967 	.clkr = {
1968 		.enable_reg = 0x0548,
1969 		.enable_mask = BIT(0),
1970 		.hw.init = &(struct clk_init_data){
1971 			.name = "gcc_sdcc3_ahb_clk",
1972 			.ops = &clk_branch2_ops,
1973 		},
1974 	},
1975 };
1976 
1977 static struct clk_branch gcc_sdcc3_apps_clk = {
1978 	.halt_reg = 0x0544,
1979 	.clkr = {
1980 		.enable_reg = 0x0544,
1981 		.enable_mask = BIT(0),
1982 		.hw.init = &(struct clk_init_data){
1983 			.name = "gcc_sdcc3_apps_clk",
1984 			.parent_hws = (const struct clk_hw *[]){ &sdcc3_apps_clk_src.clkr.hw },
1985 			.num_parents = 1,
1986 			.flags = CLK_SET_RATE_PARENT,
1987 			.ops = &clk_branch2_ops,
1988 		},
1989 	},
1990 };
1991 
1992 static struct clk_branch gcc_sdcc4_ahb_clk = {
1993 	.halt_reg = 0x0588,
1994 	.clkr = {
1995 		.enable_reg = 0x0588,
1996 		.enable_mask = BIT(0),
1997 		.hw.init = &(struct clk_init_data){
1998 			.name = "gcc_sdcc4_ahb_clk",
1999 			.ops = &clk_branch2_ops,
2000 		},
2001 	},
2002 };
2003 
2004 static struct clk_branch gcc_sdcc4_apps_clk = {
2005 	.halt_reg = 0x0584,
2006 	.clkr = {
2007 		.enable_reg = 0x0584,
2008 		.enable_mask = BIT(0),
2009 		.hw.init = &(struct clk_init_data){
2010 			.name = "gcc_sdcc4_apps_clk",
2011 			.parent_hws = (const struct clk_hw *[]){ &sdcc4_apps_clk_src.clkr.hw },
2012 			.num_parents = 1,
2013 			.flags = CLK_SET_RATE_PARENT,
2014 			.ops = &clk_branch2_ops,
2015 		},
2016 	},
2017 };
2018 
2019 static struct clk_branch gcc_sys_noc_ufs_axi_clk = {
2020 	.halt_reg = 0x1d7c,
2021 	.clkr = {
2022 		.enable_reg = 0x1d7c,
2023 		.enable_mask = BIT(0),
2024 		.hw.init = &(struct clk_init_data){
2025 			.name = "gcc_sys_noc_ufs_axi_clk",
2026 			.parent_hws = (const struct clk_hw *[]){ &ufs_axi_clk_src.clkr.hw },
2027 			.num_parents = 1,
2028 			.flags = CLK_SET_RATE_PARENT,
2029 			.ops = &clk_branch2_ops,
2030 		},
2031 	},
2032 };
2033 
2034 static struct clk_branch gcc_sys_noc_usb3_axi_clk = {
2035 	.halt_reg = 0x03fc,
2036 	.clkr = {
2037 		.enable_reg = 0x03fc,
2038 		.enable_mask = BIT(0),
2039 		.hw.init = &(struct clk_init_data){
2040 			.name = "gcc_sys_noc_usb3_axi_clk",
2041 			.parent_hws = (const struct clk_hw *[]){ &usb30_master_clk_src.clkr.hw },
2042 			.num_parents = 1,
2043 			.flags = CLK_SET_RATE_PARENT,
2044 			.ops = &clk_branch2_ops,
2045 		},
2046 	},
2047 };
2048 
2049 static struct clk_branch gcc_tsif_ahb_clk = {
2050 	.halt_reg = 0x0d84,
2051 	.clkr = {
2052 		.enable_reg = 0x0d84,
2053 		.enable_mask = BIT(0),
2054 		.hw.init = &(struct clk_init_data){
2055 			.name = "gcc_tsif_ahb_clk",
2056 			.ops = &clk_branch2_ops,
2057 		},
2058 	},
2059 };
2060 
2061 static struct clk_branch gcc_tsif_ref_clk = {
2062 	.halt_reg = 0x0d88,
2063 	.clkr = {
2064 		.enable_reg = 0x0d88,
2065 		.enable_mask = BIT(0),
2066 		.hw.init = &(struct clk_init_data){
2067 			.name = "gcc_tsif_ref_clk",
2068 			.parent_hws = (const struct clk_hw *[]){ &tsif_ref_clk_src.clkr.hw },
2069 			.num_parents = 1,
2070 			.flags = CLK_SET_RATE_PARENT,
2071 			.ops = &clk_branch2_ops,
2072 		},
2073 	},
2074 };
2075 
2076 static struct clk_branch gcc_ufs_ahb_clk = {
2077 	.halt_reg = 0x1d4c,
2078 	.clkr = {
2079 		.enable_reg = 0x1d4c,
2080 		.enable_mask = BIT(0),
2081 		.hw.init = &(struct clk_init_data){
2082 			.name = "gcc_ufs_ahb_clk",
2083 			.ops = &clk_branch2_ops,
2084 		},
2085 	},
2086 };
2087 
2088 static struct clk_branch gcc_ufs_axi_clk = {
2089 	.halt_reg = 0x1d48,
2090 	.clkr = {
2091 		.enable_reg = 0x1d48,
2092 		.enable_mask = BIT(0),
2093 		.hw.init = &(struct clk_init_data){
2094 			.name = "gcc_ufs_axi_clk",
2095 			.parent_hws = (const struct clk_hw *[]){ &ufs_axi_clk_src.clkr.hw },
2096 			.num_parents = 1,
2097 			.flags = CLK_SET_RATE_PARENT,
2098 			.ops = &clk_branch2_ops,
2099 		},
2100 	},
2101 };
2102 
2103 static struct clk_branch gcc_ufs_rx_cfg_clk = {
2104 	.halt_reg = 0x1d54,
2105 	.clkr = {
2106 		.enable_reg = 0x1d54,
2107 		.enable_mask = BIT(0),
2108 		.hw.init = &(struct clk_init_data){
2109 			.name = "gcc_ufs_rx_cfg_clk",
2110 			.parent_hws = (const struct clk_hw *[]){ &ufs_axi_clk_src.clkr.hw },
2111 			.num_parents = 1,
2112 			.flags = CLK_SET_RATE_PARENT,
2113 			.ops = &clk_branch2_ops,
2114 		},
2115 	},
2116 };
2117 
2118 static struct clk_branch gcc_ufs_rx_symbol_0_clk = {
2119 	.halt_reg = 0x1d60,
2120 	.halt_check = BRANCH_HALT_DELAY,
2121 	.clkr = {
2122 		.enable_reg = 0x1d60,
2123 		.enable_mask = BIT(0),
2124 		.hw.init = &(struct clk_init_data){
2125 			.name = "gcc_ufs_rx_symbol_0_clk",
2126 			.ops = &clk_branch2_ops,
2127 		},
2128 	},
2129 };
2130 
2131 static struct clk_branch gcc_ufs_rx_symbol_1_clk = {
2132 	.halt_reg = 0x1d64,
2133 	.halt_check = BRANCH_HALT_DELAY,
2134 	.clkr = {
2135 		.enable_reg = 0x1d64,
2136 		.enable_mask = BIT(0),
2137 		.hw.init = &(struct clk_init_data){
2138 			.name = "gcc_ufs_rx_symbol_1_clk",
2139 			.ops = &clk_branch2_ops,
2140 		},
2141 	},
2142 };
2143 
2144 static struct clk_branch gcc_ufs_tx_cfg_clk = {
2145 	.halt_reg = 0x1d50,
2146 	.clkr = {
2147 		.enable_reg = 0x1d50,
2148 		.enable_mask = BIT(0),
2149 		.hw.init = &(struct clk_init_data){
2150 			.name = "gcc_ufs_tx_cfg_clk",
2151 			.parent_hws = (const struct clk_hw *[]){ &ufs_axi_clk_src.clkr.hw },
2152 			.num_parents = 1,
2153 			.flags = CLK_SET_RATE_PARENT,
2154 			.ops = &clk_branch2_ops,
2155 		},
2156 	},
2157 };
2158 
2159 static struct clk_branch gcc_ufs_tx_symbol_0_clk = {
2160 	.halt_reg = 0x1d58,
2161 	.halt_check = BRANCH_HALT_DELAY,
2162 	.clkr = {
2163 		.enable_reg = 0x1d58,
2164 		.enable_mask = BIT(0),
2165 		.hw.init = &(struct clk_init_data){
2166 			.name = "gcc_ufs_tx_symbol_0_clk",
2167 			.ops = &clk_branch2_ops,
2168 		},
2169 	},
2170 };
2171 
2172 static struct clk_branch gcc_ufs_tx_symbol_1_clk = {
2173 	.halt_reg = 0x1d5c,
2174 	.halt_check = BRANCH_HALT_DELAY,
2175 	.clkr = {
2176 		.enable_reg = 0x1d5c,
2177 		.enable_mask = BIT(0),
2178 		.hw.init = &(struct clk_init_data){
2179 			.name = "gcc_ufs_tx_symbol_1_clk",
2180 			.ops = &clk_branch2_ops,
2181 		},
2182 	},
2183 };
2184 
2185 static struct clk_branch gcc_usb2_hs_phy_sleep_clk = {
2186 	.halt_reg = 0x04ac,
2187 	.clkr = {
2188 		.enable_reg = 0x04ac,
2189 		.enable_mask = BIT(0),
2190 		.hw.init = &(struct clk_init_data){
2191 			.name = "gcc_usb2_hs_phy_sleep_clk",
2192 			.parent_data = &(const struct clk_parent_data){
2193 				.fw_name = "sleep",
2194 				.name = "sleep"
2195 			},
2196 			.num_parents = 1,
2197 			.ops = &clk_branch2_ops,
2198 		},
2199 	},
2200 };
2201 
2202 static struct clk_branch gcc_usb30_master_clk = {
2203 	.halt_reg = 0x03c8,
2204 	.clkr = {
2205 		.enable_reg = 0x03c8,
2206 		.enable_mask = BIT(0),
2207 		.hw.init = &(struct clk_init_data){
2208 			.name = "gcc_usb30_master_clk",
2209 			.parent_hws = (const struct clk_hw *[]){ &usb30_master_clk_src.clkr.hw },
2210 			.num_parents = 1,
2211 			.flags = CLK_SET_RATE_PARENT,
2212 			.ops = &clk_branch2_ops,
2213 		},
2214 	},
2215 };
2216 
2217 static struct clk_branch gcc_usb30_mock_utmi_clk = {
2218 	.halt_reg = 0x03d0,
2219 	.clkr = {
2220 		.enable_reg = 0x03d0,
2221 		.enable_mask = BIT(0),
2222 		.hw.init = &(struct clk_init_data){
2223 			.name = "gcc_usb30_mock_utmi_clk",
2224 			.parent_hws = (const struct clk_hw *[]){ &usb30_mock_utmi_clk_src.clkr.hw },
2225 			.num_parents = 1,
2226 			.flags = CLK_SET_RATE_PARENT,
2227 			.ops = &clk_branch2_ops,
2228 		},
2229 	},
2230 };
2231 
2232 static struct clk_branch gcc_usb30_sleep_clk = {
2233 	.halt_reg = 0x03cc,
2234 	.clkr = {
2235 		.enable_reg = 0x03cc,
2236 		.enable_mask = BIT(0),
2237 		.hw.init = &(struct clk_init_data){
2238 			.name = "gcc_usb30_sleep_clk",
2239 			.parent_data = &(const struct clk_parent_data){
2240 				.fw_name = "sleep",
2241 				.name = "sleep"
2242 			},
2243 			.num_parents = 1,
2244 			.ops = &clk_branch2_ops,
2245 		},
2246 	},
2247 };
2248 
2249 static struct clk_branch gcc_usb3_phy_aux_clk = {
2250 	.halt_reg = 0x1408,
2251 	.clkr = {
2252 		.enable_reg = 0x1408,
2253 		.enable_mask = BIT(0),
2254 		.hw.init = &(struct clk_init_data){
2255 			.name = "gcc_usb3_phy_aux_clk",
2256 			.parent_hws = (const struct clk_hw *[]){ &usb3_phy_aux_clk_src.clkr.hw },
2257 			.num_parents = 1,
2258 			.flags = CLK_SET_RATE_PARENT,
2259 			.ops = &clk_branch2_ops,
2260 		},
2261 	},
2262 };
2263 
2264 static struct clk_branch gcc_usb3_phy_pipe_clk = {
2265 	.halt_reg = 0x140c,
2266 	.halt_check = BRANCH_HALT_SKIP,
2267 	.clkr = {
2268 		.enable_reg = 0x140c,
2269 		.enable_mask = BIT(0),
2270 		.hw.init = &(struct clk_init_data){
2271 			.name = "gcc_usb3_phy_pipe_clk",
2272 			.ops = &clk_branch2_ops,
2273 		},
2274 	},
2275 };
2276 
2277 static struct clk_branch gcc_usb_hs_ahb_clk = {
2278 	.halt_reg = 0x0488,
2279 	.clkr = {
2280 		.enable_reg = 0x0488,
2281 		.enable_mask = BIT(0),
2282 		.hw.init = &(struct clk_init_data){
2283 			.name = "gcc_usb_hs_ahb_clk",
2284 			.ops = &clk_branch2_ops,
2285 		},
2286 	},
2287 };
2288 
2289 static struct clk_branch gcc_usb_hs_system_clk = {
2290 	.halt_reg = 0x0484,
2291 	.clkr = {
2292 		.enable_reg = 0x0484,
2293 		.enable_mask = BIT(0),
2294 		.hw.init = &(struct clk_init_data){
2295 			.name = "gcc_usb_hs_system_clk",
2296 			.parent_hws = (const struct clk_hw *[]){ &usb_hs_system_clk_src.clkr.hw },
2297 			.num_parents = 1,
2298 			.flags = CLK_SET_RATE_PARENT,
2299 			.ops = &clk_branch2_ops,
2300 		},
2301 	},
2302 };
2303 
2304 static struct clk_branch gcc_usb_phy_cfg_ahb2phy_clk = {
2305 	.halt_reg = 0x1a84,
2306 	.clkr = {
2307 		.enable_reg = 0x1a84,
2308 		.enable_mask = BIT(0),
2309 		.hw.init = &(struct clk_init_data){
2310 			.name = "gcc_usb_phy_cfg_ahb2phy_clk",
2311 			.ops = &clk_branch2_ops,
2312 		},
2313 	},
2314 };
2315 
2316 static struct clk_branch gpll0_out_mmsscc = {
2317 	.halt_check = BRANCH_HALT_DELAY,
2318 	.clkr = {
2319 		.enable_reg = 0x1484,
2320 		.enable_mask = BIT(26),
2321 		.hw.init = &(struct clk_init_data){
2322 			.name = "gpll0_out_mmsscc",
2323 			.parent_hws = (const struct clk_hw *[]){ &gpll0.clkr.hw },
2324 			.num_parents = 1,
2325 			.ops = &clk_branch2_ops,
2326 		},
2327 	},
2328 };
2329 
2330 static struct clk_branch gpll0_out_msscc = {
2331 	.halt_check = BRANCH_HALT_DELAY,
2332 	.clkr = {
2333 		.enable_reg = 0x1484,
2334 		.enable_mask = BIT(27),
2335 		.hw.init = &(struct clk_init_data){
2336 			.name = "gpll0_out_msscc",
2337 			.parent_hws = (const struct clk_hw *[]){ &gpll0.clkr.hw },
2338 			.num_parents = 1,
2339 			.ops = &clk_branch2_ops,
2340 		},
2341 	},
2342 };
2343 
2344 static struct clk_branch pcie_0_phy_ldo = {
2345 	.halt_reg = 0x1e00,
2346 	.halt_check = BRANCH_HALT_SKIP,
2347 	.clkr = {
2348 		.enable_reg = 0x1E00,
2349 		.enable_mask = BIT(0),
2350 		.hw.init = &(struct clk_init_data){
2351 			.name = "pcie_0_phy_ldo",
2352 			.ops = &clk_branch2_ops,
2353 		},
2354 	},
2355 };
2356 
2357 static struct clk_branch pcie_1_phy_ldo = {
2358 	.halt_reg = 0x1e04,
2359 	.halt_check = BRANCH_HALT_SKIP,
2360 	.clkr = {
2361 		.enable_reg = 0x1E04,
2362 		.enable_mask = BIT(0),
2363 		.hw.init = &(struct clk_init_data){
2364 			.name = "pcie_1_phy_ldo",
2365 			.ops = &clk_branch2_ops,
2366 		},
2367 	},
2368 };
2369 
2370 static struct clk_branch ufs_phy_ldo = {
2371 	.halt_reg = 0x1e0c,
2372 	.halt_check = BRANCH_HALT_SKIP,
2373 	.clkr = {
2374 		.enable_reg = 0x1E0C,
2375 		.enable_mask = BIT(0),
2376 		.hw.init = &(struct clk_init_data){
2377 			.name = "ufs_phy_ldo",
2378 			.ops = &clk_branch2_ops,
2379 		},
2380 	},
2381 };
2382 
2383 static struct clk_branch usb_ss_phy_ldo = {
2384 	.halt_reg = 0x1e08,
2385 	.halt_check = BRANCH_HALT_SKIP,
2386 	.clkr = {
2387 		.enable_reg = 0x1E08,
2388 		.enable_mask = BIT(0),
2389 		.hw.init = &(struct clk_init_data){
2390 			.name = "usb_ss_phy_ldo",
2391 			.ops = &clk_branch2_ops,
2392 		},
2393 	},
2394 };
2395 
2396 static struct clk_branch gcc_boot_rom_ahb_clk = {
2397 	.halt_reg = 0x0e04,
2398 	.halt_check = BRANCH_HALT_VOTED,
2399 	.hwcg_reg = 0x0e04,
2400 	.hwcg_bit = 1,
2401 	.clkr = {
2402 		.enable_reg = 0x1484,
2403 		.enable_mask = BIT(10),
2404 		.hw.init = &(struct clk_init_data){
2405 			.name = "gcc_boot_rom_ahb_clk",
2406 			.ops = &clk_branch2_ops,
2407 		},
2408 	},
2409 };
2410 
2411 static struct clk_branch gcc_prng_ahb_clk = {
2412 	.halt_reg = 0x0d04,
2413 	.halt_check = BRANCH_HALT_VOTED,
2414 	.clkr = {
2415 		.enable_reg = 0x1484,
2416 		.enable_mask = BIT(13),
2417 		.hw.init = &(struct clk_init_data){
2418 			.name = "gcc_prng_ahb_clk",
2419 			.ops = &clk_branch2_ops,
2420 		},
2421 	},
2422 };
2423 
2424 static struct gdsc pcie_0_gdsc = {
2425 		.gdscr = 0x1ac4,
2426 		.pd = {
2427 			.name = "pcie_0",
2428 		},
2429 		.pwrsts = PWRSTS_OFF_ON,
2430 };
2431 
2432 static struct gdsc pcie_1_gdsc = {
2433 		.gdscr = 0x1b44,
2434 		.pd = {
2435 			.name = "pcie_1",
2436 		},
2437 		.pwrsts = PWRSTS_OFF_ON,
2438 };
2439 
2440 static struct gdsc usb30_gdsc = {
2441 		.gdscr = 0x3c4,
2442 		.pd = {
2443 			.name = "usb30",
2444 		},
2445 		.pwrsts = PWRSTS_OFF_ON,
2446 };
2447 
2448 static struct gdsc ufs_gdsc = {
2449 		.gdscr = 0x1d44,
2450 		.pd = {
2451 			.name = "ufs",
2452 		},
2453 		.pwrsts = PWRSTS_OFF_ON,
2454 };
2455 
2456 static struct clk_regmap *gcc_msm8994_clocks[] = {
2457 	[GPLL0_EARLY] = &gpll0_early.clkr,
2458 	[GPLL0] = &gpll0.clkr,
2459 	[GPLL4_EARLY] = &gpll4_early.clkr,
2460 	[GPLL4] = &gpll4.clkr,
2461 	[UFS_AXI_CLK_SRC] = &ufs_axi_clk_src.clkr,
2462 	[USB30_MASTER_CLK_SRC] = &usb30_master_clk_src.clkr,
2463 	[BLSP1_QUP1_I2C_APPS_CLK_SRC] = &blsp1_qup1_i2c_apps_clk_src.clkr,
2464 	[BLSP1_QUP1_SPI_APPS_CLK_SRC] = &blsp1_qup1_spi_apps_clk_src.clkr,
2465 	[BLSP1_QUP2_I2C_APPS_CLK_SRC] = &blsp1_qup2_i2c_apps_clk_src.clkr,
2466 	[BLSP1_QUP2_SPI_APPS_CLK_SRC] = &blsp1_qup2_spi_apps_clk_src.clkr,
2467 	[BLSP1_QUP3_I2C_APPS_CLK_SRC] = &blsp1_qup3_i2c_apps_clk_src.clkr,
2468 	[BLSP1_QUP3_SPI_APPS_CLK_SRC] = &blsp1_qup3_spi_apps_clk_src.clkr,
2469 	[BLSP1_QUP4_I2C_APPS_CLK_SRC] = &blsp1_qup4_i2c_apps_clk_src.clkr,
2470 	[BLSP1_QUP4_SPI_APPS_CLK_SRC] = &blsp1_qup4_spi_apps_clk_src.clkr,
2471 	[BLSP1_QUP5_I2C_APPS_CLK_SRC] = &blsp1_qup5_i2c_apps_clk_src.clkr,
2472 	[BLSP1_QUP5_SPI_APPS_CLK_SRC] = &blsp1_qup5_spi_apps_clk_src.clkr,
2473 	[BLSP1_QUP6_I2C_APPS_CLK_SRC] = &blsp1_qup6_i2c_apps_clk_src.clkr,
2474 	[BLSP1_QUP6_SPI_APPS_CLK_SRC] = &blsp1_qup6_spi_apps_clk_src.clkr,
2475 	[BLSP1_UART1_APPS_CLK_SRC] = &blsp1_uart1_apps_clk_src.clkr,
2476 	[BLSP1_UART2_APPS_CLK_SRC] = &blsp1_uart2_apps_clk_src.clkr,
2477 	[BLSP1_UART3_APPS_CLK_SRC] = &blsp1_uart3_apps_clk_src.clkr,
2478 	[BLSP1_UART4_APPS_CLK_SRC] = &blsp1_uart4_apps_clk_src.clkr,
2479 	[BLSP1_UART5_APPS_CLK_SRC] = &blsp1_uart5_apps_clk_src.clkr,
2480 	[BLSP1_UART6_APPS_CLK_SRC] = &blsp1_uart6_apps_clk_src.clkr,
2481 	[BLSP2_QUP1_I2C_APPS_CLK_SRC] = &blsp2_qup1_i2c_apps_clk_src.clkr,
2482 	[BLSP2_QUP1_SPI_APPS_CLK_SRC] = &blsp2_qup1_spi_apps_clk_src.clkr,
2483 	[BLSP2_QUP2_I2C_APPS_CLK_SRC] = &blsp2_qup2_i2c_apps_clk_src.clkr,
2484 	[BLSP2_QUP2_SPI_APPS_CLK_SRC] = &blsp2_qup2_spi_apps_clk_src.clkr,
2485 	[BLSP2_QUP3_I2C_APPS_CLK_SRC] = &blsp2_qup3_i2c_apps_clk_src.clkr,
2486 	[BLSP2_QUP3_SPI_APPS_CLK_SRC] = &blsp2_qup3_spi_apps_clk_src.clkr,
2487 	[BLSP2_QUP4_I2C_APPS_CLK_SRC] = &blsp2_qup4_i2c_apps_clk_src.clkr,
2488 	[BLSP2_QUP4_SPI_APPS_CLK_SRC] = &blsp2_qup4_spi_apps_clk_src.clkr,
2489 	[BLSP2_QUP5_I2C_APPS_CLK_SRC] = &blsp2_qup5_i2c_apps_clk_src.clkr,
2490 	[BLSP2_QUP5_SPI_APPS_CLK_SRC] = &blsp2_qup5_spi_apps_clk_src.clkr,
2491 	[BLSP2_QUP6_I2C_APPS_CLK_SRC] = &blsp2_qup6_i2c_apps_clk_src.clkr,
2492 	[BLSP2_QUP6_SPI_APPS_CLK_SRC] = &blsp2_qup6_spi_apps_clk_src.clkr,
2493 	[BLSP2_UART1_APPS_CLK_SRC] = &blsp2_uart1_apps_clk_src.clkr,
2494 	[BLSP2_UART2_APPS_CLK_SRC] = &blsp2_uart2_apps_clk_src.clkr,
2495 	[BLSP2_UART3_APPS_CLK_SRC] = &blsp2_uart3_apps_clk_src.clkr,
2496 	[BLSP2_UART4_APPS_CLK_SRC] = &blsp2_uart4_apps_clk_src.clkr,
2497 	[BLSP2_UART5_APPS_CLK_SRC] = &blsp2_uart5_apps_clk_src.clkr,
2498 	[BLSP2_UART6_APPS_CLK_SRC] = &blsp2_uart6_apps_clk_src.clkr,
2499 	[GP1_CLK_SRC] = &gp1_clk_src.clkr,
2500 	[GP2_CLK_SRC] = &gp2_clk_src.clkr,
2501 	[GP3_CLK_SRC] = &gp3_clk_src.clkr,
2502 	[PCIE_0_AUX_CLK_SRC] = &pcie_0_aux_clk_src.clkr,
2503 	[PCIE_0_PIPE_CLK_SRC] = &pcie_0_pipe_clk_src.clkr,
2504 	[PCIE_1_AUX_CLK_SRC] = &pcie_1_aux_clk_src.clkr,
2505 	[PCIE_1_PIPE_CLK_SRC] = &pcie_1_pipe_clk_src.clkr,
2506 	[PDM2_CLK_SRC] = &pdm2_clk_src.clkr,
2507 	[SDCC1_APPS_CLK_SRC] = &sdcc1_apps_clk_src.clkr,
2508 	[SDCC2_APPS_CLK_SRC] = &sdcc2_apps_clk_src.clkr,
2509 	[SDCC3_APPS_CLK_SRC] = &sdcc3_apps_clk_src.clkr,
2510 	[SDCC4_APPS_CLK_SRC] = &sdcc4_apps_clk_src.clkr,
2511 	[TSIF_REF_CLK_SRC] = &tsif_ref_clk_src.clkr,
2512 	[USB30_MOCK_UTMI_CLK_SRC] = &usb30_mock_utmi_clk_src.clkr,
2513 	[USB3_PHY_AUX_CLK_SRC] = &usb3_phy_aux_clk_src.clkr,
2514 	[USB_HS_SYSTEM_CLK_SRC] = &usb_hs_system_clk_src.clkr,
2515 	[GCC_BLSP1_AHB_CLK] = &gcc_blsp1_ahb_clk.clkr,
2516 	[GCC_BLSP1_QUP1_I2C_APPS_CLK] = &gcc_blsp1_qup1_i2c_apps_clk.clkr,
2517 	[GCC_BLSP1_QUP1_SPI_APPS_CLK] = &gcc_blsp1_qup1_spi_apps_clk.clkr,
2518 	[GCC_BLSP1_QUP2_I2C_APPS_CLK] = &gcc_blsp1_qup2_i2c_apps_clk.clkr,
2519 	[GCC_BLSP1_QUP2_SPI_APPS_CLK] = &gcc_blsp1_qup2_spi_apps_clk.clkr,
2520 	[GCC_BLSP1_QUP3_I2C_APPS_CLK] = &gcc_blsp1_qup3_i2c_apps_clk.clkr,
2521 	[GCC_BLSP1_QUP3_SPI_APPS_CLK] = &gcc_blsp1_qup3_spi_apps_clk.clkr,
2522 	[GCC_BLSP1_QUP4_I2C_APPS_CLK] = &gcc_blsp1_qup4_i2c_apps_clk.clkr,
2523 	[GCC_BLSP1_QUP4_SPI_APPS_CLK] = &gcc_blsp1_qup4_spi_apps_clk.clkr,
2524 	[GCC_BLSP1_QUP5_I2C_APPS_CLK] = &gcc_blsp1_qup5_i2c_apps_clk.clkr,
2525 	[GCC_BLSP1_QUP5_SPI_APPS_CLK] = &gcc_blsp1_qup5_spi_apps_clk.clkr,
2526 	[GCC_BLSP1_QUP6_I2C_APPS_CLK] = &gcc_blsp1_qup6_i2c_apps_clk.clkr,
2527 	[GCC_BLSP1_QUP6_SPI_APPS_CLK] = &gcc_blsp1_qup6_spi_apps_clk.clkr,
2528 	[GCC_BLSP1_UART1_APPS_CLK] = &gcc_blsp1_uart1_apps_clk.clkr,
2529 	[GCC_BLSP1_UART2_APPS_CLK] = &gcc_blsp1_uart2_apps_clk.clkr,
2530 	[GCC_BLSP1_UART3_APPS_CLK] = &gcc_blsp1_uart3_apps_clk.clkr,
2531 	[GCC_BLSP1_UART4_APPS_CLK] = &gcc_blsp1_uart4_apps_clk.clkr,
2532 	[GCC_BLSP1_UART5_APPS_CLK] = &gcc_blsp1_uart5_apps_clk.clkr,
2533 	[GCC_BLSP1_UART6_APPS_CLK] = &gcc_blsp1_uart6_apps_clk.clkr,
2534 	[GCC_BLSP2_AHB_CLK] = &gcc_blsp2_ahb_clk.clkr,
2535 	[GCC_BLSP2_QUP1_I2C_APPS_CLK] = &gcc_blsp2_qup1_i2c_apps_clk.clkr,
2536 	[GCC_BLSP2_QUP1_SPI_APPS_CLK] = &gcc_blsp2_qup1_spi_apps_clk.clkr,
2537 	[GCC_BLSP2_QUP2_I2C_APPS_CLK] = &gcc_blsp2_qup2_i2c_apps_clk.clkr,
2538 	[GCC_BLSP2_QUP2_SPI_APPS_CLK] = &gcc_blsp2_qup2_spi_apps_clk.clkr,
2539 	[GCC_BLSP2_QUP3_I2C_APPS_CLK] = &gcc_blsp2_qup3_i2c_apps_clk.clkr,
2540 	[GCC_BLSP2_QUP3_SPI_APPS_CLK] = &gcc_blsp2_qup3_spi_apps_clk.clkr,
2541 	[GCC_BLSP2_QUP4_I2C_APPS_CLK] = &gcc_blsp2_qup4_i2c_apps_clk.clkr,
2542 	[GCC_BLSP2_QUP4_SPI_APPS_CLK] = &gcc_blsp2_qup4_spi_apps_clk.clkr,
2543 	[GCC_BLSP2_QUP5_I2C_APPS_CLK] = &gcc_blsp2_qup5_i2c_apps_clk.clkr,
2544 	[GCC_BLSP2_QUP5_SPI_APPS_CLK] = &gcc_blsp2_qup5_spi_apps_clk.clkr,
2545 	[GCC_BLSP2_QUP6_I2C_APPS_CLK] = &gcc_blsp2_qup6_i2c_apps_clk.clkr,
2546 	[GCC_BLSP2_QUP6_SPI_APPS_CLK] = &gcc_blsp2_qup6_spi_apps_clk.clkr,
2547 	[GCC_BLSP2_UART1_APPS_CLK] = &gcc_blsp2_uart1_apps_clk.clkr,
2548 	[GCC_BLSP2_UART2_APPS_CLK] = &gcc_blsp2_uart2_apps_clk.clkr,
2549 	[GCC_BLSP2_UART3_APPS_CLK] = &gcc_blsp2_uart3_apps_clk.clkr,
2550 	[GCC_BLSP2_UART4_APPS_CLK] = &gcc_blsp2_uart4_apps_clk.clkr,
2551 	[GCC_BLSP2_UART5_APPS_CLK] = &gcc_blsp2_uart5_apps_clk.clkr,
2552 	[GCC_BLSP2_UART6_APPS_CLK] = &gcc_blsp2_uart6_apps_clk.clkr,
2553 	[GCC_GP1_CLK] = &gcc_gp1_clk.clkr,
2554 	[GCC_GP2_CLK] = &gcc_gp2_clk.clkr,
2555 	[GCC_GP3_CLK] = &gcc_gp3_clk.clkr,
2556 	[GCC_LPASS_Q6_AXI_CLK] = &gcc_lpass_q6_axi_clk.clkr,
2557 	[GCC_MSS_Q6_BIMC_AXI_CLK] = &gcc_mss_q6_bimc_axi_clk.clkr,
2558 	[GCC_PCIE_0_AUX_CLK] = &gcc_pcie_0_aux_clk.clkr,
2559 	[GCC_PCIE_0_CFG_AHB_CLK] = &gcc_pcie_0_cfg_ahb_clk.clkr,
2560 	[GCC_PCIE_0_MSTR_AXI_CLK] = &gcc_pcie_0_mstr_axi_clk.clkr,
2561 	[GCC_PCIE_0_PIPE_CLK] = &gcc_pcie_0_pipe_clk.clkr,
2562 	[GCC_PCIE_0_SLV_AXI_CLK] = &gcc_pcie_0_slv_axi_clk.clkr,
2563 	[GCC_PCIE_1_AUX_CLK] = &gcc_pcie_1_aux_clk.clkr,
2564 	[GCC_PCIE_1_CFG_AHB_CLK] = &gcc_pcie_1_cfg_ahb_clk.clkr,
2565 	[GCC_PCIE_1_MSTR_AXI_CLK] = &gcc_pcie_1_mstr_axi_clk.clkr,
2566 	[GCC_PCIE_1_PIPE_CLK] = &gcc_pcie_1_pipe_clk.clkr,
2567 	[GCC_PCIE_1_SLV_AXI_CLK] = &gcc_pcie_1_slv_axi_clk.clkr,
2568 	[GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr,
2569 	[GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr,
2570 	[GCC_SDCC1_AHB_CLK] = &gcc_sdcc1_ahb_clk.clkr,
2571 	[GCC_SDCC1_APPS_CLK] = &gcc_sdcc1_apps_clk.clkr,
2572 	[GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr,
2573 	[GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr,
2574 	[GCC_SDCC3_AHB_CLK] = &gcc_sdcc3_ahb_clk.clkr,
2575 	[GCC_SDCC3_APPS_CLK] = &gcc_sdcc3_apps_clk.clkr,
2576 	[GCC_SDCC4_AHB_CLK] = &gcc_sdcc4_ahb_clk.clkr,
2577 	[GCC_SDCC4_APPS_CLK] = &gcc_sdcc4_apps_clk.clkr,
2578 	[GCC_SYS_NOC_UFS_AXI_CLK] = &gcc_sys_noc_ufs_axi_clk.clkr,
2579 	[GCC_SYS_NOC_USB3_AXI_CLK] = &gcc_sys_noc_usb3_axi_clk.clkr,
2580 	[GCC_TSIF_AHB_CLK] = &gcc_tsif_ahb_clk.clkr,
2581 	[GCC_TSIF_REF_CLK] = &gcc_tsif_ref_clk.clkr,
2582 	[GCC_UFS_AHB_CLK] = &gcc_ufs_ahb_clk.clkr,
2583 	[GCC_UFS_AXI_CLK] = &gcc_ufs_axi_clk.clkr,
2584 	[GCC_UFS_RX_CFG_CLK] = &gcc_ufs_rx_cfg_clk.clkr,
2585 	[GCC_UFS_RX_SYMBOL_0_CLK] = &gcc_ufs_rx_symbol_0_clk.clkr,
2586 	[GCC_UFS_RX_SYMBOL_1_CLK] = &gcc_ufs_rx_symbol_1_clk.clkr,
2587 	[GCC_UFS_TX_CFG_CLK] = &gcc_ufs_tx_cfg_clk.clkr,
2588 	[GCC_UFS_TX_SYMBOL_0_CLK] = &gcc_ufs_tx_symbol_0_clk.clkr,
2589 	[GCC_UFS_TX_SYMBOL_1_CLK] = &gcc_ufs_tx_symbol_1_clk.clkr,
2590 	[GCC_USB2_HS_PHY_SLEEP_CLK] = &gcc_usb2_hs_phy_sleep_clk.clkr,
2591 	[GCC_USB30_MASTER_CLK] = &gcc_usb30_master_clk.clkr,
2592 	[GCC_USB30_MOCK_UTMI_CLK] = &gcc_usb30_mock_utmi_clk.clkr,
2593 	[GCC_USB30_SLEEP_CLK] = &gcc_usb30_sleep_clk.clkr,
2594 	[GCC_USB3_PHY_AUX_CLK] = &gcc_usb3_phy_aux_clk.clkr,
2595 	[GCC_USB3_PHY_PIPE_CLK] = &gcc_usb3_phy_pipe_clk.clkr,
2596 	[GCC_USB_HS_AHB_CLK] = &gcc_usb_hs_ahb_clk.clkr,
2597 	[GCC_USB_HS_SYSTEM_CLK] = &gcc_usb_hs_system_clk.clkr,
2598 	[GCC_USB_PHY_CFG_AHB2PHY_CLK] = &gcc_usb_phy_cfg_ahb2phy_clk.clkr,
2599 	[GPLL0_OUT_MMSSCC] = &gpll0_out_mmsscc.clkr,
2600 	[GPLL0_OUT_MSSCC] = &gpll0_out_msscc.clkr,
2601 	[PCIE_0_PHY_LDO] = &pcie_0_phy_ldo.clkr,
2602 	[PCIE_1_PHY_LDO] = &pcie_1_phy_ldo.clkr,
2603 	[UFS_PHY_LDO] = &ufs_phy_ldo.clkr,
2604 	[USB_SS_PHY_LDO] = &usb_ss_phy_ldo.clkr,
2605 	[GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr,
2606 	[GCC_PRNG_AHB_CLK] = &gcc_prng_ahb_clk.clkr,
2607 
2608 	/*
2609 	 * The following clocks should NOT be managed by this driver, but they once were
2610 	 * mistakengly added. Now they are only here to indicate that they are not defined
2611 	 * on purpose, even though the names will stay in the header file (for ABI sanity).
2612 	 */
2613 	[CONFIG_NOC_CLK_SRC] = NULL,
2614 	[PERIPH_NOC_CLK_SRC] = NULL,
2615 	[SYSTEM_NOC_CLK_SRC] = NULL,
2616 };
2617 
2618 static struct gdsc *gcc_msm8994_gdscs[] = {
2619 	/* This GDSC does not exist, but ABI has to remain intact */
2620 	[PCIE_GDSC] = NULL,
2621 	[PCIE_0_GDSC] = &pcie_0_gdsc,
2622 	[PCIE_1_GDSC] = &pcie_1_gdsc,
2623 	[USB30_GDSC] = &usb30_gdsc,
2624 	[UFS_GDSC] = &ufs_gdsc,
2625 };
2626 
2627 static const struct qcom_reset_map gcc_msm8994_resets[] = {
2628 	[USB3_PHY_RESET] = { 0x1400 },
2629 	[USB3PHY_PHY_RESET] = { 0x1404 },
2630 	[MSS_RESET] = { 0x1680 },
2631 	[PCIE_PHY_0_RESET] = { 0x1b18 },
2632 	[PCIE_PHY_1_RESET] = { 0x1b98 },
2633 	[QUSB2_PHY_RESET] = { 0x04b8 },
2634 };
2635 
2636 static const struct regmap_config gcc_msm8994_regmap_config = {
2637 	.reg_bits	= 32,
2638 	.reg_stride	= 4,
2639 	.val_bits	= 32,
2640 	.max_register	= 0x2000,
2641 	.fast_io	= true,
2642 };
2643 
2644 static const struct qcom_cc_desc gcc_msm8994_desc = {
2645 	.config = &gcc_msm8994_regmap_config,
2646 	.clks = gcc_msm8994_clocks,
2647 	.num_clks = ARRAY_SIZE(gcc_msm8994_clocks),
2648 	.resets = gcc_msm8994_resets,
2649 	.num_resets = ARRAY_SIZE(gcc_msm8994_resets),
2650 	.gdscs = gcc_msm8994_gdscs,
2651 	.num_gdscs = ARRAY_SIZE(gcc_msm8994_gdscs),
2652 };
2653 
2654 static const struct of_device_id gcc_msm8994_match_table[] = {
2655 	{ .compatible = "qcom,gcc-msm8992" },
2656 	{ .compatible = "qcom,gcc-msm8994" }, /* V2 and V2.1 */
2657 	{}
2658 };
2659 MODULE_DEVICE_TABLE(of, gcc_msm8994_match_table);
2660 
2661 static int gcc_msm8994_probe(struct platform_device *pdev)
2662 {
2663 	if (of_device_is_compatible(pdev->dev.of_node, "qcom,gcc-msm8992")) {
2664 		/* MSM8992 features less clocks and some have different freq tables */
2665 		gcc_msm8994_desc.clks[UFS_AXI_CLK_SRC] = NULL;
2666 		gcc_msm8994_desc.clks[GCC_LPASS_Q6_AXI_CLK] = NULL;
2667 		gcc_msm8994_desc.clks[UFS_PHY_LDO] = NULL;
2668 		gcc_msm8994_desc.clks[GCC_UFS_AHB_CLK] = NULL;
2669 		gcc_msm8994_desc.clks[GCC_UFS_AXI_CLK] = NULL;
2670 		gcc_msm8994_desc.clks[GCC_UFS_RX_CFG_CLK] = NULL;
2671 		gcc_msm8994_desc.clks[GCC_UFS_RX_SYMBOL_0_CLK] = NULL;
2672 		gcc_msm8994_desc.clks[GCC_UFS_RX_SYMBOL_1_CLK] = NULL;
2673 		gcc_msm8994_desc.clks[GCC_UFS_TX_CFG_CLK] = NULL;
2674 		gcc_msm8994_desc.clks[GCC_UFS_TX_SYMBOL_0_CLK] = NULL;
2675 		gcc_msm8994_desc.clks[GCC_UFS_TX_SYMBOL_1_CLK] = NULL;
2676 
2677 		sdcc1_apps_clk_src.freq_tbl = ftbl_sdcc1_apps_clk_src_8992;
2678 		blsp1_qup1_i2c_apps_clk_src.freq_tbl = ftbl_blsp1_qup_spi_apps_clk_src_8992;
2679 		blsp1_qup2_i2c_apps_clk_src.freq_tbl = ftbl_blsp1_qup_spi_apps_clk_src_8992;
2680 		blsp1_qup3_i2c_apps_clk_src.freq_tbl = ftbl_blsp1_qup_spi_apps_clk_src_8992;
2681 		blsp1_qup4_i2c_apps_clk_src.freq_tbl = ftbl_blsp1_qup_spi_apps_clk_src_8992;
2682 		blsp1_qup5_i2c_apps_clk_src.freq_tbl = ftbl_blsp1_qup_spi_apps_clk_src_8992;
2683 		blsp1_qup6_i2c_apps_clk_src.freq_tbl = ftbl_blsp1_qup_spi_apps_clk_src_8992;
2684 		blsp2_qup1_i2c_apps_clk_src.freq_tbl = ftbl_blsp1_qup_spi_apps_clk_src_8992;
2685 		blsp2_qup2_i2c_apps_clk_src.freq_tbl = ftbl_blsp1_qup_spi_apps_clk_src_8992;
2686 		blsp2_qup3_i2c_apps_clk_src.freq_tbl = ftbl_blsp1_qup_spi_apps_clk_src_8992;
2687 		blsp2_qup4_i2c_apps_clk_src.freq_tbl = ftbl_blsp1_qup_spi_apps_clk_src_8992;
2688 		blsp2_qup5_i2c_apps_clk_src.freq_tbl = ftbl_blsp1_qup_spi_apps_clk_src_8992;
2689 		blsp2_qup6_i2c_apps_clk_src.freq_tbl = ftbl_blsp1_qup_spi_apps_clk_src_8992;
2690 
2691 		/*
2692 		 * Some 8992 boards might *possibly* use
2693 		 * PCIe1 clocks and controller, but it's not
2694 		 * standard and they should be disabled otherwise.
2695 		 */
2696 		gcc_msm8994_desc.clks[PCIE_1_AUX_CLK_SRC] = NULL;
2697 		gcc_msm8994_desc.clks[PCIE_1_PIPE_CLK_SRC] = NULL;
2698 		gcc_msm8994_desc.clks[PCIE_1_PHY_LDO] = NULL;
2699 		gcc_msm8994_desc.clks[GCC_PCIE_1_AUX_CLK] = NULL;
2700 		gcc_msm8994_desc.clks[GCC_PCIE_1_CFG_AHB_CLK] = NULL;
2701 		gcc_msm8994_desc.clks[GCC_PCIE_1_MSTR_AXI_CLK] = NULL;
2702 		gcc_msm8994_desc.clks[GCC_PCIE_1_PIPE_CLK] = NULL;
2703 		gcc_msm8994_desc.clks[GCC_PCIE_1_SLV_AXI_CLK] = NULL;
2704 		gcc_msm8994_desc.clks[GCC_SYS_NOC_UFS_AXI_CLK] = NULL;
2705 	}
2706 
2707 	return qcom_cc_probe(pdev, &gcc_msm8994_desc);
2708 }
2709 
2710 static struct platform_driver gcc_msm8994_driver = {
2711 	.probe		= gcc_msm8994_probe,
2712 	.driver		= {
2713 		.name	= "gcc-msm8994",
2714 		.of_match_table = gcc_msm8994_match_table,
2715 	},
2716 };
2717 
2718 static int __init gcc_msm8994_init(void)
2719 {
2720 	return platform_driver_register(&gcc_msm8994_driver);
2721 }
2722 core_initcall(gcc_msm8994_init);
2723 
2724 static void __exit gcc_msm8994_exit(void)
2725 {
2726 	platform_driver_unregister(&gcc_msm8994_driver);
2727 }
2728 module_exit(gcc_msm8994_exit);
2729 
2730 MODULE_DESCRIPTION("Qualcomm GCC MSM8994 Driver");
2731 MODULE_LICENSE("GPL v2");
2732 MODULE_ALIAS("platform:gcc-msm8994");
2733