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