1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3 * Copyright (c) 2021, The Linux Foundation. All rights reserved.
4 * Copyright (c) 2022, Konrad Dybcio <konrad.dybcio@somainline.org>
5 */
6
7 #include <linux/clk-provider.h>
8 #include <linux/module.h>
9 #include <linux/of.h>
10 #include <linux/platform_device.h>
11 #include <linux/regmap.h>
12
13 #include <dt-bindings/clock/qcom,sm6375-gcc.h>
14
15 #include "clk-alpha-pll.h"
16 #include "clk-branch.h"
17 #include "clk-rcg.h"
18 #include "clk-regmap.h"
19 #include "clk-regmap-divider.h"
20 #include "clk-regmap-mux.h"
21 #include "clk-regmap-phy-mux.h"
22 #include "gdsc.h"
23 #include "reset.h"
24
25 enum {
26 DT_BI_TCXO,
27 DT_BI_TCXO_AO,
28 DT_SLEEP_CLK
29 };
30
31 enum {
32 P_BI_TCXO,
33 P_GPLL0_OUT_EVEN,
34 P_GPLL0_OUT_MAIN,
35 P_GPLL0_OUT_ODD,
36 P_GPLL10_OUT_EVEN,
37 P_GPLL11_OUT_EVEN,
38 P_GPLL11_OUT_ODD,
39 P_GPLL3_OUT_EVEN,
40 P_GPLL3_OUT_MAIN,
41 P_GPLL4_OUT_EVEN,
42 P_GPLL5_OUT_EVEN,
43 P_GPLL6_OUT_EVEN,
44 P_GPLL6_OUT_MAIN,
45 P_GPLL7_OUT_EVEN,
46 P_GPLL8_OUT_EVEN,
47 P_GPLL8_OUT_MAIN,
48 P_GPLL9_OUT_EARLY,
49 P_GPLL9_OUT_MAIN,
50 P_SLEEP_CLK,
51 };
52
53 static struct pll_vco lucid_vco[] = {
54 { 249600000, 2000000000, 0 },
55 };
56
57 static struct pll_vco zonda_vco[] = {
58 { 595200000, 3600000000UL, 0 },
59 };
60
61 static struct clk_alpha_pll gpll0 = {
62 .offset = 0x0,
63 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID],
64 .clkr = {
65 .enable_reg = 0x79000,
66 .enable_mask = BIT(0),
67 .hw.init = &(struct clk_init_data){
68 .name = "gpll0",
69 .parent_data = &(const struct clk_parent_data){
70 .index = DT_BI_TCXO,
71 },
72 .num_parents = 1,
73 .ops = &clk_alpha_pll_fixed_lucid_ops,
74 },
75 },
76 };
77
78 static const struct clk_div_table post_div_table_gpll0_out_even[] = {
79 { 0x1, 2 },
80 { }
81 };
82
83 static struct clk_alpha_pll_postdiv gpll0_out_even = {
84 .offset = 0x0,
85 .post_div_shift = 8,
86 .post_div_table = post_div_table_gpll0_out_even,
87 .num_post_div = ARRAY_SIZE(post_div_table_gpll0_out_even),
88 .width = 4,
89 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID],
90 .clkr.hw.init = &(struct clk_init_data){
91 .name = "gpll0_out_even",
92 .parent_hws = (const struct clk_hw*[]){
93 &gpll0.clkr.hw,
94 },
95 .num_parents = 1,
96 .ops = &clk_alpha_pll_postdiv_lucid_ops,
97 },
98 };
99
100 static const struct clk_div_table post_div_table_gpll0_out_odd[] = {
101 { 0x3, 3 },
102 { }
103 };
104
105 static struct clk_alpha_pll_postdiv gpll0_out_odd = {
106 .offset = 0x0,
107 .post_div_shift = 12,
108 .post_div_table = post_div_table_gpll0_out_odd,
109 .num_post_div = ARRAY_SIZE(post_div_table_gpll0_out_odd),
110 .width = 4,
111 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID],
112 .clkr.hw.init = &(struct clk_init_data){
113 .name = "gpll0_out_odd",
114 .parent_hws = (const struct clk_hw*[]){
115 &gpll0.clkr.hw,
116 },
117 .num_parents = 1,
118 .ops = &clk_alpha_pll_postdiv_lucid_ops,
119 },
120 };
121
122 static struct clk_alpha_pll gpll1 = {
123 .offset = 0x1000,
124 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID],
125 .clkr = {
126 .enable_reg = 0x79000,
127 .enable_mask = BIT(1),
128 .hw.init = &(struct clk_init_data){
129 .name = "gpll1",
130 .parent_data = &(const struct clk_parent_data){
131 .index = DT_BI_TCXO,
132 },
133 .num_parents = 1,
134 .ops = &clk_alpha_pll_lucid_ops,
135 },
136 },
137 };
138
139 /* 1152MHz Configuration */
140 static const struct alpha_pll_config gpll10_config = {
141 .l = 0x3c,
142 .alpha = 0x0,
143 .config_ctl_val = 0x20485699,
144 .config_ctl_hi_val = 0x00002261,
145 .config_ctl_hi1_val = 0x329a299c,
146 .user_ctl_val = 0x00000001,
147 .user_ctl_hi_val = 0x00000805,
148 .user_ctl_hi1_val = 0x00000000,
149 };
150
151 static struct clk_alpha_pll gpll10 = {
152 .offset = 0xa000,
153 .vco_table = lucid_vco,
154 .num_vco = ARRAY_SIZE(lucid_vco),
155 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID],
156 .flags = SUPPORTS_FSM_LEGACY_MODE,
157 .clkr = {
158 .enable_reg = 0x79000,
159 .enable_mask = BIT(10),
160 .hw.init = &(struct clk_init_data){
161 .name = "gpll10",
162 .parent_data = &(const struct clk_parent_data){
163 .index = DT_BI_TCXO,
164 },
165 .num_parents = 1,
166 .ops = &clk_alpha_pll_fixed_lucid_ops,
167 },
168 },
169 };
170
171 /* 532MHz Configuration */
172 static const struct alpha_pll_config gpll11_config = {
173 .l = 0x1b,
174 .alpha = 0xb555,
175 .config_ctl_val = 0x20485699,
176 .config_ctl_hi_val = 0x00002261,
177 .config_ctl_hi1_val = 0x329a299c,
178 .user_ctl_val = 0x00000001,
179 .user_ctl_hi_val = 0x00000805,
180 .user_ctl_hi1_val = 0x00000000,
181 };
182
183 static struct clk_alpha_pll gpll11 = {
184 .offset = 0xb000,
185 .vco_table = lucid_vco,
186 .num_vco = ARRAY_SIZE(lucid_vco),
187 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID],
188 .flags = SUPPORTS_FSM_LEGACY_MODE,
189 .clkr = {
190 .enable_reg = 0x79000,
191 .enable_mask = BIT(11),
192 .hw.init = &(struct clk_init_data){
193 .name = "gpll11",
194 .parent_data = &(const struct clk_parent_data){
195 .index = DT_BI_TCXO,
196 },
197 .num_parents = 1,
198 .ops = &clk_alpha_pll_lucid_ops,
199 },
200 },
201 };
202
203 static struct clk_alpha_pll gpll3 = {
204 .offset = 0x3000,
205 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID],
206 .clkr = {
207 .enable_reg = 0x79000,
208 .enable_mask = BIT(3),
209 .hw.init = &(struct clk_init_data){
210 .name = "gpll3",
211 .parent_data = &(const struct clk_parent_data){
212 .index = DT_BI_TCXO,
213 },
214 .num_parents = 1,
215 .ops = &clk_alpha_pll_fixed_lucid_ops,
216 },
217 },
218 };
219
220 static const struct clk_div_table post_div_table_gpll3_out_even[] = {
221 { 0x1, 2 },
222 { }
223 };
224
225 static struct clk_alpha_pll_postdiv gpll3_out_even = {
226 .offset = 0x3000,
227 .post_div_shift = 8,
228 .post_div_table = post_div_table_gpll3_out_even,
229 .num_post_div = ARRAY_SIZE(post_div_table_gpll3_out_even),
230 .width = 4,
231 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID],
232 .clkr.hw.init = &(struct clk_init_data){
233 .name = "gpll3_out_even",
234 .parent_hws = (const struct clk_hw*[]){
235 &gpll3.clkr.hw,
236 },
237 .num_parents = 1,
238 .ops = &clk_alpha_pll_postdiv_lucid_ops,
239 },
240 };
241
242 static struct clk_alpha_pll gpll4 = {
243 .offset = 0x4000,
244 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID],
245 .clkr = {
246 .enable_reg = 0x79000,
247 .enable_mask = BIT(4),
248 .hw.init = &(struct clk_init_data){
249 .name = "gpll4",
250 .parent_data = &(const struct clk_parent_data){
251 .index = DT_BI_TCXO,
252 },
253 .num_parents = 1,
254 .ops = &clk_alpha_pll_fixed_lucid_ops,
255 },
256 },
257 };
258
259 static struct clk_alpha_pll gpll5 = {
260 .offset = 0x5000,
261 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID],
262 .clkr = {
263 .enable_reg = 0x79000,
264 .enable_mask = BIT(5),
265 .hw.init = &(struct clk_init_data){
266 .name = "gpll5",
267 .parent_data = &(const struct clk_parent_data){
268 .index = DT_BI_TCXO,
269 },
270 .num_parents = 1,
271 .ops = &clk_alpha_pll_fixed_lucid_ops,
272 },
273 },
274 };
275
276 static struct clk_alpha_pll gpll6 = {
277 .offset = 0x6000,
278 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID],
279 .clkr = {
280 .enable_reg = 0x79000,
281 .enable_mask = BIT(6),
282 .hw.init = &(struct clk_init_data){
283 .name = "gpll6",
284 .parent_data = &(const struct clk_parent_data){
285 .index = DT_BI_TCXO,
286 },
287 .num_parents = 1,
288 .ops = &clk_alpha_pll_fixed_lucid_ops,
289 },
290 },
291 };
292
293 static const struct clk_div_table post_div_table_gpll6_out_even[] = {
294 { 0x1, 2 },
295 { }
296 };
297
298 static struct clk_alpha_pll_postdiv gpll6_out_even = {
299 .offset = 0x6000,
300 .post_div_shift = 8,
301 .post_div_table = post_div_table_gpll6_out_even,
302 .num_post_div = ARRAY_SIZE(post_div_table_gpll6_out_even),
303 .width = 4,
304 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID],
305 .clkr.hw.init = &(struct clk_init_data){
306 .name = "gpll6_out_even",
307 .parent_hws = (const struct clk_hw*[]){
308 &gpll6.clkr.hw,
309 },
310 .num_parents = 1,
311 .ops = &clk_alpha_pll_postdiv_lucid_ops,
312 },
313 };
314
315 static struct clk_alpha_pll gpll7 = {
316 .offset = 0x7000,
317 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID],
318 .clkr = {
319 .enable_reg = 0x79000,
320 .enable_mask = BIT(7),
321 .hw.init = &(struct clk_init_data){
322 .name = "gpll7",
323 .parent_data = &(const struct clk_parent_data){
324 .index = DT_BI_TCXO,
325 },
326 .num_parents = 1,
327 .ops = &clk_alpha_pll_fixed_lucid_ops,
328 },
329 },
330 };
331
332 /* 400MHz Configuration */
333 static const struct alpha_pll_config gpll8_config = {
334 .l = 0x14,
335 .alpha = 0xd555,
336 .config_ctl_val = 0x20485699,
337 .config_ctl_hi_val = 0x00002261,
338 .config_ctl_hi1_val = 0x329a299c,
339 .user_ctl_val = 0x00000101,
340 .user_ctl_hi_val = 0x00000805,
341 .user_ctl_hi1_val = 0x00000000,
342 };
343
344 static struct clk_alpha_pll gpll8 = {
345 .offset = 0x8000,
346 .vco_table = lucid_vco,
347 .num_vco = ARRAY_SIZE(lucid_vco),
348 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID],
349 .flags = SUPPORTS_FSM_LEGACY_MODE,
350 .clkr = {
351 .enable_reg = 0x79000,
352 .enable_mask = BIT(8),
353 .hw.init = &(struct clk_init_data){
354 .name = "gpll8",
355 .parent_data = &(const struct clk_parent_data){
356 .index = DT_BI_TCXO,
357 },
358 .num_parents = 1,
359 .ops = &clk_alpha_pll_lucid_ops,
360 },
361 },
362 };
363
364 static const struct clk_div_table post_div_table_gpll8_out_even[] = {
365 { 0x1, 2 },
366 { }
367 };
368
369 static struct clk_alpha_pll_postdiv gpll8_out_even = {
370 .offset = 0x8000,
371 .post_div_shift = 8,
372 .post_div_table = post_div_table_gpll8_out_even,
373 .num_post_div = ARRAY_SIZE(post_div_table_gpll8_out_even),
374 .width = 4,
375 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID],
376 .clkr.hw.init = &(struct clk_init_data){
377 .name = "gpll8_out_even",
378 .parent_hws = (const struct clk_hw*[]){
379 &gpll8.clkr.hw,
380 },
381 .num_parents = 1,
382 .flags = CLK_SET_RATE_PARENT,
383 .ops = &clk_alpha_pll_postdiv_lucid_ops,
384 },
385 };
386
387 /* 1440MHz Configuration */
388 static const struct alpha_pll_config gpll9_config = {
389 .l = 0x4b,
390 .alpha = 0x0,
391 .config_ctl_val = 0x08200800,
392 .config_ctl_hi_val = 0x05022011,
393 .config_ctl_hi1_val = 0x08000000,
394 .user_ctl_val = 0x00000301,
395 };
396
397 static struct clk_alpha_pll gpll9 = {
398 .offset = 0x9000,
399 .vco_table = zonda_vco,
400 .num_vco = ARRAY_SIZE(zonda_vco),
401 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_ZONDA],
402 .clkr = {
403 .enable_reg = 0x79000,
404 .enable_mask = BIT(9),
405 .hw.init = &(struct clk_init_data){
406 .name = "gpll9",
407 .parent_data = &(const struct clk_parent_data){
408 .index = DT_BI_TCXO,
409 },
410 .num_parents = 1,
411 .ops = &clk_alpha_pll_zonda_ops,
412 },
413 },
414 };
415
416 static const struct clk_div_table post_div_table_gpll9_out_main[] = {
417 { 0x3, 4 },
418 { }
419 };
420
421 static struct clk_alpha_pll_postdiv gpll9_out_main = {
422 .offset = 0x9000,
423 .post_div_shift = 8,
424 .post_div_table = post_div_table_gpll9_out_main,
425 .num_post_div = ARRAY_SIZE(post_div_table_gpll9_out_main),
426 .width = 2,
427 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_ZONDA],
428 .clkr.hw.init = &(struct clk_init_data){
429 .name = "gpll9_out_main",
430 .parent_hws = (const struct clk_hw*[]){
431 &gpll9.clkr.hw,
432 },
433 .num_parents = 1,
434 .flags = CLK_SET_RATE_PARENT,
435 .ops = &clk_alpha_pll_postdiv_zonda_ops,
436 },
437 };
438
439 static const struct parent_map gcc_parent_map_0[] = {
440 { P_BI_TCXO, 0 },
441 { P_GPLL0_OUT_MAIN, 1 },
442 { P_GPLL0_OUT_EVEN, 2 },
443 };
444
445 static const struct clk_parent_data gcc_parent_data_0[] = {
446 { .index = DT_BI_TCXO },
447 { .hw = &gpll0.clkr.hw },
448 { .hw = &gpll0_out_even.clkr.hw },
449 };
450
451 static const struct parent_map gcc_parent_map_1[] = {
452 { P_BI_TCXO, 0 },
453 { P_GPLL0_OUT_MAIN, 1 },
454 { P_GPLL0_OUT_EVEN, 2 },
455 { P_GPLL6_OUT_EVEN, 4 },
456 };
457
458 static const struct clk_parent_data gcc_parent_data_1[] = {
459 { .index = DT_BI_TCXO },
460 { .hw = &gpll0.clkr.hw },
461 { .hw = &gpll0_out_even.clkr.hw },
462 { .hw = &gpll6_out_even.clkr.hw },
463 };
464
465 static const struct parent_map gcc_parent_map_2[] = {
466 { P_BI_TCXO, 0 },
467 { P_GPLL0_OUT_MAIN, 1 },
468 { P_GPLL0_OUT_EVEN, 2 },
469 { P_GPLL0_OUT_ODD, 4 },
470 };
471
472 static const struct clk_parent_data gcc_parent_data_2[] = {
473 { .index = DT_BI_TCXO },
474 { .hw = &gpll0.clkr.hw },
475 { .hw = &gpll0_out_even.clkr.hw },
476 { .hw = &gpll0_out_odd.clkr.hw },
477 };
478
479 static const struct clk_parent_data gcc_parent_data_2_ao[] = {
480 { .index = DT_BI_TCXO_AO },
481 { .hw = &gpll0.clkr.hw },
482 { .hw = &gpll0_out_even.clkr.hw },
483 { .hw = &gpll0_out_odd.clkr.hw },
484 };
485
486 static const struct parent_map gcc_parent_map_3[] = {
487 { P_BI_TCXO, 0 },
488 { P_GPLL0_OUT_MAIN, 1 },
489 { P_GPLL9_OUT_EARLY, 2 },
490 { P_GPLL10_OUT_EVEN, 3 },
491 { P_GPLL9_OUT_MAIN, 4 },
492 { P_GPLL3_OUT_EVEN, 6 },
493 };
494
495 static const struct clk_parent_data gcc_parent_data_3[] = {
496 { .index = DT_BI_TCXO },
497 { .hw = &gpll0.clkr.hw },
498 { .hw = &gpll9.clkr.hw },
499 { .hw = &gpll10.clkr.hw },
500 { .hw = &gpll9_out_main.clkr.hw },
501 { .hw = &gpll3_out_even.clkr.hw },
502 };
503
504 static const struct parent_map gcc_parent_map_4[] = {
505 { P_BI_TCXO, 0 },
506 { P_GPLL0_OUT_MAIN, 1 },
507 { P_GPLL0_OUT_EVEN, 2 },
508 { P_GPLL0_OUT_ODD, 4 },
509 { P_GPLL4_OUT_EVEN, 5 },
510 { P_GPLL3_OUT_EVEN, 6 },
511 };
512
513 static const struct clk_parent_data gcc_parent_data_4[] = {
514 { .index = DT_BI_TCXO },
515 { .hw = &gpll0.clkr.hw },
516 { .hw = &gpll0_out_even.clkr.hw },
517 { .hw = &gpll0_out_odd.clkr.hw },
518 { .hw = &gpll4.clkr.hw },
519 { .hw = &gpll3_out_even.clkr.hw },
520 };
521
522 static const struct parent_map gcc_parent_map_5[] = {
523 { P_BI_TCXO, 0 },
524 { P_GPLL0_OUT_MAIN, 1 },
525 { P_GPLL8_OUT_MAIN, 2 },
526 { P_GPLL10_OUT_EVEN, 3 },
527 { P_GPLL9_OUT_MAIN, 4 },
528 { P_GPLL8_OUT_EVEN, 5 },
529 { P_GPLL3_OUT_EVEN, 6 },
530 };
531
532 static const struct clk_parent_data gcc_parent_data_5[] = {
533 { .index = DT_BI_TCXO },
534 { .hw = &gpll0.clkr.hw },
535 { .hw = &gpll8.clkr.hw },
536 { .hw = &gpll10.clkr.hw },
537 { .hw = &gpll9_out_main.clkr.hw },
538 { .hw = &gpll8_out_even.clkr.hw },
539 { .hw = &gpll3_out_even.clkr.hw },
540 };
541
542 static const struct parent_map gcc_parent_map_6[] = {
543 { P_BI_TCXO, 0 },
544 { P_GPLL0_OUT_MAIN, 1 },
545 { P_GPLL8_OUT_MAIN, 2 },
546 { P_GPLL5_OUT_EVEN, 3 },
547 { P_GPLL9_OUT_MAIN, 4 },
548 { P_GPLL8_OUT_EVEN, 5 },
549 { P_GPLL3_OUT_MAIN, 6 },
550 };
551
552 static const struct clk_parent_data gcc_parent_data_6[] = {
553 { .index = DT_BI_TCXO },
554 { .hw = &gpll0.clkr.hw },
555 { .hw = &gpll8.clkr.hw },
556 { .hw = &gpll5.clkr.hw },
557 { .hw = &gpll9_out_main.clkr.hw },
558 { .hw = &gpll8_out_even.clkr.hw },
559 { .hw = &gpll3.clkr.hw },
560 };
561
562 static const struct parent_map gcc_parent_map_7[] = {
563 { P_BI_TCXO, 0 },
564 { P_GPLL0_OUT_MAIN, 1 },
565 { P_GPLL0_OUT_EVEN, 2 },
566 { P_GPLL0_OUT_ODD, 4 },
567 { P_SLEEP_CLK, 5 },
568 };
569
570 static const struct clk_parent_data gcc_parent_data_7[] = {
571 { .index = DT_BI_TCXO },
572 { .hw = &gpll0.clkr.hw },
573 { .hw = &gpll0_out_even.clkr.hw },
574 { .hw = &gpll0_out_odd.clkr.hw },
575 { .index = DT_SLEEP_CLK },
576 };
577
578 static const struct parent_map gcc_parent_map_8[] = {
579 { P_BI_TCXO, 0 },
580 { P_GPLL0_OUT_MAIN, 1 },
581 { P_GPLL0_OUT_EVEN, 2 },
582 { P_GPLL10_OUT_EVEN, 3 },
583 { P_GPLL4_OUT_EVEN, 5 },
584 { P_GPLL3_OUT_MAIN, 6 },
585 };
586
587 static const struct clk_parent_data gcc_parent_data_8[] = {
588 { .index = DT_BI_TCXO },
589 { .hw = &gpll0.clkr.hw },
590 { .hw = &gpll0_out_even.clkr.hw },
591 { .hw = &gpll10.clkr.hw },
592 { .hw = &gpll4.clkr.hw },
593 { .hw = &gpll3.clkr.hw },
594 };
595
596 static const struct parent_map gcc_parent_map_9[] = {
597 { P_BI_TCXO, 0 },
598 { P_GPLL0_OUT_MAIN, 1 },
599 { P_GPLL0_OUT_EVEN, 2 },
600 { P_GPLL10_OUT_EVEN, 3 },
601 { P_GPLL9_OUT_MAIN, 4 },
602 { P_GPLL8_OUT_EVEN, 5 },
603 { P_GPLL3_OUT_MAIN, 6 },
604 };
605
606 static const struct clk_parent_data gcc_parent_data_9[] = {
607 { .index = DT_BI_TCXO },
608 { .hw = &gpll0.clkr.hw },
609 { .hw = &gpll0_out_even.clkr.hw },
610 { .hw = &gpll10.clkr.hw },
611 { .hw = &gpll9_out_main.clkr.hw },
612 { .hw = &gpll8_out_even.clkr.hw },
613 { .hw = &gpll3.clkr.hw },
614 };
615
616 static const struct parent_map gcc_parent_map_10[] = {
617 { P_BI_TCXO, 0 },
618 { P_GPLL0_OUT_MAIN, 1 },
619 { P_GPLL8_OUT_MAIN, 2 },
620 { P_GPLL10_OUT_EVEN, 3 },
621 { P_GPLL9_OUT_MAIN, 4 },
622 { P_GPLL8_OUT_EVEN, 5 },
623 { P_GPLL3_OUT_MAIN, 6 },
624 };
625
626 static const struct clk_parent_data gcc_parent_data_10[] = {
627 { .index = DT_BI_TCXO },
628 { .hw = &gpll0.clkr.hw },
629 { .hw = &gpll8.clkr.hw },
630 { .hw = &gpll10.clkr.hw },
631 { .hw = &gpll9_out_main.clkr.hw },
632 { .hw = &gpll8_out_even.clkr.hw },
633 { .hw = &gpll3.clkr.hw },
634 };
635
636 static const struct parent_map gcc_parent_map_11[] = {
637 { P_BI_TCXO, 0 },
638 { P_GPLL0_OUT_MAIN, 1 },
639 { P_GPLL8_OUT_MAIN, 2 },
640 { P_GPLL10_OUT_EVEN, 3 },
641 { P_GPLL6_OUT_MAIN, 4 },
642 { P_GPLL3_OUT_EVEN, 6 },
643 };
644
645 static const struct clk_parent_data gcc_parent_data_11[] = {
646 { .index = DT_BI_TCXO },
647 { .hw = &gpll0.clkr.hw },
648 { .hw = &gpll8.clkr.hw },
649 { .hw = &gpll10.clkr.hw },
650 { .hw = &gpll6.clkr.hw },
651 { .hw = &gpll3_out_even.clkr.hw },
652 };
653
654 static const struct parent_map gcc_parent_map_12[] = {
655 { P_BI_TCXO, 0 },
656 { P_GPLL0_OUT_MAIN, 1 },
657 { P_GPLL0_OUT_EVEN, 2 },
658 { P_GPLL7_OUT_EVEN, 3 },
659 { P_GPLL4_OUT_EVEN, 5 },
660 };
661
662 static const struct clk_parent_data gcc_parent_data_12[] = {
663 { .index = DT_BI_TCXO },
664 { .hw = &gpll0.clkr.hw },
665 { .hw = &gpll0_out_even.clkr.hw },
666 { .hw = &gpll7.clkr.hw },
667 { .hw = &gpll4.clkr.hw },
668 };
669
670 static const struct parent_map gcc_parent_map_13[] = {
671 { P_BI_TCXO, 0 },
672 { P_SLEEP_CLK, 5 },
673 };
674
675 static const struct clk_parent_data gcc_parent_data_13[] = {
676 { .index = DT_BI_TCXO },
677 { .index = DT_SLEEP_CLK },
678 };
679
680 static const struct parent_map gcc_parent_map_14[] = {
681 { P_BI_TCXO, 0 },
682 { P_GPLL11_OUT_ODD, 2 },
683 { P_GPLL11_OUT_EVEN, 3 },
684 };
685
686 static const struct clk_parent_data gcc_parent_data_14[] = {
687 { .index = DT_BI_TCXO },
688 { .hw = &gpll11.clkr.hw },
689 { .hw = &gpll11.clkr.hw },
690 };
691
692 static const struct freq_tbl ftbl_gcc_camss_axi_clk_src[] = {
693 F(19200000, P_BI_TCXO, 1, 0, 0),
694 F(150000000, P_GPLL0_OUT_EVEN, 2, 0, 0),
695 F(240000000, P_GPLL0_OUT_MAIN, 2.5, 0, 0),
696 F(300000000, P_GPLL0_OUT_EVEN, 1, 0, 0),
697 { }
698 };
699
700 static struct clk_rcg2 gcc_camss_axi_clk_src = {
701 .cmd_rcgr = 0x5802c,
702 .mnd_width = 0,
703 .hid_width = 5,
704 .parent_map = gcc_parent_map_8,
705 .freq_tbl = ftbl_gcc_camss_axi_clk_src,
706 .clkr.hw.init = &(struct clk_init_data){
707 .name = "gcc_camss_axi_clk_src",
708 .parent_data = gcc_parent_data_8,
709 .num_parents = ARRAY_SIZE(gcc_parent_data_8),
710 .ops = &clk_rcg2_shared_ops,
711 },
712 };
713
714 static const struct freq_tbl ftbl_gcc_camss_cci_0_clk_src[] = {
715 F(19200000, P_BI_TCXO, 1, 0, 0),
716 F(37500000, P_GPLL0_OUT_EVEN, 8, 0, 0),
717 { }
718 };
719
720 static struct clk_rcg2 gcc_camss_cci_0_clk_src = {
721 .cmd_rcgr = 0x56000,
722 .mnd_width = 0,
723 .hid_width = 5,
724 .parent_map = gcc_parent_map_9,
725 .freq_tbl = ftbl_gcc_camss_cci_0_clk_src,
726 .clkr.hw.init = &(struct clk_init_data){
727 .name = "gcc_camss_cci_0_clk_src",
728 .parent_data = gcc_parent_data_9,
729 .num_parents = ARRAY_SIZE(gcc_parent_data_9),
730 .ops = &clk_rcg2_shared_ops,
731 },
732 };
733
734 static struct clk_rcg2 gcc_camss_cci_1_clk_src = {
735 .cmd_rcgr = 0x5c000,
736 .mnd_width = 0,
737 .hid_width = 5,
738 .parent_map = gcc_parent_map_9,
739 .freq_tbl = ftbl_gcc_camss_cci_0_clk_src,
740 .clkr.hw.init = &(struct clk_init_data){
741 .name = "gcc_camss_cci_1_clk_src",
742 .parent_data = gcc_parent_data_9,
743 .num_parents = ARRAY_SIZE(gcc_parent_data_9),
744 .ops = &clk_rcg2_shared_ops,
745 },
746 };
747
748 static const struct freq_tbl ftbl_gcc_camss_csi0phytimer_clk_src[] = {
749 F(19200000, P_BI_TCXO, 1, 0, 0),
750 F(100000000, P_GPLL0_OUT_ODD, 2, 0, 0),
751 F(300000000, P_GPLL0_OUT_EVEN, 1, 0, 0),
752 { }
753 };
754
755 static struct clk_rcg2 gcc_camss_csi0phytimer_clk_src = {
756 .cmd_rcgr = 0x59000,
757 .mnd_width = 0,
758 .hid_width = 5,
759 .parent_map = gcc_parent_map_4,
760 .freq_tbl = ftbl_gcc_camss_csi0phytimer_clk_src,
761 .clkr.hw.init = &(struct clk_init_data){
762 .name = "gcc_camss_csi0phytimer_clk_src",
763 .parent_data = gcc_parent_data_4,
764 .num_parents = ARRAY_SIZE(gcc_parent_data_4),
765 .ops = &clk_rcg2_shared_ops,
766 },
767 };
768
769 static struct clk_rcg2 gcc_camss_csi1phytimer_clk_src = {
770 .cmd_rcgr = 0x5901c,
771 .mnd_width = 0,
772 .hid_width = 5,
773 .parent_map = gcc_parent_map_4,
774 .freq_tbl = ftbl_gcc_camss_csi0phytimer_clk_src,
775 .clkr.hw.init = &(struct clk_init_data){
776 .name = "gcc_camss_csi1phytimer_clk_src",
777 .parent_data = gcc_parent_data_4,
778 .num_parents = ARRAY_SIZE(gcc_parent_data_4),
779 .ops = &clk_rcg2_shared_ops,
780 },
781 };
782
783 static struct clk_rcg2 gcc_camss_csi2phytimer_clk_src = {
784 .cmd_rcgr = 0x59038,
785 .mnd_width = 0,
786 .hid_width = 5,
787 .parent_map = gcc_parent_map_4,
788 .freq_tbl = ftbl_gcc_camss_csi0phytimer_clk_src,
789 .clkr.hw.init = &(struct clk_init_data){
790 .name = "gcc_camss_csi2phytimer_clk_src",
791 .parent_data = gcc_parent_data_4,
792 .num_parents = ARRAY_SIZE(gcc_parent_data_4),
793 .ops = &clk_rcg2_shared_ops,
794 },
795 };
796
797 static struct clk_rcg2 gcc_camss_csi3phytimer_clk_src = {
798 .cmd_rcgr = 0x59054,
799 .mnd_width = 0,
800 .hid_width = 5,
801 .parent_map = gcc_parent_map_4,
802 .freq_tbl = ftbl_gcc_camss_csi0phytimer_clk_src,
803 .clkr.hw.init = &(struct clk_init_data){
804 .name = "gcc_camss_csi3phytimer_clk_src",
805 .parent_data = gcc_parent_data_4,
806 .num_parents = ARRAY_SIZE(gcc_parent_data_4),
807 .ops = &clk_rcg2_shared_ops,
808 },
809 };
810
811 static const struct freq_tbl ftbl_gcc_camss_mclk0_clk_src[] = {
812 F(19200000, P_BI_TCXO, 1, 0, 0),
813 F(24000000, P_GPLL9_OUT_MAIN, 1, 1, 15),
814 F(65454545, P_GPLL9_OUT_EARLY, 11, 1, 2),
815 { }
816 };
817
818 static struct clk_rcg2 gcc_camss_mclk0_clk_src = {
819 .cmd_rcgr = 0x51000,
820 .mnd_width = 8,
821 .hid_width = 5,
822 .parent_map = gcc_parent_map_3,
823 .freq_tbl = ftbl_gcc_camss_mclk0_clk_src,
824 .clkr.hw.init = &(struct clk_init_data){
825 .name = "gcc_camss_mclk0_clk_src",
826 .parent_data = gcc_parent_data_3,
827 .num_parents = ARRAY_SIZE(gcc_parent_data_3),
828 .ops = &clk_rcg2_shared_ops,
829 },
830 };
831
832 static struct clk_rcg2 gcc_camss_mclk1_clk_src = {
833 .cmd_rcgr = 0x5101c,
834 .mnd_width = 8,
835 .hid_width = 5,
836 .parent_map = gcc_parent_map_3,
837 .freq_tbl = ftbl_gcc_camss_mclk0_clk_src,
838 .clkr.hw.init = &(struct clk_init_data){
839 .name = "gcc_camss_mclk1_clk_src",
840 .parent_data = gcc_parent_data_3,
841 .num_parents = ARRAY_SIZE(gcc_parent_data_3),
842 .ops = &clk_rcg2_shared_ops,
843 },
844 };
845
846 static struct clk_rcg2 gcc_camss_mclk2_clk_src = {
847 .cmd_rcgr = 0x51038,
848 .mnd_width = 8,
849 .hid_width = 5,
850 .parent_map = gcc_parent_map_3,
851 .freq_tbl = ftbl_gcc_camss_mclk0_clk_src,
852 .clkr.hw.init = &(struct clk_init_data){
853 .name = "gcc_camss_mclk2_clk_src",
854 .parent_data = gcc_parent_data_3,
855 .num_parents = ARRAY_SIZE(gcc_parent_data_3),
856 .ops = &clk_rcg2_shared_ops,
857 },
858 };
859
860 static struct clk_rcg2 gcc_camss_mclk3_clk_src = {
861 .cmd_rcgr = 0x51054,
862 .mnd_width = 8,
863 .hid_width = 5,
864 .parent_map = gcc_parent_map_3,
865 .freq_tbl = ftbl_gcc_camss_mclk0_clk_src,
866 .clkr.hw.init = &(struct clk_init_data){
867 .name = "gcc_camss_mclk3_clk_src",
868 .parent_data = gcc_parent_data_3,
869 .num_parents = ARRAY_SIZE(gcc_parent_data_3),
870 .ops = &clk_rcg2_shared_ops,
871 },
872 };
873
874 static struct clk_rcg2 gcc_camss_mclk4_clk_src = {
875 .cmd_rcgr = 0x51070,
876 .mnd_width = 8,
877 .hid_width = 5,
878 .parent_map = gcc_parent_map_3,
879 .freq_tbl = ftbl_gcc_camss_mclk0_clk_src,
880 .clkr.hw.init = &(struct clk_init_data){
881 .name = "gcc_camss_mclk4_clk_src",
882 .parent_data = gcc_parent_data_3,
883 .num_parents = ARRAY_SIZE(gcc_parent_data_3),
884 .ops = &clk_rcg2_shared_ops,
885 },
886 };
887
888 static const struct freq_tbl ftbl_gcc_camss_ope_ahb_clk_src[] = {
889 F(19200000, P_BI_TCXO, 1, 0, 0),
890 F(171428571, P_GPLL0_OUT_MAIN, 3.5, 0, 0),
891 F(240000000, P_GPLL0_OUT_MAIN, 2.5, 0, 0),
892 { }
893 };
894
895 static struct clk_rcg2 gcc_camss_ope_ahb_clk_src = {
896 .cmd_rcgr = 0x55024,
897 .mnd_width = 0,
898 .hid_width = 5,
899 .parent_map = gcc_parent_map_10,
900 .freq_tbl = ftbl_gcc_camss_ope_ahb_clk_src,
901 .clkr.hw.init = &(struct clk_init_data){
902 .name = "gcc_camss_ope_ahb_clk_src",
903 .parent_data = gcc_parent_data_10,
904 .num_parents = ARRAY_SIZE(gcc_parent_data_10),
905 .ops = &clk_rcg2_shared_ops,
906 },
907 };
908
909 static const struct freq_tbl ftbl_gcc_camss_ope_clk_src[] = {
910 F(19200000, P_BI_TCXO, 1, 0, 0),
911 F(200000000, P_GPLL8_OUT_EVEN, 1, 0, 0),
912 F(266600000, P_GPLL8_OUT_EVEN, 1, 0, 0),
913 F(480000000, P_GPLL8_OUT_EVEN, 1, 0, 0),
914 F(580000000, P_GPLL8_OUT_EVEN, 1, 0, 0),
915 { }
916 };
917
918 static struct clk_rcg2 gcc_camss_ope_clk_src = {
919 .cmd_rcgr = 0x55004,
920 .mnd_width = 0,
921 .hid_width = 5,
922 .parent_map = gcc_parent_map_10,
923 .freq_tbl = ftbl_gcc_camss_ope_clk_src,
924 .clkr.hw.init = &(struct clk_init_data){
925 .name = "gcc_camss_ope_clk_src",
926 .parent_data = gcc_parent_data_10,
927 .num_parents = ARRAY_SIZE(gcc_parent_data_10),
928 .flags = CLK_SET_RATE_PARENT,
929 .ops = &clk_rcg2_shared_ops,
930 },
931 };
932
933 static const struct freq_tbl ftbl_gcc_camss_tfe_0_clk_src[] = {
934 F(19200000, P_BI_TCXO, 1, 0, 0),
935 F(120000000, P_GPLL0_OUT_MAIN, 5, 0, 0),
936 F(133333333, P_GPLL0_OUT_MAIN, 4.5, 0, 0),
937 F(144000000, P_GPLL9_OUT_MAIN, 2.5, 0, 0),
938 F(150000000, P_GPLL0_OUT_MAIN, 4, 0, 0),
939 F(171428571, P_GPLL0_OUT_MAIN, 3.5, 0, 0),
940 F(180000000, P_GPLL9_OUT_MAIN, 2, 0, 0),
941 F(200000000, P_GPLL0_OUT_MAIN, 3, 0, 0),
942 F(240000000, P_GPLL0_OUT_MAIN, 2.5, 0, 0),
943 F(300000000, P_GPLL0_OUT_MAIN, 2, 0, 0),
944 F(329142857, P_GPLL10_OUT_EVEN, 3.5, 0, 0),
945 F(384000000, P_GPLL10_OUT_EVEN, 3, 0, 0),
946 F(460800000, P_GPLL10_OUT_EVEN, 2.5, 0, 0),
947 F(576000000, P_GPLL10_OUT_EVEN, 2, 0, 0),
948 { }
949 };
950
951 static struct clk_rcg2 gcc_camss_tfe_0_clk_src = {
952 .cmd_rcgr = 0x52004,
953 .mnd_width = 8,
954 .hid_width = 5,
955 .parent_map = gcc_parent_map_5,
956 .freq_tbl = ftbl_gcc_camss_tfe_0_clk_src,
957 .clkr.hw.init = &(struct clk_init_data){
958 .name = "gcc_camss_tfe_0_clk_src",
959 .parent_data = gcc_parent_data_5,
960 .num_parents = ARRAY_SIZE(gcc_parent_data_5),
961 .ops = &clk_rcg2_shared_ops,
962 },
963 };
964
965 static const struct freq_tbl ftbl_gcc_camss_tfe_0_csid_clk_src[] = {
966 F(19200000, P_BI_TCXO, 1, 0, 0),
967 F(120000000, P_GPLL0_OUT_MAIN, 5, 0, 0),
968 F(266571429, P_GPLL5_OUT_EVEN, 3.5, 0, 0),
969 F(426400000, P_GPLL3_OUT_MAIN, 2.5, 0, 0),
970 F(466500000, P_GPLL5_OUT_EVEN, 2, 0, 0),
971 { }
972 };
973
974 static struct clk_rcg2 gcc_camss_tfe_0_csid_clk_src = {
975 .cmd_rcgr = 0x52094,
976 .mnd_width = 0,
977 .hid_width = 5,
978 .parent_map = gcc_parent_map_6,
979 .freq_tbl = ftbl_gcc_camss_tfe_0_csid_clk_src,
980 .clkr.hw.init = &(struct clk_init_data){
981 .name = "gcc_camss_tfe_0_csid_clk_src",
982 .parent_data = gcc_parent_data_6,
983 .num_parents = ARRAY_SIZE(gcc_parent_data_6),
984 .ops = &clk_rcg2_shared_ops,
985 },
986 };
987
988 static struct clk_rcg2 gcc_camss_tfe_1_clk_src = {
989 .cmd_rcgr = 0x52024,
990 .mnd_width = 8,
991 .hid_width = 5,
992 .parent_map = gcc_parent_map_5,
993 .freq_tbl = ftbl_gcc_camss_tfe_0_clk_src,
994 .clkr.hw.init = &(struct clk_init_data){
995 .name = "gcc_camss_tfe_1_clk_src",
996 .parent_data = gcc_parent_data_5,
997 .num_parents = ARRAY_SIZE(gcc_parent_data_5),
998 .ops = &clk_rcg2_shared_ops,
999 },
1000 };
1001
1002 static struct clk_rcg2 gcc_camss_tfe_1_csid_clk_src = {
1003 .cmd_rcgr = 0x520b4,
1004 .mnd_width = 0,
1005 .hid_width = 5,
1006 .parent_map = gcc_parent_map_6,
1007 .freq_tbl = ftbl_gcc_camss_tfe_0_csid_clk_src,
1008 .clkr.hw.init = &(struct clk_init_data){
1009 .name = "gcc_camss_tfe_1_csid_clk_src",
1010 .parent_data = gcc_parent_data_6,
1011 .num_parents = ARRAY_SIZE(gcc_parent_data_6),
1012 .ops = &clk_rcg2_shared_ops,
1013 },
1014 };
1015
1016 static struct clk_rcg2 gcc_camss_tfe_2_clk_src = {
1017 .cmd_rcgr = 0x52044,
1018 .mnd_width = 8,
1019 .hid_width = 5,
1020 .parent_map = gcc_parent_map_5,
1021 .freq_tbl = ftbl_gcc_camss_tfe_0_clk_src,
1022 .clkr.hw.init = &(struct clk_init_data){
1023 .name = "gcc_camss_tfe_2_clk_src",
1024 .parent_data = gcc_parent_data_5,
1025 .num_parents = ARRAY_SIZE(gcc_parent_data_5),
1026 .ops = &clk_rcg2_shared_ops,
1027 },
1028 };
1029
1030 static struct clk_rcg2 gcc_camss_tfe_2_csid_clk_src = {
1031 .cmd_rcgr = 0x520d4,
1032 .mnd_width = 0,
1033 .hid_width = 5,
1034 .parent_map = gcc_parent_map_6,
1035 .freq_tbl = ftbl_gcc_camss_tfe_0_csid_clk_src,
1036 .clkr.hw.init = &(struct clk_init_data){
1037 .name = "gcc_camss_tfe_2_csid_clk_src",
1038 .parent_data = gcc_parent_data_6,
1039 .num_parents = ARRAY_SIZE(gcc_parent_data_6),
1040 .ops = &clk_rcg2_shared_ops,
1041 },
1042 };
1043
1044 static const struct freq_tbl ftbl_gcc_camss_tfe_cphy_rx_clk_src[] = {
1045 F(19200000, P_BI_TCXO, 1, 0, 0),
1046 F(256000000, P_GPLL6_OUT_MAIN, 3, 0, 0),
1047 F(384000000, P_GPLL6_OUT_MAIN, 2, 0, 0),
1048 { }
1049 };
1050
1051 static struct clk_rcg2 gcc_camss_tfe_cphy_rx_clk_src = {
1052 .cmd_rcgr = 0x52064,
1053 .mnd_width = 0,
1054 .hid_width = 5,
1055 .parent_map = gcc_parent_map_11,
1056 .freq_tbl = ftbl_gcc_camss_tfe_cphy_rx_clk_src,
1057 .clkr.hw.init = &(struct clk_init_data){
1058 .name = "gcc_camss_tfe_cphy_rx_clk_src",
1059 .parent_data = gcc_parent_data_11,
1060 .num_parents = ARRAY_SIZE(gcc_parent_data_11),
1061 .ops = &clk_rcg2_shared_ops,
1062 },
1063 };
1064
1065 static const struct freq_tbl ftbl_gcc_camss_top_ahb_clk_src[] = {
1066 F(19200000, P_BI_TCXO, 1, 0, 0),
1067 F(40000000, P_GPLL0_OUT_EVEN, 7.5, 0, 0),
1068 F(80000000, P_GPLL0_OUT_MAIN, 7.5, 0, 0),
1069 { }
1070 };
1071
1072 static struct clk_rcg2 gcc_camss_top_ahb_clk_src = {
1073 .cmd_rcgr = 0x58010,
1074 .mnd_width = 0,
1075 .hid_width = 5,
1076 .parent_map = gcc_parent_map_8,
1077 .freq_tbl = ftbl_gcc_camss_top_ahb_clk_src,
1078 .clkr.hw.init = &(struct clk_init_data){
1079 .name = "gcc_camss_top_ahb_clk_src",
1080 .parent_data = gcc_parent_data_8,
1081 .num_parents = ARRAY_SIZE(gcc_parent_data_8),
1082 .ops = &clk_rcg2_shared_ops,
1083 },
1084 };
1085
1086 static const struct freq_tbl ftbl_gcc_cpuss_ahb_clk_src[] = {
1087 F(19200000, P_BI_TCXO, 1, 0, 0),
1088 F(50000000, P_GPLL0_OUT_ODD, 4, 0, 0),
1089 F(100000000, P_GPLL0_OUT_ODD, 2, 0, 0),
1090 { }
1091 };
1092
1093 static struct clk_rcg2 gcc_cpuss_ahb_clk_src = {
1094 .cmd_rcgr = 0x2b13c,
1095 .mnd_width = 0,
1096 .hid_width = 5,
1097 .parent_map = gcc_parent_map_2,
1098 .freq_tbl = ftbl_gcc_cpuss_ahb_clk_src,
1099 .clkr.hw.init = &(struct clk_init_data){
1100 .name = "gcc_cpuss_ahb_clk_src",
1101 .parent_data = gcc_parent_data_2_ao,
1102 .num_parents = ARRAY_SIZE(gcc_parent_data_2_ao),
1103 .ops = &clk_rcg2_shared_ops,
1104 },
1105 };
1106
1107 static const struct freq_tbl ftbl_gcc_gp1_clk_src[] = {
1108 F(25000000, P_GPLL0_OUT_EVEN, 12, 0, 0),
1109 F(50000000, P_GPLL0_OUT_ODD, 4, 0, 0),
1110 F(100000000, P_GPLL0_OUT_ODD, 2, 0, 0),
1111 F(200000000, P_GPLL0_OUT_ODD, 1, 0, 0),
1112 { }
1113 };
1114
1115 static struct clk_rcg2 gcc_gp1_clk_src = {
1116 .cmd_rcgr = 0x4d004,
1117 .mnd_width = 16,
1118 .hid_width = 5,
1119 .parent_map = gcc_parent_map_7,
1120 .freq_tbl = ftbl_gcc_gp1_clk_src,
1121 .clkr.hw.init = &(struct clk_init_data){
1122 .name = "gcc_gp1_clk_src",
1123 .parent_data = gcc_parent_data_7,
1124 .num_parents = ARRAY_SIZE(gcc_parent_data_7),
1125 .ops = &clk_rcg2_shared_ops,
1126 },
1127 };
1128
1129 static struct clk_rcg2 gcc_gp2_clk_src = {
1130 .cmd_rcgr = 0x4e004,
1131 .mnd_width = 16,
1132 .hid_width = 5,
1133 .parent_map = gcc_parent_map_7,
1134 .freq_tbl = ftbl_gcc_gp1_clk_src,
1135 .clkr.hw.init = &(struct clk_init_data){
1136 .name = "gcc_gp2_clk_src",
1137 .parent_data = gcc_parent_data_7,
1138 .num_parents = ARRAY_SIZE(gcc_parent_data_7),
1139 .ops = &clk_rcg2_shared_ops,
1140 },
1141 };
1142
1143 static struct clk_rcg2 gcc_gp3_clk_src = {
1144 .cmd_rcgr = 0x4f004,
1145 .mnd_width = 16,
1146 .hid_width = 5,
1147 .parent_map = gcc_parent_map_7,
1148 .freq_tbl = ftbl_gcc_gp1_clk_src,
1149 .clkr.hw.init = &(struct clk_init_data){
1150 .name = "gcc_gp3_clk_src",
1151 .parent_data = gcc_parent_data_7,
1152 .num_parents = ARRAY_SIZE(gcc_parent_data_7),
1153 .ops = &clk_rcg2_shared_ops,
1154 },
1155 };
1156
1157 static const struct freq_tbl ftbl_gcc_pdm2_clk_src[] = {
1158 F(19200000, P_BI_TCXO, 1, 0, 0),
1159 F(60000000, P_GPLL0_OUT_EVEN, 5, 0, 0),
1160 { }
1161 };
1162
1163 static struct clk_rcg2 gcc_pdm2_clk_src = {
1164 .cmd_rcgr = 0x20010,
1165 .mnd_width = 0,
1166 .hid_width = 5,
1167 .parent_map = gcc_parent_map_0,
1168 .freq_tbl = ftbl_gcc_pdm2_clk_src,
1169 .clkr.hw.init = &(struct clk_init_data){
1170 .name = "gcc_pdm2_clk_src",
1171 .parent_data = gcc_parent_data_0,
1172 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
1173 .ops = &clk_rcg2_shared_ops,
1174 },
1175 };
1176
1177 static const struct freq_tbl ftbl_gcc_qupv3_wrap0_s0_clk_src[] = {
1178 F(7372800, P_GPLL0_OUT_EVEN, 1, 384, 15625),
1179 F(14745600, P_GPLL0_OUT_EVEN, 1, 768, 15625),
1180 F(19200000, P_BI_TCXO, 1, 0, 0),
1181 F(29491200, P_GPLL0_OUT_EVEN, 1, 1536, 15625),
1182 F(32000000, P_GPLL0_OUT_EVEN, 1, 8, 75),
1183 F(48000000, P_GPLL0_OUT_EVEN, 1, 4, 25),
1184 F(64000000, P_GPLL0_OUT_EVEN, 1, 16, 75),
1185 F(75000000, P_GPLL0_OUT_EVEN, 4, 0, 0),
1186 F(80000000, P_GPLL0_OUT_EVEN, 1, 4, 15),
1187 F(96000000, P_GPLL0_OUT_EVEN, 1, 8, 25),
1188 F(100000000, P_GPLL0_OUT_EVEN, 3, 0, 0),
1189 F(102400000, P_GPLL0_OUT_EVEN, 1, 128, 375),
1190 F(112000000, P_GPLL0_OUT_EVEN, 1, 28, 75),
1191 F(117964800, P_GPLL0_OUT_EVEN, 1, 6144, 15625),
1192 F(120000000, P_GPLL0_OUT_EVEN, 2.5, 0, 0),
1193 F(128000000, P_GPLL6_OUT_EVEN, 3, 0, 0),
1194 { }
1195 };
1196
1197 static struct clk_init_data gcc_qupv3_wrap0_s0_clk_src_init = {
1198 .name = "gcc_qupv3_wrap0_s0_clk_src",
1199 .parent_data = gcc_parent_data_1,
1200 .num_parents = ARRAY_SIZE(gcc_parent_data_1),
1201 .ops = &clk_rcg2_shared_ops,
1202 };
1203
1204 static struct clk_rcg2 gcc_qupv3_wrap0_s0_clk_src = {
1205 .cmd_rcgr = 0x1f148,
1206 .mnd_width = 16,
1207 .hid_width = 5,
1208 .parent_map = gcc_parent_map_1,
1209 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
1210 .clkr.hw.init = &gcc_qupv3_wrap0_s0_clk_src_init,
1211 };
1212
1213 static struct clk_init_data gcc_qupv3_wrap0_s1_clk_src_init = {
1214 .name = "gcc_qupv3_wrap0_s1_clk_src",
1215 .parent_data = gcc_parent_data_1,
1216 .num_parents = ARRAY_SIZE(gcc_parent_data_1),
1217 .ops = &clk_rcg2_shared_ops,
1218 };
1219
1220 static struct clk_rcg2 gcc_qupv3_wrap0_s1_clk_src = {
1221 .cmd_rcgr = 0x1f278,
1222 .mnd_width = 16,
1223 .hid_width = 5,
1224 .parent_map = gcc_parent_map_1,
1225 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
1226 .clkr.hw.init = &gcc_qupv3_wrap0_s1_clk_src_init,
1227 };
1228
1229 static struct clk_init_data gcc_qupv3_wrap0_s2_clk_src_init = {
1230 .name = "gcc_qupv3_wrap0_s2_clk_src",
1231 .parent_data = gcc_parent_data_1,
1232 .num_parents = ARRAY_SIZE(gcc_parent_data_1),
1233 .ops = &clk_rcg2_shared_ops,
1234 };
1235
1236 static struct clk_rcg2 gcc_qupv3_wrap0_s2_clk_src = {
1237 .cmd_rcgr = 0x1f3a8,
1238 .mnd_width = 16,
1239 .hid_width = 5,
1240 .parent_map = gcc_parent_map_1,
1241 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
1242 .clkr.hw.init = &gcc_qupv3_wrap0_s2_clk_src_init,
1243 };
1244
1245 static struct clk_init_data gcc_qupv3_wrap0_s3_clk_src_init = {
1246 .name = "gcc_qupv3_wrap0_s3_clk_src",
1247 .parent_data = gcc_parent_data_1,
1248 .num_parents = ARRAY_SIZE(gcc_parent_data_1),
1249 .ops = &clk_rcg2_shared_ops,
1250 };
1251
1252 static struct clk_rcg2 gcc_qupv3_wrap0_s3_clk_src = {
1253 .cmd_rcgr = 0x1f4d8,
1254 .mnd_width = 16,
1255 .hid_width = 5,
1256 .parent_map = gcc_parent_map_1,
1257 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
1258 .clkr.hw.init = &gcc_qupv3_wrap0_s3_clk_src_init,
1259 };
1260
1261 static struct clk_init_data gcc_qupv3_wrap0_s4_clk_src_init = {
1262 .name = "gcc_qupv3_wrap0_s4_clk_src",
1263 .parent_data = gcc_parent_data_1,
1264 .num_parents = ARRAY_SIZE(gcc_parent_data_1),
1265 .ops = &clk_rcg2_shared_ops,
1266 };
1267
1268 static struct clk_rcg2 gcc_qupv3_wrap0_s4_clk_src = {
1269 .cmd_rcgr = 0x1f608,
1270 .mnd_width = 16,
1271 .hid_width = 5,
1272 .parent_map = gcc_parent_map_1,
1273 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
1274 .clkr.hw.init = &gcc_qupv3_wrap0_s4_clk_src_init,
1275 };
1276
1277 static struct clk_init_data gcc_qupv3_wrap0_s5_clk_src_init = {
1278 .name = "gcc_qupv3_wrap0_s5_clk_src",
1279 .parent_data = gcc_parent_data_1,
1280 .num_parents = ARRAY_SIZE(gcc_parent_data_1),
1281 .ops = &clk_rcg2_shared_ops,
1282 };
1283
1284 static struct clk_rcg2 gcc_qupv3_wrap0_s5_clk_src = {
1285 .cmd_rcgr = 0x1f738,
1286 .mnd_width = 16,
1287 .hid_width = 5,
1288 .parent_map = gcc_parent_map_1,
1289 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
1290 .clkr.hw.init = &gcc_qupv3_wrap0_s5_clk_src_init,
1291 };
1292
1293 static struct clk_init_data gcc_qupv3_wrap1_s0_clk_src_init = {
1294 .name = "gcc_qupv3_wrap1_s0_clk_src",
1295 .parent_data = gcc_parent_data_1,
1296 .num_parents = ARRAY_SIZE(gcc_parent_data_1),
1297 .ops = &clk_rcg2_shared_ops,
1298 };
1299
1300 static struct clk_rcg2 gcc_qupv3_wrap1_s0_clk_src = {
1301 .cmd_rcgr = 0x5301c,
1302 .mnd_width = 16,
1303 .hid_width = 5,
1304 .parent_map = gcc_parent_map_1,
1305 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
1306 .clkr.hw.init = &gcc_qupv3_wrap1_s0_clk_src_init,
1307 };
1308
1309 static struct clk_init_data gcc_qupv3_wrap1_s1_clk_src_init = {
1310 .name = "gcc_qupv3_wrap1_s1_clk_src",
1311 .parent_data = gcc_parent_data_1,
1312 .num_parents = ARRAY_SIZE(gcc_parent_data_1),
1313 .ops = &clk_rcg2_shared_ops,
1314 };
1315
1316 static struct clk_rcg2 gcc_qupv3_wrap1_s1_clk_src = {
1317 .cmd_rcgr = 0x5314c,
1318 .mnd_width = 16,
1319 .hid_width = 5,
1320 .parent_map = gcc_parent_map_1,
1321 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
1322 .clkr.hw.init = &gcc_qupv3_wrap1_s1_clk_src_init,
1323 };
1324
1325 static struct clk_init_data gcc_qupv3_wrap1_s2_clk_src_init = {
1326 .name = "gcc_qupv3_wrap1_s2_clk_src",
1327 .parent_data = gcc_parent_data_1,
1328 .num_parents = ARRAY_SIZE(gcc_parent_data_1),
1329 .ops = &clk_rcg2_shared_ops,
1330 };
1331
1332 static struct clk_rcg2 gcc_qupv3_wrap1_s2_clk_src = {
1333 .cmd_rcgr = 0x5327c,
1334 .mnd_width = 16,
1335 .hid_width = 5,
1336 .parent_map = gcc_parent_map_1,
1337 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
1338 .clkr.hw.init = &gcc_qupv3_wrap1_s2_clk_src_init,
1339 };
1340
1341 static struct clk_init_data gcc_qupv3_wrap1_s3_clk_src_init = {
1342 .name = "gcc_qupv3_wrap1_s3_clk_src",
1343 .parent_data = gcc_parent_data_1,
1344 .num_parents = ARRAY_SIZE(gcc_parent_data_1),
1345 .ops = &clk_rcg2_shared_ops,
1346 };
1347
1348 static struct clk_rcg2 gcc_qupv3_wrap1_s3_clk_src = {
1349 .cmd_rcgr = 0x533ac,
1350 .mnd_width = 16,
1351 .hid_width = 5,
1352 .parent_map = gcc_parent_map_1,
1353 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
1354 .clkr.hw.init = &gcc_qupv3_wrap1_s3_clk_src_init,
1355 };
1356
1357 static struct clk_init_data gcc_qupv3_wrap1_s4_clk_src_init = {
1358 .name = "gcc_qupv3_wrap1_s4_clk_src",
1359 .parent_data = gcc_parent_data_1,
1360 .num_parents = ARRAY_SIZE(gcc_parent_data_1),
1361 .ops = &clk_rcg2_shared_ops,
1362 };
1363
1364 static struct clk_rcg2 gcc_qupv3_wrap1_s4_clk_src = {
1365 .cmd_rcgr = 0x534dc,
1366 .mnd_width = 16,
1367 .hid_width = 5,
1368 .parent_map = gcc_parent_map_1,
1369 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
1370 .clkr.hw.init = &gcc_qupv3_wrap1_s4_clk_src_init,
1371 };
1372
1373 static struct clk_init_data gcc_qupv3_wrap1_s5_clk_src_init = {
1374 .name = "gcc_qupv3_wrap1_s5_clk_src",
1375 .parent_data = gcc_parent_data_1,
1376 .num_parents = ARRAY_SIZE(gcc_parent_data_1),
1377 .ops = &clk_rcg2_shared_ops,
1378 };
1379
1380 static struct clk_rcg2 gcc_qupv3_wrap1_s5_clk_src = {
1381 .cmd_rcgr = 0x5360c,
1382 .mnd_width = 16,
1383 .hid_width = 5,
1384 .parent_map = gcc_parent_map_1,
1385 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
1386 .clkr.hw.init = &gcc_qupv3_wrap1_s5_clk_src_init,
1387 };
1388
1389 static const struct freq_tbl ftbl_gcc_sdcc1_apps_clk_src[] = {
1390 F(144000, P_BI_TCXO, 16, 3, 25),
1391 F(400000, P_BI_TCXO, 12, 1, 4),
1392 F(20000000, P_GPLL0_OUT_EVEN, 5, 1, 3),
1393 F(25000000, P_GPLL0_OUT_EVEN, 6, 1, 2),
1394 F(50000000, P_GPLL0_OUT_EVEN, 6, 0, 0),
1395 F(100000000, P_GPLL0_OUT_EVEN, 3, 0, 0),
1396 F(192000000, P_GPLL6_OUT_EVEN, 2, 0, 0),
1397 F(384000000, P_GPLL6_OUT_EVEN, 1, 0, 0),
1398 { }
1399 };
1400
1401 static struct clk_rcg2 gcc_sdcc1_apps_clk_src = {
1402 .cmd_rcgr = 0x38028,
1403 .mnd_width = 8,
1404 .hid_width = 5,
1405 .parent_map = gcc_parent_map_1,
1406 .freq_tbl = ftbl_gcc_sdcc1_apps_clk_src,
1407 .clkr.hw.init = &(struct clk_init_data){
1408 .name = "gcc_sdcc1_apps_clk_src",
1409 .parent_data = gcc_parent_data_1,
1410 .num_parents = ARRAY_SIZE(gcc_parent_data_1),
1411 .ops = &clk_rcg2_shared_ops,
1412 },
1413 };
1414
1415 static const struct freq_tbl ftbl_gcc_sdcc1_ice_core_clk_src[] = {
1416 F(75000000, P_GPLL0_OUT_EVEN, 4, 0, 0),
1417 F(100000000, P_GPLL0_OUT_EVEN, 3, 0, 0),
1418 F(150000000, P_GPLL0_OUT_EVEN, 2, 0, 0),
1419 F(200000000, P_GPLL0_OUT_MAIN, 3, 0, 0),
1420 F(300000000, P_GPLL0_OUT_EVEN, 1, 0, 0),
1421 { }
1422 };
1423
1424 static struct clk_rcg2 gcc_sdcc1_ice_core_clk_src = {
1425 .cmd_rcgr = 0x38010,
1426 .mnd_width = 0,
1427 .hid_width = 5,
1428 .parent_map = gcc_parent_map_0,
1429 .freq_tbl = ftbl_gcc_sdcc1_ice_core_clk_src,
1430 .clkr.hw.init = &(struct clk_init_data){
1431 .name = "gcc_sdcc1_ice_core_clk_src",
1432 .parent_data = gcc_parent_data_0,
1433 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
1434 .ops = &clk_rcg2_shared_ops,
1435 },
1436 };
1437
1438 static const struct freq_tbl ftbl_gcc_sdcc2_apps_clk_src[] = {
1439 F(400000, P_BI_TCXO, 12, 1, 4),
1440 F(19200000, P_BI_TCXO, 1, 0, 0),
1441 F(25000000, P_GPLL0_OUT_EVEN, 12, 0, 0),
1442 F(50000000, P_GPLL0_OUT_EVEN, 6, 0, 0),
1443 F(100000000, P_GPLL0_OUT_EVEN, 3, 0, 0),
1444 F(202000000, P_GPLL7_OUT_EVEN, 4, 0, 0),
1445 { }
1446 };
1447
1448 static struct clk_rcg2 gcc_sdcc2_apps_clk_src = {
1449 .cmd_rcgr = 0x1e00c,
1450 .mnd_width = 8,
1451 .hid_width = 5,
1452 .parent_map = gcc_parent_map_12,
1453 .freq_tbl = ftbl_gcc_sdcc2_apps_clk_src,
1454 .clkr.hw.init = &(struct clk_init_data){
1455 .name = "gcc_sdcc2_apps_clk_src",
1456 .parent_data = gcc_parent_data_12,
1457 .num_parents = ARRAY_SIZE(gcc_parent_data_12),
1458 .ops = &clk_rcg2_shared_ops,
1459 },
1460 };
1461
1462 static const struct freq_tbl ftbl_gcc_ufs_phy_axi_clk_src[] = {
1463 F(25000000, P_GPLL0_OUT_EVEN, 12, 0, 0),
1464 F(50000000, P_GPLL0_OUT_ODD, 4, 0, 0),
1465 F(100000000, P_GPLL0_OUT_ODD, 2, 0, 0),
1466 F(200000000, P_GPLL0_OUT_ODD, 1, 0, 0),
1467 F(240000000, P_GPLL0_OUT_MAIN, 2.5, 0, 0),
1468 { }
1469 };
1470
1471 static struct clk_rcg2 gcc_ufs_phy_axi_clk_src = {
1472 .cmd_rcgr = 0x45020,
1473 .mnd_width = 8,
1474 .hid_width = 5,
1475 .parent_map = gcc_parent_map_2,
1476 .freq_tbl = ftbl_gcc_ufs_phy_axi_clk_src,
1477 .clkr.hw.init = &(struct clk_init_data){
1478 .name = "gcc_ufs_phy_axi_clk_src",
1479 .parent_data = gcc_parent_data_2,
1480 .num_parents = ARRAY_SIZE(gcc_parent_data_2),
1481 .ops = &clk_rcg2_shared_ops,
1482 },
1483 };
1484
1485 static const struct freq_tbl ftbl_gcc_ufs_phy_ice_core_clk_src[] = {
1486 F(37500000, P_GPLL0_OUT_EVEN, 8, 0, 0),
1487 F(75000000, P_GPLL0_OUT_EVEN, 4, 0, 0),
1488 F(150000000, P_GPLL0_OUT_EVEN, 2, 0, 0),
1489 F(300000000, P_GPLL0_OUT_EVEN, 1, 0, 0),
1490 { }
1491 };
1492
1493 static struct clk_rcg2 gcc_ufs_phy_ice_core_clk_src = {
1494 .cmd_rcgr = 0x45048,
1495 .mnd_width = 0,
1496 .hid_width = 5,
1497 .parent_map = gcc_parent_map_0,
1498 .freq_tbl = ftbl_gcc_ufs_phy_ice_core_clk_src,
1499 .clkr.hw.init = &(struct clk_init_data){
1500 .name = "gcc_ufs_phy_ice_core_clk_src",
1501 .parent_data = gcc_parent_data_0,
1502 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
1503 .ops = &clk_rcg2_shared_ops,
1504 },
1505 };
1506
1507 static const struct freq_tbl ftbl_gcc_ufs_phy_phy_aux_clk_src[] = {
1508 F(9600000, P_BI_TCXO, 2, 0, 0),
1509 F(19200000, P_BI_TCXO, 1, 0, 0),
1510 { }
1511 };
1512
1513 static struct clk_rcg2 gcc_ufs_phy_phy_aux_clk_src = {
1514 .cmd_rcgr = 0x4507c,
1515 .mnd_width = 0,
1516 .hid_width = 5,
1517 .parent_map = gcc_parent_map_0,
1518 .freq_tbl = ftbl_gcc_ufs_phy_phy_aux_clk_src,
1519 .clkr.hw.init = &(struct clk_init_data){
1520 .name = "gcc_ufs_phy_phy_aux_clk_src",
1521 .parent_data = gcc_parent_data_0,
1522 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
1523 .ops = &clk_rcg2_shared_ops,
1524 },
1525 };
1526
1527 static const struct freq_tbl ftbl_gcc_ufs_phy_unipro_core_clk_src[] = {
1528 F(37500000, P_GPLL0_OUT_EVEN, 8, 0, 0),
1529 F(75000000, P_GPLL0_OUT_EVEN, 4, 0, 0),
1530 F(150000000, P_GPLL0_OUT_EVEN, 2, 0, 0),
1531 { }
1532 };
1533
1534 static struct clk_rcg2 gcc_ufs_phy_unipro_core_clk_src = {
1535 .cmd_rcgr = 0x45060,
1536 .mnd_width = 0,
1537 .hid_width = 5,
1538 .parent_map = gcc_parent_map_0,
1539 .freq_tbl = ftbl_gcc_ufs_phy_unipro_core_clk_src,
1540 .clkr.hw.init = &(struct clk_init_data){
1541 .name = "gcc_ufs_phy_unipro_core_clk_src",
1542 .parent_data = gcc_parent_data_0,
1543 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
1544 .ops = &clk_rcg2_shared_ops,
1545 },
1546 };
1547
1548 static const struct freq_tbl ftbl_gcc_usb30_prim_master_clk_src[] = {
1549 F(66666667, P_GPLL0_OUT_EVEN, 4.5, 0, 0),
1550 F(133333333, P_GPLL0_OUT_MAIN, 4.5, 0, 0),
1551 F(200000000, P_GPLL0_OUT_ODD, 1, 0, 0),
1552 F(240000000, P_GPLL0_OUT_MAIN, 2.5, 0, 0),
1553 { }
1554 };
1555
1556 static struct clk_rcg2 gcc_usb30_prim_master_clk_src = {
1557 .cmd_rcgr = 0x1a01c,
1558 .mnd_width = 8,
1559 .hid_width = 5,
1560 .parent_map = gcc_parent_map_2,
1561 .freq_tbl = ftbl_gcc_usb30_prim_master_clk_src,
1562 .clkr.hw.init = &(struct clk_init_data){
1563 .name = "gcc_usb30_prim_master_clk_src",
1564 .parent_data = gcc_parent_data_2,
1565 .num_parents = ARRAY_SIZE(gcc_parent_data_2),
1566 .ops = &clk_rcg2_shared_ops,
1567 },
1568 };
1569
1570 static const struct freq_tbl ftbl_gcc_usb30_prim_mock_utmi_clk_src[] = {
1571 F(19200000, P_BI_TCXO, 1, 0, 0),
1572 { }
1573 };
1574
1575 static struct clk_rcg2 gcc_usb30_prim_mock_utmi_clk_src = {
1576 .cmd_rcgr = 0x1a034,
1577 .mnd_width = 0,
1578 .hid_width = 5,
1579 .parent_map = gcc_parent_map_0,
1580 .freq_tbl = ftbl_gcc_usb30_prim_mock_utmi_clk_src,
1581 .clkr.hw.init = &(struct clk_init_data){
1582 .name = "gcc_usb30_prim_mock_utmi_clk_src",
1583 .parent_data = gcc_parent_data_0,
1584 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
1585 .ops = &clk_rcg2_shared_ops,
1586 },
1587 };
1588
1589 static struct clk_rcg2 gcc_usb3_prim_phy_aux_clk_src = {
1590 .cmd_rcgr = 0x1a060,
1591 .mnd_width = 0,
1592 .hid_width = 5,
1593 .parent_map = gcc_parent_map_13,
1594 .freq_tbl = ftbl_gcc_usb30_prim_mock_utmi_clk_src,
1595 .clkr.hw.init = &(struct clk_init_data){
1596 .name = "gcc_usb3_prim_phy_aux_clk_src",
1597 .parent_data = gcc_parent_data_13,
1598 .num_parents = ARRAY_SIZE(gcc_parent_data_13),
1599 .ops = &clk_rcg2_shared_ops,
1600 },
1601 };
1602
1603 static const struct freq_tbl ftbl_gcc_video_venus_clk_src[] = {
1604 F(133000000, P_GPLL11_OUT_EVEN, 4, 0, 0),
1605 F(240000000, P_GPLL11_OUT_EVEN, 2.5, 0, 0),
1606 F(300000000, P_GPLL11_OUT_EVEN, 2, 0, 0),
1607 F(384000000, P_GPLL11_OUT_EVEN, 2, 0, 0),
1608 { }
1609 };
1610
1611 static struct clk_rcg2 gcc_video_venus_clk_src = {
1612 .cmd_rcgr = 0x58060,
1613 .mnd_width = 0,
1614 .hid_width = 5,
1615 .parent_map = gcc_parent_map_14,
1616 .freq_tbl = ftbl_gcc_video_venus_clk_src,
1617 .clkr.hw.init = &(struct clk_init_data){
1618 .name = "gcc_video_venus_clk_src",
1619 .parent_data = gcc_parent_data_14,
1620 .num_parents = ARRAY_SIZE(gcc_parent_data_14),
1621 .flags = CLK_SET_RATE_PARENT,
1622 .ops = &clk_rcg2_shared_ops,
1623 },
1624 };
1625
1626 static struct clk_regmap_div gcc_cpuss_ahb_postdiv_clk_src = {
1627 .reg = 0x2b154,
1628 .shift = 0,
1629 .width = 4,
1630 .clkr.hw.init = &(struct clk_init_data) {
1631 .name = "gcc_cpuss_ahb_postdiv_clk_src",
1632 .parent_hws = (const struct clk_hw*[]){
1633 &gcc_cpuss_ahb_clk_src.clkr.hw,
1634 },
1635 .num_parents = 1,
1636 .flags = CLK_SET_RATE_PARENT,
1637 .ops = &clk_regmap_div_ro_ops,
1638 },
1639 };
1640
1641 static struct clk_regmap_div gcc_usb30_prim_mock_utmi_postdiv_clk_src = {
1642 .reg = 0x1a04c,
1643 .shift = 0,
1644 .width = 4,
1645 .clkr.hw.init = &(struct clk_init_data) {
1646 .name = "gcc_usb30_prim_mock_utmi_postdiv_clk_src",
1647 .parent_hws = (const struct clk_hw*[]){
1648 &gcc_usb30_prim_mock_utmi_clk_src.clkr.hw,
1649 },
1650 .num_parents = 1,
1651 .flags = CLK_SET_RATE_PARENT,
1652 .ops = &clk_regmap_div_ro_ops,
1653 },
1654 };
1655
1656 static struct clk_branch gcc_ahb2phy_csi_clk = {
1657 .halt_reg = 0x1d004,
1658 .halt_check = BRANCH_HALT_VOTED,
1659 .hwcg_reg = 0x1d004,
1660 .hwcg_bit = 1,
1661 .clkr = {
1662 .enable_reg = 0x1d004,
1663 .enable_mask = BIT(0),
1664 .hw.init = &(struct clk_init_data){
1665 .name = "gcc_ahb2phy_csi_clk",
1666 .ops = &clk_branch2_ops,
1667 },
1668 },
1669 };
1670
1671 static struct clk_branch gcc_ahb2phy_usb_clk = {
1672 .halt_reg = 0x1d008,
1673 .halt_check = BRANCH_HALT_VOTED,
1674 .hwcg_reg = 0x1d008,
1675 .hwcg_bit = 1,
1676 .clkr = {
1677 .enable_reg = 0x1d008,
1678 .enable_mask = BIT(0),
1679 .hw.init = &(struct clk_init_data){
1680 .name = "gcc_ahb2phy_usb_clk",
1681 .ops = &clk_branch2_ops,
1682 },
1683 },
1684 };
1685
1686 static struct clk_branch gcc_bimc_gpu_axi_clk = {
1687 .halt_reg = 0x71154,
1688 .halt_check = BRANCH_HALT_VOTED,
1689 .hwcg_reg = 0x71154,
1690 .hwcg_bit = 1,
1691 .clkr = {
1692 .enable_reg = 0x71154,
1693 .enable_mask = BIT(0),
1694 .hw.init = &(struct clk_init_data){
1695 .name = "gcc_bimc_gpu_axi_clk",
1696 .ops = &clk_branch2_ops,
1697 },
1698 },
1699 };
1700
1701 static struct clk_branch gcc_boot_rom_ahb_clk = {
1702 .halt_reg = 0x23004,
1703 .halt_check = BRANCH_HALT_VOTED,
1704 .hwcg_reg = 0x23004,
1705 .hwcg_bit = 1,
1706 .clkr = {
1707 .enable_reg = 0x79004,
1708 .enable_mask = BIT(10),
1709 .hw.init = &(struct clk_init_data){
1710 .name = "gcc_boot_rom_ahb_clk",
1711 .ops = &clk_branch2_ops,
1712 },
1713 },
1714 };
1715
1716 static struct clk_branch gcc_cam_throttle_nrt_clk = {
1717 .halt_reg = 0x17070,
1718 .halt_check = BRANCH_HALT_VOTED,
1719 .hwcg_reg = 0x17070,
1720 .hwcg_bit = 1,
1721 .clkr = {
1722 .enable_reg = 0x79004,
1723 .enable_mask = BIT(27),
1724 .hw.init = &(struct clk_init_data){
1725 .name = "gcc_cam_throttle_nrt_clk",
1726 .ops = &clk_branch2_ops,
1727 },
1728 },
1729 };
1730
1731 static struct clk_branch gcc_cam_throttle_rt_clk = {
1732 .halt_reg = 0x1706c,
1733 .halt_check = BRANCH_HALT_VOTED,
1734 .hwcg_reg = 0x1706c,
1735 .hwcg_bit = 1,
1736 .clkr = {
1737 .enable_reg = 0x79004,
1738 .enable_mask = BIT(26),
1739 .hw.init = &(struct clk_init_data){
1740 .name = "gcc_cam_throttle_rt_clk",
1741 .ops = &clk_branch2_ops,
1742 },
1743 },
1744 };
1745
1746 static struct clk_branch gcc_camera_ahb_clk = {
1747 .halt_reg = 0x17008,
1748 .halt_check = BRANCH_HALT_DELAY,
1749 .hwcg_reg = 0x17008,
1750 .hwcg_bit = 1,
1751 .clkr = {
1752 .enable_reg = 0x17008,
1753 .enable_mask = BIT(0),
1754 .hw.init = &(struct clk_init_data){
1755 .name = "gcc_camera_ahb_clk",
1756 .flags = CLK_IS_CRITICAL,
1757 .ops = &clk_branch2_ops,
1758 },
1759 },
1760 };
1761
1762 static struct clk_branch gcc_camss_axi_clk = {
1763 .halt_reg = 0x58044,
1764 .halt_check = BRANCH_HALT,
1765 .clkr = {
1766 .enable_reg = 0x58044,
1767 .enable_mask = BIT(0),
1768 .hw.init = &(struct clk_init_data){
1769 .name = "gcc_camss_axi_clk",
1770 .parent_hws = (const struct clk_hw*[]) {
1771 &gcc_camss_axi_clk_src.clkr.hw,
1772 },
1773 .num_parents = 1,
1774 .flags = CLK_SET_RATE_PARENT,
1775 .ops = &clk_branch2_ops,
1776 },
1777 },
1778 };
1779
1780 static struct clk_branch gcc_camss_cci_0_clk = {
1781 .halt_reg = 0x56018,
1782 .halt_check = BRANCH_HALT,
1783 .clkr = {
1784 .enable_reg = 0x56018,
1785 .enable_mask = BIT(0),
1786 .hw.init = &(struct clk_init_data){
1787 .name = "gcc_camss_cci_0_clk",
1788 .parent_hws = (const struct clk_hw*[]) {
1789 &gcc_camss_cci_0_clk_src.clkr.hw,
1790 },
1791 .num_parents = 1,
1792 .flags = CLK_SET_RATE_PARENT,
1793 .ops = &clk_branch2_ops,
1794 },
1795 },
1796 };
1797
1798 static struct clk_branch gcc_camss_cci_1_clk = {
1799 .halt_reg = 0x5c018,
1800 .halt_check = BRANCH_HALT,
1801 .clkr = {
1802 .enable_reg = 0x5c018,
1803 .enable_mask = BIT(0),
1804 .hw.init = &(struct clk_init_data){
1805 .name = "gcc_camss_cci_1_clk",
1806 .parent_hws = (const struct clk_hw*[]) {
1807 &gcc_camss_cci_1_clk_src.clkr.hw,
1808 },
1809 .num_parents = 1,
1810 .flags = CLK_SET_RATE_PARENT,
1811 .ops = &clk_branch2_ops,
1812 },
1813 },
1814 };
1815
1816 static struct clk_branch gcc_camss_cphy_0_clk = {
1817 .halt_reg = 0x52088,
1818 .halt_check = BRANCH_HALT,
1819 .clkr = {
1820 .enable_reg = 0x52088,
1821 .enable_mask = BIT(0),
1822 .hw.init = &(struct clk_init_data){
1823 .name = "gcc_camss_cphy_0_clk",
1824 .parent_hws = (const struct clk_hw*[]) {
1825 &gcc_camss_tfe_cphy_rx_clk_src.clkr.hw,
1826 },
1827 .num_parents = 1,
1828 .flags = CLK_SET_RATE_PARENT,
1829 .ops = &clk_branch2_ops,
1830 },
1831 },
1832 };
1833
1834 static struct clk_branch gcc_camss_cphy_1_clk = {
1835 .halt_reg = 0x5208c,
1836 .halt_check = BRANCH_HALT,
1837 .clkr = {
1838 .enable_reg = 0x5208c,
1839 .enable_mask = BIT(0),
1840 .hw.init = &(struct clk_init_data){
1841 .name = "gcc_camss_cphy_1_clk",
1842 .parent_hws = (const struct clk_hw*[]) {
1843 &gcc_camss_tfe_cphy_rx_clk_src.clkr.hw,
1844 },
1845 .num_parents = 1,
1846 .flags = CLK_SET_RATE_PARENT,
1847 .ops = &clk_branch2_ops,
1848 },
1849 },
1850 };
1851
1852 static struct clk_branch gcc_camss_cphy_2_clk = {
1853 .halt_reg = 0x52090,
1854 .halt_check = BRANCH_HALT,
1855 .clkr = {
1856 .enable_reg = 0x52090,
1857 .enable_mask = BIT(0),
1858 .hw.init = &(struct clk_init_data){
1859 .name = "gcc_camss_cphy_2_clk",
1860 .parent_hws = (const struct clk_hw*[]) {
1861 &gcc_camss_tfe_cphy_rx_clk_src.clkr.hw,
1862 },
1863 .num_parents = 1,
1864 .flags = CLK_SET_RATE_PARENT,
1865 .ops = &clk_branch2_ops,
1866 },
1867 },
1868 };
1869
1870 static struct clk_branch gcc_camss_cphy_3_clk = {
1871 .halt_reg = 0x520f8,
1872 .halt_check = BRANCH_HALT,
1873 .clkr = {
1874 .enable_reg = 0x520f8,
1875 .enable_mask = BIT(0),
1876 .hw.init = &(struct clk_init_data){
1877 .name = "gcc_camss_cphy_3_clk",
1878 .parent_hws = (const struct clk_hw*[]) {
1879 &gcc_camss_tfe_cphy_rx_clk_src.clkr.hw,
1880 },
1881 .num_parents = 1,
1882 .flags = CLK_SET_RATE_PARENT,
1883 .ops = &clk_branch2_ops,
1884 },
1885 },
1886 };
1887
1888 static struct clk_branch gcc_camss_csi0phytimer_clk = {
1889 .halt_reg = 0x59018,
1890 .halt_check = BRANCH_HALT,
1891 .clkr = {
1892 .enable_reg = 0x59018,
1893 .enable_mask = BIT(0),
1894 .hw.init = &(struct clk_init_data){
1895 .name = "gcc_camss_csi0phytimer_clk",
1896 .parent_hws = (const struct clk_hw*[]) {
1897 &gcc_camss_csi0phytimer_clk_src.clkr.hw,
1898 },
1899 .num_parents = 1,
1900 .flags = CLK_SET_RATE_PARENT,
1901 .ops = &clk_branch2_ops,
1902 },
1903 },
1904 };
1905
1906 static struct clk_branch gcc_camss_csi1phytimer_clk = {
1907 .halt_reg = 0x59034,
1908 .halt_check = BRANCH_HALT,
1909 .clkr = {
1910 .enable_reg = 0x59034,
1911 .enable_mask = BIT(0),
1912 .hw.init = &(struct clk_init_data){
1913 .name = "gcc_camss_csi1phytimer_clk",
1914 .parent_hws = (const struct clk_hw*[]) {
1915 &gcc_camss_csi1phytimer_clk_src.clkr.hw,
1916 },
1917 .num_parents = 1,
1918 .flags = CLK_SET_RATE_PARENT,
1919 .ops = &clk_branch2_ops,
1920 },
1921 },
1922 };
1923
1924 static struct clk_branch gcc_camss_csi2phytimer_clk = {
1925 .halt_reg = 0x59050,
1926 .halt_check = BRANCH_HALT,
1927 .clkr = {
1928 .enable_reg = 0x59050,
1929 .enable_mask = BIT(0),
1930 .hw.init = &(struct clk_init_data){
1931 .name = "gcc_camss_csi2phytimer_clk",
1932 .parent_hws = (const struct clk_hw*[]) {
1933 &gcc_camss_csi2phytimer_clk_src.clkr.hw,
1934 },
1935 .num_parents = 1,
1936 .flags = CLK_SET_RATE_PARENT,
1937 .ops = &clk_branch2_ops,
1938 },
1939 },
1940 };
1941
1942 static struct clk_branch gcc_camss_csi3phytimer_clk = {
1943 .halt_reg = 0x5906c,
1944 .halt_check = BRANCH_HALT,
1945 .clkr = {
1946 .enable_reg = 0x5906c,
1947 .enable_mask = BIT(0),
1948 .hw.init = &(struct clk_init_data){
1949 .name = "gcc_camss_csi3phytimer_clk",
1950 .parent_hws = (const struct clk_hw*[]) {
1951 &gcc_camss_csi3phytimer_clk_src.clkr.hw,
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 gcc_camss_mclk0_clk = {
1961 .halt_reg = 0x51018,
1962 .halt_check = BRANCH_HALT,
1963 .clkr = {
1964 .enable_reg = 0x51018,
1965 .enable_mask = BIT(0),
1966 .hw.init = &(struct clk_init_data){
1967 .name = "gcc_camss_mclk0_clk",
1968 .parent_hws = (const struct clk_hw*[]) {
1969 &gcc_camss_mclk0_clk_src.clkr.hw,
1970 },
1971 .num_parents = 1,
1972 .flags = CLK_SET_RATE_PARENT,
1973 .ops = &clk_branch2_ops,
1974 },
1975 },
1976 };
1977
1978 static struct clk_branch gcc_camss_mclk1_clk = {
1979 .halt_reg = 0x51034,
1980 .halt_check = BRANCH_HALT,
1981 .clkr = {
1982 .enable_reg = 0x51034,
1983 .enable_mask = BIT(0),
1984 .hw.init = &(struct clk_init_data){
1985 .name = "gcc_camss_mclk1_clk",
1986 .parent_hws = (const struct clk_hw*[]) {
1987 &gcc_camss_mclk1_clk_src.clkr.hw,
1988 },
1989 .num_parents = 1,
1990 .flags = CLK_SET_RATE_PARENT,
1991 .ops = &clk_branch2_ops,
1992 },
1993 },
1994 };
1995
1996 static struct clk_branch gcc_camss_mclk2_clk = {
1997 .halt_reg = 0x51050,
1998 .halt_check = BRANCH_HALT,
1999 .clkr = {
2000 .enable_reg = 0x51050,
2001 .enable_mask = BIT(0),
2002 .hw.init = &(struct clk_init_data){
2003 .name = "gcc_camss_mclk2_clk",
2004 .parent_hws = (const struct clk_hw*[]) {
2005 &gcc_camss_mclk2_clk_src.clkr.hw,
2006 },
2007 .num_parents = 1,
2008 .flags = CLK_SET_RATE_PARENT,
2009 .ops = &clk_branch2_ops,
2010 },
2011 },
2012 };
2013
2014 static struct clk_branch gcc_camss_mclk3_clk = {
2015 .halt_reg = 0x5106c,
2016 .halt_check = BRANCH_HALT,
2017 .clkr = {
2018 .enable_reg = 0x5106c,
2019 .enable_mask = BIT(0),
2020 .hw.init = &(struct clk_init_data){
2021 .name = "gcc_camss_mclk3_clk",
2022 .parent_hws = (const struct clk_hw*[]) {
2023 &gcc_camss_mclk3_clk_src.clkr.hw,
2024 },
2025 .num_parents = 1,
2026 .flags = CLK_SET_RATE_PARENT,
2027 .ops = &clk_branch2_ops,
2028 },
2029 },
2030 };
2031
2032 static struct clk_branch gcc_camss_mclk4_clk = {
2033 .halt_reg = 0x51088,
2034 .halt_check = BRANCH_HALT,
2035 .clkr = {
2036 .enable_reg = 0x51088,
2037 .enable_mask = BIT(0),
2038 .hw.init = &(struct clk_init_data){
2039 .name = "gcc_camss_mclk4_clk",
2040 .parent_hws = (const struct clk_hw*[]) {
2041 &gcc_camss_mclk4_clk_src.clkr.hw,
2042 },
2043 .num_parents = 1,
2044 .flags = CLK_SET_RATE_PARENT,
2045 .ops = &clk_branch2_ops,
2046 },
2047 },
2048 };
2049
2050 static struct clk_branch gcc_camss_nrt_axi_clk = {
2051 .halt_reg = 0x58054,
2052 .halt_check = BRANCH_HALT,
2053 .clkr = {
2054 .enable_reg = 0x58054,
2055 .enable_mask = BIT(0),
2056 .hw.init = &(struct clk_init_data){
2057 .name = "gcc_camss_nrt_axi_clk",
2058 .ops = &clk_branch2_ops,
2059 },
2060 },
2061 };
2062
2063 static struct clk_branch gcc_camss_ope_ahb_clk = {
2064 .halt_reg = 0x5503c,
2065 .halt_check = BRANCH_HALT,
2066 .clkr = {
2067 .enable_reg = 0x5503c,
2068 .enable_mask = BIT(0),
2069 .hw.init = &(struct clk_init_data){
2070 .name = "gcc_camss_ope_ahb_clk",
2071 .parent_hws = (const struct clk_hw*[]) {
2072 &gcc_camss_ope_ahb_clk_src.clkr.hw,
2073 },
2074 .num_parents = 1,
2075 .flags = CLK_SET_RATE_PARENT,
2076 .ops = &clk_branch2_ops,
2077 },
2078 },
2079 };
2080
2081 static struct clk_branch gcc_camss_ope_clk = {
2082 .halt_reg = 0x5501c,
2083 .halt_check = BRANCH_HALT,
2084 .clkr = {
2085 .enable_reg = 0x5501c,
2086 .enable_mask = BIT(0),
2087 .hw.init = &(struct clk_init_data){
2088 .name = "gcc_camss_ope_clk",
2089 .parent_hws = (const struct clk_hw*[]) {
2090 &gcc_camss_ope_clk_src.clkr.hw,
2091 },
2092 .num_parents = 1,
2093 .flags = CLK_SET_RATE_PARENT,
2094 .ops = &clk_branch2_ops,
2095 },
2096 },
2097 };
2098
2099 static struct clk_branch gcc_camss_rt_axi_clk = {
2100 .halt_reg = 0x5805c,
2101 .halt_check = BRANCH_HALT,
2102 .clkr = {
2103 .enable_reg = 0x5805c,
2104 .enable_mask = BIT(0),
2105 .hw.init = &(struct clk_init_data){
2106 .name = "gcc_camss_rt_axi_clk",
2107 .ops = &clk_branch2_ops,
2108 },
2109 },
2110 };
2111
2112 static struct clk_branch gcc_camss_tfe_0_clk = {
2113 .halt_reg = 0x5201c,
2114 .halt_check = BRANCH_HALT,
2115 .clkr = {
2116 .enable_reg = 0x5201c,
2117 .enable_mask = BIT(0),
2118 .hw.init = &(struct clk_init_data){
2119 .name = "gcc_camss_tfe_0_clk",
2120 .parent_hws = (const struct clk_hw*[]) {
2121 &gcc_camss_tfe_0_clk_src.clkr.hw,
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 gcc_camss_tfe_0_cphy_rx_clk = {
2131 .halt_reg = 0x5207c,
2132 .halt_check = BRANCH_HALT,
2133 .clkr = {
2134 .enable_reg = 0x5207c,
2135 .enable_mask = BIT(0),
2136 .hw.init = &(struct clk_init_data){
2137 .name = "gcc_camss_tfe_0_cphy_rx_clk",
2138 .parent_hws = (const struct clk_hw*[]) {
2139 &gcc_camss_tfe_cphy_rx_clk_src.clkr.hw,
2140 },
2141 .num_parents = 1,
2142 .flags = CLK_SET_RATE_PARENT,
2143 .ops = &clk_branch2_ops,
2144 },
2145 },
2146 };
2147
2148 static struct clk_branch gcc_camss_tfe_0_csid_clk = {
2149 .halt_reg = 0x520ac,
2150 .halt_check = BRANCH_HALT,
2151 .clkr = {
2152 .enable_reg = 0x520ac,
2153 .enable_mask = BIT(0),
2154 .hw.init = &(struct clk_init_data){
2155 .name = "gcc_camss_tfe_0_csid_clk",
2156 .parent_hws = (const struct clk_hw*[]) {
2157 &gcc_camss_tfe_0_csid_clk_src.clkr.hw,
2158 },
2159 .num_parents = 1,
2160 .flags = CLK_SET_RATE_PARENT,
2161 .ops = &clk_branch2_ops,
2162 },
2163 },
2164 };
2165
2166 static struct clk_branch gcc_camss_tfe_1_clk = {
2167 .halt_reg = 0x5203c,
2168 .halt_check = BRANCH_HALT,
2169 .clkr = {
2170 .enable_reg = 0x5203c,
2171 .enable_mask = BIT(0),
2172 .hw.init = &(struct clk_init_data){
2173 .name = "gcc_camss_tfe_1_clk",
2174 .parent_hws = (const struct clk_hw*[]) {
2175 &gcc_camss_tfe_1_clk_src.clkr.hw,
2176 },
2177 .num_parents = 1,
2178 .flags = CLK_SET_RATE_PARENT,
2179 .ops = &clk_branch2_ops,
2180 },
2181 },
2182 };
2183
2184 static struct clk_branch gcc_camss_tfe_1_cphy_rx_clk = {
2185 .halt_reg = 0x52080,
2186 .halt_check = BRANCH_HALT,
2187 .clkr = {
2188 .enable_reg = 0x52080,
2189 .enable_mask = BIT(0),
2190 .hw.init = &(struct clk_init_data){
2191 .name = "gcc_camss_tfe_1_cphy_rx_clk",
2192 .parent_hws = (const struct clk_hw*[]) {
2193 &gcc_camss_tfe_cphy_rx_clk_src.clkr.hw,
2194 },
2195 .num_parents = 1,
2196 .flags = CLK_SET_RATE_PARENT,
2197 .ops = &clk_branch2_ops,
2198 },
2199 },
2200 };
2201
2202 static struct clk_branch gcc_camss_tfe_1_csid_clk = {
2203 .halt_reg = 0x520cc,
2204 .halt_check = BRANCH_HALT,
2205 .clkr = {
2206 .enable_reg = 0x520cc,
2207 .enable_mask = BIT(0),
2208 .hw.init = &(struct clk_init_data){
2209 .name = "gcc_camss_tfe_1_csid_clk",
2210 .parent_hws = (const struct clk_hw*[]) {
2211 &gcc_camss_tfe_1_csid_clk_src.clkr.hw,
2212 },
2213 .num_parents = 1,
2214 .flags = CLK_SET_RATE_PARENT,
2215 .ops = &clk_branch2_ops,
2216 },
2217 },
2218 };
2219
2220 static struct clk_branch gcc_camss_tfe_2_clk = {
2221 .halt_reg = 0x5205c,
2222 .halt_check = BRANCH_HALT,
2223 .clkr = {
2224 .enable_reg = 0x5205c,
2225 .enable_mask = BIT(0),
2226 .hw.init = &(struct clk_init_data){
2227 .name = "gcc_camss_tfe_2_clk",
2228 .parent_hws = (const struct clk_hw*[]) {
2229 &gcc_camss_tfe_2_clk_src.clkr.hw,
2230 },
2231 .num_parents = 1,
2232 .flags = CLK_SET_RATE_PARENT,
2233 .ops = &clk_branch2_ops,
2234 },
2235 },
2236 };
2237
2238 static struct clk_branch gcc_camss_tfe_2_cphy_rx_clk = {
2239 .halt_reg = 0x52084,
2240 .halt_check = BRANCH_HALT,
2241 .clkr = {
2242 .enable_reg = 0x52084,
2243 .enable_mask = BIT(0),
2244 .hw.init = &(struct clk_init_data){
2245 .name = "gcc_camss_tfe_2_cphy_rx_clk",
2246 .parent_hws = (const struct clk_hw*[]) {
2247 &gcc_camss_tfe_cphy_rx_clk_src.clkr.hw,
2248 },
2249 .num_parents = 1,
2250 .flags = CLK_SET_RATE_PARENT,
2251 .ops = &clk_branch2_ops,
2252 },
2253 },
2254 };
2255
2256 static struct clk_branch gcc_camss_tfe_2_csid_clk = {
2257 .halt_reg = 0x520ec,
2258 .halt_check = BRANCH_HALT,
2259 .clkr = {
2260 .enable_reg = 0x520ec,
2261 .enable_mask = BIT(0),
2262 .hw.init = &(struct clk_init_data){
2263 .name = "gcc_camss_tfe_2_csid_clk",
2264 .parent_hws = (const struct clk_hw*[]) {
2265 &gcc_camss_tfe_2_csid_clk_src.clkr.hw,
2266 },
2267 .num_parents = 1,
2268 .flags = CLK_SET_RATE_PARENT,
2269 .ops = &clk_branch2_ops,
2270 },
2271 },
2272 };
2273
2274 static struct clk_branch gcc_camss_top_ahb_clk = {
2275 .halt_reg = 0x58028,
2276 .halt_check = BRANCH_HALT,
2277 .clkr = {
2278 .enable_reg = 0x58028,
2279 .enable_mask = BIT(0),
2280 .hw.init = &(struct clk_init_data){
2281 .name = "gcc_camss_top_ahb_clk",
2282 .parent_hws = (const struct clk_hw*[]) {
2283 &gcc_camss_top_ahb_clk_src.clkr.hw,
2284 },
2285 .num_parents = 1,
2286 .flags = CLK_SET_RATE_PARENT,
2287 .ops = &clk_branch2_ops,
2288 },
2289 },
2290 };
2291
2292 static struct clk_branch gcc_cfg_noc_usb3_prim_axi_clk = {
2293 .halt_reg = 0x1a084,
2294 .halt_check = BRANCH_HALT_VOTED,
2295 .hwcg_reg = 0x1a084,
2296 .hwcg_bit = 1,
2297 .clkr = {
2298 .enable_reg = 0x1a084,
2299 .enable_mask = BIT(0),
2300 .hw.init = &(struct clk_init_data){
2301 .name = "gcc_cfg_noc_usb3_prim_axi_clk",
2302 .parent_hws = (const struct clk_hw*[]) {
2303 &gcc_usb30_prim_master_clk_src.clkr.hw,
2304 },
2305 .num_parents = 1,
2306 .flags = CLK_SET_RATE_PARENT,
2307 .ops = &clk_branch2_ops,
2308 },
2309 },
2310 };
2311
2312 static struct clk_branch gcc_disp_ahb_clk = {
2313 .halt_reg = 0x1700c,
2314 .halt_check = BRANCH_HALT_VOTED,
2315 .hwcg_reg = 0x1700c,
2316 .hwcg_bit = 1,
2317 .clkr = {
2318 .enable_reg = 0x1700c,
2319 .enable_mask = BIT(0),
2320 .hw.init = &(struct clk_init_data){
2321 .name = "gcc_disp_ahb_clk",
2322 .flags = CLK_IS_CRITICAL,
2323 .ops = &clk_branch2_ops,
2324 },
2325 },
2326 };
2327
2328 static struct clk_regmap_div gcc_disp_gpll0_clk_src = {
2329 .reg = 0x17058,
2330 .shift = 0,
2331 .width = 2,
2332 .clkr.hw.init = &(struct clk_init_data) {
2333 .name = "gcc_disp_gpll0_clk_src",
2334 .parent_hws = (const struct clk_hw*[]){
2335 &gpll0.clkr.hw,
2336 },
2337 .num_parents = 1,
2338 .ops = &clk_regmap_div_ops,
2339 },
2340 };
2341
2342 static struct clk_branch gcc_disp_gpll0_div_clk_src = {
2343 .halt_check = BRANCH_HALT_DELAY,
2344 .clkr = {
2345 .enable_reg = 0x79004,
2346 .enable_mask = BIT(20),
2347 .hw.init = &(struct clk_init_data){
2348 .name = "gcc_disp_gpll0_div_clk_src",
2349 .parent_hws = (const struct clk_hw*[]) {
2350 &gcc_disp_gpll0_clk_src.clkr.hw,
2351 },
2352 .num_parents = 1,
2353 .flags = CLK_SET_RATE_PARENT,
2354 .ops = &clk_branch2_ops,
2355 },
2356 },
2357 };
2358
2359 static struct clk_branch gcc_disp_hf_axi_clk = {
2360 .halt_reg = 0x17020,
2361 .halt_check = BRANCH_VOTED,
2362 .hwcg_reg = 0x17020,
2363 .hwcg_bit = 1,
2364 .clkr = {
2365 .enable_reg = 0x17020,
2366 .enable_mask = BIT(0),
2367 .hw.init = &(struct clk_init_data){
2368 .name = "gcc_disp_hf_axi_clk",
2369 .ops = &clk_branch2_ops,
2370 },
2371 },
2372 };
2373
2374 static struct clk_branch gcc_disp_sleep_clk = {
2375 .halt_reg = 0x17074,
2376 .halt_check = BRANCH_HALT_VOTED,
2377 .hwcg_reg = 0x17074,
2378 .hwcg_bit = 1,
2379 .clkr = {
2380 .enable_reg = 0x17074,
2381 .enable_mask = BIT(0),
2382 .hw.init = &(struct clk_init_data){
2383 .name = "gcc_disp_sleep_clk",
2384 .ops = &clk_branch2_ops,
2385 },
2386 },
2387 };
2388
2389 static struct clk_branch gcc_disp_throttle_core_clk = {
2390 .halt_reg = 0x17064,
2391 .halt_check = BRANCH_HALT_VOTED,
2392 .hwcg_reg = 0x17064,
2393 .hwcg_bit = 1,
2394 .clkr = {
2395 .enable_reg = 0x7900c,
2396 .enable_mask = BIT(5),
2397 .hw.init = &(struct clk_init_data){
2398 .name = "gcc_disp_throttle_core_clk",
2399 .ops = &clk_branch2_ops,
2400 },
2401 },
2402 };
2403
2404 static struct clk_branch gcc_gp1_clk = {
2405 .halt_reg = 0x4d000,
2406 .halt_check = BRANCH_HALT,
2407 .clkr = {
2408 .enable_reg = 0x4d000,
2409 .enable_mask = BIT(0),
2410 .hw.init = &(struct clk_init_data){
2411 .name = "gcc_gp1_clk",
2412 .parent_hws = (const struct clk_hw*[]) {
2413 &gcc_gp1_clk_src.clkr.hw,
2414 },
2415 .num_parents = 1,
2416 .flags = CLK_SET_RATE_PARENT,
2417 .ops = &clk_branch2_ops,
2418 },
2419 },
2420 };
2421
2422 static struct clk_branch gcc_gp2_clk = {
2423 .halt_reg = 0x4e000,
2424 .halt_check = BRANCH_HALT,
2425 .clkr = {
2426 .enable_reg = 0x4e000,
2427 .enable_mask = BIT(0),
2428 .hw.init = &(struct clk_init_data){
2429 .name = "gcc_gp2_clk",
2430 .parent_hws = (const struct clk_hw*[]) {
2431 &gcc_gp2_clk_src.clkr.hw,
2432 },
2433 .num_parents = 1,
2434 .flags = CLK_SET_RATE_PARENT,
2435 .ops = &clk_branch2_ops,
2436 },
2437 },
2438 };
2439
2440 static struct clk_branch gcc_gp3_clk = {
2441 .halt_reg = 0x4f000,
2442 .halt_check = BRANCH_HALT,
2443 .clkr = {
2444 .enable_reg = 0x4f000,
2445 .enable_mask = BIT(0),
2446 .hw.init = &(struct clk_init_data){
2447 .name = "gcc_gp3_clk",
2448 .parent_hws = (const struct clk_hw*[]) {
2449 &gcc_gp3_clk_src.clkr.hw,
2450 },
2451 .num_parents = 1,
2452 .flags = CLK_SET_RATE_PARENT,
2453 .ops = &clk_branch2_ops,
2454 },
2455 },
2456 };
2457
2458 static struct clk_branch gcc_gpu_cfg_ahb_clk = {
2459 .halt_reg = 0x36004,
2460 .halt_check = BRANCH_HALT_VOTED,
2461 .hwcg_reg = 0x36004,
2462 .hwcg_bit = 1,
2463 .clkr = {
2464 .enable_reg = 0x36004,
2465 .enable_mask = BIT(0),
2466 .hw.init = &(struct clk_init_data){
2467 .name = "gcc_gpu_cfg_ahb_clk",
2468 .flags = CLK_IS_CRITICAL,
2469 .ops = &clk_branch2_ops,
2470 },
2471 },
2472 };
2473
2474 static struct clk_branch gcc_gpu_gpll0_clk_src = {
2475 .halt_check = BRANCH_HALT_DELAY,
2476 .clkr = {
2477 .enable_reg = 0x79004,
2478 .enable_mask = BIT(15),
2479 .hw.init = &(struct clk_init_data){
2480 .name = "gcc_gpu_gpll0_clk_src",
2481 .parent_hws = (const struct clk_hw*[]) {
2482 &gpll0.clkr.hw,
2483 },
2484 .num_parents = 1,
2485 .flags = CLK_SET_RATE_PARENT,
2486 .ops = &clk_branch2_ops,
2487 },
2488 },
2489 };
2490
2491 static struct clk_branch gcc_gpu_gpll0_div_clk_src = {
2492 .halt_check = BRANCH_HALT_DELAY,
2493 .clkr = {
2494 .enable_reg = 0x79004,
2495 .enable_mask = BIT(16),
2496 .hw.init = &(struct clk_init_data){
2497 .name = "gcc_gpu_gpll0_div_clk_src",
2498 .parent_hws = (const struct clk_hw*[]) {
2499 &gpll0_out_even.clkr.hw,
2500 },
2501 .num_parents = 1,
2502 .flags = CLK_SET_RATE_PARENT,
2503 .ops = &clk_branch2_ops,
2504 },
2505 },
2506 };
2507
2508 static struct clk_branch gcc_gpu_memnoc_gfx_clk = {
2509 .halt_reg = 0x3600c,
2510 .halt_check = BRANCH_VOTED,
2511 .hwcg_reg = 0x3600c,
2512 .hwcg_bit = 1,
2513 .clkr = {
2514 .enable_reg = 0x3600c,
2515 .enable_mask = BIT(0),
2516 .hw.init = &(struct clk_init_data){
2517 .name = "gcc_gpu_memnoc_gfx_clk",
2518 .ops = &clk_branch2_ops,
2519 },
2520 },
2521 };
2522
2523 static struct clk_branch gcc_gpu_snoc_dvm_gfx_clk = {
2524 .halt_reg = 0x36018,
2525 .halt_check = BRANCH_HALT,
2526 .clkr = {
2527 .enable_reg = 0x36018,
2528 .enable_mask = BIT(0),
2529 .hw.init = &(struct clk_init_data){
2530 .name = "gcc_gpu_snoc_dvm_gfx_clk",
2531 .ops = &clk_branch2_ops,
2532 },
2533 },
2534 };
2535
2536 static struct clk_branch gcc_gpu_throttle_core_clk = {
2537 .halt_reg = 0x36048,
2538 .halt_check = BRANCH_HALT_VOTED,
2539 .hwcg_reg = 0x36048,
2540 .hwcg_bit = 1,
2541 .clkr = {
2542 .enable_reg = 0x79004,
2543 .enable_mask = BIT(31),
2544 .hw.init = &(struct clk_init_data){
2545 .name = "gcc_gpu_throttle_core_clk",
2546 .ops = &clk_branch2_ops,
2547 },
2548 },
2549 };
2550
2551 static struct clk_branch gcc_pdm2_clk = {
2552 .halt_reg = 0x2000c,
2553 .halt_check = BRANCH_HALT,
2554 .clkr = {
2555 .enable_reg = 0x2000c,
2556 .enable_mask = BIT(0),
2557 .hw.init = &(struct clk_init_data){
2558 .name = "gcc_pdm2_clk",
2559 .parent_hws = (const struct clk_hw*[]) {
2560 &gcc_pdm2_clk_src.clkr.hw,
2561 },
2562 .num_parents = 1,
2563 .flags = CLK_SET_RATE_PARENT,
2564 .ops = &clk_branch2_ops,
2565 },
2566 },
2567 };
2568
2569 static struct clk_branch gcc_pdm_ahb_clk = {
2570 .halt_reg = 0x20004,
2571 .halt_check = BRANCH_HALT_VOTED,
2572 .hwcg_reg = 0x20004,
2573 .hwcg_bit = 1,
2574 .clkr = {
2575 .enable_reg = 0x20004,
2576 .enable_mask = BIT(0),
2577 .hw.init = &(struct clk_init_data){
2578 .name = "gcc_pdm_ahb_clk",
2579 .ops = &clk_branch2_ops,
2580 },
2581 },
2582 };
2583
2584 static struct clk_branch gcc_pdm_xo4_clk = {
2585 .halt_reg = 0x20008,
2586 .halt_check = BRANCH_HALT,
2587 .clkr = {
2588 .enable_reg = 0x20008,
2589 .enable_mask = BIT(0),
2590 .hw.init = &(struct clk_init_data){
2591 .name = "gcc_pdm_xo4_clk",
2592 .ops = &clk_branch2_ops,
2593 },
2594 },
2595 };
2596
2597 static struct clk_branch gcc_prng_ahb_clk = {
2598 .halt_reg = 0x21004,
2599 .halt_check = BRANCH_HALT_VOTED,
2600 .hwcg_reg = 0x21004,
2601 .hwcg_bit = 1,
2602 .clkr = {
2603 .enable_reg = 0x79004,
2604 .enable_mask = BIT(13),
2605 .hw.init = &(struct clk_init_data){
2606 .name = "gcc_prng_ahb_clk",
2607 .ops = &clk_branch2_ops,
2608 },
2609 },
2610 };
2611
2612 static struct clk_branch gcc_qmip_camera_nrt_ahb_clk = {
2613 .halt_reg = 0x17014,
2614 .halt_check = BRANCH_HALT_VOTED,
2615 .hwcg_reg = 0x17014,
2616 .hwcg_bit = 1,
2617 .clkr = {
2618 .enable_reg = 0x7900c,
2619 .enable_mask = BIT(0),
2620 .hw.init = &(struct clk_init_data){
2621 .name = "gcc_qmip_camera_nrt_ahb_clk",
2622 .ops = &clk_branch2_ops,
2623 },
2624 },
2625 };
2626
2627 static struct clk_branch gcc_qmip_camera_rt_ahb_clk = {
2628 .halt_reg = 0x17060,
2629 .halt_check = BRANCH_HALT_VOTED,
2630 .hwcg_reg = 0x17060,
2631 .hwcg_bit = 1,
2632 .clkr = {
2633 .enable_reg = 0x7900c,
2634 .enable_mask = BIT(2),
2635 .hw.init = &(struct clk_init_data){
2636 .name = "gcc_qmip_camera_rt_ahb_clk",
2637 .ops = &clk_branch2_ops,
2638 },
2639 },
2640 };
2641
2642 static struct clk_branch gcc_qmip_disp_ahb_clk = {
2643 .halt_reg = 0x17018,
2644 .halt_check = BRANCH_HALT_VOTED,
2645 .hwcg_reg = 0x17018,
2646 .hwcg_bit = 1,
2647 .clkr = {
2648 .enable_reg = 0x7900c,
2649 .enable_mask = BIT(1),
2650 .hw.init = &(struct clk_init_data){
2651 .name = "gcc_qmip_disp_ahb_clk",
2652 .ops = &clk_branch2_ops,
2653 },
2654 },
2655 };
2656
2657 static struct clk_branch gcc_qmip_gpu_cfg_ahb_clk = {
2658 .halt_reg = 0x36040,
2659 .halt_check = BRANCH_HALT_VOTED,
2660 .hwcg_reg = 0x36040,
2661 .hwcg_bit = 1,
2662 .clkr = {
2663 .enable_reg = 0x7900c,
2664 .enable_mask = BIT(4),
2665 .hw.init = &(struct clk_init_data){
2666 .name = "gcc_qmip_gpu_cfg_ahb_clk",
2667 .ops = &clk_branch2_ops,
2668 },
2669 },
2670 };
2671
2672 static struct clk_branch gcc_qmip_video_vcodec_ahb_clk = {
2673 .halt_reg = 0x17010,
2674 .halt_check = BRANCH_HALT_VOTED,
2675 .hwcg_reg = 0x17010,
2676 .hwcg_bit = 1,
2677 .clkr = {
2678 .enable_reg = 0x79004,
2679 .enable_mask = BIT(25),
2680 .hw.init = &(struct clk_init_data){
2681 .name = "gcc_qmip_video_vcodec_ahb_clk",
2682 .ops = &clk_branch2_ops,
2683 },
2684 },
2685 };
2686
2687 static struct clk_branch gcc_qupv3_wrap0_core_2x_clk = {
2688 .halt_reg = 0x1f014,
2689 .halt_check = BRANCH_HALT_VOTED,
2690 .clkr = {
2691 .enable_reg = 0x7900c,
2692 .enable_mask = BIT(9),
2693 .hw.init = &(struct clk_init_data){
2694 .name = "gcc_qupv3_wrap0_core_2x_clk",
2695 .ops = &clk_branch2_ops,
2696 },
2697 },
2698 };
2699
2700 static struct clk_branch gcc_qupv3_wrap0_core_clk = {
2701 .halt_reg = 0x1f00c,
2702 .halt_check = BRANCH_HALT_VOTED,
2703 .clkr = {
2704 .enable_reg = 0x7900c,
2705 .enable_mask = BIT(8),
2706 .hw.init = &(struct clk_init_data){
2707 .name = "gcc_qupv3_wrap0_core_clk",
2708 .ops = &clk_branch2_ops,
2709 },
2710 },
2711 };
2712
2713 static struct clk_branch gcc_qupv3_wrap0_s0_clk = {
2714 .halt_reg = 0x1f144,
2715 .halt_check = BRANCH_HALT_VOTED,
2716 .clkr = {
2717 .enable_reg = 0x7900c,
2718 .enable_mask = BIT(10),
2719 .hw.init = &(struct clk_init_data){
2720 .name = "gcc_qupv3_wrap0_s0_clk",
2721 .parent_hws = (const struct clk_hw*[]) {
2722 &gcc_qupv3_wrap0_s0_clk_src.clkr.hw,
2723 },
2724 .num_parents = 1,
2725 .flags = CLK_SET_RATE_PARENT,
2726 .ops = &clk_branch2_ops,
2727 },
2728 },
2729 };
2730
2731 static struct clk_branch gcc_qupv3_wrap0_s1_clk = {
2732 .halt_reg = 0x1f274,
2733 .halt_check = BRANCH_HALT_VOTED,
2734 .clkr = {
2735 .enable_reg = 0x7900c,
2736 .enable_mask = BIT(11),
2737 .hw.init = &(struct clk_init_data){
2738 .name = "gcc_qupv3_wrap0_s1_clk",
2739 .parent_hws = (const struct clk_hw*[]) {
2740 &gcc_qupv3_wrap0_s1_clk_src.clkr.hw,
2741 },
2742 .num_parents = 1,
2743 .flags = CLK_SET_RATE_PARENT,
2744 .ops = &clk_branch2_ops,
2745 },
2746 },
2747 };
2748
2749 static struct clk_branch gcc_qupv3_wrap0_s2_clk = {
2750 .halt_reg = 0x1f3a4,
2751 .halt_check = BRANCH_HALT_VOTED,
2752 .clkr = {
2753 .enable_reg = 0x7900c,
2754 .enable_mask = BIT(12),
2755 .hw.init = &(struct clk_init_data){
2756 .name = "gcc_qupv3_wrap0_s2_clk",
2757 .parent_hws = (const struct clk_hw*[]) {
2758 &gcc_qupv3_wrap0_s2_clk_src.clkr.hw,
2759 },
2760 .num_parents = 1,
2761 .flags = CLK_SET_RATE_PARENT,
2762 .ops = &clk_branch2_ops,
2763 },
2764 },
2765 };
2766
2767 static struct clk_branch gcc_qupv3_wrap0_s3_clk = {
2768 .halt_reg = 0x1f4d4,
2769 .halt_check = BRANCH_HALT_VOTED,
2770 .clkr = {
2771 .enable_reg = 0x7900c,
2772 .enable_mask = BIT(13),
2773 .hw.init = &(struct clk_init_data){
2774 .name = "gcc_qupv3_wrap0_s3_clk",
2775 .parent_hws = (const struct clk_hw*[]) {
2776 &gcc_qupv3_wrap0_s3_clk_src.clkr.hw,
2777 },
2778 .num_parents = 1,
2779 .flags = CLK_SET_RATE_PARENT,
2780 .ops = &clk_branch2_ops,
2781 },
2782 },
2783 };
2784
2785 static struct clk_branch gcc_qupv3_wrap0_s4_clk = {
2786 .halt_reg = 0x1f604,
2787 .halt_check = BRANCH_HALT_VOTED,
2788 .clkr = {
2789 .enable_reg = 0x7900c,
2790 .enable_mask = BIT(14),
2791 .hw.init = &(struct clk_init_data){
2792 .name = "gcc_qupv3_wrap0_s4_clk",
2793 .parent_hws = (const struct clk_hw*[]) {
2794 &gcc_qupv3_wrap0_s4_clk_src.clkr.hw,
2795 },
2796 .num_parents = 1,
2797 .flags = CLK_SET_RATE_PARENT,
2798 .ops = &clk_branch2_ops,
2799 },
2800 },
2801 };
2802
2803 static struct clk_branch gcc_qupv3_wrap0_s5_clk = {
2804 .halt_reg = 0x1f734,
2805 .halt_check = BRANCH_HALT_VOTED,
2806 .clkr = {
2807 .enable_reg = 0x7900c,
2808 .enable_mask = BIT(15),
2809 .hw.init = &(struct clk_init_data){
2810 .name = "gcc_qupv3_wrap0_s5_clk",
2811 .parent_hws = (const struct clk_hw*[]) {
2812 &gcc_qupv3_wrap0_s5_clk_src.clkr.hw,
2813 },
2814 .num_parents = 1,
2815 .flags = CLK_SET_RATE_PARENT,
2816 .ops = &clk_branch2_ops,
2817 },
2818 },
2819 };
2820
2821 static struct clk_branch gcc_qupv3_wrap1_core_2x_clk = {
2822 .halt_reg = 0x53014,
2823 .halt_check = BRANCH_HALT_VOTED,
2824 .clkr = {
2825 .enable_reg = 0x7900c,
2826 .enable_mask = BIT(20),
2827 .hw.init = &(struct clk_init_data){
2828 .name = "gcc_qupv3_wrap1_core_2x_clk",
2829 .ops = &clk_branch2_ops,
2830 },
2831 },
2832 };
2833
2834 static struct clk_branch gcc_qupv3_wrap1_core_clk = {
2835 .halt_reg = 0x5300c,
2836 .halt_check = BRANCH_HALT_VOTED,
2837 .clkr = {
2838 .enable_reg = 0x7900c,
2839 .enable_mask = BIT(19),
2840 .hw.init = &(struct clk_init_data){
2841 .name = "gcc_qupv3_wrap1_core_clk",
2842 .ops = &clk_branch2_ops,
2843 },
2844 },
2845 };
2846
2847 static struct clk_branch gcc_qupv3_wrap1_s0_clk = {
2848 .halt_reg = 0x53018,
2849 .halt_check = BRANCH_HALT_VOTED,
2850 .clkr = {
2851 .enable_reg = 0x7900c,
2852 .enable_mask = BIT(21),
2853 .hw.init = &(struct clk_init_data){
2854 .name = "gcc_qupv3_wrap1_s0_clk",
2855 .parent_hws = (const struct clk_hw*[]) {
2856 &gcc_qupv3_wrap1_s0_clk_src.clkr.hw,
2857 },
2858 .num_parents = 1,
2859 .flags = CLK_SET_RATE_PARENT,
2860 .ops = &clk_branch2_ops,
2861 },
2862 },
2863 };
2864
2865 static struct clk_branch gcc_qupv3_wrap1_s1_clk = {
2866 .halt_reg = 0x53148,
2867 .halt_check = BRANCH_HALT_VOTED,
2868 .clkr = {
2869 .enable_reg = 0x7900c,
2870 .enable_mask = BIT(22),
2871 .hw.init = &(struct clk_init_data){
2872 .name = "gcc_qupv3_wrap1_s1_clk",
2873 .parent_hws = (const struct clk_hw*[]) {
2874 &gcc_qupv3_wrap1_s1_clk_src.clkr.hw,
2875 },
2876 .num_parents = 1,
2877 .flags = CLK_SET_RATE_PARENT,
2878 .ops = &clk_branch2_ops,
2879 },
2880 },
2881 };
2882
2883 static struct clk_branch gcc_qupv3_wrap1_s2_clk = {
2884 .halt_reg = 0x53278,
2885 .halt_check = BRANCH_HALT_VOTED,
2886 .clkr = {
2887 .enable_reg = 0x7900c,
2888 .enable_mask = BIT(23),
2889 .hw.init = &(struct clk_init_data){
2890 .name = "gcc_qupv3_wrap1_s2_clk",
2891 .parent_hws = (const struct clk_hw*[]) {
2892 &gcc_qupv3_wrap1_s2_clk_src.clkr.hw,
2893 },
2894 .num_parents = 1,
2895 .flags = CLK_SET_RATE_PARENT,
2896 .ops = &clk_branch2_ops,
2897 },
2898 },
2899 };
2900
2901 static struct clk_branch gcc_qupv3_wrap1_s3_clk = {
2902 .halt_reg = 0x533a8,
2903 .halt_check = BRANCH_HALT_VOTED,
2904 .clkr = {
2905 .enable_reg = 0x7900c,
2906 .enable_mask = BIT(24),
2907 .hw.init = &(struct clk_init_data){
2908 .name = "gcc_qupv3_wrap1_s3_clk",
2909 .parent_hws = (const struct clk_hw*[]) {
2910 &gcc_qupv3_wrap1_s3_clk_src.clkr.hw,
2911 },
2912 .num_parents = 1,
2913 .flags = CLK_SET_RATE_PARENT,
2914 .ops = &clk_branch2_ops,
2915 },
2916 },
2917 };
2918
2919 static struct clk_branch gcc_qupv3_wrap1_s4_clk = {
2920 .halt_reg = 0x534d8,
2921 .halt_check = BRANCH_HALT_VOTED,
2922 .clkr = {
2923 .enable_reg = 0x7900c,
2924 .enable_mask = BIT(25),
2925 .hw.init = &(struct clk_init_data){
2926 .name = "gcc_qupv3_wrap1_s4_clk",
2927 .parent_hws = (const struct clk_hw*[]) {
2928 &gcc_qupv3_wrap1_s4_clk_src.clkr.hw,
2929 },
2930 .num_parents = 1,
2931 .flags = CLK_SET_RATE_PARENT,
2932 .ops = &clk_branch2_ops,
2933 },
2934 },
2935 };
2936
2937 static struct clk_branch gcc_qupv3_wrap1_s5_clk = {
2938 .halt_reg = 0x53608,
2939 .halt_check = BRANCH_HALT_VOTED,
2940 .clkr = {
2941 .enable_reg = 0x7900c,
2942 .enable_mask = BIT(26),
2943 .hw.init = &(struct clk_init_data){
2944 .name = "gcc_qupv3_wrap1_s5_clk",
2945 .parent_hws = (const struct clk_hw*[]) {
2946 &gcc_qupv3_wrap1_s5_clk_src.clkr.hw,
2947 },
2948 .num_parents = 1,
2949 .flags = CLK_SET_RATE_PARENT,
2950 .ops = &clk_branch2_ops,
2951 },
2952 },
2953 };
2954
2955 static struct clk_branch gcc_qupv3_wrap_0_m_ahb_clk = {
2956 .halt_reg = 0x1f004,
2957 .halt_check = BRANCH_HALT_VOTED,
2958 .hwcg_reg = 0x1f004,
2959 .hwcg_bit = 1,
2960 .clkr = {
2961 .enable_reg = 0x7900c,
2962 .enable_mask = BIT(6),
2963 .hw.init = &(struct clk_init_data){
2964 .name = "gcc_qupv3_wrap_0_m_ahb_clk",
2965 .ops = &clk_branch2_ops,
2966 },
2967 },
2968 };
2969
2970 static struct clk_branch gcc_qupv3_wrap_0_s_ahb_clk = {
2971 .halt_reg = 0x1f008,
2972 .halt_check = BRANCH_HALT_VOTED,
2973 .hwcg_reg = 0x1f008,
2974 .hwcg_bit = 1,
2975 .clkr = {
2976 .enable_reg = 0x7900c,
2977 .enable_mask = BIT(7),
2978 .hw.init = &(struct clk_init_data){
2979 .name = "gcc_qupv3_wrap_0_s_ahb_clk",
2980 .ops = &clk_branch2_ops,
2981 },
2982 },
2983 };
2984
2985 static struct clk_branch gcc_qupv3_wrap_1_m_ahb_clk = {
2986 .halt_reg = 0x53004,
2987 .halt_check = BRANCH_HALT_VOTED,
2988 .hwcg_reg = 0x53004,
2989 .hwcg_bit = 1,
2990 .clkr = {
2991 .enable_reg = 0x7900c,
2992 .enable_mask = BIT(17),
2993 .hw.init = &(struct clk_init_data){
2994 .name = "gcc_qupv3_wrap_1_m_ahb_clk",
2995 .ops = &clk_branch2_ops,
2996 },
2997 },
2998 };
2999
3000 static struct clk_branch gcc_qupv3_wrap_1_s_ahb_clk = {
3001 .halt_reg = 0x53008,
3002 .halt_check = BRANCH_HALT_VOTED,
3003 .hwcg_reg = 0x53008,
3004 .hwcg_bit = 1,
3005 .clkr = {
3006 .enable_reg = 0x7900c,
3007 .enable_mask = BIT(18),
3008 .hw.init = &(struct clk_init_data){
3009 .name = "gcc_qupv3_wrap_1_s_ahb_clk",
3010 .ops = &clk_branch2_ops,
3011 },
3012 },
3013 };
3014
3015 static struct clk_branch gcc_sdcc1_ahb_clk = {
3016 .halt_reg = 0x38008,
3017 .halt_check = BRANCH_HALT,
3018 .clkr = {
3019 .enable_reg = 0x38008,
3020 .enable_mask = BIT(0),
3021 .hw.init = &(struct clk_init_data){
3022 .name = "gcc_sdcc1_ahb_clk",
3023 .ops = &clk_branch2_ops,
3024 },
3025 },
3026 };
3027
3028 static struct clk_branch gcc_sdcc1_apps_clk = {
3029 .halt_reg = 0x38004,
3030 .halt_check = BRANCH_HALT,
3031 .clkr = {
3032 .enable_reg = 0x38004,
3033 .enable_mask = BIT(0),
3034 .hw.init = &(struct clk_init_data){
3035 .name = "gcc_sdcc1_apps_clk",
3036 .parent_hws = (const struct clk_hw*[]) {
3037 &gcc_sdcc1_apps_clk_src.clkr.hw,
3038 },
3039 .num_parents = 1,
3040 .flags = CLK_SET_RATE_PARENT,
3041 .ops = &clk_branch2_ops,
3042 },
3043 },
3044 };
3045
3046 static struct clk_branch gcc_sdcc1_ice_core_clk = {
3047 .halt_reg = 0x3800c,
3048 .halt_check = BRANCH_HALT_VOTED,
3049 .hwcg_reg = 0x3800c,
3050 .hwcg_bit = 1,
3051 .clkr = {
3052 .enable_reg = 0x3800c,
3053 .enable_mask = BIT(0),
3054 .hw.init = &(struct clk_init_data){
3055 .name = "gcc_sdcc1_ice_core_clk",
3056 .parent_hws = (const struct clk_hw*[]) {
3057 &gcc_sdcc1_ice_core_clk_src.clkr.hw,
3058 },
3059 .num_parents = 1,
3060 .flags = CLK_SET_RATE_PARENT,
3061 .ops = &clk_branch2_ops,
3062 },
3063 },
3064 };
3065
3066 static struct clk_branch gcc_sdcc2_ahb_clk = {
3067 .halt_reg = 0x1e008,
3068 .halt_check = BRANCH_HALT,
3069 .clkr = {
3070 .enable_reg = 0x1e008,
3071 .enable_mask = BIT(0),
3072 .hw.init = &(struct clk_init_data){
3073 .name = "gcc_sdcc2_ahb_clk",
3074 .ops = &clk_branch2_ops,
3075 },
3076 },
3077 };
3078
3079 static struct clk_branch gcc_sdcc2_apps_clk = {
3080 .halt_reg = 0x1e004,
3081 .halt_check = BRANCH_HALT,
3082 .clkr = {
3083 .enable_reg = 0x1e004,
3084 .enable_mask = BIT(0),
3085 .hw.init = &(struct clk_init_data){
3086 .name = "gcc_sdcc2_apps_clk",
3087 .parent_hws = (const struct clk_hw*[]) {
3088 &gcc_sdcc2_apps_clk_src.clkr.hw,
3089 },
3090 .num_parents = 1,
3091 .flags = CLK_SET_RATE_PARENT,
3092 .ops = &clk_branch2_ops,
3093 },
3094 },
3095 };
3096
3097 static struct clk_branch gcc_sys_noc_cpuss_ahb_clk = {
3098 .halt_reg = 0x2b06c,
3099 .halt_check = BRANCH_HALT_VOTED,
3100 .hwcg_reg = 0x2b06c,
3101 .hwcg_bit = 1,
3102 .clkr = {
3103 .enable_reg = 0x79004,
3104 .enable_mask = BIT(0),
3105 .hw.init = &(struct clk_init_data){
3106 .name = "gcc_sys_noc_cpuss_ahb_clk",
3107 .parent_hws = (const struct clk_hw*[]) {
3108 &gcc_cpuss_ahb_postdiv_clk_src.clkr.hw,
3109 },
3110 .num_parents = 1,
3111 .flags = CLK_IS_CRITICAL | CLK_SET_RATE_PARENT,
3112 .ops = &clk_branch2_ops,
3113 },
3114 },
3115 };
3116
3117 static struct clk_branch gcc_sys_noc_ufs_phy_axi_clk = {
3118 .halt_reg = 0x45098,
3119 .halt_check = BRANCH_HALT,
3120 .clkr = {
3121 .enable_reg = 0x45098,
3122 .enable_mask = BIT(0),
3123 .hw.init = &(struct clk_init_data){
3124 .name = "gcc_sys_noc_ufs_phy_axi_clk",
3125 .parent_hws = (const struct clk_hw*[]) {
3126 &gcc_ufs_phy_axi_clk_src.clkr.hw,
3127 },
3128 .num_parents = 1,
3129 .flags = CLK_SET_RATE_PARENT,
3130 .ops = &clk_branch2_ops,
3131 },
3132 },
3133 };
3134
3135 static struct clk_branch gcc_sys_noc_usb3_prim_axi_clk = {
3136 .halt_reg = 0x1a080,
3137 .halt_check = BRANCH_HALT_VOTED,
3138 .hwcg_reg = 0x1a080,
3139 .hwcg_bit = 1,
3140 .clkr = {
3141 .enable_reg = 0x1a080,
3142 .enable_mask = BIT(0),
3143 .hw.init = &(struct clk_init_data){
3144 .name = "gcc_sys_noc_usb3_prim_axi_clk",
3145 .parent_hws = (const struct clk_hw*[]) {
3146 &gcc_usb30_prim_master_clk_src.clkr.hw,
3147 },
3148 .num_parents = 1,
3149 .flags = CLK_SET_RATE_PARENT,
3150 .ops = &clk_branch2_ops,
3151 },
3152 },
3153 };
3154
3155 static struct clk_branch gcc_ufs_phy_ahb_clk = {
3156 .halt_reg = 0x45014,
3157 .halt_check = BRANCH_HALT_VOTED,
3158 .hwcg_reg = 0x45014,
3159 .hwcg_bit = 1,
3160 .clkr = {
3161 .enable_reg = 0x45014,
3162 .enable_mask = BIT(0),
3163 .hw.init = &(struct clk_init_data){
3164 .name = "gcc_ufs_phy_ahb_clk",
3165 .ops = &clk_branch2_ops,
3166 },
3167 },
3168 };
3169
3170 static struct clk_branch gcc_ufs_phy_axi_clk = {
3171 .halt_reg = 0x45010,
3172 .halt_check = BRANCH_HALT_VOTED,
3173 .hwcg_reg = 0x45010,
3174 .hwcg_bit = 1,
3175 .clkr = {
3176 .enable_reg = 0x45010,
3177 .enable_mask = BIT(0),
3178 .hw.init = &(struct clk_init_data){
3179 .name = "gcc_ufs_phy_axi_clk",
3180 .parent_hws = (const struct clk_hw*[]) {
3181 &gcc_ufs_phy_axi_clk_src.clkr.hw,
3182 },
3183 .num_parents = 1,
3184 .flags = CLK_SET_RATE_PARENT,
3185 .ops = &clk_branch2_ops,
3186 },
3187 },
3188 };
3189
3190 static struct clk_branch gcc_ufs_phy_ice_core_clk = {
3191 .halt_reg = 0x45044,
3192 .halt_check = BRANCH_HALT_VOTED,
3193 .hwcg_reg = 0x45044,
3194 .hwcg_bit = 1,
3195 .clkr = {
3196 .enable_reg = 0x45044,
3197 .enable_mask = BIT(0),
3198 .hw.init = &(struct clk_init_data){
3199 .name = "gcc_ufs_phy_ice_core_clk",
3200 .parent_hws = (const struct clk_hw*[]) {
3201 &gcc_ufs_phy_ice_core_clk_src.clkr.hw,
3202 },
3203 .num_parents = 1,
3204 .flags = CLK_SET_RATE_PARENT,
3205 .ops = &clk_branch2_ops,
3206 },
3207 },
3208 };
3209
3210 static struct clk_branch gcc_ufs_phy_phy_aux_clk = {
3211 .halt_reg = 0x45078,
3212 .halt_check = BRANCH_HALT_VOTED,
3213 .hwcg_reg = 0x45078,
3214 .hwcg_bit = 1,
3215 .clkr = {
3216 .enable_reg = 0x45078,
3217 .enable_mask = BIT(0),
3218 .hw.init = &(struct clk_init_data){
3219 .name = "gcc_ufs_phy_phy_aux_clk",
3220 .parent_hws = (const struct clk_hw*[]) {
3221 &gcc_ufs_phy_phy_aux_clk_src.clkr.hw,
3222 },
3223 .num_parents = 1,
3224 .flags = CLK_SET_RATE_PARENT,
3225 .ops = &clk_branch2_ops,
3226 },
3227 },
3228 };
3229
3230 static struct clk_branch gcc_ufs_phy_rx_symbol_0_clk = {
3231 .halt_reg = 0x4501c,
3232 .halt_check = BRANCH_HALT_SKIP,
3233 .clkr = {
3234 .enable_reg = 0x4501c,
3235 .enable_mask = BIT(0),
3236 .hw.init = &(struct clk_init_data){
3237 .name = "gcc_ufs_phy_rx_symbol_0_clk",
3238 .ops = &clk_branch2_ops,
3239 },
3240 },
3241 };
3242
3243 static struct clk_branch gcc_ufs_phy_tx_symbol_0_clk = {
3244 .halt_reg = 0x45018,
3245 .halt_check = BRANCH_HALT_SKIP,
3246 .clkr = {
3247 .enable_reg = 0x45018,
3248 .enable_mask = BIT(0),
3249 .hw.init = &(struct clk_init_data){
3250 .name = "gcc_ufs_phy_tx_symbol_0_clk",
3251 .ops = &clk_branch2_ops,
3252 },
3253 },
3254 };
3255
3256 static struct clk_branch gcc_ufs_phy_unipro_core_clk = {
3257 .halt_reg = 0x45040,
3258 .halt_check = BRANCH_HALT_VOTED,
3259 .hwcg_reg = 0x45040,
3260 .hwcg_bit = 1,
3261 .clkr = {
3262 .enable_reg = 0x45040,
3263 .enable_mask = BIT(0),
3264 .hw.init = &(struct clk_init_data){
3265 .name = "gcc_ufs_phy_unipro_core_clk",
3266 .parent_hws = (const struct clk_hw*[]) {
3267 &gcc_ufs_phy_unipro_core_clk_src.clkr.hw,
3268 },
3269 .num_parents = 1,
3270 .flags = CLK_SET_RATE_PARENT,
3271 .ops = &clk_branch2_ops,
3272 },
3273 },
3274 };
3275
3276 static struct clk_branch gcc_usb30_prim_master_clk = {
3277 .halt_reg = 0x1a010,
3278 .halt_check = BRANCH_HALT,
3279 .clkr = {
3280 .enable_reg = 0x1a010,
3281 .enable_mask = BIT(0),
3282 .hw.init = &(struct clk_init_data){
3283 .name = "gcc_usb30_prim_master_clk",
3284 .parent_hws = (const struct clk_hw*[]) {
3285 &gcc_usb30_prim_master_clk_src.clkr.hw,
3286 },
3287 .num_parents = 1,
3288 .flags = CLK_SET_RATE_PARENT,
3289 .ops = &clk_branch2_ops,
3290 },
3291 },
3292 };
3293
3294 static struct clk_branch gcc_usb30_prim_mock_utmi_clk = {
3295 .halt_reg = 0x1a018,
3296 .halt_check = BRANCH_HALT,
3297 .clkr = {
3298 .enable_reg = 0x1a018,
3299 .enable_mask = BIT(0),
3300 .hw.init = &(struct clk_init_data){
3301 .name = "gcc_usb30_prim_mock_utmi_clk",
3302 .parent_hws = (const struct clk_hw*[]) {
3303 &gcc_usb30_prim_mock_utmi_postdiv_clk_src.clkr.hw,
3304 },
3305 .num_parents = 1,
3306 .flags = CLK_SET_RATE_PARENT,
3307 .ops = &clk_branch2_ops,
3308 },
3309 },
3310 };
3311
3312 static struct clk_branch gcc_usb30_prim_sleep_clk = {
3313 .halt_reg = 0x1a014,
3314 .halt_check = BRANCH_HALT,
3315 .clkr = {
3316 .enable_reg = 0x1a014,
3317 .enable_mask = BIT(0),
3318 .hw.init = &(struct clk_init_data){
3319 .name = "gcc_usb30_prim_sleep_clk",
3320 .ops = &clk_branch2_ops,
3321 },
3322 },
3323 };
3324
3325 static struct clk_branch gcc_ufs_mem_clkref_clk = {
3326 .halt_reg = 0x8c000,
3327 .halt_check = BRANCH_HALT,
3328 .clkr = {
3329 .enable_reg = 0x8c000,
3330 .enable_mask = BIT(0),
3331 .hw.init = &(struct clk_init_data){
3332 .name = "gcc_ufs_mem_clkref_clk",
3333 .ops = &clk_branch2_ops,
3334 },
3335 },
3336 };
3337
3338 static struct clk_branch gcc_rx5_pcie_clkref_en_clk = {
3339 .halt_reg = 0x8c00c,
3340 .halt_check = BRANCH_HALT,
3341 .clkr = {
3342 .enable_reg = 0x8c00c,
3343 .enable_mask = BIT(0),
3344 .hw.init = &(struct clk_init_data){
3345 .name = "gcc_rx5_pcie_clkref_en_clk",
3346 .ops = &clk_branch2_ops,
3347 },
3348 },
3349 };
3350
3351 static struct clk_branch gcc_usb3_prim_clkref_clk = {
3352 .halt_reg = 0x8c010,
3353 .halt_check = BRANCH_HALT,
3354 .clkr = {
3355 .enable_reg = 0x8c010,
3356 .enable_mask = BIT(0),
3357 .hw.init = &(struct clk_init_data){
3358 .name = "gcc_usb3_prim_clkref_clk",
3359 .ops = &clk_branch2_ops,
3360 },
3361 },
3362 };
3363
3364 static struct clk_branch gcc_usb3_prim_phy_com_aux_clk = {
3365 .halt_reg = 0x1a054,
3366 .halt_check = BRANCH_HALT,
3367 .clkr = {
3368 .enable_reg = 0x1a054,
3369 .enable_mask = BIT(0),
3370 .hw.init = &(struct clk_init_data){
3371 .name = "gcc_usb3_prim_phy_com_aux_clk",
3372 .parent_hws = (const struct clk_hw*[]) {
3373 &gcc_usb3_prim_phy_aux_clk_src.clkr.hw,
3374 },
3375 .num_parents = 1,
3376 .flags = CLK_SET_RATE_PARENT,
3377 .ops = &clk_branch2_ops,
3378 },
3379 },
3380 };
3381
3382 static struct clk_branch gcc_usb3_prim_phy_pipe_clk = {
3383 .halt_reg = 0x1a058,
3384 .halt_check = BRANCH_HALT_SKIP,
3385 .hwcg_reg = 0x1a058,
3386 .hwcg_bit = 1,
3387 .clkr = {
3388 .enable_reg = 0x1a058,
3389 .enable_mask = BIT(0),
3390 .hw.init = &(struct clk_init_data){
3391 .name = "gcc_usb3_prim_phy_pipe_clk",
3392 .ops = &clk_branch2_ops,
3393 },
3394 },
3395 };
3396
3397 static struct clk_branch gcc_vcodec0_axi_clk = {
3398 .halt_reg = 0x6e008,
3399 .halt_check = BRANCH_HALT,
3400 .clkr = {
3401 .enable_reg = 0x6e008,
3402 .enable_mask = BIT(0),
3403 .hw.init = &(struct clk_init_data){
3404 .name = "gcc_vcodec0_axi_clk",
3405 .ops = &clk_branch2_ops,
3406 },
3407 },
3408 };
3409
3410 static struct clk_branch gcc_venus_ahb_clk = {
3411 .halt_reg = 0x6e010,
3412 .halt_check = BRANCH_HALT,
3413 .clkr = {
3414 .enable_reg = 0x6e010,
3415 .enable_mask = BIT(0),
3416 .hw.init = &(struct clk_init_data){
3417 .name = "gcc_venus_ahb_clk",
3418 .ops = &clk_branch2_ops,
3419 },
3420 },
3421 };
3422
3423 static struct clk_branch gcc_venus_ctl_axi_clk = {
3424 .halt_reg = 0x6e004,
3425 .halt_check = BRANCH_HALT,
3426 .clkr = {
3427 .enable_reg = 0x6e004,
3428 .enable_mask = BIT(0),
3429 .hw.init = &(struct clk_init_data){
3430 .name = "gcc_venus_ctl_axi_clk",
3431 .ops = &clk_branch2_ops,
3432 },
3433 },
3434 };
3435
3436 static struct clk_branch gcc_video_ahb_clk = {
3437 .halt_reg = 0x17004,
3438 .halt_check = BRANCH_HALT_DELAY,
3439 .hwcg_reg = 0x17004,
3440 .hwcg_bit = 1,
3441 .clkr = {
3442 .enable_reg = 0x17004,
3443 .enable_mask = BIT(0),
3444 .hw.init = &(struct clk_init_data){
3445 .name = "gcc_video_ahb_clk",
3446 .flags = CLK_IS_CRITICAL,
3447 .ops = &clk_branch2_ops,
3448 },
3449 },
3450 };
3451
3452 static struct clk_branch gcc_video_axi0_clk = {
3453 .halt_reg = 0x1701c,
3454 .halt_check = BRANCH_HALT_VOTED,
3455 .hwcg_reg = 0x1701c,
3456 .hwcg_bit = 1,
3457 .clkr = {
3458 .enable_reg = 0x1701c,
3459 .enable_mask = BIT(0),
3460 .hw.init = &(struct clk_init_data){
3461 .name = "gcc_video_axi0_clk",
3462 .ops = &clk_branch2_ops,
3463 },
3464 },
3465 };
3466
3467 static struct clk_branch gcc_video_throttle_core_clk = {
3468 .halt_reg = 0x17068,
3469 .halt_check = BRANCH_HALT_VOTED,
3470 .hwcg_reg = 0x17068,
3471 .hwcg_bit = 1,
3472 .clkr = {
3473 .enable_reg = 0x79004,
3474 .enable_mask = BIT(28),
3475 .hw.init = &(struct clk_init_data){
3476 .name = "gcc_video_throttle_core_clk",
3477 .ops = &clk_branch2_ops,
3478 },
3479 },
3480 };
3481
3482 static struct clk_branch gcc_video_vcodec0_sys_clk = {
3483 .halt_reg = 0x580a4,
3484 .halt_check = BRANCH_HALT_VOTED,
3485 .hwcg_reg = 0x580a4,
3486 .hwcg_bit = 1,
3487 .clkr = {
3488 .enable_reg = 0x580a4,
3489 .enable_mask = BIT(0),
3490 .hw.init = &(struct clk_init_data){
3491 .name = "gcc_video_vcodec0_sys_clk",
3492 .parent_hws = (const struct clk_hw*[]) {
3493 &gcc_video_venus_clk_src.clkr.hw,
3494 },
3495 .num_parents = 1,
3496 .flags = CLK_SET_RATE_PARENT,
3497 .ops = &clk_branch2_ops,
3498 },
3499 },
3500 };
3501
3502 static struct clk_branch gcc_video_venus_ctl_clk = {
3503 .halt_reg = 0x5808c,
3504 .halt_check = BRANCH_HALT,
3505 .clkr = {
3506 .enable_reg = 0x5808c,
3507 .enable_mask = BIT(0),
3508 .hw.init = &(struct clk_init_data){
3509 .name = "gcc_video_venus_ctl_clk",
3510 .parent_hws = (const struct clk_hw*[]) {
3511 &gcc_video_venus_clk_src.clkr.hw,
3512 },
3513 .num_parents = 1,
3514 .flags = CLK_SET_RATE_PARENT,
3515 .ops = &clk_branch2_ops,
3516 },
3517 },
3518 };
3519
3520 static struct clk_branch gcc_video_xo_clk = {
3521 .halt_reg = 0x17024,
3522 .halt_check = BRANCH_HALT,
3523 .clkr = {
3524 .enable_reg = 0x17024,
3525 .enable_mask = BIT(0),
3526 .hw.init = &(struct clk_init_data){
3527 .name = "gcc_video_xo_clk",
3528 .ops = &clk_branch2_ops,
3529 },
3530 },
3531 };
3532
3533 static struct gdsc usb30_prim_gdsc = {
3534 .gdscr = 0x1a004,
3535 .pd = {
3536 .name = "usb30_prim_gdsc",
3537 },
3538 /* TODO: Change to OFF_ON when USB drivers get proper suspend support */
3539 .pwrsts = PWRSTS_RET_ON,
3540 };
3541
3542 static struct gdsc ufs_phy_gdsc = {
3543 .gdscr = 0x45004,
3544 .pd = {
3545 .name = "ufs_phy_gdsc",
3546 },
3547 .pwrsts = PWRSTS_OFF_ON,
3548 };
3549
3550 static struct gdsc camss_top_gdsc = {
3551 .gdscr = 0x58004,
3552 .pd = {
3553 .name = "camss_top_gdsc",
3554 },
3555 .pwrsts = PWRSTS_OFF_ON,
3556 };
3557
3558 static struct gdsc venus_gdsc = {
3559 .gdscr = 0x5807c,
3560 .pd = {
3561 .name = "venus_gdsc",
3562 },
3563 .pwrsts = PWRSTS_OFF_ON,
3564 };
3565
3566 static struct gdsc vcodec0_gdsc = {
3567 .gdscr = 0x58098,
3568 .pd = {
3569 .name = "vcodec0_gdsc",
3570 },
3571 .pwrsts = PWRSTS_OFF_ON,
3572 .flags = HW_CTRL,
3573 };
3574
3575 static struct gdsc hlos1_vote_mm_snoc_mmu_tbu_rt_gdsc = {
3576 .gdscr = 0x7d074,
3577 .pd = {
3578 .name = "hlos1_vote_mm_snoc_mmu_tbu_rt_gdsc",
3579 },
3580 .pwrsts = PWRSTS_OFF_ON,
3581 .flags = VOTABLE,
3582 };
3583
3584 static struct gdsc hlos1_vote_mm_snoc_mmu_tbu_nrt_gdsc = {
3585 .gdscr = 0x7d078,
3586 .pd = {
3587 .name = "hlos1_vote_mm_snoc_mmu_tbu_nrt_gdsc",
3588 },
3589 .pwrsts = PWRSTS_OFF_ON,
3590 .flags = VOTABLE,
3591 };
3592
3593 static struct gdsc hlos1_vote_turing_mmu_tbu1_gdsc = {
3594 .gdscr = 0x7d060,
3595 .pd = {
3596 .name = "hlos1_vote_turing_mmu_tbu1_gdsc",
3597 },
3598 .pwrsts = PWRSTS_OFF_ON,
3599 .flags = VOTABLE,
3600 };
3601
3602 static struct gdsc hlos1_vote_turing_mmu_tbu0_gdsc = {
3603 .gdscr = 0x7d07c,
3604 .pd = {
3605 .name = "hlos1_vote_turing_mmu_tbu0_gdsc",
3606 },
3607 .pwrsts = PWRSTS_OFF_ON,
3608 .flags = VOTABLE,
3609 };
3610
3611 static struct clk_regmap *gcc_sm6375_clocks[] = {
3612 [GCC_AHB2PHY_CSI_CLK] = &gcc_ahb2phy_csi_clk.clkr,
3613 [GCC_AHB2PHY_USB_CLK] = &gcc_ahb2phy_usb_clk.clkr,
3614 [GCC_BIMC_GPU_AXI_CLK] = &gcc_bimc_gpu_axi_clk.clkr,
3615 [GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr,
3616 [GCC_CAM_THROTTLE_NRT_CLK] = &gcc_cam_throttle_nrt_clk.clkr,
3617 [GCC_CAM_THROTTLE_RT_CLK] = &gcc_cam_throttle_rt_clk.clkr,
3618 [GCC_CAMERA_AHB_CLK] = &gcc_camera_ahb_clk.clkr,
3619 [GCC_CAMSS_AXI_CLK] = &gcc_camss_axi_clk.clkr,
3620 [GCC_CAMSS_AXI_CLK_SRC] = &gcc_camss_axi_clk_src.clkr,
3621 [GCC_CAMSS_CCI_0_CLK] = &gcc_camss_cci_0_clk.clkr,
3622 [GCC_CAMSS_CCI_0_CLK_SRC] = &gcc_camss_cci_0_clk_src.clkr,
3623 [GCC_CAMSS_CCI_1_CLK] = &gcc_camss_cci_1_clk.clkr,
3624 [GCC_CAMSS_CCI_1_CLK_SRC] = &gcc_camss_cci_1_clk_src.clkr,
3625 [GCC_CAMSS_CPHY_0_CLK] = &gcc_camss_cphy_0_clk.clkr,
3626 [GCC_CAMSS_CPHY_1_CLK] = &gcc_camss_cphy_1_clk.clkr,
3627 [GCC_CAMSS_CPHY_2_CLK] = &gcc_camss_cphy_2_clk.clkr,
3628 [GCC_CAMSS_CPHY_3_CLK] = &gcc_camss_cphy_3_clk.clkr,
3629 [GCC_CAMSS_CSI0PHYTIMER_CLK] = &gcc_camss_csi0phytimer_clk.clkr,
3630 [GCC_CAMSS_CSI0PHYTIMER_CLK_SRC] = &gcc_camss_csi0phytimer_clk_src.clkr,
3631 [GCC_CAMSS_CSI1PHYTIMER_CLK] = &gcc_camss_csi1phytimer_clk.clkr,
3632 [GCC_CAMSS_CSI1PHYTIMER_CLK_SRC] = &gcc_camss_csi1phytimer_clk_src.clkr,
3633 [GCC_CAMSS_CSI2PHYTIMER_CLK] = &gcc_camss_csi2phytimer_clk.clkr,
3634 [GCC_CAMSS_CSI2PHYTIMER_CLK_SRC] = &gcc_camss_csi2phytimer_clk_src.clkr,
3635 [GCC_CAMSS_CSI3PHYTIMER_CLK] = &gcc_camss_csi3phytimer_clk.clkr,
3636 [GCC_CAMSS_CSI3PHYTIMER_CLK_SRC] = &gcc_camss_csi3phytimer_clk_src.clkr,
3637 [GCC_CAMSS_MCLK0_CLK] = &gcc_camss_mclk0_clk.clkr,
3638 [GCC_CAMSS_MCLK0_CLK_SRC] = &gcc_camss_mclk0_clk_src.clkr,
3639 [GCC_CAMSS_MCLK1_CLK] = &gcc_camss_mclk1_clk.clkr,
3640 [GCC_CAMSS_MCLK1_CLK_SRC] = &gcc_camss_mclk1_clk_src.clkr,
3641 [GCC_CAMSS_MCLK2_CLK] = &gcc_camss_mclk2_clk.clkr,
3642 [GCC_CAMSS_MCLK2_CLK_SRC] = &gcc_camss_mclk2_clk_src.clkr,
3643 [GCC_CAMSS_MCLK3_CLK] = &gcc_camss_mclk3_clk.clkr,
3644 [GCC_CAMSS_MCLK3_CLK_SRC] = &gcc_camss_mclk3_clk_src.clkr,
3645 [GCC_CAMSS_MCLK4_CLK] = &gcc_camss_mclk4_clk.clkr,
3646 [GCC_CAMSS_MCLK4_CLK_SRC] = &gcc_camss_mclk4_clk_src.clkr,
3647 [GCC_CAMSS_NRT_AXI_CLK] = &gcc_camss_nrt_axi_clk.clkr,
3648 [GCC_CAMSS_OPE_AHB_CLK] = &gcc_camss_ope_ahb_clk.clkr,
3649 [GCC_CAMSS_OPE_AHB_CLK_SRC] = &gcc_camss_ope_ahb_clk_src.clkr,
3650 [GCC_CAMSS_OPE_CLK] = &gcc_camss_ope_clk.clkr,
3651 [GCC_CAMSS_OPE_CLK_SRC] = &gcc_camss_ope_clk_src.clkr,
3652 [GCC_CAMSS_RT_AXI_CLK] = &gcc_camss_rt_axi_clk.clkr,
3653 [GCC_CAMSS_TFE_0_CLK] = &gcc_camss_tfe_0_clk.clkr,
3654 [GCC_CAMSS_TFE_0_CLK_SRC] = &gcc_camss_tfe_0_clk_src.clkr,
3655 [GCC_CAMSS_TFE_0_CPHY_RX_CLK] = &gcc_camss_tfe_0_cphy_rx_clk.clkr,
3656 [GCC_CAMSS_TFE_0_CSID_CLK] = &gcc_camss_tfe_0_csid_clk.clkr,
3657 [GCC_CAMSS_TFE_0_CSID_CLK_SRC] = &gcc_camss_tfe_0_csid_clk_src.clkr,
3658 [GCC_CAMSS_TFE_1_CLK] = &gcc_camss_tfe_1_clk.clkr,
3659 [GCC_CAMSS_TFE_1_CLK_SRC] = &gcc_camss_tfe_1_clk_src.clkr,
3660 [GCC_CAMSS_TFE_1_CPHY_RX_CLK] = &gcc_camss_tfe_1_cphy_rx_clk.clkr,
3661 [GCC_CAMSS_TFE_1_CSID_CLK] = &gcc_camss_tfe_1_csid_clk.clkr,
3662 [GCC_CAMSS_TFE_1_CSID_CLK_SRC] = &gcc_camss_tfe_1_csid_clk_src.clkr,
3663 [GCC_CAMSS_TFE_2_CLK] = &gcc_camss_tfe_2_clk.clkr,
3664 [GCC_CAMSS_TFE_2_CLK_SRC] = &gcc_camss_tfe_2_clk_src.clkr,
3665 [GCC_CAMSS_TFE_2_CPHY_RX_CLK] = &gcc_camss_tfe_2_cphy_rx_clk.clkr,
3666 [GCC_CAMSS_TFE_2_CSID_CLK] = &gcc_camss_tfe_2_csid_clk.clkr,
3667 [GCC_CAMSS_TFE_2_CSID_CLK_SRC] = &gcc_camss_tfe_2_csid_clk_src.clkr,
3668 [GCC_CAMSS_TFE_CPHY_RX_CLK_SRC] = &gcc_camss_tfe_cphy_rx_clk_src.clkr,
3669 [GCC_CAMSS_TOP_AHB_CLK] = &gcc_camss_top_ahb_clk.clkr,
3670 [GCC_CAMSS_TOP_AHB_CLK_SRC] = &gcc_camss_top_ahb_clk_src.clkr,
3671 [GCC_CFG_NOC_USB3_PRIM_AXI_CLK] = &gcc_cfg_noc_usb3_prim_axi_clk.clkr,
3672 [GCC_CPUSS_AHB_CLK_SRC] = &gcc_cpuss_ahb_clk_src.clkr,
3673 [GCC_CPUSS_AHB_POSTDIV_CLK_SRC] = &gcc_cpuss_ahb_postdiv_clk_src.clkr,
3674 [GCC_DISP_AHB_CLK] = &gcc_disp_ahb_clk.clkr,
3675 [GCC_DISP_GPLL0_CLK_SRC] = &gcc_disp_gpll0_clk_src.clkr,
3676 [GCC_DISP_GPLL0_DIV_CLK_SRC] = &gcc_disp_gpll0_div_clk_src.clkr,
3677 [GCC_DISP_HF_AXI_CLK] = &gcc_disp_hf_axi_clk.clkr,
3678 [GCC_DISP_SLEEP_CLK] = &gcc_disp_sleep_clk.clkr,
3679 [GCC_DISP_THROTTLE_CORE_CLK] = &gcc_disp_throttle_core_clk.clkr,
3680 [GCC_GP1_CLK] = &gcc_gp1_clk.clkr,
3681 [GCC_GP1_CLK_SRC] = &gcc_gp1_clk_src.clkr,
3682 [GCC_GP2_CLK] = &gcc_gp2_clk.clkr,
3683 [GCC_GP2_CLK_SRC] = &gcc_gp2_clk_src.clkr,
3684 [GCC_GP3_CLK] = &gcc_gp3_clk.clkr,
3685 [GCC_GP3_CLK_SRC] = &gcc_gp3_clk_src.clkr,
3686 [GCC_GPU_CFG_AHB_CLK] = &gcc_gpu_cfg_ahb_clk.clkr,
3687 [GCC_GPU_GPLL0_CLK_SRC] = &gcc_gpu_gpll0_clk_src.clkr,
3688 [GCC_GPU_GPLL0_DIV_CLK_SRC] = &gcc_gpu_gpll0_div_clk_src.clkr,
3689 [GCC_GPU_MEMNOC_GFX_CLK] = &gcc_gpu_memnoc_gfx_clk.clkr,
3690 [GCC_GPU_SNOC_DVM_GFX_CLK] = &gcc_gpu_snoc_dvm_gfx_clk.clkr,
3691 [GCC_GPU_THROTTLE_CORE_CLK] = &gcc_gpu_throttle_core_clk.clkr,
3692 [GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr,
3693 [GCC_PDM2_CLK_SRC] = &gcc_pdm2_clk_src.clkr,
3694 [GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr,
3695 [GCC_PDM_XO4_CLK] = &gcc_pdm_xo4_clk.clkr,
3696 [GCC_PRNG_AHB_CLK] = &gcc_prng_ahb_clk.clkr,
3697 [GCC_QMIP_CAMERA_NRT_AHB_CLK] = &gcc_qmip_camera_nrt_ahb_clk.clkr,
3698 [GCC_QMIP_CAMERA_RT_AHB_CLK] = &gcc_qmip_camera_rt_ahb_clk.clkr,
3699 [GCC_QMIP_DISP_AHB_CLK] = &gcc_qmip_disp_ahb_clk.clkr,
3700 [GCC_QMIP_GPU_CFG_AHB_CLK] = &gcc_qmip_gpu_cfg_ahb_clk.clkr,
3701 [GCC_QMIP_VIDEO_VCODEC_AHB_CLK] = &gcc_qmip_video_vcodec_ahb_clk.clkr,
3702 [GCC_QUPV3_WRAP0_CORE_2X_CLK] = &gcc_qupv3_wrap0_core_2x_clk.clkr,
3703 [GCC_QUPV3_WRAP0_CORE_CLK] = &gcc_qupv3_wrap0_core_clk.clkr,
3704 [GCC_QUPV3_WRAP0_S0_CLK] = &gcc_qupv3_wrap0_s0_clk.clkr,
3705 [GCC_QUPV3_WRAP0_S0_CLK_SRC] = &gcc_qupv3_wrap0_s0_clk_src.clkr,
3706 [GCC_QUPV3_WRAP0_S1_CLK] = &gcc_qupv3_wrap0_s1_clk.clkr,
3707 [GCC_QUPV3_WRAP0_S1_CLK_SRC] = &gcc_qupv3_wrap0_s1_clk_src.clkr,
3708 [GCC_QUPV3_WRAP0_S2_CLK] = &gcc_qupv3_wrap0_s2_clk.clkr,
3709 [GCC_QUPV3_WRAP0_S2_CLK_SRC] = &gcc_qupv3_wrap0_s2_clk_src.clkr,
3710 [GCC_QUPV3_WRAP0_S3_CLK] = &gcc_qupv3_wrap0_s3_clk.clkr,
3711 [GCC_QUPV3_WRAP0_S3_CLK_SRC] = &gcc_qupv3_wrap0_s3_clk_src.clkr,
3712 [GCC_QUPV3_WRAP0_S4_CLK] = &gcc_qupv3_wrap0_s4_clk.clkr,
3713 [GCC_QUPV3_WRAP0_S4_CLK_SRC] = &gcc_qupv3_wrap0_s4_clk_src.clkr,
3714 [GCC_QUPV3_WRAP0_S5_CLK] = &gcc_qupv3_wrap0_s5_clk.clkr,
3715 [GCC_QUPV3_WRAP0_S5_CLK_SRC] = &gcc_qupv3_wrap0_s5_clk_src.clkr,
3716 [GCC_QUPV3_WRAP1_CORE_2X_CLK] = &gcc_qupv3_wrap1_core_2x_clk.clkr,
3717 [GCC_QUPV3_WRAP1_CORE_CLK] = &gcc_qupv3_wrap1_core_clk.clkr,
3718 [GCC_QUPV3_WRAP1_S0_CLK] = &gcc_qupv3_wrap1_s0_clk.clkr,
3719 [GCC_QUPV3_WRAP1_S0_CLK_SRC] = &gcc_qupv3_wrap1_s0_clk_src.clkr,
3720 [GCC_QUPV3_WRAP1_S1_CLK] = &gcc_qupv3_wrap1_s1_clk.clkr,
3721 [GCC_QUPV3_WRAP1_S1_CLK_SRC] = &gcc_qupv3_wrap1_s1_clk_src.clkr,
3722 [GCC_QUPV3_WRAP1_S2_CLK] = &gcc_qupv3_wrap1_s2_clk.clkr,
3723 [GCC_QUPV3_WRAP1_S2_CLK_SRC] = &gcc_qupv3_wrap1_s2_clk_src.clkr,
3724 [GCC_QUPV3_WRAP1_S3_CLK] = &gcc_qupv3_wrap1_s3_clk.clkr,
3725 [GCC_QUPV3_WRAP1_S3_CLK_SRC] = &gcc_qupv3_wrap1_s3_clk_src.clkr,
3726 [GCC_QUPV3_WRAP1_S4_CLK] = &gcc_qupv3_wrap1_s4_clk.clkr,
3727 [GCC_QUPV3_WRAP1_S4_CLK_SRC] = &gcc_qupv3_wrap1_s4_clk_src.clkr,
3728 [GCC_QUPV3_WRAP1_S5_CLK] = &gcc_qupv3_wrap1_s5_clk.clkr,
3729 [GCC_QUPV3_WRAP1_S5_CLK_SRC] = &gcc_qupv3_wrap1_s5_clk_src.clkr,
3730 [GCC_QUPV3_WRAP_0_M_AHB_CLK] = &gcc_qupv3_wrap_0_m_ahb_clk.clkr,
3731 [GCC_QUPV3_WRAP_0_S_AHB_CLK] = &gcc_qupv3_wrap_0_s_ahb_clk.clkr,
3732 [GCC_QUPV3_WRAP_1_M_AHB_CLK] = &gcc_qupv3_wrap_1_m_ahb_clk.clkr,
3733 [GCC_QUPV3_WRAP_1_S_AHB_CLK] = &gcc_qupv3_wrap_1_s_ahb_clk.clkr,
3734 [GCC_SDCC1_AHB_CLK] = &gcc_sdcc1_ahb_clk.clkr,
3735 [GCC_SDCC1_APPS_CLK] = &gcc_sdcc1_apps_clk.clkr,
3736 [GCC_SDCC1_APPS_CLK_SRC] = &gcc_sdcc1_apps_clk_src.clkr,
3737 [GCC_SDCC1_ICE_CORE_CLK] = &gcc_sdcc1_ice_core_clk.clkr,
3738 [GCC_SDCC1_ICE_CORE_CLK_SRC] = &gcc_sdcc1_ice_core_clk_src.clkr,
3739 [GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr,
3740 [GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr,
3741 [GCC_SDCC2_APPS_CLK_SRC] = &gcc_sdcc2_apps_clk_src.clkr,
3742 [GCC_SYS_NOC_CPUSS_AHB_CLK] = &gcc_sys_noc_cpuss_ahb_clk.clkr,
3743 [GCC_SYS_NOC_UFS_PHY_AXI_CLK] = &gcc_sys_noc_ufs_phy_axi_clk.clkr,
3744 [GCC_SYS_NOC_USB3_PRIM_AXI_CLK] = &gcc_sys_noc_usb3_prim_axi_clk.clkr,
3745 [GCC_UFS_PHY_AHB_CLK] = &gcc_ufs_phy_ahb_clk.clkr,
3746 [GCC_UFS_PHY_AXI_CLK] = &gcc_ufs_phy_axi_clk.clkr,
3747 [GCC_UFS_PHY_AXI_CLK_SRC] = &gcc_ufs_phy_axi_clk_src.clkr,
3748 [GCC_UFS_PHY_ICE_CORE_CLK] = &gcc_ufs_phy_ice_core_clk.clkr,
3749 [GCC_UFS_PHY_ICE_CORE_CLK_SRC] = &gcc_ufs_phy_ice_core_clk_src.clkr,
3750 [GCC_UFS_PHY_PHY_AUX_CLK] = &gcc_ufs_phy_phy_aux_clk.clkr,
3751 [GCC_UFS_PHY_PHY_AUX_CLK_SRC] = &gcc_ufs_phy_phy_aux_clk_src.clkr,
3752 [GCC_UFS_PHY_RX_SYMBOL_0_CLK] = &gcc_ufs_phy_rx_symbol_0_clk.clkr,
3753 [GCC_UFS_PHY_TX_SYMBOL_0_CLK] = &gcc_ufs_phy_tx_symbol_0_clk.clkr,
3754 [GCC_UFS_PHY_UNIPRO_CORE_CLK] = &gcc_ufs_phy_unipro_core_clk.clkr,
3755 [GCC_UFS_PHY_UNIPRO_CORE_CLK_SRC] = &gcc_ufs_phy_unipro_core_clk_src.clkr,
3756 [GCC_USB30_PRIM_MASTER_CLK] = &gcc_usb30_prim_master_clk.clkr,
3757 [GCC_USB30_PRIM_MASTER_CLK_SRC] = &gcc_usb30_prim_master_clk_src.clkr,
3758 [GCC_USB30_PRIM_MOCK_UTMI_CLK] = &gcc_usb30_prim_mock_utmi_clk.clkr,
3759 [GCC_USB30_PRIM_MOCK_UTMI_CLK_SRC] = &gcc_usb30_prim_mock_utmi_clk_src.clkr,
3760 [GCC_USB30_PRIM_MOCK_UTMI_POSTDIV_CLK_SRC] = &gcc_usb30_prim_mock_utmi_postdiv_clk_src.clkr,
3761 [GCC_USB30_PRIM_SLEEP_CLK] = &gcc_usb30_prim_sleep_clk.clkr,
3762 [GCC_USB3_PRIM_CLKREF_CLK] = &gcc_usb3_prim_clkref_clk.clkr,
3763 [GCC_USB3_PRIM_PHY_AUX_CLK_SRC] = &gcc_usb3_prim_phy_aux_clk_src.clkr,
3764 [GCC_USB3_PRIM_PHY_COM_AUX_CLK] = &gcc_usb3_prim_phy_com_aux_clk.clkr,
3765 [GCC_USB3_PRIM_PHY_PIPE_CLK] = &gcc_usb3_prim_phy_pipe_clk.clkr,
3766 [GCC_VCODEC0_AXI_CLK] = &gcc_vcodec0_axi_clk.clkr,
3767 [GCC_VENUS_AHB_CLK] = &gcc_venus_ahb_clk.clkr,
3768 [GCC_VENUS_CTL_AXI_CLK] = &gcc_venus_ctl_axi_clk.clkr,
3769 [GCC_VIDEO_AHB_CLK] = &gcc_video_ahb_clk.clkr,
3770 [GCC_VIDEO_AXI0_CLK] = &gcc_video_axi0_clk.clkr,
3771 [GCC_VIDEO_THROTTLE_CORE_CLK] = &gcc_video_throttle_core_clk.clkr,
3772 [GCC_VIDEO_VCODEC0_SYS_CLK] = &gcc_video_vcodec0_sys_clk.clkr,
3773 [GCC_VIDEO_VENUS_CLK_SRC] = &gcc_video_venus_clk_src.clkr,
3774 [GCC_VIDEO_VENUS_CTL_CLK] = &gcc_video_venus_ctl_clk.clkr,
3775 [GCC_VIDEO_XO_CLK] = &gcc_video_xo_clk.clkr,
3776 [GCC_UFS_MEM_CLKREF_CLK] = &gcc_ufs_mem_clkref_clk.clkr,
3777 [GCC_RX5_PCIE_CLKREF_EN_CLK] = &gcc_rx5_pcie_clkref_en_clk.clkr,
3778 [GPLL0] = &gpll0.clkr,
3779 [GPLL0_OUT_EVEN] = &gpll0_out_even.clkr,
3780 [GPLL0_OUT_ODD] = &gpll0_out_odd.clkr,
3781 [GPLL1] = &gpll1.clkr,
3782 [GPLL10] = &gpll10.clkr,
3783 [GPLL11] = &gpll11.clkr,
3784 [GPLL3] = &gpll3.clkr,
3785 [GPLL3_OUT_EVEN] = &gpll3_out_even.clkr,
3786 [GPLL4] = &gpll4.clkr,
3787 [GPLL5] = &gpll5.clkr,
3788 [GPLL6] = &gpll6.clkr,
3789 [GPLL6_OUT_EVEN] = &gpll6_out_even.clkr,
3790 [GPLL7] = &gpll7.clkr,
3791 [GPLL8] = &gpll8.clkr,
3792 [GPLL8_OUT_EVEN] = &gpll8_out_even.clkr,
3793 [GPLL9] = &gpll9.clkr,
3794 [GPLL9_OUT_MAIN] = &gpll9_out_main.clkr,
3795 };
3796
3797 static const struct qcom_reset_map gcc_sm6375_resets[] = {
3798 [GCC_MMSS_BCR] = { 0x17000 },
3799 [GCC_USB30_PRIM_BCR] = { 0x1a000 },
3800 [GCC_USB3_PHY_PRIM_SP0_BCR] = { 0x1b000 },
3801 [GCC_USB3_DP_PHY_PRIM_BCR] = { 0x1b020 },
3802 [GCC_QUSB2PHY_PRIM_BCR] = { 0x1c000 },
3803 [GCC_QUSB2PHY_SEC_BCR] = { 0x1c004 },
3804 [GCC_USB_PHY_CFG_AHB2PHY_BCR] = { 0x1d000 },
3805 [GCC_SDCC2_BCR] = { 0x1e000 },
3806 [GCC_QUPV3_WRAPPER_0_BCR] = { 0x1f000 },
3807 [GCC_PDM_BCR] = { 0x20000 },
3808 [GCC_GPU_BCR] = { 0x36000 },
3809 [GCC_SDCC1_BCR] = { 0x38000 },
3810 [GCC_UFS_PHY_BCR] = { 0x45000 },
3811 [GCC_CAMSS_TFE_BCR] = { 0x52000 },
3812 [GCC_QUPV3_WRAPPER_1_BCR] = { 0x53000 },
3813 [GCC_CAMSS_OPE_BCR] = { 0x55000 },
3814 [GCC_CAMSS_TOP_BCR] = { 0x58000 },
3815 [GCC_VENUS_BCR] = { 0x58078 },
3816 [GCC_VCODEC0_BCR] = { 0x58094 },
3817 [GCC_VIDEO_INTERFACE_BCR] = { 0x6e000 },
3818 };
3819
3820
3821 static const struct clk_rcg_dfs_data gcc_dfs_clocks[] = {
3822 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s0_clk_src),
3823 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s1_clk_src),
3824 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s2_clk_src),
3825 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s3_clk_src),
3826 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s4_clk_src),
3827 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s5_clk_src),
3828 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s0_clk_src),
3829 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s1_clk_src),
3830 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s2_clk_src),
3831 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s3_clk_src),
3832 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s4_clk_src),
3833 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s5_clk_src),
3834 };
3835
3836 static struct gdsc *gcc_sm6375_gdscs[] = {
3837 [USB30_PRIM_GDSC] = &usb30_prim_gdsc,
3838 [UFS_PHY_GDSC] = &ufs_phy_gdsc,
3839 [CAMSS_TOP_GDSC] = &camss_top_gdsc,
3840 [VENUS_GDSC] = &venus_gdsc,
3841 [VCODEC0_GDSC] = &vcodec0_gdsc,
3842 [HLOS1_VOTE_MM_SNOC_MMU_TBU_NRT_GDSC] = &hlos1_vote_mm_snoc_mmu_tbu_nrt_gdsc,
3843 [HLOS1_VOTE_MM_SNOC_MMU_TBU_RT_GDSC] = &hlos1_vote_mm_snoc_mmu_tbu_rt_gdsc,
3844 [HLOS1_VOTE_TURING_MMU_TBU0_GDSC] = &hlos1_vote_turing_mmu_tbu0_gdsc,
3845 [HLOS1_VOTE_TURING_MMU_TBU1_GDSC] = &hlos1_vote_turing_mmu_tbu1_gdsc,
3846 };
3847
3848 static const struct regmap_config gcc_sm6375_regmap_config = {
3849 .reg_bits = 32,
3850 .reg_stride = 4,
3851 .val_bits = 32,
3852 .max_register = 0xc7000,
3853 .fast_io = true,
3854 };
3855
3856 static const struct qcom_cc_desc gcc_sm6375_desc = {
3857 .config = &gcc_sm6375_regmap_config,
3858 .clks = gcc_sm6375_clocks,
3859 .num_clks = ARRAY_SIZE(gcc_sm6375_clocks),
3860 .resets = gcc_sm6375_resets,
3861 .num_resets = ARRAY_SIZE(gcc_sm6375_resets),
3862 .gdscs = gcc_sm6375_gdscs,
3863 .num_gdscs = ARRAY_SIZE(gcc_sm6375_gdscs),
3864 };
3865
3866 static const struct of_device_id gcc_sm6375_match_table[] = {
3867 { .compatible = "qcom,sm6375-gcc" },
3868 { }
3869 };
3870 MODULE_DEVICE_TABLE(of, gcc_sm6375_match_table);
3871
gcc_sm6375_probe(struct platform_device * pdev)3872 static int gcc_sm6375_probe(struct platform_device *pdev)
3873 {
3874 struct regmap *regmap;
3875 int ret;
3876
3877 regmap = qcom_cc_map(pdev, &gcc_sm6375_desc);
3878 if (IS_ERR(regmap))
3879 return PTR_ERR(regmap);
3880
3881 ret = qcom_cc_register_rcg_dfs(regmap, gcc_dfs_clocks, ARRAY_SIZE(gcc_dfs_clocks));
3882 if (ret)
3883 return ret;
3884
3885 /*
3886 * Keep the following clocks always on:
3887 * GCC_CAMERA_XO_CLK, GCC_CPUSS_GNOC_CLK, GCC_DISP_XO_CLK
3888 */
3889 regmap_update_bits(regmap, 0x17028, BIT(0), BIT(0));
3890 regmap_update_bits(regmap, 0x2b004, BIT(0), BIT(0));
3891 regmap_update_bits(regmap, 0x1702c, BIT(0), BIT(0));
3892
3893 clk_lucid_pll_configure(&gpll10, regmap, &gpll10_config);
3894 clk_lucid_pll_configure(&gpll11, regmap, &gpll11_config);
3895 clk_lucid_pll_configure(&gpll8, regmap, &gpll8_config);
3896 clk_zonda_pll_configure(&gpll9, regmap, &gpll9_config);
3897
3898 return qcom_cc_really_probe(pdev, &gcc_sm6375_desc, regmap);
3899 }
3900
3901 static struct platform_driver gcc_sm6375_driver = {
3902 .probe = gcc_sm6375_probe,
3903 .driver = {
3904 .name = "gcc-sm6375",
3905 .of_match_table = gcc_sm6375_match_table,
3906 },
3907 };
3908
gcc_sm6375_init(void)3909 static int __init gcc_sm6375_init(void)
3910 {
3911 return platform_driver_register(&gcc_sm6375_driver);
3912 }
3913 subsys_initcall(gcc_sm6375_init);
3914
gcc_sm6375_exit(void)3915 static void __exit gcc_sm6375_exit(void)
3916 {
3917 platform_driver_unregister(&gcc_sm6375_driver);
3918 }
3919 module_exit(gcc_sm6375_exit);
3920
3921 MODULE_DESCRIPTION("QTI GCC SM6375 Driver");
3922 MODULE_LICENSE("GPL");
3923