1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3 * Copyright (c) 2014-2015, The Linux Foundation. All rights reserved.
4 */
5
6 #include <linux/kernel.h>
7 #include <linux/platform_device.h>
8 #include <linux/module.h>
9 #include <linux/regmap.h>
10 #include <linux/reset-controller.h>
11
12 #include <dt-bindings/clock/qcom,mmcc-apq8084.h>
13 #include <dt-bindings/reset/qcom,mmcc-apq8084.h>
14
15 #include "common.h"
16 #include "clk-regmap.h"
17 #include "clk-pll.h"
18 #include "clk-rcg.h"
19 #include "clk-branch.h"
20 #include "reset.h"
21 #include "gdsc.h"
22
23 enum {
24 P_XO,
25 P_MMPLL0,
26 P_EDPLINK,
27 P_MMPLL1,
28 P_HDMIPLL,
29 P_GPLL0,
30 P_EDPVCO,
31 P_MMPLL4,
32 P_DSI0PLL,
33 P_DSI0PLL_BYTE,
34 P_MMPLL2,
35 P_MMPLL3,
36 P_GPLL1,
37 P_DSI1PLL,
38 P_DSI1PLL_BYTE,
39 P_MMSLEEP,
40 };
41
42 static const struct parent_map mmcc_xo_mmpll0_mmpll1_gpll0_map[] = {
43 { P_XO, 0 },
44 { P_MMPLL0, 1 },
45 { P_MMPLL1, 2 },
46 { P_GPLL0, 5 }
47 };
48
49 static const char * const mmcc_xo_mmpll0_mmpll1_gpll0[] = {
50 "xo",
51 "mmpll0_vote",
52 "mmpll1_vote",
53 "mmss_gpll0_vote",
54 };
55
56 static const struct parent_map mmcc_xo_mmpll0_dsi_hdmi_gpll0_map[] = {
57 { P_XO, 0 },
58 { P_MMPLL0, 1 },
59 { P_HDMIPLL, 4 },
60 { P_GPLL0, 5 },
61 { P_DSI0PLL, 2 },
62 { P_DSI1PLL, 3 }
63 };
64
65 static const char * const mmcc_xo_mmpll0_dsi_hdmi_gpll0[] = {
66 "xo",
67 "mmpll0_vote",
68 "hdmipll",
69 "mmss_gpll0_vote",
70 "dsi0pll",
71 "dsi1pll",
72 };
73
74 static const struct parent_map mmcc_xo_mmpll0_1_2_gpll0_map[] = {
75 { P_XO, 0 },
76 { P_MMPLL0, 1 },
77 { P_MMPLL1, 2 },
78 { P_GPLL0, 5 },
79 { P_MMPLL2, 3 }
80 };
81
82 static const char * const mmcc_xo_mmpll0_1_2_gpll0[] = {
83 "xo",
84 "mmpll0_vote",
85 "mmpll1_vote",
86 "mmss_gpll0_vote",
87 "mmpll2",
88 };
89
90 static const struct parent_map mmcc_xo_mmpll0_1_3_gpll0_map[] = {
91 { P_XO, 0 },
92 { P_MMPLL0, 1 },
93 { P_MMPLL1, 2 },
94 { P_GPLL0, 5 },
95 { P_MMPLL3, 3 }
96 };
97
98 static const char * const mmcc_xo_mmpll0_1_3_gpll0[] = {
99 "xo",
100 "mmpll0_vote",
101 "mmpll1_vote",
102 "mmss_gpll0_vote",
103 "mmpll3",
104 };
105
106 static const struct parent_map mmcc_xo_dsi_hdmi_edp_map[] = {
107 { P_XO, 0 },
108 { P_EDPLINK, 4 },
109 { P_HDMIPLL, 3 },
110 { P_EDPVCO, 5 },
111 { P_DSI0PLL, 1 },
112 { P_DSI1PLL, 2 }
113 };
114
115 static const char * const mmcc_xo_dsi_hdmi_edp[] = {
116 "xo",
117 "edp_link_clk",
118 "hdmipll",
119 "edp_vco_div",
120 "dsi0pll",
121 "dsi1pll",
122 };
123
124 static const struct parent_map mmcc_xo_dsi_hdmi_edp_gpll0_map[] = {
125 { P_XO, 0 },
126 { P_EDPLINK, 4 },
127 { P_HDMIPLL, 3 },
128 { P_GPLL0, 5 },
129 { P_DSI0PLL, 1 },
130 { P_DSI1PLL, 2 }
131 };
132
133 static const char * const mmcc_xo_dsi_hdmi_edp_gpll0[] = {
134 "xo",
135 "edp_link_clk",
136 "hdmipll",
137 "gpll0_vote",
138 "dsi0pll",
139 "dsi1pll",
140 };
141
142 static const struct parent_map mmcc_xo_dsibyte_hdmi_edp_gpll0_map[] = {
143 { P_XO, 0 },
144 { P_EDPLINK, 4 },
145 { P_HDMIPLL, 3 },
146 { P_GPLL0, 5 },
147 { P_DSI0PLL_BYTE, 1 },
148 { P_DSI1PLL_BYTE, 2 }
149 };
150
151 static const char * const mmcc_xo_dsibyte_hdmi_edp_gpll0[] = {
152 "xo",
153 "edp_link_clk",
154 "hdmipll",
155 "gpll0_vote",
156 "dsi0pllbyte",
157 "dsi1pllbyte",
158 };
159
160 static const struct parent_map mmcc_xo_mmpll0_1_4_gpll0_map[] = {
161 { P_XO, 0 },
162 { P_MMPLL0, 1 },
163 { P_MMPLL1, 2 },
164 { P_GPLL0, 5 },
165 { P_MMPLL4, 3 }
166 };
167
168 static const char * const mmcc_xo_mmpll0_1_4_gpll0[] = {
169 "xo",
170 "mmpll0",
171 "mmpll1",
172 "mmpll4",
173 "gpll0",
174 };
175
176 static const struct parent_map mmcc_xo_mmpll0_1_4_gpll1_0_map[] = {
177 { P_XO, 0 },
178 { P_MMPLL0, 1 },
179 { P_MMPLL1, 2 },
180 { P_MMPLL4, 3 },
181 { P_GPLL0, 5 },
182 { P_GPLL1, 4 }
183 };
184
185 static const char * const mmcc_xo_mmpll0_1_4_gpll1_0[] = {
186 "xo",
187 "mmpll0",
188 "mmpll1",
189 "mmpll4",
190 "gpll1",
191 "gpll0",
192 };
193
194 static const struct parent_map mmcc_xo_mmpll0_1_4_gpll1_0_sleep_map[] = {
195 { P_XO, 0 },
196 { P_MMPLL0, 1 },
197 { P_MMPLL1, 2 },
198 { P_MMPLL4, 3 },
199 { P_GPLL0, 5 },
200 { P_GPLL1, 4 },
201 { P_MMSLEEP, 6 }
202 };
203
204 static const char * const mmcc_xo_mmpll0_1_4_gpll1_0_sleep[] = {
205 "xo",
206 "mmpll0",
207 "mmpll1",
208 "mmpll4",
209 "gpll1",
210 "gpll0",
211 "sleep_clk_src",
212 };
213
214 static struct clk_pll mmpll0 = {
215 .l_reg = 0x0004,
216 .m_reg = 0x0008,
217 .n_reg = 0x000c,
218 .config_reg = 0x0014,
219 .mode_reg = 0x0000,
220 .status_reg = 0x001c,
221 .status_bit = 17,
222 .clkr.hw.init = &(struct clk_init_data){
223 .name = "mmpll0",
224 .parent_names = (const char *[]){ "xo" },
225 .num_parents = 1,
226 .ops = &clk_pll_ops,
227 },
228 };
229
230 static struct clk_regmap mmpll0_vote = {
231 .enable_reg = 0x0100,
232 .enable_mask = BIT(0),
233 .hw.init = &(struct clk_init_data){
234 .name = "mmpll0_vote",
235 .parent_names = (const char *[]){ "mmpll0" },
236 .num_parents = 1,
237 .ops = &clk_pll_vote_ops,
238 },
239 };
240
241 static struct clk_pll mmpll1 = {
242 .l_reg = 0x0044,
243 .m_reg = 0x0048,
244 .n_reg = 0x004c,
245 .config_reg = 0x0050,
246 .mode_reg = 0x0040,
247 .status_reg = 0x005c,
248 .status_bit = 17,
249 .clkr.hw.init = &(struct clk_init_data){
250 .name = "mmpll1",
251 .parent_names = (const char *[]){ "xo" },
252 .num_parents = 1,
253 .ops = &clk_pll_ops,
254 },
255 };
256
257 static struct clk_regmap mmpll1_vote = {
258 .enable_reg = 0x0100,
259 .enable_mask = BIT(1),
260 .hw.init = &(struct clk_init_data){
261 .name = "mmpll1_vote",
262 .parent_names = (const char *[]){ "mmpll1" },
263 .num_parents = 1,
264 .ops = &clk_pll_vote_ops,
265 },
266 };
267
268 static struct clk_pll mmpll2 = {
269 .l_reg = 0x4104,
270 .m_reg = 0x4108,
271 .n_reg = 0x410c,
272 .config_reg = 0x4110,
273 .mode_reg = 0x4100,
274 .status_reg = 0x411c,
275 .clkr.hw.init = &(struct clk_init_data){
276 .name = "mmpll2",
277 .parent_names = (const char *[]){ "xo" },
278 .num_parents = 1,
279 .ops = &clk_pll_ops,
280 },
281 };
282
283 static struct clk_pll mmpll3 = {
284 .l_reg = 0x0084,
285 .m_reg = 0x0088,
286 .n_reg = 0x008c,
287 .config_reg = 0x0090,
288 .mode_reg = 0x0080,
289 .status_reg = 0x009c,
290 .status_bit = 17,
291 .clkr.hw.init = &(struct clk_init_data){
292 .name = "mmpll3",
293 .parent_names = (const char *[]){ "xo" },
294 .num_parents = 1,
295 .ops = &clk_pll_ops,
296 },
297 };
298
299 static struct clk_pll mmpll4 = {
300 .l_reg = 0x00a4,
301 .m_reg = 0x00a8,
302 .n_reg = 0x00ac,
303 .config_reg = 0x00b0,
304 .mode_reg = 0x0080,
305 .status_reg = 0x00bc,
306 .clkr.hw.init = &(struct clk_init_data){
307 .name = "mmpll4",
308 .parent_names = (const char *[]){ "xo" },
309 .num_parents = 1,
310 .ops = &clk_pll_ops,
311 },
312 };
313
314 static struct clk_rcg2 mmss_ahb_clk_src = {
315 .cmd_rcgr = 0x5000,
316 .hid_width = 5,
317 .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
318 .clkr.hw.init = &(struct clk_init_data){
319 .name = "mmss_ahb_clk_src",
320 .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0,
321 .num_parents = 4,
322 .ops = &clk_rcg2_ops,
323 },
324 };
325
326 static struct freq_tbl ftbl_mmss_axi_clk[] = {
327 F(19200000, P_XO, 1, 0, 0),
328 F(37500000, P_GPLL0, 16, 0, 0),
329 F(50000000, P_GPLL0, 12, 0, 0),
330 F(75000000, P_GPLL0, 8, 0, 0),
331 F(100000000, P_GPLL0, 6, 0, 0),
332 F(150000000, P_GPLL0, 4, 0, 0),
333 F(333430000, P_MMPLL1, 3.5, 0, 0),
334 F(400000000, P_MMPLL0, 2, 0, 0),
335 F(466800000, P_MMPLL1, 2.5, 0, 0),
336 { }
337 };
338
339 static struct clk_rcg2 mmss_axi_clk_src = {
340 .cmd_rcgr = 0x5040,
341 .hid_width = 5,
342 .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
343 .freq_tbl = ftbl_mmss_axi_clk,
344 .clkr.hw.init = &(struct clk_init_data){
345 .name = "mmss_axi_clk_src",
346 .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0,
347 .num_parents = 4,
348 .ops = &clk_rcg2_ops,
349 },
350 };
351
352 static struct freq_tbl ftbl_ocmemnoc_clk[] = {
353 F(19200000, P_XO, 1, 0, 0),
354 F(37500000, P_GPLL0, 16, 0, 0),
355 F(50000000, P_GPLL0, 12, 0, 0),
356 F(75000000, P_GPLL0, 8, 0, 0),
357 F(109090000, P_GPLL0, 5.5, 0, 0),
358 F(150000000, P_GPLL0, 4, 0, 0),
359 F(228570000, P_MMPLL0, 3.5, 0, 0),
360 F(320000000, P_MMPLL0, 2.5, 0, 0),
361 { }
362 };
363
364 static struct clk_rcg2 ocmemnoc_clk_src = {
365 .cmd_rcgr = 0x5090,
366 .hid_width = 5,
367 .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
368 .freq_tbl = ftbl_ocmemnoc_clk,
369 .clkr.hw.init = &(struct clk_init_data){
370 .name = "ocmemnoc_clk_src",
371 .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0,
372 .num_parents = 4,
373 .ops = &clk_rcg2_ops,
374 },
375 };
376
377 static struct freq_tbl ftbl_camss_csi0_3_clk[] = {
378 F(100000000, P_GPLL0, 6, 0, 0),
379 F(200000000, P_MMPLL0, 4, 0, 0),
380 { }
381 };
382
383 static struct clk_rcg2 csi0_clk_src = {
384 .cmd_rcgr = 0x3090,
385 .hid_width = 5,
386 .parent_map = mmcc_xo_mmpll0_1_4_gpll0_map,
387 .freq_tbl = ftbl_camss_csi0_3_clk,
388 .clkr.hw.init = &(struct clk_init_data){
389 .name = "csi0_clk_src",
390 .parent_names = mmcc_xo_mmpll0_1_4_gpll0,
391 .num_parents = 5,
392 .ops = &clk_rcg2_ops,
393 },
394 };
395
396 static struct clk_rcg2 csi1_clk_src = {
397 .cmd_rcgr = 0x3100,
398 .hid_width = 5,
399 .parent_map = mmcc_xo_mmpll0_1_4_gpll0_map,
400 .freq_tbl = ftbl_camss_csi0_3_clk,
401 .clkr.hw.init = &(struct clk_init_data){
402 .name = "csi1_clk_src",
403 .parent_names = mmcc_xo_mmpll0_1_4_gpll0,
404 .num_parents = 5,
405 .ops = &clk_rcg2_ops,
406 },
407 };
408
409 static struct clk_rcg2 csi2_clk_src = {
410 .cmd_rcgr = 0x3160,
411 .hid_width = 5,
412 .parent_map = mmcc_xo_mmpll0_1_4_gpll0_map,
413 .freq_tbl = ftbl_camss_csi0_3_clk,
414 .clkr.hw.init = &(struct clk_init_data){
415 .name = "csi2_clk_src",
416 .parent_names = mmcc_xo_mmpll0_1_4_gpll0,
417 .num_parents = 5,
418 .ops = &clk_rcg2_ops,
419 },
420 };
421
422 static struct clk_rcg2 csi3_clk_src = {
423 .cmd_rcgr = 0x31c0,
424 .hid_width = 5,
425 .parent_map = mmcc_xo_mmpll0_1_4_gpll0_map,
426 .freq_tbl = ftbl_camss_csi0_3_clk,
427 .clkr.hw.init = &(struct clk_init_data){
428 .name = "csi3_clk_src",
429 .parent_names = mmcc_xo_mmpll0_1_4_gpll0,
430 .num_parents = 5,
431 .ops = &clk_rcg2_ops,
432 },
433 };
434
435 static struct freq_tbl ftbl_camss_vfe_vfe0_1_clk[] = {
436 F(37500000, P_GPLL0, 16, 0, 0),
437 F(50000000, P_GPLL0, 12, 0, 0),
438 F(60000000, P_GPLL0, 10, 0, 0),
439 F(80000000, P_GPLL0, 7.5, 0, 0),
440 F(100000000, P_GPLL0, 6, 0, 0),
441 F(109090000, P_GPLL0, 5.5, 0, 0),
442 F(133330000, P_GPLL0, 4.5, 0, 0),
443 F(200000000, P_GPLL0, 3, 0, 0),
444 F(228570000, P_MMPLL0, 3.5, 0, 0),
445 F(266670000, P_MMPLL0, 3, 0, 0),
446 F(320000000, P_MMPLL0, 2.5, 0, 0),
447 F(465000000, P_MMPLL4, 2, 0, 0),
448 F(600000000, P_GPLL0, 1, 0, 0),
449 { }
450 };
451
452 static struct clk_rcg2 vfe0_clk_src = {
453 .cmd_rcgr = 0x3600,
454 .hid_width = 5,
455 .parent_map = mmcc_xo_mmpll0_1_4_gpll0_map,
456 .freq_tbl = ftbl_camss_vfe_vfe0_1_clk,
457 .clkr.hw.init = &(struct clk_init_data){
458 .name = "vfe0_clk_src",
459 .parent_names = mmcc_xo_mmpll0_1_4_gpll0,
460 .num_parents = 5,
461 .ops = &clk_rcg2_ops,
462 },
463 };
464
465 static struct clk_rcg2 vfe1_clk_src = {
466 .cmd_rcgr = 0x3620,
467 .hid_width = 5,
468 .parent_map = mmcc_xo_mmpll0_1_4_gpll0_map,
469 .freq_tbl = ftbl_camss_vfe_vfe0_1_clk,
470 .clkr.hw.init = &(struct clk_init_data){
471 .name = "vfe1_clk_src",
472 .parent_names = mmcc_xo_mmpll0_1_4_gpll0,
473 .num_parents = 5,
474 .ops = &clk_rcg2_ops,
475 },
476 };
477
478 static struct freq_tbl ftbl_mdss_mdp_clk[] = {
479 F(37500000, P_GPLL0, 16, 0, 0),
480 F(60000000, P_GPLL0, 10, 0, 0),
481 F(75000000, P_GPLL0, 8, 0, 0),
482 F(85710000, P_GPLL0, 7, 0, 0),
483 F(100000000, P_GPLL0, 6, 0, 0),
484 F(150000000, P_GPLL0, 4, 0, 0),
485 F(160000000, P_MMPLL0, 5, 0, 0),
486 F(200000000, P_MMPLL0, 4, 0, 0),
487 F(228570000, P_MMPLL0, 3.5, 0, 0),
488 F(300000000, P_GPLL0, 2, 0, 0),
489 F(320000000, P_MMPLL0, 2.5, 0, 0),
490 { }
491 };
492
493 static struct clk_rcg2 mdp_clk_src = {
494 .cmd_rcgr = 0x2040,
495 .hid_width = 5,
496 .parent_map = mmcc_xo_mmpll0_dsi_hdmi_gpll0_map,
497 .freq_tbl = ftbl_mdss_mdp_clk,
498 .clkr.hw.init = &(struct clk_init_data){
499 .name = "mdp_clk_src",
500 .parent_names = mmcc_xo_mmpll0_dsi_hdmi_gpll0,
501 .num_parents = 6,
502 .ops = &clk_rcg2_ops,
503 },
504 };
505
506 static struct clk_rcg2 gfx3d_clk_src = {
507 .cmd_rcgr = 0x4000,
508 .hid_width = 5,
509 .parent_map = mmcc_xo_mmpll0_1_2_gpll0_map,
510 .clkr.hw.init = &(struct clk_init_data){
511 .name = "gfx3d_clk_src",
512 .parent_names = mmcc_xo_mmpll0_1_2_gpll0,
513 .num_parents = 5,
514 .ops = &clk_rcg2_ops,
515 },
516 };
517
518 static struct freq_tbl ftbl_camss_jpeg_jpeg0_2_clk[] = {
519 F(75000000, P_GPLL0, 8, 0, 0),
520 F(133330000, P_GPLL0, 4.5, 0, 0),
521 F(200000000, P_GPLL0, 3, 0, 0),
522 F(228570000, P_MMPLL0, 3.5, 0, 0),
523 F(266670000, P_MMPLL0, 3, 0, 0),
524 F(320000000, P_MMPLL0, 2.5, 0, 0),
525 { }
526 };
527
528 static struct clk_rcg2 jpeg0_clk_src = {
529 .cmd_rcgr = 0x3500,
530 .hid_width = 5,
531 .parent_map = mmcc_xo_mmpll0_1_4_gpll0_map,
532 .freq_tbl = ftbl_camss_jpeg_jpeg0_2_clk,
533 .clkr.hw.init = &(struct clk_init_data){
534 .name = "jpeg0_clk_src",
535 .parent_names = mmcc_xo_mmpll0_1_4_gpll0,
536 .num_parents = 5,
537 .ops = &clk_rcg2_ops,
538 },
539 };
540
541 static struct clk_rcg2 jpeg1_clk_src = {
542 .cmd_rcgr = 0x3520,
543 .hid_width = 5,
544 .parent_map = mmcc_xo_mmpll0_1_4_gpll0_map,
545 .freq_tbl = ftbl_camss_jpeg_jpeg0_2_clk,
546 .clkr.hw.init = &(struct clk_init_data){
547 .name = "jpeg1_clk_src",
548 .parent_names = mmcc_xo_mmpll0_1_4_gpll0,
549 .num_parents = 5,
550 .ops = &clk_rcg2_ops,
551 },
552 };
553
554 static struct clk_rcg2 jpeg2_clk_src = {
555 .cmd_rcgr = 0x3540,
556 .hid_width = 5,
557 .parent_map = mmcc_xo_mmpll0_1_4_gpll0_map,
558 .freq_tbl = ftbl_camss_jpeg_jpeg0_2_clk,
559 .clkr.hw.init = &(struct clk_init_data){
560 .name = "jpeg2_clk_src",
561 .parent_names = mmcc_xo_mmpll0_1_4_gpll0,
562 .num_parents = 5,
563 .ops = &clk_rcg2_ops,
564 },
565 };
566
567 static struct clk_rcg2 pclk0_clk_src = {
568 .cmd_rcgr = 0x2000,
569 .mnd_width = 8,
570 .hid_width = 5,
571 .parent_map = mmcc_xo_dsi_hdmi_edp_gpll0_map,
572 .clkr.hw.init = &(struct clk_init_data){
573 .name = "pclk0_clk_src",
574 .parent_names = mmcc_xo_dsi_hdmi_edp_gpll0,
575 .num_parents = 6,
576 .ops = &clk_pixel_ops,
577 .flags = CLK_SET_RATE_PARENT,
578 },
579 };
580
581 static struct clk_rcg2 pclk1_clk_src = {
582 .cmd_rcgr = 0x2020,
583 .mnd_width = 8,
584 .hid_width = 5,
585 .parent_map = mmcc_xo_dsi_hdmi_edp_gpll0_map,
586 .clkr.hw.init = &(struct clk_init_data){
587 .name = "pclk1_clk_src",
588 .parent_names = mmcc_xo_dsi_hdmi_edp_gpll0,
589 .num_parents = 6,
590 .ops = &clk_pixel_ops,
591 .flags = CLK_SET_RATE_PARENT,
592 },
593 };
594
595 static struct freq_tbl ftbl_venus0_vcodec0_clk[] = {
596 F(50000000, P_GPLL0, 12, 0, 0),
597 F(100000000, P_GPLL0, 6, 0, 0),
598 F(133330000, P_GPLL0, 4.5, 0, 0),
599 F(200000000, P_MMPLL0, 4, 0, 0),
600 F(266670000, P_MMPLL0, 3, 0, 0),
601 F(465000000, P_MMPLL3, 2, 0, 0),
602 { }
603 };
604
605 static struct clk_rcg2 vcodec0_clk_src = {
606 .cmd_rcgr = 0x1000,
607 .mnd_width = 8,
608 .hid_width = 5,
609 .parent_map = mmcc_xo_mmpll0_1_3_gpll0_map,
610 .freq_tbl = ftbl_venus0_vcodec0_clk,
611 .clkr.hw.init = &(struct clk_init_data){
612 .name = "vcodec0_clk_src",
613 .parent_names = mmcc_xo_mmpll0_1_3_gpll0,
614 .num_parents = 5,
615 .ops = &clk_rcg2_ops,
616 },
617 };
618
619 static struct freq_tbl ftbl_avsync_vp_clk[] = {
620 F(150000000, P_GPLL0, 4, 0, 0),
621 F(320000000, P_MMPLL0, 2.5, 0, 0),
622 { }
623 };
624
625 static struct clk_rcg2 vp_clk_src = {
626 .cmd_rcgr = 0x2430,
627 .hid_width = 5,
628 .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
629 .freq_tbl = ftbl_avsync_vp_clk,
630 .clkr.hw.init = &(struct clk_init_data){
631 .name = "vp_clk_src",
632 .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0,
633 .num_parents = 4,
634 .ops = &clk_rcg2_ops,
635 },
636 };
637
638 static struct freq_tbl ftbl_camss_cci_cci_clk[] = {
639 F(19200000, P_XO, 1, 0, 0),
640 { }
641 };
642
643 static struct clk_rcg2 cci_clk_src = {
644 .cmd_rcgr = 0x3300,
645 .mnd_width = 8,
646 .hid_width = 5,
647 .parent_map = mmcc_xo_mmpll0_1_4_gpll1_0_map,
648 .freq_tbl = ftbl_camss_cci_cci_clk,
649 .clkr.hw.init = &(struct clk_init_data){
650 .name = "cci_clk_src",
651 .parent_names = mmcc_xo_mmpll0_1_4_gpll1_0,
652 .num_parents = 6,
653 .ops = &clk_rcg2_ops,
654 },
655 };
656
657 static struct freq_tbl ftbl_camss_gp0_1_clk[] = {
658 F(10000, P_XO, 16, 1, 120),
659 F(24000, P_XO, 16, 1, 50),
660 F(6000000, P_GPLL0, 10, 1, 10),
661 F(12000000, P_GPLL0, 10, 1, 5),
662 F(13000000, P_GPLL0, 4, 13, 150),
663 F(24000000, P_GPLL0, 5, 1, 5),
664 { }
665 };
666
667 static struct clk_rcg2 camss_gp0_clk_src = {
668 .cmd_rcgr = 0x3420,
669 .mnd_width = 8,
670 .hid_width = 5,
671 .parent_map = mmcc_xo_mmpll0_1_4_gpll1_0_sleep_map,
672 .freq_tbl = ftbl_camss_gp0_1_clk,
673 .clkr.hw.init = &(struct clk_init_data){
674 .name = "camss_gp0_clk_src",
675 .parent_names = mmcc_xo_mmpll0_1_4_gpll1_0_sleep,
676 .num_parents = 7,
677 .ops = &clk_rcg2_ops,
678 },
679 };
680
681 static struct clk_rcg2 camss_gp1_clk_src = {
682 .cmd_rcgr = 0x3450,
683 .mnd_width = 8,
684 .hid_width = 5,
685 .parent_map = mmcc_xo_mmpll0_1_4_gpll1_0_sleep_map,
686 .freq_tbl = ftbl_camss_gp0_1_clk,
687 .clkr.hw.init = &(struct clk_init_data){
688 .name = "camss_gp1_clk_src",
689 .parent_names = mmcc_xo_mmpll0_1_4_gpll1_0_sleep,
690 .num_parents = 7,
691 .ops = &clk_rcg2_ops,
692 },
693 };
694
695 static struct freq_tbl ftbl_camss_mclk0_3_clk[] = {
696 F(4800000, P_XO, 4, 0, 0),
697 F(6000000, P_GPLL0, 10, 1, 10),
698 F(8000000, P_GPLL0, 15, 1, 5),
699 F(9600000, P_XO, 2, 0, 0),
700 F(16000000, P_MMPLL0, 10, 1, 5),
701 F(19200000, P_XO, 1, 0, 0),
702 F(24000000, P_GPLL0, 5, 1, 5),
703 F(32000000, P_MMPLL0, 5, 1, 5),
704 F(48000000, P_GPLL0, 12.5, 0, 0),
705 F(64000000, P_MMPLL0, 12.5, 0, 0),
706 { }
707 };
708
709 static struct clk_rcg2 mclk0_clk_src = {
710 .cmd_rcgr = 0x3360,
711 .mnd_width = 8,
712 .hid_width = 5,
713 .parent_map = mmcc_xo_mmpll0_1_4_gpll1_0_map,
714 .freq_tbl = ftbl_camss_mclk0_3_clk,
715 .clkr.hw.init = &(struct clk_init_data){
716 .name = "mclk0_clk_src",
717 .parent_names = mmcc_xo_mmpll0_1_4_gpll1_0,
718 .num_parents = 6,
719 .ops = &clk_rcg2_ops,
720 },
721 };
722
723 static struct clk_rcg2 mclk1_clk_src = {
724 .cmd_rcgr = 0x3390,
725 .mnd_width = 8,
726 .hid_width = 5,
727 .parent_map = mmcc_xo_mmpll0_1_4_gpll1_0_map,
728 .freq_tbl = ftbl_camss_mclk0_3_clk,
729 .clkr.hw.init = &(struct clk_init_data){
730 .name = "mclk1_clk_src",
731 .parent_names = mmcc_xo_mmpll0_1_4_gpll1_0,
732 .num_parents = 6,
733 .ops = &clk_rcg2_ops,
734 },
735 };
736
737 static struct clk_rcg2 mclk2_clk_src = {
738 .cmd_rcgr = 0x33c0,
739 .mnd_width = 8,
740 .hid_width = 5,
741 .parent_map = mmcc_xo_mmpll0_1_4_gpll1_0_map,
742 .freq_tbl = ftbl_camss_mclk0_3_clk,
743 .clkr.hw.init = &(struct clk_init_data){
744 .name = "mclk2_clk_src",
745 .parent_names = mmcc_xo_mmpll0_1_4_gpll1_0,
746 .num_parents = 6,
747 .ops = &clk_rcg2_ops,
748 },
749 };
750
751 static struct clk_rcg2 mclk3_clk_src = {
752 .cmd_rcgr = 0x33f0,
753 .mnd_width = 8,
754 .hid_width = 5,
755 .parent_map = mmcc_xo_mmpll0_1_4_gpll1_0_map,
756 .freq_tbl = ftbl_camss_mclk0_3_clk,
757 .clkr.hw.init = &(struct clk_init_data){
758 .name = "mclk3_clk_src",
759 .parent_names = mmcc_xo_mmpll0_1_4_gpll1_0,
760 .num_parents = 6,
761 .ops = &clk_rcg2_ops,
762 },
763 };
764
765 static struct freq_tbl ftbl_camss_phy0_2_csi0_2phytimer_clk[] = {
766 F(100000000, P_GPLL0, 6, 0, 0),
767 F(200000000, P_MMPLL0, 4, 0, 0),
768 { }
769 };
770
771 static struct clk_rcg2 csi0phytimer_clk_src = {
772 .cmd_rcgr = 0x3000,
773 .hid_width = 5,
774 .parent_map = mmcc_xo_mmpll0_1_4_gpll0_map,
775 .freq_tbl = ftbl_camss_phy0_2_csi0_2phytimer_clk,
776 .clkr.hw.init = &(struct clk_init_data){
777 .name = "csi0phytimer_clk_src",
778 .parent_names = mmcc_xo_mmpll0_1_4_gpll0,
779 .num_parents = 5,
780 .ops = &clk_rcg2_ops,
781 },
782 };
783
784 static struct clk_rcg2 csi1phytimer_clk_src = {
785 .cmd_rcgr = 0x3030,
786 .hid_width = 5,
787 .parent_map = mmcc_xo_mmpll0_1_4_gpll0_map,
788 .freq_tbl = ftbl_camss_phy0_2_csi0_2phytimer_clk,
789 .clkr.hw.init = &(struct clk_init_data){
790 .name = "csi1phytimer_clk_src",
791 .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0,
792 .num_parents = 5,
793 .ops = &clk_rcg2_ops,
794 },
795 };
796
797 static struct clk_rcg2 csi2phytimer_clk_src = {
798 .cmd_rcgr = 0x3060,
799 .hid_width = 5,
800 .parent_map = mmcc_xo_mmpll0_1_4_gpll0_map,
801 .freq_tbl = ftbl_camss_phy0_2_csi0_2phytimer_clk,
802 .clkr.hw.init = &(struct clk_init_data){
803 .name = "csi2phytimer_clk_src",
804 .parent_names = mmcc_xo_mmpll0_1_4_gpll0,
805 .num_parents = 5,
806 .ops = &clk_rcg2_ops,
807 },
808 };
809
810 static struct freq_tbl ftbl_camss_vfe_cpp_clk[] = {
811 F(133330000, P_GPLL0, 4.5, 0, 0),
812 F(266670000, P_MMPLL0, 3, 0, 0),
813 F(320000000, P_MMPLL0, 2.5, 0, 0),
814 F(372000000, P_MMPLL4, 2.5, 0, 0),
815 F(465000000, P_MMPLL4, 2, 0, 0),
816 F(600000000, P_GPLL0, 1, 0, 0),
817 { }
818 };
819
820 static struct clk_rcg2 cpp_clk_src = {
821 .cmd_rcgr = 0x3640,
822 .hid_width = 5,
823 .parent_map = mmcc_xo_mmpll0_1_4_gpll0_map,
824 .freq_tbl = ftbl_camss_vfe_cpp_clk,
825 .clkr.hw.init = &(struct clk_init_data){
826 .name = "cpp_clk_src",
827 .parent_names = mmcc_xo_mmpll0_1_4_gpll0,
828 .num_parents = 5,
829 .ops = &clk_rcg2_ops,
830 },
831 };
832
833 static struct clk_rcg2 byte0_clk_src = {
834 .cmd_rcgr = 0x2120,
835 .hid_width = 5,
836 .parent_map = mmcc_xo_dsibyte_hdmi_edp_gpll0_map,
837 .clkr.hw.init = &(struct clk_init_data){
838 .name = "byte0_clk_src",
839 .parent_names = mmcc_xo_dsibyte_hdmi_edp_gpll0,
840 .num_parents = 6,
841 .ops = &clk_byte2_ops,
842 .flags = CLK_SET_RATE_PARENT,
843 },
844 };
845
846 static struct clk_rcg2 byte1_clk_src = {
847 .cmd_rcgr = 0x2140,
848 .hid_width = 5,
849 .parent_map = mmcc_xo_dsibyte_hdmi_edp_gpll0_map,
850 .clkr.hw.init = &(struct clk_init_data){
851 .name = "byte1_clk_src",
852 .parent_names = mmcc_xo_dsibyte_hdmi_edp_gpll0,
853 .num_parents = 6,
854 .ops = &clk_byte2_ops,
855 .flags = CLK_SET_RATE_PARENT,
856 },
857 };
858
859 static struct freq_tbl ftbl_mdss_edpaux_clk[] = {
860 F(19200000, P_XO, 1, 0, 0),
861 { }
862 };
863
864 static struct clk_rcg2 edpaux_clk_src = {
865 .cmd_rcgr = 0x20e0,
866 .hid_width = 5,
867 .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
868 .freq_tbl = ftbl_mdss_edpaux_clk,
869 .clkr.hw.init = &(struct clk_init_data){
870 .name = "edpaux_clk_src",
871 .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0,
872 .num_parents = 4,
873 .ops = &clk_rcg2_ops,
874 },
875 };
876
877 static struct freq_tbl ftbl_mdss_edplink_clk[] = {
878 F(135000000, P_EDPLINK, 2, 0, 0),
879 F(270000000, P_EDPLINK, 11, 0, 0),
880 { }
881 };
882
883 static struct clk_rcg2 edplink_clk_src = {
884 .cmd_rcgr = 0x20c0,
885 .hid_width = 5,
886 .parent_map = mmcc_xo_dsi_hdmi_edp_gpll0_map,
887 .freq_tbl = ftbl_mdss_edplink_clk,
888 .clkr.hw.init = &(struct clk_init_data){
889 .name = "edplink_clk_src",
890 .parent_names = mmcc_xo_dsi_hdmi_edp_gpll0,
891 .num_parents = 6,
892 .ops = &clk_rcg2_ops,
893 .flags = CLK_SET_RATE_PARENT,
894 },
895 };
896
897 static struct freq_tbl edp_pixel_freq_tbl[] = {
898 { .src = P_EDPVCO },
899 { }
900 };
901
902 static struct clk_rcg2 edppixel_clk_src = {
903 .cmd_rcgr = 0x20a0,
904 .mnd_width = 8,
905 .hid_width = 5,
906 .parent_map = mmcc_xo_dsi_hdmi_edp_map,
907 .freq_tbl = edp_pixel_freq_tbl,
908 .clkr.hw.init = &(struct clk_init_data){
909 .name = "edppixel_clk_src",
910 .parent_names = mmcc_xo_dsi_hdmi_edp,
911 .num_parents = 6,
912 .ops = &clk_edp_pixel_ops,
913 },
914 };
915
916 static struct freq_tbl ftbl_mdss_esc0_1_clk[] = {
917 F(19200000, P_XO, 1, 0, 0),
918 { }
919 };
920
921 static struct clk_rcg2 esc0_clk_src = {
922 .cmd_rcgr = 0x2160,
923 .hid_width = 5,
924 .parent_map = mmcc_xo_dsibyte_hdmi_edp_gpll0_map,
925 .freq_tbl = ftbl_mdss_esc0_1_clk,
926 .clkr.hw.init = &(struct clk_init_data){
927 .name = "esc0_clk_src",
928 .parent_names = mmcc_xo_dsibyte_hdmi_edp_gpll0,
929 .num_parents = 6,
930 .ops = &clk_rcg2_ops,
931 },
932 };
933
934 static struct clk_rcg2 esc1_clk_src = {
935 .cmd_rcgr = 0x2180,
936 .hid_width = 5,
937 .parent_map = mmcc_xo_dsibyte_hdmi_edp_gpll0_map,
938 .freq_tbl = ftbl_mdss_esc0_1_clk,
939 .clkr.hw.init = &(struct clk_init_data){
940 .name = "esc1_clk_src",
941 .parent_names = mmcc_xo_dsibyte_hdmi_edp_gpll0,
942 .num_parents = 6,
943 .ops = &clk_rcg2_ops,
944 },
945 };
946
947 static struct freq_tbl extpclk_freq_tbl[] = {
948 { .src = P_HDMIPLL },
949 { }
950 };
951
952 static struct clk_rcg2 extpclk_clk_src = {
953 .cmd_rcgr = 0x2060,
954 .hid_width = 5,
955 .parent_map = mmcc_xo_dsi_hdmi_edp_gpll0_map,
956 .freq_tbl = extpclk_freq_tbl,
957 .clkr.hw.init = &(struct clk_init_data){
958 .name = "extpclk_clk_src",
959 .parent_names = mmcc_xo_dsi_hdmi_edp_gpll0,
960 .num_parents = 6,
961 .ops = &clk_byte_ops,
962 .flags = CLK_SET_RATE_PARENT,
963 },
964 };
965
966 static struct freq_tbl ftbl_mdss_hdmi_clk[] = {
967 F(19200000, P_XO, 1, 0, 0),
968 { }
969 };
970
971 static struct clk_rcg2 hdmi_clk_src = {
972 .cmd_rcgr = 0x2100,
973 .hid_width = 5,
974 .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
975 .freq_tbl = ftbl_mdss_hdmi_clk,
976 .clkr.hw.init = &(struct clk_init_data){
977 .name = "hdmi_clk_src",
978 .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0,
979 .num_parents = 4,
980 .ops = &clk_rcg2_ops,
981 },
982 };
983
984 static struct freq_tbl ftbl_mdss_vsync_clk[] = {
985 F(19200000, P_XO, 1, 0, 0),
986 { }
987 };
988
989 static struct clk_rcg2 vsync_clk_src = {
990 .cmd_rcgr = 0x2080,
991 .hid_width = 5,
992 .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
993 .freq_tbl = ftbl_mdss_vsync_clk,
994 .clkr.hw.init = &(struct clk_init_data){
995 .name = "vsync_clk_src",
996 .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0,
997 .num_parents = 4,
998 .ops = &clk_rcg2_ops,
999 },
1000 };
1001
1002 static struct freq_tbl ftbl_mmss_rbcpr_clk[] = {
1003 F(50000000, P_GPLL0, 12, 0, 0),
1004 { }
1005 };
1006
1007 static struct clk_rcg2 rbcpr_clk_src = {
1008 .cmd_rcgr = 0x4060,
1009 .hid_width = 5,
1010 .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
1011 .freq_tbl = ftbl_mmss_rbcpr_clk,
1012 .clkr.hw.init = &(struct clk_init_data){
1013 .name = "rbcpr_clk_src",
1014 .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0,
1015 .num_parents = 4,
1016 .ops = &clk_rcg2_ops,
1017 },
1018 };
1019
1020 static struct freq_tbl ftbl_oxili_rbbmtimer_clk[] = {
1021 F(19200000, P_XO, 1, 0, 0),
1022 { }
1023 };
1024
1025 static struct clk_rcg2 rbbmtimer_clk_src = {
1026 .cmd_rcgr = 0x4090,
1027 .hid_width = 5,
1028 .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
1029 .freq_tbl = ftbl_oxili_rbbmtimer_clk,
1030 .clkr.hw.init = &(struct clk_init_data){
1031 .name = "rbbmtimer_clk_src",
1032 .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0,
1033 .num_parents = 4,
1034 .ops = &clk_rcg2_ops,
1035 },
1036 };
1037
1038 static struct freq_tbl ftbl_vpu_maple_clk[] = {
1039 F(50000000, P_GPLL0, 12, 0, 0),
1040 F(100000000, P_GPLL0, 6, 0, 0),
1041 F(133330000, P_GPLL0, 4.5, 0, 0),
1042 F(200000000, P_MMPLL0, 4, 0, 0),
1043 F(266670000, P_MMPLL0, 3, 0, 0),
1044 F(465000000, P_MMPLL3, 2, 0, 0),
1045 { }
1046 };
1047
1048 static struct clk_rcg2 maple_clk_src = {
1049 .cmd_rcgr = 0x1320,
1050 .hid_width = 5,
1051 .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
1052 .freq_tbl = ftbl_vpu_maple_clk,
1053 .clkr.hw.init = &(struct clk_init_data){
1054 .name = "maple_clk_src",
1055 .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0,
1056 .num_parents = 4,
1057 .ops = &clk_rcg2_ops,
1058 },
1059 };
1060
1061 static struct freq_tbl ftbl_vpu_vdp_clk[] = {
1062 F(50000000, P_GPLL0, 12, 0, 0),
1063 F(100000000, P_GPLL0, 6, 0, 0),
1064 F(200000000, P_MMPLL0, 4, 0, 0),
1065 F(320000000, P_MMPLL0, 2.5, 0, 0),
1066 F(400000000, P_MMPLL0, 2, 0, 0),
1067 { }
1068 };
1069
1070 static struct clk_rcg2 vdp_clk_src = {
1071 .cmd_rcgr = 0x1300,
1072 .hid_width = 5,
1073 .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
1074 .freq_tbl = ftbl_vpu_vdp_clk,
1075 .clkr.hw.init = &(struct clk_init_data){
1076 .name = "vdp_clk_src",
1077 .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0,
1078 .num_parents = 4,
1079 .ops = &clk_rcg2_ops,
1080 },
1081 };
1082
1083 static struct freq_tbl ftbl_vpu_bus_clk[] = {
1084 F(40000000, P_GPLL0, 15, 0, 0),
1085 F(80000000, P_MMPLL0, 10, 0, 0),
1086 { }
1087 };
1088
1089 static struct clk_rcg2 vpu_bus_clk_src = {
1090 .cmd_rcgr = 0x1340,
1091 .hid_width = 5,
1092 .parent_map = mmcc_xo_mmpll0_mmpll1_gpll0_map,
1093 .freq_tbl = ftbl_vpu_bus_clk,
1094 .clkr.hw.init = &(struct clk_init_data){
1095 .name = "vpu_bus_clk_src",
1096 .parent_names = mmcc_xo_mmpll0_mmpll1_gpll0,
1097 .num_parents = 4,
1098 .ops = &clk_rcg2_ops,
1099 },
1100 };
1101
1102 static struct clk_branch mmss_cxo_clk = {
1103 .halt_reg = 0x5104,
1104 .clkr = {
1105 .enable_reg = 0x5104,
1106 .enable_mask = BIT(0),
1107 .hw.init = &(struct clk_init_data){
1108 .name = "mmss_cxo_clk",
1109 .parent_names = (const char *[]){ "xo" },
1110 .num_parents = 1,
1111 .flags = CLK_SET_RATE_PARENT,
1112 .ops = &clk_branch2_ops,
1113 },
1114 },
1115 };
1116
1117 static struct clk_branch mmss_sleepclk_clk = {
1118 .halt_reg = 0x5100,
1119 .clkr = {
1120 .enable_reg = 0x5100,
1121 .enable_mask = BIT(0),
1122 .hw.init = &(struct clk_init_data){
1123 .name = "mmss_sleepclk_clk",
1124 .parent_names = (const char *[]){
1125 "sleep_clk_src",
1126 },
1127 .num_parents = 1,
1128 .flags = CLK_SET_RATE_PARENT,
1129 .ops = &clk_branch2_ops,
1130 },
1131 },
1132 };
1133
1134 static struct clk_branch avsync_ahb_clk = {
1135 .halt_reg = 0x2414,
1136 .clkr = {
1137 .enable_reg = 0x2414,
1138 .enable_mask = BIT(0),
1139 .hw.init = &(struct clk_init_data){
1140 .name = "avsync_ahb_clk",
1141 .parent_names = (const char *[]){
1142 "mmss_ahb_clk_src",
1143 },
1144 .num_parents = 1,
1145 .flags = CLK_SET_RATE_PARENT,
1146 .ops = &clk_branch2_ops,
1147 },
1148 },
1149 };
1150
1151 static struct clk_branch avsync_edppixel_clk = {
1152 .halt_reg = 0x2418,
1153 .clkr = {
1154 .enable_reg = 0x2418,
1155 .enable_mask = BIT(0),
1156 .hw.init = &(struct clk_init_data){
1157 .name = "avsync_edppixel_clk",
1158 .parent_names = (const char *[]){
1159 "edppixel_clk_src",
1160 },
1161 .num_parents = 1,
1162 .flags = CLK_SET_RATE_PARENT,
1163 .ops = &clk_branch2_ops,
1164 },
1165 },
1166 };
1167
1168 static struct clk_branch avsync_extpclk_clk = {
1169 .halt_reg = 0x2410,
1170 .clkr = {
1171 .enable_reg = 0x2410,
1172 .enable_mask = BIT(0),
1173 .hw.init = &(struct clk_init_data){
1174 .name = "avsync_extpclk_clk",
1175 .parent_names = (const char *[]){
1176 "extpclk_clk_src",
1177 },
1178 .num_parents = 1,
1179 .flags = CLK_SET_RATE_PARENT,
1180 .ops = &clk_branch2_ops,
1181 },
1182 },
1183 };
1184
1185 static struct clk_branch avsync_pclk0_clk = {
1186 .halt_reg = 0x241c,
1187 .clkr = {
1188 .enable_reg = 0x241c,
1189 .enable_mask = BIT(0),
1190 .hw.init = &(struct clk_init_data){
1191 .name = "avsync_pclk0_clk",
1192 .parent_names = (const char *[]){
1193 "pclk0_clk_src",
1194 },
1195 .num_parents = 1,
1196 .flags = CLK_SET_RATE_PARENT,
1197 .ops = &clk_branch2_ops,
1198 },
1199 },
1200 };
1201
1202 static struct clk_branch avsync_pclk1_clk = {
1203 .halt_reg = 0x2420,
1204 .clkr = {
1205 .enable_reg = 0x2420,
1206 .enable_mask = BIT(0),
1207 .hw.init = &(struct clk_init_data){
1208 .name = "avsync_pclk1_clk",
1209 .parent_names = (const char *[]){
1210 "pclk1_clk_src",
1211 },
1212 .num_parents = 1,
1213 .flags = CLK_SET_RATE_PARENT,
1214 .ops = &clk_branch2_ops,
1215 },
1216 },
1217 };
1218
1219 static struct clk_branch avsync_vp_clk = {
1220 .halt_reg = 0x2404,
1221 .clkr = {
1222 .enable_reg = 0x2404,
1223 .enable_mask = BIT(0),
1224 .hw.init = &(struct clk_init_data){
1225 .name = "avsync_vp_clk",
1226 .parent_names = (const char *[]){
1227 "vp_clk_src",
1228 },
1229 .num_parents = 1,
1230 .flags = CLK_SET_RATE_PARENT,
1231 .ops = &clk_branch2_ops,
1232 },
1233 },
1234 };
1235
1236 static struct clk_branch camss_ahb_clk = {
1237 .halt_reg = 0x348c,
1238 .clkr = {
1239 .enable_reg = 0x348c,
1240 .enable_mask = BIT(0),
1241 .hw.init = &(struct clk_init_data){
1242 .name = "camss_ahb_clk",
1243 .parent_names = (const char *[]){
1244 "mmss_ahb_clk_src",
1245 },
1246 .num_parents = 1,
1247 .flags = CLK_SET_RATE_PARENT,
1248 .ops = &clk_branch2_ops,
1249 },
1250 },
1251 };
1252
1253 static struct clk_branch camss_cci_cci_ahb_clk = {
1254 .halt_reg = 0x3348,
1255 .clkr = {
1256 .enable_reg = 0x3348,
1257 .enable_mask = BIT(0),
1258 .hw.init = &(struct clk_init_data){
1259 .name = "camss_cci_cci_ahb_clk",
1260 .parent_names = (const char *[]){
1261 "mmss_ahb_clk_src",
1262 },
1263 .num_parents = 1,
1264 .ops = &clk_branch2_ops,
1265 },
1266 },
1267 };
1268
1269 static struct clk_branch camss_cci_cci_clk = {
1270 .halt_reg = 0x3344,
1271 .clkr = {
1272 .enable_reg = 0x3344,
1273 .enable_mask = BIT(0),
1274 .hw.init = &(struct clk_init_data){
1275 .name = "camss_cci_cci_clk",
1276 .parent_names = (const char *[]){
1277 "cci_clk_src",
1278 },
1279 .num_parents = 1,
1280 .flags = CLK_SET_RATE_PARENT,
1281 .ops = &clk_branch2_ops,
1282 },
1283 },
1284 };
1285
1286 static struct clk_branch camss_csi0_ahb_clk = {
1287 .halt_reg = 0x30bc,
1288 .clkr = {
1289 .enable_reg = 0x30bc,
1290 .enable_mask = BIT(0),
1291 .hw.init = &(struct clk_init_data){
1292 .name = "camss_csi0_ahb_clk",
1293 .parent_names = (const char *[]){
1294 "mmss_ahb_clk_src",
1295 },
1296 .num_parents = 1,
1297 .ops = &clk_branch2_ops,
1298 },
1299 },
1300 };
1301
1302 static struct clk_branch camss_csi0_clk = {
1303 .halt_reg = 0x30b4,
1304 .clkr = {
1305 .enable_reg = 0x30b4,
1306 .enable_mask = BIT(0),
1307 .hw.init = &(struct clk_init_data){
1308 .name = "camss_csi0_clk",
1309 .parent_names = (const char *[]){
1310 "csi0_clk_src",
1311 },
1312 .num_parents = 1,
1313 .flags = CLK_SET_RATE_PARENT,
1314 .ops = &clk_branch2_ops,
1315 },
1316 },
1317 };
1318
1319 static struct clk_branch camss_csi0phy_clk = {
1320 .halt_reg = 0x30c4,
1321 .clkr = {
1322 .enable_reg = 0x30c4,
1323 .enable_mask = BIT(0),
1324 .hw.init = &(struct clk_init_data){
1325 .name = "camss_csi0phy_clk",
1326 .parent_names = (const char *[]){
1327 "csi0_clk_src",
1328 },
1329 .num_parents = 1,
1330 .flags = CLK_SET_RATE_PARENT,
1331 .ops = &clk_branch2_ops,
1332 },
1333 },
1334 };
1335
1336 static struct clk_branch camss_csi0pix_clk = {
1337 .halt_reg = 0x30e4,
1338 .clkr = {
1339 .enable_reg = 0x30e4,
1340 .enable_mask = BIT(0),
1341 .hw.init = &(struct clk_init_data){
1342 .name = "camss_csi0pix_clk",
1343 .parent_names = (const char *[]){
1344 "csi0_clk_src",
1345 },
1346 .num_parents = 1,
1347 .flags = CLK_SET_RATE_PARENT,
1348 .ops = &clk_branch2_ops,
1349 },
1350 },
1351 };
1352
1353 static struct clk_branch camss_csi0rdi_clk = {
1354 .halt_reg = 0x30d4,
1355 .clkr = {
1356 .enable_reg = 0x30d4,
1357 .enable_mask = BIT(0),
1358 .hw.init = &(struct clk_init_data){
1359 .name = "camss_csi0rdi_clk",
1360 .parent_names = (const char *[]){
1361 "csi0_clk_src",
1362 },
1363 .num_parents = 1,
1364 .flags = CLK_SET_RATE_PARENT,
1365 .ops = &clk_branch2_ops,
1366 },
1367 },
1368 };
1369
1370 static struct clk_branch camss_csi1_ahb_clk = {
1371 .halt_reg = 0x3128,
1372 .clkr = {
1373 .enable_reg = 0x3128,
1374 .enable_mask = BIT(0),
1375 .hw.init = &(struct clk_init_data){
1376 .name = "camss_csi1_ahb_clk",
1377 .parent_names = (const char *[]){
1378 "mmss_ahb_clk_src",
1379 },
1380 .num_parents = 1,
1381 .flags = CLK_SET_RATE_PARENT,
1382 .ops = &clk_branch2_ops,
1383 },
1384 },
1385 };
1386
1387 static struct clk_branch camss_csi1_clk = {
1388 .halt_reg = 0x3124,
1389 .clkr = {
1390 .enable_reg = 0x3124,
1391 .enable_mask = BIT(0),
1392 .hw.init = &(struct clk_init_data){
1393 .name = "camss_csi1_clk",
1394 .parent_names = (const char *[]){
1395 "csi1_clk_src",
1396 },
1397 .num_parents = 1,
1398 .flags = CLK_SET_RATE_PARENT,
1399 .ops = &clk_branch2_ops,
1400 },
1401 },
1402 };
1403
1404 static struct clk_branch camss_csi1phy_clk = {
1405 .halt_reg = 0x3134,
1406 .clkr = {
1407 .enable_reg = 0x3134,
1408 .enable_mask = BIT(0),
1409 .hw.init = &(struct clk_init_data){
1410 .name = "camss_csi1phy_clk",
1411 .parent_names = (const char *[]){
1412 "csi1_clk_src",
1413 },
1414 .num_parents = 1,
1415 .flags = CLK_SET_RATE_PARENT,
1416 .ops = &clk_branch2_ops,
1417 },
1418 },
1419 };
1420
1421 static struct clk_branch camss_csi1pix_clk = {
1422 .halt_reg = 0x3154,
1423 .clkr = {
1424 .enable_reg = 0x3154,
1425 .enable_mask = BIT(0),
1426 .hw.init = &(struct clk_init_data){
1427 .name = "camss_csi1pix_clk",
1428 .parent_names = (const char *[]){
1429 "csi1_clk_src",
1430 },
1431 .num_parents = 1,
1432 .flags = CLK_SET_RATE_PARENT,
1433 .ops = &clk_branch2_ops,
1434 },
1435 },
1436 };
1437
1438 static struct clk_branch camss_csi1rdi_clk = {
1439 .halt_reg = 0x3144,
1440 .clkr = {
1441 .enable_reg = 0x3144,
1442 .enable_mask = BIT(0),
1443 .hw.init = &(struct clk_init_data){
1444 .name = "camss_csi1rdi_clk",
1445 .parent_names = (const char *[]){
1446 "csi1_clk_src",
1447 },
1448 .num_parents = 1,
1449 .flags = CLK_SET_RATE_PARENT,
1450 .ops = &clk_branch2_ops,
1451 },
1452 },
1453 };
1454
1455 static struct clk_branch camss_csi2_ahb_clk = {
1456 .halt_reg = 0x3188,
1457 .clkr = {
1458 .enable_reg = 0x3188,
1459 .enable_mask = BIT(0),
1460 .hw.init = &(struct clk_init_data){
1461 .name = "camss_csi2_ahb_clk",
1462 .parent_names = (const char *[]){
1463 "mmss_ahb_clk_src",
1464 },
1465 .num_parents = 1,
1466 .ops = &clk_branch2_ops,
1467 },
1468 },
1469 };
1470
1471 static struct clk_branch camss_csi2_clk = {
1472 .halt_reg = 0x3184,
1473 .clkr = {
1474 .enable_reg = 0x3184,
1475 .enable_mask = BIT(0),
1476 .hw.init = &(struct clk_init_data){
1477 .name = "camss_csi2_clk",
1478 .parent_names = (const char *[]){
1479 "csi2_clk_src",
1480 },
1481 .num_parents = 1,
1482 .flags = CLK_SET_RATE_PARENT,
1483 .ops = &clk_branch2_ops,
1484 },
1485 },
1486 };
1487
1488 static struct clk_branch camss_csi2phy_clk = {
1489 .halt_reg = 0x3194,
1490 .clkr = {
1491 .enable_reg = 0x3194,
1492 .enable_mask = BIT(0),
1493 .hw.init = &(struct clk_init_data){
1494 .name = "camss_csi2phy_clk",
1495 .parent_names = (const char *[]){
1496 "csi2_clk_src",
1497 },
1498 .num_parents = 1,
1499 .flags = CLK_SET_RATE_PARENT,
1500 .ops = &clk_branch2_ops,
1501 },
1502 },
1503 };
1504
1505 static struct clk_branch camss_csi2pix_clk = {
1506 .halt_reg = 0x31b4,
1507 .clkr = {
1508 .enable_reg = 0x31b4,
1509 .enable_mask = BIT(0),
1510 .hw.init = &(struct clk_init_data){
1511 .name = "camss_csi2pix_clk",
1512 .parent_names = (const char *[]){
1513 "csi2_clk_src",
1514 },
1515 .num_parents = 1,
1516 .flags = CLK_SET_RATE_PARENT,
1517 .ops = &clk_branch2_ops,
1518 },
1519 },
1520 };
1521
1522 static struct clk_branch camss_csi2rdi_clk = {
1523 .halt_reg = 0x31a4,
1524 .clkr = {
1525 .enable_reg = 0x31a4,
1526 .enable_mask = BIT(0),
1527 .hw.init = &(struct clk_init_data){
1528 .name = "camss_csi2rdi_clk",
1529 .parent_names = (const char *[]){
1530 "csi2_clk_src",
1531 },
1532 .num_parents = 1,
1533 .flags = CLK_SET_RATE_PARENT,
1534 .ops = &clk_branch2_ops,
1535 },
1536 },
1537 };
1538
1539 static struct clk_branch camss_csi3_ahb_clk = {
1540 .halt_reg = 0x31e8,
1541 .clkr = {
1542 .enable_reg = 0x31e8,
1543 .enable_mask = BIT(0),
1544 .hw.init = &(struct clk_init_data){
1545 .name = "camss_csi3_ahb_clk",
1546 .parent_names = (const char *[]){
1547 "mmss_ahb_clk_src",
1548 },
1549 .num_parents = 1,
1550 .ops = &clk_branch2_ops,
1551 },
1552 },
1553 };
1554
1555 static struct clk_branch camss_csi3_clk = {
1556 .halt_reg = 0x31e4,
1557 .clkr = {
1558 .enable_reg = 0x31e4,
1559 .enable_mask = BIT(0),
1560 .hw.init = &(struct clk_init_data){
1561 .name = "camss_csi3_clk",
1562 .parent_names = (const char *[]){
1563 "csi3_clk_src",
1564 },
1565 .num_parents = 1,
1566 .flags = CLK_SET_RATE_PARENT,
1567 .ops = &clk_branch2_ops,
1568 },
1569 },
1570 };
1571
1572 static struct clk_branch camss_csi3phy_clk = {
1573 .halt_reg = 0x31f4,
1574 .clkr = {
1575 .enable_reg = 0x31f4,
1576 .enable_mask = BIT(0),
1577 .hw.init = &(struct clk_init_data){
1578 .name = "camss_csi3phy_clk",
1579 .parent_names = (const char *[]){
1580 "csi3_clk_src",
1581 },
1582 .num_parents = 1,
1583 .flags = CLK_SET_RATE_PARENT,
1584 .ops = &clk_branch2_ops,
1585 },
1586 },
1587 };
1588
1589 static struct clk_branch camss_csi3pix_clk = {
1590 .halt_reg = 0x3214,
1591 .clkr = {
1592 .enable_reg = 0x3214,
1593 .enable_mask = BIT(0),
1594 .hw.init = &(struct clk_init_data){
1595 .name = "camss_csi3pix_clk",
1596 .parent_names = (const char *[]){
1597 "csi3_clk_src",
1598 },
1599 .num_parents = 1,
1600 .flags = CLK_SET_RATE_PARENT,
1601 .ops = &clk_branch2_ops,
1602 },
1603 },
1604 };
1605
1606 static struct clk_branch camss_csi3rdi_clk = {
1607 .halt_reg = 0x3204,
1608 .clkr = {
1609 .enable_reg = 0x3204,
1610 .enable_mask = BIT(0),
1611 .hw.init = &(struct clk_init_data){
1612 .name = "camss_csi3rdi_clk",
1613 .parent_names = (const char *[]){
1614 "csi3_clk_src",
1615 },
1616 .num_parents = 1,
1617 .flags = CLK_SET_RATE_PARENT,
1618 .ops = &clk_branch2_ops,
1619 },
1620 },
1621 };
1622
1623 static struct clk_branch camss_csi_vfe0_clk = {
1624 .halt_reg = 0x3704,
1625 .clkr = {
1626 .enable_reg = 0x3704,
1627 .enable_mask = BIT(0),
1628 .hw.init = &(struct clk_init_data){
1629 .name = "camss_csi_vfe0_clk",
1630 .parent_names = (const char *[]){
1631 "vfe0_clk_src",
1632 },
1633 .num_parents = 1,
1634 .flags = CLK_SET_RATE_PARENT,
1635 .ops = &clk_branch2_ops,
1636 },
1637 },
1638 };
1639
1640 static struct clk_branch camss_csi_vfe1_clk = {
1641 .halt_reg = 0x3714,
1642 .clkr = {
1643 .enable_reg = 0x3714,
1644 .enable_mask = BIT(0),
1645 .hw.init = &(struct clk_init_data){
1646 .name = "camss_csi_vfe1_clk",
1647 .parent_names = (const char *[]){
1648 "vfe1_clk_src",
1649 },
1650 .num_parents = 1,
1651 .flags = CLK_SET_RATE_PARENT,
1652 .ops = &clk_branch2_ops,
1653 },
1654 },
1655 };
1656
1657 static struct clk_branch camss_gp0_clk = {
1658 .halt_reg = 0x3444,
1659 .clkr = {
1660 .enable_reg = 0x3444,
1661 .enable_mask = BIT(0),
1662 .hw.init = &(struct clk_init_data){
1663 .name = "camss_gp0_clk",
1664 .parent_names = (const char *[]){
1665 "camss_gp0_clk_src",
1666 },
1667 .num_parents = 1,
1668 .flags = CLK_SET_RATE_PARENT,
1669 .ops = &clk_branch2_ops,
1670 },
1671 },
1672 };
1673
1674 static struct clk_branch camss_gp1_clk = {
1675 .halt_reg = 0x3474,
1676 .clkr = {
1677 .enable_reg = 0x3474,
1678 .enable_mask = BIT(0),
1679 .hw.init = &(struct clk_init_data){
1680 .name = "camss_gp1_clk",
1681 .parent_names = (const char *[]){
1682 "camss_gp1_clk_src",
1683 },
1684 .num_parents = 1,
1685 .flags = CLK_SET_RATE_PARENT,
1686 .ops = &clk_branch2_ops,
1687 },
1688 },
1689 };
1690
1691 static struct clk_branch camss_ispif_ahb_clk = {
1692 .halt_reg = 0x3224,
1693 .clkr = {
1694 .enable_reg = 0x3224,
1695 .enable_mask = BIT(0),
1696 .hw.init = &(struct clk_init_data){
1697 .name = "camss_ispif_ahb_clk",
1698 .parent_names = (const char *[]){
1699 "mmss_ahb_clk_src",
1700 },
1701 .num_parents = 1,
1702 .flags = CLK_SET_RATE_PARENT,
1703 .ops = &clk_branch2_ops,
1704 },
1705 },
1706 };
1707
1708 static struct clk_branch camss_jpeg_jpeg0_clk = {
1709 .halt_reg = 0x35a8,
1710 .clkr = {
1711 .enable_reg = 0x35a8,
1712 .enable_mask = BIT(0),
1713 .hw.init = &(struct clk_init_data){
1714 .name = "camss_jpeg_jpeg0_clk",
1715 .parent_names = (const char *[]){
1716 "jpeg0_clk_src",
1717 },
1718 .num_parents = 1,
1719 .flags = CLK_SET_RATE_PARENT,
1720 .ops = &clk_branch2_ops,
1721 },
1722 },
1723 };
1724
1725 static struct clk_branch camss_jpeg_jpeg1_clk = {
1726 .halt_reg = 0x35ac,
1727 .clkr = {
1728 .enable_reg = 0x35ac,
1729 .enable_mask = BIT(0),
1730 .hw.init = &(struct clk_init_data){
1731 .name = "camss_jpeg_jpeg1_clk",
1732 .parent_names = (const char *[]){
1733 "jpeg1_clk_src",
1734 },
1735 .num_parents = 1,
1736 .flags = CLK_SET_RATE_PARENT,
1737 .ops = &clk_branch2_ops,
1738 },
1739 },
1740 };
1741
1742 static struct clk_branch camss_jpeg_jpeg2_clk = {
1743 .halt_reg = 0x35b0,
1744 .clkr = {
1745 .enable_reg = 0x35b0,
1746 .enable_mask = BIT(0),
1747 .hw.init = &(struct clk_init_data){
1748 .name = "camss_jpeg_jpeg2_clk",
1749 .parent_names = (const char *[]){
1750 "jpeg2_clk_src",
1751 },
1752 .num_parents = 1,
1753 .flags = CLK_SET_RATE_PARENT,
1754 .ops = &clk_branch2_ops,
1755 },
1756 },
1757 };
1758
1759 static struct clk_branch camss_jpeg_jpeg_ahb_clk = {
1760 .halt_reg = 0x35b4,
1761 .clkr = {
1762 .enable_reg = 0x35b4,
1763 .enable_mask = BIT(0),
1764 .hw.init = &(struct clk_init_data){
1765 .name = "camss_jpeg_jpeg_ahb_clk",
1766 .parent_names = (const char *[]){
1767 "mmss_ahb_clk_src",
1768 },
1769 .num_parents = 1,
1770 .ops = &clk_branch2_ops,
1771 },
1772 },
1773 };
1774
1775 static struct clk_branch camss_jpeg_jpeg_axi_clk = {
1776 .halt_reg = 0x35b8,
1777 .clkr = {
1778 .enable_reg = 0x35b8,
1779 .enable_mask = BIT(0),
1780 .hw.init = &(struct clk_init_data){
1781 .name = "camss_jpeg_jpeg_axi_clk",
1782 .parent_names = (const char *[]){
1783 "mmss_axi_clk_src",
1784 },
1785 .num_parents = 1,
1786 .ops = &clk_branch2_ops,
1787 },
1788 },
1789 };
1790
1791 static struct clk_branch camss_mclk0_clk = {
1792 .halt_reg = 0x3384,
1793 .clkr = {
1794 .enable_reg = 0x3384,
1795 .enable_mask = BIT(0),
1796 .hw.init = &(struct clk_init_data){
1797 .name = "camss_mclk0_clk",
1798 .parent_names = (const char *[]){
1799 "mclk0_clk_src",
1800 },
1801 .num_parents = 1,
1802 .flags = CLK_SET_RATE_PARENT,
1803 .ops = &clk_branch2_ops,
1804 },
1805 },
1806 };
1807
1808 static struct clk_branch camss_mclk1_clk = {
1809 .halt_reg = 0x33b4,
1810 .clkr = {
1811 .enable_reg = 0x33b4,
1812 .enable_mask = BIT(0),
1813 .hw.init = &(struct clk_init_data){
1814 .name = "camss_mclk1_clk",
1815 .parent_names = (const char *[]){
1816 "mclk1_clk_src",
1817 },
1818 .num_parents = 1,
1819 .flags = CLK_SET_RATE_PARENT,
1820 .ops = &clk_branch2_ops,
1821 },
1822 },
1823 };
1824
1825 static struct clk_branch camss_mclk2_clk = {
1826 .halt_reg = 0x33e4,
1827 .clkr = {
1828 .enable_reg = 0x33e4,
1829 .enable_mask = BIT(0),
1830 .hw.init = &(struct clk_init_data){
1831 .name = "camss_mclk2_clk",
1832 .parent_names = (const char *[]){
1833 "mclk2_clk_src",
1834 },
1835 .num_parents = 1,
1836 .flags = CLK_SET_RATE_PARENT,
1837 .ops = &clk_branch2_ops,
1838 },
1839 },
1840 };
1841
1842 static struct clk_branch camss_mclk3_clk = {
1843 .halt_reg = 0x3414,
1844 .clkr = {
1845 .enable_reg = 0x3414,
1846 .enable_mask = BIT(0),
1847 .hw.init = &(struct clk_init_data){
1848 .name = "camss_mclk3_clk",
1849 .parent_names = (const char *[]){
1850 "mclk3_clk_src",
1851 },
1852 .num_parents = 1,
1853 .flags = CLK_SET_RATE_PARENT,
1854 .ops = &clk_branch2_ops,
1855 },
1856 },
1857 };
1858
1859 static struct clk_branch camss_micro_ahb_clk = {
1860 .halt_reg = 0x3494,
1861 .clkr = {
1862 .enable_reg = 0x3494,
1863 .enable_mask = BIT(0),
1864 .hw.init = &(struct clk_init_data){
1865 .name = "camss_micro_ahb_clk",
1866 .parent_names = (const char *[]){
1867 "mmss_ahb_clk_src",
1868 },
1869 .num_parents = 1,
1870 .ops = &clk_branch2_ops,
1871 },
1872 },
1873 };
1874
1875 static struct clk_branch camss_phy0_csi0phytimer_clk = {
1876 .halt_reg = 0x3024,
1877 .clkr = {
1878 .enable_reg = 0x3024,
1879 .enable_mask = BIT(0),
1880 .hw.init = &(struct clk_init_data){
1881 .name = "camss_phy0_csi0phytimer_clk",
1882 .parent_names = (const char *[]){
1883 "csi0phytimer_clk_src",
1884 },
1885 .num_parents = 1,
1886 .flags = CLK_SET_RATE_PARENT,
1887 .ops = &clk_branch2_ops,
1888 },
1889 },
1890 };
1891
1892 static struct clk_branch camss_phy1_csi1phytimer_clk = {
1893 .halt_reg = 0x3054,
1894 .clkr = {
1895 .enable_reg = 0x3054,
1896 .enable_mask = BIT(0),
1897 .hw.init = &(struct clk_init_data){
1898 .name = "camss_phy1_csi1phytimer_clk",
1899 .parent_names = (const char *[]){
1900 "csi1phytimer_clk_src",
1901 },
1902 .num_parents = 1,
1903 .flags = CLK_SET_RATE_PARENT,
1904 .ops = &clk_branch2_ops,
1905 },
1906 },
1907 };
1908
1909 static struct clk_branch camss_phy2_csi2phytimer_clk = {
1910 .halt_reg = 0x3084,
1911 .clkr = {
1912 .enable_reg = 0x3084,
1913 .enable_mask = BIT(0),
1914 .hw.init = &(struct clk_init_data){
1915 .name = "camss_phy2_csi2phytimer_clk",
1916 .parent_names = (const char *[]){
1917 "csi2phytimer_clk_src",
1918 },
1919 .num_parents = 1,
1920 .flags = CLK_SET_RATE_PARENT,
1921 .ops = &clk_branch2_ops,
1922 },
1923 },
1924 };
1925
1926 static struct clk_branch camss_top_ahb_clk = {
1927 .halt_reg = 0x3484,
1928 .clkr = {
1929 .enable_reg = 0x3484,
1930 .enable_mask = BIT(0),
1931 .hw.init = &(struct clk_init_data){
1932 .name = "camss_top_ahb_clk",
1933 .parent_names = (const char *[]){
1934 "mmss_ahb_clk_src",
1935 },
1936 .num_parents = 1,
1937 .flags = CLK_SET_RATE_PARENT,
1938 .ops = &clk_branch2_ops,
1939 },
1940 },
1941 };
1942
1943 static struct clk_branch camss_vfe_cpp_ahb_clk = {
1944 .halt_reg = 0x36b4,
1945 .clkr = {
1946 .enable_reg = 0x36b4,
1947 .enable_mask = BIT(0),
1948 .hw.init = &(struct clk_init_data){
1949 .name = "camss_vfe_cpp_ahb_clk",
1950 .parent_names = (const char *[]){
1951 "mmss_ahb_clk_src",
1952 },
1953 .num_parents = 1,
1954 .flags = CLK_SET_RATE_PARENT,
1955 .ops = &clk_branch2_ops,
1956 },
1957 },
1958 };
1959
1960 static struct clk_branch camss_vfe_cpp_clk = {
1961 .halt_reg = 0x36b0,
1962 .clkr = {
1963 .enable_reg = 0x36b0,
1964 .enable_mask = BIT(0),
1965 .hw.init = &(struct clk_init_data){
1966 .name = "camss_vfe_cpp_clk",
1967 .parent_names = (const char *[]){
1968 "cpp_clk_src",
1969 },
1970 .num_parents = 1,
1971 .flags = CLK_SET_RATE_PARENT,
1972 .ops = &clk_branch2_ops,
1973 },
1974 },
1975 };
1976
1977 static struct clk_branch camss_vfe_vfe0_clk = {
1978 .halt_reg = 0x36a8,
1979 .clkr = {
1980 .enable_reg = 0x36a8,
1981 .enable_mask = BIT(0),
1982 .hw.init = &(struct clk_init_data){
1983 .name = "camss_vfe_vfe0_clk",
1984 .parent_names = (const char *[]){
1985 "vfe0_clk_src",
1986 },
1987 .num_parents = 1,
1988 .flags = CLK_SET_RATE_PARENT,
1989 .ops = &clk_branch2_ops,
1990 },
1991 },
1992 };
1993
1994 static struct clk_branch camss_vfe_vfe1_clk = {
1995 .halt_reg = 0x36ac,
1996 .clkr = {
1997 .enable_reg = 0x36ac,
1998 .enable_mask = BIT(0),
1999 .hw.init = &(struct clk_init_data){
2000 .name = "camss_vfe_vfe1_clk",
2001 .parent_names = (const char *[]){
2002 "vfe1_clk_src",
2003 },
2004 .num_parents = 1,
2005 .flags = CLK_SET_RATE_PARENT,
2006 .ops = &clk_branch2_ops,
2007 },
2008 },
2009 };
2010
2011 static struct clk_branch camss_vfe_vfe_ahb_clk = {
2012 .halt_reg = 0x36b8,
2013 .clkr = {
2014 .enable_reg = 0x36b8,
2015 .enable_mask = BIT(0),
2016 .hw.init = &(struct clk_init_data){
2017 .name = "camss_vfe_vfe_ahb_clk",
2018 .parent_names = (const char *[]){
2019 "mmss_ahb_clk_src",
2020 },
2021 .num_parents = 1,
2022 .flags = CLK_SET_RATE_PARENT,
2023 .ops = &clk_branch2_ops,
2024 },
2025 },
2026 };
2027
2028 static struct clk_branch camss_vfe_vfe_axi_clk = {
2029 .halt_reg = 0x36bc,
2030 .clkr = {
2031 .enable_reg = 0x36bc,
2032 .enable_mask = BIT(0),
2033 .hw.init = &(struct clk_init_data){
2034 .name = "camss_vfe_vfe_axi_clk",
2035 .parent_names = (const char *[]){
2036 "mmss_axi_clk_src",
2037 },
2038 .num_parents = 1,
2039 .flags = CLK_SET_RATE_PARENT,
2040 .ops = &clk_branch2_ops,
2041 },
2042 },
2043 };
2044
2045 static struct clk_branch mdss_ahb_clk = {
2046 .halt_reg = 0x2308,
2047 .clkr = {
2048 .enable_reg = 0x2308,
2049 .enable_mask = BIT(0),
2050 .hw.init = &(struct clk_init_data){
2051 .name = "mdss_ahb_clk",
2052 .parent_names = (const char *[]){
2053 "mmss_ahb_clk_src",
2054 },
2055 .num_parents = 1,
2056 .flags = CLK_SET_RATE_PARENT,
2057 .ops = &clk_branch2_ops,
2058 },
2059 },
2060 };
2061
2062 static struct clk_branch mdss_axi_clk = {
2063 .halt_reg = 0x2310,
2064 .clkr = {
2065 .enable_reg = 0x2310,
2066 .enable_mask = BIT(0),
2067 .hw.init = &(struct clk_init_data){
2068 .name = "mdss_axi_clk",
2069 .parent_names = (const char *[]){
2070 "mmss_axi_clk_src",
2071 },
2072 .num_parents = 1,
2073 .flags = CLK_SET_RATE_PARENT,
2074 .ops = &clk_branch2_ops,
2075 },
2076 },
2077 };
2078
2079 static struct clk_branch mdss_byte0_clk = {
2080 .halt_reg = 0x233c,
2081 .clkr = {
2082 .enable_reg = 0x233c,
2083 .enable_mask = BIT(0),
2084 .hw.init = &(struct clk_init_data){
2085 .name = "mdss_byte0_clk",
2086 .parent_names = (const char *[]){
2087 "byte0_clk_src",
2088 },
2089 .num_parents = 1,
2090 .flags = CLK_SET_RATE_PARENT,
2091 .ops = &clk_branch2_ops,
2092 },
2093 },
2094 };
2095
2096 static struct clk_branch mdss_byte1_clk = {
2097 .halt_reg = 0x2340,
2098 .clkr = {
2099 .enable_reg = 0x2340,
2100 .enable_mask = BIT(0),
2101 .hw.init = &(struct clk_init_data){
2102 .name = "mdss_byte1_clk",
2103 .parent_names = (const char *[]){
2104 "byte1_clk_src",
2105 },
2106 .num_parents = 1,
2107 .flags = CLK_SET_RATE_PARENT,
2108 .ops = &clk_branch2_ops,
2109 },
2110 },
2111 };
2112
2113 static struct clk_branch mdss_edpaux_clk = {
2114 .halt_reg = 0x2334,
2115 .clkr = {
2116 .enable_reg = 0x2334,
2117 .enable_mask = BIT(0),
2118 .hw.init = &(struct clk_init_data){
2119 .name = "mdss_edpaux_clk",
2120 .parent_names = (const char *[]){
2121 "edpaux_clk_src",
2122 },
2123 .num_parents = 1,
2124 .flags = CLK_SET_RATE_PARENT,
2125 .ops = &clk_branch2_ops,
2126 },
2127 },
2128 };
2129
2130 static struct clk_branch mdss_edplink_clk = {
2131 .halt_reg = 0x2330,
2132 .clkr = {
2133 .enable_reg = 0x2330,
2134 .enable_mask = BIT(0),
2135 .hw.init = &(struct clk_init_data){
2136 .name = "mdss_edplink_clk",
2137 .parent_names = (const char *[]){
2138 "edplink_clk_src",
2139 },
2140 .num_parents = 1,
2141 .flags = CLK_SET_RATE_PARENT,
2142 .ops = &clk_branch2_ops,
2143 },
2144 },
2145 };
2146
2147 static struct clk_branch mdss_edppixel_clk = {
2148 .halt_reg = 0x232c,
2149 .clkr = {
2150 .enable_reg = 0x232c,
2151 .enable_mask = BIT(0),
2152 .hw.init = &(struct clk_init_data){
2153 .name = "mdss_edppixel_clk",
2154 .parent_names = (const char *[]){
2155 "edppixel_clk_src",
2156 },
2157 .num_parents = 1,
2158 .flags = CLK_SET_RATE_PARENT,
2159 .ops = &clk_branch2_ops,
2160 },
2161 },
2162 };
2163
2164 static struct clk_branch mdss_esc0_clk = {
2165 .halt_reg = 0x2344,
2166 .clkr = {
2167 .enable_reg = 0x2344,
2168 .enable_mask = BIT(0),
2169 .hw.init = &(struct clk_init_data){
2170 .name = "mdss_esc0_clk",
2171 .parent_names = (const char *[]){
2172 "esc0_clk_src",
2173 },
2174 .num_parents = 1,
2175 .flags = CLK_SET_RATE_PARENT,
2176 .ops = &clk_branch2_ops,
2177 },
2178 },
2179 };
2180
2181 static struct clk_branch mdss_esc1_clk = {
2182 .halt_reg = 0x2348,
2183 .clkr = {
2184 .enable_reg = 0x2348,
2185 .enable_mask = BIT(0),
2186 .hw.init = &(struct clk_init_data){
2187 .name = "mdss_esc1_clk",
2188 .parent_names = (const char *[]){
2189 "esc1_clk_src",
2190 },
2191 .num_parents = 1,
2192 .flags = CLK_SET_RATE_PARENT,
2193 .ops = &clk_branch2_ops,
2194 },
2195 },
2196 };
2197
2198 static struct clk_branch mdss_extpclk_clk = {
2199 .halt_reg = 0x2324,
2200 .clkr = {
2201 .enable_reg = 0x2324,
2202 .enable_mask = BIT(0),
2203 .hw.init = &(struct clk_init_data){
2204 .name = "mdss_extpclk_clk",
2205 .parent_names = (const char *[]){
2206 "extpclk_clk_src",
2207 },
2208 .num_parents = 1,
2209 .flags = CLK_SET_RATE_PARENT,
2210 .ops = &clk_branch2_ops,
2211 },
2212 },
2213 };
2214
2215 static struct clk_branch mdss_hdmi_ahb_clk = {
2216 .halt_reg = 0x230c,
2217 .clkr = {
2218 .enable_reg = 0x230c,
2219 .enable_mask = BIT(0),
2220 .hw.init = &(struct clk_init_data){
2221 .name = "mdss_hdmi_ahb_clk",
2222 .parent_names = (const char *[]){
2223 "mmss_ahb_clk_src",
2224 },
2225 .num_parents = 1,
2226 .flags = CLK_SET_RATE_PARENT,
2227 .ops = &clk_branch2_ops,
2228 },
2229 },
2230 };
2231
2232 static struct clk_branch mdss_hdmi_clk = {
2233 .halt_reg = 0x2338,
2234 .clkr = {
2235 .enable_reg = 0x2338,
2236 .enable_mask = BIT(0),
2237 .hw.init = &(struct clk_init_data){
2238 .name = "mdss_hdmi_clk",
2239 .parent_names = (const char *[]){
2240 "hdmi_clk_src",
2241 },
2242 .num_parents = 1,
2243 .flags = CLK_SET_RATE_PARENT,
2244 .ops = &clk_branch2_ops,
2245 },
2246 },
2247 };
2248
2249 static struct clk_branch mdss_mdp_clk = {
2250 .halt_reg = 0x231c,
2251 .clkr = {
2252 .enable_reg = 0x231c,
2253 .enable_mask = BIT(0),
2254 .hw.init = &(struct clk_init_data){
2255 .name = "mdss_mdp_clk",
2256 .parent_names = (const char *[]){
2257 "mdp_clk_src",
2258 },
2259 .num_parents = 1,
2260 .flags = CLK_SET_RATE_PARENT,
2261 .ops = &clk_branch2_ops,
2262 },
2263 },
2264 };
2265
2266 static struct clk_branch mdss_mdp_lut_clk = {
2267 .halt_reg = 0x2320,
2268 .clkr = {
2269 .enable_reg = 0x2320,
2270 .enable_mask = BIT(0),
2271 .hw.init = &(struct clk_init_data){
2272 .name = "mdss_mdp_lut_clk",
2273 .parent_names = (const char *[]){
2274 "mdp_clk_src",
2275 },
2276 .num_parents = 1,
2277 .flags = CLK_SET_RATE_PARENT,
2278 .ops = &clk_branch2_ops,
2279 },
2280 },
2281 };
2282
2283 static struct clk_branch mdss_pclk0_clk = {
2284 .halt_reg = 0x2314,
2285 .clkr = {
2286 .enable_reg = 0x2314,
2287 .enable_mask = BIT(0),
2288 .hw.init = &(struct clk_init_data){
2289 .name = "mdss_pclk0_clk",
2290 .parent_names = (const char *[]){
2291 "pclk0_clk_src",
2292 },
2293 .num_parents = 1,
2294 .flags = CLK_SET_RATE_PARENT,
2295 .ops = &clk_branch2_ops,
2296 },
2297 },
2298 };
2299
2300 static struct clk_branch mdss_pclk1_clk = {
2301 .halt_reg = 0x2318,
2302 .clkr = {
2303 .enable_reg = 0x2318,
2304 .enable_mask = BIT(0),
2305 .hw.init = &(struct clk_init_data){
2306 .name = "mdss_pclk1_clk",
2307 .parent_names = (const char *[]){
2308 "pclk1_clk_src",
2309 },
2310 .num_parents = 1,
2311 .flags = CLK_SET_RATE_PARENT,
2312 .ops = &clk_branch2_ops,
2313 },
2314 },
2315 };
2316
2317 static struct clk_branch mdss_vsync_clk = {
2318 .halt_reg = 0x2328,
2319 .clkr = {
2320 .enable_reg = 0x2328,
2321 .enable_mask = BIT(0),
2322 .hw.init = &(struct clk_init_data){
2323 .name = "mdss_vsync_clk",
2324 .parent_names = (const char *[]){
2325 "vsync_clk_src",
2326 },
2327 .num_parents = 1,
2328 .flags = CLK_SET_RATE_PARENT,
2329 .ops = &clk_branch2_ops,
2330 },
2331 },
2332 };
2333
2334 static struct clk_branch mmss_rbcpr_ahb_clk = {
2335 .halt_reg = 0x4088,
2336 .clkr = {
2337 .enable_reg = 0x4088,
2338 .enable_mask = BIT(0),
2339 .hw.init = &(struct clk_init_data){
2340 .name = "mmss_rbcpr_ahb_clk",
2341 .parent_names = (const char *[]){
2342 "mmss_ahb_clk_src",
2343 },
2344 .num_parents = 1,
2345 .flags = CLK_SET_RATE_PARENT,
2346 .ops = &clk_branch2_ops,
2347 },
2348 },
2349 };
2350
2351 static struct clk_branch mmss_rbcpr_clk = {
2352 .halt_reg = 0x4084,
2353 .clkr = {
2354 .enable_reg = 0x4084,
2355 .enable_mask = BIT(0),
2356 .hw.init = &(struct clk_init_data){
2357 .name = "mmss_rbcpr_clk",
2358 .parent_names = (const char *[]){
2359 "rbcpr_clk_src",
2360 },
2361 .num_parents = 1,
2362 .flags = CLK_SET_RATE_PARENT,
2363 .ops = &clk_branch2_ops,
2364 },
2365 },
2366 };
2367
2368 static struct clk_branch mmss_spdm_ahb_clk = {
2369 .halt_reg = 0x0230,
2370 .clkr = {
2371 .enable_reg = 0x0230,
2372 .enable_mask = BIT(0),
2373 .hw.init = &(struct clk_init_data){
2374 .name = "mmss_spdm_ahb_clk",
2375 .parent_names = (const char *[]){
2376 "mmss_spdm_ahb_div_clk",
2377 },
2378 .num_parents = 1,
2379 .flags = CLK_SET_RATE_PARENT,
2380 .ops = &clk_branch2_ops,
2381 },
2382 },
2383 };
2384
2385 static struct clk_branch mmss_spdm_axi_clk = {
2386 .halt_reg = 0x0210,
2387 .clkr = {
2388 .enable_reg = 0x0210,
2389 .enable_mask = BIT(0),
2390 .hw.init = &(struct clk_init_data){
2391 .name = "mmss_spdm_axi_clk",
2392 .parent_names = (const char *[]){
2393 "mmss_spdm_axi_div_clk",
2394 },
2395 .num_parents = 1,
2396 .flags = CLK_SET_RATE_PARENT,
2397 .ops = &clk_branch2_ops,
2398 },
2399 },
2400 };
2401
2402 static struct clk_branch mmss_spdm_csi0_clk = {
2403 .halt_reg = 0x023c,
2404 .clkr = {
2405 .enable_reg = 0x023c,
2406 .enable_mask = BIT(0),
2407 .hw.init = &(struct clk_init_data){
2408 .name = "mmss_spdm_csi0_clk",
2409 .parent_names = (const char *[]){
2410 "mmss_spdm_csi0_div_clk",
2411 },
2412 .num_parents = 1,
2413 .flags = CLK_SET_RATE_PARENT,
2414 .ops = &clk_branch2_ops,
2415 },
2416 },
2417 };
2418
2419 static struct clk_branch mmss_spdm_gfx3d_clk = {
2420 .halt_reg = 0x022c,
2421 .clkr = {
2422 .enable_reg = 0x022c,
2423 .enable_mask = BIT(0),
2424 .hw.init = &(struct clk_init_data){
2425 .name = "mmss_spdm_gfx3d_clk",
2426 .parent_names = (const char *[]){
2427 "mmss_spdm_gfx3d_div_clk",
2428 },
2429 .num_parents = 1,
2430 .flags = CLK_SET_RATE_PARENT,
2431 .ops = &clk_branch2_ops,
2432 },
2433 },
2434 };
2435
2436 static struct clk_branch mmss_spdm_jpeg0_clk = {
2437 .halt_reg = 0x0204,
2438 .clkr = {
2439 .enable_reg = 0x0204,
2440 .enable_mask = BIT(0),
2441 .hw.init = &(struct clk_init_data){
2442 .name = "mmss_spdm_jpeg0_clk",
2443 .parent_names = (const char *[]){
2444 "mmss_spdm_jpeg0_div_clk",
2445 },
2446 .num_parents = 1,
2447 .flags = CLK_SET_RATE_PARENT,
2448 .ops = &clk_branch2_ops,
2449 },
2450 },
2451 };
2452
2453 static struct clk_branch mmss_spdm_jpeg1_clk = {
2454 .halt_reg = 0x0208,
2455 .clkr = {
2456 .enable_reg = 0x0208,
2457 .enable_mask = BIT(0),
2458 .hw.init = &(struct clk_init_data){
2459 .name = "mmss_spdm_jpeg1_clk",
2460 .parent_names = (const char *[]){
2461 "mmss_spdm_jpeg1_div_clk",
2462 },
2463 .num_parents = 1,
2464 .flags = CLK_SET_RATE_PARENT,
2465 .ops = &clk_branch2_ops,
2466 },
2467 },
2468 };
2469
2470 static struct clk_branch mmss_spdm_jpeg2_clk = {
2471 .halt_reg = 0x0224,
2472 .clkr = {
2473 .enable_reg = 0x0224,
2474 .enable_mask = BIT(0),
2475 .hw.init = &(struct clk_init_data){
2476 .name = "mmss_spdm_jpeg2_clk",
2477 .parent_names = (const char *[]){
2478 "mmss_spdm_jpeg2_div_clk",
2479 },
2480 .num_parents = 1,
2481 .flags = CLK_SET_RATE_PARENT,
2482 .ops = &clk_branch2_ops,
2483 },
2484 },
2485 };
2486
2487 static struct clk_branch mmss_spdm_mdp_clk = {
2488 .halt_reg = 0x020c,
2489 .clkr = {
2490 .enable_reg = 0x020c,
2491 .enable_mask = BIT(0),
2492 .hw.init = &(struct clk_init_data){
2493 .name = "mmss_spdm_mdp_clk",
2494 .parent_names = (const char *[]){
2495 "mmss_spdm_mdp_div_clk",
2496 },
2497 .num_parents = 1,
2498 .flags = CLK_SET_RATE_PARENT,
2499 .ops = &clk_branch2_ops,
2500 },
2501 },
2502 };
2503
2504 static struct clk_branch mmss_spdm_pclk0_clk = {
2505 .halt_reg = 0x0234,
2506 .clkr = {
2507 .enable_reg = 0x0234,
2508 .enable_mask = BIT(0),
2509 .hw.init = &(struct clk_init_data){
2510 .name = "mmss_spdm_pclk0_clk",
2511 .parent_names = (const char *[]){
2512 "mmss_spdm_pclk0_div_clk",
2513 },
2514 .num_parents = 1,
2515 .flags = CLK_SET_RATE_PARENT,
2516 .ops = &clk_branch2_ops,
2517 },
2518 },
2519 };
2520
2521 static struct clk_branch mmss_spdm_pclk1_clk = {
2522 .halt_reg = 0x0228,
2523 .clkr = {
2524 .enable_reg = 0x0228,
2525 .enable_mask = BIT(0),
2526 .hw.init = &(struct clk_init_data){
2527 .name = "mmss_spdm_pclk1_clk",
2528 .parent_names = (const char *[]){
2529 "mmss_spdm_pclk1_div_clk",
2530 },
2531 .num_parents = 1,
2532 .flags = CLK_SET_RATE_PARENT,
2533 .ops = &clk_branch2_ops,
2534 },
2535 },
2536 };
2537
2538 static struct clk_branch mmss_spdm_vcodec0_clk = {
2539 .halt_reg = 0x0214,
2540 .clkr = {
2541 .enable_reg = 0x0214,
2542 .enable_mask = BIT(0),
2543 .hw.init = &(struct clk_init_data){
2544 .name = "mmss_spdm_vcodec0_clk",
2545 .parent_names = (const char *[]){
2546 "mmss_spdm_vcodec0_div_clk",
2547 },
2548 .num_parents = 1,
2549 .flags = CLK_SET_RATE_PARENT,
2550 .ops = &clk_branch2_ops,
2551 },
2552 },
2553 };
2554
2555 static struct clk_branch mmss_spdm_vfe0_clk = {
2556 .halt_reg = 0x0218,
2557 .clkr = {
2558 .enable_reg = 0x0218,
2559 .enable_mask = BIT(0),
2560 .hw.init = &(struct clk_init_data){
2561 .name = "mmss_spdm_vfe0_clk",
2562 .parent_names = (const char *[]){
2563 "mmss_spdm_vfe0_div_clk",
2564 },
2565 .num_parents = 1,
2566 .flags = CLK_SET_RATE_PARENT,
2567 .ops = &clk_branch2_ops,
2568 },
2569 },
2570 };
2571
2572 static struct clk_branch mmss_spdm_vfe1_clk = {
2573 .halt_reg = 0x021c,
2574 .clkr = {
2575 .enable_reg = 0x021c,
2576 .enable_mask = BIT(0),
2577 .hw.init = &(struct clk_init_data){
2578 .name = "mmss_spdm_vfe1_clk",
2579 .parent_names = (const char *[]){
2580 "mmss_spdm_vfe1_div_clk",
2581 },
2582 .num_parents = 1,
2583 .flags = CLK_SET_RATE_PARENT,
2584 .ops = &clk_branch2_ops,
2585 },
2586 },
2587 };
2588
2589 static struct clk_branch mmss_spdm_rm_axi_clk = {
2590 .halt_reg = 0x0304,
2591 .clkr = {
2592 .enable_reg = 0x0304,
2593 .enable_mask = BIT(0),
2594 .hw.init = &(struct clk_init_data){
2595 .name = "mmss_spdm_rm_axi_clk",
2596 .parent_names = (const char *[]){
2597 "mmss_axi_clk_src",
2598 },
2599 .num_parents = 1,
2600 .flags = CLK_SET_RATE_PARENT,
2601 .ops = &clk_branch2_ops,
2602 },
2603 },
2604 };
2605
2606 static struct clk_branch mmss_spdm_rm_ocmemnoc_clk = {
2607 .halt_reg = 0x0308,
2608 .clkr = {
2609 .enable_reg = 0x0308,
2610 .enable_mask = BIT(0),
2611 .hw.init = &(struct clk_init_data){
2612 .name = "mmss_spdm_rm_ocmemnoc_clk",
2613 .parent_names = (const char *[]){
2614 "ocmemnoc_clk_src",
2615 },
2616 .num_parents = 1,
2617 .flags = CLK_SET_RATE_PARENT,
2618 .ops = &clk_branch2_ops,
2619 },
2620 },
2621 };
2622
2623
2624 static struct clk_branch mmss_misc_ahb_clk = {
2625 .halt_reg = 0x502c,
2626 .clkr = {
2627 .enable_reg = 0x502c,
2628 .enable_mask = BIT(0),
2629 .hw.init = &(struct clk_init_data){
2630 .name = "mmss_misc_ahb_clk",
2631 .parent_names = (const char *[]){
2632 "mmss_ahb_clk_src",
2633 },
2634 .num_parents = 1,
2635 .flags = CLK_SET_RATE_PARENT,
2636 .ops = &clk_branch2_ops,
2637 },
2638 },
2639 };
2640
2641 static struct clk_branch mmss_mmssnoc_ahb_clk = {
2642 .halt_reg = 0x5024,
2643 .clkr = {
2644 .enable_reg = 0x5024,
2645 .enable_mask = BIT(0),
2646 .hw.init = &(struct clk_init_data){
2647 .name = "mmss_mmssnoc_ahb_clk",
2648 .parent_names = (const char *[]){
2649 "mmss_ahb_clk_src",
2650 },
2651 .num_parents = 1,
2652 .ops = &clk_branch2_ops,
2653 .flags = CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED,
2654 },
2655 },
2656 };
2657
2658 static struct clk_branch mmss_mmssnoc_bto_ahb_clk = {
2659 .halt_reg = 0x5028,
2660 .clkr = {
2661 .enable_reg = 0x5028,
2662 .enable_mask = BIT(0),
2663 .hw.init = &(struct clk_init_data){
2664 .name = "mmss_mmssnoc_bto_ahb_clk",
2665 .parent_names = (const char *[]){
2666 "mmss_ahb_clk_src",
2667 },
2668 .num_parents = 1,
2669 .ops = &clk_branch2_ops,
2670 .flags = CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED,
2671 },
2672 },
2673 };
2674
2675 static struct clk_branch mmss_mmssnoc_axi_clk = {
2676 .halt_reg = 0x506c,
2677 .clkr = {
2678 .enable_reg = 0x506c,
2679 .enable_mask = BIT(0),
2680 .hw.init = &(struct clk_init_data){
2681 .name = "mmss_mmssnoc_axi_clk",
2682 .parent_names = (const char *[]){
2683 "mmss_axi_clk_src",
2684 },
2685 .num_parents = 1,
2686 .flags = CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED,
2687 .ops = &clk_branch2_ops,
2688 },
2689 },
2690 };
2691
2692 static struct clk_branch mmss_s0_axi_clk = {
2693 .halt_reg = 0x5064,
2694 .clkr = {
2695 .enable_reg = 0x5064,
2696 .enable_mask = BIT(0),
2697 .hw.init = &(struct clk_init_data){
2698 .name = "mmss_s0_axi_clk",
2699 .parent_names = (const char *[]){
2700 "mmss_axi_clk_src",
2701 },
2702 .num_parents = 1,
2703 .ops = &clk_branch2_ops,
2704 .flags = CLK_SET_RATE_PARENT | CLK_IGNORE_UNUSED,
2705 },
2706 },
2707 };
2708
2709 static struct clk_branch ocmemcx_ahb_clk = {
2710 .halt_reg = 0x405c,
2711 .clkr = {
2712 .enable_reg = 0x405c,
2713 .enable_mask = BIT(0),
2714 .hw.init = &(struct clk_init_data){
2715 .name = "ocmemcx_ahb_clk",
2716 .parent_names = (const char *[]){
2717 "mmss_ahb_clk_src",
2718 },
2719 .num_parents = 1,
2720 .flags = CLK_SET_RATE_PARENT,
2721 .ops = &clk_branch2_ops,
2722 },
2723 },
2724 };
2725
2726 static struct clk_branch ocmemcx_ocmemnoc_clk = {
2727 .halt_reg = 0x4058,
2728 .clkr = {
2729 .enable_reg = 0x4058,
2730 .enable_mask = BIT(0),
2731 .hw.init = &(struct clk_init_data){
2732 .name = "ocmemcx_ocmemnoc_clk",
2733 .parent_names = (const char *[]){
2734 "ocmemnoc_clk_src",
2735 },
2736 .num_parents = 1,
2737 .flags = CLK_SET_RATE_PARENT,
2738 .ops = &clk_branch2_ops,
2739 },
2740 },
2741 };
2742
2743 static struct clk_branch oxili_ocmemgx_clk = {
2744 .halt_reg = 0x402c,
2745 .clkr = {
2746 .enable_reg = 0x402c,
2747 .enable_mask = BIT(0),
2748 .hw.init = &(struct clk_init_data){
2749 .name = "oxili_ocmemgx_clk",
2750 .parent_names = (const char *[]){
2751 "gfx3d_clk_src",
2752 },
2753 .num_parents = 1,
2754 .flags = CLK_SET_RATE_PARENT,
2755 .ops = &clk_branch2_ops,
2756 },
2757 },
2758 };
2759
2760 static struct clk_branch oxili_gfx3d_clk = {
2761 .halt_reg = 0x4028,
2762 .clkr = {
2763 .enable_reg = 0x4028,
2764 .enable_mask = BIT(0),
2765 .hw.init = &(struct clk_init_data){
2766 .name = "oxili_gfx3d_clk",
2767 .parent_names = (const char *[]){
2768 "gfx3d_clk_src",
2769 },
2770 .num_parents = 1,
2771 .flags = CLK_SET_RATE_PARENT,
2772 .ops = &clk_branch2_ops,
2773 },
2774 },
2775 };
2776
2777 static struct clk_branch oxili_rbbmtimer_clk = {
2778 .halt_reg = 0x40b0,
2779 .clkr = {
2780 .enable_reg = 0x40b0,
2781 .enable_mask = BIT(0),
2782 .hw.init = &(struct clk_init_data){
2783 .name = "oxili_rbbmtimer_clk",
2784 .parent_names = (const char *[]){
2785 "rbbmtimer_clk_src",
2786 },
2787 .num_parents = 1,
2788 .flags = CLK_SET_RATE_PARENT,
2789 .ops = &clk_branch2_ops,
2790 },
2791 },
2792 };
2793
2794 static struct clk_branch oxilicx_ahb_clk = {
2795 .halt_reg = 0x403c,
2796 .clkr = {
2797 .enable_reg = 0x403c,
2798 .enable_mask = BIT(0),
2799 .hw.init = &(struct clk_init_data){
2800 .name = "oxilicx_ahb_clk",
2801 .parent_names = (const char *[]){
2802 "mmss_ahb_clk_src",
2803 },
2804 .num_parents = 1,
2805 .flags = CLK_SET_RATE_PARENT,
2806 .ops = &clk_branch2_ops,
2807 },
2808 },
2809 };
2810
2811 static struct clk_branch venus0_ahb_clk = {
2812 .halt_reg = 0x1030,
2813 .clkr = {
2814 .enable_reg = 0x1030,
2815 .enable_mask = BIT(0),
2816 .hw.init = &(struct clk_init_data){
2817 .name = "venus0_ahb_clk",
2818 .parent_names = (const char *[]){
2819 "mmss_ahb_clk_src",
2820 },
2821 .num_parents = 1,
2822 .flags = CLK_SET_RATE_PARENT,
2823 .ops = &clk_branch2_ops,
2824 },
2825 },
2826 };
2827
2828 static struct clk_branch venus0_axi_clk = {
2829 .halt_reg = 0x1034,
2830 .clkr = {
2831 .enable_reg = 0x1034,
2832 .enable_mask = BIT(0),
2833 .hw.init = &(struct clk_init_data){
2834 .name = "venus0_axi_clk",
2835 .parent_names = (const char *[]){
2836 "mmss_axi_clk_src",
2837 },
2838 .num_parents = 1,
2839 .flags = CLK_SET_RATE_PARENT,
2840 .ops = &clk_branch2_ops,
2841 },
2842 },
2843 };
2844
2845 static struct clk_branch venus0_core0_vcodec_clk = {
2846 .halt_reg = 0x1048,
2847 .clkr = {
2848 .enable_reg = 0x1048,
2849 .enable_mask = BIT(0),
2850 .hw.init = &(struct clk_init_data){
2851 .name = "venus0_core0_vcodec_clk",
2852 .parent_names = (const char *[]){
2853 "vcodec0_clk_src",
2854 },
2855 .num_parents = 1,
2856 .flags = CLK_SET_RATE_PARENT,
2857 .ops = &clk_branch2_ops,
2858 },
2859 },
2860 };
2861
2862 static struct clk_branch venus0_core1_vcodec_clk = {
2863 .halt_reg = 0x104c,
2864 .clkr = {
2865 .enable_reg = 0x104c,
2866 .enable_mask = BIT(0),
2867 .hw.init = &(struct clk_init_data){
2868 .name = "venus0_core1_vcodec_clk",
2869 .parent_names = (const char *[]){
2870 "vcodec0_clk_src",
2871 },
2872 .num_parents = 1,
2873 .flags = CLK_SET_RATE_PARENT,
2874 .ops = &clk_branch2_ops,
2875 },
2876 },
2877 };
2878
2879 static struct clk_branch venus0_ocmemnoc_clk = {
2880 .halt_reg = 0x1038,
2881 .clkr = {
2882 .enable_reg = 0x1038,
2883 .enable_mask = BIT(0),
2884 .hw.init = &(struct clk_init_data){
2885 .name = "venus0_ocmemnoc_clk",
2886 .parent_names = (const char *[]){
2887 "ocmemnoc_clk_src",
2888 },
2889 .num_parents = 1,
2890 .flags = CLK_SET_RATE_PARENT,
2891 .ops = &clk_branch2_ops,
2892 },
2893 },
2894 };
2895
2896 static struct clk_branch venus0_vcodec0_clk = {
2897 .halt_reg = 0x1028,
2898 .clkr = {
2899 .enable_reg = 0x1028,
2900 .enable_mask = BIT(0),
2901 .hw.init = &(struct clk_init_data){
2902 .name = "venus0_vcodec0_clk",
2903 .parent_names = (const char *[]){
2904 "vcodec0_clk_src",
2905 },
2906 .num_parents = 1,
2907 .flags = CLK_SET_RATE_PARENT,
2908 .ops = &clk_branch2_ops,
2909 },
2910 },
2911 };
2912
2913 static struct clk_branch vpu_ahb_clk = {
2914 .halt_reg = 0x1430,
2915 .clkr = {
2916 .enable_reg = 0x1430,
2917 .enable_mask = BIT(0),
2918 .hw.init = &(struct clk_init_data){
2919 .name = "vpu_ahb_clk",
2920 .parent_names = (const char *[]){
2921 "mmss_ahb_clk_src",
2922 },
2923 .num_parents = 1,
2924 .flags = CLK_SET_RATE_PARENT,
2925 .ops = &clk_branch2_ops,
2926 },
2927 },
2928 };
2929
2930 static struct clk_branch vpu_axi_clk = {
2931 .halt_reg = 0x143c,
2932 .clkr = {
2933 .enable_reg = 0x143c,
2934 .enable_mask = BIT(0),
2935 .hw.init = &(struct clk_init_data){
2936 .name = "vpu_axi_clk",
2937 .parent_names = (const char *[]){
2938 "mmss_axi_clk_src",
2939 },
2940 .num_parents = 1,
2941 .flags = CLK_SET_RATE_PARENT,
2942 .ops = &clk_branch2_ops,
2943 },
2944 },
2945 };
2946
2947 static struct clk_branch vpu_bus_clk = {
2948 .halt_reg = 0x1440,
2949 .clkr = {
2950 .enable_reg = 0x1440,
2951 .enable_mask = BIT(0),
2952 .hw.init = &(struct clk_init_data){
2953 .name = "vpu_bus_clk",
2954 .parent_names = (const char *[]){
2955 "vpu_bus_clk_src",
2956 },
2957 .num_parents = 1,
2958 .flags = CLK_SET_RATE_PARENT,
2959 .ops = &clk_branch2_ops,
2960 },
2961 },
2962 };
2963
2964 static struct clk_branch vpu_cxo_clk = {
2965 .halt_reg = 0x1434,
2966 .clkr = {
2967 .enable_reg = 0x1434,
2968 .enable_mask = BIT(0),
2969 .hw.init = &(struct clk_init_data){
2970 .name = "vpu_cxo_clk",
2971 .parent_names = (const char *[]){ "xo" },
2972 .num_parents = 1,
2973 .flags = CLK_SET_RATE_PARENT,
2974 .ops = &clk_branch2_ops,
2975 },
2976 },
2977 };
2978
2979 static struct clk_branch vpu_maple_clk = {
2980 .halt_reg = 0x142c,
2981 .clkr = {
2982 .enable_reg = 0x142c,
2983 .enable_mask = BIT(0),
2984 .hw.init = &(struct clk_init_data){
2985 .name = "vpu_maple_clk",
2986 .parent_names = (const char *[]){
2987 "maple_clk_src",
2988 },
2989 .num_parents = 1,
2990 .flags = CLK_SET_RATE_PARENT,
2991 .ops = &clk_branch2_ops,
2992 },
2993 },
2994 };
2995
2996 static struct clk_branch vpu_sleep_clk = {
2997 .halt_reg = 0x1438,
2998 .clkr = {
2999 .enable_reg = 0x1438,
3000 .enable_mask = BIT(0),
3001 .hw.init = &(struct clk_init_data){
3002 .name = "vpu_sleep_clk",
3003 .parent_names = (const char *[]){
3004 "sleep_clk_src",
3005 },
3006 .num_parents = 1,
3007 .flags = CLK_SET_RATE_PARENT,
3008 .ops = &clk_branch2_ops,
3009 },
3010 },
3011 };
3012
3013 static struct clk_branch vpu_vdp_clk = {
3014 .halt_reg = 0x1428,
3015 .clkr = {
3016 .enable_reg = 0x1428,
3017 .enable_mask = BIT(0),
3018 .hw.init = &(struct clk_init_data){
3019 .name = "vpu_vdp_clk",
3020 .parent_names = (const char *[]){
3021 "vdp_clk_src",
3022 },
3023 .num_parents = 1,
3024 .flags = CLK_SET_RATE_PARENT,
3025 .ops = &clk_branch2_ops,
3026 },
3027 },
3028 };
3029
3030 static const struct pll_config mmpll1_config = {
3031 .l = 60,
3032 .m = 25,
3033 .n = 32,
3034 .vco_val = 0x0,
3035 .vco_mask = 0x3 << 20,
3036 .pre_div_val = 0x0,
3037 .pre_div_mask = 0x7 << 12,
3038 .post_div_val = 0x0,
3039 .post_div_mask = 0x3 << 8,
3040 .mn_ena_mask = BIT(24),
3041 .main_output_mask = BIT(0),
3042 };
3043
3044 static const struct pll_config mmpll3_config = {
3045 .l = 48,
3046 .m = 7,
3047 .n = 16,
3048 .vco_val = 0x0,
3049 .vco_mask = 0x3 << 20,
3050 .pre_div_val = 0x0,
3051 .pre_div_mask = 0x7 << 12,
3052 .post_div_val = 0x0,
3053 .post_div_mask = 0x3 << 8,
3054 .mn_ena_mask = BIT(24),
3055 .main_output_mask = BIT(0),
3056 .aux_output_mask = BIT(1),
3057 };
3058
3059 static struct gdsc venus0_gdsc = {
3060 .gdscr = 0x1024,
3061 .pd = {
3062 .name = "venus0",
3063 },
3064 .pwrsts = PWRSTS_OFF_ON,
3065 };
3066
3067 static struct gdsc venus0_core0_gdsc = {
3068 .gdscr = 0x1040,
3069 .pd = {
3070 .name = "venus0_core0",
3071 },
3072 .pwrsts = PWRSTS_OFF_ON,
3073 };
3074
3075 static struct gdsc venus0_core1_gdsc = {
3076 .gdscr = 0x1044,
3077 .pd = {
3078 .name = "venus0_core1",
3079 },
3080 .pwrsts = PWRSTS_OFF_ON,
3081 };
3082
3083 static struct gdsc mdss_gdsc = {
3084 .gdscr = 0x2304,
3085 .cxcs = (unsigned int []){ 0x231c, 0x2320 },
3086 .cxc_count = 2,
3087 .pd = {
3088 .name = "mdss",
3089 },
3090 .pwrsts = PWRSTS_OFF_ON,
3091 };
3092
3093 static struct gdsc camss_jpeg_gdsc = {
3094 .gdscr = 0x35a4,
3095 .pd = {
3096 .name = "camss_jpeg",
3097 },
3098 .pwrsts = PWRSTS_OFF_ON,
3099 };
3100
3101 static struct gdsc camss_vfe_gdsc = {
3102 .gdscr = 0x36a4,
3103 .cxcs = (unsigned int []){ 0x36a8, 0x36ac, 0x36b0 },
3104 .cxc_count = 3,
3105 .pd = {
3106 .name = "camss_vfe",
3107 },
3108 .pwrsts = PWRSTS_OFF_ON,
3109 };
3110
3111 static struct gdsc oxili_gdsc = {
3112 .gdscr = 0x4024,
3113 .cxcs = (unsigned int []){ 0x4028 },
3114 .cxc_count = 1,
3115 .pd = {
3116 .name = "oxili",
3117 },
3118 .pwrsts = PWRSTS_OFF_ON,
3119 };
3120
3121 static struct gdsc oxilicx_gdsc = {
3122 .gdscr = 0x4034,
3123 .pd = {
3124 .name = "oxilicx",
3125 },
3126 .pwrsts = PWRSTS_OFF_ON,
3127 };
3128
3129 static struct clk_regmap *mmcc_apq8084_clocks[] = {
3130 [MMSS_AHB_CLK_SRC] = &mmss_ahb_clk_src.clkr,
3131 [MMSS_AXI_CLK_SRC] = &mmss_axi_clk_src.clkr,
3132 [MMPLL0] = &mmpll0.clkr,
3133 [MMPLL0_VOTE] = &mmpll0_vote,
3134 [MMPLL1] = &mmpll1.clkr,
3135 [MMPLL1_VOTE] = &mmpll1_vote,
3136 [MMPLL2] = &mmpll2.clkr,
3137 [MMPLL3] = &mmpll3.clkr,
3138 [MMPLL4] = &mmpll4.clkr,
3139 [CSI0_CLK_SRC] = &csi0_clk_src.clkr,
3140 [CSI1_CLK_SRC] = &csi1_clk_src.clkr,
3141 [CSI2_CLK_SRC] = &csi2_clk_src.clkr,
3142 [CSI3_CLK_SRC] = &csi3_clk_src.clkr,
3143 [VCODEC0_CLK_SRC] = &vcodec0_clk_src.clkr,
3144 [VFE0_CLK_SRC] = &vfe0_clk_src.clkr,
3145 [VFE1_CLK_SRC] = &vfe1_clk_src.clkr,
3146 [MDP_CLK_SRC] = &mdp_clk_src.clkr,
3147 [PCLK0_CLK_SRC] = &pclk0_clk_src.clkr,
3148 [PCLK1_CLK_SRC] = &pclk1_clk_src.clkr,
3149 [OCMEMNOC_CLK_SRC] = &ocmemnoc_clk_src.clkr,
3150 [GFX3D_CLK_SRC] = &gfx3d_clk_src.clkr,
3151 [JPEG0_CLK_SRC] = &jpeg0_clk_src.clkr,
3152 [JPEG1_CLK_SRC] = &jpeg1_clk_src.clkr,
3153 [JPEG2_CLK_SRC] = &jpeg2_clk_src.clkr,
3154 [EDPPIXEL_CLK_SRC] = &edppixel_clk_src.clkr,
3155 [EXTPCLK_CLK_SRC] = &extpclk_clk_src.clkr,
3156 [VP_CLK_SRC] = &vp_clk_src.clkr,
3157 [CCI_CLK_SRC] = &cci_clk_src.clkr,
3158 [CAMSS_GP0_CLK_SRC] = &camss_gp0_clk_src.clkr,
3159 [CAMSS_GP1_CLK_SRC] = &camss_gp1_clk_src.clkr,
3160 [MCLK0_CLK_SRC] = &mclk0_clk_src.clkr,
3161 [MCLK1_CLK_SRC] = &mclk1_clk_src.clkr,
3162 [MCLK2_CLK_SRC] = &mclk2_clk_src.clkr,
3163 [MCLK3_CLK_SRC] = &mclk3_clk_src.clkr,
3164 [CSI0PHYTIMER_CLK_SRC] = &csi0phytimer_clk_src.clkr,
3165 [CSI1PHYTIMER_CLK_SRC] = &csi1phytimer_clk_src.clkr,
3166 [CSI2PHYTIMER_CLK_SRC] = &csi2phytimer_clk_src.clkr,
3167 [CPP_CLK_SRC] = &cpp_clk_src.clkr,
3168 [BYTE0_CLK_SRC] = &byte0_clk_src.clkr,
3169 [BYTE1_CLK_SRC] = &byte1_clk_src.clkr,
3170 [EDPAUX_CLK_SRC] = &edpaux_clk_src.clkr,
3171 [EDPLINK_CLK_SRC] = &edplink_clk_src.clkr,
3172 [ESC0_CLK_SRC] = &esc0_clk_src.clkr,
3173 [ESC1_CLK_SRC] = &esc1_clk_src.clkr,
3174 [HDMI_CLK_SRC] = &hdmi_clk_src.clkr,
3175 [VSYNC_CLK_SRC] = &vsync_clk_src.clkr,
3176 [MMSS_RBCPR_CLK_SRC] = &rbcpr_clk_src.clkr,
3177 [RBBMTIMER_CLK_SRC] = &rbbmtimer_clk_src.clkr,
3178 [MAPLE_CLK_SRC] = &maple_clk_src.clkr,
3179 [VDP_CLK_SRC] = &vdp_clk_src.clkr,
3180 [VPU_BUS_CLK_SRC] = &vpu_bus_clk_src.clkr,
3181 [MMSS_CXO_CLK] = &mmss_cxo_clk.clkr,
3182 [MMSS_SLEEPCLK_CLK] = &mmss_sleepclk_clk.clkr,
3183 [AVSYNC_AHB_CLK] = &avsync_ahb_clk.clkr,
3184 [AVSYNC_EDPPIXEL_CLK] = &avsync_edppixel_clk.clkr,
3185 [AVSYNC_EXTPCLK_CLK] = &avsync_extpclk_clk.clkr,
3186 [AVSYNC_PCLK0_CLK] = &avsync_pclk0_clk.clkr,
3187 [AVSYNC_PCLK1_CLK] = &avsync_pclk1_clk.clkr,
3188 [AVSYNC_VP_CLK] = &avsync_vp_clk.clkr,
3189 [CAMSS_AHB_CLK] = &camss_ahb_clk.clkr,
3190 [CAMSS_CCI_CCI_AHB_CLK] = &camss_cci_cci_ahb_clk.clkr,
3191 [CAMSS_CCI_CCI_CLK] = &camss_cci_cci_clk.clkr,
3192 [CAMSS_CSI0_AHB_CLK] = &camss_csi0_ahb_clk.clkr,
3193 [CAMSS_CSI0_CLK] = &camss_csi0_clk.clkr,
3194 [CAMSS_CSI0PHY_CLK] = &camss_csi0phy_clk.clkr,
3195 [CAMSS_CSI0PIX_CLK] = &camss_csi0pix_clk.clkr,
3196 [CAMSS_CSI0RDI_CLK] = &camss_csi0rdi_clk.clkr,
3197 [CAMSS_CSI1_AHB_CLK] = &camss_csi1_ahb_clk.clkr,
3198 [CAMSS_CSI1_CLK] = &camss_csi1_clk.clkr,
3199 [CAMSS_CSI1PHY_CLK] = &camss_csi1phy_clk.clkr,
3200 [CAMSS_CSI1PIX_CLK] = &camss_csi1pix_clk.clkr,
3201 [CAMSS_CSI1RDI_CLK] = &camss_csi1rdi_clk.clkr,
3202 [CAMSS_CSI2_AHB_CLK] = &camss_csi2_ahb_clk.clkr,
3203 [CAMSS_CSI2_CLK] = &camss_csi2_clk.clkr,
3204 [CAMSS_CSI2PHY_CLK] = &camss_csi2phy_clk.clkr,
3205 [CAMSS_CSI2PIX_CLK] = &camss_csi2pix_clk.clkr,
3206 [CAMSS_CSI2RDI_CLK] = &camss_csi2rdi_clk.clkr,
3207 [CAMSS_CSI3_AHB_CLK] = &camss_csi3_ahb_clk.clkr,
3208 [CAMSS_CSI3_CLK] = &camss_csi3_clk.clkr,
3209 [CAMSS_CSI3PHY_CLK] = &camss_csi3phy_clk.clkr,
3210 [CAMSS_CSI3PIX_CLK] = &camss_csi3pix_clk.clkr,
3211 [CAMSS_CSI3RDI_CLK] = &camss_csi3rdi_clk.clkr,
3212 [CAMSS_CSI_VFE0_CLK] = &camss_csi_vfe0_clk.clkr,
3213 [CAMSS_CSI_VFE1_CLK] = &camss_csi_vfe1_clk.clkr,
3214 [CAMSS_GP0_CLK] = &camss_gp0_clk.clkr,
3215 [CAMSS_GP1_CLK] = &camss_gp1_clk.clkr,
3216 [CAMSS_ISPIF_AHB_CLK] = &camss_ispif_ahb_clk.clkr,
3217 [CAMSS_JPEG_JPEG0_CLK] = &camss_jpeg_jpeg0_clk.clkr,
3218 [CAMSS_JPEG_JPEG1_CLK] = &camss_jpeg_jpeg1_clk.clkr,
3219 [CAMSS_JPEG_JPEG2_CLK] = &camss_jpeg_jpeg2_clk.clkr,
3220 [CAMSS_JPEG_JPEG_AHB_CLK] = &camss_jpeg_jpeg_ahb_clk.clkr,
3221 [CAMSS_JPEG_JPEG_AXI_CLK] = &camss_jpeg_jpeg_axi_clk.clkr,
3222 [CAMSS_MCLK0_CLK] = &camss_mclk0_clk.clkr,
3223 [CAMSS_MCLK1_CLK] = &camss_mclk1_clk.clkr,
3224 [CAMSS_MCLK2_CLK] = &camss_mclk2_clk.clkr,
3225 [CAMSS_MCLK3_CLK] = &camss_mclk3_clk.clkr,
3226 [CAMSS_MICRO_AHB_CLK] = &camss_micro_ahb_clk.clkr,
3227 [CAMSS_PHY0_CSI0PHYTIMER_CLK] = &camss_phy0_csi0phytimer_clk.clkr,
3228 [CAMSS_PHY1_CSI1PHYTIMER_CLK] = &camss_phy1_csi1phytimer_clk.clkr,
3229 [CAMSS_PHY2_CSI2PHYTIMER_CLK] = &camss_phy2_csi2phytimer_clk.clkr,
3230 [CAMSS_TOP_AHB_CLK] = &camss_top_ahb_clk.clkr,
3231 [CAMSS_VFE_CPP_AHB_CLK] = &camss_vfe_cpp_ahb_clk.clkr,
3232 [CAMSS_VFE_CPP_CLK] = &camss_vfe_cpp_clk.clkr,
3233 [CAMSS_VFE_VFE0_CLK] = &camss_vfe_vfe0_clk.clkr,
3234 [CAMSS_VFE_VFE1_CLK] = &camss_vfe_vfe1_clk.clkr,
3235 [CAMSS_VFE_VFE_AHB_CLK] = &camss_vfe_vfe_ahb_clk.clkr,
3236 [CAMSS_VFE_VFE_AXI_CLK] = &camss_vfe_vfe_axi_clk.clkr,
3237 [MDSS_AHB_CLK] = &mdss_ahb_clk.clkr,
3238 [MDSS_AXI_CLK] = &mdss_axi_clk.clkr,
3239 [MDSS_BYTE0_CLK] = &mdss_byte0_clk.clkr,
3240 [MDSS_BYTE1_CLK] = &mdss_byte1_clk.clkr,
3241 [MDSS_EDPAUX_CLK] = &mdss_edpaux_clk.clkr,
3242 [MDSS_EDPLINK_CLK] = &mdss_edplink_clk.clkr,
3243 [MDSS_EDPPIXEL_CLK] = &mdss_edppixel_clk.clkr,
3244 [MDSS_ESC0_CLK] = &mdss_esc0_clk.clkr,
3245 [MDSS_ESC1_CLK] = &mdss_esc1_clk.clkr,
3246 [MDSS_EXTPCLK_CLK] = &mdss_extpclk_clk.clkr,
3247 [MDSS_HDMI_AHB_CLK] = &mdss_hdmi_ahb_clk.clkr,
3248 [MDSS_HDMI_CLK] = &mdss_hdmi_clk.clkr,
3249 [MDSS_MDP_CLK] = &mdss_mdp_clk.clkr,
3250 [MDSS_MDP_LUT_CLK] = &mdss_mdp_lut_clk.clkr,
3251 [MDSS_PCLK0_CLK] = &mdss_pclk0_clk.clkr,
3252 [MDSS_PCLK1_CLK] = &mdss_pclk1_clk.clkr,
3253 [MDSS_VSYNC_CLK] = &mdss_vsync_clk.clkr,
3254 [MMSS_RBCPR_AHB_CLK] = &mmss_rbcpr_ahb_clk.clkr,
3255 [MMSS_RBCPR_CLK] = &mmss_rbcpr_clk.clkr,
3256 [MMSS_SPDM_AHB_CLK] = &mmss_spdm_ahb_clk.clkr,
3257 [MMSS_SPDM_AXI_CLK] = &mmss_spdm_axi_clk.clkr,
3258 [MMSS_SPDM_CSI0_CLK] = &mmss_spdm_csi0_clk.clkr,
3259 [MMSS_SPDM_GFX3D_CLK] = &mmss_spdm_gfx3d_clk.clkr,
3260 [MMSS_SPDM_JPEG0_CLK] = &mmss_spdm_jpeg0_clk.clkr,
3261 [MMSS_SPDM_JPEG1_CLK] = &mmss_spdm_jpeg1_clk.clkr,
3262 [MMSS_SPDM_JPEG2_CLK] = &mmss_spdm_jpeg2_clk.clkr,
3263 [MMSS_SPDM_MDP_CLK] = &mmss_spdm_mdp_clk.clkr,
3264 [MMSS_SPDM_PCLK0_CLK] = &mmss_spdm_pclk0_clk.clkr,
3265 [MMSS_SPDM_PCLK1_CLK] = &mmss_spdm_pclk1_clk.clkr,
3266 [MMSS_SPDM_VCODEC0_CLK] = &mmss_spdm_vcodec0_clk.clkr,
3267 [MMSS_SPDM_VFE0_CLK] = &mmss_spdm_vfe0_clk.clkr,
3268 [MMSS_SPDM_VFE1_CLK] = &mmss_spdm_vfe1_clk.clkr,
3269 [MMSS_SPDM_RM_AXI_CLK] = &mmss_spdm_rm_axi_clk.clkr,
3270 [MMSS_SPDM_RM_OCMEMNOC_CLK] = &mmss_spdm_rm_ocmemnoc_clk.clkr,
3271 [MMSS_MISC_AHB_CLK] = &mmss_misc_ahb_clk.clkr,
3272 [MMSS_MMSSNOC_AHB_CLK] = &mmss_mmssnoc_ahb_clk.clkr,
3273 [MMSS_MMSSNOC_BTO_AHB_CLK] = &mmss_mmssnoc_bto_ahb_clk.clkr,
3274 [MMSS_MMSSNOC_AXI_CLK] = &mmss_mmssnoc_axi_clk.clkr,
3275 [MMSS_S0_AXI_CLK] = &mmss_s0_axi_clk.clkr,
3276 [OCMEMCX_AHB_CLK] = &ocmemcx_ahb_clk.clkr,
3277 [OCMEMCX_OCMEMNOC_CLK] = &ocmemcx_ocmemnoc_clk.clkr,
3278 [OXILI_OCMEMGX_CLK] = &oxili_ocmemgx_clk.clkr,
3279 [OXILI_GFX3D_CLK] = &oxili_gfx3d_clk.clkr,
3280 [OXILI_RBBMTIMER_CLK] = &oxili_rbbmtimer_clk.clkr,
3281 [OXILICX_AHB_CLK] = &oxilicx_ahb_clk.clkr,
3282 [VENUS0_AHB_CLK] = &venus0_ahb_clk.clkr,
3283 [VENUS0_AXI_CLK] = &venus0_axi_clk.clkr,
3284 [VENUS0_CORE0_VCODEC_CLK] = &venus0_core0_vcodec_clk.clkr,
3285 [VENUS0_CORE1_VCODEC_CLK] = &venus0_core1_vcodec_clk.clkr,
3286 [VENUS0_OCMEMNOC_CLK] = &venus0_ocmemnoc_clk.clkr,
3287 [VENUS0_VCODEC0_CLK] = &venus0_vcodec0_clk.clkr,
3288 [VPU_AHB_CLK] = &vpu_ahb_clk.clkr,
3289 [VPU_AXI_CLK] = &vpu_axi_clk.clkr,
3290 [VPU_BUS_CLK] = &vpu_bus_clk.clkr,
3291 [VPU_CXO_CLK] = &vpu_cxo_clk.clkr,
3292 [VPU_MAPLE_CLK] = &vpu_maple_clk.clkr,
3293 [VPU_SLEEP_CLK] = &vpu_sleep_clk.clkr,
3294 [VPU_VDP_CLK] = &vpu_vdp_clk.clkr,
3295 };
3296
3297 static const struct qcom_reset_map mmcc_apq8084_resets[] = {
3298 [MMSS_SPDM_RESET] = { 0x0200 },
3299 [MMSS_SPDM_RM_RESET] = { 0x0300 },
3300 [VENUS0_RESET] = { 0x1020 },
3301 [VPU_RESET] = { 0x1400 },
3302 [MDSS_RESET] = { 0x2300 },
3303 [AVSYNC_RESET] = { 0x2400 },
3304 [CAMSS_PHY0_RESET] = { 0x3020 },
3305 [CAMSS_PHY1_RESET] = { 0x3050 },
3306 [CAMSS_PHY2_RESET] = { 0x3080 },
3307 [CAMSS_CSI0_RESET] = { 0x30b0 },
3308 [CAMSS_CSI0PHY_RESET] = { 0x30c0 },
3309 [CAMSS_CSI0RDI_RESET] = { 0x30d0 },
3310 [CAMSS_CSI0PIX_RESET] = { 0x30e0 },
3311 [CAMSS_CSI1_RESET] = { 0x3120 },
3312 [CAMSS_CSI1PHY_RESET] = { 0x3130 },
3313 [CAMSS_CSI1RDI_RESET] = { 0x3140 },
3314 [CAMSS_CSI1PIX_RESET] = { 0x3150 },
3315 [CAMSS_CSI2_RESET] = { 0x3180 },
3316 [CAMSS_CSI2PHY_RESET] = { 0x3190 },
3317 [CAMSS_CSI2RDI_RESET] = { 0x31a0 },
3318 [CAMSS_CSI2PIX_RESET] = { 0x31b0 },
3319 [CAMSS_CSI3_RESET] = { 0x31e0 },
3320 [CAMSS_CSI3PHY_RESET] = { 0x31f0 },
3321 [CAMSS_CSI3RDI_RESET] = { 0x3200 },
3322 [CAMSS_CSI3PIX_RESET] = { 0x3210 },
3323 [CAMSS_ISPIF_RESET] = { 0x3220 },
3324 [CAMSS_CCI_RESET] = { 0x3340 },
3325 [CAMSS_MCLK0_RESET] = { 0x3380 },
3326 [CAMSS_MCLK1_RESET] = { 0x33b0 },
3327 [CAMSS_MCLK2_RESET] = { 0x33e0 },
3328 [CAMSS_MCLK3_RESET] = { 0x3410 },
3329 [CAMSS_GP0_RESET] = { 0x3440 },
3330 [CAMSS_GP1_RESET] = { 0x3470 },
3331 [CAMSS_TOP_RESET] = { 0x3480 },
3332 [CAMSS_AHB_RESET] = { 0x3488 },
3333 [CAMSS_MICRO_RESET] = { 0x3490 },
3334 [CAMSS_JPEG_RESET] = { 0x35a0 },
3335 [CAMSS_VFE_RESET] = { 0x36a0 },
3336 [CAMSS_CSI_VFE0_RESET] = { 0x3700 },
3337 [CAMSS_CSI_VFE1_RESET] = { 0x3710 },
3338 [OXILI_RESET] = { 0x4020 },
3339 [OXILICX_RESET] = { 0x4030 },
3340 [OCMEMCX_RESET] = { 0x4050 },
3341 [MMSS_RBCRP_RESET] = { 0x4080 },
3342 [MMSSNOCAHB_RESET] = { 0x5020 },
3343 [MMSSNOCAXI_RESET] = { 0x5060 },
3344 };
3345
3346 static struct gdsc *mmcc_apq8084_gdscs[] = {
3347 [VENUS0_GDSC] = &venus0_gdsc,
3348 [VENUS0_CORE0_GDSC] = &venus0_core0_gdsc,
3349 [VENUS0_CORE1_GDSC] = &venus0_core1_gdsc,
3350 [MDSS_GDSC] = &mdss_gdsc,
3351 [CAMSS_JPEG_GDSC] = &camss_jpeg_gdsc,
3352 [CAMSS_VFE_GDSC] = &camss_vfe_gdsc,
3353 [OXILI_GDSC] = &oxili_gdsc,
3354 [OXILICX_GDSC] = &oxilicx_gdsc,
3355 };
3356
3357 static const struct regmap_config mmcc_apq8084_regmap_config = {
3358 .reg_bits = 32,
3359 .reg_stride = 4,
3360 .val_bits = 32,
3361 .max_register = 0x5104,
3362 .fast_io = true,
3363 };
3364
3365 static const struct qcom_cc_desc mmcc_apq8084_desc = {
3366 .config = &mmcc_apq8084_regmap_config,
3367 .clks = mmcc_apq8084_clocks,
3368 .num_clks = ARRAY_SIZE(mmcc_apq8084_clocks),
3369 .resets = mmcc_apq8084_resets,
3370 .num_resets = ARRAY_SIZE(mmcc_apq8084_resets),
3371 .gdscs = mmcc_apq8084_gdscs,
3372 .num_gdscs = ARRAY_SIZE(mmcc_apq8084_gdscs),
3373 };
3374
3375 static const struct of_device_id mmcc_apq8084_match_table[] = {
3376 { .compatible = "qcom,mmcc-apq8084" },
3377 { }
3378 };
3379 MODULE_DEVICE_TABLE(of, mmcc_apq8084_match_table);
3380
mmcc_apq8084_probe(struct platform_device *pdev)3381 static int mmcc_apq8084_probe(struct platform_device *pdev)
3382 {
3383 int ret;
3384 struct regmap *regmap;
3385
3386 ret = qcom_cc_probe(pdev, &mmcc_apq8084_desc);
3387 if (ret)
3388 return ret;
3389
3390 regmap = dev_get_regmap(&pdev->dev, NULL);
3391 clk_pll_configure_sr_hpm_lp(&mmpll1, regmap, &mmpll1_config, true);
3392 clk_pll_configure_sr_hpm_lp(&mmpll3, regmap, &mmpll3_config, false);
3393
3394 return 0;
3395 }
3396
3397 static struct platform_driver mmcc_apq8084_driver = {
3398 .probe = mmcc_apq8084_probe,
3399 .driver = {
3400 .name = "mmcc-apq8084",
3401 .of_match_table = mmcc_apq8084_match_table,
3402 },
3403 };
3404 module_platform_driver(mmcc_apq8084_driver);
3405
3406 MODULE_DESCRIPTION("QCOM MMCC APQ8084 Driver");
3407 MODULE_LICENSE("GPL v2");
3408 MODULE_ALIAS("platform:mmcc-apq8084");
3409