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