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