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

source code of linux/drivers/clk/qcom/gcc-sm6115.c