1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3 * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
4 */
5
6 #include <linux/clk-provider.h>
7 #include <linux/module.h>
8 #include <linux/platform_device.h>
9 #include <linux/regmap.h>
10
11 #include <dt-bindings/clock/qcom,shikra-gcc.h>
12
13 #include "clk-alpha-pll.h"
14 #include "clk-branch.h"
15 #include "clk-pll.h"
16 #include "clk-rcg.h"
17 #include "clk-regmap.h"
18 #include "clk-regmap-divider.h"
19 #include "clk-regmap-mux.h"
20 #include "clk-regmap-phy-mux.h"
21 #include "common.h"
22 #include "gdsc.h"
23 #include "reset.h"
24
25 enum {
26 DT_BI_TCXO,
27 DT_SLEEP_CLK,
28 DT_EMAC0_SGMIIPHY_RCLK,
29 DT_EMAC0_SGMIIPHY_TCLK,
30 DT_EMAC1_SGMIIPHY_RCLK,
31 DT_EMAC1_SGMIIPHY_TCLK,
32 DT_PCIE_PIPE_CLK,
33 DT_USB3_PHY_WRAPPER_GCC_USB30_PIPE_CLK,
34 };
35
36 enum {
37 P_BI_TCXO,
38 P_EMAC0_SGMIIPHY_RCLK,
39 P_EMAC0_SGMIIPHY_TCLK,
40 P_EMAC1_SGMIIPHY_RCLK,
41 P_EMAC1_SGMIIPHY_TCLK,
42 P_GPLL0_OUT_AUX2,
43 P_GPLL0_OUT_EARLY,
44 P_GPLL10_OUT_MAIN,
45 P_GPLL11_OUT_AUX,
46 P_GPLL11_OUT_AUX2,
47 P_GPLL11_OUT_MAIN,
48 P_GPLL12_OUT_AUX2,
49 P_GPLL12_OUT_EARLY,
50 P_GPLL3_OUT_EARLY,
51 P_GPLL3_OUT_MAIN,
52 P_GPLL4_OUT_MAIN,
53 P_GPLL5_OUT_MAIN,
54 P_GPLL6_OUT_EARLY,
55 P_GPLL6_OUT_MAIN,
56 P_GPLL7_OUT_MAIN,
57 P_GPLL8_OUT_EARLY,
58 P_GPLL8_OUT_MAIN,
59 P_GPLL9_OUT_EARLY,
60 P_GPLL9_OUT_MAIN,
61 P_PCIE_PIPE_CLK,
62 P_SLEEP_CLK,
63 P_USB3_PHY_WRAPPER_GCC_USB30_PIPE_CLK,
64 };
65
66 static const struct pll_vco brammo_vco[] = {
67 { 500000000, 1250000000, 0 },
68 };
69
70 static const struct pll_vco default_vco[] = {
71 { 500000000, 1000000000, 2 },
72 };
73
74 static const struct pll_vco spark_vco[] = {
75 { 750000000, 1500000000, 1 },
76 };
77
78 static struct clk_alpha_pll gpll0 = {
79 .offset = 0x0,
80 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT_EVO],
81 .clkr = {
82 .enable_reg = 0x79000,
83 .enable_mask = BIT(0),
84 .hw.init = &(const struct clk_init_data) {
85 .name = "gpll0",
86 .parent_data = &(const struct clk_parent_data) {
87 .index = DT_BI_TCXO,
88 },
89 .num_parents = 1,
90 .ops = &clk_alpha_pll_fixed_ops,
91 },
92 },
93 };
94
95 static const struct clk_div_table post_div_table_gpll0_out_aux2[] = {
96 { 0x1, 2 },
97 { }
98 };
99
100 static struct clk_alpha_pll_postdiv gpll0_out_aux2 = {
101 .offset = 0x0,
102 .post_div_shift = 8,
103 .post_div_table = post_div_table_gpll0_out_aux2,
104 .num_post_div = ARRAY_SIZE(post_div_table_gpll0_out_aux2),
105 .width = 4,
106 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT_EVO],
107 .clkr.hw.init = &(const struct clk_init_data) {
108 .name = "gpll0_out_aux2",
109 .parent_hws = (const struct clk_hw*[]) {
110 &gpll0.clkr.hw,
111 },
112 .num_parents = 1,
113 .ops = &clk_alpha_pll_postdiv_ro_ops,
114 },
115 };
116
117 /* 1152.0 MHz Configuration */
118 static const struct alpha_pll_config gpll10_config = {
119 .l = 0x3c,
120 .alpha = 0x0,
121 .vco_val = BIT(20),
122 .vco_mask = GENMASK(21, 20),
123 .main_output_mask = BIT(0),
124 .config_ctl_val = 0x4001055b,
125 .test_ctl_hi_val = 0x1,
126 };
127
128 static struct clk_alpha_pll gpll10 = {
129 .offset = 0xa000,
130 .config = &gpll10_config,
131 .vco_table = spark_vco,
132 .num_vco = ARRAY_SIZE(spark_vco),
133 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT_EVO],
134 .clkr = {
135 .enable_reg = 0x79000,
136 .enable_mask = BIT(10),
137 .hw.init = &(const struct clk_init_data) {
138 .name = "gpll10",
139 .parent_data = &(const struct clk_parent_data) {
140 .index = DT_BI_TCXO,
141 },
142 .num_parents = 1,
143 .ops = &clk_alpha_pll_ops,
144 },
145 },
146 };
147
148 /* 600.0 MHz Configuration */
149 static const struct alpha_pll_config gpll11_config = {
150 .l = 0x1f,
151 .alpha = 0x0,
152 .alpha_hi = 0x40,
153 .alpha_en_mask = BIT(24),
154 .vco_val = BIT(21),
155 .vco_mask = GENMASK(21, 20),
156 .main_output_mask = BIT(0),
157 .config_ctl_val = 0x4001055b,
158 .test_ctl_hi_val = 0x1,
159 };
160
161 static struct clk_alpha_pll gpll11 = {
162 .offset = 0xb000,
163 .config = &gpll11_config,
164 .vco_table = default_vco,
165 .num_vco = ARRAY_SIZE(default_vco),
166 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT_EVO],
167 .flags = SUPPORTS_DYNAMIC_UPDATE,
168 .clkr = {
169 .enable_reg = 0x79000,
170 .enable_mask = BIT(11),
171 .hw.init = &(const struct clk_init_data) {
172 .name = "gpll11",
173 .parent_data = &(const struct clk_parent_data) {
174 .index = DT_BI_TCXO,
175 },
176 .num_parents = 1,
177 .ops = &clk_alpha_pll_ops,
178 },
179 },
180 };
181
182 static struct clk_alpha_pll gpll12 = {
183 .offset = 0xc000,
184 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT_EVO],
185 .clkr = {
186 .enable_reg = 0x79000,
187 .enable_mask = BIT(12),
188 .hw.init = &(const struct clk_init_data) {
189 .name = "gpll12",
190 .parent_data = &(const struct clk_parent_data) {
191 .index = DT_BI_TCXO,
192 },
193 .num_parents = 1,
194 .ops = &clk_alpha_pll_fixed_ops,
195 },
196 },
197 };
198
199 static const struct clk_div_table post_div_table_gpll12_out_aux2[] = {
200 { 0x1, 2 },
201 { }
202 };
203
204 static struct clk_alpha_pll_postdiv gpll12_out_aux2 = {
205 .offset = 0xc000,
206 .post_div_shift = 8,
207 .post_div_table = post_div_table_gpll12_out_aux2,
208 .num_post_div = ARRAY_SIZE(post_div_table_gpll12_out_aux2),
209 .width = 4,
210 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT_EVO],
211 .clkr.hw.init = &(const struct clk_init_data) {
212 .name = "gpll12_out_aux2",
213 .parent_hws = (const struct clk_hw*[]) {
214 &gpll12.clkr.hw,
215 },
216 .num_parents = 1,
217 .ops = &clk_alpha_pll_postdiv_ro_ops,
218 },
219 };
220
221 static struct clk_alpha_pll gpll3 = {
222 .offset = 0x3000,
223 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT_EVO],
224 .clkr = {
225 .enable_reg = 0x79000,
226 .enable_mask = BIT(3),
227 .hw.init = &(const struct clk_init_data) {
228 .name = "gpll3",
229 .parent_data = &(const struct clk_parent_data) {
230 .index = DT_BI_TCXO,
231 },
232 .num_parents = 1,
233 .ops = &clk_alpha_pll_fixed_ops,
234 },
235 },
236 };
237
238 static const struct clk_div_table post_div_table_gpll3_out_main[] = {
239 { 0x1, 2 },
240 { }
241 };
242
243 static struct clk_alpha_pll_postdiv gpll3_out_main = {
244 .offset = 0x3000,
245 .post_div_shift = 8,
246 .post_div_table = post_div_table_gpll3_out_main,
247 .num_post_div = ARRAY_SIZE(post_div_table_gpll3_out_main),
248 .width = 4,
249 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT_EVO],
250 .clkr.hw.init = &(const struct clk_init_data) {
251 .name = "gpll3_out_main",
252 .parent_hws = (const struct clk_hw*[]) {
253 &gpll3.clkr.hw,
254 },
255 .num_parents = 1,
256 .ops = &clk_alpha_pll_postdiv_ro_ops,
257 },
258 };
259
260 static struct clk_alpha_pll gpll4 = {
261 .offset = 0x4000,
262 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT_EVO],
263 .clkr = {
264 .enable_reg = 0x79000,
265 .enable_mask = BIT(4),
266 .hw.init = &(const struct clk_init_data) {
267 .name = "gpll4",
268 .parent_data = &(const struct clk_parent_data) {
269 .index = DT_BI_TCXO,
270 },
271 .num_parents = 1,
272 .ops = &clk_alpha_pll_fixed_ops,
273 },
274 },
275 };
276
277 static struct clk_alpha_pll gpll5 = {
278 .offset = 0x5000,
279 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT_EVO],
280 .clkr = {
281 .enable_reg = 0x79000,
282 .enable_mask = BIT(5),
283 .hw.init = &(const struct clk_init_data) {
284 .name = "gpll5",
285 .parent_data = &(const struct clk_parent_data) {
286 .index = DT_BI_TCXO,
287 },
288 .num_parents = 1,
289 .ops = &clk_alpha_pll_fixed_ops,
290 },
291 },
292 };
293
294 static struct clk_alpha_pll gpll6 = {
295 .offset = 0x6000,
296 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT_EVO],
297 .clkr = {
298 .enable_reg = 0x79000,
299 .enable_mask = BIT(6),
300 .hw.init = &(const struct clk_init_data) {
301 .name = "gpll6",
302 .parent_data = &(const struct clk_parent_data) {
303 .index = DT_BI_TCXO,
304 },
305 .num_parents = 1,
306 .ops = &clk_alpha_pll_fixed_ops,
307 },
308 },
309 };
310
311 static const struct clk_div_table post_div_table_gpll6_out_main[] = {
312 { 0x1, 2 },
313 { }
314 };
315
316 static struct clk_alpha_pll_postdiv gpll6_out_main = {
317 .offset = 0x6000,
318 .post_div_shift = 8,
319 .post_div_table = post_div_table_gpll6_out_main,
320 .num_post_div = ARRAY_SIZE(post_div_table_gpll6_out_main),
321 .width = 4,
322 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT_EVO],
323 .clkr.hw.init = &(const struct clk_init_data) {
324 .name = "gpll6_out_main",
325 .parent_hws = (const struct clk_hw*[]) {
326 &gpll6.clkr.hw,
327 },
328 .num_parents = 1,
329 .ops = &clk_alpha_pll_postdiv_ro_ops,
330 },
331 };
332
333 static struct clk_alpha_pll gpll7 = {
334 .offset = 0x7000,
335 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_DEFAULT_EVO],
336 .clkr = {
337 .enable_reg = 0x79000,
338 .enable_mask = BIT(7),
339 .hw.init = &(const struct clk_init_data) {
340 .name = "gpll7",
341 .parent_data = &(const struct clk_parent_data) {
342 .index = DT_BI_TCXO,
343 },
344 .num_parents = 1,
345 .ops = &clk_alpha_pll_fixed_ops,
346 },
347 },
348 };
349
350 /* 533.2 MHz Configuration */
351 static const struct alpha_pll_config gpll8_config = {
352 .l = 0x1b,
353 .alpha = 0x55555555,
354 .alpha_hi = 0xc5,
355 .alpha_en_mask = BIT(24),
356 .vco_val = BIT(21),
357 .vco_mask = GENMASK(21, 20),
358 .main_output_mask = BIT(0),
359 .early_output_mask = BIT(3),
360 .post_div_val = BIT(8),
361 .post_div_mask = GENMASK(11, 8),
362 .config_ctl_val = 0x4001055b,
363 .test_ctl_hi_val = 0x1,
364 };
365
366 static struct clk_alpha_pll gpll8 = {
367 .offset = 0x8000,
368 .config = &gpll8_config,
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 = &(const struct clk_init_data) {
377 .name = "gpll8",
378 .parent_data = &(const struct clk_parent_data) {
379 .index = DT_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 = &(const struct clk_init_data) {
400 .name = "gpll8_out_main",
401 .parent_hws = (const struct clk_hw*[]) {
402 &gpll8.clkr.hw,
403 },
404 .num_parents = 1,
405 .flags = CLK_SET_RATE_PARENT,
406 .ops = &clk_alpha_pll_postdiv_ro_ops,
407 },
408 };
409
410 /* 1152.0 MHz Configuration */
411 static const struct alpha_pll_config gpll9_config = {
412 .l = 0x3c,
413 .alpha = 0x0,
414 .post_div_val = BIT(8),
415 .post_div_mask = GENMASK(9, 8),
416 .main_output_mask = BIT(0),
417 .early_output_mask = BIT(3),
418 .config_ctl_val = 0x00004289,
419 .test_ctl_val = 0x08000000,
420 };
421
422 static struct clk_alpha_pll gpll9 = {
423 .offset = 0x9000,
424 .config = &gpll9_config,
425 .vco_table = brammo_vco,
426 .num_vco = ARRAY_SIZE(brammo_vco),
427 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_BRAMMO_EVO],
428 .clkr = {
429 .enable_reg = 0x79000,
430 .enable_mask = BIT(9),
431 .hw.init = &(const struct clk_init_data) {
432 .name = "gpll9",
433 .parent_data = &(const struct clk_parent_data) {
434 .index = DT_BI_TCXO,
435 },
436 .num_parents = 1,
437 .ops = &clk_alpha_pll_ops,
438 },
439 },
440 };
441
442 static const struct clk_div_table post_div_table_gpll9_out_main[] = {
443 { 0x1, 2 },
444 { }
445 };
446
447 static struct clk_alpha_pll_postdiv gpll9_out_main = {
448 .offset = 0x9000,
449 .post_div_shift = 8,
450 .post_div_table = post_div_table_gpll9_out_main,
451 .num_post_div = ARRAY_SIZE(post_div_table_gpll9_out_main),
452 .width = 2,
453 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_BRAMMO_EVO],
454 .clkr.hw.init = &(const struct clk_init_data) {
455 .name = "gpll9_out_main",
456 .parent_hws = (const struct clk_hw*[]) {
457 &gpll9.clkr.hw,
458 },
459 .num_parents = 1,
460 .flags = CLK_SET_RATE_PARENT,
461 .ops = &clk_alpha_pll_postdiv_ro_ops,
462 },
463 };
464
465 static const struct parent_map gcc_parent_map_0[] = {
466 { P_BI_TCXO, 0 },
467 { P_GPLL0_OUT_EARLY, 1 },
468 { P_GPLL0_OUT_AUX2, 2 },
469 };
470
471 static const struct clk_parent_data gcc_parent_data_0[] = {
472 { .index = DT_BI_TCXO },
473 { .hw = &gpll0.clkr.hw },
474 { .hw = &gpll0_out_aux2.clkr.hw },
475 };
476
477 static const struct parent_map gcc_parent_map_1[] = {
478 { P_BI_TCXO, 0 },
479 { P_GPLL0_OUT_EARLY, 1 },
480 { P_GPLL0_OUT_AUX2, 2 },
481 { P_GPLL6_OUT_MAIN, 4 },
482 };
483
484 static const struct clk_parent_data gcc_parent_data_1[] = {
485 { .index = DT_BI_TCXO },
486 { .hw = &gpll0.clkr.hw },
487 { .hw = &gpll0_out_aux2.clkr.hw },
488 { .hw = &gpll6_out_main.clkr.hw },
489 };
490
491 static const struct parent_map gcc_parent_map_2[] = {
492 { P_BI_TCXO, 0 },
493 { P_GPLL0_OUT_EARLY, 1 },
494 { P_GPLL0_OUT_AUX2, 2 },
495 { P_SLEEP_CLK, 5 },
496 };
497
498 static const struct clk_parent_data gcc_parent_data_2[] = {
499 { .index = DT_BI_TCXO },
500 { .hw = &gpll0.clkr.hw },
501 { .hw = &gpll0_out_aux2.clkr.hw },
502 { .index = DT_SLEEP_CLK },
503 };
504
505 static const struct parent_map gcc_parent_map_3[] = {
506 { P_BI_TCXO, 0 },
507 { P_GPLL0_OUT_EARLY, 1 },
508 { P_GPLL9_OUT_EARLY, 2 },
509 { P_GPLL10_OUT_MAIN, 3 },
510 { P_GPLL9_OUT_MAIN, 5 },
511 { P_GPLL3_OUT_MAIN, 6 },
512 };
513
514 static const struct clk_parent_data gcc_parent_data_3[] = {
515 { .index = DT_BI_TCXO },
516 { .hw = &gpll0.clkr.hw },
517 { .hw = &gpll9.clkr.hw },
518 { .hw = &gpll10.clkr.hw },
519 { .hw = &gpll9_out_main.clkr.hw },
520 { .hw = &gpll3_out_main.clkr.hw },
521 };
522
523 static const struct parent_map gcc_parent_map_4[] = {
524 { P_BI_TCXO, 0 },
525 { P_SLEEP_CLK, 5 },
526 };
527
528 static const struct clk_parent_data gcc_parent_data_4[] = {
529 { .index = DT_BI_TCXO },
530 { .index = DT_SLEEP_CLK },
531 };
532
533 static const struct parent_map gcc_parent_map_5[] = {
534 { P_BI_TCXO, 0 },
535 { P_GPLL0_OUT_EARLY, 1 },
536 { P_GPLL0_OUT_AUX2, 2 },
537 { P_GPLL10_OUT_MAIN, 3 },
538 { P_GPLL4_OUT_MAIN, 5 },
539 { P_GPLL3_OUT_EARLY, 6 },
540 };
541
542 static const struct clk_parent_data gcc_parent_data_5[] = {
543 { .index = DT_BI_TCXO },
544 { .hw = &gpll0.clkr.hw },
545 { .hw = &gpll0_out_aux2.clkr.hw },
546 { .hw = &gpll10.clkr.hw },
547 { .hw = &gpll4.clkr.hw },
548 { .hw = &gpll3.clkr.hw },
549 };
550
551 static const struct parent_map gcc_parent_map_6[] = {
552 { P_BI_TCXO, 0 },
553 { P_GPLL0_OUT_EARLY, 1 },
554 { P_GPLL0_OUT_AUX2, 2 },
555 { P_GPLL4_OUT_MAIN, 5 },
556 { P_GPLL3_OUT_MAIN, 6 },
557 };
558
559 static const struct clk_parent_data gcc_parent_data_6[] = {
560 { .index = DT_BI_TCXO },
561 { .hw = &gpll0.clkr.hw },
562 { .hw = &gpll0_out_aux2.clkr.hw },
563 { .hw = &gpll4.clkr.hw },
564 { .hw = &gpll3_out_main.clkr.hw },
565 };
566
567 static const struct parent_map gcc_parent_map_7[] = {
568 { P_BI_TCXO, 0 },
569 { P_GPLL0_OUT_EARLY, 1 },
570 { P_GPLL8_OUT_EARLY, 2 },
571 { P_GPLL10_OUT_MAIN, 3 },
572 { P_GPLL8_OUT_MAIN, 4 },
573 { P_GPLL9_OUT_MAIN, 5 },
574 { P_GPLL3_OUT_EARLY, 6 },
575 };
576
577 static const struct clk_parent_data gcc_parent_data_7[] = {
578 { .index = DT_BI_TCXO },
579 { .hw = &gpll0.clkr.hw },
580 { .hw = &gpll8.clkr.hw },
581 { .hw = &gpll10.clkr.hw },
582 { .hw = &gpll8_out_main.clkr.hw },
583 { .hw = &gpll9.clkr.hw },
584 { .hw = &gpll3.clkr.hw },
585 };
586
587 static const struct parent_map gcc_parent_map_8[] = {
588 { P_BI_TCXO, 0 },
589 { P_GPLL0_OUT_EARLY, 1 },
590 { P_GPLL8_OUT_EARLY, 2 },
591 { P_GPLL10_OUT_MAIN, 3 },
592 { P_GPLL8_OUT_MAIN, 4 },
593 { P_GPLL9_OUT_MAIN, 5 },
594 { P_GPLL3_OUT_MAIN, 6 },
595 };
596
597 static const struct clk_parent_data gcc_parent_data_8[] = {
598 { .index = DT_BI_TCXO },
599 { .hw = &gpll0.clkr.hw },
600 { .hw = &gpll8.clkr.hw },
601 { .hw = &gpll10.clkr.hw },
602 { .hw = &gpll8_out_main.clkr.hw },
603 { .hw = &gpll9.clkr.hw },
604 { .hw = &gpll3_out_main.clkr.hw },
605 };
606
607 static const struct parent_map gcc_parent_map_9[] = {
608 { P_BI_TCXO, 0 },
609 { P_GPLL0_OUT_EARLY, 1 },
610 { P_GPLL8_OUT_EARLY, 2 },
611 { P_GPLL10_OUT_MAIN, 3 },
612 { P_GPLL6_OUT_MAIN, 4 },
613 { P_GPLL9_OUT_MAIN, 5 },
614 { P_GPLL3_OUT_EARLY, 6 },
615 };
616
617 static const struct clk_parent_data gcc_parent_data_9[] = {
618 { .index = DT_BI_TCXO },
619 { .hw = &gpll0.clkr.hw },
620 { .hw = &gpll8.clkr.hw },
621 { .hw = &gpll10.clkr.hw },
622 { .hw = &gpll6_out_main.clkr.hw },
623 { .hw = &gpll9.clkr.hw },
624 { .hw = &gpll3.clkr.hw },
625 };
626
627 static const struct parent_map gcc_parent_map_10[] = {
628 { P_BI_TCXO, 0 },
629 { P_GPLL0_OUT_EARLY, 1 },
630 { P_SLEEP_CLK, 5 },
631 };
632
633 static const struct clk_parent_data gcc_parent_data_10[] = {
634 { .index = DT_BI_TCXO },
635 { .hw = &gpll0.clkr.hw },
636 { .index = DT_SLEEP_CLK },
637 };
638
639 static const struct parent_map gcc_parent_map_11[] = {
640 { P_BI_TCXO, 0 },
641 { P_GPLL12_OUT_EARLY, 1 },
642 { P_GPLL12_OUT_AUX2, 4 },
643 { P_GPLL3_OUT_EARLY, 6 },
644 };
645
646 static const struct clk_parent_data gcc_parent_data_11[] = {
647 { .index = DT_BI_TCXO },
648 { .hw = &gpll12.clkr.hw },
649 { .hw = &gpll12_out_aux2.clkr.hw },
650 { .hw = &gpll3.clkr.hw },
651 };
652
653 static const struct parent_map gcc_parent_map_12[] = {
654 { P_BI_TCXO, 0 },
655 { P_GPLL12_OUT_EARLY, 1 },
656 { P_GPLL0_OUT_AUX2, 2 },
657 { P_GPLL12_OUT_AUX2, 4 },
658 };
659
660 static const struct clk_parent_data gcc_parent_data_12[] = {
661 { .index = DT_BI_TCXO },
662 { .hw = &gpll12.clkr.hw },
663 { .hw = &gpll0_out_aux2.clkr.hw },
664 { .hw = &gpll12_out_aux2.clkr.hw },
665 };
666
667 static const struct parent_map gcc_parent_map_13[] = {
668 { P_BI_TCXO, 0 },
669 { P_GPLL0_OUT_EARLY, 1 },
670 };
671
672 static const struct clk_parent_data gcc_parent_data_13[] = {
673 { .index = DT_BI_TCXO },
674 { .hw = &gpll0.clkr.hw },
675 };
676
677 static const struct parent_map gcc_parent_map_14[] = {
678 { P_BI_TCXO, 0 },
679 { P_GPLL0_OUT_EARLY, 1 },
680 { P_GPLL0_OUT_AUX2, 2 },
681 { P_GPLL10_OUT_MAIN, 3 },
682 { P_GPLL8_OUT_MAIN, 4 },
683 { P_GPLL9_OUT_MAIN, 5 },
684 { P_GPLL3_OUT_EARLY, 6 },
685 };
686
687 static const struct clk_parent_data gcc_parent_data_14[] = {
688 { .index = DT_BI_TCXO },
689 { .hw = &gpll0.clkr.hw },
690 { .hw = &gpll0_out_aux2.clkr.hw },
691 { .hw = &gpll10.clkr.hw },
692 { .hw = &gpll8_out_main.clkr.hw },
693 { .hw = &gpll9.clkr.hw },
694 { .hw = &gpll3.clkr.hw },
695 };
696
697 static const struct parent_map gcc_parent_map_15[] = {
698 { P_BI_TCXO, 0 },
699 { P_GPLL0_OUT_EARLY, 1 },
700 { P_GPLL8_OUT_EARLY, 2 },
701 { P_GPLL10_OUT_MAIN, 3 },
702 { P_GPLL6_OUT_EARLY, 5 },
703 { P_GPLL3_OUT_MAIN, 6 },
704 };
705
706 static const struct clk_parent_data gcc_parent_data_15[] = {
707 { .index = DT_BI_TCXO },
708 { .hw = &gpll0.clkr.hw },
709 { .hw = &gpll8.clkr.hw },
710 { .hw = &gpll10.clkr.hw },
711 { .hw = &gpll6.clkr.hw },
712 { .hw = &gpll3_out_main.clkr.hw },
713 };
714
715 static const struct parent_map gcc_parent_map_21[] = {
716 { P_BI_TCXO, 0 },
717 { P_GPLL0_OUT_EARLY, 1 },
718 { P_GPLL0_OUT_AUX2, 2 },
719 { P_GPLL7_OUT_MAIN, 3 },
720 { P_GPLL4_OUT_MAIN, 5 },
721 };
722
723 static const struct clk_parent_data gcc_parent_data_21[] = {
724 { .index = DT_BI_TCXO },
725 { .hw = &gpll0.clkr.hw },
726 { .hw = &gpll0_out_aux2.clkr.hw },
727 { .hw = &gpll7.clkr.hw },
728 { .hw = &gpll4.clkr.hw },
729 };
730
731 static const struct parent_map gcc_parent_map_22[] = {
732 { P_BI_TCXO, 0 },
733 { P_GPLL12_OUT_EARLY, 1 },
734 { P_GPLL5_OUT_MAIN, 3 },
735 { P_GPLL12_OUT_AUX2, 4 },
736 { P_GPLL3_OUT_EARLY, 6 },
737 };
738
739 static const struct clk_parent_data gcc_parent_data_22[] = {
740 { .index = DT_BI_TCXO },
741 { .hw = &gpll12.clkr.hw },
742 { .hw = &gpll5.clkr.hw },
743 { .hw = &gpll12_out_aux2.clkr.hw },
744 { .hw = &gpll3.clkr.hw },
745 };
746
747 static const struct parent_map gcc_parent_map_24[] = {
748 { P_BI_TCXO, 0 },
749 { P_GPLL11_OUT_MAIN, 1 },
750 { P_GPLL11_OUT_AUX, 2 },
751 { P_GPLL11_OUT_AUX2, 3 },
752 };
753
754 static const struct clk_parent_data gcc_parent_data_24[] = {
755 { .index = DT_BI_TCXO },
756 { .hw = &gpll11.clkr.hw },
757 { .hw = &gpll11.clkr.hw },
758 { .hw = &gpll11.clkr.hw },
759 };
760
761 static struct clk_regmap_phy_mux gcc_emac0_cc_sgmiiphy_rx_clk_src = {
762 .reg = 0xad048,
763 .clkr = {
764 .hw.init = &(const struct clk_init_data) {
765 .name = "gcc_emac0_cc_sgmiiphy_rx_clk_src",
766 .parent_data = &(const struct clk_parent_data) {
767 .index = DT_EMAC0_SGMIIPHY_RCLK,
768 },
769 .num_parents = 1,
770 .ops = &clk_regmap_phy_mux_ops,
771 },
772 },
773 };
774
775 static struct clk_regmap_phy_mux gcc_emac0_cc_sgmiiphy_tx_clk_src = {
776 .reg = 0xad040,
777 .clkr = {
778 .hw.init = &(const struct clk_init_data) {
779 .name = "gcc_emac0_cc_sgmiiphy_tx_clk_src",
780 .parent_data = &(const struct clk_parent_data) {
781 .index = DT_EMAC0_SGMIIPHY_TCLK,
782 },
783 .num_parents = 1,
784 .ops = &clk_regmap_phy_mux_ops,
785 },
786 },
787 };
788
789 static struct clk_regmap_phy_mux gcc_emac1_cc_sgmiiphy_rx_clk_src = {
790 .reg = 0xae048,
791 .clkr = {
792 .hw.init = &(const struct clk_init_data) {
793 .name = "gcc_emac1_cc_sgmiiphy_rx_clk_src",
794 .parent_data = &(const struct clk_parent_data) {
795 .index = DT_EMAC1_SGMIIPHY_RCLK,
796 },
797 .num_parents = 1,
798 .ops = &clk_regmap_phy_mux_ops,
799 },
800 },
801 };
802
803 static struct clk_regmap_phy_mux gcc_emac1_cc_sgmiiphy_tx_clk_src = {
804 .reg = 0xae040,
805 .clkr = {
806 .hw.init = &(const struct clk_init_data) {
807 .name = "gcc_emac1_cc_sgmiiphy_tx_clk_src",
808 .parent_data = &(const struct clk_parent_data) {
809 .index = DT_EMAC1_SGMIIPHY_TCLK,
810 },
811 .num_parents = 1,
812 .ops = &clk_regmap_phy_mux_ops,
813 },
814 },
815 };
816
817 static struct clk_regmap_phy_mux gcc_pcie_pipe_clk_src = {
818 .reg = 0xaf058,
819 .clkr = {
820 .hw.init = &(const struct clk_init_data) {
821 .name = "gcc_pcie_pipe_clk_src",
822 .parent_data = &(const struct clk_parent_data) {
823 .index = DT_PCIE_PIPE_CLK,
824 },
825 .num_parents = 1,
826 .ops = &clk_regmap_phy_mux_ops,
827 },
828 },
829 };
830
831 static struct clk_regmap_phy_mux gcc_usb3_prim_phy_pipe_clk_src = {
832 .reg = 0x1a05c,
833 .clkr = {
834 .hw.init = &(const struct clk_init_data) {
835 .name = "gcc_usb3_prim_phy_pipe_clk_src",
836 .parent_data = &(const struct clk_parent_data) {
837 .index = DT_USB3_PHY_WRAPPER_GCC_USB30_PIPE_CLK,
838 },
839 .num_parents = 1,
840 .ops = &clk_regmap_phy_mux_ops,
841 },
842 },
843 };
844
845 static const struct freq_tbl ftbl_gcc_camss_axi_clk_src[] = {
846 F(19200000, P_BI_TCXO, 1, 0, 0),
847 F(150000000, P_GPLL0_OUT_AUX2, 2, 0, 0),
848 F(200000000, P_GPLL0_OUT_AUX2, 1.5, 0, 0),
849 F(300000000, P_GPLL0_OUT_AUX2, 1, 0, 0),
850 { }
851 };
852
853 static struct clk_rcg2 gcc_camss_axi_clk_src = {
854 .cmd_rcgr = 0x5802c,
855 .mnd_width = 0,
856 .hid_width = 5,
857 .parent_map = gcc_parent_map_5,
858 .freq_tbl = ftbl_gcc_camss_axi_clk_src,
859 .hw_clk_ctrl = true,
860 .clkr.hw.init = &(const struct clk_init_data) {
861 .name = "gcc_camss_axi_clk_src",
862 .parent_data = gcc_parent_data_5,
863 .num_parents = ARRAY_SIZE(gcc_parent_data_5),
864 .ops = &clk_rcg2_shared_ops,
865 },
866 };
867
868 static const struct freq_tbl ftbl_gcc_camss_cci_clk_src[] = {
869 F(19200000, P_BI_TCXO, 1, 0, 0),
870 F(37500000, P_GPLL0_OUT_AUX2, 8, 0, 0),
871 { }
872 };
873
874 static struct clk_rcg2 gcc_camss_cci_clk_src = {
875 .cmd_rcgr = 0x56000,
876 .mnd_width = 0,
877 .hid_width = 5,
878 .parent_map = gcc_parent_map_14,
879 .freq_tbl = ftbl_gcc_camss_cci_clk_src,
880 .hw_clk_ctrl = true,
881 .clkr.hw.init = &(const struct clk_init_data) {
882 .name = "gcc_camss_cci_clk_src",
883 .parent_data = gcc_parent_data_14,
884 .num_parents = ARRAY_SIZE(gcc_parent_data_14),
885 .ops = &clk_rcg2_shared_ops,
886 },
887 };
888
889 static const struct freq_tbl ftbl_gcc_camss_csi0phytimer_clk_src[] = {
890 F(19200000, P_BI_TCXO, 1, 0, 0),
891 F(100000000, P_GPLL0_OUT_AUX2, 3, 0, 0),
892 F(200000000, P_GPLL0_OUT_AUX2, 1.5, 0, 0),
893 F(268800000, P_GPLL4_OUT_MAIN, 3, 0, 0),
894 { }
895 };
896
897 static struct clk_rcg2 gcc_camss_csi0phytimer_clk_src = {
898 .cmd_rcgr = 0x45000,
899 .mnd_width = 0,
900 .hid_width = 5,
901 .parent_map = gcc_parent_map_6,
902 .freq_tbl = ftbl_gcc_camss_csi0phytimer_clk_src,
903 .hw_clk_ctrl = true,
904 .clkr.hw.init = &(const struct clk_init_data) {
905 .name = "gcc_camss_csi0phytimer_clk_src",
906 .parent_data = gcc_parent_data_6,
907 .num_parents = ARRAY_SIZE(gcc_parent_data_6),
908 .ops = &clk_rcg2_shared_ops,
909 },
910 };
911
912 static struct clk_rcg2 gcc_camss_csi1phytimer_clk_src = {
913 .cmd_rcgr = 0x4501c,
914 .mnd_width = 0,
915 .hid_width = 5,
916 .parent_map = gcc_parent_map_6,
917 .freq_tbl = ftbl_gcc_camss_csi0phytimer_clk_src,
918 .hw_clk_ctrl = true,
919 .clkr.hw.init = &(const struct clk_init_data) {
920 .name = "gcc_camss_csi1phytimer_clk_src",
921 .parent_data = gcc_parent_data_6,
922 .num_parents = ARRAY_SIZE(gcc_parent_data_6),
923 .ops = &clk_rcg2_shared_ops,
924 },
925 };
926
927 static const struct freq_tbl ftbl_gcc_camss_mclk0_clk_src[] = {
928 F(19200000, P_GPLL9_OUT_EARLY, 1, 1, 60),
929 F(24000000, P_GPLL9_OUT_MAIN, 1, 1, 24),
930 F(64000000, P_GPLL9_OUT_EARLY, 9, 1, 2),
931 { }
932 };
933
934 static struct clk_rcg2 gcc_camss_mclk0_clk_src = {
935 .cmd_rcgr = 0x51000,
936 .mnd_width = 8,
937 .hid_width = 5,
938 .parent_map = gcc_parent_map_3,
939 .freq_tbl = ftbl_gcc_camss_mclk0_clk_src,
940 .hw_clk_ctrl = true,
941 .clkr.hw.init = &(const struct clk_init_data) {
942 .name = "gcc_camss_mclk0_clk_src",
943 .parent_data = gcc_parent_data_3,
944 .num_parents = ARRAY_SIZE(gcc_parent_data_3),
945 .flags = CLK_SET_RATE_PARENT,
946 .ops = &clk_rcg2_shared_ops,
947 },
948 };
949
950 static struct clk_rcg2 gcc_camss_mclk1_clk_src = {
951 .cmd_rcgr = 0x5101c,
952 .mnd_width = 8,
953 .hid_width = 5,
954 .parent_map = gcc_parent_map_3,
955 .freq_tbl = ftbl_gcc_camss_mclk0_clk_src,
956 .hw_clk_ctrl = true,
957 .clkr.hw.init = &(const struct clk_init_data) {
958 .name = "gcc_camss_mclk1_clk_src",
959 .parent_data = gcc_parent_data_3,
960 .num_parents = ARRAY_SIZE(gcc_parent_data_3),
961 .flags = CLK_SET_RATE_PARENT,
962 .ops = &clk_rcg2_shared_ops,
963 },
964 };
965
966 static struct clk_rcg2 gcc_camss_mclk2_clk_src = {
967 .cmd_rcgr = 0x51038,
968 .mnd_width = 8,
969 .hid_width = 5,
970 .parent_map = gcc_parent_map_3,
971 .freq_tbl = ftbl_gcc_camss_mclk0_clk_src,
972 .hw_clk_ctrl = true,
973 .clkr.hw.init = &(const struct clk_init_data) {
974 .name = "gcc_camss_mclk2_clk_src",
975 .parent_data = gcc_parent_data_3,
976 .num_parents = ARRAY_SIZE(gcc_parent_data_3),
977 .flags = CLK_SET_RATE_PARENT,
978 .ops = &clk_rcg2_shared_ops,
979 },
980 };
981
982 static struct clk_rcg2 gcc_camss_mclk3_clk_src = {
983 .cmd_rcgr = 0x51054,
984 .mnd_width = 8,
985 .hid_width = 5,
986 .parent_map = gcc_parent_map_3,
987 .freq_tbl = ftbl_gcc_camss_mclk0_clk_src,
988 .hw_clk_ctrl = true,
989 .clkr.hw.init = &(const struct clk_init_data) {
990 .name = "gcc_camss_mclk3_clk_src",
991 .parent_data = gcc_parent_data_3,
992 .num_parents = ARRAY_SIZE(gcc_parent_data_3),
993 .flags = CLK_SET_RATE_PARENT,
994 .ops = &clk_rcg2_shared_ops,
995 },
996 };
997
998 static const struct freq_tbl ftbl_gcc_camss_ope_ahb_clk_src[] = {
999 F(19200000, P_BI_TCXO, 1, 0, 0),
1000 F(171428571, P_GPLL0_OUT_EARLY, 3.5, 0, 0),
1001 F(240000000, P_GPLL0_OUT_EARLY, 2.5, 0, 0),
1002 { }
1003 };
1004
1005 static struct clk_rcg2 gcc_camss_ope_ahb_clk_src = {
1006 .cmd_rcgr = 0x55024,
1007 .mnd_width = 0,
1008 .hid_width = 5,
1009 .parent_map = gcc_parent_map_7,
1010 .freq_tbl = ftbl_gcc_camss_ope_ahb_clk_src,
1011 .hw_clk_ctrl = true,
1012 .clkr.hw.init = &(const struct clk_init_data) {
1013 .name = "gcc_camss_ope_ahb_clk_src",
1014 .parent_data = gcc_parent_data_7,
1015 .num_parents = ARRAY_SIZE(gcc_parent_data_7),
1016 .ops = &clk_rcg2_shared_ops,
1017 },
1018 };
1019
1020 static const struct freq_tbl ftbl_gcc_camss_ope_clk_src[] = {
1021 F(19200000, P_BI_TCXO, 1, 0, 0),
1022 F(200000000, P_GPLL8_OUT_MAIN, 2, 0, 0),
1023 F(266600000, P_GPLL8_OUT_MAIN, 1, 0, 0),
1024 F(465000000, P_GPLL8_OUT_MAIN, 1, 0, 0),
1025 F(580000000, P_GPLL8_OUT_EARLY, 1, 0, 0),
1026 { }
1027 };
1028
1029 static struct clk_rcg2 gcc_camss_ope_clk_src = {
1030 .cmd_rcgr = 0x55004,
1031 .mnd_width = 0,
1032 .hid_width = 5,
1033 .parent_map = gcc_parent_map_7,
1034 .freq_tbl = ftbl_gcc_camss_ope_clk_src,
1035 .hw_clk_ctrl = true,
1036 .clkr.hw.init = &(const struct clk_init_data) {
1037 .name = "gcc_camss_ope_clk_src",
1038 .parent_data = gcc_parent_data_7,
1039 .num_parents = ARRAY_SIZE(gcc_parent_data_7),
1040 .flags = CLK_SET_RATE_PARENT,
1041 .ops = &clk_rcg2_shared_ops,
1042 },
1043 };
1044
1045 static const struct freq_tbl ftbl_gcc_camss_tfe_0_clk_src[] = {
1046 F(19200000, P_BI_TCXO, 1, 0, 0),
1047 F(128000000, P_GPLL10_OUT_MAIN, 9, 0, 0),
1048 F(135529412, P_GPLL10_OUT_MAIN, 8.5, 0, 0),
1049 F(144000000, P_GPLL10_OUT_MAIN, 8, 0, 0),
1050 F(153600000, P_GPLL10_OUT_MAIN, 7.5, 0, 0),
1051 F(164571429, P_GPLL10_OUT_MAIN, 7, 0, 0),
1052 F(177230769, P_GPLL10_OUT_MAIN, 6.5, 0, 0),
1053 F(192000000, P_GPLL10_OUT_MAIN, 6, 0, 0),
1054 F(209454545, P_GPLL10_OUT_MAIN, 5.5, 0, 0),
1055 F(230400000, P_GPLL10_OUT_MAIN, 5, 0, 0),
1056 F(256000000, P_GPLL10_OUT_MAIN, 4.5, 0, 0),
1057 F(288000000, P_GPLL10_OUT_MAIN, 4, 0, 0),
1058 F(329142857, P_GPLL10_OUT_MAIN, 3.5, 0, 0),
1059 F(384000000, P_GPLL10_OUT_MAIN, 3, 0, 0),
1060 F(460800000, P_GPLL10_OUT_MAIN, 2.5, 0, 0),
1061 F(576000000, P_GPLL10_OUT_MAIN, 2, 0, 0),
1062 { }
1063 };
1064
1065 static struct clk_rcg2 gcc_camss_tfe_0_clk_src = {
1066 .cmd_rcgr = 0x52004,
1067 .mnd_width = 8,
1068 .hid_width = 5,
1069 .parent_map = gcc_parent_map_8,
1070 .freq_tbl = ftbl_gcc_camss_tfe_0_clk_src,
1071 .hw_clk_ctrl = true,
1072 .clkr.hw.init = &(const struct clk_init_data) {
1073 .name = "gcc_camss_tfe_0_clk_src",
1074 .parent_data = gcc_parent_data_8,
1075 .num_parents = ARRAY_SIZE(gcc_parent_data_8),
1076 .flags = CLK_SET_RATE_PARENT,
1077 .ops = &clk_rcg2_shared_ops,
1078 },
1079 };
1080
1081 static const struct freq_tbl ftbl_gcc_camss_tfe_0_csid_clk_src[] = {
1082 F(19200000, P_BI_TCXO, 1, 0, 0),
1083 F(120000000, P_GPLL0_OUT_EARLY, 5, 0, 0),
1084 F(192000000, P_GPLL6_OUT_MAIN, 2, 0, 0),
1085 F(240000000, P_GPLL0_OUT_EARLY, 2.5, 0, 0),
1086 F(384000000, P_GPLL6_OUT_MAIN, 1, 0, 0),
1087 F(426400000, P_GPLL3_OUT_EARLY, 2.5, 0, 0),
1088 { }
1089 };
1090
1091 static struct clk_rcg2 gcc_camss_tfe_0_csid_clk_src = {
1092 .cmd_rcgr = 0x52094,
1093 .mnd_width = 0,
1094 .hid_width = 5,
1095 .parent_map = gcc_parent_map_9,
1096 .freq_tbl = ftbl_gcc_camss_tfe_0_csid_clk_src,
1097 .hw_clk_ctrl = true,
1098 .clkr.hw.init = &(const struct clk_init_data) {
1099 .name = "gcc_camss_tfe_0_csid_clk_src",
1100 .parent_data = gcc_parent_data_9,
1101 .num_parents = ARRAY_SIZE(gcc_parent_data_9),
1102 .ops = &clk_rcg2_shared_ops,
1103 },
1104 };
1105
1106 static struct clk_rcg2 gcc_camss_tfe_1_clk_src = {
1107 .cmd_rcgr = 0x52024,
1108 .mnd_width = 8,
1109 .hid_width = 5,
1110 .parent_map = gcc_parent_map_8,
1111 .freq_tbl = ftbl_gcc_camss_tfe_0_clk_src,
1112 .hw_clk_ctrl = true,
1113 .clkr.hw.init = &(const struct clk_init_data) {
1114 .name = "gcc_camss_tfe_1_clk_src",
1115 .parent_data = gcc_parent_data_8,
1116 .num_parents = ARRAY_SIZE(gcc_parent_data_8),
1117 .ops = &clk_rcg2_shared_ops,
1118 },
1119 };
1120
1121 static struct clk_rcg2 gcc_camss_tfe_1_csid_clk_src = {
1122 .cmd_rcgr = 0x520b4,
1123 .mnd_width = 0,
1124 .hid_width = 5,
1125 .parent_map = gcc_parent_map_9,
1126 .freq_tbl = ftbl_gcc_camss_tfe_0_csid_clk_src,
1127 .hw_clk_ctrl = true,
1128 .clkr.hw.init = &(const struct clk_init_data) {
1129 .name = "gcc_camss_tfe_1_csid_clk_src",
1130 .parent_data = gcc_parent_data_9,
1131 .num_parents = ARRAY_SIZE(gcc_parent_data_9),
1132 .ops = &clk_rcg2_shared_ops,
1133 },
1134 };
1135
1136 static const struct freq_tbl ftbl_gcc_camss_tfe_cphy_rx_clk_src[] = {
1137 F(19200000, P_BI_TCXO, 1, 0, 0),
1138 F(240000000, P_GPLL0_OUT_EARLY, 2.5, 0, 0),
1139 F(341333333, P_GPLL6_OUT_EARLY, 1, 4, 9),
1140 F(384000000, P_GPLL6_OUT_EARLY, 2, 0, 0),
1141 { }
1142 };
1143
1144 static struct clk_rcg2 gcc_camss_tfe_cphy_rx_clk_src = {
1145 .cmd_rcgr = 0x52064,
1146 .mnd_width = 16,
1147 .hid_width = 5,
1148 .parent_map = gcc_parent_map_15,
1149 .freq_tbl = ftbl_gcc_camss_tfe_cphy_rx_clk_src,
1150 .hw_clk_ctrl = true,
1151 .clkr.hw.init = &(const struct clk_init_data) {
1152 .name = "gcc_camss_tfe_cphy_rx_clk_src",
1153 .parent_data = gcc_parent_data_15,
1154 .num_parents = ARRAY_SIZE(gcc_parent_data_15),
1155 .ops = &clk_rcg2_shared_ops,
1156 },
1157 };
1158
1159 static const struct freq_tbl ftbl_gcc_camss_top_ahb_clk_src[] = {
1160 F(19200000, P_BI_TCXO, 1, 0, 0),
1161 F(40000000, P_GPLL0_OUT_AUX2, 7.5, 0, 0),
1162 F(80000000, P_GPLL0_OUT_EARLY, 7.5, 0, 0),
1163 { }
1164 };
1165
1166 static struct clk_rcg2 gcc_camss_top_ahb_clk_src = {
1167 .cmd_rcgr = 0x58010,
1168 .mnd_width = 0,
1169 .hid_width = 5,
1170 .parent_map = gcc_parent_map_5,
1171 .freq_tbl = ftbl_gcc_camss_top_ahb_clk_src,
1172 .hw_clk_ctrl = true,
1173 .clkr.hw.init = &(const struct clk_init_data) {
1174 .name = "gcc_camss_top_ahb_clk_src",
1175 .parent_data = gcc_parent_data_5,
1176 .num_parents = ARRAY_SIZE(gcc_parent_data_5),
1177 .ops = &clk_rcg2_shared_ops,
1178 },
1179 };
1180
1181 static const struct freq_tbl ftbl_gcc_emac0_axi_clk_src[] = {
1182 F(75000000, P_GPLL0_OUT_AUX2, 4, 0, 0),
1183 F(120000000, P_GPLL0_OUT_AUX2, 2.5, 0, 0),
1184 F(150000000, P_GPLL0_OUT_AUX2, 2, 0, 0),
1185 F(200000000, P_GPLL0_OUT_AUX2, 1.5, 0, 0),
1186 F(240000000, P_GPLL0_OUT_EARLY, 2.5, 0, 0),
1187 { }
1188 };
1189
1190 static struct clk_rcg2 gcc_emac0_axi_clk_src = {
1191 .cmd_rcgr = 0x109dc,
1192 .mnd_width = 0,
1193 .hid_width = 5,
1194 .parent_map = gcc_parent_map_0,
1195 .freq_tbl = ftbl_gcc_emac0_axi_clk_src,
1196 .hw_clk_ctrl = true,
1197 .clkr.hw.init = &(const struct clk_init_data) {
1198 .name = "gcc_emac0_axi_clk_src",
1199 .parent_data = gcc_parent_data_0,
1200 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
1201 .ops = &clk_rcg2_shared_ops,
1202 },
1203 };
1204
1205 static const struct freq_tbl ftbl_gcc_emac0_phy_aux_clk_src[] = {
1206 F(19200000, P_BI_TCXO, 1, 0, 0),
1207 { }
1208 };
1209
1210 static struct clk_rcg2 gcc_emac0_phy_aux_clk_src = {
1211 .cmd_rcgr = 0xad01c,
1212 .mnd_width = 0,
1213 .hid_width = 5,
1214 .parent_map = gcc_parent_map_10,
1215 .freq_tbl = ftbl_gcc_emac0_phy_aux_clk_src,
1216 .hw_clk_ctrl = true,
1217 .clkr.hw.init = &(const struct clk_init_data) {
1218 .name = "gcc_emac0_phy_aux_clk_src",
1219 .parent_data = gcc_parent_data_10,
1220 .num_parents = ARRAY_SIZE(gcc_parent_data_10),
1221 .ops = &clk_rcg2_shared_ops,
1222 },
1223 };
1224
1225 static const struct freq_tbl ftbl_gcc_emac0_ptp_clk_src[] = {
1226 F(250000000, P_GPLL12_OUT_AUX2, 2, 0, 0),
1227 { }
1228 };
1229
1230 static struct clk_rcg2 gcc_emac0_ptp_clk_src = {
1231 .cmd_rcgr = 0xad064,
1232 .mnd_width = 0,
1233 .hid_width = 5,
1234 .parent_map = gcc_parent_map_11,
1235 .freq_tbl = ftbl_gcc_emac0_ptp_clk_src,
1236 .hw_clk_ctrl = true,
1237 .clkr.hw.init = &(const struct clk_init_data) {
1238 .name = "gcc_emac0_ptp_clk_src",
1239 .parent_data = gcc_parent_data_11,
1240 .num_parents = ARRAY_SIZE(gcc_parent_data_11),
1241 .ops = &clk_rcg2_shared_ops,
1242 },
1243 };
1244
1245 static const struct freq_tbl ftbl_gcc_emac0_rgmii_clk_src[] = {
1246 F(2500000, P_GPLL0_OUT_AUX2, 10, 1, 12),
1247 F(25000000, P_GPLL0_OUT_AUX2, 12, 0, 0),
1248 F(50000000, P_GPLL0_OUT_AUX2, 6, 0, 0),
1249 F(125000000, P_GPLL12_OUT_AUX2, 4, 0, 0),
1250 F(250000000, P_GPLL12_OUT_EARLY, 4, 0, 0),
1251 { }
1252 };
1253
1254 static struct clk_rcg2 gcc_emac0_rgmii_clk_src = {
1255 .cmd_rcgr = 0xad04c,
1256 .mnd_width = 8,
1257 .hid_width = 5,
1258 .parent_map = gcc_parent_map_12,
1259 .freq_tbl = ftbl_gcc_emac0_rgmii_clk_src,
1260 .hw_clk_ctrl = true,
1261 .clkr.hw.init = &(const struct clk_init_data) {
1262 .name = "gcc_emac0_rgmii_clk_src",
1263 .parent_data = gcc_parent_data_12,
1264 .num_parents = ARRAY_SIZE(gcc_parent_data_12),
1265 .ops = &clk_rcg2_shared_ops,
1266 },
1267 };
1268
1269 static struct clk_rcg2 gcc_emac1_axi_clk_src = {
1270 .cmd_rcgr = 0x109fc,
1271 .mnd_width = 0,
1272 .hid_width = 5,
1273 .parent_map = gcc_parent_map_0,
1274 .freq_tbl = ftbl_gcc_emac0_axi_clk_src,
1275 .hw_clk_ctrl = true,
1276 .clkr.hw.init = &(const struct clk_init_data) {
1277 .name = "gcc_emac1_axi_clk_src",
1278 .parent_data = gcc_parent_data_0,
1279 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
1280 .ops = &clk_rcg2_shared_ops,
1281 },
1282 };
1283
1284 static struct clk_rcg2 gcc_emac1_phy_aux_clk_src = {
1285 .cmd_rcgr = 0xae01c,
1286 .mnd_width = 0,
1287 .hid_width = 5,
1288 .parent_map = gcc_parent_map_10,
1289 .freq_tbl = ftbl_gcc_emac0_phy_aux_clk_src,
1290 .hw_clk_ctrl = true,
1291 .clkr.hw.init = &(const struct clk_init_data) {
1292 .name = "gcc_emac1_phy_aux_clk_src",
1293 .parent_data = gcc_parent_data_10,
1294 .num_parents = ARRAY_SIZE(gcc_parent_data_10),
1295 .ops = &clk_rcg2_shared_ops,
1296 },
1297 };
1298
1299 static struct clk_rcg2 gcc_emac1_ptp_clk_src = {
1300 .cmd_rcgr = 0xae064,
1301 .mnd_width = 0,
1302 .hid_width = 5,
1303 .parent_map = gcc_parent_map_11,
1304 .freq_tbl = ftbl_gcc_emac0_ptp_clk_src,
1305 .hw_clk_ctrl = true,
1306 .clkr.hw.init = &(const struct clk_init_data) {
1307 .name = "gcc_emac1_ptp_clk_src",
1308 .parent_data = gcc_parent_data_11,
1309 .num_parents = ARRAY_SIZE(gcc_parent_data_11),
1310 .ops = &clk_rcg2_shared_ops,
1311 },
1312 };
1313
1314 static struct clk_rcg2 gcc_emac1_rgmii_clk_src = {
1315 .cmd_rcgr = 0xae04c,
1316 .mnd_width = 8,
1317 .hid_width = 5,
1318 .parent_map = gcc_parent_map_12,
1319 .freq_tbl = ftbl_gcc_emac0_rgmii_clk_src,
1320 .hw_clk_ctrl = true,
1321 .clkr.hw.init = &(const struct clk_init_data) {
1322 .name = "gcc_emac1_rgmii_clk_src",
1323 .parent_data = gcc_parent_data_12,
1324 .num_parents = ARRAY_SIZE(gcc_parent_data_12),
1325 .ops = &clk_rcg2_shared_ops,
1326 },
1327 };
1328
1329 static const struct freq_tbl ftbl_gcc_gp1_clk_src[] = {
1330 F(25000000, P_GPLL0_OUT_AUX2, 12, 0, 0),
1331 F(50000000, P_GPLL0_OUT_AUX2, 6, 0, 0),
1332 F(100000000, P_GPLL0_OUT_AUX2, 3, 0, 0),
1333 F(200000000, P_GPLL0_OUT_AUX2, 1.5, 0, 0),
1334 { }
1335 };
1336
1337 static struct clk_rcg2 gcc_gp1_clk_src = {
1338 .cmd_rcgr = 0x4d004,
1339 .mnd_width = 8,
1340 .hid_width = 5,
1341 .parent_map = gcc_parent_map_2,
1342 .freq_tbl = ftbl_gcc_gp1_clk_src,
1343 .hw_clk_ctrl = true,
1344 .clkr.hw.init = &(const struct clk_init_data) {
1345 .name = "gcc_gp1_clk_src",
1346 .parent_data = gcc_parent_data_2,
1347 .num_parents = ARRAY_SIZE(gcc_parent_data_2),
1348 .ops = &clk_rcg2_shared_ops,
1349 },
1350 };
1351
1352 static struct clk_rcg2 gcc_gp2_clk_src = {
1353 .cmd_rcgr = 0x4e004,
1354 .mnd_width = 8,
1355 .hid_width = 5,
1356 .parent_map = gcc_parent_map_2,
1357 .freq_tbl = ftbl_gcc_gp1_clk_src,
1358 .hw_clk_ctrl = true,
1359 .clkr.hw.init = &(const struct clk_init_data) {
1360 .name = "gcc_gp2_clk_src",
1361 .parent_data = gcc_parent_data_2,
1362 .num_parents = ARRAY_SIZE(gcc_parent_data_2),
1363 .ops = &clk_rcg2_shared_ops,
1364 },
1365 };
1366
1367 static struct clk_rcg2 gcc_gp3_clk_src = {
1368 .cmd_rcgr = 0x4f004,
1369 .mnd_width = 8,
1370 .hid_width = 5,
1371 .parent_map = gcc_parent_map_2,
1372 .freq_tbl = ftbl_gcc_gp1_clk_src,
1373 .hw_clk_ctrl = true,
1374 .clkr.hw.init = &(const struct clk_init_data) {
1375 .name = "gcc_gp3_clk_src",
1376 .parent_data = gcc_parent_data_2,
1377 .num_parents = ARRAY_SIZE(gcc_parent_data_2),
1378 .ops = &clk_rcg2_shared_ops,
1379 },
1380 };
1381
1382 static struct clk_rcg2 gcc_pcie_aux_clk_src = {
1383 .cmd_rcgr = 0xaf074,
1384 .mnd_width = 16,
1385 .hid_width = 5,
1386 .parent_map = gcc_parent_map_4,
1387 .freq_tbl = ftbl_gcc_emac0_phy_aux_clk_src,
1388 .hw_clk_ctrl = true,
1389 .clkr.hw.init = &(const struct clk_init_data) {
1390 .name = "gcc_pcie_aux_clk_src",
1391 .parent_data = gcc_parent_data_4,
1392 .num_parents = ARRAY_SIZE(gcc_parent_data_4),
1393 .ops = &clk_rcg2_shared_ops,
1394 },
1395 };
1396
1397 static struct clk_rcg2 gcc_pcie_aux_phy_clk_src = {
1398 .cmd_rcgr = 0xaf05c,
1399 .mnd_width = 0,
1400 .hid_width = 5,
1401 .parent_map = gcc_parent_map_4,
1402 .freq_tbl = ftbl_gcc_emac0_phy_aux_clk_src,
1403 .hw_clk_ctrl = true,
1404 .clkr.hw.init = &(const struct clk_init_data) {
1405 .name = "gcc_pcie_aux_phy_clk_src",
1406 .parent_data = gcc_parent_data_4,
1407 .num_parents = ARRAY_SIZE(gcc_parent_data_4),
1408 .ops = &clk_rcg2_shared_ops,
1409 },
1410 };
1411
1412 static const struct freq_tbl ftbl_gcc_pcie_rchng_phy_clk_src[] = {
1413 F(100000000, P_GPLL0_OUT_AUX2, 3, 0, 0),
1414 { }
1415 };
1416
1417 static struct clk_rcg2 gcc_pcie_rchng_phy_clk_src = {
1418 .cmd_rcgr = 0xaf028,
1419 .mnd_width = 0,
1420 .hid_width = 5,
1421 .parent_map = gcc_parent_map_0,
1422 .freq_tbl = ftbl_gcc_pcie_rchng_phy_clk_src,
1423 .hw_clk_ctrl = true,
1424 .clkr.hw.init = &(const struct clk_init_data) {
1425 .name = "gcc_pcie_rchng_phy_clk_src",
1426 .parent_data = gcc_parent_data_0,
1427 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
1428 .ops = &clk_rcg2_shared_ops,
1429 },
1430 };
1431
1432 static const struct freq_tbl ftbl_gcc_pdm2_clk_src[] = {
1433 F(19200000, P_BI_TCXO, 1, 0, 0),
1434 F(60000000, P_GPLL0_OUT_AUX2, 5, 0, 0),
1435 { }
1436 };
1437
1438 static struct clk_rcg2 gcc_pdm2_clk_src = {
1439 .cmd_rcgr = 0x20010,
1440 .mnd_width = 0,
1441 .hid_width = 5,
1442 .parent_map = gcc_parent_map_0,
1443 .freq_tbl = ftbl_gcc_pdm2_clk_src,
1444 .hw_clk_ctrl = true,
1445 .clkr.hw.init = &(const struct clk_init_data) {
1446 .name = "gcc_pdm2_clk_src",
1447 .parent_data = gcc_parent_data_0,
1448 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
1449 .ops = &clk_rcg2_shared_ops,
1450 },
1451 };
1452
1453 static const struct freq_tbl ftbl_gcc_qupv3_wrap0_s0_clk_src[] = {
1454 F(7372800, P_GPLL0_OUT_AUX2, 1, 384, 15625),
1455 F(14745600, P_GPLL0_OUT_AUX2, 1, 768, 15625),
1456 F(19200000, P_BI_TCXO, 1, 0, 0),
1457 F(29491200, P_GPLL0_OUT_AUX2, 1, 1536, 15625),
1458 F(32000000, P_GPLL0_OUT_AUX2, 1, 8, 75),
1459 F(48000000, P_GPLL0_OUT_AUX2, 1, 4, 25),
1460 F(64000000, P_GPLL0_OUT_AUX2, 1, 16, 75),
1461 F(75000000, P_GPLL0_OUT_AUX2, 4, 0, 0),
1462 F(80000000, P_GPLL0_OUT_AUX2, 1, 4, 15),
1463 F(96000000, P_GPLL0_OUT_AUX2, 1, 8, 25),
1464 F(100000000, P_GPLL0_OUT_AUX2, 3, 0, 0),
1465 F(102400000, P_GPLL0_OUT_AUX2, 1, 128, 375),
1466 F(112000000, P_GPLL0_OUT_AUX2, 1, 28, 75),
1467 F(117964800, P_GPLL0_OUT_AUX2, 1, 6144, 15625),
1468 F(120000000, P_GPLL0_OUT_AUX2, 2.5, 0, 0),
1469 F(128000000, P_GPLL6_OUT_MAIN, 3, 0, 0),
1470 { }
1471 };
1472
1473 static struct clk_init_data gcc_qupv3_wrap0_s0_clk_src_init = {
1474 .name = "gcc_qupv3_wrap0_s0_clk_src",
1475 .parent_data = gcc_parent_data_1,
1476 .num_parents = ARRAY_SIZE(gcc_parent_data_1),
1477 .ops = &clk_rcg2_shared_ops,
1478 };
1479
1480 static struct clk_rcg2 gcc_qupv3_wrap0_s0_clk_src = {
1481 .cmd_rcgr = 0x1f148,
1482 .mnd_width = 16,
1483 .hid_width = 5,
1484 .parent_map = gcc_parent_map_1,
1485 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
1486 .hw_clk_ctrl = true,
1487 .clkr.hw.init = &gcc_qupv3_wrap0_s0_clk_src_init,
1488 };
1489
1490 static struct clk_init_data gcc_qupv3_wrap0_s1_clk_src_init = {
1491 .name = "gcc_qupv3_wrap0_s1_clk_src",
1492 .parent_data = gcc_parent_data_1,
1493 .num_parents = ARRAY_SIZE(gcc_parent_data_1),
1494 .ops = &clk_rcg2_shared_ops,
1495 };
1496
1497 static struct clk_rcg2 gcc_qupv3_wrap0_s1_clk_src = {
1498 .cmd_rcgr = 0x1f278,
1499 .mnd_width = 16,
1500 .hid_width = 5,
1501 .parent_map = gcc_parent_map_1,
1502 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
1503 .hw_clk_ctrl = true,
1504 .clkr.hw.init = &gcc_qupv3_wrap0_s1_clk_src_init,
1505 };
1506
1507 static struct clk_init_data gcc_qupv3_wrap0_s2_clk_src_init = {
1508 .name = "gcc_qupv3_wrap0_s2_clk_src",
1509 .parent_data = gcc_parent_data_1,
1510 .num_parents = ARRAY_SIZE(gcc_parent_data_1),
1511 .ops = &clk_rcg2_shared_ops,
1512 };
1513
1514 static struct clk_rcg2 gcc_qupv3_wrap0_s2_clk_src = {
1515 .cmd_rcgr = 0x1f3a8,
1516 .mnd_width = 16,
1517 .hid_width = 5,
1518 .parent_map = gcc_parent_map_1,
1519 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
1520 .hw_clk_ctrl = true,
1521 .clkr.hw.init = &gcc_qupv3_wrap0_s2_clk_src_init,
1522 };
1523
1524 static struct clk_init_data gcc_qupv3_wrap0_s3_clk_src_init = {
1525 .name = "gcc_qupv3_wrap0_s3_clk_src",
1526 .parent_data = gcc_parent_data_1,
1527 .num_parents = ARRAY_SIZE(gcc_parent_data_1),
1528 .ops = &clk_rcg2_shared_ops,
1529 };
1530
1531 static struct clk_rcg2 gcc_qupv3_wrap0_s3_clk_src = {
1532 .cmd_rcgr = 0x1f4d8,
1533 .mnd_width = 16,
1534 .hid_width = 5,
1535 .parent_map = gcc_parent_map_1,
1536 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
1537 .hw_clk_ctrl = true,
1538 .clkr.hw.init = &gcc_qupv3_wrap0_s3_clk_src_init,
1539 };
1540
1541 static struct clk_init_data gcc_qupv3_wrap0_s4_clk_src_init = {
1542 .name = "gcc_qupv3_wrap0_s4_clk_src",
1543 .parent_data = gcc_parent_data_1,
1544 .num_parents = ARRAY_SIZE(gcc_parent_data_1),
1545 .ops = &clk_rcg2_shared_ops,
1546 };
1547
1548 static struct clk_rcg2 gcc_qupv3_wrap0_s4_clk_src = {
1549 .cmd_rcgr = 0x1f608,
1550 .mnd_width = 16,
1551 .hid_width = 5,
1552 .parent_map = gcc_parent_map_1,
1553 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
1554 .hw_clk_ctrl = true,
1555 .clkr.hw.init = &gcc_qupv3_wrap0_s4_clk_src_init,
1556 };
1557
1558 static struct clk_init_data gcc_qupv3_wrap0_s5_clk_src_init = {
1559 .name = "gcc_qupv3_wrap0_s5_clk_src",
1560 .parent_data = gcc_parent_data_1,
1561 .num_parents = ARRAY_SIZE(gcc_parent_data_1),
1562 .ops = &clk_rcg2_shared_ops,
1563 };
1564
1565 static struct clk_rcg2 gcc_qupv3_wrap0_s5_clk_src = {
1566 .cmd_rcgr = 0x1f738,
1567 .mnd_width = 16,
1568 .hid_width = 5,
1569 .parent_map = gcc_parent_map_1,
1570 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
1571 .hw_clk_ctrl = true,
1572 .clkr.hw.init = &gcc_qupv3_wrap0_s5_clk_src_init,
1573 };
1574
1575 static struct clk_init_data gcc_qupv3_wrap0_s6_clk_src_init = {
1576 .name = "gcc_qupv3_wrap0_s6_clk_src",
1577 .parent_data = gcc_parent_data_1,
1578 .num_parents = ARRAY_SIZE(gcc_parent_data_1),
1579 .ops = &clk_rcg2_shared_ops,
1580 };
1581
1582 static struct clk_rcg2 gcc_qupv3_wrap0_s6_clk_src = {
1583 .cmd_rcgr = 0x1f868,
1584 .mnd_width = 16,
1585 .hid_width = 5,
1586 .parent_map = gcc_parent_map_1,
1587 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
1588 .hw_clk_ctrl = true,
1589 .clkr.hw.init = &gcc_qupv3_wrap0_s6_clk_src_init,
1590 };
1591
1592 static struct clk_init_data gcc_qupv3_wrap0_s7_clk_src_init = {
1593 .name = "gcc_qupv3_wrap0_s7_clk_src",
1594 .parent_data = gcc_parent_data_1,
1595 .num_parents = ARRAY_SIZE(gcc_parent_data_1),
1596 .ops = &clk_rcg2_shared_ops,
1597 };
1598
1599 static struct clk_rcg2 gcc_qupv3_wrap0_s7_clk_src = {
1600 .cmd_rcgr = 0x1f998,
1601 .mnd_width = 16,
1602 .hid_width = 5,
1603 .parent_map = gcc_parent_map_1,
1604 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
1605 .hw_clk_ctrl = true,
1606 .clkr.hw.init = &gcc_qupv3_wrap0_s7_clk_src_init,
1607 };
1608
1609 static struct clk_init_data gcc_qupv3_wrap0_s8_clk_src_init = {
1610 .name = "gcc_qupv3_wrap0_s8_clk_src",
1611 .parent_data = gcc_parent_data_1,
1612 .num_parents = ARRAY_SIZE(gcc_parent_data_1),
1613 .ops = &clk_rcg2_shared_ops,
1614 };
1615
1616 static struct clk_rcg2 gcc_qupv3_wrap0_s8_clk_src = {
1617 .cmd_rcgr = 0x1fac8,
1618 .mnd_width = 16,
1619 .hid_width = 5,
1620 .parent_map = gcc_parent_map_1,
1621 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
1622 .hw_clk_ctrl = true,
1623 .clkr.hw.init = &gcc_qupv3_wrap0_s8_clk_src_init,
1624 };
1625
1626 static struct clk_init_data gcc_qupv3_wrap0_s9_clk_src_init = {
1627 .name = "gcc_qupv3_wrap0_s9_clk_src",
1628 .parent_data = gcc_parent_data_1,
1629 .num_parents = ARRAY_SIZE(gcc_parent_data_1),
1630 .ops = &clk_rcg2_shared_ops,
1631 };
1632
1633 static struct clk_rcg2 gcc_qupv3_wrap0_s9_clk_src = {
1634 .cmd_rcgr = 0x1fbf8,
1635 .mnd_width = 16,
1636 .hid_width = 5,
1637 .parent_map = gcc_parent_map_1,
1638 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
1639 .hw_clk_ctrl = true,
1640 .clkr.hw.init = &gcc_qupv3_wrap0_s9_clk_src_init,
1641 };
1642
1643 static const struct freq_tbl ftbl_gcc_sdcc1_apps_clk_src[] = {
1644 F(144000, P_BI_TCXO, 16, 3, 25),
1645 F(400000, P_BI_TCXO, 12, 1, 4),
1646 F(20000000, P_GPLL0_OUT_AUX2, 5, 1, 3),
1647 F(25000000, P_GPLL0_OUT_AUX2, 6, 1, 2),
1648 F(50000000, P_GPLL0_OUT_AUX2, 6, 0, 0),
1649 F(100000000, P_GPLL0_OUT_AUX2, 3, 0, 0),
1650 F(192000000, P_GPLL6_OUT_MAIN, 2, 0, 0),
1651 F(384000000, P_GPLL6_OUT_MAIN, 1, 0, 0),
1652 { }
1653 };
1654
1655 static struct clk_rcg2 gcc_sdcc1_apps_clk_src = {
1656 .cmd_rcgr = 0x38028,
1657 .mnd_width = 8,
1658 .hid_width = 5,
1659 .parent_map = gcc_parent_map_1,
1660 .freq_tbl = ftbl_gcc_sdcc1_apps_clk_src,
1661 .hw_clk_ctrl = true,
1662 .clkr.hw.init = &(const struct clk_init_data) {
1663 .name = "gcc_sdcc1_apps_clk_src",
1664 .parent_data = gcc_parent_data_1,
1665 .num_parents = ARRAY_SIZE(gcc_parent_data_1),
1666 .ops = &clk_rcg2_shared_floor_ops,
1667 },
1668 };
1669
1670 static const struct freq_tbl ftbl_gcc_sdcc1_ice_core_clk_src[] = {
1671 F(75000000, P_GPLL0_OUT_AUX2, 4, 0, 0),
1672 F(100000000, P_GPLL0_OUT_AUX2, 3, 0, 0),
1673 F(150000000, P_GPLL0_OUT_AUX2, 2, 0, 0),
1674 F(200000000, P_GPLL0_OUT_EARLY, 3, 0, 0),
1675 F(300000000, P_GPLL0_OUT_AUX2, 1, 0, 0),
1676 { }
1677 };
1678
1679 static struct clk_rcg2 gcc_sdcc1_ice_core_clk_src = {
1680 .cmd_rcgr = 0x38010,
1681 .mnd_width = 0,
1682 .hid_width = 5,
1683 .parent_map = gcc_parent_map_0,
1684 .freq_tbl = ftbl_gcc_sdcc1_ice_core_clk_src,
1685 .hw_clk_ctrl = true,
1686 .clkr.hw.init = &(const struct clk_init_data) {
1687 .name = "gcc_sdcc1_ice_core_clk_src",
1688 .parent_data = gcc_parent_data_0,
1689 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
1690 .ops = &clk_rcg2_shared_floor_ops,
1691 },
1692 };
1693
1694 static const struct freq_tbl ftbl_gcc_sdcc2_apps_clk_src[] = {
1695 F(400000, P_BI_TCXO, 12, 1, 4),
1696 F(19200000, P_BI_TCXO, 1, 0, 0),
1697 F(25000000, P_GPLL0_OUT_AUX2, 12, 0, 0),
1698 F(50000000, P_GPLL0_OUT_AUX2, 6, 0, 0),
1699 F(100000000, P_GPLL0_OUT_AUX2, 3, 0, 0),
1700 F(202000000, P_GPLL7_OUT_MAIN, 4, 0, 0),
1701 { }
1702 };
1703
1704 static struct clk_rcg2 gcc_sdcc2_apps_clk_src = {
1705 .cmd_rcgr = 0x1e00c,
1706 .mnd_width = 8,
1707 .hid_width = 5,
1708 .parent_map = gcc_parent_map_21,
1709 .freq_tbl = ftbl_gcc_sdcc2_apps_clk_src,
1710 .hw_clk_ctrl = true,
1711 .clkr.hw.init = &(const struct clk_init_data) {
1712 .name = "gcc_sdcc2_apps_clk_src",
1713 .parent_data = gcc_parent_data_21,
1714 .num_parents = ARRAY_SIZE(gcc_parent_data_21),
1715 .ops = &clk_rcg2_shared_floor_ops,
1716 },
1717 };
1718
1719 static struct clk_rcg2 gcc_tscss_clk_src = {
1720 .cmd_rcgr = 0xac004,
1721 .mnd_width = 0,
1722 .hid_width = 5,
1723 .parent_map = gcc_parent_map_22,
1724 .freq_tbl = ftbl_gcc_emac0_ptp_clk_src,
1725 .hw_clk_ctrl = true,
1726 .clkr.hw.init = &(const struct clk_init_data) {
1727 .name = "gcc_tscss_clk_src",
1728 .parent_data = gcc_parent_data_22,
1729 .num_parents = ARRAY_SIZE(gcc_parent_data_22),
1730 .ops = &clk_rcg2_shared_ops,
1731 },
1732 };
1733
1734 static const struct freq_tbl ftbl_gcc_usb20_master_clk_src[] = {
1735 F(60000000, P_GPLL0_OUT_AUX2, 5, 0, 0),
1736 F(120000000, P_GPLL0_OUT_EARLY, 5, 0, 0),
1737 { }
1738 };
1739
1740 static struct clk_rcg2 gcc_usb20_master_clk_src = {
1741 .cmd_rcgr = 0xb003c,
1742 .mnd_width = 8,
1743 .hid_width = 5,
1744 .parent_map = gcc_parent_map_0,
1745 .freq_tbl = ftbl_gcc_usb20_master_clk_src,
1746 .hw_clk_ctrl = true,
1747 .clkr.hw.init = &(const struct clk_init_data) {
1748 .name = "gcc_usb20_master_clk_src",
1749 .parent_data = gcc_parent_data_0,
1750 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
1751 .ops = &clk_rcg2_shared_ops,
1752 },
1753 };
1754
1755 static struct clk_rcg2 gcc_usb20_mock_utmi_clk_src = {
1756 .cmd_rcgr = 0xb0020,
1757 .mnd_width = 0,
1758 .hid_width = 5,
1759 .parent_map = gcc_parent_map_13,
1760 .freq_tbl = ftbl_gcc_emac0_phy_aux_clk_src,
1761 .hw_clk_ctrl = true,
1762 .clkr.hw.init = &(const struct clk_init_data) {
1763 .name = "gcc_usb20_mock_utmi_clk_src",
1764 .parent_data = gcc_parent_data_13,
1765 .num_parents = ARRAY_SIZE(gcc_parent_data_13),
1766 .ops = &clk_rcg2_shared_ops,
1767 },
1768 };
1769
1770 static const struct freq_tbl ftbl_gcc_usb30_prim_master_clk_src[] = {
1771 F(66666667, P_GPLL0_OUT_AUX2, 4.5, 0, 0),
1772 F(133333333, P_GPLL0_OUT_EARLY, 4.5, 0, 0),
1773 F(200000000, P_GPLL0_OUT_EARLY, 3, 0, 0),
1774 F(240000000, P_GPLL0_OUT_EARLY, 2.5, 0, 0),
1775 { }
1776 };
1777
1778 static struct clk_rcg2 gcc_usb30_prim_master_clk_src = {
1779 .cmd_rcgr = 0x1a01c,
1780 .mnd_width = 8,
1781 .hid_width = 5,
1782 .parent_map = gcc_parent_map_0,
1783 .freq_tbl = ftbl_gcc_usb30_prim_master_clk_src,
1784 .hw_clk_ctrl = true,
1785 .clkr.hw.init = &(const struct clk_init_data) {
1786 .name = "gcc_usb30_prim_master_clk_src",
1787 .parent_data = gcc_parent_data_0,
1788 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
1789 .ops = &clk_rcg2_shared_ops,
1790 },
1791 };
1792
1793 static struct clk_rcg2 gcc_usb30_prim_mock_utmi_clk_src = {
1794 .cmd_rcgr = 0x1a034,
1795 .mnd_width = 0,
1796 .hid_width = 5,
1797 .parent_map = gcc_parent_map_0,
1798 .freq_tbl = ftbl_gcc_emac0_phy_aux_clk_src,
1799 .hw_clk_ctrl = true,
1800 .clkr.hw.init = &(const struct clk_init_data) {
1801 .name = "gcc_usb30_prim_mock_utmi_clk_src",
1802 .parent_data = gcc_parent_data_0,
1803 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
1804 .ops = &clk_rcg2_shared_ops,
1805 },
1806 };
1807
1808 static struct clk_rcg2 gcc_usb3_prim_phy_aux_clk_src = {
1809 .cmd_rcgr = 0x1a060,
1810 .mnd_width = 0,
1811 .hid_width = 5,
1812 .parent_map = gcc_parent_map_4,
1813 .freq_tbl = ftbl_gcc_emac0_phy_aux_clk_src,
1814 .hw_clk_ctrl = true,
1815 .clkr.hw.init = &(const struct clk_init_data) {
1816 .name = "gcc_usb3_prim_phy_aux_clk_src",
1817 .parent_data = gcc_parent_data_4,
1818 .num_parents = ARRAY_SIZE(gcc_parent_data_4),
1819 .ops = &clk_rcg2_shared_ops,
1820 },
1821 };
1822
1823 static const struct freq_tbl ftbl_gcc_video_venus_clk_src[] = {
1824 F(133333333, P_GPLL11_OUT_MAIN, 4.5, 0, 0),
1825 F(240000000, P_GPLL11_OUT_MAIN, 2.5, 0, 0),
1826 F(300000000, P_GPLL11_OUT_MAIN, 2, 0, 0),
1827 F(384000000, P_GPLL11_OUT_MAIN, 2, 0, 0),
1828 { }
1829 };
1830
1831 static struct clk_rcg2 gcc_video_venus_clk_src = {
1832 .cmd_rcgr = 0x6d000,
1833 .mnd_width = 0,
1834 .hid_width = 5,
1835 .parent_map = gcc_parent_map_24,
1836 .freq_tbl = ftbl_gcc_video_venus_clk_src,
1837 .hw_clk_ctrl = true,
1838 .clkr.hw.init = &(const struct clk_init_data) {
1839 .name = "gcc_video_venus_clk_src",
1840 .parent_data = gcc_parent_data_24,
1841 .num_parents = ARRAY_SIZE(gcc_parent_data_24),
1842 .flags = CLK_SET_RATE_PARENT,
1843 .ops = &clk_rcg2_shared_ops,
1844 },
1845 };
1846
1847 static struct clk_regmap_div gcc_disp_gpll0_clk_src = {
1848 .reg = 0x17058,
1849 .shift = 0,
1850 .width = 2,
1851 .clkr.hw.init = &(const struct clk_init_data) {
1852 .name = "gcc_disp_gpll0_clk_src",
1853 .parent_hws = (const struct clk_hw*[]) {
1854 &gpll0.clkr.hw,
1855 },
1856 .num_parents = 1,
1857 .ops = &clk_regmap_div_ops,
1858 },
1859 };
1860
1861 static struct clk_regmap_div gcc_usb20_mock_utmi_postdiv_clk_src = {
1862 .reg = 0xb0038,
1863 .shift = 0,
1864 .width = 4,
1865 .clkr.hw.init = &(const struct clk_init_data) {
1866 .name = "gcc_usb20_mock_utmi_postdiv_clk_src",
1867 .parent_hws = (const struct clk_hw*[]) {
1868 &gcc_usb20_mock_utmi_clk_src.clkr.hw,
1869 },
1870 .num_parents = 1,
1871 .flags = CLK_SET_RATE_PARENT,
1872 .ops = &clk_regmap_div_ro_ops,
1873 },
1874 };
1875
1876 static struct clk_regmap_div gcc_usb30_prim_mock_utmi_postdiv_clk_src = {
1877 .reg = 0x1a04c,
1878 .shift = 0,
1879 .width = 2,
1880 .clkr.hw.init = &(const struct clk_init_data) {
1881 .name = "gcc_usb30_prim_mock_utmi_postdiv_clk_src",
1882 .parent_hws = (const struct clk_hw*[]) {
1883 &gcc_usb30_prim_mock_utmi_clk_src.clkr.hw,
1884 },
1885 .num_parents = 1,
1886 .flags = CLK_SET_RATE_PARENT,
1887 .ops = &clk_regmap_div_ro_ops,
1888 },
1889 };
1890
1891 static struct clk_branch gcc_ahb2phy_csi_clk = {
1892 .halt_reg = 0x1d004,
1893 .halt_check = BRANCH_HALT_DELAY,
1894 .hwcg_reg = 0x1d004,
1895 .hwcg_bit = 1,
1896 .clkr = {
1897 .enable_reg = 0x1d004,
1898 .enable_mask = BIT(0),
1899 .hw.init = &(const struct clk_init_data) {
1900 .name = "gcc_ahb2phy_csi_clk",
1901 .ops = &clk_branch2_ops,
1902 },
1903 },
1904 };
1905
1906 static struct clk_branch gcc_ahb2phy_usb_clk = {
1907 .halt_reg = 0x1d008,
1908 .halt_check = BRANCH_HALT,
1909 .hwcg_reg = 0x1d008,
1910 .hwcg_bit = 1,
1911 .clkr = {
1912 .enable_reg = 0x1d008,
1913 .enable_mask = BIT(0),
1914 .hw.init = &(const struct clk_init_data) {
1915 .name = "gcc_ahb2phy_usb_clk",
1916 .ops = &clk_branch2_ops,
1917 },
1918 },
1919 };
1920
1921 static struct clk_branch gcc_boot_rom_ahb_clk = {
1922 .halt_reg = 0x23004,
1923 .halt_check = BRANCH_HALT_VOTED,
1924 .hwcg_reg = 0x23004,
1925 .hwcg_bit = 1,
1926 .clkr = {
1927 .enable_reg = 0x7900c,
1928 .enable_mask = BIT(1),
1929 .hw.init = &(const struct clk_init_data) {
1930 .name = "gcc_boot_rom_ahb_clk",
1931 .ops = &clk_branch2_ops,
1932 },
1933 },
1934 };
1935
1936 static struct clk_branch gcc_cam_throttle_nrt_clk = {
1937 .halt_reg = 0x17070,
1938 .halt_check = BRANCH_HALT_VOTED,
1939 .hwcg_reg = 0x17070,
1940 .hwcg_bit = 1,
1941 .clkr = {
1942 .enable_reg = 0x79004,
1943 .enable_mask = BIT(16),
1944 .hw.init = &(const struct clk_init_data) {
1945 .name = "gcc_cam_throttle_nrt_clk",
1946 .ops = &clk_branch2_ops,
1947 },
1948 },
1949 };
1950
1951 static struct clk_branch gcc_cam_throttle_rt_clk = {
1952 .halt_reg = 0x1706c,
1953 .halt_check = BRANCH_HALT_VOTED,
1954 .hwcg_reg = 0x1706c,
1955 .hwcg_bit = 1,
1956 .clkr = {
1957 .enable_reg = 0x79004,
1958 .enable_mask = BIT(15),
1959 .hw.init = &(const struct clk_init_data) {
1960 .name = "gcc_cam_throttle_rt_clk",
1961 .ops = &clk_branch2_ops,
1962 },
1963 },
1964 };
1965
1966 static struct clk_branch gcc_camss_axi_clk = {
1967 .halt_reg = 0x58044,
1968 .halt_check = BRANCH_HALT,
1969 .clkr = {
1970 .enable_reg = 0x58044,
1971 .enable_mask = BIT(0),
1972 .hw.init = &(const struct clk_init_data) {
1973 .name = "gcc_camss_axi_clk",
1974 .parent_hws = (const struct clk_hw*[]) {
1975 &gcc_camss_axi_clk_src.clkr.hw,
1976 },
1977 .num_parents = 1,
1978 .flags = CLK_SET_RATE_PARENT,
1979 .ops = &clk_branch2_ops,
1980 },
1981 },
1982 };
1983
1984 static struct clk_branch gcc_camss_camnoc_atb_clk = {
1985 .halt_reg = 0x5804c,
1986 .halt_check = BRANCH_HALT_DELAY,
1987 .hwcg_reg = 0x5804c,
1988 .hwcg_bit = 1,
1989 .clkr = {
1990 .enable_reg = 0x5804c,
1991 .enable_mask = BIT(0),
1992 .hw.init = &(const struct clk_init_data) {
1993 .name = "gcc_camss_camnoc_atb_clk",
1994 .ops = &clk_branch2_ops,
1995 },
1996 },
1997 };
1998
1999 static struct clk_branch gcc_camss_camnoc_dragonlink_atb_clk = {
2000 .halt_reg = 0x58060,
2001 .halt_check = BRANCH_HALT_VOTED,
2002 .hwcg_reg = 0x58060,
2003 .hwcg_bit = 1,
2004 .clkr = {
2005 .enable_reg = 0x58060,
2006 .enable_mask = BIT(0),
2007 .hw.init = &(const struct clk_init_data) {
2008 .name = "gcc_camss_camnoc_dragonlink_atb_clk",
2009 .ops = &clk_branch2_ops,
2010 },
2011 },
2012 };
2013
2014 static struct clk_branch gcc_camss_camnoc_nts_xo_clk = {
2015 .halt_reg = 0x58050,
2016 .halt_check = BRANCH_HALT_DELAY,
2017 .hwcg_reg = 0x58050,
2018 .hwcg_bit = 1,
2019 .clkr = {
2020 .enable_reg = 0x58050,
2021 .enable_mask = BIT(0),
2022 .hw.init = &(const struct clk_init_data) {
2023 .name = "gcc_camss_camnoc_nts_xo_clk",
2024 .ops = &clk_branch2_ops,
2025 },
2026 },
2027 };
2028
2029 static struct clk_branch gcc_camss_cci_0_clk = {
2030 .halt_reg = 0x56018,
2031 .halt_check = BRANCH_HALT,
2032 .clkr = {
2033 .enable_reg = 0x56018,
2034 .enable_mask = BIT(0),
2035 .hw.init = &(const struct clk_init_data) {
2036 .name = "gcc_camss_cci_0_clk",
2037 .parent_hws = (const struct clk_hw*[]) {
2038 &gcc_camss_cci_clk_src.clkr.hw,
2039 },
2040 .num_parents = 1,
2041 .flags = CLK_SET_RATE_PARENT,
2042 .ops = &clk_branch2_ops,
2043 },
2044 },
2045 };
2046
2047 static struct clk_branch gcc_camss_cphy_0_clk = {
2048 .halt_reg = 0x52088,
2049 .halt_check = BRANCH_HALT,
2050 .clkr = {
2051 .enable_reg = 0x52088,
2052 .enable_mask = BIT(0),
2053 .hw.init = &(const struct clk_init_data) {
2054 .name = "gcc_camss_cphy_0_clk",
2055 .parent_hws = (const struct clk_hw*[]) {
2056 &gcc_camss_tfe_cphy_rx_clk_src.clkr.hw,
2057 },
2058 .num_parents = 1,
2059 .flags = CLK_SET_RATE_PARENT,
2060 .ops = &clk_branch2_ops,
2061 },
2062 },
2063 };
2064
2065 static struct clk_branch gcc_camss_cphy_1_clk = {
2066 .halt_reg = 0x5208c,
2067 .halt_check = BRANCH_HALT,
2068 .clkr = {
2069 .enable_reg = 0x5208c,
2070 .enable_mask = BIT(0),
2071 .hw.init = &(const struct clk_init_data) {
2072 .name = "gcc_camss_cphy_1_clk",
2073 .parent_hws = (const struct clk_hw*[]) {
2074 &gcc_camss_tfe_cphy_rx_clk_src.clkr.hw,
2075 },
2076 .num_parents = 1,
2077 .flags = CLK_SET_RATE_PARENT,
2078 .ops = &clk_branch2_ops,
2079 },
2080 },
2081 };
2082
2083 static struct clk_branch gcc_camss_csi0phytimer_clk = {
2084 .halt_reg = 0x45018,
2085 .halt_check = BRANCH_HALT,
2086 .clkr = {
2087 .enable_reg = 0x45018,
2088 .enable_mask = BIT(0),
2089 .hw.init = &(const struct clk_init_data) {
2090 .name = "gcc_camss_csi0phytimer_clk",
2091 .parent_hws = (const struct clk_hw*[]) {
2092 &gcc_camss_csi0phytimer_clk_src.clkr.hw,
2093 },
2094 .num_parents = 1,
2095 .flags = CLK_SET_RATE_PARENT,
2096 .ops = &clk_branch2_ops,
2097 },
2098 },
2099 };
2100
2101 static struct clk_branch gcc_camss_csi1phytimer_clk = {
2102 .halt_reg = 0x45034,
2103 .halt_check = BRANCH_HALT,
2104 .clkr = {
2105 .enable_reg = 0x45034,
2106 .enable_mask = BIT(0),
2107 .hw.init = &(const struct clk_init_data) {
2108 .name = "gcc_camss_csi1phytimer_clk",
2109 .parent_hws = (const struct clk_hw*[]) {
2110 &gcc_camss_csi1phytimer_clk_src.clkr.hw,
2111 },
2112 .num_parents = 1,
2113 .flags = CLK_SET_RATE_PARENT,
2114 .ops = &clk_branch2_ops,
2115 },
2116 },
2117 };
2118
2119 static struct clk_branch gcc_camss_mclk0_clk = {
2120 .halt_reg = 0x51018,
2121 .halt_check = BRANCH_HALT,
2122 .clkr = {
2123 .enable_reg = 0x51018,
2124 .enable_mask = BIT(0),
2125 .hw.init = &(const struct clk_init_data) {
2126 .name = "gcc_camss_mclk0_clk",
2127 .parent_hws = (const struct clk_hw*[]) {
2128 &gcc_camss_mclk0_clk_src.clkr.hw,
2129 },
2130 .num_parents = 1,
2131 .flags = CLK_SET_RATE_PARENT,
2132 .ops = &clk_branch2_ops,
2133 },
2134 },
2135 };
2136
2137 static struct clk_branch gcc_camss_mclk1_clk = {
2138 .halt_reg = 0x51034,
2139 .halt_check = BRANCH_HALT,
2140 .clkr = {
2141 .enable_reg = 0x51034,
2142 .enable_mask = BIT(0),
2143 .hw.init = &(const struct clk_init_data) {
2144 .name = "gcc_camss_mclk1_clk",
2145 .parent_hws = (const struct clk_hw*[]) {
2146 &gcc_camss_mclk1_clk_src.clkr.hw,
2147 },
2148 .num_parents = 1,
2149 .flags = CLK_SET_RATE_PARENT,
2150 .ops = &clk_branch2_ops,
2151 },
2152 },
2153 };
2154
2155 static struct clk_branch gcc_camss_mclk2_clk = {
2156 .halt_reg = 0x51050,
2157 .halt_check = BRANCH_HALT,
2158 .clkr = {
2159 .enable_reg = 0x51050,
2160 .enable_mask = BIT(0),
2161 .hw.init = &(const struct clk_init_data) {
2162 .name = "gcc_camss_mclk2_clk",
2163 .parent_hws = (const struct clk_hw*[]) {
2164 &gcc_camss_mclk2_clk_src.clkr.hw,
2165 },
2166 .num_parents = 1,
2167 .flags = CLK_SET_RATE_PARENT,
2168 .ops = &clk_branch2_ops,
2169 },
2170 },
2171 };
2172
2173 static struct clk_branch gcc_camss_mclk3_clk = {
2174 .halt_reg = 0x5106c,
2175 .halt_check = BRANCH_HALT,
2176 .clkr = {
2177 .enable_reg = 0x5106c,
2178 .enable_mask = BIT(0),
2179 .hw.init = &(const struct clk_init_data) {
2180 .name = "gcc_camss_mclk3_clk",
2181 .parent_hws = (const struct clk_hw*[]) {
2182 &gcc_camss_mclk3_clk_src.clkr.hw,
2183 },
2184 .num_parents = 1,
2185 .flags = CLK_SET_RATE_PARENT,
2186 .ops = &clk_branch2_ops,
2187 },
2188 },
2189 };
2190
2191 static struct clk_branch gcc_camss_nrt_axi_clk = {
2192 .halt_reg = 0x58054,
2193 .halt_check = BRANCH_HALT,
2194 .clkr = {
2195 .enable_reg = 0x58054,
2196 .enable_mask = BIT(0),
2197 .hw.init = &(const struct clk_init_data) {
2198 .name = "gcc_camss_nrt_axi_clk",
2199 .ops = &clk_branch2_ops,
2200 },
2201 },
2202 };
2203
2204 static struct clk_branch gcc_camss_ope_ahb_clk = {
2205 .halt_reg = 0x5503c,
2206 .halt_check = BRANCH_HALT,
2207 .clkr = {
2208 .enable_reg = 0x5503c,
2209 .enable_mask = BIT(0),
2210 .hw.init = &(const struct clk_init_data) {
2211 .name = "gcc_camss_ope_ahb_clk",
2212 .parent_hws = (const struct clk_hw*[]) {
2213 &gcc_camss_ope_ahb_clk_src.clkr.hw,
2214 },
2215 .num_parents = 1,
2216 .flags = CLK_SET_RATE_PARENT,
2217 .ops = &clk_branch2_ops,
2218 },
2219 },
2220 };
2221
2222 static struct clk_branch gcc_camss_ope_clk = {
2223 .halt_reg = 0x5501c,
2224 .halt_check = BRANCH_HALT,
2225 .clkr = {
2226 .enable_reg = 0x5501c,
2227 .enable_mask = BIT(0),
2228 .hw.init = &(const struct clk_init_data) {
2229 .name = "gcc_camss_ope_clk",
2230 .parent_hws = (const struct clk_hw*[]) {
2231 &gcc_camss_ope_clk_src.clkr.hw,
2232 },
2233 .num_parents = 1,
2234 .flags = CLK_SET_RATE_PARENT,
2235 .ops = &clk_branch2_ops,
2236 },
2237 },
2238 };
2239
2240 static struct clk_branch gcc_camss_rt_axi_clk = {
2241 .halt_reg = 0x5805c,
2242 .halt_check = BRANCH_HALT,
2243 .clkr = {
2244 .enable_reg = 0x5805c,
2245 .enable_mask = BIT(0),
2246 .hw.init = &(const struct clk_init_data) {
2247 .name = "gcc_camss_rt_axi_clk",
2248 .ops = &clk_branch2_ops,
2249 },
2250 },
2251 };
2252
2253 static struct clk_branch gcc_camss_tfe_0_clk = {
2254 .halt_reg = 0x5201c,
2255 .halt_check = BRANCH_HALT,
2256 .clkr = {
2257 .enable_reg = 0x5201c,
2258 .enable_mask = BIT(0),
2259 .hw.init = &(const struct clk_init_data) {
2260 .name = "gcc_camss_tfe_0_clk",
2261 .parent_hws = (const struct clk_hw*[]) {
2262 &gcc_camss_tfe_0_clk_src.clkr.hw,
2263 },
2264 .num_parents = 1,
2265 .flags = CLK_SET_RATE_PARENT,
2266 .ops = &clk_branch2_ops,
2267 },
2268 },
2269 };
2270
2271 static struct clk_branch gcc_camss_tfe_0_cphy_rx_clk = {
2272 .halt_reg = 0x5207c,
2273 .halt_check = BRANCH_HALT,
2274 .clkr = {
2275 .enable_reg = 0x5207c,
2276 .enable_mask = BIT(0),
2277 .hw.init = &(const struct clk_init_data) {
2278 .name = "gcc_camss_tfe_0_cphy_rx_clk",
2279 .parent_hws = (const struct clk_hw*[]) {
2280 &gcc_camss_tfe_cphy_rx_clk_src.clkr.hw,
2281 },
2282 .num_parents = 1,
2283 .flags = CLK_SET_RATE_PARENT,
2284 .ops = &clk_branch2_ops,
2285 },
2286 },
2287 };
2288
2289 static struct clk_branch gcc_camss_tfe_0_csid_clk = {
2290 .halt_reg = 0x520ac,
2291 .halt_check = BRANCH_HALT,
2292 .clkr = {
2293 .enable_reg = 0x520ac,
2294 .enable_mask = BIT(0),
2295 .hw.init = &(const struct clk_init_data) {
2296 .name = "gcc_camss_tfe_0_csid_clk",
2297 .parent_hws = (const struct clk_hw*[]) {
2298 &gcc_camss_tfe_0_csid_clk_src.clkr.hw,
2299 },
2300 .num_parents = 1,
2301 .flags = CLK_SET_RATE_PARENT,
2302 .ops = &clk_branch2_ops,
2303 },
2304 },
2305 };
2306
2307 static struct clk_branch gcc_camss_tfe_1_clk = {
2308 .halt_reg = 0x5203c,
2309 .halt_check = BRANCH_HALT,
2310 .clkr = {
2311 .enable_reg = 0x5203c,
2312 .enable_mask = BIT(0),
2313 .hw.init = &(const struct clk_init_data) {
2314 .name = "gcc_camss_tfe_1_clk",
2315 .parent_hws = (const struct clk_hw*[]) {
2316 &gcc_camss_tfe_1_clk_src.clkr.hw,
2317 },
2318 .num_parents = 1,
2319 .flags = CLK_SET_RATE_PARENT,
2320 .ops = &clk_branch2_ops,
2321 },
2322 },
2323 };
2324
2325 static struct clk_branch gcc_camss_tfe_1_cphy_rx_clk = {
2326 .halt_reg = 0x52080,
2327 .halt_check = BRANCH_HALT,
2328 .clkr = {
2329 .enable_reg = 0x52080,
2330 .enable_mask = BIT(0),
2331 .hw.init = &(const struct clk_init_data) {
2332 .name = "gcc_camss_tfe_1_cphy_rx_clk",
2333 .parent_hws = (const struct clk_hw*[]) {
2334 &gcc_camss_tfe_cphy_rx_clk_src.clkr.hw,
2335 },
2336 .num_parents = 1,
2337 .flags = CLK_SET_RATE_PARENT,
2338 .ops = &clk_branch2_ops,
2339 },
2340 },
2341 };
2342
2343 static struct clk_branch gcc_camss_tfe_1_csid_clk = {
2344 .halt_reg = 0x520cc,
2345 .halt_check = BRANCH_HALT,
2346 .clkr = {
2347 .enable_reg = 0x520cc,
2348 .enable_mask = BIT(0),
2349 .hw.init = &(const struct clk_init_data) {
2350 .name = "gcc_camss_tfe_1_csid_clk",
2351 .parent_hws = (const struct clk_hw*[]) {
2352 &gcc_camss_tfe_1_csid_clk_src.clkr.hw,
2353 },
2354 .num_parents = 1,
2355 .flags = CLK_SET_RATE_PARENT,
2356 .ops = &clk_branch2_ops,
2357 },
2358 },
2359 };
2360
2361 static struct clk_branch gcc_camss_top_ahb_clk = {
2362 .halt_reg = 0x58028,
2363 .halt_check = BRANCH_HALT,
2364 .clkr = {
2365 .enable_reg = 0x58028,
2366 .enable_mask = BIT(0),
2367 .hw.init = &(const struct clk_init_data) {
2368 .name = "gcc_camss_top_ahb_clk",
2369 .parent_hws = (const struct clk_hw*[]) {
2370 &gcc_camss_top_ahb_clk_src.clkr.hw,
2371 },
2372 .num_parents = 1,
2373 .flags = CLK_SET_RATE_PARENT,
2374 .ops = &clk_branch2_ops,
2375 },
2376 },
2377 };
2378
2379 static struct clk_branch gcc_cfg_noc_usb2_prim_axi_clk = {
2380 .halt_reg = 0x111c4,
2381 .halt_check = BRANCH_HALT_VOTED,
2382 .hwcg_reg = 0x111c4,
2383 .hwcg_bit = 1,
2384 .clkr = {
2385 .enable_reg = 0x111c4,
2386 .enable_mask = BIT(0),
2387 .hw.init = &(const struct clk_init_data) {
2388 .name = "gcc_cfg_noc_usb2_prim_axi_clk",
2389 .parent_hws = (const struct clk_hw*[]) {
2390 &gcc_usb20_master_clk_src.clkr.hw,
2391 },
2392 .num_parents = 1,
2393 .flags = CLK_SET_RATE_PARENT,
2394 .ops = &clk_branch2_ops,
2395 },
2396 },
2397 };
2398
2399 static struct clk_branch gcc_cfg_noc_usb3_prim_axi_clk = {
2400 .halt_reg = 0x1a07c,
2401 .halt_check = BRANCH_HALT_VOTED,
2402 .hwcg_reg = 0x1a07c,
2403 .hwcg_bit = 1,
2404 .clkr = {
2405 .enable_reg = 0x1a07c,
2406 .enable_mask = BIT(0),
2407 .hw.init = &(const struct clk_init_data) {
2408 .name = "gcc_cfg_noc_usb3_prim_axi_clk",
2409 .parent_hws = (const struct clk_hw*[]) {
2410 &gcc_usb30_prim_master_clk_src.clkr.hw,
2411 },
2412 .num_parents = 1,
2413 .flags = CLK_SET_RATE_PARENT,
2414 .ops = &clk_branch2_ops,
2415 },
2416 },
2417 };
2418
2419 static struct clk_branch gcc_ddrss_gpu_axi_clk = {
2420 .halt_reg = 0x71000,
2421 .halt_check = BRANCH_HALT_SKIP,
2422 .hwcg_reg = 0x71000,
2423 .hwcg_bit = 1,
2424 .clkr = {
2425 .enable_reg = 0x71000,
2426 .enable_mask = BIT(0),
2427 .hw.init = &(const struct clk_init_data) {
2428 .name = "gcc_ddrss_gpu_axi_clk",
2429 .ops = &clk_branch2_aon_ops,
2430 },
2431 },
2432 };
2433
2434 static struct clk_branch gcc_ddrss_memnoc_pcie_sf_clk = {
2435 .halt_reg = 0x29044,
2436 .halt_check = BRANCH_HALT_VOTED,
2437 .hwcg_reg = 0x29044,
2438 .hwcg_bit = 1,
2439 .clkr = {
2440 .enable_reg = 0x29044,
2441 .enable_mask = BIT(0),
2442 .hw.init = &(const struct clk_init_data) {
2443 .name = "gcc_ddrss_memnoc_pcie_sf_clk",
2444 .ops = &clk_branch2_ops,
2445 },
2446 },
2447 };
2448
2449 static struct clk_branch gcc_disp_gpll0_div_clk_src = {
2450 .halt_check = BRANCH_HALT_DELAY,
2451 .clkr = {
2452 .enable_reg = 0x79004,
2453 .enable_mask = BIT(11),
2454 .hw.init = &(const struct clk_init_data) {
2455 .name = "gcc_disp_gpll0_div_clk_src",
2456 .parent_hws = (const struct clk_hw*[]) {
2457 &gcc_disp_gpll0_clk_src.clkr.hw,
2458 },
2459 .num_parents = 1,
2460 .flags = CLK_SET_RATE_PARENT,
2461 .ops = &clk_branch2_ops,
2462 },
2463 },
2464 };
2465
2466 static struct clk_branch gcc_disp_hf_axi_clk = {
2467 .halt_reg = 0x17020,
2468 .halt_check = BRANCH_HALT,
2469 .hwcg_reg = 0x17020,
2470 .hwcg_bit = 1,
2471 .clkr = {
2472 .enable_reg = 0x17020,
2473 .enable_mask = BIT(0),
2474 .hw.init = &(const struct clk_init_data) {
2475 .name = "gcc_disp_hf_axi_clk",
2476 .ops = &clk_branch2_ops,
2477 },
2478 },
2479 };
2480
2481 static struct clk_branch gcc_disp_throttle_core_clk = {
2482 .halt_reg = 0x17064,
2483 .halt_check = BRANCH_HALT_VOTED,
2484 .hwcg_reg = 0x17064,
2485 .hwcg_bit = 1,
2486 .clkr = {
2487 .enable_reg = 0x79004,
2488 .enable_mask = BIT(13),
2489 .hw.init = &(const struct clk_init_data) {
2490 .name = "gcc_disp_throttle_core_clk",
2491 .ops = &clk_branch2_ops,
2492 },
2493 },
2494 };
2495
2496 static struct clk_branch gcc_emac0_ahb_clk = {
2497 .halt_reg = 0xad010,
2498 .halt_check = BRANCH_HALT_VOTED,
2499 .hwcg_reg = 0xad010,
2500 .hwcg_bit = 1,
2501 .clkr = {
2502 .enable_reg = 0xad010,
2503 .enable_mask = BIT(0),
2504 .hw.init = &(const struct clk_init_data) {
2505 .name = "gcc_emac0_ahb_clk",
2506 .ops = &clk_branch2_ops,
2507 },
2508 },
2509 };
2510
2511 static struct clk_branch gcc_emac0_axi_clk = {
2512 .halt_reg = 0xad014,
2513 .halt_check = BRANCH_HALT_VOTED,
2514 .hwcg_reg = 0xad014,
2515 .hwcg_bit = 1,
2516 .clkr = {
2517 .enable_reg = 0xad014,
2518 .enable_mask = BIT(0),
2519 .hw.init = &(const struct clk_init_data) {
2520 .name = "gcc_emac0_axi_clk",
2521 .parent_hws = (const struct clk_hw*[]) {
2522 &gcc_emac0_axi_clk_src.clkr.hw,
2523 },
2524 .num_parents = 1,
2525 .flags = CLK_SET_RATE_PARENT,
2526 .ops = &clk_branch2_ops,
2527 },
2528 },
2529 };
2530
2531 static struct clk_branch gcc_emac0_axi_sys_noc_clk = {
2532 .halt_reg = 0x109d4,
2533 .halt_check = BRANCH_HALT_VOTED,
2534 .hwcg_reg = 0x109d4,
2535 .hwcg_bit = 1,
2536 .clkr = {
2537 .enable_reg = 0x109d4,
2538 .enable_mask = BIT(0),
2539 .hw.init = &(const struct clk_init_data) {
2540 .name = "gcc_emac0_axi_sys_noc_clk",
2541 .parent_hws = (const struct clk_hw*[]) {
2542 &gcc_emac0_axi_clk_src.clkr.hw,
2543 },
2544 .num_parents = 1,
2545 .flags = CLK_SET_RATE_PARENT,
2546 .ops = &clk_branch2_ops,
2547 },
2548 },
2549 };
2550
2551 static struct clk_branch gcc_emac0_cc_sgmiiphy_rx_clk = {
2552 .halt_reg = 0xad044,
2553 .halt_check = BRANCH_HALT_DELAY,
2554 .clkr = {
2555 .enable_reg = 0xad044,
2556 .enable_mask = BIT(0),
2557 .hw.init = &(const struct clk_init_data) {
2558 .name = "gcc_emac0_cc_sgmiiphy_rx_clk",
2559 .parent_hws = (const struct clk_hw*[]) {
2560 &gcc_emac0_cc_sgmiiphy_rx_clk_src.clkr.hw,
2561 },
2562 .num_parents = 1,
2563 .flags = CLK_SET_RATE_PARENT,
2564 .ops = &clk_branch2_ops,
2565 },
2566 },
2567 };
2568
2569 static struct clk_branch gcc_emac0_cc_sgmiiphy_tx_clk = {
2570 .halt_reg = 0xad03c,
2571 .halt_check = BRANCH_HALT_DELAY,
2572 .hwcg_reg = 0xad03c,
2573 .hwcg_bit = 1,
2574 .clkr = {
2575 .enable_reg = 0xad03c,
2576 .enable_mask = BIT(0),
2577 .hw.init = &(const struct clk_init_data) {
2578 .name = "gcc_emac0_cc_sgmiiphy_tx_clk",
2579 .parent_hws = (const struct clk_hw*[]) {
2580 &gcc_emac0_cc_sgmiiphy_tx_clk_src.clkr.hw,
2581 },
2582 .num_parents = 1,
2583 .flags = CLK_SET_RATE_PARENT,
2584 .ops = &clk_branch2_ops,
2585 },
2586 },
2587 };
2588
2589 static struct clk_branch gcc_emac0_phy_aux_clk = {
2590 .halt_reg = 0xad018,
2591 .halt_check = BRANCH_HALT,
2592 .clkr = {
2593 .enable_reg = 0xad018,
2594 .enable_mask = BIT(0),
2595 .hw.init = &(const struct clk_init_data) {
2596 .name = "gcc_emac0_phy_aux_clk",
2597 .parent_hws = (const struct clk_hw*[]) {
2598 &gcc_emac0_phy_aux_clk_src.clkr.hw,
2599 },
2600 .num_parents = 1,
2601 .flags = CLK_SET_RATE_PARENT,
2602 .ops = &clk_branch2_ops,
2603 },
2604 },
2605 };
2606
2607 static struct clk_branch gcc_emac0_ptp_clk = {
2608 .halt_reg = 0xad034,
2609 .halt_check = BRANCH_HALT,
2610 .clkr = {
2611 .enable_reg = 0xad034,
2612 .enable_mask = BIT(0),
2613 .hw.init = &(const struct clk_init_data) {
2614 .name = "gcc_emac0_ptp_clk",
2615 .parent_hws = (const struct clk_hw*[]) {
2616 &gcc_emac0_ptp_clk_src.clkr.hw,
2617 },
2618 .num_parents = 1,
2619 .flags = CLK_SET_RATE_PARENT,
2620 .ops = &clk_branch2_ops,
2621 },
2622 },
2623 };
2624
2625 static struct clk_branch gcc_emac0_rgmii_clk = {
2626 .halt_reg = 0xad038,
2627 .halt_check = BRANCH_HALT,
2628 .clkr = {
2629 .enable_reg = 0xad038,
2630 .enable_mask = BIT(0),
2631 .hw.init = &(const struct clk_init_data) {
2632 .name = "gcc_emac0_rgmii_clk",
2633 .parent_hws = (const struct clk_hw*[]) {
2634 &gcc_emac0_rgmii_clk_src.clkr.hw,
2635 },
2636 .num_parents = 1,
2637 .flags = CLK_SET_RATE_PARENT,
2638 .ops = &clk_branch2_ops,
2639 },
2640 },
2641 };
2642
2643 static struct clk_branch gcc_emac1_ahb_clk = {
2644 .halt_reg = 0xae010,
2645 .halt_check = BRANCH_HALT_VOTED,
2646 .hwcg_reg = 0xae010,
2647 .hwcg_bit = 1,
2648 .clkr = {
2649 .enable_reg = 0xae010,
2650 .enable_mask = BIT(0),
2651 .hw.init = &(const struct clk_init_data) {
2652 .name = "gcc_emac1_ahb_clk",
2653 .ops = &clk_branch2_ops,
2654 },
2655 },
2656 };
2657
2658 static struct clk_branch gcc_emac1_axi_clk = {
2659 .halt_reg = 0xae014,
2660 .halt_check = BRANCH_HALT_VOTED,
2661 .hwcg_reg = 0xae014,
2662 .hwcg_bit = 1,
2663 .clkr = {
2664 .enable_reg = 0xae014,
2665 .enable_mask = BIT(0),
2666 .hw.init = &(const struct clk_init_data) {
2667 .name = "gcc_emac1_axi_clk",
2668 .parent_hws = (const struct clk_hw*[]) {
2669 &gcc_emac1_axi_clk_src.clkr.hw,
2670 },
2671 .num_parents = 1,
2672 .flags = CLK_SET_RATE_PARENT,
2673 .ops = &clk_branch2_ops,
2674 },
2675 },
2676 };
2677
2678 static struct clk_branch gcc_emac1_axi_sys_noc_clk = {
2679 .halt_reg = 0x109f4,
2680 .halt_check = BRANCH_HALT_VOTED,
2681 .hwcg_reg = 0x109f4,
2682 .hwcg_bit = 1,
2683 .clkr = {
2684 .enable_reg = 0x109f4,
2685 .enable_mask = BIT(0),
2686 .hw.init = &(const struct clk_init_data) {
2687 .name = "gcc_emac1_axi_sys_noc_clk",
2688 .parent_hws = (const struct clk_hw*[]) {
2689 &gcc_emac1_axi_clk_src.clkr.hw,
2690 },
2691 .num_parents = 1,
2692 .flags = CLK_SET_RATE_PARENT,
2693 .ops = &clk_branch2_ops,
2694 },
2695 },
2696 };
2697
2698 static struct clk_branch gcc_emac1_cc_sgmiiphy_rx_clk = {
2699 .halt_reg = 0xae044,
2700 .halt_check = BRANCH_HALT_DELAY,
2701 .clkr = {
2702 .enable_reg = 0xae044,
2703 .enable_mask = BIT(0),
2704 .hw.init = &(const struct clk_init_data) {
2705 .name = "gcc_emac1_cc_sgmiiphy_rx_clk",
2706 .parent_hws = (const struct clk_hw*[]) {
2707 &gcc_emac1_cc_sgmiiphy_rx_clk_src.clkr.hw,
2708 },
2709 .num_parents = 1,
2710 .flags = CLK_SET_RATE_PARENT,
2711 .ops = &clk_branch2_ops,
2712 },
2713 },
2714 };
2715
2716 static struct clk_branch gcc_emac1_cc_sgmiiphy_tx_clk = {
2717 .halt_reg = 0xae03c,
2718 .halt_check = BRANCH_HALT_DELAY,
2719 .hwcg_reg = 0xae03c,
2720 .hwcg_bit = 1,
2721 .clkr = {
2722 .enable_reg = 0xae03c,
2723 .enable_mask = BIT(0),
2724 .hw.init = &(const struct clk_init_data) {
2725 .name = "gcc_emac1_cc_sgmiiphy_tx_clk",
2726 .parent_hws = (const struct clk_hw*[]) {
2727 &gcc_emac1_cc_sgmiiphy_tx_clk_src.clkr.hw,
2728 },
2729 .num_parents = 1,
2730 .flags = CLK_SET_RATE_PARENT,
2731 .ops = &clk_branch2_ops,
2732 },
2733 },
2734 };
2735
2736 static struct clk_branch gcc_emac1_phy_aux_clk = {
2737 .halt_reg = 0xae018,
2738 .halt_check = BRANCH_HALT,
2739 .clkr = {
2740 .enable_reg = 0xae018,
2741 .enable_mask = BIT(0),
2742 .hw.init = &(const struct clk_init_data) {
2743 .name = "gcc_emac1_phy_aux_clk",
2744 .parent_hws = (const struct clk_hw*[]) {
2745 &gcc_emac1_phy_aux_clk_src.clkr.hw,
2746 },
2747 .num_parents = 1,
2748 .flags = CLK_SET_RATE_PARENT,
2749 .ops = &clk_branch2_ops,
2750 },
2751 },
2752 };
2753
2754 static struct clk_branch gcc_emac1_ptp_clk = {
2755 .halt_reg = 0xae034,
2756 .halt_check = BRANCH_HALT,
2757 .clkr = {
2758 .enable_reg = 0xae034,
2759 .enable_mask = BIT(0),
2760 .hw.init = &(const struct clk_init_data) {
2761 .name = "gcc_emac1_ptp_clk",
2762 .parent_hws = (const struct clk_hw*[]) {
2763 &gcc_emac1_ptp_clk_src.clkr.hw,
2764 },
2765 .num_parents = 1,
2766 .flags = CLK_SET_RATE_PARENT,
2767 .ops = &clk_branch2_ops,
2768 },
2769 },
2770 };
2771
2772 static struct clk_branch gcc_emac1_rgmii_clk = {
2773 .halt_reg = 0xae038,
2774 .halt_check = BRANCH_HALT,
2775 .clkr = {
2776 .enable_reg = 0xae038,
2777 .enable_mask = BIT(0),
2778 .hw.init = &(const struct clk_init_data) {
2779 .name = "gcc_emac1_rgmii_clk",
2780 .parent_hws = (const struct clk_hw*[]) {
2781 &gcc_emac1_rgmii_clk_src.clkr.hw,
2782 },
2783 .num_parents = 1,
2784 .flags = CLK_SET_RATE_PARENT,
2785 .ops = &clk_branch2_ops,
2786 },
2787 },
2788 };
2789
2790 static struct clk_branch gcc_gp1_clk = {
2791 .halt_reg = 0x4d000,
2792 .halt_check = BRANCH_HALT,
2793 .clkr = {
2794 .enable_reg = 0x4d000,
2795 .enable_mask = BIT(0),
2796 .hw.init = &(const struct clk_init_data) {
2797 .name = "gcc_gp1_clk",
2798 .parent_hws = (const struct clk_hw*[]) {
2799 &gcc_gp1_clk_src.clkr.hw,
2800 },
2801 .num_parents = 1,
2802 .flags = CLK_SET_RATE_PARENT,
2803 .ops = &clk_branch2_ops,
2804 },
2805 },
2806 };
2807
2808 static struct clk_branch gcc_gp2_clk = {
2809 .halt_reg = 0x4e000,
2810 .halt_check = BRANCH_HALT,
2811 .clkr = {
2812 .enable_reg = 0x4e000,
2813 .enable_mask = BIT(0),
2814 .hw.init = &(const struct clk_init_data) {
2815 .name = "gcc_gp2_clk",
2816 .parent_hws = (const struct clk_hw*[]) {
2817 &gcc_gp2_clk_src.clkr.hw,
2818 },
2819 .num_parents = 1,
2820 .flags = CLK_SET_RATE_PARENT,
2821 .ops = &clk_branch2_ops,
2822 },
2823 },
2824 };
2825
2826 static struct clk_branch gcc_gp3_clk = {
2827 .halt_reg = 0x4f000,
2828 .halt_check = BRANCH_HALT,
2829 .clkr = {
2830 .enable_reg = 0x4f000,
2831 .enable_mask = BIT(0),
2832 .hw.init = &(const struct clk_init_data) {
2833 .name = "gcc_gp3_clk",
2834 .parent_hws = (const struct clk_hw*[]) {
2835 &gcc_gp3_clk_src.clkr.hw,
2836 },
2837 .num_parents = 1,
2838 .flags = CLK_SET_RATE_PARENT,
2839 .ops = &clk_branch2_ops,
2840 },
2841 },
2842 };
2843
2844 static struct clk_branch gcc_gpu_gpll0_clk_src = {
2845 .halt_check = BRANCH_HALT_DELAY,
2846 .clkr = {
2847 .enable_reg = 0x7900c,
2848 .enable_mask = BIT(18),
2849 .hw.init = &(const struct clk_init_data) {
2850 .name = "gcc_gpu_gpll0_clk_src",
2851 .parent_hws = (const struct clk_hw*[]) {
2852 &gpll0.clkr.hw,
2853 },
2854 .num_parents = 1,
2855 .flags = CLK_SET_RATE_PARENT,
2856 .ops = &clk_branch2_ops,
2857 },
2858 },
2859 };
2860
2861 static struct clk_branch gcc_gpu_gpll0_div_clk_src = {
2862 .halt_check = BRANCH_HALT_DELAY,
2863 .clkr = {
2864 .enable_reg = 0x7900c,
2865 .enable_mask = BIT(19),
2866 .hw.init = &(const struct clk_init_data) {
2867 .name = "gcc_gpu_gpll0_div_clk_src",
2868 .parent_hws = (const struct clk_hw*[]) {
2869 &gpll0_out_aux2.clkr.hw,
2870 },
2871 .num_parents = 1,
2872 .flags = CLK_SET_RATE_PARENT,
2873 .ops = &clk_branch2_ops,
2874 },
2875 },
2876 };
2877
2878 static struct clk_branch gcc_gpu_memnoc_gfx_clk = {
2879 .halt_reg = 0x3600c,
2880 .halt_check = BRANCH_VOTED,
2881 .hwcg_reg = 0x3600c,
2882 .hwcg_bit = 1,
2883 .clkr = {
2884 .enable_reg = 0x3600c,
2885 .enable_mask = BIT(0),
2886 .hw.init = &(const struct clk_init_data) {
2887 .name = "gcc_gpu_memnoc_gfx_clk",
2888 .ops = &clk_branch2_aon_ops,
2889 },
2890 },
2891 };
2892
2893 static struct clk_branch gcc_gpu_smmu_vote_clk = {
2894 .halt_reg = 0x7d000,
2895 .halt_check = BRANCH_HALT_VOTED,
2896 .clkr = {
2897 .enable_reg = 0x7d000,
2898 .enable_mask = BIT(0),
2899 .hw.init = &(const struct clk_init_data) {
2900 .name = "gcc_gpu_smmu_vote_clk",
2901 .ops = &clk_branch2_ops,
2902 },
2903 },
2904 };
2905
2906 static struct clk_branch gcc_gpu_snoc_dvm_gfx_clk = {
2907 .halt_reg = 0x36018,
2908 .halt_check = BRANCH_HALT,
2909 .clkr = {
2910 .enable_reg = 0x36018,
2911 .enable_mask = BIT(0),
2912 .hw.init = &(const struct clk_init_data) {
2913 .name = "gcc_gpu_snoc_dvm_gfx_clk",
2914 .ops = &clk_branch2_ops,
2915 },
2916 },
2917 };
2918
2919 static struct clk_branch gcc_gpu_throttle_core_clk = {
2920 .halt_reg = 0x36048,
2921 .halt_check = BRANCH_HALT_VOTED,
2922 .hwcg_reg = 0x36048,
2923 .hwcg_bit = 1,
2924 .clkr = {
2925 .enable_reg = 0x7900c,
2926 .enable_mask = BIT(21),
2927 .hw.init = &(const struct clk_init_data) {
2928 .name = "gcc_gpu_throttle_core_clk",
2929 .ops = &clk_branch2_ops,
2930 },
2931 },
2932 };
2933
2934 static struct clk_branch gcc_mmu_tcu_vote_clk = {
2935 .halt_reg = 0x7d06c,
2936 .halt_check = BRANCH_HALT_VOTED,
2937 .clkr = {
2938 .enable_reg = 0x7d06c,
2939 .enable_mask = BIT(0),
2940 .hw.init = &(const struct clk_init_data) {
2941 .name = "gcc_mmu_tcu_vote_clk",
2942 .ops = &clk_branch2_ops,
2943 },
2944 },
2945 };
2946
2947 static struct clk_branch gcc_pcie_aux_clk = {
2948 .halt_reg = 0xaf044,
2949 .halt_check = BRANCH_HALT_VOTED,
2950 .hwcg_reg = 0xaf044,
2951 .hwcg_bit = 1,
2952 .clkr = {
2953 .enable_reg = 0x79018,
2954 .enable_mask = BIT(0),
2955 .hw.init = &(const struct clk_init_data) {
2956 .name = "gcc_pcie_aux_clk",
2957 .parent_hws = (const struct clk_hw*[]) {
2958 &gcc_pcie_aux_clk_src.clkr.hw,
2959 },
2960 .num_parents = 1,
2961 .flags = CLK_SET_RATE_PARENT,
2962 .ops = &clk_branch2_ops,
2963 },
2964 },
2965 };
2966
2967 static struct clk_branch gcc_pcie_cfg_ahb_clk = {
2968 .halt_reg = 0xaf010,
2969 .halt_check = BRANCH_HALT_VOTED,
2970 .hwcg_reg = 0xaf010,
2971 .hwcg_bit = 1,
2972 .clkr = {
2973 .enable_reg = 0x7900c,
2974 .enable_mask = BIT(27),
2975 .hw.init = &(const struct clk_init_data) {
2976 .name = "gcc_pcie_cfg_ahb_clk",
2977 .ops = &clk_branch2_ops,
2978 },
2979 },
2980 };
2981
2982 static struct clk_branch gcc_pcie_clkref_en = {
2983 .halt_reg = 0xb8000,
2984 .halt_check = BRANCH_HALT_DELAY,
2985 .clkr = {
2986 .enable_reg = 0xb8000,
2987 .enable_mask = BIT(0),
2988 .hw.init = &(const struct clk_init_data) {
2989 .name = "gcc_pcie_clkref_en",
2990 .ops = &clk_branch2_ops,
2991 },
2992 },
2993 };
2994
2995 static struct clk_branch gcc_pcie_mstr_axi_clk = {
2996 .halt_reg = 0xaf020,
2997 .halt_check = BRANCH_HALT_VOTED,
2998 .hwcg_reg = 0xaf020,
2999 .hwcg_bit = 1,
3000 .clkr = {
3001 .enable_reg = 0x7900c,
3002 .enable_mask = BIT(30),
3003 .hw.init = &(const struct clk_init_data) {
3004 .name = "gcc_pcie_mstr_axi_clk",
3005 .ops = &clk_branch2_ops,
3006 },
3007 },
3008 };
3009
3010 static struct clk_branch gcc_pcie_pipe_clk = {
3011 .halt_reg = 0xaf050,
3012 .halt_check = BRANCH_HALT_DELAY,
3013 .hwcg_reg = 0xaf050,
3014 .hwcg_bit = 1,
3015 .clkr = {
3016 .enable_reg = 0x79018,
3017 .enable_mask = BIT(2),
3018 .hw.init = &(const struct clk_init_data) {
3019 .name = "gcc_pcie_pipe_clk",
3020 .parent_hws = (const struct clk_hw*[]) {
3021 &gcc_pcie_pipe_clk_src.clkr.hw,
3022 },
3023 .num_parents = 1,
3024 .flags = CLK_SET_RATE_PARENT,
3025 .ops = &clk_branch2_ops,
3026 },
3027 },
3028 };
3029
3030 static struct clk_branch gcc_pcie_rchng_phy_clk = {
3031 .halt_reg = 0xaf040,
3032 .halt_check = BRANCH_HALT_VOTED,
3033 .hwcg_reg = 0xaf040,
3034 .hwcg_bit = 1,
3035 .clkr = {
3036 .enable_reg = 0x7900c,
3037 .enable_mask = BIT(31),
3038 .hw.init = &(const struct clk_init_data) {
3039 .name = "gcc_pcie_rchng_phy_clk",
3040 .parent_hws = (const struct clk_hw*[]) {
3041 &gcc_pcie_rchng_phy_clk_src.clkr.hw,
3042 },
3043 .num_parents = 1,
3044 .flags = CLK_SET_RATE_PARENT,
3045 .ops = &clk_branch2_ops,
3046 },
3047 },
3048 };
3049
3050 static struct clk_branch gcc_pcie_sleep_clk = {
3051 .halt_reg = 0xaf04c,
3052 .halt_check = BRANCH_HALT_VOTED,
3053 .hwcg_reg = 0xaf04c,
3054 .hwcg_bit = 1,
3055 .clkr = {
3056 .enable_reg = 0x79018,
3057 .enable_mask = BIT(1),
3058 .hw.init = &(const struct clk_init_data) {
3059 .name = "gcc_pcie_sleep_clk",
3060 .parent_hws = (const struct clk_hw*[]) {
3061 &gcc_pcie_aux_phy_clk_src.clkr.hw,
3062 },
3063 .num_parents = 1,
3064 .flags = CLK_SET_RATE_PARENT,
3065 .ops = &clk_branch2_ops,
3066 },
3067 },
3068 };
3069
3070 static struct clk_branch gcc_pcie_slv_axi_clk = {
3071 .halt_reg = 0xaf018,
3072 .halt_check = BRANCH_HALT_VOTED,
3073 .clkr = {
3074 .enable_reg = 0x7900c,
3075 .enable_mask = BIT(29),
3076 .hw.init = &(const struct clk_init_data) {
3077 .name = "gcc_pcie_slv_axi_clk",
3078 .ops = &clk_branch2_ops,
3079 },
3080 },
3081 };
3082
3083 static struct clk_branch gcc_pcie_slv_q2a_axi_clk = {
3084 .halt_reg = 0xaf014,
3085 .halt_check = BRANCH_HALT_VOTED,
3086 .hwcg_reg = 0xaf014,
3087 .hwcg_bit = 1,
3088 .clkr = {
3089 .enable_reg = 0x7900c,
3090 .enable_mask = BIT(28),
3091 .hw.init = &(const struct clk_init_data) {
3092 .name = "gcc_pcie_slv_q2a_axi_clk",
3093 .ops = &clk_branch2_ops,
3094 },
3095 },
3096 };
3097
3098 static struct clk_branch gcc_pcie_tbu_clk = {
3099 .halt_reg = 0xaf098,
3100 .halt_check = BRANCH_HALT_VOTED,
3101 .hwcg_reg = 0xaf098,
3102 .hwcg_bit = 1,
3103 .clkr = {
3104 .enable_reg = 0x79018,
3105 .enable_mask = BIT(6),
3106 .hw.init = &(const struct clk_init_data) {
3107 .name = "gcc_pcie_tbu_clk",
3108 .ops = &clk_branch2_ops,
3109 },
3110 },
3111 };
3112
3113 static struct clk_branch gcc_pcie_throttle_core_clk = {
3114 .halt_reg = 0xaf094,
3115 .halt_check = BRANCH_HALT_VOTED,
3116 .hwcg_reg = 0xaf094,
3117 .hwcg_bit = 1,
3118 .clkr = {
3119 .enable_reg = 0x79018,
3120 .enable_mask = BIT(5),
3121 .hw.init = &(const struct clk_init_data) {
3122 .name = "gcc_pcie_throttle_core_clk",
3123 .ops = &clk_branch2_ops,
3124 },
3125 },
3126 };
3127
3128 static struct clk_branch gcc_pcie_throttle_xo_clk = {
3129 .halt_reg = 0xaf090,
3130 .halt_check = BRANCH_HALT_VOTED,
3131 .clkr = {
3132 .enable_reg = 0x79018,
3133 .enable_mask = BIT(4),
3134 .hw.init = &(const struct clk_init_data) {
3135 .name = "gcc_pcie_throttle_xo_clk",
3136 .ops = &clk_branch2_ops,
3137 },
3138 },
3139 };
3140
3141 static struct clk_branch gcc_pcie_tile_axi_sys_noc_clk = {
3142 .halt_reg = 0x10f2c,
3143 .halt_check = BRANCH_HALT_VOTED,
3144 .hwcg_reg = 0x10f2c,
3145 .hwcg_bit = 1,
3146 .clkr = {
3147 .enable_reg = 0x10f2c,
3148 .enable_mask = BIT(0),
3149 .hw.init = &(const struct clk_init_data) {
3150 .name = "gcc_pcie_tile_axi_sys_noc_clk",
3151 .parent_hws = (const struct clk_hw*[]) {
3152 &gcc_emac0_axi_clk_src.clkr.hw,
3153 },
3154 .num_parents = 1,
3155 .flags = CLK_SET_RATE_PARENT,
3156 .ops = &clk_branch2_ops,
3157 },
3158 },
3159 };
3160
3161 static struct clk_branch gcc_pdm2_clk = {
3162 .halt_reg = 0x2000c,
3163 .halt_check = BRANCH_HALT,
3164 .clkr = {
3165 .enable_reg = 0x2000c,
3166 .enable_mask = BIT(0),
3167 .hw.init = &(const struct clk_init_data) {
3168 .name = "gcc_pdm2_clk",
3169 .parent_hws = (const struct clk_hw*[]) {
3170 &gcc_pdm2_clk_src.clkr.hw,
3171 },
3172 .num_parents = 1,
3173 .flags = CLK_SET_RATE_PARENT,
3174 .ops = &clk_branch2_ops,
3175 },
3176 },
3177 };
3178
3179 static struct clk_branch gcc_pdm_ahb_clk = {
3180 .halt_reg = 0x20004,
3181 .halt_check = BRANCH_HALT,
3182 .hwcg_reg = 0x20004,
3183 .hwcg_bit = 1,
3184 .clkr = {
3185 .enable_reg = 0x20004,
3186 .enable_mask = BIT(0),
3187 .hw.init = &(const struct clk_init_data) {
3188 .name = "gcc_pdm_ahb_clk",
3189 .ops = &clk_branch2_ops,
3190 },
3191 },
3192 };
3193
3194 static struct clk_branch gcc_pdm_xo4_clk = {
3195 .halt_reg = 0x20008,
3196 .halt_check = BRANCH_HALT,
3197 .clkr = {
3198 .enable_reg = 0x20008,
3199 .enable_mask = BIT(0),
3200 .hw.init = &(const struct clk_init_data) {
3201 .name = "gcc_pdm_xo4_clk",
3202 .ops = &clk_branch2_ops,
3203 },
3204 },
3205 };
3206
3207 static struct clk_branch gcc_pwm0_xo512_clk = {
3208 .halt_reg = 0x2002c,
3209 .halt_check = BRANCH_HALT,
3210 .clkr = {
3211 .enable_reg = 0x2002c,
3212 .enable_mask = BIT(0),
3213 .hw.init = &(const struct clk_init_data) {
3214 .name = "gcc_pwm0_xo512_clk",
3215 .ops = &clk_branch2_ops,
3216 },
3217 },
3218 };
3219
3220 static struct clk_branch gcc_qmip_camera_nrt_ahb_clk = {
3221 .halt_reg = 0x17014,
3222 .halt_check = BRANCH_HALT_VOTED,
3223 .hwcg_reg = 0x17014,
3224 .hwcg_bit = 1,
3225 .clkr = {
3226 .enable_reg = 0x79004,
3227 .enable_mask = BIT(9),
3228 .hw.init = &(const struct clk_init_data) {
3229 .name = "gcc_qmip_camera_nrt_ahb_clk",
3230 .ops = &clk_branch2_ops,
3231 },
3232 },
3233 };
3234
3235 static struct clk_branch gcc_qmip_camera_rt_ahb_clk = {
3236 .halt_reg = 0x17060,
3237 .halt_check = BRANCH_HALT_VOTED,
3238 .hwcg_reg = 0x17060,
3239 .hwcg_bit = 1,
3240 .clkr = {
3241 .enable_reg = 0x79004,
3242 .enable_mask = BIT(12),
3243 .hw.init = &(const struct clk_init_data) {
3244 .name = "gcc_qmip_camera_rt_ahb_clk",
3245 .ops = &clk_branch2_ops,
3246 },
3247 },
3248 };
3249
3250 static struct clk_branch gcc_qmip_disp_ahb_clk = {
3251 .halt_reg = 0x17018,
3252 .halt_check = BRANCH_HALT_VOTED,
3253 .hwcg_reg = 0x17018,
3254 .hwcg_bit = 1,
3255 .clkr = {
3256 .enable_reg = 0x79004,
3257 .enable_mask = BIT(10),
3258 .hw.init = &(const struct clk_init_data) {
3259 .name = "gcc_qmip_disp_ahb_clk",
3260 .ops = &clk_branch2_ops,
3261 },
3262 },
3263 };
3264
3265 static struct clk_branch gcc_qmip_gpu_cfg_ahb_clk = {
3266 .halt_reg = 0x36040,
3267 .halt_check = BRANCH_HALT_VOTED,
3268 .hwcg_reg = 0x36040,
3269 .hwcg_bit = 1,
3270 .clkr = {
3271 .enable_reg = 0x7900c,
3272 .enable_mask = BIT(20),
3273 .hw.init = &(const struct clk_init_data) {
3274 .name = "gcc_qmip_gpu_cfg_ahb_clk",
3275 .ops = &clk_branch2_ops,
3276 },
3277 },
3278 };
3279
3280 static struct clk_branch gcc_qmip_pcie_cfg_ahb_clk = {
3281 .halt_reg = 0xaf08c,
3282 .halt_check = BRANCH_HALT_VOTED,
3283 .hwcg_reg = 0xaf08c,
3284 .hwcg_bit = 1,
3285 .clkr = {
3286 .enable_reg = 0x79018,
3287 .enable_mask = BIT(3),
3288 .hw.init = &(const struct clk_init_data) {
3289 .name = "gcc_qmip_pcie_cfg_ahb_clk",
3290 .ops = &clk_branch2_ops,
3291 },
3292 },
3293 };
3294
3295 static struct clk_branch gcc_qmip_video_vcodec_ahb_clk = {
3296 .halt_reg = 0x17010,
3297 .halt_check = BRANCH_HALT_VOTED,
3298 .hwcg_reg = 0x17010,
3299 .hwcg_bit = 1,
3300 .clkr = {
3301 .enable_reg = 0x79004,
3302 .enable_mask = BIT(8),
3303 .hw.init = &(const struct clk_init_data) {
3304 .name = "gcc_qmip_video_vcodec_ahb_clk",
3305 .ops = &clk_branch2_ops,
3306 },
3307 },
3308 };
3309
3310 static struct clk_branch gcc_qupv3_wrap0_core_2x_clk = {
3311 .halt_reg = 0x1f014,
3312 .halt_check = BRANCH_HALT_VOTED,
3313 .clkr = {
3314 .enable_reg = 0x79004,
3315 .enable_mask = BIT(21),
3316 .hw.init = &(const struct clk_init_data) {
3317 .name = "gcc_qupv3_wrap0_core_2x_clk",
3318 .ops = &clk_branch2_ops,
3319 },
3320 },
3321 };
3322
3323 static struct clk_branch gcc_qupv3_wrap0_core_clk = {
3324 .halt_reg = 0x1f00c,
3325 .halt_check = BRANCH_HALT_VOTED,
3326 .clkr = {
3327 .enable_reg = 0x79004,
3328 .enable_mask = BIT(20),
3329 .hw.init = &(const struct clk_init_data) {
3330 .name = "gcc_qupv3_wrap0_core_clk",
3331 .ops = &clk_branch2_ops,
3332 },
3333 },
3334 };
3335
3336 static struct clk_branch gcc_qupv3_wrap0_s0_clk = {
3337 .halt_reg = 0x1f144,
3338 .halt_check = BRANCH_HALT_VOTED,
3339 .clkr = {
3340 .enable_reg = 0x79004,
3341 .enable_mask = BIT(22),
3342 .hw.init = &(const struct clk_init_data) {
3343 .name = "gcc_qupv3_wrap0_s0_clk",
3344 .parent_hws = (const struct clk_hw*[]) {
3345 &gcc_qupv3_wrap0_s0_clk_src.clkr.hw,
3346 },
3347 .num_parents = 1,
3348 .flags = CLK_SET_RATE_PARENT,
3349 .ops = &clk_branch2_ops,
3350 },
3351 },
3352 };
3353
3354 static struct clk_branch gcc_qupv3_wrap0_s1_clk = {
3355 .halt_reg = 0x1f274,
3356 .halt_check = BRANCH_HALT_VOTED,
3357 .clkr = {
3358 .enable_reg = 0x79004,
3359 .enable_mask = BIT(23),
3360 .hw.init = &(const struct clk_init_data) {
3361 .name = "gcc_qupv3_wrap0_s1_clk",
3362 .parent_hws = (const struct clk_hw*[]) {
3363 &gcc_qupv3_wrap0_s1_clk_src.clkr.hw,
3364 },
3365 .num_parents = 1,
3366 .flags = CLK_SET_RATE_PARENT,
3367 .ops = &clk_branch2_ops,
3368 },
3369 },
3370 };
3371
3372 static struct clk_branch gcc_qupv3_wrap0_s2_clk = {
3373 .halt_reg = 0x1f3a4,
3374 .halt_check = BRANCH_HALT_VOTED,
3375 .clkr = {
3376 .enable_reg = 0x79004,
3377 .enable_mask = BIT(24),
3378 .hw.init = &(const struct clk_init_data) {
3379 .name = "gcc_qupv3_wrap0_s2_clk",
3380 .parent_hws = (const struct clk_hw*[]) {
3381 &gcc_qupv3_wrap0_s2_clk_src.clkr.hw,
3382 },
3383 .num_parents = 1,
3384 .flags = CLK_SET_RATE_PARENT,
3385 .ops = &clk_branch2_ops,
3386 },
3387 },
3388 };
3389
3390 static struct clk_branch gcc_qupv3_wrap0_s3_clk = {
3391 .halt_reg = 0x1f4d4,
3392 .halt_check = BRANCH_HALT_VOTED,
3393 .clkr = {
3394 .enable_reg = 0x79004,
3395 .enable_mask = BIT(25),
3396 .hw.init = &(const struct clk_init_data) {
3397 .name = "gcc_qupv3_wrap0_s3_clk",
3398 .parent_hws = (const struct clk_hw*[]) {
3399 &gcc_qupv3_wrap0_s3_clk_src.clkr.hw,
3400 },
3401 .num_parents = 1,
3402 .flags = CLK_SET_RATE_PARENT,
3403 .ops = &clk_branch2_ops,
3404 },
3405 },
3406 };
3407
3408 static struct clk_branch gcc_qupv3_wrap0_s4_clk = {
3409 .halt_reg = 0x1f604,
3410 .halt_check = BRANCH_HALT_VOTED,
3411 .clkr = {
3412 .enable_reg = 0x79004,
3413 .enable_mask = BIT(26),
3414 .hw.init = &(const struct clk_init_data) {
3415 .name = "gcc_qupv3_wrap0_s4_clk",
3416 .parent_hws = (const struct clk_hw*[]) {
3417 &gcc_qupv3_wrap0_s4_clk_src.clkr.hw,
3418 },
3419 .num_parents = 1,
3420 .flags = CLK_SET_RATE_PARENT,
3421 .ops = &clk_branch2_ops,
3422 },
3423 },
3424 };
3425
3426 static struct clk_branch gcc_qupv3_wrap0_s5_clk = {
3427 .halt_reg = 0x1f734,
3428 .halt_check = BRANCH_HALT_VOTED,
3429 .clkr = {
3430 .enable_reg = 0x79004,
3431 .enable_mask = BIT(27),
3432 .hw.init = &(const struct clk_init_data) {
3433 .name = "gcc_qupv3_wrap0_s5_clk",
3434 .parent_hws = (const struct clk_hw*[]) {
3435 &gcc_qupv3_wrap0_s5_clk_src.clkr.hw,
3436 },
3437 .num_parents = 1,
3438 .flags = CLK_SET_RATE_PARENT,
3439 .ops = &clk_branch2_ops,
3440 },
3441 },
3442 };
3443
3444 static struct clk_branch gcc_qupv3_wrap0_s6_clk = {
3445 .halt_reg = 0x1f864,
3446 .halt_check = BRANCH_HALT_VOTED,
3447 .clkr = {
3448 .enable_reg = 0x79004,
3449 .enable_mask = BIT(28),
3450 .hw.init = &(const struct clk_init_data) {
3451 .name = "gcc_qupv3_wrap0_s6_clk",
3452 .parent_hws = (const struct clk_hw*[]) {
3453 &gcc_qupv3_wrap0_s6_clk_src.clkr.hw,
3454 },
3455 .num_parents = 1,
3456 .flags = CLK_SET_RATE_PARENT,
3457 .ops = &clk_branch2_ops,
3458 },
3459 },
3460 };
3461
3462 static struct clk_branch gcc_qupv3_wrap0_s7_clk = {
3463 .halt_reg = 0x1f994,
3464 .halt_check = BRANCH_HALT_VOTED,
3465 .clkr = {
3466 .enable_reg = 0x79004,
3467 .enable_mask = BIT(29),
3468 .hw.init = &(const struct clk_init_data) {
3469 .name = "gcc_qupv3_wrap0_s7_clk",
3470 .parent_hws = (const struct clk_hw*[]) {
3471 &gcc_qupv3_wrap0_s7_clk_src.clkr.hw,
3472 },
3473 .num_parents = 1,
3474 .flags = CLK_SET_RATE_PARENT,
3475 .ops = &clk_branch2_ops,
3476 },
3477 },
3478 };
3479
3480 static struct clk_branch gcc_qupv3_wrap0_s8_clk = {
3481 .halt_reg = 0x1fac4,
3482 .halt_check = BRANCH_HALT_VOTED,
3483 .clkr = {
3484 .enable_reg = 0x79004,
3485 .enable_mask = BIT(30),
3486 .hw.init = &(const struct clk_init_data) {
3487 .name = "gcc_qupv3_wrap0_s8_clk",
3488 .parent_hws = (const struct clk_hw*[]) {
3489 &gcc_qupv3_wrap0_s8_clk_src.clkr.hw,
3490 },
3491 .num_parents = 1,
3492 .flags = CLK_SET_RATE_PARENT,
3493 .ops = &clk_branch2_ops,
3494 },
3495 },
3496 };
3497
3498 static struct clk_branch gcc_qupv3_wrap0_s9_clk = {
3499 .halt_reg = 0x1fbf4,
3500 .halt_check = BRANCH_HALT_VOTED,
3501 .clkr = {
3502 .enable_reg = 0x79004,
3503 .enable_mask = BIT(31),
3504 .hw.init = &(const struct clk_init_data) {
3505 .name = "gcc_qupv3_wrap0_s9_clk",
3506 .parent_hws = (const struct clk_hw*[]) {
3507 &gcc_qupv3_wrap0_s9_clk_src.clkr.hw,
3508 },
3509 .num_parents = 1,
3510 .flags = CLK_SET_RATE_PARENT,
3511 .ops = &clk_branch2_ops,
3512 },
3513 },
3514 };
3515
3516 static struct clk_branch gcc_qupv3_wrap_0_m_ahb_clk = {
3517 .halt_reg = 0x1f004,
3518 .halt_check = BRANCH_HALT_VOTED,
3519 .hwcg_reg = 0x1f004,
3520 .hwcg_bit = 1,
3521 .clkr = {
3522 .enable_reg = 0x79004,
3523 .enable_mask = BIT(18),
3524 .hw.init = &(const struct clk_init_data) {
3525 .name = "gcc_qupv3_wrap_0_m_ahb_clk",
3526 .ops = &clk_branch2_ops,
3527 },
3528 },
3529 };
3530
3531 static struct clk_branch gcc_qupv3_wrap_0_s_ahb_clk = {
3532 .halt_reg = 0x1f008,
3533 .halt_check = BRANCH_HALT_VOTED,
3534 .hwcg_reg = 0x1f008,
3535 .hwcg_bit = 1,
3536 .clkr = {
3537 .enable_reg = 0x79004,
3538 .enable_mask = BIT(19),
3539 .hw.init = &(const struct clk_init_data) {
3540 .name = "gcc_qupv3_wrap_0_s_ahb_clk",
3541 .ops = &clk_branch2_ops,
3542 },
3543 },
3544 };
3545
3546 static struct clk_branch gcc_sdcc1_ahb_clk = {
3547 .halt_reg = 0x38008,
3548 .halt_check = BRANCH_HALT,
3549 .hwcg_reg = 0x38008,
3550 .hwcg_bit = 1,
3551 .clkr = {
3552 .enable_reg = 0x38008,
3553 .enable_mask = BIT(0),
3554 .hw.init = &(const struct clk_init_data) {
3555 .name = "gcc_sdcc1_ahb_clk",
3556 .ops = &clk_branch2_ops,
3557 },
3558 },
3559 };
3560
3561 static struct clk_branch gcc_sdcc1_apps_clk = {
3562 .halt_reg = 0x38004,
3563 .halt_check = BRANCH_HALT,
3564 .clkr = {
3565 .enable_reg = 0x38004,
3566 .enable_mask = BIT(0),
3567 .hw.init = &(const struct clk_init_data) {
3568 .name = "gcc_sdcc1_apps_clk",
3569 .parent_hws = (const struct clk_hw*[]) {
3570 &gcc_sdcc1_apps_clk_src.clkr.hw,
3571 },
3572 .num_parents = 1,
3573 .flags = CLK_SET_RATE_PARENT,
3574 .ops = &clk_branch2_ops,
3575 },
3576 },
3577 };
3578
3579 static struct clk_branch gcc_sdcc1_ice_core_clk = {
3580 .halt_reg = 0x3800c,
3581 .halt_check = BRANCH_HALT,
3582 .hwcg_reg = 0x3800c,
3583 .hwcg_bit = 1,
3584 .clkr = {
3585 .enable_reg = 0x3800c,
3586 .enable_mask = BIT(0),
3587 .hw.init = &(const struct clk_init_data) {
3588 .name = "gcc_sdcc1_ice_core_clk",
3589 .parent_hws = (const struct clk_hw*[]) {
3590 &gcc_sdcc1_ice_core_clk_src.clkr.hw,
3591 },
3592 .num_parents = 1,
3593 .flags = CLK_SET_RATE_PARENT,
3594 .ops = &clk_branch2_ops,
3595 },
3596 },
3597 };
3598
3599 static struct clk_branch gcc_sdcc2_ahb_clk = {
3600 .halt_reg = 0x1e008,
3601 .halt_check = BRANCH_HALT,
3602 .hwcg_reg = 0x1e008,
3603 .hwcg_bit = 1,
3604 .clkr = {
3605 .enable_reg = 0x1e008,
3606 .enable_mask = BIT(0),
3607 .hw.init = &(const struct clk_init_data) {
3608 .name = "gcc_sdcc2_ahb_clk",
3609 .ops = &clk_branch2_ops,
3610 },
3611 },
3612 };
3613
3614 static struct clk_branch gcc_sdcc2_apps_clk = {
3615 .halt_reg = 0x1e004,
3616 .halt_check = BRANCH_HALT,
3617 .clkr = {
3618 .enable_reg = 0x1e004,
3619 .enable_mask = BIT(0),
3620 .hw.init = &(const struct clk_init_data) {
3621 .name = "gcc_sdcc2_apps_clk",
3622 .parent_hws = (const struct clk_hw*[]) {
3623 &gcc_sdcc2_apps_clk_src.clkr.hw,
3624 },
3625 .num_parents = 1,
3626 .flags = CLK_SET_RATE_PARENT,
3627 .ops = &clk_branch2_ops,
3628 },
3629 },
3630 };
3631
3632 static struct clk_branch gcc_sys_noc_usb2_prim_axi_clk = {
3633 .halt_reg = 0x10a14,
3634 .halt_check = BRANCH_HALT_VOTED,
3635 .hwcg_reg = 0x10a14,
3636 .hwcg_bit = 1,
3637 .clkr = {
3638 .enable_reg = 0x10a14,
3639 .enable_mask = BIT(0),
3640 .hw.init = &(const struct clk_init_data) {
3641 .name = "gcc_sys_noc_usb2_prim_axi_clk",
3642 .parent_hws = (const struct clk_hw*[]) {
3643 &gcc_usb20_master_clk_src.clkr.hw,
3644 },
3645 .num_parents = 1,
3646 .flags = CLK_SET_RATE_PARENT,
3647 .ops = &clk_branch2_ops,
3648 },
3649 },
3650 };
3651
3652 static struct clk_branch gcc_sys_noc_usb3_prim_axi_clk = {
3653 .halt_reg = 0x1a078,
3654 .halt_check = BRANCH_HALT_VOTED,
3655 .hwcg_reg = 0x1a078,
3656 .hwcg_bit = 1,
3657 .clkr = {
3658 .enable_reg = 0x1a078,
3659 .enable_mask = BIT(0),
3660 .hw.init = &(const struct clk_init_data) {
3661 .name = "gcc_sys_noc_usb3_prim_axi_clk",
3662 .parent_hws = (const struct clk_hw*[]) {
3663 &gcc_usb30_prim_master_clk_src.clkr.hw,
3664 },
3665 .num_parents = 1,
3666 .flags = CLK_SET_RATE_PARENT,
3667 .ops = &clk_branch2_ops,
3668 },
3669 },
3670 };
3671
3672 static struct clk_branch gcc_tscss_ahb_clk = {
3673 .halt_reg = 0xac024,
3674 .halt_check = BRANCH_HALT_VOTED,
3675 .hwcg_reg = 0xac024,
3676 .hwcg_bit = 1,
3677 .clkr = {
3678 .enable_reg = 0xac024,
3679 .enable_mask = BIT(0),
3680 .hw.init = &(const struct clk_init_data) {
3681 .name = "gcc_tscss_ahb_clk",
3682 .ops = &clk_branch2_ops,
3683 },
3684 },
3685 };
3686
3687 static struct clk_branch gcc_tscss_cntr_clk = {
3688 .halt_reg = 0xac020,
3689 .halt_check = BRANCH_HALT,
3690 .clkr = {
3691 .enable_reg = 0xac020,
3692 .enable_mask = BIT(0),
3693 .hw.init = &(const struct clk_init_data) {
3694 .name = "gcc_tscss_cntr_clk",
3695 .parent_hws = (const struct clk_hw*[]) {
3696 &gcc_tscss_clk_src.clkr.hw,
3697 },
3698 .num_parents = 1,
3699 .flags = CLK_SET_RATE_PARENT,
3700 .ops = &clk_branch2_ops,
3701 },
3702 },
3703 };
3704
3705 static struct clk_branch gcc_tscss_etu_clk = {
3706 .halt_reg = 0xac01c,
3707 .halt_check = BRANCH_HALT,
3708 .clkr = {
3709 .enable_reg = 0xac01c,
3710 .enable_mask = BIT(0),
3711 .hw.init = &(const struct clk_init_data) {
3712 .name = "gcc_tscss_etu_clk",
3713 .parent_hws = (const struct clk_hw*[]) {
3714 &gcc_tscss_clk_src.clkr.hw,
3715 },
3716 .num_parents = 1,
3717 .flags = CLK_SET_RATE_PARENT,
3718 .ops = &clk_branch2_ops,
3719 },
3720 },
3721 };
3722
3723 static struct clk_branch gcc_ufs_clkref_en = {
3724 .halt_reg = 0x8c000,
3725 .halt_check = BRANCH_HALT_DELAY,
3726 .clkr = {
3727 .enable_reg = 0x8c000,
3728 .enable_mask = BIT(0),
3729 .hw.init = &(const struct clk_init_data) {
3730 .name = "gcc_ufs_clkref_en",
3731 .ops = &clk_branch2_ops,
3732 },
3733 },
3734 };
3735
3736 static struct clk_branch gcc_usb20_master_clk = {
3737 .halt_reg = 0xb0010,
3738 .halt_check = BRANCH_HALT_VOTED,
3739 .hwcg_reg = 0xb0010,
3740 .hwcg_bit = 1,
3741 .clkr = {
3742 .enable_reg = 0xb0010,
3743 .enable_mask = BIT(0),
3744 .hw.init = &(const struct clk_init_data) {
3745 .name = "gcc_usb20_master_clk",
3746 .parent_hws = (const struct clk_hw*[]) {
3747 &gcc_usb20_master_clk_src.clkr.hw,
3748 },
3749 .num_parents = 1,
3750 .flags = CLK_SET_RATE_PARENT,
3751 .ops = &clk_branch2_ops,
3752 },
3753 },
3754 };
3755
3756 static struct clk_branch gcc_usb20_mock_utmi_clk = {
3757 .halt_reg = 0xb001c,
3758 .halt_check = BRANCH_HALT_VOTED,
3759 .clkr = {
3760 .enable_reg = 0xb001c,
3761 .enable_mask = BIT(0),
3762 .hw.init = &(const struct clk_init_data) {
3763 .name = "gcc_usb20_mock_utmi_clk",
3764 .parent_hws = (const struct clk_hw*[]) {
3765 &gcc_usb20_mock_utmi_postdiv_clk_src.clkr.hw,
3766 },
3767 .num_parents = 1,
3768 .flags = CLK_SET_RATE_PARENT,
3769 .ops = &clk_branch2_ops,
3770 },
3771 },
3772 };
3773
3774 static struct clk_branch gcc_usb20_sleep_clk = {
3775 .halt_reg = 0xb0018,
3776 .halt_check = BRANCH_HALT_VOTED,
3777 .clkr = {
3778 .enable_reg = 0xb0018,
3779 .enable_mask = BIT(0),
3780 .hw.init = &(const struct clk_init_data) {
3781 .name = "gcc_usb20_sleep_clk",
3782 .ops = &clk_branch2_ops,
3783 },
3784 },
3785 };
3786
3787 static struct clk_branch gcc_usb30_prim_master_clk = {
3788 .halt_reg = 0x1a010,
3789 .halt_check = BRANCH_HALT,
3790 .hwcg_reg = 0x1a010,
3791 .hwcg_bit = 1,
3792 .clkr = {
3793 .enable_reg = 0x1a010,
3794 .enable_mask = BIT(0),
3795 .hw.init = &(const struct clk_init_data) {
3796 .name = "gcc_usb30_prim_master_clk",
3797 .parent_hws = (const struct clk_hw*[]) {
3798 &gcc_usb30_prim_master_clk_src.clkr.hw,
3799 },
3800 .num_parents = 1,
3801 .flags = CLK_SET_RATE_PARENT,
3802 .ops = &clk_branch2_ops,
3803 },
3804 },
3805 };
3806
3807 static struct clk_branch gcc_usb30_prim_mock_utmi_clk = {
3808 .halt_reg = 0x1a018,
3809 .halt_check = BRANCH_HALT,
3810 .clkr = {
3811 .enable_reg = 0x1a018,
3812 .enable_mask = BIT(0),
3813 .hw.init = &(const struct clk_init_data) {
3814 .name = "gcc_usb30_prim_mock_utmi_clk",
3815 .parent_hws = (const struct clk_hw*[]) {
3816 &gcc_usb30_prim_mock_utmi_postdiv_clk_src.clkr.hw,
3817 },
3818 .num_parents = 1,
3819 .flags = CLK_SET_RATE_PARENT,
3820 .ops = &clk_branch2_ops,
3821 },
3822 },
3823 };
3824
3825 static struct clk_branch gcc_usb30_prim_sleep_clk = {
3826 .halt_reg = 0x1a014,
3827 .halt_check = BRANCH_HALT,
3828 .clkr = {
3829 .enable_reg = 0x1a014,
3830 .enable_mask = BIT(0),
3831 .hw.init = &(const struct clk_init_data) {
3832 .name = "gcc_usb30_prim_sleep_clk",
3833 .ops = &clk_branch2_ops,
3834 },
3835 },
3836 };
3837
3838 static struct clk_branch gcc_usb3_prim_clkref_en = {
3839 .halt_reg = 0x9f000,
3840 .halt_check = BRANCH_HALT_DELAY,
3841 .clkr = {
3842 .enable_reg = 0x9f000,
3843 .enable_mask = BIT(0),
3844 .hw.init = &(const struct clk_init_data) {
3845 .name = "gcc_usb3_prim_clkref_en",
3846 .ops = &clk_branch2_ops,
3847 },
3848 },
3849 };
3850
3851 static struct clk_branch gcc_usb3_prim_phy_com_aux_clk = {
3852 .halt_reg = 0x1a054,
3853 .halt_check = BRANCH_HALT,
3854 .clkr = {
3855 .enable_reg = 0x1a054,
3856 .enable_mask = BIT(0),
3857 .hw.init = &(const struct clk_init_data) {
3858 .name = "gcc_usb3_prim_phy_com_aux_clk",
3859 .parent_hws = (const struct clk_hw*[]) {
3860 &gcc_usb3_prim_phy_aux_clk_src.clkr.hw,
3861 },
3862 .num_parents = 1,
3863 .flags = CLK_SET_RATE_PARENT,
3864 .ops = &clk_branch2_ops,
3865 },
3866 },
3867 };
3868
3869 static struct clk_branch gcc_usb3_prim_phy_pipe_clk = {
3870 .halt_reg = 0x1a058,
3871 .halt_check = BRANCH_HALT_DELAY,
3872 .hwcg_reg = 0x1a058,
3873 .hwcg_bit = 1,
3874 .clkr = {
3875 .enable_reg = 0x1a058,
3876 .enable_mask = BIT(0),
3877 .hw.init = &(const struct clk_init_data) {
3878 .name = "gcc_usb3_prim_phy_pipe_clk",
3879 .parent_hws = (const struct clk_hw*[]) {
3880 &gcc_usb3_prim_phy_pipe_clk_src.clkr.hw,
3881 },
3882 .num_parents = 1,
3883 .flags = CLK_SET_RATE_PARENT,
3884 .ops = &clk_branch2_ops,
3885 },
3886 },
3887 };
3888
3889 static struct clk_branch gcc_vcodec0_axi_clk = {
3890 .halt_reg = 0x6e008,
3891 .halt_check = BRANCH_HALT,
3892 .clkr = {
3893 .enable_reg = 0x6e008,
3894 .enable_mask = BIT(0),
3895 .hw.init = &(const struct clk_init_data) {
3896 .name = "gcc_vcodec0_axi_clk",
3897 .ops = &clk_branch2_ops,
3898 },
3899 },
3900 };
3901
3902 static struct clk_branch gcc_venus_ahb_clk = {
3903 .halt_reg = 0x6e010,
3904 .halt_check = BRANCH_HALT,
3905 .clkr = {
3906 .enable_reg = 0x6e010,
3907 .enable_mask = BIT(0),
3908 .hw.init = &(const struct clk_init_data) {
3909 .name = "gcc_venus_ahb_clk",
3910 .ops = &clk_branch2_ops,
3911 },
3912 },
3913 };
3914
3915 static struct clk_branch gcc_venus_ctl_axi_clk = {
3916 .halt_reg = 0x6e004,
3917 .halt_check = BRANCH_HALT,
3918 .clkr = {
3919 .enable_reg = 0x6e004,
3920 .enable_mask = BIT(0),
3921 .hw.init = &(const struct clk_init_data) {
3922 .name = "gcc_venus_ctl_axi_clk",
3923 .ops = &clk_branch2_ops,
3924 },
3925 },
3926 };
3927
3928 static struct clk_branch gcc_video_axi0_clk = {
3929 .halt_reg = 0x1701c,
3930 .halt_check = BRANCH_HALT,
3931 .hwcg_reg = 0x1701c,
3932 .hwcg_bit = 1,
3933 .clkr = {
3934 .enable_reg = 0x1701c,
3935 .enable_mask = BIT(0),
3936 .hw.init = &(const struct clk_init_data) {
3937 .name = "gcc_video_axi0_clk",
3938 .ops = &clk_branch2_ops,
3939 },
3940 },
3941 };
3942
3943 static struct clk_branch gcc_video_throttle_core_clk = {
3944 .halt_reg = 0x17068,
3945 .halt_check = BRANCH_HALT_VOTED,
3946 .hwcg_reg = 0x17068,
3947 .hwcg_bit = 1,
3948 .clkr = {
3949 .enable_reg = 0x79004,
3950 .enable_mask = BIT(14),
3951 .hw.init = &(const struct clk_init_data) {
3952 .name = "gcc_video_throttle_core_clk",
3953 .ops = &clk_branch2_ops,
3954 },
3955 },
3956 };
3957
3958 static struct clk_branch gcc_video_vcodec0_sys_clk = {
3959 .halt_reg = 0x6d044,
3960 .halt_check = BRANCH_HALT_DELAY,
3961 .hwcg_reg = 0x6d044,
3962 .hwcg_bit = 1,
3963 .clkr = {
3964 .enable_reg = 0x6d044,
3965 .enable_mask = BIT(0),
3966 .hw.init = &(const struct clk_init_data) {
3967 .name = "gcc_video_vcodec0_sys_clk",
3968 .parent_hws = (const struct clk_hw*[]) {
3969 &gcc_video_venus_clk_src.clkr.hw,
3970 },
3971 .num_parents = 1,
3972 .flags = CLK_SET_RATE_PARENT,
3973 .ops = &clk_branch2_ops,
3974 },
3975 },
3976 };
3977
3978 static struct clk_branch gcc_video_venus_ctl_clk = {
3979 .halt_reg = 0x6d02c,
3980 .halt_check = BRANCH_HALT,
3981 .clkr = {
3982 .enable_reg = 0x6d02c,
3983 .enable_mask = BIT(0),
3984 .hw.init = &(const struct clk_init_data) {
3985 .name = "gcc_video_venus_ctl_clk",
3986 .parent_hws = (const struct clk_hw*[]) {
3987 &gcc_video_venus_clk_src.clkr.hw,
3988 },
3989 .num_parents = 1,
3990 .flags = CLK_SET_RATE_PARENT,
3991 .ops = &clk_branch2_ops,
3992 },
3993 },
3994 };
3995
3996 static struct gdsc gcc_camss_top_gdsc = {
3997 .gdscr = 0x58004,
3998 .en_rest_wait_val = 0x2,
3999 .en_few_wait_val = 0x2,
4000 .clk_dis_wait_val = 0xf,
4001 .pd = {
4002 .name = "gcc_camss_top_gdsc",
4003 },
4004 .pwrsts = PWRSTS_OFF_ON,
4005 .flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE,
4006 };
4007
4008 static struct gdsc gcc_emac0_gdsc = {
4009 .gdscr = 0xad004,
4010 .en_rest_wait_val = 0x2,
4011 .en_few_wait_val = 0x2,
4012 .clk_dis_wait_val = 0x2,
4013 .pd = {
4014 .name = "gcc_emac0_gdsc",
4015 },
4016 .pwrsts = PWRSTS_OFF_ON,
4017 .flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE,
4018 };
4019
4020 static struct gdsc gcc_emac1_gdsc = {
4021 .gdscr = 0xae004,
4022 .en_rest_wait_val = 0x2,
4023 .en_few_wait_val = 0x2,
4024 .clk_dis_wait_val = 0x2,
4025 .pd = {
4026 .name = "gcc_emac1_gdsc",
4027 },
4028 .pwrsts = PWRSTS_OFF_ON,
4029 .flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE,
4030 };
4031
4032 static struct gdsc gcc_pcie_gdsc = {
4033 .gdscr = 0xaf004,
4034 .en_rest_wait_val = 0x2,
4035 .en_few_wait_val = 0x2,
4036 .clk_dis_wait_val = 0xf,
4037 .pd = {
4038 .name = "gcc_pcie_gdsc",
4039 },
4040 .pwrsts = PWRSTS_OFF_ON,
4041 .flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE,
4042 };
4043
4044 static struct gdsc gcc_usb20_gdsc = {
4045 .gdscr = 0xb0004,
4046 .en_rest_wait_val = 0x2,
4047 .en_few_wait_val = 0x2,
4048 .clk_dis_wait_val = 0xf,
4049 .pd = {
4050 .name = "gcc_usb20_gdsc",
4051 },
4052 .pwrsts = PWRSTS_OFF_ON,
4053 .flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE,
4054 };
4055
4056 static struct gdsc gcc_usb30_prim_gdsc = {
4057 .gdscr = 0x1a004,
4058 .en_rest_wait_val = 0x2,
4059 .en_few_wait_val = 0x2,
4060 .clk_dis_wait_val = 0x2,
4061 .pd = {
4062 .name = "gcc_usb30_prim_gdsc",
4063 },
4064 .pwrsts = PWRSTS_OFF_ON,
4065 .flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE,
4066 };
4067
4068 static struct gdsc gcc_venus_gdsc = {
4069 .gdscr = 0x6d01c,
4070 .en_rest_wait_val = 0x2,
4071 .en_few_wait_val = 0x2,
4072 .clk_dis_wait_val = 0xf,
4073 .pd = {
4074 .name = "gcc_venus_gdsc",
4075 },
4076 .pwrsts = PWRSTS_OFF_ON,
4077 .flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE,
4078 };
4079
4080 static struct gdsc gcc_vcodec0_gdsc = {
4081 .gdscr = 0x6d038,
4082 .en_rest_wait_val = 0x2,
4083 .en_few_wait_val = 0x2,
4084 .clk_dis_wait_val = 0xf,
4085 .pd = {
4086 .name = "gcc_vcodec0_gdsc",
4087 },
4088 .pwrsts = PWRSTS_OFF_ON,
4089 .parent = &gcc_venus_gdsc.pd,
4090 .flags = HW_CTRL_TRIGGER | POLL_CFG_GDSCR | RETAIN_FF_ENABLE,
4091 };
4092
4093 static struct clk_regmap *gcc_shikra_clocks[] = {
4094 [GCC_AHB2PHY_CSI_CLK] = &gcc_ahb2phy_csi_clk.clkr,
4095 [GCC_AHB2PHY_USB_CLK] = &gcc_ahb2phy_usb_clk.clkr,
4096 [GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr,
4097 [GCC_CAM_THROTTLE_NRT_CLK] = &gcc_cam_throttle_nrt_clk.clkr,
4098 [GCC_CAM_THROTTLE_RT_CLK] = &gcc_cam_throttle_rt_clk.clkr,
4099 [GCC_CAMSS_AXI_CLK] = &gcc_camss_axi_clk.clkr,
4100 [GCC_CAMSS_AXI_CLK_SRC] = &gcc_camss_axi_clk_src.clkr,
4101 [GCC_CAMSS_CAMNOC_ATB_CLK] = &gcc_camss_camnoc_atb_clk.clkr,
4102 [GCC_CAMSS_CAMNOC_DRAGONLINK_ATB_CLK] = &gcc_camss_camnoc_dragonlink_atb_clk.clkr,
4103 [GCC_CAMSS_CAMNOC_NTS_XO_CLK] = &gcc_camss_camnoc_nts_xo_clk.clkr,
4104 [GCC_CAMSS_CCI_0_CLK] = &gcc_camss_cci_0_clk.clkr,
4105 [GCC_CAMSS_CCI_CLK_SRC] = &gcc_camss_cci_clk_src.clkr,
4106 [GCC_CAMSS_CPHY_0_CLK] = &gcc_camss_cphy_0_clk.clkr,
4107 [GCC_CAMSS_CPHY_1_CLK] = &gcc_camss_cphy_1_clk.clkr,
4108 [GCC_CAMSS_CSI0PHYTIMER_CLK] = &gcc_camss_csi0phytimer_clk.clkr,
4109 [GCC_CAMSS_CSI0PHYTIMER_CLK_SRC] = &gcc_camss_csi0phytimer_clk_src.clkr,
4110 [GCC_CAMSS_CSI1PHYTIMER_CLK] = &gcc_camss_csi1phytimer_clk.clkr,
4111 [GCC_CAMSS_CSI1PHYTIMER_CLK_SRC] = &gcc_camss_csi1phytimer_clk_src.clkr,
4112 [GCC_CAMSS_MCLK0_CLK] = &gcc_camss_mclk0_clk.clkr,
4113 [GCC_CAMSS_MCLK0_CLK_SRC] = &gcc_camss_mclk0_clk_src.clkr,
4114 [GCC_CAMSS_MCLK1_CLK] = &gcc_camss_mclk1_clk.clkr,
4115 [GCC_CAMSS_MCLK1_CLK_SRC] = &gcc_camss_mclk1_clk_src.clkr,
4116 [GCC_CAMSS_MCLK2_CLK] = &gcc_camss_mclk2_clk.clkr,
4117 [GCC_CAMSS_MCLK2_CLK_SRC] = &gcc_camss_mclk2_clk_src.clkr,
4118 [GCC_CAMSS_MCLK3_CLK] = &gcc_camss_mclk3_clk.clkr,
4119 [GCC_CAMSS_MCLK3_CLK_SRC] = &gcc_camss_mclk3_clk_src.clkr,
4120 [GCC_CAMSS_NRT_AXI_CLK] = &gcc_camss_nrt_axi_clk.clkr,
4121 [GCC_CAMSS_OPE_AHB_CLK] = &gcc_camss_ope_ahb_clk.clkr,
4122 [GCC_CAMSS_OPE_AHB_CLK_SRC] = &gcc_camss_ope_ahb_clk_src.clkr,
4123 [GCC_CAMSS_OPE_CLK] = &gcc_camss_ope_clk.clkr,
4124 [GCC_CAMSS_OPE_CLK_SRC] = &gcc_camss_ope_clk_src.clkr,
4125 [GCC_CAMSS_RT_AXI_CLK] = &gcc_camss_rt_axi_clk.clkr,
4126 [GCC_CAMSS_TFE_0_CLK] = &gcc_camss_tfe_0_clk.clkr,
4127 [GCC_CAMSS_TFE_0_CLK_SRC] = &gcc_camss_tfe_0_clk_src.clkr,
4128 [GCC_CAMSS_TFE_0_CPHY_RX_CLK] = &gcc_camss_tfe_0_cphy_rx_clk.clkr,
4129 [GCC_CAMSS_TFE_0_CSID_CLK] = &gcc_camss_tfe_0_csid_clk.clkr,
4130 [GCC_CAMSS_TFE_0_CSID_CLK_SRC] = &gcc_camss_tfe_0_csid_clk_src.clkr,
4131 [GCC_CAMSS_TFE_1_CLK] = &gcc_camss_tfe_1_clk.clkr,
4132 [GCC_CAMSS_TFE_1_CLK_SRC] = &gcc_camss_tfe_1_clk_src.clkr,
4133 [GCC_CAMSS_TFE_1_CPHY_RX_CLK] = &gcc_camss_tfe_1_cphy_rx_clk.clkr,
4134 [GCC_CAMSS_TFE_1_CSID_CLK] = &gcc_camss_tfe_1_csid_clk.clkr,
4135 [GCC_CAMSS_TFE_1_CSID_CLK_SRC] = &gcc_camss_tfe_1_csid_clk_src.clkr,
4136 [GCC_CAMSS_TFE_CPHY_RX_CLK_SRC] = &gcc_camss_tfe_cphy_rx_clk_src.clkr,
4137 [GCC_CAMSS_TOP_AHB_CLK] = &gcc_camss_top_ahb_clk.clkr,
4138 [GCC_CAMSS_TOP_AHB_CLK_SRC] = &gcc_camss_top_ahb_clk_src.clkr,
4139 [GCC_CFG_NOC_USB2_PRIM_AXI_CLK] = &gcc_cfg_noc_usb2_prim_axi_clk.clkr,
4140 [GCC_CFG_NOC_USB3_PRIM_AXI_CLK] = &gcc_cfg_noc_usb3_prim_axi_clk.clkr,
4141 [GCC_DDRSS_GPU_AXI_CLK] = &gcc_ddrss_gpu_axi_clk.clkr,
4142 [GCC_DDRSS_MEMNOC_PCIE_SF_CLK] = &gcc_ddrss_memnoc_pcie_sf_clk.clkr,
4143 [GCC_DISP_GPLL0_CLK_SRC] = &gcc_disp_gpll0_clk_src.clkr,
4144 [GCC_DISP_GPLL0_DIV_CLK_SRC] = &gcc_disp_gpll0_div_clk_src.clkr,
4145 [GCC_DISP_HF_AXI_CLK] = &gcc_disp_hf_axi_clk.clkr,
4146 [GCC_DISP_THROTTLE_CORE_CLK] = &gcc_disp_throttle_core_clk.clkr,
4147 [GCC_EMAC0_AHB_CLK] = &gcc_emac0_ahb_clk.clkr,
4148 [GCC_EMAC0_AXI_CLK] = &gcc_emac0_axi_clk.clkr,
4149 [GCC_EMAC0_AXI_CLK_SRC] = &gcc_emac0_axi_clk_src.clkr,
4150 [GCC_EMAC0_AXI_SYS_NOC_CLK] = &gcc_emac0_axi_sys_noc_clk.clkr,
4151 [GCC_EMAC0_CC_SGMIIPHY_RX_CLK] = &gcc_emac0_cc_sgmiiphy_rx_clk.clkr,
4152 [GCC_EMAC0_CC_SGMIIPHY_RX_CLK_SRC] = &gcc_emac0_cc_sgmiiphy_rx_clk_src.clkr,
4153 [GCC_EMAC0_CC_SGMIIPHY_TX_CLK] = &gcc_emac0_cc_sgmiiphy_tx_clk.clkr,
4154 [GCC_EMAC0_CC_SGMIIPHY_TX_CLK_SRC] = &gcc_emac0_cc_sgmiiphy_tx_clk_src.clkr,
4155 [GCC_EMAC0_PHY_AUX_CLK] = &gcc_emac0_phy_aux_clk.clkr,
4156 [GCC_EMAC0_PHY_AUX_CLK_SRC] = &gcc_emac0_phy_aux_clk_src.clkr,
4157 [GCC_EMAC0_PTP_CLK] = &gcc_emac0_ptp_clk.clkr,
4158 [GCC_EMAC0_PTP_CLK_SRC] = &gcc_emac0_ptp_clk_src.clkr,
4159 [GCC_EMAC0_RGMII_CLK] = &gcc_emac0_rgmii_clk.clkr,
4160 [GCC_EMAC0_RGMII_CLK_SRC] = &gcc_emac0_rgmii_clk_src.clkr,
4161 [GCC_EMAC1_AHB_CLK] = &gcc_emac1_ahb_clk.clkr,
4162 [GCC_EMAC1_AXI_CLK] = &gcc_emac1_axi_clk.clkr,
4163 [GCC_EMAC1_AXI_CLK_SRC] = &gcc_emac1_axi_clk_src.clkr,
4164 [GCC_EMAC1_AXI_SYS_NOC_CLK] = &gcc_emac1_axi_sys_noc_clk.clkr,
4165 [GCC_EMAC1_CC_SGMIIPHY_RX_CLK] = &gcc_emac1_cc_sgmiiphy_rx_clk.clkr,
4166 [GCC_EMAC1_CC_SGMIIPHY_RX_CLK_SRC] = &gcc_emac1_cc_sgmiiphy_rx_clk_src.clkr,
4167 [GCC_EMAC1_CC_SGMIIPHY_TX_CLK] = &gcc_emac1_cc_sgmiiphy_tx_clk.clkr,
4168 [GCC_EMAC1_CC_SGMIIPHY_TX_CLK_SRC] = &gcc_emac1_cc_sgmiiphy_tx_clk_src.clkr,
4169 [GCC_EMAC1_PHY_AUX_CLK] = &gcc_emac1_phy_aux_clk.clkr,
4170 [GCC_EMAC1_PHY_AUX_CLK_SRC] = &gcc_emac1_phy_aux_clk_src.clkr,
4171 [GCC_EMAC1_PTP_CLK] = &gcc_emac1_ptp_clk.clkr,
4172 [GCC_EMAC1_PTP_CLK_SRC] = &gcc_emac1_ptp_clk_src.clkr,
4173 [GCC_EMAC1_RGMII_CLK] = &gcc_emac1_rgmii_clk.clkr,
4174 [GCC_EMAC1_RGMII_CLK_SRC] = &gcc_emac1_rgmii_clk_src.clkr,
4175 [GCC_GP1_CLK] = &gcc_gp1_clk.clkr,
4176 [GCC_GP1_CLK_SRC] = &gcc_gp1_clk_src.clkr,
4177 [GCC_GP2_CLK] = &gcc_gp2_clk.clkr,
4178 [GCC_GP2_CLK_SRC] = &gcc_gp2_clk_src.clkr,
4179 [GCC_GP3_CLK] = &gcc_gp3_clk.clkr,
4180 [GCC_GP3_CLK_SRC] = &gcc_gp3_clk_src.clkr,
4181 [GCC_GPU_GPLL0_CLK_SRC] = &gcc_gpu_gpll0_clk_src.clkr,
4182 [GCC_GPU_GPLL0_DIV_CLK_SRC] = &gcc_gpu_gpll0_div_clk_src.clkr,
4183 [GCC_GPU_MEMNOC_GFX_CLK] = &gcc_gpu_memnoc_gfx_clk.clkr,
4184 [GCC_GPU_SMMU_VOTE_CLK] = &gcc_gpu_smmu_vote_clk.clkr,
4185 [GCC_GPU_SNOC_DVM_GFX_CLK] = &gcc_gpu_snoc_dvm_gfx_clk.clkr,
4186 [GCC_GPU_THROTTLE_CORE_CLK] = &gcc_gpu_throttle_core_clk.clkr,
4187 [GCC_MMU_TCU_VOTE_CLK] = &gcc_mmu_tcu_vote_clk.clkr,
4188 [GCC_PCIE_AUX_CLK] = &gcc_pcie_aux_clk.clkr,
4189 [GCC_PCIE_AUX_CLK_SRC] = &gcc_pcie_aux_clk_src.clkr,
4190 [GCC_PCIE_AUX_PHY_CLK_SRC] = &gcc_pcie_aux_phy_clk_src.clkr,
4191 [GCC_PCIE_CFG_AHB_CLK] = &gcc_pcie_cfg_ahb_clk.clkr,
4192 [GCC_PCIE_CLKREF_EN] = &gcc_pcie_clkref_en.clkr,
4193 [GCC_PCIE_MSTR_AXI_CLK] = &gcc_pcie_mstr_axi_clk.clkr,
4194 [GCC_PCIE_PIPE_CLK] = &gcc_pcie_pipe_clk.clkr,
4195 [GCC_PCIE_PIPE_CLK_SRC] = &gcc_pcie_pipe_clk_src.clkr,
4196 [GCC_PCIE_RCHNG_PHY_CLK] = &gcc_pcie_rchng_phy_clk.clkr,
4197 [GCC_PCIE_RCHNG_PHY_CLK_SRC] = &gcc_pcie_rchng_phy_clk_src.clkr,
4198 [GCC_PCIE_SLEEP_CLK] = &gcc_pcie_sleep_clk.clkr,
4199 [GCC_PCIE_SLV_AXI_CLK] = &gcc_pcie_slv_axi_clk.clkr,
4200 [GCC_PCIE_SLV_Q2A_AXI_CLK] = &gcc_pcie_slv_q2a_axi_clk.clkr,
4201 [GCC_PCIE_TBU_CLK] = &gcc_pcie_tbu_clk.clkr,
4202 [GCC_PCIE_THROTTLE_CORE_CLK] = &gcc_pcie_throttle_core_clk.clkr,
4203 [GCC_PCIE_THROTTLE_XO_CLK] = &gcc_pcie_throttle_xo_clk.clkr,
4204 [GCC_PCIE_TILE_AXI_SYS_NOC_CLK] = &gcc_pcie_tile_axi_sys_noc_clk.clkr,
4205 [GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr,
4206 [GCC_PDM2_CLK_SRC] = &gcc_pdm2_clk_src.clkr,
4207 [GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr,
4208 [GCC_PDM_XO4_CLK] = &gcc_pdm_xo4_clk.clkr,
4209 [GCC_PWM0_XO512_CLK] = &gcc_pwm0_xo512_clk.clkr,
4210 [GCC_QMIP_CAMERA_NRT_AHB_CLK] = &gcc_qmip_camera_nrt_ahb_clk.clkr,
4211 [GCC_QMIP_CAMERA_RT_AHB_CLK] = &gcc_qmip_camera_rt_ahb_clk.clkr,
4212 [GCC_QMIP_DISP_AHB_CLK] = &gcc_qmip_disp_ahb_clk.clkr,
4213 [GCC_QMIP_GPU_CFG_AHB_CLK] = &gcc_qmip_gpu_cfg_ahb_clk.clkr,
4214 [GCC_QMIP_PCIE_CFG_AHB_CLK] = &gcc_qmip_pcie_cfg_ahb_clk.clkr,
4215 [GCC_QMIP_VIDEO_VCODEC_AHB_CLK] = &gcc_qmip_video_vcodec_ahb_clk.clkr,
4216 [GCC_QUPV3_WRAP0_CORE_2X_CLK] = &gcc_qupv3_wrap0_core_2x_clk.clkr,
4217 [GCC_QUPV3_WRAP0_CORE_CLK] = &gcc_qupv3_wrap0_core_clk.clkr,
4218 [GCC_QUPV3_WRAP0_S0_CLK] = &gcc_qupv3_wrap0_s0_clk.clkr,
4219 [GCC_QUPV3_WRAP0_S0_CLK_SRC] = &gcc_qupv3_wrap0_s0_clk_src.clkr,
4220 [GCC_QUPV3_WRAP0_S1_CLK] = &gcc_qupv3_wrap0_s1_clk.clkr,
4221 [GCC_QUPV3_WRAP0_S1_CLK_SRC] = &gcc_qupv3_wrap0_s1_clk_src.clkr,
4222 [GCC_QUPV3_WRAP0_S2_CLK] = &gcc_qupv3_wrap0_s2_clk.clkr,
4223 [GCC_QUPV3_WRAP0_S2_CLK_SRC] = &gcc_qupv3_wrap0_s2_clk_src.clkr,
4224 [GCC_QUPV3_WRAP0_S3_CLK] = &gcc_qupv3_wrap0_s3_clk.clkr,
4225 [GCC_QUPV3_WRAP0_S3_CLK_SRC] = &gcc_qupv3_wrap0_s3_clk_src.clkr,
4226 [GCC_QUPV3_WRAP0_S4_CLK] = &gcc_qupv3_wrap0_s4_clk.clkr,
4227 [GCC_QUPV3_WRAP0_S4_CLK_SRC] = &gcc_qupv3_wrap0_s4_clk_src.clkr,
4228 [GCC_QUPV3_WRAP0_S5_CLK] = &gcc_qupv3_wrap0_s5_clk.clkr,
4229 [GCC_QUPV3_WRAP0_S5_CLK_SRC] = &gcc_qupv3_wrap0_s5_clk_src.clkr,
4230 [GCC_QUPV3_WRAP0_S6_CLK] = &gcc_qupv3_wrap0_s6_clk.clkr,
4231 [GCC_QUPV3_WRAP0_S6_CLK_SRC] = &gcc_qupv3_wrap0_s6_clk_src.clkr,
4232 [GCC_QUPV3_WRAP0_S7_CLK] = &gcc_qupv3_wrap0_s7_clk.clkr,
4233 [GCC_QUPV3_WRAP0_S7_CLK_SRC] = &gcc_qupv3_wrap0_s7_clk_src.clkr,
4234 [GCC_QUPV3_WRAP0_S8_CLK] = &gcc_qupv3_wrap0_s8_clk.clkr,
4235 [GCC_QUPV3_WRAP0_S8_CLK_SRC] = &gcc_qupv3_wrap0_s8_clk_src.clkr,
4236 [GCC_QUPV3_WRAP0_S9_CLK] = &gcc_qupv3_wrap0_s9_clk.clkr,
4237 [GCC_QUPV3_WRAP0_S9_CLK_SRC] = &gcc_qupv3_wrap0_s9_clk_src.clkr,
4238 [GCC_QUPV3_WRAP_0_M_AHB_CLK] = &gcc_qupv3_wrap_0_m_ahb_clk.clkr,
4239 [GCC_QUPV3_WRAP_0_S_AHB_CLK] = &gcc_qupv3_wrap_0_s_ahb_clk.clkr,
4240 [GCC_SDCC1_AHB_CLK] = &gcc_sdcc1_ahb_clk.clkr,
4241 [GCC_SDCC1_APPS_CLK] = &gcc_sdcc1_apps_clk.clkr,
4242 [GCC_SDCC1_APPS_CLK_SRC] = &gcc_sdcc1_apps_clk_src.clkr,
4243 [GCC_SDCC1_ICE_CORE_CLK] = &gcc_sdcc1_ice_core_clk.clkr,
4244 [GCC_SDCC1_ICE_CORE_CLK_SRC] = &gcc_sdcc1_ice_core_clk_src.clkr,
4245 [GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr,
4246 [GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr,
4247 [GCC_SDCC2_APPS_CLK_SRC] = &gcc_sdcc2_apps_clk_src.clkr,
4248 [GCC_SYS_NOC_USB2_PRIM_AXI_CLK] = &gcc_sys_noc_usb2_prim_axi_clk.clkr,
4249 [GCC_SYS_NOC_USB3_PRIM_AXI_CLK] = &gcc_sys_noc_usb3_prim_axi_clk.clkr,
4250 [GCC_TSCSS_AHB_CLK] = &gcc_tscss_ahb_clk.clkr,
4251 [GCC_TSCSS_CLK_SRC] = &gcc_tscss_clk_src.clkr,
4252 [GCC_TSCSS_CNTR_CLK] = &gcc_tscss_cntr_clk.clkr,
4253 [GCC_TSCSS_ETU_CLK] = &gcc_tscss_etu_clk.clkr,
4254 [GCC_UFS_CLKREF_EN] = &gcc_ufs_clkref_en.clkr,
4255 [GCC_USB20_MASTER_CLK] = &gcc_usb20_master_clk.clkr,
4256 [GCC_USB20_MASTER_CLK_SRC] = &gcc_usb20_master_clk_src.clkr,
4257 [GCC_USB20_MOCK_UTMI_CLK] = &gcc_usb20_mock_utmi_clk.clkr,
4258 [GCC_USB20_MOCK_UTMI_CLK_SRC] = &gcc_usb20_mock_utmi_clk_src.clkr,
4259 [GCC_USB20_MOCK_UTMI_POSTDIV_CLK_SRC] = &gcc_usb20_mock_utmi_postdiv_clk_src.clkr,
4260 [GCC_USB20_SLEEP_CLK] = &gcc_usb20_sleep_clk.clkr,
4261 [GCC_USB30_PRIM_MASTER_CLK] = &gcc_usb30_prim_master_clk.clkr,
4262 [GCC_USB30_PRIM_MASTER_CLK_SRC] = &gcc_usb30_prim_master_clk_src.clkr,
4263 [GCC_USB30_PRIM_MOCK_UTMI_CLK] = &gcc_usb30_prim_mock_utmi_clk.clkr,
4264 [GCC_USB30_PRIM_MOCK_UTMI_CLK_SRC] = &gcc_usb30_prim_mock_utmi_clk_src.clkr,
4265 [GCC_USB30_PRIM_MOCK_UTMI_POSTDIV_CLK_SRC] = &gcc_usb30_prim_mock_utmi_postdiv_clk_src.clkr,
4266 [GCC_USB30_PRIM_SLEEP_CLK] = &gcc_usb30_prim_sleep_clk.clkr,
4267 [GCC_USB3_PRIM_CLKREF_EN] = &gcc_usb3_prim_clkref_en.clkr,
4268 [GCC_USB3_PRIM_PHY_AUX_CLK_SRC] = &gcc_usb3_prim_phy_aux_clk_src.clkr,
4269 [GCC_USB3_PRIM_PHY_COM_AUX_CLK] = &gcc_usb3_prim_phy_com_aux_clk.clkr,
4270 [GCC_USB3_PRIM_PHY_PIPE_CLK] = &gcc_usb3_prim_phy_pipe_clk.clkr,
4271 [GCC_USB3_PRIM_PHY_PIPE_CLK_SRC] = &gcc_usb3_prim_phy_pipe_clk_src.clkr,
4272 [GCC_VCODEC0_AXI_CLK] = &gcc_vcodec0_axi_clk.clkr,
4273 [GCC_VENUS_AHB_CLK] = &gcc_venus_ahb_clk.clkr,
4274 [GCC_VENUS_CTL_AXI_CLK] = &gcc_venus_ctl_axi_clk.clkr,
4275 [GCC_VIDEO_AXI0_CLK] = &gcc_video_axi0_clk.clkr,
4276 [GCC_VIDEO_THROTTLE_CORE_CLK] = &gcc_video_throttle_core_clk.clkr,
4277 [GCC_VIDEO_VCODEC0_SYS_CLK] = &gcc_video_vcodec0_sys_clk.clkr,
4278 [GCC_VIDEO_VENUS_CLK_SRC] = &gcc_video_venus_clk_src.clkr,
4279 [GCC_VIDEO_VENUS_CTL_CLK] = &gcc_video_venus_ctl_clk.clkr,
4280 [GPLL0] = &gpll0.clkr,
4281 [GPLL0_OUT_AUX2] = &gpll0_out_aux2.clkr,
4282 [GPLL10] = &gpll10.clkr,
4283 [GPLL11] = &gpll11.clkr,
4284 [GPLL12] = &gpll12.clkr,
4285 [GPLL12_OUT_AUX2] = &gpll12_out_aux2.clkr,
4286 [GPLL3] = &gpll3.clkr,
4287 [GPLL3_OUT_MAIN] = &gpll3_out_main.clkr,
4288 [GPLL4] = &gpll4.clkr,
4289 [GPLL5] = &gpll5.clkr,
4290 [GPLL6] = &gpll6.clkr,
4291 [GPLL6_OUT_MAIN] = &gpll6_out_main.clkr,
4292 [GPLL7] = &gpll7.clkr,
4293 [GPLL8] = &gpll8.clkr,
4294 [GPLL8_OUT_MAIN] = &gpll8_out_main.clkr,
4295 [GPLL9] = &gpll9.clkr,
4296 [GPLL9_OUT_MAIN] = &gpll9_out_main.clkr,
4297 };
4298
4299 static struct gdsc *gcc_shikra_gdscs[] = {
4300 [GCC_CAMSS_TOP_GDSC] = &gcc_camss_top_gdsc,
4301 [GCC_EMAC0_GDSC] = &gcc_emac0_gdsc,
4302 [GCC_EMAC1_GDSC] = &gcc_emac1_gdsc,
4303 [GCC_PCIE_GDSC] = &gcc_pcie_gdsc,
4304 [GCC_USB20_GDSC] = &gcc_usb20_gdsc,
4305 [GCC_USB30_PRIM_GDSC] = &gcc_usb30_prim_gdsc,
4306 [GCC_VCODEC0_GDSC] = &gcc_vcodec0_gdsc,
4307 [GCC_VENUS_GDSC] = &gcc_venus_gdsc,
4308 };
4309
4310 static const struct qcom_reset_map gcc_shikra_resets[] = {
4311 [GCC_CAMSS_OPE_BCR] = { 0x55000 },
4312 [GCC_CAMSS_TFE_BCR] = { 0x52000 },
4313 [GCC_CAMSS_TOP_BCR] = { 0x58000 },
4314 [GCC_EMAC0_BCR] = { 0xad000 },
4315 [GCC_EMAC1_BCR] = { 0xae000 },
4316 [GCC_GPU_BCR] = { 0x36000 },
4317 [GCC_MMSS_BCR] = { 0x17000 },
4318 [GCC_PCIE_BCR] = { 0xaf000 },
4319 [GCC_PCIE_PHY_BCR] = { 0xb1000 },
4320 [GCC_PDM_BCR] = { 0x20000 },
4321 [GCC_QUPV3_WRAPPER_0_BCR] = { 0x1f000 },
4322 [GCC_QUSB2PHY_PRIM_BCR] = { 0x1c000 },
4323 [GCC_QUSB2PHY_SEC_BCR] = { 0x1c004 },
4324 [GCC_SDCC1_BCR] = { 0x38000 },
4325 [GCC_SDCC2_BCR] = { 0x1e000 },
4326 [GCC_TSCSS_BCR] = { 0xac000 },
4327 [GCC_USB20_BCR] = { 0xb0000 },
4328 [GCC_USB30_PRIM_BCR] = { 0x1a000 },
4329 [GCC_USB3PHY_PHY_PRIM_SP0_BCR] = { 0x1b008 },
4330 [GCC_USB3_DP_PHY_PRIM_BCR] = { 0x1b020 },
4331 [GCC_USB3_PHY_PRIM_SP0_BCR] = { 0x1b000 },
4332 [GCC_USB_PHY_CFG_AHB2PHY_BCR] = { 0x1d000 },
4333 [GCC_VCODEC0_BCR] = { 0x6d034 },
4334 [GCC_VENUS_BCR] = { 0x6d018 },
4335 [GCC_VIDEO_INTERFACE_BCR] = { 0x6e000 },
4336 };
4337
4338 static struct clk_alpha_pll *gcc_shikra_plls[] = {
4339 &gpll10,
4340 &gpll11,
4341 &gpll8,
4342 &gpll9,
4343 };
4344
4345 static const u32 gcc_shikra_critical_cbcrs[] = {
4346 0x17008, /* GCC_CAMERA_AHB_CLK */
4347 0x17028, /* GCC_CAMERA_XO_CLK */
4348 0x1700c, /* GCC_DISP_AHB_CLK */
4349 0x1702c, /* GCC_DISP_XO_CLK */
4350 0x36004, /* GCC_GPU_CFG_AHB_CLK */
4351 0x36100, /* GCC_GPU_IREF_CLK */
4352 0x3a00c, /* GCC_LPASS_CONFIG_CLK */
4353 0x3a008, /* GCC_LPASS_CORE_AXIM_CLK */
4354 0x79004, /* GCC_SYS_NOC_CPUSS_AHB_CLK */
4355 0x17004, /* GCC_VIDEO_AHB_CLK */
4356 0x17024, /* GCC_VIDEO_XO_CLK */
4357 };
4358
4359 static const struct clk_rcg_dfs_data gcc_shikra_dfs_clocks[] = {
4360 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s0_clk_src),
4361 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s1_clk_src),
4362 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s2_clk_src),
4363 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s3_clk_src),
4364 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s4_clk_src),
4365 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s5_clk_src),
4366 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s6_clk_src),
4367 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s7_clk_src),
4368 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s8_clk_src),
4369 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s9_clk_src),
4370 };
4371
4372 static const struct regmap_config gcc_shikra_regmap_config = {
4373 .reg_bits = 32,
4374 .reg_stride = 4,
4375 .val_bits = 32,
4376 .max_register = 0xc7000,
4377 .fast_io = true,
4378 };
4379
4380 static const struct qcom_cc_driver_data gcc_shikra_driver_data = {
4381 .alpha_plls = gcc_shikra_plls,
4382 .num_alpha_plls = ARRAY_SIZE(gcc_shikra_plls),
4383 .clk_cbcrs = gcc_shikra_critical_cbcrs,
4384 .num_clk_cbcrs = ARRAY_SIZE(gcc_shikra_critical_cbcrs),
4385 .dfs_rcgs = gcc_shikra_dfs_clocks,
4386 .num_dfs_rcgs = ARRAY_SIZE(gcc_shikra_dfs_clocks),
4387 };
4388
4389 static const struct qcom_cc_desc gcc_shikra_desc = {
4390 .config = &gcc_shikra_regmap_config,
4391 .clks = gcc_shikra_clocks,
4392 .num_clks = ARRAY_SIZE(gcc_shikra_clocks),
4393 .resets = gcc_shikra_resets,
4394 .num_resets = ARRAY_SIZE(gcc_shikra_resets),
4395 .gdscs = gcc_shikra_gdscs,
4396 .num_gdscs = ARRAY_SIZE(gcc_shikra_gdscs),
4397 .driver_data = &gcc_shikra_driver_data,
4398 };
4399
4400 static const struct of_device_id gcc_shikra_match_table[] = {
4401 { .compatible = "qcom,shikra-gcc" },
4402 { }
4403 };
4404 MODULE_DEVICE_TABLE(of, gcc_shikra_match_table);
4405
gcc_shikra_probe(struct platform_device * pdev)4406 static int gcc_shikra_probe(struct platform_device *pdev)
4407 {
4408 return qcom_cc_probe(pdev, &gcc_shikra_desc);
4409 }
4410
4411 static struct platform_driver gcc_shikra_driver = {
4412 .probe = gcc_shikra_probe,
4413 .driver = {
4414 .name = "gcc-shikra",
4415 .of_match_table = gcc_shikra_match_table,
4416 },
4417 };
4418
gcc_shikra_init(void)4419 static int __init gcc_shikra_init(void)
4420 {
4421 return platform_driver_register(&gcc_shikra_driver);
4422 }
4423 subsys_initcall(gcc_shikra_init);
4424
gcc_shikra_exit(void)4425 static void __exit gcc_shikra_exit(void)
4426 {
4427 platform_driver_unregister(&gcc_shikra_driver);
4428 }
4429 module_exit(gcc_shikra_exit);
4430
4431 MODULE_DESCRIPTION("QTI GCC Shikra Driver");
4432 MODULE_LICENSE("GPL");
4433