xref: /openbmc/linux/drivers/clk/qcom/gcc-qcs404.c (revision ae213c44)
1 // SPDX-License-Identifier: GPL-2.0
2 /*
3  * Copyright (c) 2018, The Linux Foundation. All rights reserved.
4  */
5 
6 #include <linux/kernel.h>
7 #include <linux/platform_device.h>
8 #include <linux/module.h>
9 #include <linux/of.h>
10 #include <linux/clk-provider.h>
11 #include <linux/regmap.h>
12 #include <linux/reset-controller.h>
13 
14 #include <dt-bindings/clock/qcom,gcc-qcs404.h>
15 
16 #include "clk-alpha-pll.h"
17 #include "clk-branch.h"
18 #include "clk-pll.h"
19 #include "clk-rcg.h"
20 #include "clk-regmap.h"
21 #include "common.h"
22 #include "reset.h"
23 
24 enum {
25 	P_CORE_BI_PLL_TEST_SE,
26 	P_DSI0_PHY_PLL_OUT_BYTECLK,
27 	P_DSI0_PHY_PLL_OUT_DSICLK,
28 	P_GPLL0_OUT_AUX,
29 	P_GPLL0_OUT_MAIN,
30 	P_GPLL1_OUT_MAIN,
31 	P_GPLL3_OUT_MAIN,
32 	P_GPLL4_OUT_AUX,
33 	P_GPLL4_OUT_MAIN,
34 	P_GPLL6_OUT_AUX,
35 	P_HDMI_PHY_PLL_CLK,
36 	P_PCIE_0_PIPE_CLK,
37 	P_SLEEP_CLK,
38 	P_XO,
39 };
40 
41 static const struct parent_map gcc_parent_map_0[] = {
42 	{ P_XO, 0 },
43 	{ P_GPLL0_OUT_MAIN, 1 },
44 	{ P_CORE_BI_PLL_TEST_SE, 7 },
45 };
46 
47 static const char * const gcc_parent_names_0[] = {
48 	"cxo",
49 	"gpll0_out_main",
50 	"core_bi_pll_test_se",
51 };
52 
53 static const char * const gcc_parent_names_ao_0[] = {
54 	"cxo",
55 	"gpll0_ao_out_main",
56 	"core_bi_pll_test_se",
57 };
58 
59 static const struct parent_map gcc_parent_map_1[] = {
60 	{ P_XO, 0 },
61 	{ P_CORE_BI_PLL_TEST_SE, 7 },
62 };
63 
64 static const char * const gcc_parent_names_1[] = {
65 	"cxo",
66 	"core_bi_pll_test_se",
67 };
68 
69 static const struct parent_map gcc_parent_map_2[] = {
70 	{ P_XO, 0 },
71 	{ P_GPLL0_OUT_MAIN, 1 },
72 	{ P_GPLL6_OUT_AUX, 2 },
73 	{ P_SLEEP_CLK, 6 },
74 };
75 
76 static const char * const gcc_parent_names_2[] = {
77 	"cxo",
78 	"gpll0_out_main",
79 	"gpll6_out_aux",
80 	"sleep_clk",
81 };
82 
83 static const struct parent_map gcc_parent_map_3[] = {
84 	{ P_XO, 0 },
85 	{ P_GPLL0_OUT_MAIN, 1 },
86 	{ P_GPLL6_OUT_AUX, 2 },
87 	{ P_CORE_BI_PLL_TEST_SE, 7 },
88 };
89 
90 static const char * const gcc_parent_names_3[] = {
91 	"cxo",
92 	"gpll0_out_main",
93 	"gpll6_out_aux",
94 	"core_bi_pll_test_se",
95 };
96 
97 static const struct parent_map gcc_parent_map_4[] = {
98 	{ P_XO, 0 },
99 	{ P_GPLL1_OUT_MAIN, 1 },
100 	{ P_CORE_BI_PLL_TEST_SE, 7 },
101 };
102 
103 static const char * const gcc_parent_names_4[] = {
104 	"cxo",
105 	"gpll1_out_main",
106 	"core_bi_pll_test_se",
107 };
108 
109 static const struct parent_map gcc_parent_map_5[] = {
110 	{ P_XO, 0 },
111 	{ P_DSI0_PHY_PLL_OUT_BYTECLK, 1 },
112 	{ P_GPLL0_OUT_AUX, 2 },
113 	{ P_CORE_BI_PLL_TEST_SE, 7 },
114 };
115 
116 static const char * const gcc_parent_names_5[] = {
117 	"cxo",
118 	"dsi0pll_byteclk_src",
119 	"gpll0_out_aux",
120 	"core_bi_pll_test_se",
121 };
122 
123 static const struct parent_map gcc_parent_map_6[] = {
124 	{ P_XO, 0 },
125 	{ P_DSI0_PHY_PLL_OUT_BYTECLK, 2 },
126 	{ P_GPLL0_OUT_AUX, 3 },
127 	{ P_CORE_BI_PLL_TEST_SE, 7 },
128 };
129 
130 static const char * const gcc_parent_names_6[] = {
131 	"cxo",
132 	"dsi0_phy_pll_out_byteclk",
133 	"gpll0_out_aux",
134 	"core_bi_pll_test_se",
135 };
136 
137 static const struct parent_map gcc_parent_map_7[] = {
138 	{ P_XO, 0 },
139 	{ P_GPLL0_OUT_MAIN, 1 },
140 	{ P_GPLL3_OUT_MAIN, 2 },
141 	{ P_GPLL6_OUT_AUX, 3 },
142 	{ P_GPLL4_OUT_AUX, 4 },
143 	{ P_CORE_BI_PLL_TEST_SE, 7 },
144 };
145 
146 static const char * const gcc_parent_names_7[] = {
147 	"cxo",
148 	"gpll0_out_main",
149 	"gpll3_out_main",
150 	"gpll6_out_aux",
151 	"gpll4_out_aux",
152 	"core_bi_pll_test_se",
153 };
154 
155 static const struct parent_map gcc_parent_map_8[] = {
156 	{ P_XO, 0 },
157 	{ P_HDMI_PHY_PLL_CLK, 1 },
158 	{ P_CORE_BI_PLL_TEST_SE, 7 },
159 };
160 
161 static const char * const gcc_parent_names_8[] = {
162 	"cxo",
163 	"hdmi_phy_pll_clk",
164 	"core_bi_pll_test_se",
165 };
166 
167 static const struct parent_map gcc_parent_map_9[] = {
168 	{ P_XO, 0 },
169 	{ P_GPLL0_OUT_MAIN, 1 },
170 	{ P_DSI0_PHY_PLL_OUT_DSICLK, 2 },
171 	{ P_GPLL6_OUT_AUX, 3 },
172 	{ P_CORE_BI_PLL_TEST_SE, 7 },
173 };
174 
175 static const char * const gcc_parent_names_9[] = {
176 	"cxo",
177 	"gpll0_out_main",
178 	"dsi0_phy_pll_out_dsiclk",
179 	"gpll6_out_aux",
180 	"core_bi_pll_test_se",
181 };
182 
183 static const struct parent_map gcc_parent_map_10[] = {
184 	{ P_XO, 0 },
185 	{ P_SLEEP_CLK, 1 },
186 	{ P_CORE_BI_PLL_TEST_SE, 7 },
187 };
188 
189 static const char * const gcc_parent_names_10[] = {
190 	"cxo",
191 	"sleep_clk",
192 	"core_bi_pll_test_se",
193 };
194 
195 static const struct parent_map gcc_parent_map_11[] = {
196 	{ P_XO, 0 },
197 	{ P_PCIE_0_PIPE_CLK, 1 },
198 	{ P_CORE_BI_PLL_TEST_SE, 7 },
199 };
200 
201 static const char * const gcc_parent_names_11[] = {
202 	"cxo",
203 	"pcie_0_pipe_clk",
204 	"core_bi_pll_test_se",
205 };
206 
207 static const struct parent_map gcc_parent_map_12[] = {
208 	{ P_XO, 0 },
209 	{ P_DSI0_PHY_PLL_OUT_DSICLK, 1 },
210 	{ P_GPLL0_OUT_AUX, 2 },
211 	{ P_CORE_BI_PLL_TEST_SE, 7 },
212 };
213 
214 static const char * const gcc_parent_names_12[] = {
215 	"cxo",
216 	"dsi0pll_pclk_src",
217 	"gpll0_out_aux",
218 	"core_bi_pll_test_se",
219 };
220 
221 static const struct parent_map gcc_parent_map_13[] = {
222 	{ P_XO, 0 },
223 	{ P_GPLL0_OUT_MAIN, 1 },
224 	{ P_GPLL4_OUT_MAIN, 2 },
225 	{ P_GPLL6_OUT_AUX, 3 },
226 	{ P_CORE_BI_PLL_TEST_SE, 7 },
227 };
228 
229 static const char * const gcc_parent_names_13[] = {
230 	"cxo",
231 	"gpll0_out_main",
232 	"gpll4_out_main",
233 	"gpll6_out_aux",
234 	"core_bi_pll_test_se",
235 };
236 
237 static const struct parent_map gcc_parent_map_14[] = {
238 	{ P_XO, 0 },
239 	{ P_GPLL0_OUT_MAIN, 1 },
240 	{ P_GPLL4_OUT_AUX, 2 },
241 	{ P_CORE_BI_PLL_TEST_SE, 7 },
242 };
243 
244 static const char * const gcc_parent_names_14[] = {
245 	"cxo",
246 	"gpll0_out_main",
247 	"gpll4_out_aux",
248 	"core_bi_pll_test_se",
249 };
250 
251 static const struct parent_map gcc_parent_map_15[] = {
252 	{ P_XO, 0 },
253 	{ P_GPLL0_OUT_AUX, 2 },
254 	{ P_CORE_BI_PLL_TEST_SE, 7 },
255 };
256 
257 static const char * const gcc_parent_names_15[] = {
258 	"cxo",
259 	"gpll0_out_aux",
260 	"core_bi_pll_test_se",
261 };
262 
263 static const struct parent_map gcc_parent_map_16[] = {
264 	{ P_XO, 0 },
265 	{ P_GPLL0_OUT_MAIN, 1 },
266 	{ P_GPLL0_OUT_AUX, 2 },
267 	{ P_CORE_BI_PLL_TEST_SE, 7 },
268 };
269 
270 static const char * const gcc_parent_names_16[] = {
271 	"cxo",
272 	"gpll0_out_main",
273 	"gpll0_out_aux",
274 	"core_bi_pll_test_se",
275 };
276 
277 static struct clk_fixed_factor cxo = {
278 	.mult = 1,
279 	.div = 1,
280 	.hw.init = &(struct clk_init_data){
281 		.name = "cxo",
282 		.parent_names = (const char *[]){ "xo-board" },
283 		.num_parents = 1,
284 		.ops = &clk_fixed_factor_ops,
285 	},
286 };
287 
288 static struct clk_alpha_pll gpll0_sleep_clk_src = {
289 	.offset = 0x21000,
290 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
291 	.clkr = {
292 		.enable_reg = 0x45008,
293 		.enable_mask = BIT(23),
294 		.enable_is_inverted = true,
295 		.hw.init = &(struct clk_init_data){
296 			.name = "gpll0_sleep_clk_src",
297 			.parent_names = (const char *[]){ "cxo" },
298 			.num_parents = 1,
299 			.ops = &clk_alpha_pll_ops,
300 		},
301 	},
302 };
303 
304 static struct clk_alpha_pll gpll0_out_main = {
305 	.offset = 0x21000,
306 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
307 	.flags = SUPPORTS_FSM_MODE,
308 	.clkr = {
309 		.enable_reg = 0x45000,
310 		.enable_mask = BIT(0),
311 		.hw.init = &(struct clk_init_data){
312 			.name = "gpll0_out_main",
313 			.parent_names = (const char *[])
314 					{ "cxo" },
315 			.num_parents = 1,
316 			.ops = &clk_alpha_pll_ops,
317 		},
318 	},
319 };
320 
321 static struct clk_alpha_pll gpll0_ao_out_main = {
322 	.offset = 0x21000,
323 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
324 	.flags = SUPPORTS_FSM_MODE,
325 	.clkr = {
326 		.enable_reg = 0x45000,
327 		.enable_mask = BIT(0),
328 		.hw.init = &(struct clk_init_data){
329 			.name = "gpll0_ao_out_main",
330 			.parent_names = (const char *[]){ "cxo" },
331 			.num_parents = 1,
332 			.flags = CLK_IS_CRITICAL,
333 			.ops = &clk_alpha_pll_ops,
334 		},
335 	},
336 };
337 
338 static struct clk_alpha_pll gpll1_out_main = {
339 	.offset = 0x20000,
340 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
341 	.clkr = {
342 		.enable_reg = 0x45000,
343 		.enable_mask = BIT(1),
344 		.hw.init = &(struct clk_init_data){
345 			.name = "gpll1_out_main",
346 			.parent_names = (const char *[]){ "cxo" },
347 			.num_parents = 1,
348 			.ops = &clk_alpha_pll_ops,
349 		},
350 	},
351 };
352 
353 /* 930MHz configuration */
354 static const struct alpha_pll_config gpll3_config = {
355 	.l = 48,
356 	.alpha = 0x0,
357 	.alpha_en_mask = BIT(24),
358 	.post_div_mask = 0xf << 8,
359 	.post_div_val = 0x1 << 8,
360 	.vco_mask = 0x3 << 20,
361 	.main_output_mask = 0x1,
362 	.config_ctl_val = 0x4001055b,
363 };
364 
365 static const struct pll_vco gpll3_vco[] = {
366 	{ 700000000, 1400000000, 0 },
367 };
368 
369 static struct clk_alpha_pll gpll3_out_main = {
370 	.offset = 0x22000,
371 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
372 	.vco_table = gpll3_vco,
373 	.num_vco = ARRAY_SIZE(gpll3_vco),
374 	.clkr = {
375 		.hw.init = &(struct clk_init_data){
376 			.name = "gpll3_out_main",
377 			.parent_names = (const char *[]){ "cxo" },
378 			.num_parents = 1,
379 			.ops = &clk_alpha_pll_ops,
380 		},
381 	},
382 };
383 
384 static struct clk_alpha_pll gpll4_out_main = {
385 	.offset = 0x24000,
386 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
387 	.clkr = {
388 		.enable_reg = 0x45000,
389 		.enable_mask = BIT(5),
390 		.hw.init = &(struct clk_init_data){
391 			.name = "gpll4_out_main",
392 			.parent_names = (const char *[]){ "cxo" },
393 			.num_parents = 1,
394 			.ops = &clk_alpha_pll_ops,
395 		},
396 	},
397 };
398 
399 static struct clk_pll gpll6 = {
400 	.l_reg = 0x37004,
401 	.m_reg = 0x37008,
402 	.n_reg = 0x3700C,
403 	.config_reg = 0x37014,
404 	.mode_reg = 0x37000,
405 	.status_reg = 0x3701C,
406 	.status_bit = 17,
407 	.clkr.hw.init = &(struct clk_init_data){
408 		.name = "gpll6",
409 		.parent_names = (const char *[]){ "cxo" },
410 		.num_parents = 1,
411 		.ops = &clk_pll_ops,
412 	},
413 };
414 
415 static struct clk_regmap gpll6_out_aux = {
416 	.enable_reg = 0x45000,
417 	.enable_mask = BIT(7),
418 	.hw.init = &(struct clk_init_data){
419 		.name = "gpll6_out_aux",
420 		.parent_names = (const char *[]){ "gpll6" },
421 		.num_parents = 1,
422 		.ops = &clk_pll_vote_ops,
423 	},
424 };
425 
426 static const struct freq_tbl ftbl_apss_ahb_clk_src[] = {
427 	F(19200000, P_XO, 1, 0, 0),
428 	F(50000000, P_GPLL0_OUT_MAIN, 16, 0, 0),
429 	F(100000000, P_GPLL0_OUT_MAIN, 8, 0, 0),
430 	F(133333333, P_GPLL0_OUT_MAIN, 6, 0, 0),
431 	{ }
432 };
433 
434 static struct clk_rcg2 apss_ahb_clk_src = {
435 	.cmd_rcgr = 0x46000,
436 	.mnd_width = 0,
437 	.hid_width = 5,
438 	.parent_map = gcc_parent_map_0,
439 	.freq_tbl = ftbl_apss_ahb_clk_src,
440 	.clkr.hw.init = &(struct clk_init_data){
441 		.name = "apss_ahb_clk_src",
442 		.parent_names = gcc_parent_names_ao_0,
443 		.num_parents = 3,
444 		.flags = CLK_IS_CRITICAL,
445 		.ops = &clk_rcg2_ops,
446 	},
447 };
448 
449 static const struct freq_tbl ftbl_blsp1_qup0_i2c_apps_clk_src[] = {
450 	F(19200000, P_XO, 1, 0, 0),
451 	F(50000000, P_GPLL0_OUT_MAIN, 16, 0, 0),
452 	{ }
453 };
454 
455 static struct clk_rcg2 blsp1_qup0_i2c_apps_clk_src = {
456 	.cmd_rcgr = 0x602c,
457 	.mnd_width = 0,
458 	.hid_width = 5,
459 	.parent_map = gcc_parent_map_0,
460 	.freq_tbl = ftbl_blsp1_qup0_i2c_apps_clk_src,
461 	.clkr.hw.init = &(struct clk_init_data){
462 		.name = "blsp1_qup0_i2c_apps_clk_src",
463 		.parent_names = gcc_parent_names_0,
464 		.num_parents = 3,
465 		.ops = &clk_rcg2_ops,
466 	},
467 };
468 
469 static const struct freq_tbl ftbl_blsp1_qup0_spi_apps_clk_src[] = {
470 	F(960000, P_XO, 10, 1, 2),
471 	F(4800000, P_XO, 4, 0, 0),
472 	F(9600000, P_XO, 2, 0, 0),
473 	F(16000000, P_GPLL0_OUT_MAIN, 10, 1, 5),
474 	F(19200000, P_XO, 1, 0, 0),
475 	F(25000000, P_GPLL0_OUT_MAIN, 16, 1, 2),
476 	F(50000000, P_GPLL0_OUT_MAIN, 16, 0, 0),
477 	{ }
478 };
479 
480 static struct clk_rcg2 blsp1_qup0_spi_apps_clk_src = {
481 	.cmd_rcgr = 0x6034,
482 	.mnd_width = 8,
483 	.hid_width = 5,
484 	.parent_map = gcc_parent_map_0,
485 	.freq_tbl = ftbl_blsp1_qup0_spi_apps_clk_src,
486 	.clkr.hw.init = &(struct clk_init_data){
487 		.name = "blsp1_qup0_spi_apps_clk_src",
488 		.parent_names = gcc_parent_names_0,
489 		.num_parents = 3,
490 		.ops = &clk_rcg2_ops,
491 	},
492 };
493 
494 static struct clk_rcg2 blsp1_qup1_i2c_apps_clk_src = {
495 	.cmd_rcgr = 0x200c,
496 	.mnd_width = 0,
497 	.hid_width = 5,
498 	.parent_map = gcc_parent_map_0,
499 	.freq_tbl = ftbl_blsp1_qup0_i2c_apps_clk_src,
500 	.clkr.hw.init = &(struct clk_init_data){
501 		.name = "blsp1_qup1_i2c_apps_clk_src",
502 		.parent_names = gcc_parent_names_0,
503 		.num_parents = 3,
504 		.ops = &clk_rcg2_ops,
505 	},
506 };
507 
508 static const struct freq_tbl ftbl_blsp1_qup1_spi_apps_clk_src[] = {
509 	F(960000,   P_XO, 10, 1, 2),
510 	F(4800000,  P_XO, 4, 0, 0),
511 	F(9600000,  P_XO, 2, 0, 0),
512 	F(10480000, P_GPLL0_OUT_MAIN, 1, 3, 229),
513 	F(16000000, P_GPLL0_OUT_MAIN, 10, 1, 5),
514 	F(19200000, P_XO, 1, 0, 0),
515 	F(20961000, P_GPLL0_OUT_MAIN, 1, 6, 229),
516 	{ }
517 };
518 
519 static struct clk_rcg2 blsp1_qup1_spi_apps_clk_src = {
520 	.cmd_rcgr = 0x2024,
521 	.mnd_width = 8,
522 	.hid_width = 5,
523 	.parent_map = gcc_parent_map_0,
524 	.freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
525 	.clkr.hw.init = &(struct clk_init_data){
526 		.name = "blsp1_qup1_spi_apps_clk_src",
527 		.parent_names = gcc_parent_names_0,
528 		.num_parents = 3,
529 		.ops = &clk_rcg2_ops,
530 	},
531 };
532 
533 static struct clk_rcg2 blsp1_qup2_i2c_apps_clk_src = {
534 	.cmd_rcgr = 0x3000,
535 	.mnd_width = 0,
536 	.hid_width = 5,
537 	.parent_map = gcc_parent_map_0,
538 	.freq_tbl = ftbl_blsp1_qup0_i2c_apps_clk_src,
539 	.clkr.hw.init = &(struct clk_init_data){
540 		.name = "blsp1_qup2_i2c_apps_clk_src",
541 		.parent_names = gcc_parent_names_0,
542 		.num_parents = 3,
543 		.ops = &clk_rcg2_ops,
544 	},
545 };
546 
547 static const struct freq_tbl ftbl_blsp1_qup2_spi_apps_clk_src[] = {
548 	F(960000,   P_XO, 10, 1, 2),
549 	F(4800000,  P_XO, 4, 0, 0),
550 	F(9600000,  P_XO, 2, 0, 0),
551 	F(15000000, P_GPLL0_OUT_MAIN, 1,  3, 160),
552 	F(16000000, P_GPLL0_OUT_MAIN, 10, 1, 5),
553 	F(19200000, P_XO, 1, 0, 0),
554 	F(25000000, P_GPLL0_OUT_MAIN, 16, 1, 2),
555 	F(30000000, P_GPLL0_OUT_MAIN, 1,  3, 80),
556 	{ }
557 };
558 
559 static struct clk_rcg2 blsp1_qup2_spi_apps_clk_src = {
560 	.cmd_rcgr = 0x3014,
561 	.mnd_width = 8,
562 	.hid_width = 5,
563 	.parent_map = gcc_parent_map_0,
564 	.freq_tbl = ftbl_blsp1_qup2_spi_apps_clk_src,
565 	.clkr.hw.init = &(struct clk_init_data){
566 		.name = "blsp1_qup2_spi_apps_clk_src",
567 		.parent_names = gcc_parent_names_0,
568 		.num_parents = 3,
569 		.ops = &clk_rcg2_ops,
570 	},
571 };
572 
573 static struct clk_rcg2 blsp1_qup3_i2c_apps_clk_src = {
574 	.cmd_rcgr = 0x4000,
575 	.mnd_width = 0,
576 	.hid_width = 5,
577 	.parent_map = gcc_parent_map_0,
578 	.freq_tbl = ftbl_blsp1_qup0_i2c_apps_clk_src,
579 	.clkr.hw.init = &(struct clk_init_data){
580 		.name = "blsp1_qup3_i2c_apps_clk_src",
581 		.parent_names = gcc_parent_names_0,
582 		.num_parents = 3,
583 		.ops = &clk_rcg2_ops,
584 	},
585 };
586 
587 static struct clk_rcg2 blsp1_qup3_spi_apps_clk_src = {
588 	.cmd_rcgr = 0x4024,
589 	.mnd_width = 8,
590 	.hid_width = 5,
591 	.parent_map = gcc_parent_map_0,
592 	.freq_tbl = ftbl_blsp1_qup0_spi_apps_clk_src,
593 	.clkr.hw.init = &(struct clk_init_data){
594 		.name = "blsp1_qup3_spi_apps_clk_src",
595 		.parent_names = gcc_parent_names_0,
596 		.num_parents = 3,
597 		.ops = &clk_rcg2_ops,
598 	},
599 };
600 
601 static struct clk_rcg2 blsp1_qup4_i2c_apps_clk_src = {
602 	.cmd_rcgr = 0x5000,
603 	.mnd_width = 0,
604 	.hid_width = 5,
605 	.parent_map = gcc_parent_map_0,
606 	.freq_tbl = ftbl_blsp1_qup0_i2c_apps_clk_src,
607 	.clkr.hw.init = &(struct clk_init_data){
608 		.name = "blsp1_qup4_i2c_apps_clk_src",
609 		.parent_names = gcc_parent_names_0,
610 		.num_parents = 3,
611 		.ops = &clk_rcg2_ops,
612 	},
613 };
614 
615 static struct clk_rcg2 blsp1_qup4_spi_apps_clk_src = {
616 	.cmd_rcgr = 0x5024,
617 	.mnd_width = 8,
618 	.hid_width = 5,
619 	.parent_map = gcc_parent_map_0,
620 	.freq_tbl = ftbl_blsp1_qup0_spi_apps_clk_src,
621 	.clkr.hw.init = &(struct clk_init_data){
622 		.name = "blsp1_qup4_spi_apps_clk_src",
623 		.parent_names = gcc_parent_names_0,
624 		.num_parents = 3,
625 		.ops = &clk_rcg2_ops,
626 	},
627 };
628 
629 static const struct freq_tbl ftbl_blsp1_uart0_apps_clk_src[] = {
630 	F(3686400, P_GPLL0_OUT_MAIN, 1, 72, 15625),
631 	F(7372800, P_GPLL0_OUT_MAIN, 1, 144, 15625),
632 	F(14745600, P_GPLL0_OUT_MAIN, 1, 288, 15625),
633 	F(16000000, P_GPLL0_OUT_MAIN, 10, 1, 5),
634 	F(19200000, P_XO, 1, 0, 0),
635 	F(24000000, P_GPLL0_OUT_MAIN, 1, 3, 100),
636 	F(25000000, P_GPLL0_OUT_MAIN, 16, 1, 2),
637 	F(32000000, P_GPLL0_OUT_MAIN, 1, 1, 25),
638 	F(40000000, P_GPLL0_OUT_MAIN, 1, 1, 20),
639 	F(46400000, P_GPLL0_OUT_MAIN, 1, 29, 500),
640 	F(48000000, P_GPLL0_OUT_MAIN, 1, 3, 50),
641 	F(51200000, P_GPLL0_OUT_MAIN, 1, 8, 125),
642 	F(56000000, P_GPLL0_OUT_MAIN, 1, 7, 100),
643 	F(58982400, P_GPLL0_OUT_MAIN, 1, 1152, 15625),
644 	F(60000000, P_GPLL0_OUT_MAIN, 1, 3, 40),
645 	F(64000000, P_GPLL0_OUT_MAIN, 1, 2, 25),
646 	{ }
647 };
648 
649 static struct clk_rcg2 blsp1_uart0_apps_clk_src = {
650 	.cmd_rcgr = 0x600c,
651 	.mnd_width = 16,
652 	.hid_width = 5,
653 	.parent_map = gcc_parent_map_0,
654 	.freq_tbl = ftbl_blsp1_uart0_apps_clk_src,
655 	.clkr.hw.init = &(struct clk_init_data){
656 		.name = "blsp1_uart0_apps_clk_src",
657 		.parent_names = gcc_parent_names_0,
658 		.num_parents = 3,
659 		.ops = &clk_rcg2_ops,
660 	},
661 };
662 
663 static struct clk_rcg2 blsp1_uart1_apps_clk_src = {
664 	.cmd_rcgr = 0x2044,
665 	.mnd_width = 16,
666 	.hid_width = 5,
667 	.parent_map = gcc_parent_map_0,
668 	.freq_tbl = ftbl_blsp1_uart0_apps_clk_src,
669 	.clkr.hw.init = &(struct clk_init_data){
670 		.name = "blsp1_uart1_apps_clk_src",
671 		.parent_names = gcc_parent_names_0,
672 		.num_parents = 3,
673 		.ops = &clk_rcg2_ops,
674 	},
675 };
676 
677 static struct clk_rcg2 blsp1_uart2_apps_clk_src = {
678 	.cmd_rcgr = 0x3034,
679 	.mnd_width = 16,
680 	.hid_width = 5,
681 	.parent_map = gcc_parent_map_0,
682 	.freq_tbl = ftbl_blsp1_uart0_apps_clk_src,
683 	.clkr.hw.init = &(struct clk_init_data){
684 		.name = "blsp1_uart2_apps_clk_src",
685 		.parent_names = gcc_parent_names_0,
686 		.num_parents = 3,
687 		.ops = &clk_rcg2_ops,
688 	},
689 };
690 
691 static struct clk_rcg2 blsp1_uart3_apps_clk_src = {
692 	.cmd_rcgr = 0x4014,
693 	.mnd_width = 16,
694 	.hid_width = 5,
695 	.cfg_off = 0x20,
696 	.parent_map = gcc_parent_map_0,
697 	.freq_tbl = ftbl_blsp1_uart0_apps_clk_src,
698 	.clkr.hw.init = &(struct clk_init_data){
699 		.name = "blsp1_uart3_apps_clk_src",
700 		.parent_names = gcc_parent_names_0,
701 		.num_parents = 3,
702 		.ops = &clk_rcg2_ops,
703 	},
704 };
705 
706 static struct clk_rcg2 blsp2_qup0_i2c_apps_clk_src = {
707 	.cmd_rcgr = 0xc00c,
708 	.mnd_width = 0,
709 	.hid_width = 5,
710 	.parent_map = gcc_parent_map_0,
711 	.freq_tbl = ftbl_blsp1_qup0_i2c_apps_clk_src,
712 	.clkr.hw.init = &(struct clk_init_data){
713 		.name = "blsp2_qup0_i2c_apps_clk_src",
714 		.parent_names = gcc_parent_names_0,
715 		.num_parents = 3,
716 		.ops = &clk_rcg2_ops,
717 	},
718 };
719 
720 static struct clk_rcg2 blsp2_qup0_spi_apps_clk_src = {
721 	.cmd_rcgr = 0xc024,
722 	.mnd_width = 8,
723 	.hid_width = 5,
724 	.parent_map = gcc_parent_map_0,
725 	.freq_tbl = ftbl_blsp1_qup0_spi_apps_clk_src,
726 	.clkr.hw.init = &(struct clk_init_data){
727 		.name = "blsp2_qup0_spi_apps_clk_src",
728 		.parent_names = gcc_parent_names_0,
729 		.num_parents = 3,
730 		.ops = &clk_rcg2_ops,
731 	},
732 };
733 
734 static struct clk_rcg2 blsp2_uart0_apps_clk_src = {
735 	.cmd_rcgr = 0xc044,
736 	.mnd_width = 16,
737 	.hid_width = 5,
738 	.parent_map = gcc_parent_map_0,
739 	.freq_tbl = ftbl_blsp1_uart0_apps_clk_src,
740 	.clkr.hw.init = &(struct clk_init_data){
741 		.name = "blsp2_uart0_apps_clk_src",
742 		.parent_names = gcc_parent_names_0,
743 		.num_parents = 3,
744 		.ops = &clk_rcg2_ops,
745 	},
746 };
747 
748 static struct clk_rcg2 byte0_clk_src = {
749 	.cmd_rcgr = 0x4d044,
750 	.mnd_width = 0,
751 	.hid_width = 5,
752 	.parent_map = gcc_parent_map_5,
753 	.clkr.hw.init = &(struct clk_init_data){
754 		.name = "byte0_clk_src",
755 		.parent_names = gcc_parent_names_5,
756 		.num_parents = 4,
757 		.flags = CLK_SET_RATE_PARENT,
758 		.ops = &clk_byte2_ops,
759 	},
760 };
761 
762 static const struct freq_tbl ftbl_emac_clk_src[] = {
763 	F(5000000,   P_GPLL1_OUT_MAIN, 2, 1, 50),
764 	F(50000000,  P_GPLL1_OUT_MAIN, 10, 0, 0),
765 	F(125000000, P_GPLL1_OUT_MAIN, 4, 0, 0),
766 	F(250000000, P_GPLL1_OUT_MAIN, 2, 0, 0),
767 	{ }
768 };
769 
770 static struct clk_rcg2 emac_clk_src = {
771 	.cmd_rcgr = 0x4e01c,
772 	.mnd_width = 8,
773 	.hid_width = 5,
774 	.parent_map = gcc_parent_map_4,
775 	.freq_tbl = ftbl_emac_clk_src,
776 	.clkr.hw.init = &(struct clk_init_data){
777 		.name = "emac_clk_src",
778 		.parent_names = gcc_parent_names_4,
779 		.num_parents = 3,
780 		.ops = &clk_rcg2_ops,
781 	},
782 };
783 
784 static const struct freq_tbl ftbl_emac_ptp_clk_src[] = {
785 	F(50000000,  P_GPLL1_OUT_MAIN, 10, 0, 0),
786 	F(125000000, P_GPLL1_OUT_MAIN, 4, 0, 0),
787 	F(250000000, P_GPLL1_OUT_MAIN, 2, 0, 0),
788 	{ }
789 };
790 
791 static struct clk_rcg2 emac_ptp_clk_src = {
792 	.cmd_rcgr = 0x4e014,
793 	.mnd_width = 0,
794 	.hid_width = 5,
795 	.parent_map = gcc_parent_map_4,
796 	.freq_tbl = ftbl_emac_ptp_clk_src,
797 	.clkr.hw.init = &(struct clk_init_data){
798 		.name = "emac_ptp_clk_src",
799 		.parent_names = gcc_parent_names_4,
800 		.num_parents = 3,
801 		.ops = &clk_rcg2_ops,
802 	},
803 };
804 
805 static const struct freq_tbl ftbl_esc0_clk_src[] = {
806 	F(19200000, P_XO, 1, 0, 0),
807 	{ }
808 };
809 
810 static struct clk_rcg2 esc0_clk_src = {
811 	.cmd_rcgr = 0x4d05c,
812 	.mnd_width = 0,
813 	.hid_width = 5,
814 	.parent_map = gcc_parent_map_6,
815 	.freq_tbl = ftbl_esc0_clk_src,
816 	.clkr.hw.init = &(struct clk_init_data){
817 		.name = "esc0_clk_src",
818 		.parent_names = gcc_parent_names_6,
819 		.num_parents = 4,
820 		.ops = &clk_rcg2_ops,
821 	},
822 };
823 
824 static const struct freq_tbl ftbl_gfx3d_clk_src[] = {
825 	F(19200000,  P_XO, 1, 0, 0),
826 	F(50000000,  P_GPLL0_OUT_MAIN, 16, 0, 0),
827 	F(80000000,  P_GPLL0_OUT_MAIN, 10, 0, 0),
828 	F(100000000, P_GPLL0_OUT_MAIN, 8, 0, 0),
829 	F(160000000, P_GPLL0_OUT_MAIN, 5, 0, 0),
830 	F(200000000, P_GPLL0_OUT_MAIN, 4, 0, 0),
831 	F(228571429, P_GPLL0_OUT_MAIN, 3.5, 0, 0),
832 	F(240000000, P_GPLL6_OUT_AUX,  4.5, 0, 0),
833 	F(266666667, P_GPLL0_OUT_MAIN, 3, 0, 0),
834 	F(270000000, P_GPLL6_OUT_AUX,  4, 0, 0),
835 	F(320000000, P_GPLL0_OUT_MAIN, 2.5, 0, 0),
836 	F(400000000, P_GPLL0_OUT_MAIN, 2, 0, 0),
837 	F(484800000, P_GPLL3_OUT_MAIN, 1, 0, 0),
838 	F(523200000, P_GPLL3_OUT_MAIN, 1, 0, 0),
839 	F(550000000, P_GPLL3_OUT_MAIN, 1, 0, 0),
840 	F(598000000, P_GPLL3_OUT_MAIN, 1, 0, 0),
841 	{ }
842 };
843 
844 static struct clk_rcg2 gfx3d_clk_src = {
845 	.cmd_rcgr = 0x59000,
846 	.mnd_width = 0,
847 	.hid_width = 5,
848 	.parent_map = gcc_parent_map_7,
849 	.freq_tbl = ftbl_gfx3d_clk_src,
850 	.clkr.hw.init = &(struct clk_init_data){
851 		.name = "gfx3d_clk_src",
852 		.parent_names = gcc_parent_names_7,
853 		.num_parents = 6,
854 		.ops = &clk_rcg2_ops,
855 	},
856 };
857 
858 static const struct freq_tbl ftbl_gp1_clk_src[] = {
859 	F(19200000, P_XO, 1, 0, 0),
860 	F(100000000, P_GPLL0_OUT_MAIN, 8, 0, 0),
861 	F(200000000, P_GPLL0_OUT_MAIN, 4, 0, 0),
862 	{ }
863 };
864 
865 static struct clk_rcg2 gp1_clk_src = {
866 	.cmd_rcgr = 0x8004,
867 	.mnd_width = 8,
868 	.hid_width = 5,
869 	.parent_map = gcc_parent_map_2,
870 	.freq_tbl = ftbl_gp1_clk_src,
871 	.clkr.hw.init = &(struct clk_init_data){
872 		.name = "gp1_clk_src",
873 		.parent_names = gcc_parent_names_2,
874 		.num_parents = 4,
875 		.ops = &clk_rcg2_ops,
876 	},
877 };
878 
879 static struct clk_rcg2 gp2_clk_src = {
880 	.cmd_rcgr = 0x9004,
881 	.mnd_width = 8,
882 	.hid_width = 5,
883 	.parent_map = gcc_parent_map_2,
884 	.freq_tbl = ftbl_gp1_clk_src,
885 	.clkr.hw.init = &(struct clk_init_data){
886 		.name = "gp2_clk_src",
887 		.parent_names = gcc_parent_names_2,
888 		.num_parents = 4,
889 		.ops = &clk_rcg2_ops,
890 	},
891 };
892 
893 static struct clk_rcg2 gp3_clk_src = {
894 	.cmd_rcgr = 0xa004,
895 	.mnd_width = 8,
896 	.hid_width = 5,
897 	.parent_map = gcc_parent_map_2,
898 	.freq_tbl = ftbl_gp1_clk_src,
899 	.clkr.hw.init = &(struct clk_init_data){
900 		.name = "gp3_clk_src",
901 		.parent_names = gcc_parent_names_2,
902 		.num_parents = 4,
903 		.ops = &clk_rcg2_ops,
904 	},
905 };
906 
907 static struct clk_rcg2 hdmi_app_clk_src = {
908 	.cmd_rcgr = 0x4d0e4,
909 	.mnd_width = 0,
910 	.hid_width = 5,
911 	.parent_map = gcc_parent_map_1,
912 	.freq_tbl = ftbl_esc0_clk_src,
913 	.clkr.hw.init = &(struct clk_init_data){
914 		.name = "hdmi_app_clk_src",
915 		.parent_names = gcc_parent_names_1,
916 		.num_parents = 2,
917 		.ops = &clk_rcg2_ops,
918 	},
919 };
920 
921 static struct clk_rcg2 hdmi_pclk_clk_src = {
922 	.cmd_rcgr = 0x4d0dc,
923 	.mnd_width = 0,
924 	.hid_width = 5,
925 	.parent_map = gcc_parent_map_8,
926 	.freq_tbl = ftbl_esc0_clk_src,
927 	.clkr.hw.init = &(struct clk_init_data){
928 		.name = "hdmi_pclk_clk_src",
929 		.parent_names = gcc_parent_names_8,
930 		.num_parents = 3,
931 		.ops = &clk_rcg2_ops,
932 	},
933 };
934 
935 static const struct freq_tbl ftbl_mdp_clk_src[] = {
936 	F(50000000, P_GPLL0_OUT_MAIN, 16, 0, 0),
937 	F(80000000, P_GPLL0_OUT_MAIN, 10, 0, 0),
938 	F(100000000, P_GPLL0_OUT_MAIN, 8, 0, 0),
939 	F(145454545, P_GPLL0_OUT_MAIN, 5.5, 0, 0),
940 	F(160000000, P_GPLL0_OUT_MAIN, 5, 0, 0),
941 	F(177777778, P_GPLL0_OUT_MAIN, 4.5, 0, 0),
942 	F(200000000, P_GPLL0_OUT_MAIN, 4, 0, 0),
943 	F(266666667, P_GPLL0_OUT_MAIN, 3, 0, 0),
944 	F(320000000, P_GPLL0_OUT_MAIN, 2.5, 0, 0),
945 	{ }
946 };
947 
948 static struct clk_rcg2 mdp_clk_src = {
949 	.cmd_rcgr = 0x4d014,
950 	.mnd_width = 0,
951 	.hid_width = 5,
952 	.parent_map = gcc_parent_map_9,
953 	.freq_tbl = ftbl_mdp_clk_src,
954 	.clkr.hw.init = &(struct clk_init_data){
955 		.name = "mdp_clk_src",
956 		.parent_names = gcc_parent_names_9,
957 		.num_parents = 5,
958 		.ops = &clk_rcg2_ops,
959 	},
960 };
961 
962 static const struct freq_tbl ftbl_pcie_0_aux_clk_src[] = {
963 	F(1200000, P_XO, 16, 0, 0),
964 	{ }
965 };
966 
967 static struct clk_rcg2 pcie_0_aux_clk_src = {
968 	.cmd_rcgr = 0x3e024,
969 	.mnd_width = 16,
970 	.hid_width = 5,
971 	.parent_map = gcc_parent_map_10,
972 	.freq_tbl = ftbl_pcie_0_aux_clk_src,
973 	.clkr.hw.init = &(struct clk_init_data){
974 		.name = "pcie_0_aux_clk_src",
975 		.parent_names = gcc_parent_names_10,
976 		.num_parents = 3,
977 		.ops = &clk_rcg2_ops,
978 	},
979 };
980 
981 static const struct freq_tbl ftbl_pcie_0_pipe_clk_src[] = {
982 	F(19200000, P_XO, 1, 0, 0),
983 	F(125000000, P_PCIE_0_PIPE_CLK, 2, 0, 0),
984 	F(250000000, P_PCIE_0_PIPE_CLK, 1, 0, 0),
985 	{ }
986 };
987 
988 static struct clk_rcg2 pcie_0_pipe_clk_src = {
989 	.cmd_rcgr = 0x3e01c,
990 	.mnd_width = 0,
991 	.hid_width = 5,
992 	.parent_map = gcc_parent_map_11,
993 	.freq_tbl = ftbl_pcie_0_pipe_clk_src,
994 	.clkr.hw.init = &(struct clk_init_data){
995 		.name = "pcie_0_pipe_clk_src",
996 		.parent_names = gcc_parent_names_11,
997 		.num_parents = 3,
998 		.ops = &clk_rcg2_ops,
999 	},
1000 };
1001 
1002 static struct clk_rcg2 pclk0_clk_src = {
1003 	.cmd_rcgr = 0x4d000,
1004 	.mnd_width = 8,
1005 	.hid_width = 5,
1006 	.parent_map = gcc_parent_map_12,
1007 	.clkr.hw.init = &(struct clk_init_data){
1008 		.name = "pclk0_clk_src",
1009 		.parent_names = gcc_parent_names_12,
1010 		.num_parents = 4,
1011 		.flags = CLK_SET_RATE_PARENT,
1012 		.ops = &clk_pixel_ops,
1013 	},
1014 };
1015 
1016 static const struct freq_tbl ftbl_pdm2_clk_src[] = {
1017 	F(19200000, P_XO, 1, 0, 0),
1018 	F(64000000, P_GPLL0_OUT_MAIN, 12.5, 0, 0),
1019 	{ }
1020 };
1021 
1022 static struct clk_rcg2 pdm2_clk_src = {
1023 	.cmd_rcgr = 0x44010,
1024 	.mnd_width = 0,
1025 	.hid_width = 5,
1026 	.parent_map = gcc_parent_map_0,
1027 	.freq_tbl = ftbl_pdm2_clk_src,
1028 	.clkr.hw.init = &(struct clk_init_data){
1029 		.name = "pdm2_clk_src",
1030 		.parent_names = gcc_parent_names_0,
1031 		.num_parents = 3,
1032 		.ops = &clk_rcg2_ops,
1033 	},
1034 };
1035 
1036 static const struct freq_tbl ftbl_sdcc1_apps_clk_src[] = {
1037 	F(144000, P_XO, 16, 3, 25),
1038 	F(400000, P_XO, 12, 1, 4),
1039 	F(20000000, P_GPLL0_OUT_MAIN, 10, 1, 4),
1040 	F(25000000, P_GPLL0_OUT_MAIN, 16, 1, 2),
1041 	F(50000000, P_GPLL0_OUT_MAIN, 16, 0, 0),
1042 	F(100000000, P_GPLL0_OUT_MAIN, 8, 0, 0),
1043 	F(177777778, P_GPLL0_OUT_MAIN, 4.5, 0, 0),
1044 	F(192000000, P_GPLL4_OUT_MAIN, 6, 0, 0),
1045 	F(200000000, P_GPLL0_OUT_MAIN, 4, 0, 0),
1046 	F(384000000, P_GPLL4_OUT_MAIN, 3, 0, 0),
1047 	{ }
1048 };
1049 
1050 static struct clk_rcg2 sdcc1_apps_clk_src = {
1051 	.cmd_rcgr = 0x42004,
1052 	.mnd_width = 8,
1053 	.hid_width = 5,
1054 	.parent_map = gcc_parent_map_13,
1055 	.freq_tbl = ftbl_sdcc1_apps_clk_src,
1056 	.clkr.hw.init = &(struct clk_init_data){
1057 		.name = "sdcc1_apps_clk_src",
1058 		.parent_names = gcc_parent_names_13,
1059 		.num_parents = 5,
1060 		.ops = &clk_rcg2_ops,
1061 	},
1062 };
1063 
1064 static const struct freq_tbl ftbl_sdcc1_ice_core_clk_src[] = {
1065 	F(160000000, P_GPLL0_OUT_MAIN, 5, 0, 0),
1066 	F(266666667, P_GPLL0_OUT_MAIN, 3, 0, 0),
1067 	{ }
1068 };
1069 
1070 static struct clk_rcg2 sdcc1_ice_core_clk_src = {
1071 	.cmd_rcgr = 0x5d000,
1072 	.mnd_width = 8,
1073 	.hid_width = 5,
1074 	.parent_map = gcc_parent_map_3,
1075 	.freq_tbl = ftbl_sdcc1_ice_core_clk_src,
1076 	.clkr.hw.init = &(struct clk_init_data){
1077 		.name = "sdcc1_ice_core_clk_src",
1078 		.parent_names = gcc_parent_names_3,
1079 		.num_parents = 4,
1080 		.ops = &clk_rcg2_ops,
1081 	},
1082 };
1083 
1084 static const struct freq_tbl ftbl_sdcc2_apps_clk_src[] = {
1085 	F(144000, P_XO, 16, 3, 25),
1086 	F(400000, P_XO, 12, 1, 4),
1087 	F(20000000, P_GPLL0_OUT_MAIN, 10, 1, 4),
1088 	F(25000000, P_GPLL0_OUT_MAIN, 16, 1, 2),
1089 	F(50000000, P_GPLL0_OUT_MAIN, 16, 0, 0),
1090 	F(100000000, P_GPLL0_OUT_MAIN, 8, 0, 0),
1091 	F(177777778, P_GPLL0_OUT_MAIN, 4.5, 0, 0),
1092 	F(200000000, P_GPLL0_OUT_MAIN, 4, 0, 0),
1093 	{ }
1094 };
1095 
1096 static struct clk_rcg2 sdcc2_apps_clk_src = {
1097 	.cmd_rcgr = 0x43004,
1098 	.mnd_width = 8,
1099 	.hid_width = 5,
1100 	.parent_map = gcc_parent_map_14,
1101 	.freq_tbl = ftbl_sdcc2_apps_clk_src,
1102 	.clkr.hw.init = &(struct clk_init_data){
1103 		.name = "sdcc2_apps_clk_src",
1104 		.parent_names = gcc_parent_names_14,
1105 		.num_parents = 4,
1106 		.ops = &clk_rcg2_ops,
1107 	},
1108 };
1109 
1110 static struct clk_rcg2 usb20_mock_utmi_clk_src = {
1111 	.cmd_rcgr = 0x41048,
1112 	.mnd_width = 0,
1113 	.hid_width = 5,
1114 	.parent_map = gcc_parent_map_1,
1115 	.freq_tbl = ftbl_esc0_clk_src,
1116 	.clkr.hw.init = &(struct clk_init_data){
1117 		.name = "usb20_mock_utmi_clk_src",
1118 		.parent_names = gcc_parent_names_1,
1119 		.num_parents = 2,
1120 		.ops = &clk_rcg2_ops,
1121 	},
1122 };
1123 
1124 static const struct freq_tbl ftbl_usb30_master_clk_src[] = {
1125 	F(19200000, P_XO, 1, 0, 0),
1126 	F(100000000, P_GPLL0_OUT_MAIN, 8, 0, 0),
1127 	F(200000000, P_GPLL0_OUT_MAIN, 4, 0, 0),
1128 	F(266666667, P_GPLL0_OUT_MAIN, 3, 0, 0),
1129 	{ }
1130 };
1131 
1132 static struct clk_rcg2 usb30_master_clk_src = {
1133 	.cmd_rcgr = 0x39028,
1134 	.mnd_width = 8,
1135 	.hid_width = 5,
1136 	.parent_map = gcc_parent_map_0,
1137 	.freq_tbl = ftbl_usb30_master_clk_src,
1138 	.clkr.hw.init = &(struct clk_init_data){
1139 		.name = "usb30_master_clk_src",
1140 		.parent_names = gcc_parent_names_0,
1141 		.num_parents = 3,
1142 		.ops = &clk_rcg2_ops,
1143 	},
1144 };
1145 
1146 static struct clk_rcg2 usb30_mock_utmi_clk_src = {
1147 	.cmd_rcgr = 0x3901c,
1148 	.mnd_width = 0,
1149 	.hid_width = 5,
1150 	.parent_map = gcc_parent_map_1,
1151 	.freq_tbl = ftbl_esc0_clk_src,
1152 	.clkr.hw.init = &(struct clk_init_data){
1153 		.name = "usb30_mock_utmi_clk_src",
1154 		.parent_names = gcc_parent_names_1,
1155 		.num_parents = 2,
1156 		.ops = &clk_rcg2_ops,
1157 	},
1158 };
1159 
1160 static struct clk_rcg2 usb3_phy_aux_clk_src = {
1161 	.cmd_rcgr = 0x3903c,
1162 	.mnd_width = 0,
1163 	.hid_width = 5,
1164 	.parent_map = gcc_parent_map_1,
1165 	.freq_tbl = ftbl_pcie_0_aux_clk_src,
1166 	.clkr.hw.init = &(struct clk_init_data){
1167 		.name = "usb3_phy_aux_clk_src",
1168 		.parent_names = gcc_parent_names_1,
1169 		.num_parents = 2,
1170 		.ops = &clk_rcg2_ops,
1171 	},
1172 };
1173 
1174 static const struct freq_tbl ftbl_usb_hs_system_clk_src[] = {
1175 	F(19200000, P_XO, 1, 0, 0),
1176 	F(80000000, P_GPLL0_OUT_MAIN, 10, 0, 0),
1177 	F(100000000, P_GPLL0_OUT_MAIN, 8, 0, 0),
1178 	F(133333333, P_GPLL0_OUT_MAIN, 6, 0, 0),
1179 	F(177777778, P_GPLL0_OUT_MAIN, 4.5, 0, 0),
1180 	{ }
1181 };
1182 
1183 static struct clk_rcg2 usb_hs_system_clk_src = {
1184 	.cmd_rcgr = 0x41010,
1185 	.mnd_width = 0,
1186 	.hid_width = 5,
1187 	.parent_map = gcc_parent_map_3,
1188 	.freq_tbl = ftbl_usb_hs_system_clk_src,
1189 	.clkr.hw.init = &(struct clk_init_data){
1190 		.name = "usb_hs_system_clk_src",
1191 		.parent_names = gcc_parent_names_3,
1192 		.num_parents = 4,
1193 		.ops = &clk_rcg2_ops,
1194 	},
1195 };
1196 
1197 static struct clk_rcg2 vsync_clk_src = {
1198 	.cmd_rcgr = 0x4d02c,
1199 	.mnd_width = 0,
1200 	.hid_width = 5,
1201 	.parent_map = gcc_parent_map_15,
1202 	.freq_tbl = ftbl_esc0_clk_src,
1203 	.clkr.hw.init = &(struct clk_init_data){
1204 		.name = "vsync_clk_src",
1205 		.parent_names = gcc_parent_names_15,
1206 		.num_parents = 3,
1207 		.ops = &clk_rcg2_ops,
1208 	},
1209 };
1210 
1211 static const struct freq_tbl ftbl_cdsp_bimc_clk_src[] = {
1212 	F(19200000, P_XO, 1, 0, 0),
1213 	F(133333333, P_GPLL0_OUT_MAIN, 6, 0, 0),
1214 	F(266666667, P_GPLL0_OUT_MAIN, 3, 0, 0),
1215 	F(320000000, P_GPLL0_OUT_MAIN, 2.5, 0, 0),
1216 	{ }
1217 };
1218 
1219 static struct clk_rcg2 cdsp_bimc_clk_src = {
1220 	.cmd_rcgr = 0x5e010,
1221 	.mnd_width = 0,
1222 	.hid_width = 5,
1223 	.parent_map = gcc_parent_map_16,
1224 	.freq_tbl = ftbl_cdsp_bimc_clk_src,
1225 	.clkr.hw.init = &(struct clk_init_data) {
1226 		.name = "cdsp_bimc_clk_src",
1227 		.parent_names = gcc_parent_names_16,
1228 		.num_parents = 4,
1229 		.ops = &clk_rcg2_ops,
1230 	},
1231 };
1232 
1233 static struct clk_branch gcc_apss_ahb_clk = {
1234 	.halt_reg = 0x4601c,
1235 	.halt_check = BRANCH_HALT_VOTED,
1236 	.clkr = {
1237 		.enable_reg = 0x45004,
1238 		.enable_mask = BIT(14),
1239 		.hw.init = &(struct clk_init_data){
1240 			.name = "gcc_apss_ahb_clk",
1241 			.parent_names = (const char *[]){
1242 				"apss_ahb_clk_src",
1243 			},
1244 			.num_parents = 1,
1245 			.flags = CLK_SET_RATE_PARENT,
1246 			.ops = &clk_branch2_ops,
1247 		},
1248 	},
1249 };
1250 
1251 static struct clk_branch gcc_apss_tcu_clk = {
1252 	.halt_reg = 0x5b004,
1253 	.halt_check = BRANCH_VOTED,
1254 	.clkr = {
1255 		.enable_reg = 0x4500c,
1256 		.enable_mask = BIT(1),
1257 		.hw.init = &(struct clk_init_data){
1258 			.name = "gcc_apss_tcu_clk",
1259 			.ops = &clk_branch2_ops,
1260 		},
1261 	},
1262 };
1263 
1264 static struct clk_branch gcc_bimc_gfx_clk = {
1265 	.halt_reg = 0x59034,
1266 	.halt_check = BRANCH_HALT,
1267 	.clkr = {
1268 		.enable_reg = 0x59034,
1269 		.enable_mask = BIT(0),
1270 		.hw.init = &(struct clk_init_data){
1271 			.name = "gcc_bimc_gfx_clk",
1272 			.ops = &clk_branch2_ops,
1273 			.parent_names = (const char *[]){
1274 				"gcc_apss_tcu_clk",
1275 			},
1276 
1277 		},
1278 	},
1279 };
1280 
1281 static struct clk_branch gcc_bimc_gpu_clk = {
1282 	.halt_reg = 0x59030,
1283 	.halt_check = BRANCH_HALT,
1284 	.clkr = {
1285 		.enable_reg = 0x59030,
1286 		.enable_mask = BIT(0),
1287 		.hw.init = &(struct clk_init_data){
1288 			.name = "gcc_bimc_gpu_clk",
1289 			.ops = &clk_branch2_ops,
1290 		},
1291 	},
1292 };
1293 
1294 static struct clk_branch gcc_bimc_cdsp_clk = {
1295 	.halt_reg = 0x31030,
1296 	.halt_check = BRANCH_HALT,
1297 	.clkr = {
1298 		.enable_reg = 0x31030,
1299 		.enable_mask = BIT(0),
1300 		.hw.init = &(struct clk_init_data) {
1301 			.name = "gcc_bimc_cdsp_clk",
1302 			.parent_names = (const char *[]) {
1303 				"cdsp_bimc_clk_src",
1304 			},
1305 			.num_parents = 1,
1306 			.flags = CLK_SET_RATE_PARENT,
1307 			.ops = &clk_branch2_ops,
1308 		},
1309 	},
1310 };
1311 
1312 static struct clk_branch gcc_bimc_mdss_clk = {
1313 	.halt_reg = 0x31038,
1314 	.halt_check = BRANCH_HALT,
1315 	.clkr = {
1316 		.enable_reg = 0x31038,
1317 		.enable_mask = BIT(0),
1318 		.hw.init = &(struct clk_init_data){
1319 			.name = "gcc_bimc_mdss_clk",
1320 			.ops = &clk_branch2_ops,
1321 		},
1322 	},
1323 };
1324 
1325 static struct clk_branch gcc_blsp1_ahb_clk = {
1326 	.halt_reg = 0x1008,
1327 	.halt_check = BRANCH_HALT_VOTED,
1328 	.clkr = {
1329 		.enable_reg = 0x45004,
1330 		.enable_mask = BIT(10),
1331 		.hw.init = &(struct clk_init_data){
1332 			.name = "gcc_blsp1_ahb_clk",
1333 			.ops = &clk_branch2_ops,
1334 		},
1335 	},
1336 };
1337 
1338 static struct clk_branch gcc_dcc_clk = {
1339 	.halt_reg = 0x77004,
1340 	.halt_check = BRANCH_HALT,
1341 	.clkr = {
1342 		.enable_reg = 0x77004,
1343 		.enable_mask = BIT(0),
1344 		.hw.init = &(struct clk_init_data){
1345 			.name = "gcc_dcc_clk",
1346 			.ops = &clk_branch2_ops,
1347 		},
1348 	},
1349 };
1350 
1351 static struct clk_branch gcc_dcc_xo_clk = {
1352 	.halt_reg = 0x77008,
1353 	.halt_check = BRANCH_HALT,
1354 	.clkr = {
1355 		.enable_reg = 0x77008,
1356 		.enable_mask = BIT(0),
1357 		.hw.init = &(struct clk_init_data){
1358 			.name = "gcc_dcc_xo_clk",
1359 			.ops = &clk_branch2_ops,
1360 		},
1361 	},
1362 };
1363 
1364 static struct clk_branch gcc_blsp1_qup0_i2c_apps_clk = {
1365 	.halt_reg = 0x6028,
1366 	.halt_check = BRANCH_HALT,
1367 	.clkr = {
1368 		.enable_reg = 0x6028,
1369 		.enable_mask = BIT(0),
1370 		.hw.init = &(struct clk_init_data){
1371 			.name = "gcc_blsp1_qup0_i2c_apps_clk",
1372 			.parent_names = (const char *[]){
1373 				"blsp1_qup0_i2c_apps_clk_src",
1374 			},
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_qup0_spi_apps_clk = {
1383 	.halt_reg = 0x6024,
1384 	.halt_check = BRANCH_HALT,
1385 	.clkr = {
1386 		.enable_reg = 0x6024,
1387 		.enable_mask = BIT(0),
1388 		.hw.init = &(struct clk_init_data){
1389 			.name = "gcc_blsp1_qup0_spi_apps_clk",
1390 			.parent_names = (const char *[]){
1391 				"blsp1_qup0_spi_apps_clk_src",
1392 			},
1393 			.num_parents = 1,
1394 			.flags = CLK_SET_RATE_PARENT,
1395 			.ops = &clk_branch2_ops,
1396 		},
1397 	},
1398 };
1399 
1400 static struct clk_branch gcc_blsp1_qup1_i2c_apps_clk = {
1401 	.halt_reg = 0x2008,
1402 	.halt_check = BRANCH_HALT,
1403 	.clkr = {
1404 		.enable_reg = 0x2008,
1405 		.enable_mask = BIT(0),
1406 		.hw.init = &(struct clk_init_data){
1407 			.name = "gcc_blsp1_qup1_i2c_apps_clk",
1408 			.parent_names = (const char *[]){
1409 				"blsp1_qup1_i2c_apps_clk_src",
1410 			},
1411 			.num_parents = 1,
1412 			.flags = CLK_SET_RATE_PARENT,
1413 			.ops = &clk_branch2_ops,
1414 		},
1415 	},
1416 };
1417 
1418 static struct clk_branch gcc_blsp1_qup1_spi_apps_clk = {
1419 	.halt_reg = 0x2004,
1420 	.halt_check = BRANCH_HALT,
1421 	.clkr = {
1422 		.enable_reg = 0x2004,
1423 		.enable_mask = BIT(0),
1424 		.hw.init = &(struct clk_init_data){
1425 			.name = "gcc_blsp1_qup1_spi_apps_clk",
1426 			.parent_names = (const char *[]){
1427 				"blsp1_qup1_spi_apps_clk_src",
1428 			},
1429 			.num_parents = 1,
1430 			.flags = CLK_SET_RATE_PARENT,
1431 			.ops = &clk_branch2_ops,
1432 		},
1433 	},
1434 };
1435 
1436 static struct clk_branch gcc_blsp1_qup2_i2c_apps_clk = {
1437 	.halt_reg = 0x3010,
1438 	.halt_check = BRANCH_HALT,
1439 	.clkr = {
1440 		.enable_reg = 0x3010,
1441 		.enable_mask = BIT(0),
1442 		.hw.init = &(struct clk_init_data){
1443 			.name = "gcc_blsp1_qup2_i2c_apps_clk",
1444 			.parent_names = (const char *[]){
1445 				"blsp1_qup2_i2c_apps_clk_src",
1446 			},
1447 			.num_parents = 1,
1448 			.flags = CLK_SET_RATE_PARENT,
1449 			.ops = &clk_branch2_ops,
1450 		},
1451 	},
1452 };
1453 
1454 static struct clk_branch gcc_blsp1_qup2_spi_apps_clk = {
1455 	.halt_reg = 0x300c,
1456 	.halt_check = BRANCH_HALT,
1457 	.clkr = {
1458 		.enable_reg = 0x300c,
1459 		.enable_mask = BIT(0),
1460 		.hw.init = &(struct clk_init_data){
1461 			.name = "gcc_blsp1_qup2_spi_apps_clk",
1462 			.parent_names = (const char *[]){
1463 				"blsp1_qup2_spi_apps_clk_src",
1464 			},
1465 			.num_parents = 1,
1466 			.flags = CLK_SET_RATE_PARENT,
1467 			.ops = &clk_branch2_ops,
1468 		},
1469 	},
1470 };
1471 
1472 static struct clk_branch gcc_blsp1_qup3_i2c_apps_clk = {
1473 	.halt_reg = 0x4020,
1474 	.halt_check = BRANCH_HALT,
1475 	.clkr = {
1476 		.enable_reg = 0x4020,
1477 		.enable_mask = BIT(0),
1478 		.hw.init = &(struct clk_init_data){
1479 			.name = "gcc_blsp1_qup3_i2c_apps_clk",
1480 			.parent_names = (const char *[]){
1481 				"blsp1_qup3_i2c_apps_clk_src",
1482 			},
1483 			.num_parents = 1,
1484 			.flags = CLK_SET_RATE_PARENT,
1485 			.ops = &clk_branch2_ops,
1486 		},
1487 	},
1488 };
1489 
1490 static struct clk_branch gcc_blsp1_qup3_spi_apps_clk = {
1491 	.halt_reg = 0x401c,
1492 	.halt_check = BRANCH_HALT,
1493 	.clkr = {
1494 		.enable_reg = 0x401c,
1495 		.enable_mask = BIT(0),
1496 		.hw.init = &(struct clk_init_data){
1497 			.name = "gcc_blsp1_qup3_spi_apps_clk",
1498 			.parent_names = (const char *[]){
1499 				"blsp1_qup3_spi_apps_clk_src",
1500 			},
1501 			.num_parents = 1,
1502 			.flags = CLK_SET_RATE_PARENT,
1503 			.ops = &clk_branch2_ops,
1504 		},
1505 	},
1506 };
1507 
1508 static struct clk_branch gcc_blsp1_qup4_i2c_apps_clk = {
1509 	.halt_reg = 0x5020,
1510 	.halt_check = BRANCH_HALT,
1511 	.clkr = {
1512 		.enable_reg = 0x5020,
1513 		.enable_mask = BIT(0),
1514 		.hw.init = &(struct clk_init_data){
1515 			.name = "gcc_blsp1_qup4_i2c_apps_clk",
1516 			.parent_names = (const char *[]){
1517 				"blsp1_qup4_i2c_apps_clk_src",
1518 			},
1519 			.num_parents = 1,
1520 			.flags = CLK_SET_RATE_PARENT,
1521 			.ops = &clk_branch2_ops,
1522 		},
1523 	},
1524 };
1525 
1526 static struct clk_branch gcc_blsp1_qup4_spi_apps_clk = {
1527 	.halt_reg = 0x501c,
1528 	.halt_check = BRANCH_HALT,
1529 	.clkr = {
1530 		.enable_reg = 0x501c,
1531 		.enable_mask = BIT(0),
1532 		.hw.init = &(struct clk_init_data){
1533 			.name = "gcc_blsp1_qup4_spi_apps_clk",
1534 			.parent_names = (const char *[]){
1535 				"blsp1_qup4_spi_apps_clk_src",
1536 			},
1537 			.num_parents = 1,
1538 			.flags = CLK_SET_RATE_PARENT,
1539 			.ops = &clk_branch2_ops,
1540 		},
1541 	},
1542 };
1543 
1544 static struct clk_branch gcc_blsp1_uart0_apps_clk = {
1545 	.halt_reg = 0x6004,
1546 	.halt_check = BRANCH_HALT,
1547 	.clkr = {
1548 		.enable_reg = 0x6004,
1549 		.enable_mask = BIT(0),
1550 		.hw.init = &(struct clk_init_data){
1551 			.name = "gcc_blsp1_uart0_apps_clk",
1552 			.parent_names = (const char *[]){
1553 				"blsp1_uart0_apps_clk_src",
1554 			},
1555 			.num_parents = 1,
1556 			.flags = CLK_SET_RATE_PARENT,
1557 			.ops = &clk_branch2_ops,
1558 		},
1559 	},
1560 };
1561 
1562 static struct clk_branch gcc_blsp1_uart1_apps_clk = {
1563 	.halt_reg = 0x203c,
1564 	.halt_check = BRANCH_HALT,
1565 	.clkr = {
1566 		.enable_reg = 0x203c,
1567 		.enable_mask = BIT(0),
1568 		.hw.init = &(struct clk_init_data){
1569 			.name = "gcc_blsp1_uart1_apps_clk",
1570 			.parent_names = (const char *[]){
1571 				"blsp1_uart1_apps_clk_src",
1572 			},
1573 			.num_parents = 1,
1574 			.flags = CLK_SET_RATE_PARENT,
1575 			.ops = &clk_branch2_ops,
1576 		},
1577 	},
1578 };
1579 
1580 static struct clk_branch gcc_blsp1_uart2_apps_clk = {
1581 	.halt_reg = 0x302c,
1582 	.halt_check = BRANCH_HALT,
1583 	.clkr = {
1584 		.enable_reg = 0x302c,
1585 		.enable_mask = BIT(0),
1586 		.hw.init = &(struct clk_init_data){
1587 			.name = "gcc_blsp1_uart2_apps_clk",
1588 			.parent_names = (const char *[]){
1589 				"blsp1_uart2_apps_clk_src",
1590 			},
1591 			.num_parents = 1,
1592 			.flags = CLK_SET_RATE_PARENT,
1593 			.ops = &clk_branch2_ops,
1594 		},
1595 	},
1596 };
1597 
1598 static struct clk_branch gcc_blsp1_uart3_apps_clk = {
1599 	.halt_reg = 0x400c,
1600 	.halt_check = BRANCH_HALT,
1601 	.clkr = {
1602 		.enable_reg = 0x400c,
1603 		.enable_mask = BIT(0),
1604 		.hw.init = &(struct clk_init_data){
1605 			.name = "gcc_blsp1_uart3_apps_clk",
1606 			.parent_names = (const char *[]){
1607 				"blsp1_uart3_apps_clk_src",
1608 			},
1609 			.num_parents = 1,
1610 			.flags = CLK_SET_RATE_PARENT,
1611 			.ops = &clk_branch2_ops,
1612 		},
1613 	},
1614 };
1615 
1616 static struct clk_branch gcc_blsp2_ahb_clk = {
1617 	.halt_reg = 0xb008,
1618 	.halt_check = BRANCH_HALT_VOTED,
1619 	.clkr = {
1620 		.enable_reg = 0x45004,
1621 		.enable_mask = BIT(20),
1622 		.hw.init = &(struct clk_init_data){
1623 			.name = "gcc_blsp2_ahb_clk",
1624 			.ops = &clk_branch2_ops,
1625 		},
1626 	},
1627 };
1628 
1629 static struct clk_branch gcc_blsp2_qup0_i2c_apps_clk = {
1630 	.halt_reg = 0xc008,
1631 	.halt_check = BRANCH_HALT,
1632 	.clkr = {
1633 		.enable_reg = 0xc008,
1634 		.enable_mask = BIT(0),
1635 		.hw.init = &(struct clk_init_data){
1636 			.name = "gcc_blsp2_qup0_i2c_apps_clk",
1637 			.parent_names = (const char *[]){
1638 				"blsp2_qup0_i2c_apps_clk_src",
1639 			},
1640 			.num_parents = 1,
1641 			.flags = CLK_SET_RATE_PARENT,
1642 			.ops = &clk_branch2_ops,
1643 		},
1644 	},
1645 };
1646 
1647 static struct clk_branch gcc_blsp2_qup0_spi_apps_clk = {
1648 	.halt_reg = 0xc004,
1649 	.halt_check = BRANCH_HALT,
1650 	.clkr = {
1651 		.enable_reg = 0xc004,
1652 		.enable_mask = BIT(0),
1653 		.hw.init = &(struct clk_init_data){
1654 			.name = "gcc_blsp2_qup0_spi_apps_clk",
1655 			.parent_names = (const char *[]){
1656 				"blsp2_qup0_spi_apps_clk_src",
1657 			},
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_uart0_apps_clk = {
1666 	.halt_reg = 0xc03c,
1667 	.halt_check = BRANCH_HALT,
1668 	.clkr = {
1669 		.enable_reg = 0xc03c,
1670 		.enable_mask = BIT(0),
1671 		.hw.init = &(struct clk_init_data){
1672 			.name = "gcc_blsp2_uart0_apps_clk",
1673 			.parent_names = (const char *[]){
1674 				"blsp2_uart0_apps_clk_src",
1675 			},
1676 			.num_parents = 1,
1677 			.flags = CLK_SET_RATE_PARENT,
1678 			.ops = &clk_branch2_ops,
1679 		},
1680 	},
1681 };
1682 
1683 static struct clk_branch gcc_boot_rom_ahb_clk = {
1684 	.halt_reg = 0x1300c,
1685 	.halt_check = BRANCH_HALT_VOTED,
1686 	.clkr = {
1687 		.enable_reg = 0x45004,
1688 		.enable_mask = BIT(7),
1689 		.hw.init = &(struct clk_init_data){
1690 			.name = "gcc_boot_rom_ahb_clk",
1691 			.ops = &clk_branch2_ops,
1692 		},
1693 	},
1694 };
1695 
1696 static struct clk_branch gcc_crypto_ahb_clk = {
1697 	.halt_reg = 0x16024,
1698 	.halt_check = BRANCH_VOTED,
1699 	.clkr = {
1700 		.enable_reg = 0x45004,
1701 		.enable_mask = BIT(0),
1702 		.hw.init = &(struct clk_init_data){
1703 			.name = "gcc_crypto_ahb_clk",
1704 			.ops = &clk_branch2_ops,
1705 		},
1706 	},
1707 };
1708 
1709 static struct clk_branch gcc_crypto_axi_clk = {
1710 	.halt_reg = 0x16020,
1711 	.halt_check = BRANCH_VOTED,
1712 	.clkr = {
1713 		.enable_reg = 0x45004,
1714 		.enable_mask = BIT(1),
1715 		.hw.init = &(struct clk_init_data){
1716 			.name = "gcc_crypto_axi_clk",
1717 			.ops = &clk_branch2_ops,
1718 		},
1719 	},
1720 };
1721 
1722 static struct clk_branch gcc_crypto_clk = {
1723 	.halt_reg = 0x1601c,
1724 	.halt_check = BRANCH_VOTED,
1725 	.clkr = {
1726 		.enable_reg = 0x45004,
1727 		.enable_mask = BIT(2),
1728 		.hw.init = &(struct clk_init_data){
1729 			.name = "gcc_crypto_clk",
1730 			.ops = &clk_branch2_ops,
1731 		},
1732 	},
1733 };
1734 
1735 static struct clk_branch gcc_eth_axi_clk = {
1736 	.halt_reg = 0x4e010,
1737 	.halt_check = BRANCH_HALT,
1738 	.clkr = {
1739 		.enable_reg = 0x4e010,
1740 		.enable_mask = BIT(0),
1741 		.hw.init = &(struct clk_init_data){
1742 			.name = "gcc_eth_axi_clk",
1743 			.ops = &clk_branch2_ops,
1744 		},
1745 	},
1746 };
1747 
1748 static struct clk_branch gcc_eth_ptp_clk = {
1749 	.halt_reg = 0x4e004,
1750 	.halt_check = BRANCH_HALT,
1751 	.clkr = {
1752 		.enable_reg = 0x4e004,
1753 		.enable_mask = BIT(0),
1754 		.hw.init = &(struct clk_init_data){
1755 			.name = "gcc_eth_ptp_clk",
1756 			.parent_names = (const char *[]){
1757 				"emac_ptp_clk_src",
1758 			},
1759 			.num_parents = 1,
1760 			.flags = CLK_SET_RATE_PARENT,
1761 			.ops = &clk_branch2_ops,
1762 		},
1763 	},
1764 };
1765 
1766 static struct clk_branch gcc_eth_rgmii_clk = {
1767 	.halt_reg = 0x4e008,
1768 	.halt_check = BRANCH_HALT,
1769 	.clkr = {
1770 		.enable_reg = 0x4e008,
1771 		.enable_mask = BIT(0),
1772 		.hw.init = &(struct clk_init_data){
1773 			.name = "gcc_eth_rgmii_clk",
1774 			.parent_names = (const char *[]){
1775 				"emac_clk_src",
1776 			},
1777 			.num_parents = 1,
1778 			.flags = CLK_SET_RATE_PARENT,
1779 			.ops = &clk_branch2_ops,
1780 		},
1781 	},
1782 };
1783 
1784 static struct clk_branch gcc_eth_slave_ahb_clk = {
1785 	.halt_reg = 0x4e00c,
1786 	.halt_check = BRANCH_HALT,
1787 	.clkr = {
1788 		.enable_reg = 0x4e00c,
1789 		.enable_mask = BIT(0),
1790 		.hw.init = &(struct clk_init_data){
1791 			.name = "gcc_eth_slave_ahb_clk",
1792 			.ops = &clk_branch2_ops,
1793 		},
1794 	},
1795 };
1796 
1797 static struct clk_branch gcc_geni_ir_s_clk = {
1798 	.halt_reg = 0xf008,
1799 	.halt_check = BRANCH_HALT,
1800 	.clkr = {
1801 		.enable_reg = 0xf008,
1802 		.enable_mask = BIT(0),
1803 		.hw.init = &(struct clk_init_data){
1804 			.name = "gcc_geni_ir_s_clk",
1805 			.ops = &clk_branch2_ops,
1806 		},
1807 	},
1808 };
1809 
1810 static struct clk_branch gcc_geni_ir_h_clk = {
1811 	.halt_reg = 0xf004,
1812 	.halt_check = BRANCH_HALT,
1813 	.clkr = {
1814 		.enable_reg = 0xf004,
1815 		.enable_mask = BIT(0),
1816 		.hw.init = &(struct clk_init_data){
1817 			.name = "gcc_geni_ir_h_clk",
1818 			.ops = &clk_branch2_ops,
1819 		},
1820 	},
1821 };
1822 
1823 static struct clk_branch gcc_gfx_tcu_clk = {
1824 	.halt_reg = 0x12020,
1825 	.halt_check = BRANCH_VOTED,
1826 	.clkr = {
1827 		.enable_reg = 0x4500C,
1828 		.enable_mask = BIT(2),
1829 		.hw.init = &(struct clk_init_data){
1830 			.name = "gcc_gfx_tcu_clk",
1831 			.ops = &clk_branch2_ops,
1832 		},
1833 	},
1834 };
1835 
1836 static struct clk_branch gcc_gfx_tbu_clk = {
1837 	.halt_reg = 0x12010,
1838 	.halt_check = BRANCH_VOTED,
1839 	.clkr = {
1840 		.enable_reg = 0x4500C,
1841 		.enable_mask = BIT(3),
1842 		.hw.init = &(struct clk_init_data){
1843 			.name = "gcc_gfx_tbu_clk",
1844 			.ops = &clk_branch2_ops,
1845 		},
1846 	},
1847 };
1848 
1849 static struct clk_branch gcc_cdsp_tbu_clk = {
1850 	.halt_reg = 0x1203c,
1851 	.halt_check = BRANCH_VOTED,
1852 	.clkr = {
1853 		.enable_reg = 0x13020,
1854 		.enable_mask = BIT(9),
1855 		.hw.init = &(struct clk_init_data) {
1856 			.name = "gcc_cdsp_tbu_clk",
1857 			.parent_names = (const char *[]) {
1858 				"cdsp_bimc_clk_src",
1859 			},
1860 			.num_parents = 1,
1861 			.flags = CLK_SET_RATE_PARENT,
1862 			.ops = &clk_branch2_ops,
1863 		},
1864 	},
1865 };
1866 
1867 static struct clk_branch gcc_gp1_clk = {
1868 	.halt_reg = 0x8000,
1869 	.halt_check = BRANCH_HALT,
1870 	.clkr = {
1871 		.enable_reg = 0x8000,
1872 		.enable_mask = BIT(0),
1873 		.hw.init = &(struct clk_init_data){
1874 			.name = "gcc_gp1_clk",
1875 			.parent_names = (const char *[]){
1876 				"gp1_clk_src",
1877 			},
1878 			.num_parents = 1,
1879 			.flags = CLK_SET_RATE_PARENT,
1880 			.ops = &clk_branch2_ops,
1881 		},
1882 	},
1883 };
1884 
1885 static struct clk_branch gcc_gp2_clk = {
1886 	.halt_reg = 0x9000,
1887 	.halt_check = BRANCH_HALT,
1888 	.clkr = {
1889 		.enable_reg = 0x9000,
1890 		.enable_mask = BIT(0),
1891 		.hw.init = &(struct clk_init_data){
1892 			.name = "gcc_gp2_clk",
1893 			.parent_names = (const char *[]){
1894 				"gp2_clk_src",
1895 			},
1896 			.num_parents = 1,
1897 			.flags = CLK_SET_RATE_PARENT,
1898 			.ops = &clk_branch2_ops,
1899 		},
1900 	},
1901 };
1902 
1903 static struct clk_branch gcc_gp3_clk = {
1904 	.halt_reg = 0xa000,
1905 	.halt_check = BRANCH_HALT,
1906 	.clkr = {
1907 		.enable_reg = 0xa000,
1908 		.enable_mask = BIT(0),
1909 		.hw.init = &(struct clk_init_data){
1910 			.name = "gcc_gp3_clk",
1911 			.parent_names = (const char *[]){
1912 				"gp3_clk_src",
1913 			},
1914 			.num_parents = 1,
1915 			.flags = CLK_SET_RATE_PARENT,
1916 			.ops = &clk_branch2_ops,
1917 		},
1918 	},
1919 };
1920 
1921 static struct clk_branch gcc_gtcu_ahb_clk = {
1922 	.halt_reg = 0x12044,
1923 	.halt_check = BRANCH_VOTED,
1924 	.clkr = {
1925 		.enable_reg = 0x4500c,
1926 		.enable_mask = BIT(13),
1927 		.hw.init = &(struct clk_init_data){
1928 			.name = "gcc_gtcu_ahb_clk",
1929 			.ops = &clk_branch2_ops,
1930 		},
1931 	},
1932 };
1933 
1934 static struct clk_branch gcc_mdp_tbu_clk = {
1935 	.halt_reg = 0x1201c,
1936 	.halt_check = BRANCH_VOTED,
1937 	.clkr = {
1938 		.enable_reg = 0x4500c,
1939 		.enable_mask = BIT(4),
1940 		.hw.init = &(struct clk_init_data){
1941 			.name = "gcc_mdp_tbu_clk",
1942 			.ops = &clk_branch2_ops,
1943 		},
1944 	},
1945 };
1946 
1947 static struct clk_branch gcc_mdss_ahb_clk = {
1948 	.halt_reg = 0x4d07c,
1949 	.halt_check = BRANCH_HALT,
1950 	.clkr = {
1951 		.enable_reg = 0x4d07c,
1952 		.enable_mask = BIT(0),
1953 		.hw.init = &(struct clk_init_data){
1954 			.name = "gcc_mdss_ahb_clk",
1955 			.ops = &clk_branch2_ops,
1956 		},
1957 	},
1958 };
1959 
1960 static struct clk_branch gcc_mdss_axi_clk = {
1961 	.halt_reg = 0x4d080,
1962 	.halt_check = BRANCH_HALT,
1963 	.clkr = {
1964 		.enable_reg = 0x4d080,
1965 		.enable_mask = BIT(0),
1966 		.hw.init = &(struct clk_init_data){
1967 			.name = "gcc_mdss_axi_clk",
1968 			.ops = &clk_branch2_ops,
1969 		},
1970 	},
1971 };
1972 
1973 static struct clk_branch gcc_mdss_byte0_clk = {
1974 	.halt_reg = 0x4d094,
1975 	.halt_check = BRANCH_HALT,
1976 	.clkr = {
1977 		.enable_reg = 0x4d094,
1978 		.enable_mask = BIT(0),
1979 		.hw.init = &(struct clk_init_data){
1980 			.name = "gcc_mdss_byte0_clk",
1981 			.parent_names = (const char *[]){
1982 				"byte0_clk_src",
1983 			},
1984 			.num_parents = 1,
1985 			.flags = CLK_SET_RATE_PARENT,
1986 			.ops = &clk_branch2_ops,
1987 		},
1988 	},
1989 };
1990 
1991 static struct clk_branch gcc_mdss_esc0_clk = {
1992 	.halt_reg = 0x4d098,
1993 	.halt_check = BRANCH_HALT,
1994 	.clkr = {
1995 		.enable_reg = 0x4d098,
1996 		.enable_mask = BIT(0),
1997 		.hw.init = &(struct clk_init_data){
1998 			.name = "gcc_mdss_esc0_clk",
1999 			.parent_names = (const char *[]){
2000 				"esc0_clk_src",
2001 			},
2002 			.num_parents = 1,
2003 			.flags = CLK_SET_RATE_PARENT,
2004 			.ops = &clk_branch2_ops,
2005 		},
2006 	},
2007 };
2008 
2009 static struct clk_branch gcc_mdss_hdmi_app_clk = {
2010 	.halt_reg = 0x4d0d8,
2011 	.halt_check = BRANCH_HALT,
2012 	.clkr = {
2013 		.enable_reg = 0x4d0d8,
2014 		.enable_mask = BIT(0),
2015 		.hw.init = &(struct clk_init_data){
2016 			.name = "gcc_mdss_hdmi_app_clk",
2017 			.parent_names = (const char *[]){
2018 				"hdmi_app_clk_src",
2019 			},
2020 			.num_parents = 1,
2021 			.flags = CLK_SET_RATE_PARENT,
2022 			.ops = &clk_branch2_ops,
2023 		},
2024 	},
2025 };
2026 
2027 static struct clk_branch gcc_mdss_hdmi_pclk_clk = {
2028 	.halt_reg = 0x4d0d4,
2029 	.halt_check = BRANCH_HALT,
2030 	.clkr = {
2031 		.enable_reg = 0x4d0d4,
2032 		.enable_mask = BIT(0),
2033 		.hw.init = &(struct clk_init_data){
2034 			.name = "gcc_mdss_hdmi_pclk_clk",
2035 			.parent_names = (const char *[]){
2036 				"hdmi_pclk_clk_src",
2037 			},
2038 			.num_parents = 1,
2039 			.flags = CLK_SET_RATE_PARENT,
2040 			.ops = &clk_branch2_ops,
2041 		},
2042 	},
2043 };
2044 
2045 static struct clk_branch gcc_mdss_mdp_clk = {
2046 	.halt_reg = 0x4d088,
2047 	.halt_check = BRANCH_HALT,
2048 	.clkr = {
2049 		.enable_reg = 0x4d088,
2050 		.enable_mask = BIT(0),
2051 		.hw.init = &(struct clk_init_data){
2052 			.name = "gcc_mdss_mdp_clk",
2053 			.parent_names = (const char *[]){
2054 				"mdp_clk_src",
2055 			},
2056 			.num_parents = 1,
2057 			.flags = CLK_SET_RATE_PARENT,
2058 			.ops = &clk_branch2_ops,
2059 		},
2060 	},
2061 };
2062 
2063 static struct clk_branch gcc_mdss_pclk0_clk = {
2064 	.halt_reg = 0x4d084,
2065 	.halt_check = BRANCH_HALT,
2066 	.clkr = {
2067 		.enable_reg = 0x4d084,
2068 		.enable_mask = BIT(0),
2069 		.hw.init = &(struct clk_init_data){
2070 			.name = "gcc_mdss_pclk0_clk",
2071 			.parent_names = (const char *[]){
2072 				"pclk0_clk_src",
2073 			},
2074 			.num_parents = 1,
2075 			.flags = CLK_SET_RATE_PARENT,
2076 			.ops = &clk_branch2_ops,
2077 		},
2078 	},
2079 };
2080 
2081 static struct clk_branch gcc_mdss_vsync_clk = {
2082 	.halt_reg = 0x4d090,
2083 	.halt_check = BRANCH_HALT,
2084 	.clkr = {
2085 		.enable_reg = 0x4d090,
2086 		.enable_mask = BIT(0),
2087 		.hw.init = &(struct clk_init_data){
2088 			.name = "gcc_mdss_vsync_clk",
2089 			.parent_names = (const char *[]){
2090 				"vsync_clk_src",
2091 			},
2092 			.num_parents = 1,
2093 			.flags = CLK_SET_RATE_PARENT,
2094 			.ops = &clk_branch2_ops,
2095 		},
2096 	},
2097 };
2098 
2099 static struct clk_branch gcc_oxili_ahb_clk = {
2100 	.halt_reg = 0x59028,
2101 	.halt_check = BRANCH_HALT,
2102 	.clkr = {
2103 		.enable_reg = 0x59028,
2104 		.enable_mask = BIT(0),
2105 		.hw.init = &(struct clk_init_data){
2106 			.name = "gcc_oxili_ahb_clk",
2107 			.ops = &clk_branch2_ops,
2108 		},
2109 	},
2110 };
2111 
2112 static struct clk_branch gcc_oxili_gfx3d_clk = {
2113 	.halt_reg = 0x59020,
2114 	.halt_check = BRANCH_HALT,
2115 	.clkr = {
2116 		.enable_reg = 0x59020,
2117 		.enable_mask = BIT(0),
2118 		.hw.init = &(struct clk_init_data){
2119 			.name = "gcc_oxili_gfx3d_clk",
2120 			.parent_names = (const char *[]){
2121 				"gfx3d_clk_src",
2122 			},
2123 			.num_parents = 1,
2124 			.flags = CLK_SET_RATE_PARENT,
2125 			.ops = &clk_branch2_ops,
2126 		},
2127 	},
2128 };
2129 
2130 static struct clk_branch gcc_pcie_0_aux_clk = {
2131 	.halt_reg = 0x3e014,
2132 	.halt_check = BRANCH_HALT_VOTED,
2133 	.clkr = {
2134 		.enable_reg = 0x45004,
2135 		.enable_mask = BIT(27),
2136 		.hw.init = &(struct clk_init_data){
2137 			.name = "gcc_pcie_0_aux_clk",
2138 			.parent_names = (const char *[]){
2139 				"pcie_0_aux_clk_src",
2140 			},
2141 			.num_parents = 1,
2142 			.flags = CLK_SET_RATE_PARENT,
2143 			.ops = &clk_branch2_ops,
2144 		},
2145 	},
2146 };
2147 
2148 static struct clk_branch gcc_pcie_0_cfg_ahb_clk = {
2149 	.halt_reg = 0x3e008,
2150 	.halt_check = BRANCH_HALT_VOTED,
2151 	.clkr = {
2152 		.enable_reg = 0x45004,
2153 		.enable_mask = BIT(11),
2154 		.hw.init = &(struct clk_init_data){
2155 			.name = "gcc_pcie_0_cfg_ahb_clk",
2156 			.ops = &clk_branch2_ops,
2157 		},
2158 	},
2159 };
2160 
2161 static struct clk_branch gcc_pcie_0_mstr_axi_clk = {
2162 	.halt_reg = 0x3e018,
2163 	.halt_check = BRANCH_HALT_VOTED,
2164 	.clkr = {
2165 		.enable_reg = 0x45004,
2166 		.enable_mask = BIT(18),
2167 		.hw.init = &(struct clk_init_data){
2168 			.name = "gcc_pcie_0_mstr_axi_clk",
2169 			.ops = &clk_branch2_ops,
2170 		},
2171 	},
2172 };
2173 
2174 static struct clk_branch gcc_pcie_0_pipe_clk = {
2175 	.halt_reg = 0x3e00c,
2176 	.halt_check = BRANCH_HALT_VOTED,
2177 	.clkr = {
2178 		.enable_reg = 0x45004,
2179 		.enable_mask = BIT(28),
2180 		.hw.init = &(struct clk_init_data){
2181 			.name = "gcc_pcie_0_pipe_clk",
2182 			.parent_names = (const char *[]){
2183 				"pcie_0_pipe_clk_src",
2184 			},
2185 			.num_parents = 1,
2186 			.flags = CLK_SET_RATE_PARENT,
2187 			.ops = &clk_branch2_ops,
2188 		},
2189 	},
2190 };
2191 
2192 static struct clk_branch gcc_pcie_0_slv_axi_clk = {
2193 	.halt_reg = 0x3e010,
2194 	.halt_check = BRANCH_HALT_VOTED,
2195 	.clkr = {
2196 		.enable_reg = 0x45004,
2197 		.enable_mask = BIT(22),
2198 		.hw.init = &(struct clk_init_data){
2199 			.name = "gcc_pcie_0_slv_axi_clk",
2200 			.ops = &clk_branch2_ops,
2201 		},
2202 	},
2203 };
2204 
2205 static struct clk_branch gcc_pcnoc_usb2_clk = {
2206 	.halt_reg = 0x27008,
2207 	.halt_check = BRANCH_HALT,
2208 	.clkr = {
2209 		.enable_reg = 0x27008,
2210 		.enable_mask = BIT(0),
2211 		.hw.init = &(struct clk_init_data){
2212 			.name = "gcc_pcnoc_usb2_clk",
2213 			.flags = CLK_IS_CRITICAL,
2214 			.ops = &clk_branch2_ops,
2215 		},
2216 	},
2217 };
2218 
2219 static struct clk_branch gcc_pcnoc_usb3_clk = {
2220 	.halt_reg = 0x2700c,
2221 	.halt_check = BRANCH_HALT,
2222 	.clkr = {
2223 		.enable_reg = 0x2700c,
2224 		.enable_mask = BIT(0),
2225 		.hw.init = &(struct clk_init_data){
2226 			.name = "gcc_pcnoc_usb3_clk",
2227 			.flags = CLK_IS_CRITICAL,
2228 			.ops = &clk_branch2_ops,
2229 		},
2230 	},
2231 };
2232 
2233 static struct clk_branch gcc_pdm2_clk = {
2234 	.halt_reg = 0x4400c,
2235 	.halt_check = BRANCH_HALT,
2236 	.clkr = {
2237 		.enable_reg = 0x4400c,
2238 		.enable_mask = BIT(0),
2239 		.hw.init = &(struct clk_init_data){
2240 			.name = "gcc_pdm2_clk",
2241 			.parent_names = (const char *[]){
2242 				"pdm2_clk_src",
2243 			},
2244 			.num_parents = 1,
2245 			.flags = CLK_SET_RATE_PARENT,
2246 			.ops = &clk_branch2_ops,
2247 		},
2248 	},
2249 };
2250 
2251 static struct clk_branch gcc_pdm_ahb_clk = {
2252 	.halt_reg = 0x44004,
2253 	.halt_check = BRANCH_HALT,
2254 	.clkr = {
2255 		.enable_reg = 0x44004,
2256 		.enable_mask = BIT(0),
2257 		.hw.init = &(struct clk_init_data){
2258 			.name = "gcc_pdm_ahb_clk",
2259 			.ops = &clk_branch2_ops,
2260 		},
2261 	},
2262 };
2263 
2264 static struct clk_branch gcc_prng_ahb_clk = {
2265 	.halt_reg = 0x13004,
2266 	.halt_check = BRANCH_HALT_VOTED,
2267 	.clkr = {
2268 		.enable_reg = 0x45004,
2269 		.enable_mask = BIT(8),
2270 		.hw.init = &(struct clk_init_data){
2271 			.name = "gcc_prng_ahb_clk",
2272 			.ops = &clk_branch2_ops,
2273 		},
2274 	},
2275 };
2276 
2277 /* PWM clks do not have XO as parent as src clk is a balance root */
2278 static struct clk_branch gcc_pwm0_xo512_clk = {
2279 	.halt_reg = 0x44018,
2280 	.halt_check = BRANCH_HALT,
2281 	.clkr = {
2282 		.enable_reg = 0x44018,
2283 		.enable_mask = BIT(0),
2284 		.hw.init = &(struct clk_init_data){
2285 			.name = "gcc_pwm0_xo512_clk",
2286 			.ops = &clk_branch2_ops,
2287 		},
2288 	},
2289 };
2290 
2291 static struct clk_branch gcc_pwm1_xo512_clk = {
2292 	.halt_reg = 0x49004,
2293 	.halt_check = BRANCH_HALT,
2294 	.clkr = {
2295 		.enable_reg = 0x49004,
2296 		.enable_mask = BIT(0),
2297 		.hw.init = &(struct clk_init_data){
2298 			.name = "gcc_pwm1_xo512_clk",
2299 			.ops = &clk_branch2_ops,
2300 		},
2301 	},
2302 };
2303 
2304 static struct clk_branch gcc_pwm2_xo512_clk = {
2305 	.halt_reg = 0x4a004,
2306 	.halt_check = BRANCH_HALT,
2307 	.clkr = {
2308 		.enable_reg = 0x4a004,
2309 		.enable_mask = BIT(0),
2310 		.hw.init = &(struct clk_init_data){
2311 			.name = "gcc_pwm2_xo512_clk",
2312 			.ops = &clk_branch2_ops,
2313 		},
2314 	},
2315 };
2316 
2317 static struct clk_branch gcc_qdss_dap_clk = {
2318 	.halt_reg = 0x29084,
2319 	.halt_check = BRANCH_VOTED,
2320 	.clkr = {
2321 		.enable_reg = 0x45004,
2322 		.enable_mask = BIT(21),
2323 		.hw.init = &(struct clk_init_data){
2324 			.name = "gcc_qdss_dap_clk",
2325 			.ops = &clk_branch2_ops,
2326 		},
2327 	},
2328 };
2329 
2330 static struct clk_branch gcc_sdcc1_ahb_clk = {
2331 	.halt_reg = 0x4201c,
2332 	.halt_check = BRANCH_HALT,
2333 	.clkr = {
2334 		.enable_reg = 0x4201c,
2335 		.enable_mask = BIT(0),
2336 		.hw.init = &(struct clk_init_data){
2337 			.name = "gcc_sdcc1_ahb_clk",
2338 			.ops = &clk_branch2_ops,
2339 		},
2340 	},
2341 };
2342 
2343 static struct clk_branch gcc_sdcc1_apps_clk = {
2344 	.halt_reg = 0x42018,
2345 	.halt_check = BRANCH_HALT,
2346 	.clkr = {
2347 		.enable_reg = 0x42018,
2348 		.enable_mask = BIT(0),
2349 		.hw.init = &(struct clk_init_data){
2350 			.name = "gcc_sdcc1_apps_clk",
2351 			.parent_names = (const char *[]){
2352 				"sdcc1_apps_clk_src",
2353 			},
2354 			.num_parents = 1,
2355 			.flags = CLK_SET_RATE_PARENT,
2356 			.ops = &clk_branch2_ops,
2357 		},
2358 	},
2359 };
2360 
2361 static struct clk_branch gcc_sdcc1_ice_core_clk = {
2362 	.halt_reg = 0x5d014,
2363 	.halt_check = BRANCH_HALT,
2364 	.clkr = {
2365 		.enable_reg = 0x5d014,
2366 		.enable_mask = BIT(0),
2367 		.hw.init = &(struct clk_init_data){
2368 			.name = "gcc_sdcc1_ice_core_clk",
2369 			.parent_names = (const char *[]){
2370 				"sdcc1_ice_core_clk_src",
2371 			},
2372 			.num_parents = 1,
2373 			.flags = CLK_SET_RATE_PARENT,
2374 			.ops = &clk_branch2_ops,
2375 		},
2376 	},
2377 };
2378 
2379 static struct clk_branch gcc_cdsp_cfg_ahb_clk = {
2380 	.halt_reg = 0x5e004,
2381 	.halt_check = BRANCH_HALT,
2382 	.clkr = {
2383 		.enable_reg = 0x5e004,
2384 		.enable_mask = BIT(0),
2385 		.hw.init = &(struct clk_init_data) {
2386 			.name = "gcc_cdsp_cfg_ahb_cbcr",
2387 			.ops = &clk_branch2_ops,
2388 		},
2389 	},
2390 };
2391 
2392 static struct clk_branch gcc_sdcc2_ahb_clk = {
2393 	.halt_reg = 0x4301c,
2394 	.halt_check = BRANCH_HALT,
2395 	.clkr = {
2396 		.enable_reg = 0x4301c,
2397 		.enable_mask = BIT(0),
2398 		.hw.init = &(struct clk_init_data){
2399 			.name = "gcc_sdcc2_ahb_clk",
2400 			.ops = &clk_branch2_ops,
2401 		},
2402 	},
2403 };
2404 
2405 static struct clk_branch gcc_sdcc2_apps_clk = {
2406 	.halt_reg = 0x43018,
2407 	.halt_check = BRANCH_HALT,
2408 	.clkr = {
2409 		.enable_reg = 0x43018,
2410 		.enable_mask = BIT(0),
2411 		.hw.init = &(struct clk_init_data){
2412 			.name = "gcc_sdcc2_apps_clk",
2413 			.parent_names = (const char *[]){
2414 				"sdcc2_apps_clk_src",
2415 			},
2416 			.num_parents = 1,
2417 			.flags = CLK_SET_RATE_PARENT,
2418 			.ops = &clk_branch2_ops,
2419 		},
2420 	},
2421 };
2422 
2423 static struct clk_branch gcc_smmu_cfg_clk = {
2424 	.halt_reg = 0x12038,
2425 	.halt_check = BRANCH_VOTED,
2426 	.clkr = {
2427 		.enable_reg = 0x3600C,
2428 		.enable_mask = BIT(12),
2429 		.hw.init = &(struct clk_init_data){
2430 			.name = "gcc_smmu_cfg_clk",
2431 			.ops = &clk_branch2_ops,
2432 		},
2433 	},
2434 };
2435 
2436 static struct clk_branch gcc_sys_noc_usb3_clk = {
2437 	.halt_reg = 0x26014,
2438 	.halt_check = BRANCH_HALT,
2439 	.clkr = {
2440 		.enable_reg = 0x26014,
2441 		.enable_mask = BIT(0),
2442 		.hw.init = &(struct clk_init_data){
2443 			.name = "gcc_sys_noc_usb3_clk",
2444 			.parent_names = (const char *[]){
2445 				"usb30_master_clk_src",
2446 			},
2447 			.num_parents = 1,
2448 			.ops = &clk_branch2_ops,
2449 		},
2450 	},
2451 };
2452 
2453 static struct clk_branch gcc_usb_hs_inactivity_timers_clk = {
2454 	.halt_reg = 0x4100C,
2455 	.halt_check = BRANCH_HALT,
2456 	.clkr = {
2457 		.enable_reg = 0x4100C,
2458 		.enable_mask = BIT(0),
2459 		.hw.init = &(struct clk_init_data){
2460 			.name = "gcc_usb_hs_inactivity_timers_clk",
2461 			.ops = &clk_branch2_ops,
2462 		},
2463 	},
2464 };
2465 
2466 static struct clk_branch gcc_usb20_mock_utmi_clk = {
2467 	.halt_reg = 0x41044,
2468 	.halt_check = BRANCH_HALT,
2469 	.clkr = {
2470 		.enable_reg = 0x41044,
2471 		.enable_mask = BIT(0),
2472 		.hw.init = &(struct clk_init_data){
2473 			.name = "gcc_usb20_mock_utmi_clk",
2474 			.parent_names = (const char *[]){
2475 				"usb20_mock_utmi_clk_src",
2476 			},
2477 			.num_parents = 1,
2478 			.flags = CLK_SET_RATE_PARENT,
2479 			.ops = &clk_branch2_ops,
2480 		},
2481 	},
2482 };
2483 
2484 static struct clk_branch gcc_usb2a_phy_sleep_clk = {
2485 	.halt_reg = 0x4102c,
2486 	.halt_check = BRANCH_HALT,
2487 	.clkr = {
2488 		.enable_reg = 0x4102c,
2489 		.enable_mask = BIT(0),
2490 		.hw.init = &(struct clk_init_data){
2491 			.name = "gcc_usb2a_phy_sleep_clk",
2492 			.ops = &clk_branch2_ops,
2493 		},
2494 	},
2495 };
2496 
2497 static struct clk_branch gcc_usb30_master_clk = {
2498 	.halt_reg = 0x3900c,
2499 	.halt_check = BRANCH_HALT,
2500 	.clkr = {
2501 		.enable_reg = 0x3900c,
2502 		.enable_mask = BIT(0),
2503 		.hw.init = &(struct clk_init_data){
2504 			.name = "gcc_usb30_master_clk",
2505 			.parent_names = (const char *[]){
2506 				"usb30_master_clk_src",
2507 			},
2508 			.num_parents = 1,
2509 			.flags = CLK_SET_RATE_PARENT,
2510 			.ops = &clk_branch2_ops,
2511 		},
2512 	},
2513 };
2514 
2515 static struct clk_branch gcc_usb30_mock_utmi_clk = {
2516 	.halt_reg = 0x39014,
2517 	.halt_check = BRANCH_HALT,
2518 	.clkr = {
2519 		.enable_reg = 0x39014,
2520 		.enable_mask = BIT(0),
2521 		.hw.init = &(struct clk_init_data){
2522 			.name = "gcc_usb30_mock_utmi_clk",
2523 			.parent_names = (const char *[]){
2524 				"usb30_mock_utmi_clk_src",
2525 			},
2526 			.num_parents = 1,
2527 			.flags = CLK_SET_RATE_PARENT,
2528 			.ops = &clk_branch2_ops,
2529 		},
2530 	},
2531 };
2532 
2533 static struct clk_branch gcc_usb30_sleep_clk = {
2534 	.halt_reg = 0x39010,
2535 	.halt_check = BRANCH_HALT,
2536 	.clkr = {
2537 		.enable_reg = 0x39010,
2538 		.enable_mask = BIT(0),
2539 		.hw.init = &(struct clk_init_data){
2540 			.name = "gcc_usb30_sleep_clk",
2541 			.ops = &clk_branch2_ops,
2542 		},
2543 	},
2544 };
2545 
2546 static struct clk_branch gcc_usb3_phy_aux_clk = {
2547 	.halt_reg = 0x39044,
2548 	.halt_check = BRANCH_HALT,
2549 	.clkr = {
2550 		.enable_reg = 0x39044,
2551 		.enable_mask = BIT(0),
2552 		.hw.init = &(struct clk_init_data){
2553 			.name = "gcc_usb3_phy_aux_clk",
2554 			.parent_names = (const char *[]){
2555 				"usb3_phy_aux_clk_src",
2556 			},
2557 			.num_parents = 1,
2558 			.flags = CLK_SET_RATE_PARENT,
2559 			.ops = &clk_branch2_ops,
2560 		},
2561 	},
2562 };
2563 
2564 static struct clk_branch gcc_usb3_phy_pipe_clk = {
2565 	.halt_check = BRANCH_HALT_SKIP,
2566 	.clkr = {
2567 		.enable_reg = 0x39018,
2568 		.enable_mask = BIT(0),
2569 		.hw.init = &(struct clk_init_data){
2570 			.name = "gcc_usb3_phy_pipe_clk",
2571 			.ops = &clk_branch2_ops,
2572 		},
2573 	},
2574 };
2575 
2576 static struct clk_branch gcc_usb_hs_phy_cfg_ahb_clk = {
2577 	.halt_reg = 0x41030,
2578 	.halt_check = BRANCH_HALT,
2579 	.clkr = {
2580 		.enable_reg = 0x41030,
2581 		.enable_mask = BIT(0),
2582 		.hw.init = &(struct clk_init_data){
2583 			.name = "gcc_usb_hs_phy_cfg_ahb_clk",
2584 			.ops = &clk_branch2_ops,
2585 		},
2586 	},
2587 };
2588 
2589 static struct clk_branch gcc_usb_hs_system_clk = {
2590 	.halt_reg = 0x41004,
2591 	.halt_check = BRANCH_HALT,
2592 	.clkr = {
2593 		.enable_reg = 0x41004,
2594 		.enable_mask = BIT(0),
2595 		.hw.init = &(struct clk_init_data){
2596 			.name = "gcc_usb_hs_system_clk",
2597 			.parent_names = (const char *[]){
2598 				"usb_hs_system_clk_src",
2599 			},
2600 			.num_parents = 1,
2601 			.flags = CLK_SET_RATE_PARENT,
2602 			.ops = &clk_branch2_ops,
2603 		},
2604 	},
2605 };
2606 
2607 static struct clk_hw *gcc_qcs404_hws[] = {
2608 	&cxo.hw,
2609 };
2610 
2611 static struct clk_regmap *gcc_qcs404_clocks[] = {
2612 	[GCC_APSS_AHB_CLK_SRC] = &apss_ahb_clk_src.clkr,
2613 	[GCC_BLSP1_QUP0_I2C_APPS_CLK_SRC] = &blsp1_qup0_i2c_apps_clk_src.clkr,
2614 	[GCC_BLSP1_QUP0_SPI_APPS_CLK_SRC] = &blsp1_qup0_spi_apps_clk_src.clkr,
2615 	[GCC_BLSP1_QUP1_I2C_APPS_CLK_SRC] = &blsp1_qup1_i2c_apps_clk_src.clkr,
2616 	[GCC_BLSP1_QUP1_SPI_APPS_CLK_SRC] = &blsp1_qup1_spi_apps_clk_src.clkr,
2617 	[GCC_BLSP1_QUP2_I2C_APPS_CLK_SRC] = &blsp1_qup2_i2c_apps_clk_src.clkr,
2618 	[GCC_BLSP1_QUP2_SPI_APPS_CLK_SRC] = &blsp1_qup2_spi_apps_clk_src.clkr,
2619 	[GCC_BLSP1_QUP3_I2C_APPS_CLK_SRC] = &blsp1_qup3_i2c_apps_clk_src.clkr,
2620 	[GCC_BLSP1_QUP3_SPI_APPS_CLK_SRC] = &blsp1_qup3_spi_apps_clk_src.clkr,
2621 	[GCC_BLSP1_QUP4_I2C_APPS_CLK_SRC] = &blsp1_qup4_i2c_apps_clk_src.clkr,
2622 	[GCC_BLSP1_QUP4_SPI_APPS_CLK_SRC] = &blsp1_qup4_spi_apps_clk_src.clkr,
2623 	[GCC_BLSP1_UART0_APPS_CLK_SRC] = &blsp1_uart0_apps_clk_src.clkr,
2624 	[GCC_BLSP1_UART1_APPS_CLK_SRC] = &blsp1_uart1_apps_clk_src.clkr,
2625 	[GCC_BLSP1_UART2_APPS_CLK_SRC] = &blsp1_uart2_apps_clk_src.clkr,
2626 	[GCC_BLSP1_UART3_APPS_CLK_SRC] = &blsp1_uart3_apps_clk_src.clkr,
2627 	[GCC_BLSP2_QUP0_I2C_APPS_CLK_SRC] = &blsp2_qup0_i2c_apps_clk_src.clkr,
2628 	[GCC_BLSP2_QUP0_SPI_APPS_CLK_SRC] = &blsp2_qup0_spi_apps_clk_src.clkr,
2629 	[GCC_BLSP2_UART0_APPS_CLK_SRC] = &blsp2_uart0_apps_clk_src.clkr,
2630 	[GCC_BYTE0_CLK_SRC] = &byte0_clk_src.clkr,
2631 	[GCC_EMAC_CLK_SRC] = &emac_clk_src.clkr,
2632 	[GCC_EMAC_PTP_CLK_SRC] = &emac_ptp_clk_src.clkr,
2633 	[GCC_ESC0_CLK_SRC] = &esc0_clk_src.clkr,
2634 	[GCC_APSS_AHB_CLK] = &gcc_apss_ahb_clk.clkr,
2635 	[GCC_BIMC_GFX_CLK] = &gcc_bimc_gfx_clk.clkr,
2636 	[GCC_BIMC_CDSP_CLK] = &gcc_bimc_cdsp_clk.clkr,
2637 	[GCC_BIMC_MDSS_CLK] = &gcc_bimc_mdss_clk.clkr,
2638 	[GCC_BLSP1_AHB_CLK] = &gcc_blsp1_ahb_clk.clkr,
2639 	[GCC_BLSP1_QUP0_I2C_APPS_CLK] = &gcc_blsp1_qup0_i2c_apps_clk.clkr,
2640 	[GCC_BLSP1_QUP0_SPI_APPS_CLK] = &gcc_blsp1_qup0_spi_apps_clk.clkr,
2641 	[GCC_BLSP1_QUP1_I2C_APPS_CLK] = &gcc_blsp1_qup1_i2c_apps_clk.clkr,
2642 	[GCC_BLSP1_QUP1_SPI_APPS_CLK] = &gcc_blsp1_qup1_spi_apps_clk.clkr,
2643 	[GCC_BLSP1_QUP2_I2C_APPS_CLK] = &gcc_blsp1_qup2_i2c_apps_clk.clkr,
2644 	[GCC_BLSP1_QUP2_SPI_APPS_CLK] = &gcc_blsp1_qup2_spi_apps_clk.clkr,
2645 	[GCC_BLSP1_QUP3_I2C_APPS_CLK] = &gcc_blsp1_qup3_i2c_apps_clk.clkr,
2646 	[GCC_BLSP1_QUP3_SPI_APPS_CLK] = &gcc_blsp1_qup3_spi_apps_clk.clkr,
2647 	[GCC_BLSP1_QUP4_I2C_APPS_CLK] = &gcc_blsp1_qup4_i2c_apps_clk.clkr,
2648 	[GCC_BLSP1_QUP4_SPI_APPS_CLK] = &gcc_blsp1_qup4_spi_apps_clk.clkr,
2649 	[GCC_BLSP1_UART0_APPS_CLK] = &gcc_blsp1_uart0_apps_clk.clkr,
2650 	[GCC_BLSP1_UART1_APPS_CLK] = &gcc_blsp1_uart1_apps_clk.clkr,
2651 	[GCC_BLSP1_UART2_APPS_CLK] = &gcc_blsp1_uart2_apps_clk.clkr,
2652 	[GCC_BLSP1_UART3_APPS_CLK] = &gcc_blsp1_uart3_apps_clk.clkr,
2653 	[GCC_BLSP2_AHB_CLK] = &gcc_blsp2_ahb_clk.clkr,
2654 	[GCC_BLSP2_QUP0_I2C_APPS_CLK] = &gcc_blsp2_qup0_i2c_apps_clk.clkr,
2655 	[GCC_BLSP2_QUP0_SPI_APPS_CLK] = &gcc_blsp2_qup0_spi_apps_clk.clkr,
2656 	[GCC_BLSP2_UART0_APPS_CLK] = &gcc_blsp2_uart0_apps_clk.clkr,
2657 	[GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr,
2658 	[GCC_ETH_AXI_CLK] = &gcc_eth_axi_clk.clkr,
2659 	[GCC_ETH_PTP_CLK] = &gcc_eth_ptp_clk.clkr,
2660 	[GCC_ETH_RGMII_CLK] = &gcc_eth_rgmii_clk.clkr,
2661 	[GCC_ETH_SLAVE_AHB_CLK] = &gcc_eth_slave_ahb_clk.clkr,
2662 	[GCC_GENI_IR_S_CLK] = &gcc_geni_ir_s_clk.clkr,
2663 	[GCC_GENI_IR_H_CLK] = &gcc_geni_ir_h_clk.clkr,
2664 	[GCC_GP1_CLK] = &gcc_gp1_clk.clkr,
2665 	[GCC_GP2_CLK] = &gcc_gp2_clk.clkr,
2666 	[GCC_GP3_CLK] = &gcc_gp3_clk.clkr,
2667 	[GCC_MDSS_AHB_CLK] = &gcc_mdss_ahb_clk.clkr,
2668 	[GCC_MDSS_AXI_CLK] = &gcc_mdss_axi_clk.clkr,
2669 	[GCC_MDSS_BYTE0_CLK] = &gcc_mdss_byte0_clk.clkr,
2670 	[GCC_MDSS_ESC0_CLK] = &gcc_mdss_esc0_clk.clkr,
2671 	[GCC_MDSS_HDMI_APP_CLK] = &gcc_mdss_hdmi_app_clk.clkr,
2672 	[GCC_MDSS_HDMI_PCLK_CLK] = &gcc_mdss_hdmi_pclk_clk.clkr,
2673 	[GCC_MDSS_MDP_CLK] = &gcc_mdss_mdp_clk.clkr,
2674 	[GCC_MDSS_PCLK0_CLK] = &gcc_mdss_pclk0_clk.clkr,
2675 	[GCC_MDSS_VSYNC_CLK] = &gcc_mdss_vsync_clk.clkr,
2676 	[GCC_OXILI_AHB_CLK] = &gcc_oxili_ahb_clk.clkr,
2677 	[GCC_OXILI_GFX3D_CLK] = &gcc_oxili_gfx3d_clk.clkr,
2678 	[GCC_PCIE_0_AUX_CLK] = &gcc_pcie_0_aux_clk.clkr,
2679 	[GCC_PCIE_0_CFG_AHB_CLK] = &gcc_pcie_0_cfg_ahb_clk.clkr,
2680 	[GCC_PCIE_0_MSTR_AXI_CLK] = &gcc_pcie_0_mstr_axi_clk.clkr,
2681 	[GCC_PCIE_0_PIPE_CLK] = &gcc_pcie_0_pipe_clk.clkr,
2682 	[GCC_PCIE_0_SLV_AXI_CLK] = &gcc_pcie_0_slv_axi_clk.clkr,
2683 	[GCC_PCNOC_USB2_CLK] = &gcc_pcnoc_usb2_clk.clkr,
2684 	[GCC_PCNOC_USB3_CLK] = &gcc_pcnoc_usb3_clk.clkr,
2685 	[GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr,
2686 	[GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr,
2687 	[GCC_PRNG_AHB_CLK] = &gcc_prng_ahb_clk.clkr,
2688 	[GCC_PWM0_XO512_CLK] = &gcc_pwm0_xo512_clk.clkr,
2689 	[GCC_PWM1_XO512_CLK] = &gcc_pwm1_xo512_clk.clkr,
2690 	[GCC_PWM2_XO512_CLK] = &gcc_pwm2_xo512_clk.clkr,
2691 	[GCC_SDCC1_AHB_CLK] = &gcc_sdcc1_ahb_clk.clkr,
2692 	[GCC_SDCC1_APPS_CLK] = &gcc_sdcc1_apps_clk.clkr,
2693 	[GCC_SDCC1_ICE_CORE_CLK] = &gcc_sdcc1_ice_core_clk.clkr,
2694 	[GCC_CDSP_CFG_AHB_CLK] = &gcc_cdsp_cfg_ahb_clk.clkr,
2695 	[GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr,
2696 	[GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr,
2697 	[GCC_SYS_NOC_USB3_CLK] = &gcc_sys_noc_usb3_clk.clkr,
2698 	[GCC_USB20_MOCK_UTMI_CLK] = &gcc_usb20_mock_utmi_clk.clkr,
2699 	[GCC_USB2A_PHY_SLEEP_CLK] = &gcc_usb2a_phy_sleep_clk.clkr,
2700 	[GCC_USB30_MASTER_CLK] = &gcc_usb30_master_clk.clkr,
2701 	[GCC_USB30_MOCK_UTMI_CLK] = &gcc_usb30_mock_utmi_clk.clkr,
2702 	[GCC_USB30_SLEEP_CLK] = &gcc_usb30_sleep_clk.clkr,
2703 	[GCC_USB3_PHY_AUX_CLK] = &gcc_usb3_phy_aux_clk.clkr,
2704 	[GCC_USB3_PHY_PIPE_CLK] = &gcc_usb3_phy_pipe_clk.clkr,
2705 	[GCC_USB_HS_PHY_CFG_AHB_CLK] = &gcc_usb_hs_phy_cfg_ahb_clk.clkr,
2706 	[GCC_USB_HS_SYSTEM_CLK] = &gcc_usb_hs_system_clk.clkr,
2707 	[GCC_GFX3D_CLK_SRC] = &gfx3d_clk_src.clkr,
2708 	[GCC_GP1_CLK_SRC] = &gp1_clk_src.clkr,
2709 	[GCC_GP2_CLK_SRC] = &gp2_clk_src.clkr,
2710 	[GCC_GP3_CLK_SRC] = &gp3_clk_src.clkr,
2711 	[GCC_GPLL0_OUT_MAIN] = &gpll0_out_main.clkr,
2712 	[GCC_GPLL0_AO_OUT_MAIN] = &gpll0_ao_out_main.clkr,
2713 	[GCC_GPLL0_SLEEP_CLK_SRC] = &gpll0_sleep_clk_src.clkr,
2714 	[GCC_GPLL1_OUT_MAIN] = &gpll1_out_main.clkr,
2715 	[GCC_GPLL3_OUT_MAIN] = &gpll3_out_main.clkr,
2716 	[GCC_GPLL4_OUT_MAIN] = &gpll4_out_main.clkr,
2717 	[GCC_GPLL6] = &gpll6.clkr,
2718 	[GCC_GPLL6_OUT_AUX] = &gpll6_out_aux,
2719 	[GCC_HDMI_APP_CLK_SRC] = &hdmi_app_clk_src.clkr,
2720 	[GCC_HDMI_PCLK_CLK_SRC] = &hdmi_pclk_clk_src.clkr,
2721 	[GCC_MDP_CLK_SRC] = &mdp_clk_src.clkr,
2722 	[GCC_PCIE_0_AUX_CLK_SRC] = &pcie_0_aux_clk_src.clkr,
2723 	[GCC_PCIE_0_PIPE_CLK_SRC] = &pcie_0_pipe_clk_src.clkr,
2724 	[GCC_PCLK0_CLK_SRC] = &pclk0_clk_src.clkr,
2725 	[GCC_PDM2_CLK_SRC] = &pdm2_clk_src.clkr,
2726 	[GCC_SDCC1_APPS_CLK_SRC] = &sdcc1_apps_clk_src.clkr,
2727 	[GCC_SDCC1_ICE_CORE_CLK_SRC] = &sdcc1_ice_core_clk_src.clkr,
2728 	[GCC_SDCC2_APPS_CLK_SRC] = &sdcc2_apps_clk_src.clkr,
2729 	[GCC_USB20_MOCK_UTMI_CLK_SRC] = &usb20_mock_utmi_clk_src.clkr,
2730 	[GCC_USB30_MASTER_CLK_SRC] = &usb30_master_clk_src.clkr,
2731 	[GCC_USB30_MOCK_UTMI_CLK_SRC] = &usb30_mock_utmi_clk_src.clkr,
2732 	[GCC_USB3_PHY_AUX_CLK_SRC] = &usb3_phy_aux_clk_src.clkr,
2733 	[GCC_USB_HS_SYSTEM_CLK_SRC] = &usb_hs_system_clk_src.clkr,
2734 	[GCC_VSYNC_CLK_SRC] = &vsync_clk_src.clkr,
2735 	[GCC_CDSP_BIMC_CLK_SRC] = &cdsp_bimc_clk_src.clkr,
2736 	[GCC_USB_HS_INACTIVITY_TIMERS_CLK] =
2737 			&gcc_usb_hs_inactivity_timers_clk.clkr,
2738 	[GCC_BIMC_GPU_CLK] = &gcc_bimc_gpu_clk.clkr,
2739 	[GCC_GTCU_AHB_CLK] = &gcc_gtcu_ahb_clk.clkr,
2740 	[GCC_GFX_TCU_CLK] = &gcc_gfx_tcu_clk.clkr,
2741 	[GCC_GFX_TBU_CLK] = &gcc_gfx_tbu_clk.clkr,
2742 	[GCC_SMMU_CFG_CLK] = &gcc_smmu_cfg_clk.clkr,
2743 	[GCC_APSS_TCU_CLK] = &gcc_apss_tcu_clk.clkr,
2744 	[GCC_CDSP_TBU_CLK] = &gcc_cdsp_tbu_clk.clkr,
2745 	[GCC_CRYPTO_AHB_CLK] = &gcc_crypto_ahb_clk.clkr,
2746 	[GCC_CRYPTO_AXI_CLK] = &gcc_crypto_axi_clk.clkr,
2747 	[GCC_CRYPTO_CLK] = &gcc_crypto_clk.clkr,
2748 	[GCC_MDP_TBU_CLK] = &gcc_mdp_tbu_clk.clkr,
2749 	[GCC_QDSS_DAP_CLK] = &gcc_qdss_dap_clk.clkr,
2750 	[GCC_DCC_CLK] = &gcc_dcc_clk.clkr,
2751 	[GCC_DCC_XO_CLK] = &gcc_dcc_xo_clk.clkr,
2752 };
2753 
2754 static const struct qcom_reset_map gcc_qcs404_resets[] = {
2755 	[GCC_GENI_IR_BCR] = { 0x0F000 },
2756 	[GCC_CDSP_RESTART] = { 0x18000 },
2757 	[GCC_USB_HS_BCR] = { 0x41000 },
2758 	[GCC_USB2_HS_PHY_ONLY_BCR] = { 0x41034 },
2759 	[GCC_QUSB2_PHY_BCR] = { 0x4103c },
2760 	[GCC_USB_HS_PHY_CFG_AHB_BCR] = { 0x0000c, 1 },
2761 	[GCC_USB2A_PHY_BCR] = { 0x0000c, 0 },
2762 	[GCC_USB3_PHY_BCR] = { 0x39004 },
2763 	[GCC_USB_30_BCR] = { 0x39000 },
2764 	[GCC_USB3PHY_PHY_BCR] = { 0x39008 },
2765 	[GCC_PCIE_0_BCR] = { 0x3e000 },
2766 	[GCC_PCIE_0_PHY_BCR] = { 0x3e004 },
2767 	[GCC_PCIE_0_LINK_DOWN_BCR] = { 0x3e038 },
2768 	[GCC_PCIEPHY_0_PHY_BCR] = { 0x3e03c },
2769 	[GCC_EMAC_BCR] = { 0x4e000 },
2770 };
2771 
2772 static const struct regmap_config gcc_qcs404_regmap_config = {
2773 	.reg_bits	= 32,
2774 	.reg_stride	= 4,
2775 	.val_bits	= 32,
2776 	.max_register	= 0x7f000,
2777 	.fast_io	= true,
2778 };
2779 
2780 static const struct qcom_cc_desc gcc_qcs404_desc = {
2781 	.config = &gcc_qcs404_regmap_config,
2782 	.clks = gcc_qcs404_clocks,
2783 	.num_clks = ARRAY_SIZE(gcc_qcs404_clocks),
2784 	.resets = gcc_qcs404_resets,
2785 	.num_resets = ARRAY_SIZE(gcc_qcs404_resets),
2786 	.clk_hws = gcc_qcs404_hws,
2787 	.num_clk_hws = ARRAY_SIZE(gcc_qcs404_hws),
2788 };
2789 
2790 static const struct of_device_id gcc_qcs404_match_table[] = {
2791 	{ .compatible = "qcom,gcc-qcs404" },
2792 	{ }
2793 };
2794 MODULE_DEVICE_TABLE(of, gcc_qcs404_match_table);
2795 
2796 static int gcc_qcs404_probe(struct platform_device *pdev)
2797 {
2798 	struct regmap *regmap;
2799 
2800 	regmap = qcom_cc_map(pdev, &gcc_qcs404_desc);
2801 	if (IS_ERR(regmap))
2802 		return PTR_ERR(regmap);
2803 
2804 	clk_alpha_pll_configure(&gpll3_out_main, regmap, &gpll3_config);
2805 
2806 	return qcom_cc_really_probe(pdev, &gcc_qcs404_desc, regmap);
2807 }
2808 
2809 static struct platform_driver gcc_qcs404_driver = {
2810 	.probe = gcc_qcs404_probe,
2811 	.driver = {
2812 		.name = "gcc-qcs404",
2813 		.of_match_table = gcc_qcs404_match_table,
2814 	},
2815 };
2816 
2817 static int __init gcc_qcs404_init(void)
2818 {
2819 	return platform_driver_register(&gcc_qcs404_driver);
2820 }
2821 subsys_initcall(gcc_qcs404_init);
2822 
2823 static void __exit gcc_qcs404_exit(void)
2824 {
2825 	platform_driver_unregister(&gcc_qcs404_driver);
2826 }
2827 module_exit(gcc_qcs404_exit);
2828 
2829 MODULE_DESCRIPTION("Qualcomm GCC QCS404 Driver");
2830 MODULE_LICENSE("GPL v2");
2831