GNU Linux-libre 6.7.9-gnu
[releases.git] / drivers / clk / qcom / gcc-sm8450.c
1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3  * Copyright (c) 2020-2021, The Linux Foundation. All rights reserved.
4  * Copyright (c) 2021, Linaro Limited
5  */
6
7 #include <linux/clk-provider.h>
8 #include <linux/module.h>
9 #include <linux/of.h>
10 #include <linux/platform_device.h>
11 #include <linux/regmap.h>
12
13 #include <dt-bindings/clock/qcom,gcc-sm8450.h>
14
15 #include "clk-alpha-pll.h"
16 #include "clk-branch.h"
17 #include "clk-rcg.h"
18 #include "clk-regmap.h"
19 #include "clk-regmap-divider.h"
20 #include "clk-regmap-mux.h"
21 #include "clk-regmap-phy-mux.h"
22 #include "gdsc.h"
23 #include "reset.h"
24
25 enum {
26         P_BI_TCXO,
27         P_GCC_GPLL0_OUT_EVEN,
28         P_GCC_GPLL0_OUT_MAIN,
29         P_GCC_GPLL4_OUT_MAIN,
30         P_GCC_GPLL9_OUT_MAIN,
31         P_PCIE_1_PHY_AUX_CLK,
32         P_SLEEP_CLK,
33         P_UFS_PHY_RX_SYMBOL_0_CLK,
34         P_UFS_PHY_RX_SYMBOL_1_CLK,
35         P_UFS_PHY_TX_SYMBOL_0_CLK,
36         P_USB3_PHY_WRAPPER_GCC_USB30_PIPE_CLK,
37 };
38
39 static struct clk_alpha_pll gcc_gpll0 = {
40         .offset = 0x0,
41         .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
42         .clkr = {
43                 .enable_reg = 0x62018,
44                 .enable_mask = BIT(0),
45                 .hw.init = &(struct clk_init_data){
46                         .name = "gcc_gpll0",
47                         .parent_data = &(const struct clk_parent_data){
48                                 .fw_name = "bi_tcxo",
49                         },
50                         .num_parents = 1,
51                         .ops = &clk_alpha_pll_fixed_lucid_evo_ops,
52                 },
53         },
54 };
55
56 static const struct clk_div_table post_div_table_gcc_gpll0_out_even[] = {
57         { 0x1, 2 },
58         { }
59 };
60
61 static struct clk_alpha_pll_postdiv gcc_gpll0_out_even = {
62         .offset = 0x0,
63         .post_div_shift = 10,
64         .post_div_table = post_div_table_gcc_gpll0_out_even,
65         .num_post_div = ARRAY_SIZE(post_div_table_gcc_gpll0_out_even),
66         .width = 4,
67         .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
68         .clkr.hw.init = &(struct clk_init_data){
69                 .name = "gcc_gpll0_out_even",
70                 .parent_hws = (const struct clk_hw*[]) {
71                         &gcc_gpll0.clkr.hw,
72                 },
73                 .num_parents = 1,
74                 .ops = &clk_alpha_pll_postdiv_lucid_evo_ops,
75         },
76 };
77
78 static struct clk_alpha_pll gcc_gpll4 = {
79         .offset = 0x4000,
80         .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
81         .clkr = {
82                 .enable_reg = 0x62018,
83                 .enable_mask = BIT(4),
84                 .hw.init = &(struct clk_init_data){
85                         .name = "gcc_gpll4",
86                         .parent_data = &(const struct clk_parent_data){
87                                 .fw_name = "bi_tcxo",
88                         },
89                         .num_parents = 1,
90                         .ops = &clk_alpha_pll_fixed_lucid_evo_ops,
91                 },
92         },
93 };
94
95 static struct clk_alpha_pll gcc_gpll9 = {
96         .offset = 0x9000,
97         .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
98         .clkr = {
99                 .enable_reg = 0x62018,
100                 .enable_mask = BIT(9),
101                 .hw.init = &(struct clk_init_data){
102                         .name = "gcc_gpll9",
103                         .parent_data = &(const struct clk_parent_data){
104                                 .fw_name = "bi_tcxo",
105                         },
106                         .num_parents = 1,
107                         .ops = &clk_alpha_pll_fixed_lucid_evo_ops,
108                 },
109         },
110 };
111
112 static const struct parent_map gcc_parent_map_0[] = {
113         { P_BI_TCXO, 0 },
114         { P_GCC_GPLL0_OUT_MAIN, 1 },
115         { P_GCC_GPLL0_OUT_EVEN, 6 },
116 };
117
118 static const struct clk_parent_data gcc_parent_data_0[] = {
119         { .fw_name = "bi_tcxo" },
120         { .hw = &gcc_gpll0.clkr.hw },
121         { .hw = &gcc_gpll0_out_even.clkr.hw },
122 };
123
124 static const struct parent_map gcc_parent_map_1[] = {
125         { P_BI_TCXO, 0 },
126         { P_GCC_GPLL0_OUT_MAIN, 1 },
127         { P_SLEEP_CLK, 5 },
128         { P_GCC_GPLL0_OUT_EVEN, 6 },
129 };
130
131 static const struct clk_parent_data gcc_parent_data_1[] = {
132         { .fw_name = "bi_tcxo" },
133         { .hw = &gcc_gpll0.clkr.hw },
134         { .fw_name = "sleep_clk" },
135         { .hw = &gcc_gpll0_out_even.clkr.hw },
136 };
137
138 static const struct parent_map gcc_parent_map_2[] = {
139         { P_BI_TCXO, 0 },
140         { P_SLEEP_CLK, 5 },
141 };
142
143 static const struct clk_parent_data gcc_parent_data_2[] = {
144         { .fw_name = "bi_tcxo" },
145         { .fw_name = "sleep_clk" },
146 };
147
148 static const struct parent_map gcc_parent_map_3[] = {
149         { P_BI_TCXO, 0 },
150 };
151
152 static const struct clk_parent_data gcc_parent_data_3[] = {
153         { .fw_name = "bi_tcxo" },
154 };
155
156 static const struct parent_map gcc_parent_map_5[] = {
157         { P_PCIE_1_PHY_AUX_CLK, 0 },
158         { P_BI_TCXO, 2 },
159 };
160
161 static const struct clk_parent_data gcc_parent_data_5[] = {
162         { .fw_name = "pcie_1_phy_aux_clk" },
163         { .fw_name = "bi_tcxo" },
164 };
165
166 static const struct parent_map gcc_parent_map_7[] = {
167         { P_BI_TCXO, 0 },
168         { P_GCC_GPLL0_OUT_MAIN, 1 },
169         { P_GCC_GPLL9_OUT_MAIN, 2 },
170         { P_GCC_GPLL4_OUT_MAIN, 5 },
171         { P_GCC_GPLL0_OUT_EVEN, 6 },
172 };
173
174 static const struct clk_parent_data gcc_parent_data_7[] = {
175         { .fw_name = "bi_tcxo" },
176         { .hw = &gcc_gpll0.clkr.hw },
177         { .hw = &gcc_gpll9.clkr.hw },
178         { .hw = &gcc_gpll4.clkr.hw },
179         { .hw = &gcc_gpll0_out_even.clkr.hw },
180 };
181
182 static const struct parent_map gcc_parent_map_8[] = {
183         { P_UFS_PHY_RX_SYMBOL_0_CLK, 0 },
184         { P_BI_TCXO, 2 },
185 };
186
187 static const struct clk_parent_data gcc_parent_data_8[] = {
188         { .fw_name = "ufs_phy_rx_symbol_0_clk" },
189         { .fw_name = "bi_tcxo" },
190 };
191
192 static const struct parent_map gcc_parent_map_9[] = {
193         { P_UFS_PHY_RX_SYMBOL_1_CLK, 0 },
194         { P_BI_TCXO, 2 },
195 };
196
197 static const struct clk_parent_data gcc_parent_data_9[] = {
198         { .fw_name = "ufs_phy_rx_symbol_1_clk" },
199         { .fw_name = "bi_tcxo" },
200 };
201
202 static const struct parent_map gcc_parent_map_10[] = {
203         { P_UFS_PHY_TX_SYMBOL_0_CLK, 0 },
204         { P_BI_TCXO, 2 },
205 };
206
207 static const struct clk_parent_data gcc_parent_data_10[] = {
208         { .fw_name = "ufs_phy_tx_symbol_0_clk" },
209         { .fw_name = "bi_tcxo" },
210 };
211
212 static const struct parent_map gcc_parent_map_11[] = {
213         { P_USB3_PHY_WRAPPER_GCC_USB30_PIPE_CLK, 0 },
214         { P_BI_TCXO, 2 },
215 };
216
217 static const struct clk_parent_data gcc_parent_data_11[] = {
218         { .fw_name = "usb3_phy_wrapper_gcc_usb30_pipe_clk" },
219         { .fw_name = "bi_tcxo" },
220 };
221
222 static struct clk_regmap_phy_mux gcc_pcie_0_pipe_clk_src = {
223         .reg = 0x7b060,
224         .clkr = {
225                 .hw.init = &(struct clk_init_data){
226                         .name = "gcc_pcie_0_pipe_clk_src",
227                         .parent_data = &(const struct clk_parent_data){
228                                 .fw_name = "pcie_0_pipe_clk",
229                         },
230                         .num_parents = 1,
231                         .ops = &clk_regmap_phy_mux_ops,
232                 },
233         },
234 };
235
236 static struct clk_regmap_mux gcc_pcie_1_phy_aux_clk_src = {
237         .reg = 0x9d080,
238         .shift = 0,
239         .width = 2,
240         .parent_map = gcc_parent_map_5,
241         .clkr = {
242                 .hw.init = &(struct clk_init_data){
243                         .name = "gcc_pcie_1_phy_aux_clk_src",
244                         .parent_data = gcc_parent_data_5,
245                         .num_parents = ARRAY_SIZE(gcc_parent_data_5),
246                         .ops = &clk_regmap_mux_closest_ops,
247                 },
248         },
249 };
250
251 static struct clk_regmap_phy_mux gcc_pcie_1_pipe_clk_src = {
252         .reg = 0x9d064,
253         .clkr = {
254                 .hw.init = &(struct clk_init_data){
255                         .name = "gcc_pcie_1_pipe_clk_src",
256                         .parent_data = &(const struct clk_parent_data){
257                                 .fw_name = "pcie_1_pipe_clk",
258                         },
259                         .num_parents = 1,
260                         .ops = &clk_regmap_phy_mux_ops,
261                 },
262         },
263 };
264
265 static struct clk_regmap_mux gcc_ufs_phy_rx_symbol_0_clk_src = {
266         .reg = 0x87060,
267         .shift = 0,
268         .width = 2,
269         .parent_map = gcc_parent_map_8,
270         .clkr = {
271                 .hw.init = &(struct clk_init_data){
272                         .name = "gcc_ufs_phy_rx_symbol_0_clk_src",
273                         .parent_data = gcc_parent_data_8,
274                         .num_parents = ARRAY_SIZE(gcc_parent_data_8),
275                         .ops = &clk_regmap_mux_closest_ops,
276                 },
277         },
278 };
279
280 static struct clk_regmap_mux gcc_ufs_phy_rx_symbol_1_clk_src = {
281         .reg = 0x870d0,
282         .shift = 0,
283         .width = 2,
284         .parent_map = gcc_parent_map_9,
285         .clkr = {
286                 .hw.init = &(struct clk_init_data){
287                         .name = "gcc_ufs_phy_rx_symbol_1_clk_src",
288                         .parent_data = gcc_parent_data_9,
289                         .num_parents = ARRAY_SIZE(gcc_parent_data_9),
290                         .ops = &clk_regmap_mux_closest_ops,
291                 },
292         },
293 };
294
295 static struct clk_regmap_mux gcc_ufs_phy_tx_symbol_0_clk_src = {
296         .reg = 0x87050,
297         .shift = 0,
298         .width = 2,
299         .parent_map = gcc_parent_map_10,
300         .clkr = {
301                 .hw.init = &(struct clk_init_data){
302                         .name = "gcc_ufs_phy_tx_symbol_0_clk_src",
303                         .parent_data = gcc_parent_data_10,
304                         .num_parents = ARRAY_SIZE(gcc_parent_data_10),
305                         .ops = &clk_regmap_mux_closest_ops,
306                 },
307         },
308 };
309
310 static struct clk_regmap_mux gcc_usb3_prim_phy_pipe_clk_src = {
311         .reg = 0x49068,
312         .shift = 0,
313         .width = 2,
314         .parent_map = gcc_parent_map_11,
315         .clkr = {
316                 .hw.init = &(struct clk_init_data){
317                         .name = "gcc_usb3_prim_phy_pipe_clk_src",
318                         .parent_data = gcc_parent_data_11,
319                         .num_parents = ARRAY_SIZE(gcc_parent_data_11),
320                         .ops = &clk_regmap_mux_closest_ops,
321                 },
322         },
323 };
324
325 static const struct freq_tbl ftbl_gcc_gp1_clk_src[] = {
326         F(50000000, P_GCC_GPLL0_OUT_EVEN, 6, 0, 0),
327         F(100000000, P_GCC_GPLL0_OUT_MAIN, 6, 0, 0),
328         F(200000000, P_GCC_GPLL0_OUT_MAIN, 3, 0, 0),
329         { }
330 };
331
332 static struct clk_rcg2 gcc_gp1_clk_src = {
333         .cmd_rcgr = 0x74004,
334         .mnd_width = 8,
335         .hid_width = 5,
336         .parent_map = gcc_parent_map_1,
337         .freq_tbl = ftbl_gcc_gp1_clk_src,
338         .hw_clk_ctrl = true,
339         .clkr.hw.init = &(struct clk_init_data){
340                 .name = "gcc_gp1_clk_src",
341                 .parent_data = gcc_parent_data_1,
342                 .num_parents = ARRAY_SIZE(gcc_parent_data_1),
343                 .flags = CLK_SET_RATE_PARENT,
344                 .ops = &clk_rcg2_ops,
345         },
346 };
347
348 static struct clk_rcg2 gcc_gp2_clk_src = {
349         .cmd_rcgr = 0x75004,
350         .mnd_width = 8,
351         .hid_width = 5,
352         .parent_map = gcc_parent_map_1,
353         .freq_tbl = ftbl_gcc_gp1_clk_src,
354         .hw_clk_ctrl = true,
355         .clkr.hw.init = &(struct clk_init_data){
356                 .name = "gcc_gp2_clk_src",
357                 .parent_data = gcc_parent_data_1,
358                 .num_parents = ARRAY_SIZE(gcc_parent_data_1),
359                 .flags = CLK_SET_RATE_PARENT,
360                 .ops = &clk_rcg2_ops,
361         },
362 };
363
364 static struct clk_rcg2 gcc_gp3_clk_src = {
365         .cmd_rcgr = 0x76004,
366         .mnd_width = 8,
367         .hid_width = 5,
368         .parent_map = gcc_parent_map_1,
369         .freq_tbl = ftbl_gcc_gp1_clk_src,
370         .hw_clk_ctrl = true,
371         .clkr.hw.init = &(struct clk_init_data){
372                 .name = "gcc_gp3_clk_src",
373                 .parent_data = gcc_parent_data_1,
374                 .num_parents = ARRAY_SIZE(gcc_parent_data_1),
375                 .flags = CLK_SET_RATE_PARENT,
376                 .ops = &clk_rcg2_ops,
377         },
378 };
379
380 static const struct freq_tbl ftbl_gcc_pcie_0_aux_clk_src[] = {
381         F(19200000, P_BI_TCXO, 1, 0, 0),
382         { }
383 };
384
385 static struct clk_rcg2 gcc_pcie_0_aux_clk_src = {
386         .cmd_rcgr = 0x7b064,
387         .mnd_width = 16,
388         .hid_width = 5,
389         .parent_map = gcc_parent_map_2,
390         .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
391         .hw_clk_ctrl = true,
392         .clkr.hw.init = &(struct clk_init_data){
393                 .name = "gcc_pcie_0_aux_clk_src",
394                 .parent_data = gcc_parent_data_2,
395                 .num_parents = ARRAY_SIZE(gcc_parent_data_2),
396                 .flags = CLK_SET_RATE_PARENT,
397                 .ops = &clk_rcg2_ops,
398         },
399 };
400
401 static const struct freq_tbl ftbl_gcc_pcie_0_phy_rchng_clk_src[] = {
402         F(19200000, P_BI_TCXO, 1, 0, 0),
403         F(100000000, P_GCC_GPLL0_OUT_MAIN, 6, 0, 0),
404         { }
405 };
406
407 static struct clk_rcg2 gcc_pcie_0_phy_rchng_clk_src = {
408         .cmd_rcgr = 0x7b048,
409         .mnd_width = 0,
410         .hid_width = 5,
411         .parent_map = gcc_parent_map_0,
412         .freq_tbl = ftbl_gcc_pcie_0_phy_rchng_clk_src,
413         .hw_clk_ctrl = true,
414         .clkr.hw.init = &(struct clk_init_data){
415                 .name = "gcc_pcie_0_phy_rchng_clk_src",
416                 .parent_data = gcc_parent_data_0,
417                 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
418                 .flags = CLK_SET_RATE_PARENT,
419                 .ops = &clk_rcg2_ops,
420         },
421 };
422
423 static struct clk_rcg2 gcc_pcie_1_aux_clk_src = {
424         .cmd_rcgr = 0x9d068,
425         .mnd_width = 16,
426         .hid_width = 5,
427         .parent_map = gcc_parent_map_2,
428         .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
429         .hw_clk_ctrl = true,
430         .clkr.hw.init = &(struct clk_init_data){
431                 .name = "gcc_pcie_1_aux_clk_src",
432                 .parent_data = gcc_parent_data_2,
433                 .num_parents = ARRAY_SIZE(gcc_parent_data_2),
434                 .flags = CLK_SET_RATE_PARENT,
435                 .ops = &clk_rcg2_ops,
436         },
437 };
438
439 static struct clk_rcg2 gcc_pcie_1_phy_rchng_clk_src = {
440         .cmd_rcgr = 0x9d04c,
441         .mnd_width = 0,
442         .hid_width = 5,
443         .parent_map = gcc_parent_map_0,
444         .freq_tbl = ftbl_gcc_pcie_0_phy_rchng_clk_src,
445         .hw_clk_ctrl = true,
446         .clkr.hw.init = &(struct clk_init_data){
447                 .name = "gcc_pcie_1_phy_rchng_clk_src",
448                 .parent_data = gcc_parent_data_0,
449                 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
450                 .flags = CLK_SET_RATE_PARENT,
451                 .ops = &clk_rcg2_ops,
452         },
453 };
454
455 static const struct freq_tbl ftbl_gcc_pdm2_clk_src[] = {
456         F(60000000, P_GCC_GPLL0_OUT_MAIN, 10, 0, 0),
457         { }
458 };
459
460 static struct clk_rcg2 gcc_pdm2_clk_src = {
461         .cmd_rcgr = 0x43010,
462         .mnd_width = 0,
463         .hid_width = 5,
464         .parent_map = gcc_parent_map_0,
465         .freq_tbl = ftbl_gcc_pdm2_clk_src,
466         .hw_clk_ctrl = true,
467         .clkr.hw.init = &(struct clk_init_data){
468                 .name = "gcc_pdm2_clk_src",
469                 .parent_data = gcc_parent_data_0,
470                 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
471                 .flags = CLK_SET_RATE_PARENT,
472                 .ops = &clk_rcg2_ops,
473         },
474 };
475
476 static const struct freq_tbl ftbl_gcc_qupv3_wrap0_s0_clk_src[] = {
477         F(7372800, P_GCC_GPLL0_OUT_EVEN, 1, 384, 15625),
478         F(14745600, P_GCC_GPLL0_OUT_EVEN, 1, 768, 15625),
479         F(19200000, P_BI_TCXO, 1, 0, 0),
480         F(29491200, P_GCC_GPLL0_OUT_EVEN, 1, 1536, 15625),
481         F(32000000, P_GCC_GPLL0_OUT_EVEN, 1, 8, 75),
482         F(48000000, P_GCC_GPLL0_OUT_EVEN, 1, 4, 25),
483         F(64000000, P_GCC_GPLL0_OUT_EVEN, 1, 16, 75),
484         F(75000000, P_GCC_GPLL0_OUT_EVEN, 4, 0, 0),
485         F(80000000, P_GCC_GPLL0_OUT_EVEN, 1, 4, 15),
486         F(96000000, P_GCC_GPLL0_OUT_EVEN, 1, 8, 25),
487         F(100000000, P_GCC_GPLL0_OUT_MAIN, 6, 0, 0),
488         { }
489 };
490
491 static struct clk_init_data gcc_qupv3_wrap0_s0_clk_src_init = {
492         .name = "gcc_qupv3_wrap0_s0_clk_src",
493         .parent_data = gcc_parent_data_0,
494         .num_parents = ARRAY_SIZE(gcc_parent_data_0),
495         .flags = CLK_SET_RATE_PARENT,
496         .ops = &clk_rcg2_ops,
497 };
498
499 static struct clk_rcg2 gcc_qupv3_wrap0_s0_clk_src = {
500         .cmd_rcgr = 0x27014,
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         .hw_clk_ctrl = true,
506         .clkr.hw.init = &gcc_qupv3_wrap0_s0_clk_src_init,
507 };
508
509 static struct clk_init_data gcc_qupv3_wrap0_s1_clk_src_init = {
510         .name = "gcc_qupv3_wrap0_s1_clk_src",
511         .parent_data = gcc_parent_data_0,
512         .num_parents = ARRAY_SIZE(gcc_parent_data_0),
513         .flags = CLK_SET_RATE_PARENT,
514         .ops = &clk_rcg2_ops,
515 };
516
517 static struct clk_rcg2 gcc_qupv3_wrap0_s1_clk_src = {
518         .cmd_rcgr = 0x27148,
519         .mnd_width = 16,
520         .hid_width = 5,
521         .parent_map = gcc_parent_map_0,
522         .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
523         .hw_clk_ctrl = true,
524         .clkr.hw.init = &gcc_qupv3_wrap0_s1_clk_src_init,
525 };
526
527 static struct clk_init_data gcc_qupv3_wrap0_s2_clk_src_init = {
528         .name = "gcc_qupv3_wrap0_s2_clk_src",
529         .parent_data = gcc_parent_data_0,
530         .num_parents = ARRAY_SIZE(gcc_parent_data_0),
531         .flags = CLK_SET_RATE_PARENT,
532         .ops = &clk_rcg2_ops,
533 };
534
535 static struct clk_rcg2 gcc_qupv3_wrap0_s2_clk_src = {
536         .cmd_rcgr = 0x2727c,
537         .mnd_width = 16,
538         .hid_width = 5,
539         .parent_map = gcc_parent_map_0,
540         .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
541         .hw_clk_ctrl = true,
542         .clkr.hw.init = &gcc_qupv3_wrap0_s2_clk_src_init,
543 };
544
545 static struct clk_init_data gcc_qupv3_wrap0_s3_clk_src_init = {
546         .name = "gcc_qupv3_wrap0_s3_clk_src",
547         .parent_data = gcc_parent_data_0,
548         .num_parents = ARRAY_SIZE(gcc_parent_data_0),
549         .flags = CLK_SET_RATE_PARENT,
550         .ops = &clk_rcg2_ops,
551 };
552
553 static struct clk_rcg2 gcc_qupv3_wrap0_s3_clk_src = {
554         .cmd_rcgr = 0x273b0,
555         .mnd_width = 16,
556         .hid_width = 5,
557         .parent_map = gcc_parent_map_0,
558         .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
559         .hw_clk_ctrl = true,
560         .clkr.hw.init = &gcc_qupv3_wrap0_s3_clk_src_init,
561 };
562
563 static struct clk_init_data gcc_qupv3_wrap0_s4_clk_src_init = {
564         .name = "gcc_qupv3_wrap0_s4_clk_src",
565         .parent_data = gcc_parent_data_0,
566         .num_parents = ARRAY_SIZE(gcc_parent_data_0),
567         .flags = CLK_SET_RATE_PARENT,
568         .ops = &clk_rcg2_ops,
569 };
570
571 static struct clk_rcg2 gcc_qupv3_wrap0_s4_clk_src = {
572         .cmd_rcgr = 0x274e4,
573         .mnd_width = 16,
574         .hid_width = 5,
575         .parent_map = gcc_parent_map_0,
576         .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
577         .hw_clk_ctrl = true,
578         .clkr.hw.init = &gcc_qupv3_wrap0_s4_clk_src_init,
579 };
580
581 static const struct freq_tbl ftbl_gcc_qupv3_wrap0_s5_clk_src[] = {
582         F(7372800, P_GCC_GPLL0_OUT_EVEN, 1, 384, 15625),
583         F(14745600, P_GCC_GPLL0_OUT_EVEN, 1, 768, 15625),
584         F(19200000, P_BI_TCXO, 1, 0, 0),
585         F(29491200, P_GCC_GPLL0_OUT_EVEN, 1, 1536, 15625),
586         F(32000000, P_GCC_GPLL0_OUT_EVEN, 1, 8, 75),
587         F(37500000, P_GCC_GPLL0_OUT_EVEN, 8, 0, 0),
588         F(48000000, P_GCC_GPLL0_OUT_EVEN, 1, 4, 25),
589         F(50000000, P_GCC_GPLL0_OUT_MAIN, 12, 0, 0),
590         { }
591 };
592
593 static struct clk_init_data gcc_qupv3_wrap0_s5_clk_src_init = {
594         .name = "gcc_qupv3_wrap0_s5_clk_src",
595         .parent_data = gcc_parent_data_0,
596         .num_parents = ARRAY_SIZE(gcc_parent_data_0),
597         .flags = CLK_SET_RATE_PARENT,
598         .ops = &clk_rcg2_ops,
599 };
600
601 static struct clk_rcg2 gcc_qupv3_wrap0_s5_clk_src = {
602         .cmd_rcgr = 0x27618,
603         .mnd_width = 16,
604         .hid_width = 5,
605         .parent_map = gcc_parent_map_0,
606         .freq_tbl = ftbl_gcc_qupv3_wrap0_s5_clk_src,
607         .hw_clk_ctrl = true,
608         .clkr.hw.init = &gcc_qupv3_wrap0_s5_clk_src_init,
609 };
610
611 static struct clk_init_data gcc_qupv3_wrap0_s6_clk_src_init = {
612         .name = "gcc_qupv3_wrap0_s6_clk_src",
613         .parent_data = gcc_parent_data_0,
614         .num_parents = ARRAY_SIZE(gcc_parent_data_0),
615         .flags = CLK_SET_RATE_PARENT,
616         .ops = &clk_rcg2_ops,
617 };
618
619 static struct clk_rcg2 gcc_qupv3_wrap0_s6_clk_src = {
620         .cmd_rcgr = 0x2774c,
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         .hw_clk_ctrl = true,
626         .clkr.hw.init = &gcc_qupv3_wrap0_s6_clk_src_init,
627 };
628
629 static struct clk_init_data gcc_qupv3_wrap0_s7_clk_src_init = {
630         .name = "gcc_qupv3_wrap0_s7_clk_src",
631         .parent_data = gcc_parent_data_0,
632         .num_parents = ARRAY_SIZE(gcc_parent_data_0),
633         .flags = CLK_SET_RATE_PARENT,
634         .ops = &clk_rcg2_ops,
635 };
636
637 static struct clk_rcg2 gcc_qupv3_wrap0_s7_clk_src = {
638         .cmd_rcgr = 0x27880,
639         .mnd_width = 16,
640         .hid_width = 5,
641         .parent_map = gcc_parent_map_0,
642         .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
643         .hw_clk_ctrl = true,
644         .clkr.hw.init = &gcc_qupv3_wrap0_s7_clk_src_init,
645 };
646
647 static const struct freq_tbl ftbl_gcc_qupv3_wrap1_s0_clk_src[] = {
648         F(7372800, P_GCC_GPLL0_OUT_EVEN, 1, 384, 15625),
649         F(14745600, P_GCC_GPLL0_OUT_EVEN, 1, 768, 15625),
650         F(19200000, P_BI_TCXO, 1, 0, 0),
651         F(29491200, P_GCC_GPLL0_OUT_EVEN, 1, 1536, 15625),
652         F(32000000, P_GCC_GPLL0_OUT_EVEN, 1, 8, 75),
653         F(48000000, P_GCC_GPLL0_OUT_EVEN, 1, 4, 25),
654         F(64000000, P_GCC_GPLL0_OUT_EVEN, 1, 16, 75),
655         F(75000000, P_GCC_GPLL0_OUT_EVEN, 4, 0, 0),
656         F(80000000, P_GCC_GPLL0_OUT_EVEN, 1, 4, 15),
657         F(96000000, P_GCC_GPLL0_OUT_EVEN, 1, 8, 25),
658         F(100000000, P_GCC_GPLL0_OUT_MAIN, 6, 0, 0),
659         F(102400000, P_GCC_GPLL0_OUT_EVEN, 1, 128, 375),
660         F(112000000, P_GCC_GPLL0_OUT_EVEN, 1, 28, 75),
661         F(117964800, P_GCC_GPLL0_OUT_EVEN, 1, 6144, 15625),
662         F(120000000, P_GCC_GPLL0_OUT_MAIN, 5, 0, 0),
663         { }
664 };
665
666 static struct clk_init_data gcc_qupv3_wrap1_s0_clk_src_init = {
667         .name = "gcc_qupv3_wrap1_s0_clk_src",
668         .parent_data = gcc_parent_data_0,
669         .num_parents = ARRAY_SIZE(gcc_parent_data_0),
670         .flags = CLK_SET_RATE_PARENT,
671         .ops = &clk_rcg2_ops,
672 };
673
674 static struct clk_rcg2 gcc_qupv3_wrap1_s0_clk_src = {
675         .cmd_rcgr = 0x28014,
676         .mnd_width = 16,
677         .hid_width = 5,
678         .parent_map = gcc_parent_map_0,
679         .freq_tbl = ftbl_gcc_qupv3_wrap1_s0_clk_src,
680         .hw_clk_ctrl = true,
681         .clkr.hw.init = &gcc_qupv3_wrap1_s0_clk_src_init,
682 };
683
684 static struct clk_init_data gcc_qupv3_wrap1_s1_clk_src_init = {
685         .name = "gcc_qupv3_wrap1_s1_clk_src",
686         .parent_data = gcc_parent_data_0,
687         .num_parents = ARRAY_SIZE(gcc_parent_data_0),
688         .flags = CLK_SET_RATE_PARENT,
689         .ops = &clk_rcg2_ops,
690 };
691
692 static struct clk_rcg2 gcc_qupv3_wrap1_s1_clk_src = {
693         .cmd_rcgr = 0x28148,
694         .mnd_width = 16,
695         .hid_width = 5,
696         .parent_map = gcc_parent_map_0,
697         .freq_tbl = ftbl_gcc_qupv3_wrap1_s0_clk_src,
698         .hw_clk_ctrl = true,
699         .clkr.hw.init = &gcc_qupv3_wrap1_s1_clk_src_init,
700 };
701
702 static struct clk_init_data gcc_qupv3_wrap1_s2_clk_src_init = {
703         .name = "gcc_qupv3_wrap1_s2_clk_src",
704         .parent_data = gcc_parent_data_0,
705         .num_parents = ARRAY_SIZE(gcc_parent_data_0),
706         .flags = CLK_SET_RATE_PARENT,
707         .ops = &clk_rcg2_ops,
708 };
709
710 static struct clk_rcg2 gcc_qupv3_wrap1_s2_clk_src = {
711         .cmd_rcgr = 0x2827c,
712         .mnd_width = 16,
713         .hid_width = 5,
714         .parent_map = gcc_parent_map_0,
715         .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
716         .hw_clk_ctrl = true,
717         .clkr.hw.init = &gcc_qupv3_wrap1_s2_clk_src_init,
718 };
719
720 static struct clk_init_data gcc_qupv3_wrap1_s3_clk_src_init = {
721         .name = "gcc_qupv3_wrap1_s3_clk_src",
722         .parent_data = gcc_parent_data_0,
723         .num_parents = ARRAY_SIZE(gcc_parent_data_0),
724         .flags = CLK_SET_RATE_PARENT,
725         .ops = &clk_rcg2_ops,
726 };
727
728 static struct clk_rcg2 gcc_qupv3_wrap1_s3_clk_src = {
729         .cmd_rcgr = 0x283b0,
730         .mnd_width = 16,
731         .hid_width = 5,
732         .parent_map = gcc_parent_map_0,
733         .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
734         .hw_clk_ctrl = true,
735         .clkr.hw.init = &gcc_qupv3_wrap1_s3_clk_src_init,
736 };
737
738 static struct clk_init_data gcc_qupv3_wrap1_s4_clk_src_init = {
739         .name = "gcc_qupv3_wrap1_s4_clk_src",
740         .parent_data = gcc_parent_data_0,
741         .num_parents = ARRAY_SIZE(gcc_parent_data_0),
742         .flags = CLK_SET_RATE_PARENT,
743         .ops = &clk_rcg2_ops,
744 };
745
746 static struct clk_rcg2 gcc_qupv3_wrap1_s4_clk_src = {
747         .cmd_rcgr = 0x284e4,
748         .mnd_width = 16,
749         .hid_width = 5,
750         .parent_map = gcc_parent_map_0,
751         .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
752         .hw_clk_ctrl = true,
753         .clkr.hw.init = &gcc_qupv3_wrap1_s4_clk_src_init,
754 };
755
756 static struct clk_init_data gcc_qupv3_wrap1_s5_clk_src_init = {
757         .name = "gcc_qupv3_wrap1_s5_clk_src",
758         .parent_data = gcc_parent_data_0,
759         .num_parents = ARRAY_SIZE(gcc_parent_data_0),
760         .flags = CLK_SET_RATE_PARENT,
761         .ops = &clk_rcg2_ops,
762 };
763
764 static struct clk_rcg2 gcc_qupv3_wrap1_s5_clk_src = {
765         .cmd_rcgr = 0x28618,
766         .mnd_width = 16,
767         .hid_width = 5,
768         .parent_map = gcc_parent_map_0,
769         .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
770         .hw_clk_ctrl = true,
771         .clkr.hw.init = &gcc_qupv3_wrap1_s5_clk_src_init,
772 };
773
774 static struct clk_init_data gcc_qupv3_wrap1_s6_clk_src_init = {
775         .name = "gcc_qupv3_wrap1_s6_clk_src",
776         .parent_data = gcc_parent_data_0,
777         .num_parents = ARRAY_SIZE(gcc_parent_data_0),
778         .flags = CLK_SET_RATE_PARENT,
779         .ops = &clk_rcg2_ops,
780 };
781
782 static struct clk_rcg2 gcc_qupv3_wrap1_s6_clk_src = {
783         .cmd_rcgr = 0x2874c,
784         .mnd_width = 16,
785         .hid_width = 5,
786         .parent_map = gcc_parent_map_0,
787         .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
788         .hw_clk_ctrl = true,
789         .clkr.hw.init = &gcc_qupv3_wrap1_s6_clk_src_init,
790 };
791
792 static struct clk_init_data gcc_qupv3_wrap2_s0_clk_src_init = {
793         .name = "gcc_qupv3_wrap2_s0_clk_src",
794         .parent_data = gcc_parent_data_0,
795         .num_parents = ARRAY_SIZE(gcc_parent_data_0),
796         .flags = CLK_SET_RATE_PARENT,
797         .ops = &clk_rcg2_ops,
798 };
799
800 static struct clk_rcg2 gcc_qupv3_wrap2_s0_clk_src = {
801         .cmd_rcgr = 0x2e014,
802         .mnd_width = 16,
803         .hid_width = 5,
804         .parent_map = gcc_parent_map_0,
805         .freq_tbl = ftbl_gcc_qupv3_wrap1_s0_clk_src,
806         .hw_clk_ctrl = true,
807         .clkr.hw.init = &gcc_qupv3_wrap2_s0_clk_src_init,
808 };
809
810 static struct clk_init_data gcc_qupv3_wrap2_s1_clk_src_init = {
811         .name = "gcc_qupv3_wrap2_s1_clk_src",
812         .parent_data = gcc_parent_data_0,
813         .num_parents = ARRAY_SIZE(gcc_parent_data_0),
814         .flags = CLK_SET_RATE_PARENT,
815         .ops = &clk_rcg2_ops,
816 };
817
818 static struct clk_rcg2 gcc_qupv3_wrap2_s1_clk_src = {
819         .cmd_rcgr = 0x2e148,
820         .mnd_width = 16,
821         .hid_width = 5,
822         .parent_map = gcc_parent_map_0,
823         .freq_tbl = ftbl_gcc_qupv3_wrap1_s0_clk_src,
824         .hw_clk_ctrl = true,
825         .clkr.hw.init = &gcc_qupv3_wrap2_s1_clk_src_init,
826 };
827
828 static struct clk_init_data gcc_qupv3_wrap2_s2_clk_src_init = {
829         .name = "gcc_qupv3_wrap2_s2_clk_src",
830         .parent_data = gcc_parent_data_0,
831         .num_parents = ARRAY_SIZE(gcc_parent_data_0),
832         .flags = CLK_SET_RATE_PARENT,
833         .ops = &clk_rcg2_ops,
834 };
835
836 static struct clk_rcg2 gcc_qupv3_wrap2_s2_clk_src = {
837         .cmd_rcgr = 0x2e27c,
838         .mnd_width = 16,
839         .hid_width = 5,
840         .parent_map = gcc_parent_map_0,
841         .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
842         .hw_clk_ctrl = true,
843         .clkr.hw.init = &gcc_qupv3_wrap2_s2_clk_src_init,
844 };
845
846 static struct clk_init_data gcc_qupv3_wrap2_s3_clk_src_init = {
847         .name = "gcc_qupv3_wrap2_s3_clk_src",
848         .parent_data = gcc_parent_data_0,
849         .num_parents = ARRAY_SIZE(gcc_parent_data_0),
850         .flags = CLK_SET_RATE_PARENT,
851         .ops = &clk_rcg2_ops,
852 };
853
854 static struct clk_rcg2 gcc_qupv3_wrap2_s3_clk_src = {
855         .cmd_rcgr = 0x2e3b0,
856         .mnd_width = 16,
857         .hid_width = 5,
858         .parent_map = gcc_parent_map_0,
859         .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
860         .hw_clk_ctrl = true,
861         .clkr.hw.init = &gcc_qupv3_wrap2_s3_clk_src_init,
862 };
863
864 static struct clk_init_data gcc_qupv3_wrap2_s4_clk_src_init = {
865         .name = "gcc_qupv3_wrap2_s4_clk_src",
866         .parent_data = gcc_parent_data_0,
867         .num_parents = ARRAY_SIZE(gcc_parent_data_0),
868         .flags = CLK_SET_RATE_PARENT,
869         .ops = &clk_rcg2_ops,
870 };
871
872 static struct clk_rcg2 gcc_qupv3_wrap2_s4_clk_src = {
873         .cmd_rcgr = 0x2e4e4,
874         .mnd_width = 16,
875         .hid_width = 5,
876         .parent_map = gcc_parent_map_0,
877         .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
878         .hw_clk_ctrl = true,
879         .clkr.hw.init = &gcc_qupv3_wrap2_s4_clk_src_init,
880 };
881
882 static struct clk_init_data gcc_qupv3_wrap2_s5_clk_src_init = {
883         .name = "gcc_qupv3_wrap2_s5_clk_src",
884         .parent_data = gcc_parent_data_0,
885         .num_parents = ARRAY_SIZE(gcc_parent_data_0),
886         .flags = CLK_SET_RATE_PARENT,
887         .ops = &clk_rcg2_ops,
888 };
889
890 static struct clk_rcg2 gcc_qupv3_wrap2_s5_clk_src = {
891         .cmd_rcgr = 0x2e618,
892         .mnd_width = 16,
893         .hid_width = 5,
894         .parent_map = gcc_parent_map_0,
895         .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
896         .hw_clk_ctrl = true,
897         .clkr.hw.init = &gcc_qupv3_wrap2_s5_clk_src_init,
898 };
899
900 static struct clk_init_data gcc_qupv3_wrap2_s6_clk_src_init = {
901         .name = "gcc_qupv3_wrap2_s6_clk_src",
902         .parent_data = gcc_parent_data_0,
903         .num_parents = ARRAY_SIZE(gcc_parent_data_0),
904         .flags = CLK_SET_RATE_PARENT,
905         .ops = &clk_rcg2_ops,
906 };
907
908 static struct clk_rcg2 gcc_qupv3_wrap2_s6_clk_src = {
909         .cmd_rcgr = 0x2e74c,
910         .mnd_width = 16,
911         .hid_width = 5,
912         .parent_map = gcc_parent_map_0,
913         .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
914         .hw_clk_ctrl = true,
915         .clkr.hw.init = &gcc_qupv3_wrap2_s6_clk_src_init,
916 };
917
918 static const struct freq_tbl ftbl_gcc_sdcc2_apps_clk_src[] = {
919         F(400000, P_BI_TCXO, 12, 1, 4),
920         F(25000000, P_GCC_GPLL0_OUT_EVEN, 12, 0, 0),
921         F(50000000, P_GCC_GPLL0_OUT_EVEN, 6, 0, 0),
922         F(100000000, P_GCC_GPLL0_OUT_EVEN, 3, 0, 0),
923         F(202000000, P_GCC_GPLL9_OUT_MAIN, 4, 0, 0),
924         { }
925 };
926
927 static struct clk_rcg2 gcc_sdcc2_apps_clk_src = {
928         .cmd_rcgr = 0x24014,
929         .mnd_width = 8,
930         .hid_width = 5,
931         .parent_map = gcc_parent_map_7,
932         .freq_tbl = ftbl_gcc_sdcc2_apps_clk_src,
933         .hw_clk_ctrl = true,
934         .clkr.hw.init = &(struct clk_init_data){
935                 .name = "gcc_sdcc2_apps_clk_src",
936                 .parent_data = gcc_parent_data_7,
937                 .num_parents = ARRAY_SIZE(gcc_parent_data_7),
938                 .flags = CLK_SET_RATE_PARENT,
939                 .ops = &clk_rcg2_floor_ops,
940         },
941 };
942
943 static const struct freq_tbl ftbl_gcc_sdcc4_apps_clk_src[] = {
944         F(400000, P_BI_TCXO, 12, 1, 4),
945         F(25000000, P_GCC_GPLL0_OUT_EVEN, 12, 0, 0),
946         F(100000000, P_GCC_GPLL0_OUT_EVEN, 3, 0, 0),
947         { }
948 };
949
950 static struct clk_rcg2 gcc_sdcc4_apps_clk_src = {
951         .cmd_rcgr = 0x26014,
952         .mnd_width = 8,
953         .hid_width = 5,
954         .parent_map = gcc_parent_map_0,
955         .freq_tbl = ftbl_gcc_sdcc4_apps_clk_src,
956         .hw_clk_ctrl = true,
957         .clkr.hw.init = &(struct clk_init_data){
958                 .name = "gcc_sdcc4_apps_clk_src",
959                 .parent_data = gcc_parent_data_0,
960                 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
961                 .flags = CLK_SET_RATE_PARENT,
962                 .ops = &clk_rcg2_floor_ops,
963         },
964 };
965
966 static const struct freq_tbl ftbl_gcc_ufs_phy_axi_clk_src[] = {
967         F(25000000, P_GCC_GPLL0_OUT_EVEN, 12, 0, 0),
968         F(75000000, P_GCC_GPLL0_OUT_EVEN, 4, 0, 0),
969         F(150000000, P_GCC_GPLL0_OUT_MAIN, 4, 0, 0),
970         F(300000000, P_GCC_GPLL0_OUT_MAIN, 2, 0, 0),
971         { }
972 };
973
974 static struct clk_rcg2 gcc_ufs_phy_axi_clk_src = {
975         .cmd_rcgr = 0x8702c,
976         .mnd_width = 8,
977         .hid_width = 5,
978         .parent_map = gcc_parent_map_0,
979         .freq_tbl = ftbl_gcc_ufs_phy_axi_clk_src,
980         .hw_clk_ctrl = true,
981         .clkr.hw.init = &(struct clk_init_data){
982                 .name = "gcc_ufs_phy_axi_clk_src",
983                 .parent_data = gcc_parent_data_0,
984                 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
985                 .flags = CLK_SET_RATE_PARENT,
986                 .ops = &clk_rcg2_ops,
987         },
988 };
989
990 static const struct freq_tbl ftbl_gcc_ufs_phy_ice_core_clk_src[] = {
991         F(75000000, P_GCC_GPLL0_OUT_EVEN, 4, 0, 0),
992         F(150000000, P_GCC_GPLL0_OUT_MAIN, 4, 0, 0),
993         F(300000000, P_GCC_GPLL0_OUT_MAIN, 2, 0, 0),
994         { }
995 };
996
997 static struct clk_rcg2 gcc_ufs_phy_ice_core_clk_src = {
998         .cmd_rcgr = 0x87074,
999         .mnd_width = 0,
1000         .hid_width = 5,
1001         .parent_map = gcc_parent_map_0,
1002         .freq_tbl = ftbl_gcc_ufs_phy_ice_core_clk_src,
1003         .hw_clk_ctrl = true,
1004         .clkr.hw.init = &(struct clk_init_data){
1005                 .name = "gcc_ufs_phy_ice_core_clk_src",
1006                 .parent_data = gcc_parent_data_0,
1007                 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
1008                 .flags = CLK_SET_RATE_PARENT,
1009                 .ops = &clk_rcg2_ops,
1010         },
1011 };
1012
1013 static const struct freq_tbl ftbl_gcc_ufs_phy_phy_aux_clk_src[] = {
1014         F(9600000, P_BI_TCXO, 2, 0, 0),
1015         F(19200000, P_BI_TCXO, 1, 0, 0),
1016         { }
1017 };
1018
1019 static struct clk_rcg2 gcc_ufs_phy_phy_aux_clk_src = {
1020         .cmd_rcgr = 0x870a8,
1021         .mnd_width = 0,
1022         .hid_width = 5,
1023         .parent_map = gcc_parent_map_3,
1024         .freq_tbl = ftbl_gcc_ufs_phy_phy_aux_clk_src,
1025         .hw_clk_ctrl = true,
1026         .clkr.hw.init = &(struct clk_init_data){
1027                 .name = "gcc_ufs_phy_phy_aux_clk_src",
1028                 .parent_data = gcc_parent_data_3,
1029                 .num_parents = ARRAY_SIZE(gcc_parent_data_3),
1030                 .flags = CLK_SET_RATE_PARENT,
1031                 .ops = &clk_rcg2_ops,
1032         },
1033 };
1034
1035 static struct clk_rcg2 gcc_ufs_phy_unipro_core_clk_src = {
1036         .cmd_rcgr = 0x8708c,
1037         .mnd_width = 0,
1038         .hid_width = 5,
1039         .parent_map = gcc_parent_map_0,
1040         .freq_tbl = ftbl_gcc_ufs_phy_ice_core_clk_src,
1041         .hw_clk_ctrl = true,
1042         .clkr.hw.init = &(struct clk_init_data){
1043                 .name = "gcc_ufs_phy_unipro_core_clk_src",
1044                 .parent_data = gcc_parent_data_0,
1045                 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
1046                 .flags = CLK_SET_RATE_PARENT,
1047                 .ops = &clk_rcg2_ops,
1048         },
1049 };
1050
1051 static const struct freq_tbl ftbl_gcc_usb30_prim_master_clk_src[] = {
1052         F(66666667, P_GCC_GPLL0_OUT_EVEN, 4.5, 0, 0),
1053         F(133333333, P_GCC_GPLL0_OUT_MAIN, 4.5, 0, 0),
1054         F(200000000, P_GCC_GPLL0_OUT_MAIN, 3, 0, 0),
1055         F(240000000, P_GCC_GPLL0_OUT_MAIN, 2.5, 0, 0),
1056         { }
1057 };
1058
1059 static struct clk_rcg2 gcc_usb30_prim_master_clk_src = {
1060         .cmd_rcgr = 0x49028,
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         .hw_clk_ctrl = true,
1066         .clkr.hw.init = &(struct clk_init_data){
1067                 .name = "gcc_usb30_prim_master_clk_src",
1068                 .parent_data = gcc_parent_data_0,
1069                 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
1070                 .flags = CLK_SET_RATE_PARENT,
1071                 .ops = &clk_rcg2_ops,
1072         },
1073 };
1074
1075 static struct clk_rcg2 gcc_usb30_prim_mock_utmi_clk_src = {
1076         .cmd_rcgr = 0x49040,
1077         .mnd_width = 0,
1078         .hid_width = 5,
1079         .parent_map = gcc_parent_map_0,
1080         .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
1081         .hw_clk_ctrl = true,
1082         .clkr.hw.init = &(struct clk_init_data){
1083                 .name = "gcc_usb30_prim_mock_utmi_clk_src",
1084                 .parent_data = gcc_parent_data_0,
1085                 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
1086                 .flags = CLK_SET_RATE_PARENT,
1087                 .ops = &clk_rcg2_ops,
1088         },
1089 };
1090
1091 static struct clk_rcg2 gcc_usb3_prim_phy_aux_clk_src = {
1092         .cmd_rcgr = 0x4906c,
1093         .mnd_width = 0,
1094         .hid_width = 5,
1095         .parent_map = gcc_parent_map_2,
1096         .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
1097         .hw_clk_ctrl = true,
1098         .clkr.hw.init = &(struct clk_init_data){
1099                 .name = "gcc_usb3_prim_phy_aux_clk_src",
1100                 .parent_data = gcc_parent_data_2,
1101                 .num_parents = ARRAY_SIZE(gcc_parent_data_2),
1102                 .flags = CLK_SET_RATE_PARENT,
1103                 .ops = &clk_rcg2_ops,
1104         },
1105 };
1106
1107 static struct clk_regmap_div gcc_usb30_prim_mock_utmi_postdiv_clk_src = {
1108         .reg = 0x49058,
1109         .shift = 0,
1110         .width = 4,
1111         .clkr.hw.init = &(struct clk_init_data) {
1112                 .name = "gcc_usb30_prim_mock_utmi_postdiv_clk_src",
1113                 .parent_hws = (const struct clk_hw*[]) {
1114                         &gcc_usb30_prim_mock_utmi_clk_src.clkr.hw,
1115                 },
1116                 .num_parents = 1,
1117                 .flags = CLK_SET_RATE_PARENT,
1118                 .ops = &clk_regmap_div_ro_ops,
1119         },
1120 };
1121
1122 static struct clk_branch gcc_aggre_noc_pcie_0_axi_clk = {
1123         .halt_reg = 0x7b08c,
1124         .halt_check = BRANCH_HALT_SKIP,
1125         .hwcg_reg = 0x7b08c,
1126         .hwcg_bit = 1,
1127         .clkr = {
1128                 .enable_reg = 0x62000,
1129                 .enable_mask = BIT(12),
1130                 .hw.init = &(struct clk_init_data){
1131                         .name = "gcc_aggre_noc_pcie_0_axi_clk",
1132                         .ops = &clk_branch2_ops,
1133                 },
1134         },
1135 };
1136
1137 static struct clk_branch gcc_aggre_noc_pcie_1_axi_clk = {
1138         .halt_reg = 0x9d098,
1139         .halt_check = BRANCH_HALT_SKIP,
1140         .hwcg_reg = 0x9d098,
1141         .hwcg_bit = 1,
1142         .clkr = {
1143                 .enable_reg = 0x62000,
1144                 .enable_mask = BIT(11),
1145                 .hw.init = &(struct clk_init_data){
1146                         .name = "gcc_aggre_noc_pcie_1_axi_clk",
1147                         .ops = &clk_branch2_ops,
1148                 },
1149         },
1150 };
1151
1152 static struct clk_branch gcc_aggre_ufs_phy_axi_clk = {
1153         .halt_reg = 0x870d4,
1154         .halt_check = BRANCH_HALT_VOTED,
1155         .hwcg_reg = 0x870d4,
1156         .hwcg_bit = 1,
1157         .clkr = {
1158                 .enable_reg = 0x870d4,
1159                 .enable_mask = BIT(0),
1160                 .hw.init = &(struct clk_init_data){
1161                         .name = "gcc_aggre_ufs_phy_axi_clk",
1162                         .parent_hws = (const struct clk_hw*[]) {
1163                                 &gcc_ufs_phy_axi_clk_src.clkr.hw,
1164                         },
1165                         .num_parents = 1,
1166                         .flags = CLK_SET_RATE_PARENT,
1167                         .ops = &clk_branch2_ops,
1168                 },
1169         },
1170 };
1171
1172 static struct clk_branch gcc_aggre_ufs_phy_axi_hw_ctl_clk = {
1173         .halt_reg = 0x870d4,
1174         .halt_check = BRANCH_HALT_VOTED,
1175         .hwcg_reg = 0x870d4,
1176         .hwcg_bit = 1,
1177         .clkr = {
1178                 .enable_reg = 0x870d4,
1179                 .enable_mask = BIT(1),
1180                 .hw.init = &(struct clk_init_data){
1181                         .name = "gcc_aggre_ufs_phy_axi_hw_ctl_clk",
1182                         .parent_hws = (const struct clk_hw*[]) {
1183                                 &gcc_ufs_phy_axi_clk_src.clkr.hw,
1184                         },
1185                         .num_parents = 1,
1186                         .flags = CLK_SET_RATE_PARENT,
1187                         .ops = &clk_branch2_ops,
1188                 },
1189         },
1190 };
1191
1192 static struct clk_branch gcc_aggre_usb3_prim_axi_clk = {
1193         .halt_reg = 0x49088,
1194         .halt_check = BRANCH_HALT_VOTED,
1195         .hwcg_reg = 0x49088,
1196         .hwcg_bit = 1,
1197         .clkr = {
1198                 .enable_reg = 0x49088,
1199                 .enable_mask = BIT(0),
1200                 .hw.init = &(struct clk_init_data){
1201                         .name = "gcc_aggre_usb3_prim_axi_clk",
1202                         .parent_hws = (const struct clk_hw*[]) {
1203                                 &gcc_usb30_prim_master_clk_src.clkr.hw,
1204                         },
1205                         .num_parents = 1,
1206                         .flags = CLK_SET_RATE_PARENT,
1207                         .ops = &clk_branch2_ops,
1208                 },
1209         },
1210 };
1211
1212 static struct clk_branch gcc_boot_rom_ahb_clk = {
1213         .halt_reg = 0x48004,
1214         .halt_check = BRANCH_HALT_VOTED,
1215         .hwcg_reg = 0x48004,
1216         .hwcg_bit = 1,
1217         .clkr = {
1218                 .enable_reg = 0x62000,
1219                 .enable_mask = BIT(10),
1220                 .hw.init = &(struct clk_init_data){
1221                         .name = "gcc_boot_rom_ahb_clk",
1222                         .ops = &clk_branch2_ops,
1223                 },
1224         },
1225 };
1226
1227 static struct clk_branch gcc_camera_hf_axi_clk = {
1228         .halt_reg = 0x36010,
1229         .halt_check = BRANCH_HALT_SKIP,
1230         .hwcg_reg = 0x36010,
1231         .hwcg_bit = 1,
1232         .clkr = {
1233                 .enable_reg = 0x36010,
1234                 .enable_mask = BIT(0),
1235                 .hw.init = &(struct clk_init_data){
1236                         .name = "gcc_camera_hf_axi_clk",
1237                         .ops = &clk_branch2_ops,
1238                 },
1239         },
1240 };
1241
1242 static struct clk_branch gcc_camera_sf_axi_clk = {
1243         .halt_reg = 0x36018,
1244         .halt_check = BRANCH_HALT_SKIP,
1245         .hwcg_reg = 0x36018,
1246         .hwcg_bit = 1,
1247         .clkr = {
1248                 .enable_reg = 0x36018,
1249                 .enable_mask = BIT(0),
1250                 .hw.init = &(struct clk_init_data){
1251                         .name = "gcc_camera_sf_axi_clk",
1252                         .ops = &clk_branch2_ops,
1253                 },
1254         },
1255 };
1256
1257 static struct clk_branch gcc_cfg_noc_pcie_anoc_ahb_clk = {
1258         .halt_reg = 0x20030,
1259         .halt_check = BRANCH_HALT_VOTED,
1260         .hwcg_reg = 0x20030,
1261         .hwcg_bit = 1,
1262         .clkr = {
1263                 .enable_reg = 0x62000,
1264                 .enable_mask = BIT(20),
1265                 .hw.init = &(struct clk_init_data){
1266                         .name = "gcc_cfg_noc_pcie_anoc_ahb_clk",
1267                         .ops = &clk_branch2_ops,
1268                 },
1269         },
1270 };
1271
1272 static struct clk_branch gcc_cfg_noc_usb3_prim_axi_clk = {
1273         .halt_reg = 0x49084,
1274         .halt_check = BRANCH_HALT_VOTED,
1275         .hwcg_reg = 0x49084,
1276         .hwcg_bit = 1,
1277         .clkr = {
1278                 .enable_reg = 0x49084,
1279                 .enable_mask = BIT(0),
1280                 .hw.init = &(struct clk_init_data){
1281                         .name = "gcc_cfg_noc_usb3_prim_axi_clk",
1282                         .parent_hws = (const struct clk_hw*[]) {
1283                                 &gcc_usb30_prim_master_clk_src.clkr.hw,
1284                         },
1285                         .num_parents = 1,
1286                         .flags = CLK_SET_RATE_PARENT,
1287                         .ops = &clk_branch2_ops,
1288                 },
1289         },
1290 };
1291
1292 static struct clk_branch gcc_ddrss_gpu_axi_clk = {
1293         .halt_reg = 0x81154,
1294         .halt_check = BRANCH_HALT_SKIP,
1295         .hwcg_reg = 0x81154,
1296         .hwcg_bit = 1,
1297         .clkr = {
1298                 .enable_reg = 0x81154,
1299                 .enable_mask = BIT(0),
1300                 .hw.init = &(struct clk_init_data){
1301                         .name = "gcc_ddrss_gpu_axi_clk",
1302                         .ops = &clk_branch2_aon_ops,
1303                 },
1304         },
1305 };
1306
1307 static struct clk_branch gcc_ddrss_pcie_sf_tbu_clk = {
1308         .halt_reg = 0x9d094,
1309         .halt_check = BRANCH_HALT_SKIP,
1310         .hwcg_reg = 0x9d094,
1311         .hwcg_bit = 1,
1312         .clkr = {
1313                 .enable_reg = 0x62000,
1314                 .enable_mask = BIT(19),
1315                 .hw.init = &(struct clk_init_data){
1316                         .name = "gcc_ddrss_pcie_sf_tbu_clk",
1317                         .ops = &clk_branch2_ops,
1318                 },
1319         },
1320 };
1321
1322 static struct clk_branch gcc_disp_hf_axi_clk = {
1323         .halt_reg = 0x3700c,
1324         .halt_check = BRANCH_HALT_SKIP,
1325         .hwcg_reg = 0x3700c,
1326         .hwcg_bit = 1,
1327         .clkr = {
1328                 .enable_reg = 0x3700c,
1329                 .enable_mask = BIT(0),
1330                 .hw.init = &(struct clk_init_data){
1331                         .name = "gcc_disp_hf_axi_clk",
1332                         .ops = &clk_branch2_ops,
1333                 },
1334         },
1335 };
1336
1337 static struct clk_branch gcc_disp_sf_axi_clk = {
1338         .halt_reg = 0x37014,
1339         .halt_check = BRANCH_HALT_SKIP,
1340         .hwcg_reg = 0x37014,
1341         .hwcg_bit = 1,
1342         .clkr = {
1343                 .enable_reg = 0x37014,
1344                 .enable_mask = BIT(0),
1345                 .hw.init = &(struct clk_init_data){
1346                         .name = "gcc_disp_sf_axi_clk",
1347                         .ops = &clk_branch2_ops,
1348                 },
1349         },
1350 };
1351
1352 static struct clk_branch gcc_eusb3_0_clkref_en = {
1353         .halt_reg = 0x9c00c,
1354         .halt_check = BRANCH_HALT,
1355         .clkr = {
1356                 .enable_reg = 0x9c00c,
1357                 .enable_mask = BIT(0),
1358                 .hw.init = &(struct clk_init_data){
1359                         .name = "gcc_eusb3_0_clkref_en",
1360                         .ops = &clk_branch2_ops,
1361                 },
1362         },
1363 };
1364
1365 static struct clk_branch gcc_gp1_clk = {
1366         .halt_reg = 0x74000,
1367         .halt_check = BRANCH_HALT,
1368         .clkr = {
1369                 .enable_reg = 0x74000,
1370                 .enable_mask = BIT(0),
1371                 .hw.init = &(struct clk_init_data){
1372                         .name = "gcc_gp1_clk",
1373                         .parent_hws = (const struct clk_hw*[]) {
1374                                 &gcc_gp1_clk_src.clkr.hw,
1375                         },
1376                         .num_parents = 1,
1377                         .flags = CLK_SET_RATE_PARENT,
1378                         .ops = &clk_branch2_ops,
1379                 },
1380         },
1381 };
1382
1383 static struct clk_branch gcc_gp2_clk = {
1384         .halt_reg = 0x75000,
1385         .halt_check = BRANCH_HALT,
1386         .clkr = {
1387                 .enable_reg = 0x75000,
1388                 .enable_mask = BIT(0),
1389                 .hw.init = &(struct clk_init_data){
1390                         .name = "gcc_gp2_clk",
1391                         .parent_hws = (const struct clk_hw*[]) {
1392                                 &gcc_gp2_clk_src.clkr.hw,
1393                         },
1394                         .num_parents = 1,
1395                         .flags = CLK_SET_RATE_PARENT,
1396                         .ops = &clk_branch2_ops,
1397                 },
1398         },
1399 };
1400
1401 static struct clk_branch gcc_gp3_clk = {
1402         .halt_reg = 0x76000,
1403         .halt_check = BRANCH_HALT,
1404         .clkr = {
1405                 .enable_reg = 0x76000,
1406                 .enable_mask = BIT(0),
1407                 .hw.init = &(struct clk_init_data){
1408                         .name = "gcc_gp3_clk",
1409                         .parent_hws = (const struct clk_hw*[]) {
1410                                 &gcc_gp3_clk_src.clkr.hw,
1411                         },
1412                         .num_parents = 1,
1413                         .flags = CLK_SET_RATE_PARENT,
1414                         .ops = &clk_branch2_ops,
1415                 },
1416         },
1417 };
1418
1419 static struct clk_branch gcc_gpu_gpll0_clk_src = {
1420         .halt_check = BRANCH_HALT_DELAY,
1421         .clkr = {
1422                 .enable_reg = 0x62000,
1423                 .enable_mask = BIT(15),
1424                 .hw.init = &(struct clk_init_data){
1425                         .name = "gcc_gpu_gpll0_clk_src",
1426                         .parent_hws = (const struct clk_hw*[]) {
1427                                 &gcc_gpll0.clkr.hw,
1428                         },
1429                         .num_parents = 1,
1430                         .flags = CLK_SET_RATE_PARENT,
1431                         .ops = &clk_branch2_ops,
1432                 },
1433         },
1434 };
1435
1436 static struct clk_branch gcc_gpu_gpll0_div_clk_src = {
1437         .halt_check = BRANCH_HALT_DELAY,
1438         .clkr = {
1439                 .enable_reg = 0x62000,
1440                 .enable_mask = BIT(16),
1441                 .hw.init = &(struct clk_init_data){
1442                         .name = "gcc_gpu_gpll0_div_clk_src",
1443                         .parent_hws = (const struct clk_hw*[]) {
1444                                 &gcc_gpll0_out_even.clkr.hw,
1445                         },
1446                         .num_parents = 1,
1447                         .flags = CLK_SET_RATE_PARENT,
1448                         .ops = &clk_branch2_ops,
1449                 },
1450         },
1451 };
1452
1453 static struct clk_branch gcc_gpu_memnoc_gfx_clk = {
1454         .halt_reg = 0x81010,
1455         .halt_check = BRANCH_HALT_VOTED,
1456         .hwcg_reg = 0x81010,
1457         .hwcg_bit = 1,
1458         .clkr = {
1459                 .enable_reg = 0x81010,
1460                 .enable_mask = BIT(0),
1461                 .hw.init = &(struct clk_init_data){
1462                         .name = "gcc_gpu_memnoc_gfx_clk",
1463                         .ops = &clk_branch2_ops,
1464                 },
1465         },
1466 };
1467
1468 static struct clk_branch gcc_gpu_snoc_dvm_gfx_clk = {
1469         .halt_reg = 0x81018,
1470         .halt_check = BRANCH_HALT_DELAY,
1471         .clkr = {
1472                 .enable_reg = 0x81018,
1473                 .enable_mask = BIT(0),
1474                 .hw.init = &(struct clk_init_data){
1475                         .name = "gcc_gpu_snoc_dvm_gfx_clk",
1476                         .ops = &clk_branch2_ops,
1477                 },
1478         },
1479 };
1480
1481 static struct clk_branch gcc_pcie_0_aux_clk = {
1482         .halt_reg = 0x7b034,
1483         .halt_check = BRANCH_HALT_VOTED,
1484         .clkr = {
1485                 .enable_reg = 0x62008,
1486                 .enable_mask = BIT(3),
1487                 .hw.init = &(struct clk_init_data){
1488                         .name = "gcc_pcie_0_aux_clk",
1489                         .parent_hws = (const struct clk_hw*[]) {
1490                                 &gcc_pcie_0_aux_clk_src.clkr.hw,
1491                         },
1492                         .num_parents = 1,
1493                         .flags = CLK_SET_RATE_PARENT,
1494                         .ops = &clk_branch2_ops,
1495                 },
1496         },
1497 };
1498
1499 static struct clk_branch gcc_pcie_0_cfg_ahb_clk = {
1500         .halt_reg = 0x7b030,
1501         .halt_check = BRANCH_HALT_VOTED,
1502         .hwcg_reg = 0x7b030,
1503         .hwcg_bit = 1,
1504         .clkr = {
1505                 .enable_reg = 0x62008,
1506                 .enable_mask = BIT(2),
1507                 .hw.init = &(struct clk_init_data){
1508                         .name = "gcc_pcie_0_cfg_ahb_clk",
1509                         .ops = &clk_branch2_ops,
1510                 },
1511         },
1512 };
1513
1514 static struct clk_branch gcc_pcie_0_clkref_en = {
1515         .halt_reg = 0x9c004,
1516         .halt_check = BRANCH_HALT,
1517         .clkr = {
1518                 .enable_reg = 0x9c004,
1519                 .enable_mask = BIT(0),
1520                 .hw.init = &(struct clk_init_data){
1521                         .name = "gcc_pcie_0_clkref_en",
1522                         .ops = &clk_branch2_ops,
1523                 },
1524         },
1525 };
1526
1527 static struct clk_branch gcc_pcie_0_mstr_axi_clk = {
1528         .halt_reg = 0x7b028,
1529         .halt_check = BRANCH_HALT_SKIP,
1530         .clkr = {
1531                 .enable_reg = 0x62008,
1532                 .enable_mask = BIT(1),
1533                 .hw.init = &(struct clk_init_data){
1534                         .name = "gcc_pcie_0_mstr_axi_clk",
1535                         .ops = &clk_branch2_ops,
1536                 },
1537         },
1538 };
1539
1540 static struct clk_branch gcc_pcie_0_phy_rchng_clk = {
1541         .halt_reg = 0x7b044,
1542         .halt_check = BRANCH_HALT_VOTED,
1543         .clkr = {
1544                 .enable_reg = 0x62000,
1545                 .enable_mask = BIT(22),
1546                 .hw.init = &(struct clk_init_data){
1547                         .name = "gcc_pcie_0_phy_rchng_clk",
1548                         .parent_hws = (const struct clk_hw*[]) {
1549                                 &gcc_pcie_0_phy_rchng_clk_src.clkr.hw,
1550                         },
1551                         .num_parents = 1,
1552                         .flags = CLK_SET_RATE_PARENT,
1553                         .ops = &clk_branch2_ops,
1554                 },
1555         },
1556 };
1557
1558 static struct clk_branch gcc_pcie_0_pipe_clk = {
1559         .halt_reg = 0x7b03c,
1560         .halt_check = BRANCH_HALT_SKIP,
1561         .clkr = {
1562                 .enable_reg = 0x62008,
1563                 .enable_mask = BIT(4),
1564                 .hw.init = &(struct clk_init_data){
1565                         .name = "gcc_pcie_0_pipe_clk",
1566                         .parent_hws = (const struct clk_hw*[]) {
1567                                 &gcc_pcie_0_pipe_clk_src.clkr.hw,
1568                         },
1569                         .num_parents = 1,
1570                         .flags = CLK_SET_RATE_PARENT,
1571                         .ops = &clk_branch2_ops,
1572                 },
1573         },
1574 };
1575
1576 static struct clk_branch gcc_pcie_0_slv_axi_clk = {
1577         .halt_reg = 0x7b020,
1578         .halt_check = BRANCH_HALT_VOTED,
1579         .hwcg_reg = 0x7b020,
1580         .hwcg_bit = 1,
1581         .clkr = {
1582                 .enable_reg = 0x62008,
1583                 .enable_mask = BIT(0),
1584                 .hw.init = &(struct clk_init_data){
1585                         .name = "gcc_pcie_0_slv_axi_clk",
1586                         .ops = &clk_branch2_ops,
1587                 },
1588         },
1589 };
1590
1591 static struct clk_branch gcc_pcie_0_slv_q2a_axi_clk = {
1592         .halt_reg = 0x7b01c,
1593         .halt_check = BRANCH_HALT_VOTED,
1594         .clkr = {
1595                 .enable_reg = 0x62008,
1596                 .enable_mask = BIT(5),
1597                 .hw.init = &(struct clk_init_data){
1598                         .name = "gcc_pcie_0_slv_q2a_axi_clk",
1599                         .ops = &clk_branch2_ops,
1600                 },
1601         },
1602 };
1603
1604 static struct clk_branch gcc_pcie_1_aux_clk = {
1605         .halt_reg = 0x9d030,
1606         .halt_check = BRANCH_HALT_VOTED,
1607         .clkr = {
1608                 .enable_reg = 0x62000,
1609                 .enable_mask = BIT(29),
1610                 .hw.init = &(struct clk_init_data){
1611                         .name = "gcc_pcie_1_aux_clk",
1612                         .parent_hws = (const struct clk_hw*[]) {
1613                                 &gcc_pcie_1_aux_clk_src.clkr.hw,
1614                         },
1615                         .num_parents = 1,
1616                         .flags = CLK_SET_RATE_PARENT,
1617                         .ops = &clk_branch2_ops,
1618                 },
1619         },
1620 };
1621
1622 static struct clk_branch gcc_pcie_1_cfg_ahb_clk = {
1623         .halt_reg = 0x9d02c,
1624         .halt_check = BRANCH_HALT_VOTED,
1625         .hwcg_reg = 0x9d02c,
1626         .hwcg_bit = 1,
1627         .clkr = {
1628                 .enable_reg = 0x62000,
1629                 .enable_mask = BIT(28),
1630                 .hw.init = &(struct clk_init_data){
1631                         .name = "gcc_pcie_1_cfg_ahb_clk",
1632                         .ops = &clk_branch2_ops,
1633                 },
1634         },
1635 };
1636
1637 static struct clk_branch gcc_pcie_1_clkref_en = {
1638         .halt_reg = 0x9c008,
1639         .halt_check = BRANCH_HALT,
1640         .clkr = {
1641                 .enable_reg = 0x9c008,
1642                 .enable_mask = BIT(0),
1643                 .hw.init = &(struct clk_init_data){
1644                         .name = "gcc_pcie_1_clkref_en",
1645                         .ops = &clk_branch2_ops,
1646                 },
1647         },
1648 };
1649
1650 static struct clk_branch gcc_pcie_1_mstr_axi_clk = {
1651         .halt_reg = 0x9d024,
1652         .halt_check = BRANCH_HALT_SKIP,
1653         .clkr = {
1654                 .enable_reg = 0x62000,
1655                 .enable_mask = BIT(27),
1656                 .hw.init = &(struct clk_init_data){
1657                         .name = "gcc_pcie_1_mstr_axi_clk",
1658                         .ops = &clk_branch2_ops,
1659                 },
1660         },
1661 };
1662
1663 static struct clk_branch gcc_pcie_1_phy_aux_clk = {
1664         .halt_reg = 0x9d038,
1665         .halt_check = BRANCH_HALT_VOTED,
1666         .clkr = {
1667                 .enable_reg = 0x62000,
1668                 .enable_mask = BIT(24),
1669                 .hw.init = &(struct clk_init_data){
1670                         .name = "gcc_pcie_1_phy_aux_clk",
1671                         .parent_hws = (const struct clk_hw*[]) {
1672                                 &gcc_pcie_1_phy_aux_clk_src.clkr.hw,
1673                         },
1674                         .num_parents = 1,
1675                         .flags = CLK_SET_RATE_PARENT,
1676                         .ops = &clk_branch2_ops,
1677                 },
1678         },
1679 };
1680
1681 static struct clk_branch gcc_pcie_1_phy_rchng_clk = {
1682         .halt_reg = 0x9d048,
1683         .halt_check = BRANCH_HALT_VOTED,
1684         .clkr = {
1685                 .enable_reg = 0x62000,
1686                 .enable_mask = BIT(23),
1687                 .hw.init = &(struct clk_init_data){
1688                         .name = "gcc_pcie_1_phy_rchng_clk",
1689                         .parent_hws = (const struct clk_hw*[]) {
1690                                 &gcc_pcie_1_phy_rchng_clk_src.clkr.hw,
1691                         },
1692                         .num_parents = 1,
1693                         .flags = CLK_SET_RATE_PARENT,
1694                         .ops = &clk_branch2_ops,
1695                 },
1696         },
1697 };
1698
1699 static struct clk_branch gcc_pcie_1_pipe_clk = {
1700         .halt_reg = 0x9d040,
1701         .halt_check = BRANCH_HALT_SKIP,
1702         .clkr = {
1703                 .enable_reg = 0x62000,
1704                 .enable_mask = BIT(30),
1705                 .hw.init = &(struct clk_init_data){
1706                         .name = "gcc_pcie_1_pipe_clk",
1707                         .parent_hws = (const struct clk_hw*[]) {
1708                                 &gcc_pcie_1_pipe_clk_src.clkr.hw,
1709                         },
1710                         .num_parents = 1,
1711                         .flags = CLK_SET_RATE_PARENT,
1712                         .ops = &clk_branch2_ops,
1713                 },
1714         },
1715 };
1716
1717 static struct clk_branch gcc_pcie_1_slv_axi_clk = {
1718         .halt_reg = 0x9d01c,
1719         .halt_check = BRANCH_HALT_VOTED,
1720         .hwcg_reg = 0x9d01c,
1721         .hwcg_bit = 1,
1722         .clkr = {
1723                 .enable_reg = 0x62000,
1724                 .enable_mask = BIT(26),
1725                 .hw.init = &(struct clk_init_data){
1726                         .name = "gcc_pcie_1_slv_axi_clk",
1727                         .ops = &clk_branch2_ops,
1728                 },
1729         },
1730 };
1731
1732 static struct clk_branch gcc_pcie_1_slv_q2a_axi_clk = {
1733         .halt_reg = 0x9d018,
1734         .halt_check = BRANCH_HALT_VOTED,
1735         .clkr = {
1736                 .enable_reg = 0x62000,
1737                 .enable_mask = BIT(25),
1738                 .hw.init = &(struct clk_init_data){
1739                         .name = "gcc_pcie_1_slv_q2a_axi_clk",
1740                         .ops = &clk_branch2_ops,
1741                 },
1742         },
1743 };
1744
1745 static struct clk_branch gcc_pdm2_clk = {
1746         .halt_reg = 0x4300c,
1747         .halt_check = BRANCH_HALT,
1748         .clkr = {
1749                 .enable_reg = 0x4300c,
1750                 .enable_mask = BIT(0),
1751                 .hw.init = &(struct clk_init_data){
1752                         .name = "gcc_pdm2_clk",
1753                         .parent_hws = (const struct clk_hw*[]) {
1754                                 &gcc_pdm2_clk_src.clkr.hw,
1755                         },
1756                         .num_parents = 1,
1757                         .flags = CLK_SET_RATE_PARENT,
1758                         .ops = &clk_branch2_ops,
1759                 },
1760         },
1761 };
1762
1763 static struct clk_branch gcc_pdm_ahb_clk = {
1764         .halt_reg = 0x43004,
1765         .halt_check = BRANCH_HALT_VOTED,
1766         .hwcg_reg = 0x43004,
1767         .hwcg_bit = 1,
1768         .clkr = {
1769                 .enable_reg = 0x43004,
1770                 .enable_mask = BIT(0),
1771                 .hw.init = &(struct clk_init_data){
1772                         .name = "gcc_pdm_ahb_clk",
1773                         .ops = &clk_branch2_ops,
1774                 },
1775         },
1776 };
1777
1778 static struct clk_branch gcc_pdm_xo4_clk = {
1779         .halt_reg = 0x43008,
1780         .halt_check = BRANCH_HALT,
1781         .clkr = {
1782                 .enable_reg = 0x43008,
1783                 .enable_mask = BIT(0),
1784                 .hw.init = &(struct clk_init_data){
1785                         .name = "gcc_pdm_xo4_clk",
1786                         .ops = &clk_branch2_ops,
1787                 },
1788         },
1789 };
1790
1791 static struct clk_branch gcc_qmip_camera_nrt_ahb_clk = {
1792         .halt_reg = 0x36008,
1793         .halt_check = BRANCH_HALT_VOTED,
1794         .hwcg_reg = 0x36008,
1795         .hwcg_bit = 1,
1796         .clkr = {
1797                 .enable_reg = 0x36008,
1798                 .enable_mask = BIT(0),
1799                 .hw.init = &(struct clk_init_data){
1800                         .name = "gcc_qmip_camera_nrt_ahb_clk",
1801                         .ops = &clk_branch2_ops,
1802                 },
1803         },
1804 };
1805
1806 static struct clk_branch gcc_qmip_camera_rt_ahb_clk = {
1807         .halt_reg = 0x3600c,
1808         .halt_check = BRANCH_HALT_VOTED,
1809         .hwcg_reg = 0x3600c,
1810         .hwcg_bit = 1,
1811         .clkr = {
1812                 .enable_reg = 0x3600c,
1813                 .enable_mask = BIT(0),
1814                 .hw.init = &(struct clk_init_data){
1815                         .name = "gcc_qmip_camera_rt_ahb_clk",
1816                         .ops = &clk_branch2_ops,
1817                 },
1818         },
1819 };
1820
1821 static struct clk_branch gcc_qmip_disp_ahb_clk = {
1822         .halt_reg = 0x37008,
1823         .halt_check = BRANCH_HALT_VOTED,
1824         .hwcg_reg = 0x37008,
1825         .hwcg_bit = 1,
1826         .clkr = {
1827                 .enable_reg = 0x37008,
1828                 .enable_mask = BIT(0),
1829                 .hw.init = &(struct clk_init_data){
1830                         .name = "gcc_qmip_disp_ahb_clk",
1831                         .ops = &clk_branch2_ops,
1832                 },
1833         },
1834 };
1835
1836 static struct clk_branch gcc_qmip_gpu_ahb_clk = {
1837         .halt_reg = 0x81008,
1838         .halt_check = BRANCH_HALT_VOTED,
1839         .hwcg_reg = 0x81008,
1840         .hwcg_bit = 1,
1841         .clkr = {
1842                 .enable_reg = 0x81008,
1843                 .enable_mask = BIT(0),
1844                 .hw.init = &(struct clk_init_data){
1845                         .name = "gcc_qmip_gpu_ahb_clk",
1846                         .ops = &clk_branch2_ops,
1847                 },
1848         },
1849 };
1850
1851 static struct clk_branch gcc_qmip_pcie_ahb_clk = {
1852         .halt_reg = 0x7b018,
1853         .halt_check = BRANCH_HALT_VOTED,
1854         .hwcg_reg = 0x7b018,
1855         .hwcg_bit = 1,
1856         .clkr = {
1857                 .enable_reg = 0x7b018,
1858                 .enable_mask = BIT(0),
1859                 .hw.init = &(struct clk_init_data){
1860                         .name = "gcc_qmip_pcie_ahb_clk",
1861                         .ops = &clk_branch2_ops,
1862                 },
1863         },
1864 };
1865
1866 static struct clk_branch gcc_qmip_video_cv_cpu_ahb_clk = {
1867         .halt_reg = 0x42014,
1868         .halt_check = BRANCH_HALT_VOTED,
1869         .hwcg_reg = 0x42014,
1870         .hwcg_bit = 1,
1871         .clkr = {
1872                 .enable_reg = 0x42014,
1873                 .enable_mask = BIT(0),
1874                 .hw.init = &(struct clk_init_data){
1875                         .name = "gcc_qmip_video_cv_cpu_ahb_clk",
1876                         .ops = &clk_branch2_ops,
1877                 },
1878         },
1879 };
1880
1881 static struct clk_branch gcc_qmip_video_cvp_ahb_clk = {
1882         .halt_reg = 0x42008,
1883         .halt_check = BRANCH_HALT_VOTED,
1884         .hwcg_reg = 0x42008,
1885         .hwcg_bit = 1,
1886         .clkr = {
1887                 .enable_reg = 0x42008,
1888                 .enable_mask = BIT(0),
1889                 .hw.init = &(struct clk_init_data){
1890                         .name = "gcc_qmip_video_cvp_ahb_clk",
1891                         .ops = &clk_branch2_ops,
1892                 },
1893         },
1894 };
1895
1896 static struct clk_branch gcc_qmip_video_v_cpu_ahb_clk = {
1897         .halt_reg = 0x42010,
1898         .halt_check = BRANCH_HALT_VOTED,
1899         .hwcg_reg = 0x42010,
1900         .hwcg_bit = 1,
1901         .clkr = {
1902                 .enable_reg = 0x42010,
1903                 .enable_mask = BIT(0),
1904                 .hw.init = &(struct clk_init_data){
1905                         .name = "gcc_qmip_video_v_cpu_ahb_clk",
1906                         .ops = &clk_branch2_ops,
1907                 },
1908         },
1909 };
1910
1911 static struct clk_branch gcc_qmip_video_vcodec_ahb_clk = {
1912         .halt_reg = 0x4200c,
1913         .halt_check = BRANCH_HALT_VOTED,
1914         .hwcg_reg = 0x4200c,
1915         .hwcg_bit = 1,
1916         .clkr = {
1917                 .enable_reg = 0x4200c,
1918                 .enable_mask = BIT(0),
1919                 .hw.init = &(struct clk_init_data){
1920                         .name = "gcc_qmip_video_vcodec_ahb_clk",
1921                         .ops = &clk_branch2_ops,
1922                 },
1923         },
1924 };
1925
1926 static struct clk_branch gcc_qupv3_wrap0_core_2x_clk = {
1927         .halt_reg = 0x3300c,
1928         .halt_check = BRANCH_HALT_VOTED,
1929         .clkr = {
1930                 .enable_reg = 0x62008,
1931                 .enable_mask = BIT(9),
1932                 .hw.init = &(struct clk_init_data){
1933                         .name = "gcc_qupv3_wrap0_core_2x_clk",
1934                         .ops = &clk_branch2_ops,
1935                 },
1936         },
1937 };
1938
1939 static struct clk_branch gcc_qupv3_wrap0_core_clk = {
1940         .halt_reg = 0x33000,
1941         .halt_check = BRANCH_HALT_VOTED,
1942         .clkr = {
1943                 .enable_reg = 0x62008,
1944                 .enable_mask = BIT(8),
1945                 .hw.init = &(struct clk_init_data){
1946                         .name = "gcc_qupv3_wrap0_core_clk",
1947                         .ops = &clk_branch2_ops,
1948                 },
1949         },
1950 };
1951
1952 static struct clk_branch gcc_qupv3_wrap0_s0_clk = {
1953         .halt_reg = 0x2700c,
1954         .halt_check = BRANCH_HALT_VOTED,
1955         .clkr = {
1956                 .enable_reg = 0x62008,
1957                 .enable_mask = BIT(10),
1958                 .hw.init = &(struct clk_init_data){
1959                         .name = "gcc_qupv3_wrap0_s0_clk",
1960                         .parent_hws = (const struct clk_hw*[]) {
1961                                 &gcc_qupv3_wrap0_s0_clk_src.clkr.hw,
1962                         },
1963                         .num_parents = 1,
1964                         .flags = CLK_SET_RATE_PARENT,
1965                         .ops = &clk_branch2_ops,
1966                 },
1967         },
1968 };
1969
1970 static struct clk_branch gcc_qupv3_wrap0_s1_clk = {
1971         .halt_reg = 0x27140,
1972         .halt_check = BRANCH_HALT_VOTED,
1973         .clkr = {
1974                 .enable_reg = 0x62008,
1975                 .enable_mask = BIT(11),
1976                 .hw.init = &(struct clk_init_data){
1977                         .name = "gcc_qupv3_wrap0_s1_clk",
1978                         .parent_hws = (const struct clk_hw*[]) {
1979                                 &gcc_qupv3_wrap0_s1_clk_src.clkr.hw,
1980                         },
1981                         .num_parents = 1,
1982                         .flags = CLK_SET_RATE_PARENT,
1983                         .ops = &clk_branch2_ops,
1984                 },
1985         },
1986 };
1987
1988 static struct clk_branch gcc_qupv3_wrap0_s2_clk = {
1989         .halt_reg = 0x27274,
1990         .halt_check = BRANCH_HALT_VOTED,
1991         .clkr = {
1992                 .enable_reg = 0x62008,
1993                 .enable_mask = BIT(12),
1994                 .hw.init = &(struct clk_init_data){
1995                         .name = "gcc_qupv3_wrap0_s2_clk",
1996                         .parent_hws = (const struct clk_hw*[]) {
1997                                 &gcc_qupv3_wrap0_s2_clk_src.clkr.hw,
1998                         },
1999                         .num_parents = 1,
2000                         .flags = CLK_SET_RATE_PARENT,
2001                         .ops = &clk_branch2_ops,
2002                 },
2003         },
2004 };
2005
2006 static struct clk_branch gcc_qupv3_wrap0_s3_clk = {
2007         .halt_reg = 0x273a8,
2008         .halt_check = BRANCH_HALT_VOTED,
2009         .clkr = {
2010                 .enable_reg = 0x62008,
2011                 .enable_mask = BIT(13),
2012                 .hw.init = &(struct clk_init_data){
2013                         .name = "gcc_qupv3_wrap0_s3_clk",
2014                         .parent_hws = (const struct clk_hw*[]) {
2015                                 &gcc_qupv3_wrap0_s3_clk_src.clkr.hw,
2016                         },
2017                         .num_parents = 1,
2018                         .flags = CLK_SET_RATE_PARENT,
2019                         .ops = &clk_branch2_ops,
2020                 },
2021         },
2022 };
2023
2024 static struct clk_branch gcc_qupv3_wrap0_s4_clk = {
2025         .halt_reg = 0x274dc,
2026         .halt_check = BRANCH_HALT_VOTED,
2027         .clkr = {
2028                 .enable_reg = 0x62008,
2029                 .enable_mask = BIT(14),
2030                 .hw.init = &(struct clk_init_data){
2031                         .name = "gcc_qupv3_wrap0_s4_clk",
2032                         .parent_hws = (const struct clk_hw*[]) {
2033                                 &gcc_qupv3_wrap0_s4_clk_src.clkr.hw,
2034                         },
2035                         .num_parents = 1,
2036                         .flags = CLK_SET_RATE_PARENT,
2037                         .ops = &clk_branch2_ops,
2038                 },
2039         },
2040 };
2041
2042 static struct clk_branch gcc_qupv3_wrap0_s5_clk = {
2043         .halt_reg = 0x27610,
2044         .halt_check = BRANCH_HALT_VOTED,
2045         .clkr = {
2046                 .enable_reg = 0x62008,
2047                 .enable_mask = BIT(15),
2048                 .hw.init = &(struct clk_init_data){
2049                         .name = "gcc_qupv3_wrap0_s5_clk",
2050                         .parent_hws = (const struct clk_hw*[]) {
2051                                 &gcc_qupv3_wrap0_s5_clk_src.clkr.hw,
2052                         },
2053                         .num_parents = 1,
2054                         .flags = CLK_SET_RATE_PARENT,
2055                         .ops = &clk_branch2_ops,
2056                 },
2057         },
2058 };
2059
2060 static struct clk_branch gcc_qupv3_wrap0_s6_clk = {
2061         .halt_reg = 0x27744,
2062         .halt_check = BRANCH_HALT_VOTED,
2063         .clkr = {
2064                 .enable_reg = 0x62008,
2065                 .enable_mask = BIT(16),
2066                 .hw.init = &(struct clk_init_data){
2067                         .name = "gcc_qupv3_wrap0_s6_clk",
2068                         .parent_hws = (const struct clk_hw*[]) {
2069                                 &gcc_qupv3_wrap0_s6_clk_src.clkr.hw,
2070                         },
2071                         .num_parents = 1,
2072                         .flags = CLK_SET_RATE_PARENT,
2073                         .ops = &clk_branch2_ops,
2074                 },
2075         },
2076 };
2077
2078 static struct clk_branch gcc_qupv3_wrap0_s7_clk = {
2079         .halt_reg = 0x27878,
2080         .halt_check = BRANCH_HALT_VOTED,
2081         .clkr = {
2082                 .enable_reg = 0x62008,
2083                 .enable_mask = BIT(17),
2084                 .hw.init = &(struct clk_init_data){
2085                         .name = "gcc_qupv3_wrap0_s7_clk",
2086                         .parent_hws = (const struct clk_hw*[]) {
2087                                 &gcc_qupv3_wrap0_s7_clk_src.clkr.hw,
2088                         },
2089                         .num_parents = 1,
2090                         .flags = CLK_SET_RATE_PARENT,
2091                         .ops = &clk_branch2_ops,
2092                 },
2093         },
2094 };
2095
2096 static struct clk_branch gcc_qupv3_wrap1_core_2x_clk = {
2097         .halt_reg = 0x3314c,
2098         .halt_check = BRANCH_HALT_VOTED,
2099         .clkr = {
2100                 .enable_reg = 0x62008,
2101                 .enable_mask = BIT(18),
2102                 .hw.init = &(struct clk_init_data){
2103                         .name = "gcc_qupv3_wrap1_core_2x_clk",
2104                         .ops = &clk_branch2_ops,
2105                 },
2106         },
2107 };
2108
2109 static struct clk_branch gcc_qupv3_wrap1_core_clk = {
2110         .halt_reg = 0x33140,
2111         .halt_check = BRANCH_HALT_VOTED,
2112         .clkr = {
2113                 .enable_reg = 0x62008,
2114                 .enable_mask = BIT(19),
2115                 .hw.init = &(struct clk_init_data){
2116                         .name = "gcc_qupv3_wrap1_core_clk",
2117                         .ops = &clk_branch2_ops,
2118                 },
2119         },
2120 };
2121
2122 static struct clk_branch gcc_qupv3_wrap1_s0_clk = {
2123         .halt_reg = 0x2800c,
2124         .halt_check = BRANCH_HALT_VOTED,
2125         .clkr = {
2126                 .enable_reg = 0x62008,
2127                 .enable_mask = BIT(22),
2128                 .hw.init = &(struct clk_init_data){
2129                         .name = "gcc_qupv3_wrap1_s0_clk",
2130                         .parent_hws = (const struct clk_hw*[]) {
2131                                 &gcc_qupv3_wrap1_s0_clk_src.clkr.hw,
2132                         },
2133                         .num_parents = 1,
2134                         .flags = CLK_SET_RATE_PARENT,
2135                         .ops = &clk_branch2_ops,
2136                 },
2137         },
2138 };
2139
2140 static struct clk_branch gcc_qupv3_wrap1_s1_clk = {
2141         .halt_reg = 0x28140,
2142         .halt_check = BRANCH_HALT_VOTED,
2143         .clkr = {
2144                 .enable_reg = 0x62008,
2145                 .enable_mask = BIT(23),
2146                 .hw.init = &(struct clk_init_data){
2147                         .name = "gcc_qupv3_wrap1_s1_clk",
2148                         .parent_hws = (const struct clk_hw*[]) {
2149                                 &gcc_qupv3_wrap1_s1_clk_src.clkr.hw,
2150                         },
2151                         .num_parents = 1,
2152                         .flags = CLK_SET_RATE_PARENT,
2153                         .ops = &clk_branch2_ops,
2154                 },
2155         },
2156 };
2157
2158 static struct clk_branch gcc_qupv3_wrap1_s2_clk = {
2159         .halt_reg = 0x28274,
2160         .halt_check = BRANCH_HALT_VOTED,
2161         .clkr = {
2162                 .enable_reg = 0x62008,
2163                 .enable_mask = BIT(24),
2164                 .hw.init = &(struct clk_init_data){
2165                         .name = "gcc_qupv3_wrap1_s2_clk",
2166                         .parent_hws = (const struct clk_hw*[]) {
2167                                 &gcc_qupv3_wrap1_s2_clk_src.clkr.hw,
2168                         },
2169                         .num_parents = 1,
2170                         .flags = CLK_SET_RATE_PARENT,
2171                         .ops = &clk_branch2_ops,
2172                 },
2173         },
2174 };
2175
2176 static struct clk_branch gcc_qupv3_wrap1_s3_clk = {
2177         .halt_reg = 0x283a8,
2178         .halt_check = BRANCH_HALT_VOTED,
2179         .clkr = {
2180                 .enable_reg = 0x62008,
2181                 .enable_mask = BIT(25),
2182                 .hw.init = &(struct clk_init_data){
2183                         .name = "gcc_qupv3_wrap1_s3_clk",
2184                         .parent_hws = (const struct clk_hw*[]) {
2185                                 &gcc_qupv3_wrap1_s3_clk_src.clkr.hw,
2186                         },
2187                         .num_parents = 1,
2188                         .flags = CLK_SET_RATE_PARENT,
2189                         .ops = &clk_branch2_ops,
2190                 },
2191         },
2192 };
2193
2194 static struct clk_branch gcc_qupv3_wrap1_s4_clk = {
2195         .halt_reg = 0x284dc,
2196         .halt_check = BRANCH_HALT_VOTED,
2197         .clkr = {
2198                 .enable_reg = 0x62008,
2199                 .enable_mask = BIT(26),
2200                 .hw.init = &(struct clk_init_data){
2201                         .name = "gcc_qupv3_wrap1_s4_clk",
2202                         .parent_hws = (const struct clk_hw*[]) {
2203                                 &gcc_qupv3_wrap1_s4_clk_src.clkr.hw,
2204                         },
2205                         .num_parents = 1,
2206                         .flags = CLK_SET_RATE_PARENT,
2207                         .ops = &clk_branch2_ops,
2208                 },
2209         },
2210 };
2211
2212 static struct clk_branch gcc_qupv3_wrap1_s5_clk = {
2213         .halt_reg = 0x28610,
2214         .halt_check = BRANCH_HALT_VOTED,
2215         .clkr = {
2216                 .enable_reg = 0x62008,
2217                 .enable_mask = BIT(27),
2218                 .hw.init = &(struct clk_init_data){
2219                         .name = "gcc_qupv3_wrap1_s5_clk",
2220                         .parent_hws = (const struct clk_hw*[]) {
2221                                 &gcc_qupv3_wrap1_s5_clk_src.clkr.hw,
2222                         },
2223                         .num_parents = 1,
2224                         .flags = CLK_SET_RATE_PARENT,
2225                         .ops = &clk_branch2_ops,
2226                 },
2227         },
2228 };
2229
2230 static struct clk_branch gcc_qupv3_wrap1_s6_clk = {
2231         .halt_reg = 0x28744,
2232         .halt_check = BRANCH_HALT_VOTED,
2233         .clkr = {
2234                 .enable_reg = 0x62008,
2235                 .enable_mask = BIT(28),
2236                 .hw.init = &(struct clk_init_data){
2237                         .name = "gcc_qupv3_wrap1_s6_clk",
2238                         .parent_hws = (const struct clk_hw*[]) {
2239                                 &gcc_qupv3_wrap1_s6_clk_src.clkr.hw,
2240                         },
2241                         .num_parents = 1,
2242                         .flags = CLK_SET_RATE_PARENT,
2243                         .ops = &clk_branch2_ops,
2244                 },
2245         },
2246 };
2247
2248 static struct clk_branch gcc_qupv3_wrap2_core_2x_clk = {
2249         .halt_reg = 0x3328c,
2250         .halt_check = BRANCH_HALT_VOTED,
2251         .clkr = {
2252                 .enable_reg = 0x62010,
2253                 .enable_mask = BIT(3),
2254                 .hw.init = &(struct clk_init_data){
2255                         .name = "gcc_qupv3_wrap2_core_2x_clk",
2256                         .ops = &clk_branch2_ops,
2257                 },
2258         },
2259 };
2260
2261 static struct clk_branch gcc_qupv3_wrap2_core_clk = {
2262         .halt_reg = 0x33280,
2263         .halt_check = BRANCH_HALT_VOTED,
2264         .clkr = {
2265                 .enable_reg = 0x62010,
2266                 .enable_mask = BIT(0),
2267                 .hw.init = &(struct clk_init_data){
2268                         .name = "gcc_qupv3_wrap2_core_clk",
2269                         .ops = &clk_branch2_ops,
2270                 },
2271         },
2272 };
2273
2274 static struct clk_branch gcc_qupv3_wrap2_s0_clk = {
2275         .halt_reg = 0x2e00c,
2276         .halt_check = BRANCH_HALT_VOTED,
2277         .clkr = {
2278                 .enable_reg = 0x62010,
2279                 .enable_mask = BIT(4),
2280                 .hw.init = &(struct clk_init_data){
2281                         .name = "gcc_qupv3_wrap2_s0_clk",
2282                         .parent_hws = (const struct clk_hw*[]) {
2283                                 &gcc_qupv3_wrap2_s0_clk_src.clkr.hw,
2284                         },
2285                         .num_parents = 1,
2286                         .flags = CLK_SET_RATE_PARENT,
2287                         .ops = &clk_branch2_ops,
2288                 },
2289         },
2290 };
2291
2292 static struct clk_branch gcc_qupv3_wrap2_s1_clk = {
2293         .halt_reg = 0x2e140,
2294         .halt_check = BRANCH_HALT_VOTED,
2295         .clkr = {
2296                 .enable_reg = 0x62010,
2297                 .enable_mask = BIT(5),
2298                 .hw.init = &(struct clk_init_data){
2299                         .name = "gcc_qupv3_wrap2_s1_clk",
2300                         .parent_hws = (const struct clk_hw*[]) {
2301                                 &gcc_qupv3_wrap2_s1_clk_src.clkr.hw,
2302                         },
2303                         .num_parents = 1,
2304                         .flags = CLK_SET_RATE_PARENT,
2305                         .ops = &clk_branch2_ops,
2306                 },
2307         },
2308 };
2309
2310 static struct clk_branch gcc_qupv3_wrap2_s2_clk = {
2311         .halt_reg = 0x2e274,
2312         .halt_check = BRANCH_HALT_VOTED,
2313         .clkr = {
2314                 .enable_reg = 0x62010,
2315                 .enable_mask = BIT(6),
2316                 .hw.init = &(struct clk_init_data){
2317                         .name = "gcc_qupv3_wrap2_s2_clk",
2318                         .parent_hws = (const struct clk_hw*[]) {
2319                                 &gcc_qupv3_wrap2_s2_clk_src.clkr.hw,
2320                         },
2321                         .num_parents = 1,
2322                         .flags = CLK_SET_RATE_PARENT,
2323                         .ops = &clk_branch2_ops,
2324                 },
2325         },
2326 };
2327
2328 static struct clk_branch gcc_qupv3_wrap2_s3_clk = {
2329         .halt_reg = 0x2e3a8,
2330         .halt_check = BRANCH_HALT_VOTED,
2331         .clkr = {
2332                 .enable_reg = 0x62010,
2333                 .enable_mask = BIT(7),
2334                 .hw.init = &(struct clk_init_data){
2335                         .name = "gcc_qupv3_wrap2_s3_clk",
2336                         .parent_hws = (const struct clk_hw*[]) {
2337                                 &gcc_qupv3_wrap2_s3_clk_src.clkr.hw,
2338                         },
2339                         .num_parents = 1,
2340                         .flags = CLK_SET_RATE_PARENT,
2341                         .ops = &clk_branch2_ops,
2342                 },
2343         },
2344 };
2345
2346 static struct clk_branch gcc_qupv3_wrap2_s4_clk = {
2347         .halt_reg = 0x2e4dc,
2348         .halt_check = BRANCH_HALT_VOTED,
2349         .clkr = {
2350                 .enable_reg = 0x62010,
2351                 .enable_mask = BIT(8),
2352                 .hw.init = &(struct clk_init_data){
2353                         .name = "gcc_qupv3_wrap2_s4_clk",
2354                         .parent_hws = (const struct clk_hw*[]) {
2355                                 &gcc_qupv3_wrap2_s4_clk_src.clkr.hw,
2356                         },
2357                         .num_parents = 1,
2358                         .flags = CLK_SET_RATE_PARENT,
2359                         .ops = &clk_branch2_ops,
2360                 },
2361         },
2362 };
2363
2364 static struct clk_branch gcc_qupv3_wrap2_s5_clk = {
2365         .halt_reg = 0x2e610,
2366         .halt_check = BRANCH_HALT_VOTED,
2367         .clkr = {
2368                 .enable_reg = 0x62010,
2369                 .enable_mask = BIT(9),
2370                 .hw.init = &(struct clk_init_data){
2371                         .name = "gcc_qupv3_wrap2_s5_clk",
2372                         .parent_hws = (const struct clk_hw*[]) {
2373                                 &gcc_qupv3_wrap2_s5_clk_src.clkr.hw,
2374                         },
2375                         .num_parents = 1,
2376                         .flags = CLK_SET_RATE_PARENT,
2377                         .ops = &clk_branch2_ops,
2378                 },
2379         },
2380 };
2381
2382 static struct clk_branch gcc_qupv3_wrap2_s6_clk = {
2383         .halt_reg = 0x2e744,
2384         .halt_check = BRANCH_HALT_VOTED,
2385         .clkr = {
2386                 .enable_reg = 0x62010,
2387                 .enable_mask = BIT(10),
2388                 .hw.init = &(struct clk_init_data){
2389                         .name = "gcc_qupv3_wrap2_s6_clk",
2390                         .parent_hws = (const struct clk_hw*[]) {
2391                                 &gcc_qupv3_wrap2_s6_clk_src.clkr.hw,
2392                         },
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_wrap_0_m_ahb_clk = {
2401         .halt_reg = 0x27004,
2402         .halt_check = BRANCH_HALT_VOTED,
2403         .hwcg_reg = 0x27004,
2404         .hwcg_bit = 1,
2405         .clkr = {
2406                 .enable_reg = 0x62008,
2407                 .enable_mask = BIT(6),
2408                 .hw.init = &(struct clk_init_data){
2409                         .name = "gcc_qupv3_wrap_0_m_ahb_clk",
2410                         .ops = &clk_branch2_ops,
2411                 },
2412         },
2413 };
2414
2415 static struct clk_branch gcc_qupv3_wrap_0_s_ahb_clk = {
2416         .halt_reg = 0x27008,
2417         .halt_check = BRANCH_HALT_VOTED,
2418         .hwcg_reg = 0x27008,
2419         .hwcg_bit = 1,
2420         .clkr = {
2421                 .enable_reg = 0x62008,
2422                 .enable_mask = BIT(7),
2423                 .hw.init = &(struct clk_init_data){
2424                         .name = "gcc_qupv3_wrap_0_s_ahb_clk",
2425                         .ops = &clk_branch2_ops,
2426                 },
2427         },
2428 };
2429
2430 static struct clk_branch gcc_qupv3_wrap_1_m_ahb_clk = {
2431         .halt_reg = 0x28004,
2432         .halt_check = BRANCH_HALT_VOTED,
2433         .hwcg_reg = 0x28004,
2434         .hwcg_bit = 1,
2435         .clkr = {
2436                 .enable_reg = 0x62008,
2437                 .enable_mask = BIT(20),
2438                 .hw.init = &(struct clk_init_data){
2439                         .name = "gcc_qupv3_wrap_1_m_ahb_clk",
2440                         .ops = &clk_branch2_ops,
2441                 },
2442         },
2443 };
2444
2445 static struct clk_branch gcc_qupv3_wrap_1_s_ahb_clk = {
2446         .halt_reg = 0x28008,
2447         .halt_check = BRANCH_HALT_VOTED,
2448         .hwcg_reg = 0x28008,
2449         .hwcg_bit = 1,
2450         .clkr = {
2451                 .enable_reg = 0x62008,
2452                 .enable_mask = BIT(21),
2453                 .hw.init = &(struct clk_init_data){
2454                         .name = "gcc_qupv3_wrap_1_s_ahb_clk",
2455                         .ops = &clk_branch2_ops,
2456                 },
2457         },
2458 };
2459
2460 static struct clk_branch gcc_qupv3_wrap_2_m_ahb_clk = {
2461         .halt_reg = 0x2e004,
2462         .halt_check = BRANCH_HALT_VOTED,
2463         .hwcg_reg = 0x2e004,
2464         .hwcg_bit = 1,
2465         .clkr = {
2466                 .enable_reg = 0x62010,
2467                 .enable_mask = BIT(2),
2468                 .hw.init = &(struct clk_init_data){
2469                         .name = "gcc_qupv3_wrap_2_m_ahb_clk",
2470                         .ops = &clk_branch2_ops,
2471                 },
2472         },
2473 };
2474
2475 static struct clk_branch gcc_qupv3_wrap_2_s_ahb_clk = {
2476         .halt_reg = 0x2e008,
2477         .halt_check = BRANCH_HALT_VOTED,
2478         .hwcg_reg = 0x2e008,
2479         .hwcg_bit = 1,
2480         .clkr = {
2481                 .enable_reg = 0x62010,
2482                 .enable_mask = BIT(1),
2483                 .hw.init = &(struct clk_init_data){
2484                         .name = "gcc_qupv3_wrap_2_s_ahb_clk",
2485                         .ops = &clk_branch2_ops,
2486                 },
2487         },
2488 };
2489
2490 static struct clk_branch gcc_sdcc2_ahb_clk = {
2491         .halt_reg = 0x2400c,
2492         .halt_check = BRANCH_HALT,
2493         .clkr = {
2494                 .enable_reg = 0x2400c,
2495                 .enable_mask = BIT(0),
2496                 .hw.init = &(struct clk_init_data){
2497                         .name = "gcc_sdcc2_ahb_clk",
2498                         .ops = &clk_branch2_ops,
2499                 },
2500         },
2501 };
2502
2503 static struct clk_branch gcc_sdcc2_apps_clk = {
2504         .halt_reg = 0x24004,
2505         .halt_check = BRANCH_HALT,
2506         .clkr = {
2507                 .enable_reg = 0x24004,
2508                 .enable_mask = BIT(0),
2509                 .hw.init = &(struct clk_init_data){
2510                         .name = "gcc_sdcc2_apps_clk",
2511                         .parent_hws = (const struct clk_hw*[]) {
2512                                 &gcc_sdcc2_apps_clk_src.clkr.hw,
2513                         },
2514                         .num_parents = 1,
2515                         .flags = CLK_SET_RATE_PARENT,
2516                         .ops = &clk_branch2_ops,
2517                 },
2518         },
2519 };
2520
2521 static struct clk_branch gcc_sdcc2_at_clk = {
2522         .halt_reg = 0x24010,
2523         .halt_check = BRANCH_HALT_VOTED,
2524         .hwcg_reg = 0x24010,
2525         .hwcg_bit = 1,
2526         .clkr = {
2527                 .enable_reg = 0x24010,
2528                 .enable_mask = BIT(0),
2529                 .hw.init = &(struct clk_init_data){
2530                         .name = "gcc_sdcc2_at_clk",
2531                         .ops = &clk_branch2_ops,
2532                 },
2533         },
2534 };
2535
2536 static struct clk_branch gcc_sdcc4_ahb_clk = {
2537         .halt_reg = 0x2600c,
2538         .halt_check = BRANCH_HALT,
2539         .clkr = {
2540                 .enable_reg = 0x2600c,
2541                 .enable_mask = BIT(0),
2542                 .hw.init = &(struct clk_init_data){
2543                         .name = "gcc_sdcc4_ahb_clk",
2544                         .ops = &clk_branch2_ops,
2545                 },
2546         },
2547 };
2548
2549 static struct clk_branch gcc_sdcc4_apps_clk = {
2550         .halt_reg = 0x26004,
2551         .halt_check = BRANCH_HALT,
2552         .clkr = {
2553                 .enable_reg = 0x26004,
2554                 .enable_mask = BIT(0),
2555                 .hw.init = &(struct clk_init_data){
2556                         .name = "gcc_sdcc4_apps_clk",
2557                         .parent_hws = (const struct clk_hw*[]) {
2558                                 &gcc_sdcc4_apps_clk_src.clkr.hw,
2559                         },
2560                         .num_parents = 1,
2561                         .flags = CLK_SET_RATE_PARENT,
2562                         .ops = &clk_branch2_ops,
2563                 },
2564         },
2565 };
2566
2567 static struct clk_branch gcc_sdcc4_at_clk = {
2568         .halt_reg = 0x26010,
2569         .halt_check = BRANCH_HALT_VOTED,
2570         .hwcg_reg = 0x26010,
2571         .hwcg_bit = 1,
2572         .clkr = {
2573                 .enable_reg = 0x26010,
2574                 .enable_mask = BIT(0),
2575                 .hw.init = &(struct clk_init_data){
2576                         .name = "gcc_sdcc4_at_clk",
2577                         .ops = &clk_branch2_ops,
2578                 },
2579         },
2580 };
2581
2582 static struct clk_branch gcc_ufs_0_clkref_en = {
2583         .halt_reg = 0x9c000,
2584         .halt_check = BRANCH_HALT,
2585         .clkr = {
2586                 .enable_reg = 0x9c000,
2587                 .enable_mask = BIT(0),
2588                 .hw.init = &(struct clk_init_data){
2589                         .name = "gcc_ufs_0_clkref_en",
2590                         .ops = &clk_branch2_ops,
2591                 },
2592         },
2593 };
2594
2595 static struct clk_branch gcc_ufs_phy_ahb_clk = {
2596         .halt_reg = 0x87020,
2597         .halt_check = BRANCH_HALT_VOTED,
2598         .hwcg_reg = 0x87020,
2599         .hwcg_bit = 1,
2600         .clkr = {
2601                 .enable_reg = 0x87020,
2602                 .enable_mask = BIT(0),
2603                 .hw.init = &(struct clk_init_data){
2604                         .name = "gcc_ufs_phy_ahb_clk",
2605                         .ops = &clk_branch2_ops,
2606                 },
2607         },
2608 };
2609
2610 static struct clk_branch gcc_ufs_phy_axi_clk = {
2611         .halt_reg = 0x87018,
2612         .halt_check = BRANCH_HALT_VOTED,
2613         .hwcg_reg = 0x87018,
2614         .hwcg_bit = 1,
2615         .clkr = {
2616                 .enable_reg = 0x87018,
2617                 .enable_mask = BIT(0),
2618                 .hw.init = &(struct clk_init_data){
2619                         .name = "gcc_ufs_phy_axi_clk",
2620                         .parent_hws = (const struct clk_hw*[]) {
2621                                 &gcc_ufs_phy_axi_clk_src.clkr.hw,
2622                         },
2623                         .num_parents = 1,
2624                         .flags = CLK_SET_RATE_PARENT,
2625                         .ops = &clk_branch2_ops,
2626                 },
2627         },
2628 };
2629
2630 static struct clk_branch gcc_ufs_phy_axi_hw_ctl_clk = {
2631         .halt_reg = 0x87018,
2632         .halt_check = BRANCH_HALT_VOTED,
2633         .hwcg_reg = 0x87018,
2634         .hwcg_bit = 1,
2635         .clkr = {
2636                 .enable_reg = 0x87018,
2637                 .enable_mask = BIT(1),
2638                 .hw.init = &(struct clk_init_data){
2639                         .name = "gcc_ufs_phy_axi_hw_ctl_clk",
2640                         .parent_hws = (const struct clk_hw*[]) {
2641                                 &gcc_ufs_phy_axi_clk_src.clkr.hw,
2642                         },
2643                         .num_parents = 1,
2644                         .flags = CLK_SET_RATE_PARENT,
2645                         .ops = &clk_branch2_ops,
2646                 },
2647         },
2648 };
2649
2650 static struct clk_branch gcc_ufs_phy_ice_core_clk = {
2651         .halt_reg = 0x8706c,
2652         .halt_check = BRANCH_HALT_VOTED,
2653         .hwcg_reg = 0x8706c,
2654         .hwcg_bit = 1,
2655         .clkr = {
2656                 .enable_reg = 0x8706c,
2657                 .enable_mask = BIT(0),
2658                 .hw.init = &(struct clk_init_data){
2659                         .name = "gcc_ufs_phy_ice_core_clk",
2660                         .parent_hws = (const struct clk_hw*[]) {
2661                                 &gcc_ufs_phy_ice_core_clk_src.clkr.hw,
2662                         },
2663                         .num_parents = 1,
2664                         .flags = CLK_SET_RATE_PARENT,
2665                         .ops = &clk_branch2_ops,
2666                 },
2667         },
2668 };
2669
2670 static struct clk_branch gcc_ufs_phy_ice_core_hw_ctl_clk = {
2671         .halt_reg = 0x8706c,
2672         .halt_check = BRANCH_HALT_VOTED,
2673         .hwcg_reg = 0x8706c,
2674         .hwcg_bit = 1,
2675         .clkr = {
2676                 .enable_reg = 0x8706c,
2677                 .enable_mask = BIT(1),
2678                 .hw.init = &(struct clk_init_data){
2679                         .name = "gcc_ufs_phy_ice_core_hw_ctl_clk",
2680                         .parent_hws = (const struct clk_hw*[]) {
2681                                 &gcc_ufs_phy_ice_core_clk_src.clkr.hw,
2682                         },
2683                         .num_parents = 1,
2684                         .flags = CLK_SET_RATE_PARENT,
2685                         .ops = &clk_branch2_ops,
2686                 },
2687         },
2688 };
2689
2690 static struct clk_branch gcc_ufs_phy_phy_aux_clk = {
2691         .halt_reg = 0x870a4,
2692         .halt_check = BRANCH_HALT_VOTED,
2693         .hwcg_reg = 0x870a4,
2694         .hwcg_bit = 1,
2695         .clkr = {
2696                 .enable_reg = 0x870a4,
2697                 .enable_mask = BIT(0),
2698                 .hw.init = &(struct clk_init_data){
2699                         .name = "gcc_ufs_phy_phy_aux_clk",
2700                         .parent_hws = (const struct clk_hw*[]) {
2701                                 &gcc_ufs_phy_phy_aux_clk_src.clkr.hw,
2702                         },
2703                         .num_parents = 1,
2704                         .flags = CLK_SET_RATE_PARENT,
2705                         .ops = &clk_branch2_ops,
2706                 },
2707         },
2708 };
2709
2710 static struct clk_branch gcc_ufs_phy_phy_aux_hw_ctl_clk = {
2711         .halt_reg = 0x870a4,
2712         .halt_check = BRANCH_HALT_VOTED,
2713         .hwcg_reg = 0x870a4,
2714         .hwcg_bit = 1,
2715         .clkr = {
2716                 .enable_reg = 0x870a4,
2717                 .enable_mask = BIT(1),
2718                 .hw.init = &(struct clk_init_data){
2719                         .name = "gcc_ufs_phy_phy_aux_hw_ctl_clk",
2720                         .parent_hws = (const struct clk_hw*[]) {
2721                                 &gcc_ufs_phy_phy_aux_clk_src.clkr.hw,
2722                         },
2723                         .num_parents = 1,
2724                         .flags = CLK_SET_RATE_PARENT,
2725                         .ops = &clk_branch2_ops,
2726                 },
2727         },
2728 };
2729
2730 static struct clk_branch gcc_ufs_phy_rx_symbol_0_clk = {
2731         .halt_reg = 0x87028,
2732         .halt_check = BRANCH_HALT_DELAY,
2733         .clkr = {
2734                 .enable_reg = 0x87028,
2735                 .enable_mask = BIT(0),
2736                 .hw.init = &(struct clk_init_data){
2737                         .name = "gcc_ufs_phy_rx_symbol_0_clk",
2738                         .parent_hws = (const struct clk_hw*[]) {
2739                                 &gcc_ufs_phy_rx_symbol_0_clk_src.clkr.hw,
2740                         },
2741                         .num_parents = 1,
2742                         .flags = CLK_SET_RATE_PARENT,
2743                         .ops = &clk_branch2_ops,
2744                 },
2745         },
2746 };
2747
2748 static struct clk_branch gcc_ufs_phy_rx_symbol_1_clk = {
2749         .halt_reg = 0x870c0,
2750         .halt_check = BRANCH_HALT_DELAY,
2751         .clkr = {
2752                 .enable_reg = 0x870c0,
2753                 .enable_mask = BIT(0),
2754                 .hw.init = &(struct clk_init_data){
2755                         .name = "gcc_ufs_phy_rx_symbol_1_clk",
2756                         .parent_hws = (const struct clk_hw*[]) {
2757                                 &gcc_ufs_phy_rx_symbol_1_clk_src.clkr.hw,
2758                         },
2759                         .num_parents = 1,
2760                         .flags = CLK_SET_RATE_PARENT,
2761                         .ops = &clk_branch2_ops,
2762                 },
2763         },
2764 };
2765
2766 static struct clk_branch gcc_ufs_phy_tx_symbol_0_clk = {
2767         .halt_reg = 0x87024,
2768         .halt_check = BRANCH_HALT_DELAY,
2769         .clkr = {
2770                 .enable_reg = 0x87024,
2771                 .enable_mask = BIT(0),
2772                 .hw.init = &(struct clk_init_data){
2773                         .name = "gcc_ufs_phy_tx_symbol_0_clk",
2774                         .parent_hws = (const struct clk_hw*[]) {
2775                                 &gcc_ufs_phy_tx_symbol_0_clk_src.clkr.hw,
2776                         },
2777                         .num_parents = 1,
2778                         .flags = CLK_SET_RATE_PARENT,
2779                         .ops = &clk_branch2_ops,
2780                 },
2781         },
2782 };
2783
2784 static struct clk_branch gcc_ufs_phy_unipro_core_clk = {
2785         .halt_reg = 0x87064,
2786         .halt_check = BRANCH_HALT_VOTED,
2787         .hwcg_reg = 0x87064,
2788         .hwcg_bit = 1,
2789         .clkr = {
2790                 .enable_reg = 0x87064,
2791                 .enable_mask = BIT(0),
2792                 .hw.init = &(struct clk_init_data){
2793                         .name = "gcc_ufs_phy_unipro_core_clk",
2794                         .parent_hws = (const struct clk_hw*[]) {
2795                                 &gcc_ufs_phy_unipro_core_clk_src.clkr.hw,
2796                         },
2797                         .num_parents = 1,
2798                         .flags = CLK_SET_RATE_PARENT,
2799                         .ops = &clk_branch2_ops,
2800                 },
2801         },
2802 };
2803
2804 static struct clk_branch gcc_ufs_phy_unipro_core_hw_ctl_clk = {
2805         .halt_reg = 0x87064,
2806         .halt_check = BRANCH_HALT_VOTED,
2807         .hwcg_reg = 0x87064,
2808         .hwcg_bit = 1,
2809         .clkr = {
2810                 .enable_reg = 0x87064,
2811                 .enable_mask = BIT(1),
2812                 .hw.init = &(struct clk_init_data){
2813                         .name = "gcc_ufs_phy_unipro_core_hw_ctl_clk",
2814                         .parent_hws = (const struct clk_hw*[]) {
2815                                 &gcc_ufs_phy_unipro_core_clk_src.clkr.hw,
2816                         },
2817                         .num_parents = 1,
2818                         .flags = CLK_SET_RATE_PARENT,
2819                         .ops = &clk_branch2_ops,
2820                 },
2821         },
2822 };
2823
2824 static struct clk_branch gcc_usb30_prim_master_clk = {
2825         .halt_reg = 0x49018,
2826         .halt_check = BRANCH_HALT,
2827         .clkr = {
2828                 .enable_reg = 0x49018,
2829                 .enable_mask = BIT(0),
2830                 .hw.init = &(struct clk_init_data){
2831                         .name = "gcc_usb30_prim_master_clk",
2832                         .parent_hws = (const struct clk_hw*[]) {
2833                                 &gcc_usb30_prim_master_clk_src.clkr.hw,
2834                         },
2835                         .num_parents = 1,
2836                         .flags = CLK_SET_RATE_PARENT,
2837                         .ops = &clk_branch2_ops,
2838                 },
2839         },
2840 };
2841
2842 static struct clk_branch gcc_usb30_prim_mock_utmi_clk = {
2843         .halt_reg = 0x49024,
2844         .halt_check = BRANCH_HALT,
2845         .clkr = {
2846                 .enable_reg = 0x49024,
2847                 .enable_mask = BIT(0),
2848                 .hw.init = &(struct clk_init_data){
2849                         .name = "gcc_usb30_prim_mock_utmi_clk",
2850                         .parent_hws = (const struct clk_hw*[]) {
2851                                 &gcc_usb30_prim_mock_utmi_postdiv_clk_src.clkr.hw,
2852                         },
2853                         .num_parents = 1,
2854                         .flags = CLK_SET_RATE_PARENT,
2855                         .ops = &clk_branch2_ops,
2856                 },
2857         },
2858 };
2859
2860 static struct clk_branch gcc_usb30_prim_sleep_clk = {
2861         .halt_reg = 0x49020,
2862         .halt_check = BRANCH_HALT,
2863         .clkr = {
2864                 .enable_reg = 0x49020,
2865                 .enable_mask = BIT(0),
2866                 .hw.init = &(struct clk_init_data){
2867                         .name = "gcc_usb30_prim_sleep_clk",
2868                         .ops = &clk_branch2_ops,
2869                 },
2870         },
2871 };
2872
2873 static struct clk_branch gcc_usb3_0_clkref_en = {
2874         .halt_reg = 0x9c010,
2875         .halt_check = BRANCH_HALT,
2876         .clkr = {
2877                 .enable_reg = 0x9c010,
2878                 .enable_mask = BIT(0),
2879                 .hw.init = &(struct clk_init_data){
2880                         .name = "gcc_usb3_0_clkref_en",
2881                         .ops = &clk_branch2_ops,
2882                 },
2883         },
2884 };
2885
2886 static struct clk_branch gcc_usb3_prim_phy_aux_clk = {
2887         .halt_reg = 0x4905c,
2888         .halt_check = BRANCH_HALT,
2889         .clkr = {
2890                 .enable_reg = 0x4905c,
2891                 .enable_mask = BIT(0),
2892                 .hw.init = &(struct clk_init_data){
2893                         .name = "gcc_usb3_prim_phy_aux_clk",
2894                         .parent_hws = (const struct clk_hw*[]) {
2895                                 &gcc_usb3_prim_phy_aux_clk_src.clkr.hw,
2896                         },
2897                         .num_parents = 1,
2898                         .flags = CLK_SET_RATE_PARENT,
2899                         .ops = &clk_branch2_ops,
2900                 },
2901         },
2902 };
2903
2904 static struct clk_branch gcc_usb3_prim_phy_com_aux_clk = {
2905         .halt_reg = 0x49060,
2906         .halt_check = BRANCH_HALT,
2907         .clkr = {
2908                 .enable_reg = 0x49060,
2909                 .enable_mask = BIT(0),
2910                 .hw.init = &(struct clk_init_data){
2911                         .name = "gcc_usb3_prim_phy_com_aux_clk",
2912                         .parent_hws = (const struct clk_hw*[]) {
2913                                 &gcc_usb3_prim_phy_aux_clk_src.clkr.hw,
2914                         },
2915                         .num_parents = 1,
2916                         .flags = CLK_SET_RATE_PARENT,
2917                         .ops = &clk_branch2_ops,
2918                 },
2919         },
2920 };
2921
2922 static struct clk_branch gcc_usb3_prim_phy_pipe_clk = {
2923         .halt_reg = 0x49064,
2924         .halt_check = BRANCH_HALT_DELAY,
2925         .hwcg_reg = 0x49064,
2926         .hwcg_bit = 1,
2927         .clkr = {
2928                 .enable_reg = 0x49064,
2929                 .enable_mask = BIT(0),
2930                 .hw.init = &(struct clk_init_data){
2931                         .name = "gcc_usb3_prim_phy_pipe_clk",
2932                         .parent_hws = (const struct clk_hw*[]) {
2933                                 &gcc_usb3_prim_phy_pipe_clk_src.clkr.hw,
2934                         },
2935                         .num_parents = 1,
2936                         .flags = CLK_SET_RATE_PARENT,
2937                         .ops = &clk_branch2_ops,
2938                 },
2939         },
2940 };
2941
2942 static struct clk_branch gcc_video_axi0_clk = {
2943         .halt_reg = 0x42018,
2944         .halt_check = BRANCH_HALT_SKIP,
2945         .hwcg_reg = 0x42018,
2946         .hwcg_bit = 1,
2947         .clkr = {
2948                 .enable_reg = 0x42018,
2949                 .enable_mask = BIT(0),
2950                 .hw.init = &(struct clk_init_data){
2951                         .name = "gcc_video_axi0_clk",
2952                         .ops = &clk_branch2_ops,
2953                 },
2954         },
2955 };
2956
2957 static struct clk_branch gcc_video_axi1_clk = {
2958         .halt_reg = 0x42020,
2959         .halt_check = BRANCH_HALT_SKIP,
2960         .hwcg_reg = 0x42020,
2961         .hwcg_bit = 1,
2962         .clkr = {
2963                 .enable_reg = 0x42020,
2964                 .enable_mask = BIT(0),
2965                 .hw.init = &(struct clk_init_data){
2966                         .name = "gcc_video_axi1_clk",
2967                         .ops = &clk_branch2_ops,
2968                 },
2969         },
2970 };
2971
2972 static struct gdsc pcie_0_gdsc = {
2973         .gdscr = 0x7b004,
2974         .pd = {
2975                 .name = "pcie_0_gdsc",
2976         },
2977         .pwrsts = PWRSTS_OFF_ON,
2978 };
2979
2980 static struct gdsc pcie_1_gdsc = {
2981         .gdscr = 0x9d004,
2982         .pd = {
2983                 .name = "pcie_1_gdsc",
2984         },
2985         .pwrsts = PWRSTS_OFF_ON,
2986 };
2987
2988 static struct gdsc ufs_phy_gdsc = {
2989         .gdscr = 0x87004,
2990         .pd = {
2991                 .name = "ufs_phy_gdsc",
2992         },
2993         .pwrsts = PWRSTS_OFF_ON,
2994 };
2995
2996 static struct gdsc usb30_prim_gdsc = {
2997         .gdscr = 0x49004,
2998         .pd = {
2999                 .name = "usb30_prim_gdsc",
3000         },
3001         .pwrsts = PWRSTS_OFF_ON,
3002 };
3003
3004 static struct clk_regmap *gcc_sm8450_clocks[] = {
3005         [GCC_AGGRE_NOC_PCIE_0_AXI_CLK] = &gcc_aggre_noc_pcie_0_axi_clk.clkr,
3006         [GCC_AGGRE_NOC_PCIE_1_AXI_CLK] = &gcc_aggre_noc_pcie_1_axi_clk.clkr,
3007         [GCC_AGGRE_UFS_PHY_AXI_CLK] = &gcc_aggre_ufs_phy_axi_clk.clkr,
3008         [GCC_AGGRE_UFS_PHY_AXI_HW_CTL_CLK] = &gcc_aggre_ufs_phy_axi_hw_ctl_clk.clkr,
3009         [GCC_AGGRE_USB3_PRIM_AXI_CLK] = &gcc_aggre_usb3_prim_axi_clk.clkr,
3010         [GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr,
3011         [GCC_CAMERA_HF_AXI_CLK] = &gcc_camera_hf_axi_clk.clkr,
3012         [GCC_CAMERA_SF_AXI_CLK] = &gcc_camera_sf_axi_clk.clkr,
3013         [GCC_CFG_NOC_PCIE_ANOC_AHB_CLK] = &gcc_cfg_noc_pcie_anoc_ahb_clk.clkr,
3014         [GCC_CFG_NOC_USB3_PRIM_AXI_CLK] = &gcc_cfg_noc_usb3_prim_axi_clk.clkr,
3015         [GCC_DDRSS_GPU_AXI_CLK] = &gcc_ddrss_gpu_axi_clk.clkr,
3016         [GCC_DDRSS_PCIE_SF_TBU_CLK] = &gcc_ddrss_pcie_sf_tbu_clk.clkr,
3017         [GCC_DISP_HF_AXI_CLK] = &gcc_disp_hf_axi_clk.clkr,
3018         [GCC_DISP_SF_AXI_CLK] = &gcc_disp_sf_axi_clk.clkr,
3019         [GCC_EUSB3_0_CLKREF_EN] = &gcc_eusb3_0_clkref_en.clkr,
3020         [GCC_GP1_CLK] = &gcc_gp1_clk.clkr,
3021         [GCC_GP1_CLK_SRC] = &gcc_gp1_clk_src.clkr,
3022         [GCC_GP2_CLK] = &gcc_gp2_clk.clkr,
3023         [GCC_GP2_CLK_SRC] = &gcc_gp2_clk_src.clkr,
3024         [GCC_GP3_CLK] = &gcc_gp3_clk.clkr,
3025         [GCC_GP3_CLK_SRC] = &gcc_gp3_clk_src.clkr,
3026         [GCC_GPLL0] = &gcc_gpll0.clkr,
3027         [GCC_GPLL0_OUT_EVEN] = &gcc_gpll0_out_even.clkr,
3028         [GCC_GPLL4] = &gcc_gpll4.clkr,
3029         [GCC_GPLL9] = &gcc_gpll9.clkr,
3030         [GCC_GPU_GPLL0_CLK_SRC] = &gcc_gpu_gpll0_clk_src.clkr,
3031         [GCC_GPU_GPLL0_DIV_CLK_SRC] = &gcc_gpu_gpll0_div_clk_src.clkr,
3032         [GCC_GPU_MEMNOC_GFX_CLK] = &gcc_gpu_memnoc_gfx_clk.clkr,
3033         [GCC_GPU_SNOC_DVM_GFX_CLK] = &gcc_gpu_snoc_dvm_gfx_clk.clkr,
3034         [GCC_PCIE_0_AUX_CLK] = &gcc_pcie_0_aux_clk.clkr,
3035         [GCC_PCIE_0_AUX_CLK_SRC] = &gcc_pcie_0_aux_clk_src.clkr,
3036         [GCC_PCIE_0_CFG_AHB_CLK] = &gcc_pcie_0_cfg_ahb_clk.clkr,
3037         [GCC_PCIE_0_CLKREF_EN] = &gcc_pcie_0_clkref_en.clkr,
3038         [GCC_PCIE_0_MSTR_AXI_CLK] = &gcc_pcie_0_mstr_axi_clk.clkr,
3039         [GCC_PCIE_0_PHY_RCHNG_CLK] = &gcc_pcie_0_phy_rchng_clk.clkr,
3040         [GCC_PCIE_0_PHY_RCHNG_CLK_SRC] = &gcc_pcie_0_phy_rchng_clk_src.clkr,
3041         [GCC_PCIE_0_PIPE_CLK] = &gcc_pcie_0_pipe_clk.clkr,
3042         [GCC_PCIE_0_PIPE_CLK_SRC] = &gcc_pcie_0_pipe_clk_src.clkr,
3043         [GCC_PCIE_0_SLV_AXI_CLK] = &gcc_pcie_0_slv_axi_clk.clkr,
3044         [GCC_PCIE_0_SLV_Q2A_AXI_CLK] = &gcc_pcie_0_slv_q2a_axi_clk.clkr,
3045         [GCC_PCIE_1_AUX_CLK] = &gcc_pcie_1_aux_clk.clkr,
3046         [GCC_PCIE_1_AUX_CLK_SRC] = &gcc_pcie_1_aux_clk_src.clkr,
3047         [GCC_PCIE_1_CFG_AHB_CLK] = &gcc_pcie_1_cfg_ahb_clk.clkr,
3048         [GCC_PCIE_1_CLKREF_EN] = &gcc_pcie_1_clkref_en.clkr,
3049         [GCC_PCIE_1_MSTR_AXI_CLK] = &gcc_pcie_1_mstr_axi_clk.clkr,
3050         [GCC_PCIE_1_PHY_AUX_CLK] = &gcc_pcie_1_phy_aux_clk.clkr,
3051         [GCC_PCIE_1_PHY_AUX_CLK_SRC] = &gcc_pcie_1_phy_aux_clk_src.clkr,
3052         [GCC_PCIE_1_PHY_RCHNG_CLK] = &gcc_pcie_1_phy_rchng_clk.clkr,
3053         [GCC_PCIE_1_PHY_RCHNG_CLK_SRC] = &gcc_pcie_1_phy_rchng_clk_src.clkr,
3054         [GCC_PCIE_1_PIPE_CLK] = &gcc_pcie_1_pipe_clk.clkr,
3055         [GCC_PCIE_1_PIPE_CLK_SRC] = &gcc_pcie_1_pipe_clk_src.clkr,
3056         [GCC_PCIE_1_SLV_AXI_CLK] = &gcc_pcie_1_slv_axi_clk.clkr,
3057         [GCC_PCIE_1_SLV_Q2A_AXI_CLK] = &gcc_pcie_1_slv_q2a_axi_clk.clkr,
3058         [GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr,
3059         [GCC_PDM2_CLK_SRC] = &gcc_pdm2_clk_src.clkr,
3060         [GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr,
3061         [GCC_PDM_XO4_CLK] = &gcc_pdm_xo4_clk.clkr,
3062         [GCC_QMIP_CAMERA_NRT_AHB_CLK] = &gcc_qmip_camera_nrt_ahb_clk.clkr,
3063         [GCC_QMIP_CAMERA_RT_AHB_CLK] = &gcc_qmip_camera_rt_ahb_clk.clkr,
3064         [GCC_QMIP_DISP_AHB_CLK] = &gcc_qmip_disp_ahb_clk.clkr,
3065         [GCC_QMIP_GPU_AHB_CLK] = &gcc_qmip_gpu_ahb_clk.clkr,
3066         [GCC_QMIP_PCIE_AHB_CLK] = &gcc_qmip_pcie_ahb_clk.clkr,
3067         [GCC_QMIP_VIDEO_CV_CPU_AHB_CLK] = &gcc_qmip_video_cv_cpu_ahb_clk.clkr,
3068         [GCC_QMIP_VIDEO_CVP_AHB_CLK] = &gcc_qmip_video_cvp_ahb_clk.clkr,
3069         [GCC_QMIP_VIDEO_V_CPU_AHB_CLK] = &gcc_qmip_video_v_cpu_ahb_clk.clkr,
3070         [GCC_QMIP_VIDEO_VCODEC_AHB_CLK] = &gcc_qmip_video_vcodec_ahb_clk.clkr,
3071         [GCC_QUPV3_WRAP0_CORE_2X_CLK] = &gcc_qupv3_wrap0_core_2x_clk.clkr,
3072         [GCC_QUPV3_WRAP0_CORE_CLK] = &gcc_qupv3_wrap0_core_clk.clkr,
3073         [GCC_QUPV3_WRAP0_S0_CLK] = &gcc_qupv3_wrap0_s0_clk.clkr,
3074         [GCC_QUPV3_WRAP0_S0_CLK_SRC] = &gcc_qupv3_wrap0_s0_clk_src.clkr,
3075         [GCC_QUPV3_WRAP0_S1_CLK] = &gcc_qupv3_wrap0_s1_clk.clkr,
3076         [GCC_QUPV3_WRAP0_S1_CLK_SRC] = &gcc_qupv3_wrap0_s1_clk_src.clkr,
3077         [GCC_QUPV3_WRAP0_S2_CLK] = &gcc_qupv3_wrap0_s2_clk.clkr,
3078         [GCC_QUPV3_WRAP0_S2_CLK_SRC] = &gcc_qupv3_wrap0_s2_clk_src.clkr,
3079         [GCC_QUPV3_WRAP0_S3_CLK] = &gcc_qupv3_wrap0_s3_clk.clkr,
3080         [GCC_QUPV3_WRAP0_S3_CLK_SRC] = &gcc_qupv3_wrap0_s3_clk_src.clkr,
3081         [GCC_QUPV3_WRAP0_S4_CLK] = &gcc_qupv3_wrap0_s4_clk.clkr,
3082         [GCC_QUPV3_WRAP0_S4_CLK_SRC] = &gcc_qupv3_wrap0_s4_clk_src.clkr,
3083         [GCC_QUPV3_WRAP0_S5_CLK] = &gcc_qupv3_wrap0_s5_clk.clkr,
3084         [GCC_QUPV3_WRAP0_S5_CLK_SRC] = &gcc_qupv3_wrap0_s5_clk_src.clkr,
3085         [GCC_QUPV3_WRAP0_S6_CLK] = &gcc_qupv3_wrap0_s6_clk.clkr,
3086         [GCC_QUPV3_WRAP0_S6_CLK_SRC] = &gcc_qupv3_wrap0_s6_clk_src.clkr,
3087         [GCC_QUPV3_WRAP0_S7_CLK] = &gcc_qupv3_wrap0_s7_clk.clkr,
3088         [GCC_QUPV3_WRAP0_S7_CLK_SRC] = &gcc_qupv3_wrap0_s7_clk_src.clkr,
3089         [GCC_QUPV3_WRAP1_CORE_2X_CLK] = &gcc_qupv3_wrap1_core_2x_clk.clkr,
3090         [GCC_QUPV3_WRAP1_CORE_CLK] = &gcc_qupv3_wrap1_core_clk.clkr,
3091         [GCC_QUPV3_WRAP1_S0_CLK] = &gcc_qupv3_wrap1_s0_clk.clkr,
3092         [GCC_QUPV3_WRAP1_S0_CLK_SRC] = &gcc_qupv3_wrap1_s0_clk_src.clkr,
3093         [GCC_QUPV3_WRAP1_S1_CLK] = &gcc_qupv3_wrap1_s1_clk.clkr,
3094         [GCC_QUPV3_WRAP1_S1_CLK_SRC] = &gcc_qupv3_wrap1_s1_clk_src.clkr,
3095         [GCC_QUPV3_WRAP1_S2_CLK] = &gcc_qupv3_wrap1_s2_clk.clkr,
3096         [GCC_QUPV3_WRAP1_S2_CLK_SRC] = &gcc_qupv3_wrap1_s2_clk_src.clkr,
3097         [GCC_QUPV3_WRAP1_S3_CLK] = &gcc_qupv3_wrap1_s3_clk.clkr,
3098         [GCC_QUPV3_WRAP1_S3_CLK_SRC] = &gcc_qupv3_wrap1_s3_clk_src.clkr,
3099         [GCC_QUPV3_WRAP1_S4_CLK] = &gcc_qupv3_wrap1_s4_clk.clkr,
3100         [GCC_QUPV3_WRAP1_S4_CLK_SRC] = &gcc_qupv3_wrap1_s4_clk_src.clkr,
3101         [GCC_QUPV3_WRAP1_S5_CLK] = &gcc_qupv3_wrap1_s5_clk.clkr,
3102         [GCC_QUPV3_WRAP1_S5_CLK_SRC] = &gcc_qupv3_wrap1_s5_clk_src.clkr,
3103         [GCC_QUPV3_WRAP1_S6_CLK] = &gcc_qupv3_wrap1_s6_clk.clkr,
3104         [GCC_QUPV3_WRAP1_S6_CLK_SRC] = &gcc_qupv3_wrap1_s6_clk_src.clkr,
3105         [GCC_QUPV3_WRAP2_CORE_2X_CLK] = &gcc_qupv3_wrap2_core_2x_clk.clkr,
3106         [GCC_QUPV3_WRAP2_CORE_CLK] = &gcc_qupv3_wrap2_core_clk.clkr,
3107         [GCC_QUPV3_WRAP2_S0_CLK] = &gcc_qupv3_wrap2_s0_clk.clkr,
3108         [GCC_QUPV3_WRAP2_S0_CLK_SRC] = &gcc_qupv3_wrap2_s0_clk_src.clkr,
3109         [GCC_QUPV3_WRAP2_S1_CLK] = &gcc_qupv3_wrap2_s1_clk.clkr,
3110         [GCC_QUPV3_WRAP2_S1_CLK_SRC] = &gcc_qupv3_wrap2_s1_clk_src.clkr,
3111         [GCC_QUPV3_WRAP2_S2_CLK] = &gcc_qupv3_wrap2_s2_clk.clkr,
3112         [GCC_QUPV3_WRAP2_S2_CLK_SRC] = &gcc_qupv3_wrap2_s2_clk_src.clkr,
3113         [GCC_QUPV3_WRAP2_S3_CLK] = &gcc_qupv3_wrap2_s3_clk.clkr,
3114         [GCC_QUPV3_WRAP2_S3_CLK_SRC] = &gcc_qupv3_wrap2_s3_clk_src.clkr,
3115         [GCC_QUPV3_WRAP2_S4_CLK] = &gcc_qupv3_wrap2_s4_clk.clkr,
3116         [GCC_QUPV3_WRAP2_S4_CLK_SRC] = &gcc_qupv3_wrap2_s4_clk_src.clkr,
3117         [GCC_QUPV3_WRAP2_S5_CLK] = &gcc_qupv3_wrap2_s5_clk.clkr,
3118         [GCC_QUPV3_WRAP2_S5_CLK_SRC] = &gcc_qupv3_wrap2_s5_clk_src.clkr,
3119         [GCC_QUPV3_WRAP2_S6_CLK] = &gcc_qupv3_wrap2_s6_clk.clkr,
3120         [GCC_QUPV3_WRAP2_S6_CLK_SRC] = &gcc_qupv3_wrap2_s6_clk_src.clkr,
3121         [GCC_QUPV3_WRAP_0_M_AHB_CLK] = &gcc_qupv3_wrap_0_m_ahb_clk.clkr,
3122         [GCC_QUPV3_WRAP_0_S_AHB_CLK] = &gcc_qupv3_wrap_0_s_ahb_clk.clkr,
3123         [GCC_QUPV3_WRAP_1_M_AHB_CLK] = &gcc_qupv3_wrap_1_m_ahb_clk.clkr,
3124         [GCC_QUPV3_WRAP_1_S_AHB_CLK] = &gcc_qupv3_wrap_1_s_ahb_clk.clkr,
3125         [GCC_QUPV3_WRAP_2_M_AHB_CLK] = &gcc_qupv3_wrap_2_m_ahb_clk.clkr,
3126         [GCC_QUPV3_WRAP_2_S_AHB_CLK] = &gcc_qupv3_wrap_2_s_ahb_clk.clkr,
3127         [GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr,
3128         [GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr,
3129         [GCC_SDCC2_APPS_CLK_SRC] = &gcc_sdcc2_apps_clk_src.clkr,
3130         [GCC_SDCC2_AT_CLK] = &gcc_sdcc2_at_clk.clkr,
3131         [GCC_SDCC4_AHB_CLK] = &gcc_sdcc4_ahb_clk.clkr,
3132         [GCC_SDCC4_APPS_CLK] = &gcc_sdcc4_apps_clk.clkr,
3133         [GCC_SDCC4_APPS_CLK_SRC] = &gcc_sdcc4_apps_clk_src.clkr,
3134         [GCC_SDCC4_AT_CLK] = &gcc_sdcc4_at_clk.clkr,
3135         [GCC_UFS_0_CLKREF_EN] = &gcc_ufs_0_clkref_en.clkr,
3136         [GCC_UFS_PHY_AHB_CLK] = &gcc_ufs_phy_ahb_clk.clkr,
3137         [GCC_UFS_PHY_AXI_CLK] = &gcc_ufs_phy_axi_clk.clkr,
3138         [GCC_UFS_PHY_AXI_CLK_SRC] = &gcc_ufs_phy_axi_clk_src.clkr,
3139         [GCC_UFS_PHY_AXI_HW_CTL_CLK] = &gcc_ufs_phy_axi_hw_ctl_clk.clkr,
3140         [GCC_UFS_PHY_ICE_CORE_CLK] = &gcc_ufs_phy_ice_core_clk.clkr,
3141         [GCC_UFS_PHY_ICE_CORE_CLK_SRC] = &gcc_ufs_phy_ice_core_clk_src.clkr,
3142         [GCC_UFS_PHY_ICE_CORE_HW_CTL_CLK] = &gcc_ufs_phy_ice_core_hw_ctl_clk.clkr,
3143         [GCC_UFS_PHY_PHY_AUX_CLK] = &gcc_ufs_phy_phy_aux_clk.clkr,
3144         [GCC_UFS_PHY_PHY_AUX_CLK_SRC] = &gcc_ufs_phy_phy_aux_clk_src.clkr,
3145         [GCC_UFS_PHY_PHY_AUX_HW_CTL_CLK] = &gcc_ufs_phy_phy_aux_hw_ctl_clk.clkr,
3146         [GCC_UFS_PHY_RX_SYMBOL_0_CLK] = &gcc_ufs_phy_rx_symbol_0_clk.clkr,
3147         [GCC_UFS_PHY_RX_SYMBOL_0_CLK_SRC] = &gcc_ufs_phy_rx_symbol_0_clk_src.clkr,
3148         [GCC_UFS_PHY_RX_SYMBOL_1_CLK] = &gcc_ufs_phy_rx_symbol_1_clk.clkr,
3149         [GCC_UFS_PHY_RX_SYMBOL_1_CLK_SRC] = &gcc_ufs_phy_rx_symbol_1_clk_src.clkr,
3150         [GCC_UFS_PHY_TX_SYMBOL_0_CLK] = &gcc_ufs_phy_tx_symbol_0_clk.clkr,
3151         [GCC_UFS_PHY_TX_SYMBOL_0_CLK_SRC] = &gcc_ufs_phy_tx_symbol_0_clk_src.clkr,
3152         [GCC_UFS_PHY_UNIPRO_CORE_CLK] = &gcc_ufs_phy_unipro_core_clk.clkr,
3153         [GCC_UFS_PHY_UNIPRO_CORE_CLK_SRC] = &gcc_ufs_phy_unipro_core_clk_src.clkr,
3154         [GCC_UFS_PHY_UNIPRO_CORE_HW_CTL_CLK] = &gcc_ufs_phy_unipro_core_hw_ctl_clk.clkr,
3155         [GCC_USB30_PRIM_MASTER_CLK] = &gcc_usb30_prim_master_clk.clkr,
3156         [GCC_USB30_PRIM_MASTER_CLK_SRC] = &gcc_usb30_prim_master_clk_src.clkr,
3157         [GCC_USB30_PRIM_MOCK_UTMI_CLK] = &gcc_usb30_prim_mock_utmi_clk.clkr,
3158         [GCC_USB30_PRIM_MOCK_UTMI_CLK_SRC] = &gcc_usb30_prim_mock_utmi_clk_src.clkr,
3159         [GCC_USB30_PRIM_MOCK_UTMI_POSTDIV_CLK_SRC] = &gcc_usb30_prim_mock_utmi_postdiv_clk_src.clkr,
3160         [GCC_USB30_PRIM_SLEEP_CLK] = &gcc_usb30_prim_sleep_clk.clkr,
3161         [GCC_USB3_0_CLKREF_EN] = &gcc_usb3_0_clkref_en.clkr,
3162         [GCC_USB3_PRIM_PHY_AUX_CLK] = &gcc_usb3_prim_phy_aux_clk.clkr,
3163         [GCC_USB3_PRIM_PHY_AUX_CLK_SRC] = &gcc_usb3_prim_phy_aux_clk_src.clkr,
3164         [GCC_USB3_PRIM_PHY_COM_AUX_CLK] = &gcc_usb3_prim_phy_com_aux_clk.clkr,
3165         [GCC_USB3_PRIM_PHY_PIPE_CLK] = &gcc_usb3_prim_phy_pipe_clk.clkr,
3166         [GCC_USB3_PRIM_PHY_PIPE_CLK_SRC] = &gcc_usb3_prim_phy_pipe_clk_src.clkr,
3167         [GCC_VIDEO_AXI0_CLK] = &gcc_video_axi0_clk.clkr,
3168         [GCC_VIDEO_AXI1_CLK] = &gcc_video_axi1_clk.clkr,
3169 };
3170
3171 static const struct qcom_reset_map gcc_sm8450_resets[] = {
3172         [GCC_CAMERA_BCR] = { 0x36000 },
3173         [GCC_DISPLAY_BCR] = { 0x37000 },
3174         [GCC_GPU_BCR] = { 0x81000 },
3175         [GCC_PCIE_0_BCR] = { 0x7b000 },
3176         [GCC_PCIE_0_LINK_DOWN_BCR] = { 0x7c014 },
3177         [GCC_PCIE_0_NOCSR_COM_PHY_BCR] = { 0x7c020 },
3178         [GCC_PCIE_0_PHY_BCR] = { 0x7c01c },
3179         [GCC_PCIE_0_PHY_NOCSR_COM_PHY_BCR] = { 0x7c028 },
3180         [GCC_PCIE_1_BCR] = { 0x9d000 },
3181         [GCC_PCIE_1_LINK_DOWN_BCR] = { 0x9e014 },
3182         [GCC_PCIE_1_NOCSR_COM_PHY_BCR] = { 0x9e020 },
3183         [GCC_PCIE_1_PHY_BCR] = { 0x9e01c },
3184         [GCC_PCIE_1_PHY_NOCSR_COM_PHY_BCR] = { 0x9e000 },
3185         [GCC_PCIE_PHY_BCR] = { 0x7f000 },
3186         [GCC_PCIE_PHY_CFG_AHB_BCR] = { 0x7f00c },
3187         [GCC_PCIE_PHY_COM_BCR] = { 0x7f010 },
3188         [GCC_PDM_BCR] = { 0x43000 },
3189         [GCC_QUPV3_WRAPPER_0_BCR] = { 0x27000 },
3190         [GCC_QUPV3_WRAPPER_1_BCR] = { 0x28000 },
3191         [GCC_QUPV3_WRAPPER_2_BCR] = { 0x2e000 },
3192         [GCC_QUSB2PHY_PRIM_BCR] = { 0x22000 },
3193         [GCC_QUSB2PHY_SEC_BCR] = { 0x22004 },
3194         [GCC_SDCC2_BCR] = { 0x24000 },
3195         [GCC_SDCC4_BCR] = { 0x26000 },
3196         [GCC_UFS_PHY_BCR] = { 0x87000 },
3197         [GCC_USB30_PRIM_BCR] = { 0x49000 },
3198         [GCC_USB3_DP_PHY_PRIM_BCR] = { 0x60008 },
3199         [GCC_USB3_DP_PHY_SEC_BCR] = { 0x60014 },
3200         [GCC_USB3_PHY_PRIM_BCR] = { 0x60000 },
3201         [GCC_USB3_PHY_SEC_BCR] = { 0x6000c },
3202         [GCC_USB3PHY_PHY_PRIM_BCR] = { 0x60004 },
3203         [GCC_USB3PHY_PHY_SEC_BCR] = { 0x60010 },
3204         [GCC_USB_PHY_CFG_AHB2PHY_BCR] = { 0x7a000 },
3205         [GCC_VIDEO_AXI0_CLK_ARES] = { 0x42018, 2 },
3206         [GCC_VIDEO_AXI1_CLK_ARES] = { 0x42020, 2 },
3207         [GCC_VIDEO_BCR] = { 0x42000 },
3208 };
3209
3210 static const struct clk_rcg_dfs_data gcc_dfs_clocks[] = {
3211         DEFINE_RCG_DFS(gcc_qupv3_wrap0_s0_clk_src),
3212         DEFINE_RCG_DFS(gcc_qupv3_wrap0_s1_clk_src),
3213         DEFINE_RCG_DFS(gcc_qupv3_wrap0_s2_clk_src),
3214         DEFINE_RCG_DFS(gcc_qupv3_wrap0_s3_clk_src),
3215         DEFINE_RCG_DFS(gcc_qupv3_wrap0_s4_clk_src),
3216         DEFINE_RCG_DFS(gcc_qupv3_wrap0_s5_clk_src),
3217         DEFINE_RCG_DFS(gcc_qupv3_wrap0_s6_clk_src),
3218         DEFINE_RCG_DFS(gcc_qupv3_wrap0_s7_clk_src),
3219         DEFINE_RCG_DFS(gcc_qupv3_wrap1_s0_clk_src),
3220         DEFINE_RCG_DFS(gcc_qupv3_wrap1_s1_clk_src),
3221         DEFINE_RCG_DFS(gcc_qupv3_wrap1_s2_clk_src),
3222         DEFINE_RCG_DFS(gcc_qupv3_wrap1_s3_clk_src),
3223         DEFINE_RCG_DFS(gcc_qupv3_wrap1_s4_clk_src),
3224         DEFINE_RCG_DFS(gcc_qupv3_wrap1_s5_clk_src),
3225         DEFINE_RCG_DFS(gcc_qupv3_wrap1_s6_clk_src),
3226         DEFINE_RCG_DFS(gcc_qupv3_wrap2_s0_clk_src),
3227         DEFINE_RCG_DFS(gcc_qupv3_wrap2_s1_clk_src),
3228         DEFINE_RCG_DFS(gcc_qupv3_wrap2_s2_clk_src),
3229         DEFINE_RCG_DFS(gcc_qupv3_wrap2_s3_clk_src),
3230         DEFINE_RCG_DFS(gcc_qupv3_wrap2_s4_clk_src),
3231         DEFINE_RCG_DFS(gcc_qupv3_wrap2_s5_clk_src),
3232         DEFINE_RCG_DFS(gcc_qupv3_wrap2_s6_clk_src),
3233 };
3234
3235 static struct gdsc *gcc_sm8450_gdscs[] = {
3236         [PCIE_0_GDSC] = &pcie_0_gdsc,
3237         [PCIE_1_GDSC] = &pcie_1_gdsc,
3238         [UFS_PHY_GDSC] = &ufs_phy_gdsc,
3239         [USB30_PRIM_GDSC] = &usb30_prim_gdsc,
3240 };
3241
3242 static const struct regmap_config gcc_sm8450_regmap_config = {
3243         .reg_bits = 32,
3244         .reg_stride = 4,
3245         .val_bits = 32,
3246         .max_register = 0x1f1030,
3247         .fast_io = true,
3248 };
3249
3250 static const struct qcom_cc_desc gcc_sm8450_desc = {
3251         .config = &gcc_sm8450_regmap_config,
3252         .clks = gcc_sm8450_clocks,
3253         .num_clks = ARRAY_SIZE(gcc_sm8450_clocks),
3254         .resets = gcc_sm8450_resets,
3255         .num_resets = ARRAY_SIZE(gcc_sm8450_resets),
3256         .gdscs = gcc_sm8450_gdscs,
3257         .num_gdscs = ARRAY_SIZE(gcc_sm8450_gdscs),
3258 };
3259
3260 static const struct of_device_id gcc_sm8450_match_table[] = {
3261         { .compatible = "qcom,gcc-sm8450" },
3262         { }
3263 };
3264 MODULE_DEVICE_TABLE(of, gcc_sm8450_match_table);
3265
3266 static int gcc_sm8450_probe(struct platform_device *pdev)
3267 {
3268         struct regmap *regmap;
3269         int ret;
3270
3271         regmap = qcom_cc_map(pdev, &gcc_sm8450_desc);
3272         if (IS_ERR(regmap))
3273                 return PTR_ERR(regmap);
3274
3275         ret = qcom_cc_register_rcg_dfs(regmap, gcc_dfs_clocks,
3276                                        ARRAY_SIZE(gcc_dfs_clocks));
3277         if (ret)
3278                 return ret;
3279
3280         /* FORCE_MEM_CORE_ON for ufs phy ice core clocks */
3281         regmap_update_bits(regmap, gcc_ufs_phy_ice_core_clk.halt_reg, BIT(14), BIT(14));
3282
3283         /*
3284          * Keep the critical clock always-On
3285          * gcc_camera_ahb_clk, gcc_camera_xo_clk, gcc_disp_ahb_clk,
3286          * gcc_disp_xo_clk, gcc_gpu_cfg_ahb_clk, gcc_video_ahb_clk,
3287          * gcc_video_xo_clk
3288          */
3289         regmap_update_bits(regmap, 0x36004, BIT(0), BIT(0));
3290         regmap_update_bits(regmap, 0x36020, BIT(0), BIT(0));
3291         regmap_update_bits(regmap, 0x37004, BIT(0), BIT(0));
3292         regmap_update_bits(regmap, 0x3701c, BIT(0), BIT(0));
3293         regmap_update_bits(regmap, 0x81004, BIT(0), BIT(0));
3294         regmap_update_bits(regmap, 0x42004, BIT(0), BIT(0));
3295         regmap_update_bits(regmap, 0x42028, BIT(0), BIT(0));
3296
3297         return qcom_cc_really_probe(pdev, &gcc_sm8450_desc, regmap);
3298 }
3299
3300 static struct platform_driver gcc_sm8450_driver = {
3301         .probe = gcc_sm8450_probe,
3302         .driver = {
3303                 .name = "gcc-sm8450",
3304                 .of_match_table = gcc_sm8450_match_table,
3305         },
3306 };
3307
3308 static int __init gcc_sm8450_init(void)
3309 {
3310         return platform_driver_register(&gcc_sm8450_driver);
3311 }
3312 subsys_initcall(gcc_sm8450_init);
3313
3314 static void __exit gcc_sm8450_exit(void)
3315 {
3316         platform_driver_unregister(&gcc_sm8450_driver);
3317 }
3318 module_exit(gcc_sm8450_exit);
3319
3320 MODULE_DESCRIPTION("QTI GCC SM8450 Driver");
3321 MODULE_LICENSE("GPL v2");