xref: /linux/drivers/clk/qcom/gcc-shikra.c (revision 502d45774af09f1c681c754c4b7cdfb5d7f72fd9)
1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3  * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
4  */
5 
6 #include <linux/clk-provider.h>
7 #include <linux/module.h>
8 #include <linux/platform_device.h>
9 #include <linux/regmap.h>
10 
11 #include <dt-bindings/clock/qcom,shikra-gcc.h>
12 
13 #include "clk-alpha-pll.h"
14 #include "clk-branch.h"
15 #include "clk-pll.h"
16 #include "clk-rcg.h"
17 #include "clk-regmap.h"
18 #include "clk-regmap-divider.h"
19 #include "clk-regmap-mux.h"
20 #include "clk-regmap-phy-mux.h"
21 #include "common.h"
22 #include "gdsc.h"
23 #include "reset.h"
24 
25 enum {
26 	DT_BI_TCXO,
27 	DT_SLEEP_CLK,
28 	DT_EMAC0_SGMIIPHY_RCLK,
29 	DT_EMAC0_SGMIIPHY_TCLK,
30 	DT_EMAC1_SGMIIPHY_RCLK,
31 	DT_EMAC1_SGMIIPHY_TCLK,
32 	DT_PCIE_PIPE_CLK,
33 	DT_USB3_PHY_WRAPPER_GCC_USB30_PIPE_CLK,
34 };
35 
36 enum {
37 	P_BI_TCXO,
38 	P_EMAC0_SGMIIPHY_RCLK,
39 	P_EMAC0_SGMIIPHY_TCLK,
40 	P_EMAC1_SGMIIPHY_RCLK,
41 	P_EMAC1_SGMIIPHY_TCLK,
42 	P_GPLL0_OUT_AUX2,
43 	P_GPLL0_OUT_EARLY,
44 	P_GPLL10_OUT_MAIN,
45 	P_GPLL11_OUT_AUX,
46 	P_GPLL11_OUT_AUX2,
47 	P_GPLL11_OUT_MAIN,
48 	P_GPLL12_OUT_AUX2,
49 	P_GPLL12_OUT_EARLY,
50 	P_GPLL3_OUT_EARLY,
51 	P_GPLL3_OUT_MAIN,
52 	P_GPLL4_OUT_MAIN,
53 	P_GPLL5_OUT_MAIN,
54 	P_GPLL6_OUT_EARLY,
55 	P_GPLL6_OUT_MAIN,
56 	P_GPLL7_OUT_MAIN,
57 	P_GPLL8_OUT_EARLY,
58 	P_GPLL8_OUT_MAIN,
59 	P_GPLL9_OUT_EARLY,
60 	P_GPLL9_OUT_MAIN,
61 	P_PCIE_PIPE_CLK,
62 	P_SLEEP_CLK,
63 	P_USB3_PHY_WRAPPER_GCC_USB30_PIPE_CLK,
64 };
65 
66 static const struct pll_vco brammo_vco[] = {
67 	{ 500000000, 1250000000, 0 },
68 };
69 
70 static const struct pll_vco default_vco[] = {
71 	{ 500000000, 1000000000, 2 },
72 };
73 
74 static const struct pll_vco spark_vco[] = {
75 	{ 750000000, 1500000000, 1 },
76 };
77 
78 static struct clk_alpha_pll gpll0 = {
79 	.offset = 0x0,
80 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT_EVO],
81 	.clkr = {
82 		.enable_reg = 0x79000,
83 		.enable_mask = BIT(0),
84 		.hw.init = &(const struct clk_init_data) {
85 			.name = "gpll0",
86 			.parent_data = &(const struct clk_parent_data) {
87 				.index = DT_BI_TCXO,
88 			},
89 			.num_parents = 1,
90 			.ops = &clk_alpha_pll_fixed_ops,
91 		},
92 	},
93 };
94 
95 static const struct clk_div_table post_div_table_gpll0_out_aux2[] = {
96 	{ 0x1, 2 },
97 	{ }
98 };
99 
100 static struct clk_alpha_pll_postdiv gpll0_out_aux2 = {
101 	.offset = 0x0,
102 	.post_div_shift = 8,
103 	.post_div_table = post_div_table_gpll0_out_aux2,
104 	.num_post_div = ARRAY_SIZE(post_div_table_gpll0_out_aux2),
105 	.width = 4,
106 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT_EVO],
107 	.clkr.hw.init = &(const struct clk_init_data) {
108 		.name = "gpll0_out_aux2",
109 		.parent_hws = (const struct clk_hw*[]) {
110 			&gpll0.clkr.hw,
111 		},
112 		.num_parents = 1,
113 		.ops = &clk_alpha_pll_postdiv_ro_ops,
114 	},
115 };
116 
117 /* 1152.0 MHz Configuration */
118 static const struct alpha_pll_config gpll10_config = {
119 	.l = 0x3c,
120 	.alpha = 0x0,
121 	.vco_val = BIT(20),
122 	.vco_mask = GENMASK(21, 20),
123 	.main_output_mask = BIT(0),
124 	.config_ctl_val = 0x4001055b,
125 	.test_ctl_hi_val = 0x1,
126 };
127 
128 static struct clk_alpha_pll gpll10 = {
129 	.offset = 0xa000,
130 	.config = &gpll10_config,
131 	.vco_table = spark_vco,
132 	.num_vco = ARRAY_SIZE(spark_vco),
133 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT_EVO],
134 	.clkr = {
135 		.enable_reg = 0x79000,
136 		.enable_mask = BIT(10),
137 		.hw.init = &(const struct clk_init_data) {
138 			.name = "gpll10",
139 			.parent_data = &(const struct clk_parent_data) {
140 				.index = DT_BI_TCXO,
141 			},
142 			.num_parents = 1,
143 			.ops = &clk_alpha_pll_ops,
144 		},
145 	},
146 };
147 
148 /* 600.0 MHz Configuration */
149 static const struct alpha_pll_config gpll11_config = {
150 	.l = 0x1f,
151 	.alpha = 0x0,
152 	.alpha_hi = 0x40,
153 	.alpha_en_mask = BIT(24),
154 	.vco_val = BIT(21),
155 	.vco_mask = GENMASK(21, 20),
156 	.main_output_mask = BIT(0),
157 	.config_ctl_val = 0x4001055b,
158 	.test_ctl_hi_val = 0x1,
159 };
160 
161 static struct clk_alpha_pll gpll11 = {
162 	.offset = 0xb000,
163 	.config = &gpll11_config,
164 	.vco_table = default_vco,
165 	.num_vco = ARRAY_SIZE(default_vco),
166 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT_EVO],
167 	.flags = SUPPORTS_DYNAMIC_UPDATE,
168 	.clkr = {
169 		.enable_reg = 0x79000,
170 		.enable_mask = BIT(11),
171 		.hw.init = &(const struct clk_init_data) {
172 			.name = "gpll11",
173 			.parent_data = &(const struct clk_parent_data) {
174 				.index = DT_BI_TCXO,
175 			},
176 			.num_parents = 1,
177 			.ops = &clk_alpha_pll_ops,
178 		},
179 	},
180 };
181 
182 static struct clk_alpha_pll gpll12 = {
183 	.offset = 0xc000,
184 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT_EVO],
185 	.clkr = {
186 		.enable_reg = 0x79000,
187 		.enable_mask = BIT(12),
188 		.hw.init = &(const struct clk_init_data) {
189 			.name = "gpll12",
190 			.parent_data = &(const struct clk_parent_data) {
191 				.index = DT_BI_TCXO,
192 			},
193 			.num_parents = 1,
194 			.ops = &clk_alpha_pll_fixed_ops,
195 		},
196 	},
197 };
198 
199 static const struct clk_div_table post_div_table_gpll12_out_aux2[] = {
200 	{ 0x1, 2 },
201 	{ }
202 };
203 
204 static struct clk_alpha_pll_postdiv gpll12_out_aux2 = {
205 	.offset = 0xc000,
206 	.post_div_shift = 8,
207 	.post_div_table = post_div_table_gpll12_out_aux2,
208 	.num_post_div = ARRAY_SIZE(post_div_table_gpll12_out_aux2),
209 	.width = 4,
210 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT_EVO],
211 	.clkr.hw.init = &(const struct clk_init_data) {
212 		.name = "gpll12_out_aux2",
213 		.parent_hws = (const struct clk_hw*[]) {
214 			&gpll12.clkr.hw,
215 		},
216 		.num_parents = 1,
217 		.ops = &clk_alpha_pll_postdiv_ro_ops,
218 	},
219 };
220 
221 static struct clk_alpha_pll gpll3 = {
222 	.offset = 0x3000,
223 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT_EVO],
224 	.clkr = {
225 		.enable_reg = 0x79000,
226 		.enable_mask = BIT(3),
227 		.hw.init = &(const struct clk_init_data) {
228 			.name = "gpll3",
229 			.parent_data = &(const struct clk_parent_data) {
230 				.index = DT_BI_TCXO,
231 			},
232 			.num_parents = 1,
233 			.ops = &clk_alpha_pll_fixed_ops,
234 		},
235 	},
236 };
237 
238 static const struct clk_div_table post_div_table_gpll3_out_main[] = {
239 	{ 0x1, 2 },
240 	{ }
241 };
242 
243 static struct clk_alpha_pll_postdiv gpll3_out_main = {
244 	.offset = 0x3000,
245 	.post_div_shift = 8,
246 	.post_div_table = post_div_table_gpll3_out_main,
247 	.num_post_div = ARRAY_SIZE(post_div_table_gpll3_out_main),
248 	.width = 4,
249 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT_EVO],
250 	.clkr.hw.init = &(const struct clk_init_data) {
251 		.name = "gpll3_out_main",
252 		.parent_hws = (const struct clk_hw*[]) {
253 			&gpll3.clkr.hw,
254 		},
255 		.num_parents = 1,
256 		.ops = &clk_alpha_pll_postdiv_ro_ops,
257 	},
258 };
259 
260 static struct clk_alpha_pll gpll4 = {
261 	.offset = 0x4000,
262 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT_EVO],
263 	.clkr = {
264 		.enable_reg = 0x79000,
265 		.enable_mask = BIT(4),
266 		.hw.init = &(const struct clk_init_data) {
267 			.name = "gpll4",
268 			.parent_data = &(const struct clk_parent_data) {
269 				.index = DT_BI_TCXO,
270 			},
271 			.num_parents = 1,
272 			.ops = &clk_alpha_pll_fixed_ops,
273 		},
274 	},
275 };
276 
277 static struct clk_alpha_pll gpll5 = {
278 	.offset = 0x5000,
279 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT_EVO],
280 	.clkr = {
281 		.enable_reg = 0x79000,
282 		.enable_mask = BIT(5),
283 		.hw.init = &(const struct clk_init_data) {
284 			.name = "gpll5",
285 			.parent_data = &(const struct clk_parent_data) {
286 				.index = DT_BI_TCXO,
287 			},
288 			.num_parents = 1,
289 			.ops = &clk_alpha_pll_fixed_ops,
290 		},
291 	},
292 };
293 
294 static struct clk_alpha_pll gpll6 = {
295 	.offset = 0x6000,
296 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT_EVO],
297 	.clkr = {
298 		.enable_reg = 0x79000,
299 		.enable_mask = BIT(6),
300 		.hw.init = &(const struct clk_init_data) {
301 			.name = "gpll6",
302 			.parent_data = &(const struct clk_parent_data) {
303 				.index = DT_BI_TCXO,
304 			},
305 			.num_parents = 1,
306 			.ops = &clk_alpha_pll_fixed_ops,
307 		},
308 	},
309 };
310 
311 static const struct clk_div_table post_div_table_gpll6_out_main[] = {
312 	{ 0x1, 2 },
313 	{ }
314 };
315 
316 static struct clk_alpha_pll_postdiv gpll6_out_main = {
317 	.offset = 0x6000,
318 	.post_div_shift = 8,
319 	.post_div_table = post_div_table_gpll6_out_main,
320 	.num_post_div = ARRAY_SIZE(post_div_table_gpll6_out_main),
321 	.width = 4,
322 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT_EVO],
323 	.clkr.hw.init = &(const struct clk_init_data) {
324 		.name = "gpll6_out_main",
325 		.parent_hws = (const struct clk_hw*[]) {
326 			&gpll6.clkr.hw,
327 		},
328 		.num_parents = 1,
329 		.ops = &clk_alpha_pll_postdiv_ro_ops,
330 	},
331 };
332 
333 static struct clk_alpha_pll gpll7 = {
334 	.offset = 0x7000,
335 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT_EVO],
336 	.clkr = {
337 		.enable_reg = 0x79000,
338 		.enable_mask = BIT(7),
339 		.hw.init = &(const struct clk_init_data) {
340 			.name = "gpll7",
341 			.parent_data = &(const struct clk_parent_data) {
342 				.index = DT_BI_TCXO,
343 			},
344 			.num_parents = 1,
345 			.ops = &clk_alpha_pll_fixed_ops,
346 		},
347 	},
348 };
349 
350 /* 533.2 MHz Configuration */
351 static const struct alpha_pll_config gpll8_config = {
352 	.l = 0x1b,
353 	.alpha = 0x55555555,
354 	.alpha_hi = 0xc5,
355 	.alpha_en_mask = BIT(24),
356 	.vco_val = BIT(21),
357 	.vco_mask = GENMASK(21, 20),
358 	.main_output_mask = BIT(0),
359 	.early_output_mask = BIT(3),
360 	.post_div_val = BIT(8),
361 	.post_div_mask = GENMASK(11, 8),
362 	.config_ctl_val = 0x4001055b,
363 	.test_ctl_hi_val = 0x1,
364 };
365 
366 static struct clk_alpha_pll gpll8 = {
367 	.offset = 0x8000,
368 	.config = &gpll8_config,
369 	.vco_table = default_vco,
370 	.num_vco = ARRAY_SIZE(default_vco),
371 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT_EVO],
372 	.flags = SUPPORTS_DYNAMIC_UPDATE,
373 	.clkr = {
374 		.enable_reg = 0x79000,
375 		.enable_mask = BIT(8),
376 		.hw.init = &(const struct clk_init_data) {
377 			.name = "gpll8",
378 			.parent_data = &(const struct clk_parent_data) {
379 				.index = DT_BI_TCXO,
380 			},
381 			.num_parents = 1,
382 			.ops = &clk_alpha_pll_ops,
383 		},
384 	},
385 };
386 
387 static const struct clk_div_table post_div_table_gpll8_out_main[] = {
388 	{ 0x1, 2 },
389 	{ }
390 };
391 
392 static struct clk_alpha_pll_postdiv gpll8_out_main = {
393 	.offset = 0x8000,
394 	.post_div_shift = 8,
395 	.post_div_table = post_div_table_gpll8_out_main,
396 	.num_post_div = ARRAY_SIZE(post_div_table_gpll8_out_main),
397 	.width = 4,
398 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT_EVO],
399 	.clkr.hw.init = &(const struct clk_init_data) {
400 		.name = "gpll8_out_main",
401 		.parent_hws = (const struct clk_hw*[]) {
402 			&gpll8.clkr.hw,
403 		},
404 		.num_parents = 1,
405 		.flags = CLK_SET_RATE_PARENT,
406 		.ops = &clk_alpha_pll_postdiv_ro_ops,
407 	},
408 };
409 
410 /* 1152.0 MHz Configuration */
411 static const struct alpha_pll_config gpll9_config = {
412 	.l = 0x3c,
413 	.alpha = 0x0,
414 	.post_div_val = BIT(8),
415 	.post_div_mask = GENMASK(9, 8),
416 	.main_output_mask = BIT(0),
417 	.early_output_mask = BIT(3),
418 	.config_ctl_val = 0x00004289,
419 	.test_ctl_val = 0x08000000,
420 };
421 
422 static struct clk_alpha_pll gpll9 = {
423 	.offset = 0x9000,
424 	.config = &gpll9_config,
425 	.vco_table = brammo_vco,
426 	.num_vco = ARRAY_SIZE(brammo_vco),
427 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_BRAMMO_EVO],
428 	.clkr = {
429 		.enable_reg = 0x79000,
430 		.enable_mask = BIT(9),
431 		.hw.init = &(const struct clk_init_data) {
432 			.name = "gpll9",
433 			.parent_data = &(const struct clk_parent_data) {
434 				.index = DT_BI_TCXO,
435 			},
436 			.num_parents = 1,
437 			.ops = &clk_alpha_pll_ops,
438 		},
439 	},
440 };
441 
442 static const struct clk_div_table post_div_table_gpll9_out_main[] = {
443 	{ 0x1, 2 },
444 	{ }
445 };
446 
447 static struct clk_alpha_pll_postdiv gpll9_out_main = {
448 	.offset = 0x9000,
449 	.post_div_shift = 8,
450 	.post_div_table = post_div_table_gpll9_out_main,
451 	.num_post_div = ARRAY_SIZE(post_div_table_gpll9_out_main),
452 	.width = 2,
453 	.regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_BRAMMO_EVO],
454 	.clkr.hw.init = &(const struct clk_init_data) {
455 		.name = "gpll9_out_main",
456 		.parent_hws = (const struct clk_hw*[]) {
457 			&gpll9.clkr.hw,
458 		},
459 		.num_parents = 1,
460 		.flags = CLK_SET_RATE_PARENT,
461 		.ops = &clk_alpha_pll_postdiv_ro_ops,
462 	},
463 };
464 
465 static const struct parent_map gcc_parent_map_0[] = {
466 	{ P_BI_TCXO, 0 },
467 	{ P_GPLL0_OUT_EARLY, 1 },
468 	{ P_GPLL0_OUT_AUX2, 2 },
469 };
470 
471 static const struct clk_parent_data gcc_parent_data_0[] = {
472 	{ .index = DT_BI_TCXO },
473 	{ .hw = &gpll0.clkr.hw },
474 	{ .hw = &gpll0_out_aux2.clkr.hw },
475 };
476 
477 static const struct parent_map gcc_parent_map_1[] = {
478 	{ P_BI_TCXO, 0 },
479 	{ P_GPLL0_OUT_EARLY, 1 },
480 	{ P_GPLL0_OUT_AUX2, 2 },
481 	{ P_GPLL6_OUT_MAIN, 4 },
482 };
483 
484 static const struct clk_parent_data gcc_parent_data_1[] = {
485 	{ .index = DT_BI_TCXO },
486 	{ .hw = &gpll0.clkr.hw },
487 	{ .hw = &gpll0_out_aux2.clkr.hw },
488 	{ .hw = &gpll6_out_main.clkr.hw },
489 };
490 
491 static const struct parent_map gcc_parent_map_2[] = {
492 	{ P_BI_TCXO, 0 },
493 	{ P_GPLL0_OUT_EARLY, 1 },
494 	{ P_GPLL0_OUT_AUX2, 2 },
495 	{ P_SLEEP_CLK, 5 },
496 };
497 
498 static const struct clk_parent_data gcc_parent_data_2[] = {
499 	{ .index = DT_BI_TCXO },
500 	{ .hw = &gpll0.clkr.hw },
501 	{ .hw = &gpll0_out_aux2.clkr.hw },
502 	{ .index = DT_SLEEP_CLK },
503 };
504 
505 static const struct parent_map gcc_parent_map_3[] = {
506 	{ P_BI_TCXO, 0 },
507 	{ P_GPLL0_OUT_EARLY, 1 },
508 	{ P_GPLL9_OUT_EARLY, 2 },
509 	{ P_GPLL10_OUT_MAIN, 3 },
510 	{ P_GPLL9_OUT_MAIN, 5 },
511 	{ P_GPLL3_OUT_MAIN, 6 },
512 };
513 
514 static const struct clk_parent_data gcc_parent_data_3[] = {
515 	{ .index = DT_BI_TCXO },
516 	{ .hw = &gpll0.clkr.hw },
517 	{ .hw = &gpll9.clkr.hw },
518 	{ .hw = &gpll10.clkr.hw },
519 	{ .hw = &gpll9_out_main.clkr.hw },
520 	{ .hw = &gpll3_out_main.clkr.hw },
521 };
522 
523 static const struct parent_map gcc_parent_map_4[] = {
524 	{ P_BI_TCXO, 0 },
525 	{ P_SLEEP_CLK, 5 },
526 };
527 
528 static const struct clk_parent_data gcc_parent_data_4[] = {
529 	{ .index = DT_BI_TCXO },
530 	{ .index = DT_SLEEP_CLK },
531 };
532 
533 static const struct parent_map gcc_parent_map_5[] = {
534 	{ P_BI_TCXO, 0 },
535 	{ P_GPLL0_OUT_EARLY, 1 },
536 	{ P_GPLL0_OUT_AUX2, 2 },
537 	{ P_GPLL10_OUT_MAIN, 3 },
538 	{ P_GPLL4_OUT_MAIN, 5 },
539 	{ P_GPLL3_OUT_EARLY, 6 },
540 };
541 
542 static const struct clk_parent_data gcc_parent_data_5[] = {
543 	{ .index = DT_BI_TCXO },
544 	{ .hw = &gpll0.clkr.hw },
545 	{ .hw = &gpll0_out_aux2.clkr.hw },
546 	{ .hw = &gpll10.clkr.hw },
547 	{ .hw = &gpll4.clkr.hw },
548 	{ .hw = &gpll3.clkr.hw },
549 };
550 
551 static const struct parent_map gcc_parent_map_6[] = {
552 	{ P_BI_TCXO, 0 },
553 	{ P_GPLL0_OUT_EARLY, 1 },
554 	{ P_GPLL0_OUT_AUX2, 2 },
555 	{ P_GPLL4_OUT_MAIN, 5 },
556 	{ P_GPLL3_OUT_MAIN, 6 },
557 };
558 
559 static const struct clk_parent_data gcc_parent_data_6[] = {
560 	{ .index = DT_BI_TCXO },
561 	{ .hw = &gpll0.clkr.hw },
562 	{ .hw = &gpll0_out_aux2.clkr.hw },
563 	{ .hw = &gpll4.clkr.hw },
564 	{ .hw = &gpll3_out_main.clkr.hw },
565 };
566 
567 static const struct parent_map gcc_parent_map_7[] = {
568 	{ P_BI_TCXO, 0 },
569 	{ P_GPLL0_OUT_EARLY, 1 },
570 	{ P_GPLL8_OUT_EARLY, 2 },
571 	{ P_GPLL10_OUT_MAIN, 3 },
572 	{ P_GPLL8_OUT_MAIN, 4 },
573 	{ P_GPLL9_OUT_MAIN, 5 },
574 	{ P_GPLL3_OUT_EARLY, 6 },
575 };
576 
577 static const struct clk_parent_data gcc_parent_data_7[] = {
578 	{ .index = DT_BI_TCXO },
579 	{ .hw = &gpll0.clkr.hw },
580 	{ .hw = &gpll8.clkr.hw },
581 	{ .hw = &gpll10.clkr.hw },
582 	{ .hw = &gpll8_out_main.clkr.hw },
583 	{ .hw = &gpll9.clkr.hw },
584 	{ .hw = &gpll3.clkr.hw },
585 };
586 
587 static const struct parent_map gcc_parent_map_8[] = {
588 	{ P_BI_TCXO, 0 },
589 	{ P_GPLL0_OUT_EARLY, 1 },
590 	{ P_GPLL8_OUT_EARLY, 2 },
591 	{ P_GPLL10_OUT_MAIN, 3 },
592 	{ P_GPLL8_OUT_MAIN, 4 },
593 	{ P_GPLL9_OUT_MAIN, 5 },
594 	{ P_GPLL3_OUT_MAIN, 6 },
595 };
596 
597 static const struct clk_parent_data gcc_parent_data_8[] = {
598 	{ .index = DT_BI_TCXO },
599 	{ .hw = &gpll0.clkr.hw },
600 	{ .hw = &gpll8.clkr.hw },
601 	{ .hw = &gpll10.clkr.hw },
602 	{ .hw = &gpll8_out_main.clkr.hw },
603 	{ .hw = &gpll9.clkr.hw },
604 	{ .hw = &gpll3_out_main.clkr.hw },
605 };
606 
607 static const struct parent_map gcc_parent_map_9[] = {
608 	{ P_BI_TCXO, 0 },
609 	{ P_GPLL0_OUT_EARLY, 1 },
610 	{ P_GPLL8_OUT_EARLY, 2 },
611 	{ P_GPLL10_OUT_MAIN, 3 },
612 	{ P_GPLL6_OUT_MAIN, 4 },
613 	{ P_GPLL9_OUT_MAIN, 5 },
614 	{ P_GPLL3_OUT_EARLY, 6 },
615 };
616 
617 static const struct clk_parent_data gcc_parent_data_9[] = {
618 	{ .index = DT_BI_TCXO },
619 	{ .hw = &gpll0.clkr.hw },
620 	{ .hw = &gpll8.clkr.hw },
621 	{ .hw = &gpll10.clkr.hw },
622 	{ .hw = &gpll6_out_main.clkr.hw },
623 	{ .hw = &gpll9.clkr.hw },
624 	{ .hw = &gpll3.clkr.hw },
625 };
626 
627 static const struct parent_map gcc_parent_map_10[] = {
628 	{ P_BI_TCXO, 0 },
629 	{ P_GPLL0_OUT_EARLY, 1 },
630 	{ P_SLEEP_CLK, 5 },
631 };
632 
633 static const struct clk_parent_data gcc_parent_data_10[] = {
634 	{ .index = DT_BI_TCXO },
635 	{ .hw = &gpll0.clkr.hw },
636 	{ .index = DT_SLEEP_CLK },
637 };
638 
639 static const struct parent_map gcc_parent_map_11[] = {
640 	{ P_BI_TCXO, 0 },
641 	{ P_GPLL12_OUT_EARLY, 1 },
642 	{ P_GPLL12_OUT_AUX2, 4 },
643 	{ P_GPLL3_OUT_EARLY, 6 },
644 };
645 
646 static const struct clk_parent_data gcc_parent_data_11[] = {
647 	{ .index = DT_BI_TCXO },
648 	{ .hw = &gpll12.clkr.hw },
649 	{ .hw = &gpll12_out_aux2.clkr.hw },
650 	{ .hw = &gpll3.clkr.hw },
651 };
652 
653 static const struct parent_map gcc_parent_map_12[] = {
654 	{ P_BI_TCXO, 0 },
655 	{ P_GPLL12_OUT_EARLY, 1 },
656 	{ P_GPLL0_OUT_AUX2, 2 },
657 	{ P_GPLL12_OUT_AUX2, 4 },
658 };
659 
660 static const struct clk_parent_data gcc_parent_data_12[] = {
661 	{ .index = DT_BI_TCXO },
662 	{ .hw = &gpll12.clkr.hw },
663 	{ .hw = &gpll0_out_aux2.clkr.hw },
664 	{ .hw = &gpll12_out_aux2.clkr.hw },
665 };
666 
667 static const struct parent_map gcc_parent_map_13[] = {
668 	{ P_BI_TCXO, 0 },
669 	{ P_GPLL0_OUT_EARLY, 1 },
670 };
671 
672 static const struct clk_parent_data gcc_parent_data_13[] = {
673 	{ .index = DT_BI_TCXO },
674 	{ .hw = &gpll0.clkr.hw },
675 };
676 
677 static const struct parent_map gcc_parent_map_14[] = {
678 	{ P_BI_TCXO, 0 },
679 	{ P_GPLL0_OUT_EARLY, 1 },
680 	{ P_GPLL0_OUT_AUX2, 2 },
681 	{ P_GPLL10_OUT_MAIN, 3 },
682 	{ P_GPLL8_OUT_MAIN, 4 },
683 	{ P_GPLL9_OUT_MAIN, 5 },
684 	{ P_GPLL3_OUT_EARLY, 6 },
685 };
686 
687 static const struct clk_parent_data gcc_parent_data_14[] = {
688 	{ .index = DT_BI_TCXO },
689 	{ .hw = &gpll0.clkr.hw },
690 	{ .hw = &gpll0_out_aux2.clkr.hw },
691 	{ .hw = &gpll10.clkr.hw },
692 	{ .hw = &gpll8_out_main.clkr.hw },
693 	{ .hw = &gpll9.clkr.hw },
694 	{ .hw = &gpll3.clkr.hw },
695 };
696 
697 static const struct parent_map gcc_parent_map_15[] = {
698 	{ P_BI_TCXO, 0 },
699 	{ P_GPLL0_OUT_EARLY, 1 },
700 	{ P_GPLL8_OUT_EARLY, 2 },
701 	{ P_GPLL10_OUT_MAIN, 3 },
702 	{ P_GPLL6_OUT_EARLY, 5 },
703 	{ P_GPLL3_OUT_MAIN, 6 },
704 };
705 
706 static const struct clk_parent_data gcc_parent_data_15[] = {
707 	{ .index = DT_BI_TCXO },
708 	{ .hw = &gpll0.clkr.hw },
709 	{ .hw = &gpll8.clkr.hw },
710 	{ .hw = &gpll10.clkr.hw },
711 	{ .hw = &gpll6.clkr.hw },
712 	{ .hw = &gpll3_out_main.clkr.hw },
713 };
714 
715 static const struct parent_map gcc_parent_map_21[] = {
716 	{ P_BI_TCXO, 0 },
717 	{ P_GPLL0_OUT_EARLY, 1 },
718 	{ P_GPLL0_OUT_AUX2, 2 },
719 	{ P_GPLL7_OUT_MAIN, 3 },
720 	{ P_GPLL4_OUT_MAIN, 5 },
721 };
722 
723 static const struct clk_parent_data gcc_parent_data_21[] = {
724 	{ .index = DT_BI_TCXO },
725 	{ .hw = &gpll0.clkr.hw },
726 	{ .hw = &gpll0_out_aux2.clkr.hw },
727 	{ .hw = &gpll7.clkr.hw },
728 	{ .hw = &gpll4.clkr.hw },
729 };
730 
731 static const struct parent_map gcc_parent_map_22[] = {
732 	{ P_BI_TCXO, 0 },
733 	{ P_GPLL12_OUT_EARLY, 1 },
734 	{ P_GPLL5_OUT_MAIN, 3 },
735 	{ P_GPLL12_OUT_AUX2, 4 },
736 	{ P_GPLL3_OUT_EARLY, 6 },
737 };
738 
739 static const struct clk_parent_data gcc_parent_data_22[] = {
740 	{ .index = DT_BI_TCXO },
741 	{ .hw = &gpll12.clkr.hw },
742 	{ .hw = &gpll5.clkr.hw },
743 	{ .hw = &gpll12_out_aux2.clkr.hw },
744 	{ .hw = &gpll3.clkr.hw },
745 };
746 
747 static const struct parent_map gcc_parent_map_24[] = {
748 	{ P_BI_TCXO, 0 },
749 	{ P_GPLL11_OUT_MAIN, 1 },
750 	{ P_GPLL11_OUT_AUX, 2 },
751 	{ P_GPLL11_OUT_AUX2, 3 },
752 };
753 
754 static const struct clk_parent_data gcc_parent_data_24[] = {
755 	{ .index = DT_BI_TCXO },
756 	{ .hw = &gpll11.clkr.hw },
757 	{ .hw = &gpll11.clkr.hw },
758 	{ .hw = &gpll11.clkr.hw },
759 };
760 
761 static struct clk_regmap_phy_mux gcc_emac0_cc_sgmiiphy_rx_clk_src = {
762 	.reg = 0xad048,
763 	.clkr = {
764 		.hw.init = &(const struct clk_init_data) {
765 			.name = "gcc_emac0_cc_sgmiiphy_rx_clk_src",
766 			.parent_data = &(const struct clk_parent_data) {
767 				.index = DT_EMAC0_SGMIIPHY_RCLK,
768 			},
769 			.num_parents = 1,
770 			.ops = &clk_regmap_phy_mux_ops,
771 		},
772 	},
773 };
774 
775 static struct clk_regmap_phy_mux gcc_emac0_cc_sgmiiphy_tx_clk_src = {
776 	.reg = 0xad040,
777 	.clkr = {
778 		.hw.init = &(const struct clk_init_data) {
779 			.name = "gcc_emac0_cc_sgmiiphy_tx_clk_src",
780 			.parent_data = &(const struct clk_parent_data) {
781 				.index = DT_EMAC0_SGMIIPHY_TCLK,
782 			},
783 			.num_parents = 1,
784 			.ops = &clk_regmap_phy_mux_ops,
785 		},
786 	},
787 };
788 
789 static struct clk_regmap_phy_mux gcc_emac1_cc_sgmiiphy_rx_clk_src = {
790 	.reg = 0xae048,
791 	.clkr = {
792 		.hw.init = &(const struct clk_init_data) {
793 			.name = "gcc_emac1_cc_sgmiiphy_rx_clk_src",
794 			.parent_data = &(const struct clk_parent_data) {
795 				.index = DT_EMAC1_SGMIIPHY_RCLK,
796 			},
797 			.num_parents = 1,
798 			.ops = &clk_regmap_phy_mux_ops,
799 		},
800 	},
801 };
802 
803 static struct clk_regmap_phy_mux gcc_emac1_cc_sgmiiphy_tx_clk_src = {
804 	.reg = 0xae040,
805 	.clkr = {
806 		.hw.init = &(const struct clk_init_data) {
807 			.name = "gcc_emac1_cc_sgmiiphy_tx_clk_src",
808 			.parent_data = &(const struct clk_parent_data) {
809 				.index = DT_EMAC1_SGMIIPHY_TCLK,
810 			},
811 			.num_parents = 1,
812 			.ops = &clk_regmap_phy_mux_ops,
813 		},
814 	},
815 };
816 
817 static struct clk_regmap_phy_mux gcc_pcie_pipe_clk_src = {
818 	.reg = 0xaf058,
819 	.clkr = {
820 		.hw.init = &(const struct clk_init_data) {
821 			.name = "gcc_pcie_pipe_clk_src",
822 			.parent_data = &(const struct clk_parent_data) {
823 				.index = DT_PCIE_PIPE_CLK,
824 			},
825 			.num_parents = 1,
826 			.ops = &clk_regmap_phy_mux_ops,
827 		},
828 	},
829 };
830 
831 static struct clk_regmap_phy_mux gcc_usb3_prim_phy_pipe_clk_src = {
832 	.reg = 0x1a05c,
833 	.clkr = {
834 		.hw.init = &(const struct clk_init_data) {
835 			.name = "gcc_usb3_prim_phy_pipe_clk_src",
836 			.parent_data = &(const struct clk_parent_data) {
837 				.index = DT_USB3_PHY_WRAPPER_GCC_USB30_PIPE_CLK,
838 			},
839 			.num_parents = 1,
840 			.ops = &clk_regmap_phy_mux_ops,
841 		},
842 	},
843 };
844 
845 static const struct freq_tbl ftbl_gcc_camss_axi_clk_src[] = {
846 	F(19200000, P_BI_TCXO, 1, 0, 0),
847 	F(150000000, P_GPLL0_OUT_AUX2, 2, 0, 0),
848 	F(200000000, P_GPLL0_OUT_AUX2, 1.5, 0, 0),
849 	F(300000000, P_GPLL0_OUT_AUX2, 1, 0, 0),
850 	{ }
851 };
852 
853 static struct clk_rcg2 gcc_camss_axi_clk_src = {
854 	.cmd_rcgr = 0x5802c,
855 	.mnd_width = 0,
856 	.hid_width = 5,
857 	.parent_map = gcc_parent_map_5,
858 	.freq_tbl = ftbl_gcc_camss_axi_clk_src,
859 	.hw_clk_ctrl = true,
860 	.clkr.hw.init = &(const struct clk_init_data) {
861 		.name = "gcc_camss_axi_clk_src",
862 		.parent_data = gcc_parent_data_5,
863 		.num_parents = ARRAY_SIZE(gcc_parent_data_5),
864 		.ops = &clk_rcg2_shared_ops,
865 	},
866 };
867 
868 static const struct freq_tbl ftbl_gcc_camss_cci_clk_src[] = {
869 	F(19200000, P_BI_TCXO, 1, 0, 0),
870 	F(37500000, P_GPLL0_OUT_AUX2, 8, 0, 0),
871 	{ }
872 };
873 
874 static struct clk_rcg2 gcc_camss_cci_clk_src = {
875 	.cmd_rcgr = 0x56000,
876 	.mnd_width = 0,
877 	.hid_width = 5,
878 	.parent_map = gcc_parent_map_14,
879 	.freq_tbl = ftbl_gcc_camss_cci_clk_src,
880 	.hw_clk_ctrl = true,
881 	.clkr.hw.init = &(const struct clk_init_data) {
882 		.name = "gcc_camss_cci_clk_src",
883 		.parent_data = gcc_parent_data_14,
884 		.num_parents = ARRAY_SIZE(gcc_parent_data_14),
885 		.ops = &clk_rcg2_shared_ops,
886 	},
887 };
888 
889 static const struct freq_tbl ftbl_gcc_camss_csi0phytimer_clk_src[] = {
890 	F(19200000, P_BI_TCXO, 1, 0, 0),
891 	F(100000000, P_GPLL0_OUT_AUX2, 3, 0, 0),
892 	F(200000000, P_GPLL0_OUT_AUX2, 1.5, 0, 0),
893 	F(268800000, P_GPLL4_OUT_MAIN, 3, 0, 0),
894 	{ }
895 };
896 
897 static struct clk_rcg2 gcc_camss_csi0phytimer_clk_src = {
898 	.cmd_rcgr = 0x45000,
899 	.mnd_width = 0,
900 	.hid_width = 5,
901 	.parent_map = gcc_parent_map_6,
902 	.freq_tbl = ftbl_gcc_camss_csi0phytimer_clk_src,
903 	.hw_clk_ctrl = true,
904 	.clkr.hw.init = &(const struct clk_init_data) {
905 		.name = "gcc_camss_csi0phytimer_clk_src",
906 		.parent_data = gcc_parent_data_6,
907 		.num_parents = ARRAY_SIZE(gcc_parent_data_6),
908 		.ops = &clk_rcg2_shared_ops,
909 	},
910 };
911 
912 static struct clk_rcg2 gcc_camss_csi1phytimer_clk_src = {
913 	.cmd_rcgr = 0x4501c,
914 	.mnd_width = 0,
915 	.hid_width = 5,
916 	.parent_map = gcc_parent_map_6,
917 	.freq_tbl = ftbl_gcc_camss_csi0phytimer_clk_src,
918 	.hw_clk_ctrl = true,
919 	.clkr.hw.init = &(const struct clk_init_data) {
920 		.name = "gcc_camss_csi1phytimer_clk_src",
921 		.parent_data = gcc_parent_data_6,
922 		.num_parents = ARRAY_SIZE(gcc_parent_data_6),
923 		.ops = &clk_rcg2_shared_ops,
924 	},
925 };
926 
927 static const struct freq_tbl ftbl_gcc_camss_mclk0_clk_src[] = {
928 	F(19200000, P_GPLL9_OUT_EARLY, 1, 1, 60),
929 	F(24000000, P_GPLL9_OUT_MAIN, 1, 1, 24),
930 	F(64000000, P_GPLL9_OUT_EARLY, 9, 1, 2),
931 	{ }
932 };
933 
934 static struct clk_rcg2 gcc_camss_mclk0_clk_src = {
935 	.cmd_rcgr = 0x51000,
936 	.mnd_width = 8,
937 	.hid_width = 5,
938 	.parent_map = gcc_parent_map_3,
939 	.freq_tbl = ftbl_gcc_camss_mclk0_clk_src,
940 	.hw_clk_ctrl = true,
941 	.clkr.hw.init = &(const struct clk_init_data) {
942 		.name = "gcc_camss_mclk0_clk_src",
943 		.parent_data = gcc_parent_data_3,
944 		.num_parents = ARRAY_SIZE(gcc_parent_data_3),
945 		.flags = CLK_SET_RATE_PARENT,
946 		.ops = &clk_rcg2_shared_ops,
947 	},
948 };
949 
950 static struct clk_rcg2 gcc_camss_mclk1_clk_src = {
951 	.cmd_rcgr = 0x5101c,
952 	.mnd_width = 8,
953 	.hid_width = 5,
954 	.parent_map = gcc_parent_map_3,
955 	.freq_tbl = ftbl_gcc_camss_mclk0_clk_src,
956 	.hw_clk_ctrl = true,
957 	.clkr.hw.init = &(const struct clk_init_data) {
958 		.name = "gcc_camss_mclk1_clk_src",
959 		.parent_data = gcc_parent_data_3,
960 		.num_parents = ARRAY_SIZE(gcc_parent_data_3),
961 		.flags = CLK_SET_RATE_PARENT,
962 		.ops = &clk_rcg2_shared_ops,
963 	},
964 };
965 
966 static struct clk_rcg2 gcc_camss_mclk2_clk_src = {
967 	.cmd_rcgr = 0x51038,
968 	.mnd_width = 8,
969 	.hid_width = 5,
970 	.parent_map = gcc_parent_map_3,
971 	.freq_tbl = ftbl_gcc_camss_mclk0_clk_src,
972 	.hw_clk_ctrl = true,
973 	.clkr.hw.init = &(const struct clk_init_data) {
974 		.name = "gcc_camss_mclk2_clk_src",
975 		.parent_data = gcc_parent_data_3,
976 		.num_parents = ARRAY_SIZE(gcc_parent_data_3),
977 		.flags = CLK_SET_RATE_PARENT,
978 		.ops = &clk_rcg2_shared_ops,
979 	},
980 };
981 
982 static struct clk_rcg2 gcc_camss_mclk3_clk_src = {
983 	.cmd_rcgr = 0x51054,
984 	.mnd_width = 8,
985 	.hid_width = 5,
986 	.parent_map = gcc_parent_map_3,
987 	.freq_tbl = ftbl_gcc_camss_mclk0_clk_src,
988 	.hw_clk_ctrl = true,
989 	.clkr.hw.init = &(const struct clk_init_data) {
990 		.name = "gcc_camss_mclk3_clk_src",
991 		.parent_data = gcc_parent_data_3,
992 		.num_parents = ARRAY_SIZE(gcc_parent_data_3),
993 		.flags = CLK_SET_RATE_PARENT,
994 		.ops = &clk_rcg2_shared_ops,
995 	},
996 };
997 
998 static const struct freq_tbl ftbl_gcc_camss_ope_ahb_clk_src[] = {
999 	F(19200000, P_BI_TCXO, 1, 0, 0),
1000 	F(171428571, P_GPLL0_OUT_EARLY, 3.5, 0, 0),
1001 	F(240000000, P_GPLL0_OUT_EARLY, 2.5, 0, 0),
1002 	{ }
1003 };
1004 
1005 static struct clk_rcg2 gcc_camss_ope_ahb_clk_src = {
1006 	.cmd_rcgr = 0x55024,
1007 	.mnd_width = 0,
1008 	.hid_width = 5,
1009 	.parent_map = gcc_parent_map_7,
1010 	.freq_tbl = ftbl_gcc_camss_ope_ahb_clk_src,
1011 	.hw_clk_ctrl = true,
1012 	.clkr.hw.init = &(const struct clk_init_data) {
1013 		.name = "gcc_camss_ope_ahb_clk_src",
1014 		.parent_data = gcc_parent_data_7,
1015 		.num_parents = ARRAY_SIZE(gcc_parent_data_7),
1016 		.ops = &clk_rcg2_shared_ops,
1017 	},
1018 };
1019 
1020 static const struct freq_tbl ftbl_gcc_camss_ope_clk_src[] = {
1021 	F(19200000, P_BI_TCXO, 1, 0, 0),
1022 	F(200000000, P_GPLL8_OUT_MAIN, 2, 0, 0),
1023 	F(266600000, P_GPLL8_OUT_MAIN, 1, 0, 0),
1024 	F(465000000, P_GPLL8_OUT_MAIN, 1, 0, 0),
1025 	F(580000000, P_GPLL8_OUT_EARLY, 1, 0, 0),
1026 	{ }
1027 };
1028 
1029 static struct clk_rcg2 gcc_camss_ope_clk_src = {
1030 	.cmd_rcgr = 0x55004,
1031 	.mnd_width = 0,
1032 	.hid_width = 5,
1033 	.parent_map = gcc_parent_map_7,
1034 	.freq_tbl = ftbl_gcc_camss_ope_clk_src,
1035 	.hw_clk_ctrl = true,
1036 	.clkr.hw.init = &(const struct clk_init_data) {
1037 		.name = "gcc_camss_ope_clk_src",
1038 		.parent_data = gcc_parent_data_7,
1039 		.num_parents = ARRAY_SIZE(gcc_parent_data_7),
1040 		.flags = CLK_SET_RATE_PARENT,
1041 		.ops = &clk_rcg2_shared_ops,
1042 	},
1043 };
1044 
1045 static const struct freq_tbl ftbl_gcc_camss_tfe_0_clk_src[] = {
1046 	F(19200000, P_BI_TCXO, 1, 0, 0),
1047 	F(128000000, P_GPLL10_OUT_MAIN, 9, 0, 0),
1048 	F(135529412, P_GPLL10_OUT_MAIN, 8.5, 0, 0),
1049 	F(144000000, P_GPLL10_OUT_MAIN, 8, 0, 0),
1050 	F(153600000, P_GPLL10_OUT_MAIN, 7.5, 0, 0),
1051 	F(164571429, P_GPLL10_OUT_MAIN, 7, 0, 0),
1052 	F(177230769, P_GPLL10_OUT_MAIN, 6.5, 0, 0),
1053 	F(192000000, P_GPLL10_OUT_MAIN, 6, 0, 0),
1054 	F(209454545, P_GPLL10_OUT_MAIN, 5.5, 0, 0),
1055 	F(230400000, P_GPLL10_OUT_MAIN, 5, 0, 0),
1056 	F(256000000, P_GPLL10_OUT_MAIN, 4.5, 0, 0),
1057 	F(288000000, P_GPLL10_OUT_MAIN, 4, 0, 0),
1058 	F(329142857, P_GPLL10_OUT_MAIN, 3.5, 0, 0),
1059 	F(384000000, P_GPLL10_OUT_MAIN, 3, 0, 0),
1060 	F(460800000, P_GPLL10_OUT_MAIN, 2.5, 0, 0),
1061 	F(576000000, P_GPLL10_OUT_MAIN, 2, 0, 0),
1062 	{ }
1063 };
1064 
1065 static struct clk_rcg2 gcc_camss_tfe_0_clk_src = {
1066 	.cmd_rcgr = 0x52004,
1067 	.mnd_width = 8,
1068 	.hid_width = 5,
1069 	.parent_map = gcc_parent_map_8,
1070 	.freq_tbl = ftbl_gcc_camss_tfe_0_clk_src,
1071 	.hw_clk_ctrl = true,
1072 	.clkr.hw.init = &(const struct clk_init_data) {
1073 		.name = "gcc_camss_tfe_0_clk_src",
1074 		.parent_data = gcc_parent_data_8,
1075 		.num_parents = ARRAY_SIZE(gcc_parent_data_8),
1076 		.flags = CLK_SET_RATE_PARENT,
1077 		.ops = &clk_rcg2_shared_ops,
1078 	},
1079 };
1080 
1081 static const struct freq_tbl ftbl_gcc_camss_tfe_0_csid_clk_src[] = {
1082 	F(19200000, P_BI_TCXO, 1, 0, 0),
1083 	F(120000000, P_GPLL0_OUT_EARLY, 5, 0, 0),
1084 	F(192000000, P_GPLL6_OUT_MAIN, 2, 0, 0),
1085 	F(240000000, P_GPLL0_OUT_EARLY, 2.5, 0, 0),
1086 	F(384000000, P_GPLL6_OUT_MAIN, 1, 0, 0),
1087 	F(426400000, P_GPLL3_OUT_EARLY, 2.5, 0, 0),
1088 	{ }
1089 };
1090 
1091 static struct clk_rcg2 gcc_camss_tfe_0_csid_clk_src = {
1092 	.cmd_rcgr = 0x52094,
1093 	.mnd_width = 0,
1094 	.hid_width = 5,
1095 	.parent_map = gcc_parent_map_9,
1096 	.freq_tbl = ftbl_gcc_camss_tfe_0_csid_clk_src,
1097 	.hw_clk_ctrl = true,
1098 	.clkr.hw.init = &(const struct clk_init_data) {
1099 		.name = "gcc_camss_tfe_0_csid_clk_src",
1100 		.parent_data = gcc_parent_data_9,
1101 		.num_parents = ARRAY_SIZE(gcc_parent_data_9),
1102 		.ops = &clk_rcg2_shared_ops,
1103 	},
1104 };
1105 
1106 static struct clk_rcg2 gcc_camss_tfe_1_clk_src = {
1107 	.cmd_rcgr = 0x52024,
1108 	.mnd_width = 8,
1109 	.hid_width = 5,
1110 	.parent_map = gcc_parent_map_8,
1111 	.freq_tbl = ftbl_gcc_camss_tfe_0_clk_src,
1112 	.hw_clk_ctrl = true,
1113 	.clkr.hw.init = &(const struct clk_init_data) {
1114 		.name = "gcc_camss_tfe_1_clk_src",
1115 		.parent_data = gcc_parent_data_8,
1116 		.num_parents = ARRAY_SIZE(gcc_parent_data_8),
1117 		.ops = &clk_rcg2_shared_ops,
1118 	},
1119 };
1120 
1121 static struct clk_rcg2 gcc_camss_tfe_1_csid_clk_src = {
1122 	.cmd_rcgr = 0x520b4,
1123 	.mnd_width = 0,
1124 	.hid_width = 5,
1125 	.parent_map = gcc_parent_map_9,
1126 	.freq_tbl = ftbl_gcc_camss_tfe_0_csid_clk_src,
1127 	.hw_clk_ctrl = true,
1128 	.clkr.hw.init = &(const struct clk_init_data) {
1129 		.name = "gcc_camss_tfe_1_csid_clk_src",
1130 		.parent_data = gcc_parent_data_9,
1131 		.num_parents = ARRAY_SIZE(gcc_parent_data_9),
1132 		.ops = &clk_rcg2_shared_ops,
1133 	},
1134 };
1135 
1136 static const struct freq_tbl ftbl_gcc_camss_tfe_cphy_rx_clk_src[] = {
1137 	F(19200000, P_BI_TCXO, 1, 0, 0),
1138 	F(240000000, P_GPLL0_OUT_EARLY, 2.5, 0, 0),
1139 	F(341333333, P_GPLL6_OUT_EARLY, 1, 4, 9),
1140 	F(384000000, P_GPLL6_OUT_EARLY, 2, 0, 0),
1141 	{ }
1142 };
1143 
1144 static struct clk_rcg2 gcc_camss_tfe_cphy_rx_clk_src = {
1145 	.cmd_rcgr = 0x52064,
1146 	.mnd_width = 16,
1147 	.hid_width = 5,
1148 	.parent_map = gcc_parent_map_15,
1149 	.freq_tbl = ftbl_gcc_camss_tfe_cphy_rx_clk_src,
1150 	.hw_clk_ctrl = true,
1151 	.clkr.hw.init = &(const struct clk_init_data) {
1152 		.name = "gcc_camss_tfe_cphy_rx_clk_src",
1153 		.parent_data = gcc_parent_data_15,
1154 		.num_parents = ARRAY_SIZE(gcc_parent_data_15),
1155 		.ops = &clk_rcg2_shared_ops,
1156 	},
1157 };
1158 
1159 static const struct freq_tbl ftbl_gcc_camss_top_ahb_clk_src[] = {
1160 	F(19200000, P_BI_TCXO, 1, 0, 0),
1161 	F(40000000, P_GPLL0_OUT_AUX2, 7.5, 0, 0),
1162 	F(80000000, P_GPLL0_OUT_EARLY, 7.5, 0, 0),
1163 	{ }
1164 };
1165 
1166 static struct clk_rcg2 gcc_camss_top_ahb_clk_src = {
1167 	.cmd_rcgr = 0x58010,
1168 	.mnd_width = 0,
1169 	.hid_width = 5,
1170 	.parent_map = gcc_parent_map_5,
1171 	.freq_tbl = ftbl_gcc_camss_top_ahb_clk_src,
1172 	.hw_clk_ctrl = true,
1173 	.clkr.hw.init = &(const struct clk_init_data) {
1174 		.name = "gcc_camss_top_ahb_clk_src",
1175 		.parent_data = gcc_parent_data_5,
1176 		.num_parents = ARRAY_SIZE(gcc_parent_data_5),
1177 		.ops = &clk_rcg2_shared_ops,
1178 	},
1179 };
1180 
1181 static const struct freq_tbl ftbl_gcc_emac0_axi_clk_src[] = {
1182 	F(75000000, P_GPLL0_OUT_AUX2, 4, 0, 0),
1183 	F(120000000, P_GPLL0_OUT_AUX2, 2.5, 0, 0),
1184 	F(150000000, P_GPLL0_OUT_AUX2, 2, 0, 0),
1185 	F(200000000, P_GPLL0_OUT_AUX2, 1.5, 0, 0),
1186 	F(240000000, P_GPLL0_OUT_EARLY, 2.5, 0, 0),
1187 	{ }
1188 };
1189 
1190 static struct clk_rcg2 gcc_emac0_axi_clk_src = {
1191 	.cmd_rcgr = 0x109dc,
1192 	.mnd_width = 0,
1193 	.hid_width = 5,
1194 	.parent_map = gcc_parent_map_0,
1195 	.freq_tbl = ftbl_gcc_emac0_axi_clk_src,
1196 	.hw_clk_ctrl = true,
1197 	.clkr.hw.init = &(const struct clk_init_data) {
1198 		.name = "gcc_emac0_axi_clk_src",
1199 		.parent_data = gcc_parent_data_0,
1200 		.num_parents = ARRAY_SIZE(gcc_parent_data_0),
1201 		.ops = &clk_rcg2_shared_ops,
1202 	},
1203 };
1204 
1205 static const struct freq_tbl ftbl_gcc_emac0_phy_aux_clk_src[] = {
1206 	F(19200000, P_BI_TCXO, 1, 0, 0),
1207 	{ }
1208 };
1209 
1210 static struct clk_rcg2 gcc_emac0_phy_aux_clk_src = {
1211 	.cmd_rcgr = 0xad01c,
1212 	.mnd_width = 0,
1213 	.hid_width = 5,
1214 	.parent_map = gcc_parent_map_10,
1215 	.freq_tbl = ftbl_gcc_emac0_phy_aux_clk_src,
1216 	.hw_clk_ctrl = true,
1217 	.clkr.hw.init = &(const struct clk_init_data) {
1218 		.name = "gcc_emac0_phy_aux_clk_src",
1219 		.parent_data = gcc_parent_data_10,
1220 		.num_parents = ARRAY_SIZE(gcc_parent_data_10),
1221 		.ops = &clk_rcg2_shared_ops,
1222 	},
1223 };
1224 
1225 static const struct freq_tbl ftbl_gcc_emac0_ptp_clk_src[] = {
1226 	F(250000000, P_GPLL12_OUT_AUX2, 2, 0, 0),
1227 	{ }
1228 };
1229 
1230 static struct clk_rcg2 gcc_emac0_ptp_clk_src = {
1231 	.cmd_rcgr = 0xad064,
1232 	.mnd_width = 0,
1233 	.hid_width = 5,
1234 	.parent_map = gcc_parent_map_11,
1235 	.freq_tbl = ftbl_gcc_emac0_ptp_clk_src,
1236 	.hw_clk_ctrl = true,
1237 	.clkr.hw.init = &(const struct clk_init_data) {
1238 		.name = "gcc_emac0_ptp_clk_src",
1239 		.parent_data = gcc_parent_data_11,
1240 		.num_parents = ARRAY_SIZE(gcc_parent_data_11),
1241 		.ops = &clk_rcg2_shared_ops,
1242 	},
1243 };
1244 
1245 static const struct freq_tbl ftbl_gcc_emac0_rgmii_clk_src[] = {
1246 	F(2500000, P_GPLL0_OUT_AUX2, 10, 1, 12),
1247 	F(25000000, P_GPLL0_OUT_AUX2, 12, 0, 0),
1248 	F(50000000, P_GPLL0_OUT_AUX2, 6, 0, 0),
1249 	F(125000000, P_GPLL12_OUT_AUX2, 4, 0, 0),
1250 	F(250000000, P_GPLL12_OUT_EARLY, 4, 0, 0),
1251 	{ }
1252 };
1253 
1254 static struct clk_rcg2 gcc_emac0_rgmii_clk_src = {
1255 	.cmd_rcgr = 0xad04c,
1256 	.mnd_width = 8,
1257 	.hid_width = 5,
1258 	.parent_map = gcc_parent_map_12,
1259 	.freq_tbl = ftbl_gcc_emac0_rgmii_clk_src,
1260 	.hw_clk_ctrl = true,
1261 	.clkr.hw.init = &(const struct clk_init_data) {
1262 		.name = "gcc_emac0_rgmii_clk_src",
1263 		.parent_data = gcc_parent_data_12,
1264 		.num_parents = ARRAY_SIZE(gcc_parent_data_12),
1265 		.ops = &clk_rcg2_shared_ops,
1266 	},
1267 };
1268 
1269 static struct clk_rcg2 gcc_emac1_axi_clk_src = {
1270 	.cmd_rcgr = 0x109fc,
1271 	.mnd_width = 0,
1272 	.hid_width = 5,
1273 	.parent_map = gcc_parent_map_0,
1274 	.freq_tbl = ftbl_gcc_emac0_axi_clk_src,
1275 	.hw_clk_ctrl = true,
1276 	.clkr.hw.init = &(const struct clk_init_data) {
1277 		.name = "gcc_emac1_axi_clk_src",
1278 		.parent_data = gcc_parent_data_0,
1279 		.num_parents = ARRAY_SIZE(gcc_parent_data_0),
1280 		.ops = &clk_rcg2_shared_ops,
1281 	},
1282 };
1283 
1284 static struct clk_rcg2 gcc_emac1_phy_aux_clk_src = {
1285 	.cmd_rcgr = 0xae01c,
1286 	.mnd_width = 0,
1287 	.hid_width = 5,
1288 	.parent_map = gcc_parent_map_10,
1289 	.freq_tbl = ftbl_gcc_emac0_phy_aux_clk_src,
1290 	.hw_clk_ctrl = true,
1291 	.clkr.hw.init = &(const struct clk_init_data) {
1292 		.name = "gcc_emac1_phy_aux_clk_src",
1293 		.parent_data = gcc_parent_data_10,
1294 		.num_parents = ARRAY_SIZE(gcc_parent_data_10),
1295 		.ops = &clk_rcg2_shared_ops,
1296 	},
1297 };
1298 
1299 static struct clk_rcg2 gcc_emac1_ptp_clk_src = {
1300 	.cmd_rcgr = 0xae064,
1301 	.mnd_width = 0,
1302 	.hid_width = 5,
1303 	.parent_map = gcc_parent_map_11,
1304 	.freq_tbl = ftbl_gcc_emac0_ptp_clk_src,
1305 	.hw_clk_ctrl = true,
1306 	.clkr.hw.init = &(const struct clk_init_data) {
1307 		.name = "gcc_emac1_ptp_clk_src",
1308 		.parent_data = gcc_parent_data_11,
1309 		.num_parents = ARRAY_SIZE(gcc_parent_data_11),
1310 		.ops = &clk_rcg2_shared_ops,
1311 	},
1312 };
1313 
1314 static struct clk_rcg2 gcc_emac1_rgmii_clk_src = {
1315 	.cmd_rcgr = 0xae04c,
1316 	.mnd_width = 8,
1317 	.hid_width = 5,
1318 	.parent_map = gcc_parent_map_12,
1319 	.freq_tbl = ftbl_gcc_emac0_rgmii_clk_src,
1320 	.hw_clk_ctrl = true,
1321 	.clkr.hw.init = &(const struct clk_init_data) {
1322 		.name = "gcc_emac1_rgmii_clk_src",
1323 		.parent_data = gcc_parent_data_12,
1324 		.num_parents = ARRAY_SIZE(gcc_parent_data_12),
1325 		.ops = &clk_rcg2_shared_ops,
1326 	},
1327 };
1328 
1329 static const struct freq_tbl ftbl_gcc_gp1_clk_src[] = {
1330 	F(25000000, P_GPLL0_OUT_AUX2, 12, 0, 0),
1331 	F(50000000, P_GPLL0_OUT_AUX2, 6, 0, 0),
1332 	F(100000000, P_GPLL0_OUT_AUX2, 3, 0, 0),
1333 	F(200000000, P_GPLL0_OUT_AUX2, 1.5, 0, 0),
1334 	{ }
1335 };
1336 
1337 static struct clk_rcg2 gcc_gp1_clk_src = {
1338 	.cmd_rcgr = 0x4d004,
1339 	.mnd_width = 8,
1340 	.hid_width = 5,
1341 	.parent_map = gcc_parent_map_2,
1342 	.freq_tbl = ftbl_gcc_gp1_clk_src,
1343 	.hw_clk_ctrl = true,
1344 	.clkr.hw.init = &(const struct clk_init_data) {
1345 		.name = "gcc_gp1_clk_src",
1346 		.parent_data = gcc_parent_data_2,
1347 		.num_parents = ARRAY_SIZE(gcc_parent_data_2),
1348 		.ops = &clk_rcg2_shared_ops,
1349 	},
1350 };
1351 
1352 static struct clk_rcg2 gcc_gp2_clk_src = {
1353 	.cmd_rcgr = 0x4e004,
1354 	.mnd_width = 8,
1355 	.hid_width = 5,
1356 	.parent_map = gcc_parent_map_2,
1357 	.freq_tbl = ftbl_gcc_gp1_clk_src,
1358 	.hw_clk_ctrl = true,
1359 	.clkr.hw.init = &(const struct clk_init_data) {
1360 		.name = "gcc_gp2_clk_src",
1361 		.parent_data = gcc_parent_data_2,
1362 		.num_parents = ARRAY_SIZE(gcc_parent_data_2),
1363 		.ops = &clk_rcg2_shared_ops,
1364 	},
1365 };
1366 
1367 static struct clk_rcg2 gcc_gp3_clk_src = {
1368 	.cmd_rcgr = 0x4f004,
1369 	.mnd_width = 8,
1370 	.hid_width = 5,
1371 	.parent_map = gcc_parent_map_2,
1372 	.freq_tbl = ftbl_gcc_gp1_clk_src,
1373 	.hw_clk_ctrl = true,
1374 	.clkr.hw.init = &(const struct clk_init_data) {
1375 		.name = "gcc_gp3_clk_src",
1376 		.parent_data = gcc_parent_data_2,
1377 		.num_parents = ARRAY_SIZE(gcc_parent_data_2),
1378 		.ops = &clk_rcg2_shared_ops,
1379 	},
1380 };
1381 
1382 static struct clk_rcg2 gcc_pcie_aux_clk_src = {
1383 	.cmd_rcgr = 0xaf074,
1384 	.mnd_width = 16,
1385 	.hid_width = 5,
1386 	.parent_map = gcc_parent_map_4,
1387 	.freq_tbl = ftbl_gcc_emac0_phy_aux_clk_src,
1388 	.hw_clk_ctrl = true,
1389 	.clkr.hw.init = &(const struct clk_init_data) {
1390 		.name = "gcc_pcie_aux_clk_src",
1391 		.parent_data = gcc_parent_data_4,
1392 		.num_parents = ARRAY_SIZE(gcc_parent_data_4),
1393 		.ops = &clk_rcg2_shared_ops,
1394 	},
1395 };
1396 
1397 static struct clk_rcg2 gcc_pcie_aux_phy_clk_src = {
1398 	.cmd_rcgr = 0xaf05c,
1399 	.mnd_width = 0,
1400 	.hid_width = 5,
1401 	.parent_map = gcc_parent_map_4,
1402 	.freq_tbl = ftbl_gcc_emac0_phy_aux_clk_src,
1403 	.hw_clk_ctrl = true,
1404 	.clkr.hw.init = &(const struct clk_init_data) {
1405 		.name = "gcc_pcie_aux_phy_clk_src",
1406 		.parent_data = gcc_parent_data_4,
1407 		.num_parents = ARRAY_SIZE(gcc_parent_data_4),
1408 		.ops = &clk_rcg2_shared_ops,
1409 	},
1410 };
1411 
1412 static const struct freq_tbl ftbl_gcc_pcie_rchng_phy_clk_src[] = {
1413 	F(100000000, P_GPLL0_OUT_AUX2, 3, 0, 0),
1414 	{ }
1415 };
1416 
1417 static struct clk_rcg2 gcc_pcie_rchng_phy_clk_src = {
1418 	.cmd_rcgr = 0xaf028,
1419 	.mnd_width = 0,
1420 	.hid_width = 5,
1421 	.parent_map = gcc_parent_map_0,
1422 	.freq_tbl = ftbl_gcc_pcie_rchng_phy_clk_src,
1423 	.hw_clk_ctrl = true,
1424 	.clkr.hw.init = &(const struct clk_init_data) {
1425 		.name = "gcc_pcie_rchng_phy_clk_src",
1426 		.parent_data = gcc_parent_data_0,
1427 		.num_parents = ARRAY_SIZE(gcc_parent_data_0),
1428 		.ops = &clk_rcg2_shared_ops,
1429 	},
1430 };
1431 
1432 static const struct freq_tbl ftbl_gcc_pdm2_clk_src[] = {
1433 	F(19200000, P_BI_TCXO, 1, 0, 0),
1434 	F(60000000, P_GPLL0_OUT_AUX2, 5, 0, 0),
1435 	{ }
1436 };
1437 
1438 static struct clk_rcg2 gcc_pdm2_clk_src = {
1439 	.cmd_rcgr = 0x20010,
1440 	.mnd_width = 0,
1441 	.hid_width = 5,
1442 	.parent_map = gcc_parent_map_0,
1443 	.freq_tbl = ftbl_gcc_pdm2_clk_src,
1444 	.hw_clk_ctrl = true,
1445 	.clkr.hw.init = &(const struct clk_init_data) {
1446 		.name = "gcc_pdm2_clk_src",
1447 		.parent_data = gcc_parent_data_0,
1448 		.num_parents = ARRAY_SIZE(gcc_parent_data_0),
1449 		.ops = &clk_rcg2_shared_ops,
1450 	},
1451 };
1452 
1453 static const struct freq_tbl ftbl_gcc_qupv3_wrap0_s0_clk_src[] = {
1454 	F(7372800, P_GPLL0_OUT_AUX2, 1, 384, 15625),
1455 	F(14745600, P_GPLL0_OUT_AUX2, 1, 768, 15625),
1456 	F(19200000, P_BI_TCXO, 1, 0, 0),
1457 	F(29491200, P_GPLL0_OUT_AUX2, 1, 1536, 15625),
1458 	F(32000000, P_GPLL0_OUT_AUX2, 1, 8, 75),
1459 	F(48000000, P_GPLL0_OUT_AUX2, 1, 4, 25),
1460 	F(64000000, P_GPLL0_OUT_AUX2, 1, 16, 75),
1461 	F(75000000, P_GPLL0_OUT_AUX2, 4, 0, 0),
1462 	F(80000000, P_GPLL0_OUT_AUX2, 1, 4, 15),
1463 	F(96000000, P_GPLL0_OUT_AUX2, 1, 8, 25),
1464 	F(100000000, P_GPLL0_OUT_AUX2, 3, 0, 0),
1465 	F(102400000, P_GPLL0_OUT_AUX2, 1, 128, 375),
1466 	F(112000000, P_GPLL0_OUT_AUX2, 1, 28, 75),
1467 	F(117964800, P_GPLL0_OUT_AUX2, 1, 6144, 15625),
1468 	F(120000000, P_GPLL0_OUT_AUX2, 2.5, 0, 0),
1469 	F(128000000, P_GPLL6_OUT_MAIN, 3, 0, 0),
1470 	{ }
1471 };
1472 
1473 static struct clk_init_data gcc_qupv3_wrap0_s0_clk_src_init = {
1474 	.name = "gcc_qupv3_wrap0_s0_clk_src",
1475 	.parent_data = gcc_parent_data_1,
1476 	.num_parents = ARRAY_SIZE(gcc_parent_data_1),
1477 	.ops = &clk_rcg2_shared_ops,
1478 };
1479 
1480 static struct clk_rcg2 gcc_qupv3_wrap0_s0_clk_src = {
1481 	.cmd_rcgr = 0x1f148,
1482 	.mnd_width = 16,
1483 	.hid_width = 5,
1484 	.parent_map = gcc_parent_map_1,
1485 	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
1486 	.hw_clk_ctrl = true,
1487 	.clkr.hw.init = &gcc_qupv3_wrap0_s0_clk_src_init,
1488 };
1489 
1490 static struct clk_init_data gcc_qupv3_wrap0_s1_clk_src_init = {
1491 	.name = "gcc_qupv3_wrap0_s1_clk_src",
1492 	.parent_data = gcc_parent_data_1,
1493 	.num_parents = ARRAY_SIZE(gcc_parent_data_1),
1494 	.ops = &clk_rcg2_shared_ops,
1495 };
1496 
1497 static struct clk_rcg2 gcc_qupv3_wrap0_s1_clk_src = {
1498 	.cmd_rcgr = 0x1f278,
1499 	.mnd_width = 16,
1500 	.hid_width = 5,
1501 	.parent_map = gcc_parent_map_1,
1502 	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
1503 	.hw_clk_ctrl = true,
1504 	.clkr.hw.init = &gcc_qupv3_wrap0_s1_clk_src_init,
1505 };
1506 
1507 static struct clk_init_data gcc_qupv3_wrap0_s2_clk_src_init = {
1508 	.name = "gcc_qupv3_wrap0_s2_clk_src",
1509 	.parent_data = gcc_parent_data_1,
1510 	.num_parents = ARRAY_SIZE(gcc_parent_data_1),
1511 	.ops = &clk_rcg2_shared_ops,
1512 };
1513 
1514 static struct clk_rcg2 gcc_qupv3_wrap0_s2_clk_src = {
1515 	.cmd_rcgr = 0x1f3a8,
1516 	.mnd_width = 16,
1517 	.hid_width = 5,
1518 	.parent_map = gcc_parent_map_1,
1519 	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
1520 	.hw_clk_ctrl = true,
1521 	.clkr.hw.init = &gcc_qupv3_wrap0_s2_clk_src_init,
1522 };
1523 
1524 static struct clk_init_data gcc_qupv3_wrap0_s3_clk_src_init = {
1525 	.name = "gcc_qupv3_wrap0_s3_clk_src",
1526 	.parent_data = gcc_parent_data_1,
1527 	.num_parents = ARRAY_SIZE(gcc_parent_data_1),
1528 	.ops = &clk_rcg2_shared_ops,
1529 };
1530 
1531 static struct clk_rcg2 gcc_qupv3_wrap0_s3_clk_src = {
1532 	.cmd_rcgr = 0x1f4d8,
1533 	.mnd_width = 16,
1534 	.hid_width = 5,
1535 	.parent_map = gcc_parent_map_1,
1536 	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
1537 	.hw_clk_ctrl = true,
1538 	.clkr.hw.init = &gcc_qupv3_wrap0_s3_clk_src_init,
1539 };
1540 
1541 static struct clk_init_data gcc_qupv3_wrap0_s4_clk_src_init = {
1542 	.name = "gcc_qupv3_wrap0_s4_clk_src",
1543 	.parent_data = gcc_parent_data_1,
1544 	.num_parents = ARRAY_SIZE(gcc_parent_data_1),
1545 	.ops = &clk_rcg2_shared_ops,
1546 };
1547 
1548 static struct clk_rcg2 gcc_qupv3_wrap0_s4_clk_src = {
1549 	.cmd_rcgr = 0x1f608,
1550 	.mnd_width = 16,
1551 	.hid_width = 5,
1552 	.parent_map = gcc_parent_map_1,
1553 	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
1554 	.hw_clk_ctrl = true,
1555 	.clkr.hw.init = &gcc_qupv3_wrap0_s4_clk_src_init,
1556 };
1557 
1558 static struct clk_init_data gcc_qupv3_wrap0_s5_clk_src_init = {
1559 	.name = "gcc_qupv3_wrap0_s5_clk_src",
1560 	.parent_data = gcc_parent_data_1,
1561 	.num_parents = ARRAY_SIZE(gcc_parent_data_1),
1562 	.ops = &clk_rcg2_shared_ops,
1563 };
1564 
1565 static struct clk_rcg2 gcc_qupv3_wrap0_s5_clk_src = {
1566 	.cmd_rcgr = 0x1f738,
1567 	.mnd_width = 16,
1568 	.hid_width = 5,
1569 	.parent_map = gcc_parent_map_1,
1570 	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
1571 	.hw_clk_ctrl = true,
1572 	.clkr.hw.init = &gcc_qupv3_wrap0_s5_clk_src_init,
1573 };
1574 
1575 static struct clk_init_data gcc_qupv3_wrap0_s6_clk_src_init = {
1576 	.name = "gcc_qupv3_wrap0_s6_clk_src",
1577 	.parent_data = gcc_parent_data_1,
1578 	.num_parents = ARRAY_SIZE(gcc_parent_data_1),
1579 	.ops = &clk_rcg2_shared_ops,
1580 };
1581 
1582 static struct clk_rcg2 gcc_qupv3_wrap0_s6_clk_src = {
1583 	.cmd_rcgr = 0x1f868,
1584 	.mnd_width = 16,
1585 	.hid_width = 5,
1586 	.parent_map = gcc_parent_map_1,
1587 	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
1588 	.hw_clk_ctrl = true,
1589 	.clkr.hw.init = &gcc_qupv3_wrap0_s6_clk_src_init,
1590 };
1591 
1592 static struct clk_init_data gcc_qupv3_wrap0_s7_clk_src_init = {
1593 	.name = "gcc_qupv3_wrap0_s7_clk_src",
1594 	.parent_data = gcc_parent_data_1,
1595 	.num_parents = ARRAY_SIZE(gcc_parent_data_1),
1596 	.ops = &clk_rcg2_shared_ops,
1597 };
1598 
1599 static struct clk_rcg2 gcc_qupv3_wrap0_s7_clk_src = {
1600 	.cmd_rcgr = 0x1f998,
1601 	.mnd_width = 16,
1602 	.hid_width = 5,
1603 	.parent_map = gcc_parent_map_1,
1604 	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
1605 	.hw_clk_ctrl = true,
1606 	.clkr.hw.init = &gcc_qupv3_wrap0_s7_clk_src_init,
1607 };
1608 
1609 static struct clk_init_data gcc_qupv3_wrap0_s8_clk_src_init = {
1610 	.name = "gcc_qupv3_wrap0_s8_clk_src",
1611 	.parent_data = gcc_parent_data_1,
1612 	.num_parents = ARRAY_SIZE(gcc_parent_data_1),
1613 	.ops = &clk_rcg2_shared_ops,
1614 };
1615 
1616 static struct clk_rcg2 gcc_qupv3_wrap0_s8_clk_src = {
1617 	.cmd_rcgr = 0x1fac8,
1618 	.mnd_width = 16,
1619 	.hid_width = 5,
1620 	.parent_map = gcc_parent_map_1,
1621 	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
1622 	.hw_clk_ctrl = true,
1623 	.clkr.hw.init = &gcc_qupv3_wrap0_s8_clk_src_init,
1624 };
1625 
1626 static struct clk_init_data gcc_qupv3_wrap0_s9_clk_src_init = {
1627 	.name = "gcc_qupv3_wrap0_s9_clk_src",
1628 	.parent_data = gcc_parent_data_1,
1629 	.num_parents = ARRAY_SIZE(gcc_parent_data_1),
1630 	.ops = &clk_rcg2_shared_ops,
1631 };
1632 
1633 static struct clk_rcg2 gcc_qupv3_wrap0_s9_clk_src = {
1634 	.cmd_rcgr = 0x1fbf8,
1635 	.mnd_width = 16,
1636 	.hid_width = 5,
1637 	.parent_map = gcc_parent_map_1,
1638 	.freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
1639 	.hw_clk_ctrl = true,
1640 	.clkr.hw.init = &gcc_qupv3_wrap0_s9_clk_src_init,
1641 };
1642 
1643 static const struct freq_tbl ftbl_gcc_sdcc1_apps_clk_src[] = {
1644 	F(144000, P_BI_TCXO, 16, 3, 25),
1645 	F(400000, P_BI_TCXO, 12, 1, 4),
1646 	F(20000000, P_GPLL0_OUT_AUX2, 5, 1, 3),
1647 	F(25000000, P_GPLL0_OUT_AUX2, 6, 1, 2),
1648 	F(50000000, P_GPLL0_OUT_AUX2, 6, 0, 0),
1649 	F(100000000, P_GPLL0_OUT_AUX2, 3, 0, 0),
1650 	F(192000000, P_GPLL6_OUT_MAIN, 2, 0, 0),
1651 	F(384000000, P_GPLL6_OUT_MAIN, 1, 0, 0),
1652 	{ }
1653 };
1654 
1655 static struct clk_rcg2 gcc_sdcc1_apps_clk_src = {
1656 	.cmd_rcgr = 0x38028,
1657 	.mnd_width = 8,
1658 	.hid_width = 5,
1659 	.parent_map = gcc_parent_map_1,
1660 	.freq_tbl = ftbl_gcc_sdcc1_apps_clk_src,
1661 	.hw_clk_ctrl = true,
1662 	.clkr.hw.init = &(const struct clk_init_data) {
1663 		.name = "gcc_sdcc1_apps_clk_src",
1664 		.parent_data = gcc_parent_data_1,
1665 		.num_parents = ARRAY_SIZE(gcc_parent_data_1),
1666 		.ops = &clk_rcg2_shared_floor_ops,
1667 	},
1668 };
1669 
1670 static const struct freq_tbl ftbl_gcc_sdcc1_ice_core_clk_src[] = {
1671 	F(75000000, P_GPLL0_OUT_AUX2, 4, 0, 0),
1672 	F(100000000, P_GPLL0_OUT_AUX2, 3, 0, 0),
1673 	F(150000000, P_GPLL0_OUT_AUX2, 2, 0, 0),
1674 	F(200000000, P_GPLL0_OUT_EARLY, 3, 0, 0),
1675 	F(300000000, P_GPLL0_OUT_AUX2, 1, 0, 0),
1676 	{ }
1677 };
1678 
1679 static struct clk_rcg2 gcc_sdcc1_ice_core_clk_src = {
1680 	.cmd_rcgr = 0x38010,
1681 	.mnd_width = 0,
1682 	.hid_width = 5,
1683 	.parent_map = gcc_parent_map_0,
1684 	.freq_tbl = ftbl_gcc_sdcc1_ice_core_clk_src,
1685 	.hw_clk_ctrl = true,
1686 	.clkr.hw.init = &(const struct clk_init_data) {
1687 		.name = "gcc_sdcc1_ice_core_clk_src",
1688 		.parent_data = gcc_parent_data_0,
1689 		.num_parents = ARRAY_SIZE(gcc_parent_data_0),
1690 		.ops = &clk_rcg2_shared_floor_ops,
1691 	},
1692 };
1693 
1694 static const struct freq_tbl ftbl_gcc_sdcc2_apps_clk_src[] = {
1695 	F(400000, P_BI_TCXO, 12, 1, 4),
1696 	F(19200000, P_BI_TCXO, 1, 0, 0),
1697 	F(25000000, P_GPLL0_OUT_AUX2, 12, 0, 0),
1698 	F(50000000, P_GPLL0_OUT_AUX2, 6, 0, 0),
1699 	F(100000000, P_GPLL0_OUT_AUX2, 3, 0, 0),
1700 	F(202000000, P_GPLL7_OUT_MAIN, 4, 0, 0),
1701 	{ }
1702 };
1703 
1704 static struct clk_rcg2 gcc_sdcc2_apps_clk_src = {
1705 	.cmd_rcgr = 0x1e00c,
1706 	.mnd_width = 8,
1707 	.hid_width = 5,
1708 	.parent_map = gcc_parent_map_21,
1709 	.freq_tbl = ftbl_gcc_sdcc2_apps_clk_src,
1710 	.hw_clk_ctrl = true,
1711 	.clkr.hw.init = &(const struct clk_init_data) {
1712 		.name = "gcc_sdcc2_apps_clk_src",
1713 		.parent_data = gcc_parent_data_21,
1714 		.num_parents = ARRAY_SIZE(gcc_parent_data_21),
1715 		.ops = &clk_rcg2_shared_floor_ops,
1716 	},
1717 };
1718 
1719 static struct clk_rcg2 gcc_tscss_clk_src = {
1720 	.cmd_rcgr = 0xac004,
1721 	.mnd_width = 0,
1722 	.hid_width = 5,
1723 	.parent_map = gcc_parent_map_22,
1724 	.freq_tbl = ftbl_gcc_emac0_ptp_clk_src,
1725 	.hw_clk_ctrl = true,
1726 	.clkr.hw.init = &(const struct clk_init_data) {
1727 		.name = "gcc_tscss_clk_src",
1728 		.parent_data = gcc_parent_data_22,
1729 		.num_parents = ARRAY_SIZE(gcc_parent_data_22),
1730 		.ops = &clk_rcg2_shared_ops,
1731 	},
1732 };
1733 
1734 static const struct freq_tbl ftbl_gcc_usb20_master_clk_src[] = {
1735 	F(60000000, P_GPLL0_OUT_AUX2, 5, 0, 0),
1736 	F(120000000, P_GPLL0_OUT_EARLY, 5, 0, 0),
1737 	{ }
1738 };
1739 
1740 static struct clk_rcg2 gcc_usb20_master_clk_src = {
1741 	.cmd_rcgr = 0xb003c,
1742 	.mnd_width = 8,
1743 	.hid_width = 5,
1744 	.parent_map = gcc_parent_map_0,
1745 	.freq_tbl = ftbl_gcc_usb20_master_clk_src,
1746 	.hw_clk_ctrl = true,
1747 	.clkr.hw.init = &(const struct clk_init_data) {
1748 		.name = "gcc_usb20_master_clk_src",
1749 		.parent_data = gcc_parent_data_0,
1750 		.num_parents = ARRAY_SIZE(gcc_parent_data_0),
1751 		.ops = &clk_rcg2_shared_ops,
1752 	},
1753 };
1754 
1755 static struct clk_rcg2 gcc_usb20_mock_utmi_clk_src = {
1756 	.cmd_rcgr = 0xb0020,
1757 	.mnd_width = 0,
1758 	.hid_width = 5,
1759 	.parent_map = gcc_parent_map_13,
1760 	.freq_tbl = ftbl_gcc_emac0_phy_aux_clk_src,
1761 	.hw_clk_ctrl = true,
1762 	.clkr.hw.init = &(const struct clk_init_data) {
1763 		.name = "gcc_usb20_mock_utmi_clk_src",
1764 		.parent_data = gcc_parent_data_13,
1765 		.num_parents = ARRAY_SIZE(gcc_parent_data_13),
1766 		.ops = &clk_rcg2_shared_ops,
1767 	},
1768 };
1769 
1770 static const struct freq_tbl ftbl_gcc_usb30_prim_master_clk_src[] = {
1771 	F(66666667, P_GPLL0_OUT_AUX2, 4.5, 0, 0),
1772 	F(133333333, P_GPLL0_OUT_EARLY, 4.5, 0, 0),
1773 	F(200000000, P_GPLL0_OUT_EARLY, 3, 0, 0),
1774 	F(240000000, P_GPLL0_OUT_EARLY, 2.5, 0, 0),
1775 	{ }
1776 };
1777 
1778 static struct clk_rcg2 gcc_usb30_prim_master_clk_src = {
1779 	.cmd_rcgr = 0x1a01c,
1780 	.mnd_width = 8,
1781 	.hid_width = 5,
1782 	.parent_map = gcc_parent_map_0,
1783 	.freq_tbl = ftbl_gcc_usb30_prim_master_clk_src,
1784 	.hw_clk_ctrl = true,
1785 	.clkr.hw.init = &(const struct clk_init_data) {
1786 		.name = "gcc_usb30_prim_master_clk_src",
1787 		.parent_data = gcc_parent_data_0,
1788 		.num_parents = ARRAY_SIZE(gcc_parent_data_0),
1789 		.ops = &clk_rcg2_shared_ops,
1790 	},
1791 };
1792 
1793 static struct clk_rcg2 gcc_usb30_prim_mock_utmi_clk_src = {
1794 	.cmd_rcgr = 0x1a034,
1795 	.mnd_width = 0,
1796 	.hid_width = 5,
1797 	.parent_map = gcc_parent_map_0,
1798 	.freq_tbl = ftbl_gcc_emac0_phy_aux_clk_src,
1799 	.hw_clk_ctrl = true,
1800 	.clkr.hw.init = &(const struct clk_init_data) {
1801 		.name = "gcc_usb30_prim_mock_utmi_clk_src",
1802 		.parent_data = gcc_parent_data_0,
1803 		.num_parents = ARRAY_SIZE(gcc_parent_data_0),
1804 		.ops = &clk_rcg2_shared_ops,
1805 	},
1806 };
1807 
1808 static struct clk_rcg2 gcc_usb3_prim_phy_aux_clk_src = {
1809 	.cmd_rcgr = 0x1a060,
1810 	.mnd_width = 0,
1811 	.hid_width = 5,
1812 	.parent_map = gcc_parent_map_4,
1813 	.freq_tbl = ftbl_gcc_emac0_phy_aux_clk_src,
1814 	.hw_clk_ctrl = true,
1815 	.clkr.hw.init = &(const struct clk_init_data) {
1816 		.name = "gcc_usb3_prim_phy_aux_clk_src",
1817 		.parent_data = gcc_parent_data_4,
1818 		.num_parents = ARRAY_SIZE(gcc_parent_data_4),
1819 		.ops = &clk_rcg2_shared_ops,
1820 	},
1821 };
1822 
1823 static const struct freq_tbl ftbl_gcc_video_venus_clk_src[] = {
1824 	F(133333333, P_GPLL11_OUT_MAIN, 4.5, 0, 0),
1825 	F(240000000, P_GPLL11_OUT_MAIN, 2.5, 0, 0),
1826 	F(300000000, P_GPLL11_OUT_MAIN, 2, 0, 0),
1827 	F(384000000, P_GPLL11_OUT_MAIN, 2, 0, 0),
1828 	{ }
1829 };
1830 
1831 static struct clk_rcg2 gcc_video_venus_clk_src = {
1832 	.cmd_rcgr = 0x6d000,
1833 	.mnd_width = 0,
1834 	.hid_width = 5,
1835 	.parent_map = gcc_parent_map_24,
1836 	.freq_tbl = ftbl_gcc_video_venus_clk_src,
1837 	.hw_clk_ctrl = true,
1838 	.clkr.hw.init = &(const struct clk_init_data) {
1839 		.name = "gcc_video_venus_clk_src",
1840 		.parent_data = gcc_parent_data_24,
1841 		.num_parents = ARRAY_SIZE(gcc_parent_data_24),
1842 		.flags = CLK_SET_RATE_PARENT,
1843 		.ops = &clk_rcg2_shared_ops,
1844 	},
1845 };
1846 
1847 static struct clk_regmap_div gcc_disp_gpll0_clk_src = {
1848 	.reg = 0x17058,
1849 	.shift = 0,
1850 	.width = 2,
1851 	.clkr.hw.init = &(const struct clk_init_data) {
1852 		.name = "gcc_disp_gpll0_clk_src",
1853 		.parent_hws = (const struct clk_hw*[]) {
1854 			&gpll0.clkr.hw,
1855 		},
1856 		.num_parents = 1,
1857 		.ops = &clk_regmap_div_ops,
1858 	},
1859 };
1860 
1861 static struct clk_regmap_div gcc_usb20_mock_utmi_postdiv_clk_src = {
1862 	.reg = 0xb0038,
1863 	.shift = 0,
1864 	.width = 4,
1865 	.clkr.hw.init = &(const struct clk_init_data) {
1866 		.name = "gcc_usb20_mock_utmi_postdiv_clk_src",
1867 		.parent_hws = (const struct clk_hw*[]) {
1868 			&gcc_usb20_mock_utmi_clk_src.clkr.hw,
1869 		},
1870 		.num_parents = 1,
1871 		.flags = CLK_SET_RATE_PARENT,
1872 		.ops = &clk_regmap_div_ro_ops,
1873 	},
1874 };
1875 
1876 static struct clk_regmap_div gcc_usb30_prim_mock_utmi_postdiv_clk_src = {
1877 	.reg = 0x1a04c,
1878 	.shift = 0,
1879 	.width = 2,
1880 	.clkr.hw.init = &(const struct clk_init_data) {
1881 		.name = "gcc_usb30_prim_mock_utmi_postdiv_clk_src",
1882 		.parent_hws = (const struct clk_hw*[]) {
1883 			&gcc_usb30_prim_mock_utmi_clk_src.clkr.hw,
1884 		},
1885 		.num_parents = 1,
1886 		.flags = CLK_SET_RATE_PARENT,
1887 		.ops = &clk_regmap_div_ro_ops,
1888 	},
1889 };
1890 
1891 static struct clk_branch gcc_ahb2phy_csi_clk = {
1892 	.halt_reg = 0x1d004,
1893 	.halt_check = BRANCH_HALT_DELAY,
1894 	.hwcg_reg = 0x1d004,
1895 	.hwcg_bit = 1,
1896 	.clkr = {
1897 		.enable_reg = 0x1d004,
1898 		.enable_mask = BIT(0),
1899 		.hw.init = &(const struct clk_init_data) {
1900 			.name = "gcc_ahb2phy_csi_clk",
1901 			.ops = &clk_branch2_ops,
1902 		},
1903 	},
1904 };
1905 
1906 static struct clk_branch gcc_ahb2phy_usb_clk = {
1907 	.halt_reg = 0x1d008,
1908 	.halt_check = BRANCH_HALT,
1909 	.hwcg_reg = 0x1d008,
1910 	.hwcg_bit = 1,
1911 	.clkr = {
1912 		.enable_reg = 0x1d008,
1913 		.enable_mask = BIT(0),
1914 		.hw.init = &(const struct clk_init_data) {
1915 			.name = "gcc_ahb2phy_usb_clk",
1916 			.ops = &clk_branch2_ops,
1917 		},
1918 	},
1919 };
1920 
1921 static struct clk_branch gcc_boot_rom_ahb_clk = {
1922 	.halt_reg = 0x23004,
1923 	.halt_check = BRANCH_HALT_VOTED,
1924 	.hwcg_reg = 0x23004,
1925 	.hwcg_bit = 1,
1926 	.clkr = {
1927 		.enable_reg = 0x7900c,
1928 		.enable_mask = BIT(1),
1929 		.hw.init = &(const struct clk_init_data) {
1930 			.name = "gcc_boot_rom_ahb_clk",
1931 			.ops = &clk_branch2_ops,
1932 		},
1933 	},
1934 };
1935 
1936 static struct clk_branch gcc_cam_throttle_nrt_clk = {
1937 	.halt_reg = 0x17070,
1938 	.halt_check = BRANCH_HALT_VOTED,
1939 	.hwcg_reg = 0x17070,
1940 	.hwcg_bit = 1,
1941 	.clkr = {
1942 		.enable_reg = 0x79004,
1943 		.enable_mask = BIT(16),
1944 		.hw.init = &(const struct clk_init_data) {
1945 			.name = "gcc_cam_throttle_nrt_clk",
1946 			.ops = &clk_branch2_ops,
1947 		},
1948 	},
1949 };
1950 
1951 static struct clk_branch gcc_cam_throttle_rt_clk = {
1952 	.halt_reg = 0x1706c,
1953 	.halt_check = BRANCH_HALT_VOTED,
1954 	.hwcg_reg = 0x1706c,
1955 	.hwcg_bit = 1,
1956 	.clkr = {
1957 		.enable_reg = 0x79004,
1958 		.enable_mask = BIT(15),
1959 		.hw.init = &(const struct clk_init_data) {
1960 			.name = "gcc_cam_throttle_rt_clk",
1961 			.ops = &clk_branch2_ops,
1962 		},
1963 	},
1964 };
1965 
1966 static struct clk_branch gcc_camss_axi_clk = {
1967 	.halt_reg = 0x58044,
1968 	.halt_check = BRANCH_HALT,
1969 	.clkr = {
1970 		.enable_reg = 0x58044,
1971 		.enable_mask = BIT(0),
1972 		.hw.init = &(const struct clk_init_data) {
1973 			.name = "gcc_camss_axi_clk",
1974 			.parent_hws = (const struct clk_hw*[]) {
1975 				&gcc_camss_axi_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_camnoc_atb_clk = {
1985 	.halt_reg = 0x5804c,
1986 	.halt_check = BRANCH_HALT_DELAY,
1987 	.hwcg_reg = 0x5804c,
1988 	.hwcg_bit = 1,
1989 	.clkr = {
1990 		.enable_reg = 0x5804c,
1991 		.enable_mask = BIT(0),
1992 		.hw.init = &(const struct clk_init_data) {
1993 			.name = "gcc_camss_camnoc_atb_clk",
1994 			.ops = &clk_branch2_ops,
1995 		},
1996 	},
1997 };
1998 
1999 static struct clk_branch gcc_camss_camnoc_dragonlink_atb_clk = {
2000 	.halt_reg = 0x58060,
2001 	.halt_check = BRANCH_HALT_VOTED,
2002 	.hwcg_reg = 0x58060,
2003 	.hwcg_bit = 1,
2004 	.clkr = {
2005 		.enable_reg = 0x58060,
2006 		.enable_mask = BIT(0),
2007 		.hw.init = &(const struct clk_init_data) {
2008 			.name = "gcc_camss_camnoc_dragonlink_atb_clk",
2009 			.ops = &clk_branch2_ops,
2010 		},
2011 	},
2012 };
2013 
2014 static struct clk_branch gcc_camss_camnoc_nts_xo_clk = {
2015 	.halt_reg = 0x58050,
2016 	.halt_check = BRANCH_HALT_DELAY,
2017 	.hwcg_reg = 0x58050,
2018 	.hwcg_bit = 1,
2019 	.clkr = {
2020 		.enable_reg = 0x58050,
2021 		.enable_mask = BIT(0),
2022 		.hw.init = &(const struct clk_init_data) {
2023 			.name = "gcc_camss_camnoc_nts_xo_clk",
2024 			.ops = &clk_branch2_ops,
2025 		},
2026 	},
2027 };
2028 
2029 static struct clk_branch gcc_camss_cci_0_clk = {
2030 	.halt_reg = 0x56018,
2031 	.halt_check = BRANCH_HALT,
2032 	.clkr = {
2033 		.enable_reg = 0x56018,
2034 		.enable_mask = BIT(0),
2035 		.hw.init = &(const struct clk_init_data) {
2036 			.name = "gcc_camss_cci_0_clk",
2037 			.parent_hws = (const struct clk_hw*[]) {
2038 				&gcc_camss_cci_clk_src.clkr.hw,
2039 			},
2040 			.num_parents = 1,
2041 			.flags = CLK_SET_RATE_PARENT,
2042 			.ops = &clk_branch2_ops,
2043 		},
2044 	},
2045 };
2046 
2047 static struct clk_branch gcc_camss_cphy_0_clk = {
2048 	.halt_reg = 0x52088,
2049 	.halt_check = BRANCH_HALT,
2050 	.clkr = {
2051 		.enable_reg = 0x52088,
2052 		.enable_mask = BIT(0),
2053 		.hw.init = &(const struct clk_init_data) {
2054 			.name = "gcc_camss_cphy_0_clk",
2055 			.parent_hws = (const struct clk_hw*[]) {
2056 				&gcc_camss_tfe_cphy_rx_clk_src.clkr.hw,
2057 			},
2058 			.num_parents = 1,
2059 			.flags = CLK_SET_RATE_PARENT,
2060 			.ops = &clk_branch2_ops,
2061 		},
2062 	},
2063 };
2064 
2065 static struct clk_branch gcc_camss_cphy_1_clk = {
2066 	.halt_reg = 0x5208c,
2067 	.halt_check = BRANCH_HALT,
2068 	.clkr = {
2069 		.enable_reg = 0x5208c,
2070 		.enable_mask = BIT(0),
2071 		.hw.init = &(const struct clk_init_data) {
2072 			.name = "gcc_camss_cphy_1_clk",
2073 			.parent_hws = (const struct clk_hw*[]) {
2074 				&gcc_camss_tfe_cphy_rx_clk_src.clkr.hw,
2075 			},
2076 			.num_parents = 1,
2077 			.flags = CLK_SET_RATE_PARENT,
2078 			.ops = &clk_branch2_ops,
2079 		},
2080 	},
2081 };
2082 
2083 static struct clk_branch gcc_camss_csi0phytimer_clk = {
2084 	.halt_reg = 0x45018,
2085 	.halt_check = BRANCH_HALT,
2086 	.clkr = {
2087 		.enable_reg = 0x45018,
2088 		.enable_mask = BIT(0),
2089 		.hw.init = &(const struct clk_init_data) {
2090 			.name = "gcc_camss_csi0phytimer_clk",
2091 			.parent_hws = (const struct clk_hw*[]) {
2092 				&gcc_camss_csi0phytimer_clk_src.clkr.hw,
2093 			},
2094 			.num_parents = 1,
2095 			.flags = CLK_SET_RATE_PARENT,
2096 			.ops = &clk_branch2_ops,
2097 		},
2098 	},
2099 };
2100 
2101 static struct clk_branch gcc_camss_csi1phytimer_clk = {
2102 	.halt_reg = 0x45034,
2103 	.halt_check = BRANCH_HALT,
2104 	.clkr = {
2105 		.enable_reg = 0x45034,
2106 		.enable_mask = BIT(0),
2107 		.hw.init = &(const struct clk_init_data) {
2108 			.name = "gcc_camss_csi1phytimer_clk",
2109 			.parent_hws = (const struct clk_hw*[]) {
2110 				&gcc_camss_csi1phytimer_clk_src.clkr.hw,
2111 			},
2112 			.num_parents = 1,
2113 			.flags = CLK_SET_RATE_PARENT,
2114 			.ops = &clk_branch2_ops,
2115 		},
2116 	},
2117 };
2118 
2119 static struct clk_branch gcc_camss_mclk0_clk = {
2120 	.halt_reg = 0x51018,
2121 	.halt_check = BRANCH_HALT,
2122 	.clkr = {
2123 		.enable_reg = 0x51018,
2124 		.enable_mask = BIT(0),
2125 		.hw.init = &(const struct clk_init_data) {
2126 			.name = "gcc_camss_mclk0_clk",
2127 			.parent_hws = (const struct clk_hw*[]) {
2128 				&gcc_camss_mclk0_clk_src.clkr.hw,
2129 			},
2130 			.num_parents = 1,
2131 			.flags = CLK_SET_RATE_PARENT,
2132 			.ops = &clk_branch2_ops,
2133 		},
2134 	},
2135 };
2136 
2137 static struct clk_branch gcc_camss_mclk1_clk = {
2138 	.halt_reg = 0x51034,
2139 	.halt_check = BRANCH_HALT,
2140 	.clkr = {
2141 		.enable_reg = 0x51034,
2142 		.enable_mask = BIT(0),
2143 		.hw.init = &(const struct clk_init_data) {
2144 			.name = "gcc_camss_mclk1_clk",
2145 			.parent_hws = (const struct clk_hw*[]) {
2146 				&gcc_camss_mclk1_clk_src.clkr.hw,
2147 			},
2148 			.num_parents = 1,
2149 			.flags = CLK_SET_RATE_PARENT,
2150 			.ops = &clk_branch2_ops,
2151 		},
2152 	},
2153 };
2154 
2155 static struct clk_branch gcc_camss_mclk2_clk = {
2156 	.halt_reg = 0x51050,
2157 	.halt_check = BRANCH_HALT,
2158 	.clkr = {
2159 		.enable_reg = 0x51050,
2160 		.enable_mask = BIT(0),
2161 		.hw.init = &(const struct clk_init_data) {
2162 			.name = "gcc_camss_mclk2_clk",
2163 			.parent_hws = (const struct clk_hw*[]) {
2164 				&gcc_camss_mclk2_clk_src.clkr.hw,
2165 			},
2166 			.num_parents = 1,
2167 			.flags = CLK_SET_RATE_PARENT,
2168 			.ops = &clk_branch2_ops,
2169 		},
2170 	},
2171 };
2172 
2173 static struct clk_branch gcc_camss_mclk3_clk = {
2174 	.halt_reg = 0x5106c,
2175 	.halt_check = BRANCH_HALT,
2176 	.clkr = {
2177 		.enable_reg = 0x5106c,
2178 		.enable_mask = BIT(0),
2179 		.hw.init = &(const struct clk_init_data) {
2180 			.name = "gcc_camss_mclk3_clk",
2181 			.parent_hws = (const struct clk_hw*[]) {
2182 				&gcc_camss_mclk3_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_camss_nrt_axi_clk = {
2192 	.halt_reg = 0x58054,
2193 	.halt_check = BRANCH_HALT,
2194 	.clkr = {
2195 		.enable_reg = 0x58054,
2196 		.enable_mask = BIT(0),
2197 		.hw.init = &(const struct clk_init_data) {
2198 			.name = "gcc_camss_nrt_axi_clk",
2199 			.ops = &clk_branch2_ops,
2200 		},
2201 	},
2202 };
2203 
2204 static struct clk_branch gcc_camss_ope_ahb_clk = {
2205 	.halt_reg = 0x5503c,
2206 	.halt_check = BRANCH_HALT,
2207 	.clkr = {
2208 		.enable_reg = 0x5503c,
2209 		.enable_mask = BIT(0),
2210 		.hw.init = &(const struct clk_init_data) {
2211 			.name = "gcc_camss_ope_ahb_clk",
2212 			.parent_hws = (const struct clk_hw*[]) {
2213 				&gcc_camss_ope_ahb_clk_src.clkr.hw,
2214 			},
2215 			.num_parents = 1,
2216 			.flags = CLK_SET_RATE_PARENT,
2217 			.ops = &clk_branch2_ops,
2218 		},
2219 	},
2220 };
2221 
2222 static struct clk_branch gcc_camss_ope_clk = {
2223 	.halt_reg = 0x5501c,
2224 	.halt_check = BRANCH_HALT,
2225 	.clkr = {
2226 		.enable_reg = 0x5501c,
2227 		.enable_mask = BIT(0),
2228 		.hw.init = &(const struct clk_init_data) {
2229 			.name = "gcc_camss_ope_clk",
2230 			.parent_hws = (const struct clk_hw*[]) {
2231 				&gcc_camss_ope_clk_src.clkr.hw,
2232 			},
2233 			.num_parents = 1,
2234 			.flags = CLK_SET_RATE_PARENT,
2235 			.ops = &clk_branch2_ops,
2236 		},
2237 	},
2238 };
2239 
2240 static struct clk_branch gcc_camss_rt_axi_clk = {
2241 	.halt_reg = 0x5805c,
2242 	.halt_check = BRANCH_HALT,
2243 	.clkr = {
2244 		.enable_reg = 0x5805c,
2245 		.enable_mask = BIT(0),
2246 		.hw.init = &(const struct clk_init_data) {
2247 			.name = "gcc_camss_rt_axi_clk",
2248 			.ops = &clk_branch2_ops,
2249 		},
2250 	},
2251 };
2252 
2253 static struct clk_branch gcc_camss_tfe_0_clk = {
2254 	.halt_reg = 0x5201c,
2255 	.halt_check = BRANCH_HALT,
2256 	.clkr = {
2257 		.enable_reg = 0x5201c,
2258 		.enable_mask = BIT(0),
2259 		.hw.init = &(const struct clk_init_data) {
2260 			.name = "gcc_camss_tfe_0_clk",
2261 			.parent_hws = (const struct clk_hw*[]) {
2262 				&gcc_camss_tfe_0_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_camss_tfe_0_cphy_rx_clk = {
2272 	.halt_reg = 0x5207c,
2273 	.halt_check = BRANCH_HALT,
2274 	.clkr = {
2275 		.enable_reg = 0x5207c,
2276 		.enable_mask = BIT(0),
2277 		.hw.init = &(const struct clk_init_data) {
2278 			.name = "gcc_camss_tfe_0_cphy_rx_clk",
2279 			.parent_hws = (const struct clk_hw*[]) {
2280 				&gcc_camss_tfe_cphy_rx_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_camss_tfe_0_csid_clk = {
2290 	.halt_reg = 0x520ac,
2291 	.halt_check = BRANCH_HALT,
2292 	.clkr = {
2293 		.enable_reg = 0x520ac,
2294 		.enable_mask = BIT(0),
2295 		.hw.init = &(const struct clk_init_data) {
2296 			.name = "gcc_camss_tfe_0_csid_clk",
2297 			.parent_hws = (const struct clk_hw*[]) {
2298 				&gcc_camss_tfe_0_csid_clk_src.clkr.hw,
2299 			},
2300 			.num_parents = 1,
2301 			.flags = CLK_SET_RATE_PARENT,
2302 			.ops = &clk_branch2_ops,
2303 		},
2304 	},
2305 };
2306 
2307 static struct clk_branch gcc_camss_tfe_1_clk = {
2308 	.halt_reg = 0x5203c,
2309 	.halt_check = BRANCH_HALT,
2310 	.clkr = {
2311 		.enable_reg = 0x5203c,
2312 		.enable_mask = BIT(0),
2313 		.hw.init = &(const struct clk_init_data) {
2314 			.name = "gcc_camss_tfe_1_clk",
2315 			.parent_hws = (const struct clk_hw*[]) {
2316 				&gcc_camss_tfe_1_clk_src.clkr.hw,
2317 			},
2318 			.num_parents = 1,
2319 			.flags = CLK_SET_RATE_PARENT,
2320 			.ops = &clk_branch2_ops,
2321 		},
2322 	},
2323 };
2324 
2325 static struct clk_branch gcc_camss_tfe_1_cphy_rx_clk = {
2326 	.halt_reg = 0x52080,
2327 	.halt_check = BRANCH_HALT,
2328 	.clkr = {
2329 		.enable_reg = 0x52080,
2330 		.enable_mask = BIT(0),
2331 		.hw.init = &(const struct clk_init_data) {
2332 			.name = "gcc_camss_tfe_1_cphy_rx_clk",
2333 			.parent_hws = (const struct clk_hw*[]) {
2334 				&gcc_camss_tfe_cphy_rx_clk_src.clkr.hw,
2335 			},
2336 			.num_parents = 1,
2337 			.flags = CLK_SET_RATE_PARENT,
2338 			.ops = &clk_branch2_ops,
2339 		},
2340 	},
2341 };
2342 
2343 static struct clk_branch gcc_camss_tfe_1_csid_clk = {
2344 	.halt_reg = 0x520cc,
2345 	.halt_check = BRANCH_HALT,
2346 	.clkr = {
2347 		.enable_reg = 0x520cc,
2348 		.enable_mask = BIT(0),
2349 		.hw.init = &(const struct clk_init_data) {
2350 			.name = "gcc_camss_tfe_1_csid_clk",
2351 			.parent_hws = (const struct clk_hw*[]) {
2352 				&gcc_camss_tfe_1_csid_clk_src.clkr.hw,
2353 			},
2354 			.num_parents = 1,
2355 			.flags = CLK_SET_RATE_PARENT,
2356 			.ops = &clk_branch2_ops,
2357 		},
2358 	},
2359 };
2360 
2361 static struct clk_branch gcc_camss_top_ahb_clk = {
2362 	.halt_reg = 0x58028,
2363 	.halt_check = BRANCH_HALT,
2364 	.clkr = {
2365 		.enable_reg = 0x58028,
2366 		.enable_mask = BIT(0),
2367 		.hw.init = &(const struct clk_init_data) {
2368 			.name = "gcc_camss_top_ahb_clk",
2369 			.parent_hws = (const struct clk_hw*[]) {
2370 				&gcc_camss_top_ahb_clk_src.clkr.hw,
2371 			},
2372 			.num_parents = 1,
2373 			.flags = CLK_SET_RATE_PARENT,
2374 			.ops = &clk_branch2_ops,
2375 		},
2376 	},
2377 };
2378 
2379 static struct clk_branch gcc_cfg_noc_usb2_prim_axi_clk = {
2380 	.halt_reg = 0x111c4,
2381 	.halt_check = BRANCH_HALT_VOTED,
2382 	.hwcg_reg = 0x111c4,
2383 	.hwcg_bit = 1,
2384 	.clkr = {
2385 		.enable_reg = 0x111c4,
2386 		.enable_mask = BIT(0),
2387 		.hw.init = &(const struct clk_init_data) {
2388 			.name = "gcc_cfg_noc_usb2_prim_axi_clk",
2389 			.parent_hws = (const struct clk_hw*[]) {
2390 				&gcc_usb20_master_clk_src.clkr.hw,
2391 			},
2392 			.num_parents = 1,
2393 			.flags = CLK_SET_RATE_PARENT,
2394 			.ops = &clk_branch2_ops,
2395 		},
2396 	},
2397 };
2398 
2399 static struct clk_branch gcc_cfg_noc_usb3_prim_axi_clk = {
2400 	.halt_reg = 0x1a07c,
2401 	.halt_check = BRANCH_HALT_VOTED,
2402 	.hwcg_reg = 0x1a07c,
2403 	.hwcg_bit = 1,
2404 	.clkr = {
2405 		.enable_reg = 0x1a07c,
2406 		.enable_mask = BIT(0),
2407 		.hw.init = &(const struct clk_init_data) {
2408 			.name = "gcc_cfg_noc_usb3_prim_axi_clk",
2409 			.parent_hws = (const struct clk_hw*[]) {
2410 				&gcc_usb30_prim_master_clk_src.clkr.hw,
2411 			},
2412 			.num_parents = 1,
2413 			.flags = CLK_SET_RATE_PARENT,
2414 			.ops = &clk_branch2_ops,
2415 		},
2416 	},
2417 };
2418 
2419 static struct clk_branch gcc_ddrss_gpu_axi_clk = {
2420 	.halt_reg = 0x71000,
2421 	.halt_check = BRANCH_HALT_SKIP,
2422 	.hwcg_reg = 0x71000,
2423 	.hwcg_bit = 1,
2424 	.clkr = {
2425 		.enable_reg = 0x71000,
2426 		.enable_mask = BIT(0),
2427 		.hw.init = &(const struct clk_init_data) {
2428 			.name = "gcc_ddrss_gpu_axi_clk",
2429 			.ops = &clk_branch2_aon_ops,
2430 		},
2431 	},
2432 };
2433 
2434 static struct clk_branch gcc_ddrss_memnoc_pcie_sf_clk = {
2435 	.halt_reg = 0x29044,
2436 	.halt_check = BRANCH_HALT_VOTED,
2437 	.hwcg_reg = 0x29044,
2438 	.hwcg_bit = 1,
2439 	.clkr = {
2440 		.enable_reg = 0x29044,
2441 		.enable_mask = BIT(0),
2442 		.hw.init = &(const struct clk_init_data) {
2443 			.name = "gcc_ddrss_memnoc_pcie_sf_clk",
2444 			.ops = &clk_branch2_ops,
2445 		},
2446 	},
2447 };
2448 
2449 static struct clk_branch gcc_disp_gpll0_div_clk_src = {
2450 	.halt_check = BRANCH_HALT_DELAY,
2451 	.clkr = {
2452 		.enable_reg = 0x79004,
2453 		.enable_mask = BIT(11),
2454 		.hw.init = &(const struct clk_init_data) {
2455 			.name = "gcc_disp_gpll0_div_clk_src",
2456 			.parent_hws = (const struct clk_hw*[]) {
2457 				&gcc_disp_gpll0_clk_src.clkr.hw,
2458 			},
2459 			.num_parents = 1,
2460 			.flags = CLK_SET_RATE_PARENT,
2461 			.ops = &clk_branch2_ops,
2462 		},
2463 	},
2464 };
2465 
2466 static struct clk_branch gcc_disp_hf_axi_clk = {
2467 	.halt_reg = 0x17020,
2468 	.halt_check = BRANCH_HALT,
2469 	.hwcg_reg = 0x17020,
2470 	.hwcg_bit = 1,
2471 	.clkr = {
2472 		.enable_reg = 0x17020,
2473 		.enable_mask = BIT(0),
2474 		.hw.init = &(const struct clk_init_data) {
2475 			.name = "gcc_disp_hf_axi_clk",
2476 			.ops = &clk_branch2_ops,
2477 		},
2478 	},
2479 };
2480 
2481 static struct clk_branch gcc_disp_throttle_core_clk = {
2482 	.halt_reg = 0x17064,
2483 	.halt_check = BRANCH_HALT_VOTED,
2484 	.hwcg_reg = 0x17064,
2485 	.hwcg_bit = 1,
2486 	.clkr = {
2487 		.enable_reg = 0x79004,
2488 		.enable_mask = BIT(13),
2489 		.hw.init = &(const struct clk_init_data) {
2490 			.name = "gcc_disp_throttle_core_clk",
2491 			.ops = &clk_branch2_ops,
2492 		},
2493 	},
2494 };
2495 
2496 static struct clk_branch gcc_emac0_ahb_clk = {
2497 	.halt_reg = 0xad010,
2498 	.halt_check = BRANCH_HALT_VOTED,
2499 	.hwcg_reg = 0xad010,
2500 	.hwcg_bit = 1,
2501 	.clkr = {
2502 		.enable_reg = 0xad010,
2503 		.enable_mask = BIT(0),
2504 		.hw.init = &(const struct clk_init_data) {
2505 			.name = "gcc_emac0_ahb_clk",
2506 			.ops = &clk_branch2_ops,
2507 		},
2508 	},
2509 };
2510 
2511 static struct clk_branch gcc_emac0_axi_clk = {
2512 	.halt_reg = 0xad014,
2513 	.halt_check = BRANCH_HALT_VOTED,
2514 	.hwcg_reg = 0xad014,
2515 	.hwcg_bit = 1,
2516 	.clkr = {
2517 		.enable_reg = 0xad014,
2518 		.enable_mask = BIT(0),
2519 		.hw.init = &(const struct clk_init_data) {
2520 			.name = "gcc_emac0_axi_clk",
2521 			.parent_hws = (const struct clk_hw*[]) {
2522 				&gcc_emac0_axi_clk_src.clkr.hw,
2523 			},
2524 			.num_parents = 1,
2525 			.flags = CLK_SET_RATE_PARENT,
2526 			.ops = &clk_branch2_ops,
2527 		},
2528 	},
2529 };
2530 
2531 static struct clk_branch gcc_emac0_axi_sys_noc_clk = {
2532 	.halt_reg = 0x109d4,
2533 	.halt_check = BRANCH_HALT_VOTED,
2534 	.hwcg_reg = 0x109d4,
2535 	.hwcg_bit = 1,
2536 	.clkr = {
2537 		.enable_reg = 0x109d4,
2538 		.enable_mask = BIT(0),
2539 		.hw.init = &(const struct clk_init_data) {
2540 			.name = "gcc_emac0_axi_sys_noc_clk",
2541 			.parent_hws = (const struct clk_hw*[]) {
2542 				&gcc_emac0_axi_clk_src.clkr.hw,
2543 			},
2544 			.num_parents = 1,
2545 			.flags = CLK_SET_RATE_PARENT,
2546 			.ops = &clk_branch2_ops,
2547 		},
2548 	},
2549 };
2550 
2551 static struct clk_branch gcc_emac0_cc_sgmiiphy_rx_clk = {
2552 	.halt_reg = 0xad044,
2553 	.halt_check = BRANCH_HALT_DELAY,
2554 	.clkr = {
2555 		.enable_reg = 0xad044,
2556 		.enable_mask = BIT(0),
2557 		.hw.init = &(const struct clk_init_data) {
2558 			.name = "gcc_emac0_cc_sgmiiphy_rx_clk",
2559 			.parent_hws = (const struct clk_hw*[]) {
2560 				&gcc_emac0_cc_sgmiiphy_rx_clk_src.clkr.hw,
2561 			},
2562 			.num_parents = 1,
2563 			.flags = CLK_SET_RATE_PARENT,
2564 			.ops = &clk_branch2_ops,
2565 		},
2566 	},
2567 };
2568 
2569 static struct clk_branch gcc_emac0_cc_sgmiiphy_tx_clk = {
2570 	.halt_reg = 0xad03c,
2571 	.halt_check = BRANCH_HALT_DELAY,
2572 	.hwcg_reg = 0xad03c,
2573 	.hwcg_bit = 1,
2574 	.clkr = {
2575 		.enable_reg = 0xad03c,
2576 		.enable_mask = BIT(0),
2577 		.hw.init = &(const struct clk_init_data) {
2578 			.name = "gcc_emac0_cc_sgmiiphy_tx_clk",
2579 			.parent_hws = (const struct clk_hw*[]) {
2580 				&gcc_emac0_cc_sgmiiphy_tx_clk_src.clkr.hw,
2581 			},
2582 			.num_parents = 1,
2583 			.flags = CLK_SET_RATE_PARENT,
2584 			.ops = &clk_branch2_ops,
2585 		},
2586 	},
2587 };
2588 
2589 static struct clk_branch gcc_emac0_phy_aux_clk = {
2590 	.halt_reg = 0xad018,
2591 	.halt_check = BRANCH_HALT,
2592 	.clkr = {
2593 		.enable_reg = 0xad018,
2594 		.enable_mask = BIT(0),
2595 		.hw.init = &(const struct clk_init_data) {
2596 			.name = "gcc_emac0_phy_aux_clk",
2597 			.parent_hws = (const struct clk_hw*[]) {
2598 				&gcc_emac0_phy_aux_clk_src.clkr.hw,
2599 			},
2600 			.num_parents = 1,
2601 			.flags = CLK_SET_RATE_PARENT,
2602 			.ops = &clk_branch2_ops,
2603 		},
2604 	},
2605 };
2606 
2607 static struct clk_branch gcc_emac0_ptp_clk = {
2608 	.halt_reg = 0xad034,
2609 	.halt_check = BRANCH_HALT,
2610 	.clkr = {
2611 		.enable_reg = 0xad034,
2612 		.enable_mask = BIT(0),
2613 		.hw.init = &(const struct clk_init_data) {
2614 			.name = "gcc_emac0_ptp_clk",
2615 			.parent_hws = (const struct clk_hw*[]) {
2616 				&gcc_emac0_ptp_clk_src.clkr.hw,
2617 			},
2618 			.num_parents = 1,
2619 			.flags = CLK_SET_RATE_PARENT,
2620 			.ops = &clk_branch2_ops,
2621 		},
2622 	},
2623 };
2624 
2625 static struct clk_branch gcc_emac0_rgmii_clk = {
2626 	.halt_reg = 0xad038,
2627 	.halt_check = BRANCH_HALT,
2628 	.clkr = {
2629 		.enable_reg = 0xad038,
2630 		.enable_mask = BIT(0),
2631 		.hw.init = &(const struct clk_init_data) {
2632 			.name = "gcc_emac0_rgmii_clk",
2633 			.parent_hws = (const struct clk_hw*[]) {
2634 				&gcc_emac0_rgmii_clk_src.clkr.hw,
2635 			},
2636 			.num_parents = 1,
2637 			.flags = CLK_SET_RATE_PARENT,
2638 			.ops = &clk_branch2_ops,
2639 		},
2640 	},
2641 };
2642 
2643 static struct clk_branch gcc_emac1_ahb_clk = {
2644 	.halt_reg = 0xae010,
2645 	.halt_check = BRANCH_HALT_VOTED,
2646 	.hwcg_reg = 0xae010,
2647 	.hwcg_bit = 1,
2648 	.clkr = {
2649 		.enable_reg = 0xae010,
2650 		.enable_mask = BIT(0),
2651 		.hw.init = &(const struct clk_init_data) {
2652 			.name = "gcc_emac1_ahb_clk",
2653 			.ops = &clk_branch2_ops,
2654 		},
2655 	},
2656 };
2657 
2658 static struct clk_branch gcc_emac1_axi_clk = {
2659 	.halt_reg = 0xae014,
2660 	.halt_check = BRANCH_HALT_VOTED,
2661 	.hwcg_reg = 0xae014,
2662 	.hwcg_bit = 1,
2663 	.clkr = {
2664 		.enable_reg = 0xae014,
2665 		.enable_mask = BIT(0),
2666 		.hw.init = &(const struct clk_init_data) {
2667 			.name = "gcc_emac1_axi_clk",
2668 			.parent_hws = (const struct clk_hw*[]) {
2669 				&gcc_emac1_axi_clk_src.clkr.hw,
2670 			},
2671 			.num_parents = 1,
2672 			.flags = CLK_SET_RATE_PARENT,
2673 			.ops = &clk_branch2_ops,
2674 		},
2675 	},
2676 };
2677 
2678 static struct clk_branch gcc_emac1_axi_sys_noc_clk = {
2679 	.halt_reg = 0x109f4,
2680 	.halt_check = BRANCH_HALT_VOTED,
2681 	.hwcg_reg = 0x109f4,
2682 	.hwcg_bit = 1,
2683 	.clkr = {
2684 		.enable_reg = 0x109f4,
2685 		.enable_mask = BIT(0),
2686 		.hw.init = &(const struct clk_init_data) {
2687 			.name = "gcc_emac1_axi_sys_noc_clk",
2688 			.parent_hws = (const struct clk_hw*[]) {
2689 				&gcc_emac1_axi_clk_src.clkr.hw,
2690 			},
2691 			.num_parents = 1,
2692 			.flags = CLK_SET_RATE_PARENT,
2693 			.ops = &clk_branch2_ops,
2694 		},
2695 	},
2696 };
2697 
2698 static struct clk_branch gcc_emac1_cc_sgmiiphy_rx_clk = {
2699 	.halt_reg = 0xae044,
2700 	.halt_check = BRANCH_HALT_DELAY,
2701 	.clkr = {
2702 		.enable_reg = 0xae044,
2703 		.enable_mask = BIT(0),
2704 		.hw.init = &(const struct clk_init_data) {
2705 			.name = "gcc_emac1_cc_sgmiiphy_rx_clk",
2706 			.parent_hws = (const struct clk_hw*[]) {
2707 				&gcc_emac1_cc_sgmiiphy_rx_clk_src.clkr.hw,
2708 			},
2709 			.num_parents = 1,
2710 			.flags = CLK_SET_RATE_PARENT,
2711 			.ops = &clk_branch2_ops,
2712 		},
2713 	},
2714 };
2715 
2716 static struct clk_branch gcc_emac1_cc_sgmiiphy_tx_clk = {
2717 	.halt_reg = 0xae03c,
2718 	.halt_check = BRANCH_HALT_DELAY,
2719 	.hwcg_reg = 0xae03c,
2720 	.hwcg_bit = 1,
2721 	.clkr = {
2722 		.enable_reg = 0xae03c,
2723 		.enable_mask = BIT(0),
2724 		.hw.init = &(const struct clk_init_data) {
2725 			.name = "gcc_emac1_cc_sgmiiphy_tx_clk",
2726 			.parent_hws = (const struct clk_hw*[]) {
2727 				&gcc_emac1_cc_sgmiiphy_tx_clk_src.clkr.hw,
2728 			},
2729 			.num_parents = 1,
2730 			.flags = CLK_SET_RATE_PARENT,
2731 			.ops = &clk_branch2_ops,
2732 		},
2733 	},
2734 };
2735 
2736 static struct clk_branch gcc_emac1_phy_aux_clk = {
2737 	.halt_reg = 0xae018,
2738 	.halt_check = BRANCH_HALT,
2739 	.clkr = {
2740 		.enable_reg = 0xae018,
2741 		.enable_mask = BIT(0),
2742 		.hw.init = &(const struct clk_init_data) {
2743 			.name = "gcc_emac1_phy_aux_clk",
2744 			.parent_hws = (const struct clk_hw*[]) {
2745 				&gcc_emac1_phy_aux_clk_src.clkr.hw,
2746 			},
2747 			.num_parents = 1,
2748 			.flags = CLK_SET_RATE_PARENT,
2749 			.ops = &clk_branch2_ops,
2750 		},
2751 	},
2752 };
2753 
2754 static struct clk_branch gcc_emac1_ptp_clk = {
2755 	.halt_reg = 0xae034,
2756 	.halt_check = BRANCH_HALT,
2757 	.clkr = {
2758 		.enable_reg = 0xae034,
2759 		.enable_mask = BIT(0),
2760 		.hw.init = &(const struct clk_init_data) {
2761 			.name = "gcc_emac1_ptp_clk",
2762 			.parent_hws = (const struct clk_hw*[]) {
2763 				&gcc_emac1_ptp_clk_src.clkr.hw,
2764 			},
2765 			.num_parents = 1,
2766 			.flags = CLK_SET_RATE_PARENT,
2767 			.ops = &clk_branch2_ops,
2768 		},
2769 	},
2770 };
2771 
2772 static struct clk_branch gcc_emac1_rgmii_clk = {
2773 	.halt_reg = 0xae038,
2774 	.halt_check = BRANCH_HALT,
2775 	.clkr = {
2776 		.enable_reg = 0xae038,
2777 		.enable_mask = BIT(0),
2778 		.hw.init = &(const struct clk_init_data) {
2779 			.name = "gcc_emac1_rgmii_clk",
2780 			.parent_hws = (const struct clk_hw*[]) {
2781 				&gcc_emac1_rgmii_clk_src.clkr.hw,
2782 			},
2783 			.num_parents = 1,
2784 			.flags = CLK_SET_RATE_PARENT,
2785 			.ops = &clk_branch2_ops,
2786 		},
2787 	},
2788 };
2789 
2790 static struct clk_branch gcc_gp1_clk = {
2791 	.halt_reg = 0x4d000,
2792 	.halt_check = BRANCH_HALT,
2793 	.clkr = {
2794 		.enable_reg = 0x4d000,
2795 		.enable_mask = BIT(0),
2796 		.hw.init = &(const struct clk_init_data) {
2797 			.name = "gcc_gp1_clk",
2798 			.parent_hws = (const struct clk_hw*[]) {
2799 				&gcc_gp1_clk_src.clkr.hw,
2800 			},
2801 			.num_parents = 1,
2802 			.flags = CLK_SET_RATE_PARENT,
2803 			.ops = &clk_branch2_ops,
2804 		},
2805 	},
2806 };
2807 
2808 static struct clk_branch gcc_gp2_clk = {
2809 	.halt_reg = 0x4e000,
2810 	.halt_check = BRANCH_HALT,
2811 	.clkr = {
2812 		.enable_reg = 0x4e000,
2813 		.enable_mask = BIT(0),
2814 		.hw.init = &(const struct clk_init_data) {
2815 			.name = "gcc_gp2_clk",
2816 			.parent_hws = (const struct clk_hw*[]) {
2817 				&gcc_gp2_clk_src.clkr.hw,
2818 			},
2819 			.num_parents = 1,
2820 			.flags = CLK_SET_RATE_PARENT,
2821 			.ops = &clk_branch2_ops,
2822 		},
2823 	},
2824 };
2825 
2826 static struct clk_branch gcc_gp3_clk = {
2827 	.halt_reg = 0x4f000,
2828 	.halt_check = BRANCH_HALT,
2829 	.clkr = {
2830 		.enable_reg = 0x4f000,
2831 		.enable_mask = BIT(0),
2832 		.hw.init = &(const struct clk_init_data) {
2833 			.name = "gcc_gp3_clk",
2834 			.parent_hws = (const struct clk_hw*[]) {
2835 				&gcc_gp3_clk_src.clkr.hw,
2836 			},
2837 			.num_parents = 1,
2838 			.flags = CLK_SET_RATE_PARENT,
2839 			.ops = &clk_branch2_ops,
2840 		},
2841 	},
2842 };
2843 
2844 static struct clk_branch gcc_gpu_gpll0_clk_src = {
2845 	.halt_check = BRANCH_HALT_DELAY,
2846 	.clkr = {
2847 		.enable_reg = 0x7900c,
2848 		.enable_mask = BIT(18),
2849 		.hw.init = &(const struct clk_init_data) {
2850 			.name = "gcc_gpu_gpll0_clk_src",
2851 			.parent_hws = (const struct clk_hw*[]) {
2852 				&gpll0.clkr.hw,
2853 			},
2854 			.num_parents = 1,
2855 			.flags = CLK_SET_RATE_PARENT,
2856 			.ops = &clk_branch2_ops,
2857 		},
2858 	},
2859 };
2860 
2861 static struct clk_branch gcc_gpu_gpll0_div_clk_src = {
2862 	.halt_check = BRANCH_HALT_DELAY,
2863 	.clkr = {
2864 		.enable_reg = 0x7900c,
2865 		.enable_mask = BIT(19),
2866 		.hw.init = &(const struct clk_init_data) {
2867 			.name = "gcc_gpu_gpll0_div_clk_src",
2868 			.parent_hws = (const struct clk_hw*[]) {
2869 				&gpll0_out_aux2.clkr.hw,
2870 			},
2871 			.num_parents = 1,
2872 			.flags = CLK_SET_RATE_PARENT,
2873 			.ops = &clk_branch2_ops,
2874 		},
2875 	},
2876 };
2877 
2878 static struct clk_branch gcc_gpu_memnoc_gfx_clk = {
2879 	.halt_reg = 0x3600c,
2880 	.halt_check = BRANCH_VOTED,
2881 	.hwcg_reg = 0x3600c,
2882 	.hwcg_bit = 1,
2883 	.clkr = {
2884 		.enable_reg = 0x3600c,
2885 		.enable_mask = BIT(0),
2886 		.hw.init = &(const struct clk_init_data) {
2887 			.name = "gcc_gpu_memnoc_gfx_clk",
2888 			.ops = &clk_branch2_aon_ops,
2889 		},
2890 	},
2891 };
2892 
2893 static struct clk_branch gcc_gpu_smmu_vote_clk = {
2894 	.halt_reg = 0x7d000,
2895 	.halt_check = BRANCH_HALT_VOTED,
2896 	.clkr = {
2897 		.enable_reg = 0x7d000,
2898 		.enable_mask = BIT(0),
2899 		.hw.init = &(const struct clk_init_data) {
2900 			.name = "gcc_gpu_smmu_vote_clk",
2901 			.ops = &clk_branch2_ops,
2902 		},
2903 	},
2904 };
2905 
2906 static struct clk_branch gcc_gpu_snoc_dvm_gfx_clk = {
2907 	.halt_reg = 0x36018,
2908 	.halt_check = BRANCH_HALT,
2909 	.clkr = {
2910 		.enable_reg = 0x36018,
2911 		.enable_mask = BIT(0),
2912 		.hw.init = &(const struct clk_init_data) {
2913 			.name = "gcc_gpu_snoc_dvm_gfx_clk",
2914 			.ops = &clk_branch2_ops,
2915 		},
2916 	},
2917 };
2918 
2919 static struct clk_branch gcc_gpu_throttle_core_clk = {
2920 	.halt_reg = 0x36048,
2921 	.halt_check = BRANCH_HALT_VOTED,
2922 	.hwcg_reg = 0x36048,
2923 	.hwcg_bit = 1,
2924 	.clkr = {
2925 		.enable_reg = 0x7900c,
2926 		.enable_mask = BIT(21),
2927 		.hw.init = &(const struct clk_init_data) {
2928 			.name = "gcc_gpu_throttle_core_clk",
2929 			.ops = &clk_branch2_ops,
2930 		},
2931 	},
2932 };
2933 
2934 static struct clk_branch gcc_mmu_tcu_vote_clk = {
2935 	.halt_reg = 0x7d06c,
2936 	.halt_check = BRANCH_HALT_VOTED,
2937 	.clkr = {
2938 		.enable_reg = 0x7d06c,
2939 		.enable_mask = BIT(0),
2940 		.hw.init = &(const struct clk_init_data) {
2941 			.name = "gcc_mmu_tcu_vote_clk",
2942 			.ops = &clk_branch2_ops,
2943 		},
2944 	},
2945 };
2946 
2947 static struct clk_branch gcc_pcie_aux_clk = {
2948 	.halt_reg = 0xaf044,
2949 	.halt_check = BRANCH_HALT_VOTED,
2950 	.hwcg_reg = 0xaf044,
2951 	.hwcg_bit = 1,
2952 	.clkr = {
2953 		.enable_reg = 0x79018,
2954 		.enable_mask = BIT(0),
2955 		.hw.init = &(const struct clk_init_data) {
2956 			.name = "gcc_pcie_aux_clk",
2957 			.parent_hws = (const struct clk_hw*[]) {
2958 				&gcc_pcie_aux_clk_src.clkr.hw,
2959 			},
2960 			.num_parents = 1,
2961 			.flags = CLK_SET_RATE_PARENT,
2962 			.ops = &clk_branch2_ops,
2963 		},
2964 	},
2965 };
2966 
2967 static struct clk_branch gcc_pcie_cfg_ahb_clk = {
2968 	.halt_reg = 0xaf010,
2969 	.halt_check = BRANCH_HALT_VOTED,
2970 	.hwcg_reg = 0xaf010,
2971 	.hwcg_bit = 1,
2972 	.clkr = {
2973 		.enable_reg = 0x7900c,
2974 		.enable_mask = BIT(27),
2975 		.hw.init = &(const struct clk_init_data) {
2976 			.name = "gcc_pcie_cfg_ahb_clk",
2977 			.ops = &clk_branch2_ops,
2978 		},
2979 	},
2980 };
2981 
2982 static struct clk_branch gcc_pcie_clkref_en = {
2983 	.halt_reg = 0xb8000,
2984 	.halt_check = BRANCH_HALT_DELAY,
2985 	.clkr = {
2986 		.enable_reg = 0xb8000,
2987 		.enable_mask = BIT(0),
2988 		.hw.init = &(const struct clk_init_data) {
2989 			.name = "gcc_pcie_clkref_en",
2990 			.ops = &clk_branch2_ops,
2991 		},
2992 	},
2993 };
2994 
2995 static struct clk_branch gcc_pcie_mstr_axi_clk = {
2996 	.halt_reg = 0xaf020,
2997 	.halt_check = BRANCH_HALT_VOTED,
2998 	.hwcg_reg = 0xaf020,
2999 	.hwcg_bit = 1,
3000 	.clkr = {
3001 		.enable_reg = 0x7900c,
3002 		.enable_mask = BIT(30),
3003 		.hw.init = &(const struct clk_init_data) {
3004 			.name = "gcc_pcie_mstr_axi_clk",
3005 			.ops = &clk_branch2_ops,
3006 		},
3007 	},
3008 };
3009 
3010 static struct clk_branch gcc_pcie_pipe_clk = {
3011 	.halt_reg = 0xaf050,
3012 	.halt_check = BRANCH_HALT_DELAY,
3013 	.hwcg_reg = 0xaf050,
3014 	.hwcg_bit = 1,
3015 	.clkr = {
3016 		.enable_reg = 0x79018,
3017 		.enable_mask = BIT(2),
3018 		.hw.init = &(const struct clk_init_data) {
3019 			.name = "gcc_pcie_pipe_clk",
3020 			.parent_hws = (const struct clk_hw*[]) {
3021 				&gcc_pcie_pipe_clk_src.clkr.hw,
3022 			},
3023 			.num_parents = 1,
3024 			.flags = CLK_SET_RATE_PARENT,
3025 			.ops = &clk_branch2_ops,
3026 		},
3027 	},
3028 };
3029 
3030 static struct clk_branch gcc_pcie_rchng_phy_clk = {
3031 	.halt_reg = 0xaf040,
3032 	.halt_check = BRANCH_HALT_VOTED,
3033 	.hwcg_reg = 0xaf040,
3034 	.hwcg_bit = 1,
3035 	.clkr = {
3036 		.enable_reg = 0x7900c,
3037 		.enable_mask = BIT(31),
3038 		.hw.init = &(const struct clk_init_data) {
3039 			.name = "gcc_pcie_rchng_phy_clk",
3040 			.parent_hws = (const struct clk_hw*[]) {
3041 				&gcc_pcie_rchng_phy_clk_src.clkr.hw,
3042 			},
3043 			.num_parents = 1,
3044 			.flags = CLK_SET_RATE_PARENT,
3045 			.ops = &clk_branch2_ops,
3046 		},
3047 	},
3048 };
3049 
3050 static struct clk_branch gcc_pcie_sleep_clk = {
3051 	.halt_reg = 0xaf04c,
3052 	.halt_check = BRANCH_HALT_VOTED,
3053 	.hwcg_reg = 0xaf04c,
3054 	.hwcg_bit = 1,
3055 	.clkr = {
3056 		.enable_reg = 0x79018,
3057 		.enable_mask = BIT(1),
3058 		.hw.init = &(const struct clk_init_data) {
3059 			.name = "gcc_pcie_sleep_clk",
3060 			.parent_hws = (const struct clk_hw*[]) {
3061 				&gcc_pcie_aux_phy_clk_src.clkr.hw,
3062 			},
3063 			.num_parents = 1,
3064 			.flags = CLK_SET_RATE_PARENT,
3065 			.ops = &clk_branch2_ops,
3066 		},
3067 	},
3068 };
3069 
3070 static struct clk_branch gcc_pcie_slv_axi_clk = {
3071 	.halt_reg = 0xaf018,
3072 	.halt_check = BRANCH_HALT_VOTED,
3073 	.clkr = {
3074 		.enable_reg = 0x7900c,
3075 		.enable_mask = BIT(29),
3076 		.hw.init = &(const struct clk_init_data) {
3077 			.name = "gcc_pcie_slv_axi_clk",
3078 			.ops = &clk_branch2_ops,
3079 		},
3080 	},
3081 };
3082 
3083 static struct clk_branch gcc_pcie_slv_q2a_axi_clk = {
3084 	.halt_reg = 0xaf014,
3085 	.halt_check = BRANCH_HALT_VOTED,
3086 	.hwcg_reg = 0xaf014,
3087 	.hwcg_bit = 1,
3088 	.clkr = {
3089 		.enable_reg = 0x7900c,
3090 		.enable_mask = BIT(28),
3091 		.hw.init = &(const struct clk_init_data) {
3092 			.name = "gcc_pcie_slv_q2a_axi_clk",
3093 			.ops = &clk_branch2_ops,
3094 		},
3095 	},
3096 };
3097 
3098 static struct clk_branch gcc_pcie_tbu_clk = {
3099 	.halt_reg = 0xaf098,
3100 	.halt_check = BRANCH_HALT_VOTED,
3101 	.hwcg_reg = 0xaf098,
3102 	.hwcg_bit = 1,
3103 	.clkr = {
3104 		.enable_reg = 0x79018,
3105 		.enable_mask = BIT(6),
3106 		.hw.init = &(const struct clk_init_data) {
3107 			.name = "gcc_pcie_tbu_clk",
3108 			.ops = &clk_branch2_ops,
3109 		},
3110 	},
3111 };
3112 
3113 static struct clk_branch gcc_pcie_throttle_core_clk = {
3114 	.halt_reg = 0xaf094,
3115 	.halt_check = BRANCH_HALT_VOTED,
3116 	.hwcg_reg = 0xaf094,
3117 	.hwcg_bit = 1,
3118 	.clkr = {
3119 		.enable_reg = 0x79018,
3120 		.enable_mask = BIT(5),
3121 		.hw.init = &(const struct clk_init_data) {
3122 			.name = "gcc_pcie_throttle_core_clk",
3123 			.ops = &clk_branch2_ops,
3124 		},
3125 	},
3126 };
3127 
3128 static struct clk_branch gcc_pcie_throttle_xo_clk = {
3129 	.halt_reg = 0xaf090,
3130 	.halt_check = BRANCH_HALT_VOTED,
3131 	.clkr = {
3132 		.enable_reg = 0x79018,
3133 		.enable_mask = BIT(4),
3134 		.hw.init = &(const struct clk_init_data) {
3135 			.name = "gcc_pcie_throttle_xo_clk",
3136 			.ops = &clk_branch2_ops,
3137 		},
3138 	},
3139 };
3140 
3141 static struct clk_branch gcc_pcie_tile_axi_sys_noc_clk = {
3142 	.halt_reg = 0x10f2c,
3143 	.halt_check = BRANCH_HALT_VOTED,
3144 	.hwcg_reg = 0x10f2c,
3145 	.hwcg_bit = 1,
3146 	.clkr = {
3147 		.enable_reg = 0x10f2c,
3148 		.enable_mask = BIT(0),
3149 		.hw.init = &(const struct clk_init_data) {
3150 			.name = "gcc_pcie_tile_axi_sys_noc_clk",
3151 			.parent_hws = (const struct clk_hw*[]) {
3152 				&gcc_emac0_axi_clk_src.clkr.hw,
3153 			},
3154 			.num_parents = 1,
3155 			.flags = CLK_SET_RATE_PARENT,
3156 			.ops = &clk_branch2_ops,
3157 		},
3158 	},
3159 };
3160 
3161 static struct clk_branch gcc_pdm2_clk = {
3162 	.halt_reg = 0x2000c,
3163 	.halt_check = BRANCH_HALT,
3164 	.clkr = {
3165 		.enable_reg = 0x2000c,
3166 		.enable_mask = BIT(0),
3167 		.hw.init = &(const struct clk_init_data) {
3168 			.name = "gcc_pdm2_clk",
3169 			.parent_hws = (const struct clk_hw*[]) {
3170 				&gcc_pdm2_clk_src.clkr.hw,
3171 			},
3172 			.num_parents = 1,
3173 			.flags = CLK_SET_RATE_PARENT,
3174 			.ops = &clk_branch2_ops,
3175 		},
3176 	},
3177 };
3178 
3179 static struct clk_branch gcc_pdm_ahb_clk = {
3180 	.halt_reg = 0x20004,
3181 	.halt_check = BRANCH_HALT,
3182 	.hwcg_reg = 0x20004,
3183 	.hwcg_bit = 1,
3184 	.clkr = {
3185 		.enable_reg = 0x20004,
3186 		.enable_mask = BIT(0),
3187 		.hw.init = &(const struct clk_init_data) {
3188 			.name = "gcc_pdm_ahb_clk",
3189 			.ops = &clk_branch2_ops,
3190 		},
3191 	},
3192 };
3193 
3194 static struct clk_branch gcc_pdm_xo4_clk = {
3195 	.halt_reg = 0x20008,
3196 	.halt_check = BRANCH_HALT,
3197 	.clkr = {
3198 		.enable_reg = 0x20008,
3199 		.enable_mask = BIT(0),
3200 		.hw.init = &(const struct clk_init_data) {
3201 			.name = "gcc_pdm_xo4_clk",
3202 			.ops = &clk_branch2_ops,
3203 		},
3204 	},
3205 };
3206 
3207 static struct clk_branch gcc_pwm0_xo512_clk = {
3208 	.halt_reg = 0x2002c,
3209 	.halt_check = BRANCH_HALT,
3210 	.clkr = {
3211 		.enable_reg = 0x2002c,
3212 		.enable_mask = BIT(0),
3213 		.hw.init = &(const struct clk_init_data) {
3214 			.name = "gcc_pwm0_xo512_clk",
3215 			.ops = &clk_branch2_ops,
3216 		},
3217 	},
3218 };
3219 
3220 static struct clk_branch gcc_qmip_camera_nrt_ahb_clk = {
3221 	.halt_reg = 0x17014,
3222 	.halt_check = BRANCH_HALT_VOTED,
3223 	.hwcg_reg = 0x17014,
3224 	.hwcg_bit = 1,
3225 	.clkr = {
3226 		.enable_reg = 0x79004,
3227 		.enable_mask = BIT(9),
3228 		.hw.init = &(const struct clk_init_data) {
3229 			.name = "gcc_qmip_camera_nrt_ahb_clk",
3230 			.ops = &clk_branch2_ops,
3231 		},
3232 	},
3233 };
3234 
3235 static struct clk_branch gcc_qmip_camera_rt_ahb_clk = {
3236 	.halt_reg = 0x17060,
3237 	.halt_check = BRANCH_HALT_VOTED,
3238 	.hwcg_reg = 0x17060,
3239 	.hwcg_bit = 1,
3240 	.clkr = {
3241 		.enable_reg = 0x79004,
3242 		.enable_mask = BIT(12),
3243 		.hw.init = &(const struct clk_init_data) {
3244 			.name = "gcc_qmip_camera_rt_ahb_clk",
3245 			.ops = &clk_branch2_ops,
3246 		},
3247 	},
3248 };
3249 
3250 static struct clk_branch gcc_qmip_disp_ahb_clk = {
3251 	.halt_reg = 0x17018,
3252 	.halt_check = BRANCH_HALT_VOTED,
3253 	.hwcg_reg = 0x17018,
3254 	.hwcg_bit = 1,
3255 	.clkr = {
3256 		.enable_reg = 0x79004,
3257 		.enable_mask = BIT(10),
3258 		.hw.init = &(const struct clk_init_data) {
3259 			.name = "gcc_qmip_disp_ahb_clk",
3260 			.ops = &clk_branch2_ops,
3261 		},
3262 	},
3263 };
3264 
3265 static struct clk_branch gcc_qmip_gpu_cfg_ahb_clk = {
3266 	.halt_reg = 0x36040,
3267 	.halt_check = BRANCH_HALT_VOTED,
3268 	.hwcg_reg = 0x36040,
3269 	.hwcg_bit = 1,
3270 	.clkr = {
3271 		.enable_reg = 0x7900c,
3272 		.enable_mask = BIT(20),
3273 		.hw.init = &(const struct clk_init_data) {
3274 			.name = "gcc_qmip_gpu_cfg_ahb_clk",
3275 			.ops = &clk_branch2_ops,
3276 		},
3277 	},
3278 };
3279 
3280 static struct clk_branch gcc_qmip_pcie_cfg_ahb_clk = {
3281 	.halt_reg = 0xaf08c,
3282 	.halt_check = BRANCH_HALT_VOTED,
3283 	.hwcg_reg = 0xaf08c,
3284 	.hwcg_bit = 1,
3285 	.clkr = {
3286 		.enable_reg = 0x79018,
3287 		.enable_mask = BIT(3),
3288 		.hw.init = &(const struct clk_init_data) {
3289 			.name = "gcc_qmip_pcie_cfg_ahb_clk",
3290 			.ops = &clk_branch2_ops,
3291 		},
3292 	},
3293 };
3294 
3295 static struct clk_branch gcc_qmip_video_vcodec_ahb_clk = {
3296 	.halt_reg = 0x17010,
3297 	.halt_check = BRANCH_HALT_VOTED,
3298 	.hwcg_reg = 0x17010,
3299 	.hwcg_bit = 1,
3300 	.clkr = {
3301 		.enable_reg = 0x79004,
3302 		.enable_mask = BIT(8),
3303 		.hw.init = &(const struct clk_init_data) {
3304 			.name = "gcc_qmip_video_vcodec_ahb_clk",
3305 			.ops = &clk_branch2_ops,
3306 		},
3307 	},
3308 };
3309 
3310 static struct clk_branch gcc_qupv3_wrap0_core_2x_clk = {
3311 	.halt_reg = 0x1f014,
3312 	.halt_check = BRANCH_HALT_VOTED,
3313 	.clkr = {
3314 		.enable_reg = 0x79004,
3315 		.enable_mask = BIT(21),
3316 		.hw.init = &(const struct clk_init_data) {
3317 			.name = "gcc_qupv3_wrap0_core_2x_clk",
3318 			.ops = &clk_branch2_ops,
3319 		},
3320 	},
3321 };
3322 
3323 static struct clk_branch gcc_qupv3_wrap0_core_clk = {
3324 	.halt_reg = 0x1f00c,
3325 	.halt_check = BRANCH_HALT_VOTED,
3326 	.clkr = {
3327 		.enable_reg = 0x79004,
3328 		.enable_mask = BIT(20),
3329 		.hw.init = &(const struct clk_init_data) {
3330 			.name = "gcc_qupv3_wrap0_core_clk",
3331 			.ops = &clk_branch2_ops,
3332 		},
3333 	},
3334 };
3335 
3336 static struct clk_branch gcc_qupv3_wrap0_s0_clk = {
3337 	.halt_reg = 0x1f144,
3338 	.halt_check = BRANCH_HALT_VOTED,
3339 	.clkr = {
3340 		.enable_reg = 0x79004,
3341 		.enable_mask = BIT(22),
3342 		.hw.init = &(const struct clk_init_data) {
3343 			.name = "gcc_qupv3_wrap0_s0_clk",
3344 			.parent_hws = (const struct clk_hw*[]) {
3345 				&gcc_qupv3_wrap0_s0_clk_src.clkr.hw,
3346 			},
3347 			.num_parents = 1,
3348 			.flags = CLK_SET_RATE_PARENT,
3349 			.ops = &clk_branch2_ops,
3350 		},
3351 	},
3352 };
3353 
3354 static struct clk_branch gcc_qupv3_wrap0_s1_clk = {
3355 	.halt_reg = 0x1f274,
3356 	.halt_check = BRANCH_HALT_VOTED,
3357 	.clkr = {
3358 		.enable_reg = 0x79004,
3359 		.enable_mask = BIT(23),
3360 		.hw.init = &(const struct clk_init_data) {
3361 			.name = "gcc_qupv3_wrap0_s1_clk",
3362 			.parent_hws = (const struct clk_hw*[]) {
3363 				&gcc_qupv3_wrap0_s1_clk_src.clkr.hw,
3364 			},
3365 			.num_parents = 1,
3366 			.flags = CLK_SET_RATE_PARENT,
3367 			.ops = &clk_branch2_ops,
3368 		},
3369 	},
3370 };
3371 
3372 static struct clk_branch gcc_qupv3_wrap0_s2_clk = {
3373 	.halt_reg = 0x1f3a4,
3374 	.halt_check = BRANCH_HALT_VOTED,
3375 	.clkr = {
3376 		.enable_reg = 0x79004,
3377 		.enable_mask = BIT(24),
3378 		.hw.init = &(const struct clk_init_data) {
3379 			.name = "gcc_qupv3_wrap0_s2_clk",
3380 			.parent_hws = (const struct clk_hw*[]) {
3381 				&gcc_qupv3_wrap0_s2_clk_src.clkr.hw,
3382 			},
3383 			.num_parents = 1,
3384 			.flags = CLK_SET_RATE_PARENT,
3385 			.ops = &clk_branch2_ops,
3386 		},
3387 	},
3388 };
3389 
3390 static struct clk_branch gcc_qupv3_wrap0_s3_clk = {
3391 	.halt_reg = 0x1f4d4,
3392 	.halt_check = BRANCH_HALT_VOTED,
3393 	.clkr = {
3394 		.enable_reg = 0x79004,
3395 		.enable_mask = BIT(25),
3396 		.hw.init = &(const struct clk_init_data) {
3397 			.name = "gcc_qupv3_wrap0_s3_clk",
3398 			.parent_hws = (const struct clk_hw*[]) {
3399 				&gcc_qupv3_wrap0_s3_clk_src.clkr.hw,
3400 			},
3401 			.num_parents = 1,
3402 			.flags = CLK_SET_RATE_PARENT,
3403 			.ops = &clk_branch2_ops,
3404 		},
3405 	},
3406 };
3407 
3408 static struct clk_branch gcc_qupv3_wrap0_s4_clk = {
3409 	.halt_reg = 0x1f604,
3410 	.halt_check = BRANCH_HALT_VOTED,
3411 	.clkr = {
3412 		.enable_reg = 0x79004,
3413 		.enable_mask = BIT(26),
3414 		.hw.init = &(const struct clk_init_data) {
3415 			.name = "gcc_qupv3_wrap0_s4_clk",
3416 			.parent_hws = (const struct clk_hw*[]) {
3417 				&gcc_qupv3_wrap0_s4_clk_src.clkr.hw,
3418 			},
3419 			.num_parents = 1,
3420 			.flags = CLK_SET_RATE_PARENT,
3421 			.ops = &clk_branch2_ops,
3422 		},
3423 	},
3424 };
3425 
3426 static struct clk_branch gcc_qupv3_wrap0_s5_clk = {
3427 	.halt_reg = 0x1f734,
3428 	.halt_check = BRANCH_HALT_VOTED,
3429 	.clkr = {
3430 		.enable_reg = 0x79004,
3431 		.enable_mask = BIT(27),
3432 		.hw.init = &(const struct clk_init_data) {
3433 			.name = "gcc_qupv3_wrap0_s5_clk",
3434 			.parent_hws = (const struct clk_hw*[]) {
3435 				&gcc_qupv3_wrap0_s5_clk_src.clkr.hw,
3436 			},
3437 			.num_parents = 1,
3438 			.flags = CLK_SET_RATE_PARENT,
3439 			.ops = &clk_branch2_ops,
3440 		},
3441 	},
3442 };
3443 
3444 static struct clk_branch gcc_qupv3_wrap0_s6_clk = {
3445 	.halt_reg = 0x1f864,
3446 	.halt_check = BRANCH_HALT_VOTED,
3447 	.clkr = {
3448 		.enable_reg = 0x79004,
3449 		.enable_mask = BIT(28),
3450 		.hw.init = &(const struct clk_init_data) {
3451 			.name = "gcc_qupv3_wrap0_s6_clk",
3452 			.parent_hws = (const struct clk_hw*[]) {
3453 				&gcc_qupv3_wrap0_s6_clk_src.clkr.hw,
3454 			},
3455 			.num_parents = 1,
3456 			.flags = CLK_SET_RATE_PARENT,
3457 			.ops = &clk_branch2_ops,
3458 		},
3459 	},
3460 };
3461 
3462 static struct clk_branch gcc_qupv3_wrap0_s7_clk = {
3463 	.halt_reg = 0x1f994,
3464 	.halt_check = BRANCH_HALT_VOTED,
3465 	.clkr = {
3466 		.enable_reg = 0x79004,
3467 		.enable_mask = BIT(29),
3468 		.hw.init = &(const struct clk_init_data) {
3469 			.name = "gcc_qupv3_wrap0_s7_clk",
3470 			.parent_hws = (const struct clk_hw*[]) {
3471 				&gcc_qupv3_wrap0_s7_clk_src.clkr.hw,
3472 			},
3473 			.num_parents = 1,
3474 			.flags = CLK_SET_RATE_PARENT,
3475 			.ops = &clk_branch2_ops,
3476 		},
3477 	},
3478 };
3479 
3480 static struct clk_branch gcc_qupv3_wrap0_s8_clk = {
3481 	.halt_reg = 0x1fac4,
3482 	.halt_check = BRANCH_HALT_VOTED,
3483 	.clkr = {
3484 		.enable_reg = 0x79004,
3485 		.enable_mask = BIT(30),
3486 		.hw.init = &(const struct clk_init_data) {
3487 			.name = "gcc_qupv3_wrap0_s8_clk",
3488 			.parent_hws = (const struct clk_hw*[]) {
3489 				&gcc_qupv3_wrap0_s8_clk_src.clkr.hw,
3490 			},
3491 			.num_parents = 1,
3492 			.flags = CLK_SET_RATE_PARENT,
3493 			.ops = &clk_branch2_ops,
3494 		},
3495 	},
3496 };
3497 
3498 static struct clk_branch gcc_qupv3_wrap0_s9_clk = {
3499 	.halt_reg = 0x1fbf4,
3500 	.halt_check = BRANCH_HALT_VOTED,
3501 	.clkr = {
3502 		.enable_reg = 0x79004,
3503 		.enable_mask = BIT(31),
3504 		.hw.init = &(const struct clk_init_data) {
3505 			.name = "gcc_qupv3_wrap0_s9_clk",
3506 			.parent_hws = (const struct clk_hw*[]) {
3507 				&gcc_qupv3_wrap0_s9_clk_src.clkr.hw,
3508 			},
3509 			.num_parents = 1,
3510 			.flags = CLK_SET_RATE_PARENT,
3511 			.ops = &clk_branch2_ops,
3512 		},
3513 	},
3514 };
3515 
3516 static struct clk_branch gcc_qupv3_wrap_0_m_ahb_clk = {
3517 	.halt_reg = 0x1f004,
3518 	.halt_check = BRANCH_HALT_VOTED,
3519 	.hwcg_reg = 0x1f004,
3520 	.hwcg_bit = 1,
3521 	.clkr = {
3522 		.enable_reg = 0x79004,
3523 		.enable_mask = BIT(18),
3524 		.hw.init = &(const struct clk_init_data) {
3525 			.name = "gcc_qupv3_wrap_0_m_ahb_clk",
3526 			.ops = &clk_branch2_ops,
3527 		},
3528 	},
3529 };
3530 
3531 static struct clk_branch gcc_qupv3_wrap_0_s_ahb_clk = {
3532 	.halt_reg = 0x1f008,
3533 	.halt_check = BRANCH_HALT_VOTED,
3534 	.hwcg_reg = 0x1f008,
3535 	.hwcg_bit = 1,
3536 	.clkr = {
3537 		.enable_reg = 0x79004,
3538 		.enable_mask = BIT(19),
3539 		.hw.init = &(const struct clk_init_data) {
3540 			.name = "gcc_qupv3_wrap_0_s_ahb_clk",
3541 			.ops = &clk_branch2_ops,
3542 		},
3543 	},
3544 };
3545 
3546 static struct clk_branch gcc_sdcc1_ahb_clk = {
3547 	.halt_reg = 0x38008,
3548 	.halt_check = BRANCH_HALT,
3549 	.hwcg_reg = 0x38008,
3550 	.hwcg_bit = 1,
3551 	.clkr = {
3552 		.enable_reg = 0x38008,
3553 		.enable_mask = BIT(0),
3554 		.hw.init = &(const struct clk_init_data) {
3555 			.name = "gcc_sdcc1_ahb_clk",
3556 			.ops = &clk_branch2_ops,
3557 		},
3558 	},
3559 };
3560 
3561 static struct clk_branch gcc_sdcc1_apps_clk = {
3562 	.halt_reg = 0x38004,
3563 	.halt_check = BRANCH_HALT,
3564 	.clkr = {
3565 		.enable_reg = 0x38004,
3566 		.enable_mask = BIT(0),
3567 		.hw.init = &(const struct clk_init_data) {
3568 			.name = "gcc_sdcc1_apps_clk",
3569 			.parent_hws = (const struct clk_hw*[]) {
3570 				&gcc_sdcc1_apps_clk_src.clkr.hw,
3571 			},
3572 			.num_parents = 1,
3573 			.flags = CLK_SET_RATE_PARENT,
3574 			.ops = &clk_branch2_ops,
3575 		},
3576 	},
3577 };
3578 
3579 static struct clk_branch gcc_sdcc1_ice_core_clk = {
3580 	.halt_reg = 0x3800c,
3581 	.halt_check = BRANCH_HALT,
3582 	.hwcg_reg = 0x3800c,
3583 	.hwcg_bit = 1,
3584 	.clkr = {
3585 		.enable_reg = 0x3800c,
3586 		.enable_mask = BIT(0),
3587 		.hw.init = &(const struct clk_init_data) {
3588 			.name = "gcc_sdcc1_ice_core_clk",
3589 			.parent_hws = (const struct clk_hw*[]) {
3590 				&gcc_sdcc1_ice_core_clk_src.clkr.hw,
3591 			},
3592 			.num_parents = 1,
3593 			.flags = CLK_SET_RATE_PARENT,
3594 			.ops = &clk_branch2_ops,
3595 		},
3596 	},
3597 };
3598 
3599 static struct clk_branch gcc_sdcc2_ahb_clk = {
3600 	.halt_reg = 0x1e008,
3601 	.halt_check = BRANCH_HALT,
3602 	.hwcg_reg = 0x1e008,
3603 	.hwcg_bit = 1,
3604 	.clkr = {
3605 		.enable_reg = 0x1e008,
3606 		.enable_mask = BIT(0),
3607 		.hw.init = &(const struct clk_init_data) {
3608 			.name = "gcc_sdcc2_ahb_clk",
3609 			.ops = &clk_branch2_ops,
3610 		},
3611 	},
3612 };
3613 
3614 static struct clk_branch gcc_sdcc2_apps_clk = {
3615 	.halt_reg = 0x1e004,
3616 	.halt_check = BRANCH_HALT,
3617 	.clkr = {
3618 		.enable_reg = 0x1e004,
3619 		.enable_mask = BIT(0),
3620 		.hw.init = &(const struct clk_init_data) {
3621 			.name = "gcc_sdcc2_apps_clk",
3622 			.parent_hws = (const struct clk_hw*[]) {
3623 				&gcc_sdcc2_apps_clk_src.clkr.hw,
3624 			},
3625 			.num_parents = 1,
3626 			.flags = CLK_SET_RATE_PARENT,
3627 			.ops = &clk_branch2_ops,
3628 		},
3629 	},
3630 };
3631 
3632 static struct clk_branch gcc_sys_noc_usb2_prim_axi_clk = {
3633 	.halt_reg = 0x10a14,
3634 	.halt_check = BRANCH_HALT_VOTED,
3635 	.hwcg_reg = 0x10a14,
3636 	.hwcg_bit = 1,
3637 	.clkr = {
3638 		.enable_reg = 0x10a14,
3639 		.enable_mask = BIT(0),
3640 		.hw.init = &(const struct clk_init_data) {
3641 			.name = "gcc_sys_noc_usb2_prim_axi_clk",
3642 			.parent_hws = (const struct clk_hw*[]) {
3643 				&gcc_usb20_master_clk_src.clkr.hw,
3644 			},
3645 			.num_parents = 1,
3646 			.flags = CLK_SET_RATE_PARENT,
3647 			.ops = &clk_branch2_ops,
3648 		},
3649 	},
3650 };
3651 
3652 static struct clk_branch gcc_sys_noc_usb3_prim_axi_clk = {
3653 	.halt_reg = 0x1a078,
3654 	.halt_check = BRANCH_HALT_VOTED,
3655 	.hwcg_reg = 0x1a078,
3656 	.hwcg_bit = 1,
3657 	.clkr = {
3658 		.enable_reg = 0x1a078,
3659 		.enable_mask = BIT(0),
3660 		.hw.init = &(const struct clk_init_data) {
3661 			.name = "gcc_sys_noc_usb3_prim_axi_clk",
3662 			.parent_hws = (const struct clk_hw*[]) {
3663 				&gcc_usb30_prim_master_clk_src.clkr.hw,
3664 			},
3665 			.num_parents = 1,
3666 			.flags = CLK_SET_RATE_PARENT,
3667 			.ops = &clk_branch2_ops,
3668 		},
3669 	},
3670 };
3671 
3672 static struct clk_branch gcc_tscss_ahb_clk = {
3673 	.halt_reg = 0xac024,
3674 	.halt_check = BRANCH_HALT_VOTED,
3675 	.hwcg_reg = 0xac024,
3676 	.hwcg_bit = 1,
3677 	.clkr = {
3678 		.enable_reg = 0xac024,
3679 		.enable_mask = BIT(0),
3680 		.hw.init = &(const struct clk_init_data) {
3681 			.name = "gcc_tscss_ahb_clk",
3682 			.ops = &clk_branch2_ops,
3683 		},
3684 	},
3685 };
3686 
3687 static struct clk_branch gcc_tscss_cntr_clk = {
3688 	.halt_reg = 0xac020,
3689 	.halt_check = BRANCH_HALT,
3690 	.clkr = {
3691 		.enable_reg = 0xac020,
3692 		.enable_mask = BIT(0),
3693 		.hw.init = &(const struct clk_init_data) {
3694 			.name = "gcc_tscss_cntr_clk",
3695 			.parent_hws = (const struct clk_hw*[]) {
3696 				&gcc_tscss_clk_src.clkr.hw,
3697 			},
3698 			.num_parents = 1,
3699 			.flags = CLK_SET_RATE_PARENT,
3700 			.ops = &clk_branch2_ops,
3701 		},
3702 	},
3703 };
3704 
3705 static struct clk_branch gcc_tscss_etu_clk = {
3706 	.halt_reg = 0xac01c,
3707 	.halt_check = BRANCH_HALT,
3708 	.clkr = {
3709 		.enable_reg = 0xac01c,
3710 		.enable_mask = BIT(0),
3711 		.hw.init = &(const struct clk_init_data) {
3712 			.name = "gcc_tscss_etu_clk",
3713 			.parent_hws = (const struct clk_hw*[]) {
3714 				&gcc_tscss_clk_src.clkr.hw,
3715 			},
3716 			.num_parents = 1,
3717 			.flags = CLK_SET_RATE_PARENT,
3718 			.ops = &clk_branch2_ops,
3719 		},
3720 	},
3721 };
3722 
3723 static struct clk_branch gcc_ufs_clkref_en = {
3724 	.halt_reg = 0x8c000,
3725 	.halt_check = BRANCH_HALT_DELAY,
3726 	.clkr = {
3727 		.enable_reg = 0x8c000,
3728 		.enable_mask = BIT(0),
3729 		.hw.init = &(const struct clk_init_data) {
3730 			.name = "gcc_ufs_clkref_en",
3731 			.ops = &clk_branch2_ops,
3732 		},
3733 	},
3734 };
3735 
3736 static struct clk_branch gcc_usb20_master_clk = {
3737 	.halt_reg = 0xb0010,
3738 	.halt_check = BRANCH_HALT_VOTED,
3739 	.hwcg_reg = 0xb0010,
3740 	.hwcg_bit = 1,
3741 	.clkr = {
3742 		.enable_reg = 0xb0010,
3743 		.enable_mask = BIT(0),
3744 		.hw.init = &(const struct clk_init_data) {
3745 			.name = "gcc_usb20_master_clk",
3746 			.parent_hws = (const struct clk_hw*[]) {
3747 				&gcc_usb20_master_clk_src.clkr.hw,
3748 			},
3749 			.num_parents = 1,
3750 			.flags = CLK_SET_RATE_PARENT,
3751 			.ops = &clk_branch2_ops,
3752 		},
3753 	},
3754 };
3755 
3756 static struct clk_branch gcc_usb20_mock_utmi_clk = {
3757 	.halt_reg = 0xb001c,
3758 	.halt_check = BRANCH_HALT_VOTED,
3759 	.clkr = {
3760 		.enable_reg = 0xb001c,
3761 		.enable_mask = BIT(0),
3762 		.hw.init = &(const struct clk_init_data) {
3763 			.name = "gcc_usb20_mock_utmi_clk",
3764 			.parent_hws = (const struct clk_hw*[]) {
3765 				&gcc_usb20_mock_utmi_postdiv_clk_src.clkr.hw,
3766 			},
3767 			.num_parents = 1,
3768 			.flags = CLK_SET_RATE_PARENT,
3769 			.ops = &clk_branch2_ops,
3770 		},
3771 	},
3772 };
3773 
3774 static struct clk_branch gcc_usb20_sleep_clk = {
3775 	.halt_reg = 0xb0018,
3776 	.halt_check = BRANCH_HALT_VOTED,
3777 	.clkr = {
3778 		.enable_reg = 0xb0018,
3779 		.enable_mask = BIT(0),
3780 		.hw.init = &(const struct clk_init_data) {
3781 			.name = "gcc_usb20_sleep_clk",
3782 			.ops = &clk_branch2_ops,
3783 		},
3784 	},
3785 };
3786 
3787 static struct clk_branch gcc_usb30_prim_master_clk = {
3788 	.halt_reg = 0x1a010,
3789 	.halt_check = BRANCH_HALT,
3790 	.hwcg_reg = 0x1a010,
3791 	.hwcg_bit = 1,
3792 	.clkr = {
3793 		.enable_reg = 0x1a010,
3794 		.enable_mask = BIT(0),
3795 		.hw.init = &(const struct clk_init_data) {
3796 			.name = "gcc_usb30_prim_master_clk",
3797 			.parent_hws = (const struct clk_hw*[]) {
3798 				&gcc_usb30_prim_master_clk_src.clkr.hw,
3799 			},
3800 			.num_parents = 1,
3801 			.flags = CLK_SET_RATE_PARENT,
3802 			.ops = &clk_branch2_ops,
3803 		},
3804 	},
3805 };
3806 
3807 static struct clk_branch gcc_usb30_prim_mock_utmi_clk = {
3808 	.halt_reg = 0x1a018,
3809 	.halt_check = BRANCH_HALT,
3810 	.clkr = {
3811 		.enable_reg = 0x1a018,
3812 		.enable_mask = BIT(0),
3813 		.hw.init = &(const struct clk_init_data) {
3814 			.name = "gcc_usb30_prim_mock_utmi_clk",
3815 			.parent_hws = (const struct clk_hw*[]) {
3816 				&gcc_usb30_prim_mock_utmi_postdiv_clk_src.clkr.hw,
3817 			},
3818 			.num_parents = 1,
3819 			.flags = CLK_SET_RATE_PARENT,
3820 			.ops = &clk_branch2_ops,
3821 		},
3822 	},
3823 };
3824 
3825 static struct clk_branch gcc_usb30_prim_sleep_clk = {
3826 	.halt_reg = 0x1a014,
3827 	.halt_check = BRANCH_HALT,
3828 	.clkr = {
3829 		.enable_reg = 0x1a014,
3830 		.enable_mask = BIT(0),
3831 		.hw.init = &(const struct clk_init_data) {
3832 			.name = "gcc_usb30_prim_sleep_clk",
3833 			.ops = &clk_branch2_ops,
3834 		},
3835 	},
3836 };
3837 
3838 static struct clk_branch gcc_usb3_prim_clkref_en = {
3839 	.halt_reg = 0x9f000,
3840 	.halt_check = BRANCH_HALT_DELAY,
3841 	.clkr = {
3842 		.enable_reg = 0x9f000,
3843 		.enable_mask = BIT(0),
3844 		.hw.init = &(const struct clk_init_data) {
3845 			.name = "gcc_usb3_prim_clkref_en",
3846 			.ops = &clk_branch2_ops,
3847 		},
3848 	},
3849 };
3850 
3851 static struct clk_branch gcc_usb3_prim_phy_com_aux_clk = {
3852 	.halt_reg = 0x1a054,
3853 	.halt_check = BRANCH_HALT,
3854 	.clkr = {
3855 		.enable_reg = 0x1a054,
3856 		.enable_mask = BIT(0),
3857 		.hw.init = &(const struct clk_init_data) {
3858 			.name = "gcc_usb3_prim_phy_com_aux_clk",
3859 			.parent_hws = (const struct clk_hw*[]) {
3860 				&gcc_usb3_prim_phy_aux_clk_src.clkr.hw,
3861 			},
3862 			.num_parents = 1,
3863 			.flags = CLK_SET_RATE_PARENT,
3864 			.ops = &clk_branch2_ops,
3865 		},
3866 	},
3867 };
3868 
3869 static struct clk_branch gcc_usb3_prim_phy_pipe_clk = {
3870 	.halt_reg = 0x1a058,
3871 	.halt_check = BRANCH_HALT_DELAY,
3872 	.hwcg_reg = 0x1a058,
3873 	.hwcg_bit = 1,
3874 	.clkr = {
3875 		.enable_reg = 0x1a058,
3876 		.enable_mask = BIT(0),
3877 		.hw.init = &(const struct clk_init_data) {
3878 			.name = "gcc_usb3_prim_phy_pipe_clk",
3879 			.parent_hws = (const struct clk_hw*[]) {
3880 				&gcc_usb3_prim_phy_pipe_clk_src.clkr.hw,
3881 			},
3882 			.num_parents = 1,
3883 			.flags = CLK_SET_RATE_PARENT,
3884 			.ops = &clk_branch2_ops,
3885 		},
3886 	},
3887 };
3888 
3889 static struct clk_branch gcc_vcodec0_axi_clk = {
3890 	.halt_reg = 0x6e008,
3891 	.halt_check = BRANCH_HALT,
3892 	.clkr = {
3893 		.enable_reg = 0x6e008,
3894 		.enable_mask = BIT(0),
3895 		.hw.init = &(const struct clk_init_data) {
3896 			.name = "gcc_vcodec0_axi_clk",
3897 			.ops = &clk_branch2_ops,
3898 		},
3899 	},
3900 };
3901 
3902 static struct clk_branch gcc_venus_ahb_clk = {
3903 	.halt_reg = 0x6e010,
3904 	.halt_check = BRANCH_HALT,
3905 	.clkr = {
3906 		.enable_reg = 0x6e010,
3907 		.enable_mask = BIT(0),
3908 		.hw.init = &(const struct clk_init_data) {
3909 			.name = "gcc_venus_ahb_clk",
3910 			.ops = &clk_branch2_ops,
3911 		},
3912 	},
3913 };
3914 
3915 static struct clk_branch gcc_venus_ctl_axi_clk = {
3916 	.halt_reg = 0x6e004,
3917 	.halt_check = BRANCH_HALT,
3918 	.clkr = {
3919 		.enable_reg = 0x6e004,
3920 		.enable_mask = BIT(0),
3921 		.hw.init = &(const struct clk_init_data) {
3922 			.name = "gcc_venus_ctl_axi_clk",
3923 			.ops = &clk_branch2_ops,
3924 		},
3925 	},
3926 };
3927 
3928 static struct clk_branch gcc_video_axi0_clk = {
3929 	.halt_reg = 0x1701c,
3930 	.halt_check = BRANCH_HALT,
3931 	.hwcg_reg = 0x1701c,
3932 	.hwcg_bit = 1,
3933 	.clkr = {
3934 		.enable_reg = 0x1701c,
3935 		.enable_mask = BIT(0),
3936 		.hw.init = &(const struct clk_init_data) {
3937 			.name = "gcc_video_axi0_clk",
3938 			.ops = &clk_branch2_ops,
3939 		},
3940 	},
3941 };
3942 
3943 static struct clk_branch gcc_video_throttle_core_clk = {
3944 	.halt_reg = 0x17068,
3945 	.halt_check = BRANCH_HALT_VOTED,
3946 	.hwcg_reg = 0x17068,
3947 	.hwcg_bit = 1,
3948 	.clkr = {
3949 		.enable_reg = 0x79004,
3950 		.enable_mask = BIT(14),
3951 		.hw.init = &(const struct clk_init_data) {
3952 			.name = "gcc_video_throttle_core_clk",
3953 			.ops = &clk_branch2_ops,
3954 		},
3955 	},
3956 };
3957 
3958 static struct clk_branch gcc_video_vcodec0_sys_clk = {
3959 	.halt_reg = 0x6d044,
3960 	.halt_check = BRANCH_HALT_DELAY,
3961 	.hwcg_reg = 0x6d044,
3962 	.hwcg_bit = 1,
3963 	.clkr = {
3964 		.enable_reg = 0x6d044,
3965 		.enable_mask = BIT(0),
3966 		.hw.init = &(const struct clk_init_data) {
3967 			.name = "gcc_video_vcodec0_sys_clk",
3968 			.parent_hws = (const struct clk_hw*[]) {
3969 				&gcc_video_venus_clk_src.clkr.hw,
3970 			},
3971 			.num_parents = 1,
3972 			.flags = CLK_SET_RATE_PARENT,
3973 			.ops = &clk_branch2_ops,
3974 		},
3975 	},
3976 };
3977 
3978 static struct clk_branch gcc_video_venus_ctl_clk = {
3979 	.halt_reg = 0x6d02c,
3980 	.halt_check = BRANCH_HALT,
3981 	.clkr = {
3982 		.enable_reg = 0x6d02c,
3983 		.enable_mask = BIT(0),
3984 		.hw.init = &(const struct clk_init_data) {
3985 			.name = "gcc_video_venus_ctl_clk",
3986 			.parent_hws = (const struct clk_hw*[]) {
3987 				&gcc_video_venus_clk_src.clkr.hw,
3988 			},
3989 			.num_parents = 1,
3990 			.flags = CLK_SET_RATE_PARENT,
3991 			.ops = &clk_branch2_ops,
3992 		},
3993 	},
3994 };
3995 
3996 static struct gdsc gcc_camss_top_gdsc = {
3997 	.gdscr = 0x58004,
3998 	.en_rest_wait_val = 0x2,
3999 	.en_few_wait_val = 0x2,
4000 	.clk_dis_wait_val = 0xf,
4001 	.pd = {
4002 		.name = "gcc_camss_top_gdsc",
4003 	},
4004 	.pwrsts = PWRSTS_OFF_ON,
4005 	.flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE,
4006 };
4007 
4008 static struct gdsc gcc_emac0_gdsc = {
4009 	.gdscr = 0xad004,
4010 	.en_rest_wait_val = 0x2,
4011 	.en_few_wait_val = 0x2,
4012 	.clk_dis_wait_val = 0x2,
4013 	.pd = {
4014 		.name = "gcc_emac0_gdsc",
4015 	},
4016 	.pwrsts = PWRSTS_OFF_ON,
4017 	.flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE,
4018 };
4019 
4020 static struct gdsc gcc_emac1_gdsc = {
4021 	.gdscr = 0xae004,
4022 	.en_rest_wait_val = 0x2,
4023 	.en_few_wait_val = 0x2,
4024 	.clk_dis_wait_val = 0x2,
4025 	.pd = {
4026 		.name = "gcc_emac1_gdsc",
4027 	},
4028 	.pwrsts = PWRSTS_OFF_ON,
4029 	.flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE,
4030 };
4031 
4032 static struct gdsc gcc_pcie_gdsc = {
4033 	.gdscr = 0xaf004,
4034 	.en_rest_wait_val = 0x2,
4035 	.en_few_wait_val = 0x2,
4036 	.clk_dis_wait_val = 0xf,
4037 	.pd = {
4038 		.name = "gcc_pcie_gdsc",
4039 	},
4040 	.pwrsts = PWRSTS_OFF_ON,
4041 	.flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE,
4042 };
4043 
4044 static struct gdsc gcc_usb20_gdsc = {
4045 	.gdscr = 0xb0004,
4046 	.en_rest_wait_val = 0x2,
4047 	.en_few_wait_val = 0x2,
4048 	.clk_dis_wait_val = 0xf,
4049 	.pd = {
4050 		.name = "gcc_usb20_gdsc",
4051 	},
4052 	.pwrsts = PWRSTS_OFF_ON,
4053 	.flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE,
4054 };
4055 
4056 static struct gdsc gcc_usb30_prim_gdsc = {
4057 	.gdscr = 0x1a004,
4058 	.en_rest_wait_val = 0x2,
4059 	.en_few_wait_val = 0x2,
4060 	.clk_dis_wait_val = 0x2,
4061 	.pd = {
4062 		.name = "gcc_usb30_prim_gdsc",
4063 	},
4064 	.pwrsts = PWRSTS_OFF_ON,
4065 	.flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE,
4066 };
4067 
4068 static struct gdsc gcc_venus_gdsc = {
4069 	.gdscr = 0x6d01c,
4070 	.en_rest_wait_val = 0x2,
4071 	.en_few_wait_val = 0x2,
4072 	.clk_dis_wait_val = 0xf,
4073 	.pd = {
4074 		.name = "gcc_venus_gdsc",
4075 	},
4076 	.pwrsts = PWRSTS_OFF_ON,
4077 	.flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE,
4078 };
4079 
4080 static struct gdsc gcc_vcodec0_gdsc = {
4081 	.gdscr = 0x6d038,
4082 	.en_rest_wait_val = 0x2,
4083 	.en_few_wait_val = 0x2,
4084 	.clk_dis_wait_val = 0xf,
4085 	.pd = {
4086 		.name = "gcc_vcodec0_gdsc",
4087 	},
4088 	.pwrsts = PWRSTS_OFF_ON,
4089 	.parent = &gcc_venus_gdsc.pd,
4090 	.flags = HW_CTRL_TRIGGER | POLL_CFG_GDSCR | RETAIN_FF_ENABLE,
4091 };
4092 
4093 static struct clk_regmap *gcc_shikra_clocks[] = {
4094 	[GCC_AHB2PHY_CSI_CLK] = &gcc_ahb2phy_csi_clk.clkr,
4095 	[GCC_AHB2PHY_USB_CLK] = &gcc_ahb2phy_usb_clk.clkr,
4096 	[GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr,
4097 	[GCC_CAM_THROTTLE_NRT_CLK] = &gcc_cam_throttle_nrt_clk.clkr,
4098 	[GCC_CAM_THROTTLE_RT_CLK] = &gcc_cam_throttle_rt_clk.clkr,
4099 	[GCC_CAMSS_AXI_CLK] = &gcc_camss_axi_clk.clkr,
4100 	[GCC_CAMSS_AXI_CLK_SRC] = &gcc_camss_axi_clk_src.clkr,
4101 	[GCC_CAMSS_CAMNOC_ATB_CLK] = &gcc_camss_camnoc_atb_clk.clkr,
4102 	[GCC_CAMSS_CAMNOC_DRAGONLINK_ATB_CLK] = &gcc_camss_camnoc_dragonlink_atb_clk.clkr,
4103 	[GCC_CAMSS_CAMNOC_NTS_XO_CLK] = &gcc_camss_camnoc_nts_xo_clk.clkr,
4104 	[GCC_CAMSS_CCI_0_CLK] = &gcc_camss_cci_0_clk.clkr,
4105 	[GCC_CAMSS_CCI_CLK_SRC] = &gcc_camss_cci_clk_src.clkr,
4106 	[GCC_CAMSS_CPHY_0_CLK] = &gcc_camss_cphy_0_clk.clkr,
4107 	[GCC_CAMSS_CPHY_1_CLK] = &gcc_camss_cphy_1_clk.clkr,
4108 	[GCC_CAMSS_CSI0PHYTIMER_CLK] = &gcc_camss_csi0phytimer_clk.clkr,
4109 	[GCC_CAMSS_CSI0PHYTIMER_CLK_SRC] = &gcc_camss_csi0phytimer_clk_src.clkr,
4110 	[GCC_CAMSS_CSI1PHYTIMER_CLK] = &gcc_camss_csi1phytimer_clk.clkr,
4111 	[GCC_CAMSS_CSI1PHYTIMER_CLK_SRC] = &gcc_camss_csi1phytimer_clk_src.clkr,
4112 	[GCC_CAMSS_MCLK0_CLK] = &gcc_camss_mclk0_clk.clkr,
4113 	[GCC_CAMSS_MCLK0_CLK_SRC] = &gcc_camss_mclk0_clk_src.clkr,
4114 	[GCC_CAMSS_MCLK1_CLK] = &gcc_camss_mclk1_clk.clkr,
4115 	[GCC_CAMSS_MCLK1_CLK_SRC] = &gcc_camss_mclk1_clk_src.clkr,
4116 	[GCC_CAMSS_MCLK2_CLK] = &gcc_camss_mclk2_clk.clkr,
4117 	[GCC_CAMSS_MCLK2_CLK_SRC] = &gcc_camss_mclk2_clk_src.clkr,
4118 	[GCC_CAMSS_MCLK3_CLK] = &gcc_camss_mclk3_clk.clkr,
4119 	[GCC_CAMSS_MCLK3_CLK_SRC] = &gcc_camss_mclk3_clk_src.clkr,
4120 	[GCC_CAMSS_NRT_AXI_CLK] = &gcc_camss_nrt_axi_clk.clkr,
4121 	[GCC_CAMSS_OPE_AHB_CLK] = &gcc_camss_ope_ahb_clk.clkr,
4122 	[GCC_CAMSS_OPE_AHB_CLK_SRC] = &gcc_camss_ope_ahb_clk_src.clkr,
4123 	[GCC_CAMSS_OPE_CLK] = &gcc_camss_ope_clk.clkr,
4124 	[GCC_CAMSS_OPE_CLK_SRC] = &gcc_camss_ope_clk_src.clkr,
4125 	[GCC_CAMSS_RT_AXI_CLK] = &gcc_camss_rt_axi_clk.clkr,
4126 	[GCC_CAMSS_TFE_0_CLK] = &gcc_camss_tfe_0_clk.clkr,
4127 	[GCC_CAMSS_TFE_0_CLK_SRC] = &gcc_camss_tfe_0_clk_src.clkr,
4128 	[GCC_CAMSS_TFE_0_CPHY_RX_CLK] = &gcc_camss_tfe_0_cphy_rx_clk.clkr,
4129 	[GCC_CAMSS_TFE_0_CSID_CLK] = &gcc_camss_tfe_0_csid_clk.clkr,
4130 	[GCC_CAMSS_TFE_0_CSID_CLK_SRC] = &gcc_camss_tfe_0_csid_clk_src.clkr,
4131 	[GCC_CAMSS_TFE_1_CLK] = &gcc_camss_tfe_1_clk.clkr,
4132 	[GCC_CAMSS_TFE_1_CLK_SRC] = &gcc_camss_tfe_1_clk_src.clkr,
4133 	[GCC_CAMSS_TFE_1_CPHY_RX_CLK] = &gcc_camss_tfe_1_cphy_rx_clk.clkr,
4134 	[GCC_CAMSS_TFE_1_CSID_CLK] = &gcc_camss_tfe_1_csid_clk.clkr,
4135 	[GCC_CAMSS_TFE_1_CSID_CLK_SRC] = &gcc_camss_tfe_1_csid_clk_src.clkr,
4136 	[GCC_CAMSS_TFE_CPHY_RX_CLK_SRC] = &gcc_camss_tfe_cphy_rx_clk_src.clkr,
4137 	[GCC_CAMSS_TOP_AHB_CLK] = &gcc_camss_top_ahb_clk.clkr,
4138 	[GCC_CAMSS_TOP_AHB_CLK_SRC] = &gcc_camss_top_ahb_clk_src.clkr,
4139 	[GCC_CFG_NOC_USB2_PRIM_AXI_CLK] = &gcc_cfg_noc_usb2_prim_axi_clk.clkr,
4140 	[GCC_CFG_NOC_USB3_PRIM_AXI_CLK] = &gcc_cfg_noc_usb3_prim_axi_clk.clkr,
4141 	[GCC_DDRSS_GPU_AXI_CLK] = &gcc_ddrss_gpu_axi_clk.clkr,
4142 	[GCC_DDRSS_MEMNOC_PCIE_SF_CLK] = &gcc_ddrss_memnoc_pcie_sf_clk.clkr,
4143 	[GCC_DISP_GPLL0_CLK_SRC] = &gcc_disp_gpll0_clk_src.clkr,
4144 	[GCC_DISP_GPLL0_DIV_CLK_SRC] = &gcc_disp_gpll0_div_clk_src.clkr,
4145 	[GCC_DISP_HF_AXI_CLK] = &gcc_disp_hf_axi_clk.clkr,
4146 	[GCC_DISP_THROTTLE_CORE_CLK] = &gcc_disp_throttle_core_clk.clkr,
4147 	[GCC_EMAC0_AHB_CLK] = &gcc_emac0_ahb_clk.clkr,
4148 	[GCC_EMAC0_AXI_CLK] = &gcc_emac0_axi_clk.clkr,
4149 	[GCC_EMAC0_AXI_CLK_SRC] = &gcc_emac0_axi_clk_src.clkr,
4150 	[GCC_EMAC0_AXI_SYS_NOC_CLK] = &gcc_emac0_axi_sys_noc_clk.clkr,
4151 	[GCC_EMAC0_CC_SGMIIPHY_RX_CLK] = &gcc_emac0_cc_sgmiiphy_rx_clk.clkr,
4152 	[GCC_EMAC0_CC_SGMIIPHY_RX_CLK_SRC] = &gcc_emac0_cc_sgmiiphy_rx_clk_src.clkr,
4153 	[GCC_EMAC0_CC_SGMIIPHY_TX_CLK] = &gcc_emac0_cc_sgmiiphy_tx_clk.clkr,
4154 	[GCC_EMAC0_CC_SGMIIPHY_TX_CLK_SRC] = &gcc_emac0_cc_sgmiiphy_tx_clk_src.clkr,
4155 	[GCC_EMAC0_PHY_AUX_CLK] = &gcc_emac0_phy_aux_clk.clkr,
4156 	[GCC_EMAC0_PHY_AUX_CLK_SRC] = &gcc_emac0_phy_aux_clk_src.clkr,
4157 	[GCC_EMAC0_PTP_CLK] = &gcc_emac0_ptp_clk.clkr,
4158 	[GCC_EMAC0_PTP_CLK_SRC] = &gcc_emac0_ptp_clk_src.clkr,
4159 	[GCC_EMAC0_RGMII_CLK] = &gcc_emac0_rgmii_clk.clkr,
4160 	[GCC_EMAC0_RGMII_CLK_SRC] = &gcc_emac0_rgmii_clk_src.clkr,
4161 	[GCC_EMAC1_AHB_CLK] = &gcc_emac1_ahb_clk.clkr,
4162 	[GCC_EMAC1_AXI_CLK] = &gcc_emac1_axi_clk.clkr,
4163 	[GCC_EMAC1_AXI_CLK_SRC] = &gcc_emac1_axi_clk_src.clkr,
4164 	[GCC_EMAC1_AXI_SYS_NOC_CLK] = &gcc_emac1_axi_sys_noc_clk.clkr,
4165 	[GCC_EMAC1_CC_SGMIIPHY_RX_CLK] = &gcc_emac1_cc_sgmiiphy_rx_clk.clkr,
4166 	[GCC_EMAC1_CC_SGMIIPHY_RX_CLK_SRC] = &gcc_emac1_cc_sgmiiphy_rx_clk_src.clkr,
4167 	[GCC_EMAC1_CC_SGMIIPHY_TX_CLK] = &gcc_emac1_cc_sgmiiphy_tx_clk.clkr,
4168 	[GCC_EMAC1_CC_SGMIIPHY_TX_CLK_SRC] = &gcc_emac1_cc_sgmiiphy_tx_clk_src.clkr,
4169 	[GCC_EMAC1_PHY_AUX_CLK] = &gcc_emac1_phy_aux_clk.clkr,
4170 	[GCC_EMAC1_PHY_AUX_CLK_SRC] = &gcc_emac1_phy_aux_clk_src.clkr,
4171 	[GCC_EMAC1_PTP_CLK] = &gcc_emac1_ptp_clk.clkr,
4172 	[GCC_EMAC1_PTP_CLK_SRC] = &gcc_emac1_ptp_clk_src.clkr,
4173 	[GCC_EMAC1_RGMII_CLK] = &gcc_emac1_rgmii_clk.clkr,
4174 	[GCC_EMAC1_RGMII_CLK_SRC] = &gcc_emac1_rgmii_clk_src.clkr,
4175 	[GCC_GP1_CLK] = &gcc_gp1_clk.clkr,
4176 	[GCC_GP1_CLK_SRC] = &gcc_gp1_clk_src.clkr,
4177 	[GCC_GP2_CLK] = &gcc_gp2_clk.clkr,
4178 	[GCC_GP2_CLK_SRC] = &gcc_gp2_clk_src.clkr,
4179 	[GCC_GP3_CLK] = &gcc_gp3_clk.clkr,
4180 	[GCC_GP3_CLK_SRC] = &gcc_gp3_clk_src.clkr,
4181 	[GCC_GPU_GPLL0_CLK_SRC] = &gcc_gpu_gpll0_clk_src.clkr,
4182 	[GCC_GPU_GPLL0_DIV_CLK_SRC] = &gcc_gpu_gpll0_div_clk_src.clkr,
4183 	[GCC_GPU_MEMNOC_GFX_CLK] = &gcc_gpu_memnoc_gfx_clk.clkr,
4184 	[GCC_GPU_SMMU_VOTE_CLK] = &gcc_gpu_smmu_vote_clk.clkr,
4185 	[GCC_GPU_SNOC_DVM_GFX_CLK] = &gcc_gpu_snoc_dvm_gfx_clk.clkr,
4186 	[GCC_GPU_THROTTLE_CORE_CLK] = &gcc_gpu_throttle_core_clk.clkr,
4187 	[GCC_MMU_TCU_VOTE_CLK] = &gcc_mmu_tcu_vote_clk.clkr,
4188 	[GCC_PCIE_AUX_CLK] = &gcc_pcie_aux_clk.clkr,
4189 	[GCC_PCIE_AUX_CLK_SRC] = &gcc_pcie_aux_clk_src.clkr,
4190 	[GCC_PCIE_AUX_PHY_CLK_SRC] = &gcc_pcie_aux_phy_clk_src.clkr,
4191 	[GCC_PCIE_CFG_AHB_CLK] = &gcc_pcie_cfg_ahb_clk.clkr,
4192 	[GCC_PCIE_CLKREF_EN] = &gcc_pcie_clkref_en.clkr,
4193 	[GCC_PCIE_MSTR_AXI_CLK] = &gcc_pcie_mstr_axi_clk.clkr,
4194 	[GCC_PCIE_PIPE_CLK] = &gcc_pcie_pipe_clk.clkr,
4195 	[GCC_PCIE_PIPE_CLK_SRC] = &gcc_pcie_pipe_clk_src.clkr,
4196 	[GCC_PCIE_RCHNG_PHY_CLK] = &gcc_pcie_rchng_phy_clk.clkr,
4197 	[GCC_PCIE_RCHNG_PHY_CLK_SRC] = &gcc_pcie_rchng_phy_clk_src.clkr,
4198 	[GCC_PCIE_SLEEP_CLK] = &gcc_pcie_sleep_clk.clkr,
4199 	[GCC_PCIE_SLV_AXI_CLK] = &gcc_pcie_slv_axi_clk.clkr,
4200 	[GCC_PCIE_SLV_Q2A_AXI_CLK] = &gcc_pcie_slv_q2a_axi_clk.clkr,
4201 	[GCC_PCIE_TBU_CLK] = &gcc_pcie_tbu_clk.clkr,
4202 	[GCC_PCIE_THROTTLE_CORE_CLK] = &gcc_pcie_throttle_core_clk.clkr,
4203 	[GCC_PCIE_THROTTLE_XO_CLK] = &gcc_pcie_throttle_xo_clk.clkr,
4204 	[GCC_PCIE_TILE_AXI_SYS_NOC_CLK] = &gcc_pcie_tile_axi_sys_noc_clk.clkr,
4205 	[GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr,
4206 	[GCC_PDM2_CLK_SRC] = &gcc_pdm2_clk_src.clkr,
4207 	[GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr,
4208 	[GCC_PDM_XO4_CLK] = &gcc_pdm_xo4_clk.clkr,
4209 	[GCC_PWM0_XO512_CLK] = &gcc_pwm0_xo512_clk.clkr,
4210 	[GCC_QMIP_CAMERA_NRT_AHB_CLK] = &gcc_qmip_camera_nrt_ahb_clk.clkr,
4211 	[GCC_QMIP_CAMERA_RT_AHB_CLK] = &gcc_qmip_camera_rt_ahb_clk.clkr,
4212 	[GCC_QMIP_DISP_AHB_CLK] = &gcc_qmip_disp_ahb_clk.clkr,
4213 	[GCC_QMIP_GPU_CFG_AHB_CLK] = &gcc_qmip_gpu_cfg_ahb_clk.clkr,
4214 	[GCC_QMIP_PCIE_CFG_AHB_CLK] = &gcc_qmip_pcie_cfg_ahb_clk.clkr,
4215 	[GCC_QMIP_VIDEO_VCODEC_AHB_CLK] = &gcc_qmip_video_vcodec_ahb_clk.clkr,
4216 	[GCC_QUPV3_WRAP0_CORE_2X_CLK] = &gcc_qupv3_wrap0_core_2x_clk.clkr,
4217 	[GCC_QUPV3_WRAP0_CORE_CLK] = &gcc_qupv3_wrap0_core_clk.clkr,
4218 	[GCC_QUPV3_WRAP0_S0_CLK] = &gcc_qupv3_wrap0_s0_clk.clkr,
4219 	[GCC_QUPV3_WRAP0_S0_CLK_SRC] = &gcc_qupv3_wrap0_s0_clk_src.clkr,
4220 	[GCC_QUPV3_WRAP0_S1_CLK] = &gcc_qupv3_wrap0_s1_clk.clkr,
4221 	[GCC_QUPV3_WRAP0_S1_CLK_SRC] = &gcc_qupv3_wrap0_s1_clk_src.clkr,
4222 	[GCC_QUPV3_WRAP0_S2_CLK] = &gcc_qupv3_wrap0_s2_clk.clkr,
4223 	[GCC_QUPV3_WRAP0_S2_CLK_SRC] = &gcc_qupv3_wrap0_s2_clk_src.clkr,
4224 	[GCC_QUPV3_WRAP0_S3_CLK] = &gcc_qupv3_wrap0_s3_clk.clkr,
4225 	[GCC_QUPV3_WRAP0_S3_CLK_SRC] = &gcc_qupv3_wrap0_s3_clk_src.clkr,
4226 	[GCC_QUPV3_WRAP0_S4_CLK] = &gcc_qupv3_wrap0_s4_clk.clkr,
4227 	[GCC_QUPV3_WRAP0_S4_CLK_SRC] = &gcc_qupv3_wrap0_s4_clk_src.clkr,
4228 	[GCC_QUPV3_WRAP0_S5_CLK] = &gcc_qupv3_wrap0_s5_clk.clkr,
4229 	[GCC_QUPV3_WRAP0_S5_CLK_SRC] = &gcc_qupv3_wrap0_s5_clk_src.clkr,
4230 	[GCC_QUPV3_WRAP0_S6_CLK] = &gcc_qupv3_wrap0_s6_clk.clkr,
4231 	[GCC_QUPV3_WRAP0_S6_CLK_SRC] = &gcc_qupv3_wrap0_s6_clk_src.clkr,
4232 	[GCC_QUPV3_WRAP0_S7_CLK] = &gcc_qupv3_wrap0_s7_clk.clkr,
4233 	[GCC_QUPV3_WRAP0_S7_CLK_SRC] = &gcc_qupv3_wrap0_s7_clk_src.clkr,
4234 	[GCC_QUPV3_WRAP0_S8_CLK] = &gcc_qupv3_wrap0_s8_clk.clkr,
4235 	[GCC_QUPV3_WRAP0_S8_CLK_SRC] = &gcc_qupv3_wrap0_s8_clk_src.clkr,
4236 	[GCC_QUPV3_WRAP0_S9_CLK] = &gcc_qupv3_wrap0_s9_clk.clkr,
4237 	[GCC_QUPV3_WRAP0_S9_CLK_SRC] = &gcc_qupv3_wrap0_s9_clk_src.clkr,
4238 	[GCC_QUPV3_WRAP_0_M_AHB_CLK] = &gcc_qupv3_wrap_0_m_ahb_clk.clkr,
4239 	[GCC_QUPV3_WRAP_0_S_AHB_CLK] = &gcc_qupv3_wrap_0_s_ahb_clk.clkr,
4240 	[GCC_SDCC1_AHB_CLK] = &gcc_sdcc1_ahb_clk.clkr,
4241 	[GCC_SDCC1_APPS_CLK] = &gcc_sdcc1_apps_clk.clkr,
4242 	[GCC_SDCC1_APPS_CLK_SRC] = &gcc_sdcc1_apps_clk_src.clkr,
4243 	[GCC_SDCC1_ICE_CORE_CLK] = &gcc_sdcc1_ice_core_clk.clkr,
4244 	[GCC_SDCC1_ICE_CORE_CLK_SRC] = &gcc_sdcc1_ice_core_clk_src.clkr,
4245 	[GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr,
4246 	[GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr,
4247 	[GCC_SDCC2_APPS_CLK_SRC] = &gcc_sdcc2_apps_clk_src.clkr,
4248 	[GCC_SYS_NOC_USB2_PRIM_AXI_CLK] = &gcc_sys_noc_usb2_prim_axi_clk.clkr,
4249 	[GCC_SYS_NOC_USB3_PRIM_AXI_CLK] = &gcc_sys_noc_usb3_prim_axi_clk.clkr,
4250 	[GCC_TSCSS_AHB_CLK] = &gcc_tscss_ahb_clk.clkr,
4251 	[GCC_TSCSS_CLK_SRC] = &gcc_tscss_clk_src.clkr,
4252 	[GCC_TSCSS_CNTR_CLK] = &gcc_tscss_cntr_clk.clkr,
4253 	[GCC_TSCSS_ETU_CLK] = &gcc_tscss_etu_clk.clkr,
4254 	[GCC_UFS_CLKREF_EN] = &gcc_ufs_clkref_en.clkr,
4255 	[GCC_USB20_MASTER_CLK] = &gcc_usb20_master_clk.clkr,
4256 	[GCC_USB20_MASTER_CLK_SRC] = &gcc_usb20_master_clk_src.clkr,
4257 	[GCC_USB20_MOCK_UTMI_CLK] = &gcc_usb20_mock_utmi_clk.clkr,
4258 	[GCC_USB20_MOCK_UTMI_CLK_SRC] = &gcc_usb20_mock_utmi_clk_src.clkr,
4259 	[GCC_USB20_MOCK_UTMI_POSTDIV_CLK_SRC] = &gcc_usb20_mock_utmi_postdiv_clk_src.clkr,
4260 	[GCC_USB20_SLEEP_CLK] = &gcc_usb20_sleep_clk.clkr,
4261 	[GCC_USB30_PRIM_MASTER_CLK] = &gcc_usb30_prim_master_clk.clkr,
4262 	[GCC_USB30_PRIM_MASTER_CLK_SRC] = &gcc_usb30_prim_master_clk_src.clkr,
4263 	[GCC_USB30_PRIM_MOCK_UTMI_CLK] = &gcc_usb30_prim_mock_utmi_clk.clkr,
4264 	[GCC_USB30_PRIM_MOCK_UTMI_CLK_SRC] = &gcc_usb30_prim_mock_utmi_clk_src.clkr,
4265 	[GCC_USB30_PRIM_MOCK_UTMI_POSTDIV_CLK_SRC] = &gcc_usb30_prim_mock_utmi_postdiv_clk_src.clkr,
4266 	[GCC_USB30_PRIM_SLEEP_CLK] = &gcc_usb30_prim_sleep_clk.clkr,
4267 	[GCC_USB3_PRIM_CLKREF_EN] = &gcc_usb3_prim_clkref_en.clkr,
4268 	[GCC_USB3_PRIM_PHY_AUX_CLK_SRC] = &gcc_usb3_prim_phy_aux_clk_src.clkr,
4269 	[GCC_USB3_PRIM_PHY_COM_AUX_CLK] = &gcc_usb3_prim_phy_com_aux_clk.clkr,
4270 	[GCC_USB3_PRIM_PHY_PIPE_CLK] = &gcc_usb3_prim_phy_pipe_clk.clkr,
4271 	[GCC_USB3_PRIM_PHY_PIPE_CLK_SRC] = &gcc_usb3_prim_phy_pipe_clk_src.clkr,
4272 	[GCC_VCODEC0_AXI_CLK] = &gcc_vcodec0_axi_clk.clkr,
4273 	[GCC_VENUS_AHB_CLK] = &gcc_venus_ahb_clk.clkr,
4274 	[GCC_VENUS_CTL_AXI_CLK] = &gcc_venus_ctl_axi_clk.clkr,
4275 	[GCC_VIDEO_AXI0_CLK] = &gcc_video_axi0_clk.clkr,
4276 	[GCC_VIDEO_THROTTLE_CORE_CLK] = &gcc_video_throttle_core_clk.clkr,
4277 	[GCC_VIDEO_VCODEC0_SYS_CLK] = &gcc_video_vcodec0_sys_clk.clkr,
4278 	[GCC_VIDEO_VENUS_CLK_SRC] = &gcc_video_venus_clk_src.clkr,
4279 	[GCC_VIDEO_VENUS_CTL_CLK] = &gcc_video_venus_ctl_clk.clkr,
4280 	[GPLL0] = &gpll0.clkr,
4281 	[GPLL0_OUT_AUX2] = &gpll0_out_aux2.clkr,
4282 	[GPLL10] = &gpll10.clkr,
4283 	[GPLL11] = &gpll11.clkr,
4284 	[GPLL12] = &gpll12.clkr,
4285 	[GPLL12_OUT_AUX2] = &gpll12_out_aux2.clkr,
4286 	[GPLL3] = &gpll3.clkr,
4287 	[GPLL3_OUT_MAIN] = &gpll3_out_main.clkr,
4288 	[GPLL4] = &gpll4.clkr,
4289 	[GPLL5] = &gpll5.clkr,
4290 	[GPLL6] = &gpll6.clkr,
4291 	[GPLL6_OUT_MAIN] = &gpll6_out_main.clkr,
4292 	[GPLL7] = &gpll7.clkr,
4293 	[GPLL8] = &gpll8.clkr,
4294 	[GPLL8_OUT_MAIN] = &gpll8_out_main.clkr,
4295 	[GPLL9] = &gpll9.clkr,
4296 	[GPLL9_OUT_MAIN] = &gpll9_out_main.clkr,
4297 };
4298 
4299 static struct gdsc *gcc_shikra_gdscs[] = {
4300 	[GCC_CAMSS_TOP_GDSC] = &gcc_camss_top_gdsc,
4301 	[GCC_EMAC0_GDSC] = &gcc_emac0_gdsc,
4302 	[GCC_EMAC1_GDSC] = &gcc_emac1_gdsc,
4303 	[GCC_PCIE_GDSC] = &gcc_pcie_gdsc,
4304 	[GCC_USB20_GDSC] = &gcc_usb20_gdsc,
4305 	[GCC_USB30_PRIM_GDSC] = &gcc_usb30_prim_gdsc,
4306 	[GCC_VCODEC0_GDSC] = &gcc_vcodec0_gdsc,
4307 	[GCC_VENUS_GDSC] = &gcc_venus_gdsc,
4308 };
4309 
4310 static const struct qcom_reset_map gcc_shikra_resets[] = {
4311 	[GCC_CAMSS_OPE_BCR] = { 0x55000 },
4312 	[GCC_CAMSS_TFE_BCR] = { 0x52000 },
4313 	[GCC_CAMSS_TOP_BCR] = { 0x58000 },
4314 	[GCC_EMAC0_BCR] = { 0xad000 },
4315 	[GCC_EMAC1_BCR] = { 0xae000 },
4316 	[GCC_GPU_BCR] = { 0x36000 },
4317 	[GCC_MMSS_BCR] = { 0x17000 },
4318 	[GCC_PCIE_BCR] = { 0xaf000 },
4319 	[GCC_PCIE_PHY_BCR] = { 0xb1000 },
4320 	[GCC_PDM_BCR] = { 0x20000 },
4321 	[GCC_QUPV3_WRAPPER_0_BCR] = { 0x1f000 },
4322 	[GCC_QUSB2PHY_PRIM_BCR] = { 0x1c000 },
4323 	[GCC_QUSB2PHY_SEC_BCR] = { 0x1c004 },
4324 	[GCC_SDCC1_BCR] = { 0x38000 },
4325 	[GCC_SDCC2_BCR] = { 0x1e000 },
4326 	[GCC_TSCSS_BCR] = { 0xac000 },
4327 	[GCC_USB20_BCR] = { 0xb0000 },
4328 	[GCC_USB30_PRIM_BCR] = { 0x1a000 },
4329 	[GCC_USB3PHY_PHY_PRIM_SP0_BCR] = { 0x1b008 },
4330 	[GCC_USB3_DP_PHY_PRIM_BCR] = { 0x1b020 },
4331 	[GCC_USB3_PHY_PRIM_SP0_BCR] = { 0x1b000 },
4332 	[GCC_USB_PHY_CFG_AHB2PHY_BCR] = { 0x1d000 },
4333 	[GCC_VCODEC0_BCR] = { 0x6d034 },
4334 	[GCC_VENUS_BCR] = { 0x6d018 },
4335 	[GCC_VIDEO_INTERFACE_BCR] = { 0x6e000 },
4336 };
4337 
4338 static struct clk_alpha_pll *gcc_shikra_plls[] = {
4339 	&gpll10,
4340 	&gpll11,
4341 	&gpll8,
4342 	&gpll9,
4343 };
4344 
4345 static const u32 gcc_shikra_critical_cbcrs[] = {
4346 	0x17008, /* GCC_CAMERA_AHB_CLK */
4347 	0x17028, /* GCC_CAMERA_XO_CLK */
4348 	0x1700c, /* GCC_DISP_AHB_CLK */
4349 	0x1702c, /* GCC_DISP_XO_CLK */
4350 	0x36004, /* GCC_GPU_CFG_AHB_CLK */
4351 	0x36100, /* GCC_GPU_IREF_CLK */
4352 	0x3a00c, /* GCC_LPASS_CONFIG_CLK */
4353 	0x3a008, /* GCC_LPASS_CORE_AXIM_CLK */
4354 	0x79004, /* GCC_SYS_NOC_CPUSS_AHB_CLK */
4355 	0x17004, /* GCC_VIDEO_AHB_CLK */
4356 	0x17024, /* GCC_VIDEO_XO_CLK */
4357 };
4358 
4359 static const struct clk_rcg_dfs_data gcc_shikra_dfs_clocks[] = {
4360 	DEFINE_RCG_DFS(gcc_qupv3_wrap0_s0_clk_src),
4361 	DEFINE_RCG_DFS(gcc_qupv3_wrap0_s1_clk_src),
4362 	DEFINE_RCG_DFS(gcc_qupv3_wrap0_s2_clk_src),
4363 	DEFINE_RCG_DFS(gcc_qupv3_wrap0_s3_clk_src),
4364 	DEFINE_RCG_DFS(gcc_qupv3_wrap0_s4_clk_src),
4365 	DEFINE_RCG_DFS(gcc_qupv3_wrap0_s5_clk_src),
4366 	DEFINE_RCG_DFS(gcc_qupv3_wrap0_s6_clk_src),
4367 	DEFINE_RCG_DFS(gcc_qupv3_wrap0_s7_clk_src),
4368 	DEFINE_RCG_DFS(gcc_qupv3_wrap0_s8_clk_src),
4369 	DEFINE_RCG_DFS(gcc_qupv3_wrap0_s9_clk_src),
4370 };
4371 
4372 static const struct regmap_config gcc_shikra_regmap_config = {
4373 	.reg_bits = 32,
4374 	.reg_stride = 4,
4375 	.val_bits = 32,
4376 	.max_register = 0xc7000,
4377 	.fast_io = true,
4378 };
4379 
4380 static const struct qcom_cc_driver_data gcc_shikra_driver_data = {
4381 	.alpha_plls = gcc_shikra_plls,
4382 	.num_alpha_plls = ARRAY_SIZE(gcc_shikra_plls),
4383 	.clk_cbcrs = gcc_shikra_critical_cbcrs,
4384 	.num_clk_cbcrs = ARRAY_SIZE(gcc_shikra_critical_cbcrs),
4385 	.dfs_rcgs = gcc_shikra_dfs_clocks,
4386 	.num_dfs_rcgs = ARRAY_SIZE(gcc_shikra_dfs_clocks),
4387 };
4388 
4389 static const struct qcom_cc_desc gcc_shikra_desc = {
4390 	.config = &gcc_shikra_regmap_config,
4391 	.clks = gcc_shikra_clocks,
4392 	.num_clks = ARRAY_SIZE(gcc_shikra_clocks),
4393 	.resets = gcc_shikra_resets,
4394 	.num_resets = ARRAY_SIZE(gcc_shikra_resets),
4395 	.gdscs = gcc_shikra_gdscs,
4396 	.num_gdscs = ARRAY_SIZE(gcc_shikra_gdscs),
4397 	.driver_data = &gcc_shikra_driver_data,
4398 };
4399 
4400 static const struct of_device_id gcc_shikra_match_table[] = {
4401 	{ .compatible = "qcom,shikra-gcc" },
4402 	{ }
4403 };
4404 MODULE_DEVICE_TABLE(of, gcc_shikra_match_table);
4405 
gcc_shikra_probe(struct platform_device * pdev)4406 static int gcc_shikra_probe(struct platform_device *pdev)
4407 {
4408 	return qcom_cc_probe(pdev, &gcc_shikra_desc);
4409 }
4410 
4411 static struct platform_driver gcc_shikra_driver = {
4412 	.probe = gcc_shikra_probe,
4413 	.driver = {
4414 		.name = "gcc-shikra",
4415 		.of_match_table = gcc_shikra_match_table,
4416 	},
4417 };
4418 
gcc_shikra_init(void)4419 static int __init gcc_shikra_init(void)
4420 {
4421 	return platform_driver_register(&gcc_shikra_driver);
4422 }
4423 subsys_initcall(gcc_shikra_init);
4424 
gcc_shikra_exit(void)4425 static void __exit gcc_shikra_exit(void)
4426 {
4427 	platform_driver_unregister(&gcc_shikra_driver);
4428 }
4429 module_exit(gcc_shikra_exit);
4430 
4431 MODULE_DESCRIPTION("QTI GCC Shikra Driver");
4432 MODULE_LICENSE("GPL");
4433