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