d3f2dc798567df98aa8e6b6f3868d6906c8a9dc2
[releases.git] / mmcc-msm8996.c
1 // SPDX-License-Identifier: GPL-2.0-only
2 /*x
3  * Copyright (c) 2015, The Linux Foundation. All rights reserved.
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 #include <linux/clk.h>
16
17 #include <dt-bindings/clock/qcom,mmcc-msm8996.h>
18
19 #include "common.h"
20 #include "clk-regmap.h"
21 #include "clk-regmap-divider.h"
22 #include "clk-alpha-pll.h"
23 #include "clk-rcg.h"
24 #include "clk-branch.h"
25 #include "reset.h"
26 #include "gdsc.h"
27
28 enum {
29         P_XO,
30         P_MMPLL0,
31         P_GPLL0,
32         P_GPLL0_DIV,
33         P_MMPLL1,
34         P_MMPLL9,
35         P_MMPLL2,
36         P_MMPLL8,
37         P_MMPLL3,
38         P_DSI0PLL,
39         P_DSI1PLL,
40         P_MMPLL5,
41         P_HDMIPLL,
42         P_DSI0PLL_BYTE,
43         P_DSI1PLL_BYTE,
44         P_MMPLL4,
45 };
46
47 static struct clk_fixed_factor gpll0_div = {
48         .mult = 1,
49         .div = 2,
50         .hw.init = &(struct clk_init_data){
51                 .name = "gpll0_div",
52                 .parent_data = (const struct clk_parent_data[]){
53                         { .fw_name = "gpll0", .name = "gpll0" },
54                 },
55                 .num_parents = 1,
56                 .ops = &clk_fixed_factor_ops,
57         },
58 };
59
60 static struct pll_vco mmpll_p_vco[] = {
61         { 250000000, 500000000, 3 },
62         { 500000000, 1000000000, 2 },
63         { 1000000000, 1500000000, 1 },
64         { 1500000000, 2000000000, 0 },
65 };
66
67 static struct pll_vco mmpll_gfx_vco[] = {
68         { 400000000, 1000000000, 2 },
69         { 1000000000, 1500000000, 1 },
70         { 1500000000, 2000000000, 0 },
71 };
72
73 static struct pll_vco mmpll_t_vco[] = {
74         { 500000000, 1500000000, 0 },
75 };
76
77 static struct clk_alpha_pll mmpll0_early = {
78         .offset = 0x0,
79         .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
80         .vco_table = mmpll_p_vco,
81         .num_vco = ARRAY_SIZE(mmpll_p_vco),
82         .clkr = {
83                 .enable_reg = 0x100,
84                 .enable_mask = BIT(0),
85                 .hw.init = &(struct clk_init_data){
86                         .name = "mmpll0_early",
87                         .parent_data = (const struct clk_parent_data[]){
88                                 { .fw_name = "xo", .name = "xo_board" },
89                         },
90                         .num_parents = 1,
91                         .ops = &clk_alpha_pll_ops,
92                 },
93         },
94 };
95
96 static struct clk_alpha_pll_postdiv mmpll0 = {
97         .offset = 0x0,
98         .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
99         .width = 4,
100         .clkr.hw.init = &(struct clk_init_data){
101                 .name = "mmpll0",
102                 .parent_hws = (const struct clk_hw*[]){
103                         &mmpll0_early.clkr.hw
104                 },
105                 .num_parents = 1,
106                 .ops = &clk_alpha_pll_postdiv_ops,
107                 .flags = CLK_SET_RATE_PARENT,
108         },
109 };
110
111 static struct clk_alpha_pll mmpll1_early = {
112         .offset = 0x30,
113         .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
114         .vco_table = mmpll_p_vco,
115         .num_vco = ARRAY_SIZE(mmpll_p_vco),
116         .clkr = {
117                 .enable_reg = 0x100,
118                 .enable_mask = BIT(1),
119                 .hw.init = &(struct clk_init_data){
120                         .name = "mmpll1_early",
121                         .parent_data = (const struct clk_parent_data[]){
122                                 { .fw_name = "xo", .name = "xo_board" },
123                         },
124                         .num_parents = 1,
125                         .ops = &clk_alpha_pll_ops,
126                 }
127         },
128 };
129
130 static struct clk_alpha_pll_postdiv mmpll1 = {
131         .offset = 0x30,
132         .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
133         .width = 4,
134         .clkr.hw.init = &(struct clk_init_data){
135                 .name = "mmpll1",
136                 .parent_hws = (const struct clk_hw*[]){
137                         &mmpll1_early.clkr.hw
138                 },
139                 .num_parents = 1,
140                 .ops = &clk_alpha_pll_postdiv_ops,
141                 .flags = CLK_SET_RATE_PARENT,
142         },
143 };
144
145 static struct clk_alpha_pll mmpll2_early = {
146         .offset = 0x4100,
147         .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
148         .vco_table = mmpll_gfx_vco,
149         .num_vco = ARRAY_SIZE(mmpll_gfx_vco),
150         .clkr.hw.init = &(struct clk_init_data){
151                 .name = "mmpll2_early",
152                 .parent_data = (const struct clk_parent_data[]){
153                         { .fw_name = "xo", .name = "xo_board" },
154                 },
155                 .num_parents = 1,
156                 .ops = &clk_alpha_pll_ops,
157         },
158 };
159
160 static struct clk_alpha_pll_postdiv mmpll2 = {
161         .offset = 0x4100,
162         .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
163         .width = 4,
164         .clkr.hw.init = &(struct clk_init_data){
165                 .name = "mmpll2",
166                 .parent_hws = (const struct clk_hw*[]){
167                         &mmpll2_early.clkr.hw
168                 },
169                 .num_parents = 1,
170                 .ops = &clk_alpha_pll_postdiv_ops,
171                 .flags = CLK_SET_RATE_PARENT,
172         },
173 };
174
175 static struct clk_alpha_pll mmpll3_early = {
176         .offset = 0x60,
177         .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
178         .vco_table = mmpll_p_vco,
179         .num_vco = ARRAY_SIZE(mmpll_p_vco),
180         .clkr.hw.init = &(struct clk_init_data){
181                 .name = "mmpll3_early",
182                 .parent_data = (const struct clk_parent_data[]){
183                         { .fw_name = "xo", .name = "xo_board" },
184                 },
185                 .num_parents = 1,
186                 .ops = &clk_alpha_pll_ops,
187         },
188 };
189
190 static struct clk_alpha_pll_postdiv mmpll3 = {
191         .offset = 0x60,
192         .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
193         .width = 4,
194         .clkr.hw.init = &(struct clk_init_data){
195                 .name = "mmpll3",
196                 .parent_hws = (const struct clk_hw*[]){
197                         &mmpll3_early.clkr.hw
198                 },
199                 .num_parents = 1,
200                 .ops = &clk_alpha_pll_postdiv_ops,
201                 .flags = CLK_SET_RATE_PARENT,
202         },
203 };
204
205 static struct clk_alpha_pll mmpll4_early = {
206         .offset = 0x90,
207         .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
208         .vco_table = mmpll_t_vco,
209         .num_vco = ARRAY_SIZE(mmpll_t_vco),
210         .clkr.hw.init = &(struct clk_init_data){
211                 .name = "mmpll4_early",
212                 .parent_data = (const struct clk_parent_data[]){
213                         { .fw_name = "xo", .name = "xo_board" },
214                 },
215                 .num_parents = 1,
216                 .ops = &clk_alpha_pll_ops,
217         },
218 };
219
220 static struct clk_alpha_pll_postdiv mmpll4 = {
221         .offset = 0x90,
222         .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
223         .width = 2,
224         .clkr.hw.init = &(struct clk_init_data){
225                 .name = "mmpll4",
226                 .parent_hws = (const struct clk_hw*[]){
227                         &mmpll4_early.clkr.hw
228                 },
229                 .num_parents = 1,
230                 .ops = &clk_alpha_pll_postdiv_ops,
231                 .flags = CLK_SET_RATE_PARENT,
232         },
233 };
234
235 static struct clk_alpha_pll mmpll5_early = {
236         .offset = 0xc0,
237         .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
238         .vco_table = mmpll_p_vco,
239         .num_vco = ARRAY_SIZE(mmpll_p_vco),
240         .clkr.hw.init = &(struct clk_init_data){
241                 .name = "mmpll5_early",
242                 .parent_data = (const struct clk_parent_data[]){
243                         { .fw_name = "xo", .name = "xo_board" },
244                 },
245                 .num_parents = 1,
246                 .ops = &clk_alpha_pll_ops,
247         },
248 };
249
250 static struct clk_alpha_pll_postdiv mmpll5 = {
251         .offset = 0xc0,
252         .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
253         .width = 4,
254         .clkr.hw.init = &(struct clk_init_data){
255                 .name = "mmpll5",
256                 .parent_hws = (const struct clk_hw*[]){
257                         &mmpll5_early.clkr.hw
258                 },
259                 .num_parents = 1,
260                 .ops = &clk_alpha_pll_postdiv_ops,
261                 .flags = CLK_SET_RATE_PARENT,
262         },
263 };
264
265 static struct clk_alpha_pll mmpll8_early = {
266         .offset = 0x4130,
267         .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
268         .vco_table = mmpll_gfx_vco,
269         .num_vco = ARRAY_SIZE(mmpll_gfx_vco),
270         .clkr.hw.init = &(struct clk_init_data){
271                 .name = "mmpll8_early",
272                 .parent_data = (const struct clk_parent_data[]){
273                         { .fw_name = "xo", .name = "xo_board" },
274                 },
275                 .num_parents = 1,
276                 .ops = &clk_alpha_pll_ops,
277         },
278 };
279
280 static struct clk_alpha_pll_postdiv mmpll8 = {
281         .offset = 0x4130,
282         .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
283         .width = 4,
284         .clkr.hw.init = &(struct clk_init_data){
285                 .name = "mmpll8",
286                 .parent_hws = (const struct clk_hw*[]){
287                         &mmpll8_early.clkr.hw
288                 },
289                 .num_parents = 1,
290                 .ops = &clk_alpha_pll_postdiv_ops,
291                 .flags = CLK_SET_RATE_PARENT,
292         },
293 };
294
295 static struct clk_alpha_pll mmpll9_early = {
296         .offset = 0x4200,
297         .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
298         .vco_table = mmpll_t_vco,
299         .num_vco = ARRAY_SIZE(mmpll_t_vco),
300         .clkr.hw.init = &(struct clk_init_data){
301                 .name = "mmpll9_early",
302                 .parent_data = (const struct clk_parent_data[]){
303                         { .fw_name = "xo", .name = "xo_board" },
304                 },
305                 .num_parents = 1,
306                 .ops = &clk_alpha_pll_ops,
307         },
308 };
309
310 static struct clk_alpha_pll_postdiv mmpll9 = {
311         .offset = 0x4200,
312         .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT],
313         .width = 2,
314         .clkr.hw.init = &(struct clk_init_data){
315                 .name = "mmpll9",
316                 .parent_hws = (const struct clk_hw*[]){
317                         &mmpll9_early.clkr.hw
318                 },
319                 .num_parents = 1,
320                 .ops = &clk_alpha_pll_postdiv_ops,
321                 .flags = CLK_SET_RATE_PARENT,
322         },
323 };
324
325 static const struct parent_map mmss_xo_hdmi_map[] = {
326         { P_XO, 0 },
327         { P_HDMIPLL, 1 }
328 };
329
330 static const struct clk_parent_data mmss_xo_hdmi[] = {
331         { .fw_name = "xo", .name = "xo_board" },
332         { .fw_name = "hdmipll", .name = "hdmipll" }
333 };
334
335 static const struct parent_map mmss_xo_dsi0pll_dsi1pll_map[] = {
336         { P_XO, 0 },
337         { P_DSI0PLL, 1 },
338         { P_DSI1PLL, 2 }
339 };
340
341 static const struct clk_parent_data mmss_xo_dsi0pll_dsi1pll[] = {
342         { .fw_name = "xo", .name = "xo_board" },
343         { .fw_name = "dsi0pll", .name = "dsi0pll" },
344         { .fw_name = "dsi1pll", .name = "dsi1pll" }
345 };
346
347 static const struct parent_map mmss_xo_gpll0_gpll0_div_map[] = {
348         { P_XO, 0 },
349         { P_GPLL0, 5 },
350         { P_GPLL0_DIV, 6 }
351 };
352
353 static const struct clk_parent_data mmss_xo_gpll0_gpll0_div[] = {
354         { .fw_name = "xo", .name = "xo_board" },
355         { .fw_name = "gpll0", .name = "gpll0" },
356         { .hw = &gpll0_div.hw }
357 };
358
359 static const struct parent_map mmss_xo_dsibyte_map[] = {
360         { P_XO, 0 },
361         { P_DSI0PLL_BYTE, 1 },
362         { P_DSI1PLL_BYTE, 2 }
363 };
364
365 static const struct clk_parent_data mmss_xo_dsibyte[] = {
366         { .fw_name = "xo", .name = "xo_board" },
367         { .fw_name = "dsi0pllbyte", .name = "dsi0pllbyte" },
368         { .fw_name = "dsi1pllbyte", .name = "dsi1pllbyte" }
369 };
370
371 static const struct parent_map mmss_xo_mmpll0_gpll0_gpll0_div_map[] = {
372         { P_XO, 0 },
373         { P_MMPLL0, 1 },
374         { P_GPLL0, 5 },
375         { P_GPLL0_DIV, 6 }
376 };
377
378 static const struct clk_parent_data mmss_xo_mmpll0_gpll0_gpll0_div[] = {
379         { .fw_name = "xo", .name = "xo_board" },
380         { .hw = &mmpll0.clkr.hw },
381         { .fw_name = "gpll0", .name = "gpll0" },
382         { .hw = &gpll0_div.hw }
383 };
384
385 static const struct parent_map mmss_xo_mmpll0_mmpll1_gpll0_gpll0_div_map[] = {
386         { P_XO, 0 },
387         { P_MMPLL0, 1 },
388         { P_MMPLL1, 2 },
389         { P_GPLL0, 5 },
390         { P_GPLL0_DIV, 6 }
391 };
392
393 static const struct clk_parent_data mmss_xo_mmpll0_mmpll1_gpll0_gpll0_div[] = {
394         { .fw_name = "xo", .name = "xo_board" },
395         { .hw = &mmpll0.clkr.hw },
396         { .hw = &mmpll1.clkr.hw },
397         { .fw_name = "gpll0", .name = "gpll0" },
398         { .hw = &gpll0_div.hw }
399 };
400
401 static const struct parent_map mmss_xo_mmpll0_mmpll3_gpll0_gpll0_div_map[] = {
402         { P_XO, 0 },
403         { P_MMPLL0, 1 },
404         { P_MMPLL3, 3 },
405         { P_GPLL0, 5 },
406         { P_GPLL0_DIV, 6 }
407 };
408
409 static const struct clk_parent_data mmss_xo_mmpll0_mmpll3_gpll0_gpll0_div[] = {
410         { .fw_name = "xo", .name = "xo_board" },
411         { .hw = &mmpll0.clkr.hw },
412         { .hw = &mmpll3.clkr.hw },
413         { .fw_name = "gpll0", .name = "gpll0" },
414         { .hw = &gpll0_div.hw }
415 };
416
417 static const struct parent_map mmss_xo_mmpll0_mmpll5_gpll0_gpll0_div_map[] = {
418         { P_XO, 0 },
419         { P_MMPLL0, 1 },
420         { P_MMPLL5, 2 },
421         { P_GPLL0, 5 },
422         { P_GPLL0_DIV, 6 }
423 };
424
425 static const struct clk_parent_data mmss_xo_mmpll0_mmpll5_gpll0_gpll0_div[] = {
426         { .fw_name = "xo", .name = "xo_board" },
427         { .hw = &mmpll0.clkr.hw },
428         { .hw = &mmpll5.clkr.hw },
429         { .fw_name = "gpll0", .name = "gpll0" },
430         { .hw = &gpll0_div.hw }
431 };
432
433 static const struct parent_map mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div_map[] = {
434         { P_XO, 0 },
435         { P_MMPLL0, 1 },
436         { P_MMPLL4, 3 },
437         { P_GPLL0, 5 },
438         { P_GPLL0_DIV, 6 }
439 };
440
441 static const struct clk_parent_data mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div[] = {
442         { .fw_name = "xo", .name = "xo_board" },
443         { .hw = &mmpll0.clkr.hw },
444         { .hw = &mmpll4.clkr.hw },
445         { .fw_name = "gpll0", .name = "gpll0" },
446         { .hw = &gpll0_div.hw }
447 };
448
449 static const struct parent_map mmss_xo_mmpll0_mmpll9_mmpll2_mmpll8_gpll0_map[] = {
450         { P_XO, 0 },
451         { P_MMPLL0, 1 },
452         { P_MMPLL9, 2 },
453         { P_MMPLL2, 3 },
454         { P_MMPLL8, 4 },
455         { P_GPLL0, 5 }
456 };
457
458 static const struct clk_parent_data mmss_xo_mmpll0_mmpll9_mmpll2_mmpll8_gpll0[] = {
459         { .fw_name = "xo", .name = "xo_board" },
460         { .hw = &mmpll0.clkr.hw },
461         { .hw = &mmpll9.clkr.hw },
462         { .hw = &mmpll2.clkr.hw },
463         { .hw = &mmpll8.clkr.hw },
464         { .fw_name = "gpll0", .name = "gpll0" },
465 };
466
467 static const struct parent_map mmss_xo_mmpll0_mmpll9_mmpll2_mmpll8_gpll0_gpll0_div_map[] = {
468         { P_XO, 0 },
469         { P_MMPLL0, 1 },
470         { P_MMPLL9, 2 },
471         { P_MMPLL2, 3 },
472         { P_MMPLL8, 4 },
473         { P_GPLL0, 5 },
474         { P_GPLL0_DIV, 6 }
475 };
476
477 static const struct clk_parent_data mmss_xo_mmpll0_mmpll9_mmpll2_mmpll8_gpll0_gpll0_div[] = {
478         { .fw_name = "xo", .name = "xo_board" },
479         { .hw = &mmpll0.clkr.hw },
480         { .hw = &mmpll9.clkr.hw },
481         { .hw = &mmpll2.clkr.hw },
482         { .hw = &mmpll8.clkr.hw },
483         { .fw_name = "gpll0", .name = "gpll0" },
484         { .hw = &gpll0_div.hw }
485 };
486
487 static const struct parent_map mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div_map[] = {
488         { P_XO, 0 },
489         { P_MMPLL0, 1 },
490         { P_MMPLL1, 2 },
491         { P_MMPLL4, 3 },
492         { P_MMPLL3, 4 },
493         { P_GPLL0, 5 },
494         { P_GPLL0_DIV, 6 }
495 };
496
497 static const struct clk_parent_data mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div[] = {
498         { .fw_name = "xo", .name = "xo_board" },
499         { .hw = &mmpll0.clkr.hw },
500         { .hw = &mmpll1.clkr.hw },
501         { .hw = &mmpll4.clkr.hw },
502         { .hw = &mmpll3.clkr.hw },
503         { .fw_name = "gpll0", .name = "gpll0" },
504         { .hw = &gpll0_div.hw }
505 };
506
507 static const struct freq_tbl ftbl_ahb_clk_src[] = {
508         F(19200000, P_XO, 1, 0, 0),
509         F(40000000, P_GPLL0_DIV, 7.5, 0, 0),
510         F(80000000, P_MMPLL0, 10, 0, 0),
511         { }
512 };
513
514 static struct clk_rcg2 ahb_clk_src = {
515         .cmd_rcgr = 0x5000,
516         .hid_width = 5,
517         .parent_map = mmss_xo_mmpll0_gpll0_gpll0_div_map,
518         .freq_tbl = ftbl_ahb_clk_src,
519         .clkr.hw.init = &(struct clk_init_data){
520                 .name = "ahb_clk_src",
521                 .parent_data = mmss_xo_mmpll0_gpll0_gpll0_div,
522                 .num_parents = ARRAY_SIZE(mmss_xo_mmpll0_gpll0_gpll0_div),
523                 .ops = &clk_rcg2_ops,
524         },
525 };
526
527 static const struct freq_tbl ftbl_axi_clk_src[] = {
528         F(19200000, P_XO, 1, 0, 0),
529         F(75000000, P_GPLL0_DIV, 4, 0, 0),
530         F(100000000, P_GPLL0, 6, 0, 0),
531         F(171430000, P_GPLL0, 3.5, 0, 0),
532         F(200000000, P_GPLL0, 3, 0, 0),
533         F(320000000, P_MMPLL0, 2.5, 0, 0),
534         F(400000000, P_MMPLL0, 2, 0, 0),
535         { }
536 };
537
538 static struct clk_rcg2 axi_clk_src = {
539         .cmd_rcgr = 0x5040,
540         .hid_width = 5,
541         .parent_map = mmss_xo_mmpll0_mmpll1_gpll0_gpll0_div_map,
542         .freq_tbl = ftbl_axi_clk_src,
543         .clkr.hw.init = &(struct clk_init_data){
544                 .name = "axi_clk_src",
545                 .parent_data = mmss_xo_mmpll0_mmpll1_gpll0_gpll0_div,
546                 .num_parents = ARRAY_SIZE(mmss_xo_mmpll0_mmpll1_gpll0_gpll0_div),
547                 .ops = &clk_rcg2_ops,
548         },
549 };
550
551 static struct clk_rcg2 maxi_clk_src = {
552         .cmd_rcgr = 0x5090,
553         .hid_width = 5,
554         .parent_map = mmss_xo_mmpll0_mmpll1_gpll0_gpll0_div_map,
555         .freq_tbl = ftbl_axi_clk_src,
556         .clkr.hw.init = &(struct clk_init_data){
557                 .name = "maxi_clk_src",
558                 .parent_data = mmss_xo_mmpll0_mmpll1_gpll0_gpll0_div,
559                 .num_parents = ARRAY_SIZE(mmss_xo_mmpll0_mmpll1_gpll0_gpll0_div),
560                 .ops = &clk_rcg2_ops,
561         },
562 };
563
564 static struct clk_rcg2_gfx3d gfx3d_clk_src = {
565         .rcg = {
566                 .cmd_rcgr = 0x4000,
567                 .hid_width = 5,
568                 .parent_map = mmss_xo_mmpll0_mmpll9_mmpll2_mmpll8_gpll0_map,
569                 .clkr.hw.init = &(struct clk_init_data){
570                         .name = "gfx3d_clk_src",
571                         .parent_data = mmss_xo_mmpll0_mmpll9_mmpll2_mmpll8_gpll0,
572                         .num_parents = ARRAY_SIZE(mmss_xo_mmpll0_mmpll9_mmpll2_mmpll8_gpll0),
573                         .ops = &clk_gfx3d_ops,
574                         .flags = CLK_SET_RATE_PARENT,
575                 },
576         },
577         .hws = (struct clk_hw*[]) {
578                 &mmpll9.clkr.hw,
579                 &mmpll2.clkr.hw,
580                 &mmpll8.clkr.hw
581         },
582 };
583
584 static const struct freq_tbl ftbl_rbbmtimer_clk_src[] = {
585         F(19200000, P_XO, 1, 0, 0),
586         { }
587 };
588
589 static struct clk_rcg2 rbbmtimer_clk_src = {
590         .cmd_rcgr = 0x4090,
591         .hid_width = 5,
592         .parent_map = mmss_xo_mmpll0_gpll0_gpll0_div_map,
593         .freq_tbl = ftbl_rbbmtimer_clk_src,
594         .clkr.hw.init = &(struct clk_init_data){
595                 .name = "rbbmtimer_clk_src",
596                 .parent_data = mmss_xo_mmpll0_gpll0_gpll0_div,
597                 .num_parents = ARRAY_SIZE(mmss_xo_mmpll0_gpll0_gpll0_div),
598                 .ops = &clk_rcg2_ops,
599         },
600 };
601
602 static struct clk_rcg2 isense_clk_src = {
603         .cmd_rcgr = 0x4010,
604         .hid_width = 5,
605         .parent_map = mmss_xo_mmpll0_mmpll9_mmpll2_mmpll8_gpll0_gpll0_div_map,
606         .clkr.hw.init = &(struct clk_init_data){
607                 .name = "isense_clk_src",
608                 .parent_data = mmss_xo_mmpll0_mmpll9_mmpll2_mmpll8_gpll0_gpll0_div,
609                 .num_parents = ARRAY_SIZE(mmss_xo_mmpll0_mmpll9_mmpll2_mmpll8_gpll0_gpll0_div),
610                 .ops = &clk_rcg2_ops,
611         },
612 };
613
614 static const struct freq_tbl ftbl_rbcpr_clk_src[] = {
615         F(19200000, P_XO, 1, 0, 0),
616         F(50000000, P_GPLL0, 12, 0, 0),
617         { }
618 };
619
620 static struct clk_rcg2 rbcpr_clk_src = {
621         .cmd_rcgr = 0x4060,
622         .hid_width = 5,
623         .parent_map = mmss_xo_mmpll0_gpll0_gpll0_div_map,
624         .freq_tbl = ftbl_rbcpr_clk_src,
625         .clkr.hw.init = &(struct clk_init_data){
626                 .name = "rbcpr_clk_src",
627                 .parent_data = mmss_xo_mmpll0_gpll0_gpll0_div,
628                 .num_parents = ARRAY_SIZE(mmss_xo_mmpll0_gpll0_gpll0_div),
629                 .ops = &clk_rcg2_ops,
630         },
631 };
632
633 static const struct freq_tbl ftbl_video_core_clk_src[] = {
634         F(75000000, P_GPLL0_DIV, 4, 0, 0),
635         F(150000000, P_GPLL0, 4, 0, 0),
636         F(346666667, P_MMPLL3, 3, 0, 0),
637         F(520000000, P_MMPLL3, 2, 0, 0),
638         { }
639 };
640
641 static struct clk_rcg2 video_core_clk_src = {
642         .cmd_rcgr = 0x1000,
643         .mnd_width = 8,
644         .hid_width = 5,
645         .parent_map = mmss_xo_mmpll0_mmpll3_gpll0_gpll0_div_map,
646         .freq_tbl = ftbl_video_core_clk_src,
647         .clkr.hw.init = &(struct clk_init_data){
648                 .name = "video_core_clk_src",
649                 .parent_data = mmss_xo_mmpll0_mmpll3_gpll0_gpll0_div,
650                 .num_parents = ARRAY_SIZE(mmss_xo_mmpll0_mmpll3_gpll0_gpll0_div),
651                 .ops = &clk_rcg2_ops,
652         },
653 };
654
655 static struct clk_rcg2 video_subcore0_clk_src = {
656         .cmd_rcgr = 0x1060,
657         .mnd_width = 8,
658         .hid_width = 5,
659         .parent_map = mmss_xo_mmpll0_mmpll3_gpll0_gpll0_div_map,
660         .freq_tbl = ftbl_video_core_clk_src,
661         .clkr.hw.init = &(struct clk_init_data){
662                 .name = "video_subcore0_clk_src",
663                 .parent_data = mmss_xo_mmpll0_mmpll3_gpll0_gpll0_div,
664                 .num_parents = ARRAY_SIZE(mmss_xo_mmpll0_mmpll3_gpll0_gpll0_div),
665                 .ops = &clk_rcg2_ops,
666         },
667 };
668
669 static struct clk_rcg2 video_subcore1_clk_src = {
670         .cmd_rcgr = 0x1080,
671         .mnd_width = 8,
672         .hid_width = 5,
673         .parent_map = mmss_xo_mmpll0_mmpll3_gpll0_gpll0_div_map,
674         .freq_tbl = ftbl_video_core_clk_src,
675         .clkr.hw.init = &(struct clk_init_data){
676                 .name = "video_subcore1_clk_src",
677                 .parent_data = mmss_xo_mmpll0_mmpll3_gpll0_gpll0_div,
678                 .num_parents = ARRAY_SIZE(mmss_xo_mmpll0_mmpll3_gpll0_gpll0_div),
679                 .ops = &clk_rcg2_ops,
680         },
681 };
682
683 static struct clk_rcg2 pclk0_clk_src = {
684         .cmd_rcgr = 0x2000,
685         .mnd_width = 8,
686         .hid_width = 5,
687         .parent_map = mmss_xo_dsi0pll_dsi1pll_map,
688         .clkr.hw.init = &(struct clk_init_data){
689                 .name = "pclk0_clk_src",
690                 .parent_data = mmss_xo_dsi0pll_dsi1pll,
691                 .num_parents = ARRAY_SIZE(mmss_xo_dsi0pll_dsi1pll),
692                 .ops = &clk_pixel_ops,
693                 .flags = CLK_SET_RATE_PARENT,
694         },
695 };
696
697 static struct clk_rcg2 pclk1_clk_src = {
698         .cmd_rcgr = 0x2020,
699         .mnd_width = 8,
700         .hid_width = 5,
701         .parent_map = mmss_xo_dsi0pll_dsi1pll_map,
702         .clkr.hw.init = &(struct clk_init_data){
703                 .name = "pclk1_clk_src",
704                 .parent_data = mmss_xo_dsi0pll_dsi1pll,
705                 .num_parents = ARRAY_SIZE(mmss_xo_dsi0pll_dsi1pll),
706                 .ops = &clk_pixel_ops,
707                 .flags = CLK_SET_RATE_PARENT,
708         },
709 };
710
711 static const struct freq_tbl ftbl_mdp_clk_src[] = {
712         F(85714286, P_GPLL0, 7, 0, 0),
713         F(100000000, P_GPLL0, 6, 0, 0),
714         F(150000000, P_GPLL0, 4, 0, 0),
715         F(171428571, P_GPLL0, 3.5, 0, 0),
716         F(200000000, P_GPLL0, 3, 0, 0),
717         F(275000000, P_MMPLL5, 3, 0, 0),
718         F(300000000, P_GPLL0, 2, 0, 0),
719         F(330000000, P_MMPLL5, 2.5, 0, 0),
720         F(412500000, P_MMPLL5, 2, 0, 0),
721         { }
722 };
723
724 static struct clk_rcg2 mdp_clk_src = {
725         .cmd_rcgr = 0x2040,
726         .hid_width = 5,
727         .parent_map = mmss_xo_mmpll0_mmpll5_gpll0_gpll0_div_map,
728         .freq_tbl = ftbl_mdp_clk_src,
729         .clkr.hw.init = &(struct clk_init_data){
730                 .name = "mdp_clk_src",
731                 .parent_data = mmss_xo_mmpll0_mmpll5_gpll0_gpll0_div,
732                 .num_parents = ARRAY_SIZE(mmss_xo_mmpll0_mmpll5_gpll0_gpll0_div),
733                 .ops = &clk_rcg2_ops,
734         },
735 };
736
737 static struct freq_tbl extpclk_freq_tbl[] = {
738         { .src = P_HDMIPLL },
739         { }
740 };
741
742 static struct clk_rcg2 extpclk_clk_src = {
743         .cmd_rcgr = 0x2060,
744         .hid_width = 5,
745         .parent_map = mmss_xo_hdmi_map,
746         .freq_tbl = extpclk_freq_tbl,
747         .clkr.hw.init = &(struct clk_init_data){
748                 .name = "extpclk_clk_src",
749                 .parent_data = mmss_xo_hdmi,
750                 .num_parents = ARRAY_SIZE(mmss_xo_hdmi),
751                 .ops = &clk_byte_ops,
752                 .flags = CLK_SET_RATE_PARENT,
753         },
754 };
755
756 static struct freq_tbl ftbl_mdss_vsync_clk[] = {
757         F(19200000, P_XO, 1, 0, 0),
758         { }
759 };
760
761 static struct clk_rcg2 vsync_clk_src = {
762         .cmd_rcgr = 0x2080,
763         .hid_width = 5,
764         .parent_map = mmss_xo_gpll0_gpll0_div_map,
765         .freq_tbl = ftbl_mdss_vsync_clk,
766         .clkr.hw.init = &(struct clk_init_data){
767                 .name = "vsync_clk_src",
768                 .parent_data = mmss_xo_gpll0_gpll0_div,
769                 .num_parents = ARRAY_SIZE(mmss_xo_gpll0_gpll0_div),
770                 .ops = &clk_rcg2_ops,
771         },
772 };
773
774 static struct freq_tbl ftbl_mdss_hdmi_clk[] = {
775         F(19200000, P_XO, 1, 0, 0),
776         { }
777 };
778
779 static struct clk_rcg2 hdmi_clk_src = {
780         .cmd_rcgr = 0x2100,
781         .hid_width = 5,
782         .parent_map = mmss_xo_gpll0_gpll0_div_map,
783         .freq_tbl = ftbl_mdss_hdmi_clk,
784         .clkr.hw.init = &(struct clk_init_data){
785                 .name = "hdmi_clk_src",
786                 .parent_data = mmss_xo_gpll0_gpll0_div,
787                 .num_parents = ARRAY_SIZE(mmss_xo_gpll0_gpll0_div),
788                 .ops = &clk_rcg2_ops,
789         },
790 };
791
792 static struct clk_rcg2 byte0_clk_src = {
793         .cmd_rcgr = 0x2120,
794         .hid_width = 5,
795         .parent_map = mmss_xo_dsibyte_map,
796         .clkr.hw.init = &(struct clk_init_data){
797                 .name = "byte0_clk_src",
798                 .parent_data = mmss_xo_dsibyte,
799                 .num_parents = ARRAY_SIZE(mmss_xo_dsibyte),
800                 .ops = &clk_byte2_ops,
801                 .flags = CLK_SET_RATE_PARENT,
802         },
803 };
804
805 static struct clk_rcg2 byte1_clk_src = {
806         .cmd_rcgr = 0x2140,
807         .hid_width = 5,
808         .parent_map = mmss_xo_dsibyte_map,
809         .clkr.hw.init = &(struct clk_init_data){
810                 .name = "byte1_clk_src",
811                 .parent_data = mmss_xo_dsibyte,
812                 .num_parents = ARRAY_SIZE(mmss_xo_dsibyte),
813                 .ops = &clk_byte2_ops,
814                 .flags = CLK_SET_RATE_PARENT,
815         },
816 };
817
818 static struct freq_tbl ftbl_mdss_esc0_1_clk[] = {
819         F(19200000, P_XO, 1, 0, 0),
820         { }
821 };
822
823 static struct clk_rcg2 esc0_clk_src = {
824         .cmd_rcgr = 0x2160,
825         .hid_width = 5,
826         .parent_map = mmss_xo_dsibyte_map,
827         .freq_tbl = ftbl_mdss_esc0_1_clk,
828         .clkr.hw.init = &(struct clk_init_data){
829                 .name = "esc0_clk_src",
830                 .parent_data = mmss_xo_dsibyte,
831                 .num_parents = ARRAY_SIZE(mmss_xo_dsibyte),
832                 .ops = &clk_rcg2_ops,
833         },
834 };
835
836 static struct clk_rcg2 esc1_clk_src = {
837         .cmd_rcgr = 0x2180,
838         .hid_width = 5,
839         .parent_map = mmss_xo_dsibyte_map,
840         .freq_tbl = ftbl_mdss_esc0_1_clk,
841         .clkr.hw.init = &(struct clk_init_data){
842                 .name = "esc1_clk_src",
843                 .parent_data = mmss_xo_dsibyte,
844                 .num_parents = ARRAY_SIZE(mmss_xo_dsibyte),
845                 .ops = &clk_rcg2_ops,
846         },
847 };
848
849 static const struct freq_tbl ftbl_camss_gp0_clk_src[] = {
850         F(10000, P_XO, 16, 1, 120),
851         F(24000, P_XO, 16, 1, 50),
852         F(6000000, P_GPLL0_DIV, 10, 1, 5),
853         F(12000000, P_GPLL0_DIV, 1, 1, 25),
854         F(13000000, P_GPLL0_DIV, 2, 13, 150),
855         F(24000000, P_GPLL0_DIV, 1, 2, 25),
856         { }
857 };
858
859 static struct clk_rcg2 camss_gp0_clk_src = {
860         .cmd_rcgr = 0x3420,
861         .mnd_width = 8,
862         .hid_width = 5,
863         .parent_map = mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div_map,
864         .freq_tbl = ftbl_camss_gp0_clk_src,
865         .clkr.hw.init = &(struct clk_init_data){
866                 .name = "camss_gp0_clk_src",
867                 .parent_data = mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div,
868                 .num_parents = ARRAY_SIZE(mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div),
869                 .ops = &clk_rcg2_ops,
870         },
871 };
872
873 static struct clk_rcg2 camss_gp1_clk_src = {
874         .cmd_rcgr = 0x3450,
875         .mnd_width = 8,
876         .hid_width = 5,
877         .parent_map = mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div_map,
878         .freq_tbl = ftbl_camss_gp0_clk_src,
879         .clkr.hw.init = &(struct clk_init_data){
880                 .name = "camss_gp1_clk_src",
881                 .parent_data = mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div,
882                 .num_parents = ARRAY_SIZE(mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div),
883                 .ops = &clk_rcg2_ops,
884         },
885 };
886
887 static const struct freq_tbl ftbl_mclk0_clk_src[] = {
888         F(4800000, P_XO, 4, 0, 0),
889         F(6000000, P_GPLL0_DIV, 10, 1, 5),
890         F(8000000, P_GPLL0_DIV, 1, 2, 75),
891         F(9600000, P_XO, 2, 0, 0),
892         F(16666667, P_GPLL0_DIV, 2, 1, 9),
893         F(19200000, P_XO, 1, 0, 0),
894         F(24000000, P_GPLL0_DIV, 1, 2, 25),
895         F(33333333, P_GPLL0_DIV, 1, 1, 9),
896         F(48000000, P_GPLL0, 1, 2, 25),
897         F(66666667, P_GPLL0, 1, 1, 9),
898         { }
899 };
900
901 static struct clk_rcg2 mclk0_clk_src = {
902         .cmd_rcgr = 0x3360,
903         .mnd_width = 8,
904         .hid_width = 5,
905         .parent_map = mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div_map,
906         .freq_tbl = ftbl_mclk0_clk_src,
907         .clkr.hw.init = &(struct clk_init_data){
908                 .name = "mclk0_clk_src",
909                 .parent_data = mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div,
910                 .num_parents = ARRAY_SIZE(mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div),
911                 .ops = &clk_rcg2_ops,
912         },
913 };
914
915 static struct clk_rcg2 mclk1_clk_src = {
916         .cmd_rcgr = 0x3390,
917         .mnd_width = 8,
918         .hid_width = 5,
919         .parent_map = mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div_map,
920         .freq_tbl = ftbl_mclk0_clk_src,
921         .clkr.hw.init = &(struct clk_init_data){
922                 .name = "mclk1_clk_src",
923                 .parent_data = mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div,
924                 .num_parents = ARRAY_SIZE(mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div),
925                 .ops = &clk_rcg2_ops,
926         },
927 };
928
929 static struct clk_rcg2 mclk2_clk_src = {
930         .cmd_rcgr = 0x33c0,
931         .mnd_width = 8,
932         .hid_width = 5,
933         .parent_map = mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div_map,
934         .freq_tbl = ftbl_mclk0_clk_src,
935         .clkr.hw.init = &(struct clk_init_data){
936                 .name = "mclk2_clk_src",
937                 .parent_data = mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div,
938                 .num_parents = ARRAY_SIZE(mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div),
939                 .ops = &clk_rcg2_ops,
940         },
941 };
942
943 static struct clk_rcg2 mclk3_clk_src = {
944         .cmd_rcgr = 0x33f0,
945         .mnd_width = 8,
946         .hid_width = 5,
947         .parent_map = mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div_map,
948         .freq_tbl = ftbl_mclk0_clk_src,
949         .clkr.hw.init = &(struct clk_init_data){
950                 .name = "mclk3_clk_src",
951                 .parent_data = mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div,
952                 .num_parents = ARRAY_SIZE(mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div),
953                 .ops = &clk_rcg2_ops,
954         },
955 };
956
957 static const struct freq_tbl ftbl_cci_clk_src[] = {
958         F(19200000, P_XO, 1, 0, 0),
959         F(37500000, P_GPLL0, 16, 0, 0),
960         F(50000000, P_GPLL0, 12, 0, 0),
961         F(100000000, P_GPLL0, 6, 0, 0),
962         { }
963 };
964
965 static struct clk_rcg2 cci_clk_src = {
966         .cmd_rcgr = 0x3300,
967         .mnd_width = 8,
968         .hid_width = 5,
969         .parent_map = mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div_map,
970         .freq_tbl = ftbl_cci_clk_src,
971         .clkr.hw.init = &(struct clk_init_data){
972                 .name = "cci_clk_src",
973                 .parent_data = mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div,
974                 .num_parents = ARRAY_SIZE(mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div),
975                 .ops = &clk_rcg2_ops,
976         },
977 };
978
979 static const struct freq_tbl ftbl_csi0phytimer_clk_src[] = {
980         F(100000000, P_GPLL0_DIV, 3, 0, 0),
981         F(200000000, P_GPLL0, 3, 0, 0),
982         F(266666667, P_MMPLL0, 3, 0, 0),
983         { }
984 };
985
986 static struct clk_rcg2 csi0phytimer_clk_src = {
987         .cmd_rcgr = 0x3000,
988         .hid_width = 5,
989         .parent_map = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div_map,
990         .freq_tbl = ftbl_csi0phytimer_clk_src,
991         .clkr.hw.init = &(struct clk_init_data){
992                 .name = "csi0phytimer_clk_src",
993                 .parent_data = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div,
994                 .num_parents = ARRAY_SIZE(mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div),
995                 .ops = &clk_rcg2_ops,
996         },
997 };
998
999 static struct clk_rcg2 csi1phytimer_clk_src = {
1000         .cmd_rcgr = 0x3030,
1001         .hid_width = 5,
1002         .parent_map = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div_map,
1003         .freq_tbl = ftbl_csi0phytimer_clk_src,
1004         .clkr.hw.init = &(struct clk_init_data){
1005                 .name = "csi1phytimer_clk_src",
1006                 .parent_data = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div,
1007                 .num_parents = ARRAY_SIZE(mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div),
1008                 .ops = &clk_rcg2_ops,
1009         },
1010 };
1011
1012 static struct clk_rcg2 csi2phytimer_clk_src = {
1013         .cmd_rcgr = 0x3060,
1014         .hid_width = 5,
1015         .parent_map = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div_map,
1016         .freq_tbl = ftbl_csi0phytimer_clk_src,
1017         .clkr.hw.init = &(struct clk_init_data){
1018                 .name = "csi2phytimer_clk_src",
1019                 .parent_data = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div,
1020                 .num_parents = ARRAY_SIZE(mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div),
1021                 .ops = &clk_rcg2_ops,
1022         },
1023 };
1024
1025 static const struct freq_tbl ftbl_csiphy0_3p_clk_src[] = {
1026         F(100000000, P_GPLL0_DIV, 3, 0, 0),
1027         F(200000000, P_GPLL0, 3, 0, 0),
1028         F(320000000, P_MMPLL4, 3, 0, 0),
1029         F(384000000, P_MMPLL4, 2.5, 0, 0),
1030         { }
1031 };
1032
1033 static struct clk_rcg2 csiphy0_3p_clk_src = {
1034         .cmd_rcgr = 0x3240,
1035         .hid_width = 5,
1036         .parent_map = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div_map,
1037         .freq_tbl = ftbl_csiphy0_3p_clk_src,
1038         .clkr.hw.init = &(struct clk_init_data){
1039                 .name = "csiphy0_3p_clk_src",
1040                 .parent_data = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div,
1041                 .num_parents = ARRAY_SIZE(mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div),
1042                 .ops = &clk_rcg2_ops,
1043         },
1044 };
1045
1046 static struct clk_rcg2 csiphy1_3p_clk_src = {
1047         .cmd_rcgr = 0x3260,
1048         .hid_width = 5,
1049         .parent_map = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div_map,
1050         .freq_tbl = ftbl_csiphy0_3p_clk_src,
1051         .clkr.hw.init = &(struct clk_init_data){
1052                 .name = "csiphy1_3p_clk_src",
1053                 .parent_data = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div,
1054                 .num_parents = ARRAY_SIZE(mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div),
1055                 .ops = &clk_rcg2_ops,
1056         },
1057 };
1058
1059 static struct clk_rcg2 csiphy2_3p_clk_src = {
1060         .cmd_rcgr = 0x3280,
1061         .hid_width = 5,
1062         .parent_map = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div_map,
1063         .freq_tbl = ftbl_csiphy0_3p_clk_src,
1064         .clkr.hw.init = &(struct clk_init_data){
1065                 .name = "csiphy2_3p_clk_src",
1066                 .parent_data = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div,
1067                 .num_parents = ARRAY_SIZE(mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div),
1068                 .ops = &clk_rcg2_ops,
1069         },
1070 };
1071
1072 static const struct freq_tbl ftbl_jpeg0_clk_src[] = {
1073         F(75000000, P_GPLL0_DIV, 4, 0, 0),
1074         F(150000000, P_GPLL0, 4, 0, 0),
1075         F(228571429, P_MMPLL0, 3.5, 0, 0),
1076         F(266666667, P_MMPLL0, 3, 0, 0),
1077         F(320000000, P_MMPLL0, 2.5, 0, 0),
1078         F(480000000, P_MMPLL4, 2, 0, 0),
1079         { }
1080 };
1081
1082 static struct clk_rcg2 jpeg0_clk_src = {
1083         .cmd_rcgr = 0x3500,
1084         .hid_width = 5,
1085         .parent_map = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div_map,
1086         .freq_tbl = ftbl_jpeg0_clk_src,
1087         .clkr.hw.init = &(struct clk_init_data){
1088                 .name = "jpeg0_clk_src",
1089                 .parent_data = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div,
1090                 .num_parents = ARRAY_SIZE(mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div),
1091                 .ops = &clk_rcg2_ops,
1092         },
1093 };
1094
1095 static const struct freq_tbl ftbl_jpeg2_clk_src[] = {
1096         F(75000000, P_GPLL0_DIV, 4, 0, 0),
1097         F(150000000, P_GPLL0, 4, 0, 0),
1098         F(228571429, P_MMPLL0, 3.5, 0, 0),
1099         F(266666667, P_MMPLL0, 3, 0, 0),
1100         F(320000000, P_MMPLL0, 2.5, 0, 0),
1101         { }
1102 };
1103
1104 static struct clk_rcg2 jpeg2_clk_src = {
1105         .cmd_rcgr = 0x3540,
1106         .hid_width = 5,
1107         .parent_map = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div_map,
1108         .freq_tbl = ftbl_jpeg2_clk_src,
1109         .clkr.hw.init = &(struct clk_init_data){
1110                 .name = "jpeg2_clk_src",
1111                 .parent_data = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div,
1112                 .num_parents = ARRAY_SIZE(mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div),
1113                 .ops = &clk_rcg2_ops,
1114         },
1115 };
1116
1117 static struct clk_rcg2 jpeg_dma_clk_src = {
1118         .cmd_rcgr = 0x3560,
1119         .hid_width = 5,
1120         .parent_map = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div_map,
1121         .freq_tbl = ftbl_jpeg0_clk_src,
1122         .clkr.hw.init = &(struct clk_init_data){
1123                 .name = "jpeg_dma_clk_src",
1124                 .parent_data = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div,
1125                 .num_parents = ARRAY_SIZE(mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div),
1126                 .ops = &clk_rcg2_ops,
1127         },
1128 };
1129
1130 static const struct freq_tbl ftbl_vfe0_clk_src[] = {
1131         F(75000000, P_GPLL0_DIV, 4, 0, 0),
1132         F(100000000, P_GPLL0_DIV, 3, 0, 0),
1133         F(300000000, P_GPLL0, 2, 0, 0),
1134         F(320000000, P_MMPLL0, 2.5, 0, 0),
1135         F(480000000, P_MMPLL4, 2, 0, 0),
1136         F(600000000, P_GPLL0, 1, 0, 0),
1137         { }
1138 };
1139
1140 static struct clk_rcg2 vfe0_clk_src = {
1141         .cmd_rcgr = 0x3600,
1142         .hid_width = 5,
1143         .parent_map = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div_map,
1144         .freq_tbl = ftbl_vfe0_clk_src,
1145         .clkr.hw.init = &(struct clk_init_data){
1146                 .name = "vfe0_clk_src",
1147                 .parent_data = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div,
1148                 .num_parents = ARRAY_SIZE(mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div),
1149                 .ops = &clk_rcg2_ops,
1150         },
1151 };
1152
1153 static struct clk_rcg2 vfe1_clk_src = {
1154         .cmd_rcgr = 0x3620,
1155         .hid_width = 5,
1156         .parent_map = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div_map,
1157         .freq_tbl = ftbl_vfe0_clk_src,
1158         .clkr.hw.init = &(struct clk_init_data){
1159                 .name = "vfe1_clk_src",
1160                 .parent_data = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div,
1161                 .num_parents = ARRAY_SIZE(mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div),
1162                 .ops = &clk_rcg2_ops,
1163         },
1164 };
1165
1166 static const struct freq_tbl ftbl_cpp_clk_src[] = {
1167         F(100000000, P_GPLL0_DIV, 3, 0, 0),
1168         F(200000000, P_GPLL0, 3, 0, 0),
1169         F(320000000, P_MMPLL0, 2.5, 0, 0),
1170         F(480000000, P_MMPLL4, 2, 0, 0),
1171         F(640000000, P_MMPLL4, 1.5, 0, 0),
1172         { }
1173 };
1174
1175 static struct clk_rcg2 cpp_clk_src = {
1176         .cmd_rcgr = 0x3640,
1177         .hid_width = 5,
1178         .parent_map = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div_map,
1179         .freq_tbl = ftbl_cpp_clk_src,
1180         .clkr.hw.init = &(struct clk_init_data){
1181                 .name = "cpp_clk_src",
1182                 .parent_data = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div,
1183                 .num_parents = ARRAY_SIZE(mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div),
1184                 .ops = &clk_rcg2_ops,
1185         },
1186 };
1187
1188 static const struct freq_tbl ftbl_csi0_clk_src[] = {
1189         F(100000000, P_GPLL0_DIV, 3, 0, 0),
1190         F(200000000, P_GPLL0, 3, 0, 0),
1191         F(266666667, P_MMPLL0, 3, 0, 0),
1192         F(480000000, P_MMPLL4, 2, 0, 0),
1193         F(600000000, P_GPLL0, 1, 0, 0),
1194         { }
1195 };
1196
1197 static struct clk_rcg2 csi0_clk_src = {
1198         .cmd_rcgr = 0x3090,
1199         .hid_width = 5,
1200         .parent_map = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div_map,
1201         .freq_tbl = ftbl_csi0_clk_src,
1202         .clkr.hw.init = &(struct clk_init_data){
1203                 .name = "csi0_clk_src",
1204                 .parent_data = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div,
1205                 .num_parents = ARRAY_SIZE(mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div),
1206                 .ops = &clk_rcg2_ops,
1207         },
1208 };
1209
1210 static struct clk_rcg2 csi1_clk_src = {
1211         .cmd_rcgr = 0x3100,
1212         .hid_width = 5,
1213         .parent_map = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div_map,
1214         .freq_tbl = ftbl_csi0_clk_src,
1215         .clkr.hw.init = &(struct clk_init_data){
1216                 .name = "csi1_clk_src",
1217                 .parent_data = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div,
1218                 .num_parents = ARRAY_SIZE(mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div),
1219                 .ops = &clk_rcg2_ops,
1220         },
1221 };
1222
1223 static struct clk_rcg2 csi2_clk_src = {
1224         .cmd_rcgr = 0x3160,
1225         .hid_width = 5,
1226         .parent_map = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div_map,
1227         .freq_tbl = ftbl_csi0_clk_src,
1228         .clkr.hw.init = &(struct clk_init_data){
1229                 .name = "csi2_clk_src",
1230                 .parent_data = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div,
1231                 .num_parents = ARRAY_SIZE(mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div),
1232                 .ops = &clk_rcg2_ops,
1233         },
1234 };
1235
1236 static struct clk_rcg2 csi3_clk_src = {
1237         .cmd_rcgr = 0x31c0,
1238         .hid_width = 5,
1239         .parent_map = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div_map,
1240         .freq_tbl = ftbl_csi0_clk_src,
1241         .clkr.hw.init = &(struct clk_init_data){
1242                 .name = "csi3_clk_src",
1243                 .parent_data = mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div,
1244                 .num_parents = ARRAY_SIZE(mmss_xo_mmpll0_mmpll1_mmpll4_mmpll3_gpll0_gpll0_div),
1245                 .ops = &clk_rcg2_ops,
1246         },
1247 };
1248
1249 static const struct freq_tbl ftbl_fd_core_clk_src[] = {
1250         F(100000000, P_GPLL0_DIV, 3, 0, 0),
1251         F(200000000, P_GPLL0, 3, 0, 0),
1252         F(400000000, P_MMPLL0, 2, 0, 0),
1253         { }
1254 };
1255
1256 static struct clk_rcg2 fd_core_clk_src = {
1257         .cmd_rcgr = 0x3b00,
1258         .hid_width = 5,
1259         .parent_map = mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div_map,
1260         .freq_tbl = ftbl_fd_core_clk_src,
1261         .clkr.hw.init = &(struct clk_init_data){
1262                 .name = "fd_core_clk_src",
1263                 .parent_data = mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div,
1264                 .num_parents = ARRAY_SIZE(mmss_xo_mmpll0_mmpll4_gpll0_gpll0_div),
1265                 .ops = &clk_rcg2_ops,
1266         },
1267 };
1268
1269 static struct clk_branch mmss_mmagic_ahb_clk = {
1270         .halt_reg = 0x5024,
1271         .clkr = {
1272                 .enable_reg = 0x5024,
1273                 .enable_mask = BIT(0),
1274                 .hw.init = &(struct clk_init_data){
1275                         .name = "mmss_mmagic_ahb_clk",
1276                         .parent_hws = (const struct clk_hw*[]){
1277                                 &ahb_clk_src.clkr.hw
1278                         },
1279                         .num_parents = 1,
1280                         .flags = CLK_SET_RATE_PARENT | CLK_IS_CRITICAL,
1281                         .ops = &clk_branch2_ops,
1282                 },
1283         },
1284 };
1285
1286 static struct clk_branch mmss_mmagic_cfg_ahb_clk = {
1287         .halt_reg = 0x5054,
1288         .clkr = {
1289                 .enable_reg = 0x5054,
1290                 .enable_mask = BIT(0),
1291                 .hw.init = &(struct clk_init_data){
1292                         .name = "mmss_mmagic_cfg_ahb_clk",
1293                         .parent_hws = (const struct clk_hw*[]){
1294                                 &ahb_clk_src.clkr.hw
1295                         },
1296                         .num_parents = 1,
1297                         .flags = CLK_SET_RATE_PARENT | CLK_IS_CRITICAL,
1298                         .ops = &clk_branch2_ops,
1299                 },
1300         },
1301 };
1302
1303 static struct clk_branch mmss_misc_ahb_clk = {
1304         .halt_reg = 0x5018,
1305         .clkr = {
1306                 .enable_reg = 0x5018,
1307                 .enable_mask = BIT(0),
1308                 .hw.init = &(struct clk_init_data){
1309                         .name = "mmss_misc_ahb_clk",
1310                         .parent_hws = (const struct clk_hw*[]){
1311                                 &ahb_clk_src.clkr.hw
1312                         },
1313                         .num_parents = 1,
1314                         .flags = CLK_SET_RATE_PARENT,
1315                         .ops = &clk_branch2_ops,
1316                 },
1317         },
1318 };
1319
1320 static struct clk_branch mmss_misc_cxo_clk = {
1321         .halt_reg = 0x5014,
1322         .clkr = {
1323                 .enable_reg = 0x5014,
1324                 .enable_mask = BIT(0),
1325                 .hw.init = &(struct clk_init_data){
1326                         .name = "mmss_misc_cxo_clk",
1327                         .parent_data = (const struct clk_parent_data[]){
1328                                 { .fw_name = "xo", .name = "xo_board" },
1329                         },
1330                         .num_parents = 1,
1331                         .ops = &clk_branch2_ops,
1332                 },
1333         },
1334 };
1335
1336 static struct clk_branch mmss_mmagic_maxi_clk = {
1337         .halt_reg = 0x5074,
1338         .clkr = {
1339                 .enable_reg = 0x5074,
1340                 .enable_mask = BIT(0),
1341                 .hw.init = &(struct clk_init_data){
1342                         .name = "mmss_mmagic_maxi_clk",
1343                         .parent_hws = (const struct clk_hw*[]){
1344                                 &maxi_clk_src.clkr.hw
1345                         },
1346                         .num_parents = 1,
1347                         .flags = CLK_SET_RATE_PARENT,
1348                         .ops = &clk_branch2_ops,
1349                 },
1350         },
1351 };
1352
1353 static struct clk_branch mmagic_camss_axi_clk = {
1354         .halt_reg = 0x3c44,
1355         .clkr = {
1356                 .enable_reg = 0x3c44,
1357                 .enable_mask = BIT(0),
1358                 .hw.init = &(struct clk_init_data){
1359                         .name = "mmagic_camss_axi_clk",
1360                         .parent_hws = (const struct clk_hw*[]){
1361                                 &axi_clk_src.clkr.hw
1362                         },
1363                         .num_parents = 1,
1364                         .flags = CLK_SET_RATE_PARENT | CLK_IS_CRITICAL,
1365                         .ops = &clk_branch2_ops,
1366                 },
1367         },
1368 };
1369
1370 static struct clk_branch mmagic_camss_noc_cfg_ahb_clk = {
1371         .halt_reg = 0x3c48,
1372         .clkr = {
1373                 .enable_reg = 0x3c48,
1374                 .enable_mask = BIT(0),
1375                 .hw.init = &(struct clk_init_data){
1376                         .name = "mmagic_camss_noc_cfg_ahb_clk",
1377                         .parent_data = (const struct clk_parent_data[]){
1378                                 { .fw_name = "gcc_mmss_noc_cfg_ahb_clk", .name = "gcc_mmss_noc_cfg_ahb_clk" },
1379                         },
1380                         .num_parents = 1,
1381                         .flags = CLK_SET_RATE_PARENT | CLK_IS_CRITICAL,
1382                         .ops = &clk_branch2_ops,
1383                 },
1384         },
1385 };
1386
1387 static struct clk_branch smmu_vfe_ahb_clk = {
1388         .halt_reg = 0x3c04,
1389         .clkr = {
1390                 .enable_reg = 0x3c04,
1391                 .enable_mask = BIT(0),
1392                 .hw.init = &(struct clk_init_data){
1393                         .name = "smmu_vfe_ahb_clk",
1394                         .parent_hws = (const struct clk_hw*[]){
1395                                 &ahb_clk_src.clkr.hw
1396                         },
1397                         .num_parents = 1,
1398                         .flags = CLK_SET_RATE_PARENT,
1399                         .ops = &clk_branch2_ops,
1400                 },
1401         },
1402 };
1403
1404 static struct clk_branch smmu_vfe_axi_clk = {
1405         .halt_reg = 0x3c08,
1406         .clkr = {
1407                 .enable_reg = 0x3c08,
1408                 .enable_mask = BIT(0),
1409                 .hw.init = &(struct clk_init_data){
1410                         .name = "smmu_vfe_axi_clk",
1411                         .parent_hws = (const struct clk_hw*[]){
1412                                 &axi_clk_src.clkr.hw
1413                         },
1414                         .num_parents = 1,
1415                         .flags = CLK_SET_RATE_PARENT,
1416                         .ops = &clk_branch2_ops,
1417                 },
1418         },
1419 };
1420
1421 static struct clk_branch smmu_cpp_ahb_clk = {
1422         .halt_reg = 0x3c14,
1423         .clkr = {
1424                 .enable_reg = 0x3c14,
1425                 .enable_mask = BIT(0),
1426                 .hw.init = &(struct clk_init_data){
1427                         .name = "smmu_cpp_ahb_clk",
1428                         .parent_hws = (const struct clk_hw*[]){
1429                                 &ahb_clk_src.clkr.hw
1430                         },
1431                         .num_parents = 1,
1432                         .flags = CLK_SET_RATE_PARENT,
1433                         .ops = &clk_branch2_ops,
1434                 },
1435         },
1436 };
1437
1438 static struct clk_branch smmu_cpp_axi_clk = {
1439         .halt_reg = 0x3c18,
1440         .clkr = {
1441                 .enable_reg = 0x3c18,
1442                 .enable_mask = BIT(0),
1443                 .hw.init = &(struct clk_init_data){
1444                         .name = "smmu_cpp_axi_clk",
1445                         .parent_hws = (const struct clk_hw*[]){
1446                                 &axi_clk_src.clkr.hw
1447                         },
1448                         .num_parents = 1,
1449                         .flags = CLK_SET_RATE_PARENT,
1450                         .ops = &clk_branch2_ops,
1451                 },
1452         },
1453 };
1454
1455 static struct clk_branch smmu_jpeg_ahb_clk = {
1456         .halt_reg = 0x3c24,
1457         .clkr = {
1458                 .enable_reg = 0x3c24,
1459                 .enable_mask = BIT(0),
1460                 .hw.init = &(struct clk_init_data){
1461                         .name = "smmu_jpeg_ahb_clk",
1462                         .parent_hws = (const struct clk_hw*[]){
1463                                 &ahb_clk_src.clkr.hw
1464                         },
1465                         .num_parents = 1,
1466                         .flags = CLK_SET_RATE_PARENT,
1467                         .ops = &clk_branch2_ops,
1468                 },
1469         },
1470 };
1471
1472 static struct clk_branch smmu_jpeg_axi_clk = {
1473         .halt_reg = 0x3c28,
1474         .clkr = {
1475                 .enable_reg = 0x3c28,
1476                 .enable_mask = BIT(0),
1477                 .hw.init = &(struct clk_init_data){
1478                         .name = "smmu_jpeg_axi_clk",
1479                         .parent_hws = (const struct clk_hw*[]){
1480                                 &axi_clk_src.clkr.hw
1481                         },
1482                         .num_parents = 1,
1483                         .flags = CLK_SET_RATE_PARENT,
1484                         .ops = &clk_branch2_ops,
1485                 },
1486         },
1487 };
1488
1489 static struct clk_branch mmagic_mdss_axi_clk = {
1490         .halt_reg = 0x2474,
1491         .clkr = {
1492                 .enable_reg = 0x2474,
1493                 .enable_mask = BIT(0),
1494                 .hw.init = &(struct clk_init_data){
1495                         .name = "mmagic_mdss_axi_clk",
1496                         .parent_hws = (const struct clk_hw*[]){
1497                                 &axi_clk_src.clkr.hw
1498                         },
1499                         .num_parents = 1,
1500                         .flags = CLK_SET_RATE_PARENT | CLK_IS_CRITICAL,
1501                         .ops = &clk_branch2_ops,
1502                 },
1503         },
1504 };
1505
1506 static struct clk_branch mmagic_mdss_noc_cfg_ahb_clk = {
1507         .halt_reg = 0x2478,
1508         .clkr = {
1509                 .enable_reg = 0x2478,
1510                 .enable_mask = BIT(0),
1511                 .hw.init = &(struct clk_init_data){
1512                         .name = "mmagic_mdss_noc_cfg_ahb_clk",
1513                         .parent_data = (const struct clk_parent_data[]){
1514                                 { .fw_name = "gcc_mmss_noc_cfg_ahb_clk", .name = "gcc_mmss_noc_cfg_ahb_clk" },
1515                         },
1516                         .num_parents = 1,
1517                         .flags = CLK_SET_RATE_PARENT | CLK_IS_CRITICAL,
1518                         .ops = &clk_branch2_ops,
1519                 },
1520         },
1521 };
1522
1523 static struct clk_branch smmu_rot_ahb_clk = {
1524         .halt_reg = 0x2444,
1525         .clkr = {
1526                 .enable_reg = 0x2444,
1527                 .enable_mask = BIT(0),
1528                 .hw.init = &(struct clk_init_data){
1529                         .name = "smmu_rot_ahb_clk",
1530                         .parent_hws = (const struct clk_hw*[]){
1531                                 &ahb_clk_src.clkr.hw
1532                         },
1533                         .num_parents = 1,
1534                         .flags = CLK_SET_RATE_PARENT,
1535                         .ops = &clk_branch2_ops,
1536                 },
1537         },
1538 };
1539
1540 static struct clk_branch smmu_rot_axi_clk = {
1541         .halt_reg = 0x2448,
1542         .clkr = {
1543                 .enable_reg = 0x2448,
1544                 .enable_mask = BIT(0),
1545                 .hw.init = &(struct clk_init_data){
1546                         .name = "smmu_rot_axi_clk",
1547                         .parent_hws = (const struct clk_hw*[]){
1548                                 &axi_clk_src.clkr.hw
1549                         },
1550                         .num_parents = 1,
1551                         .flags = CLK_SET_RATE_PARENT,
1552                         .ops = &clk_branch2_ops,
1553                 },
1554         },
1555 };
1556
1557 static struct clk_branch smmu_mdp_ahb_clk = {
1558         .halt_reg = 0x2454,
1559         .clkr = {
1560                 .enable_reg = 0x2454,
1561                 .enable_mask = BIT(0),
1562                 .hw.init = &(struct clk_init_data){
1563                         .name = "smmu_mdp_ahb_clk",
1564                         .parent_hws = (const struct clk_hw*[]){
1565                                 &ahb_clk_src.clkr.hw
1566                         },
1567                         .num_parents = 1,
1568                         .flags = CLK_SET_RATE_PARENT,
1569                         .ops = &clk_branch2_ops,
1570                 },
1571         },
1572 };
1573
1574 static struct clk_branch smmu_mdp_axi_clk = {
1575         .halt_reg = 0x2458,
1576         .clkr = {
1577                 .enable_reg = 0x2458,
1578                 .enable_mask = BIT(0),
1579                 .hw.init = &(struct clk_init_data){
1580                         .name = "smmu_mdp_axi_clk",
1581                         .parent_hws = (const struct clk_hw*[]){
1582                                 &axi_clk_src.clkr.hw
1583                         },
1584                         .num_parents = 1,
1585                         .flags = CLK_SET_RATE_PARENT,
1586                         .ops = &clk_branch2_ops,
1587                 },
1588         },
1589 };
1590
1591 static struct clk_branch mmagic_video_axi_clk = {
1592         .halt_reg = 0x1194,
1593         .clkr = {
1594                 .enable_reg = 0x1194,
1595                 .enable_mask = BIT(0),
1596                 .hw.init = &(struct clk_init_data){
1597                         .name = "mmagic_video_axi_clk",
1598                         .parent_hws = (const struct clk_hw*[]){
1599                                 &axi_clk_src.clkr.hw
1600                         },
1601                         .num_parents = 1,
1602                         .flags = CLK_SET_RATE_PARENT | CLK_IS_CRITICAL,
1603                         .ops = &clk_branch2_ops,
1604                 },
1605         },
1606 };
1607
1608 static struct clk_branch mmagic_video_noc_cfg_ahb_clk = {
1609         .halt_reg = 0x1198,
1610         .clkr = {
1611                 .enable_reg = 0x1198,
1612                 .enable_mask = BIT(0),
1613                 .hw.init = &(struct clk_init_data){
1614                         .name = "mmagic_video_noc_cfg_ahb_clk",
1615                         .parent_data = (const struct clk_parent_data[]){
1616                                 { .fw_name = "gcc_mmss_noc_cfg_ahb_clk", .name = "gcc_mmss_noc_cfg_ahb_clk" },
1617                         },
1618                         .num_parents = 1,
1619                         .flags = CLK_SET_RATE_PARENT | CLK_IS_CRITICAL,
1620                         .ops = &clk_branch2_ops,
1621                 },
1622         },
1623 };
1624
1625 static struct clk_branch smmu_video_ahb_clk = {
1626         .halt_reg = 0x1174,
1627         .clkr = {
1628                 .enable_reg = 0x1174,
1629                 .enable_mask = BIT(0),
1630                 .hw.init = &(struct clk_init_data){
1631                         .name = "smmu_video_ahb_clk",
1632                         .parent_hws = (const struct clk_hw*[]){
1633                                 &ahb_clk_src.clkr.hw
1634                         },
1635                         .num_parents = 1,
1636                         .flags = CLK_SET_RATE_PARENT,
1637                         .ops = &clk_branch2_ops,
1638                 },
1639         },
1640 };
1641
1642 static struct clk_branch smmu_video_axi_clk = {
1643         .halt_reg = 0x1178,
1644         .clkr = {
1645                 .enable_reg = 0x1178,
1646                 .enable_mask = BIT(0),
1647                 .hw.init = &(struct clk_init_data){
1648                         .name = "smmu_video_axi_clk",
1649                         .parent_hws = (const struct clk_hw*[]){
1650                                 &axi_clk_src.clkr.hw
1651                         },
1652                         .num_parents = 1,
1653                         .flags = CLK_SET_RATE_PARENT,
1654                         .ops = &clk_branch2_ops,
1655                 },
1656         },
1657 };
1658
1659 static struct clk_branch mmagic_bimc_noc_cfg_ahb_clk = {
1660         .halt_reg = 0x5298,
1661         .clkr = {
1662                 .enable_reg = 0x5298,
1663                 .enable_mask = BIT(0),
1664                 .hw.init = &(struct clk_init_data){
1665                         .name = "mmagic_bimc_noc_cfg_ahb_clk",
1666                         .parent_data = (const struct clk_parent_data[]){
1667                                 { .fw_name = "gcc_mmss_noc_cfg_ahb_clk", .name = "gcc_mmss_noc_cfg_ahb_clk" },
1668                         },
1669                         .num_parents = 1,
1670                         .flags = CLK_SET_RATE_PARENT,
1671                         .ops = &clk_branch2_ops,
1672                 },
1673         },
1674 };
1675
1676 static struct clk_branch gpu_gx_gfx3d_clk = {
1677         .halt_reg = 0x4028,
1678         .clkr = {
1679                 .enable_reg = 0x4028,
1680                 .enable_mask = BIT(0),
1681                 .hw.init = &(struct clk_init_data){
1682                         .name = "gpu_gx_gfx3d_clk",
1683                         .parent_hws = (const struct clk_hw*[]){
1684                                 &gfx3d_clk_src.rcg.clkr.hw
1685                         },
1686                         .num_parents = 1,
1687                         .flags = CLK_SET_RATE_PARENT,
1688                         .ops = &clk_branch2_ops,
1689                 },
1690         },
1691 };
1692
1693 static struct clk_branch gpu_gx_rbbmtimer_clk = {
1694         .halt_reg = 0x40b0,
1695         .clkr = {
1696                 .enable_reg = 0x40b0,
1697                 .enable_mask = BIT(0),
1698                 .hw.init = &(struct clk_init_data){
1699                         .name = "gpu_gx_rbbmtimer_clk",
1700                         .parent_hws = (const struct clk_hw*[]){
1701                                 &rbbmtimer_clk_src.clkr.hw
1702                         },
1703                         .num_parents = 1,
1704                         .flags = CLK_SET_RATE_PARENT,
1705                         .ops = &clk_branch2_ops,
1706                 },
1707         },
1708 };
1709
1710 static struct clk_branch gpu_ahb_clk = {
1711         .halt_reg = 0x403c,
1712         .clkr = {
1713                 .enable_reg = 0x403c,
1714                 .enable_mask = BIT(0),
1715                 .hw.init = &(struct clk_init_data){
1716                         .name = "gpu_ahb_clk",
1717                         .parent_hws = (const struct clk_hw*[]){
1718                                 &ahb_clk_src.clkr.hw
1719                         },
1720                         .num_parents = 1,
1721                         .flags = CLK_SET_RATE_PARENT,
1722                         .ops = &clk_branch2_ops,
1723                 },
1724         },
1725 };
1726
1727 static struct clk_branch gpu_aon_isense_clk = {
1728         .halt_reg = 0x4044,
1729         .clkr = {
1730                 .enable_reg = 0x4044,
1731                 .enable_mask = BIT(0),
1732                 .hw.init = &(struct clk_init_data){
1733                         .name = "gpu_aon_isense_clk",
1734                         .parent_hws = (const struct clk_hw*[]){
1735                                 &isense_clk_src.clkr.hw
1736                         },
1737                         .num_parents = 1,
1738                         .flags = CLK_SET_RATE_PARENT,
1739                         .ops = &clk_branch2_ops,
1740                 },
1741         },
1742 };
1743
1744 static struct clk_branch vmem_maxi_clk = {
1745         .halt_reg = 0x1204,
1746         .clkr = {
1747                 .enable_reg = 0x1204,
1748                 .enable_mask = BIT(0),
1749                 .hw.init = &(struct clk_init_data){
1750                         .name = "vmem_maxi_clk",
1751                         .parent_hws = (const struct clk_hw*[]){
1752                                 &maxi_clk_src.clkr.hw
1753                         },
1754                         .num_parents = 1,
1755                         .flags = CLK_SET_RATE_PARENT,
1756                         .ops = &clk_branch2_ops,
1757                 },
1758         },
1759 };
1760
1761 static struct clk_branch vmem_ahb_clk = {
1762         .halt_reg = 0x1208,
1763         .clkr = {
1764                 .enable_reg = 0x1208,
1765                 .enable_mask = BIT(0),
1766                 .hw.init = &(struct clk_init_data){
1767                         .name = "vmem_ahb_clk",
1768                         .parent_hws = (const struct clk_hw*[]){
1769                                 &ahb_clk_src.clkr.hw
1770                         },
1771                         .num_parents = 1,
1772                         .flags = CLK_SET_RATE_PARENT,
1773                         .ops = &clk_branch2_ops,
1774                 },
1775         },
1776 };
1777
1778 static struct clk_branch mmss_rbcpr_clk = {
1779         .halt_reg = 0x4084,
1780         .clkr = {
1781                 .enable_reg = 0x4084,
1782                 .enable_mask = BIT(0),
1783                 .hw.init = &(struct clk_init_data){
1784                         .name = "mmss_rbcpr_clk",
1785                         .parent_hws = (const struct clk_hw*[]){
1786                                 &rbcpr_clk_src.clkr.hw
1787                         },
1788                         .num_parents = 1,
1789                         .flags = CLK_SET_RATE_PARENT,
1790                         .ops = &clk_branch2_ops,
1791                 },
1792         },
1793 };
1794
1795 static struct clk_branch mmss_rbcpr_ahb_clk = {
1796         .halt_reg = 0x4088,
1797         .clkr = {
1798                 .enable_reg = 0x4088,
1799                 .enable_mask = BIT(0),
1800                 .hw.init = &(struct clk_init_data){
1801                         .name = "mmss_rbcpr_ahb_clk",
1802                         .parent_hws = (const struct clk_hw*[]){
1803                                 &ahb_clk_src.clkr.hw
1804                         },
1805                         .num_parents = 1,
1806                         .flags = CLK_SET_RATE_PARENT,
1807                         .ops = &clk_branch2_ops,
1808                 },
1809         },
1810 };
1811
1812 static struct clk_branch video_core_clk = {
1813         .halt_reg = 0x1028,
1814         .clkr = {
1815                 .enable_reg = 0x1028,
1816                 .enable_mask = BIT(0),
1817                 .hw.init = &(struct clk_init_data){
1818                         .name = "video_core_clk",
1819                         .parent_hws = (const struct clk_hw*[]){
1820                                 &video_core_clk_src.clkr.hw
1821                         },
1822                         .num_parents = 1,
1823                         .flags = CLK_SET_RATE_PARENT,
1824                         .ops = &clk_branch2_ops,
1825                 },
1826         },
1827 };
1828
1829 static struct clk_branch video_axi_clk = {
1830         .halt_reg = 0x1034,
1831         .clkr = {
1832                 .enable_reg = 0x1034,
1833                 .enable_mask = BIT(0),
1834                 .hw.init = &(struct clk_init_data){
1835                         .name = "video_axi_clk",
1836                         .parent_hws = (const struct clk_hw*[]){
1837                                 &axi_clk_src.clkr.hw
1838                         },
1839                         .num_parents = 1,
1840                         .flags = CLK_SET_RATE_PARENT,
1841                         .ops = &clk_branch2_ops,
1842                 },
1843         },
1844 };
1845
1846 static struct clk_branch video_maxi_clk = {
1847         .halt_reg = 0x1038,
1848         .clkr = {
1849                 .enable_reg = 0x1038,
1850                 .enable_mask = BIT(0),
1851                 .hw.init = &(struct clk_init_data){
1852                         .name = "video_maxi_clk",
1853                         .parent_hws = (const struct clk_hw*[]){
1854                                 &maxi_clk_src.clkr.hw
1855                         },
1856                         .num_parents = 1,
1857                         .flags = CLK_SET_RATE_PARENT,
1858                         .ops = &clk_branch2_ops,
1859                 },
1860         },
1861 };
1862
1863 static struct clk_branch video_ahb_clk = {
1864         .halt_reg = 0x1030,
1865         .clkr = {
1866                 .enable_reg = 0x1030,
1867                 .enable_mask = BIT(0),
1868                 .hw.init = &(struct clk_init_data){
1869                         .name = "video_ahb_clk",
1870                         .parent_hws = (const struct clk_hw*[]){
1871                                 &ahb_clk_src.clkr.hw
1872                         },
1873                         .num_parents = 1,
1874                         .flags = CLK_SET_RATE_PARENT,
1875                         .ops = &clk_branch2_ops,
1876                 },
1877         },
1878 };
1879
1880 static struct clk_branch video_subcore0_clk = {
1881         .halt_reg = 0x1048,
1882         .clkr = {
1883                 .enable_reg = 0x1048,
1884                 .enable_mask = BIT(0),
1885                 .hw.init = &(struct clk_init_data){
1886                         .name = "video_subcore0_clk",
1887                         .parent_hws = (const struct clk_hw*[]){
1888                                 &video_subcore0_clk_src.clkr.hw
1889                         },
1890                         .num_parents = 1,
1891                         .flags = CLK_SET_RATE_PARENT,
1892                         .ops = &clk_branch2_ops,
1893                 },
1894         },
1895 };
1896
1897 static struct clk_branch video_subcore1_clk = {
1898         .halt_reg = 0x104c,
1899         .clkr = {
1900                 .enable_reg = 0x104c,
1901                 .enable_mask = BIT(0),
1902                 .hw.init = &(struct clk_init_data){
1903                         .name = "video_subcore1_clk",
1904                         .parent_hws = (const struct clk_hw*[]){
1905                                 &video_subcore1_clk_src.clkr.hw
1906                         },
1907                         .num_parents = 1,
1908                         .flags = CLK_SET_RATE_PARENT,
1909                         .ops = &clk_branch2_ops,
1910                 },
1911         },
1912 };
1913
1914 static struct clk_branch mdss_ahb_clk = {
1915         .halt_reg = 0x2308,
1916         .clkr = {
1917                 .enable_reg = 0x2308,
1918                 .enable_mask = BIT(0),
1919                 .hw.init = &(struct clk_init_data){
1920                         .name = "mdss_ahb_clk",
1921                         .parent_hws = (const struct clk_hw*[]){
1922                                 &ahb_clk_src.clkr.hw
1923                         },
1924                         .num_parents = 1,
1925                         .flags = CLK_SET_RATE_PARENT,
1926                         .ops = &clk_branch2_ops,
1927                 },
1928         },
1929 };
1930
1931 static struct clk_branch mdss_hdmi_ahb_clk = {
1932         .halt_reg = 0x230c,
1933         .clkr = {
1934                 .enable_reg = 0x230c,
1935                 .enable_mask = BIT(0),
1936                 .hw.init = &(struct clk_init_data){
1937                         .name = "mdss_hdmi_ahb_clk",
1938                         .parent_hws = (const struct clk_hw*[]){
1939                                 &ahb_clk_src.clkr.hw
1940                         },
1941                         .num_parents = 1,
1942                         .flags = CLK_SET_RATE_PARENT,
1943                         .ops = &clk_branch2_ops,
1944                 },
1945         },
1946 };
1947
1948 static struct clk_branch mdss_axi_clk = {
1949         .halt_reg = 0x2310,
1950         .clkr = {
1951                 .enable_reg = 0x2310,
1952                 .enable_mask = BIT(0),
1953                 .hw.init = &(struct clk_init_data){
1954                         .name = "mdss_axi_clk",
1955                         .parent_hws = (const struct clk_hw*[]){
1956                                 &axi_clk_src.clkr.hw
1957                         },
1958                         .num_parents = 1,
1959                         .flags = CLK_SET_RATE_PARENT,
1960                         .ops = &clk_branch2_ops,
1961                 },
1962         },
1963 };
1964
1965 static struct clk_branch mdss_pclk0_clk = {
1966         .halt_reg = 0x2314,
1967         .clkr = {
1968                 .enable_reg = 0x2314,
1969                 .enable_mask = BIT(0),
1970                 .hw.init = &(struct clk_init_data){
1971                         .name = "mdss_pclk0_clk",
1972                         .parent_hws = (const struct clk_hw*[]){
1973                                 &pclk0_clk_src.clkr.hw
1974                         },
1975                         .num_parents = 1,
1976                         .flags = CLK_SET_RATE_PARENT,
1977                         .ops = &clk_branch2_ops,
1978                 },
1979         },
1980 };
1981
1982 static struct clk_branch mdss_pclk1_clk = {
1983         .halt_reg = 0x2318,
1984         .clkr = {
1985                 .enable_reg = 0x2318,
1986                 .enable_mask = BIT(0),
1987                 .hw.init = &(struct clk_init_data){
1988                         .name = "mdss_pclk1_clk",
1989                         .parent_hws = (const struct clk_hw*[]){
1990                                 &pclk1_clk_src.clkr.hw
1991                         },
1992                         .num_parents = 1,
1993                         .flags = CLK_SET_RATE_PARENT,
1994                         .ops = &clk_branch2_ops,
1995                 },
1996         },
1997 };
1998
1999 static struct clk_branch mdss_mdp_clk = {
2000         .halt_reg = 0x231c,
2001         .clkr = {
2002                 .enable_reg = 0x231c,
2003                 .enable_mask = BIT(0),
2004                 .hw.init = &(struct clk_init_data){
2005                         .name = "mdss_mdp_clk",
2006                         .parent_hws = (const struct clk_hw*[]){
2007                                 &mdp_clk_src.clkr.hw
2008                         },
2009                         .num_parents = 1,
2010                         .flags = CLK_SET_RATE_PARENT,
2011                         .ops = &clk_branch2_ops,
2012                 },
2013         },
2014 };
2015
2016 static struct clk_branch mdss_extpclk_clk = {
2017         .halt_reg = 0x2324,
2018         .clkr = {
2019                 .enable_reg = 0x2324,
2020                 .enable_mask = BIT(0),
2021                 .hw.init = &(struct clk_init_data){
2022                         .name = "mdss_extpclk_clk",
2023                         .parent_hws = (const struct clk_hw*[]){
2024                                 &extpclk_clk_src.clkr.hw
2025                         },
2026                         .num_parents = 1,
2027                         .flags = CLK_SET_RATE_PARENT,
2028                         .ops = &clk_branch2_ops,
2029                 },
2030         },
2031 };
2032
2033 static struct clk_branch mdss_vsync_clk = {
2034         .halt_reg = 0x2328,
2035         .clkr = {
2036                 .enable_reg = 0x2328,
2037                 .enable_mask = BIT(0),
2038                 .hw.init = &(struct clk_init_data){
2039                         .name = "mdss_vsync_clk",
2040                         .parent_hws = (const struct clk_hw*[]){
2041                                 &vsync_clk_src.clkr.hw
2042                         },
2043                         .num_parents = 1,
2044                         .flags = CLK_SET_RATE_PARENT,
2045                         .ops = &clk_branch2_ops,
2046                 },
2047         },
2048 };
2049
2050 static struct clk_branch mdss_hdmi_clk = {
2051         .halt_reg = 0x2338,
2052         .clkr = {
2053                 .enable_reg = 0x2338,
2054                 .enable_mask = BIT(0),
2055                 .hw.init = &(struct clk_init_data){
2056                         .name = "mdss_hdmi_clk",
2057                         .parent_hws = (const struct clk_hw*[]){
2058                                 &hdmi_clk_src.clkr.hw
2059                         },
2060                         .num_parents = 1,
2061                         .flags = CLK_SET_RATE_PARENT,
2062                         .ops = &clk_branch2_ops,
2063                 },
2064         },
2065 };
2066
2067 static struct clk_branch mdss_byte0_clk = {
2068         .halt_reg = 0x233c,
2069         .clkr = {
2070                 .enable_reg = 0x233c,
2071                 .enable_mask = BIT(0),
2072                 .hw.init = &(struct clk_init_data){
2073                         .name = "mdss_byte0_clk",
2074                         .parent_hws = (const struct clk_hw*[]){
2075                                 &byte0_clk_src.clkr.hw
2076                         },
2077                         .num_parents = 1,
2078                         .flags = CLK_SET_RATE_PARENT,
2079                         .ops = &clk_branch2_ops,
2080                 },
2081         },
2082 };
2083
2084 static struct clk_branch mdss_byte1_clk = {
2085         .halt_reg = 0x2340,
2086         .clkr = {
2087                 .enable_reg = 0x2340,
2088                 .enable_mask = BIT(0),
2089                 .hw.init = &(struct clk_init_data){
2090                         .name = "mdss_byte1_clk",
2091                         .parent_hws = (const struct clk_hw*[]){
2092                                 &byte1_clk_src.clkr.hw
2093                         },
2094                         .num_parents = 1,
2095                         .flags = CLK_SET_RATE_PARENT,
2096                         .ops = &clk_branch2_ops,
2097                 },
2098         },
2099 };
2100
2101 static struct clk_branch mdss_esc0_clk = {
2102         .halt_reg = 0x2344,
2103         .clkr = {
2104                 .enable_reg = 0x2344,
2105                 .enable_mask = BIT(0),
2106                 .hw.init = &(struct clk_init_data){
2107                         .name = "mdss_esc0_clk",
2108                         .parent_hws = (const struct clk_hw*[]){
2109                                 &esc0_clk_src.clkr.hw
2110                         },
2111                         .num_parents = 1,
2112                         .flags = CLK_SET_RATE_PARENT,
2113                         .ops = &clk_branch2_ops,
2114                 },
2115         },
2116 };
2117
2118 static struct clk_branch mdss_esc1_clk = {
2119         .halt_reg = 0x2348,
2120         .clkr = {
2121                 .enable_reg = 0x2348,
2122                 .enable_mask = BIT(0),
2123                 .hw.init = &(struct clk_init_data){
2124                         .name = "mdss_esc1_clk",
2125                         .parent_hws = (const struct clk_hw*[]){
2126                                 &esc1_clk_src.clkr.hw
2127                         },
2128                         .num_parents = 1,
2129                         .flags = CLK_SET_RATE_PARENT,
2130                         .ops = &clk_branch2_ops,
2131                 },
2132         },
2133 };
2134
2135 static struct clk_branch camss_top_ahb_clk = {
2136         .halt_reg = 0x3484,
2137         .clkr = {
2138                 .enable_reg = 0x3484,
2139                 .enable_mask = BIT(0),
2140                 .hw.init = &(struct clk_init_data){
2141                         .name = "camss_top_ahb_clk",
2142                         .parent_hws = (const struct clk_hw*[]){
2143                                 &ahb_clk_src.clkr.hw
2144                         },
2145                         .num_parents = 1,
2146                         .flags = CLK_SET_RATE_PARENT,
2147                         .ops = &clk_branch2_ops,
2148                 },
2149         },
2150 };
2151
2152 static struct clk_branch camss_ahb_clk = {
2153         .halt_reg = 0x348c,
2154         .clkr = {
2155                 .enable_reg = 0x348c,
2156                 .enable_mask = BIT(0),
2157                 .hw.init = &(struct clk_init_data){
2158                         .name = "camss_ahb_clk",
2159                         .parent_hws = (const struct clk_hw*[]){
2160                                 &ahb_clk_src.clkr.hw
2161                         },
2162                         .num_parents = 1,
2163                         .flags = CLK_SET_RATE_PARENT,
2164                         .ops = &clk_branch2_ops,
2165                 },
2166         },
2167 };
2168
2169 static struct clk_branch camss_micro_ahb_clk = {
2170         .halt_reg = 0x3494,
2171         .clkr = {
2172                 .enable_reg = 0x3494,
2173                 .enable_mask = BIT(0),
2174                 .hw.init = &(struct clk_init_data){
2175                         .name = "camss_micro_ahb_clk",
2176                         .parent_hws = (const struct clk_hw*[]){
2177                                 &ahb_clk_src.clkr.hw
2178                         },
2179                         .num_parents = 1,
2180                         .flags = CLK_SET_RATE_PARENT,
2181                         .ops = &clk_branch2_ops,
2182                 },
2183         },
2184 };
2185
2186 static struct clk_branch camss_gp0_clk = {
2187         .halt_reg = 0x3444,
2188         .clkr = {
2189                 .enable_reg = 0x3444,
2190                 .enable_mask = BIT(0),
2191                 .hw.init = &(struct clk_init_data){
2192                         .name = "camss_gp0_clk",
2193                         .parent_hws = (const struct clk_hw*[]){
2194                                 &camss_gp0_clk_src.clkr.hw
2195                         },
2196                         .num_parents = 1,
2197                         .flags = CLK_SET_RATE_PARENT,
2198                         .ops = &clk_branch2_ops,
2199                 },
2200         },
2201 };
2202
2203 static struct clk_branch camss_gp1_clk = {
2204         .halt_reg = 0x3474,
2205         .clkr = {
2206                 .enable_reg = 0x3474,
2207                 .enable_mask = BIT(0),
2208                 .hw.init = &(struct clk_init_data){
2209                         .name = "camss_gp1_clk",
2210                         .parent_hws = (const struct clk_hw*[]){
2211                                 &camss_gp1_clk_src.clkr.hw
2212                         },
2213                         .num_parents = 1,
2214                         .flags = CLK_SET_RATE_PARENT,
2215                         .ops = &clk_branch2_ops,
2216                 },
2217         },
2218 };
2219
2220 static struct clk_branch camss_mclk0_clk = {
2221         .halt_reg = 0x3384,
2222         .clkr = {
2223                 .enable_reg = 0x3384,
2224                 .enable_mask = BIT(0),
2225                 .hw.init = &(struct clk_init_data){
2226                         .name = "camss_mclk0_clk",
2227                         .parent_hws = (const struct clk_hw*[]){
2228                                 &mclk0_clk_src.clkr.hw
2229                         },
2230                         .num_parents = 1,
2231                         .flags = CLK_SET_RATE_PARENT,
2232                         .ops = &clk_branch2_ops,
2233                 },
2234         },
2235 };
2236
2237 static struct clk_branch camss_mclk1_clk = {
2238         .halt_reg = 0x33b4,
2239         .clkr = {
2240                 .enable_reg = 0x33b4,
2241                 .enable_mask = BIT(0),
2242                 .hw.init = &(struct clk_init_data){
2243                         .name = "camss_mclk1_clk",
2244                         .parent_hws = (const struct clk_hw*[]){
2245                                 &mclk1_clk_src.clkr.hw
2246                         },
2247                         .num_parents = 1,
2248                         .flags = CLK_SET_RATE_PARENT,
2249                         .ops = &clk_branch2_ops,
2250                 },
2251         },
2252 };
2253
2254 static struct clk_branch camss_mclk2_clk = {
2255         .halt_reg = 0x33e4,
2256         .clkr = {
2257                 .enable_reg = 0x33e4,
2258                 .enable_mask = BIT(0),
2259                 .hw.init = &(struct clk_init_data){
2260                         .name = "camss_mclk2_clk",
2261                         .parent_hws = (const struct clk_hw*[]){
2262                                 &mclk2_clk_src.clkr.hw
2263                         },
2264                         .num_parents = 1,
2265                         .flags = CLK_SET_RATE_PARENT,
2266                         .ops = &clk_branch2_ops,
2267                 },
2268         },
2269 };
2270
2271 static struct clk_branch camss_mclk3_clk = {
2272         .halt_reg = 0x3414,
2273         .clkr = {
2274                 .enable_reg = 0x3414,
2275                 .enable_mask = BIT(0),
2276                 .hw.init = &(struct clk_init_data){
2277                         .name = "camss_mclk3_clk",
2278                         .parent_hws = (const struct clk_hw*[]){
2279                                 &mclk3_clk_src.clkr.hw
2280                         },
2281                         .num_parents = 1,
2282                         .flags = CLK_SET_RATE_PARENT,
2283                         .ops = &clk_branch2_ops,
2284                 },
2285         },
2286 };
2287
2288 static struct clk_branch camss_cci_clk = {
2289         .halt_reg = 0x3344,
2290         .clkr = {
2291                 .enable_reg = 0x3344,
2292                 .enable_mask = BIT(0),
2293                 .hw.init = &(struct clk_init_data){
2294                         .name = "camss_cci_clk",
2295                         .parent_hws = (const struct clk_hw*[]){
2296                                 &cci_clk_src.clkr.hw
2297                         },
2298                         .num_parents = 1,
2299                         .flags = CLK_SET_RATE_PARENT,
2300                         .ops = &clk_branch2_ops,
2301                 },
2302         },
2303 };
2304
2305 static struct clk_branch camss_cci_ahb_clk = {
2306         .halt_reg = 0x3348,
2307         .clkr = {
2308                 .enable_reg = 0x3348,
2309                 .enable_mask = BIT(0),
2310                 .hw.init = &(struct clk_init_data){
2311                         .name = "camss_cci_ahb_clk",
2312                         .parent_hws = (const struct clk_hw*[]){
2313                                 &ahb_clk_src.clkr.hw
2314                         },
2315                         .num_parents = 1,
2316                         .flags = CLK_SET_RATE_PARENT,
2317                         .ops = &clk_branch2_ops,
2318                 },
2319         },
2320 };
2321
2322 static struct clk_branch camss_csi0phytimer_clk = {
2323         .halt_reg = 0x3024,
2324         .clkr = {
2325                 .enable_reg = 0x3024,
2326                 .enable_mask = BIT(0),
2327                 .hw.init = &(struct clk_init_data){
2328                         .name = "camss_csi0phytimer_clk",
2329                         .parent_hws = (const struct clk_hw*[]){
2330                                 &csi0phytimer_clk_src.clkr.hw
2331                         },
2332                         .num_parents = 1,
2333                         .flags = CLK_SET_RATE_PARENT,
2334                         .ops = &clk_branch2_ops,
2335                 },
2336         },
2337 };
2338
2339 static struct clk_branch camss_csi1phytimer_clk = {
2340         .halt_reg = 0x3054,
2341         .clkr = {
2342                 .enable_reg = 0x3054,
2343                 .enable_mask = BIT(0),
2344                 .hw.init = &(struct clk_init_data){
2345                         .name = "camss_csi1phytimer_clk",
2346                         .parent_hws = (const struct clk_hw*[]){
2347                                 &csi1phytimer_clk_src.clkr.hw
2348                         },
2349                         .num_parents = 1,
2350                         .flags = CLK_SET_RATE_PARENT,
2351                         .ops = &clk_branch2_ops,
2352                 },
2353         },
2354 };
2355
2356 static struct clk_branch camss_csi2phytimer_clk = {
2357         .halt_reg = 0x3084,
2358         .clkr = {
2359                 .enable_reg = 0x3084,
2360                 .enable_mask = BIT(0),
2361                 .hw.init = &(struct clk_init_data){
2362                         .name = "camss_csi2phytimer_clk",
2363                         .parent_hws = (const struct clk_hw*[]){
2364                                 &csi2phytimer_clk_src.clkr.hw
2365                         },
2366                         .num_parents = 1,
2367                         .flags = CLK_SET_RATE_PARENT,
2368                         .ops = &clk_branch2_ops,
2369                 },
2370         },
2371 };
2372
2373 static struct clk_branch camss_csiphy0_3p_clk = {
2374         .halt_reg = 0x3234,
2375         .clkr = {
2376                 .enable_reg = 0x3234,
2377                 .enable_mask = BIT(0),
2378                 .hw.init = &(struct clk_init_data){
2379                         .name = "camss_csiphy0_3p_clk",
2380                         .parent_hws = (const struct clk_hw*[]){
2381                                 &csiphy0_3p_clk_src.clkr.hw
2382                         },
2383                         .num_parents = 1,
2384                         .flags = CLK_SET_RATE_PARENT,
2385                         .ops = &clk_branch2_ops,
2386                 },
2387         },
2388 };
2389
2390 static struct clk_branch camss_csiphy1_3p_clk = {
2391         .halt_reg = 0x3254,
2392         .clkr = {
2393                 .enable_reg = 0x3254,
2394                 .enable_mask = BIT(0),
2395                 .hw.init = &(struct clk_init_data){
2396                         .name = "camss_csiphy1_3p_clk",
2397                         .parent_hws = (const struct clk_hw*[]){
2398                                 &csiphy1_3p_clk_src.clkr.hw
2399                         },
2400                         .num_parents = 1,
2401                         .flags = CLK_SET_RATE_PARENT,
2402                         .ops = &clk_branch2_ops,
2403                 },
2404         },
2405 };
2406
2407 static struct clk_branch camss_csiphy2_3p_clk = {
2408         .halt_reg = 0x3274,
2409         .clkr = {
2410                 .enable_reg = 0x3274,
2411                 .enable_mask = BIT(0),
2412                 .hw.init = &(struct clk_init_data){
2413                         .name = "camss_csiphy2_3p_clk",
2414                         .parent_hws = (const struct clk_hw*[]){
2415                                 &csiphy2_3p_clk_src.clkr.hw
2416                         },
2417                         .num_parents = 1,
2418                         .flags = CLK_SET_RATE_PARENT,
2419                         .ops = &clk_branch2_ops,
2420                 },
2421         },
2422 };
2423
2424 static struct clk_branch camss_jpeg0_clk = {
2425         .halt_reg = 0x35a8,
2426         .clkr = {
2427                 .enable_reg = 0x35a8,
2428                 .enable_mask = BIT(0),
2429                 .hw.init = &(struct clk_init_data){
2430                         .name = "camss_jpeg0_clk",
2431                         .parent_hws = (const struct clk_hw*[]){
2432                                 &jpeg0_clk_src.clkr.hw
2433                         },
2434                         .num_parents = 1,
2435                         .flags = CLK_SET_RATE_PARENT,
2436                         .ops = &clk_branch2_ops,
2437                 },
2438         },
2439 };
2440
2441 static struct clk_branch camss_jpeg2_clk = {
2442         .halt_reg = 0x35b0,
2443         .clkr = {
2444                 .enable_reg = 0x35b0,
2445                 .enable_mask = BIT(0),
2446                 .hw.init = &(struct clk_init_data){
2447                         .name = "camss_jpeg2_clk",
2448                         .parent_hws = (const struct clk_hw*[]){
2449                                 &jpeg2_clk_src.clkr.hw
2450                         },
2451                         .num_parents = 1,
2452                         .flags = CLK_SET_RATE_PARENT,
2453                         .ops = &clk_branch2_ops,
2454                 },
2455         },
2456 };
2457
2458 static struct clk_branch camss_jpeg_dma_clk = {
2459         .halt_reg = 0x35c0,
2460         .clkr = {
2461                 .enable_reg = 0x35c0,
2462                 .enable_mask = BIT(0),
2463                 .hw.init = &(struct clk_init_data){
2464                         .name = "camss_jpeg_dma_clk",
2465                         .parent_hws = (const struct clk_hw*[]){
2466                                 &jpeg_dma_clk_src.clkr.hw
2467                         },
2468                         .num_parents = 1,
2469                         .flags = CLK_SET_RATE_PARENT,
2470                         .ops = &clk_branch2_ops,
2471                 },
2472         },
2473 };
2474
2475 static struct clk_branch camss_jpeg_ahb_clk = {
2476         .halt_reg = 0x35b4,
2477         .clkr = {
2478                 .enable_reg = 0x35b4,
2479                 .enable_mask = BIT(0),
2480                 .hw.init = &(struct clk_init_data){
2481                         .name = "camss_jpeg_ahb_clk",
2482                         .parent_hws = (const struct clk_hw*[]){
2483                                 &ahb_clk_src.clkr.hw
2484                         },
2485                         .num_parents = 1,
2486                         .flags = CLK_SET_RATE_PARENT,
2487                         .ops = &clk_branch2_ops,
2488                 },
2489         },
2490 };
2491
2492 static struct clk_branch camss_jpeg_axi_clk = {
2493         .halt_reg = 0x35b8,
2494         .clkr = {
2495                 .enable_reg = 0x35b8,
2496                 .enable_mask = BIT(0),
2497                 .hw.init = &(struct clk_init_data){
2498                         .name = "camss_jpeg_axi_clk",
2499                         .parent_hws = (const struct clk_hw*[]){
2500                                 &axi_clk_src.clkr.hw
2501                         },
2502                         .num_parents = 1,
2503                         .flags = CLK_SET_RATE_PARENT,
2504                         .ops = &clk_branch2_ops,
2505                 },
2506         },
2507 };
2508
2509 static struct clk_branch camss_vfe_ahb_clk = {
2510         .halt_reg = 0x36b8,
2511         .clkr = {
2512                 .enable_reg = 0x36b8,
2513                 .enable_mask = BIT(0),
2514                 .hw.init = &(struct clk_init_data){
2515                         .name = "camss_vfe_ahb_clk",
2516                         .parent_hws = (const struct clk_hw*[]){
2517                                 &ahb_clk_src.clkr.hw
2518                         },
2519                         .num_parents = 1,
2520                         .flags = CLK_SET_RATE_PARENT,
2521                         .ops = &clk_branch2_ops,
2522                 },
2523         },
2524 };
2525
2526 static struct clk_branch camss_vfe_axi_clk = {
2527         .halt_reg = 0x36bc,
2528         .clkr = {
2529                 .enable_reg = 0x36bc,
2530                 .enable_mask = BIT(0),
2531                 .hw.init = &(struct clk_init_data){
2532                         .name = "camss_vfe_axi_clk",
2533                         .parent_hws = (const struct clk_hw*[]){
2534                                 &axi_clk_src.clkr.hw
2535                         },
2536                         .num_parents = 1,
2537                         .flags = CLK_SET_RATE_PARENT,
2538                         .ops = &clk_branch2_ops,
2539                 },
2540         },
2541 };
2542
2543 static struct clk_branch camss_vfe0_clk = {
2544         .halt_reg = 0x36a8,
2545         .clkr = {
2546                 .enable_reg = 0x36a8,
2547                 .enable_mask = BIT(0),
2548                 .hw.init = &(struct clk_init_data){
2549                         .name = "camss_vfe0_clk",
2550                         .parent_hws = (const struct clk_hw*[]){
2551                                 &vfe0_clk_src.clkr.hw
2552                         },
2553                         .num_parents = 1,
2554                         .flags = CLK_SET_RATE_PARENT,
2555                         .ops = &clk_branch2_ops,
2556                 },
2557         },
2558 };
2559
2560 static struct clk_branch camss_vfe0_stream_clk = {
2561         .halt_reg = 0x3720,
2562         .clkr = {
2563                 .enable_reg = 0x3720,
2564                 .enable_mask = BIT(0),
2565                 .hw.init = &(struct clk_init_data){
2566                         .name = "camss_vfe0_stream_clk",
2567                         .parent_hws = (const struct clk_hw*[]){
2568                                 &vfe0_clk_src.clkr.hw
2569                         },
2570                         .num_parents = 1,
2571                         .flags = CLK_SET_RATE_PARENT,
2572                         .ops = &clk_branch2_ops,
2573                 },
2574         },
2575 };
2576
2577 static struct clk_branch camss_vfe0_ahb_clk = {
2578         .halt_reg = 0x3668,
2579         .clkr = {
2580                 .enable_reg = 0x3668,
2581                 .enable_mask = BIT(0),
2582                 .hw.init = &(struct clk_init_data){
2583                         .name = "camss_vfe0_ahb_clk",
2584                         .parent_hws = (const struct clk_hw*[]){
2585                                 &ahb_clk_src.clkr.hw
2586                         },
2587                         .num_parents = 1,
2588                         .flags = CLK_SET_RATE_PARENT,
2589                         .ops = &clk_branch2_ops,
2590                 },
2591         },
2592 };
2593
2594 static struct clk_branch camss_vfe1_clk = {
2595         .halt_reg = 0x36ac,
2596         .clkr = {
2597                 .enable_reg = 0x36ac,
2598                 .enable_mask = BIT(0),
2599                 .hw.init = &(struct clk_init_data){
2600                         .name = "camss_vfe1_clk",
2601                         .parent_hws = (const struct clk_hw*[]){
2602                                 &vfe1_clk_src.clkr.hw
2603                         },
2604                         .num_parents = 1,
2605                         .flags = CLK_SET_RATE_PARENT,
2606                         .ops = &clk_branch2_ops,
2607                 },
2608         },
2609 };
2610
2611 static struct clk_branch camss_vfe1_stream_clk = {
2612         .halt_reg = 0x3724,
2613         .clkr = {
2614                 .enable_reg = 0x3724,
2615                 .enable_mask = BIT(0),
2616                 .hw.init = &(struct clk_init_data){
2617                         .name = "camss_vfe1_stream_clk",
2618                         .parent_hws = (const struct clk_hw*[]){
2619                                 &vfe1_clk_src.clkr.hw
2620                         },
2621                         .num_parents = 1,
2622                         .flags = CLK_SET_RATE_PARENT,
2623                         .ops = &clk_branch2_ops,
2624                 },
2625         },
2626 };
2627
2628 static struct clk_branch camss_vfe1_ahb_clk = {
2629         .halt_reg = 0x3678,
2630         .clkr = {
2631                 .enable_reg = 0x3678,
2632                 .enable_mask = BIT(0),
2633                 .hw.init = &(struct clk_init_data){
2634                         .name = "camss_vfe1_ahb_clk",
2635                         .parent_hws = (const struct clk_hw*[]){
2636                                 &ahb_clk_src.clkr.hw
2637                         },
2638                         .num_parents = 1,
2639                         .flags = CLK_SET_RATE_PARENT,
2640                         .ops = &clk_branch2_ops,
2641                 },
2642         },
2643 };
2644
2645 static struct clk_branch camss_csi_vfe0_clk = {
2646         .halt_reg = 0x3704,
2647         .clkr = {
2648                 .enable_reg = 0x3704,
2649                 .enable_mask = BIT(0),
2650                 .hw.init = &(struct clk_init_data){
2651                         .name = "camss_csi_vfe0_clk",
2652                         .parent_hws = (const struct clk_hw*[]){
2653                                 &vfe0_clk_src.clkr.hw
2654                         },
2655                         .num_parents = 1,
2656                         .flags = CLK_SET_RATE_PARENT,
2657                         .ops = &clk_branch2_ops,
2658                 },
2659         },
2660 };
2661
2662 static struct clk_branch camss_csi_vfe1_clk = {
2663         .halt_reg = 0x3714,
2664         .clkr = {
2665                 .enable_reg = 0x3714,
2666                 .enable_mask = BIT(0),
2667                 .hw.init = &(struct clk_init_data){
2668                         .name = "camss_csi_vfe1_clk",
2669                         .parent_hws = (const struct clk_hw*[]){
2670                                 &vfe1_clk_src.clkr.hw
2671                         },
2672                         .num_parents = 1,
2673                         .flags = CLK_SET_RATE_PARENT,
2674                         .ops = &clk_branch2_ops,
2675                 },
2676         },
2677 };
2678
2679 static struct clk_branch camss_cpp_vbif_ahb_clk = {
2680         .halt_reg = 0x36c8,
2681         .clkr = {
2682                 .enable_reg = 0x36c8,
2683                 .enable_mask = BIT(0),
2684                 .hw.init = &(struct clk_init_data){
2685                         .name = "camss_cpp_vbif_ahb_clk",
2686                         .parent_hws = (const struct clk_hw*[]){
2687                                 &ahb_clk_src.clkr.hw
2688                         },
2689                         .num_parents = 1,
2690                         .flags = CLK_SET_RATE_PARENT,
2691                         .ops = &clk_branch2_ops,
2692                 },
2693         },
2694 };
2695
2696 static struct clk_branch camss_cpp_axi_clk = {
2697         .halt_reg = 0x36c4,
2698         .clkr = {
2699                 .enable_reg = 0x36c4,
2700                 .enable_mask = BIT(0),
2701                 .hw.init = &(struct clk_init_data){
2702                         .name = "camss_cpp_axi_clk",
2703                         .parent_hws = (const struct clk_hw*[]){
2704                                 &axi_clk_src.clkr.hw
2705                         },
2706                         .num_parents = 1,
2707                         .flags = CLK_SET_RATE_PARENT,
2708                         .ops = &clk_branch2_ops,
2709                 },
2710         },
2711 };
2712
2713 static struct clk_branch camss_cpp_clk = {
2714         .halt_reg = 0x36b0,
2715         .clkr = {
2716                 .enable_reg = 0x36b0,
2717                 .enable_mask = BIT(0),
2718                 .hw.init = &(struct clk_init_data){
2719                         .name = "camss_cpp_clk",
2720                         .parent_hws = (const struct clk_hw*[]){
2721                                 &cpp_clk_src.clkr.hw
2722                         },
2723                         .num_parents = 1,
2724                         .flags = CLK_SET_RATE_PARENT,
2725                         .ops = &clk_branch2_ops,
2726                 },
2727         },
2728 };
2729
2730 static struct clk_branch camss_cpp_ahb_clk = {
2731         .halt_reg = 0x36b4,
2732         .clkr = {
2733                 .enable_reg = 0x36b4,
2734                 .enable_mask = BIT(0),
2735                 .hw.init = &(struct clk_init_data){
2736                         .name = "camss_cpp_ahb_clk",
2737                         .parent_hws = (const struct clk_hw*[]){
2738                                 &ahb_clk_src.clkr.hw
2739                         },
2740                         .num_parents = 1,
2741                         .flags = CLK_SET_RATE_PARENT,
2742                         .ops = &clk_branch2_ops,
2743                 },
2744         },
2745 };
2746
2747 static struct clk_branch camss_csi0_clk = {
2748         .halt_reg = 0x30b4,
2749         .clkr = {
2750                 .enable_reg = 0x30b4,
2751                 .enable_mask = BIT(0),
2752                 .hw.init = &(struct clk_init_data){
2753                         .name = "camss_csi0_clk",
2754                         .parent_hws = (const struct clk_hw*[]){
2755                                 &csi0_clk_src.clkr.hw
2756                         },
2757                         .num_parents = 1,
2758                         .flags = CLK_SET_RATE_PARENT,
2759                         .ops = &clk_branch2_ops,
2760                 },
2761         },
2762 };
2763
2764 static struct clk_branch camss_csi0_ahb_clk = {
2765         .halt_reg = 0x30bc,
2766         .clkr = {
2767                 .enable_reg = 0x30bc,
2768                 .enable_mask = BIT(0),
2769                 .hw.init = &(struct clk_init_data){
2770                         .name = "camss_csi0_ahb_clk",
2771                         .parent_hws = (const struct clk_hw*[]){
2772                                 &ahb_clk_src.clkr.hw
2773                         },
2774                         .num_parents = 1,
2775                         .flags = CLK_SET_RATE_PARENT,
2776                         .ops = &clk_branch2_ops,
2777                 },
2778         },
2779 };
2780
2781 static struct clk_branch camss_csi0phy_clk = {
2782         .halt_reg = 0x30c4,
2783         .clkr = {
2784                 .enable_reg = 0x30c4,
2785                 .enable_mask = BIT(0),
2786                 .hw.init = &(struct clk_init_data){
2787                         .name = "camss_csi0phy_clk",
2788                         .parent_hws = (const struct clk_hw*[]){
2789                                 &csi0_clk_src.clkr.hw
2790                         },
2791                         .num_parents = 1,
2792                         .flags = CLK_SET_RATE_PARENT,
2793                         .ops = &clk_branch2_ops,
2794                 },
2795         },
2796 };
2797
2798 static struct clk_branch camss_csi0rdi_clk = {
2799         .halt_reg = 0x30d4,
2800         .clkr = {
2801                 .enable_reg = 0x30d4,
2802                 .enable_mask = BIT(0),
2803                 .hw.init = &(struct clk_init_data){
2804                         .name = "camss_csi0rdi_clk",
2805                         .parent_hws = (const struct clk_hw*[]){
2806                                 &csi0_clk_src.clkr.hw
2807                         },
2808                         .num_parents = 1,
2809                         .flags = CLK_SET_RATE_PARENT,
2810                         .ops = &clk_branch2_ops,
2811                 },
2812         },
2813 };
2814
2815 static struct clk_branch camss_csi0pix_clk = {
2816         .halt_reg = 0x30e4,
2817         .clkr = {
2818                 .enable_reg = 0x30e4,
2819                 .enable_mask = BIT(0),
2820                 .hw.init = &(struct clk_init_data){
2821                         .name = "camss_csi0pix_clk",
2822                         .parent_hws = (const struct clk_hw*[]){
2823                                 &csi0_clk_src.clkr.hw
2824                         },
2825                         .num_parents = 1,
2826                         .flags = CLK_SET_RATE_PARENT,
2827                         .ops = &clk_branch2_ops,
2828                 },
2829         },
2830 };
2831
2832 static struct clk_branch camss_csi1_clk = {
2833         .halt_reg = 0x3124,
2834         .clkr = {
2835                 .enable_reg = 0x3124,
2836                 .enable_mask = BIT(0),
2837                 .hw.init = &(struct clk_init_data){
2838                         .name = "camss_csi1_clk",
2839                         .parent_hws = (const struct clk_hw*[]){
2840                                 &csi1_clk_src.clkr.hw
2841                         },
2842                         .num_parents = 1,
2843                         .flags = CLK_SET_RATE_PARENT,
2844                         .ops = &clk_branch2_ops,
2845                 },
2846         },
2847 };
2848
2849 static struct clk_branch camss_csi1_ahb_clk = {
2850         .halt_reg = 0x3128,
2851         .clkr = {
2852                 .enable_reg = 0x3128,
2853                 .enable_mask = BIT(0),
2854                 .hw.init = &(struct clk_init_data){
2855                         .name = "camss_csi1_ahb_clk",
2856                         .parent_hws = (const struct clk_hw*[]){
2857                                 &ahb_clk_src.clkr.hw
2858                         },
2859                         .num_parents = 1,
2860                         .flags = CLK_SET_RATE_PARENT,
2861                         .ops = &clk_branch2_ops,
2862                 },
2863         },
2864 };
2865
2866 static struct clk_branch camss_csi1phy_clk = {
2867         .halt_reg = 0x3134,
2868         .clkr = {
2869                 .enable_reg = 0x3134,
2870                 .enable_mask = BIT(0),
2871                 .hw.init = &(struct clk_init_data){
2872                         .name = "camss_csi1phy_clk",
2873                         .parent_hws = (const struct clk_hw*[]){
2874                                 &csi1_clk_src.clkr.hw
2875                         },
2876                         .num_parents = 1,
2877                         .flags = CLK_SET_RATE_PARENT,
2878                         .ops = &clk_branch2_ops,
2879                 },
2880         },
2881 };
2882
2883 static struct clk_branch camss_csi1rdi_clk = {
2884         .halt_reg = 0x3144,
2885         .clkr = {
2886                 .enable_reg = 0x3144,
2887                 .enable_mask = BIT(0),
2888                 .hw.init = &(struct clk_init_data){
2889                         .name = "camss_csi1rdi_clk",
2890                         .parent_hws = (const struct clk_hw*[]){
2891                                 &csi1_clk_src.clkr.hw
2892                         },
2893                         .num_parents = 1,
2894                         .flags = CLK_SET_RATE_PARENT,
2895                         .ops = &clk_branch2_ops,
2896                 },
2897         },
2898 };
2899
2900 static struct clk_branch camss_csi1pix_clk = {
2901         .halt_reg = 0x3154,
2902         .clkr = {
2903                 .enable_reg = 0x3154,
2904                 .enable_mask = BIT(0),
2905                 .hw.init = &(struct clk_init_data){
2906                         .name = "camss_csi1pix_clk",
2907                         .parent_hws = (const struct clk_hw*[]){
2908                                 &csi1_clk_src.clkr.hw
2909                         },
2910                         .num_parents = 1,
2911                         .flags = CLK_SET_RATE_PARENT,
2912                         .ops = &clk_branch2_ops,
2913                 },
2914         },
2915 };
2916
2917 static struct clk_branch camss_csi2_clk = {
2918         .halt_reg = 0x3184,
2919         .clkr = {
2920                 .enable_reg = 0x3184,
2921                 .enable_mask = BIT(0),
2922                 .hw.init = &(struct clk_init_data){
2923                         .name = "camss_csi2_clk",
2924                         .parent_hws = (const struct clk_hw*[]){
2925                                 &csi2_clk_src.clkr.hw
2926                         },
2927                         .num_parents = 1,
2928                         .flags = CLK_SET_RATE_PARENT,
2929                         .ops = &clk_branch2_ops,
2930                 },
2931         },
2932 };
2933
2934 static struct clk_branch camss_csi2_ahb_clk = {
2935         .halt_reg = 0x3188,
2936         .clkr = {
2937                 .enable_reg = 0x3188,
2938                 .enable_mask = BIT(0),
2939                 .hw.init = &(struct clk_init_data){
2940                         .name = "camss_csi2_ahb_clk",
2941                         .parent_hws = (const struct clk_hw*[]){
2942                                 &ahb_clk_src.clkr.hw
2943                         },
2944                         .num_parents = 1,
2945                         .flags = CLK_SET_RATE_PARENT,
2946                         .ops = &clk_branch2_ops,
2947                 },
2948         },
2949 };
2950
2951 static struct clk_branch camss_csi2phy_clk = {
2952         .halt_reg = 0x3194,
2953         .clkr = {
2954                 .enable_reg = 0x3194,
2955                 .enable_mask = BIT(0),
2956                 .hw.init = &(struct clk_init_data){
2957                         .name = "camss_csi2phy_clk",
2958                         .parent_hws = (const struct clk_hw*[]){
2959                                 &csi2_clk_src.clkr.hw
2960                         },
2961                         .num_parents = 1,
2962                         .flags = CLK_SET_RATE_PARENT,
2963                         .ops = &clk_branch2_ops,
2964                 },
2965         },
2966 };
2967
2968 static struct clk_branch camss_csi2rdi_clk = {
2969         .halt_reg = 0x31a4,
2970         .clkr = {
2971                 .enable_reg = 0x31a4,
2972                 .enable_mask = BIT(0),
2973                 .hw.init = &(struct clk_init_data){
2974                         .name = "camss_csi2rdi_clk",
2975                         .parent_hws = (const struct clk_hw*[]){
2976                                 &csi2_clk_src.clkr.hw
2977                         },
2978                         .num_parents = 1,
2979                         .flags = CLK_SET_RATE_PARENT,
2980                         .ops = &clk_branch2_ops,
2981                 },
2982         },
2983 };
2984
2985 static struct clk_branch camss_csi2pix_clk = {
2986         .halt_reg = 0x31b4,
2987         .clkr = {
2988                 .enable_reg = 0x31b4,
2989                 .enable_mask = BIT(0),
2990                 .hw.init = &(struct clk_init_data){
2991                         .name = "camss_csi2pix_clk",
2992                         .parent_hws = (const struct clk_hw*[]){
2993                                 &csi2_clk_src.clkr.hw
2994                         },
2995                         .num_parents = 1,
2996                         .flags = CLK_SET_RATE_PARENT,
2997                         .ops = &clk_branch2_ops,
2998                 },
2999         },
3000 };
3001
3002 static struct clk_branch camss_csi3_clk = {
3003         .halt_reg = 0x31e4,
3004         .clkr = {
3005                 .enable_reg = 0x31e4,
3006                 .enable_mask = BIT(0),
3007                 .hw.init = &(struct clk_init_data){
3008                         .name = "camss_csi3_clk",
3009                         .parent_hws = (const struct clk_hw*[]){
3010                                 &csi3_clk_src.clkr.hw
3011                         },
3012                         .num_parents = 1,
3013                         .flags = CLK_SET_RATE_PARENT,
3014                         .ops = &clk_branch2_ops,
3015                 },
3016         },
3017 };
3018
3019 static struct clk_branch camss_csi3_ahb_clk = {
3020         .halt_reg = 0x31e8,
3021         .clkr = {
3022                 .enable_reg = 0x31e8,
3023                 .enable_mask = BIT(0),
3024                 .hw.init = &(struct clk_init_data){
3025                         .name = "camss_csi3_ahb_clk",
3026                         .parent_hws = (const struct clk_hw*[]){
3027                                 &ahb_clk_src.clkr.hw
3028                         },
3029                         .num_parents = 1,
3030                         .flags = CLK_SET_RATE_PARENT,
3031                         .ops = &clk_branch2_ops,
3032                 },
3033         },
3034 };
3035
3036 static struct clk_branch camss_csi3phy_clk = {
3037         .halt_reg = 0x31f4,
3038         .clkr = {
3039                 .enable_reg = 0x31f4,
3040                 .enable_mask = BIT(0),
3041                 .hw.init = &(struct clk_init_data){
3042                         .name = "camss_csi3phy_clk",
3043                         .parent_hws = (const struct clk_hw*[]){
3044                                 &csi3_clk_src.clkr.hw
3045                         },
3046                         .num_parents = 1,
3047                         .flags = CLK_SET_RATE_PARENT,
3048                         .ops = &clk_branch2_ops,
3049                 },
3050         },
3051 };
3052
3053 static struct clk_branch camss_csi3rdi_clk = {
3054         .halt_reg = 0x3204,
3055         .clkr = {
3056                 .enable_reg = 0x3204,
3057                 .enable_mask = BIT(0),
3058                 .hw.init = &(struct clk_init_data){
3059                         .name = "camss_csi3rdi_clk",
3060                         .parent_hws = (const struct clk_hw*[]){
3061                                 &csi3_clk_src.clkr.hw
3062                         },
3063                         .num_parents = 1,
3064                         .flags = CLK_SET_RATE_PARENT,
3065                         .ops = &clk_branch2_ops,
3066                 },
3067         },
3068 };
3069
3070 static struct clk_branch camss_csi3pix_clk = {
3071         .halt_reg = 0x3214,
3072         .clkr = {
3073                 .enable_reg = 0x3214,
3074                 .enable_mask = BIT(0),
3075                 .hw.init = &(struct clk_init_data){
3076                         .name = "camss_csi3pix_clk",
3077                         .parent_hws = (const struct clk_hw*[]){
3078                                 &csi3_clk_src.clkr.hw
3079                         },
3080                         .num_parents = 1,
3081                         .flags = CLK_SET_RATE_PARENT,
3082                         .ops = &clk_branch2_ops,
3083                 },
3084         },
3085 };
3086
3087 static struct clk_branch camss_ispif_ahb_clk = {
3088         .halt_reg = 0x3224,
3089         .clkr = {
3090                 .enable_reg = 0x3224,
3091                 .enable_mask = BIT(0),
3092                 .hw.init = &(struct clk_init_data){
3093                         .name = "camss_ispif_ahb_clk",
3094                         .parent_hws = (const struct clk_hw*[]){
3095                                 &ahb_clk_src.clkr.hw
3096                         },
3097                         .num_parents = 1,
3098                         .flags = CLK_SET_RATE_PARENT,
3099                         .ops = &clk_branch2_ops,
3100                 },
3101         },
3102 };
3103
3104 static struct clk_branch fd_core_clk = {
3105         .halt_reg = 0x3b68,
3106         .clkr = {
3107                 .enable_reg = 0x3b68,
3108                 .enable_mask = BIT(0),
3109                 .hw.init = &(struct clk_init_data){
3110                         .name = "fd_core_clk",
3111                         .parent_hws = (const struct clk_hw*[]){
3112                                 &fd_core_clk_src.clkr.hw
3113                         },
3114                         .num_parents = 1,
3115                         .flags = CLK_SET_RATE_PARENT,
3116                         .ops = &clk_branch2_ops,
3117                 },
3118         },
3119 };
3120
3121 static struct clk_branch fd_core_uar_clk = {
3122         .halt_reg = 0x3b6c,
3123         .clkr = {
3124                 .enable_reg = 0x3b6c,
3125                 .enable_mask = BIT(0),
3126                 .hw.init = &(struct clk_init_data){
3127                         .name = "fd_core_uar_clk",
3128                         .parent_hws = (const struct clk_hw*[]){
3129                                 &fd_core_clk_src.clkr.hw
3130                         },
3131                         .num_parents = 1,
3132                         .flags = CLK_SET_RATE_PARENT,
3133                         .ops = &clk_branch2_ops,
3134                 },
3135         },
3136 };
3137
3138 static struct clk_branch fd_ahb_clk = {
3139         .halt_reg = 0x3ba74,
3140         .clkr = {
3141                 .enable_reg = 0x3ba74,
3142                 .enable_mask = BIT(0),
3143                 .hw.init = &(struct clk_init_data){
3144                         .name = "fd_ahb_clk",
3145                         .parent_hws = (const struct clk_hw*[]){
3146                                 &ahb_clk_src.clkr.hw
3147                         },
3148                         .num_parents = 1,
3149                         .flags = CLK_SET_RATE_PARENT,
3150                         .ops = &clk_branch2_ops,
3151                 },
3152         },
3153 };
3154
3155 static struct clk_hw *mmcc_msm8996_hws[] = {
3156         &gpll0_div.hw,
3157 };
3158
3159 static struct gdsc mmagic_bimc_gdsc = {
3160         .gdscr = 0x529c,
3161         .pd = {
3162                 .name = "mmagic_bimc",
3163         },
3164         .pwrsts = PWRSTS_OFF_ON,
3165         .flags = ALWAYS_ON,
3166 };
3167
3168 static struct gdsc mmagic_video_gdsc = {
3169         .gdscr = 0x119c,
3170         .gds_hw_ctrl = 0x120c,
3171         .pd = {
3172                 .name = "mmagic_video",
3173         },
3174         .pwrsts = PWRSTS_OFF_ON,
3175         .flags = VOTABLE | ALWAYS_ON,
3176 };
3177
3178 static struct gdsc mmagic_mdss_gdsc = {
3179         .gdscr = 0x247c,
3180         .gds_hw_ctrl = 0x2480,
3181         .pd = {
3182                 .name = "mmagic_mdss",
3183         },
3184         .pwrsts = PWRSTS_OFF_ON,
3185         .flags = VOTABLE | ALWAYS_ON,
3186 };
3187
3188 static struct gdsc mmagic_camss_gdsc = {
3189         .gdscr = 0x3c4c,
3190         .gds_hw_ctrl = 0x3c50,
3191         .pd = {
3192                 .name = "mmagic_camss",
3193         },
3194         .pwrsts = PWRSTS_OFF_ON,
3195         .flags = VOTABLE | ALWAYS_ON,
3196 };
3197
3198 static struct gdsc venus_gdsc = {
3199         .gdscr = 0x1024,
3200         .cxcs = (unsigned int []){ 0x1028, 0x1034, 0x1038 },
3201         .cxc_count = 3,
3202         .pd = {
3203                 .name = "venus",
3204         },
3205         .parent = &mmagic_video_gdsc.pd,
3206         .pwrsts = PWRSTS_OFF_ON,
3207 };
3208
3209 static struct gdsc venus_core0_gdsc = {
3210         .gdscr = 0x1040,
3211         .cxcs = (unsigned int []){ 0x1048 },
3212         .cxc_count = 1,
3213         .pd = {
3214                 .name = "venus_core0",
3215         },
3216         .parent = &venus_gdsc.pd,
3217         .pwrsts = PWRSTS_OFF_ON,
3218         .flags = HW_CTRL,
3219 };
3220
3221 static struct gdsc venus_core1_gdsc = {
3222         .gdscr = 0x1044,
3223         .cxcs = (unsigned int []){ 0x104c },
3224         .cxc_count = 1,
3225         .pd = {
3226                 .name = "venus_core1",
3227         },
3228         .parent = &venus_gdsc.pd,
3229         .pwrsts = PWRSTS_OFF_ON,
3230         .flags = HW_CTRL,
3231 };
3232
3233 static struct gdsc camss_gdsc = {
3234         .gdscr = 0x34a0,
3235         .cxcs = (unsigned int []){ 0x36bc, 0x36c4 },
3236         .cxc_count = 2,
3237         .pd = {
3238                 .name = "camss",
3239         },
3240         .parent = &mmagic_camss_gdsc.pd,
3241         .pwrsts = PWRSTS_OFF_ON,
3242 };
3243
3244 static struct gdsc vfe0_gdsc = {
3245         .gdscr = 0x3664,
3246         .cxcs = (unsigned int []){ 0x36a8 },
3247         .cxc_count = 1,
3248         .pd = {
3249                 .name = "vfe0",
3250         },
3251         .parent = &camss_gdsc.pd,
3252         .pwrsts = PWRSTS_OFF_ON,
3253 };
3254
3255 static struct gdsc vfe1_gdsc = {
3256         .gdscr = 0x3674,
3257         .cxcs = (unsigned int []){ 0x36ac },
3258         .cxc_count = 1,
3259         .pd = {
3260                 .name = "vfe1",
3261         },
3262         .parent = &camss_gdsc.pd,
3263         .pwrsts = PWRSTS_OFF_ON,
3264 };
3265
3266 static struct gdsc jpeg_gdsc = {
3267         .gdscr = 0x35a4,
3268         .cxcs = (unsigned int []){ 0x35a8, 0x35b0, 0x35c0, 0x35b8 },
3269         .cxc_count = 4,
3270         .pd = {
3271                 .name = "jpeg",
3272         },
3273         .parent = &camss_gdsc.pd,
3274         .pwrsts = PWRSTS_OFF_ON,
3275 };
3276
3277 static struct gdsc cpp_gdsc = {
3278         .gdscr = 0x36d4,
3279         .cxcs = (unsigned int []){ 0x36b0 },
3280         .cxc_count = 1,
3281         .pd = {
3282                 .name = "cpp",
3283         },
3284         .parent = &camss_gdsc.pd,
3285         .pwrsts = PWRSTS_OFF_ON,
3286 };
3287
3288 static struct gdsc fd_gdsc = {
3289         .gdscr = 0x3b64,
3290         .cxcs = (unsigned int []){ 0x3b68, 0x3b6c },
3291         .cxc_count = 2,
3292         .pd = {
3293                 .name = "fd",
3294         },
3295         .parent = &camss_gdsc.pd,
3296         .pwrsts = PWRSTS_OFF_ON,
3297 };
3298
3299 static struct gdsc mdss_gdsc = {
3300         .gdscr = 0x2304,
3301         .cxcs = (unsigned int []){ 0x2310, 0x231c },
3302         .cxc_count = 2,
3303         .pd = {
3304                 .name = "mdss",
3305         },
3306         .parent = &mmagic_mdss_gdsc.pd,
3307         .pwrsts = PWRSTS_OFF_ON,
3308 };
3309
3310 static struct gdsc gpu_gdsc = {
3311         .gdscr = 0x4034,
3312         .gds_hw_ctrl = 0x4038,
3313         .pd = {
3314                 .name = "gpu",
3315         },
3316         .pwrsts = PWRSTS_OFF_ON,
3317         .flags = VOTABLE,
3318 };
3319
3320 static struct gdsc gpu_gx_gdsc = {
3321         .gdscr = 0x4024,
3322         .clamp_io_ctrl = 0x4300,
3323         .cxcs = (unsigned int []){ 0x4028 },
3324         .cxc_count = 1,
3325         .pd = {
3326                 .name = "gpu_gx",
3327         },
3328         .pwrsts = PWRSTS_OFF_ON,
3329         .parent = &gpu_gdsc.pd,
3330         .flags = CLAMP_IO,
3331         .supply = "vdd-gfx",
3332 };
3333
3334 static struct clk_regmap *mmcc_msm8996_clocks[] = {
3335         [MMPLL0_EARLY] = &mmpll0_early.clkr,
3336         [MMPLL0_PLL] = &mmpll0.clkr,
3337         [MMPLL1_EARLY] = &mmpll1_early.clkr,
3338         [MMPLL1_PLL] = &mmpll1.clkr,
3339         [MMPLL2_EARLY] = &mmpll2_early.clkr,
3340         [MMPLL2_PLL] = &mmpll2.clkr,
3341         [MMPLL3_EARLY] = &mmpll3_early.clkr,
3342         [MMPLL3_PLL] = &mmpll3.clkr,
3343         [MMPLL4_EARLY] = &mmpll4_early.clkr,
3344         [MMPLL4_PLL] = &mmpll4.clkr,
3345         [MMPLL5_EARLY] = &mmpll5_early.clkr,
3346         [MMPLL5_PLL] = &mmpll5.clkr,
3347         [MMPLL8_EARLY] = &mmpll8_early.clkr,
3348         [MMPLL8_PLL] = &mmpll8.clkr,
3349         [MMPLL9_EARLY] = &mmpll9_early.clkr,
3350         [MMPLL9_PLL] = &mmpll9.clkr,
3351         [AHB_CLK_SRC] = &ahb_clk_src.clkr,
3352         [AXI_CLK_SRC] = &axi_clk_src.clkr,
3353         [MAXI_CLK_SRC] = &maxi_clk_src.clkr,
3354         [GFX3D_CLK_SRC] = &gfx3d_clk_src.rcg.clkr,
3355         [RBBMTIMER_CLK_SRC] = &rbbmtimer_clk_src.clkr,
3356         [ISENSE_CLK_SRC] = &isense_clk_src.clkr,
3357         [RBCPR_CLK_SRC] = &rbcpr_clk_src.clkr,
3358         [VIDEO_CORE_CLK_SRC] = &video_core_clk_src.clkr,
3359         [VIDEO_SUBCORE0_CLK_SRC] = &video_subcore0_clk_src.clkr,
3360         [VIDEO_SUBCORE1_CLK_SRC] = &video_subcore1_clk_src.clkr,
3361         [PCLK0_CLK_SRC] = &pclk0_clk_src.clkr,
3362         [PCLK1_CLK_SRC] = &pclk1_clk_src.clkr,
3363         [MDP_CLK_SRC] = &mdp_clk_src.clkr,
3364         [EXTPCLK_CLK_SRC] = &extpclk_clk_src.clkr,
3365         [VSYNC_CLK_SRC] = &vsync_clk_src.clkr,
3366         [HDMI_CLK_SRC] = &hdmi_clk_src.clkr,
3367         [BYTE0_CLK_SRC] = &byte0_clk_src.clkr,
3368         [BYTE1_CLK_SRC] = &byte1_clk_src.clkr,
3369         [ESC0_CLK_SRC] = &esc0_clk_src.clkr,
3370         [ESC1_CLK_SRC] = &esc1_clk_src.clkr,
3371         [CAMSS_GP0_CLK_SRC] = &camss_gp0_clk_src.clkr,
3372         [CAMSS_GP1_CLK_SRC] = &camss_gp1_clk_src.clkr,
3373         [MCLK0_CLK_SRC] = &mclk0_clk_src.clkr,
3374         [MCLK1_CLK_SRC] = &mclk1_clk_src.clkr,
3375         [MCLK2_CLK_SRC] = &mclk2_clk_src.clkr,
3376         [MCLK3_CLK_SRC] = &mclk3_clk_src.clkr,
3377         [CCI_CLK_SRC] = &cci_clk_src.clkr,
3378         [CSI0PHYTIMER_CLK_SRC] = &csi0phytimer_clk_src.clkr,
3379         [CSI1PHYTIMER_CLK_SRC] = &csi1phytimer_clk_src.clkr,
3380         [CSI2PHYTIMER_CLK_SRC] = &csi2phytimer_clk_src.clkr,
3381         [CSIPHY0_3P_CLK_SRC] = &csiphy0_3p_clk_src.clkr,
3382         [CSIPHY1_3P_CLK_SRC] = &csiphy1_3p_clk_src.clkr,
3383         [CSIPHY2_3P_CLK_SRC] = &csiphy2_3p_clk_src.clkr,
3384         [JPEG0_CLK_SRC] = &jpeg0_clk_src.clkr,
3385         [JPEG2_CLK_SRC] = &jpeg2_clk_src.clkr,
3386         [JPEG_DMA_CLK_SRC] = &jpeg_dma_clk_src.clkr,
3387         [VFE0_CLK_SRC] = &vfe0_clk_src.clkr,
3388         [VFE1_CLK_SRC] = &vfe1_clk_src.clkr,
3389         [CPP_CLK_SRC] = &cpp_clk_src.clkr,
3390         [CSI0_CLK_SRC] = &csi0_clk_src.clkr,
3391         [CSI1_CLK_SRC] = &csi1_clk_src.clkr,
3392         [CSI2_CLK_SRC] = &csi2_clk_src.clkr,
3393         [CSI3_CLK_SRC] = &csi3_clk_src.clkr,
3394         [FD_CORE_CLK_SRC] = &fd_core_clk_src.clkr,
3395         [MMSS_MMAGIC_AHB_CLK] = &mmss_mmagic_ahb_clk.clkr,
3396         [MMSS_MMAGIC_CFG_AHB_CLK] = &mmss_mmagic_cfg_ahb_clk.clkr,
3397         [MMSS_MISC_AHB_CLK] = &mmss_misc_ahb_clk.clkr,
3398         [MMSS_MISC_CXO_CLK] = &mmss_misc_cxo_clk.clkr,
3399         [MMSS_MMAGIC_MAXI_CLK] = &mmss_mmagic_maxi_clk.clkr,
3400         [MMAGIC_CAMSS_AXI_CLK] = &mmagic_camss_axi_clk.clkr,
3401         [MMAGIC_CAMSS_NOC_CFG_AHB_CLK] = &mmagic_camss_noc_cfg_ahb_clk.clkr,
3402         [SMMU_VFE_AHB_CLK] = &smmu_vfe_ahb_clk.clkr,
3403         [SMMU_VFE_AXI_CLK] = &smmu_vfe_axi_clk.clkr,
3404         [SMMU_CPP_AHB_CLK] = &smmu_cpp_ahb_clk.clkr,
3405         [SMMU_CPP_AXI_CLK] = &smmu_cpp_axi_clk.clkr,
3406         [SMMU_JPEG_AHB_CLK] = &smmu_jpeg_ahb_clk.clkr,
3407         [SMMU_JPEG_AXI_CLK] = &smmu_jpeg_axi_clk.clkr,
3408         [MMAGIC_MDSS_AXI_CLK] = &mmagic_mdss_axi_clk.clkr,
3409         [MMAGIC_MDSS_NOC_CFG_AHB_CLK] = &mmagic_mdss_noc_cfg_ahb_clk.clkr,
3410         [SMMU_ROT_AHB_CLK] = &smmu_rot_ahb_clk.clkr,
3411         [SMMU_ROT_AXI_CLK] = &smmu_rot_axi_clk.clkr,
3412         [SMMU_MDP_AHB_CLK] = &smmu_mdp_ahb_clk.clkr,
3413         [SMMU_MDP_AXI_CLK] = &smmu_mdp_axi_clk.clkr,
3414         [MMAGIC_VIDEO_AXI_CLK] = &mmagic_video_axi_clk.clkr,
3415         [MMAGIC_VIDEO_NOC_CFG_AHB_CLK] = &mmagic_video_noc_cfg_ahb_clk.clkr,
3416         [SMMU_VIDEO_AHB_CLK] = &smmu_video_ahb_clk.clkr,
3417         [SMMU_VIDEO_AXI_CLK] = &smmu_video_axi_clk.clkr,
3418         [MMAGIC_BIMC_NOC_CFG_AHB_CLK] = &mmagic_bimc_noc_cfg_ahb_clk.clkr,
3419         [GPU_GX_GFX3D_CLK] = &gpu_gx_gfx3d_clk.clkr,
3420         [GPU_GX_RBBMTIMER_CLK] = &gpu_gx_rbbmtimer_clk.clkr,
3421         [GPU_AHB_CLK] = &gpu_ahb_clk.clkr,
3422         [GPU_AON_ISENSE_CLK] = &gpu_aon_isense_clk.clkr,
3423         [VMEM_MAXI_CLK] = &vmem_maxi_clk.clkr,
3424         [VMEM_AHB_CLK] = &vmem_ahb_clk.clkr,
3425         [MMSS_RBCPR_CLK] = &mmss_rbcpr_clk.clkr,
3426         [MMSS_RBCPR_AHB_CLK] = &mmss_rbcpr_ahb_clk.clkr,
3427         [VIDEO_CORE_CLK] = &video_core_clk.clkr,
3428         [VIDEO_AXI_CLK] = &video_axi_clk.clkr,
3429         [VIDEO_MAXI_CLK] = &video_maxi_clk.clkr,
3430         [VIDEO_AHB_CLK] = &video_ahb_clk.clkr,
3431         [VIDEO_SUBCORE0_CLK] = &video_subcore0_clk.clkr,
3432         [VIDEO_SUBCORE1_CLK] = &video_subcore1_clk.clkr,
3433         [MDSS_AHB_CLK] = &mdss_ahb_clk.clkr,
3434         [MDSS_HDMI_AHB_CLK] = &mdss_hdmi_ahb_clk.clkr,
3435         [MDSS_AXI_CLK] = &mdss_axi_clk.clkr,
3436         [MDSS_PCLK0_CLK] = &mdss_pclk0_clk.clkr,
3437         [MDSS_PCLK1_CLK] = &mdss_pclk1_clk.clkr,
3438         [MDSS_MDP_CLK] = &mdss_mdp_clk.clkr,
3439         [MDSS_EXTPCLK_CLK] = &mdss_extpclk_clk.clkr,
3440         [MDSS_VSYNC_CLK] = &mdss_vsync_clk.clkr,
3441         [MDSS_HDMI_CLK] = &mdss_hdmi_clk.clkr,
3442         [MDSS_BYTE0_CLK] = &mdss_byte0_clk.clkr,
3443         [MDSS_BYTE1_CLK] = &mdss_byte1_clk.clkr,
3444         [MDSS_ESC0_CLK] = &mdss_esc0_clk.clkr,
3445         [MDSS_ESC1_CLK] = &mdss_esc1_clk.clkr,
3446         [CAMSS_TOP_AHB_CLK] = &camss_top_ahb_clk.clkr,
3447         [CAMSS_AHB_CLK] = &camss_ahb_clk.clkr,
3448         [CAMSS_MICRO_AHB_CLK] = &camss_micro_ahb_clk.clkr,
3449         [CAMSS_GP0_CLK] = &camss_gp0_clk.clkr,
3450         [CAMSS_GP1_CLK] = &camss_gp1_clk.clkr,
3451         [CAMSS_MCLK0_CLK] = &camss_mclk0_clk.clkr,
3452         [CAMSS_MCLK1_CLK] = &camss_mclk1_clk.clkr,
3453         [CAMSS_MCLK2_CLK] = &camss_mclk2_clk.clkr,
3454         [CAMSS_MCLK3_CLK] = &camss_mclk3_clk.clkr,
3455         [CAMSS_CCI_CLK] = &camss_cci_clk.clkr,
3456         [CAMSS_CCI_AHB_CLK] = &camss_cci_ahb_clk.clkr,
3457         [CAMSS_CSI0PHYTIMER_CLK] = &camss_csi0phytimer_clk.clkr,
3458         [CAMSS_CSI1PHYTIMER_CLK] = &camss_csi1phytimer_clk.clkr,
3459         [CAMSS_CSI2PHYTIMER_CLK] = &camss_csi2phytimer_clk.clkr,
3460         [CAMSS_CSIPHY0_3P_CLK] = &camss_csiphy0_3p_clk.clkr,
3461         [CAMSS_CSIPHY1_3P_CLK] = &camss_csiphy1_3p_clk.clkr,
3462         [CAMSS_CSIPHY2_3P_CLK] = &camss_csiphy2_3p_clk.clkr,
3463         [CAMSS_JPEG0_CLK] = &camss_jpeg0_clk.clkr,
3464         [CAMSS_JPEG2_CLK] = &camss_jpeg2_clk.clkr,
3465         [CAMSS_JPEG_DMA_CLK] = &camss_jpeg_dma_clk.clkr,
3466         [CAMSS_JPEG_AHB_CLK] = &camss_jpeg_ahb_clk.clkr,
3467         [CAMSS_JPEG_AXI_CLK] = &camss_jpeg_axi_clk.clkr,
3468         [CAMSS_VFE_AHB_CLK] = &camss_vfe_ahb_clk.clkr,
3469         [CAMSS_VFE_AXI_CLK] = &camss_vfe_axi_clk.clkr,
3470         [CAMSS_VFE0_CLK] = &camss_vfe0_clk.clkr,
3471         [CAMSS_VFE0_STREAM_CLK] = &camss_vfe0_stream_clk.clkr,
3472         [CAMSS_VFE0_AHB_CLK] = &camss_vfe0_ahb_clk.clkr,
3473         [CAMSS_VFE1_CLK] = &camss_vfe1_clk.clkr,
3474         [CAMSS_VFE1_STREAM_CLK] = &camss_vfe1_stream_clk.clkr,
3475         [CAMSS_VFE1_AHB_CLK] = &camss_vfe1_ahb_clk.clkr,
3476         [CAMSS_CSI_VFE0_CLK] = &camss_csi_vfe0_clk.clkr,
3477         [CAMSS_CSI_VFE1_CLK] = &camss_csi_vfe1_clk.clkr,
3478         [CAMSS_CPP_VBIF_AHB_CLK] = &camss_cpp_vbif_ahb_clk.clkr,
3479         [CAMSS_CPP_AXI_CLK] = &camss_cpp_axi_clk.clkr,
3480         [CAMSS_CPP_CLK] = &camss_cpp_clk.clkr,
3481         [CAMSS_CPP_AHB_CLK] = &camss_cpp_ahb_clk.clkr,
3482         [CAMSS_CSI0_CLK] = &camss_csi0_clk.clkr,
3483         [CAMSS_CSI0_AHB_CLK] = &camss_csi0_ahb_clk.clkr,
3484         [CAMSS_CSI0PHY_CLK] = &camss_csi0phy_clk.clkr,
3485         [CAMSS_CSI0RDI_CLK] = &camss_csi0rdi_clk.clkr,
3486         [CAMSS_CSI0PIX_CLK] = &camss_csi0pix_clk.clkr,
3487         [CAMSS_CSI1_CLK] = &camss_csi1_clk.clkr,
3488         [CAMSS_CSI1_AHB_CLK] = &camss_csi1_ahb_clk.clkr,
3489         [CAMSS_CSI1PHY_CLK] = &camss_csi1phy_clk.clkr,
3490         [CAMSS_CSI1RDI_CLK] = &camss_csi1rdi_clk.clkr,
3491         [CAMSS_CSI1PIX_CLK] = &camss_csi1pix_clk.clkr,
3492         [CAMSS_CSI2_CLK] = &camss_csi2_clk.clkr,
3493         [CAMSS_CSI2_AHB_CLK] = &camss_csi2_ahb_clk.clkr,
3494         [CAMSS_CSI2PHY_CLK] = &camss_csi2phy_clk.clkr,
3495         [CAMSS_CSI2RDI_CLK] = &camss_csi2rdi_clk.clkr,
3496         [CAMSS_CSI2PIX_CLK] = &camss_csi2pix_clk.clkr,
3497         [CAMSS_CSI3_CLK] = &camss_csi3_clk.clkr,
3498         [CAMSS_CSI3_AHB_CLK] = &camss_csi3_ahb_clk.clkr,
3499         [CAMSS_CSI3PHY_CLK] = &camss_csi3phy_clk.clkr,
3500         [CAMSS_CSI3RDI_CLK] = &camss_csi3rdi_clk.clkr,
3501         [CAMSS_CSI3PIX_CLK] = &camss_csi3pix_clk.clkr,
3502         [CAMSS_ISPIF_AHB_CLK] = &camss_ispif_ahb_clk.clkr,
3503         [FD_CORE_CLK] = &fd_core_clk.clkr,
3504         [FD_CORE_UAR_CLK] = &fd_core_uar_clk.clkr,
3505         [FD_AHB_CLK] = &fd_ahb_clk.clkr,
3506 };
3507
3508 static struct gdsc *mmcc_msm8996_gdscs[] = {
3509         [MMAGIC_BIMC_GDSC] = &mmagic_bimc_gdsc,
3510         [MMAGIC_VIDEO_GDSC] = &mmagic_video_gdsc,
3511         [MMAGIC_MDSS_GDSC] = &mmagic_mdss_gdsc,
3512         [MMAGIC_CAMSS_GDSC] = &mmagic_camss_gdsc,
3513         [VENUS_GDSC] = &venus_gdsc,
3514         [VENUS_CORE0_GDSC] = &venus_core0_gdsc,
3515         [VENUS_CORE1_GDSC] = &venus_core1_gdsc,
3516         [CAMSS_GDSC] = &camss_gdsc,
3517         [VFE0_GDSC] = &vfe0_gdsc,
3518         [VFE1_GDSC] = &vfe1_gdsc,
3519         [JPEG_GDSC] = &jpeg_gdsc,
3520         [CPP_GDSC] = &cpp_gdsc,
3521         [FD_GDSC] = &fd_gdsc,
3522         [MDSS_GDSC] = &mdss_gdsc,
3523         [GPU_GDSC] = &gpu_gdsc,
3524         [GPU_GX_GDSC] = &gpu_gx_gdsc,
3525 };
3526
3527 static const struct qcom_reset_map mmcc_msm8996_resets[] = {
3528         [MMAGICAHB_BCR] = { 0x5020 },
3529         [MMAGIC_CFG_BCR] = { 0x5050 },
3530         [MISC_BCR] = { 0x5010 },
3531         [BTO_BCR] = { 0x5030 },
3532         [MMAGICAXI_BCR] = { 0x5060 },
3533         [MMAGICMAXI_BCR] = { 0x5070 },
3534         [DSA_BCR] = { 0x50a0 },
3535         [MMAGIC_CAMSS_BCR] = { 0x3c40 },
3536         [THROTTLE_CAMSS_BCR] = { 0x3c30 },
3537         [SMMU_VFE_BCR] = { 0x3c00 },
3538         [SMMU_CPP_BCR] = { 0x3c10 },
3539         [SMMU_JPEG_BCR] = { 0x3c20 },
3540         [MMAGIC_MDSS_BCR] = { 0x2470 },
3541         [THROTTLE_MDSS_BCR] = { 0x2460 },
3542         [SMMU_ROT_BCR] = { 0x2440 },
3543         [SMMU_MDP_BCR] = { 0x2450 },
3544         [MMAGIC_VIDEO_BCR] = { 0x1190 },
3545         [THROTTLE_VIDEO_BCR] = { 0x1180 },
3546         [SMMU_VIDEO_BCR] = { 0x1170 },
3547         [MMAGIC_BIMC_BCR] = { 0x5290 },
3548         [GPU_GX_BCR] = { 0x4020 },
3549         [GPU_BCR] = { 0x4030 },
3550         [GPU_AON_BCR] = { 0x4040 },
3551         [VMEM_BCR] = { 0x1200 },
3552         [MMSS_RBCPR_BCR] = { 0x4080 },
3553         [VIDEO_BCR] = { 0x1020 },
3554         [MDSS_BCR] = { 0x2300 },
3555         [CAMSS_TOP_BCR] = { 0x3480 },
3556         [CAMSS_AHB_BCR] = { 0x3488 },
3557         [CAMSS_MICRO_BCR] = { 0x3490 },
3558         [CAMSS_CCI_BCR] = { 0x3340 },
3559         [CAMSS_PHY0_BCR] = { 0x3020 },
3560         [CAMSS_PHY1_BCR] = { 0x3050 },
3561         [CAMSS_PHY2_BCR] = { 0x3080 },
3562         [CAMSS_CSIPHY0_3P_BCR] = { 0x3230 },
3563         [CAMSS_CSIPHY1_3P_BCR] = { 0x3250 },
3564         [CAMSS_CSIPHY2_3P_BCR] = { 0x3270 },
3565         [CAMSS_JPEG_BCR] = { 0x35a0 },
3566         [CAMSS_VFE_BCR] = { 0x36a0 },
3567         [CAMSS_VFE0_BCR] = { 0x3660 },
3568         [CAMSS_VFE1_BCR] = { 0x3670 },
3569         [CAMSS_CSI_VFE0_BCR] = { 0x3700 },
3570         [CAMSS_CSI_VFE1_BCR] = { 0x3710 },
3571         [CAMSS_CPP_TOP_BCR] = { 0x36c0 },
3572         [CAMSS_CPP_BCR] = { 0x36d0 },
3573         [CAMSS_CSI0_BCR] = { 0x30b0 },
3574         [CAMSS_CSI0RDI_BCR] = { 0x30d0 },
3575         [CAMSS_CSI0PIX_BCR] = { 0x30e0 },
3576         [CAMSS_CSI1_BCR] = { 0x3120 },
3577         [CAMSS_CSI1RDI_BCR] = { 0x3140 },
3578         [CAMSS_CSI1PIX_BCR] = { 0x3150 },
3579         [CAMSS_CSI2_BCR] = { 0x3180 },
3580         [CAMSS_CSI2RDI_BCR] = { 0x31a0 },
3581         [CAMSS_CSI2PIX_BCR] = { 0x31b0 },
3582         [CAMSS_CSI3_BCR] = { 0x31e0 },
3583         [CAMSS_CSI3RDI_BCR] = { 0x3200 },
3584         [CAMSS_CSI3PIX_BCR] = { 0x3210 },
3585         [CAMSS_ISPIF_BCR] = { 0x3220 },
3586         [FD_BCR] = { 0x3b60 },
3587         [MMSS_SPDM_RM_BCR] = { 0x300 },
3588 };
3589
3590 static const struct regmap_config mmcc_msm8996_regmap_config = {
3591         .reg_bits       = 32,
3592         .reg_stride     = 4,
3593         .val_bits       = 32,
3594         .max_register   = 0xb008,
3595         .fast_io        = true,
3596 };
3597
3598 static const struct qcom_cc_desc mmcc_msm8996_desc = {
3599         .config = &mmcc_msm8996_regmap_config,
3600         .clks = mmcc_msm8996_clocks,
3601         .num_clks = ARRAY_SIZE(mmcc_msm8996_clocks),
3602         .resets = mmcc_msm8996_resets,
3603         .num_resets = ARRAY_SIZE(mmcc_msm8996_resets),
3604         .gdscs = mmcc_msm8996_gdscs,
3605         .num_gdscs = ARRAY_SIZE(mmcc_msm8996_gdscs),
3606         .clk_hws = mmcc_msm8996_hws,
3607         .num_clk_hws = ARRAY_SIZE(mmcc_msm8996_hws),
3608 };
3609
3610 static const struct of_device_id mmcc_msm8996_match_table[] = {
3611         { .compatible = "qcom,mmcc-msm8996" },
3612         { }
3613 };
3614 MODULE_DEVICE_TABLE(of, mmcc_msm8996_match_table);
3615
3616 static int mmcc_msm8996_probe(struct platform_device *pdev)
3617 {
3618         struct regmap *regmap;
3619
3620         regmap = qcom_cc_map(pdev, &mmcc_msm8996_desc);
3621         if (IS_ERR(regmap))
3622                 return PTR_ERR(regmap);
3623
3624         /* Disable the AHB DCD */
3625         regmap_update_bits(regmap, 0x50d8, BIT(31), 0);
3626         /* Disable the NoC FSM for mmss_mmagic_cfg_ahb_clk */
3627         regmap_update_bits(regmap, 0x5054, BIT(15), 0);
3628
3629         return qcom_cc_really_probe(pdev, &mmcc_msm8996_desc, regmap);
3630 }
3631
3632 static struct platform_driver mmcc_msm8996_driver = {
3633         .probe          = mmcc_msm8996_probe,
3634         .driver         = {
3635                 .name   = "mmcc-msm8996",
3636                 .of_match_table = mmcc_msm8996_match_table,
3637         },
3638 };
3639 module_platform_driver(mmcc_msm8996_driver);
3640
3641 MODULE_DESCRIPTION("QCOM MMCC MSM8996 Driver");
3642 MODULE_LICENSE("GPL v2");
3643 MODULE_ALIAS("platform:mmcc-msm8996");