GNU Linux-libre 4.19.245-gnu1
[releases.git] / drivers / clk / qcom / gcc-sdm845.c
1 // SPDX-License-Identifier: GPL-2.0
2 /*
3  * Copyright (c) 2018, The Linux Foundation. All rights reserved.
4  */
5
6 #include <linux/kernel.h>
7 #include <linux/bitops.h>
8 #include <linux/err.h>
9 #include <linux/platform_device.h>
10 #include <linux/module.h>
11 #include <linux/of.h>
12 #include <linux/of_device.h>
13 #include <linux/clk-provider.h>
14 #include <linux/regmap.h>
15 #include <linux/reset-controller.h>
16
17 #include <dt-bindings/clock/qcom,gcc-sdm845.h>
18
19 #include "common.h"
20 #include "clk-regmap.h"
21 #include "clk-pll.h"
22 #include "clk-rcg.h"
23 #include "clk-branch.h"
24 #include "clk-alpha-pll.h"
25 #include "gdsc.h"
26 #include "reset.h"
27
28 enum {
29         P_BI_TCXO,
30         P_AUD_REF_CLK,
31         P_CORE_BI_PLL_TEST_SE,
32         P_GPLL0_OUT_EVEN,
33         P_GPLL0_OUT_MAIN,
34         P_GPLL4_OUT_MAIN,
35         P_SLEEP_CLK,
36 };
37
38 static const struct parent_map gcc_parent_map_0[] = {
39         { P_BI_TCXO, 0 },
40         { P_GPLL0_OUT_MAIN, 1 },
41         { P_GPLL0_OUT_EVEN, 6 },
42         { P_CORE_BI_PLL_TEST_SE, 7 },
43 };
44
45 static const char * const gcc_parent_names_0[] = {
46         "bi_tcxo",
47         "gpll0",
48         "gpll0_out_even",
49         "core_bi_pll_test_se",
50 };
51
52 static const struct parent_map gcc_parent_map_1[] = {
53         { P_BI_TCXO, 0 },
54         { P_GPLL0_OUT_MAIN, 1 },
55         { P_SLEEP_CLK, 5 },
56         { P_GPLL0_OUT_EVEN, 6 },
57         { P_CORE_BI_PLL_TEST_SE, 7 },
58 };
59
60 static const char * const gcc_parent_names_1[] = {
61         "bi_tcxo",
62         "gpll0",
63         "core_pi_sleep_clk",
64         "gpll0_out_even",
65         "core_bi_pll_test_se",
66 };
67
68 static const struct parent_map gcc_parent_map_2[] = {
69         { P_BI_TCXO, 0 },
70         { P_SLEEP_CLK, 5 },
71         { P_CORE_BI_PLL_TEST_SE, 7 },
72 };
73
74 static const char * const gcc_parent_names_2[] = {
75         "bi_tcxo",
76         "core_pi_sleep_clk",
77         "core_bi_pll_test_se",
78 };
79
80 static const struct parent_map gcc_parent_map_3[] = {
81         { P_BI_TCXO, 0 },
82         { P_GPLL0_OUT_MAIN, 1 },
83         { P_CORE_BI_PLL_TEST_SE, 7 },
84 };
85
86 static const char * const gcc_parent_names_3[] = {
87         "bi_tcxo",
88         "gpll0",
89         "core_bi_pll_test_se",
90 };
91
92 static const struct parent_map gcc_parent_map_4[] = {
93         { P_BI_TCXO, 0 },
94         { P_CORE_BI_PLL_TEST_SE, 7 },
95 };
96
97 static const char * const gcc_parent_names_4[] = {
98         "bi_tcxo",
99         "core_bi_pll_test_se",
100 };
101
102 static const struct parent_map gcc_parent_map_5[] = {
103         { P_BI_TCXO, 0 },
104         { P_GPLL0_OUT_MAIN, 1 },
105         { P_GPLL4_OUT_MAIN, 5 },
106         { P_GPLL0_OUT_EVEN, 6 },
107         { P_CORE_BI_PLL_TEST_SE, 7 },
108 };
109
110 static const char * const gcc_parent_names_5[] = {
111         "bi_tcxo",
112         "gpll0",
113         "gpll4",
114         "gpll0_out_even",
115         "core_bi_pll_test_se",
116 };
117
118 static const struct parent_map gcc_parent_map_6[] = {
119         { P_BI_TCXO, 0 },
120         { P_GPLL0_OUT_MAIN, 1 },
121         { P_AUD_REF_CLK, 2 },
122         { P_GPLL0_OUT_EVEN, 6 },
123         { P_CORE_BI_PLL_TEST_SE, 7 },
124 };
125
126 static const char * const gcc_parent_names_6[] = {
127         "bi_tcxo",
128         "gpll0",
129         "aud_ref_clk",
130         "gpll0_out_even",
131         "core_bi_pll_test_se",
132 };
133
134 static const char * const gcc_parent_names_7_ao[] = {
135         "bi_tcxo_ao",
136         "gpll0",
137         "gpll0_out_even",
138         "core_bi_pll_test_se",
139 };
140
141 static const char * const gcc_parent_names_8[] = {
142         "bi_tcxo",
143         "gpll0",
144         "core_bi_pll_test_se",
145 };
146
147 static const char * const gcc_parent_names_8_ao[] = {
148         "bi_tcxo_ao",
149         "gpll0",
150         "core_bi_pll_test_se",
151 };
152
153 static const struct parent_map gcc_parent_map_10[] = {
154         { P_BI_TCXO, 0 },
155         { P_GPLL0_OUT_MAIN, 1 },
156         { P_GPLL4_OUT_MAIN, 5 },
157         { P_GPLL0_OUT_EVEN, 6 },
158         { P_CORE_BI_PLL_TEST_SE, 7 },
159 };
160
161 static const char * const gcc_parent_names_10[] = {
162         "bi_tcxo",
163         "gpll0",
164         "gpll4",
165         "gpll0_out_even",
166         "core_bi_pll_test_se",
167 };
168
169 static struct clk_alpha_pll gpll0 = {
170         .offset = 0x0,
171         .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
172         .clkr = {
173                 .enable_reg = 0x52000,
174                 .enable_mask = BIT(0),
175                 .hw.init = &(struct clk_init_data){
176                         .name = "gpll0",
177                         .parent_names = (const char *[]){ "bi_tcxo" },
178                         .num_parents = 1,
179                         .ops = &clk_alpha_pll_fixed_fabia_ops,
180                 },
181         },
182 };
183
184 static struct clk_alpha_pll gpll4 = {
185         .offset = 0x76000,
186         .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
187         .clkr = {
188                 .enable_reg = 0x52000,
189                 .enable_mask = BIT(4),
190                 .hw.init = &(struct clk_init_data){
191                         .name = "gpll4",
192                         .parent_names = (const char *[]){ "bi_tcxo" },
193                         .num_parents = 1,
194                         .ops = &clk_alpha_pll_fixed_fabia_ops,
195                 },
196         },
197 };
198
199 static const struct clk_div_table post_div_table_fabia_even[] = {
200         { 0x0, 1 },
201         { 0x1, 2 },
202         { 0x3, 4 },
203         { 0x7, 8 },
204         { }
205 };
206
207 static struct clk_alpha_pll_postdiv gpll0_out_even = {
208         .offset = 0x0,
209         .post_div_shift = 8,
210         .post_div_table = post_div_table_fabia_even,
211         .num_post_div = ARRAY_SIZE(post_div_table_fabia_even),
212         .width = 4,
213         .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
214         .clkr.hw.init = &(struct clk_init_data){
215                 .name = "gpll0_out_even",
216                 .parent_names = (const char *[]){ "gpll0" },
217                 .num_parents = 1,
218                 .ops = &clk_alpha_pll_postdiv_fabia_ops,
219         },
220 };
221
222 static const struct freq_tbl ftbl_gcc_cpuss_ahb_clk_src[] = {
223         F(19200000, P_BI_TCXO, 1, 0, 0),
224         { }
225 };
226
227 static struct clk_rcg2 gcc_cpuss_ahb_clk_src = {
228         .cmd_rcgr = 0x48014,
229         .mnd_width = 0,
230         .hid_width = 5,
231         .parent_map = gcc_parent_map_0,
232         .freq_tbl = ftbl_gcc_cpuss_ahb_clk_src,
233         .clkr.hw.init = &(struct clk_init_data){
234                 .name = "gcc_cpuss_ahb_clk_src",
235                 .parent_names = gcc_parent_names_7_ao,
236                 .num_parents = 4,
237                 .ops = &clk_rcg2_ops,
238         },
239 };
240
241 static const struct freq_tbl ftbl_gcc_cpuss_rbcpr_clk_src[] = {
242         F(19200000, P_BI_TCXO, 1, 0, 0),
243         { }
244 };
245
246 static struct clk_rcg2 gcc_cpuss_rbcpr_clk_src = {
247         .cmd_rcgr = 0x4815c,
248         .mnd_width = 0,
249         .hid_width = 5,
250         .parent_map = gcc_parent_map_3,
251         .freq_tbl = ftbl_gcc_cpuss_rbcpr_clk_src,
252         .clkr.hw.init = &(struct clk_init_data){
253                 .name = "gcc_cpuss_rbcpr_clk_src",
254                 .parent_names = gcc_parent_names_8_ao,
255                 .num_parents = 3,
256                 .ops = &clk_rcg2_ops,
257         },
258 };
259
260 static const struct freq_tbl ftbl_gcc_gp1_clk_src[] = {
261         F(19200000, P_BI_TCXO, 1, 0, 0),
262         F(25000000, P_GPLL0_OUT_EVEN, 12, 0, 0),
263         F(50000000, P_GPLL0_OUT_EVEN, 6, 0, 0),
264         F(100000000, P_GPLL0_OUT_MAIN, 6, 0, 0),
265         F(200000000, P_GPLL0_OUT_MAIN, 3, 0, 0),
266         { }
267 };
268
269 static struct clk_rcg2 gcc_gp1_clk_src = {
270         .cmd_rcgr = 0x64004,
271         .mnd_width = 8,
272         .hid_width = 5,
273         .parent_map = gcc_parent_map_1,
274         .freq_tbl = ftbl_gcc_gp1_clk_src,
275         .clkr.hw.init = &(struct clk_init_data){
276                 .name = "gcc_gp1_clk_src",
277                 .parent_names = gcc_parent_names_1,
278                 .num_parents = 5,
279                 .ops = &clk_rcg2_ops,
280         },
281 };
282
283 static struct clk_rcg2 gcc_gp2_clk_src = {
284         .cmd_rcgr = 0x65004,
285         .mnd_width = 8,
286         .hid_width = 5,
287         .parent_map = gcc_parent_map_1,
288         .freq_tbl = ftbl_gcc_gp1_clk_src,
289         .clkr.hw.init = &(struct clk_init_data){
290                 .name = "gcc_gp2_clk_src",
291                 .parent_names = gcc_parent_names_1,
292                 .num_parents = 5,
293                 .ops = &clk_rcg2_ops,
294         },
295 };
296
297 static struct clk_rcg2 gcc_gp3_clk_src = {
298         .cmd_rcgr = 0x66004,
299         .mnd_width = 8,
300         .hid_width = 5,
301         .parent_map = gcc_parent_map_1,
302         .freq_tbl = ftbl_gcc_gp1_clk_src,
303         .clkr.hw.init = &(struct clk_init_data){
304                 .name = "gcc_gp3_clk_src",
305                 .parent_names = gcc_parent_names_1,
306                 .num_parents = 5,
307                 .ops = &clk_rcg2_ops,
308         },
309 };
310
311 static const struct freq_tbl ftbl_gcc_pcie_0_aux_clk_src[] = {
312         F(9600000, P_BI_TCXO, 2, 0, 0),
313         F(19200000, P_BI_TCXO, 1, 0, 0),
314         { }
315 };
316
317 static struct clk_rcg2 gcc_pcie_0_aux_clk_src = {
318         .cmd_rcgr = 0x6b028,
319         .mnd_width = 16,
320         .hid_width = 5,
321         .parent_map = gcc_parent_map_2,
322         .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
323         .clkr.hw.init = &(struct clk_init_data){
324                 .name = "gcc_pcie_0_aux_clk_src",
325                 .parent_names = gcc_parent_names_2,
326                 .num_parents = 3,
327                 .ops = &clk_rcg2_ops,
328         },
329 };
330
331 static struct clk_rcg2 gcc_pcie_1_aux_clk_src = {
332         .cmd_rcgr = 0x8d028,
333         .mnd_width = 16,
334         .hid_width = 5,
335         .parent_map = gcc_parent_map_2,
336         .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
337         .clkr.hw.init = &(struct clk_init_data){
338                 .name = "gcc_pcie_1_aux_clk_src",
339                 .parent_names = gcc_parent_names_2,
340                 .num_parents = 3,
341                 .ops = &clk_rcg2_ops,
342         },
343 };
344
345 static const struct freq_tbl ftbl_gcc_pcie_phy_refgen_clk_src[] = {
346         F(19200000, P_BI_TCXO, 1, 0, 0),
347         F(100000000, P_GPLL0_OUT_MAIN, 6, 0, 0),
348         { }
349 };
350
351 static struct clk_rcg2 gcc_pcie_phy_refgen_clk_src = {
352         .cmd_rcgr = 0x6f014,
353         .mnd_width = 0,
354         .hid_width = 5,
355         .parent_map = gcc_parent_map_0,
356         .freq_tbl = ftbl_gcc_pcie_phy_refgen_clk_src,
357         .clkr.hw.init = &(struct clk_init_data){
358                 .name = "gcc_pcie_phy_refgen_clk_src",
359                 .parent_names = gcc_parent_names_0,
360                 .num_parents = 4,
361                 .ops = &clk_rcg2_ops,
362         },
363 };
364
365 static const struct freq_tbl ftbl_gcc_pdm2_clk_src[] = {
366         F(9600000, P_BI_TCXO, 2, 0, 0),
367         F(19200000, P_BI_TCXO, 1, 0, 0),
368         F(60000000, P_GPLL0_OUT_MAIN, 10, 0, 0),
369         { }
370 };
371
372 static struct clk_rcg2 gcc_pdm2_clk_src = {
373         .cmd_rcgr = 0x33010,
374         .mnd_width = 0,
375         .hid_width = 5,
376         .parent_map = gcc_parent_map_0,
377         .freq_tbl = ftbl_gcc_pdm2_clk_src,
378         .clkr.hw.init = &(struct clk_init_data){
379                 .name = "gcc_pdm2_clk_src",
380                 .parent_names = gcc_parent_names_0,
381                 .num_parents = 4,
382                 .ops = &clk_rcg2_ops,
383         },
384 };
385
386 static const struct freq_tbl ftbl_gcc_qupv3_wrap0_s0_clk_src[] = {
387         F(7372800, P_GPLL0_OUT_EVEN, 1, 384, 15625),
388         F(14745600, P_GPLL0_OUT_EVEN, 1, 768, 15625),
389         F(19200000, P_BI_TCXO, 1, 0, 0),
390         F(29491200, P_GPLL0_OUT_EVEN, 1, 1536, 15625),
391         F(32000000, P_GPLL0_OUT_EVEN, 1, 8, 75),
392         F(48000000, P_GPLL0_OUT_EVEN, 1, 4, 25),
393         F(64000000, P_GPLL0_OUT_EVEN, 1, 16, 75),
394         F(80000000, P_GPLL0_OUT_EVEN, 1, 4, 15),
395         F(96000000, P_GPLL0_OUT_EVEN, 1, 8, 25),
396         F(100000000, P_GPLL0_OUT_EVEN, 3, 0, 0),
397         F(102400000, P_GPLL0_OUT_EVEN, 1, 128, 375),
398         F(112000000, P_GPLL0_OUT_EVEN, 1, 28, 75),
399         F(117964800, P_GPLL0_OUT_EVEN, 1, 6144, 15625),
400         F(120000000, P_GPLL0_OUT_EVEN, 2.5, 0, 0),
401         F(128000000, P_GPLL0_OUT_MAIN, 1, 16, 75),
402         { }
403 };
404
405 static struct clk_rcg2 gcc_qupv3_wrap0_s0_clk_src = {
406         .cmd_rcgr = 0x17034,
407         .mnd_width = 16,
408         .hid_width = 5,
409         .parent_map = gcc_parent_map_0,
410         .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
411         .clkr.hw.init = &(struct clk_init_data){
412                 .name = "gcc_qupv3_wrap0_s0_clk_src",
413                 .parent_names = gcc_parent_names_0,
414                 .num_parents = 4,
415                 .ops = &clk_rcg2_shared_ops,
416         },
417 };
418
419 static struct clk_rcg2 gcc_qupv3_wrap0_s1_clk_src = {
420         .cmd_rcgr = 0x17164,
421         .mnd_width = 16,
422         .hid_width = 5,
423         .parent_map = gcc_parent_map_0,
424         .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
425         .clkr.hw.init = &(struct clk_init_data){
426                 .name = "gcc_qupv3_wrap0_s1_clk_src",
427                 .parent_names = gcc_parent_names_0,
428                 .num_parents = 4,
429                 .ops = &clk_rcg2_shared_ops,
430         },
431 };
432
433 static struct clk_rcg2 gcc_qupv3_wrap0_s2_clk_src = {
434         .cmd_rcgr = 0x17294,
435         .mnd_width = 16,
436         .hid_width = 5,
437         .parent_map = gcc_parent_map_0,
438         .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
439         .clkr.hw.init = &(struct clk_init_data){
440                 .name = "gcc_qupv3_wrap0_s2_clk_src",
441                 .parent_names = gcc_parent_names_0,
442                 .num_parents = 4,
443                 .ops = &clk_rcg2_shared_ops,
444         },
445 };
446
447 static struct clk_rcg2 gcc_qupv3_wrap0_s3_clk_src = {
448         .cmd_rcgr = 0x173c4,
449         .mnd_width = 16,
450         .hid_width = 5,
451         .parent_map = gcc_parent_map_0,
452         .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
453         .clkr.hw.init = &(struct clk_init_data){
454                 .name = "gcc_qupv3_wrap0_s3_clk_src",
455                 .parent_names = gcc_parent_names_0,
456                 .num_parents = 4,
457                 .ops = &clk_rcg2_shared_ops,
458         },
459 };
460
461 static struct clk_rcg2 gcc_qupv3_wrap0_s4_clk_src = {
462         .cmd_rcgr = 0x174f4,
463         .mnd_width = 16,
464         .hid_width = 5,
465         .parent_map = gcc_parent_map_0,
466         .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
467         .clkr.hw.init = &(struct clk_init_data){
468                 .name = "gcc_qupv3_wrap0_s4_clk_src",
469                 .parent_names = gcc_parent_names_0,
470                 .num_parents = 4,
471                 .ops = &clk_rcg2_shared_ops,
472         },
473 };
474
475 static struct clk_rcg2 gcc_qupv3_wrap0_s5_clk_src = {
476         .cmd_rcgr = 0x17624,
477         .mnd_width = 16,
478         .hid_width = 5,
479         .parent_map = gcc_parent_map_0,
480         .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
481         .clkr.hw.init = &(struct clk_init_data){
482                 .name = "gcc_qupv3_wrap0_s5_clk_src",
483                 .parent_names = gcc_parent_names_0,
484                 .num_parents = 4,
485                 .ops = &clk_rcg2_shared_ops,
486         },
487 };
488
489 static struct clk_rcg2 gcc_qupv3_wrap0_s6_clk_src = {
490         .cmd_rcgr = 0x17754,
491         .mnd_width = 16,
492         .hid_width = 5,
493         .parent_map = gcc_parent_map_0,
494         .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
495         .clkr.hw.init = &(struct clk_init_data){
496                 .name = "gcc_qupv3_wrap0_s6_clk_src",
497                 .parent_names = gcc_parent_names_0,
498                 .num_parents = 4,
499                 .ops = &clk_rcg2_shared_ops,
500         },
501 };
502
503 static struct clk_rcg2 gcc_qupv3_wrap0_s7_clk_src = {
504         .cmd_rcgr = 0x17884,
505         .mnd_width = 16,
506         .hid_width = 5,
507         .parent_map = gcc_parent_map_0,
508         .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
509         .clkr.hw.init = &(struct clk_init_data){
510                 .name = "gcc_qupv3_wrap0_s7_clk_src",
511                 .parent_names = gcc_parent_names_0,
512                 .num_parents = 4,
513                 .ops = &clk_rcg2_shared_ops,
514         },
515 };
516
517 static struct clk_rcg2 gcc_qupv3_wrap1_s0_clk_src = {
518         .cmd_rcgr = 0x18018,
519         .mnd_width = 16,
520         .hid_width = 5,
521         .parent_map = gcc_parent_map_0,
522         .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
523         .clkr.hw.init = &(struct clk_init_data){
524                 .name = "gcc_qupv3_wrap1_s0_clk_src",
525                 .parent_names = gcc_parent_names_0,
526                 .num_parents = 4,
527                 .ops = &clk_rcg2_shared_ops,
528         },
529 };
530
531 static struct clk_rcg2 gcc_qupv3_wrap1_s1_clk_src = {
532         .cmd_rcgr = 0x18148,
533         .mnd_width = 16,
534         .hid_width = 5,
535         .parent_map = gcc_parent_map_0,
536         .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
537         .clkr.hw.init = &(struct clk_init_data){
538                 .name = "gcc_qupv3_wrap1_s1_clk_src",
539                 .parent_names = gcc_parent_names_0,
540                 .num_parents = 4,
541                 .ops = &clk_rcg2_shared_ops,
542         },
543 };
544
545 static struct clk_rcg2 gcc_qupv3_wrap1_s2_clk_src = {
546         .cmd_rcgr = 0x18278,
547         .mnd_width = 16,
548         .hid_width = 5,
549         .parent_map = gcc_parent_map_0,
550         .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
551         .clkr.hw.init = &(struct clk_init_data){
552                 .name = "gcc_qupv3_wrap1_s2_clk_src",
553                 .parent_names = gcc_parent_names_0,
554                 .num_parents = 4,
555                 .ops = &clk_rcg2_shared_ops,
556         },
557 };
558
559 static struct clk_rcg2 gcc_qupv3_wrap1_s3_clk_src = {
560         .cmd_rcgr = 0x183a8,
561         .mnd_width = 16,
562         .hid_width = 5,
563         .parent_map = gcc_parent_map_0,
564         .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
565         .clkr.hw.init = &(struct clk_init_data){
566                 .name = "gcc_qupv3_wrap1_s3_clk_src",
567                 .parent_names = gcc_parent_names_0,
568                 .num_parents = 4,
569                 .ops = &clk_rcg2_shared_ops,
570         },
571 };
572
573 static struct clk_rcg2 gcc_qupv3_wrap1_s4_clk_src = {
574         .cmd_rcgr = 0x184d8,
575         .mnd_width = 16,
576         .hid_width = 5,
577         .parent_map = gcc_parent_map_0,
578         .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
579         .clkr.hw.init = &(struct clk_init_data){
580                 .name = "gcc_qupv3_wrap1_s4_clk_src",
581                 .parent_names = gcc_parent_names_0,
582                 .num_parents = 4,
583                 .ops = &clk_rcg2_shared_ops,
584         },
585 };
586
587 static struct clk_rcg2 gcc_qupv3_wrap1_s5_clk_src = {
588         .cmd_rcgr = 0x18608,
589         .mnd_width = 16,
590         .hid_width = 5,
591         .parent_map = gcc_parent_map_0,
592         .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
593         .clkr.hw.init = &(struct clk_init_data){
594                 .name = "gcc_qupv3_wrap1_s5_clk_src",
595                 .parent_names = gcc_parent_names_0,
596                 .num_parents = 4,
597                 .ops = &clk_rcg2_shared_ops,
598         },
599 };
600
601 static struct clk_rcg2 gcc_qupv3_wrap1_s6_clk_src = {
602         .cmd_rcgr = 0x18738,
603         .mnd_width = 16,
604         .hid_width = 5,
605         .parent_map = gcc_parent_map_0,
606         .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
607         .clkr.hw.init = &(struct clk_init_data){
608                 .name = "gcc_qupv3_wrap1_s6_clk_src",
609                 .parent_names = gcc_parent_names_0,
610                 .num_parents = 4,
611                 .ops = &clk_rcg2_shared_ops,
612         },
613 };
614
615 static struct clk_rcg2 gcc_qupv3_wrap1_s7_clk_src = {
616         .cmd_rcgr = 0x18868,
617         .mnd_width = 16,
618         .hid_width = 5,
619         .parent_map = gcc_parent_map_0,
620         .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
621         .clkr.hw.init = &(struct clk_init_data){
622                 .name = "gcc_qupv3_wrap1_s7_clk_src",
623                 .parent_names = gcc_parent_names_0,
624                 .num_parents = 4,
625                 .ops = &clk_rcg2_shared_ops,
626         },
627 };
628
629 static const struct freq_tbl ftbl_gcc_sdcc2_apps_clk_src[] = {
630         F(400000, P_BI_TCXO, 12, 1, 4),
631         F(9600000, P_BI_TCXO, 2, 0, 0),
632         F(19200000, P_BI_TCXO, 1, 0, 0),
633         F(25000000, P_GPLL0_OUT_EVEN, 12, 0, 0),
634         F(50000000, P_GPLL0_OUT_EVEN, 6, 0, 0),
635         F(100000000, P_GPLL0_OUT_MAIN, 6, 0, 0),
636         F(201500000, P_GPLL4_OUT_MAIN, 4, 0, 0),
637         { }
638 };
639
640 static struct clk_rcg2 gcc_sdcc2_apps_clk_src = {
641         .cmd_rcgr = 0x1400c,
642         .mnd_width = 8,
643         .hid_width = 5,
644         .parent_map = gcc_parent_map_10,
645         .freq_tbl = ftbl_gcc_sdcc2_apps_clk_src,
646         .clkr.hw.init = &(struct clk_init_data){
647                 .name = "gcc_sdcc2_apps_clk_src",
648                 .parent_names = gcc_parent_names_10,
649                 .num_parents = 5,
650                 .ops = &clk_rcg2_floor_ops,
651         },
652 };
653
654 static const struct freq_tbl ftbl_gcc_sdcc4_apps_clk_src[] = {
655         F(400000, P_BI_TCXO, 12, 1, 4),
656         F(9600000, P_BI_TCXO, 2, 0, 0),
657         F(19200000, P_BI_TCXO, 1, 0, 0),
658         F(25000000, P_GPLL0_OUT_MAIN, 12, 1, 2),
659         F(50000000, P_GPLL0_OUT_MAIN, 12, 0, 0),
660         F(100000000, P_GPLL0_OUT_MAIN, 6, 0, 0),
661         { }
662 };
663
664 static struct clk_rcg2 gcc_sdcc4_apps_clk_src = {
665         .cmd_rcgr = 0x1600c,
666         .mnd_width = 8,
667         .hid_width = 5,
668         .parent_map = gcc_parent_map_0,
669         .freq_tbl = ftbl_gcc_sdcc4_apps_clk_src,
670         .clkr.hw.init = &(struct clk_init_data){
671                 .name = "gcc_sdcc4_apps_clk_src",
672                 .parent_names = gcc_parent_names_0,
673                 .num_parents = 4,
674                 .ops = &clk_rcg2_floor_ops,
675         },
676 };
677
678 static const struct freq_tbl ftbl_gcc_tsif_ref_clk_src[] = {
679         F(105495, P_BI_TCXO, 2, 1, 91),
680         { }
681 };
682
683 static struct clk_rcg2 gcc_tsif_ref_clk_src = {
684         .cmd_rcgr = 0x36010,
685         .mnd_width = 8,
686         .hid_width = 5,
687         .parent_map = gcc_parent_map_6,
688         .freq_tbl = ftbl_gcc_tsif_ref_clk_src,
689         .clkr.hw.init = &(struct clk_init_data){
690                 .name = "gcc_tsif_ref_clk_src",
691                 .parent_names = gcc_parent_names_6,
692                 .num_parents = 5,
693                 .ops = &clk_rcg2_ops,
694         },
695 };
696
697 static const struct freq_tbl ftbl_gcc_ufs_card_axi_clk_src[] = {
698         F(25000000, P_GPLL0_OUT_EVEN, 12, 0, 0),
699         F(50000000, P_GPLL0_OUT_EVEN, 6, 0, 0),
700         F(100000000, P_GPLL0_OUT_MAIN, 6, 0, 0),
701         F(200000000, P_GPLL0_OUT_MAIN, 3, 0, 0),
702         F(240000000, P_GPLL0_OUT_MAIN, 2.5, 0, 0),
703         { }
704 };
705
706 static struct clk_rcg2 gcc_ufs_card_axi_clk_src = {
707         .cmd_rcgr = 0x7501c,
708         .mnd_width = 8,
709         .hid_width = 5,
710         .parent_map = gcc_parent_map_0,
711         .freq_tbl = ftbl_gcc_ufs_card_axi_clk_src,
712         .clkr.hw.init = &(struct clk_init_data){
713                 .name = "gcc_ufs_card_axi_clk_src",
714                 .parent_names = gcc_parent_names_0,
715                 .num_parents = 4,
716                 .ops = &clk_rcg2_shared_ops,
717         },
718 };
719
720 static const struct freq_tbl ftbl_gcc_ufs_card_ice_core_clk_src[] = {
721         F(37500000, P_GPLL0_OUT_EVEN, 8, 0, 0),
722         F(75000000, P_GPLL0_OUT_EVEN, 4, 0, 0),
723         F(150000000, P_GPLL0_OUT_MAIN, 4, 0, 0),
724         F(300000000, P_GPLL0_OUT_MAIN, 2, 0, 0),
725         { }
726 };
727
728 static struct clk_rcg2 gcc_ufs_card_ice_core_clk_src = {
729         .cmd_rcgr = 0x7505c,
730         .mnd_width = 0,
731         .hid_width = 5,
732         .parent_map = gcc_parent_map_0,
733         .freq_tbl = ftbl_gcc_ufs_card_ice_core_clk_src,
734         .clkr.hw.init = &(struct clk_init_data){
735                 .name = "gcc_ufs_card_ice_core_clk_src",
736                 .parent_names = gcc_parent_names_0,
737                 .num_parents = 4,
738                 .ops = &clk_rcg2_shared_ops,
739         },
740 };
741
742 static struct clk_rcg2 gcc_ufs_card_phy_aux_clk_src = {
743         .cmd_rcgr = 0x75090,
744         .mnd_width = 0,
745         .hid_width = 5,
746         .parent_map = gcc_parent_map_4,
747         .freq_tbl = ftbl_gcc_cpuss_rbcpr_clk_src,
748         .clkr.hw.init = &(struct clk_init_data){
749                 .name = "gcc_ufs_card_phy_aux_clk_src",
750                 .parent_names = gcc_parent_names_4,
751                 .num_parents = 2,
752                 .ops = &clk_rcg2_ops,
753         },
754 };
755
756 static const struct freq_tbl ftbl_gcc_ufs_card_unipro_core_clk_src[] = {
757         F(37500000, P_GPLL0_OUT_EVEN, 8, 0, 0),
758         F(75000000, P_GPLL0_OUT_MAIN, 8, 0, 0),
759         F(150000000, P_GPLL0_OUT_MAIN, 4, 0, 0),
760         { }
761 };
762
763 static struct clk_rcg2 gcc_ufs_card_unipro_core_clk_src = {
764         .cmd_rcgr = 0x75074,
765         .mnd_width = 0,
766         .hid_width = 5,
767         .parent_map = gcc_parent_map_0,
768         .freq_tbl = ftbl_gcc_ufs_card_unipro_core_clk_src,
769         .clkr.hw.init = &(struct clk_init_data){
770                 .name = "gcc_ufs_card_unipro_core_clk_src",
771                 .parent_names = gcc_parent_names_0,
772                 .num_parents = 4,
773                 .ops = &clk_rcg2_shared_ops,
774         },
775 };
776
777 static const struct freq_tbl ftbl_gcc_ufs_phy_axi_clk_src[] = {
778         F(25000000, P_GPLL0_OUT_EVEN, 12, 0, 0),
779         F(50000000, P_GPLL0_OUT_EVEN, 6, 0, 0),
780         F(100000000, P_GPLL0_OUT_MAIN, 6, 0, 0),
781         F(200000000, P_GPLL0_OUT_MAIN, 3, 0, 0),
782         F(240000000, P_GPLL0_OUT_MAIN, 2.5, 0, 0),
783         { }
784 };
785
786 static struct clk_rcg2 gcc_ufs_phy_axi_clk_src = {
787         .cmd_rcgr = 0x7701c,
788         .mnd_width = 8,
789         .hid_width = 5,
790         .parent_map = gcc_parent_map_0,
791         .freq_tbl = ftbl_gcc_ufs_phy_axi_clk_src,
792         .clkr.hw.init = &(struct clk_init_data){
793                 .name = "gcc_ufs_phy_axi_clk_src",
794                 .parent_names = gcc_parent_names_0,
795                 .num_parents = 4,
796                 .ops = &clk_rcg2_shared_ops,
797         },
798 };
799
800 static struct clk_rcg2 gcc_ufs_phy_ice_core_clk_src = {
801         .cmd_rcgr = 0x7705c,
802         .mnd_width = 0,
803         .hid_width = 5,
804         .parent_map = gcc_parent_map_0,
805         .freq_tbl = ftbl_gcc_ufs_card_ice_core_clk_src,
806         .clkr.hw.init = &(struct clk_init_data){
807                 .name = "gcc_ufs_phy_ice_core_clk_src",
808                 .parent_names = gcc_parent_names_0,
809                 .num_parents = 4,
810                 .ops = &clk_rcg2_shared_ops,
811         },
812 };
813
814 static struct clk_rcg2 gcc_ufs_phy_phy_aux_clk_src = {
815         .cmd_rcgr = 0x77090,
816         .mnd_width = 0,
817         .hid_width = 5,
818         .parent_map = gcc_parent_map_4,
819         .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
820         .clkr.hw.init = &(struct clk_init_data){
821                 .name = "gcc_ufs_phy_phy_aux_clk_src",
822                 .parent_names = gcc_parent_names_4,
823                 .num_parents = 2,
824                 .ops = &clk_rcg2_shared_ops,
825         },
826 };
827
828 static struct clk_rcg2 gcc_ufs_phy_unipro_core_clk_src = {
829         .cmd_rcgr = 0x77074,
830         .mnd_width = 0,
831         .hid_width = 5,
832         .parent_map = gcc_parent_map_0,
833         .freq_tbl = ftbl_gcc_ufs_card_unipro_core_clk_src,
834         .clkr.hw.init = &(struct clk_init_data){
835                 .name = "gcc_ufs_phy_unipro_core_clk_src",
836                 .parent_names = gcc_parent_names_0,
837                 .num_parents = 4,
838                 .ops = &clk_rcg2_shared_ops,
839         },
840 };
841
842 static const struct freq_tbl ftbl_gcc_usb30_prim_master_clk_src[] = {
843         F(33333333, P_GPLL0_OUT_EVEN, 9, 0, 0),
844         F(66666667, P_GPLL0_OUT_EVEN, 4.5, 0, 0),
845         F(133333333, P_GPLL0_OUT_MAIN, 4.5, 0, 0),
846         F(200000000, P_GPLL0_OUT_MAIN, 3, 0, 0),
847         F(240000000, P_GPLL0_OUT_MAIN, 2.5, 0, 0),
848         { }
849 };
850
851 static struct clk_rcg2 gcc_usb30_prim_master_clk_src = {
852         .cmd_rcgr = 0xf018,
853         .mnd_width = 8,
854         .hid_width = 5,
855         .parent_map = gcc_parent_map_0,
856         .freq_tbl = ftbl_gcc_usb30_prim_master_clk_src,
857         .clkr.hw.init = &(struct clk_init_data){
858                 .name = "gcc_usb30_prim_master_clk_src",
859                 .parent_names = gcc_parent_names_0,
860                 .num_parents = 4,
861                 .ops = &clk_rcg2_shared_ops,
862         },
863 };
864
865 static const struct freq_tbl ftbl_gcc_usb30_prim_mock_utmi_clk_src[] = {
866         F(19200000, P_BI_TCXO, 1, 0, 0),
867         F(20000000, P_GPLL0_OUT_EVEN, 15, 0, 0),
868         F(40000000, P_GPLL0_OUT_EVEN, 7.5, 0, 0),
869         F(60000000, P_GPLL0_OUT_MAIN, 10, 0, 0),
870         { }
871 };
872
873 static struct clk_rcg2 gcc_usb30_prim_mock_utmi_clk_src = {
874         .cmd_rcgr = 0xf030,
875         .mnd_width = 0,
876         .hid_width = 5,
877         .parent_map = gcc_parent_map_0,
878         .freq_tbl = ftbl_gcc_usb30_prim_mock_utmi_clk_src,
879         .clkr.hw.init = &(struct clk_init_data){
880                 .name = "gcc_usb30_prim_mock_utmi_clk_src",
881                 .parent_names = gcc_parent_names_0,
882                 .num_parents = 4,
883                 .ops = &clk_rcg2_shared_ops,
884         },
885 };
886
887 static struct clk_rcg2 gcc_usb30_sec_master_clk_src = {
888         .cmd_rcgr = 0x10018,
889         .mnd_width = 8,
890         .hid_width = 5,
891         .parent_map = gcc_parent_map_0,
892         .freq_tbl = ftbl_gcc_usb30_prim_master_clk_src,
893         .clkr.hw.init = &(struct clk_init_data){
894                 .name = "gcc_usb30_sec_master_clk_src",
895                 .parent_names = gcc_parent_names_0,
896                 .num_parents = 4,
897                 .ops = &clk_rcg2_ops,
898         },
899 };
900
901 static struct clk_rcg2 gcc_usb30_sec_mock_utmi_clk_src = {
902         .cmd_rcgr = 0x10030,
903         .mnd_width = 0,
904         .hid_width = 5,
905         .parent_map = gcc_parent_map_0,
906         .freq_tbl = ftbl_gcc_usb30_prim_mock_utmi_clk_src,
907         .clkr.hw.init = &(struct clk_init_data){
908                 .name = "gcc_usb30_sec_mock_utmi_clk_src",
909                 .parent_names = gcc_parent_names_0,
910                 .num_parents = 4,
911                 .ops = &clk_rcg2_ops,
912         },
913 };
914
915 static struct clk_rcg2 gcc_usb3_prim_phy_aux_clk_src = {
916         .cmd_rcgr = 0xf05c,
917         .mnd_width = 0,
918         .hid_width = 5,
919         .parent_map = gcc_parent_map_2,
920         .freq_tbl = ftbl_gcc_cpuss_rbcpr_clk_src,
921         .clkr.hw.init = &(struct clk_init_data){
922                 .name = "gcc_usb3_prim_phy_aux_clk_src",
923                 .parent_names = gcc_parent_names_2,
924                 .num_parents = 3,
925                 .ops = &clk_rcg2_ops,
926         },
927 };
928
929 static struct clk_rcg2 gcc_usb3_sec_phy_aux_clk_src = {
930         .cmd_rcgr = 0x1005c,
931         .mnd_width = 0,
932         .hid_width = 5,
933         .parent_map = gcc_parent_map_2,
934         .freq_tbl = ftbl_gcc_cpuss_rbcpr_clk_src,
935         .clkr.hw.init = &(struct clk_init_data){
936                 .name = "gcc_usb3_sec_phy_aux_clk_src",
937                 .parent_names = gcc_parent_names_2,
938                 .num_parents = 3,
939                 .ops = &clk_rcg2_shared_ops,
940         },
941 };
942
943 static struct clk_rcg2 gcc_vs_ctrl_clk_src = {
944         .cmd_rcgr = 0x7a030,
945         .mnd_width = 0,
946         .hid_width = 5,
947         .parent_map = gcc_parent_map_3,
948         .freq_tbl = ftbl_gcc_cpuss_rbcpr_clk_src,
949         .clkr.hw.init = &(struct clk_init_data){
950                 .name = "gcc_vs_ctrl_clk_src",
951                 .parent_names = gcc_parent_names_3,
952                 .num_parents = 3,
953                 .ops = &clk_rcg2_ops,
954         },
955 };
956
957 static const struct freq_tbl ftbl_gcc_vsensor_clk_src[] = {
958         F(19200000, P_BI_TCXO, 1, 0, 0),
959         F(300000000, P_GPLL0_OUT_MAIN, 2, 0, 0),
960         F(600000000, P_GPLL0_OUT_MAIN, 1, 0, 0),
961         { }
962 };
963
964 static struct clk_rcg2 gcc_vsensor_clk_src = {
965         .cmd_rcgr = 0x7a018,
966         .mnd_width = 0,
967         .hid_width = 5,
968         .parent_map = gcc_parent_map_3,
969         .freq_tbl = ftbl_gcc_vsensor_clk_src,
970         .clkr.hw.init = &(struct clk_init_data){
971                 .name = "gcc_vsensor_clk_src",
972                 .parent_names = gcc_parent_names_8,
973                 .num_parents = 3,
974                 .ops = &clk_rcg2_ops,
975         },
976 };
977
978 static struct clk_branch gcc_aggre_noc_pcie_tbu_clk = {
979         .halt_reg = 0x90014,
980         .halt_check = BRANCH_HALT,
981         .clkr = {
982                 .enable_reg = 0x90014,
983                 .enable_mask = BIT(0),
984                 .hw.init = &(struct clk_init_data){
985                         .name = "gcc_aggre_noc_pcie_tbu_clk",
986                         .ops = &clk_branch2_ops,
987                 },
988         },
989 };
990
991 static struct clk_branch gcc_aggre_ufs_card_axi_clk = {
992         .halt_reg = 0x82028,
993         .halt_check = BRANCH_HALT,
994         .hwcg_reg = 0x82028,
995         .hwcg_bit = 1,
996         .clkr = {
997                 .enable_reg = 0x82028,
998                 .enable_mask = BIT(0),
999                 .hw.init = &(struct clk_init_data){
1000                         .name = "gcc_aggre_ufs_card_axi_clk",
1001                         .parent_names = (const char *[]){
1002                                 "gcc_ufs_card_axi_clk_src",
1003                         },
1004                         .num_parents = 1,
1005                         .flags = CLK_SET_RATE_PARENT,
1006                         .ops = &clk_branch2_ops,
1007                 },
1008         },
1009 };
1010
1011 static struct clk_branch gcc_aggre_ufs_phy_axi_clk = {
1012         .halt_reg = 0x82024,
1013         .halt_check = BRANCH_HALT,
1014         .hwcg_reg = 0x82024,
1015         .hwcg_bit = 1,
1016         .clkr = {
1017                 .enable_reg = 0x82024,
1018                 .enable_mask = BIT(0),
1019                 .hw.init = &(struct clk_init_data){
1020                         .name = "gcc_aggre_ufs_phy_axi_clk",
1021                         .parent_names = (const char *[]){
1022                                 "gcc_ufs_phy_axi_clk_src",
1023                         },
1024                         .num_parents = 1,
1025                         .flags = CLK_SET_RATE_PARENT,
1026                         .ops = &clk_branch2_ops,
1027                 },
1028         },
1029 };
1030
1031 static struct clk_branch gcc_aggre_usb3_prim_axi_clk = {
1032         .halt_reg = 0x8201c,
1033         .halt_check = BRANCH_HALT,
1034         .clkr = {
1035                 .enable_reg = 0x8201c,
1036                 .enable_mask = BIT(0),
1037                 .hw.init = &(struct clk_init_data){
1038                         .name = "gcc_aggre_usb3_prim_axi_clk",
1039                         .parent_names = (const char *[]){
1040                                 "gcc_usb30_prim_master_clk_src",
1041                         },
1042                         .num_parents = 1,
1043                         .flags = CLK_SET_RATE_PARENT,
1044                         .ops = &clk_branch2_ops,
1045                 },
1046         },
1047 };
1048
1049 static struct clk_branch gcc_aggre_usb3_sec_axi_clk = {
1050         .halt_reg = 0x82020,
1051         .halt_check = BRANCH_HALT,
1052         .clkr = {
1053                 .enable_reg = 0x82020,
1054                 .enable_mask = BIT(0),
1055                 .hw.init = &(struct clk_init_data){
1056                         .name = "gcc_aggre_usb3_sec_axi_clk",
1057                         .parent_names = (const char *[]){
1058                                 "gcc_usb30_sec_master_clk_src",
1059                         },
1060                         .num_parents = 1,
1061                         .flags = CLK_SET_RATE_PARENT,
1062                         .ops = &clk_branch2_ops,
1063                 },
1064         },
1065 };
1066
1067 static struct clk_branch gcc_apc_vs_clk = {
1068         .halt_reg = 0x7a050,
1069         .halt_check = BRANCH_HALT,
1070         .clkr = {
1071                 .enable_reg = 0x7a050,
1072                 .enable_mask = BIT(0),
1073                 .hw.init = &(struct clk_init_data){
1074                         .name = "gcc_apc_vs_clk",
1075                         .parent_names = (const char *[]){
1076                                 "gcc_vsensor_clk_src",
1077                         },
1078                         .num_parents = 1,
1079                         .flags = CLK_SET_RATE_PARENT,
1080                         .ops = &clk_branch2_ops,
1081                 },
1082         },
1083 };
1084
1085 static struct clk_branch gcc_boot_rom_ahb_clk = {
1086         .halt_reg = 0x38004,
1087         .halt_check = BRANCH_HALT_VOTED,
1088         .hwcg_reg = 0x38004,
1089         .hwcg_bit = 1,
1090         .clkr = {
1091                 .enable_reg = 0x52004,
1092                 .enable_mask = BIT(10),
1093                 .hw.init = &(struct clk_init_data){
1094                         .name = "gcc_boot_rom_ahb_clk",
1095                         .ops = &clk_branch2_ops,
1096                 },
1097         },
1098 };
1099
1100 static struct clk_branch gcc_camera_ahb_clk = {
1101         .halt_reg = 0xb008,
1102         .halt_check = BRANCH_HALT,
1103         .hwcg_reg = 0xb008,
1104         .hwcg_bit = 1,
1105         .clkr = {
1106                 .enable_reg = 0xb008,
1107                 .enable_mask = BIT(0),
1108                 .hw.init = &(struct clk_init_data){
1109                         .name = "gcc_camera_ahb_clk",
1110                         .flags = CLK_IS_CRITICAL,
1111                         .ops = &clk_branch2_ops,
1112                 },
1113         },
1114 };
1115
1116 static struct clk_branch gcc_camera_axi_clk = {
1117         .halt_reg = 0xb020,
1118         .halt_check = BRANCH_VOTED,
1119         .clkr = {
1120                 .enable_reg = 0xb020,
1121                 .enable_mask = BIT(0),
1122                 .hw.init = &(struct clk_init_data){
1123                         .name = "gcc_camera_axi_clk",
1124                         .ops = &clk_branch2_ops,
1125                 },
1126         },
1127 };
1128
1129 static struct clk_branch gcc_camera_xo_clk = {
1130         .halt_reg = 0xb02c,
1131         .halt_check = BRANCH_HALT,
1132         .clkr = {
1133                 .enable_reg = 0xb02c,
1134                 .enable_mask = BIT(0),
1135                 .hw.init = &(struct clk_init_data){
1136                         .name = "gcc_camera_xo_clk",
1137                         .flags = CLK_IS_CRITICAL,
1138                         .ops = &clk_branch2_ops,
1139                 },
1140         },
1141 };
1142
1143 static struct clk_branch gcc_ce1_ahb_clk = {
1144         .halt_reg = 0x4100c,
1145         .halt_check = BRANCH_HALT_VOTED,
1146         .hwcg_reg = 0x4100c,
1147         .hwcg_bit = 1,
1148         .clkr = {
1149                 .enable_reg = 0x52004,
1150                 .enable_mask = BIT(3),
1151                 .hw.init = &(struct clk_init_data){
1152                         .name = "gcc_ce1_ahb_clk",
1153                         .ops = &clk_branch2_ops,
1154                 },
1155         },
1156 };
1157
1158 static struct clk_branch gcc_ce1_axi_clk = {
1159         .halt_reg = 0x41008,
1160         .halt_check = BRANCH_HALT_VOTED,
1161         .clkr = {
1162                 .enable_reg = 0x52004,
1163                 .enable_mask = BIT(4),
1164                 .hw.init = &(struct clk_init_data){
1165                         .name = "gcc_ce1_axi_clk",
1166                         .ops = &clk_branch2_ops,
1167                 },
1168         },
1169 };
1170
1171 static struct clk_branch gcc_ce1_clk = {
1172         .halt_reg = 0x41004,
1173         .halt_check = BRANCH_HALT_VOTED,
1174         .clkr = {
1175                 .enable_reg = 0x52004,
1176                 .enable_mask = BIT(5),
1177                 .hw.init = &(struct clk_init_data){
1178                         .name = "gcc_ce1_clk",
1179                         .ops = &clk_branch2_ops,
1180                 },
1181         },
1182 };
1183
1184 static struct clk_branch gcc_cfg_noc_usb3_prim_axi_clk = {
1185         .halt_reg = 0x502c,
1186         .halt_check = BRANCH_HALT,
1187         .clkr = {
1188                 .enable_reg = 0x502c,
1189                 .enable_mask = BIT(0),
1190                 .hw.init = &(struct clk_init_data){
1191                         .name = "gcc_cfg_noc_usb3_prim_axi_clk",
1192                         .parent_names = (const char *[]){
1193                                 "gcc_usb30_prim_master_clk_src",
1194                         },
1195                         .num_parents = 1,
1196                         .flags = CLK_SET_RATE_PARENT,
1197                         .ops = &clk_branch2_ops,
1198                 },
1199         },
1200 };
1201
1202 static struct clk_branch gcc_cfg_noc_usb3_sec_axi_clk = {
1203         .halt_reg = 0x5030,
1204         .halt_check = BRANCH_HALT,
1205         .clkr = {
1206                 .enable_reg = 0x5030,
1207                 .enable_mask = BIT(0),
1208                 .hw.init = &(struct clk_init_data){
1209                         .name = "gcc_cfg_noc_usb3_sec_axi_clk",
1210                         .parent_names = (const char *[]){
1211                                 "gcc_usb30_sec_master_clk_src",
1212                         },
1213                         .num_parents = 1,
1214                         .flags = CLK_SET_RATE_PARENT,
1215                         .ops = &clk_branch2_ops,
1216                 },
1217         },
1218 };
1219
1220 static struct clk_branch gcc_cpuss_ahb_clk = {
1221         .halt_reg = 0x48000,
1222         .halt_check = BRANCH_HALT_VOTED,
1223         .clkr = {
1224                 .enable_reg = 0x52004,
1225                 .enable_mask = BIT(21),
1226                 .hw.init = &(struct clk_init_data){
1227                         .name = "gcc_cpuss_ahb_clk",
1228                         .parent_names = (const char *[]){
1229                                 "gcc_cpuss_ahb_clk_src",
1230                         },
1231                         .num_parents = 1,
1232                         .flags = CLK_SET_RATE_PARENT | CLK_IS_CRITICAL,
1233                         .ops = &clk_branch2_ops,
1234                 },
1235         },
1236 };
1237
1238 static struct clk_branch gcc_cpuss_rbcpr_clk = {
1239         .halt_reg = 0x48008,
1240         .halt_check = BRANCH_HALT,
1241         .clkr = {
1242                 .enable_reg = 0x48008,
1243                 .enable_mask = BIT(0),
1244                 .hw.init = &(struct clk_init_data){
1245                         .name = "gcc_cpuss_rbcpr_clk",
1246                         .parent_names = (const char *[]){
1247                                 "gcc_cpuss_rbcpr_clk_src",
1248                         },
1249                         .num_parents = 1,
1250                         .flags = CLK_SET_RATE_PARENT,
1251                         .ops = &clk_branch2_ops,
1252                 },
1253         },
1254 };
1255
1256 static struct clk_branch gcc_ddrss_gpu_axi_clk = {
1257         .halt_reg = 0x44038,
1258         .halt_check = BRANCH_VOTED,
1259         .clkr = {
1260                 .enable_reg = 0x44038,
1261                 .enable_mask = BIT(0),
1262                 .hw.init = &(struct clk_init_data){
1263                         .name = "gcc_ddrss_gpu_axi_clk",
1264                         .ops = &clk_branch2_ops,
1265                 },
1266         },
1267 };
1268
1269 static struct clk_branch gcc_disp_ahb_clk = {
1270         .halt_reg = 0xb00c,
1271         .halt_check = BRANCH_HALT,
1272         .hwcg_reg = 0xb00c,
1273         .hwcg_bit = 1,
1274         .clkr = {
1275                 .enable_reg = 0xb00c,
1276                 .enable_mask = BIT(0),
1277                 .hw.init = &(struct clk_init_data){
1278                         .name = "gcc_disp_ahb_clk",
1279                         .flags = CLK_IS_CRITICAL,
1280                         .ops = &clk_branch2_ops,
1281                 },
1282         },
1283 };
1284
1285 static struct clk_branch gcc_disp_axi_clk = {
1286         .halt_reg = 0xb024,
1287         .halt_check = BRANCH_VOTED,
1288         .clkr = {
1289                 .enable_reg = 0xb024,
1290                 .enable_mask = BIT(0),
1291                 .hw.init = &(struct clk_init_data){
1292                         .name = "gcc_disp_axi_clk",
1293                         .ops = &clk_branch2_ops,
1294                 },
1295         },
1296 };
1297
1298 static struct clk_branch gcc_disp_gpll0_clk_src = {
1299         .halt_check = BRANCH_HALT_DELAY,
1300         .clkr = {
1301                 .enable_reg = 0x52004,
1302                 .enable_mask = BIT(18),
1303                 .hw.init = &(struct clk_init_data){
1304                         .name = "gcc_disp_gpll0_clk_src",
1305                         .parent_names = (const char *[]){
1306                                 "gpll0",
1307                         },
1308                         .num_parents = 1,
1309                         .ops = &clk_branch2_ops,
1310                 },
1311         },
1312 };
1313
1314 static struct clk_branch gcc_disp_gpll0_div_clk_src = {
1315         .halt_check = BRANCH_HALT_DELAY,
1316         .clkr = {
1317                 .enable_reg = 0x52004,
1318                 .enable_mask = BIT(19),
1319                 .hw.init = &(struct clk_init_data){
1320                         .name = "gcc_disp_gpll0_div_clk_src",
1321                         .parent_names = (const char *[]){
1322                                 "gpll0_out_even",
1323                         },
1324                         .num_parents = 1,
1325                         .ops = &clk_branch2_ops,
1326                 },
1327         },
1328 };
1329
1330 static struct clk_branch gcc_disp_xo_clk = {
1331         .halt_reg = 0xb030,
1332         .halt_check = BRANCH_HALT,
1333         .clkr = {
1334                 .enable_reg = 0xb030,
1335                 .enable_mask = BIT(0),
1336                 .hw.init = &(struct clk_init_data){
1337                         .name = "gcc_disp_xo_clk",
1338                         .flags = CLK_IS_CRITICAL,
1339                         .ops = &clk_branch2_ops,
1340                 },
1341         },
1342 };
1343
1344 static struct clk_branch gcc_gp1_clk = {
1345         .halt_reg = 0x64000,
1346         .halt_check = BRANCH_HALT,
1347         .clkr = {
1348                 .enable_reg = 0x64000,
1349                 .enable_mask = BIT(0),
1350                 .hw.init = &(struct clk_init_data){
1351                         .name = "gcc_gp1_clk",
1352                         .parent_names = (const char *[]){
1353                                 "gcc_gp1_clk_src",
1354                         },
1355                         .num_parents = 1,
1356                         .flags = CLK_SET_RATE_PARENT,
1357                         .ops = &clk_branch2_ops,
1358                 },
1359         },
1360 };
1361
1362 static struct clk_branch gcc_gp2_clk = {
1363         .halt_reg = 0x65000,
1364         .halt_check = BRANCH_HALT,
1365         .clkr = {
1366                 .enable_reg = 0x65000,
1367                 .enable_mask = BIT(0),
1368                 .hw.init = &(struct clk_init_data){
1369                         .name = "gcc_gp2_clk",
1370                         .parent_names = (const char *[]){
1371                                 "gcc_gp2_clk_src",
1372                         },
1373                         .num_parents = 1,
1374                         .flags = CLK_SET_RATE_PARENT,
1375                         .ops = &clk_branch2_ops,
1376                 },
1377         },
1378 };
1379
1380 static struct clk_branch gcc_gp3_clk = {
1381         .halt_reg = 0x66000,
1382         .halt_check = BRANCH_HALT,
1383         .clkr = {
1384                 .enable_reg = 0x66000,
1385                 .enable_mask = BIT(0),
1386                 .hw.init = &(struct clk_init_data){
1387                         .name = "gcc_gp3_clk",
1388                         .parent_names = (const char *[]){
1389                                 "gcc_gp3_clk_src",
1390                         },
1391                         .num_parents = 1,
1392                         .flags = CLK_SET_RATE_PARENT,
1393                         .ops = &clk_branch2_ops,
1394                 },
1395         },
1396 };
1397
1398 static struct clk_branch gcc_gpu_cfg_ahb_clk = {
1399         .halt_reg = 0x71004,
1400         .halt_check = BRANCH_HALT,
1401         .hwcg_reg = 0x71004,
1402         .hwcg_bit = 1,
1403         .clkr = {
1404                 .enable_reg = 0x71004,
1405                 .enable_mask = BIT(0),
1406                 .hw.init = &(struct clk_init_data){
1407                         .name = "gcc_gpu_cfg_ahb_clk",
1408                         .flags = CLK_IS_CRITICAL,
1409                         .ops = &clk_branch2_ops,
1410                 },
1411         },
1412 };
1413
1414 static struct clk_branch gcc_gpu_gpll0_clk_src = {
1415         .halt_check = BRANCH_HALT_DELAY,
1416         .clkr = {
1417                 .enable_reg = 0x52004,
1418                 .enable_mask = BIT(15),
1419                 .hw.init = &(struct clk_init_data){
1420                         .name = "gcc_gpu_gpll0_clk_src",
1421                         .parent_names = (const char *[]){
1422                                 "gpll0",
1423                         },
1424                         .num_parents = 1,
1425                         .ops = &clk_branch2_ops,
1426                 },
1427         },
1428 };
1429
1430 static struct clk_branch gcc_gpu_gpll0_div_clk_src = {
1431         .halt_check = BRANCH_HALT_DELAY,
1432         .clkr = {
1433                 .enable_reg = 0x52004,
1434                 .enable_mask = BIT(16),
1435                 .hw.init = &(struct clk_init_data){
1436                         .name = "gcc_gpu_gpll0_div_clk_src",
1437                         .parent_names = (const char *[]){
1438                                 "gpll0_out_even",
1439                         },
1440                         .num_parents = 1,
1441                         .ops = &clk_branch2_ops,
1442                 },
1443         },
1444 };
1445
1446 static struct clk_branch gcc_gpu_iref_clk = {
1447         .halt_reg = 0x8c010,
1448         .halt_check = BRANCH_HALT,
1449         .clkr = {
1450                 .enable_reg = 0x8c010,
1451                 .enable_mask = BIT(0),
1452                 .hw.init = &(struct clk_init_data){
1453                         .name = "gcc_gpu_iref_clk",
1454                         .ops = &clk_branch2_ops,
1455                 },
1456         },
1457 };
1458
1459 static struct clk_branch gcc_gpu_memnoc_gfx_clk = {
1460         .halt_reg = 0x7100c,
1461         .halt_check = BRANCH_VOTED,
1462         .clkr = {
1463                 .enable_reg = 0x7100c,
1464                 .enable_mask = BIT(0),
1465                 .hw.init = &(struct clk_init_data){
1466                         .name = "gcc_gpu_memnoc_gfx_clk",
1467                         .ops = &clk_branch2_ops,
1468                 },
1469         },
1470 };
1471
1472 static struct clk_branch gcc_gpu_snoc_dvm_gfx_clk = {
1473         .halt_reg = 0x71018,
1474         .halt_check = BRANCH_HALT,
1475         .clkr = {
1476                 .enable_reg = 0x71018,
1477                 .enable_mask = BIT(0),
1478                 .hw.init = &(struct clk_init_data){
1479                         .name = "gcc_gpu_snoc_dvm_gfx_clk",
1480                         .ops = &clk_branch2_ops,
1481                 },
1482         },
1483 };
1484
1485 static struct clk_branch gcc_gpu_vs_clk = {
1486         .halt_reg = 0x7a04c,
1487         .halt_check = BRANCH_HALT,
1488         .clkr = {
1489                 .enable_reg = 0x7a04c,
1490                 .enable_mask = BIT(0),
1491                 .hw.init = &(struct clk_init_data){
1492                         .name = "gcc_gpu_vs_clk",
1493                         .parent_names = (const char *[]){
1494                                 "gcc_vsensor_clk_src",
1495                         },
1496                         .num_parents = 1,
1497                         .flags = CLK_SET_RATE_PARENT,
1498                         .ops = &clk_branch2_ops,
1499                 },
1500         },
1501 };
1502
1503 static struct clk_branch gcc_mss_axis2_clk = {
1504         .halt_reg = 0x8a008,
1505         .halt_check = BRANCH_HALT,
1506         .clkr = {
1507                 .enable_reg = 0x8a008,
1508                 .enable_mask = BIT(0),
1509                 .hw.init = &(struct clk_init_data){
1510                         .name = "gcc_mss_axis2_clk",
1511                         .ops = &clk_branch2_ops,
1512                 },
1513         },
1514 };
1515
1516 static struct clk_branch gcc_mss_cfg_ahb_clk = {
1517         .halt_reg = 0x8a000,
1518         .halt_check = BRANCH_HALT,
1519         .hwcg_reg = 0x8a000,
1520         .hwcg_bit = 1,
1521         .clkr = {
1522                 .enable_reg = 0x8a000,
1523                 .enable_mask = BIT(0),
1524                 .hw.init = &(struct clk_init_data){
1525                         .name = "gcc_mss_cfg_ahb_clk",
1526                         .ops = &clk_branch2_ops,
1527                 },
1528         },
1529 };
1530
1531 static struct clk_branch gcc_mss_gpll0_div_clk_src = {
1532         .halt_check = BRANCH_HALT_DELAY,
1533         .clkr = {
1534                 .enable_reg = 0x52004,
1535                 .enable_mask = BIT(17),
1536                 .hw.init = &(struct clk_init_data){
1537                         .name = "gcc_mss_gpll0_div_clk_src",
1538                         .ops = &clk_branch2_ops,
1539                 },
1540         },
1541 };
1542
1543 static struct clk_branch gcc_mss_mfab_axis_clk = {
1544         .halt_reg = 0x8a004,
1545         .halt_check = BRANCH_VOTED,
1546         .hwcg_reg = 0x8a004,
1547         .hwcg_bit = 1,
1548         .clkr = {
1549                 .enable_reg = 0x8a004,
1550                 .enable_mask = BIT(0),
1551                 .hw.init = &(struct clk_init_data){
1552                         .name = "gcc_mss_mfab_axis_clk",
1553                         .ops = &clk_branch2_ops,
1554                 },
1555         },
1556 };
1557
1558 static struct clk_branch gcc_mss_q6_memnoc_axi_clk = {
1559         .halt_reg = 0x8a154,
1560         .halt_check = BRANCH_VOTED,
1561         .clkr = {
1562                 .enable_reg = 0x8a154,
1563                 .enable_mask = BIT(0),
1564                 .hw.init = &(struct clk_init_data){
1565                         .name = "gcc_mss_q6_memnoc_axi_clk",
1566                         .ops = &clk_branch2_ops,
1567                 },
1568         },
1569 };
1570
1571 static struct clk_branch gcc_mss_snoc_axi_clk = {
1572         .halt_reg = 0x8a150,
1573         .halt_check = BRANCH_HALT,
1574         .clkr = {
1575                 .enable_reg = 0x8a150,
1576                 .enable_mask = BIT(0),
1577                 .hw.init = &(struct clk_init_data){
1578                         .name = "gcc_mss_snoc_axi_clk",
1579                         .ops = &clk_branch2_ops,
1580                 },
1581         },
1582 };
1583
1584 static struct clk_branch gcc_mss_vs_clk = {
1585         .halt_reg = 0x7a048,
1586         .halt_check = BRANCH_HALT,
1587         .clkr = {
1588                 .enable_reg = 0x7a048,
1589                 .enable_mask = BIT(0),
1590                 .hw.init = &(struct clk_init_data){
1591                         .name = "gcc_mss_vs_clk",
1592                         .parent_names = (const char *[]){
1593                                 "gcc_vsensor_clk_src",
1594                         },
1595                         .num_parents = 1,
1596                         .flags = CLK_SET_RATE_PARENT,
1597                         .ops = &clk_branch2_ops,
1598                 },
1599         },
1600 };
1601
1602 static struct clk_branch gcc_pcie_0_aux_clk = {
1603         .halt_reg = 0x6b01c,
1604         .halt_check = BRANCH_HALT_VOTED,
1605         .clkr = {
1606                 .enable_reg = 0x5200c,
1607                 .enable_mask = BIT(3),
1608                 .hw.init = &(struct clk_init_data){
1609                         .name = "gcc_pcie_0_aux_clk",
1610                         .parent_names = (const char *[]){
1611                                 "gcc_pcie_0_aux_clk_src",
1612                         },
1613                         .num_parents = 1,
1614                         .flags = CLK_SET_RATE_PARENT,
1615                         .ops = &clk_branch2_ops,
1616                 },
1617         },
1618 };
1619
1620 static struct clk_branch gcc_pcie_0_cfg_ahb_clk = {
1621         .halt_reg = 0x6b018,
1622         .halt_check = BRANCH_HALT_VOTED,
1623         .hwcg_reg = 0x6b018,
1624         .hwcg_bit = 1,
1625         .clkr = {
1626                 .enable_reg = 0x5200c,
1627                 .enable_mask = BIT(2),
1628                 .hw.init = &(struct clk_init_data){
1629                         .name = "gcc_pcie_0_cfg_ahb_clk",
1630                         .ops = &clk_branch2_ops,
1631                 },
1632         },
1633 };
1634
1635 static struct clk_branch gcc_pcie_0_clkref_clk = {
1636         .halt_reg = 0x8c00c,
1637         .halt_check = BRANCH_HALT,
1638         .clkr = {
1639                 .enable_reg = 0x8c00c,
1640                 .enable_mask = BIT(0),
1641                 .hw.init = &(struct clk_init_data){
1642                         .name = "gcc_pcie_0_clkref_clk",
1643                         .ops = &clk_branch2_ops,
1644                 },
1645         },
1646 };
1647
1648 static struct clk_branch gcc_pcie_0_mstr_axi_clk = {
1649         .halt_reg = 0x6b014,
1650         .halt_check = BRANCH_HALT_VOTED,
1651         .clkr = {
1652                 .enable_reg = 0x5200c,
1653                 .enable_mask = BIT(1),
1654                 .hw.init = &(struct clk_init_data){
1655                         .name = "gcc_pcie_0_mstr_axi_clk",
1656                         .ops = &clk_branch2_ops,
1657                 },
1658         },
1659 };
1660
1661 static struct clk_branch gcc_pcie_0_pipe_clk = {
1662         .halt_check = BRANCH_HALT_SKIP,
1663         .clkr = {
1664                 .enable_reg = 0x5200c,
1665                 .enable_mask = BIT(4),
1666                 .hw.init = &(struct clk_init_data){
1667                         .name = "gcc_pcie_0_pipe_clk",
1668                         .ops = &clk_branch2_ops,
1669                 },
1670         },
1671 };
1672
1673 static struct clk_branch gcc_pcie_0_slv_axi_clk = {
1674         .halt_reg = 0x6b010,
1675         .halt_check = BRANCH_HALT_VOTED,
1676         .hwcg_reg = 0x6b010,
1677         .hwcg_bit = 1,
1678         .clkr = {
1679                 .enable_reg = 0x5200c,
1680                 .enable_mask = BIT(0),
1681                 .hw.init = &(struct clk_init_data){
1682                         .name = "gcc_pcie_0_slv_axi_clk",
1683                         .ops = &clk_branch2_ops,
1684                 },
1685         },
1686 };
1687
1688 static struct clk_branch gcc_pcie_0_slv_q2a_axi_clk = {
1689         .halt_reg = 0x6b00c,
1690         .halt_check = BRANCH_HALT_VOTED,
1691         .clkr = {
1692                 .enable_reg = 0x5200c,
1693                 .enable_mask = BIT(5),
1694                 .hw.init = &(struct clk_init_data){
1695                         .name = "gcc_pcie_0_slv_q2a_axi_clk",
1696                         .ops = &clk_branch2_ops,
1697                 },
1698         },
1699 };
1700
1701 static struct clk_branch gcc_pcie_1_aux_clk = {
1702         .halt_reg = 0x8d01c,
1703         .halt_check = BRANCH_HALT_VOTED,
1704         .clkr = {
1705                 .enable_reg = 0x52004,
1706                 .enable_mask = BIT(29),
1707                 .hw.init = &(struct clk_init_data){
1708                         .name = "gcc_pcie_1_aux_clk",
1709                         .parent_names = (const char *[]){
1710                                 "gcc_pcie_1_aux_clk_src",
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_pcie_1_cfg_ahb_clk = {
1720         .halt_reg = 0x8d018,
1721         .halt_check = BRANCH_HALT_VOTED,
1722         .hwcg_reg = 0x8d018,
1723         .hwcg_bit = 1,
1724         .clkr = {
1725                 .enable_reg = 0x52004,
1726                 .enable_mask = BIT(28),
1727                 .hw.init = &(struct clk_init_data){
1728                         .name = "gcc_pcie_1_cfg_ahb_clk",
1729                         .ops = &clk_branch2_ops,
1730                 },
1731         },
1732 };
1733
1734 static struct clk_branch gcc_pcie_1_clkref_clk = {
1735         .halt_reg = 0x8c02c,
1736         .halt_check = BRANCH_HALT,
1737         .clkr = {
1738                 .enable_reg = 0x8c02c,
1739                 .enable_mask = BIT(0),
1740                 .hw.init = &(struct clk_init_data){
1741                         .name = "gcc_pcie_1_clkref_clk",
1742                         .ops = &clk_branch2_ops,
1743                 },
1744         },
1745 };
1746
1747 static struct clk_branch gcc_pcie_1_mstr_axi_clk = {
1748         .halt_reg = 0x8d014,
1749         .halt_check = BRANCH_HALT_VOTED,
1750         .clkr = {
1751                 .enable_reg = 0x52004,
1752                 .enable_mask = BIT(27),
1753                 .hw.init = &(struct clk_init_data){
1754                         .name = "gcc_pcie_1_mstr_axi_clk",
1755                         .ops = &clk_branch2_ops,
1756                 },
1757         },
1758 };
1759
1760 static struct clk_branch gcc_pcie_1_pipe_clk = {
1761         .halt_check = BRANCH_HALT_SKIP,
1762         .clkr = {
1763                 .enable_reg = 0x52004,
1764                 .enable_mask = BIT(30),
1765                 .hw.init = &(struct clk_init_data){
1766                         .name = "gcc_pcie_1_pipe_clk",
1767                         .ops = &clk_branch2_ops,
1768                 },
1769         },
1770 };
1771
1772 static struct clk_branch gcc_pcie_1_slv_axi_clk = {
1773         .halt_reg = 0x8d010,
1774         .halt_check = BRANCH_HALT_VOTED,
1775         .hwcg_reg = 0x8d010,
1776         .hwcg_bit = 1,
1777         .clkr = {
1778                 .enable_reg = 0x52004,
1779                 .enable_mask = BIT(26),
1780                 .hw.init = &(struct clk_init_data){
1781                         .name = "gcc_pcie_1_slv_axi_clk",
1782                         .ops = &clk_branch2_ops,
1783                 },
1784         },
1785 };
1786
1787 static struct clk_branch gcc_pcie_1_slv_q2a_axi_clk = {
1788         .halt_reg = 0x8d00c,
1789         .halt_check = BRANCH_HALT_VOTED,
1790         .clkr = {
1791                 .enable_reg = 0x52004,
1792                 .enable_mask = BIT(25),
1793                 .hw.init = &(struct clk_init_data){
1794                         .name = "gcc_pcie_1_slv_q2a_axi_clk",
1795                         .ops = &clk_branch2_ops,
1796                 },
1797         },
1798 };
1799
1800 static struct clk_branch gcc_pcie_phy_aux_clk = {
1801         .halt_reg = 0x6f004,
1802         .halt_check = BRANCH_HALT,
1803         .clkr = {
1804                 .enable_reg = 0x6f004,
1805                 .enable_mask = BIT(0),
1806                 .hw.init = &(struct clk_init_data){
1807                         .name = "gcc_pcie_phy_aux_clk",
1808                         .parent_names = (const char *[]){
1809                                 "gcc_pcie_0_aux_clk_src",
1810                         },
1811                         .num_parents = 1,
1812                         .flags = CLK_SET_RATE_PARENT,
1813                         .ops = &clk_branch2_ops,
1814                 },
1815         },
1816 };
1817
1818 static struct clk_branch gcc_pcie_phy_refgen_clk = {
1819         .halt_reg = 0x6f02c,
1820         .halt_check = BRANCH_HALT,
1821         .clkr = {
1822                 .enable_reg = 0x6f02c,
1823                 .enable_mask = BIT(0),
1824                 .hw.init = &(struct clk_init_data){
1825                         .name = "gcc_pcie_phy_refgen_clk",
1826                         .parent_names = (const char *[]){
1827                                 "gcc_pcie_phy_refgen_clk_src",
1828                         },
1829                         .num_parents = 1,
1830                         .flags = CLK_SET_RATE_PARENT,
1831                         .ops = &clk_branch2_ops,
1832                 },
1833         },
1834 };
1835
1836 static struct clk_branch gcc_pdm2_clk = {
1837         .halt_reg = 0x3300c,
1838         .halt_check = BRANCH_HALT,
1839         .clkr = {
1840                 .enable_reg = 0x3300c,
1841                 .enable_mask = BIT(0),
1842                 .hw.init = &(struct clk_init_data){
1843                         .name = "gcc_pdm2_clk",
1844                         .parent_names = (const char *[]){
1845                                 "gcc_pdm2_clk_src",
1846                         },
1847                         .num_parents = 1,
1848                         .flags = CLK_SET_RATE_PARENT,
1849                         .ops = &clk_branch2_ops,
1850                 },
1851         },
1852 };
1853
1854 static struct clk_branch gcc_pdm_ahb_clk = {
1855         .halt_reg = 0x33004,
1856         .halt_check = BRANCH_HALT,
1857         .hwcg_reg = 0x33004,
1858         .hwcg_bit = 1,
1859         .clkr = {
1860                 .enable_reg = 0x33004,
1861                 .enable_mask = BIT(0),
1862                 .hw.init = &(struct clk_init_data){
1863                         .name = "gcc_pdm_ahb_clk",
1864                         .ops = &clk_branch2_ops,
1865                 },
1866         },
1867 };
1868
1869 static struct clk_branch gcc_pdm_xo4_clk = {
1870         .halt_reg = 0x33008,
1871         .halt_check = BRANCH_HALT,
1872         .clkr = {
1873                 .enable_reg = 0x33008,
1874                 .enable_mask = BIT(0),
1875                 .hw.init = &(struct clk_init_data){
1876                         .name = "gcc_pdm_xo4_clk",
1877                         .ops = &clk_branch2_ops,
1878                 },
1879         },
1880 };
1881
1882 static struct clk_branch gcc_prng_ahb_clk = {
1883         .halt_reg = 0x34004,
1884         .halt_check = BRANCH_HALT_VOTED,
1885         .hwcg_reg = 0x34004,
1886         .hwcg_bit = 1,
1887         .clkr = {
1888                 .enable_reg = 0x52004,
1889                 .enable_mask = BIT(13),
1890                 .hw.init = &(struct clk_init_data){
1891                         .name = "gcc_prng_ahb_clk",
1892                         .ops = &clk_branch2_ops,
1893                 },
1894         },
1895 };
1896
1897 static struct clk_branch gcc_qmip_camera_ahb_clk = {
1898         .halt_reg = 0xb014,
1899         .halt_check = BRANCH_HALT,
1900         .hwcg_reg = 0xb014,
1901         .hwcg_bit = 1,
1902         .clkr = {
1903                 .enable_reg = 0xb014,
1904                 .enable_mask = BIT(0),
1905                 .hw.init = &(struct clk_init_data){
1906                         .name = "gcc_qmip_camera_ahb_clk",
1907                         .ops = &clk_branch2_ops,
1908                 },
1909         },
1910 };
1911
1912 static struct clk_branch gcc_qmip_disp_ahb_clk = {
1913         .halt_reg = 0xb018,
1914         .halt_check = BRANCH_HALT,
1915         .hwcg_reg = 0xb018,
1916         .hwcg_bit = 1,
1917         .clkr = {
1918                 .enable_reg = 0xb018,
1919                 .enable_mask = BIT(0),
1920                 .hw.init = &(struct clk_init_data){
1921                         .name = "gcc_qmip_disp_ahb_clk",
1922                         .ops = &clk_branch2_ops,
1923                 },
1924         },
1925 };
1926
1927 static struct clk_branch gcc_qmip_video_ahb_clk = {
1928         .halt_reg = 0xb010,
1929         .halt_check = BRANCH_HALT,
1930         .hwcg_reg = 0xb010,
1931         .hwcg_bit = 1,
1932         .clkr = {
1933                 .enable_reg = 0xb010,
1934                 .enable_mask = BIT(0),
1935                 .hw.init = &(struct clk_init_data){
1936                         .name = "gcc_qmip_video_ahb_clk",
1937                         .ops = &clk_branch2_ops,
1938                 },
1939         },
1940 };
1941
1942 static struct clk_branch gcc_qupv3_wrap0_s0_clk = {
1943         .halt_reg = 0x17030,
1944         .halt_check = BRANCH_HALT_VOTED,
1945         .clkr = {
1946                 .enable_reg = 0x5200c,
1947                 .enable_mask = BIT(10),
1948                 .hw.init = &(struct clk_init_data){
1949                         .name = "gcc_qupv3_wrap0_s0_clk",
1950                         .parent_names = (const char *[]){
1951                                 "gcc_qupv3_wrap0_s0_clk_src",
1952                         },
1953                         .num_parents = 1,
1954                         .flags = CLK_SET_RATE_PARENT,
1955                         .ops = &clk_branch2_ops,
1956                 },
1957         },
1958 };
1959
1960 static struct clk_branch gcc_qupv3_wrap0_s1_clk = {
1961         .halt_reg = 0x17160,
1962         .halt_check = BRANCH_HALT_VOTED,
1963         .clkr = {
1964                 .enable_reg = 0x5200c,
1965                 .enable_mask = BIT(11),
1966                 .hw.init = &(struct clk_init_data){
1967                         .name = "gcc_qupv3_wrap0_s1_clk",
1968                         .parent_names = (const char *[]){
1969                                 "gcc_qupv3_wrap0_s1_clk_src",
1970                         },
1971                         .num_parents = 1,
1972                         .flags = CLK_SET_RATE_PARENT,
1973                         .ops = &clk_branch2_ops,
1974                 },
1975         },
1976 };
1977
1978 static struct clk_branch gcc_qupv3_wrap0_s2_clk = {
1979         .halt_reg = 0x17290,
1980         .halt_check = BRANCH_HALT_VOTED,
1981         .clkr = {
1982                 .enable_reg = 0x5200c,
1983                 .enable_mask = BIT(12),
1984                 .hw.init = &(struct clk_init_data){
1985                         .name = "gcc_qupv3_wrap0_s2_clk",
1986                         .parent_names = (const char *[]){
1987                                 "gcc_qupv3_wrap0_s2_clk_src",
1988                         },
1989                         .num_parents = 1,
1990                         .flags = CLK_SET_RATE_PARENT,
1991                         .ops = &clk_branch2_ops,
1992                 },
1993         },
1994 };
1995
1996 static struct clk_branch gcc_qupv3_wrap0_s3_clk = {
1997         .halt_reg = 0x173c0,
1998         .halt_check = BRANCH_HALT_VOTED,
1999         .clkr = {
2000                 .enable_reg = 0x5200c,
2001                 .enable_mask = BIT(13),
2002                 .hw.init = &(struct clk_init_data){
2003                         .name = "gcc_qupv3_wrap0_s3_clk",
2004                         .parent_names = (const char *[]){
2005                                 "gcc_qupv3_wrap0_s3_clk_src",
2006                         },
2007                         .num_parents = 1,
2008                         .flags = CLK_SET_RATE_PARENT,
2009                         .ops = &clk_branch2_ops,
2010                 },
2011         },
2012 };
2013
2014 static struct clk_branch gcc_qupv3_wrap0_s4_clk = {
2015         .halt_reg = 0x174f0,
2016         .halt_check = BRANCH_HALT_VOTED,
2017         .clkr = {
2018                 .enable_reg = 0x5200c,
2019                 .enable_mask = BIT(14),
2020                 .hw.init = &(struct clk_init_data){
2021                         .name = "gcc_qupv3_wrap0_s4_clk",
2022                         .parent_names = (const char *[]){
2023                                 "gcc_qupv3_wrap0_s4_clk_src",
2024                         },
2025                         .num_parents = 1,
2026                         .flags = CLK_SET_RATE_PARENT,
2027                         .ops = &clk_branch2_ops,
2028                 },
2029         },
2030 };
2031
2032 static struct clk_branch gcc_qupv3_wrap0_s5_clk = {
2033         .halt_reg = 0x17620,
2034         .halt_check = BRANCH_HALT_VOTED,
2035         .clkr = {
2036                 .enable_reg = 0x5200c,
2037                 .enable_mask = BIT(15),
2038                 .hw.init = &(struct clk_init_data){
2039                         .name = "gcc_qupv3_wrap0_s5_clk",
2040                         .parent_names = (const char *[]){
2041                                 "gcc_qupv3_wrap0_s5_clk_src",
2042                         },
2043                         .num_parents = 1,
2044                         .flags = CLK_SET_RATE_PARENT,
2045                         .ops = &clk_branch2_ops,
2046                 },
2047         },
2048 };
2049
2050 static struct clk_branch gcc_qupv3_wrap0_s6_clk = {
2051         .halt_reg = 0x17750,
2052         .halt_check = BRANCH_HALT_VOTED,
2053         .clkr = {
2054                 .enable_reg = 0x5200c,
2055                 .enable_mask = BIT(16),
2056                 .hw.init = &(struct clk_init_data){
2057                         .name = "gcc_qupv3_wrap0_s6_clk",
2058                         .parent_names = (const char *[]){
2059                                 "gcc_qupv3_wrap0_s6_clk_src",
2060                         },
2061                         .num_parents = 1,
2062                         .flags = CLK_SET_RATE_PARENT,
2063                         .ops = &clk_branch2_ops,
2064                 },
2065         },
2066 };
2067
2068 static struct clk_branch gcc_qupv3_wrap0_s7_clk = {
2069         .halt_reg = 0x17880,
2070         .halt_check = BRANCH_HALT_VOTED,
2071         .clkr = {
2072                 .enable_reg = 0x5200c,
2073                 .enable_mask = BIT(17),
2074                 .hw.init = &(struct clk_init_data){
2075                         .name = "gcc_qupv3_wrap0_s7_clk",
2076                         .parent_names = (const char *[]){
2077                                 "gcc_qupv3_wrap0_s7_clk_src",
2078                         },
2079                         .num_parents = 1,
2080                         .flags = CLK_SET_RATE_PARENT,
2081                         .ops = &clk_branch2_ops,
2082                 },
2083         },
2084 };
2085
2086 static struct clk_branch gcc_qupv3_wrap1_s0_clk = {
2087         .halt_reg = 0x18014,
2088         .halt_check = BRANCH_HALT_VOTED,
2089         .clkr = {
2090                 .enable_reg = 0x5200c,
2091                 .enable_mask = BIT(22),
2092                 .hw.init = &(struct clk_init_data){
2093                         .name = "gcc_qupv3_wrap1_s0_clk",
2094                         .parent_names = (const char *[]){
2095                                 "gcc_qupv3_wrap1_s0_clk_src",
2096                         },
2097                         .num_parents = 1,
2098                         .flags = CLK_SET_RATE_PARENT,
2099                         .ops = &clk_branch2_ops,
2100                 },
2101         },
2102 };
2103
2104 static struct clk_branch gcc_qupv3_wrap1_s1_clk = {
2105         .halt_reg = 0x18144,
2106         .halt_check = BRANCH_HALT_VOTED,
2107         .clkr = {
2108                 .enable_reg = 0x5200c,
2109                 .enable_mask = BIT(23),
2110                 .hw.init = &(struct clk_init_data){
2111                         .name = "gcc_qupv3_wrap1_s1_clk",
2112                         .parent_names = (const char *[]){
2113                                 "gcc_qupv3_wrap1_s1_clk_src",
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_qupv3_wrap1_s2_clk = {
2123         .halt_reg = 0x18274,
2124         .halt_check = BRANCH_HALT_VOTED,
2125         .clkr = {
2126                 .enable_reg = 0x5200c,
2127                 .enable_mask = BIT(24),
2128                 .hw.init = &(struct clk_init_data){
2129                         .name = "gcc_qupv3_wrap1_s2_clk",
2130                         .parent_names = (const char *[]){
2131                                 "gcc_qupv3_wrap1_s2_clk_src",
2132                         },
2133                         .num_parents = 1,
2134                         .flags = CLK_SET_RATE_PARENT,
2135                         .ops = &clk_branch2_ops,
2136                 },
2137         },
2138 };
2139
2140 static struct clk_branch gcc_qupv3_wrap1_s3_clk = {
2141         .halt_reg = 0x183a4,
2142         .halt_check = BRANCH_HALT_VOTED,
2143         .clkr = {
2144                 .enable_reg = 0x5200c,
2145                 .enable_mask = BIT(25),
2146                 .hw.init = &(struct clk_init_data){
2147                         .name = "gcc_qupv3_wrap1_s3_clk",
2148                         .parent_names = (const char *[]){
2149                                 "gcc_qupv3_wrap1_s3_clk_src",
2150                         },
2151                         .num_parents = 1,
2152                         .flags = CLK_SET_RATE_PARENT,
2153                         .ops = &clk_branch2_ops,
2154                 },
2155         },
2156 };
2157
2158 static struct clk_branch gcc_qupv3_wrap1_s4_clk = {
2159         .halt_reg = 0x184d4,
2160         .halt_check = BRANCH_HALT_VOTED,
2161         .clkr = {
2162                 .enable_reg = 0x5200c,
2163                 .enable_mask = BIT(26),
2164                 .hw.init = &(struct clk_init_data){
2165                         .name = "gcc_qupv3_wrap1_s4_clk",
2166                         .parent_names = (const char *[]){
2167                                 "gcc_qupv3_wrap1_s4_clk_src",
2168                         },
2169                         .num_parents = 1,
2170                         .flags = CLK_SET_RATE_PARENT,
2171                         .ops = &clk_branch2_ops,
2172                 },
2173         },
2174 };
2175
2176 static struct clk_branch gcc_qupv3_wrap1_s5_clk = {
2177         .halt_reg = 0x18604,
2178         .halt_check = BRANCH_HALT_VOTED,
2179         .clkr = {
2180                 .enable_reg = 0x5200c,
2181                 .enable_mask = BIT(27),
2182                 .hw.init = &(struct clk_init_data){
2183                         .name = "gcc_qupv3_wrap1_s5_clk",
2184                         .parent_names = (const char *[]){
2185                                 "gcc_qupv3_wrap1_s5_clk_src",
2186                         },
2187                         .num_parents = 1,
2188                         .flags = CLK_SET_RATE_PARENT,
2189                         .ops = &clk_branch2_ops,
2190                 },
2191         },
2192 };
2193
2194 static struct clk_branch gcc_qupv3_wrap1_s6_clk = {
2195         .halt_reg = 0x18734,
2196         .halt_check = BRANCH_HALT_VOTED,
2197         .clkr = {
2198                 .enable_reg = 0x5200c,
2199                 .enable_mask = BIT(28),
2200                 .hw.init = &(struct clk_init_data){
2201                         .name = "gcc_qupv3_wrap1_s6_clk",
2202                         .parent_names = (const char *[]){
2203                                 "gcc_qupv3_wrap1_s6_clk_src",
2204                         },
2205                         .num_parents = 1,
2206                         .flags = CLK_SET_RATE_PARENT,
2207                         .ops = &clk_branch2_ops,
2208                 },
2209         },
2210 };
2211
2212 static struct clk_branch gcc_qupv3_wrap1_s7_clk = {
2213         .halt_reg = 0x18864,
2214         .halt_check = BRANCH_HALT_VOTED,
2215         .clkr = {
2216                 .enable_reg = 0x5200c,
2217                 .enable_mask = BIT(29),
2218                 .hw.init = &(struct clk_init_data){
2219                         .name = "gcc_qupv3_wrap1_s7_clk",
2220                         .parent_names = (const char *[]){
2221                                 "gcc_qupv3_wrap1_s7_clk_src",
2222                         },
2223                         .num_parents = 1,
2224                         .flags = CLK_SET_RATE_PARENT,
2225                         .ops = &clk_branch2_ops,
2226                 },
2227         },
2228 };
2229
2230 static struct clk_branch gcc_qupv3_wrap_0_m_ahb_clk = {
2231         .halt_reg = 0x17004,
2232         .halt_check = BRANCH_HALT_VOTED,
2233         .clkr = {
2234                 .enable_reg = 0x5200c,
2235                 .enable_mask = BIT(6),
2236                 .hw.init = &(struct clk_init_data){
2237                         .name = "gcc_qupv3_wrap_0_m_ahb_clk",
2238                         .ops = &clk_branch2_ops,
2239                 },
2240         },
2241 };
2242
2243 static struct clk_branch gcc_qupv3_wrap_0_s_ahb_clk = {
2244         .halt_reg = 0x17008,
2245         .halt_check = BRANCH_HALT_VOTED,
2246         .hwcg_reg = 0x17008,
2247         .hwcg_bit = 1,
2248         .clkr = {
2249                 .enable_reg = 0x5200c,
2250                 .enable_mask = BIT(7),
2251                 .hw.init = &(struct clk_init_data){
2252                         .name = "gcc_qupv3_wrap_0_s_ahb_clk",
2253                         .ops = &clk_branch2_ops,
2254                 },
2255         },
2256 };
2257
2258 static struct clk_branch gcc_qupv3_wrap_1_m_ahb_clk = {
2259         .halt_reg = 0x1800c,
2260         .halt_check = BRANCH_HALT_VOTED,
2261         .clkr = {
2262                 .enable_reg = 0x5200c,
2263                 .enable_mask = BIT(20),
2264                 .hw.init = &(struct clk_init_data){
2265                         .name = "gcc_qupv3_wrap_1_m_ahb_clk",
2266                         .ops = &clk_branch2_ops,
2267                 },
2268         },
2269 };
2270
2271 static struct clk_branch gcc_qupv3_wrap_1_s_ahb_clk = {
2272         .halt_reg = 0x18010,
2273         .halt_check = BRANCH_HALT_VOTED,
2274         .hwcg_reg = 0x18010,
2275         .hwcg_bit = 1,
2276         .clkr = {
2277                 .enable_reg = 0x5200c,
2278                 .enable_mask = BIT(21),
2279                 .hw.init = &(struct clk_init_data){
2280                         .name = "gcc_qupv3_wrap_1_s_ahb_clk",
2281                         .ops = &clk_branch2_ops,
2282                 },
2283         },
2284 };
2285
2286 static struct clk_branch gcc_sdcc2_ahb_clk = {
2287         .halt_reg = 0x14008,
2288         .halt_check = BRANCH_HALT,
2289         .clkr = {
2290                 .enable_reg = 0x14008,
2291                 .enable_mask = BIT(0),
2292                 .hw.init = &(struct clk_init_data){
2293                         .name = "gcc_sdcc2_ahb_clk",
2294                         .ops = &clk_branch2_ops,
2295                 },
2296         },
2297 };
2298
2299 static struct clk_branch gcc_sdcc2_apps_clk = {
2300         .halt_reg = 0x14004,
2301         .halt_check = BRANCH_HALT,
2302         .clkr = {
2303                 .enable_reg = 0x14004,
2304                 .enable_mask = BIT(0),
2305                 .hw.init = &(struct clk_init_data){
2306                         .name = "gcc_sdcc2_apps_clk",
2307                         .parent_names = (const char *[]){
2308                                 "gcc_sdcc2_apps_clk_src",
2309                         },
2310                         .num_parents = 1,
2311                         .flags = CLK_SET_RATE_PARENT,
2312                         .ops = &clk_branch2_ops,
2313                 },
2314         },
2315 };
2316
2317 static struct clk_branch gcc_sdcc4_ahb_clk = {
2318         .halt_reg = 0x16008,
2319         .halt_check = BRANCH_HALT,
2320         .clkr = {
2321                 .enable_reg = 0x16008,
2322                 .enable_mask = BIT(0),
2323                 .hw.init = &(struct clk_init_data){
2324                         .name = "gcc_sdcc4_ahb_clk",
2325                         .ops = &clk_branch2_ops,
2326                 },
2327         },
2328 };
2329
2330 static struct clk_branch gcc_sdcc4_apps_clk = {
2331         .halt_reg = 0x16004,
2332         .halt_check = BRANCH_HALT,
2333         .clkr = {
2334                 .enable_reg = 0x16004,
2335                 .enable_mask = BIT(0),
2336                 .hw.init = &(struct clk_init_data){
2337                         .name = "gcc_sdcc4_apps_clk",
2338                         .parent_names = (const char *[]){
2339                                 "gcc_sdcc4_apps_clk_src",
2340                         },
2341                         .num_parents = 1,
2342                         .flags = CLK_SET_RATE_PARENT,
2343                         .ops = &clk_branch2_ops,
2344                 },
2345         },
2346 };
2347
2348 static struct clk_branch gcc_sys_noc_cpuss_ahb_clk = {
2349         .halt_reg = 0x414c,
2350         .halt_check = BRANCH_HALT_VOTED,
2351         .clkr = {
2352                 .enable_reg = 0x52004,
2353                 .enable_mask = BIT(0),
2354                 .hw.init = &(struct clk_init_data){
2355                         .name = "gcc_sys_noc_cpuss_ahb_clk",
2356                         .parent_names = (const char *[]){
2357                                 "gcc_cpuss_ahb_clk_src",
2358                         },
2359                         .num_parents = 1,
2360                         .flags = CLK_SET_RATE_PARENT | CLK_IS_CRITICAL,
2361                         .ops = &clk_branch2_ops,
2362                 },
2363         },
2364 };
2365
2366 static struct clk_branch gcc_tsif_ahb_clk = {
2367         .halt_reg = 0x36004,
2368         .halt_check = BRANCH_HALT,
2369         .clkr = {
2370                 .enable_reg = 0x36004,
2371                 .enable_mask = BIT(0),
2372                 .hw.init = &(struct clk_init_data){
2373                         .name = "gcc_tsif_ahb_clk",
2374                         .ops = &clk_branch2_ops,
2375                 },
2376         },
2377 };
2378
2379 static struct clk_branch gcc_tsif_inactivity_timers_clk = {
2380         .halt_reg = 0x3600c,
2381         .halt_check = BRANCH_HALT,
2382         .clkr = {
2383                 .enable_reg = 0x3600c,
2384                 .enable_mask = BIT(0),
2385                 .hw.init = &(struct clk_init_data){
2386                         .name = "gcc_tsif_inactivity_timers_clk",
2387                         .ops = &clk_branch2_ops,
2388                 },
2389         },
2390 };
2391
2392 static struct clk_branch gcc_tsif_ref_clk = {
2393         .halt_reg = 0x36008,
2394         .halt_check = BRANCH_HALT,
2395         .clkr = {
2396                 .enable_reg = 0x36008,
2397                 .enable_mask = BIT(0),
2398                 .hw.init = &(struct clk_init_data){
2399                         .name = "gcc_tsif_ref_clk",
2400                         .parent_names = (const char *[]){
2401                                 "gcc_tsif_ref_clk_src",
2402                         },
2403                         .num_parents = 1,
2404                         .flags = CLK_SET_RATE_PARENT,
2405                         .ops = &clk_branch2_ops,
2406                 },
2407         },
2408 };
2409
2410 static struct clk_branch gcc_ufs_card_ahb_clk = {
2411         .halt_reg = 0x75010,
2412         .halt_check = BRANCH_HALT,
2413         .hwcg_reg = 0x75010,
2414         .hwcg_bit = 1,
2415         .clkr = {
2416                 .enable_reg = 0x75010,
2417                 .enable_mask = BIT(0),
2418                 .hw.init = &(struct clk_init_data){
2419                         .name = "gcc_ufs_card_ahb_clk",
2420                         .ops = &clk_branch2_ops,
2421                 },
2422         },
2423 };
2424
2425 static struct clk_branch gcc_ufs_card_axi_clk = {
2426         .halt_reg = 0x7500c,
2427         .halt_check = BRANCH_HALT,
2428         .hwcg_reg = 0x7500c,
2429         .hwcg_bit = 1,
2430         .clkr = {
2431                 .enable_reg = 0x7500c,
2432                 .enable_mask = BIT(0),
2433                 .hw.init = &(struct clk_init_data){
2434                         .name = "gcc_ufs_card_axi_clk",
2435                         .parent_names = (const char *[]){
2436                                 "gcc_ufs_card_axi_clk_src",
2437                         },
2438                         .num_parents = 1,
2439                         .flags = CLK_SET_RATE_PARENT,
2440                         .ops = &clk_branch2_ops,
2441                 },
2442         },
2443 };
2444
2445 static struct clk_branch gcc_ufs_card_clkref_clk = {
2446         .halt_reg = 0x8c004,
2447         .halt_check = BRANCH_HALT,
2448         .clkr = {
2449                 .enable_reg = 0x8c004,
2450                 .enable_mask = BIT(0),
2451                 .hw.init = &(struct clk_init_data){
2452                         .name = "gcc_ufs_card_clkref_clk",
2453                         .ops = &clk_branch2_ops,
2454                 },
2455         },
2456 };
2457
2458 static struct clk_branch gcc_ufs_card_ice_core_clk = {
2459         .halt_reg = 0x75058,
2460         .halt_check = BRANCH_HALT,
2461         .hwcg_reg = 0x75058,
2462         .hwcg_bit = 1,
2463         .clkr = {
2464                 .enable_reg = 0x75058,
2465                 .enable_mask = BIT(0),
2466                 .hw.init = &(struct clk_init_data){
2467                         .name = "gcc_ufs_card_ice_core_clk",
2468                         .parent_names = (const char *[]){
2469                                 "gcc_ufs_card_ice_core_clk_src",
2470                         },
2471                         .num_parents = 1,
2472                         .flags = CLK_SET_RATE_PARENT,
2473                         .ops = &clk_branch2_ops,
2474                 },
2475         },
2476 };
2477
2478 static struct clk_branch gcc_ufs_card_phy_aux_clk = {
2479         .halt_reg = 0x7508c,
2480         .halt_check = BRANCH_HALT,
2481         .hwcg_reg = 0x7508c,
2482         .hwcg_bit = 1,
2483         .clkr = {
2484                 .enable_reg = 0x7508c,
2485                 .enable_mask = BIT(0),
2486                 .hw.init = &(struct clk_init_data){
2487                         .name = "gcc_ufs_card_phy_aux_clk",
2488                         .parent_names = (const char *[]){
2489                                 "gcc_ufs_card_phy_aux_clk_src",
2490                         },
2491                         .num_parents = 1,
2492                         .flags = CLK_SET_RATE_PARENT,
2493                         .ops = &clk_branch2_ops,
2494                 },
2495         },
2496 };
2497
2498 static struct clk_branch gcc_ufs_card_rx_symbol_0_clk = {
2499         .halt_check = BRANCH_HALT_SKIP,
2500         .clkr = {
2501                 .enable_reg = 0x75018,
2502                 .enable_mask = BIT(0),
2503                 .hw.init = &(struct clk_init_data){
2504                         .name = "gcc_ufs_card_rx_symbol_0_clk",
2505                         .ops = &clk_branch2_ops,
2506                 },
2507         },
2508 };
2509
2510 static struct clk_branch gcc_ufs_card_rx_symbol_1_clk = {
2511         .halt_check = BRANCH_HALT_SKIP,
2512         .clkr = {
2513                 .enable_reg = 0x750a8,
2514                 .enable_mask = BIT(0),
2515                 .hw.init = &(struct clk_init_data){
2516                         .name = "gcc_ufs_card_rx_symbol_1_clk",
2517                         .ops = &clk_branch2_ops,
2518                 },
2519         },
2520 };
2521
2522 static struct clk_branch gcc_ufs_card_tx_symbol_0_clk = {
2523         .halt_check = BRANCH_HALT_SKIP,
2524         .clkr = {
2525                 .enable_reg = 0x75014,
2526                 .enable_mask = BIT(0),
2527                 .hw.init = &(struct clk_init_data){
2528                         .name = "gcc_ufs_card_tx_symbol_0_clk",
2529                         .ops = &clk_branch2_ops,
2530                 },
2531         },
2532 };
2533
2534 static struct clk_branch gcc_ufs_card_unipro_core_clk = {
2535         .halt_reg = 0x75054,
2536         .halt_check = BRANCH_HALT,
2537         .hwcg_reg = 0x75054,
2538         .hwcg_bit = 1,
2539         .clkr = {
2540                 .enable_reg = 0x75054,
2541                 .enable_mask = BIT(0),
2542                 .hw.init = &(struct clk_init_data){
2543                         .name = "gcc_ufs_card_unipro_core_clk",
2544                         .parent_names = (const char *[]){
2545                                 "gcc_ufs_card_unipro_core_clk_src",
2546                         },
2547                         .num_parents = 1,
2548                         .flags = CLK_SET_RATE_PARENT,
2549                         .ops = &clk_branch2_ops,
2550                 },
2551         },
2552 };
2553
2554 static struct clk_branch gcc_ufs_mem_clkref_clk = {
2555         .halt_reg = 0x8c000,
2556         .halt_check = BRANCH_HALT,
2557         .clkr = {
2558                 .enable_reg = 0x8c000,
2559                 .enable_mask = BIT(0),
2560                 .hw.init = &(struct clk_init_data){
2561                         .name = "gcc_ufs_mem_clkref_clk",
2562                         .ops = &clk_branch2_ops,
2563                 },
2564         },
2565 };
2566
2567 static struct clk_branch gcc_ufs_phy_ahb_clk = {
2568         .halt_reg = 0x77010,
2569         .halt_check = BRANCH_HALT,
2570         .hwcg_reg = 0x77010,
2571         .hwcg_bit = 1,
2572         .clkr = {
2573                 .enable_reg = 0x77010,
2574                 .enable_mask = BIT(0),
2575                 .hw.init = &(struct clk_init_data){
2576                         .name = "gcc_ufs_phy_ahb_clk",
2577                         .ops = &clk_branch2_ops,
2578                 },
2579         },
2580 };
2581
2582 static struct clk_branch gcc_ufs_phy_axi_clk = {
2583         .halt_reg = 0x7700c,
2584         .halt_check = BRANCH_HALT,
2585         .hwcg_reg = 0x7700c,
2586         .hwcg_bit = 1,
2587         .clkr = {
2588                 .enable_reg = 0x7700c,
2589                 .enable_mask = BIT(0),
2590                 .hw.init = &(struct clk_init_data){
2591                         .name = "gcc_ufs_phy_axi_clk",
2592                         .parent_names = (const char *[]){
2593                                 "gcc_ufs_phy_axi_clk_src",
2594                         },
2595                         .num_parents = 1,
2596                         .flags = CLK_SET_RATE_PARENT,
2597                         .ops = &clk_branch2_ops,
2598                 },
2599         },
2600 };
2601
2602 static struct clk_branch gcc_ufs_phy_ice_core_clk = {
2603         .halt_reg = 0x77058,
2604         .halt_check = BRANCH_HALT,
2605         .hwcg_reg = 0x77058,
2606         .hwcg_bit = 1,
2607         .clkr = {
2608                 .enable_reg = 0x77058,
2609                 .enable_mask = BIT(0),
2610                 .hw.init = &(struct clk_init_data){
2611                         .name = "gcc_ufs_phy_ice_core_clk",
2612                         .parent_names = (const char *[]){
2613                                 "gcc_ufs_phy_ice_core_clk_src",
2614                         },
2615                         .num_parents = 1,
2616                         .flags = CLK_SET_RATE_PARENT,
2617                         .ops = &clk_branch2_ops,
2618                 },
2619         },
2620 };
2621
2622 static struct clk_branch gcc_ufs_phy_phy_aux_clk = {
2623         .halt_reg = 0x7708c,
2624         .halt_check = BRANCH_HALT,
2625         .hwcg_reg = 0x7708c,
2626         .hwcg_bit = 1,
2627         .clkr = {
2628                 .enable_reg = 0x7708c,
2629                 .enable_mask = BIT(0),
2630                 .hw.init = &(struct clk_init_data){
2631                         .name = "gcc_ufs_phy_phy_aux_clk",
2632                         .parent_names = (const char *[]){
2633                                 "gcc_ufs_phy_phy_aux_clk_src",
2634                         },
2635                         .num_parents = 1,
2636                         .flags = CLK_SET_RATE_PARENT,
2637                         .ops = &clk_branch2_ops,
2638                 },
2639         },
2640 };
2641
2642 static struct clk_branch gcc_ufs_phy_rx_symbol_0_clk = {
2643         .halt_check = BRANCH_HALT_SKIP,
2644         .clkr = {
2645                 .enable_reg = 0x77018,
2646                 .enable_mask = BIT(0),
2647                 .hw.init = &(struct clk_init_data){
2648                         .name = "gcc_ufs_phy_rx_symbol_0_clk",
2649                         .ops = &clk_branch2_ops,
2650                 },
2651         },
2652 };
2653
2654 static struct clk_branch gcc_ufs_phy_rx_symbol_1_clk = {
2655         .halt_check = BRANCH_HALT_SKIP,
2656         .clkr = {
2657                 .enable_reg = 0x770a8,
2658                 .enable_mask = BIT(0),
2659                 .hw.init = &(struct clk_init_data){
2660                         .name = "gcc_ufs_phy_rx_symbol_1_clk",
2661                         .ops = &clk_branch2_ops,
2662                 },
2663         },
2664 };
2665
2666 static struct clk_branch gcc_ufs_phy_tx_symbol_0_clk = {
2667         .halt_check = BRANCH_HALT_SKIP,
2668         .clkr = {
2669                 .enable_reg = 0x77014,
2670                 .enable_mask = BIT(0),
2671                 .hw.init = &(struct clk_init_data){
2672                         .name = "gcc_ufs_phy_tx_symbol_0_clk",
2673                         .ops = &clk_branch2_ops,
2674                 },
2675         },
2676 };
2677
2678 static struct clk_branch gcc_ufs_phy_unipro_core_clk = {
2679         .halt_reg = 0x77054,
2680         .halt_check = BRANCH_HALT,
2681         .hwcg_reg = 0x77054,
2682         .hwcg_bit = 1,
2683         .clkr = {
2684                 .enable_reg = 0x77054,
2685                 .enable_mask = BIT(0),
2686                 .hw.init = &(struct clk_init_data){
2687                         .name = "gcc_ufs_phy_unipro_core_clk",
2688                         .parent_names = (const char *[]){
2689                                 "gcc_ufs_phy_unipro_core_clk_src",
2690                         },
2691                         .num_parents = 1,
2692                         .flags = CLK_SET_RATE_PARENT,
2693                         .ops = &clk_branch2_ops,
2694                 },
2695         },
2696 };
2697
2698 static struct clk_branch gcc_usb30_prim_master_clk = {
2699         .halt_reg = 0xf00c,
2700         .halt_check = BRANCH_HALT,
2701         .clkr = {
2702                 .enable_reg = 0xf00c,
2703                 .enable_mask = BIT(0),
2704                 .hw.init = &(struct clk_init_data){
2705                         .name = "gcc_usb30_prim_master_clk",
2706                         .parent_names = (const char *[]){
2707                                 "gcc_usb30_prim_master_clk_src",
2708                         },
2709                         .num_parents = 1,
2710                         .flags = CLK_SET_RATE_PARENT,
2711                         .ops = &clk_branch2_ops,
2712                 },
2713         },
2714 };
2715
2716 static struct clk_branch gcc_usb30_prim_mock_utmi_clk = {
2717         .halt_reg = 0xf014,
2718         .halt_check = BRANCH_HALT,
2719         .clkr = {
2720                 .enable_reg = 0xf014,
2721                 .enable_mask = BIT(0),
2722                 .hw.init = &(struct clk_init_data){
2723                         .name = "gcc_usb30_prim_mock_utmi_clk",
2724                         .parent_names = (const char *[]){
2725                                 "gcc_usb30_prim_mock_utmi_clk_src",
2726                         },
2727                         .num_parents = 1,
2728                         .flags = CLK_SET_RATE_PARENT,
2729                         .ops = &clk_branch2_ops,
2730                 },
2731         },
2732 };
2733
2734 static struct clk_branch gcc_usb30_prim_sleep_clk = {
2735         .halt_reg = 0xf010,
2736         .halt_check = BRANCH_HALT,
2737         .clkr = {
2738                 .enable_reg = 0xf010,
2739                 .enable_mask = BIT(0),
2740                 .hw.init = &(struct clk_init_data){
2741                         .name = "gcc_usb30_prim_sleep_clk",
2742                         .ops = &clk_branch2_ops,
2743                 },
2744         },
2745 };
2746
2747 static struct clk_branch gcc_usb30_sec_master_clk = {
2748         .halt_reg = 0x1000c,
2749         .halt_check = BRANCH_HALT,
2750         .clkr = {
2751                 .enable_reg = 0x1000c,
2752                 .enable_mask = BIT(0),
2753                 .hw.init = &(struct clk_init_data){
2754                         .name = "gcc_usb30_sec_master_clk",
2755                         .parent_names = (const char *[]){
2756                                 "gcc_usb30_sec_master_clk_src",
2757                         },
2758                         .num_parents = 1,
2759                         .flags = CLK_SET_RATE_PARENT,
2760                         .ops = &clk_branch2_ops,
2761                 },
2762         },
2763 };
2764
2765 static struct clk_branch gcc_usb30_sec_mock_utmi_clk = {
2766         .halt_reg = 0x10014,
2767         .halt_check = BRANCH_HALT,
2768         .clkr = {
2769                 .enable_reg = 0x10014,
2770                 .enable_mask = BIT(0),
2771                 .hw.init = &(struct clk_init_data){
2772                         .name = "gcc_usb30_sec_mock_utmi_clk",
2773                         .parent_names = (const char *[]){
2774                                 "gcc_usb30_sec_mock_utmi_clk_src",
2775                         },
2776                         .num_parents = 1,
2777                         .flags = CLK_SET_RATE_PARENT,
2778                         .ops = &clk_branch2_ops,
2779                 },
2780         },
2781 };
2782
2783 static struct clk_branch gcc_usb30_sec_sleep_clk = {
2784         .halt_reg = 0x10010,
2785         .halt_check = BRANCH_HALT,
2786         .clkr = {
2787                 .enable_reg = 0x10010,
2788                 .enable_mask = BIT(0),
2789                 .hw.init = &(struct clk_init_data){
2790                         .name = "gcc_usb30_sec_sleep_clk",
2791                         .ops = &clk_branch2_ops,
2792                 },
2793         },
2794 };
2795
2796 static struct clk_branch gcc_usb3_prim_clkref_clk = {
2797         .halt_reg = 0x8c008,
2798         .halt_check = BRANCH_HALT,
2799         .clkr = {
2800                 .enable_reg = 0x8c008,
2801                 .enable_mask = BIT(0),
2802                 .hw.init = &(struct clk_init_data){
2803                         .name = "gcc_usb3_prim_clkref_clk",
2804                         .ops = &clk_branch2_ops,
2805                 },
2806         },
2807 };
2808
2809 static struct clk_branch gcc_usb3_prim_phy_aux_clk = {
2810         .halt_reg = 0xf04c,
2811         .halt_check = BRANCH_HALT,
2812         .clkr = {
2813                 .enable_reg = 0xf04c,
2814                 .enable_mask = BIT(0),
2815                 .hw.init = &(struct clk_init_data){
2816                         .name = "gcc_usb3_prim_phy_aux_clk",
2817                         .parent_names = (const char *[]){
2818                                 "gcc_usb3_prim_phy_aux_clk_src",
2819                         },
2820                         .num_parents = 1,
2821                         .flags = CLK_SET_RATE_PARENT,
2822                         .ops = &clk_branch2_ops,
2823                 },
2824         },
2825 };
2826
2827 static struct clk_branch gcc_usb3_prim_phy_com_aux_clk = {
2828         .halt_reg = 0xf050,
2829         .halt_check = BRANCH_HALT,
2830         .clkr = {
2831                 .enable_reg = 0xf050,
2832                 .enable_mask = BIT(0),
2833                 .hw.init = &(struct clk_init_data){
2834                         .name = "gcc_usb3_prim_phy_com_aux_clk",
2835                         .parent_names = (const char *[]){
2836                                 "gcc_usb3_prim_phy_aux_clk_src",
2837                         },
2838                         .num_parents = 1,
2839                         .flags = CLK_SET_RATE_PARENT,
2840                         .ops = &clk_branch2_ops,
2841                 },
2842         },
2843 };
2844
2845 static struct clk_branch gcc_usb3_prim_phy_pipe_clk = {
2846         .halt_check = BRANCH_HALT_SKIP,
2847         .clkr = {
2848                 .enable_reg = 0xf054,
2849                 .enable_mask = BIT(0),
2850                 .hw.init = &(struct clk_init_data){
2851                         .name = "gcc_usb3_prim_phy_pipe_clk",
2852                         .ops = &clk_branch2_ops,
2853                 },
2854         },
2855 };
2856
2857 static struct clk_branch gcc_usb3_sec_clkref_clk = {
2858         .halt_reg = 0x8c028,
2859         .halt_check = BRANCH_HALT,
2860         .clkr = {
2861                 .enable_reg = 0x8c028,
2862                 .enable_mask = BIT(0),
2863                 .hw.init = &(struct clk_init_data){
2864                         .name = "gcc_usb3_sec_clkref_clk",
2865                         .ops = &clk_branch2_ops,
2866                 },
2867         },
2868 };
2869
2870 static struct clk_branch gcc_usb3_sec_phy_aux_clk = {
2871         .halt_reg = 0x1004c,
2872         .halt_check = BRANCH_HALT,
2873         .clkr = {
2874                 .enable_reg = 0x1004c,
2875                 .enable_mask = BIT(0),
2876                 .hw.init = &(struct clk_init_data){
2877                         .name = "gcc_usb3_sec_phy_aux_clk",
2878                         .parent_names = (const char *[]){
2879                                 "gcc_usb3_sec_phy_aux_clk_src",
2880                         },
2881                         .num_parents = 1,
2882                         .flags = CLK_SET_RATE_PARENT,
2883                         .ops = &clk_branch2_ops,
2884                 },
2885         },
2886 };
2887
2888 static struct clk_branch gcc_usb3_sec_phy_com_aux_clk = {
2889         .halt_reg = 0x10050,
2890         .halt_check = BRANCH_HALT,
2891         .clkr = {
2892                 .enable_reg = 0x10050,
2893                 .enable_mask = BIT(0),
2894                 .hw.init = &(struct clk_init_data){
2895                         .name = "gcc_usb3_sec_phy_com_aux_clk",
2896                         .parent_names = (const char *[]){
2897                                 "gcc_usb3_sec_phy_aux_clk_src",
2898                         },
2899                         .num_parents = 1,
2900                         .flags = CLK_SET_RATE_PARENT,
2901                         .ops = &clk_branch2_ops,
2902                 },
2903         },
2904 };
2905
2906 static struct clk_branch gcc_usb3_sec_phy_pipe_clk = {
2907         .halt_check = BRANCH_HALT_SKIP,
2908         .clkr = {
2909                 .enable_reg = 0x10054,
2910                 .enable_mask = BIT(0),
2911                 .hw.init = &(struct clk_init_data){
2912                         .name = "gcc_usb3_sec_phy_pipe_clk",
2913                         .ops = &clk_branch2_ops,
2914                 },
2915         },
2916 };
2917
2918 static struct clk_branch gcc_usb_phy_cfg_ahb2phy_clk = {
2919         .halt_reg = 0x6a004,
2920         .halt_check = BRANCH_HALT,
2921         .hwcg_reg = 0x6a004,
2922         .hwcg_bit = 1,
2923         .clkr = {
2924                 .enable_reg = 0x6a004,
2925                 .enable_mask = BIT(0),
2926                 .hw.init = &(struct clk_init_data){
2927                         .name = "gcc_usb_phy_cfg_ahb2phy_clk",
2928                         .ops = &clk_branch2_ops,
2929                 },
2930         },
2931 };
2932
2933 static struct clk_branch gcc_vdda_vs_clk = {
2934         .halt_reg = 0x7a00c,
2935         .halt_check = BRANCH_HALT,
2936         .clkr = {
2937                 .enable_reg = 0x7a00c,
2938                 .enable_mask = BIT(0),
2939                 .hw.init = &(struct clk_init_data){
2940                         .name = "gcc_vdda_vs_clk",
2941                         .parent_names = (const char *[]){
2942                                 "gcc_vsensor_clk_src",
2943                         },
2944                         .num_parents = 1,
2945                         .flags = CLK_SET_RATE_PARENT,
2946                         .ops = &clk_branch2_ops,
2947                 },
2948         },
2949 };
2950
2951 static struct clk_branch gcc_vddcx_vs_clk = {
2952         .halt_reg = 0x7a004,
2953         .halt_check = BRANCH_HALT,
2954         .clkr = {
2955                 .enable_reg = 0x7a004,
2956                 .enable_mask = BIT(0),
2957                 .hw.init = &(struct clk_init_data){
2958                         .name = "gcc_vddcx_vs_clk",
2959                         .parent_names = (const char *[]){
2960                                 "gcc_vsensor_clk_src",
2961                         },
2962                         .num_parents = 1,
2963                         .flags = CLK_SET_RATE_PARENT,
2964                         .ops = &clk_branch2_ops,
2965                 },
2966         },
2967 };
2968
2969 static struct clk_branch gcc_vddmx_vs_clk = {
2970         .halt_reg = 0x7a008,
2971         .halt_check = BRANCH_HALT,
2972         .clkr = {
2973                 .enable_reg = 0x7a008,
2974                 .enable_mask = BIT(0),
2975                 .hw.init = &(struct clk_init_data){
2976                         .name = "gcc_vddmx_vs_clk",
2977                         .parent_names = (const char *[]){
2978                                 "gcc_vsensor_clk_src",
2979                         },
2980                         .num_parents = 1,
2981                         .flags = CLK_SET_RATE_PARENT,
2982                         .ops = &clk_branch2_ops,
2983                 },
2984         },
2985 };
2986
2987 static struct clk_branch gcc_video_ahb_clk = {
2988         .halt_reg = 0xb004,
2989         .halt_check = BRANCH_HALT,
2990         .hwcg_reg = 0xb004,
2991         .hwcg_bit = 1,
2992         .clkr = {
2993                 .enable_reg = 0xb004,
2994                 .enable_mask = BIT(0),
2995                 .hw.init = &(struct clk_init_data){
2996                         .name = "gcc_video_ahb_clk",
2997                         .flags = CLK_IS_CRITICAL,
2998                         .ops = &clk_branch2_ops,
2999                 },
3000         },
3001 };
3002
3003 static struct clk_branch gcc_video_axi_clk = {
3004         .halt_reg = 0xb01c,
3005         .halt_check = BRANCH_VOTED,
3006         .clkr = {
3007                 .enable_reg = 0xb01c,
3008                 .enable_mask = BIT(0),
3009                 .hw.init = &(struct clk_init_data){
3010                         .name = "gcc_video_axi_clk",
3011                         .ops = &clk_branch2_ops,
3012                 },
3013         },
3014 };
3015
3016 static struct clk_branch gcc_video_xo_clk = {
3017         .halt_reg = 0xb028,
3018         .halt_check = BRANCH_HALT,
3019         .clkr = {
3020                 .enable_reg = 0xb028,
3021                 .enable_mask = BIT(0),
3022                 .hw.init = &(struct clk_init_data){
3023                         .name = "gcc_video_xo_clk",
3024                         .flags = CLK_IS_CRITICAL,
3025                         .ops = &clk_branch2_ops,
3026                 },
3027         },
3028 };
3029
3030 static struct clk_branch gcc_vs_ctrl_ahb_clk = {
3031         .halt_reg = 0x7a014,
3032         .halt_check = BRANCH_HALT,
3033         .hwcg_reg = 0x7a014,
3034         .hwcg_bit = 1,
3035         .clkr = {
3036                 .enable_reg = 0x7a014,
3037                 .enable_mask = BIT(0),
3038                 .hw.init = &(struct clk_init_data){
3039                         .name = "gcc_vs_ctrl_ahb_clk",
3040                         .ops = &clk_branch2_ops,
3041                 },
3042         },
3043 };
3044
3045 static struct clk_branch gcc_vs_ctrl_clk = {
3046         .halt_reg = 0x7a010,
3047         .halt_check = BRANCH_HALT,
3048         .clkr = {
3049                 .enable_reg = 0x7a010,
3050                 .enable_mask = BIT(0),
3051                 .hw.init = &(struct clk_init_data){
3052                         .name = "gcc_vs_ctrl_clk",
3053                         .parent_names = (const char *[]){
3054                                 "gcc_vs_ctrl_clk_src",
3055                         },
3056                         .num_parents = 1,
3057                         .flags = CLK_SET_RATE_PARENT,
3058                         .ops = &clk_branch2_ops,
3059                 },
3060         },
3061 };
3062
3063 static struct clk_branch gcc_cpuss_dvm_bus_clk = {
3064         .halt_reg = 0x48190,
3065         .halt_check = BRANCH_HALT,
3066         .clkr = {
3067                 .enable_reg = 0x48190,
3068                 .enable_mask = BIT(0),
3069                 .hw.init = &(struct clk_init_data){
3070                         .name = "gcc_cpuss_dvm_bus_clk",
3071                         .flags = CLK_IS_CRITICAL,
3072                         .ops = &clk_branch2_ops,
3073                 },
3074         },
3075 };
3076
3077 static struct clk_branch gcc_cpuss_gnoc_clk = {
3078         .halt_reg = 0x48004,
3079         .halt_check = BRANCH_HALT_VOTED,
3080         .hwcg_reg = 0x48004,
3081         .hwcg_bit = 1,
3082         .clkr = {
3083                 .enable_reg = 0x52004,
3084                 .enable_mask = BIT(22),
3085                 .hw.init = &(struct clk_init_data){
3086                         .name = "gcc_cpuss_gnoc_clk",
3087                         .flags = CLK_IS_CRITICAL,
3088                         .ops = &clk_branch2_ops,
3089                 },
3090         },
3091 };
3092
3093 static struct gdsc pcie_0_gdsc = {
3094         .gdscr = 0x6b004,
3095         .pd = {
3096                 .name = "pcie_0_gdsc",
3097         },
3098         .pwrsts = PWRSTS_OFF_ON,
3099         .flags = POLL_CFG_GDSCR,
3100 };
3101
3102 static struct gdsc pcie_1_gdsc = {
3103         .gdscr = 0x8d004,
3104         .pd = {
3105                 .name = "pcie_1_gdsc",
3106         },
3107         .pwrsts = PWRSTS_OFF_ON,
3108         .flags = POLL_CFG_GDSCR,
3109 };
3110
3111 static struct gdsc ufs_card_gdsc = {
3112         .gdscr = 0x75004,
3113         .pd = {
3114                 .name = "ufs_card_gdsc",
3115         },
3116         .pwrsts = PWRSTS_OFF_ON,
3117         .flags = POLL_CFG_GDSCR,
3118 };
3119
3120 static struct gdsc ufs_phy_gdsc = {
3121         .gdscr = 0x77004,
3122         .pd = {
3123                 .name = "ufs_phy_gdsc",
3124         },
3125         .pwrsts = PWRSTS_OFF_ON,
3126         .flags = POLL_CFG_GDSCR,
3127 };
3128
3129 static struct gdsc usb30_prim_gdsc = {
3130         .gdscr = 0xf004,
3131         .pd = {
3132                 .name = "usb30_prim_gdsc",
3133         },
3134         .pwrsts = PWRSTS_OFF_ON,
3135         .flags = POLL_CFG_GDSCR,
3136 };
3137
3138 static struct gdsc usb30_sec_gdsc = {
3139         .gdscr = 0x10004,
3140         .pd = {
3141                 .name = "usb30_sec_gdsc",
3142         },
3143         .pwrsts = PWRSTS_OFF_ON,
3144         .flags = POLL_CFG_GDSCR,
3145 };
3146
3147 static struct gdsc hlos1_vote_aggre_noc_mmu_audio_tbu_gdsc = {
3148         .gdscr = 0x7d030,
3149         .pd = {
3150                 .name = "hlos1_vote_aggre_noc_mmu_audio_tbu_gdsc",
3151         },
3152         .pwrsts = PWRSTS_OFF_ON,
3153         .flags = VOTABLE,
3154 };
3155
3156 static struct gdsc hlos1_vote_aggre_noc_mmu_pcie_tbu_gdsc = {
3157         .gdscr = 0x7d03c,
3158         .pd = {
3159                 .name = "hlos1_vote_aggre_noc_mmu_pcie_tbu_gdsc",
3160         },
3161         .pwrsts = PWRSTS_OFF_ON,
3162         .flags = VOTABLE,
3163 };
3164
3165 static struct gdsc hlos1_vote_aggre_noc_mmu_tbu1_gdsc = {
3166         .gdscr = 0x7d034,
3167         .pd = {
3168                 .name = "hlos1_vote_aggre_noc_mmu_tbu1_gdsc",
3169         },
3170         .pwrsts = PWRSTS_OFF_ON,
3171         .flags = VOTABLE,
3172 };
3173
3174 static struct gdsc hlos1_vote_aggre_noc_mmu_tbu2_gdsc = {
3175         .gdscr = 0x7d038,
3176         .pd = {
3177                 .name = "hlos1_vote_aggre_noc_mmu_tbu2_gdsc",
3178         },
3179         .pwrsts = PWRSTS_OFF_ON,
3180         .flags = VOTABLE,
3181 };
3182
3183 static struct gdsc hlos1_vote_mmnoc_mmu_tbu_hf0_gdsc = {
3184         .gdscr = 0x7d040,
3185         .pd = {
3186                 .name = "hlos1_vote_mmnoc_mmu_tbu_hf0_gdsc",
3187         },
3188         .pwrsts = PWRSTS_OFF_ON,
3189         .flags = VOTABLE,
3190 };
3191
3192 static struct gdsc hlos1_vote_mmnoc_mmu_tbu_hf1_gdsc = {
3193         .gdscr = 0x7d048,
3194         .pd = {
3195                 .name = "hlos1_vote_mmnoc_mmu_tbu_hf1_gdsc",
3196         },
3197         .pwrsts = PWRSTS_OFF_ON,
3198         .flags = VOTABLE,
3199 };
3200
3201 static struct gdsc hlos1_vote_mmnoc_mmu_tbu_sf_gdsc = {
3202         .gdscr = 0x7d044,
3203         .pd = {
3204                 .name = "hlos1_vote_mmnoc_mmu_tbu_sf_gdsc",
3205         },
3206         .pwrsts = PWRSTS_OFF_ON,
3207         .flags = VOTABLE,
3208 };
3209
3210 static struct clk_regmap *gcc_sdm845_clocks[] = {
3211         [GCC_AGGRE_NOC_PCIE_TBU_CLK] = &gcc_aggre_noc_pcie_tbu_clk.clkr,
3212         [GCC_AGGRE_UFS_CARD_AXI_CLK] = &gcc_aggre_ufs_card_axi_clk.clkr,
3213         [GCC_AGGRE_UFS_PHY_AXI_CLK] = &gcc_aggre_ufs_phy_axi_clk.clkr,
3214         [GCC_AGGRE_USB3_PRIM_AXI_CLK] = &gcc_aggre_usb3_prim_axi_clk.clkr,
3215         [GCC_AGGRE_USB3_SEC_AXI_CLK] = &gcc_aggre_usb3_sec_axi_clk.clkr,
3216         [GCC_APC_VS_CLK] = &gcc_apc_vs_clk.clkr,
3217         [GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr,
3218         [GCC_CAMERA_AHB_CLK] = &gcc_camera_ahb_clk.clkr,
3219         [GCC_CAMERA_AXI_CLK] = &gcc_camera_axi_clk.clkr,
3220         [GCC_CAMERA_XO_CLK] = &gcc_camera_xo_clk.clkr,
3221         [GCC_CE1_AHB_CLK] = &gcc_ce1_ahb_clk.clkr,
3222         [GCC_CE1_AXI_CLK] = &gcc_ce1_axi_clk.clkr,
3223         [GCC_CE1_CLK] = &gcc_ce1_clk.clkr,
3224         [GCC_CFG_NOC_USB3_PRIM_AXI_CLK] = &gcc_cfg_noc_usb3_prim_axi_clk.clkr,
3225         [GCC_CFG_NOC_USB3_SEC_AXI_CLK] = &gcc_cfg_noc_usb3_sec_axi_clk.clkr,
3226         [GCC_CPUSS_AHB_CLK] = &gcc_cpuss_ahb_clk.clkr,
3227         [GCC_CPUSS_AHB_CLK_SRC] = &gcc_cpuss_ahb_clk_src.clkr,
3228         [GCC_CPUSS_RBCPR_CLK] = &gcc_cpuss_rbcpr_clk.clkr,
3229         [GCC_CPUSS_RBCPR_CLK_SRC] = &gcc_cpuss_rbcpr_clk_src.clkr,
3230         [GCC_DDRSS_GPU_AXI_CLK] = &gcc_ddrss_gpu_axi_clk.clkr,
3231         [GCC_DISP_AHB_CLK] = &gcc_disp_ahb_clk.clkr,
3232         [GCC_DISP_AXI_CLK] = &gcc_disp_axi_clk.clkr,
3233         [GCC_DISP_GPLL0_CLK_SRC] = &gcc_disp_gpll0_clk_src.clkr,
3234         [GCC_DISP_GPLL0_DIV_CLK_SRC] = &gcc_disp_gpll0_div_clk_src.clkr,
3235         [GCC_DISP_XO_CLK] = &gcc_disp_xo_clk.clkr,
3236         [GCC_GP1_CLK] = &gcc_gp1_clk.clkr,
3237         [GCC_GP1_CLK_SRC] = &gcc_gp1_clk_src.clkr,
3238         [GCC_GP2_CLK] = &gcc_gp2_clk.clkr,
3239         [GCC_GP2_CLK_SRC] = &gcc_gp2_clk_src.clkr,
3240         [GCC_GP3_CLK] = &gcc_gp3_clk.clkr,
3241         [GCC_GP3_CLK_SRC] = &gcc_gp3_clk_src.clkr,
3242         [GCC_GPU_CFG_AHB_CLK] = &gcc_gpu_cfg_ahb_clk.clkr,
3243         [GCC_GPU_GPLL0_CLK_SRC] = &gcc_gpu_gpll0_clk_src.clkr,
3244         [GCC_GPU_GPLL0_DIV_CLK_SRC] = &gcc_gpu_gpll0_div_clk_src.clkr,
3245         [GCC_GPU_IREF_CLK] = &gcc_gpu_iref_clk.clkr,
3246         [GCC_GPU_MEMNOC_GFX_CLK] = &gcc_gpu_memnoc_gfx_clk.clkr,
3247         [GCC_GPU_SNOC_DVM_GFX_CLK] = &gcc_gpu_snoc_dvm_gfx_clk.clkr,
3248         [GCC_GPU_VS_CLK] = &gcc_gpu_vs_clk.clkr,
3249         [GCC_MSS_AXIS2_CLK] = &gcc_mss_axis2_clk.clkr,
3250         [GCC_MSS_CFG_AHB_CLK] = &gcc_mss_cfg_ahb_clk.clkr,
3251         [GCC_MSS_GPLL0_DIV_CLK_SRC] = &gcc_mss_gpll0_div_clk_src.clkr,
3252         [GCC_MSS_MFAB_AXIS_CLK] = &gcc_mss_mfab_axis_clk.clkr,
3253         [GCC_MSS_Q6_MEMNOC_AXI_CLK] = &gcc_mss_q6_memnoc_axi_clk.clkr,
3254         [GCC_MSS_SNOC_AXI_CLK] = &gcc_mss_snoc_axi_clk.clkr,
3255         [GCC_MSS_VS_CLK] = &gcc_mss_vs_clk.clkr,
3256         [GCC_PCIE_0_AUX_CLK] = &gcc_pcie_0_aux_clk.clkr,
3257         [GCC_PCIE_0_AUX_CLK_SRC] = &gcc_pcie_0_aux_clk_src.clkr,
3258         [GCC_PCIE_0_CFG_AHB_CLK] = &gcc_pcie_0_cfg_ahb_clk.clkr,
3259         [GCC_PCIE_0_CLKREF_CLK] = &gcc_pcie_0_clkref_clk.clkr,
3260         [GCC_PCIE_0_MSTR_AXI_CLK] = &gcc_pcie_0_mstr_axi_clk.clkr,
3261         [GCC_PCIE_0_PIPE_CLK] = &gcc_pcie_0_pipe_clk.clkr,
3262         [GCC_PCIE_0_SLV_AXI_CLK] = &gcc_pcie_0_slv_axi_clk.clkr,
3263         [GCC_PCIE_0_SLV_Q2A_AXI_CLK] = &gcc_pcie_0_slv_q2a_axi_clk.clkr,
3264         [GCC_PCIE_1_AUX_CLK] = &gcc_pcie_1_aux_clk.clkr,
3265         [GCC_PCIE_1_AUX_CLK_SRC] = &gcc_pcie_1_aux_clk_src.clkr,
3266         [GCC_PCIE_1_CFG_AHB_CLK] = &gcc_pcie_1_cfg_ahb_clk.clkr,
3267         [GCC_PCIE_1_CLKREF_CLK] = &gcc_pcie_1_clkref_clk.clkr,
3268         [GCC_PCIE_1_MSTR_AXI_CLK] = &gcc_pcie_1_mstr_axi_clk.clkr,
3269         [GCC_PCIE_1_PIPE_CLK] = &gcc_pcie_1_pipe_clk.clkr,
3270         [GCC_PCIE_1_SLV_AXI_CLK] = &gcc_pcie_1_slv_axi_clk.clkr,
3271         [GCC_PCIE_1_SLV_Q2A_AXI_CLK] = &gcc_pcie_1_slv_q2a_axi_clk.clkr,
3272         [GCC_PCIE_PHY_AUX_CLK] = &gcc_pcie_phy_aux_clk.clkr,
3273         [GCC_PCIE_PHY_REFGEN_CLK] = &gcc_pcie_phy_refgen_clk.clkr,
3274         [GCC_PCIE_PHY_REFGEN_CLK_SRC] = &gcc_pcie_phy_refgen_clk_src.clkr,
3275         [GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr,
3276         [GCC_PDM2_CLK_SRC] = &gcc_pdm2_clk_src.clkr,
3277         [GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr,
3278         [GCC_PDM_XO4_CLK] = &gcc_pdm_xo4_clk.clkr,
3279         [GCC_PRNG_AHB_CLK] = &gcc_prng_ahb_clk.clkr,
3280         [GCC_QMIP_CAMERA_AHB_CLK] = &gcc_qmip_camera_ahb_clk.clkr,
3281         [GCC_QMIP_DISP_AHB_CLK] = &gcc_qmip_disp_ahb_clk.clkr,
3282         [GCC_QMIP_VIDEO_AHB_CLK] = &gcc_qmip_video_ahb_clk.clkr,
3283         [GCC_QUPV3_WRAP0_S0_CLK] = &gcc_qupv3_wrap0_s0_clk.clkr,
3284         [GCC_QUPV3_WRAP0_S0_CLK_SRC] = &gcc_qupv3_wrap0_s0_clk_src.clkr,
3285         [GCC_QUPV3_WRAP0_S1_CLK] = &gcc_qupv3_wrap0_s1_clk.clkr,
3286         [GCC_QUPV3_WRAP0_S1_CLK_SRC] = &gcc_qupv3_wrap0_s1_clk_src.clkr,
3287         [GCC_QUPV3_WRAP0_S2_CLK] = &gcc_qupv3_wrap0_s2_clk.clkr,
3288         [GCC_QUPV3_WRAP0_S2_CLK_SRC] = &gcc_qupv3_wrap0_s2_clk_src.clkr,
3289         [GCC_QUPV3_WRAP0_S3_CLK] = &gcc_qupv3_wrap0_s3_clk.clkr,
3290         [GCC_QUPV3_WRAP0_S3_CLK_SRC] = &gcc_qupv3_wrap0_s3_clk_src.clkr,
3291         [GCC_QUPV3_WRAP0_S4_CLK] = &gcc_qupv3_wrap0_s4_clk.clkr,
3292         [GCC_QUPV3_WRAP0_S4_CLK_SRC] = &gcc_qupv3_wrap0_s4_clk_src.clkr,
3293         [GCC_QUPV3_WRAP0_S5_CLK] = &gcc_qupv3_wrap0_s5_clk.clkr,
3294         [GCC_QUPV3_WRAP0_S5_CLK_SRC] = &gcc_qupv3_wrap0_s5_clk_src.clkr,
3295         [GCC_QUPV3_WRAP0_S6_CLK] = &gcc_qupv3_wrap0_s6_clk.clkr,
3296         [GCC_QUPV3_WRAP0_S6_CLK_SRC] = &gcc_qupv3_wrap0_s6_clk_src.clkr,
3297         [GCC_QUPV3_WRAP0_S7_CLK] = &gcc_qupv3_wrap0_s7_clk.clkr,
3298         [GCC_QUPV3_WRAP0_S7_CLK_SRC] = &gcc_qupv3_wrap0_s7_clk_src.clkr,
3299         [GCC_QUPV3_WRAP1_S0_CLK] = &gcc_qupv3_wrap1_s0_clk.clkr,
3300         [GCC_QUPV3_WRAP1_S0_CLK_SRC] = &gcc_qupv3_wrap1_s0_clk_src.clkr,
3301         [GCC_QUPV3_WRAP1_S1_CLK] = &gcc_qupv3_wrap1_s1_clk.clkr,
3302         [GCC_QUPV3_WRAP1_S1_CLK_SRC] = &gcc_qupv3_wrap1_s1_clk_src.clkr,
3303         [GCC_QUPV3_WRAP1_S2_CLK] = &gcc_qupv3_wrap1_s2_clk.clkr,
3304         [GCC_QUPV3_WRAP1_S2_CLK_SRC] = &gcc_qupv3_wrap1_s2_clk_src.clkr,
3305         [GCC_QUPV3_WRAP1_S3_CLK] = &gcc_qupv3_wrap1_s3_clk.clkr,
3306         [GCC_QUPV3_WRAP1_S3_CLK_SRC] = &gcc_qupv3_wrap1_s3_clk_src.clkr,
3307         [GCC_QUPV3_WRAP1_S4_CLK] = &gcc_qupv3_wrap1_s4_clk.clkr,
3308         [GCC_QUPV3_WRAP1_S4_CLK_SRC] = &gcc_qupv3_wrap1_s4_clk_src.clkr,
3309         [GCC_QUPV3_WRAP1_S5_CLK] = &gcc_qupv3_wrap1_s5_clk.clkr,
3310         [GCC_QUPV3_WRAP1_S5_CLK_SRC] = &gcc_qupv3_wrap1_s5_clk_src.clkr,
3311         [GCC_QUPV3_WRAP1_S6_CLK] = &gcc_qupv3_wrap1_s6_clk.clkr,
3312         [GCC_QUPV3_WRAP1_S6_CLK_SRC] = &gcc_qupv3_wrap1_s6_clk_src.clkr,
3313         [GCC_QUPV3_WRAP1_S7_CLK] = &gcc_qupv3_wrap1_s7_clk.clkr,
3314         [GCC_QUPV3_WRAP1_S7_CLK_SRC] = &gcc_qupv3_wrap1_s7_clk_src.clkr,
3315         [GCC_QUPV3_WRAP_0_M_AHB_CLK] = &gcc_qupv3_wrap_0_m_ahb_clk.clkr,
3316         [GCC_QUPV3_WRAP_0_S_AHB_CLK] = &gcc_qupv3_wrap_0_s_ahb_clk.clkr,
3317         [GCC_QUPV3_WRAP_1_M_AHB_CLK] = &gcc_qupv3_wrap_1_m_ahb_clk.clkr,
3318         [GCC_QUPV3_WRAP_1_S_AHB_CLK] = &gcc_qupv3_wrap_1_s_ahb_clk.clkr,
3319         [GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr,
3320         [GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr,
3321         [GCC_SDCC2_APPS_CLK_SRC] = &gcc_sdcc2_apps_clk_src.clkr,
3322         [GCC_SDCC4_AHB_CLK] = &gcc_sdcc4_ahb_clk.clkr,
3323         [GCC_SDCC4_APPS_CLK] = &gcc_sdcc4_apps_clk.clkr,
3324         [GCC_SDCC4_APPS_CLK_SRC] = &gcc_sdcc4_apps_clk_src.clkr,
3325         [GCC_SYS_NOC_CPUSS_AHB_CLK] = &gcc_sys_noc_cpuss_ahb_clk.clkr,
3326         [GCC_TSIF_AHB_CLK] = &gcc_tsif_ahb_clk.clkr,
3327         [GCC_TSIF_INACTIVITY_TIMERS_CLK] =
3328                                         &gcc_tsif_inactivity_timers_clk.clkr,
3329         [GCC_TSIF_REF_CLK] = &gcc_tsif_ref_clk.clkr,
3330         [GCC_TSIF_REF_CLK_SRC] = &gcc_tsif_ref_clk_src.clkr,
3331         [GCC_UFS_CARD_AHB_CLK] = &gcc_ufs_card_ahb_clk.clkr,
3332         [GCC_UFS_CARD_AXI_CLK] = &gcc_ufs_card_axi_clk.clkr,
3333         [GCC_UFS_CARD_AXI_CLK_SRC] = &gcc_ufs_card_axi_clk_src.clkr,
3334         [GCC_UFS_CARD_CLKREF_CLK] = &gcc_ufs_card_clkref_clk.clkr,
3335         [GCC_UFS_CARD_ICE_CORE_CLK] = &gcc_ufs_card_ice_core_clk.clkr,
3336         [GCC_UFS_CARD_ICE_CORE_CLK_SRC] = &gcc_ufs_card_ice_core_clk_src.clkr,
3337         [GCC_UFS_CARD_PHY_AUX_CLK] = &gcc_ufs_card_phy_aux_clk.clkr,
3338         [GCC_UFS_CARD_PHY_AUX_CLK_SRC] = &gcc_ufs_card_phy_aux_clk_src.clkr,
3339         [GCC_UFS_CARD_RX_SYMBOL_0_CLK] = &gcc_ufs_card_rx_symbol_0_clk.clkr,
3340         [GCC_UFS_CARD_RX_SYMBOL_1_CLK] = &gcc_ufs_card_rx_symbol_1_clk.clkr,
3341         [GCC_UFS_CARD_TX_SYMBOL_0_CLK] = &gcc_ufs_card_tx_symbol_0_clk.clkr,
3342         [GCC_UFS_CARD_UNIPRO_CORE_CLK] = &gcc_ufs_card_unipro_core_clk.clkr,
3343         [GCC_UFS_CARD_UNIPRO_CORE_CLK_SRC] =
3344                                         &gcc_ufs_card_unipro_core_clk_src.clkr,
3345         [GCC_UFS_MEM_CLKREF_CLK] = &gcc_ufs_mem_clkref_clk.clkr,
3346         [GCC_UFS_PHY_AHB_CLK] = &gcc_ufs_phy_ahb_clk.clkr,
3347         [GCC_UFS_PHY_AXI_CLK] = &gcc_ufs_phy_axi_clk.clkr,
3348         [GCC_UFS_PHY_AXI_CLK_SRC] = &gcc_ufs_phy_axi_clk_src.clkr,
3349         [GCC_UFS_PHY_ICE_CORE_CLK] = &gcc_ufs_phy_ice_core_clk.clkr,
3350         [GCC_UFS_PHY_ICE_CORE_CLK_SRC] = &gcc_ufs_phy_ice_core_clk_src.clkr,
3351         [GCC_UFS_PHY_PHY_AUX_CLK] = &gcc_ufs_phy_phy_aux_clk.clkr,
3352         [GCC_UFS_PHY_PHY_AUX_CLK_SRC] = &gcc_ufs_phy_phy_aux_clk_src.clkr,
3353         [GCC_UFS_PHY_RX_SYMBOL_0_CLK] = &gcc_ufs_phy_rx_symbol_0_clk.clkr,
3354         [GCC_UFS_PHY_RX_SYMBOL_1_CLK] = &gcc_ufs_phy_rx_symbol_1_clk.clkr,
3355         [GCC_UFS_PHY_TX_SYMBOL_0_CLK] = &gcc_ufs_phy_tx_symbol_0_clk.clkr,
3356         [GCC_UFS_PHY_UNIPRO_CORE_CLK] = &gcc_ufs_phy_unipro_core_clk.clkr,
3357         [GCC_UFS_PHY_UNIPRO_CORE_CLK_SRC] =
3358                                         &gcc_ufs_phy_unipro_core_clk_src.clkr,
3359         [GCC_USB30_PRIM_MASTER_CLK] = &gcc_usb30_prim_master_clk.clkr,
3360         [GCC_USB30_PRIM_MASTER_CLK_SRC] = &gcc_usb30_prim_master_clk_src.clkr,
3361         [GCC_USB30_PRIM_MOCK_UTMI_CLK] = &gcc_usb30_prim_mock_utmi_clk.clkr,
3362         [GCC_USB30_PRIM_MOCK_UTMI_CLK_SRC] =
3363                                         &gcc_usb30_prim_mock_utmi_clk_src.clkr,
3364         [GCC_USB30_PRIM_SLEEP_CLK] = &gcc_usb30_prim_sleep_clk.clkr,
3365         [GCC_USB30_SEC_MASTER_CLK] = &gcc_usb30_sec_master_clk.clkr,
3366         [GCC_USB30_SEC_MASTER_CLK_SRC] = &gcc_usb30_sec_master_clk_src.clkr,
3367         [GCC_USB30_SEC_MOCK_UTMI_CLK] = &gcc_usb30_sec_mock_utmi_clk.clkr,
3368         [GCC_USB30_SEC_MOCK_UTMI_CLK_SRC] =
3369                                         &gcc_usb30_sec_mock_utmi_clk_src.clkr,
3370         [GCC_USB30_SEC_SLEEP_CLK] = &gcc_usb30_sec_sleep_clk.clkr,
3371         [GCC_USB3_PRIM_CLKREF_CLK] = &gcc_usb3_prim_clkref_clk.clkr,
3372         [GCC_USB3_PRIM_PHY_AUX_CLK] = &gcc_usb3_prim_phy_aux_clk.clkr,
3373         [GCC_USB3_PRIM_PHY_AUX_CLK_SRC] = &gcc_usb3_prim_phy_aux_clk_src.clkr,
3374         [GCC_USB3_PRIM_PHY_COM_AUX_CLK] = &gcc_usb3_prim_phy_com_aux_clk.clkr,
3375         [GCC_USB3_PRIM_PHY_PIPE_CLK] = &gcc_usb3_prim_phy_pipe_clk.clkr,
3376         [GCC_USB3_SEC_CLKREF_CLK] = &gcc_usb3_sec_clkref_clk.clkr,
3377         [GCC_USB3_SEC_PHY_AUX_CLK] = &gcc_usb3_sec_phy_aux_clk.clkr,
3378         [GCC_USB3_SEC_PHY_AUX_CLK_SRC] = &gcc_usb3_sec_phy_aux_clk_src.clkr,
3379         [GCC_USB3_SEC_PHY_COM_AUX_CLK] = &gcc_usb3_sec_phy_com_aux_clk.clkr,
3380         [GCC_USB3_SEC_PHY_PIPE_CLK] = &gcc_usb3_sec_phy_pipe_clk.clkr,
3381         [GCC_USB_PHY_CFG_AHB2PHY_CLK] = &gcc_usb_phy_cfg_ahb2phy_clk.clkr,
3382         [GCC_VDDA_VS_CLK] = &gcc_vdda_vs_clk.clkr,
3383         [GCC_VDDCX_VS_CLK] = &gcc_vddcx_vs_clk.clkr,
3384         [GCC_VDDMX_VS_CLK] = &gcc_vddmx_vs_clk.clkr,
3385         [GCC_VIDEO_AHB_CLK] = &gcc_video_ahb_clk.clkr,
3386         [GCC_VIDEO_AXI_CLK] = &gcc_video_axi_clk.clkr,
3387         [GCC_VIDEO_XO_CLK] = &gcc_video_xo_clk.clkr,
3388         [GCC_VS_CTRL_AHB_CLK] = &gcc_vs_ctrl_ahb_clk.clkr,
3389         [GCC_VS_CTRL_CLK] = &gcc_vs_ctrl_clk.clkr,
3390         [GCC_VS_CTRL_CLK_SRC] = &gcc_vs_ctrl_clk_src.clkr,
3391         [GCC_VSENSOR_CLK_SRC] = &gcc_vsensor_clk_src.clkr,
3392         [GPLL0] = &gpll0.clkr,
3393         [GPLL0_OUT_EVEN] = &gpll0_out_even.clkr,
3394         [GPLL4] = &gpll4.clkr,
3395         [GCC_CPUSS_DVM_BUS_CLK] = &gcc_cpuss_dvm_bus_clk.clkr,
3396         [GCC_CPUSS_GNOC_CLK] = &gcc_cpuss_gnoc_clk.clkr,
3397 };
3398
3399 static const struct qcom_reset_map gcc_sdm845_resets[] = {
3400         [GCC_MMSS_BCR] = { 0xb000 },
3401         [GCC_PCIE_0_BCR] = { 0x6b000 },
3402         [GCC_PCIE_1_BCR] = { 0x8d000 },
3403         [GCC_PCIE_PHY_BCR] = { 0x6f000 },
3404         [GCC_PDM_BCR] = { 0x33000 },
3405         [GCC_PRNG_BCR] = { 0x34000 },
3406         [GCC_QUPV3_WRAPPER_0_BCR] = { 0x17000 },
3407         [GCC_QUPV3_WRAPPER_1_BCR] = { 0x18000 },
3408         [GCC_QUSB2PHY_PRIM_BCR] = { 0x12000 },
3409         [GCC_QUSB2PHY_SEC_BCR] = { 0x12004 },
3410         [GCC_SDCC2_BCR] = { 0x14000 },
3411         [GCC_SDCC4_BCR] = { 0x16000 },
3412         [GCC_TSIF_BCR] = { 0x36000 },
3413         [GCC_UFS_CARD_BCR] = { 0x75000 },
3414         [GCC_UFS_PHY_BCR] = { 0x77000 },
3415         [GCC_USB30_PRIM_BCR] = { 0xf000 },
3416         [GCC_USB30_SEC_BCR] = { 0x10000 },
3417         [GCC_USB3_PHY_PRIM_BCR] = { 0x50000 },
3418         [GCC_USB3PHY_PHY_PRIM_BCR] = { 0x50004 },
3419         [GCC_USB3_DP_PHY_PRIM_BCR] = { 0x50008 },
3420         [GCC_USB3_PHY_SEC_BCR] = { 0x5000c },
3421         [GCC_USB3PHY_PHY_SEC_BCR] = { 0x50010 },
3422         [GCC_USB3_DP_PHY_SEC_BCR] = { 0x50014 },
3423         [GCC_USB_PHY_CFG_AHB2PHY_BCR] = { 0x6a000 },
3424         [GCC_PCIE_0_PHY_BCR] = { 0x6c01c },
3425         [GCC_PCIE_1_PHY_BCR] = { 0x8e01c },
3426 };
3427
3428 static struct gdsc *gcc_sdm845_gdscs[] = {
3429         [PCIE_0_GDSC] = &pcie_0_gdsc,
3430         [PCIE_1_GDSC] = &pcie_1_gdsc,
3431         [UFS_CARD_GDSC] = &ufs_card_gdsc,
3432         [UFS_PHY_GDSC] = &ufs_phy_gdsc,
3433         [USB30_PRIM_GDSC] = &usb30_prim_gdsc,
3434         [USB30_SEC_GDSC] = &usb30_sec_gdsc,
3435         [HLOS1_VOTE_AGGRE_NOC_MMU_AUDIO_TBU_GDSC] =
3436                         &hlos1_vote_aggre_noc_mmu_audio_tbu_gdsc,
3437         [HLOS1_VOTE_AGGRE_NOC_MMU_PCIE_TBU_GDSC] =
3438                         &hlos1_vote_aggre_noc_mmu_pcie_tbu_gdsc,
3439         [HLOS1_VOTE_AGGRE_NOC_MMU_TBU1_GDSC] =
3440                         &hlos1_vote_aggre_noc_mmu_tbu1_gdsc,
3441         [HLOS1_VOTE_AGGRE_NOC_MMU_TBU2_GDSC] =
3442                         &hlos1_vote_aggre_noc_mmu_tbu2_gdsc,
3443         [HLOS1_VOTE_MMNOC_MMU_TBU_HF0_GDSC] =
3444                         &hlos1_vote_mmnoc_mmu_tbu_hf0_gdsc,
3445         [HLOS1_VOTE_MMNOC_MMU_TBU_HF1_GDSC] =
3446                         &hlos1_vote_mmnoc_mmu_tbu_hf1_gdsc,
3447         [HLOS1_VOTE_MMNOC_MMU_TBU_SF_GDSC] = &hlos1_vote_mmnoc_mmu_tbu_sf_gdsc,
3448 };
3449
3450 static const struct regmap_config gcc_sdm845_regmap_config = {
3451         .reg_bits       = 32,
3452         .reg_stride     = 4,
3453         .val_bits       = 32,
3454         .max_register   = 0x182090,
3455         .fast_io        = true,
3456 };
3457
3458 static const struct qcom_cc_desc gcc_sdm845_desc = {
3459         .config = &gcc_sdm845_regmap_config,
3460         .clks = gcc_sdm845_clocks,
3461         .num_clks = ARRAY_SIZE(gcc_sdm845_clocks),
3462         .resets = gcc_sdm845_resets,
3463         .num_resets = ARRAY_SIZE(gcc_sdm845_resets),
3464         .gdscs = gcc_sdm845_gdscs,
3465         .num_gdscs = ARRAY_SIZE(gcc_sdm845_gdscs),
3466 };
3467
3468 static const struct of_device_id gcc_sdm845_match_table[] = {
3469         { .compatible = "qcom,gcc-sdm845" },
3470         { }
3471 };
3472 MODULE_DEVICE_TABLE(of, gcc_sdm845_match_table);
3473
3474 static int gcc_sdm845_probe(struct platform_device *pdev)
3475 {
3476         struct regmap *regmap;
3477
3478         regmap = qcom_cc_map(pdev, &gcc_sdm845_desc);
3479         if (IS_ERR(regmap))
3480                 return PTR_ERR(regmap);
3481
3482         /* Disable the GPLL0 active input to MMSS and GPU via MISC registers */
3483         regmap_update_bits(regmap, 0x09ffc, 0x3, 0x3);
3484         regmap_update_bits(regmap, 0x71028, 0x3, 0x3);
3485
3486         return qcom_cc_really_probe(pdev, &gcc_sdm845_desc, regmap);
3487 }
3488
3489 static struct platform_driver gcc_sdm845_driver = {
3490         .probe          = gcc_sdm845_probe,
3491         .driver         = {
3492                 .name   = "gcc-sdm845",
3493                 .of_match_table = gcc_sdm845_match_table,
3494         },
3495 };
3496
3497 static int __init gcc_sdm845_init(void)
3498 {
3499         return platform_driver_register(&gcc_sdm845_driver);
3500 }
3501 subsys_initcall(gcc_sdm845_init);
3502
3503 static void __exit gcc_sdm845_exit(void)
3504 {
3505         platform_driver_unregister(&gcc_sdm845_driver);
3506 }
3507 module_exit(gcc_sdm845_exit);
3508
3509 MODULE_DESCRIPTION("QTI GCC SDM845 Driver");
3510 MODULE_LICENSE("GPL v2");
3511 MODULE_ALIAS("platform:gcc-sdm845");