GNU Linux-libre 5.10.217-gnu1
[releases.git] / drivers / clk / qcom / gcc-qcs404.c
1 // SPDX-License-Identifier: GPL-2.0
2 /*
3  * Copyright (c) 2018, The Linux Foundation. All rights reserved.
4  */
5
6 #include <linux/kernel.h>
7 #include <linux/platform_device.h>
8 #include <linux/module.h>
9 #include <linux/of.h>
10 #include <linux/clk-provider.h>
11 #include <linux/regmap.h>
12 #include <linux/reset-controller.h>
13
14 #include <dt-bindings/clock/qcom,gcc-qcs404.h>
15
16 #include "clk-alpha-pll.h"
17 #include "clk-branch.h"
18 #include "clk-pll.h"
19 #include "clk-rcg.h"
20 #include "clk-regmap.h"
21 #include "common.h"
22 #include "reset.h"
23
24 enum {
25         P_CORE_BI_PLL_TEST_SE,
26         P_DSI0_PHY_PLL_OUT_BYTECLK,
27         P_DSI0_PHY_PLL_OUT_DSICLK,
28         P_GPLL0_OUT_MAIN,
29         P_GPLL1_OUT_MAIN,
30         P_GPLL3_OUT_MAIN,
31         P_GPLL4_OUT_MAIN,
32         P_GPLL6_OUT_AUX,
33         P_HDMI_PHY_PLL_CLK,
34         P_PCIE_0_PIPE_CLK,
35         P_SLEEP_CLK,
36         P_XO,
37 };
38
39 static const struct parent_map gcc_parent_map_0[] = {
40         { P_XO, 0 },
41         { P_GPLL0_OUT_MAIN, 1 },
42         { P_CORE_BI_PLL_TEST_SE, 7 },
43 };
44
45 static const char * const gcc_parent_names_0[] = {
46         "cxo",
47         "gpll0_out_main",
48         "core_bi_pll_test_se",
49 };
50
51 static const char * const gcc_parent_names_ao_0[] = {
52         "cxo",
53         "gpll0_ao_out_main",
54         "core_bi_pll_test_se",
55 };
56
57 static const struct parent_map gcc_parent_map_1[] = {
58         { P_XO, 0 },
59         { P_CORE_BI_PLL_TEST_SE, 7 },
60 };
61
62 static const char * const gcc_parent_names_1[] = {
63         "cxo",
64         "core_bi_pll_test_se",
65 };
66
67 static const struct parent_map gcc_parent_map_2[] = {
68         { P_XO, 0 },
69         { P_GPLL0_OUT_MAIN, 1 },
70         { P_GPLL6_OUT_AUX, 2 },
71         { P_SLEEP_CLK, 6 },
72 };
73
74 static const char * const gcc_parent_names_2[] = {
75         "cxo",
76         "gpll0_out_main",
77         "gpll6_out_aux",
78         "sleep_clk",
79 };
80
81 static const struct parent_map gcc_parent_map_3[] = {
82         { P_XO, 0 },
83         { P_GPLL0_OUT_MAIN, 1 },
84         { P_GPLL6_OUT_AUX, 2 },
85         { P_CORE_BI_PLL_TEST_SE, 7 },
86 };
87
88 static const char * const gcc_parent_names_3[] = {
89         "cxo",
90         "gpll0_out_main",
91         "gpll6_out_aux",
92         "core_bi_pll_test_se",
93 };
94
95 static const struct parent_map gcc_parent_map_4[] = {
96         { P_XO, 0 },
97         { P_GPLL1_OUT_MAIN, 1 },
98         { P_CORE_BI_PLL_TEST_SE, 7 },
99 };
100
101 static const char * const gcc_parent_names_4[] = {
102         "cxo",
103         "gpll1_out_main",
104         "core_bi_pll_test_se",
105 };
106
107 static const struct parent_map gcc_parent_map_5[] = {
108         { P_XO, 0 },
109         { P_DSI0_PHY_PLL_OUT_BYTECLK, 1 },
110         { P_CORE_BI_PLL_TEST_SE, 7 },
111 };
112
113 static const char * const gcc_parent_names_5[] = {
114         "cxo",
115         "dsi0pllbyte",
116         "core_bi_pll_test_se",
117 };
118
119 static const struct parent_map gcc_parent_map_6[] = {
120         { P_XO, 0 },
121         { P_DSI0_PHY_PLL_OUT_BYTECLK, 2 },
122         { P_CORE_BI_PLL_TEST_SE, 7 },
123 };
124
125 static const char * const gcc_parent_names_6[] = {
126         "cxo",
127         "dsi0pllbyte",
128         "core_bi_pll_test_se",
129 };
130
131 static const struct parent_map gcc_parent_map_7[] = {
132         { P_XO, 0 },
133         { P_GPLL0_OUT_MAIN, 1 },
134         { P_GPLL3_OUT_MAIN, 2 },
135         { P_GPLL6_OUT_AUX, 3 },
136         { P_CORE_BI_PLL_TEST_SE, 7 },
137 };
138
139 static const char * const gcc_parent_names_7[] = {
140         "cxo",
141         "gpll0_out_main",
142         "gpll3_out_main",
143         "gpll6_out_aux",
144         "core_bi_pll_test_se",
145 };
146
147 static const struct parent_map gcc_parent_map_8[] = {
148         { P_XO, 0 },
149         { P_HDMI_PHY_PLL_CLK, 1 },
150         { P_CORE_BI_PLL_TEST_SE, 7 },
151 };
152
153 static const char * const gcc_parent_names_8[] = {
154         "cxo",
155         "hdmi_phy_pll_clk",
156         "core_bi_pll_test_se",
157 };
158
159 static const struct parent_map gcc_parent_map_9[] = {
160         { P_XO, 0 },
161         { P_GPLL0_OUT_MAIN, 1 },
162         { P_DSI0_PHY_PLL_OUT_DSICLK, 2 },
163         { P_GPLL6_OUT_AUX, 3 },
164         { P_CORE_BI_PLL_TEST_SE, 7 },
165 };
166
167 static const char * const gcc_parent_names_9[] = {
168         "cxo",
169         "gpll0_out_main",
170         "dsi0pll",
171         "gpll6_out_aux",
172         "core_bi_pll_test_se",
173 };
174
175 static const struct parent_map gcc_parent_map_10[] = {
176         { P_XO, 0 },
177         { P_SLEEP_CLK, 1 },
178         { P_CORE_BI_PLL_TEST_SE, 7 },
179 };
180
181 static const char * const gcc_parent_names_10[] = {
182         "cxo",
183         "sleep_clk",
184         "core_bi_pll_test_se",
185 };
186
187 static const struct parent_map gcc_parent_map_11[] = {
188         { P_XO, 0 },
189         { P_PCIE_0_PIPE_CLK, 1 },
190         { P_CORE_BI_PLL_TEST_SE, 7 },
191 };
192
193 static const char * const gcc_parent_names_11[] = {
194         "cxo",
195         "pcie_0_pipe_clk",
196         "core_bi_pll_test_se",
197 };
198
199 static const struct parent_map gcc_parent_map_12[] = {
200         { P_XO, 0 },
201         { P_DSI0_PHY_PLL_OUT_DSICLK, 1 },
202         { P_CORE_BI_PLL_TEST_SE, 7 },
203 };
204
205 static const char * const gcc_parent_names_12[] = {
206         "cxo",
207         "dsi0pll",
208         "core_bi_pll_test_se",
209 };
210
211 static const struct parent_map gcc_parent_map_13[] = {
212         { P_XO, 0 },
213         { P_GPLL0_OUT_MAIN, 1 },
214         { P_GPLL4_OUT_MAIN, 2 },
215         { P_GPLL6_OUT_AUX, 3 },
216         { P_CORE_BI_PLL_TEST_SE, 7 },
217 };
218
219 static const char * const gcc_parent_names_13[] = {
220         "cxo",
221         "gpll0_out_main",
222         "gpll4_out_main",
223         "gpll6_out_aux",
224         "core_bi_pll_test_se",
225 };
226
227 static const struct parent_map gcc_parent_map_14[] = {
228         { P_XO, 0 },
229         { P_GPLL0_OUT_MAIN, 1 },
230         { P_CORE_BI_PLL_TEST_SE, 7 },
231 };
232
233 static const char * const gcc_parent_names_14[] = {
234         "cxo",
235         "gpll0_out_main",
236         "core_bi_pll_test_se",
237 };
238
239 static const struct parent_map gcc_parent_map_15[] = {
240         { P_XO, 0 },
241         { P_CORE_BI_PLL_TEST_SE, 7 },
242 };
243
244 static const char * const gcc_parent_names_15[] = {
245         "cxo",
246         "core_bi_pll_test_se",
247 };
248
249 static const struct parent_map gcc_parent_map_16[] = {
250         { P_XO, 0 },
251         { P_GPLL0_OUT_MAIN, 1 },
252         { P_CORE_BI_PLL_TEST_SE, 7 },
253 };
254
255 static const char * const gcc_parent_names_16[] = {
256         "cxo",
257         "gpll0_out_main",
258         "core_bi_pll_test_se",
259 };
260
261 static struct clk_fixed_factor cxo = {
262         .mult = 1,
263         .div = 1,
264         .hw.init = &(struct clk_init_data){
265                 .name = "cxo",
266                 .parent_names = (const char *[]){ "xo-board" },
267                 .num_parents = 1,
268                 .ops = &clk_fixed_factor_ops,
269         },
270 };
271
272 static struct clk_alpha_pll gpll0_sleep_clk_src = {
273         .offset = 0x21000,
274         .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
275         .clkr = {
276                 .enable_reg = 0x45008,
277                 .enable_mask = BIT(23),
278                 .enable_is_inverted = true,
279                 .hw.init = &(struct clk_init_data){
280                         .name = "gpll0_sleep_clk_src",
281                         .parent_names = (const char *[]){ "cxo" },
282                         .num_parents = 1,
283                         .ops = &clk_alpha_pll_ops,
284                 },
285         },
286 };
287
288 static struct clk_alpha_pll gpll0_out_main = {
289         .offset = 0x21000,
290         .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
291         .flags = SUPPORTS_FSM_MODE,
292         .clkr = {
293                 .enable_reg = 0x45000,
294                 .enable_mask = BIT(0),
295                 .hw.init = &(struct clk_init_data){
296                         .name = "gpll0_out_main",
297                         .parent_names = (const char *[])
298                                         { "cxo" },
299                         .num_parents = 1,
300                         .ops = &clk_alpha_pll_ops,
301                 },
302         },
303 };
304
305 static struct clk_alpha_pll gpll0_ao_out_main = {
306         .offset = 0x21000,
307         .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
308         .flags = SUPPORTS_FSM_MODE,
309         .clkr = {
310                 .enable_reg = 0x45000,
311                 .enable_mask = BIT(0),
312                 .hw.init = &(struct clk_init_data){
313                         .name = "gpll0_ao_out_main",
314                         .parent_names = (const char *[]){ "cxo" },
315                         .num_parents = 1,
316                         .flags = CLK_IS_CRITICAL,
317                         .ops = &clk_alpha_pll_fixed_ops,
318                 },
319         },
320 };
321
322 static struct clk_alpha_pll gpll1_out_main = {
323         .offset = 0x20000,
324         .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
325         .clkr = {
326                 .enable_reg = 0x45000,
327                 .enable_mask = BIT(1),
328                 .hw.init = &(struct clk_init_data){
329                         .name = "gpll1_out_main",
330                         .parent_names = (const char *[]){ "cxo" },
331                         .num_parents = 1,
332                         .ops = &clk_alpha_pll_ops,
333                 },
334         },
335 };
336
337 /* 930MHz configuration */
338 static const struct alpha_pll_config gpll3_config = {
339         .l = 48,
340         .alpha = 0x0,
341         .alpha_en_mask = BIT(24),
342         .post_div_mask = 0xf << 8,
343         .post_div_val = 0x1 << 8,
344         .vco_mask = 0x3 << 20,
345         .main_output_mask = 0x1,
346         .config_ctl_val = 0x4001055b,
347 };
348
349 static const struct pll_vco gpll3_vco[] = {
350         { 700000000, 1400000000, 0 },
351 };
352
353 static struct clk_alpha_pll gpll3_out_main = {
354         .offset = 0x22000,
355         .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
356         .vco_table = gpll3_vco,
357         .num_vco = ARRAY_SIZE(gpll3_vco),
358         .clkr = {
359                 .hw.init = &(struct clk_init_data){
360                         .name = "gpll3_out_main",
361                         .parent_names = (const char *[]){ "cxo" },
362                         .num_parents = 1,
363                         .ops = &clk_alpha_pll_ops,
364                 },
365         },
366 };
367
368 static struct clk_alpha_pll gpll4_out_main = {
369         .offset = 0x24000,
370         .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
371         .clkr = {
372                 .enable_reg = 0x45000,
373                 .enable_mask = BIT(5),
374                 .hw.init = &(struct clk_init_data){
375                         .name = "gpll4_out_main",
376                         .parent_names = (const char *[]){ "cxo" },
377                         .num_parents = 1,
378                         .ops = &clk_alpha_pll_ops,
379                 },
380         },
381 };
382
383 static struct clk_pll gpll6 = {
384         .l_reg = 0x37004,
385         .m_reg = 0x37008,
386         .n_reg = 0x3700C,
387         .config_reg = 0x37014,
388         .mode_reg = 0x37000,
389         .status_reg = 0x3701C,
390         .status_bit = 17,
391         .clkr.hw.init = &(struct clk_init_data){
392                 .name = "gpll6",
393                 .parent_names = (const char *[]){ "cxo" },
394                 .num_parents = 1,
395                 .ops = &clk_pll_ops,
396         },
397 };
398
399 static struct clk_regmap gpll6_out_aux = {
400         .enable_reg = 0x45000,
401         .enable_mask = BIT(7),
402         .hw.init = &(struct clk_init_data){
403                 .name = "gpll6_out_aux",
404                 .parent_names = (const char *[]){ "gpll6" },
405                 .num_parents = 1,
406                 .ops = &clk_pll_vote_ops,
407         },
408 };
409
410 static const struct freq_tbl ftbl_apss_ahb_clk_src[] = {
411         F(19200000, P_XO, 1, 0, 0),
412         F(50000000, P_GPLL0_OUT_MAIN, 16, 0, 0),
413         F(100000000, P_GPLL0_OUT_MAIN, 8, 0, 0),
414         F(133333333, P_GPLL0_OUT_MAIN, 6, 0, 0),
415         { }
416 };
417
418 static struct clk_rcg2 apss_ahb_clk_src = {
419         .cmd_rcgr = 0x46000,
420         .mnd_width = 0,
421         .hid_width = 5,
422         .parent_map = gcc_parent_map_0,
423         .freq_tbl = ftbl_apss_ahb_clk_src,
424         .clkr.hw.init = &(struct clk_init_data){
425                 .name = "apss_ahb_clk_src",
426                 .parent_names = gcc_parent_names_ao_0,
427                 .num_parents = 3,
428                 .flags = CLK_IS_CRITICAL,
429                 .ops = &clk_rcg2_ops,
430         },
431 };
432
433 static const struct freq_tbl ftbl_blsp1_qup0_i2c_apps_clk_src[] = {
434         F(19200000, P_XO, 1, 0, 0),
435         F(50000000, P_GPLL0_OUT_MAIN, 16, 0, 0),
436         { }
437 };
438
439 static struct clk_rcg2 blsp1_qup0_i2c_apps_clk_src = {
440         .cmd_rcgr = 0x602c,
441         .mnd_width = 0,
442         .hid_width = 5,
443         .parent_map = gcc_parent_map_0,
444         .freq_tbl = ftbl_blsp1_qup0_i2c_apps_clk_src,
445         .clkr.hw.init = &(struct clk_init_data){
446                 .name = "blsp1_qup0_i2c_apps_clk_src",
447                 .parent_names = gcc_parent_names_0,
448                 .num_parents = 3,
449                 .ops = &clk_rcg2_ops,
450         },
451 };
452
453 static const struct freq_tbl ftbl_blsp1_qup0_spi_apps_clk_src[] = {
454         F(960000, P_XO, 10, 1, 2),
455         F(4800000, P_XO, 4, 0, 0),
456         F(9600000, P_XO, 2, 0, 0),
457         F(16000000, P_GPLL0_OUT_MAIN, 10, 1, 5),
458         F(19200000, P_XO, 1, 0, 0),
459         F(25000000, P_GPLL0_OUT_MAIN, 16, 1, 2),
460         F(50000000, P_GPLL0_OUT_MAIN, 16, 0, 0),
461         { }
462 };
463
464 static struct clk_rcg2 blsp1_qup0_spi_apps_clk_src = {
465         .cmd_rcgr = 0x6034,
466         .mnd_width = 8,
467         .hid_width = 5,
468         .parent_map = gcc_parent_map_0,
469         .freq_tbl = ftbl_blsp1_qup0_spi_apps_clk_src,
470         .clkr.hw.init = &(struct clk_init_data){
471                 .name = "blsp1_qup0_spi_apps_clk_src",
472                 .parent_names = gcc_parent_names_0,
473                 .num_parents = 3,
474                 .ops = &clk_rcg2_ops,
475         },
476 };
477
478 static struct clk_rcg2 blsp1_qup1_i2c_apps_clk_src = {
479         .cmd_rcgr = 0x200c,
480         .mnd_width = 0,
481         .hid_width = 5,
482         .parent_map = gcc_parent_map_0,
483         .freq_tbl = ftbl_blsp1_qup0_i2c_apps_clk_src,
484         .clkr.hw.init = &(struct clk_init_data){
485                 .name = "blsp1_qup1_i2c_apps_clk_src",
486                 .parent_names = gcc_parent_names_0,
487                 .num_parents = 3,
488                 .ops = &clk_rcg2_ops,
489         },
490 };
491
492 static const struct freq_tbl ftbl_blsp1_qup1_spi_apps_clk_src[] = {
493         F(960000,   P_XO, 10, 1, 2),
494         F(4800000,  P_XO, 4, 0, 0),
495         F(9600000,  P_XO, 2, 0, 0),
496         F(10480000, P_GPLL0_OUT_MAIN, 1, 3, 229),
497         F(16000000, P_GPLL0_OUT_MAIN, 10, 1, 5),
498         F(19200000, P_XO, 1, 0, 0),
499         F(20961000, P_GPLL0_OUT_MAIN, 1, 6, 229),
500         { }
501 };
502
503 static struct clk_rcg2 blsp1_qup1_spi_apps_clk_src = {
504         .cmd_rcgr = 0x2024,
505         .mnd_width = 8,
506         .hid_width = 5,
507         .parent_map = gcc_parent_map_0,
508         .freq_tbl = ftbl_blsp1_qup1_spi_apps_clk_src,
509         .clkr.hw.init = &(struct clk_init_data){
510                 .name = "blsp1_qup1_spi_apps_clk_src",
511                 .parent_names = gcc_parent_names_0,
512                 .num_parents = 3,
513                 .ops = &clk_rcg2_ops,
514         },
515 };
516
517 static struct clk_rcg2 blsp1_qup2_i2c_apps_clk_src = {
518         .cmd_rcgr = 0x3000,
519         .mnd_width = 0,
520         .hid_width = 5,
521         .parent_map = gcc_parent_map_0,
522         .freq_tbl = ftbl_blsp1_qup0_i2c_apps_clk_src,
523         .clkr.hw.init = &(struct clk_init_data){
524                 .name = "blsp1_qup2_i2c_apps_clk_src",
525                 .parent_names = gcc_parent_names_0,
526                 .num_parents = 3,
527                 .ops = &clk_rcg2_ops,
528         },
529 };
530
531 static const struct freq_tbl ftbl_blsp1_qup2_spi_apps_clk_src[] = {
532         F(960000,   P_XO, 10, 1, 2),
533         F(4800000,  P_XO, 4, 0, 0),
534         F(9600000,  P_XO, 2, 0, 0),
535         F(15000000, P_GPLL0_OUT_MAIN, 1,  3, 160),
536         F(16000000, P_GPLL0_OUT_MAIN, 10, 1, 5),
537         F(19200000, P_XO, 1, 0, 0),
538         F(25000000, P_GPLL0_OUT_MAIN, 16, 1, 2),
539         F(30000000, P_GPLL0_OUT_MAIN, 1,  3, 80),
540         { }
541 };
542
543 static struct clk_rcg2 blsp1_qup2_spi_apps_clk_src = {
544         .cmd_rcgr = 0x3014,
545         .mnd_width = 8,
546         .hid_width = 5,
547         .parent_map = gcc_parent_map_0,
548         .freq_tbl = ftbl_blsp1_qup2_spi_apps_clk_src,
549         .clkr.hw.init = &(struct clk_init_data){
550                 .name = "blsp1_qup2_spi_apps_clk_src",
551                 .parent_names = gcc_parent_names_0,
552                 .num_parents = 3,
553                 .ops = &clk_rcg2_ops,
554         },
555 };
556
557 static struct clk_rcg2 blsp1_qup3_i2c_apps_clk_src = {
558         .cmd_rcgr = 0x4000,
559         .mnd_width = 0,
560         .hid_width = 5,
561         .parent_map = gcc_parent_map_0,
562         .freq_tbl = ftbl_blsp1_qup0_i2c_apps_clk_src,
563         .clkr.hw.init = &(struct clk_init_data){
564                 .name = "blsp1_qup3_i2c_apps_clk_src",
565                 .parent_names = gcc_parent_names_0,
566                 .num_parents = 3,
567                 .ops = &clk_rcg2_ops,
568         },
569 };
570
571 static struct clk_rcg2 blsp1_qup3_spi_apps_clk_src = {
572         .cmd_rcgr = 0x4024,
573         .mnd_width = 8,
574         .hid_width = 5,
575         .parent_map = gcc_parent_map_0,
576         .freq_tbl = ftbl_blsp1_qup0_spi_apps_clk_src,
577         .clkr.hw.init = &(struct clk_init_data){
578                 .name = "blsp1_qup3_spi_apps_clk_src",
579                 .parent_names = gcc_parent_names_0,
580                 .num_parents = 3,
581                 .ops = &clk_rcg2_ops,
582         },
583 };
584
585 static struct clk_rcg2 blsp1_qup4_i2c_apps_clk_src = {
586         .cmd_rcgr = 0x5000,
587         .mnd_width = 0,
588         .hid_width = 5,
589         .parent_map = gcc_parent_map_0,
590         .freq_tbl = ftbl_blsp1_qup0_i2c_apps_clk_src,
591         .clkr.hw.init = &(struct clk_init_data){
592                 .name = "blsp1_qup4_i2c_apps_clk_src",
593                 .parent_names = gcc_parent_names_0,
594                 .num_parents = 3,
595                 .ops = &clk_rcg2_ops,
596         },
597 };
598
599 static struct clk_rcg2 blsp1_qup4_spi_apps_clk_src = {
600         .cmd_rcgr = 0x5024,
601         .mnd_width = 8,
602         .hid_width = 5,
603         .parent_map = gcc_parent_map_0,
604         .freq_tbl = ftbl_blsp1_qup0_spi_apps_clk_src,
605         .clkr.hw.init = &(struct clk_init_data){
606                 .name = "blsp1_qup4_spi_apps_clk_src",
607                 .parent_names = gcc_parent_names_0,
608                 .num_parents = 3,
609                 .ops = &clk_rcg2_ops,
610         },
611 };
612
613 static const struct freq_tbl ftbl_blsp1_uart0_apps_clk_src[] = {
614         F(3686400, P_GPLL0_OUT_MAIN, 1, 72, 15625),
615         F(7372800, P_GPLL0_OUT_MAIN, 1, 144, 15625),
616         F(14745600, P_GPLL0_OUT_MAIN, 1, 288, 15625),
617         F(16000000, P_GPLL0_OUT_MAIN, 10, 1, 5),
618         F(19200000, P_XO, 1, 0, 0),
619         F(24000000, P_GPLL0_OUT_MAIN, 1, 3, 100),
620         F(25000000, P_GPLL0_OUT_MAIN, 16, 1, 2),
621         F(32000000, P_GPLL0_OUT_MAIN, 1, 1, 25),
622         F(40000000, P_GPLL0_OUT_MAIN, 1, 1, 20),
623         F(46400000, P_GPLL0_OUT_MAIN, 1, 29, 500),
624         F(48000000, P_GPLL0_OUT_MAIN, 1, 3, 50),
625         F(51200000, P_GPLL0_OUT_MAIN, 1, 8, 125),
626         F(56000000, P_GPLL0_OUT_MAIN, 1, 7, 100),
627         F(58982400, P_GPLL0_OUT_MAIN, 1, 1152, 15625),
628         F(60000000, P_GPLL0_OUT_MAIN, 1, 3, 40),
629         F(64000000, P_GPLL0_OUT_MAIN, 1, 2, 25),
630         { }
631 };
632
633 static struct clk_rcg2 blsp1_uart0_apps_clk_src = {
634         .cmd_rcgr = 0x600c,
635         .mnd_width = 16,
636         .hid_width = 5,
637         .parent_map = gcc_parent_map_0,
638         .freq_tbl = ftbl_blsp1_uart0_apps_clk_src,
639         .clkr.hw.init = &(struct clk_init_data){
640                 .name = "blsp1_uart0_apps_clk_src",
641                 .parent_names = gcc_parent_names_0,
642                 .num_parents = 3,
643                 .ops = &clk_rcg2_ops,
644         },
645 };
646
647 static struct clk_rcg2 blsp1_uart1_apps_clk_src = {
648         .cmd_rcgr = 0x2044,
649         .mnd_width = 16,
650         .hid_width = 5,
651         .parent_map = gcc_parent_map_0,
652         .freq_tbl = ftbl_blsp1_uart0_apps_clk_src,
653         .clkr.hw.init = &(struct clk_init_data){
654                 .name = "blsp1_uart1_apps_clk_src",
655                 .parent_names = gcc_parent_names_0,
656                 .num_parents = 3,
657                 .ops = &clk_rcg2_ops,
658         },
659 };
660
661 static struct clk_rcg2 blsp1_uart2_apps_clk_src = {
662         .cmd_rcgr = 0x3034,
663         .mnd_width = 16,
664         .hid_width = 5,
665         .parent_map = gcc_parent_map_0,
666         .freq_tbl = ftbl_blsp1_uart0_apps_clk_src,
667         .clkr.hw.init = &(struct clk_init_data){
668                 .name = "blsp1_uart2_apps_clk_src",
669                 .parent_names = gcc_parent_names_0,
670                 .num_parents = 3,
671                 .ops = &clk_rcg2_ops,
672         },
673 };
674
675 static struct clk_rcg2 blsp1_uart3_apps_clk_src = {
676         .cmd_rcgr = 0x4014,
677         .mnd_width = 16,
678         .hid_width = 5,
679         .cfg_off = 0x20,
680         .parent_map = gcc_parent_map_0,
681         .freq_tbl = ftbl_blsp1_uart0_apps_clk_src,
682         .clkr.hw.init = &(struct clk_init_data){
683                 .name = "blsp1_uart3_apps_clk_src",
684                 .parent_names = gcc_parent_names_0,
685                 .num_parents = 3,
686                 .ops = &clk_rcg2_ops,
687         },
688 };
689
690 static struct clk_rcg2 blsp2_qup0_i2c_apps_clk_src = {
691         .cmd_rcgr = 0xc00c,
692         .mnd_width = 0,
693         .hid_width = 5,
694         .parent_map = gcc_parent_map_0,
695         .freq_tbl = ftbl_blsp1_qup0_i2c_apps_clk_src,
696         .clkr.hw.init = &(struct clk_init_data){
697                 .name = "blsp2_qup0_i2c_apps_clk_src",
698                 .parent_names = gcc_parent_names_0,
699                 .num_parents = 3,
700                 .ops = &clk_rcg2_ops,
701         },
702 };
703
704 static struct clk_rcg2 blsp2_qup0_spi_apps_clk_src = {
705         .cmd_rcgr = 0xc024,
706         .mnd_width = 8,
707         .hid_width = 5,
708         .parent_map = gcc_parent_map_0,
709         .freq_tbl = ftbl_blsp1_qup0_spi_apps_clk_src,
710         .clkr.hw.init = &(struct clk_init_data){
711                 .name = "blsp2_qup0_spi_apps_clk_src",
712                 .parent_names = gcc_parent_names_0,
713                 .num_parents = 3,
714                 .ops = &clk_rcg2_ops,
715         },
716 };
717
718 static struct clk_rcg2 blsp2_uart0_apps_clk_src = {
719         .cmd_rcgr = 0xc044,
720         .mnd_width = 16,
721         .hid_width = 5,
722         .parent_map = gcc_parent_map_0,
723         .freq_tbl = ftbl_blsp1_uart0_apps_clk_src,
724         .clkr.hw.init = &(struct clk_init_data){
725                 .name = "blsp2_uart0_apps_clk_src",
726                 .parent_names = gcc_parent_names_0,
727                 .num_parents = 3,
728                 .ops = &clk_rcg2_ops,
729         },
730 };
731
732 static struct clk_rcg2 byte0_clk_src = {
733         .cmd_rcgr = 0x4d044,
734         .mnd_width = 0,
735         .hid_width = 5,
736         .parent_map = gcc_parent_map_5,
737         .clkr.hw.init = &(struct clk_init_data){
738                 .name = "byte0_clk_src",
739                 .parent_names = gcc_parent_names_5,
740                 .num_parents = 4,
741                 .flags = CLK_SET_RATE_PARENT,
742                 .ops = &clk_byte2_ops,
743         },
744 };
745
746 static const struct freq_tbl ftbl_emac_clk_src[] = {
747         F(5000000,   P_GPLL1_OUT_MAIN, 2, 1, 50),
748         F(50000000,  P_GPLL1_OUT_MAIN, 10, 0, 0),
749         F(125000000, P_GPLL1_OUT_MAIN, 4, 0, 0),
750         F(250000000, P_GPLL1_OUT_MAIN, 2, 0, 0),
751         { }
752 };
753
754 static struct clk_rcg2 emac_clk_src = {
755         .cmd_rcgr = 0x4e01c,
756         .mnd_width = 8,
757         .hid_width = 5,
758         .parent_map = gcc_parent_map_4,
759         .freq_tbl = ftbl_emac_clk_src,
760         .clkr.hw.init = &(struct clk_init_data){
761                 .name = "emac_clk_src",
762                 .parent_names = gcc_parent_names_4,
763                 .num_parents = 3,
764                 .ops = &clk_rcg2_ops,
765         },
766 };
767
768 static const struct freq_tbl ftbl_emac_ptp_clk_src[] = {
769         F(50000000,  P_GPLL1_OUT_MAIN, 10, 0, 0),
770         F(125000000, P_GPLL1_OUT_MAIN, 4, 0, 0),
771         F(250000000, P_GPLL1_OUT_MAIN, 2, 0, 0),
772         { }
773 };
774
775 static struct clk_rcg2 emac_ptp_clk_src = {
776         .cmd_rcgr = 0x4e014,
777         .mnd_width = 0,
778         .hid_width = 5,
779         .parent_map = gcc_parent_map_4,
780         .freq_tbl = ftbl_emac_ptp_clk_src,
781         .clkr.hw.init = &(struct clk_init_data){
782                 .name = "emac_ptp_clk_src",
783                 .parent_names = gcc_parent_names_4,
784                 .num_parents = 3,
785                 .ops = &clk_rcg2_ops,
786         },
787 };
788
789 static const struct freq_tbl ftbl_esc0_clk_src[] = {
790         F(19200000, P_XO, 1, 0, 0),
791         { }
792 };
793
794 static struct clk_rcg2 esc0_clk_src = {
795         .cmd_rcgr = 0x4d05c,
796         .mnd_width = 0,
797         .hid_width = 5,
798         .parent_map = gcc_parent_map_6,
799         .freq_tbl = ftbl_esc0_clk_src,
800         .clkr.hw.init = &(struct clk_init_data){
801                 .name = "esc0_clk_src",
802                 .parent_names = gcc_parent_names_6,
803                 .num_parents = 4,
804                 .ops = &clk_rcg2_ops,
805         },
806 };
807
808 static const struct freq_tbl ftbl_gfx3d_clk_src[] = {
809         F(19200000,  P_XO, 1, 0, 0),
810         F(50000000,  P_GPLL0_OUT_MAIN, 16, 0, 0),
811         F(80000000,  P_GPLL0_OUT_MAIN, 10, 0, 0),
812         F(100000000, P_GPLL0_OUT_MAIN, 8, 0, 0),
813         F(160000000, P_GPLL0_OUT_MAIN, 5, 0, 0),
814         F(200000000, P_GPLL0_OUT_MAIN, 4, 0, 0),
815         F(228571429, P_GPLL0_OUT_MAIN, 3.5, 0, 0),
816         F(240000000, P_GPLL6_OUT_AUX,  4.5, 0, 0),
817         F(266666667, P_GPLL0_OUT_MAIN, 3, 0, 0),
818         F(270000000, P_GPLL6_OUT_AUX,  4, 0, 0),
819         F(320000000, P_GPLL0_OUT_MAIN, 2.5, 0, 0),
820         F(400000000, P_GPLL0_OUT_MAIN, 2, 0, 0),
821         F(484800000, P_GPLL3_OUT_MAIN, 1, 0, 0),
822         F(523200000, P_GPLL3_OUT_MAIN, 1, 0, 0),
823         F(550000000, P_GPLL3_OUT_MAIN, 1, 0, 0),
824         F(598000000, P_GPLL3_OUT_MAIN, 1, 0, 0),
825         { }
826 };
827
828 static struct clk_rcg2 gfx3d_clk_src = {
829         .cmd_rcgr = 0x59000,
830         .mnd_width = 0,
831         .hid_width = 5,
832         .parent_map = gcc_parent_map_7,
833         .freq_tbl = ftbl_gfx3d_clk_src,
834         .clkr.hw.init = &(struct clk_init_data){
835                 .name = "gfx3d_clk_src",
836                 .parent_names = gcc_parent_names_7,
837                 .num_parents = 6,
838                 .ops = &clk_rcg2_ops,
839         },
840 };
841
842 static const struct freq_tbl ftbl_gp1_clk_src[] = {
843         F(19200000, P_XO, 1, 0, 0),
844         F(100000000, P_GPLL0_OUT_MAIN, 8, 0, 0),
845         F(200000000, P_GPLL0_OUT_MAIN, 4, 0, 0),
846         { }
847 };
848
849 static struct clk_rcg2 gp1_clk_src = {
850         .cmd_rcgr = 0x8004,
851         .mnd_width = 8,
852         .hid_width = 5,
853         .parent_map = gcc_parent_map_2,
854         .freq_tbl = ftbl_gp1_clk_src,
855         .clkr.hw.init = &(struct clk_init_data){
856                 .name = "gp1_clk_src",
857                 .parent_names = gcc_parent_names_2,
858                 .num_parents = 4,
859                 .ops = &clk_rcg2_ops,
860         },
861 };
862
863 static struct clk_rcg2 gp2_clk_src = {
864         .cmd_rcgr = 0x9004,
865         .mnd_width = 8,
866         .hid_width = 5,
867         .parent_map = gcc_parent_map_2,
868         .freq_tbl = ftbl_gp1_clk_src,
869         .clkr.hw.init = &(struct clk_init_data){
870                 .name = "gp2_clk_src",
871                 .parent_names = gcc_parent_names_2,
872                 .num_parents = 4,
873                 .ops = &clk_rcg2_ops,
874         },
875 };
876
877 static struct clk_rcg2 gp3_clk_src = {
878         .cmd_rcgr = 0xa004,
879         .mnd_width = 8,
880         .hid_width = 5,
881         .parent_map = gcc_parent_map_2,
882         .freq_tbl = ftbl_gp1_clk_src,
883         .clkr.hw.init = &(struct clk_init_data){
884                 .name = "gp3_clk_src",
885                 .parent_names = gcc_parent_names_2,
886                 .num_parents = 4,
887                 .ops = &clk_rcg2_ops,
888         },
889 };
890
891 static struct clk_rcg2 hdmi_app_clk_src = {
892         .cmd_rcgr = 0x4d0e4,
893         .mnd_width = 0,
894         .hid_width = 5,
895         .parent_map = gcc_parent_map_1,
896         .freq_tbl = ftbl_esc0_clk_src,
897         .clkr.hw.init = &(struct clk_init_data){
898                 .name = "hdmi_app_clk_src",
899                 .parent_names = gcc_parent_names_1,
900                 .num_parents = 2,
901                 .ops = &clk_rcg2_ops,
902         },
903 };
904
905 static struct clk_rcg2 hdmi_pclk_clk_src = {
906         .cmd_rcgr = 0x4d0dc,
907         .mnd_width = 0,
908         .hid_width = 5,
909         .parent_map = gcc_parent_map_8,
910         .freq_tbl = ftbl_esc0_clk_src,
911         .clkr.hw.init = &(struct clk_init_data){
912                 .name = "hdmi_pclk_clk_src",
913                 .parent_names = gcc_parent_names_8,
914                 .num_parents = 3,
915                 .ops = &clk_rcg2_ops,
916         },
917 };
918
919 static const struct freq_tbl ftbl_mdp_clk_src[] = {
920         F(50000000, P_GPLL0_OUT_MAIN, 16, 0, 0),
921         F(80000000, P_GPLL0_OUT_MAIN, 10, 0, 0),
922         F(100000000, P_GPLL0_OUT_MAIN, 8, 0, 0),
923         F(145454545, P_GPLL0_OUT_MAIN, 5.5, 0, 0),
924         F(160000000, P_GPLL0_OUT_MAIN, 5, 0, 0),
925         F(177777778, P_GPLL0_OUT_MAIN, 4.5, 0, 0),
926         F(200000000, P_GPLL0_OUT_MAIN, 4, 0, 0),
927         F(266666667, P_GPLL0_OUT_MAIN, 3, 0, 0),
928         F(320000000, P_GPLL0_OUT_MAIN, 2.5, 0, 0),
929         { }
930 };
931
932 static struct clk_rcg2 mdp_clk_src = {
933         .cmd_rcgr = 0x4d014,
934         .mnd_width = 0,
935         .hid_width = 5,
936         .parent_map = gcc_parent_map_9,
937         .freq_tbl = ftbl_mdp_clk_src,
938         .clkr.hw.init = &(struct clk_init_data){
939                 .name = "mdp_clk_src",
940                 .parent_names = gcc_parent_names_9,
941                 .num_parents = 5,
942                 .ops = &clk_rcg2_ops,
943         },
944 };
945
946 static const struct freq_tbl ftbl_pcie_0_aux_clk_src[] = {
947         F(1200000, P_XO, 16, 0, 0),
948         { }
949 };
950
951 static struct clk_rcg2 pcie_0_aux_clk_src = {
952         .cmd_rcgr = 0x3e024,
953         .mnd_width = 16,
954         .hid_width = 5,
955         .parent_map = gcc_parent_map_10,
956         .freq_tbl = ftbl_pcie_0_aux_clk_src,
957         .clkr.hw.init = &(struct clk_init_data){
958                 .name = "pcie_0_aux_clk_src",
959                 .parent_names = gcc_parent_names_10,
960                 .num_parents = 3,
961                 .ops = &clk_rcg2_ops,
962         },
963 };
964
965 static const struct freq_tbl ftbl_pcie_0_pipe_clk_src[] = {
966         F(19200000, P_XO, 1, 0, 0),
967         F(125000000, P_PCIE_0_PIPE_CLK, 2, 0, 0),
968         F(250000000, P_PCIE_0_PIPE_CLK, 1, 0, 0),
969         { }
970 };
971
972 static struct clk_rcg2 pcie_0_pipe_clk_src = {
973         .cmd_rcgr = 0x3e01c,
974         .mnd_width = 0,
975         .hid_width = 5,
976         .parent_map = gcc_parent_map_11,
977         .freq_tbl = ftbl_pcie_0_pipe_clk_src,
978         .clkr.hw.init = &(struct clk_init_data){
979                 .name = "pcie_0_pipe_clk_src",
980                 .parent_names = gcc_parent_names_11,
981                 .num_parents = 3,
982                 .ops = &clk_rcg2_ops,
983         },
984 };
985
986 static struct clk_rcg2 pclk0_clk_src = {
987         .cmd_rcgr = 0x4d000,
988         .mnd_width = 8,
989         .hid_width = 5,
990         .parent_map = gcc_parent_map_12,
991         .clkr.hw.init = &(struct clk_init_data){
992                 .name = "pclk0_clk_src",
993                 .parent_names = gcc_parent_names_12,
994                 .num_parents = 4,
995                 .flags = CLK_SET_RATE_PARENT,
996                 .ops = &clk_pixel_ops,
997         },
998 };
999
1000 static const struct freq_tbl ftbl_pdm2_clk_src[] = {
1001         F(19200000, P_XO, 1, 0, 0),
1002         F(64000000, P_GPLL0_OUT_MAIN, 12.5, 0, 0),
1003         { }
1004 };
1005
1006 static struct clk_rcg2 pdm2_clk_src = {
1007         .cmd_rcgr = 0x44010,
1008         .mnd_width = 0,
1009         .hid_width = 5,
1010         .parent_map = gcc_parent_map_0,
1011         .freq_tbl = ftbl_pdm2_clk_src,
1012         .clkr.hw.init = &(struct clk_init_data){
1013                 .name = "pdm2_clk_src",
1014                 .parent_names = gcc_parent_names_0,
1015                 .num_parents = 3,
1016                 .ops = &clk_rcg2_ops,
1017         },
1018 };
1019
1020 static const struct freq_tbl ftbl_sdcc1_apps_clk_src[] = {
1021         F(144000, P_XO, 16, 3, 25),
1022         F(400000, P_XO, 12, 1, 4),
1023         F(20000000, P_GPLL0_OUT_MAIN, 10, 1, 4),
1024         F(25000000, P_GPLL0_OUT_MAIN, 16, 1, 2),
1025         F(50000000, P_GPLL0_OUT_MAIN, 16, 0, 0),
1026         F(100000000, P_GPLL0_OUT_MAIN, 8, 0, 0),
1027         F(177777778, P_GPLL0_OUT_MAIN, 4.5, 0, 0),
1028         F(192000000, P_GPLL4_OUT_MAIN, 6, 0, 0),
1029         F(200000000, P_GPLL0_OUT_MAIN, 4, 0, 0),
1030         F(384000000, P_GPLL4_OUT_MAIN, 3, 0, 0),
1031         { }
1032 };
1033
1034 static struct clk_rcg2 sdcc1_apps_clk_src = {
1035         .cmd_rcgr = 0x42004,
1036         .mnd_width = 8,
1037         .hid_width = 5,
1038         .parent_map = gcc_parent_map_13,
1039         .freq_tbl = ftbl_sdcc1_apps_clk_src,
1040         .clkr.hw.init = &(struct clk_init_data){
1041                 .name = "sdcc1_apps_clk_src",
1042                 .parent_names = gcc_parent_names_13,
1043                 .num_parents = 5,
1044                 .ops = &clk_rcg2_floor_ops,
1045         },
1046 };
1047
1048 static const struct freq_tbl ftbl_sdcc1_ice_core_clk_src[] = {
1049         F(160000000, P_GPLL0_OUT_MAIN, 5, 0, 0),
1050         F(266666667, P_GPLL0_OUT_MAIN, 3, 0, 0),
1051         { }
1052 };
1053
1054 static struct clk_rcg2 sdcc1_ice_core_clk_src = {
1055         .cmd_rcgr = 0x5d000,
1056         .mnd_width = 8,
1057         .hid_width = 5,
1058         .parent_map = gcc_parent_map_3,
1059         .freq_tbl = ftbl_sdcc1_ice_core_clk_src,
1060         .clkr.hw.init = &(struct clk_init_data){
1061                 .name = "sdcc1_ice_core_clk_src",
1062                 .parent_names = gcc_parent_names_3,
1063                 .num_parents = 4,
1064                 .ops = &clk_rcg2_ops,
1065         },
1066 };
1067
1068 static const struct freq_tbl ftbl_sdcc2_apps_clk_src[] = {
1069         F(144000, P_XO, 16, 3, 25),
1070         F(400000, P_XO, 12, 1, 4),
1071         F(20000000, P_GPLL0_OUT_MAIN, 10, 1, 4),
1072         F(25000000, P_GPLL0_OUT_MAIN, 16, 1, 2),
1073         F(50000000, P_GPLL0_OUT_MAIN, 16, 0, 0),
1074         F(100000000, P_GPLL0_OUT_MAIN, 8, 0, 0),
1075         F(177777778, P_GPLL0_OUT_MAIN, 4.5, 0, 0),
1076         F(200000000, P_GPLL0_OUT_MAIN, 4, 0, 0),
1077         { }
1078 };
1079
1080 static struct clk_rcg2 sdcc2_apps_clk_src = {
1081         .cmd_rcgr = 0x43004,
1082         .mnd_width = 8,
1083         .hid_width = 5,
1084         .parent_map = gcc_parent_map_14,
1085         .freq_tbl = ftbl_sdcc2_apps_clk_src,
1086         .clkr.hw.init = &(struct clk_init_data){
1087                 .name = "sdcc2_apps_clk_src",
1088                 .parent_names = gcc_parent_names_14,
1089                 .num_parents = 4,
1090                 .ops = &clk_rcg2_floor_ops,
1091         },
1092 };
1093
1094 static struct clk_rcg2 usb20_mock_utmi_clk_src = {
1095         .cmd_rcgr = 0x41048,
1096         .mnd_width = 0,
1097         .hid_width = 5,
1098         .parent_map = gcc_parent_map_1,
1099         .freq_tbl = ftbl_esc0_clk_src,
1100         .clkr.hw.init = &(struct clk_init_data){
1101                 .name = "usb20_mock_utmi_clk_src",
1102                 .parent_names = gcc_parent_names_1,
1103                 .num_parents = 2,
1104                 .ops = &clk_rcg2_ops,
1105         },
1106 };
1107
1108 static const struct freq_tbl ftbl_usb30_master_clk_src[] = {
1109         F(19200000, P_XO, 1, 0, 0),
1110         F(100000000, P_GPLL0_OUT_MAIN, 8, 0, 0),
1111         F(200000000, P_GPLL0_OUT_MAIN, 4, 0, 0),
1112         F(266666667, P_GPLL0_OUT_MAIN, 3, 0, 0),
1113         { }
1114 };
1115
1116 static struct clk_rcg2 usb30_master_clk_src = {
1117         .cmd_rcgr = 0x39028,
1118         .mnd_width = 8,
1119         .hid_width = 5,
1120         .parent_map = gcc_parent_map_0,
1121         .freq_tbl = ftbl_usb30_master_clk_src,
1122         .clkr.hw.init = &(struct clk_init_data){
1123                 .name = "usb30_master_clk_src",
1124                 .parent_names = gcc_parent_names_0,
1125                 .num_parents = 3,
1126                 .ops = &clk_rcg2_ops,
1127         },
1128 };
1129
1130 static struct clk_rcg2 usb30_mock_utmi_clk_src = {
1131         .cmd_rcgr = 0x3901c,
1132         .mnd_width = 0,
1133         .hid_width = 5,
1134         .parent_map = gcc_parent_map_1,
1135         .freq_tbl = ftbl_esc0_clk_src,
1136         .clkr.hw.init = &(struct clk_init_data){
1137                 .name = "usb30_mock_utmi_clk_src",
1138                 .parent_names = gcc_parent_names_1,
1139                 .num_parents = 2,
1140                 .ops = &clk_rcg2_ops,
1141         },
1142 };
1143
1144 static struct clk_rcg2 usb3_phy_aux_clk_src = {
1145         .cmd_rcgr = 0x3903c,
1146         .mnd_width = 0,
1147         .hid_width = 5,
1148         .parent_map = gcc_parent_map_1,
1149         .freq_tbl = ftbl_pcie_0_aux_clk_src,
1150         .clkr.hw.init = &(struct clk_init_data){
1151                 .name = "usb3_phy_aux_clk_src",
1152                 .parent_names = gcc_parent_names_1,
1153                 .num_parents = 2,
1154                 .ops = &clk_rcg2_ops,
1155         },
1156 };
1157
1158 static const struct freq_tbl ftbl_usb_hs_system_clk_src[] = {
1159         F(19200000, P_XO, 1, 0, 0),
1160         F(80000000, P_GPLL0_OUT_MAIN, 10, 0, 0),
1161         F(100000000, P_GPLL0_OUT_MAIN, 8, 0, 0),
1162         F(133333333, P_GPLL0_OUT_MAIN, 6, 0, 0),
1163         F(177777778, P_GPLL0_OUT_MAIN, 4.5, 0, 0),
1164         { }
1165 };
1166
1167 static struct clk_rcg2 usb_hs_system_clk_src = {
1168         .cmd_rcgr = 0x41010,
1169         .mnd_width = 0,
1170         .hid_width = 5,
1171         .parent_map = gcc_parent_map_3,
1172         .freq_tbl = ftbl_usb_hs_system_clk_src,
1173         .clkr.hw.init = &(struct clk_init_data){
1174                 .name = "usb_hs_system_clk_src",
1175                 .parent_names = gcc_parent_names_3,
1176                 .num_parents = 4,
1177                 .ops = &clk_rcg2_ops,
1178         },
1179 };
1180
1181 static struct clk_rcg2 vsync_clk_src = {
1182         .cmd_rcgr = 0x4d02c,
1183         .mnd_width = 0,
1184         .hid_width = 5,
1185         .parent_map = gcc_parent_map_15,
1186         .freq_tbl = ftbl_esc0_clk_src,
1187         .clkr.hw.init = &(struct clk_init_data){
1188                 .name = "vsync_clk_src",
1189                 .parent_names = gcc_parent_names_15,
1190                 .num_parents = 3,
1191                 .ops = &clk_rcg2_ops,
1192         },
1193 };
1194
1195 static const struct freq_tbl ftbl_cdsp_bimc_clk_src[] = {
1196         F(19200000, P_XO, 1, 0, 0),
1197         F(133333333, P_GPLL0_OUT_MAIN, 6, 0, 0),
1198         F(266666667, P_GPLL0_OUT_MAIN, 3, 0, 0),
1199         F(320000000, P_GPLL0_OUT_MAIN, 2.5, 0, 0),
1200         { }
1201 };
1202
1203 static struct clk_rcg2 cdsp_bimc_clk_src = {
1204         .cmd_rcgr = 0x5e010,
1205         .mnd_width = 0,
1206         .hid_width = 5,
1207         .parent_map = gcc_parent_map_16,
1208         .freq_tbl = ftbl_cdsp_bimc_clk_src,
1209         .clkr.hw.init = &(struct clk_init_data) {
1210                 .name = "cdsp_bimc_clk_src",
1211                 .parent_names = gcc_parent_names_16,
1212                 .num_parents = 4,
1213                 .ops = &clk_rcg2_ops,
1214         },
1215 };
1216
1217 static struct clk_branch gcc_apss_ahb_clk = {
1218         .halt_reg = 0x4601c,
1219         .halt_check = BRANCH_HALT_VOTED,
1220         .clkr = {
1221                 .enable_reg = 0x45004,
1222                 .enable_mask = BIT(14),
1223                 .hw.init = &(struct clk_init_data){
1224                         .name = "gcc_apss_ahb_clk",
1225                         .parent_names = (const char *[]){
1226                                 "apss_ahb_clk_src",
1227                         },
1228                         .num_parents = 1,
1229                         .flags = CLK_SET_RATE_PARENT,
1230                         .ops = &clk_branch2_ops,
1231                 },
1232         },
1233 };
1234
1235 static struct clk_branch gcc_apss_tcu_clk = {
1236         .halt_reg = 0x5b004,
1237         .halt_check = BRANCH_VOTED,
1238         .clkr = {
1239                 .enable_reg = 0x4500c,
1240                 .enable_mask = BIT(1),
1241                 .hw.init = &(struct clk_init_data){
1242                         .name = "gcc_apss_tcu_clk",
1243                         .ops = &clk_branch2_ops,
1244                 },
1245         },
1246 };
1247
1248 static struct clk_branch gcc_bimc_gfx_clk = {
1249         .halt_reg = 0x59034,
1250         .halt_check = BRANCH_HALT,
1251         .clkr = {
1252                 .enable_reg = 0x59034,
1253                 .enable_mask = BIT(0),
1254                 .hw.init = &(struct clk_init_data){
1255                         .name = "gcc_bimc_gfx_clk",
1256                         .ops = &clk_branch2_ops,
1257                         .parent_names = (const char *[]){
1258                                 "gcc_apss_tcu_clk",
1259                         },
1260
1261                 },
1262         },
1263 };
1264
1265 static struct clk_branch gcc_bimc_gpu_clk = {
1266         .halt_reg = 0x59030,
1267         .halt_check = BRANCH_HALT,
1268         .clkr = {
1269                 .enable_reg = 0x59030,
1270                 .enable_mask = BIT(0),
1271                 .hw.init = &(struct clk_init_data){
1272                         .name = "gcc_bimc_gpu_clk",
1273                         .ops = &clk_branch2_ops,
1274                 },
1275         },
1276 };
1277
1278 static struct clk_branch gcc_bimc_cdsp_clk = {
1279         .halt_reg = 0x31030,
1280         .halt_check = BRANCH_HALT,
1281         .clkr = {
1282                 .enable_reg = 0x31030,
1283                 .enable_mask = BIT(0),
1284                 .hw.init = &(struct clk_init_data) {
1285                         .name = "gcc_bimc_cdsp_clk",
1286                         .parent_names = (const char *[]) {
1287                                 "cdsp_bimc_clk_src",
1288                         },
1289                         .num_parents = 1,
1290                         .flags = CLK_SET_RATE_PARENT,
1291                         .ops = &clk_branch2_ops,
1292                 },
1293         },
1294 };
1295
1296 static struct clk_branch gcc_bimc_mdss_clk = {
1297         .halt_reg = 0x31038,
1298         .halt_check = BRANCH_HALT,
1299         .clkr = {
1300                 .enable_reg = 0x31038,
1301                 .enable_mask = BIT(0),
1302                 .hw.init = &(struct clk_init_data){
1303                         .name = "gcc_bimc_mdss_clk",
1304                         .ops = &clk_branch2_ops,
1305                 },
1306         },
1307 };
1308
1309 static struct clk_branch gcc_blsp1_ahb_clk = {
1310         .halt_reg = 0x1008,
1311         .halt_check = BRANCH_HALT_VOTED,
1312         .clkr = {
1313                 .enable_reg = 0x45004,
1314                 .enable_mask = BIT(10),
1315                 .hw.init = &(struct clk_init_data){
1316                         .name = "gcc_blsp1_ahb_clk",
1317                         .ops = &clk_branch2_ops,
1318                 },
1319         },
1320 };
1321
1322 static struct clk_branch gcc_dcc_clk = {
1323         .halt_reg = 0x77004,
1324         .halt_check = BRANCH_HALT,
1325         .clkr = {
1326                 .enable_reg = 0x77004,
1327                 .enable_mask = BIT(0),
1328                 .hw.init = &(struct clk_init_data){
1329                         .name = "gcc_dcc_clk",
1330                         .ops = &clk_branch2_ops,
1331                 },
1332         },
1333 };
1334
1335 static struct clk_branch gcc_dcc_xo_clk = {
1336         .halt_reg = 0x77008,
1337         .halt_check = BRANCH_HALT,
1338         .clkr = {
1339                 .enable_reg = 0x77008,
1340                 .enable_mask = BIT(0),
1341                 .hw.init = &(struct clk_init_data){
1342                         .name = "gcc_dcc_xo_clk",
1343                         .ops = &clk_branch2_ops,
1344                 },
1345         },
1346 };
1347
1348 static struct clk_branch gcc_blsp1_qup0_i2c_apps_clk = {
1349         .halt_reg = 0x6028,
1350         .halt_check = BRANCH_HALT,
1351         .clkr = {
1352                 .enable_reg = 0x6028,
1353                 .enable_mask = BIT(0),
1354                 .hw.init = &(struct clk_init_data){
1355                         .name = "gcc_blsp1_qup0_i2c_apps_clk",
1356                         .parent_names = (const char *[]){
1357                                 "blsp1_qup0_i2c_apps_clk_src",
1358                         },
1359                         .num_parents = 1,
1360                         .flags = CLK_SET_RATE_PARENT,
1361                         .ops = &clk_branch2_ops,
1362                 },
1363         },
1364 };
1365
1366 static struct clk_branch gcc_blsp1_qup0_spi_apps_clk = {
1367         .halt_reg = 0x6024,
1368         .halt_check = BRANCH_HALT,
1369         .clkr = {
1370                 .enable_reg = 0x6024,
1371                 .enable_mask = BIT(0),
1372                 .hw.init = &(struct clk_init_data){
1373                         .name = "gcc_blsp1_qup0_spi_apps_clk",
1374                         .parent_names = (const char *[]){
1375                                 "blsp1_qup0_spi_apps_clk_src",
1376                         },
1377                         .num_parents = 1,
1378                         .flags = CLK_SET_RATE_PARENT,
1379                         .ops = &clk_branch2_ops,
1380                 },
1381         },
1382 };
1383
1384 static struct clk_branch gcc_blsp1_qup1_i2c_apps_clk = {
1385         .halt_reg = 0x2008,
1386         .halt_check = BRANCH_HALT,
1387         .clkr = {
1388                 .enable_reg = 0x2008,
1389                 .enable_mask = BIT(0),
1390                 .hw.init = &(struct clk_init_data){
1391                         .name = "gcc_blsp1_qup1_i2c_apps_clk",
1392                         .parent_names = (const char *[]){
1393                                 "blsp1_qup1_i2c_apps_clk_src",
1394                         },
1395                         .num_parents = 1,
1396                         .flags = CLK_SET_RATE_PARENT,
1397                         .ops = &clk_branch2_ops,
1398                 },
1399         },
1400 };
1401
1402 static struct clk_branch gcc_blsp1_qup1_spi_apps_clk = {
1403         .halt_reg = 0x2004,
1404         .halt_check = BRANCH_HALT,
1405         .clkr = {
1406                 .enable_reg = 0x2004,
1407                 .enable_mask = BIT(0),
1408                 .hw.init = &(struct clk_init_data){
1409                         .name = "gcc_blsp1_qup1_spi_apps_clk",
1410                         .parent_names = (const char *[]){
1411                                 "blsp1_qup1_spi_apps_clk_src",
1412                         },
1413                         .num_parents = 1,
1414                         .flags = CLK_SET_RATE_PARENT,
1415                         .ops = &clk_branch2_ops,
1416                 },
1417         },
1418 };
1419
1420 static struct clk_branch gcc_blsp1_qup2_i2c_apps_clk = {
1421         .halt_reg = 0x3010,
1422         .halt_check = BRANCH_HALT,
1423         .clkr = {
1424                 .enable_reg = 0x3010,
1425                 .enable_mask = BIT(0),
1426                 .hw.init = &(struct clk_init_data){
1427                         .name = "gcc_blsp1_qup2_i2c_apps_clk",
1428                         .parent_names = (const char *[]){
1429                                 "blsp1_qup2_i2c_apps_clk_src",
1430                         },
1431                         .num_parents = 1,
1432                         .flags = CLK_SET_RATE_PARENT,
1433                         .ops = &clk_branch2_ops,
1434                 },
1435         },
1436 };
1437
1438 static struct clk_branch gcc_blsp1_qup2_spi_apps_clk = {
1439         .halt_reg = 0x300c,
1440         .halt_check = BRANCH_HALT,
1441         .clkr = {
1442                 .enable_reg = 0x300c,
1443                 .enable_mask = BIT(0),
1444                 .hw.init = &(struct clk_init_data){
1445                         .name = "gcc_blsp1_qup2_spi_apps_clk",
1446                         .parent_names = (const char *[]){
1447                                 "blsp1_qup2_spi_apps_clk_src",
1448                         },
1449                         .num_parents = 1,
1450                         .flags = CLK_SET_RATE_PARENT,
1451                         .ops = &clk_branch2_ops,
1452                 },
1453         },
1454 };
1455
1456 static struct clk_branch gcc_blsp1_qup3_i2c_apps_clk = {
1457         .halt_reg = 0x4020,
1458         .halt_check = BRANCH_HALT,
1459         .clkr = {
1460                 .enable_reg = 0x4020,
1461                 .enable_mask = BIT(0),
1462                 .hw.init = &(struct clk_init_data){
1463                         .name = "gcc_blsp1_qup3_i2c_apps_clk",
1464                         .parent_names = (const char *[]){
1465                                 "blsp1_qup3_i2c_apps_clk_src",
1466                         },
1467                         .num_parents = 1,
1468                         .flags = CLK_SET_RATE_PARENT,
1469                         .ops = &clk_branch2_ops,
1470                 },
1471         },
1472 };
1473
1474 static struct clk_branch gcc_blsp1_qup3_spi_apps_clk = {
1475         .halt_reg = 0x401c,
1476         .halt_check = BRANCH_HALT,
1477         .clkr = {
1478                 .enable_reg = 0x401c,
1479                 .enable_mask = BIT(0),
1480                 .hw.init = &(struct clk_init_data){
1481                         .name = "gcc_blsp1_qup3_spi_apps_clk",
1482                         .parent_names = (const char *[]){
1483                                 "blsp1_qup3_spi_apps_clk_src",
1484                         },
1485                         .num_parents = 1,
1486                         .flags = CLK_SET_RATE_PARENT,
1487                         .ops = &clk_branch2_ops,
1488                 },
1489         },
1490 };
1491
1492 static struct clk_branch gcc_blsp1_qup4_i2c_apps_clk = {
1493         .halt_reg = 0x5020,
1494         .halt_check = BRANCH_HALT,
1495         .clkr = {
1496                 .enable_reg = 0x5020,
1497                 .enable_mask = BIT(0),
1498                 .hw.init = &(struct clk_init_data){
1499                         .name = "gcc_blsp1_qup4_i2c_apps_clk",
1500                         .parent_names = (const char *[]){
1501                                 "blsp1_qup4_i2c_apps_clk_src",
1502                         },
1503                         .num_parents = 1,
1504                         .flags = CLK_SET_RATE_PARENT,
1505                         .ops = &clk_branch2_ops,
1506                 },
1507         },
1508 };
1509
1510 static struct clk_branch gcc_blsp1_qup4_spi_apps_clk = {
1511         .halt_reg = 0x501c,
1512         .halt_check = BRANCH_HALT,
1513         .clkr = {
1514                 .enable_reg = 0x501c,
1515                 .enable_mask = BIT(0),
1516                 .hw.init = &(struct clk_init_data){
1517                         .name = "gcc_blsp1_qup4_spi_apps_clk",
1518                         .parent_names = (const char *[]){
1519                                 "blsp1_qup4_spi_apps_clk_src",
1520                         },
1521                         .num_parents = 1,
1522                         .flags = CLK_SET_RATE_PARENT,
1523                         .ops = &clk_branch2_ops,
1524                 },
1525         },
1526 };
1527
1528 static struct clk_branch gcc_blsp1_uart0_apps_clk = {
1529         .halt_reg = 0x6004,
1530         .halt_check = BRANCH_HALT,
1531         .clkr = {
1532                 .enable_reg = 0x6004,
1533                 .enable_mask = BIT(0),
1534                 .hw.init = &(struct clk_init_data){
1535                         .name = "gcc_blsp1_uart0_apps_clk",
1536                         .parent_names = (const char *[]){
1537                                 "blsp1_uart0_apps_clk_src",
1538                         },
1539                         .num_parents = 1,
1540                         .flags = CLK_SET_RATE_PARENT,
1541                         .ops = &clk_branch2_ops,
1542                 },
1543         },
1544 };
1545
1546 static struct clk_branch gcc_blsp1_uart1_apps_clk = {
1547         .halt_reg = 0x203c,
1548         .halt_check = BRANCH_HALT,
1549         .clkr = {
1550                 .enable_reg = 0x203c,
1551                 .enable_mask = BIT(0),
1552                 .hw.init = &(struct clk_init_data){
1553                         .name = "gcc_blsp1_uart1_apps_clk",
1554                         .parent_names = (const char *[]){
1555                                 "blsp1_uart1_apps_clk_src",
1556                         },
1557                         .num_parents = 1,
1558                         .flags = CLK_SET_RATE_PARENT,
1559                         .ops = &clk_branch2_ops,
1560                 },
1561         },
1562 };
1563
1564 static struct clk_branch gcc_blsp1_uart2_apps_clk = {
1565         .halt_reg = 0x302c,
1566         .halt_check = BRANCH_HALT,
1567         .clkr = {
1568                 .enable_reg = 0x302c,
1569                 .enable_mask = BIT(0),
1570                 .hw.init = &(struct clk_init_data){
1571                         .name = "gcc_blsp1_uart2_apps_clk",
1572                         .parent_names = (const char *[]){
1573                                 "blsp1_uart2_apps_clk_src",
1574                         },
1575                         .num_parents = 1,
1576                         .flags = CLK_SET_RATE_PARENT,
1577                         .ops = &clk_branch2_ops,
1578                 },
1579         },
1580 };
1581
1582 static struct clk_branch gcc_blsp1_uart3_apps_clk = {
1583         .halt_reg = 0x400c,
1584         .halt_check = BRANCH_HALT,
1585         .clkr = {
1586                 .enable_reg = 0x400c,
1587                 .enable_mask = BIT(0),
1588                 .hw.init = &(struct clk_init_data){
1589                         .name = "gcc_blsp1_uart3_apps_clk",
1590                         .parent_names = (const char *[]){
1591                                 "blsp1_uart3_apps_clk_src",
1592                         },
1593                         .num_parents = 1,
1594                         .flags = CLK_SET_RATE_PARENT,
1595                         .ops = &clk_branch2_ops,
1596                 },
1597         },
1598 };
1599
1600 static struct clk_branch gcc_blsp2_ahb_clk = {
1601         .halt_reg = 0xb008,
1602         .halt_check = BRANCH_HALT_VOTED,
1603         .clkr = {
1604                 .enable_reg = 0x45004,
1605                 .enable_mask = BIT(20),
1606                 .hw.init = &(struct clk_init_data){
1607                         .name = "gcc_blsp2_ahb_clk",
1608                         .ops = &clk_branch2_ops,
1609                 },
1610         },
1611 };
1612
1613 static struct clk_branch gcc_blsp2_qup0_i2c_apps_clk = {
1614         .halt_reg = 0xc008,
1615         .halt_check = BRANCH_HALT,
1616         .clkr = {
1617                 .enable_reg = 0xc008,
1618                 .enable_mask = BIT(0),
1619                 .hw.init = &(struct clk_init_data){
1620                         .name = "gcc_blsp2_qup0_i2c_apps_clk",
1621                         .parent_names = (const char *[]){
1622                                 "blsp2_qup0_i2c_apps_clk_src",
1623                         },
1624                         .num_parents = 1,
1625                         .flags = CLK_SET_RATE_PARENT,
1626                         .ops = &clk_branch2_ops,
1627                 },
1628         },
1629 };
1630
1631 static struct clk_branch gcc_blsp2_qup0_spi_apps_clk = {
1632         .halt_reg = 0xc004,
1633         .halt_check = BRANCH_HALT,
1634         .clkr = {
1635                 .enable_reg = 0xc004,
1636                 .enable_mask = BIT(0),
1637                 .hw.init = &(struct clk_init_data){
1638                         .name = "gcc_blsp2_qup0_spi_apps_clk",
1639                         .parent_names = (const char *[]){
1640                                 "blsp2_qup0_spi_apps_clk_src",
1641                         },
1642                         .num_parents = 1,
1643                         .flags = CLK_SET_RATE_PARENT,
1644                         .ops = &clk_branch2_ops,
1645                 },
1646         },
1647 };
1648
1649 static struct clk_branch gcc_blsp2_uart0_apps_clk = {
1650         .halt_reg = 0xc03c,
1651         .halt_check = BRANCH_HALT,
1652         .clkr = {
1653                 .enable_reg = 0xc03c,
1654                 .enable_mask = BIT(0),
1655                 .hw.init = &(struct clk_init_data){
1656                         .name = "gcc_blsp2_uart0_apps_clk",
1657                         .parent_names = (const char *[]){
1658                                 "blsp2_uart0_apps_clk_src",
1659                         },
1660                         .num_parents = 1,
1661                         .flags = CLK_SET_RATE_PARENT,
1662                         .ops = &clk_branch2_ops,
1663                 },
1664         },
1665 };
1666
1667 static struct clk_branch gcc_boot_rom_ahb_clk = {
1668         .halt_reg = 0x1300c,
1669         .halt_check = BRANCH_HALT_VOTED,
1670         .clkr = {
1671                 .enable_reg = 0x45004,
1672                 .enable_mask = BIT(7),
1673                 .hw.init = &(struct clk_init_data){
1674                         .name = "gcc_boot_rom_ahb_clk",
1675                         .ops = &clk_branch2_ops,
1676                 },
1677         },
1678 };
1679
1680 static struct clk_branch gcc_crypto_ahb_clk = {
1681         .halt_reg = 0x16024,
1682         .halt_check = BRANCH_VOTED,
1683         .clkr = {
1684                 .enable_reg = 0x45004,
1685                 .enable_mask = BIT(0),
1686                 .hw.init = &(struct clk_init_data){
1687                         .name = "gcc_crypto_ahb_clk",
1688                         .ops = &clk_branch2_ops,
1689                 },
1690         },
1691 };
1692
1693 static struct clk_branch gcc_crypto_axi_clk = {
1694         .halt_reg = 0x16020,
1695         .halt_check = BRANCH_VOTED,
1696         .clkr = {
1697                 .enable_reg = 0x45004,
1698                 .enable_mask = BIT(1),
1699                 .hw.init = &(struct clk_init_data){
1700                         .name = "gcc_crypto_axi_clk",
1701                         .ops = &clk_branch2_ops,
1702                 },
1703         },
1704 };
1705
1706 static struct clk_branch gcc_crypto_clk = {
1707         .halt_reg = 0x1601c,
1708         .halt_check = BRANCH_VOTED,
1709         .clkr = {
1710                 .enable_reg = 0x45004,
1711                 .enable_mask = BIT(2),
1712                 .hw.init = &(struct clk_init_data){
1713                         .name = "gcc_crypto_clk",
1714                         .ops = &clk_branch2_ops,
1715                 },
1716         },
1717 };
1718
1719 static struct clk_branch gcc_eth_axi_clk = {
1720         .halt_reg = 0x4e010,
1721         .halt_check = BRANCH_HALT,
1722         .clkr = {
1723                 .enable_reg = 0x4e010,
1724                 .enable_mask = BIT(0),
1725                 .hw.init = &(struct clk_init_data){
1726                         .name = "gcc_eth_axi_clk",
1727                         .ops = &clk_branch2_ops,
1728                 },
1729         },
1730 };
1731
1732 static struct clk_branch gcc_eth_ptp_clk = {
1733         .halt_reg = 0x4e004,
1734         .halt_check = BRANCH_HALT,
1735         .clkr = {
1736                 .enable_reg = 0x4e004,
1737                 .enable_mask = BIT(0),
1738                 .hw.init = &(struct clk_init_data){
1739                         .name = "gcc_eth_ptp_clk",
1740                         .parent_names = (const char *[]){
1741                                 "emac_ptp_clk_src",
1742                         },
1743                         .num_parents = 1,
1744                         .flags = CLK_SET_RATE_PARENT,
1745                         .ops = &clk_branch2_ops,
1746                 },
1747         },
1748 };
1749
1750 static struct clk_branch gcc_eth_rgmii_clk = {
1751         .halt_reg = 0x4e008,
1752         .halt_check = BRANCH_HALT,
1753         .clkr = {
1754                 .enable_reg = 0x4e008,
1755                 .enable_mask = BIT(0),
1756                 .hw.init = &(struct clk_init_data){
1757                         .name = "gcc_eth_rgmii_clk",
1758                         .parent_names = (const char *[]){
1759                                 "emac_clk_src",
1760                         },
1761                         .num_parents = 1,
1762                         .flags = CLK_SET_RATE_PARENT,
1763                         .ops = &clk_branch2_ops,
1764                 },
1765         },
1766 };
1767
1768 static struct clk_branch gcc_eth_slave_ahb_clk = {
1769         .halt_reg = 0x4e00c,
1770         .halt_check = BRANCH_HALT,
1771         .clkr = {
1772                 .enable_reg = 0x4e00c,
1773                 .enable_mask = BIT(0),
1774                 .hw.init = &(struct clk_init_data){
1775                         .name = "gcc_eth_slave_ahb_clk",
1776                         .ops = &clk_branch2_ops,
1777                 },
1778         },
1779 };
1780
1781 static struct clk_branch gcc_geni_ir_s_clk = {
1782         .halt_reg = 0xf008,
1783         .halt_check = BRANCH_HALT,
1784         .clkr = {
1785                 .enable_reg = 0xf008,
1786                 .enable_mask = BIT(0),
1787                 .hw.init = &(struct clk_init_data){
1788                         .name = "gcc_geni_ir_s_clk",
1789                         .ops = &clk_branch2_ops,
1790                 },
1791         },
1792 };
1793
1794 static struct clk_branch gcc_geni_ir_h_clk = {
1795         .halt_reg = 0xf004,
1796         .halt_check = BRANCH_HALT,
1797         .clkr = {
1798                 .enable_reg = 0xf004,
1799                 .enable_mask = BIT(0),
1800                 .hw.init = &(struct clk_init_data){
1801                         .name = "gcc_geni_ir_h_clk",
1802                         .ops = &clk_branch2_ops,
1803                 },
1804         },
1805 };
1806
1807 static struct clk_branch gcc_gfx_tcu_clk = {
1808         .halt_reg = 0x12020,
1809         .halt_check = BRANCH_VOTED,
1810         .clkr = {
1811                 .enable_reg = 0x4500C,
1812                 .enable_mask = BIT(2),
1813                 .hw.init = &(struct clk_init_data){
1814                         .name = "gcc_gfx_tcu_clk",
1815                         .ops = &clk_branch2_ops,
1816                 },
1817         },
1818 };
1819
1820 static struct clk_branch gcc_gfx_tbu_clk = {
1821         .halt_reg = 0x12010,
1822         .halt_check = BRANCH_VOTED,
1823         .clkr = {
1824                 .enable_reg = 0x4500C,
1825                 .enable_mask = BIT(3),
1826                 .hw.init = &(struct clk_init_data){
1827                         .name = "gcc_gfx_tbu_clk",
1828                         .ops = &clk_branch2_ops,
1829                 },
1830         },
1831 };
1832
1833 static struct clk_branch gcc_cdsp_tbu_clk = {
1834         .halt_reg = 0x1203c,
1835         .halt_check = BRANCH_VOTED,
1836         .clkr = {
1837                 .enable_reg = 0x13020,
1838                 .enable_mask = BIT(9),
1839                 .hw.init = &(struct clk_init_data) {
1840                         .name = "gcc_cdsp_tbu_clk",
1841                         .parent_names = (const char *[]) {
1842                                 "cdsp_bimc_clk_src",
1843                         },
1844                         .num_parents = 1,
1845                         .flags = CLK_SET_RATE_PARENT,
1846                         .ops = &clk_branch2_ops,
1847                 },
1848         },
1849 };
1850
1851 static struct clk_branch gcc_gp1_clk = {
1852         .halt_reg = 0x8000,
1853         .halt_check = BRANCH_HALT,
1854         .clkr = {
1855                 .enable_reg = 0x8000,
1856                 .enable_mask = BIT(0),
1857                 .hw.init = &(struct clk_init_data){
1858                         .name = "gcc_gp1_clk",
1859                         .parent_names = (const char *[]){
1860                                 "gp1_clk_src",
1861                         },
1862                         .num_parents = 1,
1863                         .flags = CLK_SET_RATE_PARENT,
1864                         .ops = &clk_branch2_ops,
1865                 },
1866         },
1867 };
1868
1869 static struct clk_branch gcc_gp2_clk = {
1870         .halt_reg = 0x9000,
1871         .halt_check = BRANCH_HALT,
1872         .clkr = {
1873                 .enable_reg = 0x9000,
1874                 .enable_mask = BIT(0),
1875                 .hw.init = &(struct clk_init_data){
1876                         .name = "gcc_gp2_clk",
1877                         .parent_names = (const char *[]){
1878                                 "gp2_clk_src",
1879                         },
1880                         .num_parents = 1,
1881                         .flags = CLK_SET_RATE_PARENT,
1882                         .ops = &clk_branch2_ops,
1883                 },
1884         },
1885 };
1886
1887 static struct clk_branch gcc_gp3_clk = {
1888         .halt_reg = 0xa000,
1889         .halt_check = BRANCH_HALT,
1890         .clkr = {
1891                 .enable_reg = 0xa000,
1892                 .enable_mask = BIT(0),
1893                 .hw.init = &(struct clk_init_data){
1894                         .name = "gcc_gp3_clk",
1895                         .parent_names = (const char *[]){
1896                                 "gp3_clk_src",
1897                         },
1898                         .num_parents = 1,
1899                         .flags = CLK_SET_RATE_PARENT,
1900                         .ops = &clk_branch2_ops,
1901                 },
1902         },
1903 };
1904
1905 static struct clk_branch gcc_gtcu_ahb_clk = {
1906         .halt_reg = 0x12044,
1907         .halt_check = BRANCH_VOTED,
1908         .clkr = {
1909                 .enable_reg = 0x4500c,
1910                 .enable_mask = BIT(13),
1911                 .hw.init = &(struct clk_init_data){
1912                         .name = "gcc_gtcu_ahb_clk",
1913                         .ops = &clk_branch2_ops,
1914                 },
1915         },
1916 };
1917
1918 static struct clk_branch gcc_mdp_tbu_clk = {
1919         .halt_reg = 0x1201c,
1920         .halt_check = BRANCH_VOTED,
1921         .clkr = {
1922                 .enable_reg = 0x4500c,
1923                 .enable_mask = BIT(4),
1924                 .hw.init = &(struct clk_init_data){
1925                         .name = "gcc_mdp_tbu_clk",
1926                         .ops = &clk_branch2_ops,
1927                 },
1928         },
1929 };
1930
1931 static struct clk_branch gcc_mdss_ahb_clk = {
1932         .halt_reg = 0x4d07c,
1933         .halt_check = BRANCH_HALT,
1934         .clkr = {
1935                 .enable_reg = 0x4d07c,
1936                 .enable_mask = BIT(0),
1937                 .hw.init = &(struct clk_init_data){
1938                         .name = "gcc_mdss_ahb_clk",
1939                         .ops = &clk_branch2_ops,
1940                 },
1941         },
1942 };
1943
1944 static struct clk_branch gcc_mdss_axi_clk = {
1945         .halt_reg = 0x4d080,
1946         .halt_check = BRANCH_HALT,
1947         .clkr = {
1948                 .enable_reg = 0x4d080,
1949                 .enable_mask = BIT(0),
1950                 .hw.init = &(struct clk_init_data){
1951                         .name = "gcc_mdss_axi_clk",
1952                         .ops = &clk_branch2_ops,
1953                 },
1954         },
1955 };
1956
1957 static struct clk_branch gcc_mdss_byte0_clk = {
1958         .halt_reg = 0x4d094,
1959         .halt_check = BRANCH_HALT,
1960         .clkr = {
1961                 .enable_reg = 0x4d094,
1962                 .enable_mask = BIT(0),
1963                 .hw.init = &(struct clk_init_data){
1964                         .name = "gcc_mdss_byte0_clk",
1965                         .parent_names = (const char *[]){
1966                                 "byte0_clk_src",
1967                         },
1968                         .num_parents = 1,
1969                         .flags = CLK_SET_RATE_PARENT,
1970                         .ops = &clk_branch2_ops,
1971                 },
1972         },
1973 };
1974
1975 static struct clk_branch gcc_mdss_esc0_clk = {
1976         .halt_reg = 0x4d098,
1977         .halt_check = BRANCH_HALT,
1978         .clkr = {
1979                 .enable_reg = 0x4d098,
1980                 .enable_mask = BIT(0),
1981                 .hw.init = &(struct clk_init_data){
1982                         .name = "gcc_mdss_esc0_clk",
1983                         .parent_names = (const char *[]){
1984                                 "esc0_clk_src",
1985                         },
1986                         .num_parents = 1,
1987                         .flags = CLK_SET_RATE_PARENT,
1988                         .ops = &clk_branch2_ops,
1989                 },
1990         },
1991 };
1992
1993 static struct clk_branch gcc_mdss_hdmi_app_clk = {
1994         .halt_reg = 0x4d0d8,
1995         .halt_check = BRANCH_HALT,
1996         .clkr = {
1997                 .enable_reg = 0x4d0d8,
1998                 .enable_mask = BIT(0),
1999                 .hw.init = &(struct clk_init_data){
2000                         .name = "gcc_mdss_hdmi_app_clk",
2001                         .parent_names = (const char *[]){
2002                                 "hdmi_app_clk_src",
2003                         },
2004                         .num_parents = 1,
2005                         .flags = CLK_SET_RATE_PARENT,
2006                         .ops = &clk_branch2_ops,
2007                 },
2008         },
2009 };
2010
2011 static struct clk_branch gcc_mdss_hdmi_pclk_clk = {
2012         .halt_reg = 0x4d0d4,
2013         .halt_check = BRANCH_HALT,
2014         .clkr = {
2015                 .enable_reg = 0x4d0d4,
2016                 .enable_mask = BIT(0),
2017                 .hw.init = &(struct clk_init_data){
2018                         .name = "gcc_mdss_hdmi_pclk_clk",
2019                         .parent_names = (const char *[]){
2020                                 "hdmi_pclk_clk_src",
2021                         },
2022                         .num_parents = 1,
2023                         .flags = CLK_SET_RATE_PARENT,
2024                         .ops = &clk_branch2_ops,
2025                 },
2026         },
2027 };
2028
2029 static struct clk_branch gcc_mdss_mdp_clk = {
2030         .halt_reg = 0x4d088,
2031         .halt_check = BRANCH_HALT,
2032         .clkr = {
2033                 .enable_reg = 0x4d088,
2034                 .enable_mask = BIT(0),
2035                 .hw.init = &(struct clk_init_data){
2036                         .name = "gcc_mdss_mdp_clk",
2037                         .parent_names = (const char *[]){
2038                                 "mdp_clk_src",
2039                         },
2040                         .num_parents = 1,
2041                         .flags = CLK_SET_RATE_PARENT,
2042                         .ops = &clk_branch2_ops,
2043                 },
2044         },
2045 };
2046
2047 static struct clk_branch gcc_mdss_pclk0_clk = {
2048         .halt_reg = 0x4d084,
2049         .halt_check = BRANCH_HALT,
2050         .clkr = {
2051                 .enable_reg = 0x4d084,
2052                 .enable_mask = BIT(0),
2053                 .hw.init = &(struct clk_init_data){
2054                         .name = "gcc_mdss_pclk0_clk",
2055                         .parent_names = (const char *[]){
2056                                 "pclk0_clk_src",
2057                         },
2058                         .num_parents = 1,
2059                         .flags = CLK_SET_RATE_PARENT,
2060                         .ops = &clk_branch2_ops,
2061                 },
2062         },
2063 };
2064
2065 static struct clk_branch gcc_mdss_vsync_clk = {
2066         .halt_reg = 0x4d090,
2067         .halt_check = BRANCH_HALT,
2068         .clkr = {
2069                 .enable_reg = 0x4d090,
2070                 .enable_mask = BIT(0),
2071                 .hw.init = &(struct clk_init_data){
2072                         .name = "gcc_mdss_vsync_clk",
2073                         .parent_names = (const char *[]){
2074                                 "vsync_clk_src",
2075                         },
2076                         .num_parents = 1,
2077                         .flags = CLK_SET_RATE_PARENT,
2078                         .ops = &clk_branch2_ops,
2079                 },
2080         },
2081 };
2082
2083 static struct clk_branch gcc_oxili_ahb_clk = {
2084         .halt_reg = 0x59028,
2085         .halt_check = BRANCH_HALT,
2086         .clkr = {
2087                 .enable_reg = 0x59028,
2088                 .enable_mask = BIT(0),
2089                 .hw.init = &(struct clk_init_data){
2090                         .name = "gcc_oxili_ahb_clk",
2091                         .ops = &clk_branch2_ops,
2092                 },
2093         },
2094 };
2095
2096 static struct clk_branch gcc_oxili_gfx3d_clk = {
2097         .halt_reg = 0x59020,
2098         .halt_check = BRANCH_HALT,
2099         .clkr = {
2100                 .enable_reg = 0x59020,
2101                 .enable_mask = BIT(0),
2102                 .hw.init = &(struct clk_init_data){
2103                         .name = "gcc_oxili_gfx3d_clk",
2104                         .parent_names = (const char *[]){
2105                                 "gfx3d_clk_src",
2106                         },
2107                         .num_parents = 1,
2108                         .flags = CLK_SET_RATE_PARENT,
2109                         .ops = &clk_branch2_ops,
2110                 },
2111         },
2112 };
2113
2114 static struct clk_branch gcc_pcie_0_aux_clk = {
2115         .halt_reg = 0x3e014,
2116         .halt_check = BRANCH_HALT_VOTED,
2117         .clkr = {
2118                 .enable_reg = 0x45004,
2119                 .enable_mask = BIT(27),
2120                 .hw.init = &(struct clk_init_data){
2121                         .name = "gcc_pcie_0_aux_clk",
2122                         .parent_names = (const char *[]){
2123                                 "pcie_0_aux_clk_src",
2124                         },
2125                         .num_parents = 1,
2126                         .flags = CLK_SET_RATE_PARENT,
2127                         .ops = &clk_branch2_ops,
2128                 },
2129         },
2130 };
2131
2132 static struct clk_branch gcc_pcie_0_cfg_ahb_clk = {
2133         .halt_reg = 0x3e008,
2134         .halt_check = BRANCH_HALT_VOTED,
2135         .clkr = {
2136                 .enable_reg = 0x45004,
2137                 .enable_mask = BIT(11),
2138                 .hw.init = &(struct clk_init_data){
2139                         .name = "gcc_pcie_0_cfg_ahb_clk",
2140                         .ops = &clk_branch2_ops,
2141                 },
2142         },
2143 };
2144
2145 static struct clk_branch gcc_pcie_0_mstr_axi_clk = {
2146         .halt_reg = 0x3e018,
2147         .halt_check = BRANCH_HALT_VOTED,
2148         .clkr = {
2149                 .enable_reg = 0x45004,
2150                 .enable_mask = BIT(18),
2151                 .hw.init = &(struct clk_init_data){
2152                         .name = "gcc_pcie_0_mstr_axi_clk",
2153                         .ops = &clk_branch2_ops,
2154                 },
2155         },
2156 };
2157
2158 static struct clk_branch gcc_pcie_0_pipe_clk = {
2159         .halt_reg = 0x3e00c,
2160         .halt_check = BRANCH_HALT_VOTED,
2161         .clkr = {
2162                 .enable_reg = 0x45004,
2163                 .enable_mask = BIT(28),
2164                 .hw.init = &(struct clk_init_data){
2165                         .name = "gcc_pcie_0_pipe_clk",
2166                         .parent_names = (const char *[]){
2167                                 "pcie_0_pipe_clk_src",
2168                         },
2169                         .num_parents = 1,
2170                         .flags = CLK_SET_RATE_PARENT,
2171                         .ops = &clk_branch2_ops,
2172                 },
2173         },
2174 };
2175
2176 static struct clk_branch gcc_pcie_0_slv_axi_clk = {
2177         .halt_reg = 0x3e010,
2178         .halt_check = BRANCH_HALT_VOTED,
2179         .clkr = {
2180                 .enable_reg = 0x45004,
2181                 .enable_mask = BIT(22),
2182                 .hw.init = &(struct clk_init_data){
2183                         .name = "gcc_pcie_0_slv_axi_clk",
2184                         .ops = &clk_branch2_ops,
2185                 },
2186         },
2187 };
2188
2189 static struct clk_branch gcc_pcnoc_usb2_clk = {
2190         .halt_reg = 0x27008,
2191         .halt_check = BRANCH_HALT,
2192         .clkr = {
2193                 .enable_reg = 0x27008,
2194                 .enable_mask = BIT(0),
2195                 .hw.init = &(struct clk_init_data){
2196                         .name = "gcc_pcnoc_usb2_clk",
2197                         .flags = CLK_IS_CRITICAL,
2198                         .ops = &clk_branch2_ops,
2199                 },
2200         },
2201 };
2202
2203 static struct clk_branch gcc_pcnoc_usb3_clk = {
2204         .halt_reg = 0x2700c,
2205         .halt_check = BRANCH_HALT,
2206         .clkr = {
2207                 .enable_reg = 0x2700c,
2208                 .enable_mask = BIT(0),
2209                 .hw.init = &(struct clk_init_data){
2210                         .name = "gcc_pcnoc_usb3_clk",
2211                         .flags = CLK_IS_CRITICAL,
2212                         .ops = &clk_branch2_ops,
2213                 },
2214         },
2215 };
2216
2217 static struct clk_branch gcc_pdm2_clk = {
2218         .halt_reg = 0x4400c,
2219         .halt_check = BRANCH_HALT,
2220         .clkr = {
2221                 .enable_reg = 0x4400c,
2222                 .enable_mask = BIT(0),
2223                 .hw.init = &(struct clk_init_data){
2224                         .name = "gcc_pdm2_clk",
2225                         .parent_names = (const char *[]){
2226                                 "pdm2_clk_src",
2227                         },
2228                         .num_parents = 1,
2229                         .flags = CLK_SET_RATE_PARENT,
2230                         .ops = &clk_branch2_ops,
2231                 },
2232         },
2233 };
2234
2235 static struct clk_branch gcc_pdm_ahb_clk = {
2236         .halt_reg = 0x44004,
2237         .halt_check = BRANCH_HALT,
2238         .clkr = {
2239                 .enable_reg = 0x44004,
2240                 .enable_mask = BIT(0),
2241                 .hw.init = &(struct clk_init_data){
2242                         .name = "gcc_pdm_ahb_clk",
2243                         .ops = &clk_branch2_ops,
2244                 },
2245         },
2246 };
2247
2248 static struct clk_branch gcc_prng_ahb_clk = {
2249         .halt_reg = 0x13004,
2250         .halt_check = BRANCH_HALT_VOTED,
2251         .clkr = {
2252                 .enable_reg = 0x45004,
2253                 .enable_mask = BIT(8),
2254                 .hw.init = &(struct clk_init_data){
2255                         .name = "gcc_prng_ahb_clk",
2256                         .ops = &clk_branch2_ops,
2257                 },
2258         },
2259 };
2260
2261 /* PWM clks do not have XO as parent as src clk is a balance root */
2262 static struct clk_branch gcc_pwm0_xo512_clk = {
2263         .halt_reg = 0x44018,
2264         .halt_check = BRANCH_HALT,
2265         .clkr = {
2266                 .enable_reg = 0x44018,
2267                 .enable_mask = BIT(0),
2268                 .hw.init = &(struct clk_init_data){
2269                         .name = "gcc_pwm0_xo512_clk",
2270                         .ops = &clk_branch2_ops,
2271                 },
2272         },
2273 };
2274
2275 static struct clk_branch gcc_pwm1_xo512_clk = {
2276         .halt_reg = 0x49004,
2277         .halt_check = BRANCH_HALT,
2278         .clkr = {
2279                 .enable_reg = 0x49004,
2280                 .enable_mask = BIT(0),
2281                 .hw.init = &(struct clk_init_data){
2282                         .name = "gcc_pwm1_xo512_clk",
2283                         .ops = &clk_branch2_ops,
2284                 },
2285         },
2286 };
2287
2288 static struct clk_branch gcc_pwm2_xo512_clk = {
2289         .halt_reg = 0x4a004,
2290         .halt_check = BRANCH_HALT,
2291         .clkr = {
2292                 .enable_reg = 0x4a004,
2293                 .enable_mask = BIT(0),
2294                 .hw.init = &(struct clk_init_data){
2295                         .name = "gcc_pwm2_xo512_clk",
2296                         .ops = &clk_branch2_ops,
2297                 },
2298         },
2299 };
2300
2301 static struct clk_branch gcc_qdss_dap_clk = {
2302         .halt_reg = 0x29084,
2303         .halt_check = BRANCH_VOTED,
2304         .clkr = {
2305                 .enable_reg = 0x45004,
2306                 .enable_mask = BIT(21),
2307                 .hw.init = &(struct clk_init_data){
2308                         .name = "gcc_qdss_dap_clk",
2309                         .ops = &clk_branch2_ops,
2310                 },
2311         },
2312 };
2313
2314 static struct clk_branch gcc_sdcc1_ahb_clk = {
2315         .halt_reg = 0x4201c,
2316         .halt_check = BRANCH_HALT,
2317         .clkr = {
2318                 .enable_reg = 0x4201c,
2319                 .enable_mask = BIT(0),
2320                 .hw.init = &(struct clk_init_data){
2321                         .name = "gcc_sdcc1_ahb_clk",
2322                         .ops = &clk_branch2_ops,
2323                 },
2324         },
2325 };
2326
2327 static struct clk_branch gcc_sdcc1_apps_clk = {
2328         .halt_reg = 0x42018,
2329         .halt_check = BRANCH_HALT,
2330         .clkr = {
2331                 .enable_reg = 0x42018,
2332                 .enable_mask = BIT(0),
2333                 .hw.init = &(struct clk_init_data){
2334                         .name = "gcc_sdcc1_apps_clk",
2335                         .parent_names = (const char *[]){
2336                                 "sdcc1_apps_clk_src",
2337                         },
2338                         .num_parents = 1,
2339                         .flags = CLK_SET_RATE_PARENT,
2340                         .ops = &clk_branch2_ops,
2341                 },
2342         },
2343 };
2344
2345 static struct clk_branch gcc_sdcc1_ice_core_clk = {
2346         .halt_reg = 0x5d014,
2347         .halt_check = BRANCH_HALT,
2348         .clkr = {
2349                 .enable_reg = 0x5d014,
2350                 .enable_mask = BIT(0),
2351                 .hw.init = &(struct clk_init_data){
2352                         .name = "gcc_sdcc1_ice_core_clk",
2353                         .parent_names = (const char *[]){
2354                                 "sdcc1_ice_core_clk_src",
2355                         },
2356                         .num_parents = 1,
2357                         .flags = CLK_SET_RATE_PARENT,
2358                         .ops = &clk_branch2_ops,
2359                 },
2360         },
2361 };
2362
2363 static struct clk_branch gcc_cdsp_cfg_ahb_clk = {
2364         .halt_reg = 0x5e004,
2365         .halt_check = BRANCH_HALT,
2366         .clkr = {
2367                 .enable_reg = 0x5e004,
2368                 .enable_mask = BIT(0),
2369                 .hw.init = &(struct clk_init_data) {
2370                         .name = "gcc_cdsp_cfg_ahb_cbcr",
2371                         .ops = &clk_branch2_ops,
2372                 },
2373         },
2374 };
2375
2376 static struct clk_branch gcc_sdcc2_ahb_clk = {
2377         .halt_reg = 0x4301c,
2378         .halt_check = BRANCH_HALT,
2379         .clkr = {
2380                 .enable_reg = 0x4301c,
2381                 .enable_mask = BIT(0),
2382                 .hw.init = &(struct clk_init_data){
2383                         .name = "gcc_sdcc2_ahb_clk",
2384                         .ops = &clk_branch2_ops,
2385                 },
2386         },
2387 };
2388
2389 static struct clk_branch gcc_sdcc2_apps_clk = {
2390         .halt_reg = 0x43018,
2391         .halt_check = BRANCH_HALT,
2392         .clkr = {
2393                 .enable_reg = 0x43018,
2394                 .enable_mask = BIT(0),
2395                 .hw.init = &(struct clk_init_data){
2396                         .name = "gcc_sdcc2_apps_clk",
2397                         .parent_names = (const char *[]){
2398                                 "sdcc2_apps_clk_src",
2399                         },
2400                         .num_parents = 1,
2401                         .flags = CLK_SET_RATE_PARENT,
2402                         .ops = &clk_branch2_ops,
2403                 },
2404         },
2405 };
2406
2407 static struct clk_branch gcc_smmu_cfg_clk = {
2408         .halt_reg = 0x12038,
2409         .halt_check = BRANCH_VOTED,
2410         .clkr = {
2411                 .enable_reg = 0x3600C,
2412                 .enable_mask = BIT(12),
2413                 .hw.init = &(struct clk_init_data){
2414                         .name = "gcc_smmu_cfg_clk",
2415                         .ops = &clk_branch2_ops,
2416                 },
2417         },
2418 };
2419
2420 static struct clk_branch gcc_sys_noc_usb3_clk = {
2421         .halt_reg = 0x26014,
2422         .halt_check = BRANCH_HALT,
2423         .clkr = {
2424                 .enable_reg = 0x26014,
2425                 .enable_mask = BIT(0),
2426                 .hw.init = &(struct clk_init_data){
2427                         .name = "gcc_sys_noc_usb3_clk",
2428                         .parent_names = (const char *[]){
2429                                 "usb30_master_clk_src",
2430                         },
2431                         .num_parents = 1,
2432                         .ops = &clk_branch2_ops,
2433                 },
2434         },
2435 };
2436
2437 static struct clk_branch gcc_usb_hs_inactivity_timers_clk = {
2438         .halt_reg = 0x4100C,
2439         .halt_check = BRANCH_HALT,
2440         .clkr = {
2441                 .enable_reg = 0x4100C,
2442                 .enable_mask = BIT(0),
2443                 .hw.init = &(struct clk_init_data){
2444                         .name = "gcc_usb_hs_inactivity_timers_clk",
2445                         .ops = &clk_branch2_ops,
2446                 },
2447         },
2448 };
2449
2450 static struct clk_branch gcc_usb20_mock_utmi_clk = {
2451         .halt_reg = 0x41044,
2452         .halt_check = BRANCH_HALT,
2453         .clkr = {
2454                 .enable_reg = 0x41044,
2455                 .enable_mask = BIT(0),
2456                 .hw.init = &(struct clk_init_data){
2457                         .name = "gcc_usb20_mock_utmi_clk",
2458                         .parent_names = (const char *[]){
2459                                 "usb20_mock_utmi_clk_src",
2460                         },
2461                         .num_parents = 1,
2462                         .flags = CLK_SET_RATE_PARENT,
2463                         .ops = &clk_branch2_ops,
2464                 },
2465         },
2466 };
2467
2468 static struct clk_branch gcc_usb2a_phy_sleep_clk = {
2469         .halt_reg = 0x4102c,
2470         .halt_check = BRANCH_HALT,
2471         .clkr = {
2472                 .enable_reg = 0x4102c,
2473                 .enable_mask = BIT(0),
2474                 .hw.init = &(struct clk_init_data){
2475                         .name = "gcc_usb2a_phy_sleep_clk",
2476                         .ops = &clk_branch2_ops,
2477                 },
2478         },
2479 };
2480
2481 static struct clk_branch gcc_usb30_master_clk = {
2482         .halt_reg = 0x3900c,
2483         .halt_check = BRANCH_HALT,
2484         .clkr = {
2485                 .enable_reg = 0x3900c,
2486                 .enable_mask = BIT(0),
2487                 .hw.init = &(struct clk_init_data){
2488                         .name = "gcc_usb30_master_clk",
2489                         .parent_names = (const char *[]){
2490                                 "usb30_master_clk_src",
2491                         },
2492                         .num_parents = 1,
2493                         .flags = CLK_SET_RATE_PARENT,
2494                         .ops = &clk_branch2_ops,
2495                 },
2496         },
2497 };
2498
2499 static struct clk_branch gcc_usb30_mock_utmi_clk = {
2500         .halt_reg = 0x39014,
2501         .halt_check = BRANCH_HALT,
2502         .clkr = {
2503                 .enable_reg = 0x39014,
2504                 .enable_mask = BIT(0),
2505                 .hw.init = &(struct clk_init_data){
2506                         .name = "gcc_usb30_mock_utmi_clk",
2507                         .parent_names = (const char *[]){
2508                                 "usb30_mock_utmi_clk_src",
2509                         },
2510                         .num_parents = 1,
2511                         .flags = CLK_SET_RATE_PARENT,
2512                         .ops = &clk_branch2_ops,
2513                 },
2514         },
2515 };
2516
2517 static struct clk_branch gcc_usb30_sleep_clk = {
2518         .halt_reg = 0x39010,
2519         .halt_check = BRANCH_HALT,
2520         .clkr = {
2521                 .enable_reg = 0x39010,
2522                 .enable_mask = BIT(0),
2523                 .hw.init = &(struct clk_init_data){
2524                         .name = "gcc_usb30_sleep_clk",
2525                         .ops = &clk_branch2_ops,
2526                 },
2527         },
2528 };
2529
2530 static struct clk_branch gcc_usb3_phy_aux_clk = {
2531         .halt_reg = 0x39044,
2532         .halt_check = BRANCH_HALT,
2533         .clkr = {
2534                 .enable_reg = 0x39044,
2535                 .enable_mask = BIT(0),
2536                 .hw.init = &(struct clk_init_data){
2537                         .name = "gcc_usb3_phy_aux_clk",
2538                         .parent_names = (const char *[]){
2539                                 "usb3_phy_aux_clk_src",
2540                         },
2541                         .num_parents = 1,
2542                         .flags = CLK_SET_RATE_PARENT,
2543                         .ops = &clk_branch2_ops,
2544                 },
2545         },
2546 };
2547
2548 static struct clk_branch gcc_usb3_phy_pipe_clk = {
2549         .halt_check = BRANCH_HALT_SKIP,
2550         .clkr = {
2551                 .enable_reg = 0x39018,
2552                 .enable_mask = BIT(0),
2553                 .hw.init = &(struct clk_init_data){
2554                         .name = "gcc_usb3_phy_pipe_clk",
2555                         .ops = &clk_branch2_ops,
2556                 },
2557         },
2558 };
2559
2560 static struct clk_branch gcc_usb_hs_phy_cfg_ahb_clk = {
2561         .halt_reg = 0x41030,
2562         .halt_check = BRANCH_HALT,
2563         .clkr = {
2564                 .enable_reg = 0x41030,
2565                 .enable_mask = BIT(0),
2566                 .hw.init = &(struct clk_init_data){
2567                         .name = "gcc_usb_hs_phy_cfg_ahb_clk",
2568                         .ops = &clk_branch2_ops,
2569                 },
2570         },
2571 };
2572
2573 static struct clk_branch gcc_usb_hs_system_clk = {
2574         .halt_reg = 0x41004,
2575         .halt_check = BRANCH_HALT,
2576         .clkr = {
2577                 .enable_reg = 0x41004,
2578                 .enable_mask = BIT(0),
2579                 .hw.init = &(struct clk_init_data){
2580                         .name = "gcc_usb_hs_system_clk",
2581                         .parent_names = (const char *[]){
2582                                 "usb_hs_system_clk_src",
2583                         },
2584                         .num_parents = 1,
2585                         .flags = CLK_SET_RATE_PARENT,
2586                         .ops = &clk_branch2_ops,
2587                 },
2588         },
2589 };
2590
2591 static struct clk_branch gcc_wdsp_q6ss_ahbs_clk = {
2592         .halt_reg = 0x1e004,
2593         .halt_check = BRANCH_HALT,
2594         .clkr = {
2595                 .enable_reg = 0x1e004,
2596                 .enable_mask = BIT(0),
2597                 .hw.init = &(struct clk_init_data){
2598                         .name = "gcc_wdsp_q6ss_ahbs_clk",
2599                         .ops = &clk_branch2_ops,
2600                 },
2601         },
2602 };
2603
2604 static struct clk_branch gcc_wdsp_q6ss_axim_clk = {
2605         .halt_reg = 0x1e008,
2606         .halt_check = BRANCH_HALT,
2607         .clkr = {
2608                 .enable_reg = 0x1e008,
2609                 .enable_mask = BIT(0),
2610                 .hw.init = &(struct clk_init_data){
2611                         .name = "gcc_wdsp_q6ss_axim_clk",
2612                         .ops = &clk_branch2_ops,
2613                 },
2614         },
2615 };
2616
2617 static struct clk_hw *gcc_qcs404_hws[] = {
2618         &cxo.hw,
2619 };
2620
2621 static struct clk_regmap *gcc_qcs404_clocks[] = {
2622         [GCC_APSS_AHB_CLK_SRC] = &apss_ahb_clk_src.clkr,
2623         [GCC_BLSP1_QUP0_I2C_APPS_CLK_SRC] = &blsp1_qup0_i2c_apps_clk_src.clkr,
2624         [GCC_BLSP1_QUP0_SPI_APPS_CLK_SRC] = &blsp1_qup0_spi_apps_clk_src.clkr,
2625         [GCC_BLSP1_QUP1_I2C_APPS_CLK_SRC] = &blsp1_qup1_i2c_apps_clk_src.clkr,
2626         [GCC_BLSP1_QUP1_SPI_APPS_CLK_SRC] = &blsp1_qup1_spi_apps_clk_src.clkr,
2627         [GCC_BLSP1_QUP2_I2C_APPS_CLK_SRC] = &blsp1_qup2_i2c_apps_clk_src.clkr,
2628         [GCC_BLSP1_QUP2_SPI_APPS_CLK_SRC] = &blsp1_qup2_spi_apps_clk_src.clkr,
2629         [GCC_BLSP1_QUP3_I2C_APPS_CLK_SRC] = &blsp1_qup3_i2c_apps_clk_src.clkr,
2630         [GCC_BLSP1_QUP3_SPI_APPS_CLK_SRC] = &blsp1_qup3_spi_apps_clk_src.clkr,
2631         [GCC_BLSP1_QUP4_I2C_APPS_CLK_SRC] = &blsp1_qup4_i2c_apps_clk_src.clkr,
2632         [GCC_BLSP1_QUP4_SPI_APPS_CLK_SRC] = &blsp1_qup4_spi_apps_clk_src.clkr,
2633         [GCC_BLSP1_UART0_APPS_CLK_SRC] = &blsp1_uart0_apps_clk_src.clkr,
2634         [GCC_BLSP1_UART1_APPS_CLK_SRC] = &blsp1_uart1_apps_clk_src.clkr,
2635         [GCC_BLSP1_UART2_APPS_CLK_SRC] = &blsp1_uart2_apps_clk_src.clkr,
2636         [GCC_BLSP1_UART3_APPS_CLK_SRC] = &blsp1_uart3_apps_clk_src.clkr,
2637         [GCC_BLSP2_QUP0_I2C_APPS_CLK_SRC] = &blsp2_qup0_i2c_apps_clk_src.clkr,
2638         [GCC_BLSP2_QUP0_SPI_APPS_CLK_SRC] = &blsp2_qup0_spi_apps_clk_src.clkr,
2639         [GCC_BLSP2_UART0_APPS_CLK_SRC] = &blsp2_uart0_apps_clk_src.clkr,
2640         [GCC_BYTE0_CLK_SRC] = &byte0_clk_src.clkr,
2641         [GCC_EMAC_CLK_SRC] = &emac_clk_src.clkr,
2642         [GCC_EMAC_PTP_CLK_SRC] = &emac_ptp_clk_src.clkr,
2643         [GCC_ESC0_CLK_SRC] = &esc0_clk_src.clkr,
2644         [GCC_APSS_AHB_CLK] = &gcc_apss_ahb_clk.clkr,
2645         [GCC_BIMC_GFX_CLK] = &gcc_bimc_gfx_clk.clkr,
2646         [GCC_BIMC_CDSP_CLK] = &gcc_bimc_cdsp_clk.clkr,
2647         [GCC_BIMC_MDSS_CLK] = &gcc_bimc_mdss_clk.clkr,
2648         [GCC_BLSP1_AHB_CLK] = &gcc_blsp1_ahb_clk.clkr,
2649         [GCC_BLSP1_QUP0_I2C_APPS_CLK] = &gcc_blsp1_qup0_i2c_apps_clk.clkr,
2650         [GCC_BLSP1_QUP0_SPI_APPS_CLK] = &gcc_blsp1_qup0_spi_apps_clk.clkr,
2651         [GCC_BLSP1_QUP1_I2C_APPS_CLK] = &gcc_blsp1_qup1_i2c_apps_clk.clkr,
2652         [GCC_BLSP1_QUP1_SPI_APPS_CLK] = &gcc_blsp1_qup1_spi_apps_clk.clkr,
2653         [GCC_BLSP1_QUP2_I2C_APPS_CLK] = &gcc_blsp1_qup2_i2c_apps_clk.clkr,
2654         [GCC_BLSP1_QUP2_SPI_APPS_CLK] = &gcc_blsp1_qup2_spi_apps_clk.clkr,
2655         [GCC_BLSP1_QUP3_I2C_APPS_CLK] = &gcc_blsp1_qup3_i2c_apps_clk.clkr,
2656         [GCC_BLSP1_QUP3_SPI_APPS_CLK] = &gcc_blsp1_qup3_spi_apps_clk.clkr,
2657         [GCC_BLSP1_QUP4_I2C_APPS_CLK] = &gcc_blsp1_qup4_i2c_apps_clk.clkr,
2658         [GCC_BLSP1_QUP4_SPI_APPS_CLK] = &gcc_blsp1_qup4_spi_apps_clk.clkr,
2659         [GCC_BLSP1_UART0_APPS_CLK] = &gcc_blsp1_uart0_apps_clk.clkr,
2660         [GCC_BLSP1_UART1_APPS_CLK] = &gcc_blsp1_uart1_apps_clk.clkr,
2661         [GCC_BLSP1_UART2_APPS_CLK] = &gcc_blsp1_uart2_apps_clk.clkr,
2662         [GCC_BLSP1_UART3_APPS_CLK] = &gcc_blsp1_uart3_apps_clk.clkr,
2663         [GCC_BLSP2_AHB_CLK] = &gcc_blsp2_ahb_clk.clkr,
2664         [GCC_BLSP2_QUP0_I2C_APPS_CLK] = &gcc_blsp2_qup0_i2c_apps_clk.clkr,
2665         [GCC_BLSP2_QUP0_SPI_APPS_CLK] = &gcc_blsp2_qup0_spi_apps_clk.clkr,
2666         [GCC_BLSP2_UART0_APPS_CLK] = &gcc_blsp2_uart0_apps_clk.clkr,
2667         [GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr,
2668         [GCC_ETH_AXI_CLK] = &gcc_eth_axi_clk.clkr,
2669         [GCC_ETH_PTP_CLK] = &gcc_eth_ptp_clk.clkr,
2670         [GCC_ETH_RGMII_CLK] = &gcc_eth_rgmii_clk.clkr,
2671         [GCC_ETH_SLAVE_AHB_CLK] = &gcc_eth_slave_ahb_clk.clkr,
2672         [GCC_GENI_IR_S_CLK] = &gcc_geni_ir_s_clk.clkr,
2673         [GCC_GENI_IR_H_CLK] = &gcc_geni_ir_h_clk.clkr,
2674         [GCC_GP1_CLK] = &gcc_gp1_clk.clkr,
2675         [GCC_GP2_CLK] = &gcc_gp2_clk.clkr,
2676         [GCC_GP3_CLK] = &gcc_gp3_clk.clkr,
2677         [GCC_MDSS_AHB_CLK] = &gcc_mdss_ahb_clk.clkr,
2678         [GCC_MDSS_AXI_CLK] = &gcc_mdss_axi_clk.clkr,
2679         [GCC_MDSS_BYTE0_CLK] = &gcc_mdss_byte0_clk.clkr,
2680         [GCC_MDSS_ESC0_CLK] = &gcc_mdss_esc0_clk.clkr,
2681         [GCC_MDSS_HDMI_APP_CLK] = &gcc_mdss_hdmi_app_clk.clkr,
2682         [GCC_MDSS_HDMI_PCLK_CLK] = &gcc_mdss_hdmi_pclk_clk.clkr,
2683         [GCC_MDSS_MDP_CLK] = &gcc_mdss_mdp_clk.clkr,
2684         [GCC_MDSS_PCLK0_CLK] = &gcc_mdss_pclk0_clk.clkr,
2685         [GCC_MDSS_VSYNC_CLK] = &gcc_mdss_vsync_clk.clkr,
2686         [GCC_OXILI_AHB_CLK] = &gcc_oxili_ahb_clk.clkr,
2687         [GCC_OXILI_GFX3D_CLK] = &gcc_oxili_gfx3d_clk.clkr,
2688         [GCC_PCIE_0_AUX_CLK] = &gcc_pcie_0_aux_clk.clkr,
2689         [GCC_PCIE_0_CFG_AHB_CLK] = &gcc_pcie_0_cfg_ahb_clk.clkr,
2690         [GCC_PCIE_0_MSTR_AXI_CLK] = &gcc_pcie_0_mstr_axi_clk.clkr,
2691         [GCC_PCIE_0_PIPE_CLK] = &gcc_pcie_0_pipe_clk.clkr,
2692         [GCC_PCIE_0_SLV_AXI_CLK] = &gcc_pcie_0_slv_axi_clk.clkr,
2693         [GCC_PCNOC_USB2_CLK] = &gcc_pcnoc_usb2_clk.clkr,
2694         [GCC_PCNOC_USB3_CLK] = &gcc_pcnoc_usb3_clk.clkr,
2695         [GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr,
2696         [GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr,
2697         [GCC_PRNG_AHB_CLK] = &gcc_prng_ahb_clk.clkr,
2698         [GCC_PWM0_XO512_CLK] = &gcc_pwm0_xo512_clk.clkr,
2699         [GCC_PWM1_XO512_CLK] = &gcc_pwm1_xo512_clk.clkr,
2700         [GCC_PWM2_XO512_CLK] = &gcc_pwm2_xo512_clk.clkr,
2701         [GCC_SDCC1_AHB_CLK] = &gcc_sdcc1_ahb_clk.clkr,
2702         [GCC_SDCC1_APPS_CLK] = &gcc_sdcc1_apps_clk.clkr,
2703         [GCC_SDCC1_ICE_CORE_CLK] = &gcc_sdcc1_ice_core_clk.clkr,
2704         [GCC_CDSP_CFG_AHB_CLK] = &gcc_cdsp_cfg_ahb_clk.clkr,
2705         [GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr,
2706         [GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr,
2707         [GCC_SYS_NOC_USB3_CLK] = &gcc_sys_noc_usb3_clk.clkr,
2708         [GCC_USB20_MOCK_UTMI_CLK] = &gcc_usb20_mock_utmi_clk.clkr,
2709         [GCC_USB2A_PHY_SLEEP_CLK] = &gcc_usb2a_phy_sleep_clk.clkr,
2710         [GCC_USB30_MASTER_CLK] = &gcc_usb30_master_clk.clkr,
2711         [GCC_USB30_MOCK_UTMI_CLK] = &gcc_usb30_mock_utmi_clk.clkr,
2712         [GCC_USB30_SLEEP_CLK] = &gcc_usb30_sleep_clk.clkr,
2713         [GCC_USB3_PHY_AUX_CLK] = &gcc_usb3_phy_aux_clk.clkr,
2714         [GCC_USB3_PHY_PIPE_CLK] = &gcc_usb3_phy_pipe_clk.clkr,
2715         [GCC_USB_HS_PHY_CFG_AHB_CLK] = &gcc_usb_hs_phy_cfg_ahb_clk.clkr,
2716         [GCC_USB_HS_SYSTEM_CLK] = &gcc_usb_hs_system_clk.clkr,
2717         [GCC_GFX3D_CLK_SRC] = &gfx3d_clk_src.clkr,
2718         [GCC_GP1_CLK_SRC] = &gp1_clk_src.clkr,
2719         [GCC_GP2_CLK_SRC] = &gp2_clk_src.clkr,
2720         [GCC_GP3_CLK_SRC] = &gp3_clk_src.clkr,
2721         [GCC_GPLL0_OUT_MAIN] = &gpll0_out_main.clkr,
2722         [GCC_GPLL0_AO_OUT_MAIN] = &gpll0_ao_out_main.clkr,
2723         [GCC_GPLL0_SLEEP_CLK_SRC] = &gpll0_sleep_clk_src.clkr,
2724         [GCC_GPLL1_OUT_MAIN] = &gpll1_out_main.clkr,
2725         [GCC_GPLL3_OUT_MAIN] = &gpll3_out_main.clkr,
2726         [GCC_GPLL4_OUT_MAIN] = &gpll4_out_main.clkr,
2727         [GCC_GPLL6] = &gpll6.clkr,
2728         [GCC_GPLL6_OUT_AUX] = &gpll6_out_aux,
2729         [GCC_HDMI_APP_CLK_SRC] = &hdmi_app_clk_src.clkr,
2730         [GCC_HDMI_PCLK_CLK_SRC] = &hdmi_pclk_clk_src.clkr,
2731         [GCC_MDP_CLK_SRC] = &mdp_clk_src.clkr,
2732         [GCC_PCIE_0_AUX_CLK_SRC] = &pcie_0_aux_clk_src.clkr,
2733         [GCC_PCIE_0_PIPE_CLK_SRC] = &pcie_0_pipe_clk_src.clkr,
2734         [GCC_PCLK0_CLK_SRC] = &pclk0_clk_src.clkr,
2735         [GCC_PDM2_CLK_SRC] = &pdm2_clk_src.clkr,
2736         [GCC_SDCC1_APPS_CLK_SRC] = &sdcc1_apps_clk_src.clkr,
2737         [GCC_SDCC1_ICE_CORE_CLK_SRC] = &sdcc1_ice_core_clk_src.clkr,
2738         [GCC_SDCC2_APPS_CLK_SRC] = &sdcc2_apps_clk_src.clkr,
2739         [GCC_USB20_MOCK_UTMI_CLK_SRC] = &usb20_mock_utmi_clk_src.clkr,
2740         [GCC_USB30_MASTER_CLK_SRC] = &usb30_master_clk_src.clkr,
2741         [GCC_USB30_MOCK_UTMI_CLK_SRC] = &usb30_mock_utmi_clk_src.clkr,
2742         [GCC_USB3_PHY_AUX_CLK_SRC] = &usb3_phy_aux_clk_src.clkr,
2743         [GCC_USB_HS_SYSTEM_CLK_SRC] = &usb_hs_system_clk_src.clkr,
2744         [GCC_VSYNC_CLK_SRC] = &vsync_clk_src.clkr,
2745         [GCC_CDSP_BIMC_CLK_SRC] = &cdsp_bimc_clk_src.clkr,
2746         [GCC_USB_HS_INACTIVITY_TIMERS_CLK] =
2747                         &gcc_usb_hs_inactivity_timers_clk.clkr,
2748         [GCC_BIMC_GPU_CLK] = &gcc_bimc_gpu_clk.clkr,
2749         [GCC_GTCU_AHB_CLK] = &gcc_gtcu_ahb_clk.clkr,
2750         [GCC_GFX_TCU_CLK] = &gcc_gfx_tcu_clk.clkr,
2751         [GCC_GFX_TBU_CLK] = &gcc_gfx_tbu_clk.clkr,
2752         [GCC_SMMU_CFG_CLK] = &gcc_smmu_cfg_clk.clkr,
2753         [GCC_APSS_TCU_CLK] = &gcc_apss_tcu_clk.clkr,
2754         [GCC_CDSP_TBU_CLK] = &gcc_cdsp_tbu_clk.clkr,
2755         [GCC_CRYPTO_AHB_CLK] = &gcc_crypto_ahb_clk.clkr,
2756         [GCC_CRYPTO_AXI_CLK] = &gcc_crypto_axi_clk.clkr,
2757         [GCC_CRYPTO_CLK] = &gcc_crypto_clk.clkr,
2758         [GCC_MDP_TBU_CLK] = &gcc_mdp_tbu_clk.clkr,
2759         [GCC_QDSS_DAP_CLK] = &gcc_qdss_dap_clk.clkr,
2760         [GCC_DCC_CLK] = &gcc_dcc_clk.clkr,
2761         [GCC_DCC_XO_CLK] = &gcc_dcc_xo_clk.clkr,
2762         [GCC_WCSS_Q6_AHB_CLK] = &gcc_wdsp_q6ss_ahbs_clk.clkr,
2763         [GCC_WCSS_Q6_AXIM_CLK] =  &gcc_wdsp_q6ss_axim_clk.clkr,
2764
2765 };
2766
2767 static const struct qcom_reset_map gcc_qcs404_resets[] = {
2768         [GCC_GENI_IR_BCR] = { 0x0F000 },
2769         [GCC_CDSP_RESTART] = { 0x18000 },
2770         [GCC_USB_HS_BCR] = { 0x41000 },
2771         [GCC_USB2_HS_PHY_ONLY_BCR] = { 0x41034 },
2772         [GCC_QUSB2_PHY_BCR] = { 0x4103c },
2773         [GCC_USB_HS_PHY_CFG_AHB_BCR] = { 0x0000c, 1 },
2774         [GCC_USB2A_PHY_BCR] = { 0x0000c, 0 },
2775         [GCC_USB3_PHY_BCR] = { 0x39004 },
2776         [GCC_USB_30_BCR] = { 0x39000 },
2777         [GCC_USB3PHY_PHY_BCR] = { 0x39008 },
2778         [GCC_PCIE_0_BCR] = { 0x3e000 },
2779         [GCC_PCIE_0_PHY_BCR] = { 0x3e004 },
2780         [GCC_PCIE_0_LINK_DOWN_BCR] = { 0x3e038 },
2781         [GCC_PCIEPHY_0_PHY_BCR] = { 0x3e03c },
2782         [GCC_PCIE_0_AXI_MASTER_STICKY_ARES] = { 0x3e040, 6},
2783         [GCC_PCIE_0_AHB_ARES] = { 0x3e040, 5 },
2784         [GCC_PCIE_0_AXI_SLAVE_ARES] = { 0x3e040, 4 },
2785         [GCC_PCIE_0_AXI_MASTER_ARES] = { 0x3e040, 3 },
2786         [GCC_PCIE_0_CORE_STICKY_ARES] = { 0x3e040, 2 },
2787         [GCC_PCIE_0_SLEEP_ARES] = { 0x3e040, 1 },
2788         [GCC_PCIE_0_PIPE_ARES] = { 0x3e040, 0 },
2789         [GCC_EMAC_BCR] = { 0x4e000 },
2790         [GCC_WDSP_RESTART] = {0x19000},
2791 };
2792
2793 static const struct regmap_config gcc_qcs404_regmap_config = {
2794         .reg_bits       = 32,
2795         .reg_stride     = 4,
2796         .val_bits       = 32,
2797         .max_register   = 0x7f000,
2798         .fast_io        = true,
2799 };
2800
2801 static const struct qcom_cc_desc gcc_qcs404_desc = {
2802         .config = &gcc_qcs404_regmap_config,
2803         .clks = gcc_qcs404_clocks,
2804         .num_clks = ARRAY_SIZE(gcc_qcs404_clocks),
2805         .resets = gcc_qcs404_resets,
2806         .num_resets = ARRAY_SIZE(gcc_qcs404_resets),
2807         .clk_hws = gcc_qcs404_hws,
2808         .num_clk_hws = ARRAY_SIZE(gcc_qcs404_hws),
2809 };
2810
2811 static const struct of_device_id gcc_qcs404_match_table[] = {
2812         { .compatible = "qcom,gcc-qcs404" },
2813         { }
2814 };
2815 MODULE_DEVICE_TABLE(of, gcc_qcs404_match_table);
2816
2817 static int gcc_qcs404_probe(struct platform_device *pdev)
2818 {
2819         struct regmap *regmap;
2820
2821         regmap = qcom_cc_map(pdev, &gcc_qcs404_desc);
2822         if (IS_ERR(regmap))
2823                 return PTR_ERR(regmap);
2824
2825         clk_alpha_pll_configure(&gpll3_out_main, regmap, &gpll3_config);
2826
2827         return qcom_cc_really_probe(pdev, &gcc_qcs404_desc, regmap);
2828 }
2829
2830 static struct platform_driver gcc_qcs404_driver = {
2831         .probe = gcc_qcs404_probe,
2832         .driver = {
2833                 .name = "gcc-qcs404",
2834                 .of_match_table = gcc_qcs404_match_table,
2835         },
2836 };
2837
2838 static int __init gcc_qcs404_init(void)
2839 {
2840         return platform_driver_register(&gcc_qcs404_driver);
2841 }
2842 core_initcall(gcc_qcs404_init);
2843
2844 static void __exit gcc_qcs404_exit(void)
2845 {
2846         platform_driver_unregister(&gcc_qcs404_driver);
2847 }
2848 module_exit(gcc_qcs404_exit);
2849
2850 MODULE_DESCRIPTION("Qualcomm GCC QCS404 Driver");
2851 MODULE_LICENSE("GPL v2");