xref: /openbmc/linux/drivers/clk/qcom/gcc-sm6115.c (revision e330fb14)
1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3  * Copyright (c) 2019-2021, The Linux Foundation. All rights reserved.
4  */
5 
6 #include <linux/err.h>
7 #include <linux/kernel.h>
8 #include <linux/module.h>
9 #include <linux/of_device.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-sm6115.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 "clk-regmap-divider.h"
22 #include "common.h"
23 #include "gdsc.h"
24 #include "reset.h"
25 
26 enum {
27 	P_BI_TCXO,
28 	P_GPLL0_OUT_AUX2,
29 	P_GPLL0_OUT_EARLY,
30 	P_GPLL10_OUT_MAIN,
31 	P_GPLL11_OUT_MAIN,
32 	P_GPLL3_OUT_EARLY,
33 	P_GPLL4_OUT_MAIN,
34 	P_GPLL6_OUT_EARLY,
35 	P_GPLL6_OUT_MAIN,
36 	P_GPLL7_OUT_MAIN,
37 	P_GPLL8_OUT_EARLY,
38 	P_GPLL8_OUT_MAIN,
39 	P_GPLL9_OUT_EARLY,
40 	P_GPLL9_OUT_MAIN,
41 	P_SLEEP_CLK,
42 };
43 
44 static struct pll_vco default_vco[] = {
45 	{ 500000000, 1000000000, 2 },
46 };
47 
48 static struct pll_vco gpll9_vco[] = {
49 	{ 500000000, 1250000000, 0 },
50 };
51 
52 static struct pll_vco gpll10_vco[] = {
53 	{ 750000000, 1500000000, 1 },
54 };
55 
56 static struct clk_alpha_pll gpll0 = {
57 	.offset = 0x0,
58 	.vco_table = default_vco,
59 	.num_vco = ARRAY_SIZE(default_vco),
60 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
61 	.clkr = {
62 		.enable_reg = 0x79000,
63 		.enable_mask = BIT(0),
64 		.hw.init = &(struct clk_init_data){
65 			.name = "gpll0",
66 			.parent_data = &(const struct clk_parent_data){
67 				.fw_name = "bi_tcxo",
68 			},
69 			.num_parents = 1,
70 			.ops = &clk_alpha_pll_ops,
71 		},
72 	},
73 };
74 
75 static const struct clk_div_table post_div_table_gpll0_out_aux2[] = {
76 	{ 0x1, 2 },
77 	{ }
78 };
79 
80 static struct clk_alpha_pll_postdiv gpll0_out_aux2 = {
81 	.offset = 0x0,
82 	.post_div_shift = 8,
83 	.post_div_table = post_div_table_gpll0_out_aux2,
84 	.num_post_div = ARRAY_SIZE(post_div_table_gpll0_out_aux2),
85 	.width = 4,
86 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
87 	.clkr.hw.init = &(struct clk_init_data){
88 		.name = "gpll0_out_aux2",
89 		.parent_hws = (const struct clk_hw *[]){ &gpll0.clkr.hw },
90 		.num_parents = 1,
91 		.ops = &clk_alpha_pll_postdiv_ro_ops,
92 	},
93 };
94 
95 /* listed as BRAMMO, but it doesn't really match */
96 static const u8 clk_gpll9_regs[PLL_OFF_MAX_REGS] = {
97 	[PLL_OFF_L_VAL] = 0x04,
98 	[PLL_OFF_ALPHA_VAL] = 0x08,
99 	[PLL_OFF_ALPHA_VAL_U] = 0x0c,
100 	[PLL_OFF_TEST_CTL] = 0x10,
101 	[PLL_OFF_TEST_CTL_U] = 0x14,
102 	[PLL_OFF_USER_CTL] = 0x18,
103 	[PLL_OFF_CONFIG_CTL] = 0x1C,
104 	[PLL_OFF_STATUS] = 0x20,
105 };
106 
107 static const struct clk_div_table post_div_table_gpll0_out_main[] = {
108 	{ 0x0, 1 },
109 	{ }
110 };
111 
112 static struct clk_alpha_pll_postdiv gpll0_out_main = {
113 	.offset = 0x0,
114 	.post_div_shift = 8,
115 	.post_div_table = post_div_table_gpll0_out_main,
116 	.num_post_div = ARRAY_SIZE(post_div_table_gpll0_out_main),
117 	.width = 4,
118 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
119 	.clkr.hw.init = &(struct clk_init_data){
120 		.name = "gpll0_out_main",
121 		.parent_hws = (const struct clk_hw *[]){ &gpll0.clkr.hw },
122 		.num_parents = 1,
123 		.ops = &clk_alpha_pll_postdiv_ro_ops,
124 	},
125 };
126 
127 /* 1152MHz configuration */
128 static const struct alpha_pll_config gpll10_config = {
129 	.l = 0x3c,
130 	.vco_val = 0x1 << 20,
131 	.vco_mask = GENMASK(21, 20),
132 	.main_output_mask = BIT(0),
133 	.config_ctl_val = 0x4001055b,
134 };
135 
136 static struct clk_alpha_pll gpll10 = {
137 	.offset = 0xa000,
138 	.vco_table = gpll10_vco,
139 	.num_vco = ARRAY_SIZE(gpll10_vco),
140 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
141 	.clkr = {
142 		.enable_reg = 0x79000,
143 		.enable_mask = BIT(10),
144 		.hw.init = &(struct clk_init_data){
145 			.name = "gpll10",
146 			.parent_data = &(const struct clk_parent_data){
147 				.fw_name = "bi_tcxo",
148 			},
149 			.num_parents = 1,
150 			.ops = &clk_alpha_pll_ops,
151 		},
152 	},
153 };
154 
155 static const struct clk_div_table post_div_table_gpll10_out_main[] = {
156 	{ 0x0, 1 },
157 	{ }
158 };
159 
160 static struct clk_alpha_pll_postdiv gpll10_out_main = {
161 	.offset = 0xa000,
162 	.post_div_shift = 8,
163 	.post_div_table = post_div_table_gpll10_out_main,
164 	.num_post_div = ARRAY_SIZE(post_div_table_gpll10_out_main),
165 	.width = 4,
166 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
167 	.clkr.hw.init = &(struct clk_init_data){
168 		.name = "gpll10_out_main",
169 		.parent_hws = (const struct clk_hw *[]){ &gpll10.clkr.hw },
170 		.num_parents = 1,
171 		.flags = CLK_SET_RATE_PARENT,
172 		.ops = &clk_alpha_pll_postdiv_ops,
173 	},
174 };
175 
176 /* 600MHz configuration */
177 static const struct alpha_pll_config gpll11_config = {
178 	.l = 0x1F,
179 	.alpha = 0x0,
180 	.alpha_hi = 0x40,
181 	.alpha_en_mask = BIT(24),
182 	.vco_val = 0x2 << 20,
183 	.vco_mask = GENMASK(21, 20),
184 	.config_ctl_val = 0x4001055b,
185 };
186 
187 static struct clk_alpha_pll gpll11 = {
188 	.offset = 0xb000,
189 	.vco_table = default_vco,
190 	.num_vco = ARRAY_SIZE(default_vco),
191 	.flags = SUPPORTS_DYNAMIC_UPDATE,
192 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
193 	.clkr = {
194 		.enable_reg = 0x79000,
195 		.enable_mask = BIT(11),
196 		.hw.init = &(struct clk_init_data){
197 			.name = "gpll11",
198 			.parent_data = &(const struct clk_parent_data){
199 				.fw_name = "bi_tcxo",
200 			},
201 			.num_parents = 1,
202 			.ops = &clk_alpha_pll_ops,
203 		},
204 	},
205 };
206 
207 static const struct clk_div_table post_div_table_gpll11_out_main[] = {
208 	{ 0x0, 1 },
209 	{ }
210 };
211 
212 static struct clk_alpha_pll_postdiv gpll11_out_main = {
213 	.offset = 0xb000,
214 	.post_div_shift = 8,
215 	.post_div_table = post_div_table_gpll11_out_main,
216 	.num_post_div = ARRAY_SIZE(post_div_table_gpll11_out_main),
217 	.width = 4,
218 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
219 	.clkr.hw.init = &(struct clk_init_data){
220 		.name = "gpll11_out_main",
221 		.parent_hws = (const struct clk_hw *[]){ &gpll11.clkr.hw },
222 		.num_parents = 1,
223 		.flags = CLK_SET_RATE_PARENT,
224 		.ops = &clk_alpha_pll_postdiv_ops,
225 	},
226 };
227 
228 static struct clk_alpha_pll gpll3 = {
229 	.offset = 0x3000,
230 	.vco_table = default_vco,
231 	.num_vco = ARRAY_SIZE(default_vco),
232 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
233 	.clkr = {
234 		.enable_reg = 0x79000,
235 		.enable_mask = BIT(3),
236 		.hw.init = &(struct clk_init_data){
237 			.name = "gpll3",
238 			.parent_data = &(const struct clk_parent_data){
239 				.fw_name = "bi_tcxo",
240 			},
241 			.num_parents = 1,
242 			.ops = &clk_alpha_pll_ops,
243 		},
244 	},
245 };
246 
247 static struct clk_alpha_pll gpll4 = {
248 	.offset = 0x4000,
249 	.vco_table = default_vco,
250 	.num_vco = ARRAY_SIZE(default_vco),
251 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
252 	.clkr = {
253 		.enable_reg = 0x79000,
254 		.enable_mask = BIT(4),
255 		.hw.init = &(struct clk_init_data){
256 			.name = "gpll4",
257 			.parent_data = &(const struct clk_parent_data){
258 				.fw_name = "bi_tcxo",
259 			},
260 			.num_parents = 1,
261 			.ops = &clk_alpha_pll_ops,
262 		},
263 	},
264 };
265 
266 static const struct clk_div_table post_div_table_gpll4_out_main[] = {
267 	{ 0x0, 1 },
268 	{ }
269 };
270 
271 static struct clk_alpha_pll_postdiv gpll4_out_main = {
272 	.offset = 0x4000,
273 	.post_div_shift = 8,
274 	.post_div_table = post_div_table_gpll4_out_main,
275 	.num_post_div = ARRAY_SIZE(post_div_table_gpll4_out_main),
276 	.width = 4,
277 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
278 	.clkr.hw.init = &(struct clk_init_data){
279 		.name = "gpll4_out_main",
280 		.parent_hws = (const struct clk_hw *[]){ &gpll4.clkr.hw },
281 		.num_parents = 1,
282 		.ops = &clk_alpha_pll_postdiv_ro_ops,
283 	},
284 };
285 
286 static struct clk_alpha_pll gpll6 = {
287 	.offset = 0x6000,
288 	.vco_table = default_vco,
289 	.num_vco = ARRAY_SIZE(default_vco),
290 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
291 	.clkr = {
292 		.enable_reg = 0x79000,
293 		.enable_mask = BIT(6),
294 		.hw.init = &(struct clk_init_data){
295 			.name = "gpll6",
296 			.parent_data = &(const struct clk_parent_data){
297 				.fw_name = "bi_tcxo",
298 			},
299 			.num_parents = 1,
300 			.ops = &clk_alpha_pll_ops,
301 		},
302 	},
303 };
304 
305 static const struct clk_div_table post_div_table_gpll6_out_main[] = {
306 	{ 0x1, 2 },
307 	{ }
308 };
309 
310 static struct clk_alpha_pll_postdiv gpll6_out_main = {
311 	.offset = 0x6000,
312 	.post_div_shift = 8,
313 	.post_div_table = post_div_table_gpll6_out_main,
314 	.num_post_div = ARRAY_SIZE(post_div_table_gpll6_out_main),
315 	.width = 4,
316 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
317 	.clkr.hw.init = &(struct clk_init_data){
318 		.name = "gpll6_out_main",
319 		.parent_hws = (const struct clk_hw *[]){ &gpll6.clkr.hw },
320 		.num_parents = 1,
321 		.ops = &clk_alpha_pll_postdiv_ro_ops,
322 	},
323 };
324 
325 static struct clk_alpha_pll gpll7 = {
326 	.offset = 0x7000,
327 	.vco_table = default_vco,
328 	.num_vco = ARRAY_SIZE(default_vco),
329 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
330 	.clkr = {
331 		.enable_reg = 0x79000,
332 		.enable_mask = BIT(7),
333 		.hw.init = &(struct clk_init_data){
334 			.name = "gpll7",
335 			.parent_data = &(const struct clk_parent_data){
336 				.fw_name = "bi_tcxo",
337 			},
338 			.num_parents = 1,
339 			.ops = &clk_alpha_pll_ops,
340 		},
341 	},
342 };
343 
344 static const struct clk_div_table post_div_table_gpll7_out_main[] = {
345 	{ 0x0, 1 },
346 	{ }
347 };
348 
349 static struct clk_alpha_pll_postdiv gpll7_out_main = {
350 	.offset = 0x7000,
351 	.post_div_shift = 8,
352 	.post_div_table = post_div_table_gpll7_out_main,
353 	.num_post_div = ARRAY_SIZE(post_div_table_gpll7_out_main),
354 	.width = 4,
355 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
356 	.clkr.hw.init = &(struct clk_init_data){
357 		.name = "gpll7_out_main",
358 		.parent_hws = (const struct clk_hw *[]){ &gpll7.clkr.hw },
359 		.num_parents = 1,
360 		.ops = &clk_alpha_pll_postdiv_ro_ops,
361 	},
362 };
363 
364 /* 800MHz configuration */
365 static const struct alpha_pll_config gpll8_config = {
366 	.l = 0x29,
367 	.alpha = 0xAAAAAAAA,
368 	.alpha_hi = 0xAA,
369 	.alpha_en_mask = BIT(24),
370 	.vco_val = 0x2 << 20,
371 	.vco_mask = GENMASK(21, 20),
372 	.main_output_mask = BIT(0),
373 	.early_output_mask = BIT(3),
374 	.post_div_val = 0x1 << 8,
375 	.post_div_mask = GENMASK(11, 8),
376 	.config_ctl_val = 0x4001055b,
377 };
378 
379 static struct clk_alpha_pll gpll8 = {
380 	.offset = 0x8000,
381 	.vco_table = default_vco,
382 	.num_vco = ARRAY_SIZE(default_vco),
383 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
384 	.flags = SUPPORTS_DYNAMIC_UPDATE,
385 	.clkr = {
386 		.enable_reg = 0x79000,
387 		.enable_mask = BIT(8),
388 		.hw.init = &(struct clk_init_data){
389 			.name = "gpll8",
390 			.parent_data = &(const struct clk_parent_data){
391 				.fw_name = "bi_tcxo",
392 			},
393 			.num_parents = 1,
394 			.ops = &clk_alpha_pll_ops,
395 		},
396 	},
397 };
398 
399 static const struct clk_div_table post_div_table_gpll8_out_main[] = {
400 	{ 0x1, 2 },
401 	{ }
402 };
403 
404 static struct clk_alpha_pll_postdiv gpll8_out_main = {
405 	.offset = 0x8000,
406 	.post_div_shift = 8,
407 	.post_div_table = post_div_table_gpll8_out_main,
408 	.num_post_div = ARRAY_SIZE(post_div_table_gpll8_out_main),
409 	.width = 4,
410 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
411 	.clkr.hw.init = &(struct clk_init_data){
412 		.name = "gpll8_out_main",
413 		.parent_hws = (const struct clk_hw *[]){ &gpll8.clkr.hw },
414 		.num_parents = 1,
415 		.flags = CLK_SET_RATE_PARENT,
416 		.ops = &clk_alpha_pll_postdiv_ro_ops,
417 	},
418 };
419 
420 /* 1152MHz configuration */
421 static const struct alpha_pll_config gpll9_config = {
422 	.l = 0x3C,
423 	.alpha = 0x0,
424 	.post_div_val = 0x1 << 8,
425 	.post_div_mask = GENMASK(9, 8),
426 	.main_output_mask = BIT(0),
427 	.config_ctl_val = 0x00004289,
428 };
429 
430 static struct clk_alpha_pll gpll9 = {
431 	.offset = 0x9000,
432 	.vco_table = gpll9_vco,
433 	.num_vco = ARRAY_SIZE(gpll9_vco),
434 	.regs = clk_gpll9_regs,
435 	.clkr = {
436 		.enable_reg = 0x79000,
437 		.enable_mask = BIT(9),
438 		.hw.init = &(struct clk_init_data){
439 			.name = "gpll9",
440 			.parent_data = &(const struct clk_parent_data){
441 				.fw_name = "bi_tcxo",
442 			},
443 			.num_parents = 1,
444 			.ops = &clk_alpha_pll_ops,
445 		},
446 	},
447 };
448 
449 static const struct clk_div_table post_div_table_gpll9_out_main[] = {
450 	{ 0x1, 2 },
451 	{ }
452 };
453 
454 static struct clk_alpha_pll_postdiv gpll9_out_main = {
455 	.offset = 0x9000,
456 	.post_div_shift = 8,
457 	.post_div_table = post_div_table_gpll9_out_main,
458 	.num_post_div = ARRAY_SIZE(post_div_table_gpll9_out_main),
459 	.width = 2,
460 	.regs = clk_gpll9_regs,
461 	.clkr.hw.init = &(struct clk_init_data){
462 		.name = "gpll9_out_main",
463 		.parent_hws = (const struct clk_hw *[]){ &gpll9.clkr.hw },
464 		.num_parents = 1,
465 		.flags = CLK_SET_RATE_PARENT,
466 		.ops = &clk_alpha_pll_postdiv_ops,
467 	},
468 };
469 
470 static const struct parent_map gcc_parent_map_0[] = {
471 	{ P_BI_TCXO, 0 },
472 	{ P_GPLL0_OUT_EARLY, 1 },
473 	{ P_GPLL0_OUT_AUX2, 2 },
474 };
475 
476 static const struct clk_parent_data gcc_parents_0[] = {
477 	{ .fw_name = "bi_tcxo" },
478 	{ .hw = &gpll0.clkr.hw },
479 	{ .hw = &gpll0_out_aux2.clkr.hw },
480 };
481 
482 static const struct parent_map gcc_parent_map_1[] = {
483 	{ P_BI_TCXO, 0 },
484 	{ P_GPLL0_OUT_EARLY, 1 },
485 	{ P_GPLL0_OUT_AUX2, 2 },
486 	{ P_GPLL6_OUT_MAIN, 4 },
487 };
488 
489 static const struct clk_parent_data gcc_parents_1[] = {
490 	{ .fw_name = "bi_tcxo" },
491 	{ .hw = &gpll0.clkr.hw },
492 	{ .hw = &gpll0_out_aux2.clkr.hw },
493 	{ .hw = &gpll6_out_main.clkr.hw },
494 };
495 
496 static const struct parent_map gcc_parent_map_2[] = {
497 	{ P_BI_TCXO, 0 },
498 	{ P_GPLL0_OUT_EARLY, 1 },
499 	{ P_GPLL0_OUT_AUX2, 2 },
500 	{ P_SLEEP_CLK, 5 },
501 };
502 
503 static const struct clk_parent_data gcc_parents_2[] = {
504 	{ .fw_name = "bi_tcxo" },
505 	{ .hw = &gpll0.clkr.hw },
506 	{ .hw = &gpll0_out_aux2.clkr.hw },
507 	{ .fw_name = "sleep_clk" },
508 };
509 
510 static const struct parent_map gcc_parent_map_3[] = {
511 	{ P_BI_TCXO, 0 },
512 	{ P_GPLL0_OUT_EARLY, 1 },
513 	{ P_GPLL9_OUT_EARLY, 2 },
514 	{ P_GPLL10_OUT_MAIN, 3 },
515 	{ P_GPLL9_OUT_MAIN, 5 },
516 };
517 
518 static const struct clk_parent_data gcc_parents_3[] = {
519 	{ .fw_name = "bi_tcxo" },
520 	{ .hw = &gpll0.clkr.hw },
521 	{ .hw = &gpll9.clkr.hw },
522 	{ .hw = &gpll10_out_main.clkr.hw },
523 	{ .hw = &gpll9_out_main.clkr.hw },
524 };
525 
526 static const struct parent_map gcc_parent_map_4[] = {
527 	{ P_BI_TCXO, 0 },
528 	{ P_GPLL0_OUT_EARLY, 1 },
529 	{ P_GPLL0_OUT_AUX2, 2 },
530 	{ P_GPLL4_OUT_MAIN, 5 },
531 };
532 
533 static const struct clk_parent_data gcc_parents_4[] = {
534 	{ .fw_name = "bi_tcxo" },
535 	{ .hw = &gpll0.clkr.hw },
536 	{ .hw = &gpll0_out_aux2.clkr.hw },
537 	{ .hw = &gpll4_out_main.clkr.hw },
538 };
539 
540 static const struct parent_map gcc_parent_map_5[] = {
541 	{ P_BI_TCXO, 0 },
542 	{ P_GPLL0_OUT_EARLY, 1 },
543 	{ P_GPLL8_OUT_EARLY, 2 },
544 	{ P_GPLL10_OUT_MAIN, 3 },
545 	{ P_GPLL8_OUT_MAIN, 4 },
546 	{ P_GPLL9_OUT_MAIN, 5 },
547 };
548 
549 static const struct clk_parent_data gcc_parents_5[] = {
550 	{ .fw_name = "bi_tcxo" },
551 	{ .hw = &gpll0.clkr.hw },
552 	{ .hw = &gpll8.clkr.hw },
553 	{ .hw = &gpll10_out_main.clkr.hw },
554 	{ .hw = &gpll8_out_main.clkr.hw },
555 	{ .hw = &gpll9_out_main.clkr.hw },
556 };
557 
558 static const struct parent_map gcc_parent_map_6[] = {
559 	{ P_BI_TCXO, 0 },
560 	{ P_GPLL0_OUT_EARLY, 1 },
561 	{ P_GPLL8_OUT_EARLY, 2 },
562 	{ P_GPLL10_OUT_MAIN, 3 },
563 	{ P_GPLL6_OUT_MAIN, 4 },
564 	{ P_GPLL9_OUT_MAIN, 5 },
565 	{ P_GPLL3_OUT_EARLY, 6 },
566 };
567 
568 static const struct clk_parent_data gcc_parents_6[] = {
569 	{ .fw_name = "bi_tcxo" },
570 	{ .hw = &gpll0.clkr.hw },
571 	{ .hw = &gpll8.clkr.hw },
572 	{ .hw = &gpll10_out_main.clkr.hw },
573 	{ .hw = &gpll6_out_main.clkr.hw },
574 	{ .hw = &gpll9_out_main.clkr.hw },
575 	{ .hw = &gpll3.clkr.hw },
576 };
577 
578 static const struct parent_map gcc_parent_map_7[] = {
579 	{ P_BI_TCXO, 0 },
580 	{ P_GPLL0_OUT_EARLY, 1 },
581 	{ P_GPLL0_OUT_AUX2, 2 },
582 	{ P_GPLL10_OUT_MAIN, 3 },
583 	{ P_GPLL4_OUT_MAIN, 5 },
584 	{ P_GPLL3_OUT_EARLY, 6 },
585 };
586 
587 static const struct clk_parent_data gcc_parents_7[] = {
588 	{ .fw_name = "bi_tcxo" },
589 	{ .hw = &gpll0.clkr.hw },
590 	{ .hw = &gpll0_out_aux2.clkr.hw },
591 	{ .hw = &gpll10_out_main.clkr.hw },
592 	{ .hw = &gpll4_out_main.clkr.hw },
593 	{ .hw = &gpll3.clkr.hw },
594 };
595 
596 static const struct parent_map gcc_parent_map_8[] = {
597 	{ P_BI_TCXO, 0 },
598 	{ P_GPLL0_OUT_EARLY, 1 },
599 	{ P_GPLL8_OUT_EARLY, 2 },
600 	{ P_GPLL10_OUT_MAIN, 3 },
601 	{ P_GPLL8_OUT_MAIN, 4 },
602 	{ P_GPLL9_OUT_MAIN, 5 },
603 	{ P_GPLL3_OUT_EARLY, 6 },
604 };
605 
606 static const struct clk_parent_data gcc_parents_8[] = {
607 	{ .fw_name = "bi_tcxo" },
608 	{ .hw = &gpll0.clkr.hw },
609 	{ .hw = &gpll8.clkr.hw },
610 	{ .hw = &gpll10_out_main.clkr.hw },
611 	{ .hw = &gpll8_out_main.clkr.hw },
612 	{ .hw = &gpll9_out_main.clkr.hw },
613 	{ .hw = &gpll3.clkr.hw },
614 };
615 
616 static const struct parent_map gcc_parent_map_9[] = {
617 	{ P_BI_TCXO, 0 },
618 	{ P_GPLL0_OUT_EARLY, 1 },
619 	{ P_GPLL0_OUT_AUX2, 2 },
620 	{ P_GPLL10_OUT_MAIN, 3 },
621 	{ P_GPLL8_OUT_MAIN, 4 },
622 	{ P_GPLL9_OUT_MAIN, 5 },
623 	{ P_GPLL3_OUT_EARLY, 6 },
624 };
625 
626 static const struct clk_parent_data gcc_parents_9[] = {
627 	{ .fw_name = "bi_tcxo" },
628 	{ .hw = &gpll0.clkr.hw },
629 	{ .hw = &gpll0_out_aux2.clkr.hw },
630 	{ .hw = &gpll10_out_main.clkr.hw },
631 	{ .hw = &gpll8_out_main.clkr.hw },
632 	{ .hw = &gpll9_out_main.clkr.hw },
633 	{ .hw = &gpll3.clkr.hw },
634 };
635 
636 static const struct parent_map gcc_parent_map_10[] = {
637 	{ P_BI_TCXO, 0 },
638 	{ P_GPLL0_OUT_EARLY, 1 },
639 	{ P_GPLL8_OUT_EARLY, 2 },
640 	{ P_GPLL10_OUT_MAIN, 3 },
641 	{ P_GPLL6_OUT_EARLY, 4 },
642 	{ P_GPLL9_OUT_MAIN, 5 },
643 };
644 
645 static const struct clk_parent_data gcc_parents_10[] = {
646 	{ .fw_name = "bi_tcxo" },
647 	{ .hw = &gpll0.clkr.hw },
648 	{ .hw = &gpll8.clkr.hw },
649 	{ .hw = &gpll10_out_main.clkr.hw },
650 	{ .hw = &gpll6.clkr.hw },
651 	{ .hw = &gpll9_out_main.clkr.hw },
652 };
653 
654 static const struct parent_map gcc_parent_map_11[] = {
655 	{ P_BI_TCXO, 0 },
656 	{ P_GPLL0_OUT_EARLY, 1 },
657 	{ P_GPLL0_OUT_AUX2, 2 },
658 	{ P_GPLL7_OUT_MAIN, 3 },
659 	{ P_GPLL4_OUT_MAIN, 5 },
660 };
661 
662 static const struct clk_parent_data gcc_parents_11[] = {
663 	{ .fw_name = "bi_tcxo" },
664 	{ .hw = &gpll0.clkr.hw },
665 	{ .hw = &gpll0_out_aux2.clkr.hw },
666 	{ .hw = &gpll7_out_main.clkr.hw },
667 	{ .hw = &gpll4_out_main.clkr.hw },
668 };
669 
670 static const struct parent_map gcc_parent_map_12[] = {
671 	{ P_BI_TCXO, 0 },
672 	{ P_SLEEP_CLK, 5 },
673 };
674 
675 static const struct clk_parent_data gcc_parents_12[] = {
676 	{ .fw_name = "bi_tcxo" },
677 	{ .fw_name = "sleep_clk" },
678 };
679 
680 static const struct parent_map gcc_parent_map_13[] = {
681 	{ P_BI_TCXO, 0 },
682 	{ P_GPLL11_OUT_MAIN, 1 },
683 };
684 
685 static const struct clk_parent_data gcc_parents_13[] = {
686 	{ .fw_name = "bi_tcxo" },
687 	{ .hw = &gpll11_out_main.clkr.hw },
688 };
689 
690 static const struct freq_tbl ftbl_gcc_camss_axi_clk_src[] = {
691 	F(19200000, P_BI_TCXO, 1, 0, 0),
692 	F(150000000, P_GPLL0_OUT_AUX2, 2, 0, 0),
693 	F(200000000, P_GPLL0_OUT_AUX2, 1.5, 0, 0),
694 	F(300000000, P_GPLL0_OUT_AUX2, 1, 0, 0),
695 	{ }
696 };
697 
698 static struct clk_rcg2 gcc_camss_axi_clk_src = {
699 	.cmd_rcgr = 0x5802c,
700 	.mnd_width = 0,
701 	.hid_width = 5,
702 	.parent_map = gcc_parent_map_7,
703 	.freq_tbl = ftbl_gcc_camss_axi_clk_src,
704 	.clkr.hw.init = &(struct clk_init_data){
705 		.name = "gcc_camss_axi_clk_src",
706 		.parent_data = gcc_parents_7,
707 		.num_parents = ARRAY_SIZE(gcc_parents_7),
708 		.flags = CLK_SET_RATE_PARENT,
709 		.ops = &clk_rcg2_ops,
710 	},
711 };
712 
713 static const struct freq_tbl ftbl_gcc_camss_cci_clk_src[] = {
714 	F(19200000, P_BI_TCXO, 1, 0, 0),
715 	F(37500000, P_GPLL0_OUT_AUX2, 8, 0, 0),
716 	{ }
717 };
718 
719 static struct clk_rcg2 gcc_camss_cci_clk_src = {
720 	.cmd_rcgr = 0x56000,
721 	.mnd_width = 0,
722 	.hid_width = 5,
723 	.parent_map = gcc_parent_map_9,
724 	.freq_tbl = ftbl_gcc_camss_cci_clk_src,
725 	.clkr.hw.init = &(struct clk_init_data){
726 		.name = "gcc_camss_cci_clk_src",
727 		.parent_data = gcc_parents_9,
728 		.num_parents = ARRAY_SIZE(gcc_parents_9),
729 		.flags = CLK_SET_RATE_PARENT | CLK_OPS_PARENT_ENABLE,
730 		.ops = &clk_rcg2_ops,
731 	},
732 };
733 
734 static const struct freq_tbl ftbl_gcc_camss_csi0phytimer_clk_src[] = {
735 	F(19200000, P_BI_TCXO, 1, 0, 0),
736 	F(100000000, P_GPLL0_OUT_AUX2, 3, 0, 0),
737 	F(200000000, P_GPLL0_OUT_AUX2, 1.5, 0, 0),
738 	F(268800000, P_GPLL4_OUT_MAIN, 3, 0, 0),
739 	{ }
740 };
741 
742 static struct clk_rcg2 gcc_camss_csi0phytimer_clk_src = {
743 	.cmd_rcgr = 0x59000,
744 	.mnd_width = 0,
745 	.hid_width = 5,
746 	.parent_map = gcc_parent_map_4,
747 	.freq_tbl = ftbl_gcc_camss_csi0phytimer_clk_src,
748 	.clkr.hw.init = &(struct clk_init_data){
749 		.name = "gcc_camss_csi0phytimer_clk_src",
750 		.parent_data = gcc_parents_4,
751 		.num_parents = ARRAY_SIZE(gcc_parents_4),
752 		.flags = CLK_SET_RATE_PARENT | CLK_OPS_PARENT_ENABLE,
753 		.ops = &clk_rcg2_ops,
754 	},
755 };
756 
757 static struct clk_rcg2 gcc_camss_csi1phytimer_clk_src = {
758 	.cmd_rcgr = 0x5901c,
759 	.mnd_width = 0,
760 	.hid_width = 5,
761 	.parent_map = gcc_parent_map_4,
762 	.freq_tbl = ftbl_gcc_camss_csi0phytimer_clk_src,
763 	.clkr.hw.init = &(struct clk_init_data){
764 		.name = "gcc_camss_csi1phytimer_clk_src",
765 		.parent_data = gcc_parents_4,
766 		.num_parents = ARRAY_SIZE(gcc_parents_4),
767 		.flags = CLK_SET_RATE_PARENT | CLK_OPS_PARENT_ENABLE,
768 		.ops = &clk_rcg2_ops,
769 	},
770 };
771 
772 static struct clk_rcg2 gcc_camss_csi2phytimer_clk_src = {
773 	.cmd_rcgr = 0x59038,
774 	.mnd_width = 0,
775 	.hid_width = 5,
776 	.parent_map = gcc_parent_map_4,
777 	.freq_tbl = ftbl_gcc_camss_csi0phytimer_clk_src,
778 	.clkr.hw.init = &(struct clk_init_data){
779 		.name = "gcc_camss_csi2phytimer_clk_src",
780 		.parent_data = gcc_parents_4,
781 		.num_parents = ARRAY_SIZE(gcc_parents_4),
782 		.flags = CLK_SET_RATE_PARENT | CLK_OPS_PARENT_ENABLE,
783 		.ops = &clk_rcg2_ops,
784 	},
785 };
786 
787 static const struct freq_tbl ftbl_gcc_camss_mclk0_clk_src[] = {
788 	F(19200000, P_BI_TCXO, 1, 0, 0),
789 	F(24000000, P_GPLL9_OUT_MAIN, 1, 1, 24),
790 	F(64000000, P_GPLL9_OUT_MAIN, 1, 1, 9),
791 	{ }
792 };
793 
794 static struct clk_rcg2 gcc_camss_mclk0_clk_src = {
795 	.cmd_rcgr = 0x51000,
796 	.mnd_width = 8,
797 	.hid_width = 5,
798 	.parent_map = gcc_parent_map_3,
799 	.freq_tbl = ftbl_gcc_camss_mclk0_clk_src,
800 	.clkr.hw.init = &(struct clk_init_data){
801 		.name = "gcc_camss_mclk0_clk_src",
802 		.parent_data = gcc_parents_3,
803 		.num_parents = ARRAY_SIZE(gcc_parents_3),
804 		.flags = CLK_SET_RATE_PARENT | CLK_OPS_PARENT_ENABLE,
805 		.ops = &clk_rcg2_ops,
806 	},
807 };
808 
809 static struct clk_rcg2 gcc_camss_mclk1_clk_src = {
810 	.cmd_rcgr = 0x5101c,
811 	.mnd_width = 8,
812 	.hid_width = 5,
813 	.parent_map = gcc_parent_map_3,
814 	.freq_tbl = ftbl_gcc_camss_mclk0_clk_src,
815 	.clkr.hw.init = &(struct clk_init_data){
816 		.name = "gcc_camss_mclk1_clk_src",
817 		.parent_data = gcc_parents_3,
818 		.num_parents = ARRAY_SIZE(gcc_parents_3),
819 		.flags = CLK_SET_RATE_PARENT | CLK_OPS_PARENT_ENABLE,
820 		.ops = &clk_rcg2_ops,
821 	},
822 };
823 
824 static struct clk_rcg2 gcc_camss_mclk2_clk_src = {
825 	.cmd_rcgr = 0x51038,
826 	.mnd_width = 8,
827 	.hid_width = 5,
828 	.parent_map = gcc_parent_map_3,
829 	.freq_tbl = ftbl_gcc_camss_mclk0_clk_src,
830 	.clkr.hw.init = &(struct clk_init_data){
831 		.name = "gcc_camss_mclk2_clk_src",
832 		.parent_data = gcc_parents_3,
833 		.num_parents = ARRAY_SIZE(gcc_parents_3),
834 		.flags = CLK_SET_RATE_PARENT | CLK_OPS_PARENT_ENABLE,
835 		.ops = &clk_rcg2_ops,
836 	},
837 };
838 
839 static struct clk_rcg2 gcc_camss_mclk3_clk_src = {
840 	.cmd_rcgr = 0x51054,
841 	.mnd_width = 8,
842 	.hid_width = 5,
843 	.parent_map = gcc_parent_map_3,
844 	.freq_tbl = ftbl_gcc_camss_mclk0_clk_src,
845 	.clkr.hw.init = &(struct clk_init_data){
846 		.name = "gcc_camss_mclk3_clk_src",
847 		.parent_data = gcc_parents_3,
848 		.num_parents = ARRAY_SIZE(gcc_parents_3),
849 		.flags = CLK_SET_RATE_PARENT | CLK_OPS_PARENT_ENABLE,
850 		.ops = &clk_rcg2_ops,
851 	},
852 };
853 
854 static const struct freq_tbl ftbl_gcc_camss_ope_ahb_clk_src[] = {
855 	F(19200000, P_BI_TCXO, 1, 0, 0),
856 	F(171428571, P_GPLL0_OUT_EARLY, 3.5, 0, 0),
857 	F(240000000, P_GPLL0_OUT_EARLY, 2.5, 0, 0),
858 	{ }
859 };
860 
861 static struct clk_rcg2 gcc_camss_ope_ahb_clk_src = {
862 	.cmd_rcgr = 0x55024,
863 	.mnd_width = 0,
864 	.hid_width = 5,
865 	.parent_map = gcc_parent_map_8,
866 	.freq_tbl = ftbl_gcc_camss_ope_ahb_clk_src,
867 	.clkr.hw.init = &(struct clk_init_data){
868 		.name = "gcc_camss_ope_ahb_clk_src",
869 		.parent_data = gcc_parents_8,
870 		.num_parents = ARRAY_SIZE(gcc_parents_8),
871 		.flags = CLK_SET_RATE_PARENT,
872 		.ops = &clk_rcg2_ops,
873 	},
874 };
875 
876 static const struct freq_tbl ftbl_gcc_camss_ope_clk_src[] = {
877 	F(19200000, P_BI_TCXO, 1, 0, 0),
878 	F(200000000, P_GPLL8_OUT_MAIN, 2, 0, 0),
879 	F(266600000, P_GPLL8_OUT_MAIN, 1, 0, 0),
880 	F(465000000, P_GPLL8_OUT_MAIN, 1, 0, 0),
881 	F(576000000, P_GPLL9_OUT_MAIN, 1, 0, 0),
882 	{ }
883 };
884 
885 static struct clk_rcg2 gcc_camss_ope_clk_src = {
886 	.cmd_rcgr = 0x55004,
887 	.mnd_width = 0,
888 	.hid_width = 5,
889 	.parent_map = gcc_parent_map_8,
890 	.freq_tbl = ftbl_gcc_camss_ope_clk_src,
891 	.clkr.hw.init = &(struct clk_init_data){
892 		.name = "gcc_camss_ope_clk_src",
893 		.parent_data = gcc_parents_8,
894 		.num_parents = ARRAY_SIZE(gcc_parents_8),
895 		.flags = CLK_SET_RATE_PARENT,
896 		.ops = &clk_rcg2_ops,
897 	},
898 };
899 
900 static const struct freq_tbl ftbl_gcc_camss_tfe_0_clk_src[] = {
901 	F(19200000, P_BI_TCXO, 1, 0, 0),
902 	F(128000000, P_GPLL10_OUT_MAIN, 9, 0, 0),
903 	F(135529412, P_GPLL10_OUT_MAIN, 8.5, 0, 0),
904 	F(144000000, P_GPLL10_OUT_MAIN, 8, 0, 0),
905 	F(153600000, P_GPLL10_OUT_MAIN, 7.5, 0, 0),
906 	F(164571429, P_GPLL10_OUT_MAIN, 7, 0, 0),
907 	F(177230769, P_GPLL10_OUT_MAIN, 6.5, 0, 0),
908 	F(192000000, P_GPLL10_OUT_MAIN, 6, 0, 0),
909 	F(209454545, P_GPLL10_OUT_MAIN, 5.5, 0, 0),
910 	F(230400000, P_GPLL10_OUT_MAIN, 5, 0, 0),
911 	F(256000000, P_GPLL10_OUT_MAIN, 4.5, 0, 0),
912 	F(288000000, P_GPLL10_OUT_MAIN, 4, 0, 0),
913 	F(329142857, P_GPLL10_OUT_MAIN, 3.5, 0, 0),
914 	F(384000000, P_GPLL10_OUT_MAIN, 3, 0, 0),
915 	F(460800000, P_GPLL10_OUT_MAIN, 2.5, 0, 0),
916 	F(576000000, P_GPLL10_OUT_MAIN, 2, 0, 0),
917 	{ }
918 };
919 
920 static struct clk_rcg2 gcc_camss_tfe_0_clk_src = {
921 	.cmd_rcgr = 0x52004,
922 	.mnd_width = 8,
923 	.hid_width = 5,
924 	.parent_map = gcc_parent_map_5,
925 	.freq_tbl = ftbl_gcc_camss_tfe_0_clk_src,
926 	.clkr.hw.init = &(struct clk_init_data){
927 		.name = "gcc_camss_tfe_0_clk_src",
928 		.parent_data = gcc_parents_5,
929 		.num_parents = ARRAY_SIZE(gcc_parents_5),
930 		.flags = CLK_SET_RATE_PARENT,
931 		.ops = &clk_rcg2_ops,
932 	},
933 };
934 
935 static const struct freq_tbl ftbl_gcc_camss_tfe_0_csid_clk_src[] = {
936 	F(19200000, P_BI_TCXO, 1, 0, 0),
937 	F(120000000, P_GPLL0_OUT_EARLY, 5, 0, 0),
938 	F(192000000, P_GPLL6_OUT_MAIN, 2, 0, 0),
939 	F(240000000, P_GPLL0_OUT_EARLY, 2.5, 0, 0),
940 	F(384000000, P_GPLL6_OUT_MAIN, 1, 0, 0),
941 	F(426400000, P_GPLL3_OUT_EARLY, 2.5, 0, 0),
942 	{ }
943 };
944 
945 static struct clk_rcg2 gcc_camss_tfe_0_csid_clk_src = {
946 	.cmd_rcgr = 0x52094,
947 	.mnd_width = 0,
948 	.hid_width = 5,
949 	.parent_map = gcc_parent_map_6,
950 	.freq_tbl = ftbl_gcc_camss_tfe_0_csid_clk_src,
951 	.clkr.hw.init = &(struct clk_init_data){
952 		.name = "gcc_camss_tfe_0_csid_clk_src",
953 		.parent_data = gcc_parents_6,
954 		.num_parents = ARRAY_SIZE(gcc_parents_6),
955 		.flags = CLK_SET_RATE_PARENT,
956 		.ops = &clk_rcg2_ops,
957 	},
958 };
959 
960 static struct clk_rcg2 gcc_camss_tfe_1_clk_src = {
961 	.cmd_rcgr = 0x52024,
962 	.mnd_width = 8,
963 	.hid_width = 5,
964 	.parent_map = gcc_parent_map_5,
965 	.freq_tbl = ftbl_gcc_camss_tfe_0_clk_src,
966 	.clkr.hw.init = &(struct clk_init_data){
967 		.name = "gcc_camss_tfe_1_clk_src",
968 		.parent_data = gcc_parents_5,
969 		.num_parents = ARRAY_SIZE(gcc_parents_5),
970 		.flags = CLK_SET_RATE_PARENT,
971 		.ops = &clk_rcg2_ops,
972 	},
973 };
974 
975 static struct clk_rcg2 gcc_camss_tfe_1_csid_clk_src = {
976 	.cmd_rcgr = 0x520b4,
977 	.mnd_width = 0,
978 	.hid_width = 5,
979 	.parent_map = gcc_parent_map_6,
980 	.freq_tbl = ftbl_gcc_camss_tfe_0_csid_clk_src,
981 	.clkr.hw.init = &(struct clk_init_data){
982 		.name = "gcc_camss_tfe_1_csid_clk_src",
983 		.parent_data = gcc_parents_6,
984 		.num_parents = ARRAY_SIZE(gcc_parents_6),
985 		.flags = CLK_SET_RATE_PARENT,
986 		.ops = &clk_rcg2_ops,
987 	},
988 };
989 
990 static struct clk_rcg2 gcc_camss_tfe_2_clk_src = {
991 	.cmd_rcgr = 0x52044,
992 	.mnd_width = 8,
993 	.hid_width = 5,
994 	.parent_map = gcc_parent_map_5,
995 	.freq_tbl = ftbl_gcc_camss_tfe_0_clk_src,
996 	.clkr.hw.init = &(struct clk_init_data){
997 		.name = "gcc_camss_tfe_2_clk_src",
998 		.parent_data = gcc_parents_5,
999 		.num_parents = ARRAY_SIZE(gcc_parents_5),
1000 		.flags = CLK_SET_RATE_PARENT,
1001 		.ops = &clk_rcg2_ops,
1002 	},
1003 };
1004 
1005 static struct clk_rcg2 gcc_camss_tfe_2_csid_clk_src = {
1006 	.cmd_rcgr = 0x520d4,
1007 	.mnd_width = 0,
1008 	.hid_width = 5,
1009 	.parent_map = gcc_parent_map_6,
1010 	.freq_tbl = ftbl_gcc_camss_tfe_0_csid_clk_src,
1011 	.clkr.hw.init = &(struct clk_init_data){
1012 		.name = "gcc_camss_tfe_2_csid_clk_src",
1013 		.parent_data = gcc_parents_6,
1014 		.num_parents = ARRAY_SIZE(gcc_parents_6),
1015 		.flags = CLK_SET_RATE_PARENT,
1016 		.ops = &clk_rcg2_ops,
1017 	},
1018 };
1019 
1020 static const struct freq_tbl ftbl_gcc_camss_tfe_cphy_rx_clk_src[] = {
1021 	F(19200000, P_BI_TCXO, 1, 0, 0),
1022 	F(240000000, P_GPLL0_OUT_EARLY, 2.5, 0, 0),
1023 	F(341333333, P_GPLL6_OUT_EARLY, 1, 4, 9),
1024 	F(384000000, P_GPLL6_OUT_EARLY, 2, 0, 0),
1025 	{ }
1026 };
1027 
1028 static struct clk_rcg2 gcc_camss_tfe_cphy_rx_clk_src = {
1029 	.cmd_rcgr = 0x52064,
1030 	.mnd_width = 16,
1031 	.hid_width = 5,
1032 	.parent_map = gcc_parent_map_10,
1033 	.freq_tbl = ftbl_gcc_camss_tfe_cphy_rx_clk_src,
1034 	.clkr.hw.init = &(struct clk_init_data){
1035 		.name = "gcc_camss_tfe_cphy_rx_clk_src",
1036 		.parent_data = gcc_parents_10,
1037 		.num_parents = ARRAY_SIZE(gcc_parents_10),
1038 		.flags = CLK_SET_RATE_PARENT | CLK_OPS_PARENT_ENABLE,
1039 		.ops = &clk_rcg2_ops,
1040 	},
1041 };
1042 
1043 static const struct freq_tbl ftbl_gcc_camss_top_ahb_clk_src[] = {
1044 	F(19200000, P_BI_TCXO, 1, 0, 0),
1045 	F(40000000, P_GPLL0_OUT_AUX2, 7.5, 0, 0),
1046 	F(80000000, P_GPLL0_OUT_EARLY, 7.5, 0, 0),
1047 	{ }
1048 };
1049 
1050 static struct clk_rcg2 gcc_camss_top_ahb_clk_src = {
1051 	.cmd_rcgr = 0x58010,
1052 	.mnd_width = 0,
1053 	.hid_width = 5,
1054 	.parent_map = gcc_parent_map_7,
1055 	.freq_tbl = ftbl_gcc_camss_top_ahb_clk_src,
1056 	.clkr.hw.init = &(struct clk_init_data){
1057 		.name = "gcc_camss_top_ahb_clk_src",
1058 		.parent_data = gcc_parents_7,
1059 		.num_parents = ARRAY_SIZE(gcc_parents_7),
1060 		.flags = CLK_SET_RATE_PARENT | CLK_OPS_PARENT_ENABLE,
1061 		.ops = &clk_rcg2_ops,
1062 	},
1063 };
1064 
1065 static const struct freq_tbl ftbl_gcc_gp1_clk_src[] = {
1066 	F(25000000, P_GPLL0_OUT_AUX2, 12, 0, 0),
1067 	F(50000000, P_GPLL0_OUT_AUX2, 6, 0, 0),
1068 	F(100000000, P_GPLL0_OUT_AUX2, 3, 0, 0),
1069 	F(200000000, P_GPLL0_OUT_AUX2, 1.5, 0, 0),
1070 	{ }
1071 };
1072 
1073 static struct clk_rcg2 gcc_gp1_clk_src = {
1074 	.cmd_rcgr = 0x4d004,
1075 	.mnd_width = 8,
1076 	.hid_width = 5,
1077 	.parent_map = gcc_parent_map_2,
1078 	.freq_tbl = ftbl_gcc_gp1_clk_src,
1079 	.clkr.hw.init = &(struct clk_init_data){
1080 		.name = "gcc_gp1_clk_src",
1081 		.parent_data = gcc_parents_2,
1082 		.num_parents = ARRAY_SIZE(gcc_parents_2),
1083 		.ops = &clk_rcg2_ops,
1084 	},
1085 };
1086 
1087 static struct clk_rcg2 gcc_gp2_clk_src = {
1088 	.cmd_rcgr = 0x4e004,
1089 	.mnd_width = 8,
1090 	.hid_width = 5,
1091 	.parent_map = gcc_parent_map_2,
1092 	.freq_tbl = ftbl_gcc_gp1_clk_src,
1093 	.clkr.hw.init = &(struct clk_init_data){
1094 		.name = "gcc_gp2_clk_src",
1095 		.parent_data = gcc_parents_2,
1096 		.num_parents = ARRAY_SIZE(gcc_parents_2),
1097 		.ops = &clk_rcg2_ops,
1098 	},
1099 };
1100 
1101 static struct clk_rcg2 gcc_gp3_clk_src = {
1102 	.cmd_rcgr = 0x4f004,
1103 	.mnd_width = 8,
1104 	.hid_width = 5,
1105 	.parent_map = gcc_parent_map_2,
1106 	.freq_tbl = ftbl_gcc_gp1_clk_src,
1107 	.clkr.hw.init = &(struct clk_init_data){
1108 		.name = "gcc_gp3_clk_src",
1109 		.parent_data = gcc_parents_2,
1110 		.num_parents = ARRAY_SIZE(gcc_parents_2),
1111 		.ops = &clk_rcg2_ops,
1112 	},
1113 };
1114 
1115 static const struct freq_tbl ftbl_gcc_pdm2_clk_src[] = {
1116 	F(19200000, P_BI_TCXO, 1, 0, 0),
1117 	F(60000000, P_GPLL0_OUT_AUX2, 5, 0, 0),
1118 	{ }
1119 };
1120 
1121 static struct clk_rcg2 gcc_pdm2_clk_src = {
1122 	.cmd_rcgr = 0x20010,
1123 	.mnd_width = 0,
1124 	.hid_width = 5,
1125 	.parent_map = gcc_parent_map_0,
1126 	.freq_tbl = ftbl_gcc_pdm2_clk_src,
1127 	.clkr.hw.init = &(struct clk_init_data){
1128 		.name = "gcc_pdm2_clk_src",
1129 		.parent_data = gcc_parents_0,
1130 		.num_parents = ARRAY_SIZE(gcc_parents_0),
1131 		.ops = &clk_rcg2_ops,
1132 	},
1133 };
1134 
1135 static const struct freq_tbl ftbl_gcc_qupv3_wrap0_s0_clk_src[] = {
1136 	F(7372800, P_GPLL0_OUT_AUX2, 1, 384, 15625),
1137 	F(14745600, P_GPLL0_OUT_AUX2, 1, 768, 15625),
1138 	F(19200000, P_BI_TCXO, 1, 0, 0),
1139 	F(29491200, P_GPLL0_OUT_AUX2, 1, 1536, 15625),
1140 	F(32000000, P_GPLL0_OUT_AUX2, 1, 8, 75),
1141 	F(48000000, P_GPLL0_OUT_AUX2, 1, 4, 25),
1142 	F(64000000, P_GPLL0_OUT_AUX2, 1, 16, 75),
1143 	F(75000000, P_GPLL0_OUT_AUX2, 4, 0, 0),
1144 	F(80000000, P_GPLL0_OUT_AUX2, 1, 4, 15),
1145 	F(96000000, P_GPLL0_OUT_AUX2, 1, 8, 25),
1146 	F(100000000, P_GPLL0_OUT_AUX2, 3, 0, 0),
1147 	F(102400000, P_GPLL0_OUT_AUX2, 1, 128, 375),
1148 	F(112000000, P_GPLL0_OUT_AUX2, 1, 28, 75),
1149 	F(117964800, P_GPLL0_OUT_AUX2, 1, 6144, 15625),
1150 	F(120000000, P_GPLL0_OUT_AUX2, 2.5, 0, 0),
1151 	F(128000000, P_GPLL6_OUT_MAIN, 3, 0, 0),
1152 	{ }
1153 };
1154 
1155 static struct clk_init_data gcc_qupv3_wrap0_s0_clk_src_init = {
1156 	.name = "gcc_qupv3_wrap0_s0_clk_src",
1157 	.parent_data = gcc_parents_1,
1158 	.num_parents = ARRAY_SIZE(gcc_parents_1),
1159 	.ops = &clk_rcg2_ops,
1160 };
1161 
1162 static struct clk_rcg2 gcc_qupv3_wrap0_s0_clk_src = {
1163 	.cmd_rcgr = 0x1f148,
1164 	.mnd_width = 16,
1165 	.hid_width = 5,
1166 	.parent_map = gcc_parent_map_1,
1167 	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
1168 	.clkr.hw.init = &gcc_qupv3_wrap0_s0_clk_src_init,
1169 };
1170 
1171 static struct clk_init_data gcc_qupv3_wrap0_s1_clk_src_init = {
1172 	.name = "gcc_qupv3_wrap0_s1_clk_src",
1173 	.parent_data = gcc_parents_1,
1174 	.num_parents = ARRAY_SIZE(gcc_parents_1),
1175 	.ops = &clk_rcg2_ops,
1176 };
1177 
1178 static struct clk_rcg2 gcc_qupv3_wrap0_s1_clk_src = {
1179 	.cmd_rcgr = 0x1f278,
1180 	.mnd_width = 16,
1181 	.hid_width = 5,
1182 	.parent_map = gcc_parent_map_1,
1183 	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
1184 	.clkr.hw.init = &gcc_qupv3_wrap0_s1_clk_src_init,
1185 };
1186 
1187 static struct clk_init_data gcc_qupv3_wrap0_s2_clk_src_init = {
1188 	.name = "gcc_qupv3_wrap0_s2_clk_src",
1189 	.parent_data = gcc_parents_1,
1190 	.num_parents = ARRAY_SIZE(gcc_parents_1),
1191 	.ops = &clk_rcg2_ops,
1192 };
1193 
1194 static struct clk_rcg2 gcc_qupv3_wrap0_s2_clk_src = {
1195 	.cmd_rcgr = 0x1f3a8,
1196 	.mnd_width = 16,
1197 	.hid_width = 5,
1198 	.parent_map = gcc_parent_map_1,
1199 	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
1200 	.clkr.hw.init = &gcc_qupv3_wrap0_s2_clk_src_init,
1201 };
1202 
1203 static struct clk_init_data gcc_qupv3_wrap0_s3_clk_src_init = {
1204 	.name = "gcc_qupv3_wrap0_s3_clk_src",
1205 	.parent_data = gcc_parents_1,
1206 	.num_parents = ARRAY_SIZE(gcc_parents_1),
1207 	.ops = &clk_rcg2_ops,
1208 };
1209 
1210 static struct clk_rcg2 gcc_qupv3_wrap0_s3_clk_src = {
1211 	.cmd_rcgr = 0x1f4d8,
1212 	.mnd_width = 16,
1213 	.hid_width = 5,
1214 	.parent_map = gcc_parent_map_1,
1215 	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
1216 	.clkr.hw.init = &gcc_qupv3_wrap0_s3_clk_src_init,
1217 };
1218 
1219 static struct clk_init_data gcc_qupv3_wrap0_s4_clk_src_init = {
1220 	.name = "gcc_qupv3_wrap0_s4_clk_src",
1221 	.parent_data = gcc_parents_1,
1222 	.num_parents = ARRAY_SIZE(gcc_parents_1),
1223 	.ops = &clk_rcg2_ops,
1224 };
1225 
1226 static struct clk_rcg2 gcc_qupv3_wrap0_s4_clk_src = {
1227 	.cmd_rcgr = 0x1f608,
1228 	.mnd_width = 16,
1229 	.hid_width = 5,
1230 	.parent_map = gcc_parent_map_1,
1231 	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
1232 	.clkr.hw.init = &gcc_qupv3_wrap0_s4_clk_src_init,
1233 };
1234 
1235 static struct clk_init_data gcc_qupv3_wrap0_s5_clk_src_init = {
1236 	.name = "gcc_qupv3_wrap0_s5_clk_src",
1237 	.parent_data = gcc_parents_1,
1238 	.num_parents = ARRAY_SIZE(gcc_parents_1),
1239 	.ops = &clk_rcg2_ops,
1240 };
1241 
1242 static struct clk_rcg2 gcc_qupv3_wrap0_s5_clk_src = {
1243 	.cmd_rcgr = 0x1f738,
1244 	.mnd_width = 16,
1245 	.hid_width = 5,
1246 	.parent_map = gcc_parent_map_1,
1247 	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
1248 	.clkr.hw.init = &gcc_qupv3_wrap0_s5_clk_src_init,
1249 };
1250 
1251 static const struct freq_tbl ftbl_gcc_sdcc1_apps_clk_src[] = {
1252 	F(144000, P_BI_TCXO, 16, 3, 25),
1253 	F(400000, P_BI_TCXO, 12, 1, 4),
1254 	F(20000000, P_GPLL0_OUT_AUX2, 5, 1, 3),
1255 	F(25000000, P_GPLL0_OUT_AUX2, 6, 1, 2),
1256 	F(50000000, P_GPLL0_OUT_AUX2, 6, 0, 0),
1257 	F(100000000, P_GPLL0_OUT_AUX2, 3, 0, 0),
1258 	F(192000000, P_GPLL6_OUT_MAIN, 2, 0, 0),
1259 	F(384000000, P_GPLL6_OUT_MAIN, 1, 0, 0),
1260 	{ }
1261 };
1262 
1263 static struct clk_rcg2 gcc_sdcc1_apps_clk_src = {
1264 	.cmd_rcgr = 0x38028,
1265 	.mnd_width = 8,
1266 	.hid_width = 5,
1267 	.parent_map = gcc_parent_map_1,
1268 	.freq_tbl = ftbl_gcc_sdcc1_apps_clk_src,
1269 	.clkr.hw.init = &(struct clk_init_data){
1270 		.name = "gcc_sdcc1_apps_clk_src",
1271 		.parent_data = gcc_parents_1,
1272 		.num_parents = ARRAY_SIZE(gcc_parents_1),
1273 		.ops = &clk_rcg2_ops,
1274 	},
1275 };
1276 
1277 static const struct freq_tbl ftbl_gcc_sdcc1_ice_core_clk_src[] = {
1278 	F(75000000, P_GPLL0_OUT_AUX2, 4, 0, 0),
1279 	F(100000000, P_GPLL0_OUT_AUX2, 3, 0, 0),
1280 	F(150000000, P_GPLL0_OUT_AUX2, 2, 0, 0),
1281 	F(200000000, P_GPLL0_OUT_EARLY, 3, 0, 0),
1282 	F(300000000, P_GPLL0_OUT_AUX2, 1, 0, 0),
1283 	{ }
1284 };
1285 
1286 static struct clk_rcg2 gcc_sdcc1_ice_core_clk_src = {
1287 	.cmd_rcgr = 0x38010,
1288 	.mnd_width = 0,
1289 	.hid_width = 5,
1290 	.parent_map = gcc_parent_map_0,
1291 	.freq_tbl = ftbl_gcc_sdcc1_ice_core_clk_src,
1292 	.clkr.hw.init = &(struct clk_init_data){
1293 		.name = "gcc_sdcc1_ice_core_clk_src",
1294 		.parent_data = gcc_parents_0,
1295 		.num_parents = ARRAY_SIZE(gcc_parents_0),
1296 		.ops = &clk_rcg2_ops,
1297 	},
1298 };
1299 
1300 static const struct freq_tbl ftbl_gcc_sdcc2_apps_clk_src[] = {
1301 	F(400000, P_BI_TCXO, 12, 1, 4),
1302 	F(19200000, P_BI_TCXO, 1, 0, 0),
1303 	F(25000000, P_GPLL0_OUT_AUX2, 12, 0, 0),
1304 	F(50000000, P_GPLL0_OUT_AUX2, 6, 0, 0),
1305 	F(100000000, P_GPLL0_OUT_AUX2, 3, 0, 0),
1306 	F(200000000, P_GPLL0_OUT_EARLY, 3, 0, 0),
1307 	{ }
1308 };
1309 
1310 static struct clk_rcg2 gcc_sdcc2_apps_clk_src = {
1311 	.cmd_rcgr = 0x1e00c,
1312 	.mnd_width = 8,
1313 	.hid_width = 5,
1314 	.parent_map = gcc_parent_map_11,
1315 	.freq_tbl = ftbl_gcc_sdcc2_apps_clk_src,
1316 	.clkr.hw.init = &(struct clk_init_data){
1317 		.name = "gcc_sdcc2_apps_clk_src",
1318 		.parent_data = gcc_parents_11,
1319 		.num_parents = ARRAY_SIZE(gcc_parents_11),
1320 		.ops = &clk_rcg2_ops,
1321 		.flags = CLK_OPS_PARENT_ENABLE,
1322 	},
1323 };
1324 
1325 static const struct freq_tbl ftbl_gcc_ufs_phy_axi_clk_src[] = {
1326 	F(25000000, P_GPLL0_OUT_AUX2, 12, 0, 0),
1327 	F(50000000, P_GPLL0_OUT_AUX2, 6, 0, 0),
1328 	F(100000000, P_GPLL0_OUT_AUX2, 3, 0, 0),
1329 	F(200000000, P_GPLL0_OUT_EARLY, 3, 0, 0),
1330 	F(240000000, P_GPLL0_OUT_EARLY, 2.5, 0, 0),
1331 	{ }
1332 };
1333 
1334 static struct clk_rcg2 gcc_ufs_phy_axi_clk_src = {
1335 	.cmd_rcgr = 0x45020,
1336 	.mnd_width = 8,
1337 	.hid_width = 5,
1338 	.parent_map = gcc_parent_map_0,
1339 	.freq_tbl = ftbl_gcc_ufs_phy_axi_clk_src,
1340 	.clkr.hw.init = &(struct clk_init_data){
1341 		.name = "gcc_ufs_phy_axi_clk_src",
1342 		.parent_data = gcc_parents_0,
1343 		.num_parents = ARRAY_SIZE(gcc_parents_0),
1344 		.ops = &clk_rcg2_ops,
1345 	},
1346 };
1347 
1348 static const struct freq_tbl ftbl_gcc_ufs_phy_ice_core_clk_src[] = {
1349 	F(37500000, P_GPLL0_OUT_AUX2, 8, 0, 0),
1350 	F(75000000, P_GPLL0_OUT_AUX2, 4, 0, 0),
1351 	F(150000000, P_GPLL0_OUT_AUX2, 2, 0, 0),
1352 	F(300000000, P_GPLL0_OUT_AUX2, 1, 0, 0),
1353 	{ }
1354 };
1355 
1356 static struct clk_rcg2 gcc_ufs_phy_ice_core_clk_src = {
1357 	.cmd_rcgr = 0x45048,
1358 	.mnd_width = 0,
1359 	.hid_width = 5,
1360 	.parent_map = gcc_parent_map_0,
1361 	.freq_tbl = ftbl_gcc_ufs_phy_ice_core_clk_src,
1362 	.clkr.hw.init = &(struct clk_init_data){
1363 		.name = "gcc_ufs_phy_ice_core_clk_src",
1364 		.parent_data = gcc_parents_0,
1365 		.num_parents = ARRAY_SIZE(gcc_parents_0),
1366 		.ops = &clk_rcg2_ops,
1367 	},
1368 };
1369 
1370 static const struct freq_tbl ftbl_gcc_ufs_phy_phy_aux_clk_src[] = {
1371 	F(9600000, P_BI_TCXO, 2, 0, 0),
1372 	F(19200000, P_BI_TCXO, 1, 0, 0),
1373 	{ }
1374 };
1375 
1376 static struct clk_rcg2 gcc_ufs_phy_phy_aux_clk_src = {
1377 	.cmd_rcgr = 0x4507c,
1378 	.mnd_width = 0,
1379 	.hid_width = 5,
1380 	.parent_map = gcc_parent_map_0,
1381 	.freq_tbl = ftbl_gcc_ufs_phy_phy_aux_clk_src,
1382 	.clkr.hw.init = &(struct clk_init_data){
1383 		.name = "gcc_ufs_phy_phy_aux_clk_src",
1384 		.parent_data = gcc_parents_0,
1385 		.num_parents = ARRAY_SIZE(gcc_parents_0),
1386 		.ops = &clk_rcg2_ops,
1387 	},
1388 };
1389 
1390 static const struct freq_tbl ftbl_gcc_ufs_phy_unipro_core_clk_src[] = {
1391 	F(37500000, P_GPLL0_OUT_AUX2, 8, 0, 0),
1392 	F(75000000, P_GPLL0_OUT_AUX2, 4, 0, 0),
1393 	F(150000000, P_GPLL0_OUT_AUX2, 2, 0, 0),
1394 	{ }
1395 };
1396 
1397 static struct clk_rcg2 gcc_ufs_phy_unipro_core_clk_src = {
1398 	.cmd_rcgr = 0x45060,
1399 	.mnd_width = 0,
1400 	.hid_width = 5,
1401 	.parent_map = gcc_parent_map_0,
1402 	.freq_tbl = ftbl_gcc_ufs_phy_unipro_core_clk_src,
1403 	.clkr.hw.init = &(struct clk_init_data){
1404 		.name = "gcc_ufs_phy_unipro_core_clk_src",
1405 		.parent_data = gcc_parents_0,
1406 		.num_parents = ARRAY_SIZE(gcc_parents_0),
1407 		.ops = &clk_rcg2_ops,
1408 	},
1409 };
1410 
1411 static const struct freq_tbl ftbl_gcc_usb30_prim_master_clk_src[] = {
1412 	F(66666667, P_GPLL0_OUT_AUX2, 4.5, 0, 0),
1413 	F(133333333, P_GPLL0_OUT_EARLY, 4.5, 0, 0),
1414 	F(200000000, P_GPLL0_OUT_EARLY, 3, 0, 0),
1415 	F(240000000, P_GPLL0_OUT_EARLY, 2.5, 0, 0),
1416 	{ }
1417 };
1418 
1419 static struct clk_rcg2 gcc_usb30_prim_master_clk_src = {
1420 	.cmd_rcgr = 0x1a01c,
1421 	.mnd_width = 8,
1422 	.hid_width = 5,
1423 	.parent_map = gcc_parent_map_0,
1424 	.freq_tbl = ftbl_gcc_usb30_prim_master_clk_src,
1425 	.clkr.hw.init = &(struct clk_init_data){
1426 		.name = "gcc_usb30_prim_master_clk_src",
1427 		.parent_data = gcc_parents_0,
1428 		.num_parents = ARRAY_SIZE(gcc_parents_0),
1429 		.ops = &clk_rcg2_ops,
1430 	},
1431 };
1432 
1433 static const struct freq_tbl ftbl_gcc_usb30_prim_mock_utmi_clk_src[] = {
1434 	F(19200000, P_BI_TCXO, 1, 0, 0),
1435 	{ }
1436 };
1437 
1438 static struct clk_rcg2 gcc_usb30_prim_mock_utmi_clk_src = {
1439 	.cmd_rcgr = 0x1a034,
1440 	.mnd_width = 0,
1441 	.hid_width = 5,
1442 	.parent_map = gcc_parent_map_0,
1443 	.freq_tbl = ftbl_gcc_usb30_prim_mock_utmi_clk_src,
1444 	.clkr.hw.init = &(struct clk_init_data){
1445 		.name = "gcc_usb30_prim_mock_utmi_clk_src",
1446 		.parent_data = gcc_parents_0,
1447 		.num_parents = ARRAY_SIZE(gcc_parents_0),
1448 		.ops = &clk_rcg2_ops,
1449 	},
1450 };
1451 
1452 static struct clk_regmap_div gcc_usb30_prim_mock_utmi_postdiv_clk_src = {
1453 	.reg = 0x1a04c,
1454 	.shift = 0,
1455 	.width = 2,
1456 	.clkr.hw.init = &(struct clk_init_data) {
1457 		.name = "gcc_usb30_prim_mock_utmi_postdiv_clk_src",
1458 		.parent_hws = (const struct clk_hw *[]) {
1459 			&gcc_usb30_prim_mock_utmi_clk_src.clkr.hw },
1460 		.num_parents = 1,
1461 		.ops = &clk_regmap_div_ro_ops,
1462 	},
1463 };
1464 
1465 static struct clk_rcg2 gcc_usb3_prim_phy_aux_clk_src = {
1466 	.cmd_rcgr = 0x1a060,
1467 	.mnd_width = 0,
1468 	.hid_width = 5,
1469 	.parent_map = gcc_parent_map_12,
1470 	.freq_tbl = ftbl_gcc_usb30_prim_mock_utmi_clk_src,
1471 	.clkr.hw.init = &(struct clk_init_data){
1472 		.name = "gcc_usb3_prim_phy_aux_clk_src",
1473 		.parent_data = gcc_parents_12,
1474 		.num_parents = ARRAY_SIZE(gcc_parents_12),
1475 		.ops = &clk_rcg2_ops,
1476 	},
1477 };
1478 
1479 static const struct freq_tbl ftbl_gcc_video_venus_clk_src[] = {
1480 	F(133333333, P_GPLL11_OUT_MAIN, 4.5, 0, 0),
1481 	F(240000000, P_GPLL11_OUT_MAIN, 2.5, 0, 0),
1482 	F(300000000, P_GPLL11_OUT_MAIN, 2, 0, 0),
1483 	F(384000000, P_GPLL11_OUT_MAIN, 2, 0, 0),
1484 	{ }
1485 };
1486 
1487 static struct clk_rcg2 gcc_video_venus_clk_src = {
1488 	.cmd_rcgr = 0x58060,
1489 	.mnd_width = 0,
1490 	.hid_width = 5,
1491 	.parent_map = gcc_parent_map_13,
1492 	.freq_tbl = ftbl_gcc_video_venus_clk_src,
1493 	.clkr.hw.init = &(struct clk_init_data){
1494 		.name = "gcc_video_venus_clk_src",
1495 		.parent_data = gcc_parents_13,
1496 		.num_parents = ARRAY_SIZE(gcc_parents_13),
1497 		.flags = CLK_SET_RATE_PARENT,
1498 		.ops = &clk_rcg2_ops,
1499 	},
1500 };
1501 
1502 static struct clk_branch gcc_ahb2phy_csi_clk = {
1503 	.halt_reg = 0x1d004,
1504 	.halt_check = BRANCH_HALT,
1505 	.hwcg_reg = 0x1d004,
1506 	.hwcg_bit = 1,
1507 	.clkr = {
1508 		.enable_reg = 0x1d004,
1509 		.enable_mask = BIT(0),
1510 		.hw.init = &(struct clk_init_data){
1511 			.name = "gcc_ahb2phy_csi_clk",
1512 			.ops = &clk_branch2_ops,
1513 		},
1514 	},
1515 };
1516 
1517 static struct clk_branch gcc_ahb2phy_usb_clk = {
1518 	.halt_reg = 0x1d008,
1519 	.halt_check = BRANCH_HALT,
1520 	.hwcg_reg = 0x1d008,
1521 	.hwcg_bit = 1,
1522 	.clkr = {
1523 		.enable_reg = 0x1d008,
1524 		.enable_mask = BIT(0),
1525 		.hw.init = &(struct clk_init_data){
1526 			.name = "gcc_ahb2phy_usb_clk",
1527 			.ops = &clk_branch2_ops,
1528 		},
1529 	},
1530 };
1531 
1532 static struct clk_branch gcc_bimc_gpu_axi_clk = {
1533 	.halt_reg = 0x71154,
1534 	.halt_check = BRANCH_HALT_DELAY,
1535 	.hwcg_reg = 0x71154,
1536 	.hwcg_bit = 1,
1537 	.clkr = {
1538 		.enable_reg = 0x71154,
1539 		.enable_mask = BIT(0),
1540 		.hw.init = &(struct clk_init_data){
1541 			.name = "gcc_bimc_gpu_axi_clk",
1542 			.ops = &clk_branch2_ops,
1543 		},
1544 	},
1545 };
1546 
1547 static struct clk_branch gcc_boot_rom_ahb_clk = {
1548 	.halt_reg = 0x23004,
1549 	.halt_check = BRANCH_HALT_VOTED,
1550 	.hwcg_reg = 0x23004,
1551 	.hwcg_bit = 1,
1552 	.clkr = {
1553 		.enable_reg = 0x79004,
1554 		.enable_mask = BIT(10),
1555 		.hw.init = &(struct clk_init_data){
1556 			.name = "gcc_boot_rom_ahb_clk",
1557 			.ops = &clk_branch2_ops,
1558 		},
1559 	},
1560 };
1561 
1562 static struct clk_branch gcc_cam_throttle_nrt_clk = {
1563 	.halt_reg = 0x17070,
1564 	.halt_check = BRANCH_HALT_VOTED,
1565 	.hwcg_reg = 0x17070,
1566 	.hwcg_bit = 1,
1567 	.clkr = {
1568 		.enable_reg = 0x79004,
1569 		.enable_mask = BIT(27),
1570 		.hw.init = &(struct clk_init_data){
1571 			.name = "gcc_cam_throttle_nrt_clk",
1572 			.ops = &clk_branch2_ops,
1573 		},
1574 	},
1575 };
1576 
1577 static struct clk_branch gcc_cam_throttle_rt_clk = {
1578 	.halt_reg = 0x1706c,
1579 	.halt_check = BRANCH_HALT_VOTED,
1580 	.hwcg_reg = 0x1706c,
1581 	.hwcg_bit = 1,
1582 	.clkr = {
1583 		.enable_reg = 0x79004,
1584 		.enable_mask = BIT(26),
1585 		.hw.init = &(struct clk_init_data){
1586 			.name = "gcc_cam_throttle_rt_clk",
1587 			.ops = &clk_branch2_ops,
1588 		},
1589 	},
1590 };
1591 
1592 static struct clk_branch gcc_camera_ahb_clk = {
1593 	.halt_reg = 0x17008,
1594 	.halt_check = BRANCH_HALT_DELAY,
1595 	.hwcg_reg = 0x17008,
1596 	.hwcg_bit = 1,
1597 	.clkr = {
1598 		.enable_reg = 0x17008,
1599 		.enable_mask = BIT(0),
1600 		.hw.init = &(struct clk_init_data){
1601 			.name = "gcc_camera_ahb_clk",
1602 			.flags = CLK_IS_CRITICAL,
1603 			.ops = &clk_branch2_ops,
1604 		},
1605 	},
1606 };
1607 
1608 static struct clk_branch gcc_camera_xo_clk = {
1609 	.halt_reg = 0x17028,
1610 	.halt_check = BRANCH_HALT,
1611 	.clkr = {
1612 		.enable_reg = 0x17028,
1613 		.enable_mask = BIT(0),
1614 		.hw.init = &(struct clk_init_data){
1615 			.name = "gcc_camera_xo_clk",
1616 			.flags = CLK_IS_CRITICAL,
1617 			.ops = &clk_branch2_ops,
1618 		},
1619 	},
1620 };
1621 
1622 static struct clk_branch gcc_camss_axi_clk = {
1623 	.halt_reg = 0x58044,
1624 	.halt_check = BRANCH_HALT,
1625 	.clkr = {
1626 		.enable_reg = 0x58044,
1627 		.enable_mask = BIT(0),
1628 		.hw.init = &(struct clk_init_data){
1629 			.name = "gcc_camss_axi_clk",
1630 			.parent_hws = (const struct clk_hw *[]){
1631 				&gcc_camss_axi_clk_src.clkr.hw,
1632 			},
1633 			.num_parents = 1,
1634 			.flags = CLK_SET_RATE_PARENT,
1635 			.ops = &clk_branch2_ops,
1636 		},
1637 	},
1638 };
1639 
1640 static struct clk_branch gcc_camss_camnoc_atb_clk = {
1641 	.halt_reg = 0x5804c,
1642 	.halt_check = BRANCH_HALT_DELAY,
1643 	.hwcg_reg = 0x5804c,
1644 	.hwcg_bit = 1,
1645 	.clkr = {
1646 		.enable_reg = 0x5804c,
1647 		.enable_mask = BIT(0),
1648 		.hw.init = &(struct clk_init_data){
1649 			.name = "gcc_camss_camnoc_atb_clk",
1650 			.ops = &clk_branch2_ops,
1651 		},
1652 	},
1653 };
1654 
1655 static struct clk_branch gcc_camss_camnoc_nts_xo_clk = {
1656 	.halt_reg = 0x58050,
1657 	.halt_check = BRANCH_HALT_DELAY,
1658 	.hwcg_reg = 0x58050,
1659 	.hwcg_bit = 1,
1660 	.clkr = {
1661 		.enable_reg = 0x58050,
1662 		.enable_mask = BIT(0),
1663 		.hw.init = &(struct clk_init_data){
1664 			.name = "gcc_camss_camnoc_nts_xo_clk",
1665 			.ops = &clk_branch2_ops,
1666 		},
1667 	},
1668 };
1669 
1670 static struct clk_branch gcc_camss_cci_0_clk = {
1671 	.halt_reg = 0x56018,
1672 	.halt_check = BRANCH_HALT,
1673 	.clkr = {
1674 		.enable_reg = 0x56018,
1675 		.enable_mask = BIT(0),
1676 		.hw.init = &(struct clk_init_data){
1677 			.name = "gcc_camss_cci_0_clk",
1678 			.parent_hws = (const struct clk_hw *[]){
1679 				&gcc_camss_cci_clk_src.clkr.hw,
1680 			},
1681 			.num_parents = 1,
1682 			.flags = CLK_SET_RATE_PARENT,
1683 			.ops = &clk_branch2_ops,
1684 		},
1685 	},
1686 };
1687 
1688 static struct clk_branch gcc_camss_cphy_0_clk = {
1689 	.halt_reg = 0x52088,
1690 	.halt_check = BRANCH_HALT,
1691 	.clkr = {
1692 		.enable_reg = 0x52088,
1693 		.enable_mask = BIT(0),
1694 		.hw.init = &(struct clk_init_data){
1695 			.name = "gcc_camss_cphy_0_clk",
1696 			.parent_hws = (const struct clk_hw *[]){
1697 				&gcc_camss_tfe_cphy_rx_clk_src.clkr.hw,
1698 			},
1699 			.num_parents = 1,
1700 			.flags = CLK_SET_RATE_PARENT,
1701 			.ops = &clk_branch2_ops,
1702 		},
1703 	},
1704 };
1705 
1706 static struct clk_branch gcc_camss_cphy_1_clk = {
1707 	.halt_reg = 0x5208c,
1708 	.halt_check = BRANCH_HALT,
1709 	.clkr = {
1710 		.enable_reg = 0x5208c,
1711 		.enable_mask = BIT(0),
1712 		.hw.init = &(struct clk_init_data){
1713 			.name = "gcc_camss_cphy_1_clk",
1714 			.parent_hws = (const struct clk_hw *[]){
1715 				&gcc_camss_tfe_cphy_rx_clk_src.clkr.hw,
1716 			},
1717 			.num_parents = 1,
1718 			.flags = CLK_SET_RATE_PARENT,
1719 			.ops = &clk_branch2_ops,
1720 		},
1721 	},
1722 };
1723 
1724 static struct clk_branch gcc_camss_cphy_2_clk = {
1725 	.halt_reg = 0x52090,
1726 	.halt_check = BRANCH_HALT,
1727 	.clkr = {
1728 		.enable_reg = 0x52090,
1729 		.enable_mask = BIT(0),
1730 		.hw.init = &(struct clk_init_data){
1731 			.name = "gcc_camss_cphy_2_clk",
1732 			.parent_hws = (const struct clk_hw *[]){
1733 				&gcc_camss_tfe_cphy_rx_clk_src.clkr.hw,
1734 			},
1735 			.num_parents = 1,
1736 			.flags = CLK_SET_RATE_PARENT,
1737 			.ops = &clk_branch2_ops,
1738 		},
1739 	},
1740 };
1741 
1742 static struct clk_branch gcc_camss_csi0phytimer_clk = {
1743 	.halt_reg = 0x59018,
1744 	.halt_check = BRANCH_HALT,
1745 	.clkr = {
1746 		.enable_reg = 0x59018,
1747 		.enable_mask = BIT(0),
1748 		.hw.init = &(struct clk_init_data){
1749 			.name = "gcc_camss_csi0phytimer_clk",
1750 			.parent_hws = (const struct clk_hw *[]){
1751 				&gcc_camss_csi0phytimer_clk_src.clkr.hw,
1752 			},
1753 			.num_parents = 1,
1754 			.flags = CLK_SET_RATE_PARENT,
1755 			.ops = &clk_branch2_ops,
1756 		},
1757 	},
1758 };
1759 
1760 static struct clk_branch gcc_camss_csi1phytimer_clk = {
1761 	.halt_reg = 0x59034,
1762 	.halt_check = BRANCH_HALT,
1763 	.clkr = {
1764 		.enable_reg = 0x59034,
1765 		.enable_mask = BIT(0),
1766 		.hw.init = &(struct clk_init_data){
1767 			.name = "gcc_camss_csi1phytimer_clk",
1768 			.parent_hws = (const struct clk_hw *[]){
1769 				&gcc_camss_csi1phytimer_clk_src.clkr.hw,
1770 			},
1771 			.num_parents = 1,
1772 			.flags = CLK_SET_RATE_PARENT,
1773 			.ops = &clk_branch2_ops,
1774 		},
1775 	},
1776 };
1777 
1778 static struct clk_branch gcc_camss_csi2phytimer_clk = {
1779 	.halt_reg = 0x59050,
1780 	.halt_check = BRANCH_HALT,
1781 	.clkr = {
1782 		.enable_reg = 0x59050,
1783 		.enable_mask = BIT(0),
1784 		.hw.init = &(struct clk_init_data){
1785 			.name = "gcc_camss_csi2phytimer_clk",
1786 			.parent_hws = (const struct clk_hw *[]){
1787 				&gcc_camss_csi2phytimer_clk_src.clkr.hw,
1788 			},
1789 			.num_parents = 1,
1790 			.flags = CLK_SET_RATE_PARENT,
1791 			.ops = &clk_branch2_ops,
1792 		},
1793 	},
1794 };
1795 
1796 static struct clk_branch gcc_camss_mclk0_clk = {
1797 	.halt_reg = 0x51018,
1798 	.halt_check = BRANCH_HALT,
1799 	.clkr = {
1800 		.enable_reg = 0x51018,
1801 		.enable_mask = BIT(0),
1802 		.hw.init = &(struct clk_init_data){
1803 			.name = "gcc_camss_mclk0_clk",
1804 			.parent_hws = (const struct clk_hw *[]){
1805 				&gcc_camss_mclk0_clk_src.clkr.hw,
1806 			},
1807 			.num_parents = 1,
1808 			.flags = CLK_SET_RATE_PARENT,
1809 			.ops = &clk_branch2_ops,
1810 		},
1811 	},
1812 };
1813 
1814 static struct clk_branch gcc_camss_mclk1_clk = {
1815 	.halt_reg = 0x51034,
1816 	.halt_check = BRANCH_HALT,
1817 	.clkr = {
1818 		.enable_reg = 0x51034,
1819 		.enable_mask = BIT(0),
1820 		.hw.init = &(struct clk_init_data){
1821 			.name = "gcc_camss_mclk1_clk",
1822 			.parent_hws = (const struct clk_hw *[]){
1823 				&gcc_camss_mclk1_clk_src.clkr.hw,
1824 			},
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_camss_mclk2_clk = {
1833 	.halt_reg = 0x51050,
1834 	.halt_check = BRANCH_HALT,
1835 	.clkr = {
1836 		.enable_reg = 0x51050,
1837 		.enable_mask = BIT(0),
1838 		.hw.init = &(struct clk_init_data){
1839 			.name = "gcc_camss_mclk2_clk",
1840 			.parent_hws = (const struct clk_hw *[]){
1841 				&gcc_camss_mclk2_clk_src.clkr.hw,
1842 			},
1843 			.num_parents = 1,
1844 			.flags = CLK_SET_RATE_PARENT,
1845 			.ops = &clk_branch2_ops,
1846 		},
1847 	},
1848 };
1849 
1850 static struct clk_branch gcc_camss_mclk3_clk = {
1851 	.halt_reg = 0x5106c,
1852 	.halt_check = BRANCH_HALT,
1853 	.clkr = {
1854 		.enable_reg = 0x5106c,
1855 		.enable_mask = BIT(0),
1856 		.hw.init = &(struct clk_init_data){
1857 			.name = "gcc_camss_mclk3_clk",
1858 			.parent_hws = (const struct clk_hw *[]){
1859 				&gcc_camss_mclk3_clk_src.clkr.hw,
1860 			},
1861 			.num_parents = 1,
1862 			.flags = CLK_SET_RATE_PARENT,
1863 			.ops = &clk_branch2_ops,
1864 		},
1865 	},
1866 };
1867 
1868 static struct clk_branch gcc_camss_nrt_axi_clk = {
1869 	.halt_reg = 0x58054,
1870 	.halt_check = BRANCH_HALT,
1871 	.clkr = {
1872 		.enable_reg = 0x58054,
1873 		.enable_mask = BIT(0),
1874 		.hw.init = &(struct clk_init_data){
1875 			.name = "gcc_camss_nrt_axi_clk",
1876 			.ops = &clk_branch2_ops,
1877 		},
1878 	},
1879 };
1880 
1881 static struct clk_branch gcc_camss_ope_ahb_clk = {
1882 	.halt_reg = 0x5503c,
1883 	.halt_check = BRANCH_HALT,
1884 	.clkr = {
1885 		.enable_reg = 0x5503c,
1886 		.enable_mask = BIT(0),
1887 		.hw.init = &(struct clk_init_data){
1888 			.name = "gcc_camss_ope_ahb_clk",
1889 			.parent_hws = (const struct clk_hw *[]){
1890 				&gcc_camss_ope_ahb_clk_src.clkr.hw,
1891 			},
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_camss_ope_clk = {
1900 	.halt_reg = 0x5501c,
1901 	.halt_check = BRANCH_HALT,
1902 	.clkr = {
1903 		.enable_reg = 0x5501c,
1904 		.enable_mask = BIT(0),
1905 		.hw.init = &(struct clk_init_data){
1906 			.name = "gcc_camss_ope_clk",
1907 			.parent_hws = (const struct clk_hw *[]){
1908 				&gcc_camss_ope_clk_src.clkr.hw,
1909 			},
1910 			.num_parents = 1,
1911 			.flags = CLK_SET_RATE_PARENT,
1912 			.ops = &clk_branch2_ops,
1913 		},
1914 	},
1915 };
1916 
1917 static struct clk_branch gcc_camss_rt_axi_clk = {
1918 	.halt_reg = 0x5805c,
1919 	.halt_check = BRANCH_HALT,
1920 	.clkr = {
1921 		.enable_reg = 0x5805c,
1922 		.enable_mask = BIT(0),
1923 		.hw.init = &(struct clk_init_data){
1924 			.name = "gcc_camss_rt_axi_clk",
1925 			.ops = &clk_branch2_ops,
1926 		},
1927 	},
1928 };
1929 
1930 static struct clk_branch gcc_camss_tfe_0_clk = {
1931 	.halt_reg = 0x5201c,
1932 	.halt_check = BRANCH_HALT,
1933 	.clkr = {
1934 		.enable_reg = 0x5201c,
1935 		.enable_mask = BIT(0),
1936 		.hw.init = &(struct clk_init_data){
1937 			.name = "gcc_camss_tfe_0_clk",
1938 			.parent_hws = (const struct clk_hw *[]){
1939 				&gcc_camss_tfe_0_clk_src.clkr.hw,
1940 			},
1941 			.num_parents = 1,
1942 			.flags = CLK_SET_RATE_PARENT,
1943 			.ops = &clk_branch2_ops,
1944 		},
1945 	},
1946 };
1947 
1948 static struct clk_branch gcc_camss_tfe_0_cphy_rx_clk = {
1949 	.halt_reg = 0x5207c,
1950 	.halt_check = BRANCH_HALT,
1951 	.clkr = {
1952 		.enable_reg = 0x5207c,
1953 		.enable_mask = BIT(0),
1954 		.hw.init = &(struct clk_init_data){
1955 			.name = "gcc_camss_tfe_0_cphy_rx_clk",
1956 			.parent_hws = (const struct clk_hw *[]){
1957 				&gcc_camss_tfe_cphy_rx_clk_src.clkr.hw,
1958 			},
1959 			.num_parents = 1,
1960 			.flags = CLK_SET_RATE_PARENT,
1961 			.ops = &clk_branch2_ops,
1962 		},
1963 	},
1964 };
1965 
1966 static struct clk_branch gcc_camss_tfe_0_csid_clk = {
1967 	.halt_reg = 0x520ac,
1968 	.halt_check = BRANCH_HALT,
1969 	.clkr = {
1970 		.enable_reg = 0x520ac,
1971 		.enable_mask = BIT(0),
1972 		.hw.init = &(struct clk_init_data){
1973 			.name = "gcc_camss_tfe_0_csid_clk",
1974 			.parent_hws = (const struct clk_hw *[]){
1975 				&gcc_camss_tfe_0_csid_clk_src.clkr.hw,
1976 			},
1977 			.num_parents = 1,
1978 			.flags = CLK_SET_RATE_PARENT,
1979 			.ops = &clk_branch2_ops,
1980 		},
1981 	},
1982 };
1983 
1984 static struct clk_branch gcc_camss_tfe_1_clk = {
1985 	.halt_reg = 0x5203c,
1986 	.halt_check = BRANCH_HALT,
1987 	.clkr = {
1988 		.enable_reg = 0x5203c,
1989 		.enable_mask = BIT(0),
1990 		.hw.init = &(struct clk_init_data){
1991 			.name = "gcc_camss_tfe_1_clk",
1992 			.parent_hws = (const struct clk_hw *[]){
1993 				&gcc_camss_tfe_1_clk_src.clkr.hw,
1994 			},
1995 			.num_parents = 1,
1996 			.flags = CLK_SET_RATE_PARENT,
1997 			.ops = &clk_branch2_ops,
1998 		},
1999 	},
2000 };
2001 
2002 static struct clk_branch gcc_camss_tfe_1_cphy_rx_clk = {
2003 	.halt_reg = 0x52080,
2004 	.halt_check = BRANCH_HALT,
2005 	.clkr = {
2006 		.enable_reg = 0x52080,
2007 		.enable_mask = BIT(0),
2008 		.hw.init = &(struct clk_init_data){
2009 			.name = "gcc_camss_tfe_1_cphy_rx_clk",
2010 			.parent_hws = (const struct clk_hw *[]){
2011 				&gcc_camss_tfe_cphy_rx_clk_src.clkr.hw,
2012 			},
2013 			.num_parents = 1,
2014 			.flags = CLK_SET_RATE_PARENT,
2015 			.ops = &clk_branch2_ops,
2016 		},
2017 	},
2018 };
2019 
2020 static struct clk_branch gcc_camss_tfe_1_csid_clk = {
2021 	.halt_reg = 0x520cc,
2022 	.halt_check = BRANCH_HALT,
2023 	.clkr = {
2024 		.enable_reg = 0x520cc,
2025 		.enable_mask = BIT(0),
2026 		.hw.init = &(struct clk_init_data){
2027 			.name = "gcc_camss_tfe_1_csid_clk",
2028 			.parent_hws = (const struct clk_hw *[]){
2029 				&gcc_camss_tfe_1_csid_clk_src.clkr.hw,
2030 			},
2031 			.num_parents = 1,
2032 			.flags = CLK_SET_RATE_PARENT,
2033 			.ops = &clk_branch2_ops,
2034 		},
2035 	},
2036 };
2037 
2038 static struct clk_branch gcc_camss_tfe_2_clk = {
2039 	.halt_reg = 0x5205c,
2040 	.halt_check = BRANCH_HALT,
2041 	.clkr = {
2042 		.enable_reg = 0x5205c,
2043 		.enable_mask = BIT(0),
2044 		.hw.init = &(struct clk_init_data){
2045 			.name = "gcc_camss_tfe_2_clk",
2046 			.parent_hws = (const struct clk_hw *[]){
2047 				&gcc_camss_tfe_2_clk_src.clkr.hw,
2048 			},
2049 			.num_parents = 1,
2050 			.flags = CLK_SET_RATE_PARENT,
2051 			.ops = &clk_branch2_ops,
2052 		},
2053 	},
2054 };
2055 
2056 static struct clk_branch gcc_camss_tfe_2_cphy_rx_clk = {
2057 	.halt_reg = 0x52084,
2058 	.halt_check = BRANCH_HALT,
2059 	.clkr = {
2060 		.enable_reg = 0x52084,
2061 		.enable_mask = BIT(0),
2062 		.hw.init = &(struct clk_init_data){
2063 			.name = "gcc_camss_tfe_2_cphy_rx_clk",
2064 			.parent_hws = (const struct clk_hw *[]){
2065 				&gcc_camss_tfe_cphy_rx_clk_src.clkr.hw,
2066 			},
2067 			.num_parents = 1,
2068 			.flags = CLK_SET_RATE_PARENT,
2069 			.ops = &clk_branch2_ops,
2070 		},
2071 	},
2072 };
2073 
2074 static struct clk_branch gcc_camss_tfe_2_csid_clk = {
2075 	.halt_reg = 0x520ec,
2076 	.halt_check = BRANCH_HALT,
2077 	.clkr = {
2078 		.enable_reg = 0x520ec,
2079 		.enable_mask = BIT(0),
2080 		.hw.init = &(struct clk_init_data){
2081 			.name = "gcc_camss_tfe_2_csid_clk",
2082 			.parent_hws = (const struct clk_hw *[]){
2083 				&gcc_camss_tfe_2_csid_clk_src.clkr.hw,
2084 			},
2085 			.num_parents = 1,
2086 			.flags = CLK_SET_RATE_PARENT,
2087 			.ops = &clk_branch2_ops,
2088 		},
2089 	},
2090 };
2091 
2092 static struct clk_branch gcc_camss_top_ahb_clk = {
2093 	.halt_reg = 0x58028,
2094 	.halt_check = BRANCH_HALT,
2095 	.clkr = {
2096 		.enable_reg = 0x58028,
2097 		.enable_mask = BIT(0),
2098 		.hw.init = &(struct clk_init_data){
2099 			.name = "gcc_camss_top_ahb_clk",
2100 			.parent_hws = (const struct clk_hw *[]){
2101 				&gcc_camss_top_ahb_clk_src.clkr.hw,
2102 			},
2103 			.num_parents = 1,
2104 			.flags = CLK_SET_RATE_PARENT,
2105 			.ops = &clk_branch2_ops,
2106 		},
2107 	},
2108 };
2109 
2110 static struct clk_branch gcc_cfg_noc_usb3_prim_axi_clk = {
2111 	.halt_reg = 0x1a084,
2112 	.halt_check = BRANCH_HALT,
2113 	.hwcg_reg = 0x1a084,
2114 	.hwcg_bit = 1,
2115 	.clkr = {
2116 		.enable_reg = 0x1a084,
2117 		.enable_mask = BIT(0),
2118 		.hw.init = &(struct clk_init_data){
2119 			.name = "gcc_cfg_noc_usb3_prim_axi_clk",
2120 			.parent_hws = (const struct clk_hw *[]){
2121 				&gcc_usb30_prim_master_clk_src.clkr.hw,
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_cpuss_gnoc_clk = {
2131 	.halt_reg = 0x2b004,
2132 	.halt_check = BRANCH_HALT_VOTED,
2133 	.hwcg_reg = 0x2b004,
2134 	.hwcg_bit = 1,
2135 	.clkr = {
2136 		.enable_reg = 0x79004,
2137 		.enable_mask = BIT(22),
2138 		.hw.init = &(struct clk_init_data){
2139 			.name = "gcc_cpuss_gnoc_clk",
2140 			.flags = CLK_IS_CRITICAL,
2141 			.ops = &clk_branch2_ops,
2142 		},
2143 	},
2144 };
2145 
2146 static struct clk_branch gcc_disp_ahb_clk = {
2147 	.halt_reg = 0x1700c,
2148 	.halt_check = BRANCH_HALT,
2149 	.hwcg_reg = 0x1700c,
2150 	.hwcg_bit = 1,
2151 	.clkr = {
2152 		.enable_reg = 0x1700c,
2153 		.enable_mask = BIT(0),
2154 		.hw.init = &(struct clk_init_data){
2155 			.name = "gcc_disp_ahb_clk",
2156 			.flags = CLK_IS_CRITICAL,
2157 			.ops = &clk_branch2_ops,
2158 		},
2159 	},
2160 };
2161 
2162 static struct clk_regmap_div gcc_disp_gpll0_clk_src = {
2163 	.reg = 0x17058,
2164 	.shift = 0,
2165 	.width = 2,
2166 	.clkr.hw.init = &(struct clk_init_data) {
2167 		.name = "gcc_disp_gpll0_clk_src",
2168 		.parent_hws = (const struct clk_hw *[]){ &gpll0.clkr.hw },
2169 		.num_parents = 1,
2170 		.ops = &clk_regmap_div_ops,
2171 	},
2172 };
2173 
2174 static struct clk_branch gcc_disp_gpll0_div_clk_src = {
2175 	.halt_check = BRANCH_HALT_DELAY,
2176 	.clkr = {
2177 		.enable_reg = 0x79004,
2178 		.enable_mask = BIT(20),
2179 		.hw.init = &(struct clk_init_data){
2180 			.name = "gcc_disp_gpll0_div_clk_src",
2181 			.parent_hws = (const struct clk_hw *[]){
2182 				&gcc_disp_gpll0_clk_src.clkr.hw,
2183 			},
2184 			.num_parents = 1,
2185 			.flags = CLK_SET_RATE_PARENT,
2186 			.ops = &clk_branch2_ops,
2187 		},
2188 	},
2189 };
2190 
2191 static struct clk_branch gcc_disp_hf_axi_clk = {
2192 	.halt_reg = 0x17020,
2193 	.halt_check = BRANCH_HALT,
2194 	.hwcg_reg = 0x17020,
2195 	.hwcg_bit = 1,
2196 	.clkr = {
2197 		.enable_reg = 0x17020,
2198 		.enable_mask = BIT(0),
2199 		.hw.init = &(struct clk_init_data){
2200 			.name = "gcc_disp_hf_axi_clk",
2201 			.ops = &clk_branch2_ops,
2202 		},
2203 	},
2204 };
2205 
2206 static struct clk_branch gcc_disp_throttle_core_clk = {
2207 	.halt_reg = 0x17064,
2208 	.halt_check = BRANCH_HALT_VOTED,
2209 	.hwcg_reg = 0x17064,
2210 	.hwcg_bit = 1,
2211 	.clkr = {
2212 		.enable_reg = 0x7900c,
2213 		.enable_mask = BIT(5),
2214 		.hw.init = &(struct clk_init_data){
2215 			.name = "gcc_disp_throttle_core_clk",
2216 			.ops = &clk_branch2_ops,
2217 		},
2218 	},
2219 };
2220 
2221 static struct clk_branch gcc_disp_xo_clk = {
2222 	.halt_reg = 0x1702c,
2223 	.halt_check = BRANCH_HALT,
2224 	.clkr = {
2225 		.enable_reg = 0x1702c,
2226 		.enable_mask = BIT(0),
2227 		.hw.init = &(struct clk_init_data){
2228 			.name = "gcc_disp_xo_clk",
2229 			.flags = CLK_IS_CRITICAL,
2230 			.ops = &clk_branch2_ops,
2231 		},
2232 	},
2233 };
2234 
2235 static struct clk_branch gcc_gp1_clk = {
2236 	.halt_reg = 0x4d000,
2237 	.halt_check = BRANCH_HALT,
2238 	.clkr = {
2239 		.enable_reg = 0x4d000,
2240 		.enable_mask = BIT(0),
2241 		.hw.init = &(struct clk_init_data){
2242 			.name = "gcc_gp1_clk",
2243 			.parent_hws = (const struct clk_hw *[]){
2244 				&gcc_gp1_clk_src.clkr.hw,
2245 			},
2246 			.num_parents = 1,
2247 			.flags = CLK_SET_RATE_PARENT,
2248 			.ops = &clk_branch2_ops,
2249 		},
2250 	},
2251 };
2252 
2253 static struct clk_branch gcc_gp2_clk = {
2254 	.halt_reg = 0x4e000,
2255 	.halt_check = BRANCH_HALT,
2256 	.clkr = {
2257 		.enable_reg = 0x4e000,
2258 		.enable_mask = BIT(0),
2259 		.hw.init = &(struct clk_init_data){
2260 			.name = "gcc_gp2_clk",
2261 			.parent_hws = (const struct clk_hw *[]){
2262 				&gcc_gp2_clk_src.clkr.hw,
2263 			},
2264 			.num_parents = 1,
2265 			.flags = CLK_SET_RATE_PARENT,
2266 			.ops = &clk_branch2_ops,
2267 		},
2268 	},
2269 };
2270 
2271 static struct clk_branch gcc_gp3_clk = {
2272 	.halt_reg = 0x4f000,
2273 	.halt_check = BRANCH_HALT,
2274 	.clkr = {
2275 		.enable_reg = 0x4f000,
2276 		.enable_mask = BIT(0),
2277 		.hw.init = &(struct clk_init_data){
2278 			.name = "gcc_gp3_clk",
2279 			.parent_hws = (const struct clk_hw *[]){
2280 				&gcc_gp3_clk_src.clkr.hw,
2281 			},
2282 			.num_parents = 1,
2283 			.flags = CLK_SET_RATE_PARENT,
2284 			.ops = &clk_branch2_ops,
2285 		},
2286 	},
2287 };
2288 
2289 static struct clk_branch gcc_gpu_cfg_ahb_clk = {
2290 	.halt_reg = 0x36004,
2291 	.halt_check = BRANCH_HALT,
2292 	.hwcg_reg = 0x36004,
2293 	.hwcg_bit = 1,
2294 	.clkr = {
2295 		.enable_reg = 0x36004,
2296 		.enable_mask = BIT(0),
2297 		.hw.init = &(struct clk_init_data){
2298 			.name = "gcc_gpu_cfg_ahb_clk",
2299 			.flags = CLK_IS_CRITICAL,
2300 			.ops = &clk_branch2_ops,
2301 		},
2302 	},
2303 };
2304 
2305 static struct clk_branch gcc_gpu_gpll0_clk_src = {
2306 	.halt_check = BRANCH_HALT_DELAY,
2307 	.clkr = {
2308 		.enable_reg = 0x79004,
2309 		.enable_mask = BIT(15),
2310 		.hw.init = &(struct clk_init_data){
2311 			.name = "gcc_gpu_gpll0_clk_src",
2312 			.parent_hws = (const struct clk_hw *[]){
2313 				&gpll0.clkr.hw,
2314 			},
2315 			.num_parents = 1,
2316 			.flags = CLK_SET_RATE_PARENT,
2317 			.ops = &clk_branch2_ops,
2318 		},
2319 	},
2320 };
2321 
2322 static struct clk_branch gcc_gpu_gpll0_div_clk_src = {
2323 	.halt_check = BRANCH_HALT_DELAY,
2324 	.clkr = {
2325 		.enable_reg = 0x79004,
2326 		.enable_mask = BIT(16),
2327 		.hw.init = &(struct clk_init_data){
2328 			.name = "gcc_gpu_gpll0_div_clk_src",
2329 			.parent_hws = (const struct clk_hw *[]){
2330 				&gpll0_out_aux2.clkr.hw,
2331 			},
2332 			.num_parents = 1,
2333 			.flags = CLK_SET_RATE_PARENT,
2334 			.ops = &clk_branch2_ops,
2335 		},
2336 	},
2337 };
2338 
2339 static struct clk_branch gcc_gpu_iref_clk = {
2340 	.halt_reg = 0x36100,
2341 	.halt_check = BRANCH_HALT_DELAY,
2342 	.clkr = {
2343 		.enable_reg = 0x36100,
2344 		.enable_mask = BIT(0),
2345 		.hw.init = &(struct clk_init_data){
2346 			.name = "gcc_gpu_iref_clk",
2347 			.ops = &clk_branch2_ops,
2348 		},
2349 	},
2350 };
2351 
2352 static struct clk_branch gcc_gpu_memnoc_gfx_clk = {
2353 	.halt_reg = 0x3600c,
2354 	.halt_check = BRANCH_VOTED,
2355 	.hwcg_reg = 0x3600c,
2356 	.hwcg_bit = 1,
2357 	.clkr = {
2358 		.enable_reg = 0x3600c,
2359 		.enable_mask = BIT(0),
2360 		.hw.init = &(struct clk_init_data){
2361 			.name = "gcc_gpu_memnoc_gfx_clk",
2362 			.ops = &clk_branch2_ops,
2363 		},
2364 	},
2365 };
2366 
2367 static struct clk_branch gcc_gpu_snoc_dvm_gfx_clk = {
2368 	.halt_reg = 0x36018,
2369 	.halt_check = BRANCH_HALT,
2370 	.clkr = {
2371 		.enable_reg = 0x36018,
2372 		.enable_mask = BIT(0),
2373 		.hw.init = &(struct clk_init_data){
2374 			.name = "gcc_gpu_snoc_dvm_gfx_clk",
2375 			.ops = &clk_branch2_ops,
2376 		},
2377 	},
2378 };
2379 
2380 static struct clk_branch gcc_gpu_throttle_core_clk = {
2381 	.halt_reg = 0x36048,
2382 	.halt_check = BRANCH_HALT_VOTED,
2383 	.hwcg_reg = 0x36048,
2384 	.hwcg_bit = 1,
2385 	.clkr = {
2386 		.enable_reg = 0x79004,
2387 		.enable_mask = BIT(31),
2388 		.hw.init = &(struct clk_init_data){
2389 			.name = "gcc_gpu_throttle_core_clk",
2390 			.ops = &clk_branch2_ops,
2391 		},
2392 	},
2393 };
2394 
2395 static struct clk_branch gcc_pdm2_clk = {
2396 	.halt_reg = 0x2000c,
2397 	.halt_check = BRANCH_HALT,
2398 	.clkr = {
2399 		.enable_reg = 0x2000c,
2400 		.enable_mask = BIT(0),
2401 		.hw.init = &(struct clk_init_data){
2402 			.name = "gcc_pdm2_clk",
2403 			.parent_hws = (const struct clk_hw *[]){
2404 				&gcc_pdm2_clk_src.clkr.hw,
2405 			},
2406 			.num_parents = 1,
2407 			.flags = CLK_SET_RATE_PARENT,
2408 			.ops = &clk_branch2_ops,
2409 		},
2410 	},
2411 };
2412 
2413 static struct clk_branch gcc_pdm_ahb_clk = {
2414 	.halt_reg = 0x20004,
2415 	.halt_check = BRANCH_HALT,
2416 	.hwcg_reg = 0x20004,
2417 	.hwcg_bit = 1,
2418 	.clkr = {
2419 		.enable_reg = 0x20004,
2420 		.enable_mask = BIT(0),
2421 		.hw.init = &(struct clk_init_data){
2422 			.name = "gcc_pdm_ahb_clk",
2423 			.ops = &clk_branch2_ops,
2424 		},
2425 	},
2426 };
2427 
2428 static struct clk_branch gcc_pdm_xo4_clk = {
2429 	.halt_reg = 0x20008,
2430 	.halt_check = BRANCH_HALT,
2431 	.clkr = {
2432 		.enable_reg = 0x20008,
2433 		.enable_mask = BIT(0),
2434 		.hw.init = &(struct clk_init_data){
2435 			.name = "gcc_pdm_xo4_clk",
2436 			.ops = &clk_branch2_ops,
2437 		},
2438 	},
2439 };
2440 
2441 static struct clk_branch gcc_prng_ahb_clk = {
2442 	.halt_reg = 0x21004,
2443 	.halt_check = BRANCH_HALT_VOTED,
2444 	.hwcg_reg = 0x21004,
2445 	.hwcg_bit = 1,
2446 	.clkr = {
2447 		.enable_reg = 0x79004,
2448 		.enable_mask = BIT(13),
2449 		.hw.init = &(struct clk_init_data){
2450 			.name = "gcc_prng_ahb_clk",
2451 			.ops = &clk_branch2_ops,
2452 		},
2453 	},
2454 };
2455 
2456 static struct clk_branch gcc_qmip_camera_nrt_ahb_clk = {
2457 	.halt_reg = 0x17014,
2458 	.halt_check = BRANCH_HALT_VOTED,
2459 	.hwcg_reg = 0x17014,
2460 	.hwcg_bit = 1,
2461 	.clkr = {
2462 		.enable_reg = 0x7900c,
2463 		.enable_mask = BIT(0),
2464 		.hw.init = &(struct clk_init_data){
2465 			.name = "gcc_qmip_camera_nrt_ahb_clk",
2466 			.ops = &clk_branch2_ops,
2467 		},
2468 	},
2469 };
2470 
2471 static struct clk_branch gcc_qmip_camera_rt_ahb_clk = {
2472 	.halt_reg = 0x17060,
2473 	.halt_check = BRANCH_HALT_VOTED,
2474 	.hwcg_reg = 0x17060,
2475 	.hwcg_bit = 1,
2476 	.clkr = {
2477 		.enable_reg = 0x7900c,
2478 		.enable_mask = BIT(2),
2479 		.hw.init = &(struct clk_init_data){
2480 			.name = "gcc_qmip_camera_rt_ahb_clk",
2481 			.ops = &clk_branch2_ops,
2482 		},
2483 	},
2484 };
2485 
2486 static struct clk_branch gcc_qmip_disp_ahb_clk = {
2487 	.halt_reg = 0x17018,
2488 	.halt_check = BRANCH_HALT_VOTED,
2489 	.hwcg_reg = 0x17018,
2490 	.hwcg_bit = 1,
2491 	.clkr = {
2492 		.enable_reg = 0x7900c,
2493 		.enable_mask = BIT(1),
2494 		.hw.init = &(struct clk_init_data){
2495 			.name = "gcc_qmip_disp_ahb_clk",
2496 			.ops = &clk_branch2_ops,
2497 		},
2498 	},
2499 };
2500 
2501 static struct clk_branch gcc_qmip_gpu_cfg_ahb_clk = {
2502 	.halt_reg = 0x36040,
2503 	.halt_check = BRANCH_HALT_VOTED,
2504 	.hwcg_reg = 0x36040,
2505 	.hwcg_bit = 1,
2506 	.clkr = {
2507 		.enable_reg = 0x7900c,
2508 		.enable_mask = BIT(4),
2509 		.hw.init = &(struct clk_init_data){
2510 			.name = "gcc_qmip_gpu_cfg_ahb_clk",
2511 			.ops = &clk_branch2_ops,
2512 		},
2513 	},
2514 };
2515 
2516 static struct clk_branch gcc_qmip_video_vcodec_ahb_clk = {
2517 	.halt_reg = 0x17010,
2518 	.halt_check = BRANCH_HALT_VOTED,
2519 	.hwcg_reg = 0x17010,
2520 	.hwcg_bit = 1,
2521 	.clkr = {
2522 		.enable_reg = 0x79004,
2523 		.enable_mask = BIT(25),
2524 		.hw.init = &(struct clk_init_data){
2525 			.name = "gcc_qmip_video_vcodec_ahb_clk",
2526 			.ops = &clk_branch2_ops,
2527 		},
2528 	},
2529 };
2530 
2531 static struct clk_branch gcc_qupv3_wrap0_core_2x_clk = {
2532 	.halt_reg = 0x1f014,
2533 	.halt_check = BRANCH_HALT_VOTED,
2534 	.clkr = {
2535 		.enable_reg = 0x7900c,
2536 		.enable_mask = BIT(9),
2537 		.hw.init = &(struct clk_init_data){
2538 			.name = "gcc_qupv3_wrap0_core_2x_clk",
2539 			.ops = &clk_branch2_ops,
2540 		},
2541 	},
2542 };
2543 
2544 static struct clk_branch gcc_qupv3_wrap0_core_clk = {
2545 	.halt_reg = 0x1f00c,
2546 	.halt_check = BRANCH_HALT_VOTED,
2547 	.clkr = {
2548 		.enable_reg = 0x7900c,
2549 		.enable_mask = BIT(8),
2550 		.hw.init = &(struct clk_init_data){
2551 			.name = "gcc_qupv3_wrap0_core_clk",
2552 			.ops = &clk_branch2_ops,
2553 		},
2554 	},
2555 };
2556 
2557 static struct clk_branch gcc_qupv3_wrap0_s0_clk = {
2558 	.halt_reg = 0x1f144,
2559 	.halt_check = BRANCH_HALT_VOTED,
2560 	.clkr = {
2561 		.enable_reg = 0x7900c,
2562 		.enable_mask = BIT(10),
2563 		.hw.init = &(struct clk_init_data){
2564 			.name = "gcc_qupv3_wrap0_s0_clk",
2565 			.parent_hws = (const struct clk_hw *[]){
2566 				&gcc_qupv3_wrap0_s0_clk_src.clkr.hw,
2567 			},
2568 			.num_parents = 1,
2569 			.flags = CLK_SET_RATE_PARENT,
2570 			.ops = &clk_branch2_ops,
2571 		},
2572 	},
2573 };
2574 
2575 static struct clk_branch gcc_qupv3_wrap0_s1_clk = {
2576 	.halt_reg = 0x1f274,
2577 	.halt_check = BRANCH_HALT_VOTED,
2578 	.clkr = {
2579 		.enable_reg = 0x7900c,
2580 		.enable_mask = BIT(11),
2581 		.hw.init = &(struct clk_init_data){
2582 			.name = "gcc_qupv3_wrap0_s1_clk",
2583 			.parent_hws = (const struct clk_hw *[]){
2584 				&gcc_qupv3_wrap0_s1_clk_src.clkr.hw,
2585 			},
2586 			.num_parents = 1,
2587 			.flags = CLK_SET_RATE_PARENT,
2588 			.ops = &clk_branch2_ops,
2589 		},
2590 	},
2591 };
2592 
2593 static struct clk_branch gcc_qupv3_wrap0_s2_clk = {
2594 	.halt_reg = 0x1f3a4,
2595 	.halt_check = BRANCH_HALT_VOTED,
2596 	.clkr = {
2597 		.enable_reg = 0x7900c,
2598 		.enable_mask = BIT(12),
2599 		.hw.init = &(struct clk_init_data){
2600 			.name = "gcc_qupv3_wrap0_s2_clk",
2601 			.parent_hws = (const struct clk_hw *[]){
2602 				&gcc_qupv3_wrap0_s2_clk_src.clkr.hw,
2603 			},
2604 			.num_parents = 1,
2605 			.flags = CLK_SET_RATE_PARENT,
2606 			.ops = &clk_branch2_ops,
2607 		},
2608 	},
2609 };
2610 
2611 static struct clk_branch gcc_qupv3_wrap0_s3_clk = {
2612 	.halt_reg = 0x1f4d4,
2613 	.halt_check = BRANCH_HALT_VOTED,
2614 	.clkr = {
2615 		.enable_reg = 0x7900c,
2616 		.enable_mask = BIT(13),
2617 		.hw.init = &(struct clk_init_data){
2618 			.name = "gcc_qupv3_wrap0_s3_clk",
2619 			.parent_hws = (const struct clk_hw *[]){
2620 				&gcc_qupv3_wrap0_s3_clk_src.clkr.hw,
2621 			},
2622 			.num_parents = 1,
2623 			.flags = CLK_SET_RATE_PARENT,
2624 			.ops = &clk_branch2_ops,
2625 		},
2626 	},
2627 };
2628 
2629 static struct clk_branch gcc_qupv3_wrap0_s4_clk = {
2630 	.halt_reg = 0x1f604,
2631 	.halt_check = BRANCH_HALT_VOTED,
2632 	.clkr = {
2633 		.enable_reg = 0x7900c,
2634 		.enable_mask = BIT(14),
2635 		.hw.init = &(struct clk_init_data){
2636 			.name = "gcc_qupv3_wrap0_s4_clk",
2637 			.parent_hws = (const struct clk_hw *[]){
2638 				&gcc_qupv3_wrap0_s4_clk_src.clkr.hw,
2639 			},
2640 			.num_parents = 1,
2641 			.flags = CLK_SET_RATE_PARENT,
2642 			.ops = &clk_branch2_ops,
2643 		},
2644 	},
2645 };
2646 
2647 static struct clk_branch gcc_qupv3_wrap0_s5_clk = {
2648 	.halt_reg = 0x1f734,
2649 	.halt_check = BRANCH_HALT_VOTED,
2650 	.clkr = {
2651 		.enable_reg = 0x7900c,
2652 		.enable_mask = BIT(15),
2653 		.hw.init = &(struct clk_init_data){
2654 			.name = "gcc_qupv3_wrap0_s5_clk",
2655 			.parent_hws = (const struct clk_hw *[]){
2656 				&gcc_qupv3_wrap0_s5_clk_src.clkr.hw,
2657 			},
2658 			.num_parents = 1,
2659 			.flags = CLK_SET_RATE_PARENT,
2660 			.ops = &clk_branch2_ops,
2661 		},
2662 	},
2663 };
2664 
2665 static struct clk_branch gcc_qupv3_wrap_0_m_ahb_clk = {
2666 	.halt_reg = 0x1f004,
2667 	.halt_check = BRANCH_HALT_VOTED,
2668 	.hwcg_reg = 0x1f004,
2669 	.hwcg_bit = 1,
2670 	.clkr = {
2671 		.enable_reg = 0x7900c,
2672 		.enable_mask = BIT(6),
2673 		.hw.init = &(struct clk_init_data){
2674 			.name = "gcc_qupv3_wrap_0_m_ahb_clk",
2675 			.ops = &clk_branch2_ops,
2676 		},
2677 	},
2678 };
2679 
2680 static struct clk_branch gcc_qupv3_wrap_0_s_ahb_clk = {
2681 	.halt_reg = 0x1f008,
2682 	.halt_check = BRANCH_HALT_VOTED,
2683 	.hwcg_reg = 0x1f008,
2684 	.hwcg_bit = 1,
2685 	.clkr = {
2686 		.enable_reg = 0x7900c,
2687 		.enable_mask = BIT(7),
2688 		.hw.init = &(struct clk_init_data){
2689 			.name = "gcc_qupv3_wrap_0_s_ahb_clk",
2690 			.ops = &clk_branch2_ops,
2691 		},
2692 	},
2693 };
2694 
2695 static struct clk_branch gcc_sdcc1_ahb_clk = {
2696 	.halt_reg = 0x38008,
2697 	.halt_check = BRANCH_HALT,
2698 	.clkr = {
2699 		.enable_reg = 0x38008,
2700 		.enable_mask = BIT(0),
2701 		.hw.init = &(struct clk_init_data){
2702 			.name = "gcc_sdcc1_ahb_clk",
2703 			.ops = &clk_branch2_ops,
2704 		},
2705 	},
2706 };
2707 
2708 static struct clk_branch gcc_sdcc1_apps_clk = {
2709 	.halt_reg = 0x38004,
2710 	.halt_check = BRANCH_HALT,
2711 	.clkr = {
2712 		.enable_reg = 0x38004,
2713 		.enable_mask = BIT(0),
2714 		.hw.init = &(struct clk_init_data){
2715 			.name = "gcc_sdcc1_apps_clk",
2716 			.parent_hws = (const struct clk_hw *[]){
2717 				&gcc_sdcc1_apps_clk_src.clkr.hw,
2718 			},
2719 			.num_parents = 1,
2720 			.flags = CLK_SET_RATE_PARENT /* | CLK_ENABLE_HAND_OFF */,
2721 			.ops = &clk_branch2_ops,
2722 		},
2723 	},
2724 };
2725 
2726 static struct clk_branch gcc_sdcc1_ice_core_clk = {
2727 	.halt_reg = 0x3800c,
2728 	.halt_check = BRANCH_HALT,
2729 	.hwcg_reg = 0x3800c,
2730 	.hwcg_bit = 1,
2731 	.clkr = {
2732 		.enable_reg = 0x3800c,
2733 		.enable_mask = BIT(0),
2734 		.hw.init = &(struct clk_init_data){
2735 			.name = "gcc_sdcc1_ice_core_clk",
2736 			.parent_hws = (const struct clk_hw *[]){
2737 				&gcc_sdcc1_ice_core_clk_src.clkr.hw,
2738 			},
2739 			.num_parents = 1,
2740 			.flags = CLK_SET_RATE_PARENT,
2741 			.ops = &clk_branch2_ops,
2742 		},
2743 	},
2744 };
2745 
2746 static struct clk_branch gcc_sdcc2_ahb_clk = {
2747 	.halt_reg = 0x1e008,
2748 	.halt_check = BRANCH_HALT,
2749 	.clkr = {
2750 		.enable_reg = 0x1e008,
2751 		.enable_mask = BIT(0),
2752 		.hw.init = &(struct clk_init_data){
2753 			.name = "gcc_sdcc2_ahb_clk",
2754 			.ops = &clk_branch2_ops,
2755 		},
2756 	},
2757 };
2758 
2759 static struct clk_branch gcc_sdcc2_apps_clk = {
2760 	.halt_reg = 0x1e004,
2761 	.halt_check = BRANCH_HALT,
2762 	.clkr = {
2763 		.enable_reg = 0x1e004,
2764 		.enable_mask = BIT(0),
2765 		.hw.init = &(struct clk_init_data){
2766 			.name = "gcc_sdcc2_apps_clk",
2767 			.parent_hws = (const struct clk_hw *[]){
2768 				&gcc_sdcc2_apps_clk_src.clkr.hw,
2769 			},
2770 			.num_parents = 1,
2771 			.flags = CLK_SET_RATE_PARENT,
2772 			.ops = &clk_branch2_ops,
2773 		},
2774 	},
2775 };
2776 
2777 static struct clk_branch gcc_sys_noc_cpuss_ahb_clk = {
2778 	.halt_reg = 0x2b06c,
2779 	.halt_check = BRANCH_HALT_VOTED,
2780 	.hwcg_reg = 0x2b06c,
2781 	.hwcg_bit = 1,
2782 	.clkr = {
2783 		.enable_reg = 0x79004,
2784 		.enable_mask = BIT(0),
2785 		.hw.init = &(struct clk_init_data){
2786 			.name = "gcc_sys_noc_cpuss_ahb_clk",
2787 			.flags = CLK_IS_CRITICAL,
2788 			.ops = &clk_branch2_ops,
2789 		},
2790 	},
2791 };
2792 
2793 static struct clk_branch gcc_sys_noc_ufs_phy_axi_clk = {
2794 	.halt_reg = 0x45098,
2795 	.halt_check = BRANCH_HALT,
2796 	.clkr = {
2797 		.enable_reg = 0x45098,
2798 		.enable_mask = BIT(0),
2799 		.hw.init = &(struct clk_init_data){
2800 			.name = "gcc_sys_noc_ufs_phy_axi_clk",
2801 			.parent_hws = (const struct clk_hw *[]){
2802 				&gcc_ufs_phy_axi_clk_src.clkr.hw,
2803 			},
2804 			.num_parents = 1,
2805 			.flags = CLK_SET_RATE_PARENT,
2806 			.ops = &clk_branch2_ops,
2807 		},
2808 	},
2809 };
2810 
2811 static struct clk_branch gcc_sys_noc_usb3_prim_axi_clk = {
2812 	.halt_reg = 0x1a080,
2813 	.halt_check = BRANCH_HALT,
2814 	.hwcg_reg = 0x1a080,
2815 	.hwcg_bit = 1,
2816 	.clkr = {
2817 		.enable_reg = 0x1a080,
2818 		.enable_mask = BIT(0),
2819 		.hw.init = &(struct clk_init_data){
2820 			.name = "gcc_sys_noc_usb3_prim_axi_clk",
2821 			.parent_hws = (const struct clk_hw *[]){
2822 				&gcc_usb30_prim_master_clk_src.clkr.hw,
2823 			},
2824 			.num_parents = 1,
2825 			.flags = CLK_SET_RATE_PARENT,
2826 			.ops = &clk_branch2_ops,
2827 		},
2828 	},
2829 };
2830 
2831 static struct clk_branch gcc_ufs_clkref_clk = {
2832 	.halt_reg = 0x8c000,
2833 	.halt_check = BRANCH_HALT,
2834 	.clkr = {
2835 		.enable_reg = 0x8c000,
2836 		.enable_mask = BIT(0),
2837 		.hw.init = &(struct clk_init_data){
2838 			.name = "gcc_ufs_clkref_clk",
2839 			.ops = &clk_branch2_ops,
2840 		},
2841 	},
2842 };
2843 
2844 static struct clk_branch gcc_ufs_phy_ahb_clk = {
2845 	.halt_reg = 0x45014,
2846 	.halt_check = BRANCH_HALT,
2847 	.hwcg_reg = 0x45014,
2848 	.hwcg_bit = 1,
2849 	.clkr = {
2850 		.enable_reg = 0x45014,
2851 		.enable_mask = BIT(0),
2852 		.hw.init = &(struct clk_init_data){
2853 			.name = "gcc_ufs_phy_ahb_clk",
2854 			.ops = &clk_branch2_ops,
2855 		},
2856 	},
2857 };
2858 
2859 static struct clk_branch gcc_ufs_phy_axi_clk = {
2860 	.halt_reg = 0x45010,
2861 	.halt_check = BRANCH_HALT,
2862 	.hwcg_reg = 0x45010,
2863 	.hwcg_bit = 1,
2864 	.clkr = {
2865 		.enable_reg = 0x45010,
2866 		.enable_mask = BIT(0),
2867 		.hw.init = &(struct clk_init_data){
2868 			.name = "gcc_ufs_phy_axi_clk",
2869 			.parent_hws = (const struct clk_hw *[]){
2870 				&gcc_ufs_phy_axi_clk_src.clkr.hw,
2871 			},
2872 			.num_parents = 1,
2873 			.flags = CLK_SET_RATE_PARENT,
2874 			.ops = &clk_branch2_ops,
2875 		},
2876 	},
2877 };
2878 
2879 static struct clk_branch gcc_ufs_phy_ice_core_clk = {
2880 	.halt_reg = 0x45044,
2881 	.halt_check = BRANCH_HALT,
2882 	.hwcg_reg = 0x45044,
2883 	.hwcg_bit = 1,
2884 	.clkr = {
2885 		.enable_reg = 0x45044,
2886 		.enable_mask = BIT(0),
2887 		.hw.init = &(struct clk_init_data){
2888 			.name = "gcc_ufs_phy_ice_core_clk",
2889 			.parent_hws = (const struct clk_hw *[]){
2890 				&gcc_ufs_phy_ice_core_clk_src.clkr.hw,
2891 			},
2892 			.num_parents = 1,
2893 			.flags = CLK_SET_RATE_PARENT,
2894 			.ops = &clk_branch2_ops,
2895 		},
2896 	},
2897 };
2898 
2899 static struct clk_branch gcc_ufs_phy_phy_aux_clk = {
2900 	.halt_reg = 0x45078,
2901 	.halt_check = BRANCH_HALT,
2902 	.hwcg_reg = 0x45078,
2903 	.hwcg_bit = 1,
2904 	.clkr = {
2905 		.enable_reg = 0x45078,
2906 		.enable_mask = BIT(0),
2907 		.hw.init = &(struct clk_init_data){
2908 			.name = "gcc_ufs_phy_phy_aux_clk",
2909 			.parent_hws = (const struct clk_hw *[]){
2910 				&gcc_ufs_phy_phy_aux_clk_src.clkr.hw,
2911 			},
2912 			.num_parents = 1,
2913 			.flags = CLK_SET_RATE_PARENT,
2914 			.ops = &clk_branch2_ops,
2915 		},
2916 	},
2917 };
2918 
2919 static struct clk_branch gcc_ufs_phy_rx_symbol_0_clk = {
2920 	.halt_reg = 0x4501c,
2921 	.halt_check = BRANCH_HALT_SKIP,
2922 	.clkr = {
2923 		.enable_reg = 0x4501c,
2924 		.enable_mask = BIT(0),
2925 		.hw.init = &(struct clk_init_data){
2926 			.name = "gcc_ufs_phy_rx_symbol_0_clk",
2927 			.ops = &clk_branch2_ops,
2928 		},
2929 	},
2930 };
2931 
2932 static struct clk_branch gcc_ufs_phy_tx_symbol_0_clk = {
2933 	.halt_reg = 0x45018,
2934 	.halt_check = BRANCH_HALT_SKIP,
2935 	.clkr = {
2936 		.enable_reg = 0x45018,
2937 		.enable_mask = BIT(0),
2938 		.hw.init = &(struct clk_init_data){
2939 			.name = "gcc_ufs_phy_tx_symbol_0_clk",
2940 			.ops = &clk_branch2_ops,
2941 		},
2942 	},
2943 };
2944 
2945 static struct clk_branch gcc_ufs_phy_unipro_core_clk = {
2946 	.halt_reg = 0x45040,
2947 	.halt_check = BRANCH_HALT,
2948 	.hwcg_reg = 0x45040,
2949 	.hwcg_bit = 1,
2950 	.clkr = {
2951 		.enable_reg = 0x45040,
2952 		.enable_mask = BIT(0),
2953 		.hw.init = &(struct clk_init_data){
2954 			.name = "gcc_ufs_phy_unipro_core_clk",
2955 			.parent_hws = (const struct clk_hw *[]){
2956 				&gcc_ufs_phy_unipro_core_clk_src.clkr.hw,
2957 			},
2958 			.num_parents = 1,
2959 			.flags = CLK_SET_RATE_PARENT,
2960 			.ops = &clk_branch2_ops,
2961 		},
2962 	},
2963 };
2964 
2965 static struct clk_branch gcc_usb30_prim_master_clk = {
2966 	.halt_reg = 0x1a010,
2967 	.halt_check = BRANCH_HALT,
2968 	.clkr = {
2969 		.enable_reg = 0x1a010,
2970 		.enable_mask = BIT(0),
2971 		.hw.init = &(struct clk_init_data){
2972 			.name = "gcc_usb30_prim_master_clk",
2973 			.parent_hws = (const struct clk_hw *[]){
2974 				&gcc_usb30_prim_master_clk_src.clkr.hw,
2975 			},
2976 			.num_parents = 1,
2977 			.flags = CLK_SET_RATE_PARENT,
2978 			.ops = &clk_branch2_ops,
2979 		},
2980 	},
2981 };
2982 
2983 static struct clk_branch gcc_usb30_prim_mock_utmi_clk = {
2984 	.halt_reg = 0x1a018,
2985 	.halt_check = BRANCH_HALT,
2986 	.clkr = {
2987 		.enable_reg = 0x1a018,
2988 		.enable_mask = BIT(0),
2989 		.hw.init = &(struct clk_init_data){
2990 			.name = "gcc_usb30_prim_mock_utmi_clk",
2991 			.parent_hws = (const struct clk_hw *[]){
2992 				&gcc_usb30_prim_mock_utmi_postdiv_clk_src.clkr.hw,
2993 			},
2994 			.num_parents = 1,
2995 			.flags = CLK_SET_RATE_PARENT,
2996 			.ops = &clk_branch2_ops,
2997 		},
2998 	},
2999 };
3000 
3001 static struct clk_branch gcc_usb30_prim_sleep_clk = {
3002 	.halt_reg = 0x1a014,
3003 	.halt_check = BRANCH_HALT,
3004 	.clkr = {
3005 		.enable_reg = 0x1a014,
3006 		.enable_mask = BIT(0),
3007 		.hw.init = &(struct clk_init_data){
3008 			.name = "gcc_usb30_prim_sleep_clk",
3009 			.ops = &clk_branch2_ops,
3010 		},
3011 	},
3012 };
3013 
3014 static struct clk_branch gcc_usb3_prim_clkref_clk = {
3015 	.halt_reg = 0x9f000,
3016 	.halt_check = BRANCH_HALT,
3017 	.clkr = {
3018 		.enable_reg = 0x9f000,
3019 		.enable_mask = BIT(0),
3020 		.hw.init = &(struct clk_init_data){
3021 			.name = "gcc_usb3_prim_clkref_clk",
3022 			.ops = &clk_branch2_ops,
3023 		},
3024 	},
3025 };
3026 
3027 static struct clk_branch gcc_usb3_prim_phy_com_aux_clk = {
3028 	.halt_reg = 0x1a054,
3029 	.halt_check = BRANCH_HALT,
3030 	.clkr = {
3031 		.enable_reg = 0x1a054,
3032 		.enable_mask = BIT(0),
3033 		.hw.init = &(struct clk_init_data){
3034 			.name = "gcc_usb3_prim_phy_com_aux_clk",
3035 			.parent_hws = (const struct clk_hw *[]){
3036 				&gcc_usb3_prim_phy_aux_clk_src.clkr.hw,
3037 			},
3038 			.num_parents = 1,
3039 			.flags = CLK_SET_RATE_PARENT,
3040 			.ops = &clk_branch2_ops,
3041 		},
3042 	},
3043 };
3044 
3045 static struct clk_branch gcc_usb3_prim_phy_pipe_clk = {
3046 	.halt_reg = 0x1a058,
3047 	.halt_check = BRANCH_HALT_SKIP,
3048 	.hwcg_reg = 0x1a058,
3049 	.hwcg_bit = 1,
3050 	.clkr = {
3051 		.enable_reg = 0x1a058,
3052 		.enable_mask = BIT(0),
3053 		.hw.init = &(struct clk_init_data){
3054 			.name = "gcc_usb3_prim_phy_pipe_clk",
3055 			.ops = &clk_branch2_ops,
3056 		},
3057 	},
3058 };
3059 
3060 static struct clk_branch gcc_vcodec0_axi_clk = {
3061 	.halt_reg = 0x6e008,
3062 	.halt_check = BRANCH_HALT,
3063 	.clkr = {
3064 		.enable_reg = 0x6e008,
3065 		.enable_mask = BIT(0),
3066 		.hw.init = &(struct clk_init_data){
3067 			.name = "gcc_vcodec0_axi_clk",
3068 			.ops = &clk_branch2_ops,
3069 		},
3070 	},
3071 };
3072 
3073 static struct clk_branch gcc_venus_ahb_clk = {
3074 	.halt_reg = 0x6e010,
3075 	.halt_check = BRANCH_HALT,
3076 	.clkr = {
3077 		.enable_reg = 0x6e010,
3078 		.enable_mask = BIT(0),
3079 		.hw.init = &(struct clk_init_data){
3080 			.name = "gcc_venus_ahb_clk",
3081 			.ops = &clk_branch2_ops,
3082 		},
3083 	},
3084 };
3085 
3086 static struct clk_branch gcc_venus_ctl_axi_clk = {
3087 	.halt_reg = 0x6e004,
3088 	.halt_check = BRANCH_HALT,
3089 	.clkr = {
3090 		.enable_reg = 0x6e004,
3091 		.enable_mask = BIT(0),
3092 		.hw.init = &(struct clk_init_data){
3093 			.name = "gcc_venus_ctl_axi_clk",
3094 			.ops = &clk_branch2_ops,
3095 		},
3096 	},
3097 };
3098 
3099 static struct clk_branch gcc_video_ahb_clk = {
3100 	.halt_reg = 0x17004,
3101 	.halt_check = BRANCH_HALT,
3102 	.hwcg_reg = 0x17004,
3103 	.hwcg_bit = 1,
3104 	.clkr = {
3105 		.enable_reg = 0x17004,
3106 		.enable_mask = BIT(0),
3107 		.hw.init = &(struct clk_init_data){
3108 			.name = "gcc_video_ahb_clk",
3109 			.ops = &clk_branch2_ops,
3110 		},
3111 	},
3112 };
3113 
3114 static struct clk_branch gcc_video_axi0_clk = {
3115 	.halt_reg = 0x1701c,
3116 	.halt_check = BRANCH_HALT,
3117 	.hwcg_reg = 0x1701c,
3118 	.hwcg_bit = 1,
3119 	.clkr = {
3120 		.enable_reg = 0x1701c,
3121 		.enable_mask = BIT(0),
3122 		.hw.init = &(struct clk_init_data){
3123 			.name = "gcc_video_axi0_clk",
3124 			.ops = &clk_branch2_ops,
3125 		},
3126 	},
3127 };
3128 
3129 static struct clk_branch gcc_video_throttle_core_clk = {
3130 	.halt_reg = 0x17068,
3131 	.halt_check = BRANCH_HALT_VOTED,
3132 	.hwcg_reg = 0x17068,
3133 	.hwcg_bit = 1,
3134 	.clkr = {
3135 		.enable_reg = 0x79004,
3136 		.enable_mask = BIT(28),
3137 		.hw.init = &(struct clk_init_data){
3138 			.name = "gcc_video_throttle_core_clk",
3139 			.ops = &clk_branch2_ops,
3140 		},
3141 	},
3142 };
3143 
3144 static struct clk_branch gcc_video_vcodec0_sys_clk = {
3145 	.halt_reg = 0x580a4,
3146 	.halt_check = BRANCH_HALT_DELAY,
3147 	.hwcg_reg = 0x580a4,
3148 	.hwcg_bit = 1,
3149 	.clkr = {
3150 		.enable_reg = 0x580a4,
3151 		.enable_mask = BIT(0),
3152 		.hw.init = &(struct clk_init_data){
3153 			.name = "gcc_video_vcodec0_sys_clk",
3154 			.parent_hws = (const struct clk_hw *[]){
3155 				&gcc_video_venus_clk_src.clkr.hw,
3156 			},
3157 			.num_parents = 1,
3158 			.flags = CLK_SET_RATE_PARENT,
3159 			.ops = &clk_branch2_ops,
3160 		},
3161 	},
3162 };
3163 
3164 static struct clk_branch gcc_video_venus_ctl_clk = {
3165 	.halt_reg = 0x5808c,
3166 	.halt_check = BRANCH_HALT,
3167 	.clkr = {
3168 		.enable_reg = 0x5808c,
3169 		.enable_mask = BIT(0),
3170 		.hw.init = &(struct clk_init_data){
3171 			.name = "gcc_video_venus_ctl_clk",
3172 			.parent_hws = (const struct clk_hw *[]){
3173 				&gcc_video_venus_clk_src.clkr.hw,
3174 			},
3175 			.num_parents = 1,
3176 			.flags = CLK_SET_RATE_PARENT,
3177 			.ops = &clk_branch2_ops,
3178 		},
3179 	},
3180 };
3181 
3182 static struct clk_branch gcc_video_xo_clk = {
3183 	.halt_reg = 0x17024,
3184 	.halt_check = BRANCH_HALT,
3185 	.clkr = {
3186 		.enable_reg = 0x17024,
3187 		.enable_mask = BIT(0),
3188 		.hw.init = &(struct clk_init_data){
3189 			.name = "gcc_video_xo_clk",
3190 			.ops = &clk_branch2_ops,
3191 		},
3192 	},
3193 };
3194 
3195 static struct gdsc gcc_camss_top_gdsc = {
3196 	.gdscr = 0x58004,
3197 	.pd = {
3198 		.name = "gcc_camss_top",
3199 	},
3200 	.pwrsts = PWRSTS_OFF_ON,
3201 };
3202 
3203 static struct gdsc gcc_ufs_phy_gdsc = {
3204 	.gdscr = 0x45004,
3205 	.pd = {
3206 		.name = "gcc_ufs_phy",
3207 	},
3208 	.pwrsts = PWRSTS_OFF_ON,
3209 };
3210 
3211 static struct gdsc gcc_usb30_prim_gdsc = {
3212 	.gdscr = 0x1a004,
3213 	.pd = {
3214 		.name = "gcc_usb30_prim",
3215 	},
3216 	.pwrsts = PWRSTS_OFF_ON,
3217 };
3218 
3219 static struct gdsc gcc_vcodec0_gdsc = {
3220 	.gdscr = 0x58098,
3221 	.pd = {
3222 		.name = "gcc_vcodec0",
3223 	},
3224 	.pwrsts = PWRSTS_OFF_ON,
3225 };
3226 
3227 static struct gdsc gcc_venus_gdsc = {
3228 	.gdscr = 0x5807c,
3229 	.pd = {
3230 		.name = "gcc_venus",
3231 	},
3232 	.pwrsts = PWRSTS_OFF_ON,
3233 };
3234 
3235 static struct gdsc hlos1_vote_turing_mmu_tbu1_gdsc = {
3236 	.gdscr = 0x7d060,
3237 	.pd = {
3238 		.name = "hlos1_vote_turing_mmu_tbu1",
3239 	},
3240 	.pwrsts = PWRSTS_OFF_ON,
3241 	.flags = VOTABLE,
3242 };
3243 
3244 static struct gdsc hlos1_vote_turing_mmu_tbu0_gdsc = {
3245 	.gdscr = 0x7d060,
3246 	.pd = {
3247 		.name = "hlos1_vote_turing_mmu_tbu0",
3248 	},
3249 	.pwrsts = PWRSTS_OFF_ON,
3250 	.flags = VOTABLE,
3251 };
3252 
3253 static struct gdsc hlos1_vote_mm_snoc_mmu_tbu_rt_gdsc = {
3254 	.gdscr = 0x7d074,
3255 	.pd = {
3256 		.name = "hlos1_vote_mm_snoc_mmu_tbu_rt",
3257 	},
3258 	.pwrsts = PWRSTS_OFF_ON,
3259 	.flags = VOTABLE,
3260 };
3261 
3262 static struct gdsc hlos1_vote_mm_snoc_mmu_tbu_nrt_gdsc = {
3263 	.gdscr = 0x7d078,
3264 	.pd = {
3265 		.name = "hlos1_vote_mm_snoc_mmu_tbu_nrt",
3266 	},
3267 	.pwrsts = PWRSTS_OFF_ON,
3268 	.flags = VOTABLE,
3269 };
3270 
3271 static struct clk_regmap *gcc_sm6115_clocks[] = {
3272 	[GCC_AHB2PHY_CSI_CLK] = &gcc_ahb2phy_csi_clk.clkr,
3273 	[GCC_AHB2PHY_USB_CLK] = &gcc_ahb2phy_usb_clk.clkr,
3274 	[GCC_BIMC_GPU_AXI_CLK] = &gcc_bimc_gpu_axi_clk.clkr,
3275 	[GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr,
3276 	[GCC_CAM_THROTTLE_NRT_CLK] = &gcc_cam_throttle_nrt_clk.clkr,
3277 	[GCC_CAM_THROTTLE_RT_CLK] = &gcc_cam_throttle_rt_clk.clkr,
3278 	[GCC_CAMERA_AHB_CLK] = &gcc_camera_ahb_clk.clkr,
3279 	[GCC_CAMERA_XO_CLK] = &gcc_camera_xo_clk.clkr,
3280 	[GCC_CAMSS_AXI_CLK] = &gcc_camss_axi_clk.clkr,
3281 	[GCC_CAMSS_AXI_CLK_SRC] = &gcc_camss_axi_clk_src.clkr,
3282 	[GCC_CAMSS_CAMNOC_ATB_CLK] = &gcc_camss_camnoc_atb_clk.clkr,
3283 	[GCC_CAMSS_CAMNOC_NTS_XO_CLK] = &gcc_camss_camnoc_nts_xo_clk.clkr,
3284 	[GCC_CAMSS_CCI_0_CLK] = &gcc_camss_cci_0_clk.clkr,
3285 	[GCC_CAMSS_CCI_CLK_SRC] = &gcc_camss_cci_clk_src.clkr,
3286 	[GCC_CAMSS_CPHY_0_CLK] = &gcc_camss_cphy_0_clk.clkr,
3287 	[GCC_CAMSS_CPHY_1_CLK] = &gcc_camss_cphy_1_clk.clkr,
3288 	[GCC_CAMSS_CPHY_2_CLK] = &gcc_camss_cphy_2_clk.clkr,
3289 	[GCC_CAMSS_CSI0PHYTIMER_CLK] = &gcc_camss_csi0phytimer_clk.clkr,
3290 	[GCC_CAMSS_CSI0PHYTIMER_CLK_SRC] = &gcc_camss_csi0phytimer_clk_src.clkr,
3291 	[GCC_CAMSS_CSI1PHYTIMER_CLK] = &gcc_camss_csi1phytimer_clk.clkr,
3292 	[GCC_CAMSS_CSI1PHYTIMER_CLK_SRC] = &gcc_camss_csi1phytimer_clk_src.clkr,
3293 	[GCC_CAMSS_CSI2PHYTIMER_CLK] = &gcc_camss_csi2phytimer_clk.clkr,
3294 	[GCC_CAMSS_CSI2PHYTIMER_CLK_SRC] = &gcc_camss_csi2phytimer_clk_src.clkr,
3295 	[GCC_CAMSS_MCLK0_CLK] = &gcc_camss_mclk0_clk.clkr,
3296 	[GCC_CAMSS_MCLK0_CLK_SRC] = &gcc_camss_mclk0_clk_src.clkr,
3297 	[GCC_CAMSS_MCLK1_CLK] = &gcc_camss_mclk1_clk.clkr,
3298 	[GCC_CAMSS_MCLK1_CLK_SRC] = &gcc_camss_mclk1_clk_src.clkr,
3299 	[GCC_CAMSS_MCLK2_CLK] = &gcc_camss_mclk2_clk.clkr,
3300 	[GCC_CAMSS_MCLK2_CLK_SRC] = &gcc_camss_mclk2_clk_src.clkr,
3301 	[GCC_CAMSS_MCLK3_CLK] = &gcc_camss_mclk3_clk.clkr,
3302 	[GCC_CAMSS_MCLK3_CLK_SRC] = &gcc_camss_mclk3_clk_src.clkr,
3303 	[GCC_CAMSS_NRT_AXI_CLK] = &gcc_camss_nrt_axi_clk.clkr,
3304 	[GCC_CAMSS_OPE_AHB_CLK] = &gcc_camss_ope_ahb_clk.clkr,
3305 	[GCC_CAMSS_OPE_AHB_CLK_SRC] = &gcc_camss_ope_ahb_clk_src.clkr,
3306 	[GCC_CAMSS_OPE_CLK] = &gcc_camss_ope_clk.clkr,
3307 	[GCC_CAMSS_OPE_CLK_SRC] = &gcc_camss_ope_clk_src.clkr,
3308 	[GCC_CAMSS_RT_AXI_CLK] = &gcc_camss_rt_axi_clk.clkr,
3309 	[GCC_CAMSS_TFE_0_CLK] = &gcc_camss_tfe_0_clk.clkr,
3310 	[GCC_CAMSS_TFE_0_CLK_SRC] = &gcc_camss_tfe_0_clk_src.clkr,
3311 	[GCC_CAMSS_TFE_0_CPHY_RX_CLK] = &gcc_camss_tfe_0_cphy_rx_clk.clkr,
3312 	[GCC_CAMSS_TFE_0_CSID_CLK] = &gcc_camss_tfe_0_csid_clk.clkr,
3313 	[GCC_CAMSS_TFE_0_CSID_CLK_SRC] = &gcc_camss_tfe_0_csid_clk_src.clkr,
3314 	[GCC_CAMSS_TFE_1_CLK] = &gcc_camss_tfe_1_clk.clkr,
3315 	[GCC_CAMSS_TFE_1_CLK_SRC] = &gcc_camss_tfe_1_clk_src.clkr,
3316 	[GCC_CAMSS_TFE_1_CPHY_RX_CLK] = &gcc_camss_tfe_1_cphy_rx_clk.clkr,
3317 	[GCC_CAMSS_TFE_1_CSID_CLK] = &gcc_camss_tfe_1_csid_clk.clkr,
3318 	[GCC_CAMSS_TFE_1_CSID_CLK_SRC] = &gcc_camss_tfe_1_csid_clk_src.clkr,
3319 	[GCC_CAMSS_TFE_2_CLK] = &gcc_camss_tfe_2_clk.clkr,
3320 	[GCC_CAMSS_TFE_2_CLK_SRC] = &gcc_camss_tfe_2_clk_src.clkr,
3321 	[GCC_CAMSS_TFE_2_CPHY_RX_CLK] = &gcc_camss_tfe_2_cphy_rx_clk.clkr,
3322 	[GCC_CAMSS_TFE_2_CSID_CLK] = &gcc_camss_tfe_2_csid_clk.clkr,
3323 	[GCC_CAMSS_TFE_2_CSID_CLK_SRC] = &gcc_camss_tfe_2_csid_clk_src.clkr,
3324 	[GCC_CAMSS_TFE_CPHY_RX_CLK_SRC] = &gcc_camss_tfe_cphy_rx_clk_src.clkr,
3325 	[GCC_CAMSS_TOP_AHB_CLK] = &gcc_camss_top_ahb_clk.clkr,
3326 	[GCC_CAMSS_TOP_AHB_CLK_SRC] = &gcc_camss_top_ahb_clk_src.clkr,
3327 	[GCC_CFG_NOC_USB3_PRIM_AXI_CLK] = &gcc_cfg_noc_usb3_prim_axi_clk.clkr,
3328 	[GCC_CPUSS_GNOC_CLK] = &gcc_cpuss_gnoc_clk.clkr,
3329 	[GCC_DISP_AHB_CLK] = &gcc_disp_ahb_clk.clkr,
3330 	[GCC_DISP_GPLL0_CLK_SRC] = &gcc_disp_gpll0_clk_src.clkr,
3331 	[GCC_DISP_GPLL0_DIV_CLK_SRC] = &gcc_disp_gpll0_div_clk_src.clkr,
3332 	[GCC_DISP_HF_AXI_CLK] = &gcc_disp_hf_axi_clk.clkr,
3333 	[GCC_DISP_THROTTLE_CORE_CLK] = &gcc_disp_throttle_core_clk.clkr,
3334 	[GCC_DISP_XO_CLK] = &gcc_disp_xo_clk.clkr,
3335 	[GCC_GP1_CLK] = &gcc_gp1_clk.clkr,
3336 	[GCC_GP1_CLK_SRC] = &gcc_gp1_clk_src.clkr,
3337 	[GCC_GP2_CLK] = &gcc_gp2_clk.clkr,
3338 	[GCC_GP2_CLK_SRC] = &gcc_gp2_clk_src.clkr,
3339 	[GCC_GP3_CLK] = &gcc_gp3_clk.clkr,
3340 	[GCC_GP3_CLK_SRC] = &gcc_gp3_clk_src.clkr,
3341 	[GCC_GPU_CFG_AHB_CLK] = &gcc_gpu_cfg_ahb_clk.clkr,
3342 	[GCC_GPU_GPLL0_CLK_SRC] = &gcc_gpu_gpll0_clk_src.clkr,
3343 	[GCC_GPU_GPLL0_DIV_CLK_SRC] = &gcc_gpu_gpll0_div_clk_src.clkr,
3344 	[GCC_GPU_IREF_CLK] = &gcc_gpu_iref_clk.clkr,
3345 	[GCC_GPU_MEMNOC_GFX_CLK] = &gcc_gpu_memnoc_gfx_clk.clkr,
3346 	[GCC_GPU_SNOC_DVM_GFX_CLK] = &gcc_gpu_snoc_dvm_gfx_clk.clkr,
3347 	[GCC_GPU_THROTTLE_CORE_CLK] = &gcc_gpu_throttle_core_clk.clkr,
3348 	[GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr,
3349 	[GCC_PDM2_CLK_SRC] = &gcc_pdm2_clk_src.clkr,
3350 	[GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr,
3351 	[GCC_PDM_XO4_CLK] = &gcc_pdm_xo4_clk.clkr,
3352 	[GCC_PRNG_AHB_CLK] = &gcc_prng_ahb_clk.clkr,
3353 	[GCC_QMIP_CAMERA_NRT_AHB_CLK] = &gcc_qmip_camera_nrt_ahb_clk.clkr,
3354 	[GCC_QMIP_CAMERA_RT_AHB_CLK] = &gcc_qmip_camera_rt_ahb_clk.clkr,
3355 	[GCC_QMIP_DISP_AHB_CLK] = &gcc_qmip_disp_ahb_clk.clkr,
3356 	[GCC_QMIP_GPU_CFG_AHB_CLK] = &gcc_qmip_gpu_cfg_ahb_clk.clkr,
3357 	[GCC_QMIP_VIDEO_VCODEC_AHB_CLK] = &gcc_qmip_video_vcodec_ahb_clk.clkr,
3358 	[GCC_QUPV3_WRAP0_CORE_2X_CLK] = &gcc_qupv3_wrap0_core_2x_clk.clkr,
3359 	[GCC_QUPV3_WRAP0_CORE_CLK] = &gcc_qupv3_wrap0_core_clk.clkr,
3360 	[GCC_QUPV3_WRAP0_S0_CLK] = &gcc_qupv3_wrap0_s0_clk.clkr,
3361 	[GCC_QUPV3_WRAP0_S0_CLK_SRC] = &gcc_qupv3_wrap0_s0_clk_src.clkr,
3362 	[GCC_QUPV3_WRAP0_S1_CLK] = &gcc_qupv3_wrap0_s1_clk.clkr,
3363 	[GCC_QUPV3_WRAP0_S1_CLK_SRC] = &gcc_qupv3_wrap0_s1_clk_src.clkr,
3364 	[GCC_QUPV3_WRAP0_S2_CLK] = &gcc_qupv3_wrap0_s2_clk.clkr,
3365 	[GCC_QUPV3_WRAP0_S2_CLK_SRC] = &gcc_qupv3_wrap0_s2_clk_src.clkr,
3366 	[GCC_QUPV3_WRAP0_S3_CLK] = &gcc_qupv3_wrap0_s3_clk.clkr,
3367 	[GCC_QUPV3_WRAP0_S3_CLK_SRC] = &gcc_qupv3_wrap0_s3_clk_src.clkr,
3368 	[GCC_QUPV3_WRAP0_S4_CLK] = &gcc_qupv3_wrap0_s4_clk.clkr,
3369 	[GCC_QUPV3_WRAP0_S4_CLK_SRC] = &gcc_qupv3_wrap0_s4_clk_src.clkr,
3370 	[GCC_QUPV3_WRAP0_S5_CLK] = &gcc_qupv3_wrap0_s5_clk.clkr,
3371 	[GCC_QUPV3_WRAP0_S5_CLK_SRC] = &gcc_qupv3_wrap0_s5_clk_src.clkr,
3372 	[GCC_QUPV3_WRAP_0_M_AHB_CLK] = &gcc_qupv3_wrap_0_m_ahb_clk.clkr,
3373 	[GCC_QUPV3_WRAP_0_S_AHB_CLK] = &gcc_qupv3_wrap_0_s_ahb_clk.clkr,
3374 	[GCC_SDCC1_AHB_CLK] = &gcc_sdcc1_ahb_clk.clkr,
3375 	[GCC_SDCC1_APPS_CLK] = &gcc_sdcc1_apps_clk.clkr,
3376 	[GCC_SDCC1_APPS_CLK_SRC] = &gcc_sdcc1_apps_clk_src.clkr,
3377 	[GCC_SDCC1_ICE_CORE_CLK] = &gcc_sdcc1_ice_core_clk.clkr,
3378 	[GCC_SDCC1_ICE_CORE_CLK_SRC] = &gcc_sdcc1_ice_core_clk_src.clkr,
3379 	[GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr,
3380 	[GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr,
3381 	[GCC_SDCC2_APPS_CLK_SRC] = &gcc_sdcc2_apps_clk_src.clkr,
3382 	[GCC_SYS_NOC_CPUSS_AHB_CLK] = &gcc_sys_noc_cpuss_ahb_clk.clkr,
3383 	[GCC_SYS_NOC_UFS_PHY_AXI_CLK] = &gcc_sys_noc_ufs_phy_axi_clk.clkr,
3384 	[GCC_SYS_NOC_USB3_PRIM_AXI_CLK] = &gcc_sys_noc_usb3_prim_axi_clk.clkr,
3385 	[GCC_UFS_CLKREF_CLK] = &gcc_ufs_clkref_clk.clkr,
3386 	[GCC_UFS_PHY_AHB_CLK] = &gcc_ufs_phy_ahb_clk.clkr,
3387 	[GCC_UFS_PHY_AXI_CLK] = &gcc_ufs_phy_axi_clk.clkr,
3388 	[GCC_UFS_PHY_AXI_CLK_SRC] = &gcc_ufs_phy_axi_clk_src.clkr,
3389 	[GCC_UFS_PHY_ICE_CORE_CLK] = &gcc_ufs_phy_ice_core_clk.clkr,
3390 	[GCC_UFS_PHY_ICE_CORE_CLK_SRC] = &gcc_ufs_phy_ice_core_clk_src.clkr,
3391 	[GCC_UFS_PHY_PHY_AUX_CLK] = &gcc_ufs_phy_phy_aux_clk.clkr,
3392 	[GCC_UFS_PHY_PHY_AUX_CLK_SRC] = &gcc_ufs_phy_phy_aux_clk_src.clkr,
3393 	[GCC_UFS_PHY_RX_SYMBOL_0_CLK] = &gcc_ufs_phy_rx_symbol_0_clk.clkr,
3394 	[GCC_UFS_PHY_TX_SYMBOL_0_CLK] = &gcc_ufs_phy_tx_symbol_0_clk.clkr,
3395 	[GCC_UFS_PHY_UNIPRO_CORE_CLK] = &gcc_ufs_phy_unipro_core_clk.clkr,
3396 	[GCC_UFS_PHY_UNIPRO_CORE_CLK_SRC] =
3397 		&gcc_ufs_phy_unipro_core_clk_src.clkr,
3398 	[GCC_USB30_PRIM_MASTER_CLK] = &gcc_usb30_prim_master_clk.clkr,
3399 	[GCC_USB30_PRIM_MASTER_CLK_SRC] = &gcc_usb30_prim_master_clk_src.clkr,
3400 	[GCC_USB30_PRIM_MOCK_UTMI_CLK] = &gcc_usb30_prim_mock_utmi_clk.clkr,
3401 	[GCC_USB30_PRIM_MOCK_UTMI_CLK_SRC] =
3402 		&gcc_usb30_prim_mock_utmi_clk_src.clkr,
3403 	[GCC_USB30_PRIM_MOCK_UTMI_POSTDIV_CLK_SRC] =
3404 		&gcc_usb30_prim_mock_utmi_postdiv_clk_src.clkr,
3405 	[GCC_USB30_PRIM_SLEEP_CLK] = &gcc_usb30_prim_sleep_clk.clkr,
3406 	[GCC_USB3_PRIM_CLKREF_CLK] = &gcc_usb3_prim_clkref_clk.clkr,
3407 	[GCC_USB3_PRIM_PHY_AUX_CLK_SRC] = &gcc_usb3_prim_phy_aux_clk_src.clkr,
3408 	[GCC_USB3_PRIM_PHY_COM_AUX_CLK] = &gcc_usb3_prim_phy_com_aux_clk.clkr,
3409 	[GCC_USB3_PRIM_PHY_PIPE_CLK] = &gcc_usb3_prim_phy_pipe_clk.clkr,
3410 	[GCC_VCODEC0_AXI_CLK] = &gcc_vcodec0_axi_clk.clkr,
3411 	[GCC_VENUS_AHB_CLK] = &gcc_venus_ahb_clk.clkr,
3412 	[GCC_VENUS_CTL_AXI_CLK] = &gcc_venus_ctl_axi_clk.clkr,
3413 	[GCC_VIDEO_AHB_CLK] = &gcc_video_ahb_clk.clkr,
3414 	[GCC_VIDEO_AXI0_CLK] = &gcc_video_axi0_clk.clkr,
3415 	[GCC_VIDEO_THROTTLE_CORE_CLK] = &gcc_video_throttle_core_clk.clkr,
3416 	[GCC_VIDEO_VCODEC0_SYS_CLK] = &gcc_video_vcodec0_sys_clk.clkr,
3417 	[GCC_VIDEO_VENUS_CLK_SRC] = &gcc_video_venus_clk_src.clkr,
3418 	[GCC_VIDEO_VENUS_CTL_CLK] = &gcc_video_venus_ctl_clk.clkr,
3419 	[GCC_VIDEO_XO_CLK] = &gcc_video_xo_clk.clkr,
3420 	[GPLL0] = &gpll0.clkr,
3421 	[GPLL0_OUT_AUX2] = &gpll0_out_aux2.clkr,
3422 	[GPLL0_OUT_MAIN] = &gpll0_out_main.clkr,
3423 	[GPLL10] = &gpll10.clkr,
3424 	[GPLL10_OUT_MAIN] = &gpll10_out_main.clkr,
3425 	[GPLL11] = &gpll11.clkr,
3426 	[GPLL11_OUT_MAIN] = &gpll11_out_main.clkr,
3427 	[GPLL3] = &gpll3.clkr,
3428 	[GPLL4] = &gpll4.clkr,
3429 	[GPLL4_OUT_MAIN] = &gpll4_out_main.clkr,
3430 	[GPLL6] = &gpll6.clkr,
3431 	[GPLL6_OUT_MAIN] = &gpll6_out_main.clkr,
3432 	[GPLL7] = &gpll7.clkr,
3433 	[GPLL7_OUT_MAIN] = &gpll7_out_main.clkr,
3434 	[GPLL8] = &gpll8.clkr,
3435 	[GPLL8_OUT_MAIN] = &gpll8_out_main.clkr,
3436 	[GPLL9] = &gpll9.clkr,
3437 	[GPLL9_OUT_MAIN] = &gpll9_out_main.clkr,
3438 };
3439 
3440 static const struct qcom_reset_map gcc_sm6115_resets[] = {
3441 	[GCC_QUSB2PHY_PRIM_BCR] = { 0x1c000 },
3442 	[GCC_QUSB2PHY_SEC_BCR] = { 0x1c004 },
3443 	[GCC_SDCC1_BCR] = { 0x38000 },
3444 	[GCC_SDCC2_BCR] = { 0x1e000 },
3445 	[GCC_UFS_PHY_BCR] = { 0x45000 },
3446 	[GCC_USB30_PRIM_BCR] = { 0x1a000 },
3447 	[GCC_USB_PHY_CFG_AHB2PHY_BCR] = { 0x1d000 },
3448 	[GCC_USB3PHY_PHY_PRIM_SP0_BCR] = { 0x1b008 },
3449 	[GCC_USB3_PHY_PRIM_SP0_BCR] = { 0x1b000 },
3450 	[GCC_VCODEC0_BCR] = { 0x58094 },
3451 	[GCC_VENUS_BCR] = { 0x58078 },
3452 	[GCC_VIDEO_INTERFACE_BCR] = { 0x6e000 },
3453 };
3454 
3455 static struct gdsc *gcc_sm6115_gdscs[] = {
3456 	[GCC_CAMSS_TOP_GDSC] = &gcc_camss_top_gdsc,
3457 	[GCC_UFS_PHY_GDSC] = &gcc_ufs_phy_gdsc,
3458 	[GCC_USB30_PRIM_GDSC] = &gcc_usb30_prim_gdsc,
3459 	[GCC_VCODEC0_GDSC] = &gcc_vcodec0_gdsc,
3460 	[GCC_VENUS_GDSC] = &gcc_venus_gdsc,
3461 	[HLOS1_VOTE_TURING_MMU_TBU1_GDSC] = &hlos1_vote_turing_mmu_tbu1_gdsc,
3462 	[HLOS1_VOTE_TURING_MMU_TBU0_GDSC] = &hlos1_vote_turing_mmu_tbu0_gdsc,
3463 	[HLOS1_VOTE_MM_SNOC_MMU_TBU_RT_GDSC] = &hlos1_vote_mm_snoc_mmu_tbu_rt_gdsc,
3464 	[HLOS1_VOTE_MM_SNOC_MMU_TBU_NRT_GDSC] = &hlos1_vote_mm_snoc_mmu_tbu_nrt_gdsc,
3465 };
3466 
3467 static const struct clk_rcg_dfs_data gcc_dfs_clocks[] = {
3468 	DEFINE_RCG_DFS(gcc_qupv3_wrap0_s0_clk_src),
3469 	DEFINE_RCG_DFS(gcc_qupv3_wrap0_s1_clk_src),
3470 	DEFINE_RCG_DFS(gcc_qupv3_wrap0_s2_clk_src),
3471 	DEFINE_RCG_DFS(gcc_qupv3_wrap0_s3_clk_src),
3472 	DEFINE_RCG_DFS(gcc_qupv3_wrap0_s4_clk_src),
3473 	DEFINE_RCG_DFS(gcc_qupv3_wrap0_s5_clk_src),
3474 };
3475 
3476 static const struct regmap_config gcc_sm6115_regmap_config = {
3477 	.reg_bits = 32,
3478 	.reg_stride = 4,
3479 	.val_bits = 32,
3480 	.max_register = 0xc7000,
3481 	.fast_io = true,
3482 };
3483 
3484 static const struct qcom_cc_desc gcc_sm6115_desc = {
3485 	.config = &gcc_sm6115_regmap_config,
3486 	.clks = gcc_sm6115_clocks,
3487 	.num_clks = ARRAY_SIZE(gcc_sm6115_clocks),
3488 	.resets = gcc_sm6115_resets,
3489 	.num_resets = ARRAY_SIZE(gcc_sm6115_resets),
3490 	.gdscs = gcc_sm6115_gdscs,
3491 	.num_gdscs = ARRAY_SIZE(gcc_sm6115_gdscs),
3492 };
3493 
3494 static const struct of_device_id gcc_sm6115_match_table[] = {
3495 	{ .compatible = "qcom,gcc-sm6115" },
3496 	{ }
3497 };
3498 MODULE_DEVICE_TABLE(of, gcc_sm6115_match_table);
3499 
3500 static int gcc_sm6115_probe(struct platform_device *pdev)
3501 {
3502 	struct regmap *regmap;
3503 	int ret;
3504 
3505 	regmap = qcom_cc_map(pdev, &gcc_sm6115_desc);
3506 	if (IS_ERR(regmap))
3507 		return PTR_ERR(regmap);
3508 
3509 	ret = qcom_cc_register_rcg_dfs(regmap, gcc_dfs_clocks,
3510 			ARRAY_SIZE(gcc_dfs_clocks));
3511 	if (ret)
3512 		return ret;
3513 
3514 	clk_alpha_pll_configure(&gpll8, regmap, &gpll8_config);
3515 	clk_alpha_pll_configure(&gpll9, regmap, &gpll9_config);
3516 	clk_alpha_pll_configure(&gpll10, regmap, &gpll10_config);
3517 	clk_alpha_pll_configure(&gpll11, regmap, &gpll11_config);
3518 
3519 	return qcom_cc_really_probe(pdev, &gcc_sm6115_desc, regmap);
3520 }
3521 
3522 static struct platform_driver gcc_sm6115_driver = {
3523 	.probe = gcc_sm6115_probe,
3524 	.driver = {
3525 		.name = "gcc-sm6115",
3526 		.of_match_table = gcc_sm6115_match_table,
3527 	},
3528 };
3529 
3530 static int __init gcc_sm6115_init(void)
3531 {
3532 	return platform_driver_register(&gcc_sm6115_driver);
3533 }
3534 subsys_initcall(gcc_sm6115_init);
3535 
3536 static void __exit gcc_sm6115_exit(void)
3537 {
3538 	platform_driver_unregister(&gcc_sm6115_driver);
3539 }
3540 module_exit(gcc_sm6115_exit);
3541 
3542 MODULE_DESCRIPTION("QTI GCC SM6115 and SM4250 Driver");
3543 MODULE_LICENSE("GPL v2");
3544 MODULE_ALIAS("platform:gcc-sm6115");
3545