cf4a7b6e0b23adfcca2c74aea74aa8e14ccfe20f
[releases.git] / gcc-sm6350.c
1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3  * Copyright (c) 2021, The Linux Foundation. All rights reserved.
4  * Copyright (c) 2021, Konrad Dybcio <konrad.dybcio@somainline.org>
5  */
6
7 #include <linux/clk-provider.h>
8 #include <linux/module.h>
9 #include <linux/platform_device.h>
10 #include <linux/regmap.h>
11
12 #include <dt-bindings/clock/qcom,gcc-sm6350.h>
13
14 #include "clk-alpha-pll.h"
15 #include "clk-branch.h"
16 #include "clk-rcg.h"
17 #include "clk-regmap.h"
18 #include "clk-regmap-divider.h"
19 #include "clk-regmap-mux.h"
20 #include "common.h"
21 #include "gdsc.h"
22 #include "reset.h"
23
24 enum {
25         P_BI_TCXO,
26         P_GPLL0_OUT_EVEN,
27         P_GPLL0_OUT_MAIN,
28         P_GPLL0_OUT_ODD,
29         P_GPLL6_OUT_EVEN,
30         P_GPLL7_OUT_MAIN,
31         P_SLEEP_CLK,
32 };
33
34 static struct clk_alpha_pll gpll0 = {
35         .offset = 0x0,
36         .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
37         .clkr = {
38                 .enable_reg = 0x52010,
39                 .enable_mask = BIT(0),
40                 .hw.init = &(struct clk_init_data){
41                         .name = "gpll0",
42                         .parent_data = &(const struct clk_parent_data){
43                                 .fw_name = "bi_tcxo",
44                         },
45                         .num_parents = 1,
46                         .ops = &clk_alpha_pll_fixed_fabia_ops,
47                 },
48         },
49 };
50
51 static const struct clk_div_table post_div_table_gpll0_out_even[] = {
52         { 0x1, 2 },
53         { }
54 };
55
56 static struct clk_alpha_pll_postdiv gpll0_out_even = {
57         .offset = 0x0,
58         .post_div_shift = 8,
59         .post_div_table = post_div_table_gpll0_out_even,
60         .num_post_div = ARRAY_SIZE(post_div_table_gpll0_out_even),
61         .width = 4,
62         .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
63         .clkr.hw.init = &(struct clk_init_data){
64                 .name = "gpll0_out_even",
65                 .parent_hws = (const struct clk_hw*[]){
66                         &gpll0.clkr.hw,
67                 },
68                 .num_parents = 1,
69                 .ops = &clk_alpha_pll_postdiv_fabia_ops,
70         },
71 };
72
73 static const struct clk_div_table post_div_table_gpll0_out_odd[] = {
74         { 0x3, 3 },
75         { }
76 };
77
78 static struct clk_alpha_pll_postdiv gpll0_out_odd = {
79         .offset = 0x0,
80         .post_div_shift = 12,
81         .post_div_table = post_div_table_gpll0_out_odd,
82         .num_post_div = ARRAY_SIZE(post_div_table_gpll0_out_odd),
83         .width = 4,
84         .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
85         .clkr.hw.init = &(struct clk_init_data){
86                 .name = "gpll0_out_odd",
87                 .parent_hws = (const struct clk_hw*[]){
88                         &gpll0.clkr.hw,
89                 },
90                 .num_parents = 1,
91                 .ops = &clk_alpha_pll_postdiv_fabia_ops,
92         },
93 };
94
95 static struct clk_alpha_pll gpll6 = {
96         .offset = 0x6000,
97         .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
98         .clkr = {
99                 .enable_reg = 0x52010,
100                 .enable_mask = BIT(6),
101                 .hw.init = &(struct clk_init_data){
102                         .name = "gpll6",
103                         .parent_hws = (const struct clk_hw*[]){
104                                 &gpll0.clkr.hw,
105                         },
106                         .num_parents = 1,
107                         .ops = &clk_alpha_pll_fixed_fabia_ops,
108                 },
109         },
110 };
111
112 static const struct clk_div_table post_div_table_gpll6_out_even[] = {
113         { 0x1, 2 },
114         { }
115 };
116
117 static struct clk_alpha_pll_postdiv gpll6_out_even = {
118         .offset = 0x6000,
119         .post_div_shift = 8,
120         .post_div_table = post_div_table_gpll6_out_even,
121         .num_post_div = ARRAY_SIZE(post_div_table_gpll6_out_even),
122         .width = 4,
123         .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
124         .clkr.hw.init = &(struct clk_init_data){
125                 .name = "gpll6_out_even",
126                 .parent_hws = (const struct clk_hw*[]){
127                         &gpll0.clkr.hw,
128                 },
129                 .num_parents = 1,
130                 .ops = &clk_alpha_pll_postdiv_fabia_ops,
131         },
132 };
133
134 static struct clk_alpha_pll gpll7 = {
135         .offset = 0x7000,
136         .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
137         .clkr = {
138                 .enable_reg = 0x52010,
139                 .enable_mask = BIT(7),
140                 .hw.init = &(struct clk_init_data){
141                         .name = "gpll7",
142                         .parent_hws = (const struct clk_hw*[]){
143                                 &gpll0.clkr.hw,
144                         },
145                         .num_parents = 1,
146                         .ops = &clk_alpha_pll_fixed_fabia_ops,
147                 },
148         },
149 };
150
151 static const struct parent_map gcc_parent_map_0[] = {
152         { P_BI_TCXO, 0 },
153         { P_GPLL0_OUT_MAIN, 1 },
154         { P_GPLL6_OUT_EVEN, 2 },
155         { P_GPLL0_OUT_EVEN, 6 },
156 };
157
158 static const struct clk_parent_data gcc_parent_data_0[] = {
159         { .fw_name = "bi_tcxo" },
160         { .hw = &gpll0.clkr.hw },
161         { .hw = &gpll6_out_even.clkr.hw },
162         { .hw = &gpll0_out_even.clkr.hw },
163 };
164
165 static const struct parent_map gcc_parent_map_1[] = {
166         { P_BI_TCXO, 0 },
167         { P_GPLL0_OUT_EVEN, 6 },
168 };
169
170 static const struct clk_parent_data gcc_parent_data_1[] = {
171         { .fw_name = "bi_tcxo" },
172         { .hw = &gpll0_out_even.clkr.hw },
173 };
174
175 static const struct parent_map gcc_parent_map_2[] = {
176         { P_BI_TCXO, 0 },
177         { P_GPLL0_OUT_ODD, 2 },
178 };
179
180 static const struct clk_parent_data gcc_parent_data_2_ao[] = {
181         { .fw_name = "bi_tcxo_ao" },
182         { .hw = &gpll0_out_odd.clkr.hw },
183 };
184
185 static const struct parent_map gcc_parent_map_4[] = {
186         { P_BI_TCXO, 0 },
187         { P_GPLL0_OUT_MAIN, 1 },
188         { P_GPLL0_OUT_ODD, 2 },
189 };
190
191 static const struct clk_parent_data gcc_parent_data_4[] = {
192         { .fw_name = "bi_tcxo" },
193         { .hw = &gpll0.clkr.hw },
194         { .hw = &gpll0_out_odd.clkr.hw },
195 };
196
197 static const struct parent_map gcc_parent_map_5[] = {
198         { P_BI_TCXO, 0 },
199         { P_GPLL0_OUT_ODD, 2 },
200         { P_SLEEP_CLK, 5 },
201         { P_GPLL0_OUT_EVEN, 6 },
202 };
203
204 static const struct clk_parent_data gcc_parent_data_5[] = {
205         { .fw_name = "bi_tcxo" },
206         { .hw = &gpll0_out_odd.clkr.hw },
207         { .fw_name = "sleep_clk" },
208         { .hw = &gpll0_out_even.clkr.hw },
209 };
210
211 static const struct parent_map gcc_parent_map_6[] = {
212         { P_BI_TCXO, 0 },
213         { P_SLEEP_CLK, 5 },
214 };
215
216 static const struct clk_parent_data gcc_parent_data_6[] = {
217         { .fw_name = "bi_tcxo" },
218         { .fw_name = "sleep_clk" }
219 };
220
221 static const struct parent_map gcc_parent_map_7[] = {
222         { P_BI_TCXO, 0 },
223         { P_GPLL6_OUT_EVEN, 2 },
224         { P_GPLL0_OUT_EVEN, 6 },
225 };
226
227 static const struct clk_parent_data gcc_parent_data_7[] = {
228         { .fw_name = "bi_tcxo" },
229         { .hw = &gpll6_out_even.clkr.hw },
230         { .hw = &gpll0_out_even.clkr.hw },
231 };
232
233 static const struct parent_map gcc_parent_map_8[] = {
234         { P_BI_TCXO, 0 },
235         { P_GPLL0_OUT_ODD, 2 },
236         { P_GPLL7_OUT_MAIN, 3 },
237 };
238
239 static const struct clk_parent_data gcc_parent_data_8[] = {
240         { .fw_name = "bi_tcxo" },
241         { .hw = &gpll0_out_odd.clkr.hw },
242         { .hw = &gpll7.clkr.hw },
243 };
244
245 static struct clk_regmap_div gcc_gpu_gpll0_main_div_clk_src = {
246         .reg = 0x4514C,
247         .shift = 0,
248         .width = 2,
249         .clkr.hw.init = &(struct clk_init_data) {
250                 .name = "gcc_gpu_gpll0_main_div_clk_src",
251                 .parent_hws = (const struct clk_hw*[]){
252                         &gpll0.clkr.hw,
253                 },
254                 .num_parents = 1,
255                 .ops = &clk_regmap_div_ro_ops,
256         },
257 };
258
259 static struct clk_regmap_div gcc_npu_pll0_main_div_clk_src = {
260         .reg = 0x4ce00,
261         .shift = 0,
262         .width = 2,
263         .clkr.hw.init = &(struct clk_init_data) {
264                 .name = "gcc_npu_pll0_main_div_clk_src",
265                 .parent_hws = (const struct clk_hw*[]){
266                         &gpll0.clkr.hw,
267                 },
268                 .num_parents = 1,
269                 .ops = &clk_regmap_div_ro_ops,
270         },
271 };
272
273 static const struct freq_tbl ftbl_gcc_cpuss_ahb_clk_src[] = {
274         F(19200000, P_BI_TCXO, 1, 0, 0),
275         { }
276 };
277
278 static struct clk_rcg2 gcc_cpuss_ahb_clk_src = {
279         .cmd_rcgr = 0x30014,
280         .mnd_width = 0,
281         .hid_width = 5,
282         .parent_map = gcc_parent_map_2,
283         .freq_tbl = ftbl_gcc_cpuss_ahb_clk_src,
284         .clkr.hw.init = &(struct clk_init_data){
285                 .name = "gcc_cpuss_ahb_clk_src",
286                 .parent_data = gcc_parent_data_2_ao,
287                 .num_parents = ARRAY_SIZE(gcc_parent_data_2_ao),
288                 .ops = &clk_rcg2_ops,
289         },
290 };
291
292 static const struct freq_tbl ftbl_gcc_gp1_clk_src[] = {
293         F(19200000, P_BI_TCXO, 1, 0, 0),
294         F(25000000, P_GPLL0_OUT_EVEN, 12, 0, 0),
295         F(50000000, P_GPLL0_OUT_ODD, 4, 0, 0),
296         F(100000000, P_GPLL0_OUT_ODD, 2, 0, 0),
297         F(200000000, P_GPLL0_OUT_ODD, 1, 0, 0),
298         { }
299 };
300
301 static struct clk_rcg2 gcc_gp1_clk_src = {
302         .cmd_rcgr = 0x37004,
303         .mnd_width = 8,
304         .hid_width = 5,
305         .parent_map = gcc_parent_map_5,
306         .freq_tbl = ftbl_gcc_gp1_clk_src,
307         .clkr.hw.init = &(struct clk_init_data){
308                 .name = "gcc_gp1_clk_src",
309                 .parent_data = gcc_parent_data_5,
310                 .num_parents = ARRAY_SIZE(gcc_parent_data_5),
311                 .ops = &clk_rcg2_ops,
312         },
313 };
314
315 static struct clk_rcg2 gcc_gp2_clk_src = {
316         .cmd_rcgr = 0x38004,
317         .mnd_width = 8,
318         .hid_width = 5,
319         .parent_map = gcc_parent_map_5,
320         .freq_tbl = ftbl_gcc_gp1_clk_src,
321         .clkr.hw.init = &(struct clk_init_data){
322                 .name = "gcc_gp2_clk_src",
323                 .parent_data = gcc_parent_data_5,
324                 .num_parents = ARRAY_SIZE(gcc_parent_data_5),
325                 .ops = &clk_rcg2_ops,
326         },
327 };
328
329 static struct clk_rcg2 gcc_gp3_clk_src = {
330         .cmd_rcgr = 0x39004,
331         .mnd_width = 8,
332         .hid_width = 5,
333         .parent_map = gcc_parent_map_5,
334         .freq_tbl = ftbl_gcc_gp1_clk_src,
335         .clkr.hw.init = &(struct clk_init_data){
336                 .name = "gcc_gp3_clk_src",
337                 .parent_data = gcc_parent_data_5,
338                 .num_parents = ARRAY_SIZE(gcc_parent_data_5),
339                 .ops = &clk_rcg2_ops,
340         },
341 };
342
343 static const struct freq_tbl ftbl_gcc_pdm2_clk_src[] = {
344         F(19200000, P_BI_TCXO, 1, 0, 0),
345         F(60000000, P_GPLL0_OUT_EVEN, 5, 0, 0),
346         { }
347 };
348
349 static struct clk_rcg2 gcc_pdm2_clk_src = {
350         .cmd_rcgr = 0x23010,
351         .mnd_width = 0,
352         .hid_width = 5,
353         .parent_map = gcc_parent_map_1,
354         .freq_tbl = ftbl_gcc_pdm2_clk_src,
355         .clkr.hw.init = &(struct clk_init_data){
356                 .name = "gcc_pdm2_clk_src",
357                 .parent_data = gcc_parent_data_1,
358                 .num_parents = ARRAY_SIZE(gcc_parent_data_1),
359                 .ops = &clk_rcg2_ops,
360         },
361 };
362
363 static const struct freq_tbl ftbl_gcc_qupv3_wrap0_s0_clk_src[] = {
364         F(7372800, P_GPLL0_OUT_EVEN, 1, 384, 15625),
365         F(14745600, P_GPLL0_OUT_EVEN, 1, 768, 15625),
366         F(19200000, P_BI_TCXO, 1, 0, 0),
367         F(29491200, P_GPLL0_OUT_EVEN, 1, 1536, 15625),
368         F(32000000, P_GPLL0_OUT_EVEN, 1, 8, 75),
369         F(48000000, P_GPLL0_OUT_EVEN, 1, 4, 25),
370         F(64000000, P_GPLL0_OUT_EVEN, 1, 16, 75),
371         F(75000000, P_GPLL0_OUT_EVEN, 4, 0, 0),
372         F(80000000, P_GPLL0_OUT_EVEN, 1, 4, 15),
373         F(96000000, P_GPLL0_OUT_EVEN, 1, 8, 25),
374         F(100000000, P_GPLL0_OUT_EVEN, 3, 0, 0),
375         F(102400000, P_GPLL0_OUT_EVEN, 1, 128, 375),
376         F(112000000, P_GPLL0_OUT_EVEN, 1, 28, 75),
377         F(117964800, P_GPLL0_OUT_EVEN, 1, 6144, 15625),
378         F(120000000, P_GPLL0_OUT_EVEN, 2.5, 0, 0),
379         F(128000000, P_GPLL6_OUT_EVEN, 3, 0, 0),
380         { }
381 };
382
383 static struct clk_init_data gcc_qupv3_wrap0_s0_clk_src_init = {
384         .name = "gcc_qupv3_wrap0_s0_clk_src",
385         .parent_data = gcc_parent_data_0,
386         .num_parents = ARRAY_SIZE(gcc_parent_data_0),
387         .ops = &clk_rcg2_ops,
388 };
389
390 static struct clk_rcg2 gcc_qupv3_wrap0_s0_clk_src = {
391         .cmd_rcgr = 0x21148,
392         .mnd_width = 16,
393         .hid_width = 5,
394         .parent_map = gcc_parent_map_0,
395         .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
396         .clkr.hw.init = &gcc_qupv3_wrap0_s0_clk_src_init,
397 };
398
399 static struct clk_init_data gcc_qupv3_wrap0_s1_clk_src_init = {
400         .name = "gcc_qupv3_wrap0_s1_clk_src",
401         .parent_data = gcc_parent_data_0,
402         .num_parents = ARRAY_SIZE(gcc_parent_data_0),
403         .ops = &clk_rcg2_ops,
404 };
405
406 static struct clk_rcg2 gcc_qupv3_wrap0_s1_clk_src = {
407         .cmd_rcgr = 0x21278,
408         .mnd_width = 16,
409         .hid_width = 5,
410         .parent_map = gcc_parent_map_0,
411         .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
412         .clkr.hw.init = &gcc_qupv3_wrap0_s1_clk_src_init,
413 };
414
415 static struct clk_init_data gcc_qupv3_wrap0_s2_clk_src_init = {
416         .name = "gcc_qupv3_wrap0_s2_clk_src",
417         .parent_data = gcc_parent_data_0,
418         .num_parents = ARRAY_SIZE(gcc_parent_data_0),
419         .ops = &clk_rcg2_ops,
420 };
421
422 static struct clk_rcg2 gcc_qupv3_wrap0_s2_clk_src = {
423         .cmd_rcgr = 0x213a8,
424         .mnd_width = 16,
425         .hid_width = 5,
426         .parent_map = gcc_parent_map_0,
427         .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
428         .clkr.hw.init = &gcc_qupv3_wrap0_s2_clk_src_init,
429 };
430
431 static struct clk_init_data gcc_qupv3_wrap0_s3_clk_src_init = {
432         .name = "gcc_qupv3_wrap0_s3_clk_src",
433         .parent_data = gcc_parent_data_0,
434         .num_parents = ARRAY_SIZE(gcc_parent_data_0),
435         .ops = &clk_rcg2_ops,
436 };
437
438 static struct clk_rcg2 gcc_qupv3_wrap0_s3_clk_src = {
439         .cmd_rcgr = 0x214d8,
440         .mnd_width = 16,
441         .hid_width = 5,
442         .parent_map = gcc_parent_map_0,
443         .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
444         .clkr.hw.init = &gcc_qupv3_wrap0_s3_clk_src_init,
445 };
446
447 static struct clk_init_data gcc_qupv3_wrap0_s4_clk_src_init = {
448         .name = "gcc_qupv3_wrap0_s4_clk_src",
449         .parent_data = gcc_parent_data_0,
450         .num_parents = ARRAY_SIZE(gcc_parent_data_0),
451         .ops = &clk_rcg2_ops,
452 };
453
454 static struct clk_rcg2 gcc_qupv3_wrap0_s4_clk_src = {
455         .cmd_rcgr = 0x21608,
456         .mnd_width = 16,
457         .hid_width = 5,
458         .parent_map = gcc_parent_map_0,
459         .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
460         .clkr.hw.init = &gcc_qupv3_wrap0_s4_clk_src_init,
461 };
462
463 static struct clk_init_data gcc_qupv3_wrap0_s5_clk_src_init = {
464         .name = "gcc_qupv3_wrap0_s5_clk_src",
465         .parent_data = gcc_parent_data_0,
466         .num_parents = ARRAY_SIZE(gcc_parent_data_0),
467         .ops = &clk_rcg2_ops,
468 };
469
470 static struct clk_rcg2 gcc_qupv3_wrap0_s5_clk_src = {
471         .cmd_rcgr = 0x21738,
472         .mnd_width = 16,
473         .hid_width = 5,
474         .parent_map = gcc_parent_map_0,
475         .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
476         .clkr.hw.init = &gcc_qupv3_wrap0_s5_clk_src_init,
477 };
478
479 static struct clk_init_data gcc_qupv3_wrap1_s0_clk_src_init = {
480         .name = "gcc_qupv3_wrap1_s0_clk_src",
481         .parent_data = gcc_parent_data_0,
482         .num_parents = ARRAY_SIZE(gcc_parent_data_0),
483         .ops = &clk_rcg2_ops,
484 };
485
486 static struct clk_rcg2 gcc_qupv3_wrap1_s0_clk_src = {
487         .cmd_rcgr = 0x22018,
488         .mnd_width = 16,
489         .hid_width = 5,
490         .parent_map = gcc_parent_map_0,
491         .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
492         .clkr.hw.init = &gcc_qupv3_wrap1_s0_clk_src_init,
493 };
494
495 static struct clk_init_data gcc_qupv3_wrap1_s1_clk_src_init = {
496         .name = "gcc_qupv3_wrap1_s1_clk_src",
497         .parent_data = gcc_parent_data_0,
498         .num_parents = ARRAY_SIZE(gcc_parent_data_0),
499         .ops = &clk_rcg2_ops,
500 };
501
502 static struct clk_rcg2 gcc_qupv3_wrap1_s1_clk_src = {
503         .cmd_rcgr = 0x22148,
504         .mnd_width = 16,
505         .hid_width = 5,
506         .parent_map = gcc_parent_map_0,
507         .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
508         .clkr.hw.init = &gcc_qupv3_wrap1_s1_clk_src_init,
509 };
510
511 static struct clk_init_data gcc_qupv3_wrap1_s2_clk_src_init = {
512         .name = "gcc_qupv3_wrap1_s2_clk_src",
513         .parent_data = gcc_parent_data_0,
514         .num_parents = ARRAY_SIZE(gcc_parent_data_0),
515         .ops = &clk_rcg2_ops,
516 };
517
518 static struct clk_rcg2 gcc_qupv3_wrap1_s2_clk_src = {
519         .cmd_rcgr = 0x22278,
520         .mnd_width = 16,
521         .hid_width = 5,
522         .parent_map = gcc_parent_map_0,
523         .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
524         .clkr.hw.init = &gcc_qupv3_wrap1_s2_clk_src_init,
525 };
526
527 static struct clk_init_data gcc_qupv3_wrap1_s3_clk_src_init = {
528         .name = "gcc_qupv3_wrap1_s3_clk_src",
529         .parent_data = gcc_parent_data_0,
530         .num_parents = ARRAY_SIZE(gcc_parent_data_0),
531         .ops = &clk_rcg2_ops,
532 };
533
534 static struct clk_rcg2 gcc_qupv3_wrap1_s3_clk_src = {
535         .cmd_rcgr = 0x223a8,
536         .mnd_width = 16,
537         .hid_width = 5,
538         .parent_map = gcc_parent_map_0,
539         .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
540         .clkr.hw.init = &gcc_qupv3_wrap1_s3_clk_src_init,
541 };
542
543 static struct clk_init_data gcc_qupv3_wrap1_s4_clk_src_init = {
544         .name = "gcc_qupv3_wrap1_s4_clk_src",
545         .parent_data = gcc_parent_data_0,
546         .num_parents = ARRAY_SIZE(gcc_parent_data_0),
547         .ops = &clk_rcg2_ops,
548 };
549
550 static struct clk_rcg2 gcc_qupv3_wrap1_s4_clk_src = {
551         .cmd_rcgr = 0x224d8,
552         .mnd_width = 16,
553         .hid_width = 5,
554         .parent_map = gcc_parent_map_0,
555         .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
556         .clkr.hw.init = &gcc_qupv3_wrap1_s4_clk_src_init,
557 };
558
559 static struct clk_init_data gcc_qupv3_wrap1_s5_clk_src_init = {
560         .name = "gcc_qupv3_wrap1_s5_clk_src",
561         .parent_data = gcc_parent_data_0,
562         .num_parents = ARRAY_SIZE(gcc_parent_data_0),
563         .ops = &clk_rcg2_ops,
564 };
565
566 static struct clk_rcg2 gcc_qupv3_wrap1_s5_clk_src = {
567         .cmd_rcgr = 0x22608,
568         .mnd_width = 16,
569         .hid_width = 5,
570         .parent_map = gcc_parent_map_0,
571         .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
572         .clkr.hw.init = &gcc_qupv3_wrap1_s5_clk_src_init,
573 };
574
575 static const struct freq_tbl ftbl_gcc_sdcc1_apps_clk_src[] = {
576         F(144000, P_BI_TCXO, 16, 3, 25),
577         F(400000, P_BI_TCXO, 12, 1, 4),
578         F(19200000, P_BI_TCXO, 1, 0, 0),
579         F(20000000, P_GPLL0_OUT_EVEN, 5, 1, 3),
580         F(25000000, P_GPLL0_OUT_EVEN, 12, 0, 0),
581         F(50000000, P_GPLL0_OUT_EVEN, 6, 0, 0),
582         F(100000000, P_GPLL0_OUT_EVEN, 3, 0, 0),
583         F(192000000, P_GPLL6_OUT_EVEN, 2, 0, 0),
584         F(384000000, P_GPLL6_OUT_EVEN, 1, 0, 0),
585         { }
586 };
587
588 static struct clk_rcg2 gcc_sdcc1_apps_clk_src = {
589         .cmd_rcgr = 0x4b024,
590         .mnd_width = 8,
591         .hid_width = 5,
592         .parent_map = gcc_parent_map_7,
593         .freq_tbl = ftbl_gcc_sdcc1_apps_clk_src,
594         .clkr.hw.init = &(struct clk_init_data){
595                 .name = "gcc_sdcc1_apps_clk_src",
596                 .parent_data = gcc_parent_data_7,
597                 .num_parents = ARRAY_SIZE(gcc_parent_data_7),
598                 .ops = &clk_rcg2_ops,
599         },
600 };
601
602 static const struct freq_tbl ftbl_gcc_sdcc1_ice_core_clk_src[] = {
603         F(100000000, P_GPLL0_OUT_EVEN, 3, 0, 0),
604         F(150000000, P_GPLL0_OUT_EVEN, 2, 0, 0),
605         F(300000000, P_GPLL0_OUT_EVEN, 1, 0, 0),
606         { }
607 };
608
609 static struct clk_rcg2 gcc_sdcc1_ice_core_clk_src = {
610         .cmd_rcgr = 0x4b00c,
611         .mnd_width = 0,
612         .hid_width = 5,
613         .parent_map = gcc_parent_map_1,
614         .freq_tbl = ftbl_gcc_sdcc1_ice_core_clk_src,
615         .clkr.hw.init = &(struct clk_init_data){
616                 .name = "gcc_sdcc1_ice_core_clk_src",
617                 .parent_data = gcc_parent_data_1,
618                 .num_parents = ARRAY_SIZE(gcc_parent_data_1),
619                 .ops = &clk_rcg2_ops,
620         },
621 };
622
623 static const struct freq_tbl ftbl_gcc_sdcc2_apps_clk_src[] = {
624         F(400000, P_BI_TCXO, 12, 1, 4),
625         F(9600000, P_BI_TCXO, 2, 0, 0),
626         F(19200000, P_BI_TCXO, 1, 0, 0),
627         F(25000000, P_GPLL0_OUT_ODD, 8, 0, 0),
628         F(50000000, P_GPLL0_OUT_ODD, 4, 0, 0),
629         F(100000000, P_GPLL0_OUT_ODD, 2, 0, 0),
630         F(202000000, P_GPLL7_OUT_MAIN, 4, 0, 0),
631         { }
632 };
633
634 static struct clk_rcg2 gcc_sdcc2_apps_clk_src = {
635         .cmd_rcgr = 0x2000c,
636         .mnd_width = 8,
637         .hid_width = 5,
638         .parent_map = gcc_parent_map_8,
639         .freq_tbl = ftbl_gcc_sdcc2_apps_clk_src,
640         .clkr.hw.init = &(struct clk_init_data){
641                 .name = "gcc_sdcc2_apps_clk_src",
642                 .parent_data = gcc_parent_data_8,
643                 .num_parents = ARRAY_SIZE(gcc_parent_data_8),
644                 .flags = CLK_OPS_PARENT_ENABLE,
645                 .ops = &clk_rcg2_floor_ops,
646         },
647 };
648
649 static const struct freq_tbl ftbl_gcc_ufs_phy_axi_clk_src[] = {
650         F(25000000, P_GPLL0_OUT_ODD, 8, 0, 0),
651         F(50000000, P_GPLL0_OUT_ODD, 4, 0, 0),
652         F(100000000, P_GPLL0_OUT_ODD, 2, 0, 0),
653         F(200000000, P_GPLL0_OUT_ODD, 1, 0, 0),
654         F(240000000, P_GPLL0_OUT_MAIN, 2.5, 0, 0),
655         { }
656 };
657
658 static struct clk_rcg2 gcc_ufs_phy_axi_clk_src = {
659         .cmd_rcgr = 0x3a01c,
660         .mnd_width = 8,
661         .hid_width = 5,
662         .parent_map = gcc_parent_map_4,
663         .freq_tbl = ftbl_gcc_ufs_phy_axi_clk_src,
664         .clkr.hw.init = &(struct clk_init_data){
665                 .name = "gcc_ufs_phy_axi_clk_src",
666                 .parent_data = gcc_parent_data_4,
667                 .num_parents = ARRAY_SIZE(gcc_parent_data_4),
668                 .ops = &clk_rcg2_ops,
669         },
670 };
671
672 static const struct freq_tbl ftbl_gcc_ufs_phy_ice_core_clk_src[] = {
673         F(37500000, P_GPLL0_OUT_EVEN, 8, 0, 0),
674         F(75000000, P_GPLL0_OUT_EVEN, 4, 0, 0),
675         F(150000000, P_GPLL0_OUT_EVEN, 2, 0, 0),
676         F(300000000, P_GPLL0_OUT_EVEN, 1, 0, 0),
677         { }
678 };
679
680 static struct clk_rcg2 gcc_ufs_phy_ice_core_clk_src = {
681         .cmd_rcgr = 0x3a048,
682         .mnd_width = 0,
683         .hid_width = 5,
684         .parent_map = gcc_parent_map_1,
685         .freq_tbl = ftbl_gcc_ufs_phy_ice_core_clk_src,
686         .clkr.hw.init = &(struct clk_init_data){
687                 .name = "gcc_ufs_phy_ice_core_clk_src",
688                 .parent_data = gcc_parent_data_1,
689                 .num_parents = ARRAY_SIZE(gcc_parent_data_1),
690                 .ops = &clk_rcg2_ops,
691         },
692 };
693
694 static const struct freq_tbl ftbl_gcc_ufs_phy_phy_aux_clk_src[] = {
695         F(9600000, P_BI_TCXO, 2, 0, 0),
696         F(19200000, P_BI_TCXO, 1, 0, 0),
697         { }
698 };
699
700 static struct clk_rcg2 gcc_ufs_phy_phy_aux_clk_src = {
701         .cmd_rcgr = 0x3a0b0,
702         .mnd_width = 0,
703         .hid_width = 5,
704         .freq_tbl = ftbl_gcc_ufs_phy_phy_aux_clk_src,
705         .clkr.hw.init = &(struct clk_init_data){
706                 .name = "gcc_ufs_phy_phy_aux_clk_src",
707                 .parent_data = &(const struct clk_parent_data){
708                         .fw_name = "bi_tcxo",
709                 },
710                 .num_parents = 1,
711                 .ops = &clk_rcg2_ops,
712         },
713 };
714
715 static const struct freq_tbl ftbl_gcc_ufs_phy_unipro_core_clk_src[] = {
716         F(37500000, P_GPLL0_OUT_EVEN, 8, 0, 0),
717         F(75000000, P_GPLL0_OUT_EVEN, 4, 0, 0),
718         F(150000000, P_GPLL0_OUT_EVEN, 2, 0, 0),
719         { }
720 };
721
722 static struct clk_rcg2 gcc_ufs_phy_unipro_core_clk_src = {
723         .cmd_rcgr = 0x3a060,
724         .mnd_width = 0,
725         .hid_width = 5,
726         .parent_map = gcc_parent_map_1,
727         .freq_tbl = ftbl_gcc_ufs_phy_unipro_core_clk_src,
728         .clkr.hw.init = &(struct clk_init_data){
729                 .name = "gcc_ufs_phy_unipro_core_clk_src",
730                 .parent_data = gcc_parent_data_1,
731                 .num_parents = ARRAY_SIZE(gcc_parent_data_1),
732                 .ops = &clk_rcg2_ops,
733         },
734 };
735
736 static const struct freq_tbl ftbl_gcc_usb30_prim_master_clk_src[] = {
737         F(66666667, P_GPLL0_OUT_ODD, 3, 0, 0),
738         F(133333333, P_GPLL0_OUT_MAIN, 4.5, 0, 0),
739         F(200000000, P_GPLL0_OUT_MAIN, 3, 0, 0),
740         F(240000000, P_GPLL0_OUT_MAIN, 2.5, 0, 0),
741         { }
742 };
743
744 static struct clk_rcg2 gcc_usb30_prim_master_clk_src = {
745         .cmd_rcgr = 0x1a01c,
746         .mnd_width = 8,
747         .hid_width = 5,
748         .parent_map = gcc_parent_map_4,
749         .freq_tbl = ftbl_gcc_usb30_prim_master_clk_src,
750         .clkr.hw.init = &(struct clk_init_data){
751                 .name = "gcc_usb30_prim_master_clk_src",
752                 .parent_data = gcc_parent_data_4,
753                 .num_parents = ARRAY_SIZE(gcc_parent_data_4),
754                 .ops = &clk_rcg2_ops,
755         },
756 };
757
758 static const struct freq_tbl ftbl_gcc_usb30_prim_mock_utmi_clk_src[] = {
759         F(19200000, P_BI_TCXO, 1, 0, 0),
760         { }
761 };
762
763 static struct clk_rcg2 gcc_usb30_prim_mock_utmi_clk_src = {
764         .cmd_rcgr = 0x1a034,
765         .mnd_width = 0,
766         .hid_width = 5,
767         .freq_tbl = ftbl_gcc_usb30_prim_mock_utmi_clk_src,
768         .clkr.hw.init = &(struct clk_init_data){
769                 .name = "gcc_usb30_prim_mock_utmi_clk_src",
770                 .parent_data = &(const struct clk_parent_data){
771                         .fw_name = "bi_tcxo",
772                 },
773                 .num_parents = 1,
774                 .ops = &clk_rcg2_ops,
775         },
776 };
777
778 static struct clk_rcg2 gcc_usb3_prim_phy_aux_clk_src = {
779         .cmd_rcgr = 0x1a060,
780         .mnd_width = 0,
781         .hid_width = 5,
782         .parent_map = gcc_parent_map_6,
783         .freq_tbl = ftbl_gcc_usb30_prim_mock_utmi_clk_src,
784         .clkr.hw.init = &(struct clk_init_data){
785                 .name = "gcc_usb3_prim_phy_aux_clk_src",
786                 .parent_data = gcc_parent_data_6,
787                 .num_parents = ARRAY_SIZE(gcc_parent_data_6),
788                 .ops = &clk_rcg2_ops,
789         },
790 };
791
792 static struct clk_branch gcc_aggre_ufs_phy_axi_clk = {
793         .halt_reg = 0x3e014,
794         .halt_check = BRANCH_HALT_DELAY,
795         .hwcg_reg = 0x3e014,
796         .hwcg_bit = 1,
797         .clkr = {
798                 .enable_reg = 0x3e014,
799                 .enable_mask = BIT(0),
800                 .hw.init = &(struct clk_init_data){
801                         .name = "gcc_aggre_ufs_phy_axi_clk",
802                         .parent_hws = (const struct clk_hw*[]){
803                                 &gcc_ufs_phy_axi_clk_src.clkr.hw,
804                         },
805                         .num_parents = 1,
806                         .flags = CLK_SET_RATE_PARENT,
807                         .ops = &clk_branch2_ops,
808                 },
809         },
810 };
811
812 static struct clk_branch gcc_aggre_ufs_phy_axi_hw_ctl_clk = {
813         .halt_reg = 0x3e014,
814         .halt_check = BRANCH_HALT,
815         .hwcg_reg = 0x3e014,
816         .hwcg_bit = 1,
817         .clkr = {
818                 .enable_reg = 0x3e014,
819                 .enable_mask = BIT(1),
820                 .hw.init = &(struct clk_init_data){
821                         .name = "gcc_aggre_ufs_phy_axi_hw_ctl_clk",
822                         .parent_hws = (const struct clk_hw*[]){
823                                 &gcc_ufs_phy_axi_clk_src.clkr.hw,
824                         },
825                         .num_parents = 1,
826                         .flags = CLK_SET_RATE_PARENT,
827                         .ops = &clk_branch2_ops,
828                 },
829         },
830 };
831
832 static struct clk_branch gcc_ufs_phy_axi_hw_ctl_clk = {
833         .halt_reg = 0x3e014,
834         .halt_check = BRANCH_HALT,
835         .hwcg_reg = 0x3e014,
836         .hwcg_bit = 1,
837         .clkr = {
838                 .enable_reg = 0x3e014,
839                 .enable_mask = BIT(1),
840                 .hw.init = &(struct clk_init_data){
841                         .name = "gcc_ufs_phy_axi_hw_ctl_clk",
842                         .parent_hws = (const struct clk_hw*[]){
843                                 &gcc_ufs_phy_axi_clk_src.clkr.hw,
844                         },
845                         .num_parents = 1,
846                         .flags = CLK_SET_RATE_PARENT,
847                         .ops = &clk_branch2_ops,
848                 },
849         },
850 };
851
852 static struct clk_branch gcc_aggre_usb3_prim_axi_clk = {
853         .halt_reg = 0x3e010,
854         .halt_check = BRANCH_HALT,
855         .hwcg_reg = 0x3e010,
856         .hwcg_bit = 1,
857         .clkr = {
858                 .enable_reg = 0x3e010,
859                 .enable_mask = BIT(0),
860                 .hw.init = &(struct clk_init_data){
861                         .name = "gcc_aggre_usb3_prim_axi_clk",
862                         .parent_hws = (const struct clk_hw*[]){
863                                 &gcc_usb30_prim_master_clk_src.clkr.hw,
864                         },
865                         .num_parents = 1,
866                         .flags = CLK_SET_RATE_PARENT,
867                         .ops = &clk_branch2_ops,
868                 },
869         },
870 };
871
872 static struct clk_branch gcc_boot_rom_ahb_clk = {
873         .halt_reg = 0x26004,
874         .halt_check = BRANCH_HALT_VOTED,
875         .hwcg_reg = 0x26004,
876         .hwcg_bit = 1,
877         .clkr = {
878                 .enable_reg = 0x52000,
879                 .enable_mask = BIT(28),
880                 .hw.init = &(struct clk_init_data){
881                         .name = "gcc_boot_rom_ahb_clk",
882                         .ops = &clk_branch2_ops,
883                 },
884         },
885 };
886
887 static struct clk_branch gcc_camera_ahb_clk = {
888         .halt_reg = 0x17008,
889         .halt_check = BRANCH_HALT,
890         .hwcg_reg = 0x17008,
891         .hwcg_bit = 1,
892         .clkr = {
893                 .enable_reg = 0x17008,
894                 .enable_mask = BIT(0),
895                 .hw.init = &(struct clk_init_data){
896                         .name = "gcc_camera_ahb_clk",
897                         .flags = CLK_IS_CRITICAL,
898                         .ops = &clk_branch2_ops,
899                 },
900         },
901 };
902
903 static struct clk_branch gcc_camera_axi_clk = {
904         .halt_reg = 0x17018,
905         .halt_check = BRANCH_HALT,
906         .hwcg_reg = 0x17018,
907         .hwcg_bit = 1,
908         .clkr = {
909                 .enable_reg = 0x17018,
910                 .enable_mask = BIT(0),
911                 .hw.init = &(struct clk_init_data){
912                         .name = "gcc_camera_axi_clk",
913                         .ops = &clk_branch2_ops,
914                 },
915         },
916 };
917
918 static struct clk_branch gcc_camera_throttle_nrt_axi_clk = {
919         .halt_reg = 0x17078,
920         .halt_check = BRANCH_VOTED,
921         .hwcg_reg = 0x17078,
922         .hwcg_bit = 1,
923         .clkr = {
924                 .enable_reg = 0x17078,
925                 .enable_mask = BIT(0),
926                 .hw.init = &(struct clk_init_data){
927                         .name = "gcc_camera_throttle_nrt_axi_clk",
928                         .ops = &clk_branch2_ops,
929                 },
930         },
931 };
932
933 static struct clk_branch gcc_camera_throttle_rt_axi_clk = {
934         .halt_reg = 0x17024,
935         .halt_check = BRANCH_VOTED,
936         .hwcg_reg = 0x17024,
937         .hwcg_bit = 1,
938         .clkr = {
939                 .enable_reg = 0x17024,
940                 .enable_mask = BIT(0),
941                 .hw.init = &(struct clk_init_data){
942                         .name = "gcc_camera_throttle_rt_axi_clk",
943                         .ops = &clk_branch2_ops,
944                 },
945         },
946 };
947
948 static struct clk_branch gcc_camera_xo_clk = {
949         .halt_reg = 0x17030,
950         .halt_check = BRANCH_HALT,
951         .clkr = {
952                 .enable_reg = 0x17030,
953                 .enable_mask = BIT(0),
954                 .hw.init = &(struct clk_init_data){
955                         .name = "gcc_camera_xo_clk",
956                         .flags = CLK_IS_CRITICAL,
957                         .ops = &clk_branch2_ops,
958                 },
959         },
960 };
961
962 static struct clk_branch gcc_ce1_ahb_clk = {
963         .halt_reg = 0x2b00c,
964         .halt_check = BRANCH_HALT_VOTED,
965         .hwcg_reg = 0x2b00c,
966         .hwcg_bit = 1,
967         .clkr = {
968                 .enable_reg = 0x52008,
969                 .enable_mask = BIT(3),
970                 .hw.init = &(struct clk_init_data){
971                         .name = "gcc_ce1_ahb_clk",
972                         .ops = &clk_branch2_ops,
973                 },
974         },
975 };
976
977 static struct clk_branch gcc_ce1_axi_clk = {
978         .halt_reg = 0x2b008,
979         .halt_check = BRANCH_HALT_VOTED,
980         .clkr = {
981                 .enable_reg = 0x52008,
982                 .enable_mask = BIT(2),
983                 .hw.init = &(struct clk_init_data){
984                         .name = "gcc_ce1_axi_clk",
985                         .ops = &clk_branch2_ops,
986                 },
987         },
988 };
989
990 static struct clk_branch gcc_ce1_clk = {
991         .halt_reg = 0x2b004,
992         .halt_check = BRANCH_HALT_VOTED,
993         .clkr = {
994                 .enable_reg = 0x52008,
995                 .enable_mask = BIT(1),
996                 .hw.init = &(struct clk_init_data){
997                         .name = "gcc_ce1_clk",
998                         .ops = &clk_branch2_ops,
999                 },
1000         },
1001 };
1002
1003 static struct clk_branch gcc_cfg_noc_usb3_prim_axi_clk = {
1004         .halt_reg = 0x1101c,
1005         .halt_check = BRANCH_HALT,
1006         .hwcg_reg = 0x1101c,
1007         .hwcg_bit = 1,
1008         .clkr = {
1009                 .enable_reg = 0x1101c,
1010                 .enable_mask = BIT(0),
1011                 .hw.init = &(struct clk_init_data){
1012                         .name = "gcc_cfg_noc_usb3_prim_axi_clk",
1013                         .parent_hws = (const struct clk_hw*[]){
1014                                 &gcc_usb30_prim_master_clk_src.clkr.hw,
1015                         },
1016                         .num_parents = 1,
1017                         .flags = CLK_SET_RATE_PARENT,
1018                         .ops = &clk_branch2_ops,
1019                 },
1020         },
1021 };
1022
1023 static struct clk_branch gcc_cpuss_ahb_clk = {
1024         .halt_reg = 0x30000,
1025         .halt_check = BRANCH_HALT_VOTED,
1026         .hwcg_reg = 0x30000,
1027         .hwcg_bit = 1,
1028         .clkr = {
1029                 .enable_reg = 0x52008,
1030                 .enable_mask = BIT(4),
1031                 .hw.init = &(struct clk_init_data){
1032                         .name = "gcc_cpuss_ahb_clk",
1033                         .parent_hws = (const struct clk_hw*[]){
1034                                 &gcc_cpuss_ahb_clk_src.clkr.hw,
1035                         },
1036                         .num_parents = 1,
1037                         .flags = CLK_IS_CRITICAL | CLK_SET_RATE_PARENT,
1038                         .ops = &clk_branch2_ops,
1039                 },
1040         },
1041 };
1042
1043 static struct clk_branch gcc_cpuss_gnoc_clk = {
1044         .halt_reg = 0x30004,
1045         .halt_check = BRANCH_HALT_VOTED,
1046         .hwcg_reg = 0x30004,
1047         .hwcg_bit = 1,
1048         .clkr = {
1049                 .enable_reg = 0x52008,
1050                 .enable_mask = BIT(5),
1051                 .hw.init = &(struct clk_init_data){
1052                         .name = "gcc_cpuss_gnoc_clk",
1053                         .flags = CLK_IS_CRITICAL,
1054                         .ops = &clk_branch2_ops,
1055                 },
1056         },
1057 };
1058
1059 static struct clk_branch gcc_cpuss_rbcpr_clk = {
1060         .halt_reg = 0x30008,
1061         .halt_check = BRANCH_HALT,
1062         .clkr = {
1063                 .enable_reg = 0x30008,
1064                 .enable_mask = BIT(0),
1065                 .hw.init = &(struct clk_init_data){
1066                         .name = "gcc_cpuss_rbcpr_clk",
1067                         .ops = &clk_branch2_ops,
1068                 },
1069         },
1070 };
1071
1072 static struct clk_branch gcc_ddrss_gpu_axi_clk = {
1073         .halt_reg = 0x2d038,
1074         .halt_check = BRANCH_VOTED,
1075         .hwcg_reg = 0x2d038,
1076         .hwcg_bit = 1,
1077         .clkr = {
1078                 .enable_reg = 0x2d038,
1079                 .enable_mask = BIT(0),
1080                 .hw.init = &(struct clk_init_data){
1081                         .name = "gcc_ddrss_gpu_axi_clk",
1082                         .ops = &clk_branch2_ops,
1083                 },
1084         },
1085 };
1086
1087 static struct clk_branch gcc_disp_ahb_clk = {
1088         .halt_reg = 0x1700c,
1089         .halt_check = BRANCH_HALT,
1090         .hwcg_reg = 0x1700c,
1091         .hwcg_bit = 1,
1092         .clkr = {
1093                 .enable_reg = 0x1700c,
1094                 .enable_mask = BIT(0),
1095                 .hw.init = &(struct clk_init_data){
1096                         .name = "gcc_disp_ahb_clk",
1097                         .flags = CLK_IS_CRITICAL,
1098                         .ops = &clk_branch2_ops,
1099                 },
1100         },
1101 };
1102
1103 static struct clk_branch gcc_disp_axi_clk = {
1104         .halt_reg = 0x1701c,
1105         .halt_check = BRANCH_HALT,
1106         .hwcg_reg = 0x1701c,
1107         .hwcg_bit = 1,
1108         .clkr = {
1109                 .enable_reg = 0x1701c,
1110                 .enable_mask = BIT(0),
1111                 .hw.init = &(struct clk_init_data){
1112                         .name = "gcc_disp_axi_clk",
1113                         .ops = &clk_branch2_ops,
1114                 },
1115         },
1116 };
1117
1118 static struct clk_branch gcc_disp_cc_sleep_clk = {
1119         .halt_reg = 0x17074,
1120         .halt_check = BRANCH_HALT_DELAY,
1121         .hwcg_reg = 0x17074,
1122         .hwcg_bit = 1,
1123         .clkr = {
1124                 .enable_reg = 0x17074,
1125                 .enable_mask = BIT(0),
1126                 .hw.init = &(struct clk_init_data){
1127                         .name = "gcc_disp_cc_sleep_clk",
1128                         .ops = &clk_branch2_ops,
1129                 },
1130         },
1131 };
1132
1133 static struct clk_branch gcc_disp_cc_xo_clk = {
1134         .halt_reg = 0x17070,
1135         .halt_check = BRANCH_HALT,
1136         .hwcg_reg = 0x17070,
1137         .hwcg_bit = 1,
1138         .clkr = {
1139                 .enable_reg = 0x17070,
1140                 .enable_mask = BIT(0),
1141                 .hw.init = &(struct clk_init_data){
1142                         .name = "gcc_disp_cc_xo_clk",
1143                         .flags = CLK_IS_CRITICAL,
1144                         .ops = &clk_branch2_ops,
1145                 },
1146         },
1147 };
1148
1149 static struct clk_branch gcc_disp_gpll0_clk = {
1150         .halt_check = BRANCH_HALT_DELAY,
1151         .clkr = {
1152                 .enable_reg = 0x52000,
1153                 .enable_mask = BIT(2),
1154                 .hw.init = &(struct clk_init_data){
1155                         .name = "gcc_disp_gpll0_clk",
1156                         .parent_hws = (const struct clk_hw*[]){
1157                                 &gpll0.clkr.hw,
1158                         },
1159                         .num_parents = 1,
1160                         .ops = &clk_branch2_ops,
1161                 },
1162         },
1163 };
1164
1165 static struct clk_branch gcc_disp_throttle_axi_clk = {
1166         .halt_reg = 0x17028,
1167         .halt_check = BRANCH_HALT,
1168         .hwcg_reg = 0x17028,
1169         .hwcg_bit = 1,
1170         .clkr = {
1171                 .enable_reg = 0x17028,
1172                 .enable_mask = BIT(0),
1173                 .hw.init = &(struct clk_init_data){
1174                         .name = "gcc_disp_throttle_axi_clk",
1175                         .ops = &clk_branch2_ops,
1176                 },
1177         },
1178 };
1179
1180 static struct clk_branch gcc_disp_xo_clk = {
1181         .halt_reg = 0x17034,
1182         .halt_check = BRANCH_HALT,
1183         .clkr = {
1184                 .enable_reg = 0x17034,
1185                 .enable_mask = BIT(0),
1186                 .hw.init = &(struct clk_init_data){
1187                         .name = "gcc_disp_xo_clk",
1188                         .ops = &clk_branch2_ops,
1189                 },
1190         },
1191 };
1192
1193 static struct clk_branch gcc_gp1_clk = {
1194         .halt_reg = 0x37000,
1195         .halt_check = BRANCH_HALT,
1196         .clkr = {
1197                 .enable_reg = 0x37000,
1198                 .enable_mask = BIT(0),
1199                 .hw.init = &(struct clk_init_data){
1200                         .name = "gcc_gp1_clk",
1201                         .parent_hws = (const struct clk_hw*[]){
1202                                 &gcc_gp1_clk_src.clkr.hw,
1203                         },
1204                         .num_parents = 1,
1205                         .flags = CLK_SET_RATE_PARENT,
1206                         .ops = &clk_branch2_ops,
1207                 },
1208         },
1209 };
1210
1211 static struct clk_branch gcc_gp2_clk = {
1212         .halt_reg = 0x38000,
1213         .halt_check = BRANCH_HALT,
1214         .clkr = {
1215                 .enable_reg = 0x38000,
1216                 .enable_mask = BIT(0),
1217                 .hw.init = &(struct clk_init_data){
1218                         .name = "gcc_gp2_clk",
1219                         .parent_hws = (const struct clk_hw*[]){
1220                                 &gcc_gp2_clk_src.clkr.hw,
1221                         },
1222                         .num_parents = 1,
1223                         .flags = CLK_SET_RATE_PARENT,
1224                         .ops = &clk_branch2_ops,
1225                 },
1226         },
1227 };
1228
1229 static struct clk_branch gcc_gp3_clk = {
1230         .halt_reg = 0x39000,
1231         .halt_check = BRANCH_HALT,
1232         .clkr = {
1233                 .enable_reg = 0x39000,
1234                 .enable_mask = BIT(0),
1235                 .hw.init = &(struct clk_init_data){
1236                         .name = "gcc_gp3_clk",
1237                         .parent_hws = (const struct clk_hw*[]){
1238                                 &gcc_gp3_clk_src.clkr.hw,
1239                         },
1240                         .num_parents = 1,
1241                         .flags = CLK_SET_RATE_PARENT,
1242                         .ops = &clk_branch2_ops,
1243                 },
1244         },
1245 };
1246
1247 static struct clk_branch gcc_gpu_cfg_ahb_clk = {
1248         .halt_reg = 0x45004,
1249         .halt_check = BRANCH_HALT,
1250         .hwcg_reg = 0x45004,
1251         .hwcg_bit = 1,
1252         .clkr = {
1253                 .enable_reg = 0x45004,
1254                 .enable_mask = BIT(0),
1255                 .hw.init = &(struct clk_init_data){
1256                         .name = "gcc_gpu_cfg_ahb_clk",
1257                         .flags = CLK_IS_CRITICAL,
1258                         .ops = &clk_branch2_ops,
1259                 },
1260         },
1261 };
1262
1263 static struct clk_branch gcc_gpu_gpll0_clk = {
1264         .halt_check = BRANCH_HALT_DELAY,
1265         .clkr = {
1266                 .enable_reg = 0x52008,
1267                 .enable_mask = BIT(7),
1268                 .hw.init = &(struct clk_init_data){
1269                         .name = "gcc_gpu_gpll0_clk",
1270                         .parent_hws = (const struct clk_hw*[]){
1271                                 &gpll0.clkr.hw,
1272                         },
1273                         .num_parents = 1,
1274                         .ops = &clk_branch2_ops,
1275                 },
1276         },
1277 };
1278
1279 static struct clk_branch gcc_gpu_gpll0_div_clk = {
1280         .halt_check = BRANCH_HALT_DELAY,
1281         .clkr = {
1282                 .enable_reg = 0x52008,
1283                 .enable_mask = BIT(8),
1284                 .hw.init = &(struct clk_init_data){
1285                         .name = "gcc_gpu_gpll0_div_clk",
1286                         .parent_hws = (const struct clk_hw*[]){
1287                                 &gcc_gpu_gpll0_main_div_clk_src.clkr.hw,
1288                         },
1289                         .num_parents = 1,
1290                         .ops = &clk_branch2_ops,
1291                 },
1292         },
1293 };
1294
1295 static struct clk_branch gcc_gpu_memnoc_gfx_clk = {
1296         .halt_reg = 0x4500c,
1297         .halt_check = BRANCH_VOTED,
1298         .hwcg_reg = 0x4500c,
1299         .hwcg_bit = 1,
1300         .clkr = {
1301                 .enable_reg = 0x4500c,
1302                 .enable_mask = BIT(0),
1303                 .hw.init = &(struct clk_init_data){
1304                         .name = "gcc_gpu_memnoc_gfx_clk",
1305                         .ops = &clk_branch2_ops,
1306                 },
1307         },
1308 };
1309
1310 static struct clk_branch gcc_gpu_snoc_dvm_gfx_clk = {
1311         .halt_reg = 0x45014,
1312         .halt_check = BRANCH_HALT,
1313         .hwcg_reg = 0x45014,
1314         .hwcg_bit = 1,
1315         .clkr = {
1316                 .enable_reg = 0x45014,
1317                 .enable_mask = BIT(0),
1318                 .hw.init = &(struct clk_init_data){
1319                         .name = "gcc_gpu_snoc_dvm_gfx_clk",
1320                         .ops = &clk_branch2_ops,
1321                 },
1322         },
1323 };
1324
1325 static struct clk_branch gcc_npu_axi_clk = {
1326         .halt_reg = 0x4c008,
1327         .halt_check = BRANCH_VOTED,
1328         .hwcg_reg = 0x4c008,
1329         .hwcg_bit = 1,
1330         .clkr = {
1331                 .enable_reg = 0x4c008,
1332                 .enable_mask = BIT(0),
1333                 .hw.init = &(struct clk_init_data){
1334                         .name = "gcc_npu_axi_clk",
1335                         .ops = &clk_branch2_ops,
1336                 },
1337         },
1338 };
1339
1340 static struct clk_branch gcc_npu_bwmon_axi_clk = {
1341         .halt_reg = 0x4d004,
1342         .halt_check = BRANCH_HALT_DELAY,
1343         .hwcg_reg = 0x4d004,
1344         .hwcg_bit = 1,
1345         .clkr = {
1346                 .enable_reg = 0x4d004,
1347                 .enable_mask = BIT(0),
1348                 .hw.init = &(struct clk_init_data){
1349                         .name = "gcc_npu_bwmon_axi_clk",
1350                         .ops = &clk_branch2_ops,
1351                 },
1352         },
1353 };
1354
1355 static struct clk_branch gcc_npu_bwmon_dma_cfg_ahb_clk = {
1356         .halt_reg = 0x4d008,
1357         .halt_check = BRANCH_HALT,
1358         .clkr = {
1359                 .enable_reg = 0x4d008,
1360                 .enable_mask = BIT(0),
1361                 .hw.init = &(struct clk_init_data){
1362                         .name = "gcc_npu_bwmon_dma_cfg_ahb_clk",
1363                         .ops = &clk_branch2_ops,
1364                 },
1365         },
1366 };
1367
1368 static struct clk_branch gcc_npu_bwmon_dsp_cfg_ahb_clk = {
1369         .halt_reg = 0x4d00c,
1370         .halt_check = BRANCH_HALT,
1371         .clkr = {
1372                 .enable_reg = 0x4d00c,
1373                 .enable_mask = BIT(0),
1374                 .hw.init = &(struct clk_init_data){
1375                         .name = "gcc_npu_bwmon_dsp_cfg_ahb_clk",
1376                         .ops = &clk_branch2_ops,
1377                 },
1378         },
1379 };
1380
1381 static struct clk_branch gcc_npu_cfg_ahb_clk = {
1382         .halt_reg = 0x4c004,
1383         .halt_check = BRANCH_HALT,
1384         .hwcg_reg = 0x4c004,
1385         .hwcg_bit = 1,
1386         .clkr = {
1387                 .enable_reg = 0x4c004,
1388                 .enable_mask = BIT(0),
1389                 .hw.init = &(struct clk_init_data){
1390                         .name = "gcc_npu_cfg_ahb_clk",
1391                         .flags = CLK_IS_CRITICAL,
1392                         .ops = &clk_branch2_ops,
1393                 },
1394         },
1395 };
1396
1397 static struct clk_branch gcc_npu_dma_clk = {
1398         .halt_reg = 0x4c140,
1399         .halt_check = BRANCH_VOTED,
1400         .hwcg_reg = 0x4c140,
1401         .hwcg_bit = 1,
1402         .clkr = {
1403                 .enable_reg = 0x4c140,
1404                 .enable_mask = BIT(0),
1405                 .hw.init = &(struct clk_init_data){
1406                         .name = "gcc_npu_dma_clk",
1407                         .ops = &clk_branch2_ops,
1408                 },
1409         },
1410 };
1411
1412 static struct clk_branch gcc_npu_gpll0_clk = {
1413         .halt_check = BRANCH_HALT_DELAY,
1414         .clkr = {
1415                 .enable_reg = 0x52008,
1416                 .enable_mask = BIT(9),
1417                 .hw.init = &(struct clk_init_data){
1418                         .name = "gcc_npu_gpll0_clk",
1419                         .parent_hws = (const struct clk_hw*[]){
1420                                 &gpll0.clkr.hw,
1421                         },
1422                         .num_parents = 1,
1423                         .ops = &clk_branch2_ops,
1424                 },
1425         },
1426 };
1427
1428 static struct clk_branch gcc_npu_gpll0_div_clk = {
1429         .halt_check = BRANCH_HALT_DELAY,
1430         .clkr = {
1431                 .enable_reg = 0x52008,
1432                 .enable_mask = BIT(10),
1433                 .hw.init = &(struct clk_init_data){
1434                         .name = "gcc_npu_gpll0_div_clk",
1435                         .parent_hws = (const struct clk_hw*[]){
1436                                 &gcc_npu_pll0_main_div_clk_src.clkr.hw,
1437                         },
1438                         .num_parents = 1,
1439                         .ops = &clk_branch2_ops,
1440                 },
1441         },
1442 };
1443
1444 static struct clk_branch gcc_pdm2_clk = {
1445         .halt_reg = 0x2300c,
1446         .halt_check = BRANCH_HALT,
1447         .clkr = {
1448                 .enable_reg = 0x2300c,
1449                 .enable_mask = BIT(0),
1450                 .hw.init = &(struct clk_init_data){
1451                         .name = "gcc_pdm2_clk",
1452                         .parent_hws = (const struct clk_hw*[]){
1453                                 &gcc_pdm2_clk_src.clkr.hw,
1454                         },
1455                         .num_parents = 1,
1456                         .flags = CLK_SET_RATE_PARENT,
1457                         .ops = &clk_branch2_ops,
1458                 },
1459         },
1460 };
1461
1462 static struct clk_branch gcc_pdm_ahb_clk = {
1463         .halt_reg = 0x23004,
1464         .halt_check = BRANCH_HALT,
1465         .hwcg_reg = 0x23004,
1466         .hwcg_bit = 1,
1467         .clkr = {
1468                 .enable_reg = 0x23004,
1469                 .enable_mask = BIT(0),
1470                 .hw.init = &(struct clk_init_data){
1471                         .name = "gcc_pdm_ahb_clk",
1472                         .ops = &clk_branch2_ops,
1473                 },
1474         },
1475 };
1476
1477 static struct clk_branch gcc_pdm_xo4_clk = {
1478         .halt_reg = 0x23008,
1479         .halt_check = BRANCH_HALT,
1480         .clkr = {
1481                 .enable_reg = 0x23008,
1482                 .enable_mask = BIT(0),
1483                 .hw.init = &(struct clk_init_data){
1484                         .name = "gcc_pdm_xo4_clk",
1485                         .ops = &clk_branch2_ops,
1486                 },
1487         },
1488 };
1489
1490 static struct clk_branch gcc_prng_ahb_clk = {
1491         .halt_reg = 0x24004,
1492         .halt_check = BRANCH_HALT_VOTED,
1493         .hwcg_reg = 0x24004,
1494         .hwcg_bit = 1,
1495         .clkr = {
1496                 .enable_reg = 0x52000,
1497                 .enable_mask = BIT(26),
1498                 .hw.init = &(struct clk_init_data){
1499                         .name = "gcc_prng_ahb_clk",
1500                         .ops = &clk_branch2_ops,
1501                 },
1502         },
1503 };
1504
1505 static struct clk_branch gcc_qupv3_wrap0_core_2x_clk = {
1506         .halt_reg = 0x21014,
1507         .halt_check = BRANCH_HALT_VOTED,
1508         .clkr = {
1509                 .enable_reg = 0x52000,
1510                 .enable_mask = BIT(9),
1511                 .hw.init = &(struct clk_init_data){
1512                         .name = "gcc_qupv3_wrap0_core_2x_clk",
1513                         .ops = &clk_branch2_ops,
1514                 },
1515         },
1516 };
1517
1518 static struct clk_branch gcc_qupv3_wrap0_core_clk = {
1519         .halt_reg = 0x2100c,
1520         .halt_check = BRANCH_HALT_VOTED,
1521         .clkr = {
1522                 .enable_reg = 0x52000,
1523                 .enable_mask = BIT(8),
1524                 .hw.init = &(struct clk_init_data){
1525                         .name = "gcc_qupv3_wrap0_core_clk",
1526                         .ops = &clk_branch2_ops,
1527                 },
1528         },
1529 };
1530
1531 static struct clk_branch gcc_qupv3_wrap0_s0_clk = {
1532         .halt_reg = 0x21144,
1533         .halt_check = BRANCH_HALT_VOTED,
1534         .clkr = {
1535                 .enable_reg = 0x52000,
1536                 .enable_mask = BIT(10),
1537                 .hw.init = &(struct clk_init_data){
1538                         .name = "gcc_qupv3_wrap0_s0_clk",
1539                         .parent_hws = (const struct clk_hw*[]){
1540                                 &gcc_qupv3_wrap0_s0_clk_src.clkr.hw,
1541                         },
1542                         .num_parents = 1,
1543                         .flags = CLK_SET_RATE_PARENT,
1544                         .ops = &clk_branch2_ops,
1545                 },
1546         },
1547 };
1548
1549 static struct clk_branch gcc_qupv3_wrap0_s1_clk = {
1550         .halt_reg = 0x21274,
1551         .halt_check = BRANCH_HALT_VOTED,
1552         .clkr = {
1553                 .enable_reg = 0x52000,
1554                 .enable_mask = BIT(11),
1555                 .hw.init = &(struct clk_init_data){
1556                         .name = "gcc_qupv3_wrap0_s1_clk",
1557                         .parent_hws = (const struct clk_hw*[]){
1558                                 &gcc_qupv3_wrap0_s1_clk_src.clkr.hw,
1559                         },
1560                         .num_parents = 1,
1561                         .flags = CLK_SET_RATE_PARENT,
1562                         .ops = &clk_branch2_ops,
1563                 },
1564         },
1565 };
1566
1567 static struct clk_branch gcc_qupv3_wrap0_s2_clk = {
1568         .halt_reg = 0x213a4,
1569         .halt_check = BRANCH_HALT_VOTED,
1570         .clkr = {
1571                 .enable_reg = 0x52000,
1572                 .enable_mask = BIT(12),
1573                 .hw.init = &(struct clk_init_data){
1574                         .name = "gcc_qupv3_wrap0_s2_clk",
1575                         .parent_hws = (const struct clk_hw*[]){
1576                                 &gcc_qupv3_wrap0_s2_clk_src.clkr.hw,
1577                         },
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_qupv3_wrap0_s3_clk = {
1586         .halt_reg = 0x214d4,
1587         .halt_check = BRANCH_HALT_VOTED,
1588         .clkr = {
1589                 .enable_reg = 0x52000,
1590                 .enable_mask = BIT(13),
1591                 .hw.init = &(struct clk_init_data){
1592                         .name = "gcc_qupv3_wrap0_s3_clk",
1593                         .parent_hws = (const struct clk_hw*[]){
1594                                 &gcc_qupv3_wrap0_s3_clk_src.clkr.hw,
1595                         },
1596                         .num_parents = 1,
1597                         .flags = CLK_SET_RATE_PARENT,
1598                         .ops = &clk_branch2_ops,
1599                 },
1600         },
1601 };
1602
1603 static struct clk_branch gcc_qupv3_wrap0_s4_clk = {
1604         .halt_reg = 0x21604,
1605         .halt_check = BRANCH_HALT_VOTED,
1606         .clkr = {
1607                 .enable_reg = 0x52000,
1608                 .enable_mask = BIT(14),
1609                 .hw.init = &(struct clk_init_data){
1610                         .name = "gcc_qupv3_wrap0_s4_clk",
1611                         .parent_hws = (const struct clk_hw*[]){
1612                                 &gcc_qupv3_wrap0_s4_clk_src.clkr.hw,
1613                         },
1614                         .num_parents = 1,
1615                         .flags = CLK_SET_RATE_PARENT,
1616                         .ops = &clk_branch2_ops,
1617                 },
1618         },
1619 };
1620
1621 static struct clk_branch gcc_qupv3_wrap0_s5_clk = {
1622         .halt_reg = 0x21734,
1623         .halt_check = BRANCH_HALT_VOTED,
1624         .clkr = {
1625                 .enable_reg = 0x52000,
1626                 .enable_mask = BIT(15),
1627                 .hw.init = &(struct clk_init_data){
1628                         .name = "gcc_qupv3_wrap0_s5_clk",
1629                         .parent_hws = (const struct clk_hw*[]){
1630                                 &gcc_qupv3_wrap0_s5_clk_src.clkr.hw,
1631                         },
1632                         .num_parents = 1,
1633                         .flags = CLK_SET_RATE_PARENT,
1634                         .ops = &clk_branch2_ops,
1635                 },
1636         },
1637 };
1638
1639 static struct clk_branch gcc_qupv3_wrap1_core_2x_clk = {
1640         .halt_reg = 0x22004,
1641         .halt_check = BRANCH_HALT_VOTED,
1642         .clkr = {
1643                 .enable_reg = 0x52000,
1644                 .enable_mask = BIT(16),
1645                 .hw.init = &(struct clk_init_data){
1646                         .name = "gcc_qupv3_wrap1_core_2x_clk",
1647                         .ops = &clk_branch2_ops,
1648                 },
1649         },
1650 };
1651
1652 static struct clk_branch gcc_qupv3_wrap1_core_clk = {
1653         .halt_reg = 0x22008,
1654         .halt_check = BRANCH_HALT_VOTED,
1655         .clkr = {
1656                 .enable_reg = 0x52000,
1657                 .enable_mask = BIT(17),
1658                 .hw.init = &(struct clk_init_data){
1659                         .name = "gcc_qupv3_wrap1_core_clk",
1660                         .ops = &clk_branch2_ops,
1661                 },
1662         },
1663 };
1664
1665 static struct clk_branch gcc_qupv3_wrap1_s0_clk = {
1666         .halt_reg = 0x22014,
1667         .halt_check = BRANCH_HALT_VOTED,
1668         .clkr = {
1669                 .enable_reg = 0x52000,
1670                 .enable_mask = BIT(20),
1671                 .hw.init = &(struct clk_init_data){
1672                         .name = "gcc_qupv3_wrap1_s0_clk",
1673                         .parent_hws = (const struct clk_hw*[]){
1674                                 &gcc_qupv3_wrap1_s0_clk_src.clkr.hw,
1675                         },
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_qupv3_wrap1_s1_clk = {
1684         .halt_reg = 0x22144,
1685         .halt_check = BRANCH_HALT_VOTED,
1686         .clkr = {
1687                 .enable_reg = 0x52000,
1688                 .enable_mask = BIT(21),
1689                 .hw.init = &(struct clk_init_data){
1690                         .name = "gcc_qupv3_wrap1_s1_clk",
1691                         .parent_hws = (const struct clk_hw*[]){
1692                                 &gcc_qupv3_wrap1_s1_clk_src.clkr.hw,
1693                         },
1694                         .num_parents = 1,
1695                         .flags = CLK_SET_RATE_PARENT,
1696                         .ops = &clk_branch2_ops,
1697                 },
1698         },
1699 };
1700
1701 static struct clk_branch gcc_qupv3_wrap1_s2_clk = {
1702         .halt_reg = 0x22274,
1703         .halt_check = BRANCH_HALT_VOTED,
1704         .clkr = {
1705                 .enable_reg = 0x52000,
1706                 .enable_mask = BIT(22),
1707                 .hw.init = &(struct clk_init_data){
1708                         .name = "gcc_qupv3_wrap1_s2_clk",
1709                         .parent_hws = (const struct clk_hw*[]){
1710                                 &gcc_qupv3_wrap1_s2_clk_src.clkr.hw,
1711                         },
1712                         .num_parents = 1,
1713                         .flags = CLK_SET_RATE_PARENT,
1714                         .ops = &clk_branch2_ops,
1715                 },
1716         },
1717 };
1718
1719 static struct clk_branch gcc_qupv3_wrap1_s3_clk = {
1720         .halt_reg = 0x223a4,
1721         .halt_check = BRANCH_HALT_VOTED,
1722         .clkr = {
1723                 .enable_reg = 0x52000,
1724                 .enable_mask = BIT(23),
1725                 .hw.init = &(struct clk_init_data){
1726                         .name = "gcc_qupv3_wrap1_s3_clk",
1727                         .parent_hws = (const struct clk_hw*[]){
1728                                 &gcc_qupv3_wrap1_s3_clk_src.clkr.hw,
1729                         },
1730                         .num_parents = 1,
1731                         .flags = CLK_SET_RATE_PARENT,
1732                         .ops = &clk_branch2_ops,
1733                 },
1734         },
1735 };
1736
1737 static struct clk_branch gcc_qupv3_wrap1_s4_clk = {
1738         .halt_reg = 0x224d4,
1739         .halt_check = BRANCH_HALT_VOTED,
1740         .clkr = {
1741                 .enable_reg = 0x52000,
1742                 .enable_mask = BIT(24),
1743                 .hw.init = &(struct clk_init_data){
1744                         .name = "gcc_qupv3_wrap1_s4_clk",
1745                         .parent_hws = (const struct clk_hw*[]){
1746                                 &gcc_qupv3_wrap1_s4_clk_src.clkr.hw,
1747                         },
1748                         .num_parents = 1,
1749                         .flags = CLK_SET_RATE_PARENT,
1750                         .ops = &clk_branch2_ops,
1751                 },
1752         },
1753 };
1754
1755 static struct clk_branch gcc_qupv3_wrap1_s5_clk = {
1756         .halt_reg = 0x22604,
1757         .halt_check = BRANCH_HALT_VOTED,
1758         .clkr = {
1759                 .enable_reg = 0x52000,
1760                 .enable_mask = BIT(25),
1761                 .hw.init = &(struct clk_init_data){
1762                         .name = "gcc_qupv3_wrap1_s5_clk",
1763                         .parent_hws = (const struct clk_hw*[]){
1764                                 &gcc_qupv3_wrap1_s5_clk_src.clkr.hw,
1765                         },
1766                         .num_parents = 1,
1767                         .flags = CLK_SET_RATE_PARENT,
1768                         .ops = &clk_branch2_ops,
1769                 },
1770         },
1771 };
1772
1773 static struct clk_branch gcc_qupv3_wrap_0_m_ahb_clk = {
1774         .halt_reg = 0x21004,
1775         .halt_check = BRANCH_HALT_VOTED,
1776         .hwcg_reg = 0x21004,
1777         .hwcg_bit = 1,
1778         .clkr = {
1779                 .enable_reg = 0x52000,
1780                 .enable_mask = BIT(6),
1781                 .hw.init = &(struct clk_init_data){
1782                         .name = "gcc_qupv3_wrap_0_m_ahb_clk",
1783                         .ops = &clk_branch2_ops,
1784                 },
1785         },
1786 };
1787
1788 static struct clk_branch gcc_qupv3_wrap_0_s_ahb_clk = {
1789         .halt_reg = 0x21008,
1790         .halt_check = BRANCH_HALT_VOTED,
1791         .hwcg_reg = 0x21008,
1792         .hwcg_bit = 1,
1793         .clkr = {
1794                 .enable_reg = 0x52000,
1795                 .enable_mask = BIT(7),
1796                 .hw.init = &(struct clk_init_data){
1797                         .name = "gcc_qupv3_wrap_0_s_ahb_clk",
1798                         .ops = &clk_branch2_ops,
1799                 },
1800         },
1801 };
1802
1803 static struct clk_branch gcc_qupv3_wrap_1_m_ahb_clk = {
1804         .halt_reg = 0x2200c,
1805         .halt_check = BRANCH_HALT_VOTED,
1806         .hwcg_reg = 0x2200c,
1807         .hwcg_bit = 1,
1808         .clkr = {
1809                 .enable_reg = 0x52000,
1810                 .enable_mask = BIT(18),
1811                 .hw.init = &(struct clk_init_data){
1812                         .name = "gcc_qupv3_wrap_1_m_ahb_clk",
1813                         .ops = &clk_branch2_ops,
1814                 },
1815         },
1816 };
1817
1818 static struct clk_branch gcc_qupv3_wrap_1_s_ahb_clk = {
1819         .halt_reg = 0x22010,
1820         .halt_check = BRANCH_HALT_VOTED,
1821         .hwcg_reg = 0x22010,
1822         .hwcg_bit = 1,
1823         .clkr = {
1824                 .enable_reg = 0x52000,
1825                 .enable_mask = BIT(19),
1826                 .hw.init = &(struct clk_init_data){
1827                         .name = "gcc_qupv3_wrap_1_s_ahb_clk",
1828                         .ops = &clk_branch2_ops,
1829                 },
1830         },
1831 };
1832
1833 static struct clk_branch gcc_sdcc1_ahb_clk = {
1834         .halt_reg = 0x4b004,
1835         .halt_check = BRANCH_HALT,
1836         .clkr = {
1837                 .enable_reg = 0x4b004,
1838                 .enable_mask = BIT(0),
1839                 .hw.init = &(struct clk_init_data){
1840                         .name = "gcc_sdcc1_ahb_clk",
1841                         .ops = &clk_branch2_ops,
1842                 },
1843         },
1844 };
1845
1846 static struct clk_branch gcc_sdcc1_apps_clk = {
1847         .halt_reg = 0x4b008,
1848         .halt_check = BRANCH_HALT,
1849         .clkr = {
1850                 .enable_reg = 0x4b008,
1851                 .enable_mask = BIT(0),
1852                 .hw.init = &(struct clk_init_data){
1853                         .name = "gcc_sdcc1_apps_clk",
1854                         .parent_hws = (const struct clk_hw*[]){
1855                                 &gcc_sdcc1_apps_clk_src.clkr.hw,
1856                         },
1857                         .num_parents = 1,
1858                         .flags = CLK_SET_RATE_PARENT,
1859                         .ops = &clk_branch2_ops,
1860                 },
1861         },
1862 };
1863
1864 static struct clk_branch gcc_sdcc1_ice_core_clk = {
1865         .halt_reg = 0x4b03c,
1866         .halt_check = BRANCH_HALT,
1867         .hwcg_reg = 0x4b03c,
1868         .hwcg_bit = 1,
1869         .clkr = {
1870                 .enable_reg = 0x4b03c,
1871                 .enable_mask = BIT(0),
1872                 .hw.init = &(struct clk_init_data){
1873                         .name = "gcc_sdcc1_ice_core_clk",
1874                         .parent_hws = (const struct clk_hw*[]){
1875                                 &gcc_sdcc1_ice_core_clk_src.clkr.hw,
1876                         },
1877                         .num_parents = 1,
1878                         .flags = CLK_SET_RATE_PARENT,
1879                         .ops = &clk_branch2_ops,
1880                 },
1881         },
1882 };
1883
1884 static struct clk_branch gcc_sdcc2_ahb_clk = {
1885         .halt_reg = 0x20008,
1886         .halt_check = BRANCH_HALT,
1887         .clkr = {
1888                 .enable_reg = 0x20008,
1889                 .enable_mask = BIT(0),
1890                 .hw.init = &(struct clk_init_data){
1891                         .name = "gcc_sdcc2_ahb_clk",
1892                         .ops = &clk_branch2_ops,
1893                 },
1894         },
1895 };
1896
1897 static struct clk_branch gcc_sdcc2_apps_clk = {
1898         .halt_reg = 0x20004,
1899         .halt_check = BRANCH_HALT,
1900         .clkr = {
1901                 .enable_reg = 0x20004,
1902                 .enable_mask = BIT(0),
1903                 .hw.init = &(struct clk_init_data){
1904                         .name = "gcc_sdcc2_apps_clk",
1905                         .parent_hws = (const struct clk_hw*[]){
1906                                 &gcc_sdcc2_apps_clk_src.clkr.hw,
1907                         },
1908                         .num_parents = 1,
1909                         .flags = CLK_SET_RATE_PARENT,
1910                         .ops = &clk_branch2_ops,
1911                 },
1912         },
1913 };
1914
1915 static struct clk_branch gcc_sys_noc_cpuss_ahb_clk = {
1916         .halt_reg = 0x10140,
1917         .halt_check = BRANCH_HALT_VOTED,
1918         .hwcg_reg = 0x10140,
1919         .hwcg_bit = 1,
1920         .clkr = {
1921                 .enable_reg = 0x52000,
1922                 .enable_mask = BIT(0),
1923                 .hw.init = &(struct clk_init_data){
1924                         .name = "gcc_sys_noc_cpuss_ahb_clk",
1925                         .parent_hws = (const struct clk_hw*[]){
1926                                 &gcc_cpuss_ahb_clk_src.clkr.hw,
1927                         },
1928                         .num_parents = 1,
1929                         .flags = CLK_IS_CRITICAL | CLK_SET_RATE_PARENT,
1930                         .ops = &clk_branch2_ops,
1931                 },
1932         },
1933 };
1934
1935 static struct clk_branch gcc_ufs_mem_clkref_clk = {
1936         .halt_reg = 0x8c000,
1937         .halt_check = BRANCH_HALT,
1938         .clkr = {
1939                 .enable_reg = 0x8c000,
1940                 .enable_mask = BIT(0),
1941                 .hw.init = &(struct clk_init_data){
1942                         .name = "gcc_ufs_mem_clkref_clk",
1943                         .ops = &clk_branch2_ops,
1944                 },
1945         },
1946 };
1947
1948 static struct clk_branch gcc_ufs_phy_ahb_clk = {
1949         .halt_reg = 0x3a00c,
1950         .halt_check = BRANCH_HALT,
1951         .hwcg_reg = 0x3a00c,
1952         .hwcg_bit = 1,
1953         .clkr = {
1954                 .enable_reg = 0x3a00c,
1955                 .enable_mask = BIT(0),
1956                 .hw.init = &(struct clk_init_data){
1957                         .name = "gcc_ufs_phy_ahb_clk",
1958                         .ops = &clk_branch2_ops,
1959                 },
1960         },
1961 };
1962
1963 static struct clk_branch gcc_ufs_phy_axi_clk = {
1964         .halt_reg = 0x3a034,
1965         .halt_check = BRANCH_HALT,
1966         .hwcg_reg = 0x3a034,
1967         .hwcg_bit = 1,
1968         .clkr = {
1969                 .enable_reg = 0x3a034,
1970                 .enable_mask = BIT(0),
1971                 .hw.init = &(struct clk_init_data){
1972                         .name = "gcc_ufs_phy_axi_clk",
1973                         .parent_hws = (const struct clk_hw*[]){
1974                                 &gcc_ufs_phy_axi_clk_src.clkr.hw,
1975                         },
1976                         .num_parents = 1,
1977                         .flags = CLK_SET_RATE_PARENT,
1978                         .ops = &clk_branch2_ops,
1979                 },
1980         },
1981 };
1982
1983 static struct clk_branch gcc_ufs_phy_ice_core_clk = {
1984         .halt_reg = 0x3a0a4,
1985         .halt_check = BRANCH_HALT,
1986         .hwcg_reg = 0x3a0a4,
1987         .hwcg_bit = 1,
1988         .clkr = {
1989                 .enable_reg = 0x3a0a4,
1990                 .enable_mask = BIT(0),
1991                 .hw.init = &(struct clk_init_data){
1992                         .name = "gcc_ufs_phy_ice_core_clk",
1993                         .parent_hws = (const struct clk_hw*[]){
1994                                 &gcc_ufs_phy_ice_core_clk_src.clkr.hw,
1995                         },
1996                         .num_parents = 1,
1997                         .flags = CLK_SET_RATE_PARENT,
1998                         .ops = &clk_branch2_ops,
1999                 },
2000         },
2001 };
2002
2003 static struct clk_branch gcc_ufs_phy_ice_core_hw_ctl_clk = {
2004         .halt_reg = 0x3a0a4,
2005         .halt_check = BRANCH_HALT,
2006         .hwcg_reg = 0x3a0a4,
2007         .hwcg_bit = 1,
2008         .clkr = {
2009                 .enable_reg = 0x3a0a4,
2010                 .enable_mask = BIT(1),
2011                 .hw.init = &(struct clk_init_data){
2012                         .name = "gcc_ufs_phy_ice_core_hw_ctl_clk",
2013                         .parent_hws = (const struct clk_hw*[]){
2014                                 &gcc_ufs_phy_ice_core_clk_src.clkr.hw,
2015                         },
2016                         .num_parents = 1,
2017                         .flags = CLK_SET_RATE_PARENT,
2018                         .ops = &clk_branch2_ops,
2019                 },
2020         },
2021 };
2022
2023 static struct clk_branch gcc_ufs_phy_phy_aux_clk = {
2024         .halt_reg = 0x3a0ac,
2025         .halt_check = BRANCH_HALT,
2026         .hwcg_reg = 0x3a0ac,
2027         .hwcg_bit = 1,
2028         .clkr = {
2029                 .enable_reg = 0x3a0ac,
2030                 .enable_mask = BIT(0),
2031                 .hw.init = &(struct clk_init_data){
2032                         .name = "gcc_ufs_phy_phy_aux_clk",
2033                         .parent_hws = (const struct clk_hw*[]){
2034                                 &gcc_ufs_phy_phy_aux_clk_src.clkr.hw,
2035                         },
2036                         .num_parents = 1,
2037                         .flags = CLK_SET_RATE_PARENT,
2038                         .ops = &clk_branch2_ops,
2039                 },
2040         },
2041 };
2042
2043 static struct clk_branch gcc_ufs_phy_phy_aux_hw_ctl_clk = {
2044         .halt_reg = 0x3a0ac,
2045         .halt_check = BRANCH_HALT,
2046         .hwcg_reg = 0x3a0ac,
2047         .hwcg_bit = 1,
2048         .clkr = {
2049                 .enable_reg = 0x3a0ac,
2050                 .enable_mask = BIT(1),
2051                 .hw.init = &(struct clk_init_data){
2052                         .name = "gcc_ufs_phy_phy_aux_hw_ctl_clk",
2053                         .parent_hws = (const struct clk_hw*[]){
2054                                 &gcc_ufs_phy_phy_aux_clk_src.clkr.hw,
2055                         },
2056                         .num_parents = 1,
2057                         .flags = CLK_SET_RATE_PARENT,
2058                         .ops = &clk_branch2_ops,
2059                 },
2060         },
2061 };
2062
2063 static struct clk_branch gcc_ufs_phy_rx_symbol_0_clk = {
2064         .halt_reg = 0x3a014,
2065         .halt_check = BRANCH_HALT_SKIP,
2066         .clkr = {
2067                 .enable_reg = 0x3a014,
2068                 .enable_mask = BIT(0),
2069                 .hw.init = &(struct clk_init_data){
2070                         .name = "gcc_ufs_phy_rx_symbol_0_clk",
2071                         .ops = &clk_branch2_ops,
2072                 },
2073         },
2074 };
2075
2076 static struct clk_branch gcc_ufs_phy_rx_symbol_1_clk = {
2077         .halt_reg = 0x3a018,
2078         .halt_check = BRANCH_HALT_SKIP,
2079         .clkr = {
2080                 .enable_reg = 0x3a018,
2081                 .enable_mask = BIT(0),
2082                 .hw.init = &(struct clk_init_data){
2083                         .name = "gcc_ufs_phy_rx_symbol_1_clk",
2084                         .ops = &clk_branch2_ops,
2085                 },
2086         },
2087 };
2088
2089 static struct clk_branch gcc_ufs_phy_tx_symbol_0_clk = {
2090         .halt_reg = 0x3a010,
2091         .halt_check = BRANCH_HALT_SKIP,
2092         .clkr = {
2093                 .enable_reg = 0x3a010,
2094                 .enable_mask = BIT(0),
2095                 .hw.init = &(struct clk_init_data){
2096                         .name = "gcc_ufs_phy_tx_symbol_0_clk",
2097                         .ops = &clk_branch2_ops,
2098                 },
2099         },
2100 };
2101
2102 static struct clk_branch gcc_ufs_phy_unipro_core_clk = {
2103         .halt_reg = 0x3a09c,
2104         .halt_check = BRANCH_HALT,
2105         .hwcg_reg = 0x3a09c,
2106         .hwcg_bit = 1,
2107         .clkr = {
2108                 .enable_reg = 0x3a09c,
2109                 .enable_mask = BIT(0),
2110                 .hw.init = &(struct clk_init_data){
2111                         .name = "gcc_ufs_phy_unipro_core_clk",
2112                         .parent_hws = (const struct clk_hw*[]){
2113                                 &gcc_ufs_phy_unipro_core_clk_src.clkr.hw,
2114                         },
2115                         .num_parents = 1,
2116                         .flags = CLK_SET_RATE_PARENT,
2117                         .ops = &clk_branch2_ops,
2118                 },
2119         },
2120 };
2121
2122 static struct clk_branch gcc_ufs_phy_unipro_core_hw_ctl_clk = {
2123         .halt_reg = 0x3a09c,
2124         .halt_check = BRANCH_HALT,
2125         .hwcg_reg = 0x3a09c,
2126         .hwcg_bit = 1,
2127         .clkr = {
2128                 .enable_reg = 0x3a09c,
2129                 .enable_mask = BIT(1),
2130                 .hw.init = &(struct clk_init_data){
2131                         .name = "gcc_ufs_phy_unipro_core_hw_ctl_clk",
2132                         .parent_hws = (const struct clk_hw*[]){
2133                                 &gcc_ufs_phy_unipro_core_clk_src.clkr.hw,
2134                         },
2135                         .num_parents = 1,
2136                         .flags = CLK_SET_RATE_PARENT,
2137                         .ops = &clk_branch2_ops,
2138                 },
2139         },
2140 };
2141
2142 static struct clk_branch gcc_usb30_prim_master_clk = {
2143         .halt_reg = 0x1a00c,
2144         .halt_check = BRANCH_HALT,
2145         .clkr = {
2146                 .enable_reg = 0x1a00c,
2147                 .enable_mask = BIT(0),
2148                 .hw.init = &(struct clk_init_data){
2149                         .name = "gcc_usb30_prim_master_clk",
2150                         .parent_hws = (const struct clk_hw*[]){
2151                                 &gcc_usb30_prim_master_clk_src.clkr.hw,
2152                         },
2153                         .num_parents = 1,
2154                         .flags = CLK_SET_RATE_PARENT,
2155                         .ops = &clk_branch2_ops,
2156                 },
2157         },
2158 };
2159
2160 static struct clk_branch gcc_usb30_prim_mock_utmi_clk = {
2161         .halt_reg = 0x1a018,
2162         .halt_check = BRANCH_HALT,
2163         .clkr = {
2164                 .enable_reg = 0x1a018,
2165                 .enable_mask = BIT(0),
2166                 .hw.init = &(struct clk_init_data){
2167                         .name = "gcc_usb30_prim_mock_utmi_clk",
2168                         .parent_hws = (const struct clk_hw*[]){
2169                                 &gcc_usb30_prim_mock_utmi_clk_src.clkr.hw,
2170                         },
2171                         .num_parents = 1,
2172                         .flags = CLK_SET_RATE_PARENT,
2173                         .ops = &clk_branch2_ops,
2174                 },
2175         },
2176 };
2177
2178 static struct clk_branch gcc_usb30_prim_sleep_clk = {
2179         .halt_reg = 0x1a014,
2180         .halt_check = BRANCH_HALT,
2181         .clkr = {
2182                 .enable_reg = 0x1a014,
2183                 .enable_mask = BIT(0),
2184                 .hw.init = &(struct clk_init_data){
2185                         .name = "gcc_usb30_prim_sleep_clk",
2186                         .ops = &clk_branch2_ops,
2187                 },
2188         },
2189 };
2190
2191 static struct clk_branch gcc_usb3_prim_clkref_clk = {
2192         .halt_reg = 0x8c010,
2193         .halt_check = BRANCH_HALT,
2194         .clkr = {
2195                 .enable_reg = 0x8c010,
2196                 .enable_mask = BIT(0),
2197                 .hw.init = &(struct clk_init_data){
2198                         .name = "gcc_usb3_prim_clkref_clk",
2199                         .ops = &clk_branch2_ops,
2200                 },
2201         },
2202 };
2203
2204 static struct clk_branch gcc_usb3_prim_phy_aux_clk = {
2205         .halt_reg = 0x1a050,
2206         .halt_check = BRANCH_HALT,
2207         .clkr = {
2208                 .enable_reg = 0x1a050,
2209                 .enable_mask = BIT(0),
2210                 .hw.init = &(struct clk_init_data){
2211                         .name = "gcc_usb3_prim_phy_aux_clk",
2212                         .parent_hws = (const struct clk_hw*[]){
2213                                 &gcc_usb3_prim_phy_aux_clk_src.clkr.hw,
2214                         },
2215                         .num_parents = 1,
2216                         .flags = CLK_SET_RATE_PARENT,
2217                         .ops = &clk_branch2_ops,
2218                 },
2219         },
2220 };
2221
2222 static struct clk_branch gcc_usb3_prim_phy_com_aux_clk = {
2223         .halt_reg = 0x1a054,
2224         .halt_check = BRANCH_HALT,
2225         .clkr = {
2226                 .enable_reg = 0x1a054,
2227                 .enable_mask = BIT(0),
2228                 .hw.init = &(struct clk_init_data){
2229                         .name = "gcc_usb3_prim_phy_com_aux_clk",
2230                         .parent_hws = (const struct clk_hw*[]){
2231                                 &gcc_usb3_prim_phy_aux_clk_src.clkr.hw,
2232                         },
2233                         .num_parents = 1,
2234                         .flags = CLK_SET_RATE_PARENT,
2235                         .ops = &clk_branch2_ops,
2236                 },
2237         },
2238 };
2239
2240 static struct clk_branch gcc_usb3_prim_phy_pipe_clk = {
2241         .halt_reg = 0x1a058,
2242         .halt_check = BRANCH_HALT_SKIP,
2243         .hwcg_reg = 0x1a058,
2244         .hwcg_bit = 1,
2245         .clkr = {
2246                 .enable_reg = 0x1a058,
2247                 .enable_mask = BIT(0),
2248                 .hw.init = &(struct clk_init_data){
2249                         .name = "gcc_usb3_prim_phy_pipe_clk",
2250                         .ops = &clk_branch2_ops,
2251                 },
2252         },
2253 };
2254
2255 static struct clk_branch gcc_video_ahb_clk = {
2256         .halt_reg = 0x17004,
2257         .halt_check = BRANCH_HALT,
2258         .hwcg_reg = 0x17004,
2259         .hwcg_bit = 1,
2260         .clkr = {
2261                 .enable_reg = 0x17004,
2262                 .enable_mask = BIT(0),
2263                 .hw.init = &(struct clk_init_data){
2264                         .name = "gcc_video_ahb_clk",
2265                         .flags = CLK_IS_CRITICAL,
2266                         .ops = &clk_branch2_ops,
2267                 },
2268         },
2269 };
2270
2271 static struct clk_branch gcc_video_axi_clk = {
2272         .halt_reg = 0x17014,
2273         .halt_check = BRANCH_HALT,
2274         .hwcg_reg = 0x17014,
2275         .hwcg_bit = 1,
2276         .clkr = {
2277                 .enable_reg = 0x17014,
2278                 .enable_mask = BIT(0),
2279                 .hw.init = &(struct clk_init_data){
2280                         .name = "gcc_video_axi_clk",
2281                         .ops = &clk_branch2_ops,
2282                 },
2283         },
2284 };
2285
2286 static struct clk_branch gcc_video_throttle_axi_clk = {
2287         .halt_reg = 0x17020,
2288         .halt_check = BRANCH_HALT,
2289         .hwcg_reg = 0x17020,
2290         .hwcg_bit = 1,
2291         .clkr = {
2292                 .enable_reg = 0x17020,
2293                 .enable_mask = BIT(0),
2294                 .hw.init = &(struct clk_init_data){
2295                         .name = "gcc_video_throttle_axi_clk",
2296                         .ops = &clk_branch2_ops,
2297                 },
2298         },
2299 };
2300
2301 static struct clk_branch gcc_video_xo_clk = {
2302         .halt_reg = 0x1702c,
2303         .halt_check = BRANCH_HALT,
2304         .clkr = {
2305                 .enable_reg = 0x1702c,
2306                 .enable_mask = BIT(0),
2307                 .hw.init = &(struct clk_init_data){
2308                         .name = "gcc_video_xo_clk",
2309                         .flags = CLK_IS_CRITICAL,
2310                         .ops = &clk_branch2_ops,
2311                 },
2312         },
2313 };
2314
2315 static struct gdsc usb30_prim_gdsc = {
2316         .gdscr = 0x1a004,
2317         .pd = {
2318                 .name = "usb30_prim_gdsc",
2319         },
2320         .pwrsts = PWRSTS_RET_ON,
2321 };
2322
2323 static struct gdsc ufs_phy_gdsc = {
2324         .gdscr = 0x3a004,
2325         .pd = {
2326                 .name = "ufs_phy_gdsc",
2327         },
2328         .pwrsts = PWRSTS_OFF_ON,
2329 };
2330
2331 static struct gdsc hlos1_vote_mmnoc_mmu_tbu_hf0_gdsc = {
2332         .gdscr = 0xb7040,
2333         .pd = {
2334                 .name = "hlos1_vote_mmnoc_mmu_tbu_hf0_gdsc",
2335         },
2336         .pwrsts = PWRSTS_OFF_ON,
2337         .flags = VOTABLE,
2338 };
2339
2340 static struct gdsc hlos1_vote_mmnoc_mmu_tbu_hf1_gdsc = {
2341         .gdscr = 0xb7044,
2342         .pd = {
2343                 .name = "hlos1_vote_mmnoc_mmu_tbu_hf1_gdsc",
2344         },
2345         .pwrsts = PWRSTS_OFF_ON,
2346         .flags = VOTABLE,
2347 };
2348
2349 static struct clk_regmap *gcc_sm6350_clocks[] = {
2350         [GCC_AGGRE_UFS_PHY_AXI_CLK] = &gcc_aggre_ufs_phy_axi_clk.clkr,
2351         [GCC_AGGRE_USB3_PRIM_AXI_CLK] = &gcc_aggre_usb3_prim_axi_clk.clkr,
2352         [GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr,
2353         [GCC_CAMERA_AHB_CLK] = &gcc_camera_ahb_clk.clkr,
2354         [GCC_CAMERA_AXI_CLK] = &gcc_camera_axi_clk.clkr,
2355         [GCC_CAMERA_THROTTLE_NRT_AXI_CLK] =
2356                 &gcc_camera_throttle_nrt_axi_clk.clkr,
2357         [GCC_CAMERA_THROTTLE_RT_AXI_CLK] = &gcc_camera_throttle_rt_axi_clk.clkr,
2358         [GCC_CAMERA_XO_CLK] = &gcc_camera_xo_clk.clkr,
2359         [GCC_CE1_AHB_CLK] = &gcc_ce1_ahb_clk.clkr,
2360         [GCC_CE1_AXI_CLK] = &gcc_ce1_axi_clk.clkr,
2361         [GCC_CE1_CLK] = &gcc_ce1_clk.clkr,
2362         [GCC_CFG_NOC_USB3_PRIM_AXI_CLK] = &gcc_cfg_noc_usb3_prim_axi_clk.clkr,
2363         [GCC_CPUSS_AHB_CLK] = &gcc_cpuss_ahb_clk.clkr,
2364         [GCC_CPUSS_AHB_CLK_SRC] = &gcc_cpuss_ahb_clk_src.clkr,
2365         [GCC_CPUSS_GNOC_CLK] = &gcc_cpuss_gnoc_clk.clkr,
2366         [GCC_CPUSS_RBCPR_CLK] = &gcc_cpuss_rbcpr_clk.clkr,
2367         [GCC_DDRSS_GPU_AXI_CLK] = &gcc_ddrss_gpu_axi_clk.clkr,
2368         [GCC_DISP_AHB_CLK] = &gcc_disp_ahb_clk.clkr,
2369         [GCC_DISP_AXI_CLK] = &gcc_disp_axi_clk.clkr,
2370         [GCC_DISP_CC_SLEEP_CLK] = &gcc_disp_cc_sleep_clk.clkr,
2371         [GCC_DISP_CC_XO_CLK] = &gcc_disp_cc_xo_clk.clkr,
2372         [GCC_DISP_GPLL0_CLK] = &gcc_disp_gpll0_clk.clkr,
2373         [GCC_DISP_THROTTLE_AXI_CLK] = &gcc_disp_throttle_axi_clk.clkr,
2374         [GCC_DISP_XO_CLK] = &gcc_disp_xo_clk.clkr,
2375         [GCC_GP1_CLK] = &gcc_gp1_clk.clkr,
2376         [GCC_GP1_CLK_SRC] = &gcc_gp1_clk_src.clkr,
2377         [GCC_GP2_CLK] = &gcc_gp2_clk.clkr,
2378         [GCC_GP2_CLK_SRC] = &gcc_gp2_clk_src.clkr,
2379         [GCC_GP3_CLK] = &gcc_gp3_clk.clkr,
2380         [GCC_GP3_CLK_SRC] = &gcc_gp3_clk_src.clkr,
2381         [GCC_GPU_CFG_AHB_CLK] = &gcc_gpu_cfg_ahb_clk.clkr,
2382         [GCC_GPU_GPLL0_CLK] = &gcc_gpu_gpll0_clk.clkr,
2383         [GCC_GPU_GPLL0_DIV_CLK] = &gcc_gpu_gpll0_div_clk.clkr,
2384         [GCC_GPU_MEMNOC_GFX_CLK] = &gcc_gpu_memnoc_gfx_clk.clkr,
2385         [GCC_GPU_SNOC_DVM_GFX_CLK] = &gcc_gpu_snoc_dvm_gfx_clk.clkr,
2386         [GCC_NPU_AXI_CLK] = &gcc_npu_axi_clk.clkr,
2387         [GCC_NPU_BWMON_AXI_CLK] = &gcc_npu_bwmon_axi_clk.clkr,
2388         [GCC_NPU_BWMON_DMA_CFG_AHB_CLK] = &gcc_npu_bwmon_dma_cfg_ahb_clk.clkr,
2389         [GCC_NPU_BWMON_DSP_CFG_AHB_CLK] = &gcc_npu_bwmon_dsp_cfg_ahb_clk.clkr,
2390         [GCC_NPU_CFG_AHB_CLK] = &gcc_npu_cfg_ahb_clk.clkr,
2391         [GCC_NPU_DMA_CLK] = &gcc_npu_dma_clk.clkr,
2392         [GCC_NPU_GPLL0_CLK] = &gcc_npu_gpll0_clk.clkr,
2393         [GCC_NPU_GPLL0_DIV_CLK] = &gcc_npu_gpll0_div_clk.clkr,
2394         [GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr,
2395         [GCC_PDM2_CLK_SRC] = &gcc_pdm2_clk_src.clkr,
2396         [GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr,
2397         [GCC_PDM_XO4_CLK] = &gcc_pdm_xo4_clk.clkr,
2398         [GCC_PRNG_AHB_CLK] = &gcc_prng_ahb_clk.clkr,
2399         [GCC_QUPV3_WRAP0_CORE_2X_CLK] = &gcc_qupv3_wrap0_core_2x_clk.clkr,
2400         [GCC_QUPV3_WRAP0_CORE_CLK] = &gcc_qupv3_wrap0_core_clk.clkr,
2401         [GCC_QUPV3_WRAP0_S0_CLK] = &gcc_qupv3_wrap0_s0_clk.clkr,
2402         [GCC_QUPV3_WRAP0_S0_CLK_SRC] = &gcc_qupv3_wrap0_s0_clk_src.clkr,
2403         [GCC_QUPV3_WRAP0_S1_CLK] = &gcc_qupv3_wrap0_s1_clk.clkr,
2404         [GCC_QUPV3_WRAP0_S1_CLK_SRC] = &gcc_qupv3_wrap0_s1_clk_src.clkr,
2405         [GCC_QUPV3_WRAP0_S2_CLK] = &gcc_qupv3_wrap0_s2_clk.clkr,
2406         [GCC_QUPV3_WRAP0_S2_CLK_SRC] = &gcc_qupv3_wrap0_s2_clk_src.clkr,
2407         [GCC_QUPV3_WRAP0_S3_CLK] = &gcc_qupv3_wrap0_s3_clk.clkr,
2408         [GCC_QUPV3_WRAP0_S3_CLK_SRC] = &gcc_qupv3_wrap0_s3_clk_src.clkr,
2409         [GCC_QUPV3_WRAP0_S4_CLK] = &gcc_qupv3_wrap0_s4_clk.clkr,
2410         [GCC_QUPV3_WRAP0_S4_CLK_SRC] = &gcc_qupv3_wrap0_s4_clk_src.clkr,
2411         [GCC_QUPV3_WRAP0_S5_CLK] = &gcc_qupv3_wrap0_s5_clk.clkr,
2412         [GCC_QUPV3_WRAP0_S5_CLK_SRC] = &gcc_qupv3_wrap0_s5_clk_src.clkr,
2413         [GCC_QUPV3_WRAP1_CORE_2X_CLK] = &gcc_qupv3_wrap1_core_2x_clk.clkr,
2414         [GCC_QUPV3_WRAP1_CORE_CLK] = &gcc_qupv3_wrap1_core_clk.clkr,
2415         [GCC_QUPV3_WRAP1_S0_CLK] = &gcc_qupv3_wrap1_s0_clk.clkr,
2416         [GCC_QUPV3_WRAP1_S0_CLK_SRC] = &gcc_qupv3_wrap1_s0_clk_src.clkr,
2417         [GCC_QUPV3_WRAP1_S1_CLK] = &gcc_qupv3_wrap1_s1_clk.clkr,
2418         [GCC_QUPV3_WRAP1_S1_CLK_SRC] = &gcc_qupv3_wrap1_s1_clk_src.clkr,
2419         [GCC_QUPV3_WRAP1_S2_CLK] = &gcc_qupv3_wrap1_s2_clk.clkr,
2420         [GCC_QUPV3_WRAP1_S2_CLK_SRC] = &gcc_qupv3_wrap1_s2_clk_src.clkr,
2421         [GCC_QUPV3_WRAP1_S3_CLK] = &gcc_qupv3_wrap1_s3_clk.clkr,
2422         [GCC_QUPV3_WRAP1_S3_CLK_SRC] = &gcc_qupv3_wrap1_s3_clk_src.clkr,
2423         [GCC_QUPV3_WRAP1_S4_CLK] = &gcc_qupv3_wrap1_s4_clk.clkr,
2424         [GCC_QUPV3_WRAP1_S4_CLK_SRC] = &gcc_qupv3_wrap1_s4_clk_src.clkr,
2425         [GCC_QUPV3_WRAP1_S5_CLK] = &gcc_qupv3_wrap1_s5_clk.clkr,
2426         [GCC_QUPV3_WRAP1_S5_CLK_SRC] = &gcc_qupv3_wrap1_s5_clk_src.clkr,
2427         [GCC_QUPV3_WRAP_0_M_AHB_CLK] = &gcc_qupv3_wrap_0_m_ahb_clk.clkr,
2428         [GCC_QUPV3_WRAP_0_S_AHB_CLK] = &gcc_qupv3_wrap_0_s_ahb_clk.clkr,
2429         [GCC_QUPV3_WRAP_1_M_AHB_CLK] = &gcc_qupv3_wrap_1_m_ahb_clk.clkr,
2430         [GCC_QUPV3_WRAP_1_S_AHB_CLK] = &gcc_qupv3_wrap_1_s_ahb_clk.clkr,
2431         [GCC_SDCC1_AHB_CLK] = &gcc_sdcc1_ahb_clk.clkr,
2432         [GCC_SDCC1_APPS_CLK] = &gcc_sdcc1_apps_clk.clkr,
2433         [GCC_SDCC1_APPS_CLK_SRC] = &gcc_sdcc1_apps_clk_src.clkr,
2434         [GCC_SDCC1_ICE_CORE_CLK] = &gcc_sdcc1_ice_core_clk.clkr,
2435         [GCC_SDCC1_ICE_CORE_CLK_SRC] = &gcc_sdcc1_ice_core_clk_src.clkr,
2436         [GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr,
2437         [GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr,
2438         [GCC_SDCC2_APPS_CLK_SRC] = &gcc_sdcc2_apps_clk_src.clkr,
2439         [GCC_SYS_NOC_CPUSS_AHB_CLK] = &gcc_sys_noc_cpuss_ahb_clk.clkr,
2440         [GCC_UFS_MEM_CLKREF_CLK] = &gcc_ufs_mem_clkref_clk.clkr,
2441         [GCC_UFS_PHY_AHB_CLK] = &gcc_ufs_phy_ahb_clk.clkr,
2442         [GCC_UFS_PHY_AXI_CLK] = &gcc_ufs_phy_axi_clk.clkr,
2443         [GCC_UFS_PHY_AXI_CLK_SRC] = &gcc_ufs_phy_axi_clk_src.clkr,
2444         [GCC_UFS_PHY_ICE_CORE_CLK] = &gcc_ufs_phy_ice_core_clk.clkr,
2445         [GCC_UFS_PHY_ICE_CORE_CLK_SRC] = &gcc_ufs_phy_ice_core_clk_src.clkr,
2446         [GCC_UFS_PHY_PHY_AUX_CLK] = &gcc_ufs_phy_phy_aux_clk.clkr,
2447         [GCC_UFS_PHY_PHY_AUX_CLK_SRC] = &gcc_ufs_phy_phy_aux_clk_src.clkr,
2448         [GCC_UFS_PHY_RX_SYMBOL_0_CLK] = &gcc_ufs_phy_rx_symbol_0_clk.clkr,
2449         [GCC_UFS_PHY_RX_SYMBOL_1_CLK] = &gcc_ufs_phy_rx_symbol_1_clk.clkr,
2450         [GCC_UFS_PHY_TX_SYMBOL_0_CLK] = &gcc_ufs_phy_tx_symbol_0_clk.clkr,
2451         [GCC_UFS_PHY_UNIPRO_CORE_CLK] = &gcc_ufs_phy_unipro_core_clk.clkr,
2452         [GCC_UFS_PHY_UNIPRO_CORE_CLK_SRC] =
2453                 &gcc_ufs_phy_unipro_core_clk_src.clkr,
2454         [GCC_USB30_PRIM_MASTER_CLK] = &gcc_usb30_prim_master_clk.clkr,
2455         [GCC_USB30_PRIM_MASTER_CLK_SRC] = &gcc_usb30_prim_master_clk_src.clkr,
2456         [GCC_USB30_PRIM_MOCK_UTMI_CLK] = &gcc_usb30_prim_mock_utmi_clk.clkr,
2457         [GCC_USB30_PRIM_MOCK_UTMI_CLK_SRC] =
2458                 &gcc_usb30_prim_mock_utmi_clk_src.clkr,
2459         [GCC_USB30_PRIM_SLEEP_CLK] = &gcc_usb30_prim_sleep_clk.clkr,
2460         [GCC_USB3_PRIM_CLKREF_CLK] = &gcc_usb3_prim_clkref_clk.clkr,
2461         [GCC_USB3_PRIM_PHY_AUX_CLK] = &gcc_usb3_prim_phy_aux_clk.clkr,
2462         [GCC_USB3_PRIM_PHY_AUX_CLK_SRC] = &gcc_usb3_prim_phy_aux_clk_src.clkr,
2463         [GCC_USB3_PRIM_PHY_COM_AUX_CLK] = &gcc_usb3_prim_phy_com_aux_clk.clkr,
2464         [GCC_USB3_PRIM_PHY_PIPE_CLK] = &gcc_usb3_prim_phy_pipe_clk.clkr,
2465         [GCC_VIDEO_AHB_CLK] = &gcc_video_ahb_clk.clkr,
2466         [GCC_VIDEO_AXI_CLK] = &gcc_video_axi_clk.clkr,
2467         [GCC_VIDEO_THROTTLE_AXI_CLK] = &gcc_video_throttle_axi_clk.clkr,
2468         [GCC_VIDEO_XO_CLK] = &gcc_video_xo_clk.clkr,
2469         [GPLL0] = &gpll0.clkr,
2470         [GPLL0_OUT_EVEN] = &gpll0_out_even.clkr,
2471         [GPLL0_OUT_ODD] = &gpll0_out_odd.clkr,
2472         [GPLL6] = &gpll6.clkr,
2473         [GPLL6_OUT_EVEN] = &gpll6_out_even.clkr,
2474         [GPLL7] = &gpll7.clkr,
2475         [GCC_UFS_PHY_PHY_AUX_HW_CTL_CLK] = &gcc_ufs_phy_phy_aux_hw_ctl_clk.clkr,
2476         [GCC_UFS_PHY_AXI_HW_CTL_CLK] = &gcc_ufs_phy_axi_hw_ctl_clk.clkr,
2477         [GCC_AGGRE_UFS_PHY_AXI_HW_CTL_CLK] =
2478                                 &gcc_aggre_ufs_phy_axi_hw_ctl_clk.clkr,
2479         [GCC_UFS_PHY_UNIPRO_CORE_HW_CTL_CLK] =
2480                                 &gcc_ufs_phy_unipro_core_hw_ctl_clk.clkr,
2481         [GCC_UFS_PHY_ICE_CORE_HW_CTL_CLK] =
2482                                 &gcc_ufs_phy_ice_core_hw_ctl_clk.clkr,
2483         [GCC_GPU_GPLL0_MAIN_DIV_CLK_SRC] = &gcc_gpu_gpll0_main_div_clk_src.clkr,
2484         [GCC_NPU_PLL0_MAIN_DIV_CLK_SRC] = &gcc_npu_pll0_main_div_clk_src.clkr,
2485 };
2486
2487 static struct gdsc *gcc_sm6350_gdscs[] = {
2488         [USB30_PRIM_GDSC] = &usb30_prim_gdsc,
2489         [UFS_PHY_GDSC] = &ufs_phy_gdsc,
2490         [HLOS1_VOTE_MMNOC_MMU_TBU_HF0_GDSC] = &hlos1_vote_mmnoc_mmu_tbu_hf0_gdsc,
2491         [HLOS1_VOTE_MMNOC_MMU_TBU_HF1_GDSC] = &hlos1_vote_mmnoc_mmu_tbu_hf1_gdsc,
2492 };
2493
2494 static const struct qcom_reset_map gcc_sm6350_resets[] = {
2495         [GCC_QUSB2PHY_PRIM_BCR] = { 0x1d000 },
2496         [GCC_QUSB2PHY_SEC_BCR] = { 0x1e000 },
2497         [GCC_SDCC1_BCR] = { 0x4b000 },
2498         [GCC_SDCC2_BCR] = { 0x20000 },
2499         [GCC_UFS_PHY_BCR] = { 0x3a000 },
2500         [GCC_USB30_PRIM_BCR] = { 0x1a000 },
2501         [GCC_USB3_PHY_PRIM_BCR] = { 0x1c000 },
2502         [GCC_USB3_DP_PHY_PRIM_BCR] = { 0x1c008 },
2503 };
2504
2505 static const struct clk_rcg_dfs_data gcc_dfs_clocks[] = {
2506         DEFINE_RCG_DFS(gcc_qupv3_wrap0_s0_clk_src),
2507         DEFINE_RCG_DFS(gcc_qupv3_wrap0_s1_clk_src),
2508         DEFINE_RCG_DFS(gcc_qupv3_wrap0_s2_clk_src),
2509         DEFINE_RCG_DFS(gcc_qupv3_wrap0_s3_clk_src),
2510         DEFINE_RCG_DFS(gcc_qupv3_wrap0_s4_clk_src),
2511         DEFINE_RCG_DFS(gcc_qupv3_wrap0_s5_clk_src),
2512         DEFINE_RCG_DFS(gcc_qupv3_wrap1_s0_clk_src),
2513         DEFINE_RCG_DFS(gcc_qupv3_wrap1_s1_clk_src),
2514         DEFINE_RCG_DFS(gcc_qupv3_wrap1_s2_clk_src),
2515         DEFINE_RCG_DFS(gcc_qupv3_wrap1_s3_clk_src),
2516         DEFINE_RCG_DFS(gcc_qupv3_wrap1_s4_clk_src),
2517         DEFINE_RCG_DFS(gcc_qupv3_wrap1_s5_clk_src),
2518 };
2519
2520 static const struct regmap_config gcc_sm6350_regmap_config = {
2521         .reg_bits = 32,
2522         .reg_stride = 4,
2523         .val_bits = 32,
2524         .max_register = 0xbf030,
2525         .fast_io = true,
2526 };
2527
2528 static const struct qcom_cc_desc gcc_sm6350_desc = {
2529         .config = &gcc_sm6350_regmap_config,
2530         .clks = gcc_sm6350_clocks,
2531         .num_clks = ARRAY_SIZE(gcc_sm6350_clocks),
2532         .resets = gcc_sm6350_resets,
2533         .num_resets = ARRAY_SIZE(gcc_sm6350_resets),
2534         .gdscs = gcc_sm6350_gdscs,
2535         .num_gdscs = ARRAY_SIZE(gcc_sm6350_gdscs),
2536 };
2537
2538 static const struct of_device_id gcc_sm6350_match_table[] = {
2539         { .compatible = "qcom,gcc-sm6350" },
2540         { }
2541 };
2542 MODULE_DEVICE_TABLE(of, gcc_sm6350_match_table);
2543
2544 static int gcc_sm6350_probe(struct platform_device *pdev)
2545 {
2546         struct regmap *regmap;
2547         int ret;
2548
2549         regmap = qcom_cc_map(pdev, &gcc_sm6350_desc);
2550         if (IS_ERR(regmap))
2551                 return PTR_ERR(regmap);
2552
2553         /* Disable the GPLL0 active input to NPU and GPU via MISC registers */
2554         regmap_update_bits(regmap, 0x4cf00, 0x3, 0x3);
2555         regmap_update_bits(regmap, 0x45f00, 0x3, 0x3);
2556
2557         ret = qcom_cc_register_rcg_dfs(regmap, gcc_dfs_clocks,
2558                         ARRAY_SIZE(gcc_dfs_clocks));
2559         if (ret)
2560                 return ret;
2561
2562         return qcom_cc_really_probe(pdev, &gcc_sm6350_desc, regmap);
2563 }
2564
2565 static struct platform_driver gcc_sm6350_driver = {
2566         .probe = gcc_sm6350_probe,
2567         .driver = {
2568                 .name = "gcc-sm6350",
2569                 .of_match_table = gcc_sm6350_match_table,
2570         },
2571 };
2572
2573 static int __init gcc_sm6350_init(void)
2574 {
2575         return platform_driver_register(&gcc_sm6350_driver);
2576 }
2577 core_initcall(gcc_sm6350_init);
2578
2579 static void __exit gcc_sm6350_exit(void)
2580 {
2581         platform_driver_unregister(&gcc_sm6350_driver);
2582 }
2583 module_exit(gcc_sm6350_exit);
2584
2585 MODULE_DESCRIPTION("QTI GCC SM6350 Driver");
2586 MODULE_LICENSE("GPL v2");