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