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