]> Git Repo - linux.git/blob - drivers/clk/qcom/gcc-msm8939.c
Merge tag 'for-6.8/io_uring-2024-01-18' of git://git.kernel.dk/linux
[linux.git] / drivers / clk / qcom / gcc-msm8939.c
1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3  * Copyright 2020 Linaro Limited
4  */
5
6 #include <linux/kernel.h>
7 #include <linux/bitops.h>
8 #include <linux/err.h>
9 #include <linux/platform_device.h>
10 #include <linux/module.h>
11 #include <linux/of.h>
12 #include <linux/clk-provider.h>
13 #include <linux/regmap.h>
14 #include <linux/reset-controller.h>
15
16 #include <dt-bindings/clock/qcom,gcc-msm8939.h>
17 #include <dt-bindings/reset/qcom,gcc-msm8939.h>
18
19 #include "common.h"
20 #include "clk-regmap.h"
21 #include "clk-pll.h"
22 #include "clk-rcg.h"
23 #include "clk-branch.h"
24 #include "reset.h"
25 #include "gdsc.h"
26
27 enum {
28         P_XO,
29         P_GPLL0,
30         P_GPLL0_AUX,
31         P_BIMC,
32         P_GPLL1,
33         P_GPLL1_AUX,
34         P_GPLL2,
35         P_GPLL2_AUX,
36         P_GPLL3,
37         P_GPLL3_AUX,
38         P_GPLL4,
39         P_GPLL5,
40         P_GPLL5_AUX,
41         P_GPLL5_EARLY,
42         P_GPLL6,
43         P_GPLL6_AUX,
44         P_SLEEP_CLK,
45         P_DSI0_PHYPLL_BYTE,
46         P_DSI0_PHYPLL_DSI,
47         P_EXT_PRI_I2S,
48         P_EXT_SEC_I2S,
49         P_EXT_MCLK,
50 };
51
52 static struct clk_pll gpll0 = {
53         .l_reg = 0x21004,
54         .m_reg = 0x21008,
55         .n_reg = 0x2100c,
56         .config_reg = 0x21010,
57         .mode_reg = 0x21000,
58         .status_reg = 0x2101c,
59         .status_bit = 17,
60         .clkr.hw.init = &(struct clk_init_data){
61                 .name = "gpll0",
62                 .parent_data = &(const struct clk_parent_data) {
63                         .fw_name = "xo",
64                 },
65                 .num_parents = 1,
66                 .ops = &clk_pll_ops,
67         },
68 };
69
70 static struct clk_regmap gpll0_vote = {
71         .enable_reg = 0x45000,
72         .enable_mask = BIT(0),
73         .hw.init = &(struct clk_init_data){
74                 .name = "gpll0_vote",
75                 .parent_hws = (const struct clk_hw*[]) {
76                         &gpll0.clkr.hw,
77                 },
78                 .num_parents = 1,
79                 .ops = &clk_pll_vote_ops,
80         },
81 };
82
83 static struct clk_pll gpll1 = {
84         .l_reg = 0x20004,
85         .m_reg = 0x20008,
86         .n_reg = 0x2000c,
87         .config_reg = 0x20010,
88         .mode_reg = 0x20000,
89         .status_reg = 0x2001c,
90         .status_bit = 17,
91         .clkr.hw.init = &(struct clk_init_data){
92                 .name = "gpll1",
93                 .parent_data = &(const struct clk_parent_data) {
94                         .fw_name = "xo",
95                 },
96                 .num_parents = 1,
97                 .ops = &clk_pll_ops,
98         },
99 };
100
101 static struct clk_regmap gpll1_vote = {
102         .enable_reg = 0x45000,
103         .enable_mask = BIT(1),
104         .hw.init = &(struct clk_init_data){
105                 .name = "gpll1_vote",
106                 .parent_hws = (const struct clk_hw*[]) {
107                         &gpll1.clkr.hw,
108                 },
109                 .num_parents = 1,
110                 .ops = &clk_pll_vote_ops,
111         },
112 };
113
114 static struct clk_pll gpll2 = {
115         .l_reg = 0x4a004,
116         .m_reg = 0x4a008,
117         .n_reg = 0x4a00c,
118         .config_reg = 0x4a010,
119         .mode_reg = 0x4a000,
120         .status_reg = 0x4a01c,
121         .status_bit = 17,
122         .clkr.hw.init = &(struct clk_init_data){
123                 .name = "gpll2",
124                 .parent_data = &(const struct clk_parent_data) {
125                         .fw_name = "xo",
126                 },
127                 .num_parents = 1,
128                 .ops = &clk_pll_ops,
129         },
130 };
131
132 static struct clk_regmap gpll2_vote = {
133         .enable_reg = 0x45000,
134         .enable_mask = BIT(2),
135         .hw.init = &(struct clk_init_data){
136                 .name = "gpll2_vote",
137                 .parent_hws = (const struct clk_hw*[]) {
138                         &gpll2.clkr.hw,
139                 },
140                 .num_parents = 1,
141                 .ops = &clk_pll_vote_ops,
142         },
143 };
144
145 static struct clk_pll bimc_pll = {
146         .l_reg = 0x23004,
147         .m_reg = 0x23008,
148         .n_reg = 0x2300c,
149         .config_reg = 0x23010,
150         .mode_reg = 0x23000,
151         .status_reg = 0x2301c,
152         .status_bit = 17,
153         .clkr.hw.init = &(struct clk_init_data){
154                 .name = "bimc_pll",
155                 .parent_data = &(const struct clk_parent_data) {
156                         .fw_name = "xo",
157                 },
158                 .num_parents = 1,
159                 .ops = &clk_pll_ops,
160         },
161 };
162
163 static struct clk_regmap bimc_pll_vote = {
164         .enable_reg = 0x45000,
165         .enable_mask = BIT(3),
166         .hw.init = &(struct clk_init_data){
167                 .name = "bimc_pll_vote",
168                 .parent_hws = (const struct clk_hw*[]) {
169                         &bimc_pll.clkr.hw,
170                 },
171                 .num_parents = 1,
172                 .ops = &clk_pll_vote_ops,
173         },
174 };
175
176 static struct clk_pll gpll3 = {
177         .l_reg = 0x22004,
178         .m_reg = 0x22008,
179         .n_reg = 0x2200c,
180         .config_reg = 0x22010,
181         .mode_reg = 0x22000,
182         .status_reg = 0x2201c,
183         .status_bit = 17,
184         .clkr.hw.init = &(struct clk_init_data){
185                 .name = "gpll3",
186                 .parent_data = &(const struct clk_parent_data) {
187                         .fw_name = "xo",
188                 },
189                 .num_parents = 1,
190                 .ops = &clk_pll_ops,
191         },
192 };
193
194 static struct clk_regmap gpll3_vote = {
195         .enable_reg = 0x45000,
196         .enable_mask = BIT(4),
197         .hw.init = &(struct clk_init_data){
198                 .name = "gpll3_vote",
199                 .parent_hws = (const struct clk_hw*[]) {
200                         &gpll3.clkr.hw,
201                 },
202                 .num_parents = 1,
203                 .ops = &clk_pll_vote_ops,
204         },
205 };
206
207 /* GPLL3 at 1100 MHz, main output enabled. */
208 static const struct pll_config gpll3_config = {
209         .l = 57,
210         .m = 7,
211         .n = 24,
212         .vco_val = 0x0,
213         .vco_mask = BIT(20),
214         .pre_div_val = 0x0,
215         .pre_div_mask = BIT(12),
216         .post_div_val = 0x0,
217         .post_div_mask = BIT(9) | BIT(8),
218         .mn_ena_mask = BIT(24),
219         .main_output_mask = BIT(0),
220         .aux_output_mask = BIT(1),
221 };
222
223 static struct clk_pll gpll4 = {
224         .l_reg = 0x24004,
225         .m_reg = 0x24008,
226         .n_reg = 0x2400c,
227         .config_reg = 0x24010,
228         .mode_reg = 0x24000,
229         .status_reg = 0x2401c,
230         .status_bit = 17,
231         .clkr.hw.init = &(struct clk_init_data){
232                 .name = "gpll4",
233                 .parent_data = &(const struct clk_parent_data) {
234                         .fw_name = "xo",
235                 },
236                 .num_parents = 1,
237                 .ops = &clk_pll_ops,
238         },
239 };
240
241 static struct clk_regmap gpll4_vote = {
242         .enable_reg = 0x45000,
243         .enable_mask = BIT(5),
244         .hw.init = &(struct clk_init_data){
245                 .name = "gpll4_vote",
246                 .parent_hws = (const struct clk_hw*[]) {
247                         &gpll4.clkr.hw,
248                 },
249                 .num_parents = 1,
250                 .ops = &clk_pll_vote_ops,
251         },
252 };
253
254 /* GPLL4 at 1200 MHz, main output enabled. */
255 static struct pll_config gpll4_config = {
256         .l = 62,
257         .m = 1,
258         .n = 2,
259         .vco_val = 0x0,
260         .vco_mask = BIT(20),
261         .pre_div_val = 0x0,
262         .pre_div_mask = BIT(12),
263         .post_div_val = 0x0,
264         .post_div_mask = BIT(9) | BIT(8),
265         .mn_ena_mask = BIT(24),
266         .main_output_mask = BIT(0),
267 };
268
269 static struct clk_pll gpll5 = {
270         .l_reg = 0x25004,
271         .m_reg = 0x25008,
272         .n_reg = 0x2500c,
273         .config_reg = 0x25010,
274         .mode_reg = 0x25000,
275         .status_reg = 0x2501c,
276         .status_bit = 17,
277         .clkr.hw.init = &(struct clk_init_data){
278                 .name = "gpll5",
279                 .parent_data = &(const struct clk_parent_data) {
280                         .fw_name = "xo",
281                 },
282                 .num_parents = 1,
283                 .ops = &clk_pll_ops,
284         },
285 };
286
287 static struct clk_regmap gpll5_vote = {
288         .enable_reg = 0x45000,
289         .enable_mask = BIT(6),
290         .hw.init = &(struct clk_init_data){
291                 .name = "gpll5_vote",
292                 .parent_hws = (const struct clk_hw*[]) {
293                         &gpll5.clkr.hw,
294                 },
295                 .num_parents = 1,
296                 .ops = &clk_pll_vote_ops,
297         },
298 };
299
300 static struct clk_pll gpll6 = {
301         .l_reg = 0x37004,
302         .m_reg = 0x37008,
303         .n_reg = 0x3700c,
304         .config_reg = 0x37010,
305         .mode_reg = 0x37000,
306         .status_reg = 0x3701c,
307         .status_bit = 17,
308         .clkr.hw.init = &(struct clk_init_data){
309                 .name = "gpll6",
310                 .parent_data = &(const struct clk_parent_data) {
311                         .fw_name = "xo",
312                 },
313                 .num_parents = 1,
314                 .ops = &clk_pll_ops,
315         },
316 };
317
318 static struct clk_regmap gpll6_vote = {
319         .enable_reg = 0x45000,
320         .enable_mask = BIT(7),
321         .hw.init = &(struct clk_init_data){
322                 .name = "gpll6_vote",
323                 .parent_hws = (const struct clk_hw*[]) {
324                         &gpll6.clkr.hw,
325                 },
326                 .num_parents = 1,
327                 .ops = &clk_pll_vote_ops,
328         },
329 };
330
331 static const struct parent_map gcc_xo_gpll0_map[] = {
332         { P_XO, 0 },
333         { P_GPLL0, 1 },
334 };
335
336 static const struct clk_parent_data gcc_xo_gpll0_parent_data[] = {
337         { .fw_name = "xo" },
338         { .hw = &gpll0_vote.hw },
339 };
340
341 static const struct parent_map gcc_xo_gpll0_bimc_map[] = {
342         { P_XO, 0 },
343         { P_GPLL0, 1 },
344         { P_BIMC, 2 },
345 };
346
347 static const struct clk_parent_data gcc_xo_gpll0_bimc_parent_data[] = {
348         { .fw_name = "xo" },
349         { .hw = &gpll0_vote.hw },
350         { .hw = &bimc_pll_vote.hw },
351 };
352
353 static const struct parent_map gcc_xo_gpll0_gpll6a_map[] = {
354         { P_XO, 0 },
355         { P_GPLL0, 1 },
356         { P_GPLL6_AUX, 2 },
357 };
358
359 static const struct clk_parent_data gcc_xo_gpll0_gpll6a_parent_data[] = {
360         { .fw_name = "xo" },
361         { .hw = &gpll0_vote.hw },
362         { .hw = &gpll6_vote.hw },
363 };
364
365 static const struct parent_map gcc_xo_gpll0_gpll2a_gpll3_gpll6a_map[] = {
366         { P_XO, 0 },
367         { P_GPLL0, 1 },
368         { P_GPLL2_AUX, 4 },
369         { P_GPLL3, 2 },
370         { P_GPLL6_AUX, 3 },
371 };
372
373 static const struct clk_parent_data gcc_xo_gpll0_gpll2a_gpll3_gpll6a_parent_data[] = {
374         { .fw_name = "xo" },
375         { .hw = &gpll0_vote.hw },
376         { .hw = &gpll2_vote.hw },
377         { .hw = &gpll3_vote.hw },
378         { .hw = &gpll6_vote.hw },
379 };
380
381 static const struct parent_map gcc_xo_gpll0_gpll2_map[] = {
382         { P_XO, 0 },
383         { P_GPLL0, 1 },
384         { P_GPLL2, 2 },
385 };
386
387 static const struct clk_parent_data gcc_xo_gpll0_gpll2_parent_data[] = {
388         { .fw_name = "xo" },
389         { .hw = &gpll0_vote.hw },
390         { .hw = &gpll2_vote.hw },
391 };
392
393 static const struct parent_map gcc_xo_gpll0_gpll2_gpll4_map[] = {
394         { P_XO, 0 },
395         { P_GPLL0, 1 },
396         { P_GPLL2, 3 },
397         { P_GPLL4, 2 },
398 };
399
400 static const struct clk_parent_data gcc_xo_gpll0_gpll2_gpll4_parent_data[] = {
401         { .fw_name = "xo" },
402         { .hw = &gpll0_vote.hw },
403         { .hw = &gpll2_vote.hw },
404         { .hw = &gpll4_vote.hw },
405 };
406
407 static const struct parent_map gcc_xo_gpll0a_map[] = {
408         { P_XO, 0 },
409         { P_GPLL0_AUX, 2 },
410 };
411
412 static const struct clk_parent_data gcc_xo_gpll0a_parent_data[] = {
413         { .fw_name = "xo" },
414         { .hw = &gpll0_vote.hw },
415 };
416
417 static const struct parent_map gcc_xo_gpll0_gpll1a_sleep_map[] = {
418         { P_XO, 0 },
419         { P_GPLL0, 1 },
420         { P_GPLL1_AUX, 2 },
421         { P_SLEEP_CLK, 6 },
422 };
423
424 static const struct clk_parent_data gcc_xo_gpll0_gpll1a_sleep_parent_data[] = {
425         { .fw_name = "xo" },
426         { .hw = &gpll0_vote.hw },
427         { .hw = &gpll1_vote.hw },
428         { .fw_name = "sleep_clk", .name = "sleep_clk" },
429 };
430
431 static const struct parent_map gcc_xo_gpll0_gpll1a_gpll6_sleep_map[] = {
432         { P_XO, 0 },
433         { P_GPLL0, 1 },
434         { P_GPLL1_AUX, 2 },
435         { P_GPLL6, 2 },
436         { P_SLEEP_CLK, 6 },
437 };
438
439 static const struct clk_parent_data gcc_xo_gpll0_gpll1a_gpll6_sleep_parent_data[] = {
440         { .fw_name = "xo" },
441         { .hw = &gpll0_vote.hw },
442         { .hw = &gpll1_vote.hw },
443         { .hw = &gpll6_vote.hw },
444         { .fw_name = "sleep_clk", .name = "sleep_clk" },
445 };
446
447 static const struct parent_map gcc_xo_gpll0_gpll1a_map[] = {
448         { P_XO, 0 },
449         { P_GPLL0, 1 },
450         { P_GPLL1_AUX, 2 },
451 };
452
453 static const struct clk_parent_data gcc_xo_gpll0_gpll1a_parent_data[] = {
454         { .fw_name = "xo" },
455         { .hw = &gpll0_vote.hw },
456         { .hw = &gpll1_vote.hw },
457 };
458
459 static const struct parent_map gcc_xo_dsibyte_map[] = {
460         { P_XO, 0, },
461         { P_DSI0_PHYPLL_BYTE, 2 },
462 };
463
464 static const struct clk_parent_data gcc_xo_dsibyte_parent_data[] = {
465         { .fw_name = "xo" },
466         { .fw_name = "dsi0pllbyte", .name = "dsi0pllbyte" },
467 };
468
469 static const struct parent_map gcc_xo_gpll0a_dsibyte_map[] = {
470         { P_XO, 0 },
471         { P_GPLL0_AUX, 2 },
472         { P_DSI0_PHYPLL_BYTE, 1 },
473 };
474
475 static const struct clk_parent_data gcc_xo_gpll0a_dsibyte_parent_data[] = {
476         { .fw_name = "xo" },
477         { .hw = &gpll0_vote.hw },
478         { .fw_name = "dsi0pllbyte", .name = "dsi0pllbyte" },
479 };
480
481 static const struct parent_map gcc_xo_gpll1_dsiphy_gpll6_gpll3a_gpll0a_map[] = {
482         { P_XO, 0 },
483         { P_GPLL1, 1 },
484         { P_DSI0_PHYPLL_DSI, 2 },
485         { P_GPLL6, 3 },
486         { P_GPLL3_AUX, 4 },
487         { P_GPLL0_AUX, 5 },
488 };
489
490 static const struct clk_parent_data gcc_xo_gpll1_dsiphy_gpll6_gpll3a_gpll0a_parent_data[] = {
491         { .fw_name = "xo" },
492         { .hw = &gpll1_vote.hw },
493         { .fw_name = "dsi0pll", .name = "dsi0pll" },
494         { .hw = &gpll6_vote.hw },
495         { .hw = &gpll3_vote.hw },
496         { .hw = &gpll0_vote.hw },
497 };
498
499 static const struct parent_map gcc_xo_gpll0a_dsiphy_map[] = {
500         { P_XO, 0 },
501         { P_GPLL0_AUX, 2 },
502         { P_DSI0_PHYPLL_DSI, 1 },
503 };
504
505 static const struct clk_parent_data gcc_xo_gpll0a_dsiphy_parent_data[] = {
506         { .fw_name = "xo" },
507         { .hw = &gpll0_vote.hw },
508         { .fw_name = "dsi0pll", .name = "dsi0pll" },
509 };
510
511 static const struct parent_map gcc_xo_gpll0_gpll5a_gpll6_bimc_map[] = {
512         { P_XO, 0 },
513         { P_GPLL0, 1 },
514         { P_GPLL5_AUX, 3 },
515         { P_GPLL6, 2 },
516         { P_BIMC, 4 },
517 };
518
519 static const struct clk_parent_data gcc_xo_gpll0_gpll5a_gpll6_bimc_parent_data[] = {
520         { .fw_name = "xo" },
521         { .hw = &gpll0_vote.hw },
522         { .hw = &gpll5_vote.hw },
523         { .hw = &gpll6_vote.hw },
524         { .hw = &bimc_pll_vote.hw },
525 };
526
527 static const struct parent_map gcc_xo_gpll0_gpll1_sleep_map[] = {
528         { P_XO, 0 },
529         { P_GPLL0, 1 },
530         { P_GPLL1, 2 },
531         { P_SLEEP_CLK, 6 }
532 };
533
534 static const struct clk_parent_data gcc_xo_gpll0_gpll1_sleep_parent_data[] = {
535         { .fw_name = "xo" },
536         { .hw = &gpll0_vote.hw },
537         { .hw = &gpll1_vote.hw },
538         { .fw_name = "sleep_clk", .name = "sleep_clk" },
539 };
540
541 static const struct parent_map gcc_xo_gpll1_epi2s_emclk_sleep_map[] = {
542         { P_XO, 0 },
543         { P_GPLL1, 1 },
544         { P_EXT_PRI_I2S, 2 },
545         { P_EXT_MCLK, 3 },
546         { P_SLEEP_CLK, 6 }
547 };
548
549 static const struct clk_parent_data gcc_xo_gpll1_epi2s_emclk_sleep_parent_data[] = {
550         { .fw_name = "xo" },
551         { .hw = &gpll0_vote.hw },
552         { .fw_name = "ext_pri_i2s", .name = "ext_pri_i2s" },
553         { .fw_name = "ext_mclk", .name = "ext_mclk" },
554         { .fw_name = "sleep_clk", .name = "sleep_clk" },
555 };
556
557 static const struct parent_map gcc_xo_gpll1_esi2s_emclk_sleep_map[] = {
558         { P_XO, 0 },
559         { P_GPLL1, 1 },
560         { P_EXT_SEC_I2S, 2 },
561         { P_EXT_MCLK, 3 },
562         { P_SLEEP_CLK, 6 }
563 };
564
565 static const struct clk_parent_data gcc_xo_gpll1_esi2s_emclk_sleep_parent_data[] = {
566         { .fw_name = "xo" },
567         { .hw = &gpll1_vote.hw },
568         { .fw_name = "ext_sec_i2s", .name = "ext_sec_i2s" },
569         { .fw_name = "ext_mclk", .name = "ext_mclk" },
570         { .fw_name = "sleep_clk", .name = "sleep_clk" },
571 };
572
573 static const struct parent_map gcc_xo_sleep_map[] = {
574         { P_XO, 0 },
575         { P_SLEEP_CLK, 6 }
576 };
577
578 static const struct clk_parent_data gcc_xo_sleep_parent_data[] = {
579         { .fw_name = "xo" },
580         { .fw_name = "sleep_clk", .name = "sleep_clk" },
581 };
582
583 static const struct parent_map gcc_xo_gpll1_emclk_sleep_map[] = {
584         { P_XO, 0 },
585         { P_GPLL1, 1 },
586         { P_EXT_MCLK, 2 },
587         { P_SLEEP_CLK, 6 }
588 };
589
590 static const struct clk_parent_data gcc_xo_gpll1_emclk_sleep_parent_data[] = {
591         { .fw_name = "xo" },
592         { .hw = &gpll1_vote.hw },
593         { .fw_name = "ext_mclk", .name = "ext_mclk" },
594         { .fw_name = "sleep_clk", .name = "sleep_clk" },
595 };
596
597 static const struct clk_parent_data gcc_xo_gpll6_gpll0_parent_data[] = {
598         { .fw_name = "xo" },
599         { .hw = &gpll6_vote.hw },
600         { .hw = &gpll0_vote.hw },
601 };
602
603 static const struct clk_parent_data gcc_xo_gpll6_gpll0a_parent_data[] = {
604         { .fw_name = "xo" },
605         { .hw = &gpll6_vote.hw },
606         { .hw = &gpll0_vote.hw },
607 };
608
609 static struct clk_rcg2 pcnoc_bfdcd_clk_src = {
610         .cmd_rcgr = 0x27000,
611         .hid_width = 5,
612         .parent_map = gcc_xo_gpll0_map,
613         .clkr.hw.init = &(struct clk_init_data){
614                 .name = "pcnoc_bfdcd_clk_src",
615                 .parent_data = gcc_xo_gpll0_parent_data,
616                 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_parent_data),
617                 .ops = &clk_rcg2_ops,
618         },
619 };
620
621 static struct clk_rcg2 system_noc_bfdcd_clk_src = {
622         .cmd_rcgr = 0x26004,
623         .hid_width = 5,
624         .parent_map = gcc_xo_gpll0_gpll6a_map,
625         .clkr.hw.init = &(struct clk_init_data){
626                 .name = "system_noc_bfdcd_clk_src",
627                 .parent_data = gcc_xo_gpll0_gpll6a_parent_data,
628                 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll6a_parent_data),
629                 .ops = &clk_rcg2_ops,
630         },
631 };
632
633 static struct clk_rcg2 bimc_ddr_clk_src = {
634         .cmd_rcgr = 0x32024,
635         .hid_width = 5,
636         .parent_map = gcc_xo_gpll0_bimc_map,
637         .clkr.hw.init = &(struct clk_init_data){
638                 .name = "bimc_ddr_clk_src",
639                 .parent_data = gcc_xo_gpll0_bimc_parent_data,
640                 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_bimc_parent_data),
641                 .ops = &clk_rcg2_ops,
642                 .flags = CLK_GET_RATE_NOCACHE,
643         },
644 };
645
646 static struct clk_rcg2 system_mm_noc_bfdcd_clk_src = {
647         .cmd_rcgr = 0x2600c,
648         .hid_width = 5,
649         .parent_map = gcc_xo_gpll0_gpll6a_map,
650         .clkr.hw.init = &(struct clk_init_data){
651                 .name = "system_mm_noc_bfdcd_clk_src",
652                 .parent_data = gcc_xo_gpll0_gpll6a_parent_data,
653                 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll6a_parent_data),
654                 .ops = &clk_rcg2_ops,
655         },
656 };
657
658 static const struct freq_tbl ftbl_gcc_camss_ahb_clk[] = {
659         F(40000000, P_GPLL0, 10, 1, 2),
660         F(80000000, P_GPLL0, 10, 0, 0),
661         { }
662 };
663
664 static struct clk_rcg2 camss_ahb_clk_src = {
665         .cmd_rcgr = 0x5a000,
666         .mnd_width = 8,
667         .hid_width = 5,
668         .parent_map = gcc_xo_gpll0_map,
669         .freq_tbl = ftbl_gcc_camss_ahb_clk,
670         .clkr.hw.init = &(struct clk_init_data){
671                 .name = "camss_ahb_clk_src",
672                 .parent_data = gcc_xo_gpll0_parent_data,
673                 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_parent_data),
674                 .ops = &clk_rcg2_ops,
675         },
676 };
677
678 static const struct freq_tbl ftbl_apss_ahb_clk[] = {
679         F(19200000, P_XO, 1, 0, 0),
680         F(50000000, P_GPLL0, 16, 0, 0),
681         F(100000000, P_GPLL0, 8, 0, 0),
682         F(133330000, P_GPLL0, 6, 0, 0),
683         { }
684 };
685
686 static struct clk_rcg2 apss_ahb_clk_src = {
687         .cmd_rcgr = 0x46000,
688         .hid_width = 5,
689         .parent_map = gcc_xo_gpll0_map,
690         .freq_tbl = ftbl_apss_ahb_clk,
691         .clkr.hw.init = &(struct clk_init_data){
692                 .name = "apss_ahb_clk_src",
693                 .parent_data = gcc_xo_gpll0_parent_data,
694                 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_parent_data),
695                 .ops = &clk_rcg2_ops,
696         },
697 };
698
699 static const struct freq_tbl ftbl_gcc_camss_csi0_1_2_clk[] = {
700         F(100000000, P_GPLL0, 8, 0,     0),
701         F(200000000, P_GPLL0, 4, 0,     0),
702         { }
703 };
704
705 static struct clk_rcg2 csi0_clk_src = {
706         .cmd_rcgr = 0x4e020,
707         .hid_width = 5,
708         .parent_map = gcc_xo_gpll0_map,
709         .freq_tbl = ftbl_gcc_camss_csi0_1_2_clk,
710         .clkr.hw.init = &(struct clk_init_data){
711                 .name = "csi0_clk_src",
712                 .parent_data = gcc_xo_gpll0_parent_data,
713                 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_parent_data),
714                 .ops = &clk_rcg2_ops,
715         },
716 };
717
718 static struct clk_rcg2 csi1_clk_src = {
719         .cmd_rcgr = 0x4f020,
720         .hid_width = 5,
721         .parent_map = gcc_xo_gpll0_map,
722         .freq_tbl = ftbl_gcc_camss_csi0_1_2_clk,
723         .clkr.hw.init = &(struct clk_init_data){
724                 .name = "csi1_clk_src",
725                 .parent_data = gcc_xo_gpll0_parent_data,
726                 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_parent_data),
727                 .ops = &clk_rcg2_ops,
728         },
729 };
730
731 static struct clk_rcg2 csi2_clk_src = {
732         .cmd_rcgr = 0x3c020,
733         .hid_width = 5,
734         .parent_map = gcc_xo_gpll0_map,
735         .freq_tbl = ftbl_gcc_camss_csi0_1_2_clk,
736         .clkr.hw.init = &(struct clk_init_data){
737                 .name = "csi2_clk_src",
738                 .parent_data = gcc_xo_gpll0_parent_data,
739                 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_parent_data),
740                 .ops = &clk_rcg2_ops,
741         },
742 };
743
744 static const struct freq_tbl ftbl_gcc_oxili_gfx3d_clk[] = {
745         F(19200000, P_XO, 1, 0, 0),
746         F(50000000, P_GPLL0, 16, 0, 0),
747         F(80000000, P_GPLL0, 10, 0, 0),
748         F(100000000, P_GPLL0, 8, 0, 0),
749         F(160000000, P_GPLL0, 5, 0, 0),
750         F(200000000, P_GPLL0, 4, 0, 0),
751         F(220000000, P_GPLL3, 5, 0, 0),
752         F(266670000, P_GPLL0, 3, 0, 0),
753         F(310000000, P_GPLL2_AUX, 3, 0, 0),
754         F(400000000, P_GPLL0, 2, 0, 0),
755         F(465000000, P_GPLL2_AUX, 2, 0, 0),
756         F(550000000, P_GPLL3, 2, 0, 0),
757         { }
758 };
759
760 static struct clk_rcg2 gfx3d_clk_src = {
761         .cmd_rcgr = 0x59000,
762         .hid_width = 5,
763         .parent_map = gcc_xo_gpll0_gpll2a_gpll3_gpll6a_map,
764         .freq_tbl = ftbl_gcc_oxili_gfx3d_clk,
765         .clkr.hw.init = &(struct clk_init_data){
766                 .name = "gfx3d_clk_src",
767                 .parent_data = gcc_xo_gpll0_gpll2a_gpll3_gpll6a_parent_data,
768                 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll2a_gpll3_gpll6a_parent_data),
769                 .ops = &clk_rcg2_ops,
770         },
771 };
772
773 static const struct freq_tbl ftbl_gcc_camss_vfe0_clk[] = {
774         F(50000000, P_GPLL0, 16, 0, 0),
775         F(80000000, P_GPLL0, 10, 0, 0),
776         F(100000000, P_GPLL0, 8, 0, 0),
777         F(160000000, P_GPLL0, 5, 0, 0),
778         F(177780000, P_GPLL0, 4.5, 0, 0),
779         F(200000000, P_GPLL0, 4, 0, 0),
780         F(266670000, P_GPLL0, 3, 0, 0),
781         F(320000000, P_GPLL0, 2.5, 0, 0),
782         F(400000000, P_GPLL0, 2, 0, 0),
783         F(465000000, P_GPLL2, 2, 0, 0),
784         F(480000000, P_GPLL4, 2.5, 0, 0),
785         F(600000000, P_GPLL4, 2, 0, 0),
786         { }
787 };
788
789 static struct clk_rcg2 vfe0_clk_src = {
790         .cmd_rcgr = 0x58000,
791         .hid_width = 5,
792         .parent_map = gcc_xo_gpll0_gpll2_gpll4_map,
793         .freq_tbl = ftbl_gcc_camss_vfe0_clk,
794         .clkr.hw.init = &(struct clk_init_data){
795                 .name = "vfe0_clk_src",
796                 .parent_data = gcc_xo_gpll0_gpll2_gpll4_parent_data,
797                 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll2_gpll4_parent_data),
798                 .ops = &clk_rcg2_ops,
799         },
800 };
801
802 static const struct freq_tbl ftbl_gcc_blsp1_qup1_6_i2c_apps_clk[] = {
803         F(19200000, P_XO, 1, 0, 0),
804         F(50000000, P_GPLL0, 16, 0, 0),
805         { }
806 };
807
808 static struct clk_rcg2 blsp1_qup1_i2c_apps_clk_src = {
809         .cmd_rcgr = 0x0200c,
810         .hid_width = 5,
811         .parent_map = gcc_xo_gpll0_map,
812         .freq_tbl = ftbl_gcc_blsp1_qup1_6_i2c_apps_clk,
813         .clkr.hw.init = &(struct clk_init_data){
814                 .name = "blsp1_qup1_i2c_apps_clk_src",
815                 .parent_data = gcc_xo_gpll0_parent_data,
816                 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_parent_data),
817                 .ops = &clk_rcg2_ops,
818         },
819 };
820
821 static const struct freq_tbl ftbl_gcc_blsp1_qup1_6_spi_apps_clk[] = {
822         F(960000, P_XO, 10, 1, 2),
823         F(4800000, P_XO, 4, 0, 0),
824         F(9600000, P_XO, 2, 0, 0),
825         F(16000000, P_GPLL0, 10, 1, 5),
826         F(19200000, P_XO, 1, 0, 0),
827         F(25000000, P_GPLL0, 16, 1, 2),
828         F(50000000, P_GPLL0, 16, 0, 0),
829         { }
830 };
831
832 static struct clk_rcg2 blsp1_qup1_spi_apps_clk_src = {
833         .cmd_rcgr = 0x02024,
834         .mnd_width = 8,
835         .hid_width = 5,
836         .parent_map = gcc_xo_gpll0_map,
837         .freq_tbl = ftbl_gcc_blsp1_qup1_6_spi_apps_clk,
838         .clkr.hw.init = &(struct clk_init_data){
839                 .name = "blsp1_qup1_spi_apps_clk_src",
840                 .parent_data = gcc_xo_gpll0_parent_data,
841                 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_parent_data),
842                 .ops = &clk_rcg2_ops,
843         },
844 };
845
846 static struct clk_rcg2 blsp1_qup2_i2c_apps_clk_src = {
847         .cmd_rcgr = 0x03000,
848         .hid_width = 5,
849         .parent_map = gcc_xo_gpll0_map,
850         .freq_tbl = ftbl_gcc_blsp1_qup1_6_i2c_apps_clk,
851         .clkr.hw.init = &(struct clk_init_data){
852                 .name = "blsp1_qup2_i2c_apps_clk_src",
853                 .parent_data = gcc_xo_gpll0_parent_data,
854                 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_parent_data),
855                 .ops = &clk_rcg2_ops,
856         },
857 };
858
859 static struct clk_rcg2 blsp1_qup2_spi_apps_clk_src = {
860         .cmd_rcgr = 0x03014,
861         .mnd_width = 8,
862         .hid_width = 5,
863         .parent_map = gcc_xo_gpll0_map,
864         .freq_tbl = ftbl_gcc_blsp1_qup1_6_spi_apps_clk,
865         .clkr.hw.init = &(struct clk_init_data){
866                 .name = "blsp1_qup2_spi_apps_clk_src",
867                 .parent_data = gcc_xo_gpll0_parent_data,
868                 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_parent_data),
869                 .ops = &clk_rcg2_ops,
870         },
871 };
872
873 static struct clk_rcg2 blsp1_qup3_i2c_apps_clk_src = {
874         .cmd_rcgr = 0x04000,
875         .hid_width = 5,
876         .parent_map = gcc_xo_gpll0_map,
877         .freq_tbl = ftbl_gcc_blsp1_qup1_6_i2c_apps_clk,
878         .clkr.hw.init = &(struct clk_init_data){
879                 .name = "blsp1_qup3_i2c_apps_clk_src",
880                 .parent_data = gcc_xo_gpll0_parent_data,
881                 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_parent_data),
882                 .ops = &clk_rcg2_ops,
883         },
884 };
885
886 static struct clk_rcg2 blsp1_qup3_spi_apps_clk_src = {
887         .cmd_rcgr = 0x04024,
888         .mnd_width = 8,
889         .hid_width = 5,
890         .parent_map = gcc_xo_gpll0_map,
891         .freq_tbl = ftbl_gcc_blsp1_qup1_6_spi_apps_clk,
892         .clkr.hw.init = &(struct clk_init_data){
893                 .name = "blsp1_qup3_spi_apps_clk_src",
894                 .parent_data = gcc_xo_gpll0_parent_data,
895                 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_parent_data),
896                 .ops = &clk_rcg2_ops,
897         },
898 };
899
900 static struct clk_rcg2 blsp1_qup4_i2c_apps_clk_src = {
901         .cmd_rcgr = 0x05000,
902         .hid_width = 5,
903         .parent_map = gcc_xo_gpll0_map,
904         .freq_tbl = ftbl_gcc_blsp1_qup1_6_i2c_apps_clk,
905         .clkr.hw.init = &(struct clk_init_data){
906                 .name = "blsp1_qup4_i2c_apps_clk_src",
907                 .parent_data = gcc_xo_gpll0_parent_data,
908                 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_parent_data),
909                 .ops = &clk_rcg2_ops,
910         },
911 };
912
913 static struct clk_rcg2 blsp1_qup4_spi_apps_clk_src = {
914         .cmd_rcgr = 0x05024,
915         .mnd_width = 8,
916         .hid_width = 5,
917         .parent_map = gcc_xo_gpll0_map,
918         .freq_tbl = ftbl_gcc_blsp1_qup1_6_spi_apps_clk,
919         .clkr.hw.init = &(struct clk_init_data){
920                 .name = "blsp1_qup4_spi_apps_clk_src",
921                 .parent_data = gcc_xo_gpll0_parent_data,
922                 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_parent_data),
923                 .ops = &clk_rcg2_ops,
924         },
925 };
926
927 static struct clk_rcg2 blsp1_qup5_i2c_apps_clk_src = {
928         .cmd_rcgr = 0x06000,
929         .hid_width = 5,
930         .parent_map = gcc_xo_gpll0_map,
931         .freq_tbl = ftbl_gcc_blsp1_qup1_6_i2c_apps_clk,
932         .clkr.hw.init = &(struct clk_init_data){
933                 .name = "blsp1_qup5_i2c_apps_clk_src",
934                 .parent_data = gcc_xo_gpll0_parent_data,
935                 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_parent_data),
936                 .ops = &clk_rcg2_ops,
937         },
938 };
939
940 static struct clk_rcg2 blsp1_qup5_spi_apps_clk_src = {
941         .cmd_rcgr = 0x06024,
942         .mnd_width = 8,
943         .hid_width = 5,
944         .parent_map = gcc_xo_gpll0_map,
945         .freq_tbl = ftbl_gcc_blsp1_qup1_6_spi_apps_clk,
946         .clkr.hw.init = &(struct clk_init_data){
947                 .name = "blsp1_qup5_spi_apps_clk_src",
948                 .parent_data = gcc_xo_gpll0_parent_data,
949                 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_parent_data),
950                 .ops = &clk_rcg2_ops,
951         },
952 };
953
954 static struct clk_rcg2 blsp1_qup6_i2c_apps_clk_src = {
955         .cmd_rcgr = 0x07000,
956         .hid_width = 5,
957         .parent_map = gcc_xo_gpll0_map,
958         .freq_tbl = ftbl_gcc_blsp1_qup1_6_i2c_apps_clk,
959         .clkr.hw.init = &(struct clk_init_data){
960                 .name = "blsp1_qup6_i2c_apps_clk_src",
961                 .parent_data = gcc_xo_gpll0_parent_data,
962                 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_parent_data),
963                 .ops = &clk_rcg2_ops,
964         },
965 };
966
967 static struct clk_rcg2 blsp1_qup6_spi_apps_clk_src = {
968         .cmd_rcgr = 0x07024,
969         .mnd_width = 8,
970         .hid_width = 5,
971         .parent_map = gcc_xo_gpll0_map,
972         .freq_tbl = ftbl_gcc_blsp1_qup1_6_spi_apps_clk,
973         .clkr.hw.init = &(struct clk_init_data){
974                 .name = "blsp1_qup6_spi_apps_clk_src",
975                 .parent_data = gcc_xo_gpll0_parent_data,
976                 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_parent_data),
977                 .ops = &clk_rcg2_ops,
978         },
979 };
980
981 static const struct freq_tbl ftbl_gcc_blsp1_uart1_6_apps_clk[] = {
982         F(3686400, P_GPLL0, 1, 72, 15625),
983         F(7372800, P_GPLL0, 1, 144, 15625),
984         F(14745600, P_GPLL0, 1, 288, 15625),
985         F(16000000, P_GPLL0, 10, 1, 5),
986         F(19200000, P_XO, 1, 0, 0),
987         F(24000000, P_GPLL0, 1, 3, 100),
988         F(25000000, P_GPLL0, 16, 1, 2),
989         F(32000000, P_GPLL0, 1, 1, 25),
990         F(40000000, P_GPLL0, 1, 1, 20),
991         F(46400000, P_GPLL0, 1, 29, 500),
992         F(48000000, P_GPLL0, 1, 3, 50),
993         F(51200000, P_GPLL0, 1, 8, 125),
994         F(56000000, P_GPLL0, 1, 7, 100),
995         F(58982400, P_GPLL0, 1, 1152, 15625),
996         F(60000000, P_GPLL0, 1, 3, 40),
997         { }
998 };
999
1000 static struct clk_rcg2 blsp1_uart1_apps_clk_src = {
1001         .cmd_rcgr = 0x02044,
1002         .mnd_width = 16,
1003         .hid_width = 5,
1004         .parent_map = gcc_xo_gpll0_map,
1005         .freq_tbl = ftbl_gcc_blsp1_uart1_6_apps_clk,
1006         .clkr.hw.init = &(struct clk_init_data){
1007                 .name = "blsp1_uart1_apps_clk_src",
1008                 .parent_data = gcc_xo_gpll0_parent_data,
1009                 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_parent_data),
1010                 .ops = &clk_rcg2_ops,
1011         },
1012 };
1013
1014 static struct clk_rcg2 blsp1_uart2_apps_clk_src = {
1015         .cmd_rcgr = 0x03034,
1016         .mnd_width = 16,
1017         .hid_width = 5,
1018         .parent_map = gcc_xo_gpll0_map,
1019         .freq_tbl = ftbl_gcc_blsp1_uart1_6_apps_clk,
1020         .clkr.hw.init = &(struct clk_init_data){
1021                 .name = "blsp1_uart2_apps_clk_src",
1022                 .parent_data = gcc_xo_gpll0_parent_data,
1023                 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_parent_data),
1024                 .ops = &clk_rcg2_ops,
1025         },
1026 };
1027
1028 static const struct freq_tbl ftbl_gcc_camss_cci_clk[] = {
1029         F(19200000, P_XO, 1, 0, 0),
1030         F(37500000, P_GPLL0, 1, 3, 64),
1031         { }
1032 };
1033
1034 static struct clk_rcg2 cci_clk_src = {
1035         .cmd_rcgr = 0x51000,
1036         .mnd_width = 8,
1037         .hid_width = 5,
1038         .parent_map = gcc_xo_gpll0a_map,
1039         .freq_tbl = ftbl_gcc_camss_cci_clk,
1040         .clkr.hw.init = &(struct clk_init_data){
1041                 .name = "cci_clk_src",
1042                 .parent_data = gcc_xo_gpll0a_parent_data,
1043                 .num_parents = ARRAY_SIZE(gcc_xo_gpll0a_parent_data),
1044                 .ops = &clk_rcg2_ops,
1045         },
1046 };
1047
1048 /*
1049  * This is a frequency table for "General Purpose" clocks.
1050  * These clocks can be muxed to the SoC pins and may be used by
1051  * external devices. They're often used as PWM source.
1052  *
1053  * See comment at ftbl_gcc_gp1_3_clk.
1054  */
1055 static const struct freq_tbl ftbl_gcc_camss_gp0_1_clk[] = {
1056         F(10000,   P_XO,    16,  1, 120),
1057         F(100000,  P_XO,    16,  1,  12),
1058         F(500000,  P_GPLL0, 16,  1, 100),
1059         F(1000000, P_GPLL0, 16,  1,  50),
1060         F(2500000, P_GPLL0, 16,  1,  20),
1061         F(5000000, P_GPLL0, 16,  1,  10),
1062         F(100000000, P_GPLL0, 8, 0, 0),
1063         F(200000000, P_GPLL0, 4, 0, 0),
1064         { }
1065 };
1066
1067 static struct clk_rcg2 camss_gp0_clk_src = {
1068         .cmd_rcgr = 0x54000,
1069         .mnd_width = 8,
1070         .hid_width = 5,
1071         .parent_map = gcc_xo_gpll0_gpll1a_sleep_map,
1072         .freq_tbl = ftbl_gcc_camss_gp0_1_clk,
1073         .clkr.hw.init = &(struct clk_init_data){
1074                 .name = "camss_gp0_clk_src",
1075                 .parent_data = gcc_xo_gpll0_gpll1a_sleep_parent_data,
1076                 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll1a_sleep_parent_data),
1077                 .ops = &clk_rcg2_ops,
1078         },
1079 };
1080
1081 static struct clk_rcg2 camss_gp1_clk_src = {
1082         .cmd_rcgr = 0x55000,
1083         .mnd_width = 8,
1084         .hid_width = 5,
1085         .parent_map = gcc_xo_gpll0_gpll1a_sleep_map,
1086         .freq_tbl = ftbl_gcc_camss_gp0_1_clk,
1087         .clkr.hw.init = &(struct clk_init_data){
1088                 .name = "camss_gp1_clk_src",
1089                 .parent_data = gcc_xo_gpll0_gpll1a_sleep_parent_data,
1090                 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll1a_sleep_parent_data),
1091                 .ops = &clk_rcg2_ops,
1092         },
1093 };
1094
1095 static const struct freq_tbl ftbl_gcc_camss_jpeg0_clk[] = {
1096         F(133330000, P_GPLL0, 6, 0,     0),
1097         F(266670000, P_GPLL0, 3, 0,     0),
1098         F(320000000, P_GPLL0, 2.5, 0, 0),
1099         { }
1100 };
1101
1102 static struct clk_rcg2 jpeg0_clk_src = {
1103         .cmd_rcgr = 0x57000,
1104         .hid_width = 5,
1105         .parent_map = gcc_xo_gpll0_map,
1106         .freq_tbl = ftbl_gcc_camss_jpeg0_clk,
1107         .clkr.hw.init = &(struct clk_init_data){
1108                 .name = "jpeg0_clk_src",
1109                 .parent_data = gcc_xo_gpll0_parent_data,
1110                 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_parent_data),
1111                 .ops = &clk_rcg2_ops,
1112         },
1113 };
1114
1115 static const struct freq_tbl ftbl_gcc_camss_mclk0_1_clk[] = {
1116         F(24000000, P_GPLL0, 1, 1, 45),
1117         F(66670000, P_GPLL0, 12, 0, 0),
1118         { }
1119 };
1120
1121 static struct clk_rcg2 mclk0_clk_src = {
1122         .cmd_rcgr = 0x52000,
1123         .mnd_width = 8,
1124         .hid_width = 5,
1125         .parent_map = gcc_xo_gpll0_gpll1a_gpll6_sleep_map,
1126         .freq_tbl = ftbl_gcc_camss_mclk0_1_clk,
1127         .clkr.hw.init = &(struct clk_init_data){
1128                 .name = "mclk0_clk_src",
1129                 .parent_data = gcc_xo_gpll0_gpll1a_gpll6_sleep_parent_data,
1130                 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll1a_gpll6_sleep_parent_data),
1131                 .ops = &clk_rcg2_ops,
1132         },
1133 };
1134
1135 static struct clk_rcg2 mclk1_clk_src = {
1136         .cmd_rcgr = 0x53000,
1137         .mnd_width = 8,
1138         .hid_width = 5,
1139         .parent_map = gcc_xo_gpll0_gpll1a_gpll6_sleep_map,
1140         .freq_tbl = ftbl_gcc_camss_mclk0_1_clk,
1141         .clkr.hw.init = &(struct clk_init_data){
1142                 .name = "mclk1_clk_src",
1143                 .parent_data = gcc_xo_gpll0_gpll1a_gpll6_sleep_parent_data,
1144                 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll1a_gpll6_sleep_parent_data),
1145                 .ops = &clk_rcg2_ops,
1146         },
1147 };
1148
1149 static const struct freq_tbl ftbl_gcc_camss_csi0_1phytimer_clk[] = {
1150         F(100000000, P_GPLL0, 8, 0,     0),
1151         F(200000000, P_GPLL0, 4, 0,     0),
1152         { }
1153 };
1154
1155 static struct clk_rcg2 csi0phytimer_clk_src = {
1156         .cmd_rcgr = 0x4e000,
1157         .hid_width = 5,
1158         .parent_map = gcc_xo_gpll0_gpll1a_map,
1159         .freq_tbl = ftbl_gcc_camss_csi0_1phytimer_clk,
1160         .clkr.hw.init = &(struct clk_init_data){
1161                 .name = "csi0phytimer_clk_src",
1162                 .parent_data = gcc_xo_gpll0_gpll1a_parent_data,
1163                 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll1a_parent_data),
1164                 .ops = &clk_rcg2_ops,
1165         },
1166 };
1167
1168 static struct clk_rcg2 csi1phytimer_clk_src = {
1169         .cmd_rcgr = 0x4f000,
1170         .hid_width = 5,
1171         .parent_map = gcc_xo_gpll0_gpll1a_map,
1172         .freq_tbl = ftbl_gcc_camss_csi0_1phytimer_clk,
1173         .clkr.hw.init = &(struct clk_init_data){
1174                 .name = "csi1phytimer_clk_src",
1175                 .parent_data = gcc_xo_gpll0_gpll1a_parent_data,
1176                 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll1a_parent_data),
1177                 .ops = &clk_rcg2_ops,
1178         },
1179 };
1180
1181 static const struct freq_tbl ftbl_gcc_camss_cpp_clk[] = {
1182         F(160000000, P_GPLL0, 5, 0, 0),
1183         F(200000000, P_GPLL0, 4, 0, 0),
1184         F(228570000, P_GPLL0, 3.5, 0, 0),
1185         F(266670000, P_GPLL0, 3, 0, 0),
1186         F(320000000, P_GPLL0, 2.5, 0, 0),
1187         F(465000000, P_GPLL2, 2, 0, 0),
1188         { }
1189 };
1190
1191 static struct clk_rcg2 cpp_clk_src = {
1192         .cmd_rcgr = 0x58018,
1193         .hid_width = 5,
1194         .parent_map = gcc_xo_gpll0_gpll2_map,
1195         .freq_tbl = ftbl_gcc_camss_cpp_clk,
1196         .clkr.hw.init = &(struct clk_init_data){
1197                 .name = "cpp_clk_src",
1198                 .parent_data = gcc_xo_gpll0_gpll2_parent_data,
1199                 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll2_parent_data),
1200                 .ops = &clk_rcg2_ops,
1201         },
1202 };
1203
1204 static const struct freq_tbl ftbl_gcc_crypto_clk[] = {
1205         F(50000000, P_GPLL0, 16, 0, 0),
1206         F(80000000, P_GPLL0, 10, 0, 0),
1207         F(100000000, P_GPLL0, 8, 0, 0),
1208         F(160000000, P_GPLL0, 5, 0, 0),
1209         { }
1210 };
1211
1212 /* This is not in the documentation but is in the downstream driver */
1213 static struct clk_rcg2 crypto_clk_src = {
1214         .cmd_rcgr = 0x16004,
1215         .hid_width = 5,
1216         .parent_map = gcc_xo_gpll0_map,
1217         .freq_tbl = ftbl_gcc_crypto_clk,
1218         .clkr.hw.init = &(struct clk_init_data){
1219                 .name = "crypto_clk_src",
1220                 .parent_data = gcc_xo_gpll0_parent_data,
1221                 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_parent_data),
1222                 .ops = &clk_rcg2_ops,
1223         },
1224 };
1225
1226 /*
1227  * This is a frequency table for "General Purpose" clocks.
1228  * These clocks can be muxed to the SoC pins and may be used by
1229  * external devices. They're often used as PWM source.
1230  *
1231  * Please note that MND divider must be enabled for duty-cycle
1232  * control to be possible. (M != N) Also since D register is configured
1233  * with a value multiplied by 2, and duty cycle is calculated as
1234  *                             (2 * D) % 2^W
1235  *                DutyCycle = ----------------
1236  *                              2 * (N % 2^W)
1237  * (where W = .mnd_width)
1238  * N must be half or less than maximum value for the register.
1239  * Otherwise duty-cycle control would be limited.
1240  * (e.g. for 8-bit NMD N should be less than 128)
1241  */
1242 static const struct freq_tbl ftbl_gcc_gp1_3_clk[] = {
1243         F(10000,   P_XO,    16,  1, 120),
1244         F(100000,  P_XO,    16,  1,  12),
1245         F(500000,  P_GPLL0, 16,  1, 100),
1246         F(1000000, P_GPLL0, 16,  1,  50),
1247         F(2500000, P_GPLL0, 16,  1,  20),
1248         F(5000000, P_GPLL0, 16,  1,  10),
1249         F(19200000, P_XO, 1, 0, 0),
1250         { }
1251 };
1252
1253 static struct clk_rcg2 gp1_clk_src = {
1254         .cmd_rcgr = 0x08004,
1255         .mnd_width = 8,
1256         .hid_width = 5,
1257         .parent_map = gcc_xo_gpll0_gpll1a_sleep_map,
1258         .freq_tbl = ftbl_gcc_gp1_3_clk,
1259         .clkr.hw.init = &(struct clk_init_data){
1260                 .name = "gp1_clk_src",
1261                 .parent_data = gcc_xo_gpll0_gpll1a_sleep_parent_data,
1262                 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll1a_sleep_parent_data),
1263                 .ops = &clk_rcg2_ops,
1264         },
1265 };
1266
1267 static struct clk_rcg2 gp2_clk_src = {
1268         .cmd_rcgr = 0x09004,
1269         .mnd_width = 8,
1270         .hid_width = 5,
1271         .parent_map = gcc_xo_gpll0_gpll1a_sleep_map,
1272         .freq_tbl = ftbl_gcc_gp1_3_clk,
1273         .clkr.hw.init = &(struct clk_init_data){
1274                 .name = "gp2_clk_src",
1275                 .parent_data = gcc_xo_gpll0_gpll1a_sleep_parent_data,
1276                 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll1a_sleep_parent_data),
1277                 .ops = &clk_rcg2_ops,
1278         },
1279 };
1280
1281 static struct clk_rcg2 gp3_clk_src = {
1282         .cmd_rcgr = 0x0a004,
1283         .mnd_width = 8,
1284         .hid_width = 5,
1285         .parent_map = gcc_xo_gpll0_gpll1a_sleep_map,
1286         .freq_tbl = ftbl_gcc_gp1_3_clk,
1287         .clkr.hw.init = &(struct clk_init_data){
1288                 .name = "gp3_clk_src",
1289                 .parent_data = gcc_xo_gpll0_gpll1a_sleep_parent_data,
1290                 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll1a_sleep_parent_data),
1291                 .ops = &clk_rcg2_ops,
1292         },
1293 };
1294
1295 static struct clk_rcg2 byte0_clk_src = {
1296         .cmd_rcgr = 0x4d044,
1297         .hid_width = 5,
1298         .parent_map = gcc_xo_gpll0a_dsibyte_map,
1299         .clkr.hw.init = &(struct clk_init_data){
1300                 .name = "byte0_clk_src",
1301                 .parent_data = gcc_xo_gpll0a_dsibyte_parent_data,
1302                 .num_parents = ARRAY_SIZE(gcc_xo_gpll0a_dsibyte_parent_data),
1303                 .ops = &clk_byte2_ops,
1304                 .flags = CLK_SET_RATE_PARENT,
1305         },
1306 };
1307
1308 static struct clk_rcg2 byte1_clk_src = {
1309         .cmd_rcgr = 0x4d0b0,
1310         .hid_width = 5,
1311         .parent_map = gcc_xo_gpll0a_dsibyte_map,
1312         .clkr.hw.init = &(struct clk_init_data){
1313                 .name = "byte1_clk_src",
1314                 .parent_data = gcc_xo_gpll0a_dsibyte_parent_data,
1315                 .num_parents = ARRAY_SIZE(gcc_xo_gpll0a_dsibyte_parent_data),
1316                 .ops = &clk_byte2_ops,
1317                 .flags = CLK_SET_RATE_PARENT,
1318         },
1319 };
1320
1321 static const struct freq_tbl ftbl_gcc_mdss_esc_clk[] = {
1322         F(19200000, P_XO, 1, 0, 0),
1323         { }
1324 };
1325
1326 static struct clk_rcg2 esc0_clk_src = {
1327         .cmd_rcgr = 0x4d060,
1328         .hid_width = 5,
1329         .parent_map = gcc_xo_dsibyte_map,
1330         .freq_tbl = ftbl_gcc_mdss_esc_clk,
1331         .clkr.hw.init = &(struct clk_init_data){
1332                 .name = "esc0_clk_src",
1333                 .parent_data = gcc_xo_dsibyte_parent_data,
1334                 .num_parents = ARRAY_SIZE(gcc_xo_dsibyte_parent_data),
1335                 .ops = &clk_rcg2_ops,
1336         },
1337 };
1338
1339 static struct clk_rcg2 esc1_clk_src = {
1340         .cmd_rcgr = 0x4d0a8,
1341         .hid_width = 5,
1342         .parent_map = gcc_xo_dsibyte_map,
1343         .freq_tbl = ftbl_gcc_mdss_esc_clk,
1344         .clkr.hw.init = &(struct clk_init_data){
1345                 .name = "esc1_clk_src",
1346                 .parent_data = gcc_xo_dsibyte_parent_data,
1347                 .num_parents = ARRAY_SIZE(gcc_xo_dsibyte_parent_data),
1348                 .ops = &clk_rcg2_ops,
1349         },
1350 };
1351
1352 static const struct freq_tbl ftbl_gcc_mdss_mdp_clk[] = {
1353         F(50000000, P_GPLL0_AUX, 16, 0, 0),
1354         F(80000000, P_GPLL0_AUX, 10, 0, 0),
1355         F(100000000, P_GPLL0_AUX, 8, 0, 0),
1356         F(145500000, P_GPLL0_AUX, 5.5, 0, 0),
1357         F(153600000, P_GPLL0, 4, 0, 0),
1358         F(160000000, P_GPLL0_AUX, 5, 0, 0),
1359         F(177780000, P_GPLL0_AUX, 4.5, 0, 0),
1360         F(200000000, P_GPLL0_AUX, 4, 0, 0),
1361         F(266670000, P_GPLL0_AUX, 3, 0, 0),
1362         F(307200000, P_GPLL1, 2, 0, 0),
1363         F(366670000, P_GPLL3_AUX, 3, 0, 0),
1364         { }
1365 };
1366
1367 static struct clk_rcg2 mdp_clk_src = {
1368         .cmd_rcgr = 0x4d014,
1369         .hid_width = 5,
1370         .parent_map = gcc_xo_gpll1_dsiphy_gpll6_gpll3a_gpll0a_map,
1371         .freq_tbl = ftbl_gcc_mdss_mdp_clk,
1372         .clkr.hw.init = &(struct clk_init_data){
1373                 .name = "mdp_clk_src",
1374                 .parent_data = gcc_xo_gpll1_dsiphy_gpll6_gpll3a_gpll0a_parent_data,
1375                 .num_parents = ARRAY_SIZE(gcc_xo_gpll1_dsiphy_gpll6_gpll3a_gpll0a_parent_data),
1376                 .ops = &clk_rcg2_ops,
1377         },
1378 };
1379
1380 static struct clk_rcg2 pclk0_clk_src = {
1381         .cmd_rcgr = 0x4d000,
1382         .mnd_width = 8,
1383         .hid_width = 5,
1384         .parent_map = gcc_xo_gpll0a_dsiphy_map,
1385         .clkr.hw.init = &(struct clk_init_data){
1386                 .name = "pclk0_clk_src",
1387                 .parent_data = gcc_xo_gpll0a_dsiphy_parent_data,
1388                 .num_parents = ARRAY_SIZE(gcc_xo_gpll0a_dsiphy_parent_data),
1389                 .ops = &clk_pixel_ops,
1390                 .flags = CLK_SET_RATE_PARENT,
1391         },
1392 };
1393
1394 static struct clk_rcg2 pclk1_clk_src = {
1395         .cmd_rcgr = 0x4d0b8,
1396         .mnd_width = 8,
1397         .hid_width = 5,
1398         .parent_map = gcc_xo_gpll0a_dsiphy_map,
1399         .clkr.hw.init = &(struct clk_init_data){
1400                 .name = "pclk1_clk_src",
1401                 .parent_data = gcc_xo_gpll0a_dsiphy_parent_data,
1402                 .num_parents = ARRAY_SIZE(gcc_xo_gpll0a_dsiphy_parent_data),
1403                 .ops = &clk_pixel_ops,
1404                 .flags = CLK_SET_RATE_PARENT,
1405         },
1406 };
1407
1408 static const struct freq_tbl ftbl_gcc_mdss_vsync_clk[] = {
1409         F(19200000, P_XO, 1, 0, 0),
1410         { }
1411 };
1412
1413 static struct clk_rcg2 vsync_clk_src = {
1414         .cmd_rcgr = 0x4d02c,
1415         .hid_width = 5,
1416         .parent_map = gcc_xo_gpll0a_map,
1417         .freq_tbl = ftbl_gcc_mdss_vsync_clk,
1418         .clkr.hw.init = &(struct clk_init_data){
1419                 .name = "vsync_clk_src",
1420                 .parent_data = gcc_xo_gpll0a_parent_data,
1421                 .num_parents = ARRAY_SIZE(gcc_xo_gpll0a_parent_data),
1422                 .ops = &clk_rcg2_ops,
1423         },
1424 };
1425
1426 static const struct freq_tbl ftbl_gcc_pdm2_clk[] = {
1427         F(64000000, P_GPLL0, 12.5, 0, 0),
1428         { }
1429 };
1430
1431 /* This is not in the documentation but is in the downstream driver */
1432 static struct clk_rcg2 pdm2_clk_src = {
1433         .cmd_rcgr = 0x44010,
1434         .hid_width = 5,
1435         .parent_map = gcc_xo_gpll0_map,
1436         .freq_tbl = ftbl_gcc_pdm2_clk,
1437         .clkr.hw.init = &(struct clk_init_data){
1438                 .name = "pdm2_clk_src",
1439                 .parent_data = gcc_xo_gpll0_parent_data,
1440                 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_parent_data),
1441                 .ops = &clk_rcg2_ops,
1442         },
1443 };
1444
1445 static const struct freq_tbl ftbl_gcc_sdcc_apps_clk[] = {
1446         F(144000, P_XO, 16, 3, 25),
1447         F(400000, P_XO, 12, 1, 4),
1448         F(20000000, P_GPLL0, 10, 1, 4),
1449         F(25000000, P_GPLL0, 16, 1, 2),
1450         F(50000000, P_GPLL0, 16, 0, 0),
1451         F(100000000, P_GPLL0, 8, 0, 0),
1452         F(177770000, P_GPLL0, 4.5, 0, 0),
1453         F(200000000, P_GPLL0, 4, 0, 0),
1454         { }
1455 };
1456
1457 static struct clk_rcg2 sdcc1_apps_clk_src = {
1458         .cmd_rcgr = 0x42004,
1459         .mnd_width = 8,
1460         .hid_width = 5,
1461         .parent_map = gcc_xo_gpll0_map,
1462         .freq_tbl = ftbl_gcc_sdcc_apps_clk,
1463         .clkr.hw.init = &(struct clk_init_data){
1464                 .name = "sdcc1_apps_clk_src",
1465                 .parent_data = gcc_xo_gpll0_parent_data,
1466                 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_parent_data),
1467                 .ops = &clk_rcg2_floor_ops,
1468         },
1469 };
1470
1471 static struct clk_rcg2 sdcc2_apps_clk_src = {
1472         .cmd_rcgr = 0x43004,
1473         .mnd_width = 8,
1474         .hid_width = 5,
1475         .parent_map = gcc_xo_gpll0_map,
1476         .freq_tbl = ftbl_gcc_sdcc_apps_clk,
1477         .clkr.hw.init = &(struct clk_init_data){
1478                 .name = "sdcc2_apps_clk_src",
1479                 .parent_data = gcc_xo_gpll0_parent_data,
1480                 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_parent_data),
1481                 .ops = &clk_rcg2_floor_ops,
1482         },
1483 };
1484
1485 static const struct freq_tbl ftbl_gcc_apss_tcu_clk[] = {
1486         F(154285000, P_GPLL6, 7, 0, 0),
1487         F(320000000, P_GPLL0, 2.5, 0, 0),
1488         F(400000000, P_GPLL0, 2, 0, 0),
1489         { }
1490 };
1491
1492 static struct clk_rcg2 apss_tcu_clk_src = {
1493         .cmd_rcgr = 0x1207c,
1494         .hid_width = 5,
1495         .parent_map = gcc_xo_gpll0_gpll5a_gpll6_bimc_map,
1496         .freq_tbl = ftbl_gcc_apss_tcu_clk,
1497         .clkr.hw.init = &(struct clk_init_data){
1498                 .name = "apss_tcu_clk_src",
1499                 .parent_data = gcc_xo_gpll0_gpll5a_gpll6_bimc_parent_data,
1500                 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll5a_gpll6_bimc_parent_data),
1501                 .ops = &clk_rcg2_ops,
1502         },
1503 };
1504
1505 static const struct freq_tbl ftbl_gcc_bimc_gpu_clk[] = {
1506         F(19200000, P_XO, 1, 0, 0),
1507         F(100000000, P_GPLL0, 8, 0, 0),
1508         F(200000000, P_GPLL0, 4, 0, 0),
1509         F(266500000, P_BIMC, 4, 0, 0),
1510         F(400000000, P_GPLL0, 2, 0, 0),
1511         F(533000000, P_BIMC, 2, 0, 0),
1512         { }
1513 };
1514
1515 static struct clk_rcg2 bimc_gpu_clk_src = {
1516         .cmd_rcgr = 0x31028,
1517         .hid_width = 5,
1518         .parent_map = gcc_xo_gpll0_gpll5a_gpll6_bimc_map,
1519         .freq_tbl = ftbl_gcc_bimc_gpu_clk,
1520         .clkr.hw.init = &(struct clk_init_data){
1521                 .name = "bimc_gpu_clk_src",
1522                 .parent_data = gcc_xo_gpll0_gpll5a_gpll6_bimc_parent_data,
1523                 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll5a_gpll6_bimc_parent_data),
1524                 .flags = CLK_GET_RATE_NOCACHE,
1525                 .ops = &clk_rcg2_ops,
1526         },
1527 };
1528
1529 static const struct freq_tbl ftbl_gcc_usb_hs_system_clk[] = {
1530         F(57140000, P_GPLL0, 14, 0, 0),
1531         F(80000000, P_GPLL0, 10, 0, 0),
1532         F(100000000, P_GPLL0, 8, 0, 0),
1533         { }
1534 };
1535
1536 static struct clk_rcg2 usb_hs_system_clk_src = {
1537         .cmd_rcgr = 0x41010,
1538         .hid_width = 5,
1539         .parent_map = gcc_xo_gpll0_map,
1540         .freq_tbl = ftbl_gcc_usb_hs_system_clk,
1541         .clkr.hw.init = &(struct clk_init_data){
1542                 .name = "usb_hs_system_clk_src",
1543                 .parent_data = gcc_xo_gpll0_parent_data,
1544                 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_parent_data),
1545                 .ops = &clk_rcg2_ops,
1546         },
1547 };
1548
1549 static const struct freq_tbl ftbl_gcc_usb_fs_system_clk[] = {
1550         F(64000000, P_GPLL0, 12.5, 0, 0),
1551         { }
1552 };
1553
1554 static struct clk_rcg2 usb_fs_system_clk_src = {
1555         .cmd_rcgr = 0x3f010,
1556         .hid_width = 5,
1557         .parent_map = gcc_xo_gpll0_map,
1558         .freq_tbl = ftbl_gcc_usb_fs_system_clk,
1559         .clkr.hw.init = &(struct clk_init_data){
1560                 .name = "usb_fs_system_clk_src",
1561                 .parent_data = gcc_xo_gpll6_gpll0_parent_data,
1562                 .num_parents = ARRAY_SIZE(gcc_xo_gpll6_gpll0_parent_data),
1563                 .ops = &clk_rcg2_ops,
1564         },
1565 };
1566
1567 static const struct freq_tbl ftbl_gcc_usb_fs_ic_clk[] = {
1568         F(60000000, P_GPLL6, 1, 1, 18),
1569         { }
1570 };
1571
1572 static struct clk_rcg2 usb_fs_ic_clk_src = {
1573         .cmd_rcgr = 0x3f034,
1574         .hid_width = 5,
1575         .parent_map = gcc_xo_gpll0_map,
1576         .freq_tbl = ftbl_gcc_usb_fs_ic_clk,
1577         .clkr.hw.init = &(struct clk_init_data){
1578                 .name = "usb_fs_ic_clk_src",
1579                 .parent_data = gcc_xo_gpll6_gpll0a_parent_data,
1580                 .num_parents = ARRAY_SIZE(gcc_xo_gpll6_gpll0a_parent_data),
1581                 .ops = &clk_rcg2_ops,
1582         },
1583 };
1584
1585 static const struct freq_tbl ftbl_gcc_ultaudio_ahb_clk[] = {
1586         F(3200000, P_XO, 6, 0, 0),
1587         F(6400000, P_XO, 3, 0, 0),
1588         F(9600000, P_XO, 2, 0, 0),
1589         F(19200000, P_XO, 1, 0, 0),
1590         F(40000000, P_GPLL0, 10, 1, 2),
1591         F(66670000, P_GPLL0, 12, 0, 0),
1592         F(80000000, P_GPLL0, 10, 0, 0),
1593         F(100000000, P_GPLL0, 8, 0, 0),
1594         { }
1595 };
1596
1597 static struct clk_rcg2 ultaudio_ahbfabric_clk_src = {
1598         .cmd_rcgr = 0x1c010,
1599         .hid_width = 5,
1600         .mnd_width = 8,
1601         .parent_map = gcc_xo_gpll0_gpll1_sleep_map,
1602         .freq_tbl = ftbl_gcc_ultaudio_ahb_clk,
1603         .clkr.hw.init = &(struct clk_init_data){
1604                 .name = "ultaudio_ahbfabric_clk_src",
1605                 .parent_data = gcc_xo_gpll0_gpll1_sleep_parent_data,
1606                 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_gpll1_sleep_parent_data),
1607                 .ops = &clk_rcg2_ops,
1608         },
1609 };
1610
1611 static struct clk_branch gcc_ultaudio_ahbfabric_ixfabric_clk = {
1612         .halt_reg = 0x1c028,
1613         .clkr = {
1614                 .enable_reg = 0x1c028,
1615                 .enable_mask = BIT(0),
1616                 .hw.init = &(struct clk_init_data){
1617                         .name = "gcc_ultaudio_ahbfabric_ixfabric_clk",
1618                         .parent_hws = (const struct clk_hw*[]){
1619                                 &ultaudio_ahbfabric_clk_src.clkr.hw,
1620                         },
1621                         .num_parents = 1,
1622                         .flags = CLK_SET_RATE_PARENT,
1623                         .ops = &clk_branch2_ops,
1624                 },
1625         },
1626 };
1627
1628 static struct clk_branch gcc_ultaudio_ahbfabric_ixfabric_lpm_clk = {
1629         .halt_reg = 0x1c024,
1630         .clkr = {
1631                 .enable_reg = 0x1c024,
1632                 .enable_mask = BIT(0),
1633                 .hw.init = &(struct clk_init_data){
1634                         .name = "gcc_ultaudio_ahbfabric_ixfabric_lpm_clk",
1635                         .parent_hws = (const struct clk_hw*[]){
1636                                 &ultaudio_ahbfabric_clk_src.clkr.hw,
1637                         },
1638                         .num_parents = 1,
1639                         .flags = CLK_SET_RATE_PARENT,
1640                         .ops = &clk_branch2_ops,
1641                 },
1642         },
1643 };
1644
1645 static const struct freq_tbl ftbl_gcc_ultaudio_lpaif_i2s_clk[] = {
1646         F(128000, P_XO, 10, 1, 15),
1647         F(256000, P_XO, 5, 1, 15),
1648         F(384000, P_XO, 5, 1, 10),
1649         F(512000, P_XO, 5, 2, 15),
1650         F(576000, P_XO, 5, 3, 20),
1651         F(705600, P_GPLL1, 16, 1, 80),
1652         F(768000, P_XO, 5, 1, 5),
1653         F(800000, P_XO, 5, 5, 24),
1654         F(1024000, P_XO, 5, 4, 15),
1655         F(1152000, P_XO, 1, 3, 50),
1656         F(1411200, P_GPLL1, 16, 1, 40),
1657         F(1536000, P_XO, 1, 2, 25),
1658         F(1600000, P_XO, 12, 0, 0),
1659         F(1728000, P_XO, 5, 9, 20),
1660         F(2048000, P_XO, 5, 8, 15),
1661         F(2304000, P_XO, 5, 3, 5),
1662         F(2400000, P_XO, 8, 0, 0),
1663         F(2822400, P_GPLL1, 16, 1, 20),
1664         F(3072000, P_XO, 5, 4, 5),
1665         F(4096000, P_GPLL1, 9, 2, 49),
1666         F(4800000, P_XO, 4, 0, 0),
1667         F(5644800, P_GPLL1, 16, 1, 10),
1668         F(6144000, P_GPLL1, 7, 1, 21),
1669         F(8192000, P_GPLL1, 9, 4, 49),
1670         F(9600000, P_XO, 2, 0, 0),
1671         F(11289600, P_GPLL1, 16, 1, 5),
1672         F(12288000, P_GPLL1, 7, 2, 21),
1673         { }
1674 };
1675
1676 static struct clk_rcg2 ultaudio_lpaif_pri_i2s_clk_src = {
1677         .cmd_rcgr = 0x1c054,
1678         .hid_width = 5,
1679         .mnd_width = 8,
1680         .parent_map = gcc_xo_gpll1_epi2s_emclk_sleep_map,
1681         .freq_tbl = ftbl_gcc_ultaudio_lpaif_i2s_clk,
1682         .clkr.hw.init = &(struct clk_init_data){
1683                 .name = "ultaudio_lpaif_pri_i2s_clk_src",
1684                 .parent_data = gcc_xo_gpll1_epi2s_emclk_sleep_parent_data,
1685                 .num_parents = ARRAY_SIZE(gcc_xo_gpll1_epi2s_emclk_sleep_parent_data),
1686                 .ops = &clk_rcg2_ops,
1687         },
1688 };
1689
1690 static struct clk_branch gcc_ultaudio_lpaif_pri_i2s_clk = {
1691         .halt_reg = 0x1c068,
1692         .clkr = {
1693                 .enable_reg = 0x1c068,
1694                 .enable_mask = BIT(0),
1695                 .hw.init = &(struct clk_init_data){
1696                         .name = "gcc_ultaudio_lpaif_pri_i2s_clk",
1697                         .parent_hws = (const struct clk_hw*[]){
1698                                 &ultaudio_lpaif_pri_i2s_clk_src.clkr.hw,
1699                         },
1700                         .num_parents = 1,
1701                         .flags = CLK_SET_RATE_PARENT,
1702                         .ops = &clk_branch2_ops,
1703                 },
1704         },
1705 };
1706
1707 static struct clk_rcg2 ultaudio_lpaif_sec_i2s_clk_src = {
1708         .cmd_rcgr = 0x1c06c,
1709         .hid_width = 5,
1710         .mnd_width = 8,
1711         .parent_map = gcc_xo_gpll1_esi2s_emclk_sleep_map,
1712         .freq_tbl = ftbl_gcc_ultaudio_lpaif_i2s_clk,
1713         .clkr.hw.init = &(struct clk_init_data){
1714                 .name = "ultaudio_lpaif_sec_i2s_clk_src",
1715                 .parent_data = gcc_xo_gpll1_esi2s_emclk_sleep_parent_data,
1716                 .num_parents = ARRAY_SIZE(gcc_xo_gpll1_esi2s_emclk_sleep_parent_data),
1717                 .ops = &clk_rcg2_ops,
1718         },
1719 };
1720
1721 static struct clk_branch gcc_ultaudio_lpaif_sec_i2s_clk = {
1722         .halt_reg = 0x1c080,
1723         .clkr = {
1724                 .enable_reg = 0x1c080,
1725                 .enable_mask = BIT(0),
1726                 .hw.init = &(struct clk_init_data){
1727                         .name = "gcc_ultaudio_lpaif_sec_i2s_clk",
1728                         .parent_hws = (const struct clk_hw*[]){
1729                                 &ultaudio_lpaif_sec_i2s_clk_src.clkr.hw,
1730                         },
1731                         .num_parents = 1,
1732                         .flags = CLK_SET_RATE_PARENT,
1733                         .ops = &clk_branch2_ops,
1734                 },
1735         },
1736 };
1737
1738 static struct clk_rcg2 ultaudio_lpaif_aux_i2s_clk_src = {
1739         .cmd_rcgr = 0x1c084,
1740         .hid_width = 5,
1741         .mnd_width = 8,
1742         .parent_map = gcc_xo_gpll1_emclk_sleep_map,
1743         .freq_tbl = ftbl_gcc_ultaudio_lpaif_i2s_clk,
1744         .clkr.hw.init = &(struct clk_init_data){
1745                 .name = "ultaudio_lpaif_aux_i2s_clk_src",
1746                 .parent_data = gcc_xo_gpll1_esi2s_emclk_sleep_parent_data,
1747                 .num_parents = ARRAY_SIZE(gcc_xo_gpll1_esi2s_emclk_sleep_parent_data),
1748                 .ops = &clk_rcg2_ops,
1749         },
1750 };
1751
1752 static struct clk_branch gcc_ultaudio_lpaif_aux_i2s_clk = {
1753         .halt_reg = 0x1c098,
1754         .clkr = {
1755                 .enable_reg = 0x1c098,
1756                 .enable_mask = BIT(0),
1757                 .hw.init = &(struct clk_init_data){
1758                         .name = "gcc_ultaudio_lpaif_aux_i2s_clk",
1759                         .parent_hws = (const struct clk_hw*[]){
1760                                 &ultaudio_lpaif_aux_i2s_clk_src.clkr.hw,
1761                         },
1762                         .num_parents = 1,
1763                         .flags = CLK_SET_RATE_PARENT,
1764                         .ops = &clk_branch2_ops,
1765                 },
1766         },
1767 };
1768
1769 static const struct freq_tbl ftbl_gcc_ultaudio_xo_clk[] = {
1770         F(19200000, P_XO, 1, 0, 0),
1771         { }
1772 };
1773
1774 static struct clk_rcg2 ultaudio_xo_clk_src = {
1775         .cmd_rcgr = 0x1c034,
1776         .hid_width = 5,
1777         .parent_map = gcc_xo_sleep_map,
1778         .freq_tbl = ftbl_gcc_ultaudio_xo_clk,
1779         .clkr.hw.init = &(struct clk_init_data){
1780                 .name = "ultaudio_xo_clk_src",
1781                 .parent_data = gcc_xo_sleep_parent_data,
1782                 .num_parents = ARRAY_SIZE(gcc_xo_sleep_parent_data),
1783                 .ops = &clk_rcg2_ops,
1784         },
1785 };
1786
1787 static struct clk_branch gcc_ultaudio_avsync_xo_clk = {
1788         .halt_reg = 0x1c04c,
1789         .clkr = {
1790                 .enable_reg = 0x1c04c,
1791                 .enable_mask = BIT(0),
1792                 .hw.init = &(struct clk_init_data){
1793                         .name = "gcc_ultaudio_avsync_xo_clk",
1794                         .parent_hws = (const struct clk_hw*[]){
1795                                 &ultaudio_xo_clk_src.clkr.hw,
1796                         },
1797                         .num_parents = 1,
1798                         .flags = CLK_SET_RATE_PARENT,
1799                         .ops = &clk_branch2_ops,
1800                 },
1801         },
1802 };
1803
1804 static struct clk_branch gcc_ultaudio_stc_xo_clk = {
1805         .halt_reg = 0x1c050,
1806         .clkr = {
1807                 .enable_reg = 0x1c050,
1808                 .enable_mask = BIT(0),
1809                 .hw.init = &(struct clk_init_data){
1810                         .name = "gcc_ultaudio_stc_xo_clk",
1811                         .parent_hws = (const struct clk_hw*[]){
1812                                 &ultaudio_xo_clk_src.clkr.hw,
1813                         },
1814                         .num_parents = 1,
1815                         .flags = CLK_SET_RATE_PARENT,
1816                         .ops = &clk_branch2_ops,
1817                 },
1818         },
1819 };
1820
1821 static const struct freq_tbl ftbl_codec_clk[] = {
1822         F(9600000, P_XO, 2, 0, 0),
1823         F(12288000, P_XO, 1, 16, 25),
1824         F(19200000, P_XO, 1, 0, 0),
1825         F(11289600, P_EXT_MCLK, 1, 0, 0),
1826         { }
1827 };
1828
1829 static struct clk_rcg2 codec_digcodec_clk_src = {
1830         .cmd_rcgr = 0x1c09c,
1831         .mnd_width = 8,
1832         .hid_width = 5,
1833         .parent_map = gcc_xo_gpll1_emclk_sleep_map,
1834         .freq_tbl = ftbl_codec_clk,
1835         .clkr.hw.init = &(struct clk_init_data){
1836                 .name = "codec_digcodec_clk_src",
1837                 .parent_data = gcc_xo_gpll1_emclk_sleep_parent_data,
1838                 .num_parents = ARRAY_SIZE(gcc_xo_gpll1_emclk_sleep_parent_data),
1839                 .ops = &clk_rcg2_ops,
1840         },
1841 };
1842
1843 static struct clk_branch gcc_codec_digcodec_clk = {
1844         .halt_reg = 0x1c0b0,
1845         .clkr = {
1846                 .enable_reg = 0x1c0b0,
1847                 .enable_mask = BIT(0),
1848                 .hw.init = &(struct clk_init_data){
1849                         .name = "gcc_ultaudio_codec_digcodec_clk",
1850                         .parent_hws = (const struct clk_hw*[]){
1851                                 &codec_digcodec_clk_src.clkr.hw,
1852                         },
1853                         .num_parents = 1,
1854                         .flags = CLK_SET_RATE_PARENT,
1855                         .ops = &clk_branch2_ops,
1856                 },
1857         },
1858 };
1859
1860 static struct clk_branch gcc_ultaudio_pcnoc_mport_clk = {
1861         .halt_reg = 0x1c000,
1862         .clkr = {
1863                 .enable_reg = 0x1c000,
1864                 .enable_mask = BIT(0),
1865                 .hw.init = &(struct clk_init_data){
1866                         .name = "gcc_ultaudio_pcnoc_mport_clk",
1867                         .parent_hws = (const struct clk_hw*[]){
1868                                 &pcnoc_bfdcd_clk_src.clkr.hw,
1869                         },
1870                         .num_parents = 1,
1871                         .ops = &clk_branch2_ops,
1872                 },
1873         },
1874 };
1875
1876 static struct clk_branch gcc_ultaudio_pcnoc_sway_clk = {
1877         .halt_reg = 0x1c004,
1878         .clkr = {
1879                 .enable_reg = 0x1c004,
1880                 .enable_mask = BIT(0),
1881                 .hw.init = &(struct clk_init_data){
1882                         .name = "gcc_ultaudio_pcnoc_sway_clk",
1883                         .parent_hws = (const struct clk_hw*[]){
1884                                 &pcnoc_bfdcd_clk_src.clkr.hw,
1885                         },
1886                         .num_parents = 1,
1887                         .ops = &clk_branch2_ops,
1888                 },
1889         },
1890 };
1891
1892 static const struct freq_tbl ftbl_gcc_venus0_vcodec0_clk[] = {
1893         F(133330000, P_GPLL0, 6, 0, 0),
1894         F(200000000, P_GPLL0, 4, 0, 0),
1895         F(266670000, P_GPLL0, 3, 0, 0),
1896         { }
1897 };
1898
1899 static struct clk_rcg2 vcodec0_clk_src = {
1900         .cmd_rcgr = 0x4C000,
1901         .mnd_width = 8,
1902         .hid_width = 5,
1903         .parent_map = gcc_xo_gpll0_map,
1904         .freq_tbl = ftbl_gcc_venus0_vcodec0_clk,
1905         .clkr.hw.init = &(struct clk_init_data){
1906                 .name = "vcodec0_clk_src",
1907                 .parent_data = gcc_xo_gpll0_parent_data,
1908                 .num_parents = ARRAY_SIZE(gcc_xo_gpll0_parent_data),
1909                 .ops = &clk_rcg2_ops,
1910         },
1911 };
1912
1913 static struct clk_branch gcc_blsp1_ahb_clk = {
1914         .halt_reg = 0x01008,
1915         .halt_check = BRANCH_HALT_VOTED,
1916         .clkr = {
1917                 .enable_reg = 0x45004,
1918                 .enable_mask = BIT(10),
1919                 .hw.init = &(struct clk_init_data){
1920                         .name = "gcc_blsp1_ahb_clk",
1921                         .parent_hws = (const struct clk_hw*[]){
1922                                 &pcnoc_bfdcd_clk_src.clkr.hw,
1923                         },
1924                         .num_parents = 1,
1925                         .ops = &clk_branch2_ops,
1926                 },
1927         },
1928 };
1929
1930 static struct clk_branch gcc_blsp1_sleep_clk = {
1931         .halt_reg = 0x01004,
1932         .clkr = {
1933                 .enable_reg = 0x01004,
1934                 .enable_mask = BIT(0),
1935                 .hw.init = &(struct clk_init_data){
1936                         .name = "gcc_blsp1_sleep_clk",
1937                         .ops = &clk_branch2_ops,
1938                 },
1939         },
1940 };
1941
1942 static struct clk_branch gcc_blsp1_qup1_i2c_apps_clk = {
1943         .halt_reg = 0x02008,
1944         .clkr = {
1945                 .enable_reg = 0x02008,
1946                 .enable_mask = BIT(0),
1947                 .hw.init = &(struct clk_init_data){
1948                         .name = "gcc_blsp1_qup1_i2c_apps_clk",
1949                         .parent_hws = (const struct clk_hw*[]){
1950                                 &blsp1_qup1_i2c_apps_clk_src.clkr.hw,
1951                         },
1952                         .num_parents = 1,
1953                         .flags = CLK_SET_RATE_PARENT,
1954                         .ops = &clk_branch2_ops,
1955                 },
1956         },
1957 };
1958
1959 static struct clk_branch gcc_blsp1_qup1_spi_apps_clk = {
1960         .halt_reg = 0x02004,
1961         .clkr = {
1962                 .enable_reg = 0x02004,
1963                 .enable_mask = BIT(0),
1964                 .hw.init = &(struct clk_init_data){
1965                         .name = "gcc_blsp1_qup1_spi_apps_clk",
1966                         .parent_hws = (const struct clk_hw*[]){
1967                                 &blsp1_qup1_spi_apps_clk_src.clkr.hw,
1968                         },
1969                         .num_parents = 1,
1970                         .flags = CLK_SET_RATE_PARENT,
1971                         .ops = &clk_branch2_ops,
1972                 },
1973         },
1974 };
1975
1976 static struct clk_branch gcc_blsp1_qup2_i2c_apps_clk = {
1977         .halt_reg = 0x03010,
1978         .clkr = {
1979                 .enable_reg = 0x03010,
1980                 .enable_mask = BIT(0),
1981                 .hw.init = &(struct clk_init_data){
1982                         .name = "gcc_blsp1_qup2_i2c_apps_clk",
1983                         .parent_hws = (const struct clk_hw*[]){
1984                                 &blsp1_qup2_i2c_apps_clk_src.clkr.hw,
1985                         },
1986                         .num_parents = 1,
1987                         .flags = CLK_SET_RATE_PARENT,
1988                         .ops = &clk_branch2_ops,
1989                 },
1990         },
1991 };
1992
1993 static struct clk_branch gcc_blsp1_qup2_spi_apps_clk = {
1994         .halt_reg = 0x0300c,
1995         .clkr = {
1996                 .enable_reg = 0x0300c,
1997                 .enable_mask = BIT(0),
1998                 .hw.init = &(struct clk_init_data){
1999                         .name = "gcc_blsp1_qup2_spi_apps_clk",
2000                         .parent_hws = (const struct clk_hw*[]){
2001                                 &blsp1_qup2_spi_apps_clk_src.clkr.hw,
2002                         },
2003                         .num_parents = 1,
2004                         .flags = CLK_SET_RATE_PARENT,
2005                         .ops = &clk_branch2_ops,
2006                 },
2007         },
2008 };
2009
2010 static struct clk_branch gcc_blsp1_qup3_i2c_apps_clk = {
2011         .halt_reg = 0x04020,
2012         .clkr = {
2013                 .enable_reg = 0x04020,
2014                 .enable_mask = BIT(0),
2015                 .hw.init = &(struct clk_init_data){
2016                         .name = "gcc_blsp1_qup3_i2c_apps_clk",
2017                         .parent_hws = (const struct clk_hw*[]){
2018                                 &blsp1_qup3_i2c_apps_clk_src.clkr.hw,
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_blsp1_qup3_spi_apps_clk = {
2028         .halt_reg = 0x0401c,
2029         .clkr = {
2030                 .enable_reg = 0x0401c,
2031                 .enable_mask = BIT(0),
2032                 .hw.init = &(struct clk_init_data){
2033                         .name = "gcc_blsp1_qup3_spi_apps_clk",
2034                         .parent_hws = (const struct clk_hw*[]){
2035                                 &blsp1_qup3_spi_apps_clk_src.clkr.hw,
2036                         },
2037                         .num_parents = 1,
2038                         .flags = CLK_SET_RATE_PARENT,
2039                         .ops = &clk_branch2_ops,
2040                 },
2041         },
2042 };
2043
2044 static struct clk_branch gcc_blsp1_qup4_i2c_apps_clk = {
2045         .halt_reg = 0x05020,
2046         .clkr = {
2047                 .enable_reg = 0x05020,
2048                 .enable_mask = BIT(0),
2049                 .hw.init = &(struct clk_init_data){
2050                         .name = "gcc_blsp1_qup4_i2c_apps_clk",
2051                         .parent_hws = (const struct clk_hw*[]){
2052                                 &blsp1_qup4_i2c_apps_clk_src.clkr.hw,
2053                         },
2054                         .num_parents = 1,
2055                         .flags = CLK_SET_RATE_PARENT,
2056                         .ops = &clk_branch2_ops,
2057                 },
2058         },
2059 };
2060
2061 static struct clk_branch gcc_blsp1_qup4_spi_apps_clk = {
2062         .halt_reg = 0x0501c,
2063         .clkr = {
2064                 .enable_reg = 0x0501c,
2065                 .enable_mask = BIT(0),
2066                 .hw.init = &(struct clk_init_data){
2067                         .name = "gcc_blsp1_qup4_spi_apps_clk",
2068                         .parent_hws = (const struct clk_hw*[]){
2069                                 &blsp1_qup4_spi_apps_clk_src.clkr.hw,
2070                         },
2071                         .num_parents = 1,
2072                         .flags = CLK_SET_RATE_PARENT,
2073                         .ops = &clk_branch2_ops,
2074                 },
2075         },
2076 };
2077
2078 static struct clk_branch gcc_blsp1_qup5_i2c_apps_clk = {
2079         .halt_reg = 0x06020,
2080         .clkr = {
2081                 .enable_reg = 0x06020,
2082                 .enable_mask = BIT(0),
2083                 .hw.init = &(struct clk_init_data){
2084                         .name = "gcc_blsp1_qup5_i2c_apps_clk",
2085                         .parent_hws = (const struct clk_hw*[]){
2086                                 &blsp1_qup5_i2c_apps_clk_src.clkr.hw,
2087                         },
2088                         .num_parents = 1,
2089                         .flags = CLK_SET_RATE_PARENT,
2090                         .ops = &clk_branch2_ops,
2091                 },
2092         },
2093 };
2094
2095 static struct clk_branch gcc_blsp1_qup5_spi_apps_clk = {
2096         .halt_reg = 0x0601c,
2097         .clkr = {
2098                 .enable_reg = 0x0601c,
2099                 .enable_mask = BIT(0),
2100                 .hw.init = &(struct clk_init_data){
2101                         .name = "gcc_blsp1_qup5_spi_apps_clk",
2102                         .parent_hws = (const struct clk_hw*[]){
2103                                 &blsp1_qup5_spi_apps_clk_src.clkr.hw,
2104                         },
2105                         .num_parents = 1,
2106                         .flags = CLK_SET_RATE_PARENT,
2107                         .ops = &clk_branch2_ops,
2108                 },
2109         },
2110 };
2111
2112 static struct clk_branch gcc_blsp1_qup6_i2c_apps_clk = {
2113         .halt_reg = 0x07020,
2114         .clkr = {
2115                 .enable_reg = 0x07020,
2116                 .enable_mask = BIT(0),
2117                 .hw.init = &(struct clk_init_data){
2118                         .name = "gcc_blsp1_qup6_i2c_apps_clk",
2119                         .parent_hws = (const struct clk_hw*[]){
2120                                 &blsp1_qup6_i2c_apps_clk_src.clkr.hw,
2121                         },
2122                         .num_parents = 1,
2123                         .flags = CLK_SET_RATE_PARENT,
2124                         .ops = &clk_branch2_ops,
2125                 },
2126         },
2127 };
2128
2129 static struct clk_branch gcc_blsp1_qup6_spi_apps_clk = {
2130         .halt_reg = 0x0701c,
2131         .clkr = {
2132                 .enable_reg = 0x0701c,
2133                 .enable_mask = BIT(0),
2134                 .hw.init = &(struct clk_init_data){
2135                         .name = "gcc_blsp1_qup6_spi_apps_clk",
2136                         .parent_hws = (const struct clk_hw*[]){
2137                                 &blsp1_qup6_spi_apps_clk_src.clkr.hw,
2138                         },
2139                         .num_parents = 1,
2140                         .flags = CLK_SET_RATE_PARENT,
2141                         .ops = &clk_branch2_ops,
2142                 },
2143         },
2144 };
2145
2146 static struct clk_branch gcc_blsp1_uart1_apps_clk = {
2147         .halt_reg = 0x0203c,
2148         .clkr = {
2149                 .enable_reg = 0x0203c,
2150                 .enable_mask = BIT(0),
2151                 .hw.init = &(struct clk_init_data){
2152                         .name = "gcc_blsp1_uart1_apps_clk",
2153                         .parent_hws = (const struct clk_hw*[]){
2154                                 &blsp1_uart1_apps_clk_src.clkr.hw,
2155                         },
2156                         .num_parents = 1,
2157                         .flags = CLK_SET_RATE_PARENT,
2158                         .ops = &clk_branch2_ops,
2159                 },
2160         },
2161 };
2162
2163 static struct clk_branch gcc_blsp1_uart2_apps_clk = {
2164         .halt_reg = 0x0302c,
2165         .clkr = {
2166                 .enable_reg = 0x0302c,
2167                 .enable_mask = BIT(0),
2168                 .hw.init = &(struct clk_init_data){
2169                         .name = "gcc_blsp1_uart2_apps_clk",
2170                         .parent_hws = (const struct clk_hw*[]){
2171                                 &blsp1_uart2_apps_clk_src.clkr.hw,
2172                         },
2173                         .num_parents = 1,
2174                         .flags = CLK_SET_RATE_PARENT,
2175                         .ops = &clk_branch2_ops,
2176                 },
2177         },
2178 };
2179
2180 static struct clk_branch gcc_boot_rom_ahb_clk = {
2181         .halt_reg = 0x1300c,
2182         .halt_check = BRANCH_HALT_VOTED,
2183         .clkr = {
2184                 .enable_reg = 0x45004,
2185                 .enable_mask = BIT(7),
2186                 .hw.init = &(struct clk_init_data){
2187                         .name = "gcc_boot_rom_ahb_clk",
2188                         .parent_hws = (const struct clk_hw*[]){
2189                                 &pcnoc_bfdcd_clk_src.clkr.hw,
2190                         },
2191                         .num_parents = 1,
2192                         .ops = &clk_branch2_ops,
2193                 },
2194         },
2195 };
2196
2197 static struct clk_branch gcc_camss_cci_ahb_clk = {
2198         .halt_reg = 0x5101c,
2199         .clkr = {
2200                 .enable_reg = 0x5101c,
2201                 .enable_mask = BIT(0),
2202                 .hw.init = &(struct clk_init_data){
2203                         .name = "gcc_camss_cci_ahb_clk",
2204                         .parent_hws = (const struct clk_hw*[]){
2205                                 &camss_ahb_clk_src.clkr.hw,
2206                         },
2207                         .num_parents = 1,
2208                         .flags = CLK_SET_RATE_PARENT,
2209                         .ops = &clk_branch2_ops,
2210                 },
2211         },
2212 };
2213
2214 static struct clk_branch gcc_camss_cci_clk = {
2215         .halt_reg = 0x51018,
2216         .clkr = {
2217                 .enable_reg = 0x51018,
2218                 .enable_mask = BIT(0),
2219                 .hw.init = &(struct clk_init_data){
2220                         .name = "gcc_camss_cci_clk",
2221                         .parent_hws = (const struct clk_hw*[]){
2222                                 &cci_clk_src.clkr.hw,
2223                         },
2224                         .num_parents = 1,
2225                         .flags = CLK_SET_RATE_PARENT,
2226                         .ops = &clk_branch2_ops,
2227                 },
2228         },
2229 };
2230
2231 static struct clk_branch gcc_camss_csi0_ahb_clk = {
2232         .halt_reg = 0x4e040,
2233         .clkr = {
2234                 .enable_reg = 0x4e040,
2235                 .enable_mask = BIT(0),
2236                 .hw.init = &(struct clk_init_data){
2237                         .name = "gcc_camss_csi0_ahb_clk",
2238                         .parent_hws = (const struct clk_hw*[]){
2239                                 &camss_ahb_clk_src.clkr.hw,
2240                         },
2241                         .num_parents = 1,
2242                         .flags = CLK_SET_RATE_PARENT,
2243                         .ops = &clk_branch2_ops,
2244                 },
2245         },
2246 };
2247
2248 static struct clk_branch gcc_camss_csi0_clk = {
2249         .halt_reg = 0x4e03c,
2250         .clkr = {
2251                 .enable_reg = 0x4e03c,
2252                 .enable_mask = BIT(0),
2253                 .hw.init = &(struct clk_init_data){
2254                         .name = "gcc_camss_csi0_clk",
2255                         .parent_hws = (const struct clk_hw*[]){
2256                                 &csi0_clk_src.clkr.hw,
2257                         },
2258                         .num_parents = 1,
2259                         .flags = CLK_SET_RATE_PARENT,
2260                         .ops = &clk_branch2_ops,
2261                 },
2262         },
2263 };
2264
2265 static struct clk_branch gcc_camss_csi0phy_clk = {
2266         .halt_reg = 0x4e048,
2267         .clkr = {
2268                 .enable_reg = 0x4e048,
2269                 .enable_mask = BIT(0),
2270                 .hw.init = &(struct clk_init_data){
2271                         .name = "gcc_camss_csi0phy_clk",
2272                         .parent_hws = (const struct clk_hw*[]){
2273                                 &csi0_clk_src.clkr.hw,
2274                         },
2275                         .num_parents = 1,
2276                         .flags = CLK_SET_RATE_PARENT,
2277                         .ops = &clk_branch2_ops,
2278                 },
2279         },
2280 };
2281
2282 static struct clk_branch gcc_camss_csi0pix_clk = {
2283         .halt_reg = 0x4e058,
2284         .clkr = {
2285                 .enable_reg = 0x4e058,
2286                 .enable_mask = BIT(0),
2287                 .hw.init = &(struct clk_init_data){
2288                         .name = "gcc_camss_csi0pix_clk",
2289                         .parent_hws = (const struct clk_hw*[]){
2290                                 &csi0_clk_src.clkr.hw,
2291                         },
2292                         .num_parents = 1,
2293                         .flags = CLK_SET_RATE_PARENT,
2294                         .ops = &clk_branch2_ops,
2295                 },
2296         },
2297 };
2298
2299 static struct clk_branch gcc_camss_csi0rdi_clk = {
2300         .halt_reg = 0x4e050,
2301         .clkr = {
2302                 .enable_reg = 0x4e050,
2303                 .enable_mask = BIT(0),
2304                 .hw.init = &(struct clk_init_data){
2305                         .name = "gcc_camss_csi0rdi_clk",
2306                         .parent_hws = (const struct clk_hw*[]){
2307                                 &csi0_clk_src.clkr.hw,
2308                         },
2309                         .num_parents = 1,
2310                         .flags = CLK_SET_RATE_PARENT,
2311                         .ops = &clk_branch2_ops,
2312                 },
2313         },
2314 };
2315
2316 static struct clk_branch gcc_camss_csi1_ahb_clk = {
2317         .halt_reg = 0x4f040,
2318         .clkr = {
2319                 .enable_reg = 0x4f040,
2320                 .enable_mask = BIT(0),
2321                 .hw.init = &(struct clk_init_data){
2322                         .name = "gcc_camss_csi1_ahb_clk",
2323                         .parent_hws = (const struct clk_hw*[]){
2324                                 &camss_ahb_clk_src.clkr.hw,
2325                         },
2326                         .num_parents = 1,
2327                         .flags = CLK_SET_RATE_PARENT,
2328                         .ops = &clk_branch2_ops,
2329                 },
2330         },
2331 };
2332
2333 static struct clk_branch gcc_camss_csi1_clk = {
2334         .halt_reg = 0x4f03c,
2335         .clkr = {
2336                 .enable_reg = 0x4f03c,
2337                 .enable_mask = BIT(0),
2338                 .hw.init = &(struct clk_init_data){
2339                         .name = "gcc_camss_csi1_clk",
2340                         .parent_hws = (const struct clk_hw*[]){
2341                                 &csi1_clk_src.clkr.hw,
2342                         },
2343                         .num_parents = 1,
2344                         .flags = CLK_SET_RATE_PARENT,
2345                         .ops = &clk_branch2_ops,
2346                 },
2347         },
2348 };
2349
2350 static struct clk_branch gcc_camss_csi1phy_clk = {
2351         .halt_reg = 0x4f048,
2352         .clkr = {
2353                 .enable_reg = 0x4f048,
2354                 .enable_mask = BIT(0),
2355                 .hw.init = &(struct clk_init_data){
2356                         .name = "gcc_camss_csi1phy_clk",
2357                         .parent_hws = (const struct clk_hw*[]){
2358                                 &csi1_clk_src.clkr.hw,
2359                         },
2360                         .num_parents = 1,
2361                         .flags = CLK_SET_RATE_PARENT,
2362                         .ops = &clk_branch2_ops,
2363                 },
2364         },
2365 };
2366
2367 static struct clk_branch gcc_camss_csi1pix_clk = {
2368         .halt_reg = 0x4f058,
2369         .clkr = {
2370                 .enable_reg = 0x4f058,
2371                 .enable_mask = BIT(0),
2372                 .hw.init = &(struct clk_init_data){
2373                         .name = "gcc_camss_csi1pix_clk",
2374                         .parent_hws = (const struct clk_hw*[]){
2375                                 &csi1_clk_src.clkr.hw,
2376                         },
2377                         .num_parents = 1,
2378                         .flags = CLK_SET_RATE_PARENT,
2379                         .ops = &clk_branch2_ops,
2380                 },
2381         },
2382 };
2383
2384 static struct clk_branch gcc_camss_csi1rdi_clk = {
2385         .halt_reg = 0x4f050,
2386         .clkr = {
2387                 .enable_reg = 0x4f050,
2388                 .enable_mask = BIT(0),
2389                 .hw.init = &(struct clk_init_data){
2390                         .name = "gcc_camss_csi1rdi_clk",
2391                         .parent_hws = (const struct clk_hw*[]){
2392                                 &csi1_clk_src.clkr.hw,
2393                         },
2394                         .num_parents = 1,
2395                         .flags = CLK_SET_RATE_PARENT,
2396                         .ops = &clk_branch2_ops,
2397                 },
2398         },
2399 };
2400
2401 static struct clk_branch gcc_camss_csi2_ahb_clk = {
2402         .halt_reg = 0x3c040,
2403         .clkr = {
2404                 .enable_reg = 0x3c040,
2405                 .enable_mask = BIT(0),
2406                 .hw.init = &(struct clk_init_data){
2407                         .name = "gcc_camss_csi2_ahb_clk",
2408                         .parent_hws = (const struct clk_hw*[]){
2409                                 &camss_ahb_clk_src.clkr.hw,
2410                         },
2411                         .num_parents = 1,
2412                         .flags = CLK_SET_RATE_PARENT,
2413                         .ops = &clk_branch2_ops,
2414                 },
2415         },
2416 };
2417
2418 static struct clk_branch gcc_camss_csi2_clk = {
2419         .halt_reg = 0x3c03c,
2420         .clkr = {
2421                 .enable_reg = 0x3c03c,
2422                 .enable_mask = BIT(0),
2423                 .hw.init = &(struct clk_init_data){
2424                         .name = "gcc_camss_csi2_clk",
2425                         .parent_hws = (const struct clk_hw*[]){
2426                                 &csi2_clk_src.clkr.hw,
2427                         },
2428                         .num_parents = 1,
2429                         .flags = CLK_SET_RATE_PARENT,
2430                         .ops = &clk_branch2_ops,
2431                 },
2432         },
2433 };
2434
2435 static struct clk_branch gcc_camss_csi2phy_clk = {
2436         .halt_reg = 0x3c048,
2437         .clkr = {
2438                 .enable_reg = 0x3c048,
2439                 .enable_mask = BIT(0),
2440                 .hw.init = &(struct clk_init_data){
2441                         .name = "gcc_camss_csi2phy_clk",
2442                         .parent_hws = (const struct clk_hw*[]){
2443                                 &csi2_clk_src.clkr.hw,
2444                         },
2445                         .num_parents = 1,
2446                         .flags = CLK_SET_RATE_PARENT,
2447                         .ops = &clk_branch2_ops,
2448                 },
2449         },
2450 };
2451
2452 static struct clk_branch gcc_camss_csi2pix_clk = {
2453         .halt_reg = 0x3c058,
2454         .clkr = {
2455                 .enable_reg = 0x3c058,
2456                 .enable_mask = BIT(0),
2457                 .hw.init = &(struct clk_init_data){
2458                         .name = "gcc_camss_csi2pix_clk",
2459                         .parent_hws = (const struct clk_hw*[]){
2460                                 &csi2_clk_src.clkr.hw,
2461                         },
2462                         .num_parents = 1,
2463                         .flags = CLK_SET_RATE_PARENT,
2464                         .ops = &clk_branch2_ops,
2465                 },
2466         },
2467 };
2468
2469 static struct clk_branch gcc_camss_csi2rdi_clk = {
2470         .halt_reg = 0x3c050,
2471         .clkr = {
2472                 .enable_reg = 0x3c050,
2473                 .enable_mask = BIT(0),
2474                 .hw.init = &(struct clk_init_data){
2475                         .name = "gcc_camss_csi2rdi_clk",
2476                         .parent_hws = (const struct clk_hw*[]){
2477                                 &csi2_clk_src.clkr.hw,
2478                         },
2479                         .num_parents = 1,
2480                         .flags = CLK_SET_RATE_PARENT,
2481                         .ops = &clk_branch2_ops,
2482                 },
2483         },
2484 };
2485
2486 static struct clk_branch gcc_camss_csi_vfe0_clk = {
2487         .halt_reg = 0x58050,
2488         .clkr = {
2489                 .enable_reg = 0x58050,
2490                 .enable_mask = BIT(0),
2491                 .hw.init = &(struct clk_init_data){
2492                         .name = "gcc_camss_csi_vfe0_clk",
2493                         .parent_hws = (const struct clk_hw*[]){
2494                                 &vfe0_clk_src.clkr.hw,
2495                         },
2496                         .num_parents = 1,
2497                         .flags = CLK_SET_RATE_PARENT,
2498                         .ops = &clk_branch2_ops,
2499                 },
2500         },
2501 };
2502
2503 static struct clk_branch gcc_camss_gp0_clk = {
2504         .halt_reg = 0x54018,
2505         .clkr = {
2506                 .enable_reg = 0x54018,
2507                 .enable_mask = BIT(0),
2508                 .hw.init = &(struct clk_init_data){
2509                         .name = "gcc_camss_gp0_clk",
2510                         .parent_hws = (const struct clk_hw*[]){
2511                                 &camss_gp0_clk_src.clkr.hw,
2512                         },
2513                         .num_parents = 1,
2514                         .flags = CLK_SET_RATE_PARENT,
2515                         .ops = &clk_branch2_ops,
2516                 },
2517         },
2518 };
2519
2520 static struct clk_branch gcc_camss_gp1_clk = {
2521         .halt_reg = 0x55018,
2522         .clkr = {
2523                 .enable_reg = 0x55018,
2524                 .enable_mask = BIT(0),
2525                 .hw.init = &(struct clk_init_data){
2526                         .name = "gcc_camss_gp1_clk",
2527                         .parent_hws = (const struct clk_hw*[]){
2528                                 &camss_gp1_clk_src.clkr.hw,
2529                         },
2530                         .num_parents = 1,
2531                         .flags = CLK_SET_RATE_PARENT,
2532                         .ops = &clk_branch2_ops,
2533                 },
2534         },
2535 };
2536
2537 static struct clk_branch gcc_camss_ispif_ahb_clk = {
2538         .halt_reg = 0x50004,
2539         .clkr = {
2540                 .enable_reg = 0x50004,
2541                 .enable_mask = BIT(0),
2542                 .hw.init = &(struct clk_init_data){
2543                         .name = "gcc_camss_ispif_ahb_clk",
2544                         .parent_hws = (const struct clk_hw*[]){
2545                                 &camss_ahb_clk_src.clkr.hw,
2546                         },
2547                         .num_parents = 1,
2548                         .flags = CLK_SET_RATE_PARENT,
2549                         .ops = &clk_branch2_ops,
2550                 },
2551         },
2552 };
2553
2554 static struct clk_branch gcc_camss_jpeg0_clk = {
2555         .halt_reg = 0x57020,
2556         .clkr = {
2557                 .enable_reg = 0x57020,
2558                 .enable_mask = BIT(0),
2559                 .hw.init = &(struct clk_init_data){
2560                         .name = "gcc_camss_jpeg0_clk",
2561                         .parent_hws = (const struct clk_hw*[]){
2562                                 &jpeg0_clk_src.clkr.hw,
2563                         },
2564                         .num_parents = 1,
2565                         .flags = CLK_SET_RATE_PARENT,
2566                         .ops = &clk_branch2_ops,
2567                 },
2568         },
2569 };
2570
2571 static struct clk_branch gcc_camss_jpeg_ahb_clk = {
2572         .halt_reg = 0x57024,
2573         .clkr = {
2574                 .enable_reg = 0x57024,
2575                 .enable_mask = BIT(0),
2576                 .hw.init = &(struct clk_init_data){
2577                         .name = "gcc_camss_jpeg_ahb_clk",
2578                         .parent_hws = (const struct clk_hw*[]){
2579                                 &camss_ahb_clk_src.clkr.hw,
2580                         },
2581                         .num_parents = 1,
2582                         .flags = CLK_SET_RATE_PARENT,
2583                         .ops = &clk_branch2_ops,
2584                 },
2585         },
2586 };
2587
2588 static struct clk_branch gcc_camss_jpeg_axi_clk = {
2589         .halt_reg = 0x57028,
2590         .clkr = {
2591                 .enable_reg = 0x57028,
2592                 .enable_mask = BIT(0),
2593                 .hw.init = &(struct clk_init_data){
2594                         .name = "gcc_camss_jpeg_axi_clk",
2595                         .parent_hws = (const struct clk_hw*[]){
2596                                 &system_mm_noc_bfdcd_clk_src.clkr.hw,
2597                         },
2598                         .num_parents = 1,
2599                         .flags = CLK_SET_RATE_PARENT,
2600                         .ops = &clk_branch2_ops,
2601                 },
2602         },
2603 };
2604
2605 static struct clk_branch gcc_camss_mclk0_clk = {
2606         .halt_reg = 0x52018,
2607         .clkr = {
2608                 .enable_reg = 0x52018,
2609                 .enable_mask = BIT(0),
2610                 .hw.init = &(struct clk_init_data){
2611                         .name = "gcc_camss_mclk0_clk",
2612                         .parent_hws = (const struct clk_hw*[]){
2613                                 &mclk0_clk_src.clkr.hw,
2614                         },
2615                         .num_parents = 1,
2616                         .flags = CLK_SET_RATE_PARENT,
2617                         .ops = &clk_branch2_ops,
2618                 },
2619         },
2620 };
2621
2622 static struct clk_branch gcc_camss_mclk1_clk = {
2623         .halt_reg = 0x53018,
2624         .clkr = {
2625                 .enable_reg = 0x53018,
2626                 .enable_mask = BIT(0),
2627                 .hw.init = &(struct clk_init_data){
2628                         .name = "gcc_camss_mclk1_clk",
2629                         .parent_hws = (const struct clk_hw*[]){
2630                                 &mclk1_clk_src.clkr.hw,
2631                         },
2632                         .num_parents = 1,
2633                         .flags = CLK_SET_RATE_PARENT,
2634                         .ops = &clk_branch2_ops,
2635                 },
2636         },
2637 };
2638
2639 static struct clk_branch gcc_camss_micro_ahb_clk = {
2640         .halt_reg = 0x5600c,
2641         .clkr = {
2642                 .enable_reg = 0x5600c,
2643                 .enable_mask = BIT(0),
2644                 .hw.init = &(struct clk_init_data){
2645                         .name = "gcc_camss_micro_ahb_clk",
2646                         .parent_hws = (const struct clk_hw*[]){
2647                                 &camss_ahb_clk_src.clkr.hw,
2648                         },
2649                         .num_parents = 1,
2650                         .flags = CLK_SET_RATE_PARENT,
2651                         .ops = &clk_branch2_ops,
2652                 },
2653         },
2654 };
2655
2656 static struct clk_branch gcc_camss_csi0phytimer_clk = {
2657         .halt_reg = 0x4e01c,
2658         .clkr = {
2659                 .enable_reg = 0x4e01c,
2660                 .enable_mask = BIT(0),
2661                 .hw.init = &(struct clk_init_data){
2662                         .name = "gcc_camss_csi0phytimer_clk",
2663                         .parent_hws = (const struct clk_hw*[]){
2664                                 &csi0phytimer_clk_src.clkr.hw,
2665                         },
2666                         .num_parents = 1,
2667                         .flags = CLK_SET_RATE_PARENT,
2668                         .ops = &clk_branch2_ops,
2669                 },
2670         },
2671 };
2672
2673 static struct clk_branch gcc_camss_csi1phytimer_clk = {
2674         .halt_reg = 0x4f01c,
2675         .clkr = {
2676                 .enable_reg = 0x4f01c,
2677                 .enable_mask = BIT(0),
2678                 .hw.init = &(struct clk_init_data){
2679                         .name = "gcc_camss_csi1phytimer_clk",
2680                         .parent_hws = (const struct clk_hw*[]){
2681                                 &csi1phytimer_clk_src.clkr.hw,
2682                         },
2683                         .num_parents = 1,
2684                         .flags = CLK_SET_RATE_PARENT,
2685                         .ops = &clk_branch2_ops,
2686                 },
2687         },
2688 };
2689
2690 static struct clk_branch gcc_camss_ahb_clk = {
2691         .halt_reg = 0x5a014,
2692         .clkr = {
2693                 .enable_reg = 0x5a014,
2694                 .enable_mask = BIT(0),
2695                 .hw.init = &(struct clk_init_data){
2696                         .name = "gcc_camss_ahb_clk",
2697                         .parent_hws = (const struct clk_hw*[]){
2698                                 &camss_ahb_clk_src.clkr.hw,
2699                         },
2700                         .num_parents = 1,
2701                         .flags = CLK_SET_RATE_PARENT,
2702                         .ops = &clk_branch2_ops,
2703                 },
2704         },
2705 };
2706
2707 static struct clk_branch gcc_camss_top_ahb_clk = {
2708         .halt_reg = 0x56004,
2709         .clkr = {
2710                 .enable_reg = 0x56004,
2711                 .enable_mask = BIT(0),
2712                 .hw.init = &(struct clk_init_data){
2713                         .name = "gcc_camss_top_ahb_clk",
2714                         .parent_hws = (const struct clk_hw*[]){
2715                                 &pcnoc_bfdcd_clk_src.clkr.hw,
2716                         },
2717                         .num_parents = 1,
2718                         .flags = CLK_SET_RATE_PARENT,
2719                         .ops = &clk_branch2_ops,
2720                 },
2721         },
2722 };
2723
2724 static struct clk_branch gcc_camss_cpp_ahb_clk = {
2725         .halt_reg = 0x58040,
2726         .clkr = {
2727                 .enable_reg = 0x58040,
2728                 .enable_mask = BIT(0),
2729                 .hw.init = &(struct clk_init_data){
2730                         .name = "gcc_camss_cpp_ahb_clk",
2731                         .parent_hws = (const struct clk_hw*[]){
2732                                 &camss_ahb_clk_src.clkr.hw,
2733                         },
2734                         .num_parents = 1,
2735                         .flags = CLK_SET_RATE_PARENT,
2736                         .ops = &clk_branch2_ops,
2737                 },
2738         },
2739 };
2740
2741 static struct clk_branch gcc_camss_cpp_clk = {
2742         .halt_reg = 0x5803c,
2743         .clkr = {
2744                 .enable_reg = 0x5803c,
2745                 .enable_mask = BIT(0),
2746                 .hw.init = &(struct clk_init_data){
2747                         .name = "gcc_camss_cpp_clk",
2748                         .parent_hws = (const struct clk_hw*[]){
2749                                 &cpp_clk_src.clkr.hw,
2750                         },
2751                         .num_parents = 1,
2752                         .flags = CLK_SET_RATE_PARENT,
2753                         .ops = &clk_branch2_ops,
2754                 },
2755         },
2756 };
2757
2758 static struct clk_branch gcc_camss_vfe0_clk = {
2759         .halt_reg = 0x58038,
2760         .clkr = {
2761                 .enable_reg = 0x58038,
2762                 .enable_mask = BIT(0),
2763                 .hw.init = &(struct clk_init_data){
2764                         .name = "gcc_camss_vfe0_clk",
2765                         .parent_hws = (const struct clk_hw*[]){
2766                                 &vfe0_clk_src.clkr.hw,
2767                         },
2768                         .num_parents = 1,
2769                         .flags = CLK_SET_RATE_PARENT,
2770                         .ops = &clk_branch2_ops,
2771                 },
2772         },
2773 };
2774
2775 static struct clk_branch gcc_camss_vfe_ahb_clk = {
2776         .halt_reg = 0x58044,
2777         .clkr = {
2778                 .enable_reg = 0x58044,
2779                 .enable_mask = BIT(0),
2780                 .hw.init = &(struct clk_init_data){
2781                         .name = "gcc_camss_vfe_ahb_clk",
2782                         .parent_hws = (const struct clk_hw*[]){
2783                                 &camss_ahb_clk_src.clkr.hw,
2784                         },
2785                         .num_parents = 1,
2786                         .flags = CLK_SET_RATE_PARENT,
2787                         .ops = &clk_branch2_ops,
2788                 },
2789         },
2790 };
2791
2792 static struct clk_branch gcc_camss_vfe_axi_clk = {
2793         .halt_reg = 0x58048,
2794         .clkr = {
2795                 .enable_reg = 0x58048,
2796                 .enable_mask = BIT(0),
2797                 .hw.init = &(struct clk_init_data){
2798                         .name = "gcc_camss_vfe_axi_clk",
2799                         .parent_hws = (const struct clk_hw*[]){
2800                                 &system_mm_noc_bfdcd_clk_src.clkr.hw,
2801                         },
2802                         .num_parents = 1,
2803                         .flags = CLK_SET_RATE_PARENT,
2804                         .ops = &clk_branch2_ops,
2805                 },
2806         },
2807 };
2808
2809 static struct clk_branch gcc_crypto_ahb_clk = {
2810         .halt_reg = 0x16024,
2811         .halt_check = BRANCH_HALT_VOTED,
2812         .clkr = {
2813                 .enable_reg = 0x45004,
2814                 .enable_mask = BIT(0),
2815                 .hw.init = &(struct clk_init_data){
2816                         .name = "gcc_crypto_ahb_clk",
2817                         .parent_hws = (const struct clk_hw*[]){
2818                                 &pcnoc_bfdcd_clk_src.clkr.hw,
2819                         },
2820                         .num_parents = 1,
2821                         .flags = CLK_SET_RATE_PARENT,
2822                         .ops = &clk_branch2_ops,
2823                 },
2824         },
2825 };
2826
2827 static struct clk_branch gcc_crypto_axi_clk = {
2828         .halt_reg = 0x16020,
2829         .halt_check = BRANCH_HALT_VOTED,
2830         .clkr = {
2831                 .enable_reg = 0x45004,
2832                 .enable_mask = BIT(1),
2833                 .hw.init = &(struct clk_init_data){
2834                         .name = "gcc_crypto_axi_clk",
2835                         .parent_hws = (const struct clk_hw*[]){
2836                                 &pcnoc_bfdcd_clk_src.clkr.hw,
2837                         },
2838                         .num_parents = 1,
2839                         .flags = CLK_SET_RATE_PARENT,
2840                         .ops = &clk_branch2_ops,
2841                 },
2842         },
2843 };
2844
2845 static struct clk_branch gcc_crypto_clk = {
2846         .halt_reg = 0x1601c,
2847         .halt_check = BRANCH_HALT_VOTED,
2848         .clkr = {
2849                 .enable_reg = 0x45004,
2850                 .enable_mask = BIT(2),
2851                 .hw.init = &(struct clk_init_data){
2852                         .name = "gcc_crypto_clk",
2853                         .parent_hws = (const struct clk_hw*[]){
2854                                 &crypto_clk_src.clkr.hw,
2855                         },
2856                         .num_parents = 1,
2857                         .flags = CLK_SET_RATE_PARENT,
2858                         .ops = &clk_branch2_ops,
2859                 },
2860         },
2861 };
2862
2863 static struct clk_branch gcc_oxili_gmem_clk = {
2864         .halt_reg = 0x59024,
2865         .clkr = {
2866                 .enable_reg = 0x59024,
2867                 .enable_mask = BIT(0),
2868                 .hw.init = &(struct clk_init_data){
2869                         .name = "gcc_oxili_gmem_clk",
2870                         .parent_hws = (const struct clk_hw*[]){
2871                                 &gfx3d_clk_src.clkr.hw,
2872                         },
2873                         .num_parents = 1,
2874                         .flags = CLK_SET_RATE_PARENT,
2875                         .ops = &clk_branch2_ops,
2876                 },
2877         },
2878 };
2879
2880 static struct clk_branch gcc_gp1_clk = {
2881         .halt_reg = 0x08000,
2882         .clkr = {
2883                 .enable_reg = 0x08000,
2884                 .enable_mask = BIT(0),
2885                 .hw.init = &(struct clk_init_data){
2886                         .name = "gcc_gp1_clk",
2887                         .parent_hws = (const struct clk_hw*[]){
2888                                 &gp1_clk_src.clkr.hw,
2889                         },
2890                         .num_parents = 1,
2891                         .flags = CLK_SET_RATE_PARENT,
2892                         .ops = &clk_branch2_ops,
2893                 },
2894         },
2895 };
2896
2897 static struct clk_branch gcc_gp2_clk = {
2898         .halt_reg = 0x09000,
2899         .clkr = {
2900                 .enable_reg = 0x09000,
2901                 .enable_mask = BIT(0),
2902                 .hw.init = &(struct clk_init_data){
2903                         .name = "gcc_gp2_clk",
2904                         .parent_hws = (const struct clk_hw*[]){
2905                                 &gp2_clk_src.clkr.hw,
2906                         },
2907                         .num_parents = 1,
2908                         .flags = CLK_SET_RATE_PARENT,
2909                         .ops = &clk_branch2_ops,
2910                 },
2911         },
2912 };
2913
2914 static struct clk_branch gcc_gp3_clk = {
2915         .halt_reg = 0x0a000,
2916         .clkr = {
2917                 .enable_reg = 0x0a000,
2918                 .enable_mask = BIT(0),
2919                 .hw.init = &(struct clk_init_data){
2920                         .name = "gcc_gp3_clk",
2921                         .parent_hws = (const struct clk_hw*[]){
2922                                 &gp3_clk_src.clkr.hw,
2923                         },
2924                         .num_parents = 1,
2925                         .flags = CLK_SET_RATE_PARENT,
2926                         .ops = &clk_branch2_ops,
2927                 },
2928         },
2929 };
2930
2931 static struct clk_branch gcc_mdss_ahb_clk = {
2932         .halt_reg = 0x4d07c,
2933         .clkr = {
2934                 .enable_reg = 0x4d07c,
2935                 .enable_mask = BIT(0),
2936                 .hw.init = &(struct clk_init_data){
2937                         .name = "gcc_mdss_ahb_clk",
2938                         .parent_hws = (const struct clk_hw*[]){
2939                                 &pcnoc_bfdcd_clk_src.clkr.hw,
2940                         },
2941                         .num_parents = 1,
2942                         .flags = CLK_SET_RATE_PARENT,
2943                         .ops = &clk_branch2_ops,
2944                 },
2945         },
2946 };
2947
2948 static struct clk_branch gcc_mdss_axi_clk = {
2949         .halt_reg = 0x4d080,
2950         .clkr = {
2951                 .enable_reg = 0x4d080,
2952                 .enable_mask = BIT(0),
2953                 .hw.init = &(struct clk_init_data){
2954                         .name = "gcc_mdss_axi_clk",
2955                         .parent_hws = (const struct clk_hw*[]){
2956                                 &system_mm_noc_bfdcd_clk_src.clkr.hw,
2957                         },
2958                         .num_parents = 1,
2959                         .flags = CLK_SET_RATE_PARENT,
2960                         .ops = &clk_branch2_ops,
2961                 },
2962         },
2963 };
2964
2965 static struct clk_branch gcc_mdss_byte0_clk = {
2966         .halt_reg = 0x4d094,
2967         .clkr = {
2968                 .enable_reg = 0x4d094,
2969                 .enable_mask = BIT(0),
2970                 .hw.init = &(struct clk_init_data){
2971                         .name = "gcc_mdss_byte0_clk",
2972                         .parent_hws = (const struct clk_hw*[]){
2973                                 &byte0_clk_src.clkr.hw,
2974                         },
2975                         .num_parents = 1,
2976                         .flags = CLK_SET_RATE_PARENT,
2977                         .ops = &clk_branch2_ops,
2978                 },
2979         },
2980 };
2981
2982 static struct clk_branch gcc_mdss_byte1_clk = {
2983         .halt_reg = 0x4d0a0,
2984         .clkr = {
2985                 .enable_reg = 0x4d0a0,
2986                 .enable_mask = BIT(0),
2987                 .hw.init = &(struct clk_init_data){
2988                         .name = "gcc_mdss_byte1_clk",
2989                         .parent_hws = (const struct clk_hw*[]){
2990                                 &byte1_clk_src.clkr.hw,
2991                         },
2992                         .num_parents = 1,
2993                         .flags = CLK_SET_RATE_PARENT,
2994                         .ops = &clk_branch2_ops,
2995                 },
2996         },
2997 };
2998
2999 static struct clk_branch gcc_mdss_esc0_clk = {
3000         .halt_reg = 0x4d098,
3001         .clkr = {
3002                 .enable_reg = 0x4d098,
3003                 .enable_mask = BIT(0),
3004                 .hw.init = &(struct clk_init_data){
3005                         .name = "gcc_mdss_esc0_clk",
3006                         .parent_hws = (const struct clk_hw*[]){
3007                                 &esc0_clk_src.clkr.hw,
3008                         },
3009                         .num_parents = 1,
3010                         .flags = CLK_SET_RATE_PARENT,
3011                         .ops = &clk_branch2_ops,
3012                 },
3013         },
3014 };
3015
3016 static struct clk_branch gcc_mdss_esc1_clk = {
3017         .halt_reg = 0x4d09c,
3018         .clkr = {
3019                 .enable_reg = 0x4d09c,
3020                 .enable_mask = BIT(0),
3021                 .hw.init = &(struct clk_init_data){
3022                         .name = "gcc_mdss_esc1_clk",
3023                         .parent_hws = (const struct clk_hw*[]){
3024                                 &esc1_clk_src.clkr.hw,
3025                         },
3026                         .num_parents = 1,
3027                         .flags = CLK_SET_RATE_PARENT,
3028                         .ops = &clk_branch2_ops,
3029                 },
3030         },
3031 };
3032
3033 static struct clk_branch gcc_mdss_mdp_clk = {
3034         .halt_reg = 0x4D088,
3035         .clkr = {
3036                 .enable_reg = 0x4D088,
3037                 .enable_mask = BIT(0),
3038                 .hw.init = &(struct clk_init_data){
3039                         .name = "gcc_mdss_mdp_clk",
3040                         .parent_hws = (const struct clk_hw*[]){
3041                                 &mdp_clk_src.clkr.hw,
3042                         },
3043                         .num_parents = 1,
3044                         .flags = CLK_SET_RATE_PARENT,
3045                         .ops = &clk_branch2_ops,
3046                 },
3047         },
3048 };
3049
3050 static struct clk_branch gcc_mdss_pclk0_clk = {
3051         .halt_reg = 0x4d084,
3052         .clkr = {
3053                 .enable_reg = 0x4d084,
3054                 .enable_mask = BIT(0),
3055                 .hw.init = &(struct clk_init_data){
3056                         .name = "gcc_mdss_pclk0_clk",
3057                         .parent_hws = (const struct clk_hw*[]){
3058                                 &pclk0_clk_src.clkr.hw,
3059                         },
3060                         .num_parents = 1,
3061                         .flags = CLK_SET_RATE_PARENT,
3062                         .ops = &clk_branch2_ops,
3063                 },
3064         },
3065 };
3066
3067 static struct clk_branch gcc_mdss_pclk1_clk = {
3068         .halt_reg = 0x4d0a4,
3069         .clkr = {
3070                 .enable_reg = 0x4d0a4,
3071                 .enable_mask = BIT(0),
3072                 .hw.init = &(struct clk_init_data){
3073                         .name = "gcc_mdss_pclk1_clk",
3074                         .parent_hws = (const struct clk_hw*[]){
3075                                 &pclk1_clk_src.clkr.hw,
3076                         },
3077                         .num_parents = 1,
3078                         .flags = CLK_SET_RATE_PARENT,
3079                         .ops = &clk_branch2_ops,
3080                 },
3081         },
3082 };
3083
3084 static struct clk_branch gcc_mdss_vsync_clk = {
3085         .halt_reg = 0x4d090,
3086         .clkr = {
3087                 .enable_reg = 0x4d090,
3088                 .enable_mask = BIT(0),
3089                 .hw.init = &(struct clk_init_data){
3090                         .name = "gcc_mdss_vsync_clk",
3091                         .parent_hws = (const struct clk_hw*[]){
3092                                 &vsync_clk_src.clkr.hw,
3093                         },
3094                         .num_parents = 1,
3095                         .flags = CLK_SET_RATE_PARENT,
3096                         .ops = &clk_branch2_ops,
3097                 },
3098         },
3099 };
3100
3101 static struct clk_branch gcc_mss_cfg_ahb_clk = {
3102         .halt_reg = 0x49000,
3103         .clkr = {
3104                 .enable_reg = 0x49000,
3105                 .enable_mask = BIT(0),
3106                 .hw.init = &(struct clk_init_data){
3107                         .name = "gcc_mss_cfg_ahb_clk",
3108                         .parent_hws = (const struct clk_hw*[]){
3109                                 &pcnoc_bfdcd_clk_src.clkr.hw,
3110                         },
3111                         .num_parents = 1,
3112                         .flags = CLK_SET_RATE_PARENT,
3113                         .ops = &clk_branch2_ops,
3114                 },
3115         },
3116 };
3117
3118 static struct clk_branch gcc_mss_q6_bimc_axi_clk = {
3119         .halt_reg = 0x49004,
3120         .clkr = {
3121                 .enable_reg = 0x49004,
3122                 .enable_mask = BIT(0),
3123                 .hw.init = &(struct clk_init_data){
3124                         .name = "gcc_mss_q6_bimc_axi_clk",
3125                         .parent_hws = (const struct clk_hw*[]){
3126                                 &bimc_ddr_clk_src.clkr.hw,
3127                         },
3128                         .num_parents = 1,
3129                         .flags = CLK_SET_RATE_PARENT,
3130                         .ops = &clk_branch2_ops,
3131                 },
3132         },
3133 };
3134
3135 static struct clk_branch gcc_oxili_ahb_clk = {
3136         .halt_reg = 0x59028,
3137         .clkr = {
3138                 .enable_reg = 0x59028,
3139                 .enable_mask = BIT(0),
3140                 .hw.init = &(struct clk_init_data){
3141                         .name = "gcc_oxili_ahb_clk",
3142                         .parent_hws = (const struct clk_hw*[]){
3143                                 &pcnoc_bfdcd_clk_src.clkr.hw,
3144                         },
3145                         .num_parents = 1,
3146                         .flags = CLK_SET_RATE_PARENT,
3147                         .ops = &clk_branch2_ops,
3148                 },
3149         },
3150 };
3151
3152 static struct clk_branch gcc_oxili_gfx3d_clk = {
3153         .halt_reg = 0x59020,
3154         .clkr = {
3155                 .enable_reg = 0x59020,
3156                 .enable_mask = BIT(0),
3157                 .hw.init = &(struct clk_init_data){
3158                         .name = "gcc_oxili_gfx3d_clk",
3159                         .parent_hws = (const struct clk_hw*[]){
3160                                 &gfx3d_clk_src.clkr.hw,
3161                         },
3162                         .num_parents = 1,
3163                         .flags = CLK_SET_RATE_PARENT,
3164                         .ops = &clk_branch2_ops,
3165                 },
3166         },
3167 };
3168
3169 static struct clk_branch gcc_pdm2_clk = {
3170         .halt_reg = 0x4400c,
3171         .clkr = {
3172                 .enable_reg = 0x4400c,
3173                 .enable_mask = BIT(0),
3174                 .hw.init = &(struct clk_init_data){
3175                         .name = "gcc_pdm2_clk",
3176                         .parent_hws = (const struct clk_hw*[]){
3177                                 &pdm2_clk_src.clkr.hw,
3178                         },
3179                         .num_parents = 1,
3180                         .flags = CLK_SET_RATE_PARENT,
3181                         .ops = &clk_branch2_ops,
3182                 },
3183         },
3184 };
3185
3186 static struct clk_branch gcc_pdm_ahb_clk = {
3187         .halt_reg = 0x44004,
3188         .clkr = {
3189                 .enable_reg = 0x44004,
3190                 .enable_mask = BIT(0),
3191                 .hw.init = &(struct clk_init_data){
3192                         .name = "gcc_pdm_ahb_clk",
3193                         .parent_hws = (const struct clk_hw*[]){
3194                                 &pcnoc_bfdcd_clk_src.clkr.hw,
3195                         },
3196                         .num_parents = 1,
3197                         .flags = CLK_SET_RATE_PARENT,
3198                         .ops = &clk_branch2_ops,
3199                 },
3200         },
3201 };
3202
3203 static struct clk_branch gcc_prng_ahb_clk = {
3204         .halt_reg = 0x13004,
3205         .halt_check = BRANCH_HALT_VOTED,
3206         .clkr = {
3207                 .enable_reg = 0x45004,
3208                 .enable_mask = BIT(8),
3209                 .hw.init = &(struct clk_init_data){
3210                         .name = "gcc_prng_ahb_clk",
3211                         .parent_hws = (const struct clk_hw*[]){
3212                                 &pcnoc_bfdcd_clk_src.clkr.hw,
3213                         },
3214                         .num_parents = 1,
3215                         .ops = &clk_branch2_ops,
3216                 },
3217         },
3218 };
3219
3220 static struct clk_branch gcc_sdcc1_ahb_clk = {
3221         .halt_reg = 0x4201c,
3222         .clkr = {
3223                 .enable_reg = 0x4201c,
3224                 .enable_mask = BIT(0),
3225                 .hw.init = &(struct clk_init_data){
3226                         .name = "gcc_sdcc1_ahb_clk",
3227                         .parent_hws = (const struct clk_hw*[]){
3228                                 &pcnoc_bfdcd_clk_src.clkr.hw,
3229                         },
3230                         .num_parents = 1,
3231                         .flags = CLK_SET_RATE_PARENT,
3232                         .ops = &clk_branch2_ops,
3233                 },
3234         },
3235 };
3236
3237 static struct clk_branch gcc_sdcc1_apps_clk = {
3238         .halt_reg = 0x42018,
3239         .clkr = {
3240                 .enable_reg = 0x42018,
3241                 .enable_mask = BIT(0),
3242                 .hw.init = &(struct clk_init_data){
3243                         .name = "gcc_sdcc1_apps_clk",
3244                         .parent_hws = (const struct clk_hw*[]){
3245                                 &sdcc1_apps_clk_src.clkr.hw,
3246                         },
3247                         .num_parents = 1,
3248                         .flags = CLK_SET_RATE_PARENT,
3249                         .ops = &clk_branch2_ops,
3250                 },
3251         },
3252 };
3253
3254 static struct clk_branch gcc_sdcc2_ahb_clk = {
3255         .halt_reg = 0x4301c,
3256         .clkr = {
3257                 .enable_reg = 0x4301c,
3258                 .enable_mask = BIT(0),
3259                 .hw.init = &(struct clk_init_data){
3260                         .name = "gcc_sdcc2_ahb_clk",
3261                         .parent_hws = (const struct clk_hw*[]){
3262                                 &pcnoc_bfdcd_clk_src.clkr.hw,
3263                         },
3264                         .num_parents = 1,
3265                         .flags = CLK_SET_RATE_PARENT,
3266                         .ops = &clk_branch2_ops,
3267                 },
3268         },
3269 };
3270
3271 static struct clk_branch gcc_sdcc2_apps_clk = {
3272         .halt_reg = 0x43018,
3273         .clkr = {
3274                 .enable_reg = 0x43018,
3275                 .enable_mask = BIT(0),
3276                 .hw.init = &(struct clk_init_data){
3277                         .name = "gcc_sdcc2_apps_clk",
3278                         .parent_hws = (const struct clk_hw*[]){
3279                                 &sdcc2_apps_clk_src.clkr.hw,
3280                         },
3281                         .num_parents = 1,
3282                         .flags = CLK_SET_RATE_PARENT,
3283                         .ops = &clk_branch2_ops,
3284                 },
3285         },
3286 };
3287
3288 static struct clk_branch gcc_apss_tcu_clk = {
3289         .halt_reg = 0x12018,
3290         .halt_check = BRANCH_HALT_VOTED,
3291         .clkr = {
3292                 .enable_reg = 0x4500c,
3293                 .enable_mask = BIT(1),
3294                 .hw.init = &(struct clk_init_data){
3295                         .name = "gcc_apss_tcu_clk",
3296                         .parent_hws = (const struct clk_hw*[]){
3297                                 &bimc_ddr_clk_src.clkr.hw,
3298                         },
3299                         .num_parents = 1,
3300                         .ops = &clk_branch2_ops,
3301                 },
3302         },
3303 };
3304
3305 static struct clk_branch gcc_gfx_tcu_clk = {
3306         .halt_reg = 0x12020,
3307         .halt_check = BRANCH_HALT_VOTED,
3308         .clkr = {
3309                 .enable_reg = 0x4500c,
3310                 .enable_mask = BIT(2),
3311                 .hw.init = &(struct clk_init_data){
3312                         .name = "gcc_gfx_tcu_clk",
3313                         .parent_hws = (const struct clk_hw*[]){
3314                                 &bimc_ddr_clk_src.clkr.hw,
3315                         },
3316                         .num_parents = 1,
3317                         .ops = &clk_branch2_ops,
3318                 },
3319         },
3320 };
3321
3322 static struct clk_branch gcc_gfx_tbu_clk = {
3323         .halt_reg = 0x12010,
3324         .halt_check = BRANCH_HALT_VOTED,
3325         .clkr = {
3326                 .enable_reg = 0x4500c,
3327                 .enable_mask = BIT(3),
3328                 .hw.init = &(struct clk_init_data){
3329                         .name = "gcc_gfx_tbu_clk",
3330                         .parent_hws = (const struct clk_hw*[]){
3331                                 &bimc_ddr_clk_src.clkr.hw,
3332                         },
3333                         .num_parents = 1,
3334                         .ops = &clk_branch2_ops,
3335                 },
3336         },
3337 };
3338
3339 static struct clk_branch gcc_mdp_tbu_clk = {
3340         .halt_reg = 0x1201c,
3341         .halt_check = BRANCH_HALT_VOTED,
3342         .clkr = {
3343                 .enable_reg = 0x4500c,
3344                 .enable_mask = BIT(4),
3345                 .hw.init = &(struct clk_init_data){
3346                         .name = "gcc_mdp_tbu_clk",
3347                         .parent_hws = (const struct clk_hw*[]){
3348                                 &system_mm_noc_bfdcd_clk_src.clkr.hw,
3349                         },
3350                         .num_parents = 1,
3351                         .flags = CLK_SET_RATE_PARENT,
3352                         .ops = &clk_branch2_ops,
3353                 },
3354         },
3355 };
3356
3357 static struct clk_branch gcc_venus_tbu_clk = {
3358         .halt_reg = 0x12014,
3359         .halt_check = BRANCH_HALT_VOTED,
3360         .clkr = {
3361                 .enable_reg = 0x4500c,
3362                 .enable_mask = BIT(5),
3363                 .hw.init = &(struct clk_init_data){
3364                         .name = "gcc_venus_tbu_clk",
3365                         .parent_hws = (const struct clk_hw*[]){
3366                                 &system_mm_noc_bfdcd_clk_src.clkr.hw,
3367                         },
3368                         .num_parents = 1,
3369                         .flags = CLK_SET_RATE_PARENT,
3370                         .ops = &clk_branch2_ops,
3371                 },
3372         },
3373 };
3374
3375 static struct clk_branch gcc_vfe_tbu_clk = {
3376         .halt_reg = 0x1203c,
3377         .halt_check = BRANCH_HALT_VOTED,
3378         .clkr = {
3379                 .enable_reg = 0x4500c,
3380                 .enable_mask = BIT(9),
3381                 .hw.init = &(struct clk_init_data){
3382                         .name = "gcc_vfe_tbu_clk",
3383                         .parent_hws = (const struct clk_hw*[]){
3384                                 &system_mm_noc_bfdcd_clk_src.clkr.hw,
3385                         },
3386                         .num_parents = 1,
3387                         .flags = CLK_SET_RATE_PARENT,
3388                         .ops = &clk_branch2_ops,
3389                 },
3390         },
3391 };
3392
3393 static struct clk_branch gcc_jpeg_tbu_clk = {
3394         .halt_reg = 0x12034,
3395         .halt_check = BRANCH_HALT_VOTED,
3396         .clkr = {
3397                 .enable_reg = 0x4500c,
3398                 .enable_mask = BIT(10),
3399                 .hw.init = &(struct clk_init_data){
3400                         .name = "gcc_jpeg_tbu_clk",
3401                         .parent_hws = (const struct clk_hw*[]){
3402                                 &system_mm_noc_bfdcd_clk_src.clkr.hw,
3403                         },
3404                         .num_parents = 1,
3405                         .flags = CLK_SET_RATE_PARENT,
3406                         .ops = &clk_branch2_ops,
3407                 },
3408         },
3409 };
3410
3411 static struct clk_branch gcc_smmu_cfg_clk = {
3412         .halt_reg = 0x12038,
3413         .halt_check = BRANCH_HALT_VOTED,
3414         .clkr = {
3415                 .enable_reg = 0x4500c,
3416                 .enable_mask = BIT(12),
3417                 .hw.init = &(struct clk_init_data){
3418                         .name = "gcc_smmu_cfg_clk",
3419                         .parent_hws = (const struct clk_hw*[]){
3420                                 &pcnoc_bfdcd_clk_src.clkr.hw,
3421                         },
3422                         .num_parents = 1,
3423                         .flags = CLK_SET_RATE_PARENT,
3424                         .ops = &clk_branch2_ops,
3425                 },
3426         },
3427 };
3428
3429 static struct clk_branch gcc_gtcu_ahb_clk = {
3430         .halt_reg = 0x12044,
3431         .halt_check = BRANCH_HALT_VOTED,
3432         .clkr = {
3433                 .enable_reg = 0x4500c,
3434                 .enable_mask = BIT(13),
3435                 .hw.init = &(struct clk_init_data){
3436                         .name = "gcc_gtcu_ahb_clk",
3437                         .parent_hws = (const struct clk_hw*[]){
3438                                 &pcnoc_bfdcd_clk_src.clkr.hw,
3439                         },
3440                         .num_parents = 1,
3441                         .flags = CLK_SET_RATE_PARENT,
3442                         .ops = &clk_branch2_ops,
3443                 },
3444         },
3445 };
3446
3447 static struct clk_branch gcc_cpp_tbu_clk = {
3448         .halt_reg = 0x12040,
3449         .halt_check = BRANCH_HALT_VOTED,
3450         .clkr = {
3451                 .enable_reg = 0x4500c,
3452                 .enable_mask = BIT(14),
3453                 .hw.init = &(struct clk_init_data){
3454                         .name = "gcc_cpp_tbu_clk",
3455                         .parent_hws = (const struct clk_hw*[]){
3456                                 &pcnoc_bfdcd_clk_src.clkr.hw,
3457                         },
3458                         .num_parents = 1,
3459                         .flags = CLK_SET_RATE_PARENT,
3460                         .ops = &clk_branch2_ops,
3461                 },
3462         },
3463 };
3464
3465 static struct clk_branch gcc_mdp_rt_tbu_clk = {
3466         .halt_reg = 0x1201c,
3467         .halt_check = BRANCH_HALT_VOTED,
3468         .clkr = {
3469                 .enable_reg = 0x4500c,
3470                 .enable_mask = BIT(15),
3471                 .hw.init = &(struct clk_init_data){
3472                         .name = "gcc_mdp_rt_tbu_clk",
3473                         .parent_hws = (const struct clk_hw*[]){
3474                                 &pcnoc_bfdcd_clk_src.clkr.hw,
3475                         },
3476                         .num_parents = 1,
3477                         .flags = CLK_SET_RATE_PARENT,
3478                         .ops = &clk_branch2_ops,
3479                 },
3480         },
3481 };
3482
3483 static struct clk_branch gcc_bimc_gfx_clk = {
3484         .halt_reg = 0x31024,
3485         .clkr = {
3486                 .enable_reg = 0x31024,
3487                 .enable_mask = BIT(0),
3488                 .hw.init = &(struct clk_init_data){
3489                         .name = "gcc_bimc_gfx_clk",
3490                         .parent_hws = (const struct clk_hw*[]){
3491                                 &bimc_gpu_clk_src.clkr.hw,
3492                         },
3493                         .num_parents = 1,
3494                         .flags = CLK_SET_RATE_PARENT,
3495                         .ops = &clk_branch2_ops,
3496                 },
3497         },
3498 };
3499
3500 static struct clk_branch gcc_bimc_gpu_clk = {
3501         .halt_reg = 0x31040,
3502         .clkr = {
3503                 .enable_reg = 0x31040,
3504                 .enable_mask = BIT(0),
3505                 .hw.init = &(struct clk_init_data){
3506                         .name = "gcc_bimc_gpu_clk",
3507                         .parent_hws = (const struct clk_hw*[]){
3508                                 &bimc_gpu_clk_src.clkr.hw,
3509                         },
3510                         .num_parents = 1,
3511                         .flags = CLK_SET_RATE_PARENT,
3512                         .ops = &clk_branch2_ops,
3513                 },
3514         },
3515 };
3516
3517 static struct clk_branch gcc_usb2a_phy_sleep_clk = {
3518         .halt_reg = 0x4102c,
3519         .clkr = {
3520                 .enable_reg = 0x4102c,
3521                 .enable_mask = BIT(0),
3522                 .hw.init = &(struct clk_init_data){
3523                         .name = "gcc_usb2a_phy_sleep_clk",
3524                         .ops = &clk_branch2_ops,
3525                 },
3526         },
3527 };
3528
3529 static struct clk_branch gcc_usb_fs_ahb_clk = {
3530         .halt_reg = 0x3f008,
3531         .clkr = {
3532                 .enable_reg = 0x3f008,
3533                 .enable_mask = BIT(0),
3534                 .hw.init = &(struct clk_init_data){
3535                         .name = "gcc_usb_fs_ahb_clk",
3536                         .parent_hws = (const struct clk_hw*[]){
3537                                 &pcnoc_bfdcd_clk_src.clkr.hw,
3538                         },
3539                         .num_parents = 1,
3540                         .flags = CLK_SET_RATE_PARENT,
3541                         .ops = &clk_branch2_ops,
3542                 },
3543         },
3544 };
3545
3546 static struct clk_branch gcc_usb_fs_ic_clk = {
3547         .halt_reg = 0x3f030,
3548         .clkr = {
3549                 .enable_reg = 0x3f030,
3550                 .enable_mask = BIT(0),
3551                 .hw.init = &(struct clk_init_data){
3552                         .name = "gcc_usb_fs_ic_clk",
3553                         .parent_hws = (const struct clk_hw*[]){
3554                                 &usb_fs_ic_clk_src.clkr.hw,
3555                         },
3556                         .num_parents = 1,
3557                         .flags = CLK_SET_RATE_PARENT,
3558                         .ops = &clk_branch2_ops,
3559                 },
3560         },
3561 };
3562
3563 static struct clk_branch gcc_usb_fs_system_clk = {
3564         .halt_reg = 0x3f004,
3565         .clkr = {
3566                 .enable_reg = 0x3f004,
3567                 .enable_mask = BIT(0),
3568                 .hw.init = &(struct clk_init_data){
3569                         .name = "gcc_usb_fs_system_clk",
3570                         .parent_hws = (const struct clk_hw*[]){
3571                                 &usb_fs_system_clk_src.clkr.hw,
3572                         },
3573                         .num_parents = 1,
3574                         .flags = CLK_SET_RATE_PARENT,
3575                         .ops = &clk_branch2_ops,
3576                 },
3577         },
3578 };
3579
3580 static struct clk_branch gcc_usb_hs_ahb_clk = {
3581         .halt_reg = 0x41008,
3582         .clkr = {
3583                 .enable_reg = 0x41008,
3584                 .enable_mask = BIT(0),
3585                 .hw.init = &(struct clk_init_data){
3586                         .name = "gcc_usb_hs_ahb_clk",
3587                         .parent_hws = (const struct clk_hw*[]){
3588                                 &pcnoc_bfdcd_clk_src.clkr.hw,
3589                         },
3590                         .num_parents = 1,
3591                         .flags = CLK_SET_RATE_PARENT,
3592                         .ops = &clk_branch2_ops,
3593                 },
3594         },
3595 };
3596
3597 static struct clk_branch gcc_usb_hs_system_clk = {
3598         .halt_reg = 0x41004,
3599         .clkr = {
3600                 .enable_reg = 0x41004,
3601                 .enable_mask = BIT(0),
3602                 .hw.init = &(struct clk_init_data){
3603                         .name = "gcc_usb_hs_system_clk",
3604                         .parent_hws = (const struct clk_hw*[]){
3605                                 &usb_hs_system_clk_src.clkr.hw,
3606                         },
3607                         .num_parents = 1,
3608                         .flags = CLK_SET_RATE_PARENT,
3609                         .ops = &clk_branch2_ops,
3610                 },
3611         },
3612 };
3613
3614 static struct clk_branch gcc_venus0_ahb_clk = {
3615         .halt_reg = 0x4c020,
3616         .clkr = {
3617                 .enable_reg = 0x4c020,
3618                 .enable_mask = BIT(0),
3619                 .hw.init = &(struct clk_init_data){
3620                         .name = "gcc_venus0_ahb_clk",
3621                         .parent_hws = (const struct clk_hw*[]){
3622                                 &pcnoc_bfdcd_clk_src.clkr.hw,
3623                         },
3624                         .num_parents = 1,
3625                         .flags = CLK_SET_RATE_PARENT,
3626                         .ops = &clk_branch2_ops,
3627                 },
3628         },
3629 };
3630
3631 static struct clk_branch gcc_venus0_axi_clk = {
3632         .halt_reg = 0x4c024,
3633         .clkr = {
3634                 .enable_reg = 0x4c024,
3635                 .enable_mask = BIT(0),
3636                 .hw.init = &(struct clk_init_data){
3637                         .name = "gcc_venus0_axi_clk",
3638                         .parent_hws = (const struct clk_hw*[]){
3639                                 &system_mm_noc_bfdcd_clk_src.clkr.hw,
3640                         },
3641                         .num_parents = 1,
3642                         .flags = CLK_SET_RATE_PARENT,
3643                         .ops = &clk_branch2_ops,
3644                 },
3645         },
3646 };
3647
3648 static struct clk_branch gcc_venus0_vcodec0_clk = {
3649         .halt_reg = 0x4c01c,
3650         .clkr = {
3651                 .enable_reg = 0x4c01c,
3652                 .enable_mask = BIT(0),
3653                 .hw.init = &(struct clk_init_data){
3654                         .name = "gcc_venus0_vcodec0_clk",
3655                         .parent_hws = (const struct clk_hw*[]){
3656                                 &vcodec0_clk_src.clkr.hw,
3657                         },
3658                         .num_parents = 1,
3659                         .flags = CLK_SET_RATE_PARENT,
3660                         .ops = &clk_branch2_ops,
3661                 },
3662         },
3663 };
3664
3665 static struct clk_branch gcc_venus0_core0_vcodec0_clk = {
3666         .halt_reg = 0x4c02c,
3667         .clkr = {
3668                 .enable_reg = 0x4c02c,
3669                 .enable_mask = BIT(0),
3670                 .hw.init = &(struct clk_init_data){
3671                         .name = "gcc_venus0_core0_vcodec0_clk",
3672                         .parent_hws = (const struct clk_hw*[]){
3673                                 &vcodec0_clk_src.clkr.hw,
3674                         },
3675                         .num_parents = 1,
3676                         .flags = CLK_SET_RATE_PARENT,
3677                         .ops = &clk_branch2_ops,
3678                 },
3679         },
3680 };
3681
3682 static struct clk_branch gcc_venus0_core1_vcodec0_clk = {
3683         .halt_reg = 0x4c034,
3684         .clkr = {
3685                 .enable_reg = 0x4c034,
3686                 .enable_mask = BIT(0),
3687                 .hw.init = &(struct clk_init_data){
3688                         .name = "gcc_venus0_core1_vcodec0_clk",
3689                         .parent_hws = (const struct clk_hw*[]){
3690                                 &vcodec0_clk_src.clkr.hw,
3691                         },
3692                         .num_parents = 1,
3693                         .flags = CLK_SET_RATE_PARENT,
3694                         .ops = &clk_branch2_ops,
3695                 },
3696         },
3697 };
3698
3699 static struct clk_branch gcc_oxili_timer_clk = {
3700         .halt_reg = 0x59040,
3701         .clkr = {
3702                 .enable_reg = 0x59040,
3703                 .enable_mask = BIT(0),
3704                 .hw.init = &(struct clk_init_data){
3705                         .name = "gcc_oxili_timer_clk",
3706                         .ops = &clk_branch2_ops,
3707                 },
3708         },
3709 };
3710
3711 static struct gdsc venus_gdsc = {
3712         .gdscr = 0x4c018,
3713         .pd = {
3714                 .name = "venus",
3715         },
3716         .pwrsts = PWRSTS_OFF_ON,
3717 };
3718
3719 static struct gdsc mdss_gdsc = {
3720         .gdscr = 0x4d078,
3721         .pd = {
3722                 .name = "mdss",
3723         },
3724         .pwrsts = PWRSTS_OFF_ON,
3725 };
3726
3727 static struct gdsc jpeg_gdsc = {
3728         .gdscr = 0x5701c,
3729         .pd = {
3730                 .name = "jpeg",
3731         },
3732         .pwrsts = PWRSTS_OFF_ON,
3733 };
3734
3735 static struct gdsc vfe_gdsc = {
3736         .gdscr = 0x58034,
3737         .pd = {
3738                 .name = "vfe",
3739         },
3740         .pwrsts = PWRSTS_OFF_ON,
3741 };
3742
3743 static struct gdsc oxili_gdsc = {
3744         .gdscr = 0x5901c,
3745         .pd = {
3746                 .name = "oxili",
3747         },
3748         .pwrsts = PWRSTS_OFF_ON,
3749 };
3750
3751 static struct gdsc venus_core0_gdsc = {
3752         .gdscr = 0x4c028,
3753         .pd = {
3754                 .name = "venus_core0",
3755         },
3756         .pwrsts = PWRSTS_OFF_ON,
3757 };
3758
3759 static struct gdsc venus_core1_gdsc = {
3760         .gdscr = 0x4c030,
3761         .pd = {
3762                 .name = "venus_core1",
3763         },
3764         .pwrsts = PWRSTS_OFF_ON,
3765 };
3766
3767 static struct clk_regmap *gcc_msm8939_clocks[] = {
3768         [GPLL0] = &gpll0.clkr,
3769         [GPLL0_VOTE] = &gpll0_vote,
3770         [BIMC_PLL] = &bimc_pll.clkr,
3771         [BIMC_PLL_VOTE] = &bimc_pll_vote,
3772         [GPLL1] = &gpll1.clkr,
3773         [GPLL1_VOTE] = &gpll1_vote,
3774         [GPLL2] = &gpll2.clkr,
3775         [GPLL2_VOTE] = &gpll2_vote,
3776         [PCNOC_BFDCD_CLK_SRC] = &pcnoc_bfdcd_clk_src.clkr,
3777         [SYSTEM_NOC_BFDCD_CLK_SRC] = &system_noc_bfdcd_clk_src.clkr,
3778         [SYSTEM_MM_NOC_BFDCD_CLK_SRC] = &system_mm_noc_bfdcd_clk_src.clkr,
3779         [CAMSS_AHB_CLK_SRC] = &camss_ahb_clk_src.clkr,
3780         [APSS_AHB_CLK_SRC] = &apss_ahb_clk_src.clkr,
3781         [CSI0_CLK_SRC] = &csi0_clk_src.clkr,
3782         [CSI1_CLK_SRC] = &csi1_clk_src.clkr,
3783         [CSI2_CLK_SRC] = &csi2_clk_src.clkr,
3784         [GFX3D_CLK_SRC] = &gfx3d_clk_src.clkr,
3785         [VFE0_CLK_SRC] = &vfe0_clk_src.clkr,
3786         [BLSP1_QUP1_I2C_APPS_CLK_SRC] = &blsp1_qup1_i2c_apps_clk_src.clkr,
3787         [BLSP1_QUP1_SPI_APPS_CLK_SRC] = &blsp1_qup1_spi_apps_clk_src.clkr,
3788         [BLSP1_QUP2_I2C_APPS_CLK_SRC] = &blsp1_qup2_i2c_apps_clk_src.clkr,
3789         [BLSP1_QUP2_SPI_APPS_CLK_SRC] = &blsp1_qup2_spi_apps_clk_src.clkr,
3790         [BLSP1_QUP3_I2C_APPS_CLK_SRC] = &blsp1_qup3_i2c_apps_clk_src.clkr,
3791         [BLSP1_QUP3_SPI_APPS_CLK_SRC] = &blsp1_qup3_spi_apps_clk_src.clkr,
3792         [BLSP1_QUP4_I2C_APPS_CLK_SRC] = &blsp1_qup4_i2c_apps_clk_src.clkr,
3793         [BLSP1_QUP4_SPI_APPS_CLK_SRC] = &blsp1_qup4_spi_apps_clk_src.clkr,
3794         [BLSP1_QUP5_I2C_APPS_CLK_SRC] = &blsp1_qup5_i2c_apps_clk_src.clkr,
3795         [BLSP1_QUP5_SPI_APPS_CLK_SRC] = &blsp1_qup5_spi_apps_clk_src.clkr,
3796         [BLSP1_QUP6_I2C_APPS_CLK_SRC] = &blsp1_qup6_i2c_apps_clk_src.clkr,
3797         [BLSP1_QUP6_SPI_APPS_CLK_SRC] = &blsp1_qup6_spi_apps_clk_src.clkr,
3798         [BLSP1_UART1_APPS_CLK_SRC] = &blsp1_uart1_apps_clk_src.clkr,
3799         [BLSP1_UART2_APPS_CLK_SRC] = &blsp1_uart2_apps_clk_src.clkr,
3800         [CCI_CLK_SRC] = &cci_clk_src.clkr,
3801         [CAMSS_GP0_CLK_SRC] = &camss_gp0_clk_src.clkr,
3802         [CAMSS_GP1_CLK_SRC] = &camss_gp1_clk_src.clkr,
3803         [JPEG0_CLK_SRC] = &jpeg0_clk_src.clkr,
3804         [MCLK0_CLK_SRC] = &mclk0_clk_src.clkr,
3805         [MCLK1_CLK_SRC] = &mclk1_clk_src.clkr,
3806         [CSI0PHYTIMER_CLK_SRC] = &csi0phytimer_clk_src.clkr,
3807         [CSI1PHYTIMER_CLK_SRC] = &csi1phytimer_clk_src.clkr,
3808         [CPP_CLK_SRC] = &cpp_clk_src.clkr,
3809         [CRYPTO_CLK_SRC] = &crypto_clk_src.clkr,
3810         [GP1_CLK_SRC] = &gp1_clk_src.clkr,
3811         [GP2_CLK_SRC] = &gp2_clk_src.clkr,
3812         [GP3_CLK_SRC] = &gp3_clk_src.clkr,
3813         [BYTE0_CLK_SRC] = &byte0_clk_src.clkr,
3814         [ESC0_CLK_SRC] = &esc0_clk_src.clkr,
3815         [MDP_CLK_SRC] = &mdp_clk_src.clkr,
3816         [PCLK0_CLK_SRC] = &pclk0_clk_src.clkr,
3817         [VSYNC_CLK_SRC] = &vsync_clk_src.clkr,
3818         [PDM2_CLK_SRC] = &pdm2_clk_src.clkr,
3819         [SDCC1_APPS_CLK_SRC] = &sdcc1_apps_clk_src.clkr,
3820         [SDCC2_APPS_CLK_SRC] = &sdcc2_apps_clk_src.clkr,
3821         [APSS_TCU_CLK_SRC] = &apss_tcu_clk_src.clkr,
3822         [USB_HS_SYSTEM_CLK_SRC] = &usb_hs_system_clk_src.clkr,
3823         [VCODEC0_CLK_SRC] = &vcodec0_clk_src.clkr,
3824         [GCC_BLSP1_AHB_CLK] = &gcc_blsp1_ahb_clk.clkr,
3825         [GCC_BLSP1_SLEEP_CLK] = &gcc_blsp1_sleep_clk.clkr,
3826         [GCC_BLSP1_QUP1_I2C_APPS_CLK] = &gcc_blsp1_qup1_i2c_apps_clk.clkr,
3827         [GCC_BLSP1_QUP1_SPI_APPS_CLK] = &gcc_blsp1_qup1_spi_apps_clk.clkr,
3828         [GCC_BLSP1_QUP2_I2C_APPS_CLK] = &gcc_blsp1_qup2_i2c_apps_clk.clkr,
3829         [GCC_BLSP1_QUP2_SPI_APPS_CLK] = &gcc_blsp1_qup2_spi_apps_clk.clkr,
3830         [GCC_BLSP1_QUP3_I2C_APPS_CLK] = &gcc_blsp1_qup3_i2c_apps_clk.clkr,
3831         [GCC_BLSP1_QUP3_SPI_APPS_CLK] = &gcc_blsp1_qup3_spi_apps_clk.clkr,
3832         [GCC_BLSP1_QUP4_I2C_APPS_CLK] = &gcc_blsp1_qup4_i2c_apps_clk.clkr,
3833         [GCC_BLSP1_QUP4_SPI_APPS_CLK] = &gcc_blsp1_qup4_spi_apps_clk.clkr,
3834         [GCC_BLSP1_QUP5_I2C_APPS_CLK] = &gcc_blsp1_qup5_i2c_apps_clk.clkr,
3835         [GCC_BLSP1_QUP5_SPI_APPS_CLK] = &gcc_blsp1_qup5_spi_apps_clk.clkr,
3836         [GCC_BLSP1_QUP6_I2C_APPS_CLK] = &gcc_blsp1_qup6_i2c_apps_clk.clkr,
3837         [GCC_BLSP1_QUP6_SPI_APPS_CLK] = &gcc_blsp1_qup6_spi_apps_clk.clkr,
3838         [GCC_BLSP1_UART1_APPS_CLK] = &gcc_blsp1_uart1_apps_clk.clkr,
3839         [GCC_BLSP1_UART2_APPS_CLK] = &gcc_blsp1_uart2_apps_clk.clkr,
3840         [GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr,
3841         [GCC_CAMSS_CCI_AHB_CLK] = &gcc_camss_cci_ahb_clk.clkr,
3842         [GCC_CAMSS_CCI_CLK] = &gcc_camss_cci_clk.clkr,
3843         [GCC_CAMSS_CSI0_AHB_CLK] = &gcc_camss_csi0_ahb_clk.clkr,
3844         [GCC_CAMSS_CSI0_CLK] = &gcc_camss_csi0_clk.clkr,
3845         [GCC_CAMSS_CSI0PHY_CLK] = &gcc_camss_csi0phy_clk.clkr,
3846         [GCC_CAMSS_CSI0PIX_CLK] = &gcc_camss_csi0pix_clk.clkr,
3847         [GCC_CAMSS_CSI0RDI_CLK] = &gcc_camss_csi0rdi_clk.clkr,
3848         [GCC_CAMSS_CSI1_AHB_CLK] = &gcc_camss_csi1_ahb_clk.clkr,
3849         [GCC_CAMSS_CSI1_CLK] = &gcc_camss_csi1_clk.clkr,
3850         [GCC_CAMSS_CSI1PHY_CLK] = &gcc_camss_csi1phy_clk.clkr,
3851         [GCC_CAMSS_CSI1PIX_CLK] = &gcc_camss_csi1pix_clk.clkr,
3852         [GCC_CAMSS_CSI1RDI_CLK] = &gcc_camss_csi1rdi_clk.clkr,
3853         [GCC_CAMSS_CSI2_AHB_CLK] = &gcc_camss_csi2_ahb_clk.clkr,
3854         [GCC_CAMSS_CSI2_CLK] = &gcc_camss_csi2_clk.clkr,
3855         [GCC_CAMSS_CSI2PHY_CLK] = &gcc_camss_csi2phy_clk.clkr,
3856         [GCC_CAMSS_CSI2PIX_CLK] = &gcc_camss_csi2pix_clk.clkr,
3857         [GCC_CAMSS_CSI2RDI_CLK] = &gcc_camss_csi2rdi_clk.clkr,
3858         [GCC_CAMSS_CSI_VFE0_CLK] = &gcc_camss_csi_vfe0_clk.clkr,
3859         [GCC_CAMSS_GP0_CLK] = &gcc_camss_gp0_clk.clkr,
3860         [GCC_CAMSS_GP1_CLK] = &gcc_camss_gp1_clk.clkr,
3861         [GCC_CAMSS_ISPIF_AHB_CLK] = &gcc_camss_ispif_ahb_clk.clkr,
3862         [GCC_CAMSS_JPEG0_CLK] = &gcc_camss_jpeg0_clk.clkr,
3863         [GCC_CAMSS_JPEG_AHB_CLK] = &gcc_camss_jpeg_ahb_clk.clkr,
3864         [GCC_CAMSS_JPEG_AXI_CLK] = &gcc_camss_jpeg_axi_clk.clkr,
3865         [GCC_CAMSS_MCLK0_CLK] = &gcc_camss_mclk0_clk.clkr,
3866         [GCC_CAMSS_MCLK1_CLK] = &gcc_camss_mclk1_clk.clkr,
3867         [GCC_CAMSS_MICRO_AHB_CLK] = &gcc_camss_micro_ahb_clk.clkr,
3868         [GCC_CAMSS_CSI0PHYTIMER_CLK] = &gcc_camss_csi0phytimer_clk.clkr,
3869         [GCC_CAMSS_CSI1PHYTIMER_CLK] = &gcc_camss_csi1phytimer_clk.clkr,
3870         [GCC_CAMSS_AHB_CLK] = &gcc_camss_ahb_clk.clkr,
3871         [GCC_CAMSS_TOP_AHB_CLK] = &gcc_camss_top_ahb_clk.clkr,
3872         [GCC_CAMSS_CPP_AHB_CLK] = &gcc_camss_cpp_ahb_clk.clkr,
3873         [GCC_CAMSS_CPP_CLK] = &gcc_camss_cpp_clk.clkr,
3874         [GCC_CAMSS_VFE0_CLK] = &gcc_camss_vfe0_clk.clkr,
3875         [GCC_CAMSS_VFE_AHB_CLK] = &gcc_camss_vfe_ahb_clk.clkr,
3876         [GCC_CAMSS_VFE_AXI_CLK] = &gcc_camss_vfe_axi_clk.clkr,
3877         [GCC_CRYPTO_AHB_CLK] = &gcc_crypto_ahb_clk.clkr,
3878         [GCC_CRYPTO_AXI_CLK] = &gcc_crypto_axi_clk.clkr,
3879         [GCC_CRYPTO_CLK] = &gcc_crypto_clk.clkr,
3880         [GCC_OXILI_GMEM_CLK] = &gcc_oxili_gmem_clk.clkr,
3881         [GCC_GP1_CLK] = &gcc_gp1_clk.clkr,
3882         [GCC_GP2_CLK] = &gcc_gp2_clk.clkr,
3883         [GCC_GP3_CLK] = &gcc_gp3_clk.clkr,
3884         [GCC_MDSS_AHB_CLK] = &gcc_mdss_ahb_clk.clkr,
3885         [GCC_MDSS_AXI_CLK] = &gcc_mdss_axi_clk.clkr,
3886         [GCC_MDSS_BYTE0_CLK] = &gcc_mdss_byte0_clk.clkr,
3887         [GCC_MDSS_ESC0_CLK] = &gcc_mdss_esc0_clk.clkr,
3888         [GCC_MDSS_MDP_CLK] = &gcc_mdss_mdp_clk.clkr,
3889         [GCC_MDSS_PCLK0_CLK] = &gcc_mdss_pclk0_clk.clkr,
3890         [GCC_MDSS_VSYNC_CLK] = &gcc_mdss_vsync_clk.clkr,
3891         [GCC_MSS_CFG_AHB_CLK] = &gcc_mss_cfg_ahb_clk.clkr,
3892         [GCC_OXILI_AHB_CLK] = &gcc_oxili_ahb_clk.clkr,
3893         [GCC_OXILI_GFX3D_CLK] = &gcc_oxili_gfx3d_clk.clkr,
3894         [GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr,
3895         [GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr,
3896         [GCC_PRNG_AHB_CLK] = &gcc_prng_ahb_clk.clkr,
3897         [GCC_SDCC1_AHB_CLK] = &gcc_sdcc1_ahb_clk.clkr,
3898         [GCC_SDCC1_APPS_CLK] = &gcc_sdcc1_apps_clk.clkr,
3899         [GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr,
3900         [GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr,
3901         [GCC_GTCU_AHB_CLK] = &gcc_gtcu_ahb_clk.clkr,
3902         [GCC_JPEG_TBU_CLK] = &gcc_jpeg_tbu_clk.clkr,
3903         [GCC_MDP_TBU_CLK] = &gcc_mdp_tbu_clk.clkr,
3904         [GCC_SMMU_CFG_CLK] = &gcc_smmu_cfg_clk.clkr,
3905         [GCC_VENUS_TBU_CLK] = &gcc_venus_tbu_clk.clkr,
3906         [GCC_VFE_TBU_CLK] = &gcc_vfe_tbu_clk.clkr,
3907         [GCC_USB2A_PHY_SLEEP_CLK] = &gcc_usb2a_phy_sleep_clk.clkr,
3908         [GCC_USB_HS_AHB_CLK] = &gcc_usb_hs_ahb_clk.clkr,
3909         [GCC_USB_HS_SYSTEM_CLK] = &gcc_usb_hs_system_clk.clkr,
3910         [GCC_VENUS0_AHB_CLK] = &gcc_venus0_ahb_clk.clkr,
3911         [GCC_VENUS0_AXI_CLK] = &gcc_venus0_axi_clk.clkr,
3912         [GCC_VENUS0_VCODEC0_CLK] = &gcc_venus0_vcodec0_clk.clkr,
3913         [BIMC_DDR_CLK_SRC] = &bimc_ddr_clk_src.clkr,
3914         [GCC_APSS_TCU_CLK] = &gcc_apss_tcu_clk.clkr,
3915         [GCC_GFX_TCU_CLK] = &gcc_gfx_tcu_clk.clkr,
3916         [BIMC_GPU_CLK_SRC] = &bimc_gpu_clk_src.clkr,
3917         [GCC_BIMC_GFX_CLK] = &gcc_bimc_gfx_clk.clkr,
3918         [GCC_BIMC_GPU_CLK] = &gcc_bimc_gpu_clk.clkr,
3919         [ULTAUDIO_AHBFABRIC_CLK_SRC] = &ultaudio_ahbfabric_clk_src.clkr,
3920         [ULTAUDIO_LPAIF_PRI_I2S_CLK_SRC] = &ultaudio_lpaif_pri_i2s_clk_src.clkr,
3921         [ULTAUDIO_LPAIF_SEC_I2S_CLK_SRC] = &ultaudio_lpaif_sec_i2s_clk_src.clkr,
3922         [ULTAUDIO_LPAIF_AUX_I2S_CLK_SRC] = &ultaudio_lpaif_aux_i2s_clk_src.clkr,
3923         [ULTAUDIO_XO_CLK_SRC] = &ultaudio_xo_clk_src.clkr,
3924         [CODEC_DIGCODEC_CLK_SRC] = &codec_digcodec_clk_src.clkr,
3925         [GCC_ULTAUDIO_PCNOC_MPORT_CLK] = &gcc_ultaudio_pcnoc_mport_clk.clkr,
3926         [GCC_ULTAUDIO_PCNOC_SWAY_CLK] = &gcc_ultaudio_pcnoc_sway_clk.clkr,
3927         [GCC_ULTAUDIO_AVSYNC_XO_CLK] = &gcc_ultaudio_avsync_xo_clk.clkr,
3928         [GCC_ULTAUDIO_STC_XO_CLK] = &gcc_ultaudio_stc_xo_clk.clkr,
3929         [GCC_ULTAUDIO_AHBFABRIC_IXFABRIC_CLK] = &gcc_ultaudio_ahbfabric_ixfabric_clk.clkr,
3930         [GCC_ULTAUDIO_AHBFABRIC_IXFABRIC_LPM_CLK] = &gcc_ultaudio_ahbfabric_ixfabric_lpm_clk.clkr,
3931         [GCC_ULTAUDIO_LPAIF_PRI_I2S_CLK] = &gcc_ultaudio_lpaif_pri_i2s_clk.clkr,
3932         [GCC_ULTAUDIO_LPAIF_SEC_I2S_CLK] = &gcc_ultaudio_lpaif_sec_i2s_clk.clkr,
3933         [GCC_ULTAUDIO_LPAIF_AUX_I2S_CLK] = &gcc_ultaudio_lpaif_aux_i2s_clk.clkr,
3934         [GCC_CODEC_DIGCODEC_CLK] = &gcc_codec_digcodec_clk.clkr,
3935         [GCC_MSS_Q6_BIMC_AXI_CLK] = &gcc_mss_q6_bimc_axi_clk.clkr,
3936         [GPLL3] = &gpll3.clkr,
3937         [GPLL3_VOTE] = &gpll3_vote,
3938         [GPLL4] = &gpll4.clkr,
3939         [GPLL4_VOTE] = &gpll4_vote,
3940         [GPLL5] = &gpll5.clkr,
3941         [GPLL5_VOTE] = &gpll5_vote,
3942         [GPLL6] = &gpll6.clkr,
3943         [GPLL6_VOTE] = &gpll6_vote,
3944         [BYTE1_CLK_SRC] = &byte1_clk_src.clkr,
3945         [GCC_MDSS_BYTE1_CLK] = &gcc_mdss_byte1_clk.clkr,
3946         [ESC1_CLK_SRC] = &esc1_clk_src.clkr,
3947         [GCC_MDSS_ESC1_CLK] = &gcc_mdss_esc1_clk.clkr,
3948         [PCLK1_CLK_SRC] = &pclk1_clk_src.clkr,
3949         [GCC_MDSS_PCLK1_CLK] = &gcc_mdss_pclk1_clk.clkr,
3950         [GCC_GFX_TBU_CLK] = &gcc_gfx_tbu_clk.clkr,
3951         [GCC_CPP_TBU_CLK] = &gcc_cpp_tbu_clk.clkr,
3952         [GCC_MDP_RT_TBU_CLK] = &gcc_mdp_rt_tbu_clk.clkr,
3953         [USB_FS_SYSTEM_CLK_SRC] = &usb_fs_system_clk_src.clkr,
3954         [USB_FS_IC_CLK_SRC] = &usb_fs_ic_clk_src.clkr,
3955         [GCC_USB_FS_AHB_CLK] = &gcc_usb_fs_ahb_clk.clkr,
3956         [GCC_USB_FS_IC_CLK] = &gcc_usb_fs_ic_clk.clkr,
3957         [GCC_USB_FS_SYSTEM_CLK] = &gcc_usb_fs_system_clk.clkr,
3958         [GCC_VENUS0_CORE0_VCODEC0_CLK] = &gcc_venus0_core0_vcodec0_clk.clkr,
3959         [GCC_VENUS0_CORE1_VCODEC0_CLK] = &gcc_venus0_core1_vcodec0_clk.clkr,
3960         [GCC_OXILI_TIMER_CLK] = &gcc_oxili_timer_clk.clkr,
3961 };
3962
3963 static struct gdsc *gcc_msm8939_gdscs[] = {
3964         [VENUS_GDSC] = &venus_gdsc,
3965         [MDSS_GDSC] = &mdss_gdsc,
3966         [JPEG_GDSC] = &jpeg_gdsc,
3967         [VFE_GDSC] = &vfe_gdsc,
3968         [OXILI_GDSC] = &oxili_gdsc,
3969         [VENUS_CORE0_GDSC] = &venus_core0_gdsc,
3970         [VENUS_CORE1_GDSC] = &venus_core1_gdsc,
3971 };
3972
3973 static const struct qcom_reset_map gcc_msm8939_resets[] = {
3974         [GCC_BLSP1_BCR] = { 0x01000 },
3975         [GCC_BLSP1_QUP1_BCR] = { 0x02000 },
3976         [GCC_BLSP1_UART1_BCR] = { 0x02038 },
3977         [GCC_BLSP1_QUP2_BCR] = { 0x03008 },
3978         [GCC_BLSP1_UART2_BCR] = { 0x03028 },
3979         [GCC_BLSP1_QUP3_BCR] = { 0x04018 },
3980         [GCC_BLSP1_UART3_BCR] = { 0x04038 },
3981         [GCC_BLSP1_QUP4_BCR] = { 0x05018 },
3982         [GCC_BLSP1_QUP5_BCR] = { 0x06018 },
3983         [GCC_BLSP1_QUP6_BCR] = { 0x07018 },
3984         [GCC_IMEM_BCR] = { 0x0e000 },
3985         [GCC_SMMU_BCR] = { 0x12000 },
3986         [GCC_APSS_TCU_BCR] = { 0x12050 },
3987         [GCC_SMMU_XPU_BCR] = { 0x12054 },
3988         [GCC_PCNOC_TBU_BCR] = { 0x12058 },
3989         [GCC_PRNG_BCR] = { 0x13000 },
3990         [GCC_BOOT_ROM_BCR] = { 0x13008 },
3991         [GCC_CRYPTO_BCR] = { 0x16000 },
3992         [GCC_SEC_CTRL_BCR] = { 0x1a000 },
3993         [GCC_AUDIO_CORE_BCR] = { 0x1c008 },
3994         [GCC_ULT_AUDIO_BCR] = { 0x1c0b4 },
3995         [GCC_DEHR_BCR] = { 0x1f000 },
3996         [GCC_SYSTEM_NOC_BCR] = { 0x26000 },
3997         [GCC_PCNOC_BCR] = { 0x27018 },
3998         [GCC_TCSR_BCR] = { 0x28000 },
3999         [GCC_QDSS_BCR] = { 0x29000 },
4000         [GCC_DCD_BCR] = { 0x2a000 },
4001         [GCC_MSG_RAM_BCR] = { 0x2b000 },
4002         [GCC_MPM_BCR] = { 0x2c000 },
4003         [GCC_SPMI_BCR] = { 0x2e000 },
4004         [GCC_SPDM_BCR] = { 0x2f000 },
4005         [GCC_MM_SPDM_BCR] = { 0x2f024 },
4006         [GCC_BIMC_BCR] = { 0x31000 },
4007         [GCC_RBCPR_BCR] = { 0x33000 },
4008         [GCC_TLMM_BCR] = { 0x34000 },
4009         [GCC_CAMSS_CSI2_BCR] = { 0x3c038 },
4010         [GCC_CAMSS_CSI2PHY_BCR] = { 0x3c044 },
4011         [GCC_CAMSS_CSI2RDI_BCR] = { 0x3c04c },
4012         [GCC_CAMSS_CSI2PIX_BCR] = { 0x3c054 },
4013         [GCC_USB_FS_BCR] = { 0x3f000 },
4014         [GCC_USB_HS_BCR] = { 0x41000 },
4015         [GCC_USB2A_PHY_BCR] = { 0x41028 },
4016         [GCC_SDCC1_BCR] = { 0x42000 },
4017         [GCC_SDCC2_BCR] = { 0x43000 },
4018         [GCC_PDM_BCR] = { 0x44000 },
4019         [GCC_SNOC_BUS_TIMEOUT0_BCR] = { 0x47000 },
4020         [GCC_PCNOC_BUS_TIMEOUT0_BCR] = { 0x48000 },
4021         [GCC_PCNOC_BUS_TIMEOUT1_BCR] = { 0x48008 },
4022         [GCC_PCNOC_BUS_TIMEOUT2_BCR] = { 0x48010 },
4023         [GCC_PCNOC_BUS_TIMEOUT3_BCR] = { 0x48018 },
4024         [GCC_PCNOC_BUS_TIMEOUT4_BCR] = { 0x48020 },
4025         [GCC_PCNOC_BUS_TIMEOUT5_BCR] = { 0x48028 },
4026         [GCC_PCNOC_BUS_TIMEOUT6_BCR] = { 0x48030 },
4027         [GCC_PCNOC_BUS_TIMEOUT7_BCR] = { 0x48038 },
4028         [GCC_PCNOC_BUS_TIMEOUT8_BCR] = { 0x48040 },
4029         [GCC_PCNOC_BUS_TIMEOUT9_BCR] = { 0x48048 },
4030         [GCC_MMSS_BCR] = { 0x4b000 },
4031         [GCC_VENUS0_BCR] = { 0x4c014 },
4032         [GCC_MDSS_BCR] = { 0x4d074 },
4033         [GCC_CAMSS_PHY0_BCR] = { 0x4e018 },
4034         [GCC_CAMSS_CSI0_BCR] = { 0x4e038 },
4035         [GCC_CAMSS_CSI0PHY_BCR] = { 0x4e044 },
4036         [GCC_CAMSS_CSI0RDI_BCR] = { 0x4e04c },
4037         [GCC_CAMSS_CSI0PIX_BCR] = { 0x4e054 },
4038         [GCC_CAMSS_PHY1_BCR] = { 0x4f018 },
4039         [GCC_CAMSS_CSI1_BCR] = { 0x4f038 },
4040         [GCC_CAMSS_CSI1PHY_BCR] = { 0x4f044 },
4041         [GCC_CAMSS_CSI1RDI_BCR] = { 0x4f04c },
4042         [GCC_CAMSS_CSI1PIX_BCR] = { 0x4f054 },
4043         [GCC_CAMSS_ISPIF_BCR] = { 0x50000 },
4044         [GCC_BLSP1_QUP4_SPI_APPS_CBCR] = { 0x0501c },
4045         [GCC_CAMSS_CCI_BCR] = { 0x51014 },
4046         [GCC_CAMSS_MCLK0_BCR] = { 0x52014 },
4047         [GCC_CAMSS_MCLK1_BCR] = { 0x53014 },
4048         [GCC_CAMSS_GP0_BCR] = { 0x54014 },
4049         [GCC_CAMSS_GP1_BCR] = { 0x55014 },
4050         [GCC_CAMSS_TOP_BCR] = { 0x56000 },
4051         [GCC_CAMSS_MICRO_BCR] = { 0x56008 },
4052         [GCC_CAMSS_JPEG_BCR] = { 0x57018 },
4053         [GCC_CAMSS_VFE_BCR] = { 0x58030 },
4054         [GCC_CAMSS_CSI_VFE0_BCR] = { 0x5804c },
4055         [GCC_OXILI_BCR] = { 0x59018 },
4056         [GCC_GMEM_BCR] = { 0x5902c },
4057         [GCC_CAMSS_AHB_BCR] = { 0x5a018 },
4058         [GCC_CAMSS_MCLK2_BCR] = { 0x5c014 },
4059         [GCC_MDP_TBU_BCR] = { 0x62000 },
4060         [GCC_GFX_TBU_BCR] = { 0x63000 },
4061         [GCC_GFX_TCU_BCR] = { 0x64000 },
4062         [GCC_MSS_TBU_AXI_BCR] = { 0x65000 },
4063         [GCC_MSS_TBU_GSS_AXI_BCR] = { 0x66000 },
4064         [GCC_MSS_TBU_Q6_AXI_BCR] = { 0x67000 },
4065         [GCC_GTCU_AHB_BCR] = { 0x68000 },
4066         [GCC_SMMU_CFG_BCR] = { 0x69000 },
4067         [GCC_VFE_TBU_BCR] = { 0x6a000 },
4068         [GCC_VENUS_TBU_BCR] = { 0x6b000 },
4069         [GCC_JPEG_TBU_BCR] = { 0x6c000 },
4070         [GCC_PRONTO_TBU_BCR] = { 0x6d000 },
4071         [GCC_CPP_TBU_BCR] = { 0x6e000 },
4072         [GCC_MDP_RT_TBU_BCR] = { 0x6f000 },
4073         [GCC_SMMU_CATS_BCR] = { 0x7c000 },
4074 };
4075
4076 static const struct regmap_config gcc_msm8939_regmap_config = {
4077         .reg_bits       = 32,
4078         .reg_stride     = 4,
4079         .val_bits       = 32,
4080         .max_register   = 0x80000,
4081         .fast_io        = true,
4082 };
4083
4084 static const struct qcom_cc_desc gcc_msm8939_desc = {
4085         .config = &gcc_msm8939_regmap_config,
4086         .clks = gcc_msm8939_clocks,
4087         .num_clks = ARRAY_SIZE(gcc_msm8939_clocks),
4088         .resets = gcc_msm8939_resets,
4089         .num_resets = ARRAY_SIZE(gcc_msm8939_resets),
4090         .gdscs = gcc_msm8939_gdscs,
4091         .num_gdscs = ARRAY_SIZE(gcc_msm8939_gdscs),
4092 };
4093
4094 static const struct of_device_id gcc_msm8939_match_table[] = {
4095         { .compatible = "qcom,gcc-msm8939" },
4096         { }
4097 };
4098 MODULE_DEVICE_TABLE(of, gcc_msm8939_match_table);
4099
4100 static int gcc_msm8939_probe(struct platform_device *pdev)
4101 {
4102         struct regmap *regmap;
4103
4104         regmap = qcom_cc_map(pdev, &gcc_msm8939_desc);
4105         if (IS_ERR(regmap))
4106                 return PTR_ERR(regmap);
4107
4108         clk_pll_configure_sr_hpm_lp(&gpll3, regmap, &gpll3_config, true);
4109         clk_pll_configure_sr_hpm_lp(&gpll4, regmap, &gpll4_config, true);
4110
4111         return qcom_cc_really_probe(pdev, &gcc_msm8939_desc, regmap);
4112 }
4113
4114 static struct platform_driver gcc_msm8939_driver = {
4115         .probe          = gcc_msm8939_probe,
4116         .driver         = {
4117                 .name   = "gcc-msm8939",
4118                 .of_match_table = gcc_msm8939_match_table,
4119         },
4120 };
4121
4122 static int __init gcc_msm8939_init(void)
4123 {
4124         return platform_driver_register(&gcc_msm8939_driver);
4125 }
4126 core_initcall(gcc_msm8939_init);
4127
4128 static void __exit gcc_msm8939_exit(void)
4129 {
4130         platform_driver_unregister(&gcc_msm8939_driver);
4131 }
4132 module_exit(gcc_msm8939_exit);
4133
4134 MODULE_DESCRIPTION("Qualcomm GCC MSM8939 Driver");
4135 MODULE_LICENSE("GPL v2");
This page took 0.270363 seconds and 4 git commands to generate.