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