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