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