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