GNU Linux-libre 6.1.24-gnu
[releases.git] / drivers / clk / qcom / gcc-sc8180x.c
1 // SPDX-License-Identifier: GPL-2.0
2 /*
3  * Copyright (c) 2018-2019, The Linux Foundation. All rights reserved.
4  * Copyright (c) 2020-2021, Linaro Ltd.
5  */
6
7 #include <linux/bitops.h>
8 #include <linux/clk-provider.h>
9 #include <linux/err.h>
10 #include <linux/kernel.h>
11 #include <linux/module.h>
12 #include <linux/of.h>
13 #include <linux/of_device.h>
14 #include <linux/platform_device.h>
15 #include <linux/regmap.h>
16 #include <linux/reset-controller.h>
17
18 #include <dt-bindings/clock/qcom,gcc-sc8180x.h>
19
20 #include "common.h"
21 #include "clk-alpha-pll.h"
22 #include "clk-branch.h"
23 #include "clk-pll.h"
24 #include "clk-rcg.h"
25 #include "clk-regmap.h"
26 #include "gdsc.h"
27 #include "reset.h"
28
29 enum {
30         P_AUD_REF_CLK,
31         P_BI_TCXO,
32         P_GPLL0_OUT_EVEN,
33         P_GPLL0_OUT_MAIN,
34         P_GPLL1_OUT_MAIN,
35         P_GPLL2_OUT_MAIN,
36         P_GPLL4_OUT_MAIN,
37         P_GPLL5_OUT_MAIN,
38         P_GPLL7_OUT_MAIN,
39         P_GPLL9_OUT_MAIN,
40         P_SLEEP_CLK,
41 };
42
43 static struct pll_vco trion_vco[] = {
44         { 249600000, 2000000000, 0 },
45 };
46
47 static struct clk_alpha_pll gpll0 = {
48         .offset = 0x0,
49         .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_TRION],
50         .vco_table = trion_vco,
51         .num_vco = ARRAY_SIZE(trion_vco),
52         .clkr = {
53                 .enable_reg = 0x52000,
54                 .enable_mask = BIT(0),
55                 .hw.init = &(struct clk_init_data){
56                         .name = "gpll0",
57                         .parent_data = &(const struct clk_parent_data){
58                                 .fw_name = "bi_tcxo",
59                         },
60                         .num_parents = 1,
61                         .ops = &clk_alpha_pll_fixed_trion_ops,
62                 },
63         },
64 };
65
66 static const struct clk_div_table post_div_table_trion_even[] = {
67         { 0x0, 1 },
68         { 0x1, 2 },
69         { 0x3, 4 },
70         { 0x7, 8 },
71         { }
72 };
73
74 static struct clk_alpha_pll_postdiv gpll0_out_even = {
75         .offset = 0x0,
76         .post_div_shift = 8,
77         .post_div_table = post_div_table_trion_even,
78         .num_post_div = ARRAY_SIZE(post_div_table_trion_even),
79         .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_TRION],
80         .width = 4,
81         .clkr.hw.init = &(struct clk_init_data){
82                 .name = "gpll0_out_even",
83                 .parent_hws = (const struct clk_hw *[]){ &gpll0.clkr.hw },
84                 .num_parents = 1,
85                 .ops = &clk_alpha_pll_postdiv_trion_ops,
86         },
87 };
88
89 static struct clk_alpha_pll gpll1 = {
90         .offset = 0x1000,
91         .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_TRION],
92         .vco_table = trion_vco,
93         .num_vco = ARRAY_SIZE(trion_vco),
94         .clkr = {
95                 .enable_reg = 0x52000,
96                 .enable_mask = BIT(1),
97                 .hw.init = &(struct clk_init_data){
98                         .name = "gpll1",
99                         .parent_data = &(const struct clk_parent_data){
100                                 .fw_name = "bi_tcxo",
101                         },
102                         .num_parents = 1,
103                         .ops = &clk_alpha_pll_fixed_trion_ops,
104                 },
105         },
106 };
107
108 static struct clk_alpha_pll gpll4 = {
109         .offset = 0x76000,
110         .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_TRION],
111         .vco_table = trion_vco,
112         .num_vco = ARRAY_SIZE(trion_vco),
113         .clkr = {
114                 .enable_reg = 0x52000,
115                 .enable_mask = BIT(4),
116                 .hw.init = &(struct clk_init_data){
117                         .name = "gpll4",
118                         .parent_data = &(const struct clk_parent_data){
119                                 .fw_name = "bi_tcxo",
120                         },
121                         .num_parents = 1,
122                         .ops = &clk_alpha_pll_fixed_trion_ops,
123                 },
124         },
125 };
126
127 static struct clk_alpha_pll gpll7 = {
128         .offset = 0x1a000,
129         .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_TRION],
130         .vco_table = trion_vco,
131         .num_vco = ARRAY_SIZE(trion_vco),
132         .clkr = {
133                 .enable_reg = 0x52000,
134                 .enable_mask = BIT(7),
135                 .hw.init = &(struct clk_init_data){
136                         .name = "gpll7",
137                         .parent_data = &(const struct clk_parent_data){
138                                 .fw_name = "bi_tcxo",
139                         },
140                         .num_parents = 1,
141                         .ops = &clk_alpha_pll_fixed_trion_ops,
142                 },
143         },
144 };
145
146 static const struct parent_map gcc_parent_map_0[] = {
147         { P_BI_TCXO, 0 },
148         { P_GPLL0_OUT_MAIN, 1 },
149         { P_GPLL0_OUT_EVEN, 6 },
150 };
151
152 static const struct clk_parent_data gcc_parents_0[] = {
153         { .fw_name = "bi_tcxo" },
154         { .hw = &gpll0.clkr.hw },
155         { .hw = &gpll0_out_even.clkr.hw },
156 };
157
158 static const struct parent_map gcc_parent_map_1[] = {
159         { P_BI_TCXO, 0 },
160         { P_GPLL0_OUT_MAIN, 1 },
161         { P_SLEEP_CLK, 5 },
162         { P_GPLL0_OUT_EVEN, 6 },
163 };
164
165 static const struct clk_parent_data gcc_parents_1[] = {
166         { .fw_name = "bi_tcxo", },
167         { .hw = &gpll0.clkr.hw },
168         { .fw_name = "sleep_clk", },
169         { .hw = &gpll0_out_even.clkr.hw },
170 };
171
172 static const struct parent_map gcc_parent_map_2[] = {
173         { P_BI_TCXO, 0 },
174         { P_SLEEP_CLK, 5 },
175 };
176
177 static const struct clk_parent_data gcc_parents_2[] = {
178         { .fw_name = "bi_tcxo", },
179         { .fw_name = "sleep_clk", },
180 };
181
182 static const struct parent_map gcc_parent_map_3[] = {
183         { P_BI_TCXO, 0 },
184         { P_GPLL0_OUT_MAIN, 1 },
185         { P_GPLL2_OUT_MAIN, 2 },
186         { P_GPLL5_OUT_MAIN, 3 },
187         { P_GPLL1_OUT_MAIN, 4 },
188         { P_GPLL4_OUT_MAIN, 5 },
189         { P_GPLL0_OUT_EVEN, 6 },
190 };
191
192 static const struct clk_parent_data gcc_parents_3[] = {
193         { .fw_name = "bi_tcxo", },
194         { .hw = &gpll0.clkr.hw },
195         { .name = "gpll2" },
196         { .name = "gpll5" },
197         { .hw = &gpll1.clkr.hw },
198         { .hw = &gpll4.clkr.hw },
199         { .hw = &gpll0_out_even.clkr.hw },
200 };
201
202 static const struct parent_map gcc_parent_map_4[] = {
203         { P_BI_TCXO, 0 },
204 };
205
206 static const struct clk_parent_data gcc_parents_4[] = {
207         { .fw_name = "bi_tcxo", },
208 };
209
210 static const struct parent_map gcc_parent_map_5[] = {
211         { P_BI_TCXO, 0 },
212         { P_GPLL0_OUT_MAIN, 1 },
213 };
214
215 static const struct clk_parent_data gcc_parents_5[] = {
216         { .fw_name = "bi_tcxo", },
217         { .hw = &gpll0.clkr.hw },
218 };
219
220 static const struct parent_map gcc_parent_map_6[] = {
221         { P_BI_TCXO, 0 },
222         { P_GPLL0_OUT_MAIN, 1 },
223         { P_GPLL7_OUT_MAIN, 3 },
224         { P_GPLL0_OUT_EVEN, 6 },
225 };
226
227 static const struct clk_parent_data gcc_parents_6[] = {
228         { .fw_name = "bi_tcxo", },
229         { .hw = &gpll0.clkr.hw },
230         { .hw = &gpll7.clkr.hw },
231         { .hw = &gpll0_out_even.clkr.hw },
232 };
233
234 static const struct parent_map gcc_parent_map_7[] = {
235         { P_BI_TCXO, 0 },
236         { P_GPLL0_OUT_MAIN, 1 },
237         { P_GPLL9_OUT_MAIN, 2 },
238         { P_GPLL4_OUT_MAIN, 5 },
239         { P_GPLL0_OUT_EVEN, 6 },
240 };
241
242 static const struct clk_parent_data gcc_parents_7[] = {
243         { .fw_name = "bi_tcxo", },
244         { .hw = &gpll0.clkr.hw },
245         { .name = "gppl9" },
246         { .hw = &gpll4.clkr.hw },
247         { .hw = &gpll0_out_even.clkr.hw },
248 };
249
250 static const struct parent_map gcc_parent_map_8[] = {
251         { P_BI_TCXO, 0 },
252         { P_GPLL0_OUT_MAIN, 1 },
253         { P_AUD_REF_CLK, 2 },
254         { P_GPLL0_OUT_EVEN, 6 },
255 };
256
257 static const struct clk_parent_data gcc_parents_8[] = {
258         { .fw_name = "bi_tcxo", },
259         { .hw = &gpll0.clkr.hw },
260         { .name = "aud_ref_clk" },
261         { .hw = &gpll0_out_even.clkr.hw },
262 };
263
264 static const struct freq_tbl ftbl_gcc_cpuss_ahb_clk_src[] = {
265         F(19200000, P_BI_TCXO, 1, 0, 0),
266         F(50000000, P_GPLL0_OUT_MAIN, 12, 0, 0),
267         F(100000000, P_GPLL0_OUT_MAIN, 6, 0, 0),
268         { }
269 };
270
271 static struct clk_rcg2 gcc_cpuss_ahb_clk_src = {
272         .cmd_rcgr = 0x48014,
273         .mnd_width = 0,
274         .hid_width = 5,
275         .parent_map = gcc_parent_map_0,
276         .freq_tbl = ftbl_gcc_cpuss_ahb_clk_src,
277         .clkr.hw.init = &(struct clk_init_data){
278                 .name = "gcc_cpuss_ahb_clk_src",
279                 .parent_data = gcc_parents_0,
280                 .num_parents = ARRAY_SIZE(gcc_parents_0),
281                 .flags = CLK_SET_RATE_PARENT,
282                 .ops = &clk_rcg2_ops,
283         },
284 };
285
286 static const struct freq_tbl ftbl_gcc_emac_ptp_clk_src[] = {
287         F(19200000, P_BI_TCXO, 1, 0, 0),
288         F(50000000, P_GPLL0_OUT_EVEN, 6, 0, 0),
289         F(125000000, P_GPLL7_OUT_MAIN, 4, 0, 0),
290         F(250000000, P_GPLL7_OUT_MAIN, 2, 0, 0),
291         { }
292 };
293
294 static struct clk_rcg2 gcc_emac_ptp_clk_src = {
295         .cmd_rcgr = 0x6038,
296         .mnd_width = 0,
297         .hid_width = 5,
298         .parent_map = gcc_parent_map_6,
299         .freq_tbl = ftbl_gcc_emac_ptp_clk_src,
300         .clkr.hw.init = &(struct clk_init_data){
301                 .name = "gcc_emac_ptp_clk_src",
302                 .parent_data = gcc_parents_6,
303                 .num_parents = ARRAY_SIZE(gcc_parents_6),
304                 .flags = CLK_SET_RATE_PARENT,
305                 .ops = &clk_rcg2_ops,
306         },
307 };
308
309 static const struct freq_tbl ftbl_gcc_emac_rgmii_clk_src[] = {
310         F(2500000, P_BI_TCXO, 1, 25, 192),
311         F(5000000, P_BI_TCXO, 1, 25, 96),
312         F(19200000, P_BI_TCXO, 1, 0, 0),
313         F(25000000, P_GPLL0_OUT_EVEN, 12, 0, 0),
314         F(50000000, P_GPLL0_OUT_EVEN, 6, 0, 0),
315         F(125000000, P_GPLL7_OUT_MAIN, 4, 0, 0),
316         F(250000000, P_GPLL7_OUT_MAIN, 2, 0, 0),
317         { }
318 };
319
320 static struct clk_rcg2 gcc_emac_rgmii_clk_src = {
321         .cmd_rcgr = 0x601c,
322         .mnd_width = 8,
323         .hid_width = 5,
324         .parent_map = gcc_parent_map_6,
325         .freq_tbl = ftbl_gcc_emac_rgmii_clk_src,
326         .clkr.hw.init = &(struct clk_init_data){
327                 .name = "gcc_emac_rgmii_clk_src",
328                 .parent_data = gcc_parents_6,
329                 .num_parents = ARRAY_SIZE(gcc_parents_6),
330                 .flags = CLK_SET_RATE_PARENT,
331                 .ops = &clk_rcg2_ops,
332         },
333 };
334
335 static const struct freq_tbl ftbl_gcc_gp1_clk_src[] = {
336         F(19200000, P_BI_TCXO, 1, 0, 0),
337         F(25000000, P_GPLL0_OUT_EVEN, 12, 0, 0),
338         F(50000000, P_GPLL0_OUT_EVEN, 6, 0, 0),
339         F(100000000, P_GPLL0_OUT_MAIN, 6, 0, 0),
340         F(200000000, P_GPLL0_OUT_MAIN, 3, 0, 0),
341         { }
342 };
343
344 static struct clk_rcg2 gcc_gp1_clk_src = {
345         .cmd_rcgr = 0x64004,
346         .mnd_width = 8,
347         .hid_width = 5,
348         .parent_map = gcc_parent_map_1,
349         .freq_tbl = ftbl_gcc_gp1_clk_src,
350         .clkr.hw.init = &(struct clk_init_data){
351                 .name = "gcc_gp1_clk_src",
352                 .parent_data = gcc_parents_1,
353                 .num_parents = ARRAY_SIZE(gcc_parents_1),
354                 .flags = CLK_SET_RATE_PARENT,
355                 .ops = &clk_rcg2_ops,
356         },
357 };
358
359 static struct clk_rcg2 gcc_gp2_clk_src = {
360         .cmd_rcgr = 0x65004,
361         .mnd_width = 8,
362         .hid_width = 5,
363         .parent_map = gcc_parent_map_1,
364         .freq_tbl = ftbl_gcc_gp1_clk_src,
365         .clkr.hw.init = &(struct clk_init_data){
366                 .name = "gcc_gp2_clk_src",
367                 .parent_data = gcc_parents_1,
368                 .num_parents = ARRAY_SIZE(gcc_parents_1),
369                 .flags = CLK_SET_RATE_PARENT,
370                 .ops = &clk_rcg2_ops,
371         },
372 };
373
374 static struct clk_rcg2 gcc_gp3_clk_src = {
375         .cmd_rcgr = 0x66004,
376         .mnd_width = 8,
377         .hid_width = 5,
378         .parent_map = gcc_parent_map_1,
379         .freq_tbl = ftbl_gcc_gp1_clk_src,
380         .clkr.hw.init = &(struct clk_init_data){
381                 .name = "gcc_gp3_clk_src",
382                 .parent_data = gcc_parents_1,
383                 .num_parents = ARRAY_SIZE(gcc_parents_1),
384                 .flags = CLK_SET_RATE_PARENT,
385                 .ops = &clk_rcg2_ops,
386         },
387 };
388
389 static struct clk_rcg2 gcc_gp4_clk_src = {
390         .cmd_rcgr = 0xbe004,
391         .mnd_width = 8,
392         .hid_width = 5,
393         .parent_map = gcc_parent_map_1,
394         .freq_tbl = ftbl_gcc_gp1_clk_src,
395         .clkr.hw.init = &(struct clk_init_data){
396                 .name = "gcc_gp4_clk_src",
397                 .parent_data = gcc_parents_1,
398                 .num_parents = ARRAY_SIZE(gcc_parents_1),
399                 .flags = CLK_SET_RATE_PARENT,
400                 .ops = &clk_rcg2_ops,
401         },
402 };
403
404 static struct clk_rcg2 gcc_gp5_clk_src = {
405         .cmd_rcgr = 0xbf004,
406         .mnd_width = 8,
407         .hid_width = 5,
408         .parent_map = gcc_parent_map_1,
409         .freq_tbl = ftbl_gcc_gp1_clk_src,
410         .clkr.hw.init = &(struct clk_init_data){
411                 .name = "gcc_gp5_clk_src",
412                 .parent_data = gcc_parents_1,
413                 .num_parents = ARRAY_SIZE(gcc_parents_1),
414                 .flags = CLK_SET_RATE_PARENT,
415                 .ops = &clk_rcg2_ops,
416         },
417 };
418
419 static const struct freq_tbl ftbl_gcc_npu_axi_clk_src[] = {
420         F(19200000, P_BI_TCXO, 1, 0, 0),
421         F(60000000, P_GPLL0_OUT_EVEN, 5, 0, 0),
422         F(150000000, P_GPLL0_OUT_EVEN, 2, 0, 0),
423         F(200000000, P_GPLL0_OUT_MAIN, 3, 0, 0),
424         F(300000000, P_GPLL0_OUT_MAIN, 2, 0, 0),
425         F(403000000, P_GPLL4_OUT_MAIN, 2, 0, 0),
426         F(533000000, P_GPLL1_OUT_MAIN, 2, 0, 0),
427         { }
428 };
429
430 static struct clk_rcg2 gcc_npu_axi_clk_src = {
431         .cmd_rcgr = 0x4d014,
432         .mnd_width = 0,
433         .hid_width = 5,
434         .parent_map = gcc_parent_map_3,
435         .freq_tbl = ftbl_gcc_npu_axi_clk_src,
436         .clkr.hw.init = &(struct clk_init_data){
437                 .name = "gcc_npu_axi_clk_src",
438                 .parent_data = gcc_parents_3,
439                 .num_parents = ARRAY_SIZE(gcc_parents_3),
440                 .flags = CLK_SET_RATE_PARENT,
441                 .ops = &clk_rcg2_ops,
442         },
443 };
444
445 static const struct freq_tbl ftbl_gcc_pcie_0_aux_clk_src[] = {
446         F(9600000, P_BI_TCXO, 2, 0, 0),
447         F(19200000, P_BI_TCXO, 1, 0, 0),
448         { }
449 };
450
451 static struct clk_rcg2 gcc_pcie_0_aux_clk_src = {
452         .cmd_rcgr = 0x6b02c,
453         .mnd_width = 16,
454         .hid_width = 5,
455         .parent_map = gcc_parent_map_2,
456         .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
457         .clkr.hw.init = &(struct clk_init_data){
458                 .name = "gcc_pcie_0_aux_clk_src",
459                 .parent_data = gcc_parents_2,
460                 .num_parents = ARRAY_SIZE(gcc_parents_2),
461                 .flags = CLK_SET_RATE_PARENT,
462                 .ops = &clk_rcg2_ops,
463         },
464 };
465
466 static struct clk_rcg2 gcc_pcie_1_aux_clk_src = {
467         .cmd_rcgr = 0x8d02c,
468         .mnd_width = 16,
469         .hid_width = 5,
470         .parent_map = gcc_parent_map_2,
471         .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
472         .clkr.hw.init = &(struct clk_init_data){
473                 .name = "gcc_pcie_1_aux_clk_src",
474                 .parent_data = gcc_parents_2,
475                 .num_parents = ARRAY_SIZE(gcc_parents_2),
476                 .flags = CLK_SET_RATE_PARENT,
477                 .ops = &clk_rcg2_ops,
478         },
479 };
480
481 static struct clk_rcg2 gcc_pcie_2_aux_clk_src = {
482         .cmd_rcgr = 0x9d02c,
483         .mnd_width = 16,
484         .hid_width = 5,
485         .parent_map = gcc_parent_map_2,
486         .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
487         .clkr.hw.init = &(struct clk_init_data){
488                 .name = "gcc_pcie_2_aux_clk_src",
489                 .parent_data = gcc_parents_2,
490                 .num_parents = ARRAY_SIZE(gcc_parents_2),
491                 .flags = CLK_SET_RATE_PARENT,
492                 .ops = &clk_rcg2_ops,
493         },
494 };
495
496 static struct clk_rcg2 gcc_pcie_3_aux_clk_src = {
497         .cmd_rcgr = 0xa302c,
498         .mnd_width = 16,
499         .hid_width = 5,
500         .parent_map = gcc_parent_map_2,
501         .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
502         .clkr.hw.init = &(struct clk_init_data){
503                 .name = "gcc_pcie_3_aux_clk_src",
504                 .parent_data = gcc_parents_2,
505                 .num_parents = ARRAY_SIZE(gcc_parents_2),
506                 .flags = CLK_SET_RATE_PARENT,
507                 .ops = &clk_rcg2_ops,
508         },
509 };
510
511 static const struct freq_tbl ftbl_gcc_pcie_phy_refgen_clk_src[] = {
512         F(19200000, P_BI_TCXO, 1, 0, 0),
513         F(100000000, P_GPLL0_OUT_MAIN, 6, 0, 0),
514         { }
515 };
516
517 static struct clk_rcg2 gcc_pcie_phy_refgen_clk_src = {
518         .cmd_rcgr = 0x6f014,
519         .mnd_width = 0,
520         .hid_width = 5,
521         .parent_map = gcc_parent_map_0,
522         .freq_tbl = ftbl_gcc_pcie_phy_refgen_clk_src,
523         .clkr.hw.init = &(struct clk_init_data){
524                 .name = "gcc_pcie_phy_refgen_clk_src",
525                 .parent_data = gcc_parents_0,
526                 .num_parents = ARRAY_SIZE(gcc_parents_0),
527                 .flags = CLK_SET_RATE_PARENT,
528                 .ops = &clk_rcg2_ops,
529         },
530 };
531
532 static const struct freq_tbl ftbl_gcc_pdm2_clk_src[] = {
533         F(9600000, P_BI_TCXO, 2, 0, 0),
534         F(19200000, P_BI_TCXO, 1, 0, 0),
535         F(60000000, P_GPLL0_OUT_MAIN, 10, 0, 0),
536         { }
537 };
538
539 static struct clk_rcg2 gcc_pdm2_clk_src = {
540         .cmd_rcgr = 0x33010,
541         .mnd_width = 0,
542         .hid_width = 5,
543         .parent_map = gcc_parent_map_0,
544         .freq_tbl = ftbl_gcc_pdm2_clk_src,
545         .clkr.hw.init = &(struct clk_init_data){
546                 .name = "gcc_pdm2_clk_src",
547                 .parent_data = gcc_parents_0,
548                 .num_parents = ARRAY_SIZE(gcc_parents_0),
549                 .flags = CLK_SET_RATE_PARENT,
550                 .ops = &clk_rcg2_ops,
551         },
552 };
553
554 static const struct freq_tbl ftbl_gcc_qspi_1_core_clk_src[] = {
555         F(19200000, P_BI_TCXO, 1, 0, 0),
556         F(75000000, P_GPLL0_OUT_EVEN, 4, 0, 0),
557         F(150000000, P_GPLL0_OUT_MAIN, 4, 0, 0),
558         F(300000000, P_GPLL0_OUT_MAIN, 2, 0, 0),
559         { }
560 };
561
562 static struct clk_rcg2 gcc_qspi_1_core_clk_src = {
563         .cmd_rcgr = 0x4a00c,
564         .mnd_width = 0,
565         .hid_width = 5,
566         .parent_map = gcc_parent_map_0,
567         .freq_tbl = ftbl_gcc_qspi_1_core_clk_src,
568         .clkr.hw.init = &(struct clk_init_data){
569                 .name = "gcc_qspi_1_core_clk_src",
570                 .parent_data = gcc_parents_0,
571                 .num_parents = ARRAY_SIZE(gcc_parents_0),
572                 .flags = CLK_SET_RATE_PARENT,
573                 .ops = &clk_rcg2_ops,
574         },
575 };
576
577 static struct clk_rcg2 gcc_qspi_core_clk_src = {
578         .cmd_rcgr = 0x4b008,
579         .mnd_width = 0,
580         .hid_width = 5,
581         .parent_map = gcc_parent_map_0,
582         .freq_tbl = ftbl_gcc_qspi_1_core_clk_src,
583         .clkr.hw.init = &(struct clk_init_data){
584                 .name = "gcc_qspi_core_clk_src",
585                 .parent_data = gcc_parents_0,
586                 .num_parents = ARRAY_SIZE(gcc_parents_0),
587                 .flags = CLK_SET_RATE_PARENT,
588                 .ops = &clk_rcg2_ops,
589         },
590 };
591
592 static const struct freq_tbl ftbl_gcc_qupv3_wrap0_s0_clk_src[] = {
593         F(7372800, P_GPLL0_OUT_EVEN, 1, 384, 15625),
594         F(14745600, P_GPLL0_OUT_EVEN, 1, 768, 15625),
595         F(19200000, P_BI_TCXO, 1, 0, 0),
596         F(29491200, P_GPLL0_OUT_EVEN, 1, 1536, 15625),
597         F(32000000, P_GPLL0_OUT_EVEN, 1, 8, 75),
598         F(48000000, P_GPLL0_OUT_EVEN, 1, 4, 25),
599         F(50000000, P_GPLL0_OUT_EVEN, 6, 0, 0),
600         F(64000000, P_GPLL0_OUT_EVEN, 1, 16, 75),
601         F(75000000, P_GPLL0_OUT_EVEN, 4, 0, 0),
602         F(80000000, P_GPLL0_OUT_EVEN, 1, 4, 15),
603         F(96000000, P_GPLL0_OUT_EVEN, 1, 8, 25),
604         F(100000000, P_GPLL0_OUT_MAIN, 6, 0, 0),
605         F(102400000, P_GPLL0_OUT_EVEN, 1, 128, 375),
606         F(112000000, P_GPLL0_OUT_EVEN, 1, 28, 75),
607         F(117964800, P_GPLL0_OUT_EVEN, 1, 6144, 15625),
608         F(120000000, P_GPLL0_OUT_EVEN, 2.5, 0, 0),
609         F(128000000, P_GPLL0_OUT_MAIN, 1, 16, 75),
610         { }
611 };
612
613 static struct clk_rcg2 gcc_qupv3_wrap0_s0_clk_src = {
614         .cmd_rcgr = 0x17148,
615         .mnd_width = 16,
616         .hid_width = 5,
617         .parent_map = gcc_parent_map_0,
618         .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
619         .clkr.hw.init = &(struct clk_init_data){
620                 .name = "gcc_qupv3_wrap0_s0_clk_src",
621                 .parent_data = gcc_parents_0,
622                 .num_parents = ARRAY_SIZE(gcc_parents_0),
623                 .flags = CLK_SET_RATE_PARENT,
624                 .ops = &clk_rcg2_ops,
625         },
626 };
627
628 static struct clk_rcg2 gcc_qupv3_wrap0_s1_clk_src = {
629         .cmd_rcgr = 0x17278,
630         .mnd_width = 16,
631         .hid_width = 5,
632         .parent_map = gcc_parent_map_0,
633         .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
634         .clkr.hw.init = &(struct clk_init_data){
635                 .name = "gcc_qupv3_wrap0_s1_clk_src",
636                 .parent_data = gcc_parents_0,
637                 .num_parents = ARRAY_SIZE(gcc_parents_0),
638                 .flags = CLK_SET_RATE_PARENT,
639                 .ops = &clk_rcg2_ops,
640         },
641 };
642
643 static struct clk_rcg2 gcc_qupv3_wrap0_s2_clk_src = {
644         .cmd_rcgr = 0x173a8,
645         .mnd_width = 16,
646         .hid_width = 5,
647         .parent_map = gcc_parent_map_0,
648         .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
649         .clkr.hw.init = &(struct clk_init_data){
650                 .name = "gcc_qupv3_wrap0_s2_clk_src",
651                 .parent_data = gcc_parents_0,
652                 .num_parents = ARRAY_SIZE(gcc_parents_0),
653                 .flags = CLK_SET_RATE_PARENT,
654                 .ops = &clk_rcg2_ops,
655         },
656 };
657
658 static struct clk_rcg2 gcc_qupv3_wrap0_s3_clk_src = {
659         .cmd_rcgr = 0x174d8,
660         .mnd_width = 16,
661         .hid_width = 5,
662         .parent_map = gcc_parent_map_0,
663         .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
664         .clkr.hw.init = &(struct clk_init_data){
665                 .name = "gcc_qupv3_wrap0_s3_clk_src",
666                 .parent_data = gcc_parents_0,
667                 .num_parents = ARRAY_SIZE(gcc_parents_0),
668                 .flags = CLK_SET_RATE_PARENT,
669                 .ops = &clk_rcg2_ops,
670         },
671 };
672
673 static struct clk_rcg2 gcc_qupv3_wrap0_s4_clk_src = {
674         .cmd_rcgr = 0x17608,
675         .mnd_width = 16,
676         .hid_width = 5,
677         .parent_map = gcc_parent_map_0,
678         .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
679         .clkr.hw.init = &(struct clk_init_data){
680                 .name = "gcc_qupv3_wrap0_s4_clk_src",
681                 .parent_data = gcc_parents_0,
682                 .num_parents = ARRAY_SIZE(gcc_parents_0),
683                 .flags = CLK_SET_RATE_PARENT,
684                 .ops = &clk_rcg2_ops,
685         },
686 };
687
688 static struct clk_rcg2 gcc_qupv3_wrap0_s5_clk_src = {
689         .cmd_rcgr = 0x17738,
690         .mnd_width = 16,
691         .hid_width = 5,
692         .parent_map = gcc_parent_map_0,
693         .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
694         .clkr.hw.init = &(struct clk_init_data){
695                 .name = "gcc_qupv3_wrap0_s5_clk_src",
696                 .parent_data = gcc_parents_0,
697                 .num_parents = ARRAY_SIZE(gcc_parents_0),
698                 .flags = CLK_SET_RATE_PARENT,
699                 .ops = &clk_rcg2_ops,
700         },
701 };
702
703 static struct clk_rcg2 gcc_qupv3_wrap0_s6_clk_src = {
704         .cmd_rcgr = 0x17868,
705         .mnd_width = 16,
706         .hid_width = 5,
707         .parent_map = gcc_parent_map_0,
708         .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
709         .clkr.hw.init = &(struct clk_init_data){
710                 .name = "gcc_qupv3_wrap0_s6_clk_src",
711                 .parent_data = gcc_parents_0,
712                 .num_parents = ARRAY_SIZE(gcc_parents_0),
713                 .flags = CLK_SET_RATE_PARENT,
714                 .ops = &clk_rcg2_ops,
715         },
716 };
717
718 static struct clk_rcg2 gcc_qupv3_wrap0_s7_clk_src = {
719         .cmd_rcgr = 0x17998,
720         .mnd_width = 16,
721         .hid_width = 5,
722         .parent_map = gcc_parent_map_0,
723         .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
724         .clkr.hw.init = &(struct clk_init_data){
725                 .name = "gcc_qupv3_wrap0_s7_clk_src",
726                 .parent_data = gcc_parents_0,
727                 .num_parents = ARRAY_SIZE(gcc_parents_0),
728                 .flags = CLK_SET_RATE_PARENT,
729                 .ops = &clk_rcg2_ops,
730         },
731 };
732
733 static struct clk_rcg2 gcc_qupv3_wrap1_s0_clk_src = {
734         .cmd_rcgr = 0x18148,
735         .mnd_width = 16,
736         .hid_width = 5,
737         .parent_map = gcc_parent_map_0,
738         .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
739         .clkr.hw.init = &(struct clk_init_data){
740                 .name = "gcc_qupv3_wrap1_s0_clk_src",
741                 .parent_data = gcc_parents_0,
742                 .num_parents = ARRAY_SIZE(gcc_parents_0),
743                 .flags = CLK_SET_RATE_PARENT,
744                 .ops = &clk_rcg2_ops,
745         },
746 };
747
748 static struct clk_rcg2 gcc_qupv3_wrap1_s1_clk_src = {
749         .cmd_rcgr = 0x18278,
750         .mnd_width = 16,
751         .hid_width = 5,
752         .parent_map = gcc_parent_map_0,
753         .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
754         .clkr.hw.init = &(struct clk_init_data){
755                 .name = "gcc_qupv3_wrap1_s1_clk_src",
756                 .parent_data = gcc_parents_0,
757                 .num_parents = ARRAY_SIZE(gcc_parents_0),
758                 .flags = CLK_SET_RATE_PARENT,
759                 .ops = &clk_rcg2_ops,
760         },
761 };
762
763 static struct clk_rcg2 gcc_qupv3_wrap1_s2_clk_src = {
764         .cmd_rcgr = 0x183a8,
765         .mnd_width = 16,
766         .hid_width = 5,
767         .parent_map = gcc_parent_map_0,
768         .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
769         .clkr.hw.init = &(struct clk_init_data){
770                 .name = "gcc_qupv3_wrap1_s2_clk_src",
771                 .parent_data = gcc_parents_0,
772                 .num_parents = ARRAY_SIZE(gcc_parents_0),
773                 .flags = CLK_SET_RATE_PARENT,
774                 .ops = &clk_rcg2_ops,
775         },
776 };
777
778 static struct clk_rcg2 gcc_qupv3_wrap1_s3_clk_src = {
779         .cmd_rcgr = 0x184d8,
780         .mnd_width = 16,
781         .hid_width = 5,
782         .parent_map = gcc_parent_map_0,
783         .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
784         .clkr.hw.init = &(struct clk_init_data){
785                 .name = "gcc_qupv3_wrap1_s3_clk_src",
786                 .parent_data = gcc_parents_0,
787                 .num_parents = ARRAY_SIZE(gcc_parents_0),
788                 .flags = CLK_SET_RATE_PARENT,
789                 .ops = &clk_rcg2_ops,
790         },
791 };
792
793 static struct clk_rcg2 gcc_qupv3_wrap1_s4_clk_src = {
794         .cmd_rcgr = 0x18608,
795         .mnd_width = 16,
796         .hid_width = 5,
797         .parent_map = gcc_parent_map_0,
798         .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
799         .clkr.hw.init = &(struct clk_init_data){
800                 .name = "gcc_qupv3_wrap1_s4_clk_src",
801                 .parent_data = gcc_parents_0,
802                 .num_parents = ARRAY_SIZE(gcc_parents_0),
803                 .flags = CLK_SET_RATE_PARENT,
804                 .ops = &clk_rcg2_ops,
805         },
806 };
807
808 static struct clk_rcg2 gcc_qupv3_wrap1_s5_clk_src = {
809         .cmd_rcgr = 0x18738,
810         .mnd_width = 16,
811         .hid_width = 5,
812         .parent_map = gcc_parent_map_0,
813         .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
814         .clkr.hw.init = &(struct clk_init_data){
815                 .name = "gcc_qupv3_wrap1_s5_clk_src",
816                 .parent_data = gcc_parents_0,
817                 .num_parents = ARRAY_SIZE(gcc_parents_0),
818                 .flags = CLK_SET_RATE_PARENT,
819                 .ops = &clk_rcg2_ops,
820         },
821 };
822
823 static struct clk_rcg2 gcc_qupv3_wrap2_s0_clk_src = {
824         .cmd_rcgr = 0x1e148,
825         .mnd_width = 16,
826         .hid_width = 5,
827         .parent_map = gcc_parent_map_0,
828         .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
829         .clkr.hw.init = &(struct clk_init_data){
830                 .name = "gcc_qupv3_wrap2_s0_clk_src",
831                 .parent_data = gcc_parents_0,
832                 .num_parents = ARRAY_SIZE(gcc_parents_0),
833                 .flags = CLK_SET_RATE_PARENT,
834                 .ops = &clk_rcg2_ops,
835         },
836 };
837
838 static struct clk_rcg2 gcc_qupv3_wrap2_s1_clk_src = {
839         .cmd_rcgr = 0x1e278,
840         .mnd_width = 16,
841         .hid_width = 5,
842         .parent_map = gcc_parent_map_0,
843         .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
844         .clkr.hw.init = &(struct clk_init_data){
845                 .name = "gcc_qupv3_wrap2_s1_clk_src",
846                 .parent_data = gcc_parents_0,
847                 .num_parents = ARRAY_SIZE(gcc_parents_0),
848                 .flags = CLK_SET_RATE_PARENT,
849                 .ops = &clk_rcg2_ops,
850         },
851 };
852
853 static struct clk_rcg2 gcc_qupv3_wrap2_s2_clk_src = {
854         .cmd_rcgr = 0x1e3a8,
855         .mnd_width = 16,
856         .hid_width = 5,
857         .parent_map = gcc_parent_map_0,
858         .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
859         .clkr.hw.init = &(struct clk_init_data){
860                 .name = "gcc_qupv3_wrap2_s2_clk_src",
861                 .parent_data = gcc_parents_0,
862                 .num_parents = ARRAY_SIZE(gcc_parents_0),
863                 .flags = CLK_SET_RATE_PARENT,
864                 .ops = &clk_rcg2_ops,
865         },
866 };
867
868 static struct clk_rcg2 gcc_qupv3_wrap2_s3_clk_src = {
869         .cmd_rcgr = 0x1e4d8,
870         .mnd_width = 16,
871         .hid_width = 5,
872         .parent_map = gcc_parent_map_0,
873         .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
874         .clkr.hw.init = &(struct clk_init_data){
875                 .name = "gcc_qupv3_wrap2_s3_clk_src",
876                 .parent_data = gcc_parents_0,
877                 .num_parents = ARRAY_SIZE(gcc_parents_0),
878                 .flags = CLK_SET_RATE_PARENT,
879                 .ops = &clk_rcg2_ops,
880         },
881 };
882
883 static struct clk_rcg2 gcc_qupv3_wrap2_s4_clk_src = {
884         .cmd_rcgr = 0x1e608,
885         .mnd_width = 16,
886         .hid_width = 5,
887         .parent_map = gcc_parent_map_0,
888         .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
889         .clkr.hw.init = &(struct clk_init_data){
890                 .name = "gcc_qupv3_wrap2_s4_clk_src",
891                 .parent_data = gcc_parents_0,
892                 .num_parents = ARRAY_SIZE(gcc_parents_0),
893                 .flags = CLK_SET_RATE_PARENT,
894                 .ops = &clk_rcg2_ops,
895         },
896 };
897
898 static struct clk_rcg2 gcc_qupv3_wrap2_s5_clk_src = {
899         .cmd_rcgr = 0x1e738,
900         .mnd_width = 16,
901         .hid_width = 5,
902         .parent_map = gcc_parent_map_0,
903         .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
904         .clkr.hw.init = &(struct clk_init_data){
905                 .name = "gcc_qupv3_wrap2_s5_clk_src",
906                 .parent_data = gcc_parents_0,
907                 .num_parents = ARRAY_SIZE(gcc_parents_0),
908                 .flags = CLK_SET_RATE_PARENT,
909                 .ops = &clk_rcg2_ops,
910         },
911 };
912
913 static const struct freq_tbl ftbl_gcc_sdcc2_apps_clk_src[] = {
914         F(400000, P_BI_TCXO, 12, 1, 4),
915         F(9600000, P_BI_TCXO, 2, 0, 0),
916         F(19200000, P_BI_TCXO, 1, 0, 0),
917         F(25000000, P_GPLL0_OUT_MAIN, 12, 1, 2),
918         F(50000000, P_GPLL0_OUT_MAIN, 12, 0, 0),
919         F(100000000, P_GPLL0_OUT_MAIN, 6, 0, 0),
920         F(200000000, P_GPLL0_OUT_MAIN, 3, 0, 0),
921         { }
922 };
923
924 static struct clk_rcg2 gcc_sdcc2_apps_clk_src = {
925         .cmd_rcgr = 0x1400c,
926         .mnd_width = 8,
927         .hid_width = 5,
928         .parent_map = gcc_parent_map_7,
929         .freq_tbl = ftbl_gcc_sdcc2_apps_clk_src,
930         .clkr.hw.init = &(struct clk_init_data){
931                 .name = "gcc_sdcc2_apps_clk_src",
932                 .parent_data = gcc_parents_7,
933                 .num_parents = ARRAY_SIZE(gcc_parents_7),
934                 .flags = CLK_SET_RATE_PARENT,
935                 .ops = &clk_rcg2_floor_ops,
936         },
937 };
938
939 static const struct freq_tbl ftbl_gcc_sdcc4_apps_clk_src[] = {
940         F(400000, P_BI_TCXO, 12, 1, 4),
941         F(9600000, P_BI_TCXO, 2, 0, 0),
942         F(19200000, P_BI_TCXO, 1, 0, 0),
943         F(37500000, P_GPLL0_OUT_MAIN, 16, 0, 0),
944         F(50000000, P_GPLL0_OUT_MAIN, 12, 0, 0),
945         F(75000000, P_GPLL0_OUT_MAIN, 8, 0, 0),
946         { }
947 };
948
949 static struct clk_rcg2 gcc_sdcc4_apps_clk_src = {
950         .cmd_rcgr = 0x1600c,
951         .mnd_width = 8,
952         .hid_width = 5,
953         .parent_map = gcc_parent_map_5,
954         .freq_tbl = ftbl_gcc_sdcc4_apps_clk_src,
955         .clkr.hw.init = &(struct clk_init_data){
956                 .name = "gcc_sdcc4_apps_clk_src",
957                 .parent_data = gcc_parents_5,
958                 .num_parents = ARRAY_SIZE(gcc_parents_5),
959                 .flags = CLK_SET_RATE_PARENT,
960                 .ops = &clk_rcg2_floor_ops,
961         },
962 };
963
964 static const struct freq_tbl ftbl_gcc_tsif_ref_clk_src[] = {
965         F(105495, P_BI_TCXO, 2, 1, 91),
966         { }
967 };
968
969 static struct clk_rcg2 gcc_tsif_ref_clk_src = {
970         .cmd_rcgr = 0x36010,
971         .mnd_width = 8,
972         .hid_width = 5,
973         .parent_map = gcc_parent_map_8,
974         .freq_tbl = ftbl_gcc_tsif_ref_clk_src,
975         .clkr.hw.init = &(struct clk_init_data){
976                 .name = "gcc_tsif_ref_clk_src",
977                 .parent_data = gcc_parents_8,
978                 .num_parents = ARRAY_SIZE(gcc_parents_8),
979                 .flags = CLK_SET_RATE_PARENT,
980                 .ops = &clk_rcg2_ops,
981         },
982 };
983
984 static const struct freq_tbl ftbl_gcc_ufs_card_2_axi_clk_src[] = {
985         F(37500000, P_GPLL0_OUT_EVEN, 8, 0, 0),
986         F(75000000, P_GPLL0_OUT_EVEN, 4, 0, 0),
987         F(150000000, P_GPLL0_OUT_MAIN, 4, 0, 0),
988         F(300000000, P_GPLL0_OUT_MAIN, 2, 0, 0),
989         { }
990 };
991
992 static struct clk_rcg2 gcc_ufs_card_2_axi_clk_src = {
993         .cmd_rcgr = 0xa2020,
994         .mnd_width = 8,
995         .hid_width = 5,
996         .parent_map = gcc_parent_map_0,
997         .freq_tbl = ftbl_gcc_ufs_card_2_axi_clk_src,
998         .clkr.hw.init = &(struct clk_init_data){
999                 .name = "gcc_ufs_card_2_axi_clk_src",
1000                 .parent_data = gcc_parents_0,
1001                 .num_parents = ARRAY_SIZE(gcc_parents_0),
1002                 .flags = CLK_SET_RATE_PARENT,
1003                 .ops = &clk_rcg2_ops,
1004         },
1005 };
1006
1007 static struct clk_rcg2 gcc_ufs_card_2_ice_core_clk_src = {
1008         .cmd_rcgr = 0xa2060,
1009         .mnd_width = 0,
1010         .hid_width = 5,
1011         .parent_map = gcc_parent_map_0,
1012         .freq_tbl = ftbl_gcc_ufs_card_2_axi_clk_src,
1013         .clkr.hw.init = &(struct clk_init_data){
1014                 .name = "gcc_ufs_card_2_ice_core_clk_src",
1015                 .parent_data = gcc_parents_0,
1016                 .num_parents = ARRAY_SIZE(gcc_parents_0),
1017                 .flags = CLK_SET_RATE_PARENT,
1018                 .ops = &clk_rcg2_ops,
1019         },
1020 };
1021
1022 static const struct freq_tbl ftbl_gcc_ufs_card_2_phy_aux_clk_src[] = {
1023         F(19200000, P_BI_TCXO, 1, 0, 0),
1024         { }
1025 };
1026
1027 static struct clk_rcg2 gcc_ufs_card_2_phy_aux_clk_src = {
1028         .cmd_rcgr = 0xa2094,
1029         .mnd_width = 0,
1030         .hid_width = 5,
1031         .parent_map = gcc_parent_map_4,
1032         .freq_tbl = ftbl_gcc_ufs_card_2_phy_aux_clk_src,
1033         .clkr.hw.init = &(struct clk_init_data){
1034                 .name = "gcc_ufs_card_2_phy_aux_clk_src",
1035                 .parent_data = gcc_parents_4,
1036                 .num_parents = ARRAY_SIZE(gcc_parents_4),
1037                 .flags = CLK_SET_RATE_PARENT,
1038                 .ops = &clk_rcg2_ops,
1039         },
1040 };
1041
1042 static struct clk_rcg2 gcc_ufs_card_2_unipro_core_clk_src = {
1043         .cmd_rcgr = 0xa2078,
1044         .mnd_width = 0,
1045         .hid_width = 5,
1046         .parent_map = gcc_parent_map_0,
1047         .freq_tbl = ftbl_gcc_ufs_card_2_axi_clk_src,
1048         .clkr.hw.init = &(struct clk_init_data){
1049                 .name = "gcc_ufs_card_2_unipro_core_clk_src",
1050                 .parent_data = gcc_parents_0,
1051                 .num_parents = ARRAY_SIZE(gcc_parents_0),
1052                 .flags = CLK_SET_RATE_PARENT,
1053                 .ops = &clk_rcg2_ops,
1054         },
1055 };
1056
1057 static const struct freq_tbl ftbl_gcc_ufs_card_axi_clk_src[] = {
1058         F(25000000, P_GPLL0_OUT_EVEN, 12, 0, 0),
1059         F(50000000, P_GPLL0_OUT_EVEN, 6, 0, 0),
1060         F(100000000, P_GPLL0_OUT_MAIN, 6, 0, 0),
1061         F(200000000, P_GPLL0_OUT_MAIN, 3, 0, 0),
1062         F(240000000, P_GPLL0_OUT_MAIN, 2.5, 0, 0),
1063         { }
1064 };
1065
1066 static struct clk_rcg2 gcc_ufs_card_axi_clk_src = {
1067         .cmd_rcgr = 0x75020,
1068         .mnd_width = 8,
1069         .hid_width = 5,
1070         .parent_map = gcc_parent_map_0,
1071         .freq_tbl = ftbl_gcc_ufs_card_axi_clk_src,
1072         .clkr.hw.init = &(struct clk_init_data){
1073                 .name = "gcc_ufs_card_axi_clk_src",
1074                 .parent_data = gcc_parents_0,
1075                 .num_parents = ARRAY_SIZE(gcc_parents_0),
1076                 .flags = CLK_SET_RATE_PARENT,
1077                 .ops = &clk_rcg2_ops,
1078         },
1079 };
1080
1081 static const struct freq_tbl ftbl_gcc_ufs_card_ice_core_clk_src[] = {
1082         F(75000000, P_GPLL0_OUT_EVEN, 4, 0, 0),
1083         F(150000000, P_GPLL0_OUT_MAIN, 4, 0, 0),
1084         F(300000000, P_GPLL0_OUT_MAIN, 2, 0, 0),
1085         { }
1086 };
1087
1088 static struct clk_rcg2 gcc_ufs_card_ice_core_clk_src = {
1089         .cmd_rcgr = 0x75060,
1090         .mnd_width = 0,
1091         .hid_width = 5,
1092         .parent_map = gcc_parent_map_0,
1093         .freq_tbl = ftbl_gcc_ufs_card_ice_core_clk_src,
1094         .clkr.hw.init = &(struct clk_init_data){
1095                 .name = "gcc_ufs_card_ice_core_clk_src",
1096                 .parent_data = gcc_parents_0,
1097                 .num_parents = ARRAY_SIZE(gcc_parents_0),
1098                 .flags = CLK_SET_RATE_PARENT,
1099                 .ops = &clk_rcg2_ops,
1100         },
1101 };
1102
1103 static struct clk_rcg2 gcc_ufs_card_phy_aux_clk_src = {
1104         .cmd_rcgr = 0x75094,
1105         .mnd_width = 0,
1106         .hid_width = 5,
1107         .parent_map = gcc_parent_map_4,
1108         .freq_tbl = ftbl_gcc_ufs_card_2_phy_aux_clk_src,
1109         .clkr.hw.init = &(struct clk_init_data){
1110                 .name = "gcc_ufs_card_phy_aux_clk_src",
1111                 .parent_data = gcc_parents_4,
1112                 .num_parents = ARRAY_SIZE(gcc_parents_4),
1113                 .flags = CLK_SET_RATE_PARENT,
1114                 .ops = &clk_rcg2_ops,
1115         },
1116 };
1117
1118 static const struct freq_tbl ftbl_gcc_ufs_card_unipro_core_clk_src[] = {
1119         F(37500000, P_GPLL0_OUT_EVEN, 8, 0, 0),
1120         F(75000000, P_GPLL0_OUT_MAIN, 8, 0, 0),
1121         F(150000000, P_GPLL0_OUT_MAIN, 4, 0, 0),
1122         { }
1123 };
1124
1125 static struct clk_rcg2 gcc_ufs_card_unipro_core_clk_src = {
1126         .cmd_rcgr = 0x75078,
1127         .mnd_width = 0,
1128         .hid_width = 5,
1129         .parent_map = gcc_parent_map_0,
1130         .freq_tbl = ftbl_gcc_ufs_card_unipro_core_clk_src,
1131         .clkr.hw.init = &(struct clk_init_data){
1132                 .name = "gcc_ufs_card_unipro_core_clk_src",
1133                 .parent_data = gcc_parents_0,
1134                 .num_parents = ARRAY_SIZE(gcc_parents_0),
1135                 .flags = CLK_SET_RATE_PARENT,
1136                 .ops = &clk_rcg2_ops,
1137         },
1138 };
1139
1140 static const struct freq_tbl ftbl_gcc_ufs_phy_axi_clk_src[] = {
1141         F(25000000, P_GPLL0_OUT_EVEN, 12, 0, 0),
1142         F(37500000, P_GPLL0_OUT_EVEN, 8, 0, 0),
1143         F(75000000, P_GPLL0_OUT_EVEN, 4, 0, 0),
1144         F(150000000, P_GPLL0_OUT_MAIN, 4, 0, 0),
1145         F(300000000, P_GPLL0_OUT_MAIN, 2, 0, 0),
1146         { }
1147 };
1148
1149 static struct clk_rcg2 gcc_ufs_phy_axi_clk_src = {
1150         .cmd_rcgr = 0x77020,
1151         .mnd_width = 8,
1152         .hid_width = 5,
1153         .parent_map = gcc_parent_map_0,
1154         .freq_tbl = ftbl_gcc_ufs_phy_axi_clk_src,
1155         .clkr.hw.init = &(struct clk_init_data){
1156                 .name = "gcc_ufs_phy_axi_clk_src",
1157                 .parent_data = gcc_parents_0,
1158                 .num_parents = ARRAY_SIZE(gcc_parents_0),
1159                 .flags = CLK_SET_RATE_PARENT,
1160                 .ops = &clk_rcg2_ops,
1161         },
1162 };
1163
1164 static struct clk_rcg2 gcc_ufs_phy_ice_core_clk_src = {
1165         .cmd_rcgr = 0x77060,
1166         .mnd_width = 0,
1167         .hid_width = 5,
1168         .parent_map = gcc_parent_map_0,
1169         .freq_tbl = ftbl_gcc_ufs_card_2_axi_clk_src,
1170         .clkr.hw.init = &(struct clk_init_data){
1171                 .name = "gcc_ufs_phy_ice_core_clk_src",
1172                 .parent_data = gcc_parents_0,
1173                 .num_parents = ARRAY_SIZE(gcc_parents_0),
1174                 .flags = CLK_SET_RATE_PARENT,
1175                 .ops = &clk_rcg2_ops,
1176         },
1177 };
1178
1179 static struct clk_rcg2 gcc_ufs_phy_phy_aux_clk_src = {
1180         .cmd_rcgr = 0x77094,
1181         .mnd_width = 0,
1182         .hid_width = 5,
1183         .parent_map = gcc_parent_map_4,
1184         .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
1185         .clkr.hw.init = &(struct clk_init_data){
1186                 .name = "gcc_ufs_phy_phy_aux_clk_src",
1187                 .parent_data = gcc_parents_4,
1188                 .num_parents = ARRAY_SIZE(gcc_parents_4),
1189                 .flags = CLK_SET_RATE_PARENT,
1190                 .ops = &clk_rcg2_ops,
1191         },
1192 };
1193
1194 static struct clk_rcg2 gcc_ufs_phy_unipro_core_clk_src = {
1195         .cmd_rcgr = 0x77078,
1196         .mnd_width = 0,
1197         .hid_width = 5,
1198         .parent_map = gcc_parent_map_0,
1199         .freq_tbl = ftbl_gcc_ufs_card_2_axi_clk_src,
1200         .clkr.hw.init = &(struct clk_init_data){
1201                 .name = "gcc_ufs_phy_unipro_core_clk_src",
1202                 .parent_data = gcc_parents_0,
1203                 .num_parents = ARRAY_SIZE(gcc_parents_0),
1204                 .flags = CLK_SET_RATE_PARENT,
1205                 .ops = &clk_rcg2_ops,
1206         },
1207 };
1208
1209 static const struct freq_tbl ftbl_gcc_usb30_mp_master_clk_src[] = {
1210         F(33333333, P_GPLL0_OUT_EVEN, 9, 0, 0),
1211         F(66666667, P_GPLL0_OUT_EVEN, 4.5, 0, 0),
1212         F(133333333, P_GPLL0_OUT_MAIN, 4.5, 0, 0),
1213         F(200000000, P_GPLL0_OUT_MAIN, 3, 0, 0),
1214         F(240000000, P_GPLL0_OUT_MAIN, 2.5, 0, 0),
1215         { }
1216 };
1217
1218 static struct clk_rcg2 gcc_usb30_mp_master_clk_src = {
1219         .cmd_rcgr = 0xa601c,
1220         .mnd_width = 8,
1221         .hid_width = 5,
1222         .parent_map = gcc_parent_map_0,
1223         .freq_tbl = ftbl_gcc_usb30_mp_master_clk_src,
1224         .clkr.hw.init = &(struct clk_init_data){
1225                 .name = "gcc_usb30_mp_master_clk_src",
1226                 .parent_data = gcc_parents_0,
1227                 .num_parents = ARRAY_SIZE(gcc_parents_0),
1228                 .flags = CLK_SET_RATE_PARENT,
1229                 .ops = &clk_rcg2_ops,
1230         },
1231 };
1232
1233 static const struct freq_tbl ftbl_gcc_usb30_mp_mock_utmi_clk_src[] = {
1234         F(19200000, P_BI_TCXO, 1, 0, 0),
1235         F(20000000, P_GPLL0_OUT_EVEN, 15, 0, 0),
1236         F(40000000, P_GPLL0_OUT_EVEN, 7.5, 0, 0),
1237         F(60000000, P_GPLL0_OUT_MAIN, 10, 0, 0),
1238         { }
1239 };
1240
1241 static struct clk_rcg2 gcc_usb30_mp_mock_utmi_clk_src = {
1242         .cmd_rcgr = 0xa6034,
1243         .mnd_width = 0,
1244         .hid_width = 5,
1245         .parent_map = gcc_parent_map_0,
1246         .freq_tbl = ftbl_gcc_usb30_mp_mock_utmi_clk_src,
1247         .clkr.hw.init = &(struct clk_init_data){
1248                 .name = "gcc_usb30_mp_mock_utmi_clk_src",
1249                 .parent_data = gcc_parents_0,
1250                 .num_parents = ARRAY_SIZE(gcc_parents_0),
1251                 .flags = CLK_SET_RATE_PARENT,
1252                 .ops = &clk_rcg2_ops,
1253         },
1254 };
1255
1256 static struct clk_rcg2 gcc_usb30_prim_master_clk_src = {
1257         .cmd_rcgr = 0xf01c,
1258         .mnd_width = 8,
1259         .hid_width = 5,
1260         .parent_map = gcc_parent_map_0,
1261         .freq_tbl = ftbl_gcc_usb30_mp_master_clk_src,
1262         .clkr.hw.init = &(struct clk_init_data){
1263                 .name = "gcc_usb30_prim_master_clk_src",
1264                 .parent_data = gcc_parents_0,
1265                 .num_parents = ARRAY_SIZE(gcc_parents_0),
1266                 .flags = CLK_SET_RATE_PARENT,
1267                 .ops = &clk_rcg2_ops,
1268         },
1269 };
1270
1271 static struct clk_rcg2 gcc_usb30_prim_mock_utmi_clk_src = {
1272         .cmd_rcgr = 0xf034,
1273         .mnd_width = 0,
1274         .hid_width = 5,
1275         .parent_map = gcc_parent_map_0,
1276         .freq_tbl = ftbl_gcc_usb30_mp_mock_utmi_clk_src,
1277         .clkr.hw.init = &(struct clk_init_data){
1278                 .name = "gcc_usb30_prim_mock_utmi_clk_src",
1279                 .parent_data = gcc_parents_0,
1280                 .num_parents = ARRAY_SIZE(gcc_parents_0),
1281                 .flags = CLK_SET_RATE_PARENT,
1282                 .ops = &clk_rcg2_ops,
1283         },
1284 };
1285
1286 static struct clk_rcg2 gcc_usb30_sec_master_clk_src = {
1287         .cmd_rcgr = 0x1001c,
1288         .mnd_width = 8,
1289         .hid_width = 5,
1290         .parent_map = gcc_parent_map_0,
1291         .freq_tbl = ftbl_gcc_usb30_mp_master_clk_src,
1292         .clkr.hw.init = &(struct clk_init_data){
1293                 .name = "gcc_usb30_sec_master_clk_src",
1294                 .parent_data = gcc_parents_0,
1295                 .num_parents = ARRAY_SIZE(gcc_parents_0),
1296                 .flags = CLK_SET_RATE_PARENT,
1297                 .ops = &clk_rcg2_ops,
1298         },
1299 };
1300
1301 static struct clk_rcg2 gcc_usb30_sec_mock_utmi_clk_src = {
1302         .cmd_rcgr = 0x10034,
1303         .mnd_width = 0,
1304         .hid_width = 5,
1305         .parent_map = gcc_parent_map_0,
1306         .freq_tbl = ftbl_gcc_usb30_mp_mock_utmi_clk_src,
1307         .clkr.hw.init = &(struct clk_init_data){
1308                 .name = "gcc_usb30_sec_mock_utmi_clk_src",
1309                 .parent_data = gcc_parents_0,
1310                 .num_parents = ARRAY_SIZE(gcc_parents_0),
1311                 .flags = CLK_SET_RATE_PARENT,
1312                 .ops = &clk_rcg2_ops,
1313         },
1314 };
1315
1316 static struct clk_rcg2 gcc_usb3_mp_phy_aux_clk_src = {
1317         .cmd_rcgr = 0xa6068,
1318         .mnd_width = 0,
1319         .hid_width = 5,
1320         .parent_map = gcc_parent_map_2,
1321         .freq_tbl = ftbl_gcc_ufs_card_2_phy_aux_clk_src,
1322         .clkr.hw.init = &(struct clk_init_data){
1323                 .name = "gcc_usb3_mp_phy_aux_clk_src",
1324                 .parent_data = gcc_parents_2,
1325                 .num_parents = ARRAY_SIZE(gcc_parents_2),
1326                 .flags = CLK_SET_RATE_PARENT,
1327                 .ops = &clk_rcg2_ops,
1328         },
1329 };
1330
1331 static struct clk_rcg2 gcc_usb3_prim_phy_aux_clk_src = {
1332         .cmd_rcgr = 0xf060,
1333         .mnd_width = 0,
1334         .hid_width = 5,
1335         .parent_map = gcc_parent_map_2,
1336         .freq_tbl = ftbl_gcc_ufs_card_2_phy_aux_clk_src,
1337         .clkr.hw.init = &(struct clk_init_data){
1338                 .name = "gcc_usb3_prim_phy_aux_clk_src",
1339                 .parent_data = gcc_parents_2,
1340                 .num_parents = ARRAY_SIZE(gcc_parents_2),
1341                 .flags = CLK_SET_RATE_PARENT,
1342                 .ops = &clk_rcg2_ops,
1343         },
1344 };
1345
1346 static struct clk_rcg2 gcc_usb3_sec_phy_aux_clk_src = {
1347         .cmd_rcgr = 0x10060,
1348         .mnd_width = 0,
1349         .hid_width = 5,
1350         .parent_map = gcc_parent_map_2,
1351         .freq_tbl = ftbl_gcc_ufs_card_2_phy_aux_clk_src,
1352         .clkr.hw.init = &(struct clk_init_data){
1353                 .name = "gcc_usb3_sec_phy_aux_clk_src",
1354                 .parent_data = gcc_parents_2,
1355                 .num_parents = ARRAY_SIZE(gcc_parents_2),
1356                 .flags = CLK_SET_RATE_PARENT,
1357                 .ops = &clk_rcg2_ops,
1358         },
1359 };
1360
1361 static struct clk_branch gcc_aggre_noc_pcie_tbu_clk = {
1362         .halt_reg = 0x90018,
1363         .halt_check = BRANCH_HALT,
1364         .clkr = {
1365                 .enable_reg = 0x90018,
1366                 .enable_mask = BIT(0),
1367                 .hw.init = &(struct clk_init_data){
1368                         .name = "gcc_aggre_noc_pcie_tbu_clk",
1369                         .ops = &clk_branch2_ops,
1370                 },
1371         },
1372 };
1373
1374 static struct clk_branch gcc_aggre_ufs_card_axi_clk = {
1375         .halt_reg = 0x750c0,
1376         .halt_check = BRANCH_HALT,
1377         .hwcg_reg = 0x750c0,
1378         .hwcg_bit = 1,
1379         .clkr = {
1380                 .enable_reg = 0x750c0,
1381                 .enable_mask = BIT(0),
1382                 .hw.init = &(struct clk_init_data){
1383                         .name = "gcc_aggre_ufs_card_axi_clk",
1384                         .parent_hws = (const struct clk_hw *[]){
1385                                       &gcc_ufs_card_axi_clk_src.clkr.hw
1386                         },
1387                         .num_parents = 1,
1388                         .flags = CLK_SET_RATE_PARENT,
1389                         .ops = &clk_branch2_ops,
1390                 },
1391         },
1392 };
1393
1394 static struct clk_branch gcc_aggre_ufs_card_axi_hw_ctl_clk = {
1395         .halt_reg = 0x750c0,
1396         .halt_check = BRANCH_HALT,
1397         .hwcg_reg = 0x750c0,
1398         .hwcg_bit = 1,
1399         .clkr = {
1400                 .enable_reg = 0x750c0,
1401                 .enable_mask = BIT(1),
1402                 .hw.init = &(struct clk_init_data){
1403                         .name = "gcc_aggre_ufs_card_axi_hw_ctl_clk",
1404                         .parent_hws = (const struct clk_hw *[]){
1405                                       &gcc_aggre_ufs_card_axi_clk.clkr.hw
1406                         },
1407                         .num_parents = 1,
1408                         .flags = CLK_SET_RATE_PARENT,
1409                         .ops = &clk_branch_simple_ops,
1410                 },
1411         },
1412 };
1413
1414 static struct clk_branch gcc_aggre_ufs_phy_axi_clk = {
1415         .halt_reg = 0x770c0,
1416         .halt_check = BRANCH_HALT,
1417         .hwcg_reg = 0x770c0,
1418         .hwcg_bit = 1,
1419         .clkr = {
1420                 .enable_reg = 0x770c0,
1421                 .enable_mask = BIT(0),
1422                 .hw.init = &(struct clk_init_data){
1423                         .name = "gcc_aggre_ufs_phy_axi_clk",
1424                         .parent_hws = (const struct clk_hw *[]){
1425                                       &gcc_ufs_phy_axi_clk_src.clkr.hw
1426                         },
1427                         .num_parents = 1,
1428                         .flags = CLK_SET_RATE_PARENT,
1429                         .ops = &clk_branch2_ops,
1430                 },
1431         },
1432 };
1433
1434 static struct clk_branch gcc_aggre_ufs_phy_axi_hw_ctl_clk = {
1435         .halt_reg = 0x770c0,
1436         .halt_check = BRANCH_HALT,
1437         .hwcg_reg = 0x770c0,
1438         .hwcg_bit = 1,
1439         .clkr = {
1440                 .enable_reg = 0x770c0,
1441                 .enable_mask = BIT(1),
1442                 .hw.init = &(struct clk_init_data){
1443                         .name = "gcc_aggre_ufs_phy_axi_hw_ctl_clk",
1444                         .parent_hws = (const struct clk_hw *[]){
1445                                       &gcc_aggre_ufs_phy_axi_clk.clkr.hw
1446                         },
1447                         .num_parents = 1,
1448                         .flags = CLK_SET_RATE_PARENT,
1449                         .ops = &clk_branch_simple_ops,
1450                 },
1451         },
1452 };
1453
1454 static struct clk_branch gcc_aggre_usb3_mp_axi_clk = {
1455         .halt_reg = 0xa6084,
1456         .halt_check = BRANCH_HALT,
1457         .clkr = {
1458                 .enable_reg = 0xa6084,
1459                 .enable_mask = BIT(0),
1460                 .hw.init = &(struct clk_init_data){
1461                         .name = "gcc_aggre_usb3_mp_axi_clk",
1462                         .parent_hws = (const struct clk_hw *[]){
1463                                       &gcc_usb30_mp_master_clk_src.clkr.hw
1464                         },
1465                         .num_parents = 1,
1466                         .flags = CLK_SET_RATE_PARENT,
1467                         .ops = &clk_branch2_ops,
1468                 },
1469         },
1470 };
1471
1472 static struct clk_branch gcc_aggre_usb3_prim_axi_clk = {
1473         .halt_reg = 0xf07c,
1474         .halt_check = BRANCH_HALT,
1475         .clkr = {
1476                 .enable_reg = 0xf07c,
1477                 .enable_mask = BIT(0),
1478                 .hw.init = &(struct clk_init_data){
1479                         .name = "gcc_aggre_usb3_prim_axi_clk",
1480                         .parent_hws = (const struct clk_hw *[]){
1481                                       &gcc_usb30_prim_master_clk_src.clkr.hw
1482                         },
1483                         .num_parents = 1,
1484                         .flags = CLK_SET_RATE_PARENT,
1485                         .ops = &clk_branch2_ops,
1486                 },
1487         },
1488 };
1489
1490 static struct clk_branch gcc_aggre_usb3_sec_axi_clk = {
1491         .halt_reg = 0x1007c,
1492         .halt_check = BRANCH_HALT,
1493         .clkr = {
1494                 .enable_reg = 0x1007c,
1495                 .enable_mask = BIT(0),
1496                 .hw.init = &(struct clk_init_data){
1497                         .name = "gcc_aggre_usb3_sec_axi_clk",
1498                         .parent_hws = (const struct clk_hw *[]){
1499                                       &gcc_usb30_sec_master_clk_src.clkr.hw
1500                         },
1501                         .num_parents = 1,
1502                         .flags = CLK_SET_RATE_PARENT,
1503                         .ops = &clk_branch2_ops,
1504                 },
1505         },
1506 };
1507
1508 static struct clk_branch gcc_boot_rom_ahb_clk = {
1509         .halt_reg = 0x38004,
1510         .halt_check = BRANCH_HALT_VOTED,
1511         .hwcg_reg = 0x38004,
1512         .hwcg_bit = 1,
1513         .clkr = {
1514                 .enable_reg = 0x52004,
1515                 .enable_mask = BIT(10),
1516                 .hw.init = &(struct clk_init_data){
1517                         .name = "gcc_boot_rom_ahb_clk",
1518                         .ops = &clk_branch2_ops,
1519                 },
1520         },
1521 };
1522
1523 static struct clk_branch gcc_camera_hf_axi_clk = {
1524         .halt_reg = 0xb030,
1525         .halt_check = BRANCH_HALT,
1526         .clkr = {
1527                 .enable_reg = 0xb030,
1528                 .enable_mask = BIT(0),
1529                 .hw.init = &(struct clk_init_data){
1530                         .name = "gcc_camera_hf_axi_clk",
1531                         .ops = &clk_branch2_ops,
1532                 },
1533         },
1534 };
1535
1536 static struct clk_branch gcc_camera_sf_axi_clk = {
1537         .halt_reg = 0xb034,
1538         .halt_check = BRANCH_HALT,
1539         .clkr = {
1540                 .enable_reg = 0xb034,
1541                 .enable_mask = BIT(0),
1542                 .hw.init = &(struct clk_init_data){
1543                         .name = "gcc_camera_sf_axi_clk",
1544                         .ops = &clk_branch2_ops,
1545                 },
1546         },
1547 };
1548
1549 static struct clk_branch gcc_cfg_noc_usb3_mp_axi_clk = {
1550         .halt_reg = 0xa609c,
1551         .halt_check = BRANCH_HALT,
1552         .clkr = {
1553                 .enable_reg = 0xa609c,
1554                 .enable_mask = BIT(0),
1555                 .hw.init = &(struct clk_init_data){
1556                         .name = "gcc_cfg_noc_usb3_mp_axi_clk",
1557                         .parent_hws = (const struct clk_hw *[]){
1558                                       &gcc_usb30_mp_master_clk_src.clkr.hw
1559                         },
1560                         .num_parents = 1,
1561                         .flags = CLK_SET_RATE_PARENT,
1562                         .ops = &clk_branch2_ops,
1563                 },
1564         },
1565 };
1566
1567 static struct clk_branch gcc_cfg_noc_usb3_prim_axi_clk = {
1568         .halt_reg = 0xf078,
1569         .halt_check = BRANCH_HALT,
1570         .clkr = {
1571                 .enable_reg = 0xf078,
1572                 .enable_mask = BIT(0),
1573                 .hw.init = &(struct clk_init_data){
1574                         .name = "gcc_cfg_noc_usb3_prim_axi_clk",
1575                         .parent_hws = (const struct clk_hw *[]){
1576                                       &gcc_usb30_prim_master_clk_src.clkr.hw
1577                         },
1578                         .num_parents = 1,
1579                         .flags = CLK_SET_RATE_PARENT,
1580                         .ops = &clk_branch2_ops,
1581                 },
1582         },
1583 };
1584
1585 static struct clk_branch gcc_cfg_noc_usb3_sec_axi_clk = {
1586         .halt_reg = 0x10078,
1587         .halt_check = BRANCH_HALT,
1588         .clkr = {
1589                 .enable_reg = 0x10078,
1590                 .enable_mask = BIT(0),
1591                 .hw.init = &(struct clk_init_data){
1592                         .name = "gcc_cfg_noc_usb3_sec_axi_clk",
1593                         .parent_hws = (const struct clk_hw *[]){
1594                                       &gcc_usb30_sec_master_clk_src.clkr.hw
1595                         },
1596                         .num_parents = 1,
1597                         .flags = CLK_SET_RATE_PARENT,
1598                         .ops = &clk_branch2_ops,
1599                 },
1600         },
1601 };
1602
1603 /* For CPUSS functionality the AHB clock needs to be left enabled */
1604 static struct clk_branch gcc_cpuss_ahb_clk = {
1605         .halt_reg = 0x48000,
1606         .halt_check = BRANCH_HALT_VOTED,
1607         .clkr = {
1608                 .enable_reg = 0x52004,
1609                 .enable_mask = BIT(21),
1610                 .hw.init = &(struct clk_init_data){
1611                         .name = "gcc_cpuss_ahb_clk",
1612                         .parent_hws = (const struct clk_hw *[]){
1613                                       &gcc_cpuss_ahb_clk_src.clkr.hw
1614                         },
1615                         .num_parents = 1,
1616                         .flags = CLK_IS_CRITICAL | CLK_SET_RATE_PARENT,
1617                         .ops = &clk_branch2_ops,
1618                 },
1619         },
1620 };
1621
1622 static struct clk_branch gcc_cpuss_rbcpr_clk = {
1623         .halt_reg = 0x48008,
1624         .halt_check = BRANCH_HALT,
1625         .clkr = {
1626                 .enable_reg = 0x48008,
1627                 .enable_mask = BIT(0),
1628                 .hw.init = &(struct clk_init_data){
1629                         .name = "gcc_cpuss_rbcpr_clk",
1630                         .ops = &clk_branch2_ops,
1631                 },
1632         },
1633 };
1634
1635 static struct clk_branch gcc_ddrss_gpu_axi_clk = {
1636         .halt_reg = 0x71154,
1637         .halt_check = BRANCH_VOTED,
1638         .clkr = {
1639                 .enable_reg = 0x71154,
1640                 .enable_mask = BIT(0),
1641                 .hw.init = &(struct clk_init_data){
1642                         .name = "gcc_ddrss_gpu_axi_clk",
1643                         .ops = &clk_branch2_ops,
1644                 },
1645         },
1646 };
1647
1648 static struct clk_branch gcc_disp_hf_axi_clk = {
1649         .halt_reg = 0xb038,
1650         .halt_check = BRANCH_HALT,
1651         .clkr = {
1652                 .enable_reg = 0xb038,
1653                 .enable_mask = BIT(0),
1654                 .hw.init = &(struct clk_init_data){
1655                         .name = "gcc_disp_hf_axi_clk",
1656                         .ops = &clk_branch2_ops,
1657                 },
1658         },
1659 };
1660
1661 static struct clk_branch gcc_disp_sf_axi_clk = {
1662         .halt_reg = 0xb03c,
1663         .halt_check = BRANCH_HALT,
1664         .clkr = {
1665                 .enable_reg = 0xb03c,
1666                 .enable_mask = BIT(0),
1667                 .hw.init = &(struct clk_init_data){
1668                         .name = "gcc_disp_sf_axi_clk",
1669                         .ops = &clk_branch2_ops,
1670                 },
1671         },
1672 };
1673
1674 static struct clk_branch gcc_emac_axi_clk = {
1675         .halt_reg = 0x6010,
1676         .halt_check = BRANCH_HALT,
1677         .clkr = {
1678                 .enable_reg = 0x6010,
1679                 .enable_mask = BIT(0),
1680                 .hw.init = &(struct clk_init_data){
1681                         .name = "gcc_emac_axi_clk",
1682                         .ops = &clk_branch2_ops,
1683                 },
1684         },
1685 };
1686
1687 static struct clk_branch gcc_emac_ptp_clk = {
1688         .halt_reg = 0x6034,
1689         .halt_check = BRANCH_HALT,
1690         .clkr = {
1691                 .enable_reg = 0x6034,
1692                 .enable_mask = BIT(0),
1693                 .hw.init = &(struct clk_init_data){
1694                         .name = "gcc_emac_ptp_clk",
1695                         .parent_hws = (const struct clk_hw *[]){
1696                                       &gcc_emac_ptp_clk_src.clkr.hw
1697                         },
1698                         .num_parents = 1,
1699                         .flags = CLK_SET_RATE_PARENT,
1700                         .ops = &clk_branch2_ops,
1701                 },
1702         },
1703 };
1704
1705 static struct clk_branch gcc_emac_rgmii_clk = {
1706         .halt_reg = 0x6018,
1707         .halt_check = BRANCH_HALT,
1708         .clkr = {
1709                 .enable_reg = 0x6018,
1710                 .enable_mask = BIT(0),
1711                 .hw.init = &(struct clk_init_data){
1712                         .name = "gcc_emac_rgmii_clk",
1713                         .parent_hws = (const struct clk_hw *[]){
1714                                       &gcc_emac_rgmii_clk_src.clkr.hw
1715                         },
1716                         .num_parents = 1,
1717                         .flags = CLK_SET_RATE_PARENT,
1718                         .ops = &clk_branch2_ops,
1719                 },
1720         },
1721 };
1722
1723 static struct clk_branch gcc_emac_slv_ahb_clk = {
1724         .halt_reg = 0x6014,
1725         .halt_check = BRANCH_HALT,
1726         .hwcg_reg = 0x6014,
1727         .hwcg_bit = 1,
1728         .clkr = {
1729                 .enable_reg = 0x6014,
1730                 .enable_mask = BIT(0),
1731                 .hw.init = &(struct clk_init_data){
1732                         .name = "gcc_emac_slv_ahb_clk",
1733                         .ops = &clk_branch2_ops,
1734                 },
1735         },
1736 };
1737
1738 static struct clk_branch gcc_gp1_clk = {
1739         .halt_reg = 0x64000,
1740         .halt_check = BRANCH_HALT,
1741         .clkr = {
1742                 .enable_reg = 0x64000,
1743                 .enable_mask = BIT(0),
1744                 .hw.init = &(struct clk_init_data){
1745                         .name = "gcc_gp1_clk",
1746                         .parent_hws = (const struct clk_hw *[]){
1747                                       &gcc_gp1_clk_src.clkr.hw
1748                         },
1749                         .num_parents = 1,
1750                         .flags = CLK_SET_RATE_PARENT,
1751                         .ops = &clk_branch2_ops,
1752                 },
1753         },
1754 };
1755
1756 static struct clk_branch gcc_gp2_clk = {
1757         .halt_reg = 0x65000,
1758         .halt_check = BRANCH_HALT,
1759         .clkr = {
1760                 .enable_reg = 0x65000,
1761                 .enable_mask = BIT(0),
1762                 .hw.init = &(struct clk_init_data){
1763                         .name = "gcc_gp2_clk",
1764                         .parent_hws = (const struct clk_hw *[]){
1765                                       &gcc_gp2_clk_src.clkr.hw
1766                         },
1767                         .num_parents = 1,
1768                         .flags = CLK_SET_RATE_PARENT,
1769                         .ops = &clk_branch2_ops,
1770                 },
1771         },
1772 };
1773
1774 static struct clk_branch gcc_gp3_clk = {
1775         .halt_reg = 0x66000,
1776         .halt_check = BRANCH_HALT,
1777         .clkr = {
1778                 .enable_reg = 0x66000,
1779                 .enable_mask = BIT(0),
1780                 .hw.init = &(struct clk_init_data){
1781                         .name = "gcc_gp3_clk",
1782                         .parent_hws = (const struct clk_hw *[]){
1783                                       &gcc_gp3_clk_src.clkr.hw
1784                         },
1785                         .num_parents = 1,
1786                         .flags = CLK_SET_RATE_PARENT,
1787                         .ops = &clk_branch2_ops,
1788                 },
1789         },
1790 };
1791
1792 static struct clk_branch gcc_gp4_clk = {
1793         .halt_reg = 0xbe000,
1794         .halt_check = BRANCH_HALT,
1795         .clkr = {
1796                 .enable_reg = 0xbe000,
1797                 .enable_mask = BIT(0),
1798                 .hw.init = &(struct clk_init_data){
1799                         .name = "gcc_gp4_clk",
1800                         .parent_hws = (const struct clk_hw *[]){
1801                                       &gcc_gp4_clk_src.clkr.hw
1802                         },
1803                         .num_parents = 1,
1804                         .flags = CLK_SET_RATE_PARENT,
1805                         .ops = &clk_branch2_ops,
1806                 },
1807         },
1808 };
1809
1810 static struct clk_branch gcc_gp5_clk = {
1811         .halt_reg = 0xbf000,
1812         .halt_check = BRANCH_HALT,
1813         .clkr = {
1814                 .enable_reg = 0xbf000,
1815                 .enable_mask = BIT(0),
1816                 .hw.init = &(struct clk_init_data){
1817                         .name = "gcc_gp5_clk",
1818                         .parent_hws = (const struct clk_hw *[]){
1819                                       &gcc_gp5_clk_src.clkr.hw
1820                         },
1821                         .num_parents = 1,
1822                         .flags = CLK_SET_RATE_PARENT,
1823                         .ops = &clk_branch2_ops,
1824                 },
1825         },
1826 };
1827
1828 static struct clk_branch gcc_gpu_gpll0_clk_src = {
1829         .halt_check = BRANCH_HALT_DELAY,
1830         .clkr = {
1831                 .enable_reg = 0x52004,
1832                 .enable_mask = BIT(15),
1833                 .hw.init = &(struct clk_init_data){
1834                         .name = "gcc_gpu_gpll0_clk_src",
1835                         .parent_hws = (const struct clk_hw *[]){ &gpll0.clkr.hw },
1836                         .num_parents = 1,
1837                         .flags = CLK_SET_RATE_PARENT,
1838                         .ops = &clk_branch2_ops,
1839                 },
1840         },
1841 };
1842
1843 static struct clk_branch gcc_gpu_gpll0_div_clk_src = {
1844         .halt_check = BRANCH_HALT_DELAY,
1845         .clkr = {
1846                 .enable_reg = 0x52004,
1847                 .enable_mask = BIT(16),
1848                 .hw.init = &(struct clk_init_data){
1849                         .name = "gcc_gpu_gpll0_div_clk_src",
1850                         .parent_hws = (const struct clk_hw *[]){
1851                                       &gpll0_out_even.clkr.hw
1852                         },
1853                         .num_parents = 1,
1854                         .flags = CLK_SET_RATE_PARENT,
1855                         .ops = &clk_branch2_ops,
1856                 },
1857         },
1858 };
1859
1860 static struct clk_branch gcc_gpu_memnoc_gfx_clk = {
1861         .halt_reg = 0x7100c,
1862         .halt_check = BRANCH_VOTED,
1863         .clkr = {
1864                 .enable_reg = 0x7100c,
1865                 .enable_mask = BIT(0),
1866                 .hw.init = &(struct clk_init_data){
1867                         .name = "gcc_gpu_memnoc_gfx_clk",
1868                         .ops = &clk_branch2_ops,
1869                 },
1870         },
1871 };
1872
1873 static struct clk_branch gcc_gpu_snoc_dvm_gfx_clk = {
1874         .halt_reg = 0x71018,
1875         .halt_check = BRANCH_HALT,
1876         .clkr = {
1877                 .enable_reg = 0x71018,
1878                 .enable_mask = BIT(0),
1879                 .hw.init = &(struct clk_init_data){
1880                         .name = "gcc_gpu_snoc_dvm_gfx_clk",
1881                         .ops = &clk_branch2_ops,
1882                 },
1883         },
1884 };
1885
1886 static struct clk_branch gcc_npu_at_clk = {
1887         .halt_reg = 0x4d010,
1888         .halt_check = BRANCH_VOTED,
1889         .clkr = {
1890                 .enable_reg = 0x4d010,
1891                 .enable_mask = BIT(0),
1892                 .hw.init = &(struct clk_init_data){
1893                         .name = "gcc_npu_at_clk",
1894                         .ops = &clk_branch2_ops,
1895                 },
1896         },
1897 };
1898
1899 static struct clk_branch gcc_npu_axi_clk = {
1900         .halt_reg = 0x4d008,
1901         .halt_check = BRANCH_VOTED,
1902         .clkr = {
1903                 .enable_reg = 0x4d008,
1904                 .enable_mask = BIT(0),
1905                 .hw.init = &(struct clk_init_data){
1906                         .name = "gcc_npu_axi_clk",
1907                         .parent_hws = (const struct clk_hw *[]){
1908                                       &gcc_npu_axi_clk_src.clkr.hw
1909                         },
1910                         .num_parents = 1,
1911                         .flags = CLK_SET_RATE_PARENT,
1912                         .ops = &clk_branch2_ops,
1913                 },
1914         },
1915 };
1916
1917 static struct clk_branch gcc_npu_gpll0_clk_src = {
1918         .halt_check = BRANCH_HALT_DELAY,
1919         .clkr = {
1920                 .enable_reg = 0x52004,
1921                 .enable_mask = BIT(18),
1922                 .hw.init = &(struct clk_init_data){
1923                         .name = "gcc_npu_gpll0_clk_src",
1924                         .parent_hws = (const struct clk_hw *[]){ &gpll0.clkr.hw },
1925                         .num_parents = 1,
1926                         .flags = CLK_SET_RATE_PARENT,
1927                         .ops = &clk_branch2_ops,
1928                 },
1929         },
1930 };
1931
1932 static struct clk_branch gcc_npu_gpll0_div_clk_src = {
1933         .halt_check = BRANCH_HALT_DELAY,
1934         .clkr = {
1935                 .enable_reg = 0x52004,
1936                 .enable_mask = BIT(19),
1937                 .hw.init = &(struct clk_init_data){
1938                         .name = "gcc_npu_gpll0_div_clk_src",
1939                         .parent_hws = (const struct clk_hw *[]){
1940                                       &gpll0_out_even.clkr.hw
1941                         },
1942                         .num_parents = 1,
1943                         .flags = CLK_SET_RATE_PARENT,
1944                         .ops = &clk_branch2_ops,
1945                 },
1946         },
1947 };
1948
1949 static struct clk_branch gcc_npu_trig_clk = {
1950         .halt_reg = 0x4d00c,
1951         .halt_check = BRANCH_VOTED,
1952         .clkr = {
1953                 .enable_reg = 0x4d00c,
1954                 .enable_mask = BIT(0),
1955                 .hw.init = &(struct clk_init_data){
1956                         .name = "gcc_npu_trig_clk",
1957                         .ops = &clk_branch2_ops,
1958                 },
1959         },
1960 };
1961
1962 static struct clk_branch gcc_pcie0_phy_refgen_clk = {
1963         .halt_reg = 0x6f02c,
1964         .halt_check = BRANCH_HALT,
1965         .clkr = {
1966                 .enable_reg = 0x6f02c,
1967                 .enable_mask = BIT(0),
1968                 .hw.init = &(struct clk_init_data){
1969                         .name = "gcc_pcie0_phy_refgen_clk",
1970                         .parent_hws = (const struct clk_hw *[]){
1971                                       &gcc_pcie_phy_refgen_clk_src.clkr.hw
1972                         },
1973                         .num_parents = 1,
1974                         .flags = CLK_SET_RATE_PARENT,
1975                         .ops = &clk_branch2_ops,
1976                 },
1977         },
1978 };
1979
1980 static struct clk_branch gcc_pcie1_phy_refgen_clk = {
1981         .halt_reg = 0x6f030,
1982         .halt_check = BRANCH_HALT,
1983         .clkr = {
1984                 .enable_reg = 0x6f030,
1985                 .enable_mask = BIT(0),
1986                 .hw.init = &(struct clk_init_data){
1987                         .name = "gcc_pcie1_phy_refgen_clk",
1988                         .parent_hws = (const struct clk_hw *[]){
1989                                       &gcc_pcie_phy_refgen_clk_src.clkr.hw
1990                         },
1991                         .num_parents = 1,
1992                         .flags = CLK_SET_RATE_PARENT,
1993                         .ops = &clk_branch2_ops,
1994                 },
1995         },
1996 };
1997
1998 static struct clk_branch gcc_pcie2_phy_refgen_clk = {
1999         .halt_reg = 0x6f034,
2000         .halt_check = BRANCH_HALT,
2001         .clkr = {
2002                 .enable_reg = 0x6f034,
2003                 .enable_mask = BIT(0),
2004                 .hw.init = &(struct clk_init_data){
2005                         .name = "gcc_pcie2_phy_refgen_clk",
2006                         .parent_hws = (const struct clk_hw *[]){
2007                                       &gcc_pcie_phy_refgen_clk_src.clkr.hw
2008                         },
2009                         .num_parents = 1,
2010                         .flags = CLK_SET_RATE_PARENT,
2011                         .ops = &clk_branch2_ops,
2012                 },
2013         },
2014 };
2015
2016 static struct clk_branch gcc_pcie3_phy_refgen_clk = {
2017         .halt_reg = 0x6f038,
2018         .halt_check = BRANCH_HALT,
2019         .clkr = {
2020                 .enable_reg = 0x6f038,
2021                 .enable_mask = BIT(0),
2022                 .hw.init = &(struct clk_init_data){
2023                         .name = "gcc_pcie3_phy_refgen_clk",
2024                         .parent_hws = (const struct clk_hw *[]){
2025                                       &gcc_pcie_phy_refgen_clk_src.clkr.hw
2026                         },
2027                         .num_parents = 1,
2028                         .flags = CLK_SET_RATE_PARENT,
2029                         .ops = &clk_branch2_ops,
2030                 },
2031         },
2032 };
2033
2034 static struct clk_branch gcc_pcie_0_aux_clk = {
2035         .halt_reg = 0x6b020,
2036         .halt_check = BRANCH_HALT_VOTED,
2037         .clkr = {
2038                 .enable_reg = 0x5200c,
2039                 .enable_mask = BIT(3),
2040                 .hw.init = &(struct clk_init_data){
2041                         .name = "gcc_pcie_0_aux_clk",
2042                         .parent_hws = (const struct clk_hw *[]){
2043                                       &gcc_pcie_0_aux_clk_src.clkr.hw
2044                         },
2045                         .num_parents = 1,
2046                         .flags = CLK_SET_RATE_PARENT,
2047                         .ops = &clk_branch2_ops,
2048                 },
2049         },
2050 };
2051
2052 static struct clk_branch gcc_pcie_0_cfg_ahb_clk = {
2053         .halt_reg = 0x6b01c,
2054         .halt_check = BRANCH_HALT_VOTED,
2055         .hwcg_reg = 0x6b01c,
2056         .hwcg_bit = 1,
2057         .clkr = {
2058                 .enable_reg = 0x5200c,
2059                 .enable_mask = BIT(2),
2060                 .hw.init = &(struct clk_init_data){
2061                         .name = "gcc_pcie_0_cfg_ahb_clk",
2062                         .ops = &clk_branch2_ops,
2063                 },
2064         },
2065 };
2066
2067 static struct clk_branch gcc_pcie_0_clkref_clk = {
2068         .halt_reg = 0x8c00c,
2069         .halt_check = BRANCH_HALT,
2070         .clkr = {
2071                 .enable_reg = 0x8c00c,
2072                 .enable_mask = BIT(0),
2073                 .hw.init = &(struct clk_init_data){
2074                         .name = "gcc_pcie_0_clkref_clk",
2075                         .ops = &clk_branch2_ops,
2076                 },
2077         },
2078 };
2079
2080 static struct clk_branch gcc_pcie_0_mstr_axi_clk = {
2081         .halt_reg = 0x6b018,
2082         .halt_check = BRANCH_HALT_VOTED,
2083         .clkr = {
2084                 .enable_reg = 0x5200c,
2085                 .enable_mask = BIT(1),
2086                 .hw.init = &(struct clk_init_data){
2087                         .name = "gcc_pcie_0_mstr_axi_clk",
2088                         .ops = &clk_branch2_ops,
2089                 },
2090         },
2091 };
2092
2093 static struct clk_branch gcc_pcie_0_pipe_clk = {
2094         .halt_reg = 0x6b024,
2095         .halt_check = BRANCH_HALT_SKIP,
2096         .clkr = {
2097                 .enable_reg = 0x5200c,
2098                 .enable_mask = BIT(4),
2099                 .hw.init = &(struct clk_init_data){
2100                         .name = "gcc_pcie_0_pipe_clk",
2101                         .ops = &clk_branch2_ops,
2102                 },
2103         },
2104 };
2105
2106 static struct clk_branch gcc_pcie_0_slv_axi_clk = {
2107         .halt_reg = 0x6b014,
2108         .halt_check = BRANCH_HALT_VOTED,
2109         .hwcg_reg = 0x6b014,
2110         .hwcg_bit = 1,
2111         .clkr = {
2112                 .enable_reg = 0x5200c,
2113                 .enable_mask = BIT(0),
2114                 .hw.init = &(struct clk_init_data){
2115                         .name = "gcc_pcie_0_slv_axi_clk",
2116                         .ops = &clk_branch2_ops,
2117                 },
2118         },
2119 };
2120
2121 static struct clk_branch gcc_pcie_0_slv_q2a_axi_clk = {
2122         .halt_reg = 0x6b010,
2123         .halt_check = BRANCH_HALT_VOTED,
2124         .clkr = {
2125                 .enable_reg = 0x5200c,
2126                 .enable_mask = BIT(5),
2127                 .hw.init = &(struct clk_init_data){
2128                         .name = "gcc_pcie_0_slv_q2a_axi_clk",
2129                         .ops = &clk_branch2_ops,
2130                 },
2131         },
2132 };
2133
2134 static struct clk_branch gcc_pcie_1_aux_clk = {
2135         .halt_reg = 0x8d020,
2136         .halt_check = BRANCH_HALT_VOTED,
2137         .clkr = {
2138                 .enable_reg = 0x52004,
2139                 .enable_mask = BIT(29),
2140                 .hw.init = &(struct clk_init_data){
2141                         .name = "gcc_pcie_1_aux_clk",
2142                         .parent_hws = (const struct clk_hw *[]){
2143                                 &gcc_pcie_1_aux_clk_src.clkr.hw
2144                         },
2145                         .num_parents = 1,
2146                         .flags = CLK_SET_RATE_PARENT,
2147                         .ops = &clk_branch2_ops,
2148                 },
2149         },
2150 };
2151
2152 static struct clk_branch gcc_pcie_1_cfg_ahb_clk = {
2153         .halt_reg = 0x8d01c,
2154         .halt_check = BRANCH_HALT_VOTED,
2155         .hwcg_reg = 0x8d01c,
2156         .hwcg_bit = 1,
2157         .clkr = {
2158                 .enable_reg = 0x52004,
2159                 .enable_mask = BIT(28),
2160                 .hw.init = &(struct clk_init_data){
2161                         .name = "gcc_pcie_1_cfg_ahb_clk",
2162                         .ops = &clk_branch2_ops,
2163                 },
2164         },
2165 };
2166
2167 static struct clk_branch gcc_pcie_1_clkref_clk = {
2168         .halt_reg = 0x8c02c,
2169         .halt_check = BRANCH_HALT,
2170         .clkr = {
2171                 .enable_reg = 0x8c02c,
2172                 .enable_mask = BIT(0),
2173                 .hw.init = &(struct clk_init_data){
2174                         .name = "gcc_pcie_1_clkref_clk",
2175                         .ops = &clk_branch2_ops,
2176                 },
2177         },
2178 };
2179
2180 static struct clk_branch gcc_pcie_1_mstr_axi_clk = {
2181         .halt_reg = 0x8d018,
2182         .halt_check = BRANCH_HALT_VOTED,
2183         .clkr = {
2184                 .enable_reg = 0x52004,
2185                 .enable_mask = BIT(27),
2186                 .hw.init = &(struct clk_init_data){
2187                         .name = "gcc_pcie_1_mstr_axi_clk",
2188                         .ops = &clk_branch2_ops,
2189                 },
2190         },
2191 };
2192
2193 static struct clk_branch gcc_pcie_1_pipe_clk = {
2194         .halt_reg = 0x8d024,
2195         .halt_check = BRANCH_HALT_SKIP,
2196         .clkr = {
2197                 .enable_reg = 0x52004,
2198                 .enable_mask = BIT(30),
2199                 .hw.init = &(struct clk_init_data){
2200                         .name = "gcc_pcie_1_pipe_clk",
2201                         .ops = &clk_branch2_ops,
2202                 },
2203         },
2204 };
2205
2206 static struct clk_branch gcc_pcie_1_slv_axi_clk = {
2207         .halt_reg = 0x8d014,
2208         .halt_check = BRANCH_HALT_VOTED,
2209         .hwcg_reg = 0x8d014,
2210         .hwcg_bit = 1,
2211         .clkr = {
2212                 .enable_reg = 0x52004,
2213                 .enable_mask = BIT(26),
2214                 .hw.init = &(struct clk_init_data){
2215                         .name = "gcc_pcie_1_slv_axi_clk",
2216                         .ops = &clk_branch2_ops,
2217                 },
2218         },
2219 };
2220
2221 static struct clk_branch gcc_pcie_1_slv_q2a_axi_clk = {
2222         .halt_reg = 0x8d010,
2223         .halt_check = BRANCH_HALT_VOTED,
2224         .clkr = {
2225                 .enable_reg = 0x52004,
2226                 .enable_mask = BIT(25),
2227                 .hw.init = &(struct clk_init_data){
2228                         .name = "gcc_pcie_1_slv_q2a_axi_clk",
2229                         .ops = &clk_branch2_ops,
2230                 },
2231         },
2232 };
2233
2234 static struct clk_branch gcc_pcie_2_aux_clk = {
2235         .halt_reg = 0x9d020,
2236         .halt_check = BRANCH_HALT_VOTED,
2237         .clkr = {
2238                 .enable_reg = 0x52014,
2239                 .enable_mask = BIT(14),
2240                 .hw.init = &(struct clk_init_data){
2241                         .name = "gcc_pcie_2_aux_clk",
2242                         .parent_hws = (const struct clk_hw *[]){
2243                                 &gcc_pcie_2_aux_clk_src.clkr.hw
2244                         },
2245                         .num_parents = 1,
2246                         .flags = CLK_SET_RATE_PARENT,
2247                         .ops = &clk_branch2_ops,
2248                 },
2249         },
2250 };
2251
2252 static struct clk_branch gcc_pcie_2_cfg_ahb_clk = {
2253         .halt_reg = 0x9d01c,
2254         .halt_check = BRANCH_HALT_VOTED,
2255         .hwcg_reg = 0x9d01c,
2256         .hwcg_bit = 1,
2257         .clkr = {
2258                 .enable_reg = 0x52014,
2259                 .enable_mask = BIT(13),
2260                 .hw.init = &(struct clk_init_data){
2261                         .name = "gcc_pcie_2_cfg_ahb_clk",
2262                         .ops = &clk_branch2_ops,
2263                 },
2264         },
2265 };
2266
2267 static struct clk_branch gcc_pcie_2_clkref_clk = {
2268         .halt_reg = 0x8c014,
2269         .halt_check = BRANCH_HALT,
2270         .clkr = {
2271                 .enable_reg = 0x8c014,
2272                 .enable_mask = BIT(0),
2273                 .hw.init = &(struct clk_init_data){
2274                         .name = "gcc_pcie_2_clkref_clk",
2275                         .ops = &clk_branch2_ops,
2276                 },
2277         },
2278 };
2279
2280 static struct clk_branch gcc_pcie_2_mstr_axi_clk = {
2281         .halt_reg = 0x9d018,
2282         .halt_check = BRANCH_HALT_VOTED,
2283         .clkr = {
2284                 .enable_reg = 0x52014,
2285                 .enable_mask = BIT(12),
2286                 .hw.init = &(struct clk_init_data){
2287                         .name = "gcc_pcie_2_mstr_axi_clk",
2288                         .ops = &clk_branch2_ops,
2289                 },
2290         },
2291 };
2292
2293 static struct clk_branch gcc_pcie_2_pipe_clk = {
2294         .halt_reg = 0x9d024,
2295         .halt_check = BRANCH_HALT_SKIP,
2296         .clkr = {
2297                 .enable_reg = 0x52014,
2298                 .enable_mask = BIT(15),
2299                 .hw.init = &(struct clk_init_data){
2300                         .name = "gcc_pcie_2_pipe_clk",
2301                         .ops = &clk_branch2_ops,
2302                 },
2303         },
2304 };
2305
2306 static struct clk_branch gcc_pcie_2_slv_axi_clk = {
2307         .halt_reg = 0x9d014,
2308         .halt_check = BRANCH_HALT_VOTED,
2309         .hwcg_reg = 0x9d014,
2310         .hwcg_bit = 1,
2311         .clkr = {
2312                 .enable_reg = 0x52014,
2313                 .enable_mask = BIT(11),
2314                 .hw.init = &(struct clk_init_data){
2315                         .name = "gcc_pcie_2_slv_axi_clk",
2316                         .ops = &clk_branch2_ops,
2317                 },
2318         },
2319 };
2320
2321 static struct clk_branch gcc_pcie_2_slv_q2a_axi_clk = {
2322         .halt_reg = 0x9d010,
2323         .halt_check = BRANCH_HALT_VOTED,
2324         .clkr = {
2325                 .enable_reg = 0x52014,
2326                 .enable_mask = BIT(10),
2327                 .hw.init = &(struct clk_init_data){
2328                         .name = "gcc_pcie_2_slv_q2a_axi_clk",
2329                         .ops = &clk_branch2_ops,
2330                 },
2331         },
2332 };
2333
2334 static struct clk_branch gcc_pcie_3_aux_clk = {
2335         .halt_reg = 0xa3020,
2336         .halt_check = BRANCH_HALT_VOTED,
2337         .clkr = {
2338                 .enable_reg = 0x52014,
2339                 .enable_mask = BIT(20),
2340                 .hw.init = &(struct clk_init_data){
2341                         .name = "gcc_pcie_3_aux_clk",
2342                         .parent_hws = (const struct clk_hw *[]){
2343                                 &gcc_pcie_3_aux_clk_src.clkr.hw
2344                         },
2345                         .num_parents = 1,
2346                         .flags = CLK_SET_RATE_PARENT,
2347                         .ops = &clk_branch2_ops,
2348                 },
2349         },
2350 };
2351
2352 static struct clk_branch gcc_pcie_3_cfg_ahb_clk = {
2353         .halt_reg = 0xa301c,
2354         .halt_check = BRANCH_HALT_VOTED,
2355         .hwcg_reg = 0xa301c,
2356         .hwcg_bit = 1,
2357         .clkr = {
2358                 .enable_reg = 0x52014,
2359                 .enable_mask = BIT(19),
2360                 .hw.init = &(struct clk_init_data){
2361                         .name = "gcc_pcie_3_cfg_ahb_clk",
2362                         .ops = &clk_branch2_ops,
2363                 },
2364         },
2365 };
2366
2367 static struct clk_branch gcc_pcie_3_clkref_clk = {
2368         .halt_reg = 0x8c018,
2369         .halt_check = BRANCH_HALT,
2370         .clkr = {
2371                 .enable_reg = 0x8c018,
2372                 .enable_mask = BIT(0),
2373                 .hw.init = &(struct clk_init_data){
2374                         .name = "gcc_pcie_3_clkref_clk",
2375                         .ops = &clk_branch2_ops,
2376                 },
2377         },
2378 };
2379
2380 static struct clk_branch gcc_pcie_3_mstr_axi_clk = {
2381         .halt_reg = 0xa3018,
2382         .halt_check = BRANCH_HALT_VOTED,
2383         .clkr = {
2384                 .enable_reg = 0x52014,
2385                 .enable_mask = BIT(18),
2386                 .hw.init = &(struct clk_init_data){
2387                         .name = "gcc_pcie_3_mstr_axi_clk",
2388                         .ops = &clk_branch2_ops,
2389                 },
2390         },
2391 };
2392
2393 static struct clk_branch gcc_pcie_3_pipe_clk = {
2394         .halt_reg = 0xa3024,
2395         .halt_check = BRANCH_HALT_SKIP,
2396         .clkr = {
2397                 .enable_reg = 0x52014,
2398                 .enable_mask = BIT(21),
2399                 .hw.init = &(struct clk_init_data){
2400                         .name = "gcc_pcie_3_pipe_clk",
2401                         .ops = &clk_branch2_ops,
2402                 },
2403         },
2404 };
2405
2406 static struct clk_branch gcc_pcie_3_slv_axi_clk = {
2407         .halt_reg = 0xa3014,
2408         .halt_check = BRANCH_HALT_VOTED,
2409         .hwcg_reg = 0xa3014,
2410         .hwcg_bit = 1,
2411         .clkr = {
2412                 .enable_reg = 0x52014,
2413                 .enable_mask = BIT(17),
2414                 .hw.init = &(struct clk_init_data){
2415                         .name = "gcc_pcie_3_slv_axi_clk",
2416                         .ops = &clk_branch2_ops,
2417                 },
2418         },
2419 };
2420
2421 static struct clk_branch gcc_pcie_3_slv_q2a_axi_clk = {
2422         .halt_reg = 0xa3010,
2423         .halt_check = BRANCH_HALT_VOTED,
2424         .clkr = {
2425                 .enable_reg = 0x52014,
2426                 .enable_mask = BIT(16),
2427                 .hw.init = &(struct clk_init_data){
2428                         .name = "gcc_pcie_3_slv_q2a_axi_clk",
2429                         .ops = &clk_branch2_ops,
2430                 },
2431         },
2432 };
2433
2434 static struct clk_branch gcc_pcie_phy_aux_clk = {
2435         .halt_reg = 0x6f004,
2436         .halt_check = BRANCH_HALT,
2437         .clkr = {
2438                 .enable_reg = 0x6f004,
2439                 .enable_mask = BIT(0),
2440                 .hw.init = &(struct clk_init_data){
2441                         .name = "gcc_pcie_phy_aux_clk",
2442                         .parent_hws = (const struct clk_hw *[]){
2443                                       &gcc_pcie_0_aux_clk_src.clkr.hw
2444                         },
2445                         .num_parents = 1,
2446                         .flags = CLK_SET_RATE_PARENT,
2447                         .ops = &clk_branch2_ops,
2448                 },
2449         },
2450 };
2451
2452 static struct clk_branch gcc_pdm2_clk = {
2453         .halt_reg = 0x3300c,
2454         .halt_check = BRANCH_HALT,
2455         .clkr = {
2456                 .enable_reg = 0x3300c,
2457                 .enable_mask = BIT(0),
2458                 .hw.init = &(struct clk_init_data){
2459                         .name = "gcc_pdm2_clk",
2460                         .parent_hws = (const struct clk_hw *[]){
2461                                       &gcc_pdm2_clk_src.clkr.hw
2462                         },
2463                         .num_parents = 1,
2464                         .flags = CLK_SET_RATE_PARENT,
2465                         .ops = &clk_branch2_ops,
2466                 },
2467         },
2468 };
2469
2470 static struct clk_branch gcc_pdm_ahb_clk = {
2471         .halt_reg = 0x33004,
2472         .halt_check = BRANCH_HALT,
2473         .hwcg_reg = 0x33004,
2474         .hwcg_bit = 1,
2475         .clkr = {
2476                 .enable_reg = 0x33004,
2477                 .enable_mask = BIT(0),
2478                 .hw.init = &(struct clk_init_data){
2479                         .name = "gcc_pdm_ahb_clk",
2480                         .ops = &clk_branch2_ops,
2481                 },
2482         },
2483 };
2484
2485 static struct clk_branch gcc_pdm_xo4_clk = {
2486         .halt_reg = 0x33008,
2487         .halt_check = BRANCH_HALT,
2488         .clkr = {
2489                 .enable_reg = 0x33008,
2490                 .enable_mask = BIT(0),
2491                 .hw.init = &(struct clk_init_data){
2492                         .name = "gcc_pdm_xo4_clk",
2493                         .ops = &clk_branch2_ops,
2494                 },
2495         },
2496 };
2497
2498 static struct clk_branch gcc_prng_ahb_clk = {
2499         .halt_reg = 0x34004,
2500         .halt_check = BRANCH_HALT_VOTED,
2501         .clkr = {
2502                 .enable_reg = 0x52004,
2503                 .enable_mask = BIT(13),
2504                 .hw.init = &(struct clk_init_data){
2505                         .name = "gcc_prng_ahb_clk",
2506                         .ops = &clk_branch2_ops,
2507                 },
2508         },
2509 };
2510
2511 static struct clk_branch gcc_qmip_camera_nrt_ahb_clk = {
2512         .halt_reg = 0xb018,
2513         .halt_check = BRANCH_HALT,
2514         .hwcg_reg = 0xb018,
2515         .hwcg_bit = 1,
2516         .clkr = {
2517                 .enable_reg = 0xb018,
2518                 .enable_mask = BIT(0),
2519                 .hw.init = &(struct clk_init_data){
2520                         .name = "gcc_qmip_camera_nrt_ahb_clk",
2521                         .ops = &clk_branch2_ops,
2522                 },
2523         },
2524 };
2525
2526 static struct clk_branch gcc_qmip_camera_rt_ahb_clk = {
2527         .halt_reg = 0xb01c,
2528         .halt_check = BRANCH_HALT,
2529         .hwcg_reg = 0xb01c,
2530         .hwcg_bit = 1,
2531         .clkr = {
2532                 .enable_reg = 0xb01c,
2533                 .enable_mask = BIT(0),
2534                 .hw.init = &(struct clk_init_data){
2535                         .name = "gcc_qmip_camera_rt_ahb_clk",
2536                         .ops = &clk_branch2_ops,
2537                 },
2538         },
2539 };
2540
2541 static struct clk_branch gcc_qmip_disp_ahb_clk = {
2542         .halt_reg = 0xb020,
2543         .halt_check = BRANCH_HALT,
2544         .hwcg_reg = 0xb020,
2545         .hwcg_bit = 1,
2546         .clkr = {
2547                 .enable_reg = 0xb020,
2548                 .enable_mask = BIT(0),
2549                 .hw.init = &(struct clk_init_data){
2550                         .name = "gcc_qmip_disp_ahb_clk",
2551                         .ops = &clk_branch2_ops,
2552                 },
2553         },
2554 };
2555
2556 static struct clk_branch gcc_qmip_video_cvp_ahb_clk = {
2557         .halt_reg = 0xb010,
2558         .halt_check = BRANCH_HALT,
2559         .hwcg_reg = 0xb010,
2560         .hwcg_bit = 1,
2561         .clkr = {
2562                 .enable_reg = 0xb010,
2563                 .enable_mask = BIT(0),
2564                 .hw.init = &(struct clk_init_data){
2565                         .name = "gcc_qmip_video_cvp_ahb_clk",
2566                         .ops = &clk_branch2_ops,
2567                 },
2568         },
2569 };
2570
2571 static struct clk_branch gcc_qmip_video_vcodec_ahb_clk = {
2572         .halt_reg = 0xb014,
2573         .halt_check = BRANCH_HALT,
2574         .hwcg_reg = 0xb014,
2575         .hwcg_bit = 1,
2576         .clkr = {
2577                 .enable_reg = 0xb014,
2578                 .enable_mask = BIT(0),
2579                 .hw.init = &(struct clk_init_data){
2580                         .name = "gcc_qmip_video_vcodec_ahb_clk",
2581                         .ops = &clk_branch2_ops,
2582                 },
2583         },
2584 };
2585
2586 static struct clk_branch gcc_qspi_1_cnoc_periph_ahb_clk = {
2587         .halt_reg = 0x4a004,
2588         .halt_check = BRANCH_HALT,
2589         .clkr = {
2590                 .enable_reg = 0x4a004,
2591                 .enable_mask = BIT(0),
2592                 .hw.init = &(struct clk_init_data){
2593                         .name = "gcc_qspi_1_cnoc_periph_ahb_clk",
2594                         .ops = &clk_branch2_ops,
2595                 },
2596         },
2597 };
2598
2599 static struct clk_branch gcc_qspi_1_core_clk = {
2600         .halt_reg = 0x4a008,
2601         .halt_check = BRANCH_HALT,
2602         .clkr = {
2603                 .enable_reg = 0x4a008,
2604                 .enable_mask = BIT(0),
2605                 .hw.init = &(struct clk_init_data){
2606                         .name = "gcc_qspi_1_core_clk",
2607                         .parent_hws = (const struct clk_hw *[]){
2608                                       &gcc_qspi_1_core_clk_src.clkr.hw
2609                         },
2610                         .num_parents = 1,
2611                         .flags = CLK_SET_RATE_PARENT,
2612                         .ops = &clk_branch2_ops,
2613                 },
2614         },
2615 };
2616
2617 static struct clk_branch gcc_qspi_cnoc_periph_ahb_clk = {
2618         .halt_reg = 0x4b000,
2619         .halt_check = BRANCH_HALT,
2620         .clkr = {
2621                 .enable_reg = 0x4b000,
2622                 .enable_mask = BIT(0),
2623                 .hw.init = &(struct clk_init_data){
2624                         .name = "gcc_qspi_cnoc_periph_ahb_clk",
2625                         .ops = &clk_branch2_ops,
2626                 },
2627         },
2628 };
2629
2630 static struct clk_branch gcc_qspi_core_clk = {
2631         .halt_reg = 0x4b004,
2632         .halt_check = BRANCH_HALT,
2633         .clkr = {
2634                 .enable_reg = 0x4b004,
2635                 .enable_mask = BIT(0),
2636                 .hw.init = &(struct clk_init_data){
2637                         .name = "gcc_qspi_core_clk",
2638                         .parent_hws = (const struct clk_hw *[]){
2639                                       &gcc_qspi_core_clk_src.clkr.hw
2640                         },
2641                         .num_parents = 1,
2642                         .flags = CLK_SET_RATE_PARENT,
2643                         .ops = &clk_branch2_ops,
2644                 },
2645         },
2646 };
2647
2648 static struct clk_branch gcc_qupv3_wrap0_s0_clk = {
2649         .halt_reg = 0x17144,
2650         .halt_check = BRANCH_HALT_VOTED,
2651         .clkr = {
2652                 .enable_reg = 0x5200c,
2653                 .enable_mask = BIT(10),
2654                 .hw.init = &(struct clk_init_data){
2655                         .name = "gcc_qupv3_wrap0_s0_clk",
2656                         .parent_hws = (const struct clk_hw *[]){
2657                                       &gcc_qupv3_wrap0_s0_clk_src.clkr.hw
2658                         },
2659                         .num_parents = 1,
2660                         .flags = CLK_SET_RATE_PARENT,
2661                         .ops = &clk_branch2_ops,
2662                 },
2663         },
2664 };
2665
2666 static struct clk_branch gcc_qupv3_wrap0_s1_clk = {
2667         .halt_reg = 0x17274,
2668         .halt_check = BRANCH_HALT_VOTED,
2669         .clkr = {
2670                 .enable_reg = 0x5200c,
2671                 .enable_mask = BIT(11),
2672                 .hw.init = &(struct clk_init_data){
2673                         .name = "gcc_qupv3_wrap0_s1_clk",
2674                         .parent_hws = (const struct clk_hw *[]){
2675                                 &gcc_qupv3_wrap0_s1_clk_src.clkr.hw
2676                         },
2677                         .num_parents = 1,
2678                         .flags = CLK_SET_RATE_PARENT,
2679                         .ops = &clk_branch2_ops,
2680                 },
2681         },
2682 };
2683
2684 static struct clk_branch gcc_qupv3_wrap0_s2_clk = {
2685         .halt_reg = 0x173a4,
2686         .halt_check = BRANCH_HALT_VOTED,
2687         .clkr = {
2688                 .enable_reg = 0x5200c,
2689                 .enable_mask = BIT(12),
2690                 .hw.init = &(struct clk_init_data){
2691                         .name = "gcc_qupv3_wrap0_s2_clk",
2692                         .parent_hws = (const struct clk_hw *[]){
2693                                 &gcc_qupv3_wrap0_s2_clk_src.clkr.hw
2694                         },
2695                         .num_parents = 1,
2696                         .flags = CLK_SET_RATE_PARENT,
2697                         .ops = &clk_branch2_ops,
2698                 },
2699         },
2700 };
2701
2702 static struct clk_branch gcc_qupv3_wrap0_s3_clk = {
2703         .halt_reg = 0x174d4,
2704         .halt_check = BRANCH_HALT_VOTED,
2705         .clkr = {
2706                 .enable_reg = 0x5200c,
2707                 .enable_mask = BIT(13),
2708                 .hw.init = &(struct clk_init_data){
2709                         .name = "gcc_qupv3_wrap0_s3_clk",
2710                         .parent_hws = (const struct clk_hw *[]){
2711                                 &gcc_qupv3_wrap0_s3_clk_src.clkr.hw
2712                         },
2713                         .num_parents = 1,
2714                         .flags = CLK_SET_RATE_PARENT,
2715                         .ops = &clk_branch2_ops,
2716                 },
2717         },
2718 };
2719
2720 static struct clk_branch gcc_qupv3_wrap0_s4_clk = {
2721         .halt_reg = 0x17604,
2722         .halt_check = BRANCH_HALT_VOTED,
2723         .clkr = {
2724                 .enable_reg = 0x5200c,
2725                 .enable_mask = BIT(14),
2726                 .hw.init = &(struct clk_init_data){
2727                         .name = "gcc_qupv3_wrap0_s4_clk",
2728                         .parent_hws = (const struct clk_hw *[]){
2729                                 &gcc_qupv3_wrap0_s4_clk_src.clkr.hw
2730                         },
2731                         .num_parents = 1,
2732                         .flags = CLK_SET_RATE_PARENT,
2733                         .ops = &clk_branch2_ops,
2734                 },
2735         },
2736 };
2737
2738 static struct clk_branch gcc_qupv3_wrap0_s5_clk = {
2739         .halt_reg = 0x17734,
2740         .halt_check = BRANCH_HALT_VOTED,
2741         .clkr = {
2742                 .enable_reg = 0x5200c,
2743                 .enable_mask = BIT(15),
2744                 .hw.init = &(struct clk_init_data){
2745                         .name = "gcc_qupv3_wrap0_s5_clk",
2746                         .parent_hws = (const struct clk_hw *[]){
2747                                 &gcc_qupv3_wrap0_s5_clk_src.clkr.hw
2748                         },
2749                         .num_parents = 1,
2750                         .flags = CLK_SET_RATE_PARENT,
2751                         .ops = &clk_branch2_ops,
2752                 },
2753         },
2754 };
2755
2756 static struct clk_branch gcc_qupv3_wrap0_s6_clk = {
2757         .halt_reg = 0x17864,
2758         .halt_check = BRANCH_HALT_VOTED,
2759         .clkr = {
2760                 .enable_reg = 0x5200c,
2761                 .enable_mask = BIT(16),
2762                 .hw.init = &(struct clk_init_data){
2763                         .name = "gcc_qupv3_wrap0_s6_clk",
2764                         .parent_hws = (const struct clk_hw *[]){
2765                                 &gcc_qupv3_wrap0_s6_clk_src.clkr.hw
2766                         },
2767                         .num_parents = 1,
2768                         .flags = CLK_SET_RATE_PARENT,
2769                         .ops = &clk_branch2_ops,
2770                 },
2771         },
2772 };
2773
2774 static struct clk_branch gcc_qupv3_wrap0_s7_clk = {
2775         .halt_reg = 0x17994,
2776         .halt_check = BRANCH_HALT_VOTED,
2777         .clkr = {
2778                 .enable_reg = 0x5200c,
2779                 .enable_mask = BIT(17),
2780                 .hw.init = &(struct clk_init_data){
2781                         .name = "gcc_qupv3_wrap0_s7_clk",
2782                         .parent_hws = (const struct clk_hw *[]){
2783                                 &gcc_qupv3_wrap0_s7_clk_src.clkr.hw
2784                         },
2785                         .num_parents = 1,
2786                         .flags = CLK_SET_RATE_PARENT,
2787                         .ops = &clk_branch2_ops,
2788                 },
2789         },
2790 };
2791
2792 static struct clk_branch gcc_qupv3_wrap1_s0_clk = {
2793         .halt_reg = 0x18144,
2794         .halt_check = BRANCH_HALT_VOTED,
2795         .clkr = {
2796                 .enable_reg = 0x5200c,
2797                 .enable_mask = BIT(22),
2798                 .hw.init = &(struct clk_init_data){
2799                         .name = "gcc_qupv3_wrap1_s0_clk",
2800                         .parent_hws = (const struct clk_hw *[]){
2801                                 &gcc_qupv3_wrap1_s0_clk_src.clkr.hw
2802                         },
2803                         .num_parents = 1,
2804                         .flags = CLK_SET_RATE_PARENT,
2805                         .ops = &clk_branch2_ops,
2806                 },
2807         },
2808 };
2809
2810 static struct clk_branch gcc_qupv3_wrap1_s1_clk = {
2811         .halt_reg = 0x18274,
2812         .halt_check = BRANCH_HALT_VOTED,
2813         .clkr = {
2814                 .enable_reg = 0x5200c,
2815                 .enable_mask = BIT(23),
2816                 .hw.init = &(struct clk_init_data){
2817                         .name = "gcc_qupv3_wrap1_s1_clk",
2818                         .parent_hws = (const struct clk_hw *[]){
2819                                 &gcc_qupv3_wrap1_s1_clk_src.clkr.hw
2820                         },
2821                         .num_parents = 1,
2822                         .flags = CLK_SET_RATE_PARENT,
2823                         .ops = &clk_branch2_ops,
2824                 },
2825         },
2826 };
2827
2828 static struct clk_branch gcc_qupv3_wrap1_s2_clk = {
2829         .halt_reg = 0x183a4,
2830         .halt_check = BRANCH_HALT_VOTED,
2831         .clkr = {
2832                 .enable_reg = 0x5200c,
2833                 .enable_mask = BIT(24),
2834                 .hw.init = &(struct clk_init_data){
2835                         .name = "gcc_qupv3_wrap1_s2_clk",
2836                         .parent_hws = (const struct clk_hw *[]){
2837                                 &gcc_qupv3_wrap1_s2_clk_src.clkr.hw
2838                         },
2839                         .num_parents = 1,
2840                         .flags = CLK_SET_RATE_PARENT,
2841                         .ops = &clk_branch2_ops,
2842                 },
2843         },
2844 };
2845
2846 static struct clk_branch gcc_qupv3_wrap1_s3_clk = {
2847         .halt_reg = 0x184d4,
2848         .halt_check = BRANCH_HALT_VOTED,
2849         .clkr = {
2850                 .enable_reg = 0x5200c,
2851                 .enable_mask = BIT(25),
2852                 .hw.init = &(struct clk_init_data){
2853                         .name = "gcc_qupv3_wrap1_s3_clk",
2854                         .parent_hws = (const struct clk_hw *[]){
2855                                 &gcc_qupv3_wrap1_s3_clk_src.clkr.hw
2856                         },
2857                         .num_parents = 1,
2858                         .flags = CLK_SET_RATE_PARENT,
2859                         .ops = &clk_branch2_ops,
2860                 },
2861         },
2862 };
2863
2864 static struct clk_branch gcc_qupv3_wrap1_s4_clk = {
2865         .halt_reg = 0x18604,
2866         .halt_check = BRANCH_HALT_VOTED,
2867         .clkr = {
2868                 .enable_reg = 0x5200c,
2869                 .enable_mask = BIT(26),
2870                 .hw.init = &(struct clk_init_data){
2871                         .name = "gcc_qupv3_wrap1_s4_clk",
2872                         .parent_hws = (const struct clk_hw *[]){
2873                                 &gcc_qupv3_wrap1_s4_clk_src.clkr.hw
2874                         },
2875                         .num_parents = 1,
2876                         .flags = CLK_SET_RATE_PARENT,
2877                         .ops = &clk_branch2_ops,
2878                 },
2879         },
2880 };
2881
2882 static struct clk_branch gcc_qupv3_wrap1_s5_clk = {
2883         .halt_reg = 0x18734,
2884         .halt_check = BRANCH_HALT_VOTED,
2885         .clkr = {
2886                 .enable_reg = 0x5200c,
2887                 .enable_mask = BIT(27),
2888                 .hw.init = &(struct clk_init_data){
2889                         .name = "gcc_qupv3_wrap1_s5_clk",
2890                         .parent_hws = (const struct clk_hw *[]){
2891                                 &gcc_qupv3_wrap1_s5_clk_src.clkr.hw
2892                         },
2893                         .num_parents = 1,
2894                         .flags = CLK_SET_RATE_PARENT,
2895                         .ops = &clk_branch2_ops,
2896                 },
2897         },
2898 };
2899
2900 static struct clk_branch gcc_qupv3_wrap2_s0_clk = {
2901         .halt_reg = 0x1e144,
2902         .halt_check = BRANCH_HALT_VOTED,
2903         .clkr = {
2904                 .enable_reg = 0x52014,
2905                 .enable_mask = BIT(4),
2906                 .hw.init = &(struct clk_init_data){
2907                         .name = "gcc_qupv3_wrap2_s0_clk",
2908                         .parent_hws = (const struct clk_hw *[]){
2909                                 &gcc_qupv3_wrap2_s0_clk_src.clkr.hw
2910                         },
2911                         .num_parents = 1,
2912                         .flags = CLK_SET_RATE_PARENT,
2913                         .ops = &clk_branch2_ops,
2914                 },
2915         },
2916 };
2917
2918 static struct clk_branch gcc_qupv3_wrap2_s1_clk = {
2919         .halt_reg = 0x1e274,
2920         .halt_check = BRANCH_HALT_VOTED,
2921         .clkr = {
2922                 .enable_reg = 0x52014,
2923                 .enable_mask = BIT(5),
2924                 .hw.init = &(struct clk_init_data){
2925                         .name = "gcc_qupv3_wrap2_s1_clk",
2926                         .parent_hws = (const struct clk_hw *[]){
2927                                 &gcc_qupv3_wrap2_s1_clk_src.clkr.hw
2928                         },
2929                         .num_parents = 1,
2930                         .flags = CLK_SET_RATE_PARENT,
2931                         .ops = &clk_branch2_ops,
2932                 },
2933         },
2934 };
2935
2936 static struct clk_branch gcc_qupv3_wrap2_s2_clk = {
2937         .halt_reg = 0x1e3a4,
2938         .halt_check = BRANCH_HALT_VOTED,
2939         .clkr = {
2940                 .enable_reg = 0x52014,
2941                 .enable_mask = BIT(6),
2942                 .hw.init = &(struct clk_init_data){
2943                         .name = "gcc_qupv3_wrap2_s2_clk",
2944                         .parent_hws = (const struct clk_hw *[]){
2945                                 &gcc_qupv3_wrap2_s2_clk_src.clkr.hw
2946                         },
2947                         .num_parents = 1,
2948                         .flags = CLK_SET_RATE_PARENT,
2949                         .ops = &clk_branch2_ops,
2950                 },
2951         },
2952 };
2953
2954 static struct clk_branch gcc_qupv3_wrap2_s3_clk = {
2955         .halt_reg = 0x1e4d4,
2956         .halt_check = BRANCH_HALT_VOTED,
2957         .clkr = {
2958                 .enable_reg = 0x52014,
2959                 .enable_mask = BIT(7),
2960                 .hw.init = &(struct clk_init_data){
2961                         .name = "gcc_qupv3_wrap2_s3_clk",
2962                         .parent_hws = (const struct clk_hw *[]){
2963                                 &gcc_qupv3_wrap2_s3_clk_src.clkr.hw
2964                         },
2965                         .num_parents = 1,
2966                         .flags = CLK_SET_RATE_PARENT,
2967                         .ops = &clk_branch2_ops,
2968                 },
2969         },
2970 };
2971
2972 static struct clk_branch gcc_qupv3_wrap2_s4_clk = {
2973         .halt_reg = 0x1e604,
2974         .halt_check = BRANCH_HALT_VOTED,
2975         .clkr = {
2976                 .enable_reg = 0x52014,
2977                 .enable_mask = BIT(8),
2978                 .hw.init = &(struct clk_init_data){
2979                         .name = "gcc_qupv3_wrap2_s4_clk",
2980                         .parent_hws = (const struct clk_hw *[]){
2981                                 &gcc_qupv3_wrap2_s4_clk_src.clkr.hw
2982                         },
2983                         .num_parents = 1,
2984                         .flags = CLK_SET_RATE_PARENT,
2985                         .ops = &clk_branch2_ops,
2986                 },
2987         },
2988 };
2989
2990 static struct clk_branch gcc_qupv3_wrap2_s5_clk = {
2991         .halt_reg = 0x1e734,
2992         .halt_check = BRANCH_HALT_VOTED,
2993         .clkr = {
2994                 .enable_reg = 0x52014,
2995                 .enable_mask = BIT(9),
2996                 .hw.init = &(struct clk_init_data){
2997                         .name = "gcc_qupv3_wrap2_s5_clk",
2998                         .parent_hws = (const struct clk_hw *[]){
2999                                 &gcc_qupv3_wrap2_s5_clk_src.clkr.hw
3000                         },
3001                         .num_parents = 1,
3002                         .flags = CLK_SET_RATE_PARENT,
3003                         .ops = &clk_branch2_ops,
3004                 },
3005         },
3006 };
3007
3008 static struct clk_branch gcc_qupv3_wrap_0_m_ahb_clk = {
3009         .halt_reg = 0x17004,
3010         .halt_check = BRANCH_HALT_VOTED,
3011         .clkr = {
3012                 .enable_reg = 0x5200c,
3013                 .enable_mask = BIT(6),
3014                 .hw.init = &(struct clk_init_data){
3015                         .name = "gcc_qupv3_wrap_0_m_ahb_clk",
3016                         .ops = &clk_branch2_ops,
3017                 },
3018         },
3019 };
3020
3021 static struct clk_branch gcc_qupv3_wrap_0_s_ahb_clk = {
3022         .halt_reg = 0x17008,
3023         .halt_check = BRANCH_HALT_VOTED,
3024         .hwcg_reg = 0x17008,
3025         .hwcg_bit = 1,
3026         .clkr = {
3027                 .enable_reg = 0x5200c,
3028                 .enable_mask = BIT(7),
3029                 .hw.init = &(struct clk_init_data){
3030                         .name = "gcc_qupv3_wrap_0_s_ahb_clk",
3031                         .ops = &clk_branch2_ops,
3032                 },
3033         },
3034 };
3035
3036 static struct clk_branch gcc_qupv3_wrap_1_m_ahb_clk = {
3037         .halt_reg = 0x18004,
3038         .halt_check = BRANCH_HALT_VOTED,
3039         .clkr = {
3040                 .enable_reg = 0x5200c,
3041                 .enable_mask = BIT(20),
3042                 .hw.init = &(struct clk_init_data){
3043                         .name = "gcc_qupv3_wrap_1_m_ahb_clk",
3044                         .ops = &clk_branch2_ops,
3045                 },
3046         },
3047 };
3048
3049 static struct clk_branch gcc_qupv3_wrap_1_s_ahb_clk = {
3050         .halt_reg = 0x18008,
3051         .halt_check = BRANCH_HALT_VOTED,
3052         .hwcg_reg = 0x18008,
3053         .hwcg_bit = 1,
3054         .clkr = {
3055                 .enable_reg = 0x5200c,
3056                 .enable_mask = BIT(21),
3057                 .hw.init = &(struct clk_init_data){
3058                         .name = "gcc_qupv3_wrap_1_s_ahb_clk",
3059                         .ops = &clk_branch2_ops,
3060                 },
3061         },
3062 };
3063
3064 static struct clk_branch gcc_qupv3_wrap_2_m_ahb_clk = {
3065         .halt_reg = 0x1e004,
3066         .halt_check = BRANCH_HALT_VOTED,
3067         .clkr = {
3068                 .enable_reg = 0x52014,
3069                 .enable_mask = BIT(2),
3070                 .hw.init = &(struct clk_init_data){
3071                         .name = "gcc_qupv3_wrap_2_m_ahb_clk",
3072                         .ops = &clk_branch2_ops,
3073                 },
3074         },
3075 };
3076
3077 static struct clk_branch gcc_qupv3_wrap_2_s_ahb_clk = {
3078         .halt_reg = 0x1e008,
3079         .halt_check = BRANCH_HALT_VOTED,
3080         .hwcg_reg = 0x1e008,
3081         .hwcg_bit = 1,
3082         .clkr = {
3083                 .enable_reg = 0x52014,
3084                 .enable_mask = BIT(1),
3085                 .hw.init = &(struct clk_init_data){
3086                         .name = "gcc_qupv3_wrap_2_s_ahb_clk",
3087                         .ops = &clk_branch2_ops,
3088                 },
3089         },
3090 };
3091
3092 static struct clk_branch gcc_sdcc2_ahb_clk = {
3093         .halt_reg = 0x14008,
3094         .halt_check = BRANCH_HALT,
3095         .clkr = {
3096                 .enable_reg = 0x14008,
3097                 .enable_mask = BIT(0),
3098                 .hw.init = &(struct clk_init_data){
3099                         .name = "gcc_sdcc2_ahb_clk",
3100                         .ops = &clk_branch2_ops,
3101                 },
3102         },
3103 };
3104
3105 static struct clk_branch gcc_sdcc2_apps_clk = {
3106         .halt_reg = 0x14004,
3107         .halt_check = BRANCH_HALT,
3108         .clkr = {
3109                 .enable_reg = 0x14004,
3110                 .enable_mask = BIT(0),
3111                 .hw.init = &(struct clk_init_data){
3112                         .name = "gcc_sdcc2_apps_clk",
3113                         .parent_hws = (const struct clk_hw *[]){
3114                                 &gcc_sdcc2_apps_clk_src.clkr.hw
3115                         },
3116                         .num_parents = 1,
3117                         .flags = CLK_SET_RATE_PARENT,
3118                         .ops = &clk_branch2_ops,
3119                 },
3120         },
3121 };
3122
3123 static struct clk_branch gcc_sdcc4_ahb_clk = {
3124         .halt_reg = 0x16008,
3125         .halt_check = BRANCH_HALT,
3126         .clkr = {
3127                 .enable_reg = 0x16008,
3128                 .enable_mask = BIT(0),
3129                 .hw.init = &(struct clk_init_data){
3130                         .name = "gcc_sdcc4_ahb_clk",
3131                         .ops = &clk_branch2_ops,
3132                 },
3133         },
3134 };
3135
3136 static struct clk_branch gcc_sdcc4_apps_clk = {
3137         .halt_reg = 0x16004,
3138         .halt_check = BRANCH_HALT,
3139         .clkr = {
3140                 .enable_reg = 0x16004,
3141                 .enable_mask = BIT(0),
3142                 .hw.init = &(struct clk_init_data){
3143                         .name = "gcc_sdcc4_apps_clk",
3144                         .parent_hws = (const struct clk_hw *[]){
3145                                 &gcc_sdcc4_apps_clk_src.clkr.hw
3146                         },
3147                         .num_parents = 1,
3148                         .flags = CLK_SET_RATE_PARENT,
3149                         .ops = &clk_branch2_ops,
3150                 },
3151         },
3152 };
3153
3154 /* For CPUSS functionality the SYS NOC clock needs to be left enabled */
3155 static struct clk_branch gcc_sys_noc_cpuss_ahb_clk = {
3156         .halt_reg = 0x4819c,
3157         .halt_check = BRANCH_HALT_VOTED,
3158         .clkr = {
3159                 .enable_reg = 0x52004,
3160                 .enable_mask = BIT(0),
3161                 .hw.init = &(struct clk_init_data){
3162                         .name = "gcc_sys_noc_cpuss_ahb_clk",
3163                         .parent_hws = (const struct clk_hw *[]){
3164                                       &gcc_cpuss_ahb_clk_src.clkr.hw
3165                         },
3166                         .num_parents = 1,
3167                         .flags = CLK_IS_CRITICAL | CLK_SET_RATE_PARENT,
3168                         .ops = &clk_branch2_ops,
3169                 },
3170         },
3171 };
3172
3173 static struct clk_branch gcc_tsif_ahb_clk = {
3174         .halt_reg = 0x36004,
3175         .halt_check = BRANCH_HALT,
3176         .clkr = {
3177                 .enable_reg = 0x36004,
3178                 .enable_mask = BIT(0),
3179                 .hw.init = &(struct clk_init_data){
3180                         .name = "gcc_tsif_ahb_clk",
3181                         .ops = &clk_branch2_ops,
3182                 },
3183         },
3184 };
3185
3186 static struct clk_branch gcc_tsif_inactivity_timers_clk = {
3187         .halt_reg = 0x3600c,
3188         .halt_check = BRANCH_HALT,
3189         .clkr = {
3190                 .enable_reg = 0x3600c,
3191                 .enable_mask = BIT(0),
3192                 .hw.init = &(struct clk_init_data){
3193                         .name = "gcc_tsif_inactivity_timers_clk",
3194                         .ops = &clk_branch2_ops,
3195                 },
3196         },
3197 };
3198
3199 static struct clk_branch gcc_tsif_ref_clk = {
3200         .halt_reg = 0x36008,
3201         .halt_check = BRANCH_HALT,
3202         .clkr = {
3203                 .enable_reg = 0x36008,
3204                 .enable_mask = BIT(0),
3205                 .hw.init = &(struct clk_init_data){
3206                         .name = "gcc_tsif_ref_clk",
3207                         .parent_hws = (const struct clk_hw *[]){
3208                                 &gcc_tsif_ref_clk_src.clkr.hw
3209                         },
3210                         .num_parents = 1,
3211                         .flags = CLK_SET_RATE_PARENT,
3212                         .ops = &clk_branch2_ops,
3213                 },
3214         },
3215 };
3216
3217 static struct clk_branch gcc_ufs_card_2_ahb_clk = {
3218         .halt_reg = 0xa2014,
3219         .halt_check = BRANCH_HALT,
3220         .hwcg_reg = 0xa2014,
3221         .hwcg_bit = 1,
3222         .clkr = {
3223                 .enable_reg = 0xa2014,
3224                 .enable_mask = BIT(0),
3225                 .hw.init = &(struct clk_init_data){
3226                         .name = "gcc_ufs_card_2_ahb_clk",
3227                         .ops = &clk_branch2_ops,
3228                 },
3229         },
3230 };
3231
3232 static struct clk_branch gcc_ufs_card_2_axi_clk = {
3233         .halt_reg = 0xa2010,
3234         .halt_check = BRANCH_HALT,
3235         .hwcg_reg = 0xa2010,
3236         .hwcg_bit = 1,
3237         .clkr = {
3238                 .enable_reg = 0xa2010,
3239                 .enable_mask = BIT(0),
3240                 .hw.init = &(struct clk_init_data){
3241                         .name = "gcc_ufs_card_2_axi_clk",
3242                         .parent_hws = (const struct clk_hw *[]){
3243                                 &gcc_ufs_card_2_axi_clk_src.clkr.hw
3244                         },
3245                         .num_parents = 1,
3246                         .flags = CLK_SET_RATE_PARENT,
3247                         .ops = &clk_branch2_ops,
3248                 },
3249         },
3250 };
3251
3252 static struct clk_branch gcc_ufs_card_2_ice_core_clk = {
3253         .halt_reg = 0xa205c,
3254         .halt_check = BRANCH_HALT,
3255         .hwcg_reg = 0xa205c,
3256         .hwcg_bit = 1,
3257         .clkr = {
3258                 .enable_reg = 0xa205c,
3259                 .enable_mask = BIT(0),
3260                 .hw.init = &(struct clk_init_data){
3261                         .name = "gcc_ufs_card_2_ice_core_clk",
3262                         .parent_hws = (const struct clk_hw *[]){
3263                                 &gcc_ufs_card_2_ice_core_clk_src.clkr.hw
3264                         },
3265                         .num_parents = 1,
3266                         .flags = CLK_SET_RATE_PARENT,
3267                         .ops = &clk_branch2_ops,
3268                 },
3269         },
3270 };
3271
3272 static struct clk_branch gcc_ufs_card_2_phy_aux_clk = {
3273         .halt_reg = 0xa2090,
3274         .halt_check = BRANCH_HALT,
3275         .hwcg_reg = 0xa2090,
3276         .hwcg_bit = 1,
3277         .clkr = {
3278                 .enable_reg = 0xa2090,
3279                 .enable_mask = BIT(0),
3280                 .hw.init = &(struct clk_init_data){
3281                         .name = "gcc_ufs_card_2_phy_aux_clk",
3282                         .parent_hws = (const struct clk_hw *[]){
3283                                 &gcc_ufs_card_2_phy_aux_clk_src.clkr.hw
3284                         },
3285                         .num_parents = 1,
3286                         .flags = CLK_SET_RATE_PARENT,
3287                         .ops = &clk_branch2_ops,
3288                 },
3289         },
3290 };
3291
3292 static struct clk_branch gcc_ufs_card_2_rx_symbol_0_clk = {
3293         .halt_reg = 0xa201c,
3294         .halt_check = BRANCH_HALT,
3295         .clkr = {
3296                 .enable_reg = 0xa201c,
3297                 .enable_mask = BIT(0),
3298                 .hw.init = &(struct clk_init_data){
3299                         .name = "gcc_ufs_card_2_rx_symbol_0_clk",
3300                         .ops = &clk_branch2_ops,
3301                 },
3302         },
3303 };
3304
3305 static struct clk_branch gcc_ufs_card_2_rx_symbol_1_clk = {
3306         .halt_reg = 0xa20ac,
3307         .halt_check = BRANCH_HALT,
3308         .clkr = {
3309                 .enable_reg = 0xa20ac,
3310                 .enable_mask = BIT(0),
3311                 .hw.init = &(struct clk_init_data){
3312                         .name = "gcc_ufs_card_2_rx_symbol_1_clk",
3313                         .ops = &clk_branch2_ops,
3314                 },
3315         },
3316 };
3317
3318 static struct clk_branch gcc_ufs_card_2_tx_symbol_0_clk = {
3319         .halt_reg = 0xa2018,
3320         .halt_check = BRANCH_HALT,
3321         .clkr = {
3322                 .enable_reg = 0xa2018,
3323                 .enable_mask = BIT(0),
3324                 .hw.init = &(struct clk_init_data){
3325                         .name = "gcc_ufs_card_2_tx_symbol_0_clk",
3326                         .ops = &clk_branch2_ops,
3327                 },
3328         },
3329 };
3330
3331 static struct clk_branch gcc_ufs_card_2_unipro_core_clk = {
3332         .halt_reg = 0xa2058,
3333         .halt_check = BRANCH_HALT,
3334         .hwcg_reg = 0xa2058,
3335         .hwcg_bit = 1,
3336         .clkr = {
3337                 .enable_reg = 0xa2058,
3338                 .enable_mask = BIT(0),
3339                 .hw.init = &(struct clk_init_data){
3340                         .name = "gcc_ufs_card_2_unipro_core_clk",
3341                         .parent_hws = (const struct clk_hw *[]){
3342                                 &gcc_ufs_card_2_unipro_core_clk_src.clkr.hw
3343                         },
3344                         .num_parents = 1,
3345                         .flags = CLK_SET_RATE_PARENT,
3346                         .ops = &clk_branch2_ops,
3347                 },
3348         },
3349 };
3350
3351 static struct clk_branch gcc_ufs_card_ahb_clk = {
3352         .halt_reg = 0x75014,
3353         .halt_check = BRANCH_HALT,
3354         .hwcg_reg = 0x75014,
3355         .hwcg_bit = 1,
3356         .clkr = {
3357                 .enable_reg = 0x75014,
3358                 .enable_mask = BIT(0),
3359                 .hw.init = &(struct clk_init_data){
3360                         .name = "gcc_ufs_card_ahb_clk",
3361                         .ops = &clk_branch2_ops,
3362                 },
3363         },
3364 };
3365
3366 static struct clk_branch gcc_ufs_card_axi_clk = {
3367         .halt_reg = 0x75010,
3368         .halt_check = BRANCH_HALT,
3369         .hwcg_reg = 0x75010,
3370         .hwcg_bit = 1,
3371         .clkr = {
3372                 .enable_reg = 0x75010,
3373                 .enable_mask = BIT(0),
3374                 .hw.init = &(struct clk_init_data){
3375                         .name = "gcc_ufs_card_axi_clk",
3376                         .parent_hws = (const struct clk_hw *[]){
3377                                       &gcc_ufs_card_axi_clk_src.clkr.hw
3378                         },
3379                         .num_parents = 1,
3380                         .flags = CLK_SET_RATE_PARENT,
3381                         .ops = &clk_branch2_ops,
3382                 },
3383         },
3384 };
3385
3386 static struct clk_branch gcc_ufs_card_axi_hw_ctl_clk = {
3387         .halt_reg = 0x75010,
3388         .halt_check = BRANCH_HALT,
3389         .hwcg_reg = 0x75010,
3390         .hwcg_bit = 1,
3391         .clkr = {
3392                 .enable_reg = 0x75010,
3393                 .enable_mask = BIT(1),
3394                 .hw.init = &(struct clk_init_data){
3395                         .name = "gcc_ufs_card_axi_hw_ctl_clk",
3396                         .parent_hws = (const struct clk_hw *[]){
3397                                       &gcc_ufs_card_axi_clk.clkr.hw
3398                         },
3399                         .num_parents = 1,
3400                         .flags = CLK_SET_RATE_PARENT,
3401                         .ops = &clk_branch_simple_ops,
3402                 },
3403         },
3404 };
3405
3406 static struct clk_branch gcc_ufs_card_ice_core_clk = {
3407         .halt_reg = 0x7505c,
3408         .halt_check = BRANCH_HALT,
3409         .hwcg_reg = 0x7505c,
3410         .hwcg_bit = 1,
3411         .clkr = {
3412                 .enable_reg = 0x7505c,
3413                 .enable_mask = BIT(0),
3414                 .hw.init = &(struct clk_init_data){
3415                         .name = "gcc_ufs_card_ice_core_clk",
3416                         .parent_hws = (const struct clk_hw *[]){
3417                                       &gcc_ufs_card_ice_core_clk_src.clkr.hw
3418                         },
3419                         .num_parents = 1,
3420                         .flags = CLK_SET_RATE_PARENT,
3421                         .ops = &clk_branch2_ops,
3422                 },
3423         },
3424 };
3425
3426 static struct clk_branch gcc_ufs_card_ice_core_hw_ctl_clk = {
3427         .halt_reg = 0x7505c,
3428         .halt_check = BRANCH_HALT,
3429         .hwcg_reg = 0x7505c,
3430         .hwcg_bit = 1,
3431         .clkr = {
3432                 .enable_reg = 0x7505c,
3433                 .enable_mask = BIT(1),
3434                 .hw.init = &(struct clk_init_data){
3435                         .name = "gcc_ufs_card_ice_core_hw_ctl_clk",
3436                         .parent_hws = (const struct clk_hw *[]){
3437                                       &gcc_ufs_card_ice_core_clk.clkr.hw
3438                         },
3439                         .num_parents = 1,
3440                         .flags = CLK_SET_RATE_PARENT,
3441                         .ops = &clk_branch_simple_ops,
3442                 },
3443         },
3444 };
3445
3446 static struct clk_branch gcc_ufs_card_phy_aux_clk = {
3447         .halt_reg = 0x75090,
3448         .halt_check = BRANCH_HALT,
3449         .hwcg_reg = 0x75090,
3450         .hwcg_bit = 1,
3451         .clkr = {
3452                 .enable_reg = 0x75090,
3453                 .enable_mask = BIT(0),
3454                 .hw.init = &(struct clk_init_data){
3455                         .name = "gcc_ufs_card_phy_aux_clk",
3456                         .parent_hws = (const struct clk_hw *[]){
3457                                       &gcc_ufs_card_phy_aux_clk_src.clkr.hw
3458                         },
3459                         .num_parents = 1,
3460                         .flags = CLK_SET_RATE_PARENT,
3461                         .ops = &clk_branch2_ops,
3462                 },
3463         },
3464 };
3465
3466 static struct clk_branch gcc_ufs_card_phy_aux_hw_ctl_clk = {
3467         .halt_reg = 0x75090,
3468         .halt_check = BRANCH_HALT,
3469         .hwcg_reg = 0x75090,
3470         .hwcg_bit = 1,
3471         .clkr = {
3472                 .enable_reg = 0x75090,
3473                 .enable_mask = BIT(1),
3474                 .hw.init = &(struct clk_init_data){
3475                         .name = "gcc_ufs_card_phy_aux_hw_ctl_clk",
3476                         .parent_hws = (const struct clk_hw *[]){
3477                                       &gcc_ufs_card_phy_aux_clk.clkr.hw
3478                         },
3479                         .num_parents = 1,
3480                         .flags = CLK_SET_RATE_PARENT,
3481                         .ops = &clk_branch_simple_ops,
3482                 },
3483         },
3484 };
3485
3486 static struct clk_branch gcc_ufs_card_rx_symbol_0_clk = {
3487         .halt_reg = 0x7501c,
3488         .halt_check = BRANCH_HALT_DELAY,
3489         .clkr = {
3490                 .enable_reg = 0x7501c,
3491                 .enable_mask = BIT(0),
3492                 .hw.init = &(struct clk_init_data){
3493                         .name = "gcc_ufs_card_rx_symbol_0_clk",
3494                         .ops = &clk_branch2_ops,
3495                 },
3496         },
3497 };
3498
3499 static struct clk_branch gcc_ufs_card_rx_symbol_1_clk = {
3500         .halt_reg = 0x750ac,
3501         .halt_check = BRANCH_HALT_DELAY,
3502         .clkr = {
3503                 .enable_reg = 0x750ac,
3504                 .enable_mask = BIT(0),
3505                 .hw.init = &(struct clk_init_data){
3506                         .name = "gcc_ufs_card_rx_symbol_1_clk",
3507                         .ops = &clk_branch2_ops,
3508                 },
3509         },
3510 };
3511
3512 static struct clk_branch gcc_ufs_card_tx_symbol_0_clk = {
3513         .halt_reg = 0x75018,
3514         .halt_check = BRANCH_HALT_DELAY,
3515         .clkr = {
3516                 .enable_reg = 0x75018,
3517                 .enable_mask = BIT(0),
3518                 .hw.init = &(struct clk_init_data){
3519                         .name = "gcc_ufs_card_tx_symbol_0_clk",
3520                         .ops = &clk_branch2_ops,
3521                 },
3522         },
3523 };
3524
3525 static struct clk_branch gcc_ufs_card_unipro_core_clk = {
3526         .halt_reg = 0x75058,
3527         .halt_check = BRANCH_HALT,
3528         .hwcg_reg = 0x75058,
3529         .hwcg_bit = 1,
3530         .clkr = {
3531                 .enable_reg = 0x75058,
3532                 .enable_mask = BIT(0),
3533                 .hw.init = &(struct clk_init_data){
3534                         .name = "gcc_ufs_card_unipro_core_clk",
3535                         .parent_hws = (const struct clk_hw *[]){
3536                                       &gcc_ufs_card_unipro_core_clk_src.clkr.hw
3537                         },
3538                         .num_parents = 1,
3539                         .flags = CLK_SET_RATE_PARENT,
3540                         .ops = &clk_branch2_ops,
3541                 },
3542         },
3543 };
3544
3545 static struct clk_branch gcc_ufs_card_unipro_core_hw_ctl_clk = {
3546         .halt_reg = 0x75058,
3547         .halt_check = BRANCH_HALT,
3548         .hwcg_reg = 0x75058,
3549         .hwcg_bit = 1,
3550         .clkr = {
3551                 .enable_reg = 0x75058,
3552                 .enable_mask = BIT(1),
3553                 .hw.init = &(struct clk_init_data){
3554                         .name = "gcc_ufs_card_unipro_core_hw_ctl_clk",
3555                         .parent_hws = (const struct clk_hw *[]){
3556                                       &gcc_ufs_card_unipro_core_clk.clkr.hw
3557                         },
3558                         .num_parents = 1,
3559                         .flags = CLK_SET_RATE_PARENT,
3560                         .ops = &clk_branch_simple_ops,
3561                 },
3562         },
3563 };
3564
3565 static struct clk_branch gcc_ufs_phy_ahb_clk = {
3566         .halt_reg = 0x77014,
3567         .halt_check = BRANCH_HALT,
3568         .hwcg_reg = 0x77014,
3569         .hwcg_bit = 1,
3570         .clkr = {
3571                 .enable_reg = 0x77014,
3572                 .enable_mask = BIT(0),
3573                 .hw.init = &(struct clk_init_data){
3574                         .name = "gcc_ufs_phy_ahb_clk",
3575                         .ops = &clk_branch2_ops,
3576                 },
3577         },
3578 };
3579
3580 static struct clk_branch gcc_ufs_phy_axi_clk = {
3581         .halt_reg = 0x77010,
3582         .halt_check = BRANCH_HALT,
3583         .hwcg_reg = 0x77010,
3584         .hwcg_bit = 1,
3585         .clkr = {
3586                 .enable_reg = 0x77010,
3587                 .enable_mask = BIT(0),
3588                 .hw.init = &(struct clk_init_data){
3589                         .name = "gcc_ufs_phy_axi_clk",
3590                         .parent_hws = (const struct clk_hw *[]){
3591                                       &gcc_ufs_phy_axi_clk_src.clkr.hw
3592                         },
3593                         .num_parents = 1,
3594                         .flags = CLK_SET_RATE_PARENT,
3595                         .ops = &clk_branch2_ops,
3596                 },
3597         },
3598 };
3599
3600 static struct clk_branch gcc_ufs_phy_axi_hw_ctl_clk = {
3601         .halt_reg = 0x77010,
3602         .halt_check = BRANCH_HALT,
3603         .hwcg_reg = 0x77010,
3604         .hwcg_bit = 1,
3605         .clkr = {
3606                 .enable_reg = 0x77010,
3607                 .enable_mask = BIT(1),
3608                 .hw.init = &(struct clk_init_data){
3609                         .name = "gcc_ufs_phy_axi_hw_ctl_clk",
3610                         .parent_hws = (const struct clk_hw *[]){
3611                                       &gcc_ufs_phy_axi_clk.clkr.hw
3612                         },
3613                         .num_parents = 1,
3614                         .flags = CLK_SET_RATE_PARENT,
3615                         .ops = &clk_branch_simple_ops,
3616                 },
3617         },
3618 };
3619
3620 static struct clk_branch gcc_ufs_phy_ice_core_clk = {
3621         .halt_reg = 0x7705c,
3622         .halt_check = BRANCH_HALT,
3623         .hwcg_reg = 0x7705c,
3624         .hwcg_bit = 1,
3625         .clkr = {
3626                 .enable_reg = 0x7705c,
3627                 .enable_mask = BIT(0),
3628                 .hw.init = &(struct clk_init_data){
3629                         .name = "gcc_ufs_phy_ice_core_clk",
3630                         .parent_hws = (const struct clk_hw *[]){
3631                                       &gcc_ufs_phy_ice_core_clk_src.clkr.hw
3632                         },
3633                         .num_parents = 1,
3634                         .flags = CLK_SET_RATE_PARENT,
3635                         .ops = &clk_branch2_ops,
3636                 },
3637         },
3638 };
3639
3640 static struct clk_branch gcc_ufs_phy_ice_core_hw_ctl_clk = {
3641         .halt_reg = 0x7705c,
3642         .halt_check = BRANCH_HALT,
3643         .hwcg_reg = 0x7705c,
3644         .hwcg_bit = 1,
3645         .clkr = {
3646                 .enable_reg = 0x7705c,
3647                 .enable_mask = BIT(1),
3648                 .hw.init = &(struct clk_init_data){
3649                         .name = "gcc_ufs_phy_ice_core_hw_ctl_clk",
3650                         .parent_hws = (const struct clk_hw *[]){
3651                                       &gcc_ufs_phy_ice_core_clk.clkr.hw
3652                         },
3653                         .num_parents = 1,
3654                         .flags = CLK_SET_RATE_PARENT,
3655                         .ops = &clk_branch_simple_ops,
3656                 },
3657         },
3658 };
3659
3660 static struct clk_branch gcc_ufs_phy_phy_aux_clk = {
3661         .halt_reg = 0x77090,
3662         .halt_check = BRANCH_HALT,
3663         .hwcg_reg = 0x77090,
3664         .hwcg_bit = 1,
3665         .clkr = {
3666                 .enable_reg = 0x77090,
3667                 .enable_mask = BIT(0),
3668                 .hw.init = &(struct clk_init_data){
3669                         .name = "gcc_ufs_phy_phy_aux_clk",
3670                         .parent_hws = (const struct clk_hw *[]){
3671                                       &gcc_ufs_phy_phy_aux_clk_src.clkr.hw
3672                         },
3673                         .num_parents = 1,
3674                         .flags = CLK_SET_RATE_PARENT,
3675                         .ops = &clk_branch2_ops,
3676                 },
3677         },
3678 };
3679
3680 static struct clk_branch gcc_ufs_phy_phy_aux_hw_ctl_clk = {
3681         .halt_reg = 0x77090,
3682         .halt_check = BRANCH_HALT,
3683         .hwcg_reg = 0x77090,
3684         .hwcg_bit = 1,
3685         .clkr = {
3686                 .enable_reg = 0x77090,
3687                 .enable_mask = BIT(1),
3688                 .hw.init = &(struct clk_init_data){
3689                         .name = "gcc_ufs_phy_phy_aux_hw_ctl_clk",
3690                         .parent_hws = (const struct clk_hw *[]){
3691                                       &gcc_ufs_phy_phy_aux_clk.clkr.hw
3692                         },
3693                         .num_parents = 1,
3694                         .flags = CLK_SET_RATE_PARENT,
3695                         .ops = &clk_branch_simple_ops,
3696                 },
3697         },
3698 };
3699
3700 static struct clk_branch gcc_ufs_phy_rx_symbol_0_clk = {
3701         .halt_reg = 0x7701c,
3702         .halt_check = BRANCH_HALT_SKIP,
3703         .clkr = {
3704                 .enable_reg = 0x7701c,
3705                 .enable_mask = BIT(0),
3706                 .hw.init = &(struct clk_init_data){
3707                         .name = "gcc_ufs_phy_rx_symbol_0_clk",
3708                         .ops = &clk_branch2_ops,
3709                 },
3710         },
3711 };
3712
3713 static struct clk_branch gcc_ufs_phy_rx_symbol_1_clk = {
3714         .halt_reg = 0x770ac,
3715         .halt_check = BRANCH_HALT_SKIP,
3716         .clkr = {
3717                 .enable_reg = 0x770ac,
3718                 .enable_mask = BIT(0),
3719                 .hw.init = &(struct clk_init_data){
3720                         .name = "gcc_ufs_phy_rx_symbol_1_clk",
3721                         .ops = &clk_branch2_ops,
3722                 },
3723         },
3724 };
3725
3726 static struct clk_branch gcc_ufs_phy_tx_symbol_0_clk = {
3727         .halt_reg = 0x77018,
3728         .halt_check = BRANCH_HALT_SKIP,
3729         .clkr = {
3730                 .enable_reg = 0x77018,
3731                 .enable_mask = BIT(0),
3732                 .hw.init = &(struct clk_init_data){
3733                         .name = "gcc_ufs_phy_tx_symbol_0_clk",
3734                         .ops = &clk_branch2_ops,
3735                 },
3736         },
3737 };
3738
3739 static struct clk_branch gcc_ufs_phy_unipro_core_clk = {
3740         .halt_reg = 0x77058,
3741         .halt_check = BRANCH_HALT,
3742         .hwcg_reg = 0x77058,
3743         .hwcg_bit = 1,
3744         .clkr = {
3745                 .enable_reg = 0x77058,
3746                 .enable_mask = BIT(0),
3747                 .hw.init = &(struct clk_init_data){
3748                         .name = "gcc_ufs_phy_unipro_core_clk",
3749                         .parent_hws = (const struct clk_hw *[]){
3750                                       &gcc_ufs_phy_unipro_core_clk_src.clkr.hw
3751                         },
3752                         .num_parents = 1,
3753                         .flags = CLK_SET_RATE_PARENT,
3754                         .ops = &clk_branch2_ops,
3755                 },
3756         },
3757 };
3758
3759 static struct clk_branch gcc_ufs_phy_unipro_core_hw_ctl_clk = {
3760         .halt_reg = 0x77058,
3761         .halt_check = BRANCH_HALT,
3762         .hwcg_reg = 0x77058,
3763         .hwcg_bit = 1,
3764         .clkr = {
3765                 .enable_reg = 0x77058,
3766                 .enable_mask = BIT(1),
3767                 .hw.init = &(struct clk_init_data){
3768                         .name = "gcc_ufs_phy_unipro_core_hw_ctl_clk",
3769                         .parent_hws = (const struct clk_hw *[]){
3770                                       &gcc_ufs_phy_unipro_core_clk.clkr.hw
3771                         },
3772                         .num_parents = 1,
3773                         .flags = CLK_SET_RATE_PARENT,
3774                         .ops = &clk_branch_simple_ops,
3775                 },
3776         },
3777 };
3778
3779 static struct clk_branch gcc_usb30_mp_master_clk = {
3780         .halt_reg = 0xa6010,
3781         .halt_check = BRANCH_HALT,
3782         .clkr = {
3783                 .enable_reg = 0xa6010,
3784                 .enable_mask = BIT(0),
3785                 .hw.init = &(struct clk_init_data){
3786                         .name = "gcc_usb30_mp_master_clk",
3787                         .parent_hws = (const struct clk_hw *[]){
3788                                       &gcc_usb30_mp_master_clk_src.clkr.hw },
3789                         .num_parents = 1,
3790                         .flags = CLK_SET_RATE_PARENT,
3791                         .ops = &clk_branch2_ops,
3792                 },
3793         },
3794 };
3795
3796 static struct clk_branch gcc_usb30_mp_mock_utmi_clk = {
3797         .halt_reg = 0xa6018,
3798         .halt_check = BRANCH_HALT,
3799         .clkr = {
3800                 .enable_reg = 0xa6018,
3801                 .enable_mask = BIT(0),
3802                 .hw.init = &(struct clk_init_data){
3803                         .name = "gcc_usb30_mp_mock_utmi_clk",
3804                         .parent_hws = (const struct clk_hw *[]){
3805                                       &gcc_usb30_mp_mock_utmi_clk_src.clkr.hw
3806                         },
3807                         .num_parents = 1,
3808                         .flags = CLK_SET_RATE_PARENT,
3809                         .ops = &clk_branch2_ops,
3810                 },
3811         },
3812 };
3813
3814 static struct clk_branch gcc_usb30_mp_sleep_clk = {
3815         .halt_reg = 0xa6014,
3816         .halt_check = BRANCH_HALT,
3817         .clkr = {
3818                 .enable_reg = 0xa6014,
3819                 .enable_mask = BIT(0),
3820                 .hw.init = &(struct clk_init_data){
3821                         .name = "gcc_usb30_mp_sleep_clk",
3822                         .ops = &clk_branch2_ops,
3823                 },
3824         },
3825 };
3826
3827 static struct clk_branch gcc_usb30_prim_master_clk = {
3828         .halt_reg = 0xf010,
3829         .halt_check = BRANCH_HALT,
3830         .clkr = {
3831                 .enable_reg = 0xf010,
3832                 .enable_mask = BIT(0),
3833                 .hw.init = &(struct clk_init_data){
3834                         .name = "gcc_usb30_prim_master_clk",
3835                         .parent_hws = (const struct clk_hw *[]){
3836                                       &gcc_usb30_prim_master_clk_src.clkr.hw },
3837                         .num_parents = 1,
3838                         .flags = CLK_SET_RATE_PARENT,
3839                         .ops = &clk_branch2_ops,
3840                 },
3841         },
3842 };
3843
3844 static struct clk_branch gcc_usb30_prim_mock_utmi_clk = {
3845         .halt_reg = 0xf018,
3846         .halt_check = BRANCH_HALT,
3847         .clkr = {
3848                 .enable_reg = 0xf018,
3849                 .enable_mask = BIT(0),
3850                 .hw.init = &(struct clk_init_data){
3851                         .name = "gcc_usb30_prim_mock_utmi_clk",
3852                         .parent_hws = (const struct clk_hw *[]){
3853                                       &gcc_usb30_prim_mock_utmi_clk_src.clkr.hw
3854                         },
3855                         .num_parents = 1,
3856                         .flags = CLK_SET_RATE_PARENT,
3857                         .ops = &clk_branch2_ops,
3858                 },
3859         },
3860 };
3861
3862 static struct clk_branch gcc_usb30_prim_sleep_clk = {
3863         .halt_reg = 0xf014,
3864         .halt_check = BRANCH_HALT,
3865         .clkr = {
3866                 .enable_reg = 0xf014,
3867                 .enable_mask = BIT(0),
3868                 .hw.init = &(struct clk_init_data){
3869                         .name = "gcc_usb30_prim_sleep_clk",
3870                         .ops = &clk_branch2_ops,
3871                 },
3872         },
3873 };
3874
3875 static struct clk_branch gcc_usb30_sec_master_clk = {
3876         .halt_reg = 0x10010,
3877         .halt_check = BRANCH_HALT,
3878         .clkr = {
3879                 .enable_reg = 0x10010,
3880                 .enable_mask = BIT(0),
3881                 .hw.init = &(struct clk_init_data){
3882                         .name = "gcc_usb30_sec_master_clk",
3883                         .parent_hws = (const struct clk_hw *[]){
3884                                       &gcc_usb30_sec_master_clk_src.clkr.hw },
3885                         .num_parents = 1,
3886                         .flags = CLK_SET_RATE_PARENT,
3887                         .ops = &clk_branch2_ops,
3888                 },
3889         },
3890 };
3891
3892 static struct clk_branch gcc_usb30_sec_mock_utmi_clk = {
3893         .halt_reg = 0x10018,
3894         .halt_check = BRANCH_HALT,
3895         .clkr = {
3896                 .enable_reg = 0x10018,
3897                 .enable_mask = BIT(0),
3898                 .hw.init = &(struct clk_init_data){
3899                         .name = "gcc_usb30_sec_mock_utmi_clk",
3900                         .parent_hws = (const struct clk_hw *[]){
3901                                       &gcc_usb30_sec_mock_utmi_clk_src.clkr.hw
3902                         },
3903                         .num_parents = 1,
3904                         .flags = CLK_SET_RATE_PARENT,
3905                         .ops = &clk_branch2_ops,
3906                 },
3907         },
3908 };
3909
3910 static struct clk_branch gcc_usb30_sec_sleep_clk = {
3911         .halt_reg = 0x10014,
3912         .halt_check = BRANCH_HALT,
3913         .clkr = {
3914                 .enable_reg = 0x10014,
3915                 .enable_mask = BIT(0),
3916                 .hw.init = &(struct clk_init_data){
3917                         .name = "gcc_usb30_sec_sleep_clk",
3918                         .ops = &clk_branch2_ops,
3919                 },
3920         },
3921 };
3922
3923 static struct clk_branch gcc_usb3_mp_phy_aux_clk = {
3924         .halt_reg = 0xa6050,
3925         .halt_check = BRANCH_HALT,
3926         .clkr = {
3927                 .enable_reg = 0xa6050,
3928                 .enable_mask = BIT(0),
3929                 .hw.init = &(struct clk_init_data){
3930                         .name = "gcc_usb3_mp_phy_aux_clk",
3931                         .parent_hws = (const struct clk_hw *[]){
3932                                       &gcc_usb3_mp_phy_aux_clk_src.clkr.hw
3933                         },
3934                         .num_parents = 1,
3935                         .flags = CLK_SET_RATE_PARENT,
3936                         .ops = &clk_branch2_ops,
3937                 },
3938         },
3939 };
3940
3941 static struct clk_branch gcc_usb3_mp_phy_com_aux_clk = {
3942         .halt_reg = 0xa6054,
3943         .halt_check = BRANCH_HALT,
3944         .clkr = {
3945                 .enable_reg = 0xa6054,
3946                 .enable_mask = BIT(0),
3947                 .hw.init = &(struct clk_init_data){
3948                         .name = "gcc_usb3_mp_phy_com_aux_clk",
3949                         .parent_hws = (const struct clk_hw *[]){
3950                                       &gcc_usb3_mp_phy_aux_clk_src.clkr.hw
3951                         },
3952                         .num_parents = 1,
3953                         .flags = CLK_SET_RATE_PARENT,
3954                         .ops = &clk_branch2_ops,
3955                 },
3956         },
3957 };
3958
3959 static struct clk_branch gcc_usb3_mp_phy_pipe_0_clk = {
3960         .halt_reg = 0xa6058,
3961         .halt_check = BRANCH_HALT_SKIP,
3962         .clkr = {
3963                 .enable_reg = 0xa6058,
3964                 .enable_mask = BIT(0),
3965                 .hw.init = &(struct clk_init_data){
3966                         .name = "gcc_usb3_mp_phy_pipe_0_clk",
3967                         .ops = &clk_branch2_ops,
3968                 },
3969         },
3970 };
3971
3972 static struct clk_branch gcc_usb3_mp_phy_pipe_1_clk = {
3973         .halt_reg = 0xa605c,
3974         .halt_check = BRANCH_HALT_SKIP,
3975         .clkr = {
3976                 .enable_reg = 0xa605c,
3977                 .enable_mask = BIT(0),
3978                 .hw.init = &(struct clk_init_data){
3979                         .name = "gcc_usb3_mp_phy_pipe_1_clk",
3980                         .ops = &clk_branch2_ops,
3981                 },
3982         },
3983 };
3984
3985 static struct clk_branch gcc_usb3_prim_clkref_clk = {
3986         .halt_reg = 0x8c008,
3987         .halt_check = BRANCH_HALT,
3988         .clkr = {
3989                 .enable_reg = 0x8c008,
3990                 .enable_mask = BIT(0),
3991                 .hw.init = &(struct clk_init_data){
3992                         .name = "gcc_usb3_prim_clkref_clk",
3993                         .ops = &clk_branch2_ops,
3994                 },
3995         },
3996 };
3997
3998 static struct clk_branch gcc_usb3_prim_phy_aux_clk = {
3999         .halt_reg = 0xf050,
4000         .halt_check = BRANCH_HALT,
4001         .clkr = {
4002                 .enable_reg = 0xf050,
4003                 .enable_mask = BIT(0),
4004                 .hw.init = &(struct clk_init_data){
4005                         .name = "gcc_usb3_prim_phy_aux_clk",
4006                         .parent_hws = (const struct clk_hw *[]){
4007                                       &gcc_usb3_prim_phy_aux_clk_src.clkr.hw
4008                         },
4009                         .num_parents = 1,
4010                         .flags = CLK_SET_RATE_PARENT,
4011                         .ops = &clk_branch2_ops,
4012                 },
4013         },
4014 };
4015
4016 static struct clk_branch gcc_usb3_prim_phy_com_aux_clk = {
4017         .halt_reg = 0xf054,
4018         .halt_check = BRANCH_HALT,
4019         .clkr = {
4020                 .enable_reg = 0xf054,
4021                 .enable_mask = BIT(0),
4022                 .hw.init = &(struct clk_init_data){
4023                         .name = "gcc_usb3_prim_phy_com_aux_clk",
4024                         .parent_hws = (const struct clk_hw *[]){
4025                                       &gcc_usb3_prim_phy_aux_clk_src.clkr.hw
4026                         },
4027                         .num_parents = 1,
4028                         .flags = CLK_SET_RATE_PARENT,
4029                         .ops = &clk_branch2_ops,
4030                 },
4031         },
4032 };
4033
4034 static struct clk_branch gcc_usb3_prim_phy_pipe_clk = {
4035         .halt_reg = 0xf058,
4036         .halt_check = BRANCH_HALT_SKIP,
4037         .clkr = {
4038                 .enable_reg = 0xf058,
4039                 .enable_mask = BIT(0),
4040                 .hw.init = &(struct clk_init_data){
4041                         .name = "gcc_usb3_prim_phy_pipe_clk",
4042                         .ops = &clk_branch2_ops,
4043                 },
4044         },
4045 };
4046
4047 static struct clk_branch gcc_usb3_sec_clkref_clk = {
4048         .halt_reg = 0x8c028,
4049         .halt_check = BRANCH_HALT,
4050         .clkr = {
4051                 .enable_reg = 0x8c028,
4052                 .enable_mask = BIT(0),
4053                 .hw.init = &(struct clk_init_data){
4054                         .name = "gcc_usb3_sec_clkref_clk",
4055                         .ops = &clk_branch2_ops,
4056                 },
4057         },
4058 };
4059
4060 static struct clk_branch gcc_usb3_sec_phy_aux_clk = {
4061         .halt_reg = 0x10050,
4062         .halt_check = BRANCH_HALT,
4063         .clkr = {
4064                 .enable_reg = 0x10050,
4065                 .enable_mask = BIT(0),
4066                 .hw.init = &(struct clk_init_data){
4067                         .name = "gcc_usb3_sec_phy_aux_clk",
4068                         .parent_hws = (const struct clk_hw *[]){
4069                                       &gcc_usb3_sec_phy_aux_clk_src.clkr.hw
4070                         },
4071                         .num_parents = 1,
4072                         .flags = CLK_SET_RATE_PARENT,
4073                         .ops = &clk_branch2_ops,
4074                 },
4075         },
4076 };
4077
4078 static struct clk_branch gcc_usb3_sec_phy_com_aux_clk = {
4079         .halt_reg = 0x10054,
4080         .halt_check = BRANCH_HALT,
4081         .clkr = {
4082                 .enable_reg = 0x10054,
4083                 .enable_mask = BIT(0),
4084                 .hw.init = &(struct clk_init_data){
4085                         .name = "gcc_usb3_sec_phy_com_aux_clk",
4086                         .parent_hws = (const struct clk_hw *[]){
4087                                       &gcc_usb3_sec_phy_aux_clk_src.clkr.hw
4088                         },
4089                         .num_parents = 1,
4090                         .flags = CLK_SET_RATE_PARENT,
4091                         .ops = &clk_branch2_ops,
4092                 },
4093         },
4094 };
4095
4096 static struct clk_branch gcc_usb3_sec_phy_pipe_clk = {
4097         .halt_reg = 0x10058,
4098         .halt_check = BRANCH_HALT_SKIP,
4099         .clkr = {
4100                 .enable_reg = 0x10058,
4101                 .enable_mask = BIT(0),
4102                 .hw.init = &(struct clk_init_data){
4103                         .name = "gcc_usb3_sec_phy_pipe_clk",
4104                         .ops = &clk_branch2_ops,
4105                 },
4106         },
4107 };
4108
4109 static struct clk_branch gcc_video_axi0_clk = {
4110         .halt_reg = 0xb024,
4111         .halt_check = BRANCH_HALT,
4112         .clkr = {
4113                 .enable_reg = 0xb024,
4114                 .enable_mask = BIT(0),
4115                 .hw.init = &(struct clk_init_data){
4116                         .name = "gcc_video_axi0_clk",
4117                         .ops = &clk_branch2_ops,
4118                 },
4119         },
4120 };
4121
4122 static struct clk_branch gcc_video_axi1_clk = {
4123         .halt_reg = 0xb028,
4124         .halt_check = BRANCH_HALT,
4125         .clkr = {
4126                 .enable_reg = 0xb028,
4127                 .enable_mask = BIT(0),
4128                 .hw.init = &(struct clk_init_data){
4129                         .name = "gcc_video_axi1_clk",
4130                         .ops = &clk_branch2_ops,
4131                 },
4132         },
4133 };
4134
4135 static struct clk_branch gcc_video_axic_clk = {
4136         .halt_reg = 0xb02c,
4137         .halt_check = BRANCH_HALT,
4138         .clkr = {
4139                 .enable_reg = 0xb02c,
4140                 .enable_mask = BIT(0),
4141                 .hw.init = &(struct clk_init_data){
4142                         .name = "gcc_video_axic_clk",
4143                         .ops = &clk_branch2_ops,
4144                 },
4145         },
4146 };
4147
4148 static struct gdsc usb30_sec_gdsc = {
4149         .gdscr = 0x10004,
4150         .pd = {
4151                 .name = "usb30_sec_gdsc",
4152         },
4153         .pwrsts = PWRSTS_OFF_ON,
4154         .flags = POLL_CFG_GDSCR,
4155 };
4156
4157 static struct gdsc emac_gdsc = {
4158         .gdscr = 0x6004,
4159         .pd = {
4160                 .name = "emac_gdsc",
4161         },
4162         .pwrsts = PWRSTS_OFF_ON,
4163         .flags = POLL_CFG_GDSCR,
4164 };
4165
4166 static struct gdsc usb30_prim_gdsc = {
4167         .gdscr = 0xf004,
4168         .pd = {
4169                 .name = "usb30_prim_gdsc",
4170         },
4171         .pwrsts = PWRSTS_OFF_ON,
4172         .flags = POLL_CFG_GDSCR,
4173 };
4174
4175 static struct gdsc pcie_0_gdsc = {
4176         .gdscr = 0x6b004,
4177         .pd = {
4178                 .name = "pcie_0_gdsc",
4179         },
4180         .pwrsts = PWRSTS_OFF_ON,
4181         .flags = POLL_CFG_GDSCR,
4182 };
4183
4184 static struct gdsc ufs_card_gdsc = {
4185         .gdscr = 0x75004,
4186         .pd = {
4187                 .name = "ufs_card_gdsc",
4188         },
4189         .pwrsts = PWRSTS_OFF_ON,
4190         .flags = POLL_CFG_GDSCR,
4191 };
4192
4193 static struct gdsc ufs_phy_gdsc = {
4194         .gdscr = 0x77004,
4195         .pd = {
4196                 .name = "ufs_phy_gdsc",
4197         },
4198         .pwrsts = PWRSTS_OFF_ON,
4199         .flags = POLL_CFG_GDSCR,
4200 };
4201
4202 static struct gdsc pcie_1_gdsc = {
4203         .gdscr = 0x8d004,
4204         .pd = {
4205                 .name = "pcie_1_gdsc",
4206         },
4207         .pwrsts = PWRSTS_OFF_ON,
4208         .flags = POLL_CFG_GDSCR,
4209 };
4210
4211 static struct gdsc pcie_2_gdsc = {
4212         .gdscr = 0x9d004,
4213         .pd = {
4214                 .name = "pcie_2_gdsc",
4215         },
4216         .pwrsts = PWRSTS_OFF_ON,
4217         .flags = POLL_CFG_GDSCR,
4218 };
4219
4220 static struct gdsc ufs_card_2_gdsc = {
4221         .gdscr = 0xa2004,
4222         .pd = {
4223                 .name = "ufs_card_2_gdsc",
4224         },
4225         .pwrsts = PWRSTS_OFF_ON,
4226         .flags = POLL_CFG_GDSCR,
4227 };
4228
4229 static struct gdsc pcie_3_gdsc = {
4230         .gdscr = 0xa3004,
4231         .pd = {
4232                 .name = "pcie_3_gdsc",
4233         },
4234         .pwrsts = PWRSTS_OFF_ON,
4235         .flags = POLL_CFG_GDSCR,
4236 };
4237
4238 static struct gdsc usb30_mp_gdsc = {
4239         .gdscr = 0xa6004,
4240         .pd = {
4241                 .name = "usb30_mp_gdsc",
4242         },
4243         .pwrsts = PWRSTS_OFF_ON,
4244         .flags = POLL_CFG_GDSCR,
4245 };
4246
4247 static struct clk_regmap *gcc_sc8180x_clocks[] = {
4248         [GCC_AGGRE_NOC_PCIE_TBU_CLK] = &gcc_aggre_noc_pcie_tbu_clk.clkr,
4249         [GCC_AGGRE_UFS_CARD_AXI_CLK] = &gcc_aggre_ufs_card_axi_clk.clkr,
4250         [GCC_AGGRE_UFS_CARD_AXI_HW_CTL_CLK] = &gcc_aggre_ufs_card_axi_hw_ctl_clk.clkr,
4251         [GCC_AGGRE_UFS_PHY_AXI_CLK] = &gcc_aggre_ufs_phy_axi_clk.clkr,
4252         [GCC_AGGRE_UFS_PHY_AXI_HW_CTL_CLK] = &gcc_aggre_ufs_phy_axi_hw_ctl_clk.clkr,
4253         [GCC_AGGRE_USB3_MP_AXI_CLK] = &gcc_aggre_usb3_mp_axi_clk.clkr,
4254         [GCC_AGGRE_USB3_PRIM_AXI_CLK] = &gcc_aggre_usb3_prim_axi_clk.clkr,
4255         [GCC_AGGRE_USB3_SEC_AXI_CLK] = &gcc_aggre_usb3_sec_axi_clk.clkr,
4256         [GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr,
4257         [GCC_CAMERA_HF_AXI_CLK] = &gcc_camera_hf_axi_clk.clkr,
4258         [GCC_CAMERA_SF_AXI_CLK] = &gcc_camera_sf_axi_clk.clkr,
4259         [GCC_CFG_NOC_USB3_MP_AXI_CLK] = &gcc_cfg_noc_usb3_mp_axi_clk.clkr,
4260         [GCC_CFG_NOC_USB3_PRIM_AXI_CLK] = &gcc_cfg_noc_usb3_prim_axi_clk.clkr,
4261         [GCC_CFG_NOC_USB3_SEC_AXI_CLK] = &gcc_cfg_noc_usb3_sec_axi_clk.clkr,
4262         [GCC_CPUSS_AHB_CLK] = &gcc_cpuss_ahb_clk.clkr,
4263         [GCC_CPUSS_AHB_CLK_SRC] = &gcc_cpuss_ahb_clk_src.clkr,
4264         [GCC_CPUSS_RBCPR_CLK] = &gcc_cpuss_rbcpr_clk.clkr,
4265         [GCC_DDRSS_GPU_AXI_CLK] = &gcc_ddrss_gpu_axi_clk.clkr,
4266         [GCC_DISP_HF_AXI_CLK] = &gcc_disp_hf_axi_clk.clkr,
4267         [GCC_DISP_SF_AXI_CLK] = &gcc_disp_sf_axi_clk.clkr,
4268         [GCC_EMAC_AXI_CLK] = &gcc_emac_axi_clk.clkr,
4269         [GCC_EMAC_PTP_CLK] = &gcc_emac_ptp_clk.clkr,
4270         [GCC_EMAC_PTP_CLK_SRC] = &gcc_emac_ptp_clk_src.clkr,
4271         [GCC_EMAC_RGMII_CLK] = &gcc_emac_rgmii_clk.clkr,
4272         [GCC_EMAC_RGMII_CLK_SRC] = &gcc_emac_rgmii_clk_src.clkr,
4273         [GCC_EMAC_SLV_AHB_CLK] = &gcc_emac_slv_ahb_clk.clkr,
4274         [GCC_GP1_CLK] = &gcc_gp1_clk.clkr,
4275         [GCC_GP1_CLK_SRC] = &gcc_gp1_clk_src.clkr,
4276         [GCC_GP2_CLK] = &gcc_gp2_clk.clkr,
4277         [GCC_GP2_CLK_SRC] = &gcc_gp2_clk_src.clkr,
4278         [GCC_GP3_CLK] = &gcc_gp3_clk.clkr,
4279         [GCC_GP3_CLK_SRC] = &gcc_gp3_clk_src.clkr,
4280         [GCC_GP4_CLK] = &gcc_gp4_clk.clkr,
4281         [GCC_GP4_CLK_SRC] = &gcc_gp4_clk_src.clkr,
4282         [GCC_GP5_CLK] = &gcc_gp5_clk.clkr,
4283         [GCC_GP5_CLK_SRC] = &gcc_gp5_clk_src.clkr,
4284         [GCC_GPU_GPLL0_CLK_SRC] = &gcc_gpu_gpll0_clk_src.clkr,
4285         [GCC_GPU_GPLL0_DIV_CLK_SRC] = &gcc_gpu_gpll0_div_clk_src.clkr,
4286         [GCC_GPU_MEMNOC_GFX_CLK] = &gcc_gpu_memnoc_gfx_clk.clkr,
4287         [GCC_GPU_SNOC_DVM_GFX_CLK] = &gcc_gpu_snoc_dvm_gfx_clk.clkr,
4288         [GCC_NPU_AT_CLK] = &gcc_npu_at_clk.clkr,
4289         [GCC_NPU_AXI_CLK] = &gcc_npu_axi_clk.clkr,
4290         [GCC_NPU_AXI_CLK_SRC] = &gcc_npu_axi_clk_src.clkr,
4291         [GCC_NPU_GPLL0_CLK_SRC] = &gcc_npu_gpll0_clk_src.clkr,
4292         [GCC_NPU_GPLL0_DIV_CLK_SRC] = &gcc_npu_gpll0_div_clk_src.clkr,
4293         [GCC_NPU_TRIG_CLK] = &gcc_npu_trig_clk.clkr,
4294         [GCC_PCIE0_PHY_REFGEN_CLK] = &gcc_pcie0_phy_refgen_clk.clkr,
4295         [GCC_PCIE1_PHY_REFGEN_CLK] = &gcc_pcie1_phy_refgen_clk.clkr,
4296         [GCC_PCIE2_PHY_REFGEN_CLK] = &gcc_pcie2_phy_refgen_clk.clkr,
4297         [GCC_PCIE3_PHY_REFGEN_CLK] = &gcc_pcie3_phy_refgen_clk.clkr,
4298         [GCC_PCIE_0_AUX_CLK] = &gcc_pcie_0_aux_clk.clkr,
4299         [GCC_PCIE_0_AUX_CLK_SRC] = &gcc_pcie_0_aux_clk_src.clkr,
4300         [GCC_PCIE_0_CFG_AHB_CLK] = &gcc_pcie_0_cfg_ahb_clk.clkr,
4301         [GCC_PCIE_0_CLKREF_CLK] = &gcc_pcie_0_clkref_clk.clkr,
4302         [GCC_PCIE_0_MSTR_AXI_CLK] = &gcc_pcie_0_mstr_axi_clk.clkr,
4303         [GCC_PCIE_0_PIPE_CLK] = &gcc_pcie_0_pipe_clk.clkr,
4304         [GCC_PCIE_0_SLV_AXI_CLK] = &gcc_pcie_0_slv_axi_clk.clkr,
4305         [GCC_PCIE_0_SLV_Q2A_AXI_CLK] = &gcc_pcie_0_slv_q2a_axi_clk.clkr,
4306         [GCC_PCIE_1_AUX_CLK] = &gcc_pcie_1_aux_clk.clkr,
4307         [GCC_PCIE_1_AUX_CLK_SRC] = &gcc_pcie_1_aux_clk_src.clkr,
4308         [GCC_PCIE_1_CFG_AHB_CLK] = &gcc_pcie_1_cfg_ahb_clk.clkr,
4309         [GCC_PCIE_1_CLKREF_CLK] = &gcc_pcie_1_clkref_clk.clkr,
4310         [GCC_PCIE_1_MSTR_AXI_CLK] = &gcc_pcie_1_mstr_axi_clk.clkr,
4311         [GCC_PCIE_1_PIPE_CLK] = &gcc_pcie_1_pipe_clk.clkr,
4312         [GCC_PCIE_1_SLV_AXI_CLK] = &gcc_pcie_1_slv_axi_clk.clkr,
4313         [GCC_PCIE_1_SLV_Q2A_AXI_CLK] = &gcc_pcie_1_slv_q2a_axi_clk.clkr,
4314         [GCC_PCIE_2_AUX_CLK] = &gcc_pcie_2_aux_clk.clkr,
4315         [GCC_PCIE_2_AUX_CLK_SRC] = &gcc_pcie_2_aux_clk_src.clkr,
4316         [GCC_PCIE_2_CFG_AHB_CLK] = &gcc_pcie_2_cfg_ahb_clk.clkr,
4317         [GCC_PCIE_2_CLKREF_CLK] = &gcc_pcie_2_clkref_clk.clkr,
4318         [GCC_PCIE_2_MSTR_AXI_CLK] = &gcc_pcie_2_mstr_axi_clk.clkr,
4319         [GCC_PCIE_2_PIPE_CLK] = &gcc_pcie_2_pipe_clk.clkr,
4320         [GCC_PCIE_2_SLV_AXI_CLK] = &gcc_pcie_2_slv_axi_clk.clkr,
4321         [GCC_PCIE_2_SLV_Q2A_AXI_CLK] = &gcc_pcie_2_slv_q2a_axi_clk.clkr,
4322         [GCC_PCIE_3_AUX_CLK] = &gcc_pcie_3_aux_clk.clkr,
4323         [GCC_PCIE_3_AUX_CLK_SRC] = &gcc_pcie_3_aux_clk_src.clkr,
4324         [GCC_PCIE_3_CFG_AHB_CLK] = &gcc_pcie_3_cfg_ahb_clk.clkr,
4325         [GCC_PCIE_3_CLKREF_CLK] = &gcc_pcie_3_clkref_clk.clkr,
4326         [GCC_PCIE_3_MSTR_AXI_CLK] = &gcc_pcie_3_mstr_axi_clk.clkr,
4327         [GCC_PCIE_3_PIPE_CLK] = &gcc_pcie_3_pipe_clk.clkr,
4328         [GCC_PCIE_3_SLV_AXI_CLK] = &gcc_pcie_3_slv_axi_clk.clkr,
4329         [GCC_PCIE_3_SLV_Q2A_AXI_CLK] = &gcc_pcie_3_slv_q2a_axi_clk.clkr,
4330         [GCC_PCIE_PHY_AUX_CLK] = &gcc_pcie_phy_aux_clk.clkr,
4331         [GCC_PCIE_PHY_REFGEN_CLK_SRC] = &gcc_pcie_phy_refgen_clk_src.clkr,
4332         [GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr,
4333         [GCC_PDM2_CLK_SRC] = &gcc_pdm2_clk_src.clkr,
4334         [GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr,
4335         [GCC_PDM_XO4_CLK] = &gcc_pdm_xo4_clk.clkr,
4336         [GCC_PRNG_AHB_CLK] = &gcc_prng_ahb_clk.clkr,
4337         [GCC_QMIP_CAMERA_NRT_AHB_CLK] = &gcc_qmip_camera_nrt_ahb_clk.clkr,
4338         [GCC_QMIP_CAMERA_RT_AHB_CLK] = &gcc_qmip_camera_rt_ahb_clk.clkr,
4339         [GCC_QMIP_DISP_AHB_CLK] = &gcc_qmip_disp_ahb_clk.clkr,
4340         [GCC_QMIP_VIDEO_CVP_AHB_CLK] = &gcc_qmip_video_cvp_ahb_clk.clkr,
4341         [GCC_QMIP_VIDEO_VCODEC_AHB_CLK] = &gcc_qmip_video_vcodec_ahb_clk.clkr,
4342         [GCC_QSPI_1_CNOC_PERIPH_AHB_CLK] = &gcc_qspi_1_cnoc_periph_ahb_clk.clkr,
4343         [GCC_QSPI_1_CORE_CLK] = &gcc_qspi_1_core_clk.clkr,
4344         [GCC_QSPI_1_CORE_CLK_SRC] = &gcc_qspi_1_core_clk_src.clkr,
4345         [GCC_QSPI_CNOC_PERIPH_AHB_CLK] = &gcc_qspi_cnoc_periph_ahb_clk.clkr,
4346         [GCC_QSPI_CORE_CLK] = &gcc_qspi_core_clk.clkr,
4347         [GCC_QSPI_CORE_CLK_SRC] = &gcc_qspi_core_clk_src.clkr,
4348         [GCC_QUPV3_WRAP0_S0_CLK] = &gcc_qupv3_wrap0_s0_clk.clkr,
4349         [GCC_QUPV3_WRAP0_S0_CLK_SRC] = &gcc_qupv3_wrap0_s0_clk_src.clkr,
4350         [GCC_QUPV3_WRAP0_S1_CLK] = &gcc_qupv3_wrap0_s1_clk.clkr,
4351         [GCC_QUPV3_WRAP0_S1_CLK_SRC] = &gcc_qupv3_wrap0_s1_clk_src.clkr,
4352         [GCC_QUPV3_WRAP0_S2_CLK] = &gcc_qupv3_wrap0_s2_clk.clkr,
4353         [GCC_QUPV3_WRAP0_S2_CLK_SRC] = &gcc_qupv3_wrap0_s2_clk_src.clkr,
4354         [GCC_QUPV3_WRAP0_S3_CLK] = &gcc_qupv3_wrap0_s3_clk.clkr,
4355         [GCC_QUPV3_WRAP0_S3_CLK_SRC] = &gcc_qupv3_wrap0_s3_clk_src.clkr,
4356         [GCC_QUPV3_WRAP0_S4_CLK] = &gcc_qupv3_wrap0_s4_clk.clkr,
4357         [GCC_QUPV3_WRAP0_S4_CLK_SRC] = &gcc_qupv3_wrap0_s4_clk_src.clkr,
4358         [GCC_QUPV3_WRAP0_S5_CLK] = &gcc_qupv3_wrap0_s5_clk.clkr,
4359         [GCC_QUPV3_WRAP0_S5_CLK_SRC] = &gcc_qupv3_wrap0_s5_clk_src.clkr,
4360         [GCC_QUPV3_WRAP0_S6_CLK] = &gcc_qupv3_wrap0_s6_clk.clkr,
4361         [GCC_QUPV3_WRAP0_S6_CLK_SRC] = &gcc_qupv3_wrap0_s6_clk_src.clkr,
4362         [GCC_QUPV3_WRAP0_S7_CLK] = &gcc_qupv3_wrap0_s7_clk.clkr,
4363         [GCC_QUPV3_WRAP0_S7_CLK_SRC] = &gcc_qupv3_wrap0_s7_clk_src.clkr,
4364         [GCC_QUPV3_WRAP1_S0_CLK] = &gcc_qupv3_wrap1_s0_clk.clkr,
4365         [GCC_QUPV3_WRAP1_S0_CLK_SRC] = &gcc_qupv3_wrap1_s0_clk_src.clkr,
4366         [GCC_QUPV3_WRAP1_S1_CLK] = &gcc_qupv3_wrap1_s1_clk.clkr,
4367         [GCC_QUPV3_WRAP1_S1_CLK_SRC] = &gcc_qupv3_wrap1_s1_clk_src.clkr,
4368         [GCC_QUPV3_WRAP1_S2_CLK] = &gcc_qupv3_wrap1_s2_clk.clkr,
4369         [GCC_QUPV3_WRAP1_S2_CLK_SRC] = &gcc_qupv3_wrap1_s2_clk_src.clkr,
4370         [GCC_QUPV3_WRAP1_S3_CLK] = &gcc_qupv3_wrap1_s3_clk.clkr,
4371         [GCC_QUPV3_WRAP1_S3_CLK_SRC] = &gcc_qupv3_wrap1_s3_clk_src.clkr,
4372         [GCC_QUPV3_WRAP1_S4_CLK] = &gcc_qupv3_wrap1_s4_clk.clkr,
4373         [GCC_QUPV3_WRAP1_S4_CLK_SRC] = &gcc_qupv3_wrap1_s4_clk_src.clkr,
4374         [GCC_QUPV3_WRAP1_S5_CLK] = &gcc_qupv3_wrap1_s5_clk.clkr,
4375         [GCC_QUPV3_WRAP1_S5_CLK_SRC] = &gcc_qupv3_wrap1_s5_clk_src.clkr,
4376         [GCC_QUPV3_WRAP2_S0_CLK] = &gcc_qupv3_wrap2_s0_clk.clkr,
4377         [GCC_QUPV3_WRAP2_S0_CLK_SRC] = &gcc_qupv3_wrap2_s0_clk_src.clkr,
4378         [GCC_QUPV3_WRAP2_S1_CLK] = &gcc_qupv3_wrap2_s1_clk.clkr,
4379         [GCC_QUPV3_WRAP2_S1_CLK_SRC] = &gcc_qupv3_wrap2_s1_clk_src.clkr,
4380         [GCC_QUPV3_WRAP2_S2_CLK] = &gcc_qupv3_wrap2_s2_clk.clkr,
4381         [GCC_QUPV3_WRAP2_S2_CLK_SRC] = &gcc_qupv3_wrap2_s2_clk_src.clkr,
4382         [GCC_QUPV3_WRAP2_S3_CLK] = &gcc_qupv3_wrap2_s3_clk.clkr,
4383         [GCC_QUPV3_WRAP2_S3_CLK_SRC] = &gcc_qupv3_wrap2_s3_clk_src.clkr,
4384         [GCC_QUPV3_WRAP2_S4_CLK] = &gcc_qupv3_wrap2_s4_clk.clkr,
4385         [GCC_QUPV3_WRAP2_S4_CLK_SRC] = &gcc_qupv3_wrap2_s4_clk_src.clkr,
4386         [GCC_QUPV3_WRAP2_S5_CLK] = &gcc_qupv3_wrap2_s5_clk.clkr,
4387         [GCC_QUPV3_WRAP2_S5_CLK_SRC] = &gcc_qupv3_wrap2_s5_clk_src.clkr,
4388         [GCC_QUPV3_WRAP_0_M_AHB_CLK] = &gcc_qupv3_wrap_0_m_ahb_clk.clkr,
4389         [GCC_QUPV3_WRAP_0_S_AHB_CLK] = &gcc_qupv3_wrap_0_s_ahb_clk.clkr,
4390         [GCC_QUPV3_WRAP_1_M_AHB_CLK] = &gcc_qupv3_wrap_1_m_ahb_clk.clkr,
4391         [GCC_QUPV3_WRAP_1_S_AHB_CLK] = &gcc_qupv3_wrap_1_s_ahb_clk.clkr,
4392         [GCC_QUPV3_WRAP_2_M_AHB_CLK] = &gcc_qupv3_wrap_2_m_ahb_clk.clkr,
4393         [GCC_QUPV3_WRAP_2_S_AHB_CLK] = &gcc_qupv3_wrap_2_s_ahb_clk.clkr,
4394         [GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr,
4395         [GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr,
4396         [GCC_SDCC2_APPS_CLK_SRC] = &gcc_sdcc2_apps_clk_src.clkr,
4397         [GCC_SDCC4_AHB_CLK] = &gcc_sdcc4_ahb_clk.clkr,
4398         [GCC_SDCC4_APPS_CLK] = &gcc_sdcc4_apps_clk.clkr,
4399         [GCC_SDCC4_APPS_CLK_SRC] = &gcc_sdcc4_apps_clk_src.clkr,
4400         [GCC_SYS_NOC_CPUSS_AHB_CLK] = &gcc_sys_noc_cpuss_ahb_clk.clkr,
4401         [GCC_TSIF_AHB_CLK] = &gcc_tsif_ahb_clk.clkr,
4402         [GCC_TSIF_INACTIVITY_TIMERS_CLK] = &gcc_tsif_inactivity_timers_clk.clkr,
4403         [GCC_TSIF_REF_CLK] = &gcc_tsif_ref_clk.clkr,
4404         [GCC_TSIF_REF_CLK_SRC] = &gcc_tsif_ref_clk_src.clkr,
4405         [GCC_UFS_CARD_2_AHB_CLK] = &gcc_ufs_card_2_ahb_clk.clkr,
4406         [GCC_UFS_CARD_2_AXI_CLK] = &gcc_ufs_card_2_axi_clk.clkr,
4407         [GCC_UFS_CARD_2_AXI_CLK_SRC] = &gcc_ufs_card_2_axi_clk_src.clkr,
4408         [GCC_UFS_CARD_2_ICE_CORE_CLK] = &gcc_ufs_card_2_ice_core_clk.clkr,
4409         [GCC_UFS_CARD_2_ICE_CORE_CLK_SRC] = &gcc_ufs_card_2_ice_core_clk_src.clkr,
4410         [GCC_UFS_CARD_2_PHY_AUX_CLK] = &gcc_ufs_card_2_phy_aux_clk.clkr,
4411         [GCC_UFS_CARD_2_PHY_AUX_CLK_SRC] = &gcc_ufs_card_2_phy_aux_clk_src.clkr,
4412         [GCC_UFS_CARD_2_RX_SYMBOL_0_CLK] = &gcc_ufs_card_2_rx_symbol_0_clk.clkr,
4413         [GCC_UFS_CARD_2_RX_SYMBOL_1_CLK] = &gcc_ufs_card_2_rx_symbol_1_clk.clkr,
4414         [GCC_UFS_CARD_2_TX_SYMBOL_0_CLK] = &gcc_ufs_card_2_tx_symbol_0_clk.clkr,
4415         [GCC_UFS_CARD_2_UNIPRO_CORE_CLK] = &gcc_ufs_card_2_unipro_core_clk.clkr,
4416         [GCC_UFS_CARD_2_UNIPRO_CORE_CLK_SRC] = &gcc_ufs_card_2_unipro_core_clk_src.clkr,
4417         [GCC_UFS_CARD_AHB_CLK] = &gcc_ufs_card_ahb_clk.clkr,
4418         [GCC_UFS_CARD_AXI_CLK] = &gcc_ufs_card_axi_clk.clkr,
4419         [GCC_UFS_CARD_AXI_CLK_SRC] = &gcc_ufs_card_axi_clk_src.clkr,
4420         [GCC_UFS_CARD_AXI_HW_CTL_CLK] = &gcc_ufs_card_axi_hw_ctl_clk.clkr,
4421         [GCC_UFS_CARD_ICE_CORE_CLK] = &gcc_ufs_card_ice_core_clk.clkr,
4422         [GCC_UFS_CARD_ICE_CORE_CLK_SRC] = &gcc_ufs_card_ice_core_clk_src.clkr,
4423         [GCC_UFS_CARD_ICE_CORE_HW_CTL_CLK] = &gcc_ufs_card_ice_core_hw_ctl_clk.clkr,
4424         [GCC_UFS_CARD_PHY_AUX_CLK] = &gcc_ufs_card_phy_aux_clk.clkr,
4425         [GCC_UFS_CARD_PHY_AUX_CLK_SRC] = &gcc_ufs_card_phy_aux_clk_src.clkr,
4426         [GCC_UFS_CARD_PHY_AUX_HW_CTL_CLK] = &gcc_ufs_card_phy_aux_hw_ctl_clk.clkr,
4427         [GCC_UFS_CARD_RX_SYMBOL_0_CLK] = &gcc_ufs_card_rx_symbol_0_clk.clkr,
4428         [GCC_UFS_CARD_RX_SYMBOL_1_CLK] = &gcc_ufs_card_rx_symbol_1_clk.clkr,
4429         [GCC_UFS_CARD_TX_SYMBOL_0_CLK] = &gcc_ufs_card_tx_symbol_0_clk.clkr,
4430         [GCC_UFS_CARD_UNIPRO_CORE_CLK] = &gcc_ufs_card_unipro_core_clk.clkr,
4431         [GCC_UFS_CARD_UNIPRO_CORE_CLK_SRC] = &gcc_ufs_card_unipro_core_clk_src.clkr,
4432         [GCC_UFS_CARD_UNIPRO_CORE_HW_CTL_CLK] = &gcc_ufs_card_unipro_core_hw_ctl_clk.clkr,
4433         [GCC_UFS_PHY_AHB_CLK] = &gcc_ufs_phy_ahb_clk.clkr,
4434         [GCC_UFS_PHY_AXI_CLK] = &gcc_ufs_phy_axi_clk.clkr,
4435         [GCC_UFS_PHY_AXI_CLK_SRC] = &gcc_ufs_phy_axi_clk_src.clkr,
4436         [GCC_UFS_PHY_AXI_HW_CTL_CLK] = &gcc_ufs_phy_axi_hw_ctl_clk.clkr,
4437         [GCC_UFS_PHY_ICE_CORE_CLK] = &gcc_ufs_phy_ice_core_clk.clkr,
4438         [GCC_UFS_PHY_ICE_CORE_CLK_SRC] = &gcc_ufs_phy_ice_core_clk_src.clkr,
4439         [GCC_UFS_PHY_ICE_CORE_HW_CTL_CLK] = &gcc_ufs_phy_ice_core_hw_ctl_clk.clkr,
4440         [GCC_UFS_PHY_PHY_AUX_CLK] = &gcc_ufs_phy_phy_aux_clk.clkr,
4441         [GCC_UFS_PHY_PHY_AUX_CLK_SRC] = &gcc_ufs_phy_phy_aux_clk_src.clkr,
4442         [GCC_UFS_PHY_PHY_AUX_HW_CTL_CLK] = &gcc_ufs_phy_phy_aux_hw_ctl_clk.clkr,
4443         [GCC_UFS_PHY_RX_SYMBOL_0_CLK] = &gcc_ufs_phy_rx_symbol_0_clk.clkr,
4444         [GCC_UFS_PHY_RX_SYMBOL_1_CLK] = &gcc_ufs_phy_rx_symbol_1_clk.clkr,
4445         [GCC_UFS_PHY_TX_SYMBOL_0_CLK] = &gcc_ufs_phy_tx_symbol_0_clk.clkr,
4446         [GCC_UFS_PHY_UNIPRO_CORE_CLK] = &gcc_ufs_phy_unipro_core_clk.clkr,
4447         [GCC_UFS_PHY_UNIPRO_CORE_CLK_SRC] = &gcc_ufs_phy_unipro_core_clk_src.clkr,
4448         [GCC_UFS_PHY_UNIPRO_CORE_HW_CTL_CLK] = &gcc_ufs_phy_unipro_core_hw_ctl_clk.clkr,
4449         [GCC_USB30_MP_MASTER_CLK] = &gcc_usb30_mp_master_clk.clkr,
4450         [GCC_USB30_MP_MASTER_CLK_SRC] = &gcc_usb30_mp_master_clk_src.clkr,
4451         [GCC_USB30_MP_MOCK_UTMI_CLK] = &gcc_usb30_mp_mock_utmi_clk.clkr,
4452         [GCC_USB30_MP_MOCK_UTMI_CLK_SRC] = &gcc_usb30_mp_mock_utmi_clk_src.clkr,
4453         [GCC_USB30_MP_SLEEP_CLK] = &gcc_usb30_mp_sleep_clk.clkr,
4454         [GCC_USB30_PRIM_MASTER_CLK] = &gcc_usb30_prim_master_clk.clkr,
4455         [GCC_USB30_PRIM_MASTER_CLK_SRC] = &gcc_usb30_prim_master_clk_src.clkr,
4456         [GCC_USB30_PRIM_MOCK_UTMI_CLK] = &gcc_usb30_prim_mock_utmi_clk.clkr,
4457         [GCC_USB30_PRIM_MOCK_UTMI_CLK_SRC] = &gcc_usb30_prim_mock_utmi_clk_src.clkr,
4458         [GCC_USB30_PRIM_SLEEP_CLK] = &gcc_usb30_prim_sleep_clk.clkr,
4459         [GCC_USB30_SEC_MASTER_CLK] = &gcc_usb30_sec_master_clk.clkr,
4460         [GCC_USB30_SEC_MASTER_CLK_SRC] = &gcc_usb30_sec_master_clk_src.clkr,
4461         [GCC_USB30_SEC_MOCK_UTMI_CLK] = &gcc_usb30_sec_mock_utmi_clk.clkr,
4462         [GCC_USB30_SEC_MOCK_UTMI_CLK_SRC] = &gcc_usb30_sec_mock_utmi_clk_src.clkr,
4463         [GCC_USB30_SEC_SLEEP_CLK] = &gcc_usb30_sec_sleep_clk.clkr,
4464         [GCC_USB3_MP_PHY_AUX_CLK] = &gcc_usb3_mp_phy_aux_clk.clkr,
4465         [GCC_USB3_MP_PHY_AUX_CLK_SRC] = &gcc_usb3_mp_phy_aux_clk_src.clkr,
4466         [GCC_USB3_MP_PHY_COM_AUX_CLK] = &gcc_usb3_mp_phy_com_aux_clk.clkr,
4467         [GCC_USB3_MP_PHY_PIPE_0_CLK] = &gcc_usb3_mp_phy_pipe_0_clk.clkr,
4468         [GCC_USB3_MP_PHY_PIPE_1_CLK] = &gcc_usb3_mp_phy_pipe_1_clk.clkr,
4469         [GCC_USB3_PRIM_CLKREF_CLK] = &gcc_usb3_prim_clkref_clk.clkr,
4470         [GCC_USB3_PRIM_PHY_AUX_CLK] = &gcc_usb3_prim_phy_aux_clk.clkr,
4471         [GCC_USB3_PRIM_PHY_AUX_CLK_SRC] = &gcc_usb3_prim_phy_aux_clk_src.clkr,
4472         [GCC_USB3_PRIM_PHY_COM_AUX_CLK] = &gcc_usb3_prim_phy_com_aux_clk.clkr,
4473         [GCC_USB3_PRIM_PHY_PIPE_CLK] = &gcc_usb3_prim_phy_pipe_clk.clkr,
4474         [GCC_USB3_SEC_CLKREF_CLK] = &gcc_usb3_sec_clkref_clk.clkr,
4475         [GCC_USB3_SEC_PHY_AUX_CLK] = &gcc_usb3_sec_phy_aux_clk.clkr,
4476         [GCC_USB3_SEC_PHY_AUX_CLK_SRC] = &gcc_usb3_sec_phy_aux_clk_src.clkr,
4477         [GCC_USB3_SEC_PHY_COM_AUX_CLK] = &gcc_usb3_sec_phy_com_aux_clk.clkr,
4478         [GCC_USB3_SEC_PHY_PIPE_CLK] = &gcc_usb3_sec_phy_pipe_clk.clkr,
4479         [GCC_VIDEO_AXI0_CLK] = &gcc_video_axi0_clk.clkr,
4480         [GCC_VIDEO_AXI1_CLK] = &gcc_video_axi1_clk.clkr,
4481         [GCC_VIDEO_AXIC_CLK] = &gcc_video_axic_clk.clkr,
4482         [GPLL0] = &gpll0.clkr,
4483         [GPLL0_OUT_EVEN] = &gpll0_out_even.clkr,
4484         [GPLL1] = &gpll1.clkr,
4485         [GPLL4] = &gpll4.clkr,
4486         [GPLL7] = &gpll7.clkr,
4487 };
4488
4489 static const struct qcom_reset_map gcc_sc8180x_resets[] = {
4490         [GCC_EMAC_BCR] = { 0x6000 },
4491         [GCC_GPU_BCR] = { 0x71000 },
4492         [GCC_MMSS_BCR] = { 0xb000 },
4493         [GCC_NPU_BCR] = { 0x4d000 },
4494         [GCC_PCIE_0_BCR] = { 0x6b000 },
4495         [GCC_PCIE_0_PHY_BCR] = { 0x6c01c },
4496         [GCC_PCIE_1_BCR] = { 0x8d000 },
4497         [GCC_PCIE_1_PHY_BCR] = { 0x8e01c },
4498         [GCC_PCIE_2_BCR] = { 0x9d000 },
4499         [GCC_PCIE_2_PHY_BCR] = { 0xa701c },
4500         [GCC_PCIE_3_BCR] = { 0xa3000 },
4501         [GCC_PCIE_3_PHY_BCR] = { 0xa801c },
4502         [GCC_PCIE_PHY_BCR] = { 0x6f000 },
4503         [GCC_PDM_BCR] = { 0x33000 },
4504         [GCC_PRNG_BCR] = { 0x34000 },
4505         [GCC_QSPI_1_BCR] = { 0x4a000 },
4506         [GCC_QSPI_BCR] = { 0x24008 },
4507         [GCC_QUPV3_WRAPPER_0_BCR] = { 0x17000 },
4508         [GCC_QUPV3_WRAPPER_1_BCR] = { 0x18000 },
4509         [GCC_QUPV3_WRAPPER_2_BCR] = { 0x1e000 },
4510         [GCC_QUSB2PHY_5_BCR] = { 0x12010 },
4511         [GCC_QUSB2PHY_MP0_BCR] = { 0x12008 },
4512         [GCC_QUSB2PHY_MP1_BCR] = { 0x1200c },
4513         [GCC_QUSB2PHY_PRIM_BCR] = { 0x12000 },
4514         [GCC_QUSB2PHY_SEC_BCR] = { 0x12004 },
4515         [GCC_USB3_PHY_PRIM_SP0_BCR] = { 0x50000 },
4516         [GCC_USB3_PHY_PRIM_SP1_BCR] = { 0x50004 },
4517         [GCC_USB3_DP_PHY_PRIM_SP0_BCR] = { 0x50010 },
4518         [GCC_USB3_DP_PHY_PRIM_SP1_BCR] = { 0x50014 },
4519         [GCC_USB3_PHY_SEC_BCR] = { 0x50018 },
4520         [GCC_USB3PHY_PHY_SEC_BCR] = { 0x5001c },
4521         [GCC_USB3_DP_PHY_SEC_BCR] = { 0x50020 },
4522         [GCC_SDCC2_BCR] = { 0x14000 },
4523         [GCC_SDCC4_BCR] = { 0x16000 },
4524         [GCC_TSIF_BCR] = { 0x36000 },
4525         [GCC_UFS_CARD_2_BCR] = { 0xa2000 },
4526         [GCC_UFS_CARD_BCR] = { 0x75000 },
4527         [GCC_UFS_PHY_BCR] = { 0x77000 },
4528         [GCC_USB30_MP_BCR] = { 0xa6000 },
4529         [GCC_USB30_PRIM_BCR] = { 0xf000 },
4530         [GCC_USB30_SEC_BCR] = { 0x10000 },
4531         [GCC_USB_PHY_CFG_AHB2PHY_BCR] = { 0x6a000 },
4532         [GCC_VIDEO_AXIC_CLK_BCR] = { 0xb02c, 2 },
4533         [GCC_VIDEO_AXI0_CLK_BCR] = { 0xb024, 2 },
4534         [GCC_VIDEO_AXI1_CLK_BCR] = { 0xb028, 2 },
4535 };
4536
4537 static struct gdsc *gcc_sc8180x_gdscs[] = {
4538         [EMAC_GDSC] = &emac_gdsc,
4539         [PCIE_0_GDSC] = &pcie_0_gdsc,
4540         [PCIE_1_GDSC] = &pcie_1_gdsc,
4541         [PCIE_2_GDSC] = &pcie_2_gdsc,
4542         [PCIE_3_GDSC] = &pcie_3_gdsc,
4543         [UFS_CARD_GDSC] = &ufs_card_gdsc,
4544         [UFS_CARD_2_GDSC] = &ufs_card_2_gdsc,
4545         [UFS_PHY_GDSC] = &ufs_phy_gdsc,
4546         [USB30_MP_GDSC] = &usb30_mp_gdsc,
4547         [USB30_PRIM_GDSC] = &usb30_prim_gdsc,
4548         [USB30_SEC_GDSC] = &usb30_sec_gdsc,
4549 };
4550
4551 static const struct regmap_config gcc_sc8180x_regmap_config = {
4552         .reg_bits       = 32,
4553         .reg_stride     = 4,
4554         .val_bits       = 32,
4555         .max_register   = 0xc0004,
4556         .fast_io        = true,
4557 };
4558
4559 static const struct qcom_cc_desc gcc_sc8180x_desc = {
4560         .config = &gcc_sc8180x_regmap_config,
4561         .clks = gcc_sc8180x_clocks,
4562         .num_clks = ARRAY_SIZE(gcc_sc8180x_clocks),
4563         .resets = gcc_sc8180x_resets,
4564         .num_resets = ARRAY_SIZE(gcc_sc8180x_resets),
4565         .gdscs = gcc_sc8180x_gdscs,
4566         .num_gdscs = ARRAY_SIZE(gcc_sc8180x_gdscs),
4567 };
4568
4569 static const struct of_device_id gcc_sc8180x_match_table[] = {
4570         { .compatible = "qcom,gcc-sc8180x" },
4571         { }
4572 };
4573 MODULE_DEVICE_TABLE(of, gcc_sc8180x_match_table);
4574
4575 static int gcc_sc8180x_probe(struct platform_device *pdev)
4576 {
4577         struct regmap *regmap;
4578
4579         regmap = qcom_cc_map(pdev, &gcc_sc8180x_desc);
4580         if (IS_ERR(regmap))
4581                 return PTR_ERR(regmap);
4582
4583         /*
4584          * Enable the following always-on clocks:
4585          * GCC_VIDEO_AHB_CLK, GCC_CAMERA_AHB_CLK, GCC_DISP_AHB_CLK,
4586          * GCC_VIDEO_XO_CLK, GCC_CAMERA_XO_CLK, GCC_DISP_XO_CLK,
4587          * GCC_CPUSS_GNOC_CLK, GCC_CPUSS_DVM_BUS_CLK, GCC_NPU_CFG_AHB_CLK and
4588          * GCC_GPU_CFG_AHB_CLK
4589          */
4590         regmap_update_bits(regmap, 0xb004, BIT(0), BIT(0));
4591         regmap_update_bits(regmap, 0xb008, BIT(0), BIT(0));
4592         regmap_update_bits(regmap, 0xb00c, BIT(0), BIT(0));
4593         regmap_update_bits(regmap, 0xb040, BIT(0), BIT(0));
4594         regmap_update_bits(regmap, 0xb044, BIT(0), BIT(0));
4595         regmap_update_bits(regmap, 0xb048, BIT(0), BIT(0));
4596         regmap_update_bits(regmap, 0x48004, BIT(0), BIT(0));
4597         regmap_update_bits(regmap, 0x48190, BIT(0), BIT(0));
4598         regmap_update_bits(regmap, 0x4d004, BIT(0), BIT(0));
4599         regmap_update_bits(regmap, 0x71004, BIT(0), BIT(0));
4600
4601         /* Disable the GPLL0 active input to NPU and GPU via MISC registers */
4602         regmap_update_bits(regmap, 0x4d110, 0x3, 0x3);
4603         regmap_update_bits(regmap, 0x71028, 0x3, 0x3);
4604
4605         return qcom_cc_really_probe(pdev, &gcc_sc8180x_desc, regmap);
4606 }
4607
4608 static struct platform_driver gcc_sc8180x_driver = {
4609         .probe          = gcc_sc8180x_probe,
4610         .driver         = {
4611                 .name   = "gcc-sc8180x",
4612                 .of_match_table = gcc_sc8180x_match_table,
4613         },
4614 };
4615
4616 static int __init gcc_sc8180x_init(void)
4617 {
4618         return platform_driver_register(&gcc_sc8180x_driver);
4619 }
4620 core_initcall(gcc_sc8180x_init);
4621
4622 static void __exit gcc_sc8180x_exit(void)
4623 {
4624         platform_driver_unregister(&gcc_sc8180x_driver);
4625 }
4626 module_exit(gcc_sc8180x_exit);
4627
4628 MODULE_DESCRIPTION("QTI GCC SC8180x driver");
4629 MODULE_LICENSE("GPL v2");