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