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