1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3 * Copyright (c) 2020, The Linux Foundation. All rights reserved.
4 */
5
6 #include <linux/clk-provider.h>
7 #include <linux/err.h>
8 #include <linux/kernel.h>
9 #include <linux/module.h>
10 #include <linux/platform_device.h>
11 #include <linux/regmap.h>
12
13 #include <dt-bindings/clock/qcom,gcc-qcm2290.h>
14
15 #include "clk-alpha-pll.h"
16 #include "clk-branch.h"
17 #include "clk-rcg.h"
18 #include "clk-regmap-divider.h"
19 #include "common.h"
20 #include "gdsc.h"
21 #include "reset.h"
22
23 enum {
24 P_BI_TCXO,
25 P_GPLL0_OUT_AUX2,
26 P_GPLL0_OUT_EARLY,
27 P_GPLL10_OUT_MAIN,
28 P_GPLL11_OUT_AUX,
29 P_GPLL11_OUT_AUX2,
30 P_GPLL11_OUT_MAIN,
31 P_GPLL3_OUT_EARLY,
32 P_GPLL3_OUT_MAIN,
33 P_GPLL4_OUT_MAIN,
34 P_GPLL5_OUT_MAIN,
35 P_GPLL6_OUT_EARLY,
36 P_GPLL6_OUT_MAIN,
37 P_GPLL7_OUT_MAIN,
38 P_GPLL8_OUT_EARLY,
39 P_GPLL8_OUT_MAIN,
40 P_GPLL9_OUT_EARLY,
41 P_GPLL9_OUT_MAIN,
42 P_SLEEP_CLK,
43 };
44
45 static const struct pll_vco brammo_vco[] = {
46 { 500000000, 1250000000, 0 },
47 };
48
49 static const struct pll_vco default_vco[] = {
50 { 500000000, 1000000000, 2 },
51 };
52
53 static const struct pll_vco spark_vco[] = {
54 { 750000000, 1500000000, 1 },
55 };
56
57 static struct clk_alpha_pll gpll0 = {
58 .offset = 0x0,
59 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT_EVO],
60 .clkr = {
61 .enable_reg = 0x79000,
62 .enable_mask = BIT(0),
63 .hw.init = &(struct clk_init_data){
64 .name = "gpll0",
65 .parent_data = &(const struct clk_parent_data){
66 .fw_name = "bi_tcxo",
67 },
68 .num_parents = 1,
69 .ops = &clk_alpha_pll_ops,
70 },
71 },
72 };
73
74 static const struct clk_div_table post_div_table_gpll0_out_aux2[] = {
75 { 0x1, 2 },
76 { }
77 };
78
79 static struct clk_alpha_pll_postdiv gpll0_out_aux2 = {
80 .offset = 0x0,
81 .post_div_shift = 8,
82 .post_div_table = post_div_table_gpll0_out_aux2,
83 .num_post_div = ARRAY_SIZE(post_div_table_gpll0_out_aux2),
84 .width = 4,
85 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT_EVO],
86 .clkr.hw.init = &(struct clk_init_data){
87 .name = "gpll0_out_aux2",
88 .parent_hws = (const struct clk_hw *[]){ &gpll0.clkr.hw },
89 .num_parents = 1,
90 .ops = &clk_alpha_pll_postdiv_ro_ops,
91 },
92 };
93
94 static struct clk_alpha_pll gpll1 = {
95 .offset = 0x1000,
96 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT_EVO],
97 .clkr = {
98 .enable_reg = 0x79000,
99 .enable_mask = BIT(1),
100 .hw.init = &(struct clk_init_data){
101 .name = "gpll1",
102 .parent_data = &(const struct clk_parent_data){
103 .fw_name = "bi_tcxo",
104 },
105 .num_parents = 1,
106 .ops = &clk_alpha_pll_ops,
107 },
108 },
109 };
110
111 /* 1152MHz configuration */
112 static const struct alpha_pll_config gpll10_config = {
113 .l = 0x3c,
114 .alpha = 0x0,
115 .vco_val = 0x1 << 20,
116 .vco_mask = GENMASK(21, 20),
117 .main_output_mask = BIT(0),
118 .config_ctl_val = 0x4001055B,
119 .test_ctl_hi1_val = 0x1,
120 };
121
122 static struct clk_alpha_pll gpll10 = {
123 .offset = 0xa000,
124 .vco_table = spark_vco,
125 .num_vco = ARRAY_SIZE(spark_vco),
126 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT_EVO],
127 .clkr = {
128 .enable_reg = 0x79000,
129 .enable_mask = BIT(10),
130 .hw.init = &(struct clk_init_data){
131 .name = "gpll10",
132 .parent_data = &(const struct clk_parent_data){
133 .fw_name = "bi_tcxo",
134 },
135 .num_parents = 1,
136 .ops = &clk_alpha_pll_ops,
137 },
138 },
139 };
140
141 /* 532MHz configuration */
142 static const struct alpha_pll_config gpll11_config = {
143 .l = 0x1B,
144 .alpha = 0x55555555,
145 .alpha_hi = 0xB5,
146 .alpha_en_mask = BIT(24),
147 .vco_val = 0x2 << 20,
148 .vco_mask = GENMASK(21, 20),
149 .main_output_mask = BIT(0),
150 .config_ctl_val = 0x4001055B,
151 .test_ctl_hi1_val = 0x1,
152 };
153
154 static struct clk_alpha_pll gpll11 = {
155 .offset = 0xb000,
156 .vco_table = default_vco,
157 .num_vco = ARRAY_SIZE(default_vco),
158 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT_EVO],
159 .flags = SUPPORTS_DYNAMIC_UPDATE,
160 .clkr = {
161 .enable_reg = 0x79000,
162 .enable_mask = BIT(11),
163 .hw.init = &(struct clk_init_data){
164 .name = "gpll11",
165 .parent_data = &(const struct clk_parent_data){
166 .fw_name = "bi_tcxo",
167 },
168 .num_parents = 1,
169 .ops = &clk_alpha_pll_ops,
170 },
171 },
172 };
173
174 static struct clk_alpha_pll gpll3 = {
175 .offset = 0x3000,
176 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT_EVO],
177 .clkr = {
178 .enable_reg = 0x79000,
179 .enable_mask = BIT(3),
180 .hw.init = &(struct clk_init_data){
181 .name = "gpll3",
182 .parent_data = &(const struct clk_parent_data){
183 .fw_name = "bi_tcxo",
184 },
185 .num_parents = 1,
186 .ops = &clk_alpha_pll_ops,
187 },
188 },
189 };
190
191 static const struct clk_div_table post_div_table_gpll3_out_main[] = {
192 { 0x1, 2 },
193 { }
194 };
195
196 static struct clk_alpha_pll_postdiv gpll3_out_main = {
197 .offset = 0x3000,
198 .post_div_shift = 8,
199 .post_div_table = post_div_table_gpll3_out_main,
200 .num_post_div = ARRAY_SIZE(post_div_table_gpll3_out_main),
201 .width = 4,
202 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT_EVO],
203 .clkr.hw.init = &(struct clk_init_data){
204 .name = "gpll3_out_main",
205 .parent_hws = (const struct clk_hw *[]){ &gpll3.clkr.hw },
206 .num_parents = 1,
207 .ops = &clk_alpha_pll_postdiv_ro_ops,
208 },
209 };
210
211 static struct clk_alpha_pll gpll4 = {
212 .offset = 0x4000,
213 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT_EVO],
214 .clkr = {
215 .enable_reg = 0x79000,
216 .enable_mask = BIT(4),
217 .hw.init = &(struct clk_init_data){
218 .name = "gpll4",
219 .parent_data = &(const struct clk_parent_data){
220 .fw_name = "bi_tcxo",
221 },
222 .num_parents = 1,
223 .ops = &clk_alpha_pll_ops,
224 },
225 },
226 };
227
228 static struct clk_alpha_pll gpll5 = {
229 .offset = 0x5000,
230 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT_EVO],
231 .clkr = {
232 .enable_reg = 0x79000,
233 .enable_mask = BIT(5),
234 .hw.init = &(struct clk_init_data){
235 .name = "gpll5",
236 .parent_data = &(const struct clk_parent_data){
237 .fw_name = "bi_tcxo",
238 },
239 .num_parents = 1,
240 .ops = &clk_alpha_pll_ops,
241 },
242 },
243 };
244
245 static struct clk_alpha_pll gpll6 = {
246 .offset = 0x6000,
247 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT_EVO],
248 .clkr = {
249 .enable_reg = 0x79000,
250 .enable_mask = BIT(6),
251 .hw.init = &(struct clk_init_data){
252 .name = "gpll6",
253 .parent_data = &(const struct clk_parent_data){
254 .fw_name = "bi_tcxo",
255 },
256 .num_parents = 1,
257 .ops = &clk_alpha_pll_ops,
258 },
259 },
260 };
261
262 static const struct clk_div_table post_div_table_gpll6_out_main[] = {
263 { 0x1, 2 },
264 { }
265 };
266
267 static struct clk_alpha_pll_postdiv gpll6_out_main = {
268 .offset = 0x6000,
269 .post_div_shift = 8,
270 .post_div_table = post_div_table_gpll6_out_main,
271 .num_post_div = ARRAY_SIZE(post_div_table_gpll6_out_main),
272 .width = 4,
273 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT_EVO],
274 .clkr.hw.init = &(struct clk_init_data){
275 .name = "gpll6_out_main",
276 .parent_hws = (const struct clk_hw *[]){ &gpll6.clkr.hw },
277 .num_parents = 1,
278 .ops = &clk_alpha_pll_postdiv_ro_ops,
279 },
280 };
281
282 static struct clk_alpha_pll gpll7 = {
283 .offset = 0x7000,
284 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT_EVO],
285 .clkr = {
286 .enable_reg = 0x79000,
287 .enable_mask = BIT(7),
288 .hw.init = &(struct clk_init_data){
289 .name = "gpll7",
290 .parent_data = &(const struct clk_parent_data){
291 .fw_name = "bi_tcxo",
292 },
293 .num_parents = 1,
294 .ops = &clk_alpha_pll_ops,
295 },
296 },
297 };
298
299 /* 533.2MHz configuration */
300 static const struct alpha_pll_config gpll8_config = {
301 .l = 0x1B,
302 .alpha = 0x55555555,
303 .alpha_hi = 0xC5,
304 .alpha_en_mask = BIT(24),
305 .vco_val = 0x2 << 20,
306 .vco_mask = GENMASK(21, 20),
307 .main_output_mask = BIT(0),
308 .early_output_mask = BIT(3),
309 .post_div_val = 0x1 << 8,
310 .post_div_mask = GENMASK(11, 8),
311 .config_ctl_val = 0x4001055B,
312 .test_ctl_hi1_val = 0x1,
313 };
314
315 static struct clk_alpha_pll gpll8 = {
316 .offset = 0x8000,
317 .vco_table = default_vco,
318 .num_vco = ARRAY_SIZE(default_vco),
319 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT_EVO],
320 .flags = SUPPORTS_DYNAMIC_UPDATE,
321 .clkr = {
322 .enable_reg = 0x79000,
323 .enable_mask = BIT(8),
324 .hw.init = &(struct clk_init_data){
325 .name = "gpll8",
326 .parent_data = &(const struct clk_parent_data){
327 .fw_name = "bi_tcxo",
328 },
329 .num_parents = 1,
330 .ops = &clk_alpha_pll_ops,
331 },
332 },
333 };
334
335 static const struct clk_div_table post_div_table_gpll8_out_main[] = {
336 { 0x1, 2 },
337 { }
338 };
339
340 static struct clk_alpha_pll_postdiv gpll8_out_main = {
341 .offset = 0x8000,
342 .post_div_shift = 8,
343 .post_div_table = post_div_table_gpll8_out_main,
344 .num_post_div = ARRAY_SIZE(post_div_table_gpll8_out_main),
345 .width = 4,
346 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT_EVO],
347 .clkr.hw.init = &(struct clk_init_data){
348 .name = "gpll8_out_main",
349 .parent_hws = (const struct clk_hw *[]){ &gpll8.clkr.hw },
350 .num_parents = 1,
351 .flags = CLK_SET_RATE_PARENT,
352 .ops = &clk_alpha_pll_postdiv_ro_ops,
353 },
354 };
355
356 /* 1152MHz configuration */
357 static const struct alpha_pll_config gpll9_config = {
358 .l = 0x3C,
359 .alpha = 0x0,
360 .post_div_val = 0x1 << 8,
361 .post_div_mask = GENMASK(9, 8),
362 .main_output_mask = BIT(0),
363 .early_output_mask = BIT(3),
364 .config_ctl_val = 0x00004289,
365 .test_ctl_val = 0x08000000,
366 };
367
368 static struct clk_alpha_pll gpll9 = {
369 .offset = 0x9000,
370 .vco_table = brammo_vco,
371 .num_vco = ARRAY_SIZE(brammo_vco),
372 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_BRAMMO_EVO],
373 .clkr = {
374 .enable_reg = 0x79000,
375 .enable_mask = BIT(9),
376 .hw.init = &(struct clk_init_data){
377 .name = "gpll9",
378 .parent_data = &(const struct clk_parent_data){
379 .fw_name = "bi_tcxo",
380 },
381 .num_parents = 1,
382 .ops = &clk_alpha_pll_ops,
383 },
384 },
385 };
386
387 static const struct clk_div_table post_div_table_gpll9_out_main[] = {
388 { 0x1, 2 },
389 { }
390 };
391
392 static struct clk_alpha_pll_postdiv gpll9_out_main = {
393 .offset = 0x9000,
394 .post_div_shift = 8,
395 .post_div_table = post_div_table_gpll9_out_main,
396 .num_post_div = ARRAY_SIZE(post_div_table_gpll9_out_main),
397 .width = 2,
398 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_BRAMMO_EVO],
399 .clkr.hw.init = &(struct clk_init_data){
400 .name = "gpll9_out_main",
401 .parent_hws = (const struct clk_hw *[]){ &gpll9.clkr.hw },
402 .num_parents = 1,
403 .flags = CLK_SET_RATE_PARENT,
404 .ops = &clk_alpha_pll_postdiv_ro_ops,
405 },
406 };
407
408 static const struct parent_map gcc_parent_map_0[] = {
409 { P_BI_TCXO, 0 },
410 { P_GPLL0_OUT_EARLY, 1 },
411 { P_GPLL0_OUT_AUX2, 2 },
412 };
413
414 static const struct clk_parent_data gcc_parents_0[] = {
415 { .fw_name = "bi_tcxo" },
416 { .hw = &gpll0.clkr.hw },
417 { .hw = &gpll0_out_aux2.clkr.hw },
418 };
419
420 static const struct parent_map gcc_parent_map_1[] = {
421 { P_BI_TCXO, 0 },
422 { P_GPLL0_OUT_EARLY, 1 },
423 { P_GPLL0_OUT_AUX2, 2 },
424 { P_GPLL6_OUT_MAIN, 4 },
425 };
426
427 static const struct clk_parent_data gcc_parents_1[] = {
428 { .fw_name = "bi_tcxo" },
429 { .hw = &gpll0.clkr.hw },
430 { .hw = &gpll0_out_aux2.clkr.hw },
431 { .hw = &gpll6_out_main.clkr.hw },
432 };
433
434 static const struct parent_map gcc_parent_map_2[] = {
435 { P_BI_TCXO, 0 },
436 { P_GPLL0_OUT_EARLY, 1 },
437 { P_GPLL0_OUT_AUX2, 2 },
438 { P_SLEEP_CLK, 5 },
439 };
440
441 static const struct clk_parent_data gcc_parents_2[] = {
442 { .fw_name = "bi_tcxo" },
443 { .hw = &gpll0.clkr.hw },
444 { .hw = &gpll0_out_aux2.clkr.hw },
445 { .fw_name = "sleep_clk" },
446 };
447
448 static const struct parent_map gcc_parent_map_3[] = {
449 { P_BI_TCXO, 0 },
450 { P_GPLL0_OUT_EARLY, 1 },
451 { P_GPLL9_OUT_EARLY, 2 },
452 { P_GPLL10_OUT_MAIN, 3 },
453 { P_GPLL9_OUT_MAIN, 5 },
454 { P_GPLL3_OUT_MAIN, 6 },
455 };
456
457 static const struct clk_parent_data gcc_parents_3[] = {
458 { .fw_name = "bi_tcxo" },
459 { .hw = &gpll0.clkr.hw },
460 { .hw = &gpll9.clkr.hw },
461 { .hw = &gpll10.clkr.hw },
462 { .hw = &gpll9_out_main.clkr.hw },
463 { .hw = &gpll3_out_main.clkr.hw },
464 };
465
466 static const struct parent_map gcc_parent_map_4[] = {
467 { P_BI_TCXO, 0 },
468 { P_GPLL0_OUT_EARLY, 1 },
469 { P_GPLL0_OUT_AUX2, 2 },
470 { P_GPLL10_OUT_MAIN, 3 },
471 { P_GPLL4_OUT_MAIN, 5 },
472 { P_GPLL3_OUT_EARLY, 6 },
473 };
474
475 static const struct clk_parent_data gcc_parents_4[] = {
476 { .fw_name = "bi_tcxo" },
477 { .hw = &gpll0.clkr.hw },
478 { .hw = &gpll0_out_aux2.clkr.hw },
479 { .hw = &gpll10.clkr.hw },
480 { .hw = &gpll4.clkr.hw },
481 { .hw = &gpll3.clkr.hw },
482 };
483
484 static const struct parent_map gcc_parent_map_5[] = {
485 { P_BI_TCXO, 0 },
486 { P_GPLL0_OUT_EARLY, 1 },
487 { P_GPLL0_OUT_AUX2, 2 },
488 { P_GPLL4_OUT_MAIN, 5 },
489 { P_GPLL3_OUT_MAIN, 6 },
490 };
491
492 static const struct clk_parent_data gcc_parents_5[] = {
493 { .fw_name = "bi_tcxo" },
494 { .hw = &gpll0.clkr.hw },
495 { .hw = &gpll0_out_aux2.clkr.hw },
496 { .hw = &gpll4.clkr.hw },
497 { .hw = &gpll3_out_main.clkr.hw },
498 };
499
500 static const struct parent_map gcc_parent_map_6[] = {
501 { P_BI_TCXO, 0 },
502 { P_GPLL0_OUT_EARLY, 1 },
503 { P_GPLL8_OUT_EARLY, 2 },
504 { P_GPLL10_OUT_MAIN, 3 },
505 { P_GPLL8_OUT_MAIN, 4 },
506 { P_GPLL9_OUT_MAIN, 5 },
507 { P_GPLL3_OUT_EARLY, 6 },
508 };
509
510 static const struct clk_parent_data gcc_parents_6[] = {
511 { .fw_name = "bi_tcxo" },
512 { .hw = &gpll0.clkr.hw },
513 { .hw = &gpll8.clkr.hw },
514 { .hw = &gpll10.clkr.hw },
515 { .hw = &gpll8_out_main.clkr.hw },
516 { .hw = &gpll9_out_main.clkr.hw },
517 { .hw = &gpll3.clkr.hw },
518 };
519
520 static const struct parent_map gcc_parent_map_7[] = {
521 { P_BI_TCXO, 0 },
522 { P_GPLL0_OUT_EARLY, 1 },
523 { P_GPLL8_OUT_EARLY, 2 },
524 { P_GPLL10_OUT_MAIN, 3 },
525 { P_GPLL8_OUT_MAIN, 4 },
526 { P_GPLL9_OUT_MAIN, 5 },
527 { P_GPLL3_OUT_MAIN, 6 },
528 };
529
530 static const struct clk_parent_data gcc_parents_7[] = {
531 { .fw_name = "bi_tcxo" },
532 { .hw = &gpll0.clkr.hw },
533 { .hw = &gpll8.clkr.hw },
534 { .hw = &gpll10.clkr.hw },
535 { .hw = &gpll8_out_main.clkr.hw },
536 { .hw = &gpll9_out_main.clkr.hw },
537 { .hw = &gpll3_out_main.clkr.hw },
538 };
539
540 static const struct parent_map gcc_parent_map_8[] = {
541 { P_BI_TCXO, 0 },
542 { P_GPLL0_OUT_EARLY, 1 },
543 { P_GPLL8_OUT_EARLY, 2 },
544 { P_GPLL10_OUT_MAIN, 3 },
545 { P_GPLL6_OUT_MAIN, 4 },
546 { P_GPLL9_OUT_MAIN, 5 },
547 { P_GPLL3_OUT_EARLY, 6 },
548 };
549
550 static const struct clk_parent_data gcc_parents_8[] = {
551 { .fw_name = "bi_tcxo" },
552 { .hw = &gpll0.clkr.hw },
553 { .hw = &gpll8.clkr.hw },
554 { .hw = &gpll10.clkr.hw },
555 { .hw = &gpll6_out_main.clkr.hw },
556 { .hw = &gpll9_out_main.clkr.hw },
557 { .hw = &gpll3.clkr.hw },
558 };
559
560 static const struct parent_map gcc_parent_map_9[] = {
561 { P_BI_TCXO, 0 },
562 { P_GPLL0_OUT_EARLY, 1 },
563 { P_GPLL0_OUT_AUX2, 2 },
564 { P_GPLL10_OUT_MAIN, 3 },
565 { P_GPLL8_OUT_MAIN, 4 },
566 { P_GPLL9_OUT_MAIN, 5 },
567 { P_GPLL3_OUT_EARLY, 6 },
568 };
569
570 static const struct clk_parent_data gcc_parents_9[] = {
571 { .fw_name = "bi_tcxo" },
572 { .hw = &gpll0.clkr.hw },
573 { .hw = &gpll0_out_aux2.clkr.hw },
574 { .hw = &gpll10.clkr.hw },
575 { .hw = &gpll8_out_main.clkr.hw },
576 { .hw = &gpll9_out_main.clkr.hw },
577 { .hw = &gpll3.clkr.hw },
578 };
579
580 static const struct parent_map gcc_parent_map_10[] = {
581 { P_BI_TCXO, 0 },
582 { P_GPLL0_OUT_EARLY, 1 },
583 { P_GPLL8_OUT_EARLY, 2 },
584 { P_GPLL10_OUT_MAIN, 3 },
585 { P_GPLL6_OUT_EARLY, 5 },
586 { P_GPLL3_OUT_MAIN, 6 },
587 };
588
589 static const struct clk_parent_data gcc_parents_10[] = {
590 { .fw_name = "bi_tcxo" },
591 { .hw = &gpll0.clkr.hw },
592 { .hw = &gpll8.clkr.hw },
593 { .hw = &gpll10.clkr.hw },
594 { .hw = &gpll6.clkr.hw },
595 { .hw = &gpll3_out_main.clkr.hw },
596 };
597
598 static const struct parent_map gcc_parent_map_12[] = {
599 { P_BI_TCXO, 0 },
600 { P_GPLL0_OUT_EARLY, 1 },
601 { P_GPLL0_OUT_AUX2, 2 },
602 { P_GPLL7_OUT_MAIN, 3 },
603 { P_GPLL4_OUT_MAIN, 5 },
604 };
605
606 static const struct clk_parent_data gcc_parents_12[] = {
607 { .fw_name = "bi_tcxo" },
608 { .hw = &gpll0.clkr.hw },
609 { .hw = &gpll0_out_aux2.clkr.hw },
610 { .hw = &gpll7.clkr.hw },
611 { .hw = &gpll4.clkr.hw },
612 };
613
614 static const struct parent_map gcc_parent_map_13[] = {
615 { P_BI_TCXO, 0 },
616 { P_SLEEP_CLK, 5 },
617 };
618
619 static const struct clk_parent_data gcc_parents_13[] = {
620 { .fw_name = "bi_tcxo" },
621 { .fw_name = "sleep_clk" },
622 };
623
624 static const struct parent_map gcc_parent_map_14[] = {
625 { P_BI_TCXO, 0 },
626 { P_GPLL11_OUT_MAIN, 1 },
627 { P_GPLL11_OUT_AUX, 2 },
628 { P_GPLL11_OUT_AUX2, 3 },
629 };
630
631 static const struct clk_parent_data gcc_parents_14[] = {
632 { .fw_name = "bi_tcxo" },
633 { .hw = &gpll11.clkr.hw },
634 { .hw = &gpll11.clkr.hw },
635 { .hw = &gpll11.clkr.hw },
636 };
637
638 static const struct freq_tbl ftbl_gcc_usb30_prim_mock_utmi_clk_src[] = {
639 F(19200000, P_BI_TCXO, 1, 0, 0),
640 { }
641 };
642
643 static struct clk_rcg2 gcc_usb30_prim_mock_utmi_clk_src = {
644 .cmd_rcgr = 0x1a034,
645 .mnd_width = 0,
646 .hid_width = 5,
647 .parent_map = gcc_parent_map_0,
648 .freq_tbl = ftbl_gcc_usb30_prim_mock_utmi_clk_src,
649 .clkr.hw.init = &(struct clk_init_data){
650 .name = "gcc_usb30_prim_mock_utmi_clk_src",
651 .parent_data = gcc_parents_0,
652 .num_parents = ARRAY_SIZE(gcc_parents_0),
653 .ops = &clk_rcg2_shared_ops,
654 },
655 };
656
657 static struct clk_regmap_div gcc_usb30_prim_mock_utmi_postdiv = {
658 .reg = 0x1a04c,
659 .shift = 0,
660 .width = 2,
661 .clkr.hw.init = &(struct clk_init_data) {
662 .name = "gcc_usb30_prim_mock_utmi_postdiv",
663 .parent_hws = (const struct clk_hw *[])
664 { &gcc_usb30_prim_mock_utmi_clk_src.clkr.hw },
665 .num_parents = 1,
666 .flags = CLK_SET_RATE_PARENT,
667 .ops = &clk_regmap_div_ro_ops,
668 },
669 };
670
671 static const struct freq_tbl ftbl_gcc_camss_axi_clk_src[] = {
672 F(19200000, P_BI_TCXO, 1, 0, 0),
673 F(150000000, P_GPLL0_OUT_AUX2, 2, 0, 0),
674 F(200000000, P_GPLL0_OUT_AUX2, 1.5, 0, 0),
675 F(300000000, P_GPLL0_OUT_AUX2, 1, 0, 0),
676 { }
677 };
678
679 static struct clk_rcg2 gcc_camss_axi_clk_src = {
680 .cmd_rcgr = 0x5802c,
681 .mnd_width = 0,
682 .hid_width = 5,
683 .parent_map = gcc_parent_map_4,
684 .freq_tbl = ftbl_gcc_camss_axi_clk_src,
685 .clkr.hw.init = &(struct clk_init_data){
686 .name = "gcc_camss_axi_clk_src",
687 .parent_data = gcc_parents_4,
688 .num_parents = ARRAY_SIZE(gcc_parents_4),
689 .ops = &clk_rcg2_shared_ops,
690 },
691 };
692
693 static const struct freq_tbl ftbl_gcc_camss_cci_clk_src[] = {
694 F(19200000, P_BI_TCXO, 1, 0, 0),
695 F(37500000, P_GPLL0_OUT_AUX2, 8, 0, 0),
696 { }
697 };
698
699 static struct clk_rcg2 gcc_camss_cci_clk_src = {
700 .cmd_rcgr = 0x56000,
701 .mnd_width = 0,
702 .hid_width = 5,
703 .parent_map = gcc_parent_map_9,
704 .freq_tbl = ftbl_gcc_camss_cci_clk_src,
705 .clkr.hw.init = &(struct clk_init_data){
706 .name = "gcc_camss_cci_clk_src",
707 .parent_data = gcc_parents_9,
708 .num_parents = ARRAY_SIZE(gcc_parents_9),
709 .ops = &clk_rcg2_shared_ops,
710 },
711 };
712
713 static const struct freq_tbl ftbl_gcc_camss_csi0phytimer_clk_src[] = {
714 F(19200000, P_BI_TCXO, 1, 0, 0),
715 F(100000000, P_GPLL0_OUT_AUX2, 3, 0, 0),
716 F(200000000, P_GPLL0_OUT_AUX2, 1.5, 0, 0),
717 F(268800000, P_GPLL4_OUT_MAIN, 3, 0, 0),
718 { }
719 };
720
721 static struct clk_rcg2 gcc_camss_csi0phytimer_clk_src = {
722 .cmd_rcgr = 0x45000,
723 .mnd_width = 0,
724 .hid_width = 5,
725 .parent_map = gcc_parent_map_5,
726 .freq_tbl = ftbl_gcc_camss_csi0phytimer_clk_src,
727 .clkr.hw.init = &(struct clk_init_data){
728 .name = "gcc_camss_csi0phytimer_clk_src",
729 .parent_data = gcc_parents_5,
730 .num_parents = ARRAY_SIZE(gcc_parents_5),
731 .ops = &clk_rcg2_shared_ops,
732 },
733 };
734
735 static struct clk_rcg2 gcc_camss_csi1phytimer_clk_src = {
736 .cmd_rcgr = 0x4501c,
737 .mnd_width = 0,
738 .hid_width = 5,
739 .parent_map = gcc_parent_map_5,
740 .freq_tbl = ftbl_gcc_camss_csi0phytimer_clk_src,
741 .clkr.hw.init = &(struct clk_init_data){
742 .name = "gcc_camss_csi1phytimer_clk_src",
743 .parent_data = gcc_parents_5,
744 .num_parents = ARRAY_SIZE(gcc_parents_5),
745 .ops = &clk_rcg2_shared_ops,
746 },
747 };
748
749 static const struct freq_tbl ftbl_gcc_camss_mclk0_clk_src[] = {
750 F(19200000, P_BI_TCXO, 1, 0, 0),
751 F(24000000, P_GPLL9_OUT_MAIN, 1, 1, 24),
752 F(64000000, P_GPLL9_OUT_EARLY, 9, 1, 2),
753 { }
754 };
755
756 static struct clk_rcg2 gcc_camss_mclk0_clk_src = {
757 .cmd_rcgr = 0x51000,
758 .mnd_width = 8,
759 .hid_width = 5,
760 .parent_map = gcc_parent_map_3,
761 .freq_tbl = ftbl_gcc_camss_mclk0_clk_src,
762 .clkr.hw.init = &(struct clk_init_data){
763 .name = "gcc_camss_mclk0_clk_src",
764 .parent_data = gcc_parents_3,
765 .num_parents = ARRAY_SIZE(gcc_parents_3),
766 .flags = CLK_OPS_PARENT_ENABLE,
767 .ops = &clk_rcg2_shared_ops,
768 },
769 };
770
771 static struct clk_rcg2 gcc_camss_mclk1_clk_src = {
772 .cmd_rcgr = 0x5101c,
773 .mnd_width = 8,
774 .hid_width = 5,
775 .parent_map = gcc_parent_map_3,
776 .freq_tbl = ftbl_gcc_camss_mclk0_clk_src,
777 .clkr.hw.init = &(struct clk_init_data){
778 .name = "gcc_camss_mclk1_clk_src",
779 .parent_data = gcc_parents_3,
780 .num_parents = ARRAY_SIZE(gcc_parents_3),
781 .flags = CLK_OPS_PARENT_ENABLE,
782 .ops = &clk_rcg2_shared_ops,
783 },
784 };
785
786 static struct clk_rcg2 gcc_camss_mclk2_clk_src = {
787 .cmd_rcgr = 0x51038,
788 .mnd_width = 8,
789 .hid_width = 5,
790 .parent_map = gcc_parent_map_3,
791 .freq_tbl = ftbl_gcc_camss_mclk0_clk_src,
792 .clkr.hw.init = &(struct clk_init_data){
793 .name = "gcc_camss_mclk2_clk_src",
794 .parent_data = gcc_parents_3,
795 .num_parents = ARRAY_SIZE(gcc_parents_3),
796 .flags = CLK_OPS_PARENT_ENABLE,
797 .ops = &clk_rcg2_shared_ops,
798 },
799 };
800
801 static struct clk_rcg2 gcc_camss_mclk3_clk_src = {
802 .cmd_rcgr = 0x51054,
803 .mnd_width = 8,
804 .hid_width = 5,
805 .parent_map = gcc_parent_map_3,
806 .freq_tbl = ftbl_gcc_camss_mclk0_clk_src,
807 .clkr.hw.init = &(struct clk_init_data){
808 .name = "gcc_camss_mclk3_clk_src",
809 .parent_data = gcc_parents_3,
810 .num_parents = ARRAY_SIZE(gcc_parents_3),
811 .flags = CLK_OPS_PARENT_ENABLE,
812 .ops = &clk_rcg2_shared_ops,
813 },
814 };
815
816 static const struct freq_tbl ftbl_gcc_camss_ope_ahb_clk_src[] = {
817 F(19200000, P_BI_TCXO, 1, 0, 0),
818 F(171428571, P_GPLL0_OUT_EARLY, 3.5, 0, 0),
819 F(240000000, P_GPLL0_OUT_EARLY, 2.5, 0, 0),
820 { }
821 };
822
823 static struct clk_rcg2 gcc_camss_ope_ahb_clk_src = {
824 .cmd_rcgr = 0x55024,
825 .mnd_width = 0,
826 .hid_width = 5,
827 .parent_map = gcc_parent_map_6,
828 .freq_tbl = ftbl_gcc_camss_ope_ahb_clk_src,
829 .clkr.hw.init = &(struct clk_init_data){
830 .name = "gcc_camss_ope_ahb_clk_src",
831 .parent_data = gcc_parents_6,
832 .num_parents = ARRAY_SIZE(gcc_parents_6),
833 .ops = &clk_rcg2_shared_ops,
834 },
835 };
836
837 static const struct freq_tbl ftbl_gcc_camss_ope_clk_src[] = {
838 F(19200000, P_BI_TCXO, 1, 0, 0),
839 F(200000000, P_GPLL8_OUT_MAIN, 2, 0, 0),
840 F(266600000, P_GPLL8_OUT_MAIN, 1, 0, 0),
841 F(465000000, P_GPLL8_OUT_MAIN, 1, 0, 0),
842 F(580000000, P_GPLL8_OUT_EARLY, 1, 0, 0),
843 { }
844 };
845
846 static struct clk_rcg2 gcc_camss_ope_clk_src = {
847 .cmd_rcgr = 0x55004,
848 .mnd_width = 0,
849 .hid_width = 5,
850 .parent_map = gcc_parent_map_6,
851 .freq_tbl = ftbl_gcc_camss_ope_clk_src,
852 .clkr.hw.init = &(struct clk_init_data){
853 .name = "gcc_camss_ope_clk_src",
854 .parent_data = gcc_parents_6,
855 .num_parents = ARRAY_SIZE(gcc_parents_6),
856 .flags = CLK_SET_RATE_PARENT,
857 .ops = &clk_rcg2_shared_ops,
858 },
859 };
860
861 static const struct freq_tbl ftbl_gcc_camss_tfe_0_clk_src[] = {
862 F(19200000, P_BI_TCXO, 1, 0, 0),
863 F(128000000, P_GPLL10_OUT_MAIN, 9, 0, 0),
864 F(135529412, P_GPLL10_OUT_MAIN, 8.5, 0, 0),
865 F(144000000, P_GPLL10_OUT_MAIN, 8, 0, 0),
866 F(153600000, P_GPLL10_OUT_MAIN, 7.5, 0, 0),
867 F(164571429, P_GPLL10_OUT_MAIN, 7, 0, 0),
868 F(177230769, P_GPLL10_OUT_MAIN, 6.5, 0, 0),
869 F(192000000, P_GPLL10_OUT_MAIN, 6, 0, 0),
870 F(209454545, P_GPLL10_OUT_MAIN, 5.5, 0, 0),
871 F(230400000, P_GPLL10_OUT_MAIN, 5, 0, 0),
872 F(256000000, P_GPLL10_OUT_MAIN, 4.5, 0, 0),
873 F(288000000, P_GPLL10_OUT_MAIN, 4, 0, 0),
874 F(329142857, P_GPLL10_OUT_MAIN, 3.5, 0, 0),
875 F(384000000, P_GPLL10_OUT_MAIN, 3, 0, 0),
876 F(460800000, P_GPLL10_OUT_MAIN, 2.5, 0, 0),
877 F(576000000, P_GPLL10_OUT_MAIN, 2, 0, 0),
878 { }
879 };
880
881 static struct clk_rcg2 gcc_camss_tfe_0_clk_src = {
882 .cmd_rcgr = 0x52004,
883 .mnd_width = 8,
884 .hid_width = 5,
885 .parent_map = gcc_parent_map_7,
886 .freq_tbl = ftbl_gcc_camss_tfe_0_clk_src,
887 .clkr.hw.init = &(struct clk_init_data){
888 .name = "gcc_camss_tfe_0_clk_src",
889 .parent_data = gcc_parents_7,
890 .num_parents = ARRAY_SIZE(gcc_parents_7),
891 .ops = &clk_rcg2_shared_ops,
892 },
893 };
894
895 static const struct freq_tbl ftbl_gcc_camss_tfe_0_csid_clk_src[] = {
896 F(19200000, P_BI_TCXO, 1, 0, 0),
897 F(120000000, P_GPLL0_OUT_EARLY, 5, 0, 0),
898 F(192000000, P_GPLL6_OUT_MAIN, 2, 0, 0),
899 F(240000000, P_GPLL0_OUT_EARLY, 2.5, 0, 0),
900 F(384000000, P_GPLL6_OUT_MAIN, 1, 0, 0),
901 F(426400000, P_GPLL3_OUT_EARLY, 2.5, 0, 0),
902 { }
903 };
904
905 static struct clk_rcg2 gcc_camss_tfe_0_csid_clk_src = {
906 .cmd_rcgr = 0x52094,
907 .mnd_width = 0,
908 .hid_width = 5,
909 .parent_map = gcc_parent_map_8,
910 .freq_tbl = ftbl_gcc_camss_tfe_0_csid_clk_src,
911 .clkr.hw.init = &(struct clk_init_data){
912 .name = "gcc_camss_tfe_0_csid_clk_src",
913 .parent_data = gcc_parents_8,
914 .num_parents = ARRAY_SIZE(gcc_parents_8),
915 .ops = &clk_rcg2_shared_ops,
916 },
917 };
918
919 static struct clk_rcg2 gcc_camss_tfe_1_clk_src = {
920 .cmd_rcgr = 0x52024,
921 .mnd_width = 8,
922 .hid_width = 5,
923 .parent_map = gcc_parent_map_7,
924 .freq_tbl = ftbl_gcc_camss_tfe_0_clk_src,
925 .clkr.hw.init = &(struct clk_init_data){
926 .name = "gcc_camss_tfe_1_clk_src",
927 .parent_data = gcc_parents_7,
928 .num_parents = ARRAY_SIZE(gcc_parents_7),
929 .ops = &clk_rcg2_shared_ops,
930 },
931 };
932
933 static struct clk_rcg2 gcc_camss_tfe_1_csid_clk_src = {
934 .cmd_rcgr = 0x520b4,
935 .mnd_width = 0,
936 .hid_width = 5,
937 .parent_map = gcc_parent_map_8,
938 .freq_tbl = ftbl_gcc_camss_tfe_0_csid_clk_src,
939 .clkr.hw.init = &(struct clk_init_data){
940 .name = "gcc_camss_tfe_1_csid_clk_src",
941 .parent_data = gcc_parents_8,
942 .num_parents = ARRAY_SIZE(gcc_parents_8),
943 .ops = &clk_rcg2_shared_ops,
944 },
945 };
946
947 static const struct freq_tbl ftbl_gcc_camss_tfe_cphy_rx_clk_src[] = {
948 F(19200000, P_BI_TCXO, 1, 0, 0),
949 F(240000000, P_GPLL0_OUT_EARLY, 2.5, 0, 0),
950 F(341333333, P_GPLL6_OUT_EARLY, 1, 4, 9),
951 F(384000000, P_GPLL6_OUT_EARLY, 2, 0, 0),
952 { }
953 };
954
955 static struct clk_rcg2 gcc_camss_tfe_cphy_rx_clk_src = {
956 .cmd_rcgr = 0x52064,
957 .mnd_width = 16,
958 .hid_width = 5,
959 .parent_map = gcc_parent_map_10,
960 .freq_tbl = ftbl_gcc_camss_tfe_cphy_rx_clk_src,
961 .clkr.hw.init = &(struct clk_init_data){
962 .name = "gcc_camss_tfe_cphy_rx_clk_src",
963 .parent_data = gcc_parents_10,
964 .num_parents = ARRAY_SIZE(gcc_parents_10),
965 .flags = CLK_OPS_PARENT_ENABLE,
966 .ops = &clk_rcg2_shared_ops,
967 },
968 };
969
970 static const struct freq_tbl ftbl_gcc_camss_top_ahb_clk_src[] = {
971 F(19200000, P_BI_TCXO, 1, 0, 0),
972 F(40000000, P_GPLL0_OUT_AUX2, 7.5, 0, 0),
973 F(80000000, P_GPLL0_OUT_EARLY, 7.5, 0, 0),
974 { }
975 };
976
977 static struct clk_rcg2 gcc_camss_top_ahb_clk_src = {
978 .cmd_rcgr = 0x58010,
979 .mnd_width = 0,
980 .hid_width = 5,
981 .parent_map = gcc_parent_map_4,
982 .freq_tbl = ftbl_gcc_camss_top_ahb_clk_src,
983 .clkr.hw.init = &(struct clk_init_data){
984 .name = "gcc_camss_top_ahb_clk_src",
985 .parent_data = gcc_parents_4,
986 .num_parents = ARRAY_SIZE(gcc_parents_4),
987 .ops = &clk_rcg2_shared_ops,
988 },
989 };
990
991 static const struct freq_tbl ftbl_gcc_gp1_clk_src[] = {
992 F(25000000, P_GPLL0_OUT_AUX2, 12, 0, 0),
993 F(50000000, P_GPLL0_OUT_AUX2, 6, 0, 0),
994 F(100000000, P_GPLL0_OUT_AUX2, 3, 0, 0),
995 F(200000000, P_GPLL0_OUT_AUX2, 1.5, 0, 0),
996 { }
997 };
998
999 static struct clk_rcg2 gcc_gp1_clk_src = {
1000 .cmd_rcgr = 0x4d004,
1001 .mnd_width = 8,
1002 .hid_width = 5,
1003 .parent_map = gcc_parent_map_2,
1004 .freq_tbl = ftbl_gcc_gp1_clk_src,
1005 .clkr.hw.init = &(struct clk_init_data){
1006 .name = "gcc_gp1_clk_src",
1007 .parent_data = gcc_parents_2,
1008 .num_parents = ARRAY_SIZE(gcc_parents_2),
1009 .ops = &clk_rcg2_shared_ops,
1010 },
1011 };
1012
1013 static struct clk_rcg2 gcc_gp2_clk_src = {
1014 .cmd_rcgr = 0x4e004,
1015 .mnd_width = 8,
1016 .hid_width = 5,
1017 .parent_map = gcc_parent_map_2,
1018 .freq_tbl = ftbl_gcc_gp1_clk_src,
1019 .clkr.hw.init = &(struct clk_init_data){
1020 .name = "gcc_gp2_clk_src",
1021 .parent_data = gcc_parents_2,
1022 .num_parents = ARRAY_SIZE(gcc_parents_2),
1023 .ops = &clk_rcg2_shared_ops,
1024 },
1025 };
1026
1027 static struct clk_rcg2 gcc_gp3_clk_src = {
1028 .cmd_rcgr = 0x4f004,
1029 .mnd_width = 8,
1030 .hid_width = 5,
1031 .parent_map = gcc_parent_map_2,
1032 .freq_tbl = ftbl_gcc_gp1_clk_src,
1033 .clkr.hw.init = &(struct clk_init_data){
1034 .name = "gcc_gp3_clk_src",
1035 .parent_data = gcc_parents_2,
1036 .num_parents = ARRAY_SIZE(gcc_parents_2),
1037 .ops = &clk_rcg2_shared_ops,
1038 },
1039 };
1040
1041 static const struct freq_tbl ftbl_gcc_pdm2_clk_src[] = {
1042 F(19200000, P_BI_TCXO, 1, 0, 0),
1043 F(60000000, P_GPLL0_OUT_AUX2, 5, 0, 0),
1044 { }
1045 };
1046
1047 static struct clk_rcg2 gcc_pdm2_clk_src = {
1048 .cmd_rcgr = 0x20010,
1049 .mnd_width = 0,
1050 .hid_width = 5,
1051 .parent_map = gcc_parent_map_0,
1052 .freq_tbl = ftbl_gcc_pdm2_clk_src,
1053 .clkr.hw.init = &(struct clk_init_data){
1054 .name = "gcc_pdm2_clk_src",
1055 .parent_data = gcc_parents_0,
1056 .num_parents = ARRAY_SIZE(gcc_parents_0),
1057 .ops = &clk_rcg2_shared_ops,
1058 },
1059 };
1060
1061 static const struct freq_tbl ftbl_gcc_qupv3_wrap0_s0_clk_src[] = {
1062 F(7372800, P_GPLL0_OUT_AUX2, 1, 384, 15625),
1063 F(14745600, P_GPLL0_OUT_AUX2, 1, 768, 15625),
1064 F(19200000, P_BI_TCXO, 1, 0, 0),
1065 F(29491200, P_GPLL0_OUT_AUX2, 1, 1536, 15625),
1066 F(32000000, P_GPLL0_OUT_AUX2, 1, 8, 75),
1067 F(48000000, P_GPLL0_OUT_AUX2, 1, 4, 25),
1068 F(64000000, P_GPLL0_OUT_AUX2, 1, 16, 75),
1069 F(75000000, P_GPLL0_OUT_AUX2, 4, 0, 0),
1070 F(80000000, P_GPLL0_OUT_AUX2, 1, 4, 15),
1071 F(96000000, P_GPLL0_OUT_AUX2, 1, 8, 25),
1072 F(100000000, P_GPLL0_OUT_AUX2, 3, 0, 0),
1073 F(102400000, P_GPLL0_OUT_AUX2, 1, 128, 375),
1074 F(112000000, P_GPLL0_OUT_AUX2, 1, 28, 75),
1075 F(117964800, P_GPLL0_OUT_AUX2, 1, 6144, 15625),
1076 F(120000000, P_GPLL0_OUT_AUX2, 2.5, 0, 0),
1077 F(128000000, P_GPLL6_OUT_MAIN, 3, 0, 0),
1078 { }
1079 };
1080
1081 static struct clk_init_data gcc_qupv3_wrap0_s0_clk_src_init = {
1082 .name = "gcc_qupv3_wrap0_s0_clk_src",
1083 .parent_data = gcc_parents_1,
1084 .num_parents = ARRAY_SIZE(gcc_parents_1),
1085 .ops = &clk_rcg2_shared_ops,
1086 };
1087
1088 static struct clk_rcg2 gcc_qupv3_wrap0_s0_clk_src = {
1089 .cmd_rcgr = 0x1f148,
1090 .mnd_width = 16,
1091 .hid_width = 5,
1092 .parent_map = gcc_parent_map_1,
1093 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
1094 .clkr.hw.init = &gcc_qupv3_wrap0_s0_clk_src_init,
1095 };
1096
1097 static struct clk_init_data gcc_qupv3_wrap0_s1_clk_src_init = {
1098 .name = "gcc_qupv3_wrap0_s1_clk_src",
1099 .parent_data = gcc_parents_1,
1100 .num_parents = ARRAY_SIZE(gcc_parents_1),
1101 .ops = &clk_rcg2_shared_ops,
1102 };
1103
1104 static struct clk_rcg2 gcc_qupv3_wrap0_s1_clk_src = {
1105 .cmd_rcgr = 0x1f278,
1106 .mnd_width = 16,
1107 .hid_width = 5,
1108 .parent_map = gcc_parent_map_1,
1109 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
1110 .clkr.hw.init = &gcc_qupv3_wrap0_s1_clk_src_init,
1111 };
1112
1113 static struct clk_init_data gcc_qupv3_wrap0_s2_clk_src_init = {
1114 .name = "gcc_qupv3_wrap0_s2_clk_src",
1115 .parent_data = gcc_parents_1,
1116 .num_parents = ARRAY_SIZE(gcc_parents_1),
1117 .ops = &clk_rcg2_shared_ops,
1118 };
1119
1120 static struct clk_rcg2 gcc_qupv3_wrap0_s2_clk_src = {
1121 .cmd_rcgr = 0x1f3a8,
1122 .mnd_width = 16,
1123 .hid_width = 5,
1124 .parent_map = gcc_parent_map_1,
1125 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
1126 .clkr.hw.init = &gcc_qupv3_wrap0_s2_clk_src_init,
1127 };
1128
1129 static struct clk_init_data gcc_qupv3_wrap0_s3_clk_src_init = {
1130 .name = "gcc_qupv3_wrap0_s3_clk_src",
1131 .parent_data = gcc_parents_1,
1132 .num_parents = ARRAY_SIZE(gcc_parents_1),
1133 .ops = &clk_rcg2_shared_ops,
1134 };
1135
1136 static struct clk_rcg2 gcc_qupv3_wrap0_s3_clk_src = {
1137 .cmd_rcgr = 0x1f4d8,
1138 .mnd_width = 16,
1139 .hid_width = 5,
1140 .parent_map = gcc_parent_map_1,
1141 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
1142 .clkr.hw.init = &gcc_qupv3_wrap0_s3_clk_src_init,
1143 };
1144
1145 static struct clk_init_data gcc_qupv3_wrap0_s4_clk_src_init = {
1146 .name = "gcc_qupv3_wrap0_s4_clk_src",
1147 .parent_data = gcc_parents_1,
1148 .num_parents = ARRAY_SIZE(gcc_parents_1),
1149 .ops = &clk_rcg2_shared_ops,
1150 };
1151
1152 static struct clk_rcg2 gcc_qupv3_wrap0_s4_clk_src = {
1153 .cmd_rcgr = 0x1f608,
1154 .mnd_width = 16,
1155 .hid_width = 5,
1156 .parent_map = gcc_parent_map_1,
1157 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
1158 .clkr.hw.init = &gcc_qupv3_wrap0_s4_clk_src_init,
1159 };
1160
1161 static struct clk_init_data gcc_qupv3_wrap0_s5_clk_src_init = {
1162 .name = "gcc_qupv3_wrap0_s5_clk_src",
1163 .parent_data = gcc_parents_1,
1164 .num_parents = ARRAY_SIZE(gcc_parents_1),
1165 .ops = &clk_rcg2_shared_ops,
1166 };
1167
1168 static struct clk_rcg2 gcc_qupv3_wrap0_s5_clk_src = {
1169 .cmd_rcgr = 0x1f738,
1170 .mnd_width = 16,
1171 .hid_width = 5,
1172 .parent_map = gcc_parent_map_1,
1173 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
1174 .clkr.hw.init = &gcc_qupv3_wrap0_s5_clk_src_init,
1175 };
1176
1177 static const struct freq_tbl ftbl_gcc_sdcc1_apps_clk_src[] = {
1178 F(144000, P_BI_TCXO, 16, 3, 25),
1179 F(400000, P_BI_TCXO, 12, 1, 4),
1180 F(20000000, P_GPLL0_OUT_AUX2, 5, 1, 3),
1181 F(25000000, P_GPLL0_OUT_AUX2, 6, 1, 2),
1182 F(50000000, P_GPLL0_OUT_AUX2, 6, 0, 0),
1183 F(100000000, P_GPLL0_OUT_AUX2, 3, 0, 0),
1184 F(192000000, P_GPLL6_OUT_MAIN, 2, 0, 0),
1185 F(384000000, P_GPLL6_OUT_MAIN, 1, 0, 0),
1186 { }
1187 };
1188
1189 static struct clk_rcg2 gcc_sdcc1_apps_clk_src = {
1190 .cmd_rcgr = 0x38028,
1191 .mnd_width = 8,
1192 .hid_width = 5,
1193 .parent_map = gcc_parent_map_1,
1194 .freq_tbl = ftbl_gcc_sdcc1_apps_clk_src,
1195 .clkr.hw.init = &(struct clk_init_data){
1196 .name = "gcc_sdcc1_apps_clk_src",
1197 .parent_data = gcc_parents_1,
1198 .num_parents = ARRAY_SIZE(gcc_parents_1),
1199 .ops = &clk_rcg2_floor_ops,
1200 },
1201 };
1202
1203 static const struct freq_tbl ftbl_gcc_sdcc1_ice_core_clk_src[] = {
1204 F(75000000, P_GPLL0_OUT_AUX2, 4, 0, 0),
1205 F(100000000, P_GPLL0_OUT_AUX2, 3, 0, 0),
1206 F(150000000, P_GPLL0_OUT_AUX2, 2, 0, 0),
1207 F(200000000, P_GPLL0_OUT_EARLY, 3, 0, 0),
1208 F(300000000, P_GPLL0_OUT_AUX2, 1, 0, 0),
1209 { }
1210 };
1211
1212 static struct clk_rcg2 gcc_sdcc1_ice_core_clk_src = {
1213 .cmd_rcgr = 0x38010,
1214 .mnd_width = 0,
1215 .hid_width = 5,
1216 .parent_map = gcc_parent_map_0,
1217 .freq_tbl = ftbl_gcc_sdcc1_ice_core_clk_src,
1218 .clkr.hw.init = &(struct clk_init_data){
1219 .name = "gcc_sdcc1_ice_core_clk_src",
1220 .parent_data = gcc_parents_0,
1221 .num_parents = ARRAY_SIZE(gcc_parents_0),
1222 .ops = &clk_rcg2_shared_ops,
1223 },
1224 };
1225
1226 static const struct freq_tbl ftbl_gcc_sdcc2_apps_clk_src[] = {
1227 F(400000, P_BI_TCXO, 12, 1, 4),
1228 F(19200000, P_BI_TCXO, 1, 0, 0),
1229 F(25000000, P_GPLL0_OUT_AUX2, 12, 0, 0),
1230 F(50000000, P_GPLL0_OUT_AUX2, 6, 0, 0),
1231 F(100000000, P_GPLL0_OUT_AUX2, 3, 0, 0),
1232 F(202000000, P_GPLL7_OUT_MAIN, 4, 0, 0),
1233 { }
1234 };
1235
1236 static struct clk_rcg2 gcc_sdcc2_apps_clk_src = {
1237 .cmd_rcgr = 0x1e00c,
1238 .mnd_width = 8,
1239 .hid_width = 5,
1240 .parent_map = gcc_parent_map_12,
1241 .freq_tbl = ftbl_gcc_sdcc2_apps_clk_src,
1242 .clkr.hw.init = &(struct clk_init_data){
1243 .name = "gcc_sdcc2_apps_clk_src",
1244 .parent_data = gcc_parents_12,
1245 .num_parents = ARRAY_SIZE(gcc_parents_12),
1246 .ops = &clk_rcg2_floor_ops,
1247 .flags = CLK_OPS_PARENT_ENABLE,
1248 },
1249 };
1250
1251 static const struct freq_tbl ftbl_gcc_usb30_prim_master_clk_src[] = {
1252 F(66666667, P_GPLL0_OUT_AUX2, 4.5, 0, 0),
1253 F(133333333, P_GPLL0_OUT_EARLY, 4.5, 0, 0),
1254 F(200000000, P_GPLL0_OUT_EARLY, 3, 0, 0),
1255 F(240000000, P_GPLL0_OUT_EARLY, 2.5, 0, 0),
1256 { }
1257 };
1258
1259 static struct clk_rcg2 gcc_usb30_prim_master_clk_src = {
1260 .cmd_rcgr = 0x1a01c,
1261 .mnd_width = 8,
1262 .hid_width = 5,
1263 .parent_map = gcc_parent_map_0,
1264 .freq_tbl = ftbl_gcc_usb30_prim_master_clk_src,
1265 .clkr.hw.init = &(struct clk_init_data){
1266 .name = "gcc_usb30_prim_master_clk_src",
1267 .parent_data = gcc_parents_0,
1268 .num_parents = ARRAY_SIZE(gcc_parents_0),
1269 .ops = &clk_rcg2_shared_ops,
1270 },
1271 };
1272
1273 static struct clk_rcg2 gcc_usb3_prim_phy_aux_clk_src = {
1274 .cmd_rcgr = 0x1a060,
1275 .mnd_width = 0,
1276 .hid_width = 5,
1277 .parent_map = gcc_parent_map_13,
1278 .freq_tbl = ftbl_gcc_usb30_prim_mock_utmi_clk_src,
1279 .clkr.hw.init = &(struct clk_init_data){
1280 .name = "gcc_usb3_prim_phy_aux_clk_src",
1281 .parent_data = gcc_parents_13,
1282 .num_parents = ARRAY_SIZE(gcc_parents_13),
1283 .ops = &clk_rcg2_shared_ops,
1284 },
1285 };
1286
1287 static const struct freq_tbl ftbl_gcc_video_venus_clk_src[] = {
1288 F(133333333, P_GPLL11_OUT_MAIN, 4.5, 0, 0),
1289 F(240000000, P_GPLL11_OUT_MAIN, 2.5, 0, 0),
1290 F(300000000, P_GPLL11_OUT_MAIN, 2, 0, 0),
1291 F(384000000, P_GPLL11_OUT_MAIN, 2, 0, 0),
1292 { }
1293 };
1294
1295 static struct clk_rcg2 gcc_video_venus_clk_src = {
1296 .cmd_rcgr = 0x58060,
1297 .mnd_width = 0,
1298 .hid_width = 5,
1299 .parent_map = gcc_parent_map_14,
1300 .freq_tbl = ftbl_gcc_video_venus_clk_src,
1301 .clkr.hw.init = &(struct clk_init_data){
1302 .name = "gcc_video_venus_clk_src",
1303 .parent_data = gcc_parents_14,
1304 .num_parents = ARRAY_SIZE(gcc_parents_14),
1305 .flags = CLK_SET_RATE_PARENT,
1306 .ops = &clk_rcg2_shared_ops,
1307 },
1308 };
1309
1310 static struct clk_branch gcc_ahb2phy_csi_clk = {
1311 .halt_reg = 0x1d004,
1312 .halt_check = BRANCH_HALT_DELAY,
1313 .hwcg_reg = 0x1d004,
1314 .hwcg_bit = 1,
1315 .clkr = {
1316 .enable_reg = 0x1d004,
1317 .enable_mask = BIT(0),
1318 .hw.init = &(struct clk_init_data){
1319 .name = "gcc_ahb2phy_csi_clk",
1320 .ops = &clk_branch2_ops,
1321 },
1322 },
1323 };
1324
1325 static struct clk_branch gcc_ahb2phy_usb_clk = {
1326 .halt_reg = 0x1d008,
1327 .halt_check = BRANCH_HALT,
1328 .hwcg_reg = 0x1d008,
1329 .hwcg_bit = 1,
1330 .clkr = {
1331 .enable_reg = 0x1d008,
1332 .enable_mask = BIT(0),
1333 .hw.init = &(struct clk_init_data){
1334 .name = "gcc_ahb2phy_usb_clk",
1335 .ops = &clk_branch2_ops,
1336 },
1337 },
1338 };
1339
1340 static struct clk_branch gcc_bimc_gpu_axi_clk = {
1341 .halt_reg = 0x71154,
1342 .halt_check = BRANCH_HALT_DELAY,
1343 .hwcg_reg = 0x71154,
1344 .hwcg_bit = 1,
1345 .clkr = {
1346 .enable_reg = 0x71154,
1347 .enable_mask = BIT(0),
1348 .hw.init = &(struct clk_init_data){
1349 .name = "gcc_bimc_gpu_axi_clk",
1350 .ops = &clk_branch2_ops,
1351 },
1352 },
1353 };
1354
1355 static struct clk_branch gcc_boot_rom_ahb_clk = {
1356 .halt_reg = 0x23004,
1357 .halt_check = BRANCH_HALT_VOTED,
1358 .hwcg_reg = 0x23004,
1359 .hwcg_bit = 1,
1360 .clkr = {
1361 .enable_reg = 0x79004,
1362 .enable_mask = BIT(10),
1363 .hw.init = &(struct clk_init_data){
1364 .name = "gcc_boot_rom_ahb_clk",
1365 .ops = &clk_branch2_ops,
1366 },
1367 },
1368 };
1369
1370 static struct clk_branch gcc_cam_throttle_nrt_clk = {
1371 .halt_reg = 0x17070,
1372 .halt_check = BRANCH_HALT_VOTED,
1373 .hwcg_reg = 0x17070,
1374 .hwcg_bit = 1,
1375 .clkr = {
1376 .enable_reg = 0x79004,
1377 .enable_mask = BIT(27),
1378 .hw.init = &(struct clk_init_data){
1379 .name = "gcc_cam_throttle_nrt_clk",
1380 .ops = &clk_branch2_ops,
1381 },
1382 },
1383 };
1384
1385 static struct clk_branch gcc_cam_throttle_rt_clk = {
1386 .halt_reg = 0x1706c,
1387 .halt_check = BRANCH_HALT_VOTED,
1388 .hwcg_reg = 0x1706c,
1389 .hwcg_bit = 1,
1390 .clkr = {
1391 .enable_reg = 0x79004,
1392 .enable_mask = BIT(26),
1393 .hw.init = &(struct clk_init_data){
1394 .name = "gcc_cam_throttle_rt_clk",
1395 .ops = &clk_branch2_ops,
1396 },
1397 },
1398 };
1399
1400 static struct clk_branch gcc_camera_ahb_clk = {
1401 .halt_reg = 0x17008,
1402 .halt_check = BRANCH_HALT_DELAY,
1403 .hwcg_reg = 0x17008,
1404 .hwcg_bit = 1,
1405 .clkr = {
1406 .enable_reg = 0x17008,
1407 .enable_mask = BIT(0),
1408 .hw.init = &(struct clk_init_data){
1409 .name = "gcc_camera_ahb_clk",
1410 .flags = CLK_IS_CRITICAL,
1411 .ops = &clk_branch2_ops,
1412 },
1413 },
1414 };
1415
1416 static struct clk_branch gcc_camera_xo_clk = {
1417 .halt_reg = 0x17028,
1418 .halt_check = BRANCH_HALT,
1419 .clkr = {
1420 .enable_reg = 0x17028,
1421 .enable_mask = BIT(0),
1422 .hw.init = &(struct clk_init_data){
1423 .name = "gcc_camera_xo_clk",
1424 .flags = CLK_IS_CRITICAL,
1425 .ops = &clk_branch2_ops,
1426 },
1427 },
1428 };
1429
1430 static struct clk_branch gcc_camss_axi_clk = {
1431 .halt_reg = 0x58044,
1432 .halt_check = BRANCH_HALT,
1433 .clkr = {
1434 .enable_reg = 0x58044,
1435 .enable_mask = BIT(0),
1436 .hw.init = &(struct clk_init_data){
1437 .name = "gcc_camss_axi_clk",
1438 .parent_hws = (const struct clk_hw *[])
1439 { &gcc_camss_axi_clk_src.clkr.hw },
1440 .num_parents = 1,
1441 .flags = CLK_SET_RATE_PARENT,
1442 .ops = &clk_branch2_ops,
1443 },
1444 },
1445 };
1446
1447 static struct clk_branch gcc_camss_camnoc_atb_clk = {
1448 .halt_reg = 0x5804c,
1449 .halt_check = BRANCH_HALT_DELAY,
1450 .hwcg_reg = 0x5804c,
1451 .hwcg_bit = 1,
1452 .clkr = {
1453 .enable_reg = 0x5804c,
1454 .enable_mask = BIT(0),
1455 .hw.init = &(struct clk_init_data){
1456 .name = "gcc_camss_camnoc_atb_clk",
1457 .ops = &clk_branch2_ops,
1458 },
1459 },
1460 };
1461
1462 static struct clk_branch gcc_camss_camnoc_nts_xo_clk = {
1463 .halt_reg = 0x58050,
1464 .halt_check = BRANCH_HALT_DELAY,
1465 .hwcg_reg = 0x58050,
1466 .hwcg_bit = 1,
1467 .clkr = {
1468 .enable_reg = 0x58050,
1469 .enable_mask = BIT(0),
1470 .hw.init = &(struct clk_init_data){
1471 .name = "gcc_camss_camnoc_nts_xo_clk",
1472 .ops = &clk_branch2_ops,
1473 },
1474 },
1475 };
1476
1477 static struct clk_branch gcc_camss_cci_0_clk = {
1478 .halt_reg = 0x56018,
1479 .halt_check = BRANCH_HALT,
1480 .clkr = {
1481 .enable_reg = 0x56018,
1482 .enable_mask = BIT(0),
1483 .hw.init = &(struct clk_init_data){
1484 .name = "gcc_camss_cci_0_clk",
1485 .parent_hws = (const struct clk_hw *[])
1486 { &gcc_camss_cci_clk_src.clkr.hw },
1487 .num_parents = 1,
1488 .flags = CLK_SET_RATE_PARENT,
1489 .ops = &clk_branch2_ops,
1490 },
1491 },
1492 };
1493
1494 static struct clk_branch gcc_camss_cphy_0_clk = {
1495 .halt_reg = 0x52088,
1496 .halt_check = BRANCH_HALT,
1497 .clkr = {
1498 .enable_reg = 0x52088,
1499 .enable_mask = BIT(0),
1500 .hw.init = &(struct clk_init_data){
1501 .name = "gcc_camss_cphy_0_clk",
1502 .parent_hws = (const struct clk_hw *[])
1503 { &gcc_camss_tfe_cphy_rx_clk_src.clkr.hw },
1504 .num_parents = 1,
1505 .flags = CLK_SET_RATE_PARENT,
1506 .ops = &clk_branch2_ops,
1507 },
1508 },
1509 };
1510
1511 static struct clk_branch gcc_camss_cphy_1_clk = {
1512 .halt_reg = 0x5208c,
1513 .halt_check = BRANCH_HALT,
1514 .clkr = {
1515 .enable_reg = 0x5208c,
1516 .enable_mask = BIT(0),
1517 .hw.init = &(struct clk_init_data){
1518 .name = "gcc_camss_cphy_1_clk",
1519 .parent_hws = (const struct clk_hw *[])
1520 { &gcc_camss_tfe_cphy_rx_clk_src.clkr.hw },
1521 .num_parents = 1,
1522 .flags = CLK_SET_RATE_PARENT,
1523 .ops = &clk_branch2_ops,
1524 },
1525 },
1526 };
1527
1528 static struct clk_branch gcc_camss_csi0phytimer_clk = {
1529 .halt_reg = 0x45018,
1530 .halt_check = BRANCH_HALT,
1531 .clkr = {
1532 .enable_reg = 0x45018,
1533 .enable_mask = BIT(0),
1534 .hw.init = &(struct clk_init_data){
1535 .name = "gcc_camss_csi0phytimer_clk",
1536 .parent_hws = (const struct clk_hw *[])
1537 { &gcc_camss_csi0phytimer_clk_src.clkr.hw },
1538 .num_parents = 1,
1539 .flags = CLK_SET_RATE_PARENT,
1540 .ops = &clk_branch2_ops,
1541 },
1542 },
1543 };
1544
1545 static struct clk_branch gcc_camss_csi1phytimer_clk = {
1546 .halt_reg = 0x45034,
1547 .halt_check = BRANCH_HALT,
1548 .clkr = {
1549 .enable_reg = 0x45034,
1550 .enable_mask = BIT(0),
1551 .hw.init = &(struct clk_init_data){
1552 .name = "gcc_camss_csi1phytimer_clk",
1553 .parent_hws = (const struct clk_hw *[])
1554 { &gcc_camss_csi1phytimer_clk_src.clkr.hw },
1555 .num_parents = 1,
1556 .flags = CLK_SET_RATE_PARENT,
1557 .ops = &clk_branch2_ops,
1558 },
1559 },
1560 };
1561
1562 static struct clk_branch gcc_camss_mclk0_clk = {
1563 .halt_reg = 0x51018,
1564 .halt_check = BRANCH_HALT,
1565 .clkr = {
1566 .enable_reg = 0x51018,
1567 .enable_mask = BIT(0),
1568 .hw.init = &(struct clk_init_data){
1569 .name = "gcc_camss_mclk0_clk",
1570 .parent_hws = (const struct clk_hw *[])
1571 { &gcc_camss_mclk0_clk_src.clkr.hw },
1572 .num_parents = 1,
1573 .flags = CLK_SET_RATE_PARENT,
1574 .ops = &clk_branch2_ops,
1575 },
1576 },
1577 };
1578
1579 static struct clk_branch gcc_camss_mclk1_clk = {
1580 .halt_reg = 0x51034,
1581 .halt_check = BRANCH_HALT,
1582 .clkr = {
1583 .enable_reg = 0x51034,
1584 .enable_mask = BIT(0),
1585 .hw.init = &(struct clk_init_data){
1586 .name = "gcc_camss_mclk1_clk",
1587 .parent_hws = (const struct clk_hw *[])
1588 { &gcc_camss_mclk1_clk_src.clkr.hw },
1589 .num_parents = 1,
1590 .flags = CLK_SET_RATE_PARENT,
1591 .ops = &clk_branch2_ops,
1592 },
1593 },
1594 };
1595
1596 static struct clk_branch gcc_camss_mclk2_clk = {
1597 .halt_reg = 0x51050,
1598 .halt_check = BRANCH_HALT,
1599 .clkr = {
1600 .enable_reg = 0x51050,
1601 .enable_mask = BIT(0),
1602 .hw.init = &(struct clk_init_data){
1603 .name = "gcc_camss_mclk2_clk",
1604 .parent_hws = (const struct clk_hw *[])
1605 { &gcc_camss_mclk2_clk_src.clkr.hw },
1606 .num_parents = 1,
1607 .flags = CLK_SET_RATE_PARENT,
1608 .ops = &clk_branch2_ops,
1609 },
1610 },
1611 };
1612
1613 static struct clk_branch gcc_camss_mclk3_clk = {
1614 .halt_reg = 0x5106c,
1615 .halt_check = BRANCH_HALT,
1616 .clkr = {
1617 .enable_reg = 0x5106c,
1618 .enable_mask = BIT(0),
1619 .hw.init = &(struct clk_init_data){
1620 .name = "gcc_camss_mclk3_clk",
1621 .parent_hws = (const struct clk_hw *[])
1622 { &gcc_camss_mclk3_clk_src.clkr.hw },
1623 .num_parents = 1,
1624 .flags = CLK_SET_RATE_PARENT,
1625 .ops = &clk_branch2_ops,
1626 },
1627 },
1628 };
1629
1630 static struct clk_branch gcc_camss_nrt_axi_clk = {
1631 .halt_reg = 0x58054,
1632 .halt_check = BRANCH_HALT,
1633 .clkr = {
1634 .enable_reg = 0x58054,
1635 .enable_mask = BIT(0),
1636 .hw.init = &(struct clk_init_data){
1637 .name = "gcc_camss_nrt_axi_clk",
1638 .ops = &clk_branch2_ops,
1639 },
1640 },
1641 };
1642
1643 static struct clk_branch gcc_camss_ope_ahb_clk = {
1644 .halt_reg = 0x5503c,
1645 .halt_check = BRANCH_HALT,
1646 .clkr = {
1647 .enable_reg = 0x5503c,
1648 .enable_mask = BIT(0),
1649 .hw.init = &(struct clk_init_data){
1650 .name = "gcc_camss_ope_ahb_clk",
1651 .parent_hws = (const struct clk_hw *[])
1652 { &gcc_camss_ope_ahb_clk_src.clkr.hw },
1653 .num_parents = 1,
1654 .flags = CLK_SET_RATE_PARENT,
1655 .ops = &clk_branch2_ops,
1656 },
1657 },
1658 };
1659
1660 static struct clk_branch gcc_camss_ope_clk = {
1661 .halt_reg = 0x5501c,
1662 .halt_check = BRANCH_HALT,
1663 .clkr = {
1664 .enable_reg = 0x5501c,
1665 .enable_mask = BIT(0),
1666 .hw.init = &(struct clk_init_data){
1667 .name = "gcc_camss_ope_clk",
1668 .parent_hws = (const struct clk_hw *[])
1669 { &gcc_camss_ope_clk_src.clkr.hw },
1670 .num_parents = 1,
1671 .flags = CLK_SET_RATE_PARENT,
1672 .ops = &clk_branch2_ops,
1673 },
1674 },
1675 };
1676
1677 static struct clk_branch gcc_camss_rt_axi_clk = {
1678 .halt_reg = 0x5805c,
1679 .halt_check = BRANCH_HALT,
1680 .clkr = {
1681 .enable_reg = 0x5805c,
1682 .enable_mask = BIT(0),
1683 .hw.init = &(struct clk_init_data){
1684 .name = "gcc_camss_rt_axi_clk",
1685 .ops = &clk_branch2_ops,
1686 },
1687 },
1688 };
1689
1690 static struct clk_branch gcc_camss_tfe_0_clk = {
1691 .halt_reg = 0x5201c,
1692 .halt_check = BRANCH_HALT,
1693 .clkr = {
1694 .enable_reg = 0x5201c,
1695 .enable_mask = BIT(0),
1696 .hw.init = &(struct clk_init_data){
1697 .name = "gcc_camss_tfe_0_clk",
1698 .parent_hws = (const struct clk_hw *[])
1699 { &gcc_camss_tfe_0_clk_src.clkr.hw },
1700 .num_parents = 1,
1701 .flags = CLK_SET_RATE_PARENT,
1702 .ops = &clk_branch2_ops,
1703 },
1704 },
1705 };
1706
1707 static struct clk_branch gcc_camss_tfe_0_cphy_rx_clk = {
1708 .halt_reg = 0x5207c,
1709 .halt_check = BRANCH_HALT,
1710 .clkr = {
1711 .enable_reg = 0x5207c,
1712 .enable_mask = BIT(0),
1713 .hw.init = &(struct clk_init_data){
1714 .name = "gcc_camss_tfe_0_cphy_rx_clk",
1715 .parent_hws = (const struct clk_hw *[])
1716 { &gcc_camss_tfe_cphy_rx_clk_src.clkr.hw },
1717 .num_parents = 1,
1718 .flags = CLK_SET_RATE_PARENT,
1719 .ops = &clk_branch2_ops,
1720 },
1721 },
1722 };
1723
1724 static struct clk_branch gcc_camss_tfe_0_csid_clk = {
1725 .halt_reg = 0x520ac,
1726 .halt_check = BRANCH_HALT,
1727 .clkr = {
1728 .enable_reg = 0x520ac,
1729 .enable_mask = BIT(0),
1730 .hw.init = &(struct clk_init_data){
1731 .name = "gcc_camss_tfe_0_csid_clk",
1732 .parent_hws = (const struct clk_hw *[])
1733 { &gcc_camss_tfe_0_csid_clk_src.clkr.hw },
1734 .num_parents = 1,
1735 .flags = CLK_SET_RATE_PARENT,
1736 .ops = &clk_branch2_ops,
1737 },
1738 },
1739 };
1740
1741 static struct clk_branch gcc_camss_tfe_1_clk = {
1742 .halt_reg = 0x5203c,
1743 .halt_check = BRANCH_HALT,
1744 .clkr = {
1745 .enable_reg = 0x5203c,
1746 .enable_mask = BIT(0),
1747 .hw.init = &(struct clk_init_data){
1748 .name = "gcc_camss_tfe_1_clk",
1749 .parent_hws = (const struct clk_hw *[])
1750 { &gcc_camss_tfe_1_clk_src.clkr.hw },
1751 .num_parents = 1,
1752 .flags = CLK_SET_RATE_PARENT,
1753 .ops = &clk_branch2_ops,
1754 },
1755 },
1756 };
1757
1758 static struct clk_branch gcc_camss_tfe_1_cphy_rx_clk = {
1759 .halt_reg = 0x52080,
1760 .halt_check = BRANCH_HALT,
1761 .clkr = {
1762 .enable_reg = 0x52080,
1763 .enable_mask = BIT(0),
1764 .hw.init = &(struct clk_init_data){
1765 .name = "gcc_camss_tfe_1_cphy_rx_clk",
1766 .parent_hws = (const struct clk_hw *[])
1767 { &gcc_camss_tfe_cphy_rx_clk_src.clkr.hw },
1768 .num_parents = 1,
1769 .flags = CLK_SET_RATE_PARENT,
1770 .ops = &clk_branch2_ops,
1771 },
1772 },
1773 };
1774
1775 static struct clk_branch gcc_camss_tfe_1_csid_clk = {
1776 .halt_reg = 0x520cc,
1777 .halt_check = BRANCH_HALT,
1778 .clkr = {
1779 .enable_reg = 0x520cc,
1780 .enable_mask = BIT(0),
1781 .hw.init = &(struct clk_init_data){
1782 .name = "gcc_camss_tfe_1_csid_clk",
1783 .parent_hws = (const struct clk_hw *[])
1784 { &gcc_camss_tfe_1_csid_clk_src.clkr.hw },
1785 .num_parents = 1,
1786 .flags = CLK_SET_RATE_PARENT,
1787 .ops = &clk_branch2_ops,
1788 },
1789 },
1790 };
1791
1792 static struct clk_branch gcc_camss_top_ahb_clk = {
1793 .halt_reg = 0x58028,
1794 .halt_check = BRANCH_HALT,
1795 .clkr = {
1796 .enable_reg = 0x58028,
1797 .enable_mask = BIT(0),
1798 .hw.init = &(struct clk_init_data){
1799 .name = "gcc_camss_top_ahb_clk",
1800 .parent_hws = (const struct clk_hw *[])
1801 { &gcc_camss_top_ahb_clk_src.clkr.hw },
1802 .num_parents = 1,
1803 .flags = CLK_SET_RATE_PARENT,
1804 .ops = &clk_branch2_ops,
1805 },
1806 },
1807 };
1808
1809 static struct clk_branch gcc_cfg_noc_usb3_prim_axi_clk = {
1810 .halt_reg = 0x1a084,
1811 .halt_check = BRANCH_HALT,
1812 .hwcg_reg = 0x1a084,
1813 .hwcg_bit = 1,
1814 .clkr = {
1815 .enable_reg = 0x1a084,
1816 .enable_mask = BIT(0),
1817 .hw.init = &(struct clk_init_data){
1818 .name = "gcc_cfg_noc_usb3_prim_axi_clk",
1819 .parent_hws = (const struct clk_hw *[])
1820 { &gcc_usb30_prim_master_clk_src.clkr.hw },
1821 .num_parents = 1,
1822 .flags = CLK_SET_RATE_PARENT,
1823 .ops = &clk_branch2_ops,
1824 },
1825 },
1826 };
1827
1828 static struct clk_branch gcc_disp_ahb_clk = {
1829 .halt_reg = 0x1700c,
1830 .halt_check = BRANCH_HALT,
1831 .hwcg_reg = 0x1700c,
1832 .hwcg_bit = 1,
1833 .clkr = {
1834 .enable_reg = 0x1700c,
1835 .enable_mask = BIT(0),
1836 .hw.init = &(struct clk_init_data){
1837 .name = "gcc_disp_ahb_clk",
1838 .flags = CLK_IS_CRITICAL,
1839 .ops = &clk_branch2_ops,
1840 },
1841 },
1842 };
1843
1844 static struct clk_regmap_div gcc_disp_gpll0_clk_src = {
1845 .reg = 0x17058,
1846 .shift = 0,
1847 .width = 2,
1848 .clkr.hw.init = &(struct clk_init_data) {
1849 .name = "gcc_disp_gpll0_clk_src",
1850 .parent_hws = (const struct clk_hw *[]){ &gpll0.clkr.hw },
1851 .num_parents = 1,
1852 .ops = &clk_regmap_div_ops,
1853 },
1854 };
1855
1856 static struct clk_branch gcc_disp_gpll0_div_clk_src = {
1857 .halt_check = BRANCH_HALT_DELAY,
1858 .clkr = {
1859 .enable_reg = 0x79004,
1860 .enable_mask = BIT(20),
1861 .hw.init = &(struct clk_init_data){
1862 .name = "gcc_disp_gpll0_div_clk_src",
1863 .parent_hws = (const struct clk_hw *[])
1864 { &gcc_disp_gpll0_clk_src.clkr.hw },
1865 .num_parents = 1,
1866 .flags = CLK_SET_RATE_PARENT,
1867 .ops = &clk_branch2_ops,
1868 },
1869 },
1870 };
1871
1872 static struct clk_branch gcc_disp_hf_axi_clk = {
1873 .halt_reg = 0x17020,
1874 .halt_check = BRANCH_HALT,
1875 .hwcg_reg = 0x17020,
1876 .hwcg_bit = 1,
1877 .clkr = {
1878 .enable_reg = 0x17020,
1879 .enable_mask = BIT(0),
1880 .hw.init = &(struct clk_init_data){
1881 .name = "gcc_disp_hf_axi_clk",
1882 .ops = &clk_branch2_ops,
1883 },
1884 },
1885 };
1886
1887 static struct clk_branch gcc_disp_throttle_core_clk = {
1888 .halt_reg = 0x17064,
1889 .halt_check = BRANCH_HALT_VOTED,
1890 .hwcg_reg = 0x17064,
1891 .hwcg_bit = 1,
1892 .clkr = {
1893 .enable_reg = 0x7900c,
1894 .enable_mask = BIT(5),
1895 .hw.init = &(struct clk_init_data){
1896 .name = "gcc_disp_throttle_core_clk",
1897 .ops = &clk_branch2_ops,
1898 },
1899 },
1900 };
1901
1902 static struct clk_branch gcc_disp_xo_clk = {
1903 .halt_reg = 0x1702c,
1904 .halt_check = BRANCH_HALT,
1905 .clkr = {
1906 .enable_reg = 0x1702c,
1907 .enable_mask = BIT(0),
1908 .hw.init = &(struct clk_init_data){
1909 .name = "gcc_disp_xo_clk",
1910 .flags = CLK_IS_CRITICAL,
1911 .ops = &clk_branch2_ops,
1912 },
1913 },
1914 };
1915
1916 static struct clk_branch gcc_gp1_clk = {
1917 .halt_reg = 0x4d000,
1918 .halt_check = BRANCH_HALT,
1919 .clkr = {
1920 .enable_reg = 0x4d000,
1921 .enable_mask = BIT(0),
1922 .hw.init = &(struct clk_init_data){
1923 .name = "gcc_gp1_clk",
1924 .parent_hws = (const struct clk_hw *[])
1925 { &gcc_gp1_clk_src.clkr.hw },
1926 .num_parents = 1,
1927 .flags = CLK_SET_RATE_PARENT,
1928 .ops = &clk_branch2_ops,
1929 },
1930 },
1931 };
1932
1933 static struct clk_branch gcc_gp2_clk = {
1934 .halt_reg = 0x4e000,
1935 .halt_check = BRANCH_HALT,
1936 .clkr = {
1937 .enable_reg = 0x4e000,
1938 .enable_mask = BIT(0),
1939 .hw.init = &(struct clk_init_data){
1940 .name = "gcc_gp2_clk",
1941 .parent_hws = (const struct clk_hw *[])
1942 { &gcc_gp2_clk_src.clkr.hw },
1943 .num_parents = 1,
1944 .flags = CLK_SET_RATE_PARENT,
1945 .ops = &clk_branch2_ops,
1946 },
1947 },
1948 };
1949
1950 static struct clk_branch gcc_gp3_clk = {
1951 .halt_reg = 0x4f000,
1952 .halt_check = BRANCH_HALT,
1953 .clkr = {
1954 .enable_reg = 0x4f000,
1955 .enable_mask = BIT(0),
1956 .hw.init = &(struct clk_init_data){
1957 .name = "gcc_gp3_clk",
1958 .parent_hws = (const struct clk_hw *[])
1959 { &gcc_gp3_clk_src.clkr.hw },
1960 .num_parents = 1,
1961 .flags = CLK_SET_RATE_PARENT,
1962 .ops = &clk_branch2_ops,
1963 },
1964 },
1965 };
1966
1967 static struct clk_branch gcc_gpu_cfg_ahb_clk = {
1968 .halt_reg = 0x36004,
1969 .halt_check = BRANCH_HALT,
1970 .hwcg_reg = 0x36004,
1971 .hwcg_bit = 1,
1972 .clkr = {
1973 .enable_reg = 0x36004,
1974 .enable_mask = BIT(0),
1975 .hw.init = &(struct clk_init_data){
1976 .name = "gcc_gpu_cfg_ahb_clk",
1977 .flags = CLK_IS_CRITICAL,
1978 .ops = &clk_branch2_ops,
1979 },
1980 },
1981 };
1982
1983 static struct clk_branch gcc_gpu_gpll0_clk_src = {
1984 .halt_check = BRANCH_HALT_DELAY,
1985 .clkr = {
1986 .enable_reg = 0x79004,
1987 .enable_mask = BIT(15),
1988 .hw.init = &(struct clk_init_data){
1989 .name = "gcc_gpu_gpll0_clk_src",
1990 .parent_hws = (const struct clk_hw *[])
1991 { &gpll0.clkr.hw },
1992 .num_parents = 1,
1993 .flags = CLK_SET_RATE_PARENT,
1994 .ops = &clk_branch2_ops,
1995 },
1996 },
1997 };
1998
1999 static struct clk_branch gcc_gpu_gpll0_div_clk_src = {
2000 .halt_check = BRANCH_HALT_DELAY,
2001 .clkr = {
2002 .enable_reg = 0x79004,
2003 .enable_mask = BIT(16),
2004 .hw.init = &(struct clk_init_data){
2005 .name = "gcc_gpu_gpll0_div_clk_src",
2006 .parent_hws = (const struct clk_hw *[])
2007 { &gpll0_out_aux2.clkr.hw },
2008 .num_parents = 1,
2009 .flags = CLK_SET_RATE_PARENT,
2010 .ops = &clk_branch2_ops,
2011 },
2012 },
2013 };
2014
2015 static struct clk_branch gcc_gpu_iref_clk = {
2016 .halt_reg = 0x36100,
2017 .halt_check = BRANCH_HALT_DELAY,
2018 .clkr = {
2019 .enable_reg = 0x36100,
2020 .enable_mask = BIT(0),
2021 .hw.init = &(struct clk_init_data){
2022 .name = "gcc_gpu_iref_clk",
2023 .ops = &clk_branch2_ops,
2024 },
2025 },
2026 };
2027
2028 static struct clk_branch gcc_gpu_memnoc_gfx_clk = {
2029 .halt_reg = 0x3600c,
2030 .halt_check = BRANCH_VOTED,
2031 .hwcg_reg = 0x3600c,
2032 .hwcg_bit = 1,
2033 .clkr = {
2034 .enable_reg = 0x3600c,
2035 .enable_mask = BIT(0),
2036 .hw.init = &(struct clk_init_data){
2037 .name = "gcc_gpu_memnoc_gfx_clk",
2038 .ops = &clk_branch2_ops,
2039 },
2040 },
2041 };
2042
2043 static struct clk_branch gcc_gpu_snoc_dvm_gfx_clk = {
2044 .halt_reg = 0x36018,
2045 .halt_check = BRANCH_HALT,
2046 .clkr = {
2047 .enable_reg = 0x36018,
2048 .enable_mask = BIT(0),
2049 .hw.init = &(struct clk_init_data){
2050 .name = "gcc_gpu_snoc_dvm_gfx_clk",
2051 .ops = &clk_branch2_ops,
2052 },
2053 },
2054 };
2055
2056 static struct clk_branch gcc_gpu_throttle_core_clk = {
2057 .halt_reg = 0x36048,
2058 .halt_check = BRANCH_HALT_VOTED,
2059 .hwcg_reg = 0x36048,
2060 .hwcg_bit = 1,
2061 .clkr = {
2062 .enable_reg = 0x79004,
2063 .enable_mask = BIT(31),
2064 .hw.init = &(struct clk_init_data){
2065 .name = "gcc_gpu_throttle_core_clk",
2066 .flags = CLK_SET_RATE_PARENT,
2067 .ops = &clk_branch2_ops,
2068 },
2069 },
2070 };
2071
2072 static struct clk_branch gcc_pdm2_clk = {
2073 .halt_reg = 0x2000c,
2074 .halt_check = BRANCH_HALT,
2075 .clkr = {
2076 .enable_reg = 0x2000c,
2077 .enable_mask = BIT(0),
2078 .hw.init = &(struct clk_init_data){
2079 .name = "gcc_pdm2_clk",
2080 .parent_hws = (const struct clk_hw *[])
2081 { &gcc_pdm2_clk_src.clkr.hw },
2082 .num_parents = 1,
2083 .flags = CLK_SET_RATE_PARENT,
2084 .ops = &clk_branch2_ops,
2085 },
2086 },
2087 };
2088
2089 static struct clk_branch gcc_pdm_ahb_clk = {
2090 .halt_reg = 0x20004,
2091 .halt_check = BRANCH_HALT,
2092 .hwcg_reg = 0x20004,
2093 .hwcg_bit = 1,
2094 .clkr = {
2095 .enable_reg = 0x20004,
2096 .enable_mask = BIT(0),
2097 .hw.init = &(struct clk_init_data){
2098 .name = "gcc_pdm_ahb_clk",
2099 .ops = &clk_branch2_ops,
2100 },
2101 },
2102 };
2103
2104 static struct clk_branch gcc_pdm_xo4_clk = {
2105 .halt_reg = 0x20008,
2106 .halt_check = BRANCH_HALT,
2107 .clkr = {
2108 .enable_reg = 0x20008,
2109 .enable_mask = BIT(0),
2110 .hw.init = &(struct clk_init_data){
2111 .name = "gcc_pdm_xo4_clk",
2112 .ops = &clk_branch2_ops,
2113 },
2114 },
2115 };
2116
2117 static struct clk_branch gcc_pwm0_xo512_clk = {
2118 .halt_reg = 0x2002c,
2119 .halt_check = BRANCH_HALT,
2120 .clkr = {
2121 .enable_reg = 0x2002c,
2122 .enable_mask = BIT(0),
2123 .hw.init = &(struct clk_init_data){
2124 .name = "gcc_pwm0_xo512_clk",
2125 .ops = &clk_branch2_ops,
2126 },
2127 },
2128 };
2129
2130 static struct clk_branch gcc_qmip_camera_nrt_ahb_clk = {
2131 .halt_reg = 0x17014,
2132 .halt_check = BRANCH_HALT_VOTED,
2133 .hwcg_reg = 0x17014,
2134 .hwcg_bit = 1,
2135 .clkr = {
2136 .enable_reg = 0x7900c,
2137 .enable_mask = BIT(0),
2138 .hw.init = &(struct clk_init_data){
2139 .name = "gcc_qmip_camera_nrt_ahb_clk",
2140 .ops = &clk_branch2_ops,
2141 },
2142 },
2143 };
2144
2145 static struct clk_branch gcc_qmip_camera_rt_ahb_clk = {
2146 .halt_reg = 0x17060,
2147 .halt_check = BRANCH_HALT_VOTED,
2148 .hwcg_reg = 0x17060,
2149 .hwcg_bit = 1,
2150 .clkr = {
2151 .enable_reg = 0x7900c,
2152 .enable_mask = BIT(2),
2153 .hw.init = &(struct clk_init_data){
2154 .name = "gcc_qmip_camera_rt_ahb_clk",
2155 .ops = &clk_branch2_ops,
2156 },
2157 },
2158 };
2159
2160 static struct clk_branch gcc_qmip_disp_ahb_clk = {
2161 .halt_reg = 0x17018,
2162 .halt_check = BRANCH_HALT_VOTED,
2163 .hwcg_reg = 0x17018,
2164 .hwcg_bit = 1,
2165 .clkr = {
2166 .enable_reg = 0x7900c,
2167 .enable_mask = BIT(1),
2168 .hw.init = &(struct clk_init_data){
2169 .name = "gcc_qmip_disp_ahb_clk",
2170 .ops = &clk_branch2_ops,
2171 },
2172 },
2173 };
2174
2175 static struct clk_branch gcc_qmip_gpu_cfg_ahb_clk = {
2176 .halt_reg = 0x36040,
2177 .halt_check = BRANCH_HALT_VOTED,
2178 .hwcg_reg = 0x36040,
2179 .hwcg_bit = 1,
2180 .clkr = {
2181 .enable_reg = 0x7900c,
2182 .enable_mask = BIT(4),
2183 .hw.init = &(struct clk_init_data){
2184 .name = "gcc_qmip_gpu_cfg_ahb_clk",
2185 .ops = &clk_branch2_ops,
2186 },
2187 },
2188 };
2189
2190 static struct clk_branch gcc_qmip_video_vcodec_ahb_clk = {
2191 .halt_reg = 0x17010,
2192 .halt_check = BRANCH_HALT_VOTED,
2193 .hwcg_reg = 0x17010,
2194 .hwcg_bit = 1,
2195 .clkr = {
2196 .enable_reg = 0x79004,
2197 .enable_mask = BIT(25),
2198 .hw.init = &(struct clk_init_data){
2199 .name = "gcc_qmip_video_vcodec_ahb_clk",
2200 .ops = &clk_branch2_ops,
2201 },
2202 },
2203 };
2204
2205 static struct clk_branch gcc_qupv3_wrap0_core_2x_clk = {
2206 .halt_reg = 0x1f014,
2207 .halt_check = BRANCH_HALT_VOTED,
2208 .clkr = {
2209 .enable_reg = 0x7900c,
2210 .enable_mask = BIT(9),
2211 .hw.init = &(struct clk_init_data){
2212 .name = "gcc_qupv3_wrap0_core_2x_clk",
2213 .ops = &clk_branch2_ops,
2214 },
2215 },
2216 };
2217
2218 static struct clk_branch gcc_qupv3_wrap0_core_clk = {
2219 .halt_reg = 0x1f00c,
2220 .halt_check = BRANCH_HALT_VOTED,
2221 .clkr = {
2222 .enable_reg = 0x7900c,
2223 .enable_mask = BIT(8),
2224 .hw.init = &(struct clk_init_data){
2225 .name = "gcc_qupv3_wrap0_core_clk",
2226 .ops = &clk_branch2_ops,
2227 },
2228 },
2229 };
2230
2231 static struct clk_branch gcc_qupv3_wrap0_s0_clk = {
2232 .halt_reg = 0x1f144,
2233 .halt_check = BRANCH_HALT_VOTED,
2234 .clkr = {
2235 .enable_reg = 0x7900c,
2236 .enable_mask = BIT(10),
2237 .hw.init = &(struct clk_init_data){
2238 .name = "gcc_qupv3_wrap0_s0_clk",
2239 .parent_hws = (const struct clk_hw *[])
2240 { &gcc_qupv3_wrap0_s0_clk_src.clkr.hw },
2241 .num_parents = 1,
2242 .flags = CLK_SET_RATE_PARENT,
2243 .ops = &clk_branch2_ops,
2244 },
2245 },
2246 };
2247
2248 static struct clk_branch gcc_qupv3_wrap0_s1_clk = {
2249 .halt_reg = 0x1f274,
2250 .halt_check = BRANCH_HALT_VOTED,
2251 .clkr = {
2252 .enable_reg = 0x7900c,
2253 .enable_mask = BIT(11),
2254 .hw.init = &(struct clk_init_data){
2255 .name = "gcc_qupv3_wrap0_s1_clk",
2256 .parent_hws = (const struct clk_hw *[])
2257 { &gcc_qupv3_wrap0_s1_clk_src.clkr.hw },
2258 .num_parents = 1,
2259 .flags = CLK_SET_RATE_PARENT,
2260 .ops = &clk_branch2_ops,
2261 },
2262 },
2263 };
2264
2265 static struct clk_branch gcc_qupv3_wrap0_s2_clk = {
2266 .halt_reg = 0x1f3a4,
2267 .halt_check = BRANCH_HALT_VOTED,
2268 .clkr = {
2269 .enable_reg = 0x7900c,
2270 .enable_mask = BIT(12),
2271 .hw.init = &(struct clk_init_data){
2272 .name = "gcc_qupv3_wrap0_s2_clk",
2273 .parent_hws = (const struct clk_hw *[])
2274 { &gcc_qupv3_wrap0_s2_clk_src.clkr.hw },
2275 .num_parents = 1,
2276 .flags = CLK_SET_RATE_PARENT,
2277 .ops = &clk_branch2_ops,
2278 },
2279 },
2280 };
2281
2282 static struct clk_branch gcc_qupv3_wrap0_s3_clk = {
2283 .halt_reg = 0x1f4d4,
2284 .halt_check = BRANCH_HALT_VOTED,
2285 .clkr = {
2286 .enable_reg = 0x7900c,
2287 .enable_mask = BIT(13),
2288 .hw.init = &(struct clk_init_data){
2289 .name = "gcc_qupv3_wrap0_s3_clk",
2290 .parent_hws = (const struct clk_hw *[])
2291 { &gcc_qupv3_wrap0_s3_clk_src.clkr.hw },
2292 .num_parents = 1,
2293 .flags = CLK_SET_RATE_PARENT,
2294 .ops = &clk_branch2_ops,
2295 },
2296 },
2297 };
2298
2299 static struct clk_branch gcc_qupv3_wrap0_s4_clk = {
2300 .halt_reg = 0x1f604,
2301 .halt_check = BRANCH_HALT_VOTED,
2302 .clkr = {
2303 .enable_reg = 0x7900c,
2304 .enable_mask = BIT(14),
2305 .hw.init = &(struct clk_init_data){
2306 .name = "gcc_qupv3_wrap0_s4_clk",
2307 .parent_hws = (const struct clk_hw *[])
2308 { &gcc_qupv3_wrap0_s4_clk_src.clkr.hw },
2309 .num_parents = 1,
2310 .flags = CLK_SET_RATE_PARENT,
2311 .ops = &clk_branch2_ops,
2312 },
2313 },
2314 };
2315
2316 static struct clk_branch gcc_qupv3_wrap0_s5_clk = {
2317 .halt_reg = 0x1f734,
2318 .halt_check = BRANCH_HALT_VOTED,
2319 .clkr = {
2320 .enable_reg = 0x7900c,
2321 .enable_mask = BIT(15),
2322 .hw.init = &(struct clk_init_data){
2323 .name = "gcc_qupv3_wrap0_s5_clk",
2324 .parent_hws = (const struct clk_hw *[])
2325 { &gcc_qupv3_wrap0_s5_clk_src.clkr.hw },
2326 .num_parents = 1,
2327 .flags = CLK_SET_RATE_PARENT,
2328 .ops = &clk_branch2_ops,
2329 },
2330 },
2331 };
2332
2333 static struct clk_branch gcc_qupv3_wrap_0_m_ahb_clk = {
2334 .halt_reg = 0x1f004,
2335 .halt_check = BRANCH_HALT_VOTED,
2336 .hwcg_reg = 0x1f004,
2337 .hwcg_bit = 1,
2338 .clkr = {
2339 .enable_reg = 0x7900c,
2340 .enable_mask = BIT(6),
2341 .hw.init = &(struct clk_init_data){
2342 .name = "gcc_qupv3_wrap_0_m_ahb_clk",
2343 .ops = &clk_branch2_ops,
2344 },
2345 },
2346 };
2347
2348 static struct clk_branch gcc_qupv3_wrap_0_s_ahb_clk = {
2349 .halt_reg = 0x1f008,
2350 .halt_check = BRANCH_HALT_VOTED,
2351 .hwcg_reg = 0x1f008,
2352 .hwcg_bit = 1,
2353 .clkr = {
2354 .enable_reg = 0x7900c,
2355 .enable_mask = BIT(7),
2356 .hw.init = &(struct clk_init_data){
2357 .name = "gcc_qupv3_wrap_0_s_ahb_clk",
2358 .ops = &clk_branch2_ops,
2359 },
2360 },
2361 };
2362
2363 static struct clk_branch gcc_sdcc1_ahb_clk = {
2364 .halt_reg = 0x38008,
2365 .halt_check = BRANCH_HALT,
2366 .clkr = {
2367 .enable_reg = 0x38008,
2368 .enable_mask = BIT(0),
2369 .hw.init = &(struct clk_init_data){
2370 .name = "gcc_sdcc1_ahb_clk",
2371 .ops = &clk_branch2_ops,
2372 },
2373 },
2374 };
2375
2376 static struct clk_branch gcc_sdcc1_apps_clk = {
2377 .halt_reg = 0x38004,
2378 .halt_check = BRANCH_HALT,
2379 .clkr = {
2380 .enable_reg = 0x38004,
2381 .enable_mask = BIT(0),
2382 .hw.init = &(struct clk_init_data){
2383 .name = "gcc_sdcc1_apps_clk",
2384 .parent_hws = (const struct clk_hw *[])
2385 { &gcc_sdcc1_apps_clk_src.clkr.hw },
2386 .num_parents = 1,
2387 .flags = CLK_SET_RATE_PARENT,
2388 .ops = &clk_branch2_ops,
2389 },
2390 },
2391 };
2392
2393 static struct clk_branch gcc_sdcc1_ice_core_clk = {
2394 .halt_reg = 0x3800c,
2395 .halt_check = BRANCH_HALT,
2396 .hwcg_reg = 0x3800c,
2397 .hwcg_bit = 1,
2398 .clkr = {
2399 .enable_reg = 0x3800c,
2400 .enable_mask = BIT(0),
2401 .hw.init = &(struct clk_init_data){
2402 .name = "gcc_sdcc1_ice_core_clk",
2403 .parent_hws = (const struct clk_hw *[])
2404 { &gcc_sdcc1_ice_core_clk_src.clkr.hw },
2405 .num_parents = 1,
2406 .flags = CLK_SET_RATE_PARENT,
2407 .ops = &clk_branch2_ops,
2408 },
2409 },
2410 };
2411
2412 static struct clk_branch gcc_sdcc2_ahb_clk = {
2413 .halt_reg = 0x1e008,
2414 .halt_check = BRANCH_HALT,
2415 .clkr = {
2416 .enable_reg = 0x1e008,
2417 .enable_mask = BIT(0),
2418 .hw.init = &(struct clk_init_data){
2419 .name = "gcc_sdcc2_ahb_clk",
2420 .ops = &clk_branch2_ops,
2421 },
2422 },
2423 };
2424
2425 static struct clk_branch gcc_sdcc2_apps_clk = {
2426 .halt_reg = 0x1e004,
2427 .halt_check = BRANCH_HALT,
2428 .clkr = {
2429 .enable_reg = 0x1e004,
2430 .enable_mask = BIT(0),
2431 .hw.init = &(struct clk_init_data){
2432 .name = "gcc_sdcc2_apps_clk",
2433 .parent_hws = (const struct clk_hw *[])
2434 { &gcc_sdcc2_apps_clk_src.clkr.hw },
2435 .num_parents = 1,
2436 .flags = CLK_SET_RATE_PARENT,
2437 .ops = &clk_branch2_ops,
2438 },
2439 },
2440 };
2441
2442 static struct clk_branch gcc_sys_noc_cpuss_ahb_clk = {
2443 .halt_reg = 0x2b06c,
2444 .halt_check = BRANCH_HALT_VOTED,
2445 .hwcg_reg = 0x2b06c,
2446 .hwcg_bit = 1,
2447 .clkr = {
2448 .enable_reg = 0x79004,
2449 .enable_mask = BIT(0),
2450 .hw.init = &(struct clk_init_data){
2451 .name = "gcc_sys_noc_cpuss_ahb_clk",
2452 .flags = CLK_IS_CRITICAL,
2453 .ops = &clk_branch2_ops,
2454 },
2455 },
2456 };
2457
2458 static struct clk_branch gcc_sys_noc_usb3_prim_axi_clk = {
2459 .halt_reg = 0x1a080,
2460 .halt_check = BRANCH_HALT,
2461 .hwcg_reg = 0x1a080,
2462 .hwcg_bit = 1,
2463 .clkr = {
2464 .enable_reg = 0x1a080,
2465 .enable_mask = BIT(0),
2466 .hw.init = &(struct clk_init_data){
2467 .name = "gcc_sys_noc_usb3_prim_axi_clk",
2468 .parent_hws = (const struct clk_hw *[])
2469 { &gcc_usb30_prim_master_clk_src.clkr.hw },
2470 .num_parents = 1,
2471 .flags = CLK_SET_RATE_PARENT,
2472 .ops = &clk_branch2_ops,
2473 },
2474 },
2475 };
2476
2477 static struct clk_branch gcc_usb30_prim_master_clk = {
2478 .halt_reg = 0x1a010,
2479 .halt_check = BRANCH_HALT,
2480 .clkr = {
2481 .enable_reg = 0x1a010,
2482 .enable_mask = BIT(0),
2483 .hw.init = &(struct clk_init_data){
2484 .name = "gcc_usb30_prim_master_clk",
2485 .parent_hws = (const struct clk_hw *[])
2486 { &gcc_usb30_prim_master_clk_src.clkr.hw },
2487 .num_parents = 1,
2488 .flags = CLK_SET_RATE_PARENT,
2489 .ops = &clk_branch2_ops,
2490 },
2491 },
2492 };
2493
2494 static struct clk_branch gcc_usb30_prim_mock_utmi_clk = {
2495 .halt_reg = 0x1a018,
2496 .halt_check = BRANCH_HALT,
2497 .clkr = {
2498 .enable_reg = 0x1a018,
2499 .enable_mask = BIT(0),
2500 .hw.init = &(struct clk_init_data){
2501 .name = "gcc_usb30_prim_mock_utmi_clk",
2502 .parent_hws = (const struct clk_hw *[])
2503 { &gcc_usb30_prim_mock_utmi_postdiv.clkr.hw },
2504 .num_parents = 1,
2505 .flags = CLK_SET_RATE_PARENT,
2506 .ops = &clk_branch2_ops,
2507 },
2508 },
2509 };
2510
2511 static struct clk_branch gcc_usb30_prim_sleep_clk = {
2512 .halt_reg = 0x1a014,
2513 .halt_check = BRANCH_HALT,
2514 .clkr = {
2515 .enable_reg = 0x1a014,
2516 .enable_mask = BIT(0),
2517 .hw.init = &(struct clk_init_data){
2518 .name = "gcc_usb30_prim_sleep_clk",
2519 .ops = &clk_branch2_ops,
2520 },
2521 },
2522 };
2523
2524 static struct clk_branch gcc_usb3_prim_clkref_clk = {
2525 .halt_reg = 0x9f000,
2526 .halt_check = BRANCH_HALT,
2527 .clkr = {
2528 .enable_reg = 0x9f000,
2529 .enable_mask = BIT(0),
2530 .hw.init = &(struct clk_init_data){
2531 .name = "gcc_usb3_prim_clkref_clk",
2532 .ops = &clk_branch2_ops,
2533 },
2534 },
2535 };
2536
2537 static struct clk_branch gcc_usb3_prim_phy_com_aux_clk = {
2538 .halt_reg = 0x1a054,
2539 .halt_check = BRANCH_HALT,
2540 .clkr = {
2541 .enable_reg = 0x1a054,
2542 .enable_mask = BIT(0),
2543 .hw.init = &(struct clk_init_data){
2544 .name = "gcc_usb3_prim_phy_com_aux_clk",
2545 .parent_hws = (const struct clk_hw *[])
2546 { &gcc_usb3_prim_phy_aux_clk_src.clkr.hw },
2547 .num_parents = 1,
2548 .flags = CLK_SET_RATE_PARENT,
2549 .ops = &clk_branch2_ops,
2550 },
2551 },
2552 };
2553
2554 static struct clk_branch gcc_usb3_prim_phy_pipe_clk = {
2555 .halt_reg = 0x1a058,
2556 .halt_check = BRANCH_HALT_SKIP,
2557 .hwcg_reg = 0x1a058,
2558 .hwcg_bit = 1,
2559 .clkr = {
2560 .enable_reg = 0x1a058,
2561 .enable_mask = BIT(0),
2562 .hw.init = &(struct clk_init_data){
2563 .name = "gcc_usb3_prim_phy_pipe_clk",
2564 .ops = &clk_branch2_ops,
2565 },
2566 },
2567 };
2568
2569 static struct clk_branch gcc_vcodec0_axi_clk = {
2570 .halt_reg = 0x6e008,
2571 .halt_check = BRANCH_HALT,
2572 .clkr = {
2573 .enable_reg = 0x6e008,
2574 .enable_mask = BIT(0),
2575 .hw.init = &(struct clk_init_data){
2576 .name = "gcc_vcodec0_axi_clk",
2577 .ops = &clk_branch2_ops,
2578 },
2579 },
2580 };
2581
2582 static struct clk_branch gcc_venus_ahb_clk = {
2583 .halt_reg = 0x6e010,
2584 .halt_check = BRANCH_HALT,
2585 .clkr = {
2586 .enable_reg = 0x6e010,
2587 .enable_mask = BIT(0),
2588 .hw.init = &(struct clk_init_data){
2589 .name = "gcc_venus_ahb_clk",
2590 .ops = &clk_branch2_ops,
2591 },
2592 },
2593 };
2594
2595 static struct clk_branch gcc_venus_ctl_axi_clk = {
2596 .halt_reg = 0x6e004,
2597 .halt_check = BRANCH_HALT,
2598 .clkr = {
2599 .enable_reg = 0x6e004,
2600 .enable_mask = BIT(0),
2601 .hw.init = &(struct clk_init_data){
2602 .name = "gcc_venus_ctl_axi_clk",
2603 .ops = &clk_branch2_ops,
2604 },
2605 },
2606 };
2607
2608 static struct clk_branch gcc_video_ahb_clk = {
2609 .halt_reg = 0x17004,
2610 .halt_check = BRANCH_HALT,
2611 .hwcg_reg = 0x17004,
2612 .hwcg_bit = 1,
2613 .clkr = {
2614 .enable_reg = 0x17004,
2615 .enable_mask = BIT(0),
2616 .hw.init = &(struct clk_init_data){
2617 .name = "gcc_video_ahb_clk",
2618 .ops = &clk_branch2_ops,
2619 },
2620 },
2621 };
2622
2623 static struct clk_branch gcc_video_axi0_clk = {
2624 .halt_reg = 0x1701c,
2625 .halt_check = BRANCH_HALT,
2626 .hwcg_reg = 0x1701c,
2627 .hwcg_bit = 1,
2628 .clkr = {
2629 .enable_reg = 0x1701c,
2630 .enable_mask = BIT(0),
2631 .hw.init = &(struct clk_init_data){
2632 .name = "gcc_video_axi0_clk",
2633 .ops = &clk_branch2_ops,
2634 },
2635 },
2636 };
2637
2638 static struct clk_branch gcc_video_throttle_core_clk = {
2639 .halt_reg = 0x17068,
2640 .halt_check = BRANCH_HALT_VOTED,
2641 .hwcg_reg = 0x17068,
2642 .hwcg_bit = 1,
2643 .clkr = {
2644 .enable_reg = 0x79004,
2645 .enable_mask = BIT(28),
2646 .hw.init = &(struct clk_init_data){
2647 .name = "gcc_video_throttle_core_clk",
2648 .ops = &clk_branch2_ops,
2649 },
2650 },
2651 };
2652
2653 static struct clk_branch gcc_video_vcodec0_sys_clk = {
2654 .halt_reg = 0x580a4,
2655 .halt_check = BRANCH_HALT_DELAY,
2656 .hwcg_reg = 0x580a4,
2657 .hwcg_bit = 1,
2658 .clkr = {
2659 .enable_reg = 0x580a4,
2660 .enable_mask = BIT(0),
2661 .hw.init = &(struct clk_init_data){
2662 .name = "gcc_video_vcodec0_sys_clk",
2663 .parent_hws = (const struct clk_hw *[])
2664 { &gcc_video_venus_clk_src.clkr.hw },
2665 .num_parents = 1,
2666 .flags = CLK_SET_RATE_PARENT,
2667 .ops = &clk_branch2_ops,
2668 },
2669 },
2670 };
2671
2672 static struct clk_branch gcc_video_venus_ctl_clk = {
2673 .halt_reg = 0x5808c,
2674 .halt_check = BRANCH_HALT,
2675 .clkr = {
2676 .enable_reg = 0x5808c,
2677 .enable_mask = BIT(0),
2678 .hw.init = &(struct clk_init_data){
2679 .name = "gcc_video_venus_ctl_clk",
2680 .parent_hws = (const struct clk_hw *[])
2681 { &gcc_video_venus_clk_src.clkr.hw },
2682 .num_parents = 1,
2683 .flags = CLK_SET_RATE_PARENT,
2684 .ops = &clk_branch2_ops,
2685 },
2686 },
2687 };
2688
2689 static struct clk_branch gcc_video_xo_clk = {
2690 .halt_reg = 0x17024,
2691 .halt_check = BRANCH_HALT,
2692 .clkr = {
2693 .enable_reg = 0x17024,
2694 .enable_mask = BIT(0),
2695 .hw.init = &(struct clk_init_data){
2696 .name = "gcc_video_xo_clk",
2697 .ops = &clk_branch2_ops,
2698 },
2699 },
2700 };
2701
2702 static struct gdsc gcc_camss_top_gdsc = {
2703 .gdscr = 0x58004,
2704 .pd = {
2705 .name = "gcc_camss_top",
2706 },
2707 .pwrsts = PWRSTS_OFF_ON,
2708 };
2709
2710 static struct gdsc gcc_usb30_prim_gdsc = {
2711 .gdscr = 0x1a004,
2712 .pd = {
2713 .name = "gcc_usb30_prim",
2714 },
2715 .pwrsts = PWRSTS_OFF_ON,
2716 };
2717
2718 static struct gdsc gcc_vcodec0_gdsc = {
2719 .gdscr = 0x58098,
2720 .pd = {
2721 .name = "gcc_vcodec0",
2722 },
2723 .pwrsts = PWRSTS_OFF_ON,
2724 };
2725
2726 static struct gdsc gcc_venus_gdsc = {
2727 .gdscr = 0x5807c,
2728 .pd = {
2729 .name = "gcc_venus",
2730 },
2731 .pwrsts = PWRSTS_OFF_ON,
2732 };
2733
2734 static struct gdsc hlos1_vote_turing_mmu_tbu1_gdsc = {
2735 .gdscr = 0x7d060,
2736 .pd = {
2737 .name = "hlos1_vote_turing_mmu_tbu1",
2738 },
2739 .pwrsts = PWRSTS_OFF_ON,
2740 .flags = VOTABLE,
2741 };
2742
2743 static struct gdsc hlos1_vote_turing_mmu_tbu0_gdsc = {
2744 .gdscr = 0x7d07c,
2745 .pd = {
2746 .name = "hlos1_vote_turing_mmu_tbu0",
2747 },
2748 .pwrsts = PWRSTS_OFF_ON,
2749 .flags = VOTABLE,
2750 };
2751
2752 static struct gdsc hlos1_vote_mm_snoc_mmu_tbu_rt_gdsc = {
2753 .gdscr = 0x7d074,
2754 .pd = {
2755 .name = "hlos1_vote_mm_snoc_mmu_tbu_rt",
2756 },
2757 .pwrsts = PWRSTS_OFF_ON,
2758 .flags = VOTABLE,
2759 };
2760
2761 static struct gdsc hlos1_vote_mm_snoc_mmu_tbu_nrt_gdsc = {
2762 .gdscr = 0x7d078,
2763 .pd = {
2764 .name = "hlos1_vote_mm_snoc_mmu_tbu_nrt",
2765 },
2766 .pwrsts = PWRSTS_OFF_ON,
2767 .flags = VOTABLE,
2768 };
2769
2770 static struct clk_regmap *gcc_qcm2290_clocks[] = {
2771 [GCC_AHB2PHY_CSI_CLK] = &gcc_ahb2phy_csi_clk.clkr,
2772 [GCC_AHB2PHY_USB_CLK] = &gcc_ahb2phy_usb_clk.clkr,
2773 [GCC_BIMC_GPU_AXI_CLK] = &gcc_bimc_gpu_axi_clk.clkr,
2774 [GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr,
2775 [GCC_CAM_THROTTLE_NRT_CLK] = &gcc_cam_throttle_nrt_clk.clkr,
2776 [GCC_CAM_THROTTLE_RT_CLK] = &gcc_cam_throttle_rt_clk.clkr,
2777 [GCC_CAMERA_AHB_CLK] = &gcc_camera_ahb_clk.clkr,
2778 [GCC_CAMERA_XO_CLK] = &gcc_camera_xo_clk.clkr,
2779 [GCC_CAMSS_AXI_CLK] = &gcc_camss_axi_clk.clkr,
2780 [GCC_CAMSS_AXI_CLK_SRC] = &gcc_camss_axi_clk_src.clkr,
2781 [GCC_CAMSS_CAMNOC_ATB_CLK] = &gcc_camss_camnoc_atb_clk.clkr,
2782 [GCC_CAMSS_CAMNOC_NTS_XO_CLK] = &gcc_camss_camnoc_nts_xo_clk.clkr,
2783 [GCC_CAMSS_CCI_0_CLK] = &gcc_camss_cci_0_clk.clkr,
2784 [GCC_CAMSS_CCI_CLK_SRC] = &gcc_camss_cci_clk_src.clkr,
2785 [GCC_CAMSS_CPHY_0_CLK] = &gcc_camss_cphy_0_clk.clkr,
2786 [GCC_CAMSS_CPHY_1_CLK] = &gcc_camss_cphy_1_clk.clkr,
2787 [GCC_CAMSS_CSI0PHYTIMER_CLK] = &gcc_camss_csi0phytimer_clk.clkr,
2788 [GCC_CAMSS_CSI0PHYTIMER_CLK_SRC] = &gcc_camss_csi0phytimer_clk_src.clkr,
2789 [GCC_CAMSS_CSI1PHYTIMER_CLK] = &gcc_camss_csi1phytimer_clk.clkr,
2790 [GCC_CAMSS_CSI1PHYTIMER_CLK_SRC] = &gcc_camss_csi1phytimer_clk_src.clkr,
2791 [GCC_CAMSS_MCLK0_CLK] = &gcc_camss_mclk0_clk.clkr,
2792 [GCC_CAMSS_MCLK0_CLK_SRC] = &gcc_camss_mclk0_clk_src.clkr,
2793 [GCC_CAMSS_MCLK1_CLK] = &gcc_camss_mclk1_clk.clkr,
2794 [GCC_CAMSS_MCLK1_CLK_SRC] = &gcc_camss_mclk1_clk_src.clkr,
2795 [GCC_CAMSS_MCLK2_CLK] = &gcc_camss_mclk2_clk.clkr,
2796 [GCC_CAMSS_MCLK2_CLK_SRC] = &gcc_camss_mclk2_clk_src.clkr,
2797 [GCC_CAMSS_MCLK3_CLK] = &gcc_camss_mclk3_clk.clkr,
2798 [GCC_CAMSS_MCLK3_CLK_SRC] = &gcc_camss_mclk3_clk_src.clkr,
2799 [GCC_CAMSS_NRT_AXI_CLK] = &gcc_camss_nrt_axi_clk.clkr,
2800 [GCC_CAMSS_OPE_AHB_CLK] = &gcc_camss_ope_ahb_clk.clkr,
2801 [GCC_CAMSS_OPE_AHB_CLK_SRC] = &gcc_camss_ope_ahb_clk_src.clkr,
2802 [GCC_CAMSS_OPE_CLK] = &gcc_camss_ope_clk.clkr,
2803 [GCC_CAMSS_OPE_CLK_SRC] = &gcc_camss_ope_clk_src.clkr,
2804 [GCC_CAMSS_RT_AXI_CLK] = &gcc_camss_rt_axi_clk.clkr,
2805 [GCC_CAMSS_TFE_0_CLK] = &gcc_camss_tfe_0_clk.clkr,
2806 [GCC_CAMSS_TFE_0_CLK_SRC] = &gcc_camss_tfe_0_clk_src.clkr,
2807 [GCC_CAMSS_TFE_0_CPHY_RX_CLK] = &gcc_camss_tfe_0_cphy_rx_clk.clkr,
2808 [GCC_CAMSS_TFE_0_CSID_CLK] = &gcc_camss_tfe_0_csid_clk.clkr,
2809 [GCC_CAMSS_TFE_0_CSID_CLK_SRC] = &gcc_camss_tfe_0_csid_clk_src.clkr,
2810 [GCC_CAMSS_TFE_1_CLK] = &gcc_camss_tfe_1_clk.clkr,
2811 [GCC_CAMSS_TFE_1_CLK_SRC] = &gcc_camss_tfe_1_clk_src.clkr,
2812 [GCC_CAMSS_TFE_1_CPHY_RX_CLK] = &gcc_camss_tfe_1_cphy_rx_clk.clkr,
2813 [GCC_CAMSS_TFE_1_CSID_CLK] = &gcc_camss_tfe_1_csid_clk.clkr,
2814 [GCC_CAMSS_TFE_1_CSID_CLK_SRC] = &gcc_camss_tfe_1_csid_clk_src.clkr,
2815 [GCC_CAMSS_TFE_CPHY_RX_CLK_SRC] = &gcc_camss_tfe_cphy_rx_clk_src.clkr,
2816 [GCC_CAMSS_TOP_AHB_CLK] = &gcc_camss_top_ahb_clk.clkr,
2817 [GCC_CAMSS_TOP_AHB_CLK_SRC] = &gcc_camss_top_ahb_clk_src.clkr,
2818 [GCC_CFG_NOC_USB3_PRIM_AXI_CLK] = &gcc_cfg_noc_usb3_prim_axi_clk.clkr,
2819 [GCC_DISP_AHB_CLK] = &gcc_disp_ahb_clk.clkr,
2820 [GCC_DISP_GPLL0_CLK_SRC] = &gcc_disp_gpll0_clk_src.clkr,
2821 [GCC_DISP_GPLL0_DIV_CLK_SRC] = &gcc_disp_gpll0_div_clk_src.clkr,
2822 [GCC_DISP_HF_AXI_CLK] = &gcc_disp_hf_axi_clk.clkr,
2823 [GCC_DISP_THROTTLE_CORE_CLK] = &gcc_disp_throttle_core_clk.clkr,
2824 [GCC_DISP_XO_CLK] = &gcc_disp_xo_clk.clkr,
2825 [GCC_GP1_CLK] = &gcc_gp1_clk.clkr,
2826 [GCC_GP1_CLK_SRC] = &gcc_gp1_clk_src.clkr,
2827 [GCC_GP2_CLK] = &gcc_gp2_clk.clkr,
2828 [GCC_GP2_CLK_SRC] = &gcc_gp2_clk_src.clkr,
2829 [GCC_GP3_CLK] = &gcc_gp3_clk.clkr,
2830 [GCC_GP3_CLK_SRC] = &gcc_gp3_clk_src.clkr,
2831 [GCC_GPU_CFG_AHB_CLK] = &gcc_gpu_cfg_ahb_clk.clkr,
2832 [GCC_GPU_GPLL0_CLK_SRC] = &gcc_gpu_gpll0_clk_src.clkr,
2833 [GCC_GPU_GPLL0_DIV_CLK_SRC] = &gcc_gpu_gpll0_div_clk_src.clkr,
2834 [GCC_GPU_IREF_CLK] = &gcc_gpu_iref_clk.clkr,
2835 [GCC_GPU_MEMNOC_GFX_CLK] = &gcc_gpu_memnoc_gfx_clk.clkr,
2836 [GCC_GPU_SNOC_DVM_GFX_CLK] = &gcc_gpu_snoc_dvm_gfx_clk.clkr,
2837 [GCC_GPU_THROTTLE_CORE_CLK] = &gcc_gpu_throttle_core_clk.clkr,
2838 [GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr,
2839 [GCC_PDM2_CLK_SRC] = &gcc_pdm2_clk_src.clkr,
2840 [GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr,
2841 [GCC_PDM_XO4_CLK] = &gcc_pdm_xo4_clk.clkr,
2842 [GCC_PWM0_XO512_CLK] = &gcc_pwm0_xo512_clk.clkr,
2843 [GCC_QMIP_CAMERA_NRT_AHB_CLK] = &gcc_qmip_camera_nrt_ahb_clk.clkr,
2844 [GCC_QMIP_CAMERA_RT_AHB_CLK] = &gcc_qmip_camera_rt_ahb_clk.clkr,
2845 [GCC_QMIP_DISP_AHB_CLK] = &gcc_qmip_disp_ahb_clk.clkr,
2846 [GCC_QMIP_GPU_CFG_AHB_CLK] = &gcc_qmip_gpu_cfg_ahb_clk.clkr,
2847 [GCC_QMIP_VIDEO_VCODEC_AHB_CLK] = &gcc_qmip_video_vcodec_ahb_clk.clkr,
2848 [GCC_QUPV3_WRAP0_CORE_2X_CLK] = &gcc_qupv3_wrap0_core_2x_clk.clkr,
2849 [GCC_QUPV3_WRAP0_CORE_CLK] = &gcc_qupv3_wrap0_core_clk.clkr,
2850 [GCC_QUPV3_WRAP0_S0_CLK] = &gcc_qupv3_wrap0_s0_clk.clkr,
2851 [GCC_QUPV3_WRAP0_S0_CLK_SRC] = &gcc_qupv3_wrap0_s0_clk_src.clkr,
2852 [GCC_QUPV3_WRAP0_S1_CLK] = &gcc_qupv3_wrap0_s1_clk.clkr,
2853 [GCC_QUPV3_WRAP0_S1_CLK_SRC] = &gcc_qupv3_wrap0_s1_clk_src.clkr,
2854 [GCC_QUPV3_WRAP0_S2_CLK] = &gcc_qupv3_wrap0_s2_clk.clkr,
2855 [GCC_QUPV3_WRAP0_S2_CLK_SRC] = &gcc_qupv3_wrap0_s2_clk_src.clkr,
2856 [GCC_QUPV3_WRAP0_S3_CLK] = &gcc_qupv3_wrap0_s3_clk.clkr,
2857 [GCC_QUPV3_WRAP0_S3_CLK_SRC] = &gcc_qupv3_wrap0_s3_clk_src.clkr,
2858 [GCC_QUPV3_WRAP0_S4_CLK] = &gcc_qupv3_wrap0_s4_clk.clkr,
2859 [GCC_QUPV3_WRAP0_S4_CLK_SRC] = &gcc_qupv3_wrap0_s4_clk_src.clkr,
2860 [GCC_QUPV3_WRAP0_S5_CLK] = &gcc_qupv3_wrap0_s5_clk.clkr,
2861 [GCC_QUPV3_WRAP0_S5_CLK_SRC] = &gcc_qupv3_wrap0_s5_clk_src.clkr,
2862 [GCC_QUPV3_WRAP_0_M_AHB_CLK] = &gcc_qupv3_wrap_0_m_ahb_clk.clkr,
2863 [GCC_QUPV3_WRAP_0_S_AHB_CLK] = &gcc_qupv3_wrap_0_s_ahb_clk.clkr,
2864 [GCC_SDCC1_AHB_CLK] = &gcc_sdcc1_ahb_clk.clkr,
2865 [GCC_SDCC1_APPS_CLK] = &gcc_sdcc1_apps_clk.clkr,
2866 [GCC_SDCC1_APPS_CLK_SRC] = &gcc_sdcc1_apps_clk_src.clkr,
2867 [GCC_SDCC1_ICE_CORE_CLK] = &gcc_sdcc1_ice_core_clk.clkr,
2868 [GCC_SDCC1_ICE_CORE_CLK_SRC] = &gcc_sdcc1_ice_core_clk_src.clkr,
2869 [GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr,
2870 [GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr,
2871 [GCC_SDCC2_APPS_CLK_SRC] = &gcc_sdcc2_apps_clk_src.clkr,
2872 [GCC_SYS_NOC_CPUSS_AHB_CLK] = &gcc_sys_noc_cpuss_ahb_clk.clkr,
2873 [GCC_SYS_NOC_USB3_PRIM_AXI_CLK] = &gcc_sys_noc_usb3_prim_axi_clk.clkr,
2874 [GCC_USB30_PRIM_MASTER_CLK] = &gcc_usb30_prim_master_clk.clkr,
2875 [GCC_USB30_PRIM_MASTER_CLK_SRC] = &gcc_usb30_prim_master_clk_src.clkr,
2876 [GCC_USB30_PRIM_MOCK_UTMI_CLK] = &gcc_usb30_prim_mock_utmi_clk.clkr,
2877 [GCC_USB30_PRIM_MOCK_UTMI_CLK_SRC] =
2878 &gcc_usb30_prim_mock_utmi_clk_src.clkr,
2879 [GCC_USB30_PRIM_MOCK_UTMI_POSTDIV] =
2880 &gcc_usb30_prim_mock_utmi_postdiv.clkr,
2881 [GCC_USB30_PRIM_SLEEP_CLK] = &gcc_usb30_prim_sleep_clk.clkr,
2882 [GCC_USB3_PRIM_CLKREF_CLK] = &gcc_usb3_prim_clkref_clk.clkr,
2883 [GCC_USB3_PRIM_PHY_AUX_CLK_SRC] = &gcc_usb3_prim_phy_aux_clk_src.clkr,
2884 [GCC_USB3_PRIM_PHY_COM_AUX_CLK] = &gcc_usb3_prim_phy_com_aux_clk.clkr,
2885 [GCC_USB3_PRIM_PHY_PIPE_CLK] = &gcc_usb3_prim_phy_pipe_clk.clkr,
2886 [GCC_VCODEC0_AXI_CLK] = &gcc_vcodec0_axi_clk.clkr,
2887 [GCC_VENUS_AHB_CLK] = &gcc_venus_ahb_clk.clkr,
2888 [GCC_VENUS_CTL_AXI_CLK] = &gcc_venus_ctl_axi_clk.clkr,
2889 [GCC_VIDEO_AHB_CLK] = &gcc_video_ahb_clk.clkr,
2890 [GCC_VIDEO_AXI0_CLK] = &gcc_video_axi0_clk.clkr,
2891 [GCC_VIDEO_THROTTLE_CORE_CLK] = &gcc_video_throttle_core_clk.clkr,
2892 [GCC_VIDEO_VCODEC0_SYS_CLK] = &gcc_video_vcodec0_sys_clk.clkr,
2893 [GCC_VIDEO_VENUS_CLK_SRC] = &gcc_video_venus_clk_src.clkr,
2894 [GCC_VIDEO_VENUS_CTL_CLK] = &gcc_video_venus_ctl_clk.clkr,
2895 [GCC_VIDEO_XO_CLK] = &gcc_video_xo_clk.clkr,
2896 [GPLL0] = &gpll0.clkr,
2897 [GPLL0_OUT_AUX2] = &gpll0_out_aux2.clkr,
2898 [GPLL1] = &gpll1.clkr,
2899 [GPLL10] = &gpll10.clkr,
2900 [GPLL11] = &gpll11.clkr,
2901 [GPLL3] = &gpll3.clkr,
2902 [GPLL3_OUT_MAIN] = &gpll3_out_main.clkr,
2903 [GPLL4] = &gpll4.clkr,
2904 [GPLL5] = &gpll5.clkr,
2905 [GPLL6] = &gpll6.clkr,
2906 [GPLL6_OUT_MAIN] = &gpll6_out_main.clkr,
2907 [GPLL7] = &gpll7.clkr,
2908 [GPLL8] = &gpll8.clkr,
2909 [GPLL8_OUT_MAIN] = &gpll8_out_main.clkr,
2910 [GPLL9] = &gpll9.clkr,
2911 [GPLL9_OUT_MAIN] = &gpll9_out_main.clkr,
2912 };
2913
2914 static const struct qcom_reset_map gcc_qcm2290_resets[] = {
2915 [GCC_CAMSS_OPE_BCR] = { 0x55000 },
2916 [GCC_CAMSS_TFE_BCR] = { 0x52000 },
2917 [GCC_CAMSS_TOP_BCR] = { 0x58000 },
2918 [GCC_GPU_BCR] = { 0x36000 },
2919 [GCC_MMSS_BCR] = { 0x17000 },
2920 [GCC_PDM_BCR] = { 0x20000 },
2921 [GCC_QUPV3_WRAPPER_0_BCR] = { 0x1f000 },
2922 [GCC_QUSB2PHY_PRIM_BCR] = { 0x1c000 },
2923 [GCC_SDCC1_BCR] = { 0x38000 },
2924 [GCC_SDCC2_BCR] = { 0x1e000 },
2925 [GCC_USB30_PRIM_BCR] = { 0x1a000 },
2926 [GCC_USB3_PHY_PRIM_SP0_BCR] = { 0x1b000 },
2927 [GCC_USB3PHY_PHY_PRIM_SP0_BCR] = { 0x1b008 },
2928 [GCC_USB_PHY_CFG_AHB2PHY_BCR] = { 0x1d000 },
2929 [GCC_VCODEC0_BCR] = { 0x58094 },
2930 [GCC_VENUS_BCR] = { 0x58078 },
2931 [GCC_VIDEO_INTERFACE_BCR] = { 0x6e000 },
2932 };
2933
2934 static struct gdsc *gcc_qcm2290_gdscs[] = {
2935 [GCC_CAMSS_TOP_GDSC] = &gcc_camss_top_gdsc,
2936 [GCC_USB30_PRIM_GDSC] = &gcc_usb30_prim_gdsc,
2937 [GCC_VCODEC0_GDSC] = &gcc_vcodec0_gdsc,
2938 [GCC_VENUS_GDSC] = &gcc_venus_gdsc,
2939 [HLOS1_VOTE_TURING_MMU_TBU1_GDSC] = &hlos1_vote_turing_mmu_tbu1_gdsc,
2940 [HLOS1_VOTE_TURING_MMU_TBU0_GDSC] = &hlos1_vote_turing_mmu_tbu0_gdsc,
2941 [HLOS1_VOTE_MM_SNOC_MMU_TBU_RT_GDSC] = &hlos1_vote_mm_snoc_mmu_tbu_rt_gdsc,
2942 [HLOS1_VOTE_MM_SNOC_MMU_TBU_NRT_GDSC] = &hlos1_vote_mm_snoc_mmu_tbu_nrt_gdsc,
2943 };
2944
2945 static const struct clk_rcg_dfs_data gcc_dfs_clocks[] = {
2946 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s0_clk_src),
2947 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s1_clk_src),
2948 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s2_clk_src),
2949 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s3_clk_src),
2950 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s4_clk_src),
2951 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s5_clk_src),
2952 };
2953
2954 static const struct regmap_config gcc_qcm2290_regmap_config = {
2955 .reg_bits = 32,
2956 .reg_stride = 4,
2957 .val_bits = 32,
2958 .max_register = 0xc7000,
2959 .fast_io = true,
2960 };
2961
2962 static const struct qcom_cc_desc gcc_qcm2290_desc = {
2963 .config = &gcc_qcm2290_regmap_config,
2964 .clks = gcc_qcm2290_clocks,
2965 .num_clks = ARRAY_SIZE(gcc_qcm2290_clocks),
2966 .resets = gcc_qcm2290_resets,
2967 .num_resets = ARRAY_SIZE(gcc_qcm2290_resets),
2968 .gdscs = gcc_qcm2290_gdscs,
2969 .num_gdscs = ARRAY_SIZE(gcc_qcm2290_gdscs),
2970 };
2971
2972 static const struct of_device_id gcc_qcm2290_match_table[] = {
2973 { .compatible = "qcom,gcc-qcm2290" },
2974 { }
2975 };
2976 MODULE_DEVICE_TABLE(of, gcc_qcm2290_match_table);
2977
gcc_qcm2290_probe(struct platform_device * pdev)2978 static int gcc_qcm2290_probe(struct platform_device *pdev)
2979 {
2980 struct regmap *regmap;
2981 int ret;
2982
2983 regmap = qcom_cc_map(pdev, &gcc_qcm2290_desc);
2984 if (IS_ERR(regmap))
2985 return PTR_ERR(regmap);
2986
2987 ret = qcom_cc_register_rcg_dfs(regmap, gcc_dfs_clocks,
2988 ARRAY_SIZE(gcc_dfs_clocks));
2989 if (ret)
2990 return ret;
2991
2992 clk_alpha_pll_configure(&gpll10, regmap, &gpll10_config);
2993 clk_alpha_pll_configure(&gpll11, regmap, &gpll11_config);
2994 clk_alpha_pll_configure(&gpll8, regmap, &gpll8_config);
2995 clk_alpha_pll_configure(&gpll9, regmap, &gpll9_config);
2996
2997 return qcom_cc_really_probe(pdev, &gcc_qcm2290_desc, regmap);
2998 }
2999
3000 static struct platform_driver gcc_qcm2290_driver = {
3001 .probe = gcc_qcm2290_probe,
3002 .driver = {
3003 .name = "gcc-qcm2290",
3004 .of_match_table = gcc_qcm2290_match_table,
3005 },
3006 };
3007
gcc_qcm2290_init(void)3008 static int __init gcc_qcm2290_init(void)
3009 {
3010 return platform_driver_register(&gcc_qcm2290_driver);
3011 }
3012 subsys_initcall(gcc_qcm2290_init);
3013
gcc_qcm2290_exit(void)3014 static void __exit gcc_qcm2290_exit(void)
3015 {
3016 platform_driver_unregister(&gcc_qcm2290_driver);
3017 }
3018 module_exit(gcc_qcm2290_exit);
3019
3020 MODULE_DESCRIPTION("QTI GCC QCM2290 Driver");
3021 MODULE_LICENSE("GPL v2");
3022