1 // SPDX-License-Identifier: GPL-2.0-only
3 * Copyright (c) 2018-2019, The Linux Foundation. All rights reserved.
4 * Copyright (c) 2023, Danila Tikhonov <danila@jiaxyga.com>
5 * Copyright (c) 2023, David Wronek <davidwronek@gmail.com>
8 #include <linux/clk-provider.h>
10 #include <linux/kernel.h>
11 #include <linux/module.h>
13 #include <linux/of_device.h>
14 #include <linux/regmap.h>
16 #include <dt-bindings/clock/qcom,sm7150-gcc.h>
18 #include "clk-alpha-pll.h"
19 #include "clk-branch.h"
21 #include "clk-regmap.h"
41 static struct clk_alpha_pll gpll0 = {
43 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
45 .enable_reg = 0x52000,
46 .enable_mask = BIT(0),
47 .hw.init = &(struct clk_init_data){
49 .parent_data = &(const struct clk_parent_data){
53 .ops = &clk_alpha_pll_fixed_fabia_ops,
58 static const struct clk_div_table post_div_table_fabia_even[] = {
66 static struct clk_alpha_pll_postdiv gpll0_out_even = {
69 .post_div_table = post_div_table_fabia_even,
70 .num_post_div = ARRAY_SIZE(post_div_table_fabia_even),
72 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
73 .clkr.hw.init = &(struct clk_init_data){
74 .name = "gpll0_out_even",
75 .parent_hws = (const struct clk_hw*[]){
79 .ops = &clk_alpha_pll_postdiv_fabia_ops,
83 static struct clk_fixed_factor gcc_pll0_main_div_cdiv = {
86 .hw.init = &(struct clk_init_data){
87 .name = "gcc_pll0_main_div_cdiv",
88 .parent_hws = (const struct clk_hw*[]){
92 .ops = &clk_fixed_factor_ops,
96 static struct clk_alpha_pll gpll6 = {
98 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
100 .enable_reg = 0x52000,
101 .enable_mask = BIT(6),
102 .hw.init = &(struct clk_init_data){
104 .parent_data = &(const struct clk_parent_data){
108 .ops = &clk_alpha_pll_fixed_fabia_ops,
113 static struct clk_alpha_pll gpll7 = {
115 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_FABIA],
117 .enable_reg = 0x52000,
118 .enable_mask = BIT(7),
119 .hw.init = &(struct clk_init_data){
121 .parent_data = &(const struct clk_parent_data){
125 .ops = &clk_alpha_pll_fixed_fabia_ops,
130 static const struct parent_map gcc_parent_map_0[] = {
132 { P_GPLL0_OUT_MAIN, 1 },
133 { P_GPLL0_OUT_EVEN, 6 },
136 static const struct clk_parent_data gcc_parent_data_0[] = {
137 { .index = DT_BI_TCXO },
138 { .hw = &gpll0.clkr.hw },
139 { .hw = &gpll0_out_even.clkr.hw },
141 static const struct clk_parent_data gcc_parent_data_0_ao[] = {
142 { .index = DT_BI_TCXO_AO },
143 { .hw = &gpll0.clkr.hw },
144 { .hw = &gpll0_out_even.clkr.hw },
147 static const struct parent_map gcc_parent_map_1[] = {
149 { P_GPLL0_OUT_MAIN, 1 },
151 { P_GPLL0_OUT_EVEN, 6 },
154 static const struct clk_parent_data gcc_parent_data_1[] = {
155 { .index = DT_BI_TCXO },
156 { .hw = &gpll0.clkr.hw },
157 { .index = DT_SLEEP_CLK },
158 { .hw = &gpll0_out_even.clkr.hw },
161 static const struct parent_map gcc_parent_map_2[] = {
163 { P_GPLL0_OUT_MAIN, 1 },
166 static const struct clk_parent_data gcc_parent_data_2[] = {
167 { .index = DT_BI_TCXO },
168 { .hw = &gpll0.clkr.hw },
171 static const struct clk_parent_data gcc_parent_data_2_ao[] = {
172 { .index = DT_BI_TCXO_AO },
173 { .hw = &gpll0.clkr.hw },
176 static const struct parent_map gcc_parent_map_3[] = {
181 static const struct clk_parent_data gcc_parent_data_3[] = {
182 { .index = DT_BI_TCXO },
183 { .index = DT_SLEEP_CLK },
186 static const struct parent_map gcc_parent_map_4[] = {
190 static const struct clk_parent_data gcc_parent_data_4[] = {
191 { .index = DT_BI_TCXO },
194 static const struct parent_map gcc_parent_map_5[] = {
196 { P_GPLL0_OUT_MAIN, 1 },
197 { P_GPLL6_OUT_MAIN, 2 },
198 { P_GPLL0_OUT_EVEN, 6 },
201 static const struct clk_parent_data gcc_parent_data_5[] = {
202 { .index = DT_BI_TCXO },
203 { .hw = &gpll0.clkr.hw },
204 { .hw = &gpll6.clkr.hw },
205 { .hw = &gpll0_out_even.clkr.hw },
208 static const struct parent_map gcc_parent_map_6[] = {
210 { P_GPLL0_OUT_MAIN, 1 },
211 { P_GPLL7_OUT_MAIN, 3 },
212 { P_GPLL0_OUT_EVEN, 6 },
215 static const struct clk_parent_data gcc_parent_data_6[] = {
216 { .index = DT_BI_TCXO },
217 { .hw = &gpll0.clkr.hw },
218 { .hw = &gpll7.clkr.hw },
219 { .hw = &gpll0_out_even.clkr.hw },
222 static const struct parent_map gcc_parent_map_7[] = {
224 { P_GPLL0_OUT_MAIN, 1 },
225 { P_GPLL0_OUT_EVEN, 6 },
228 static const struct clk_parent_data gcc_parent_data_7[] = {
229 { .index = DT_BI_TCXO },
230 { .hw = &gpll0.clkr.hw },
231 { .hw = &gpll0_out_even.clkr.hw },
234 static const struct parent_map gcc_parent_map_8[] = {
236 { P_GPLL0_OUT_MAIN, 1 },
239 static const struct clk_parent_data gcc_parent_data_8[] = {
240 { .index = DT_BI_TCXO },
241 { .hw = &gpll0.clkr.hw },
244 static const struct freq_tbl ftbl_gcc_cpuss_ahb_clk_src[] = {
245 F(19200000, P_BI_TCXO, 1, 0, 0),
249 static struct clk_rcg2 gcc_cpuss_ahb_clk_src = {
253 .parent_map = gcc_parent_map_0,
254 .freq_tbl = ftbl_gcc_cpuss_ahb_clk_src,
255 .clkr.hw.init = &(struct clk_init_data){
256 .name = "gcc_cpuss_ahb_clk_src",
257 .parent_data = gcc_parent_data_0_ao,
258 .num_parents = ARRAY_SIZE(gcc_parent_data_0_ao),
259 .flags = CLK_SET_RATE_PARENT,
260 .ops = &clk_rcg2_ops,
264 static const struct freq_tbl ftbl_gcc_cpuss_rbcpr_clk_src[] = {
265 F(19200000, P_BI_TCXO, 1, 0, 0),
269 static struct clk_rcg2 gcc_cpuss_rbcpr_clk_src = {
273 .parent_map = gcc_parent_map_2,
274 .freq_tbl = ftbl_gcc_cpuss_rbcpr_clk_src,
275 .clkr.hw.init = &(struct clk_init_data){
276 .name = "gcc_cpuss_rbcpr_clk_src",
277 .parent_data = gcc_parent_data_2_ao,
278 .num_parents = ARRAY_SIZE(gcc_parent_data_2_ao),
279 .ops = &clk_rcg2_ops,
283 static const struct freq_tbl ftbl_gcc_gp1_clk_src[] = {
284 F(19200000, P_BI_TCXO, 1, 0, 0),
285 F(25000000, P_GPLL0_OUT_EVEN, 12, 0, 0),
286 F(50000000, P_GPLL0_OUT_EVEN, 6, 0, 0),
287 F(100000000, P_GPLL0_OUT_MAIN, 6, 0, 0),
288 F(200000000, P_GPLL0_OUT_MAIN, 3, 0, 0),
292 static struct clk_rcg2 gcc_gp1_clk_src = {
296 .parent_map = gcc_parent_map_1,
297 .freq_tbl = ftbl_gcc_gp1_clk_src,
298 .clkr.hw.init = &(struct clk_init_data){
299 .name = "gcc_gp1_clk_src",
300 .parent_data = gcc_parent_data_1,
301 .num_parents = ARRAY_SIZE(gcc_parent_data_1),
302 .ops = &clk_rcg2_ops,
306 static struct clk_rcg2 gcc_gp2_clk_src = {
310 .parent_map = gcc_parent_map_1,
311 .freq_tbl = ftbl_gcc_gp1_clk_src,
312 .clkr.hw.init = &(struct clk_init_data){
313 .name = "gcc_gp2_clk_src",
314 .parent_data = gcc_parent_data_1,
315 .num_parents = ARRAY_SIZE(gcc_parent_data_1),
316 .ops = &clk_rcg2_ops,
320 static struct clk_rcg2 gcc_gp3_clk_src = {
324 .parent_map = gcc_parent_map_1,
325 .freq_tbl = ftbl_gcc_gp1_clk_src,
326 .clkr.hw.init = &(struct clk_init_data){
327 .name = "gcc_gp3_clk_src",
328 .parent_data = gcc_parent_data_1,
329 .num_parents = ARRAY_SIZE(gcc_parent_data_1),
330 .ops = &clk_rcg2_ops,
334 static const struct freq_tbl ftbl_gcc_pcie_0_aux_clk_src[] = {
335 F(9600000, P_BI_TCXO, 2, 0, 0),
336 F(19200000, P_BI_TCXO, 1, 0, 0),
340 static struct clk_rcg2 gcc_pcie_0_aux_clk_src = {
344 .parent_map = gcc_parent_map_3,
345 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
346 .clkr.hw.init = &(struct clk_init_data){
347 .name = "gcc_pcie_0_aux_clk_src",
348 .parent_data = gcc_parent_data_3,
349 .num_parents = ARRAY_SIZE(gcc_parent_data_3),
350 .ops = &clk_rcg2_ops,
354 static const struct freq_tbl ftbl_gcc_pcie_phy_refgen_clk_src[] = {
355 F(19200000, P_BI_TCXO, 1, 0, 0),
356 F(100000000, P_GPLL0_OUT_MAIN, 6, 0, 0),
360 static struct clk_rcg2 gcc_pcie_phy_refgen_clk_src = {
364 .parent_map = gcc_parent_map_0,
365 .freq_tbl = ftbl_gcc_pcie_phy_refgen_clk_src,
366 .clkr.hw.init = &(struct clk_init_data){
367 .name = "gcc_pcie_phy_refgen_clk_src",
368 .parent_data = gcc_parent_data_0,
369 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
370 .ops = &clk_rcg2_ops,
374 static const struct freq_tbl ftbl_gcc_pdm2_clk_src[] = {
375 F(19200000, P_BI_TCXO, 1, 0, 0),
376 F(60000000, P_GPLL0_OUT_MAIN, 10, 0, 0),
380 static struct clk_rcg2 gcc_pdm2_clk_src = {
384 .parent_map = gcc_parent_map_0,
385 .freq_tbl = ftbl_gcc_pdm2_clk_src,
386 .clkr.hw.init = &(struct clk_init_data){
387 .name = "gcc_pdm2_clk_src",
388 .parent_data = gcc_parent_data_0,
389 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
390 .ops = &clk_rcg2_ops,
394 static const struct freq_tbl ftbl_gcc_qupv3_wrap0_s0_clk_src[] = {
395 F(7372800, P_GPLL0_OUT_EVEN, 1, 384, 15625),
396 F(14745600, P_GPLL0_OUT_EVEN, 1, 768, 15625),
397 F(19200000, P_BI_TCXO, 1, 0, 0),
398 F(29491200, P_GPLL0_OUT_EVEN, 1, 1536, 15625),
399 F(32000000, P_GPLL0_OUT_EVEN, 1, 8, 75),
400 F(48000000, P_GPLL0_OUT_EVEN, 1, 4, 25),
401 F(64000000, P_GPLL0_OUT_EVEN, 1, 16, 75),
402 F(80000000, P_GPLL0_OUT_EVEN, 1, 4, 15),
403 F(96000000, P_GPLL0_OUT_EVEN, 1, 8, 25),
404 F(100000000, P_GPLL0_OUT_EVEN, 3, 0, 0),
405 F(102400000, P_GPLL0_OUT_EVEN, 1, 128, 375),
406 F(112000000, P_GPLL0_OUT_EVEN, 1, 28, 75),
407 F(117964800, P_GPLL0_OUT_EVEN, 1, 6144, 15625),
408 F(120000000, P_GPLL0_OUT_EVEN, 2.5, 0, 0),
409 F(128000000, P_GPLL0_OUT_MAIN, 1, 16, 75),
413 static struct clk_init_data gcc_qupv3_wrap0_s0_clk_src_init = {
414 .name = "gcc_qupv3_wrap0_s0_clk_src",
415 .parent_data = gcc_parent_data_0,
416 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
417 .ops = &clk_rcg2_ops,
420 static struct clk_rcg2 gcc_qupv3_wrap0_s0_clk_src = {
424 .parent_map = gcc_parent_map_0,
425 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
426 .clkr.hw.init = &gcc_qupv3_wrap0_s0_clk_src_init,
429 static struct clk_init_data gcc_qupv3_wrap0_s1_clk_src_init = {
430 .name = "gcc_qupv3_wrap0_s1_clk_src",
431 .parent_data = gcc_parent_data_0,
432 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
433 .ops = &clk_rcg2_ops,
436 static struct clk_rcg2 gcc_qupv3_wrap0_s1_clk_src = {
440 .parent_map = gcc_parent_map_0,
441 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
442 .clkr.hw.init = &gcc_qupv3_wrap0_s1_clk_src_init,
445 static struct clk_init_data gcc_qupv3_wrap0_s2_clk_src_init = {
446 .name = "gcc_qupv3_wrap0_s2_clk_src",
447 .parent_data = gcc_parent_data_0,
448 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
449 .ops = &clk_rcg2_ops,
452 static struct clk_rcg2 gcc_qupv3_wrap0_s2_clk_src = {
456 .parent_map = gcc_parent_map_0,
457 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
458 .clkr.hw.init = &gcc_qupv3_wrap0_s2_clk_src_init,
461 static struct clk_init_data gcc_qupv3_wrap0_s3_clk_src_init = {
462 .name = "gcc_qupv3_wrap0_s3_clk_src",
463 .parent_data = gcc_parent_data_0,
464 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
465 .ops = &clk_rcg2_ops,
468 static struct clk_rcg2 gcc_qupv3_wrap0_s3_clk_src = {
472 .parent_map = gcc_parent_map_0,
473 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
474 .clkr.hw.init = &gcc_qupv3_wrap0_s3_clk_src_init,
477 static struct clk_init_data gcc_qupv3_wrap0_s4_clk_src_init = {
478 .name = "gcc_qupv3_wrap0_s4_clk_src",
479 .parent_data = gcc_parent_data_0,
480 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
481 .ops = &clk_rcg2_ops,
484 static struct clk_rcg2 gcc_qupv3_wrap0_s4_clk_src = {
488 .parent_map = gcc_parent_map_0,
489 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
490 .clkr.hw.init = &gcc_qupv3_wrap0_s4_clk_src_init,
493 static struct clk_init_data gcc_qupv3_wrap0_s5_clk_src_init = {
494 .name = "gcc_qupv3_wrap0_s5_clk_src",
495 .parent_data = gcc_parent_data_0,
496 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
497 .ops = &clk_rcg2_ops,
500 static struct clk_rcg2 gcc_qupv3_wrap0_s5_clk_src = {
504 .parent_map = gcc_parent_map_0,
505 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
506 .clkr.hw.init = &gcc_qupv3_wrap0_s5_clk_src_init,
509 static struct clk_init_data gcc_qupv3_wrap0_s6_clk_src_init = {
510 .name = "gcc_qupv3_wrap0_s6_clk_src",
511 .parent_data = gcc_parent_data_0,
512 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
513 .flags = CLK_SET_RATE_PARENT,
514 .ops = &clk_rcg2_ops,
517 static struct clk_rcg2 gcc_qupv3_wrap0_s6_clk_src = {
521 .parent_map = gcc_parent_map_0,
522 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
523 .clkr.hw.init = &gcc_qupv3_wrap0_s6_clk_src_init,
526 static struct clk_init_data gcc_qupv3_wrap0_s7_clk_src_init = {
527 .name = "gcc_qupv3_wrap0_s7_clk_src",
528 .parent_data = gcc_parent_data_0,
529 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
530 .flags = CLK_SET_RATE_PARENT,
531 .ops = &clk_rcg2_ops,
534 static struct clk_rcg2 gcc_qupv3_wrap0_s7_clk_src = {
538 .parent_map = gcc_parent_map_0,
539 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
540 .clkr.hw.init = &gcc_qupv3_wrap0_s7_clk_src_init,
543 static struct clk_init_data gcc_qupv3_wrap1_s0_clk_src_init = {
544 .name = "gcc_qupv3_wrap1_s0_clk_src",
545 .parent_data = gcc_parent_data_0,
546 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
547 .ops = &clk_rcg2_ops,
550 static struct clk_rcg2 gcc_qupv3_wrap1_s0_clk_src = {
554 .parent_map = gcc_parent_map_0,
555 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
556 .clkr.hw.init = &gcc_qupv3_wrap1_s0_clk_src_init,
559 static struct clk_init_data gcc_qupv3_wrap1_s1_clk_src_init = {
560 .name = "gcc_qupv3_wrap1_s1_clk_src",
561 .parent_data = gcc_parent_data_0,
562 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
563 .ops = &clk_rcg2_ops,
566 static struct clk_rcg2 gcc_qupv3_wrap1_s1_clk_src = {
570 .parent_map = gcc_parent_map_0,
571 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
572 .clkr.hw.init = &gcc_qupv3_wrap1_s1_clk_src_init,
575 static struct clk_init_data gcc_qupv3_wrap1_s2_clk_src_init = {
576 .name = "gcc_qupv3_wrap1_s2_clk_src",
577 .parent_data = gcc_parent_data_0,
578 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
579 .ops = &clk_rcg2_ops,
582 static struct clk_rcg2 gcc_qupv3_wrap1_s2_clk_src = {
586 .parent_map = gcc_parent_map_0,
587 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
588 .clkr.hw.init = &gcc_qupv3_wrap1_s2_clk_src_init,
591 static struct clk_init_data gcc_qupv3_wrap1_s3_clk_src_init = {
592 .name = "gcc_qupv3_wrap1_s3_clk_src",
593 .parent_data = gcc_parent_data_0,
594 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
595 .ops = &clk_rcg2_ops,
598 static struct clk_rcg2 gcc_qupv3_wrap1_s3_clk_src = {
602 .parent_map = gcc_parent_map_0,
603 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
604 .clkr.hw.init = &gcc_qupv3_wrap1_s3_clk_src_init,
607 static struct clk_init_data gcc_qupv3_wrap1_s4_clk_src_init = {
608 .name = "gcc_qupv3_wrap1_s4_clk_src",
609 .parent_data = gcc_parent_data_0,
610 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
611 .ops = &clk_rcg2_ops,
614 static struct clk_rcg2 gcc_qupv3_wrap1_s4_clk_src = {
618 .parent_map = gcc_parent_map_0,
619 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
620 .clkr.hw.init = &gcc_qupv3_wrap1_s4_clk_src_init,
623 static struct clk_init_data gcc_qupv3_wrap1_s5_clk_src_init = {
624 .name = "gcc_qupv3_wrap1_s5_clk_src",
625 .parent_data = gcc_parent_data_0,
626 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
627 .ops = &clk_rcg2_ops,
630 static struct clk_rcg2 gcc_qupv3_wrap1_s5_clk_src = {
634 .parent_map = gcc_parent_map_0,
635 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
636 .clkr.hw.init = &gcc_qupv3_wrap1_s5_clk_src_init,
639 static struct clk_init_data gcc_qupv3_wrap1_s6_clk_src_init = {
640 .name = "gcc_qupv3_wrap1_s6_clk_src",
641 .parent_data = gcc_parent_data_0,
642 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
643 .ops = &clk_rcg2_ops,
646 static struct clk_rcg2 gcc_qupv3_wrap1_s6_clk_src = {
650 .parent_map = gcc_parent_map_0,
651 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
652 .clkr.hw.init = &gcc_qupv3_wrap1_s6_clk_src_init,
655 static struct clk_init_data gcc_qupv3_wrap1_s7_clk_src_init = {
656 .name = "gcc_qupv3_wrap1_s7_clk_src",
657 .parent_data = gcc_parent_data_0,
658 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
659 .ops = &clk_rcg2_ops,
662 static struct clk_rcg2 gcc_qupv3_wrap1_s7_clk_src = {
666 .parent_map = gcc_parent_map_0,
667 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
668 .clkr.hw.init = &gcc_qupv3_wrap1_s7_clk_src_init,
671 static const struct freq_tbl ftbl_gcc_sdcc1_apps_clk_src[] = {
672 F(144000, P_BI_TCXO, 16, 3, 25),
673 F(400000, P_BI_TCXO, 12, 1, 4),
674 F(19200000, P_BI_TCXO, 1, 0, 0),
675 F(20000000, P_GPLL0_OUT_EVEN, 5, 1, 3),
676 F(25000000, P_GPLL0_OUT_EVEN, 6, 1, 2),
677 F(50000000, P_GPLL0_OUT_EVEN, 6, 0, 0),
678 F(100000000, P_GPLL0_OUT_EVEN, 3, 0, 0),
679 F(192000000, P_GPLL6_OUT_MAIN, 2, 0, 0),
680 F(384000000, P_GPLL6_OUT_MAIN, 1, 0, 0),
684 static struct clk_rcg2 gcc_sdcc1_apps_clk_src = {
688 .parent_map = gcc_parent_map_5,
689 .freq_tbl = ftbl_gcc_sdcc1_apps_clk_src,
690 .clkr.hw.init = &(struct clk_init_data){
691 .name = "gcc_sdcc1_apps_clk_src",
692 .parent_data = gcc_parent_data_5,
693 .num_parents = ARRAY_SIZE(gcc_parent_data_5),
694 .ops = &clk_rcg2_floor_ops,
698 static const struct freq_tbl ftbl_gcc_sdcc1_ice_core_clk_src[] = {
699 F(75000000, P_GPLL0_OUT_EVEN, 4, 0, 0),
700 F(150000000, P_GPLL0_OUT_MAIN, 4, 0, 0),
701 F(200000000, P_GPLL0_OUT_MAIN, 3, 0, 0),
702 F(300000000, P_GPLL0_OUT_MAIN, 2, 0, 0),
706 static struct clk_rcg2 gcc_sdcc1_ice_core_clk_src = {
710 .parent_map = gcc_parent_map_0,
711 .freq_tbl = ftbl_gcc_sdcc1_ice_core_clk_src,
712 .clkr.hw.init = &(struct clk_init_data){
713 .name = "gcc_sdcc1_ice_core_clk_src",
714 .parent_data = gcc_parent_data_0,
715 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
716 .ops = &clk_rcg2_ops,
720 static const struct freq_tbl ftbl_gcc_sdcc2_apps_clk_src[] = {
721 F(400000, P_BI_TCXO, 12, 1, 4),
722 F(9600000, P_BI_TCXO, 2, 0, 0),
723 F(19200000, P_BI_TCXO, 1, 0, 0),
724 F(25000000, P_GPLL0_OUT_EVEN, 12, 0, 0),
725 F(50000000, P_GPLL0_OUT_EVEN, 6, 0, 0),
726 F(100000000, P_GPLL0_OUT_MAIN, 6, 0, 0),
727 F(208000000, P_GPLL7_OUT_MAIN, 4, 0, 0),
731 static struct clk_rcg2 gcc_sdcc2_apps_clk_src = {
735 .parent_map = gcc_parent_map_6,
736 .freq_tbl = ftbl_gcc_sdcc2_apps_clk_src,
737 .clkr.hw.init = &(struct clk_init_data){
738 .name = "gcc_sdcc2_apps_clk_src",
739 .parent_data = gcc_parent_data_6,
740 .num_parents = ARRAY_SIZE(gcc_parent_data_6),
741 .ops = &clk_rcg2_floor_ops,
745 static const struct freq_tbl ftbl_gcc_sdcc4_apps_clk_src[] = {
746 F(400000, P_BI_TCXO, 12, 1, 4),
747 F(9600000, P_BI_TCXO, 2, 0, 0),
748 F(19200000, P_BI_TCXO, 1, 0, 0),
749 F(25000000, P_GPLL0_OUT_EVEN, 12, 0, 0),
750 F(33333333, P_GPLL0_OUT_EVEN, 9, 0, 0),
751 F(50000000, P_GPLL0_OUT_MAIN, 12, 0, 0),
752 F(100000000, P_GPLL0_OUT_MAIN, 6, 0, 0),
756 static struct clk_rcg2 gcc_sdcc4_apps_clk_src = {
760 .parent_map = gcc_parent_map_0,
761 .freq_tbl = ftbl_gcc_sdcc4_apps_clk_src,
762 .clkr.hw.init = &(struct clk_init_data){
763 .name = "gcc_sdcc4_apps_clk_src",
764 .parent_data = gcc_parent_data_0,
765 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
766 .ops = &clk_rcg2_floor_ops,
770 static const struct freq_tbl ftbl_gcc_tsif_ref_clk_src[] = {
771 F(105495, P_BI_TCXO, 2, 1, 91),
775 static struct clk_rcg2 gcc_tsif_ref_clk_src = {
779 .parent_map = gcc_parent_map_7,
780 .freq_tbl = ftbl_gcc_tsif_ref_clk_src,
781 .clkr.hw.init = &(struct clk_init_data){
782 .name = "gcc_tsif_ref_clk_src",
783 .parent_data = gcc_parent_data_7,
784 .num_parents = ARRAY_SIZE(gcc_parent_data_7),
785 .ops = &clk_rcg2_ops,
789 static const struct freq_tbl ftbl_gcc_ufs_phy_axi_clk_src[] = {
790 F(25000000, P_GPLL0_OUT_EVEN, 12, 0, 0),
791 F(50000000, P_GPLL0_OUT_EVEN, 6, 0, 0),
792 F(100000000, P_GPLL0_OUT_MAIN, 6, 0, 0),
793 F(200000000, P_GPLL0_OUT_MAIN, 3, 0, 0),
794 F(240000000, P_GPLL0_OUT_MAIN, 2.5, 0, 0),
798 static struct clk_rcg2 gcc_ufs_phy_axi_clk_src = {
802 .parent_map = gcc_parent_map_0,
803 .freq_tbl = ftbl_gcc_ufs_phy_axi_clk_src,
804 .clkr.hw.init = &(struct clk_init_data){
805 .name = "gcc_ufs_phy_axi_clk_src",
806 .parent_data = gcc_parent_data_0,
807 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
808 .ops = &clk_rcg2_ops,
812 static const struct freq_tbl ftbl_gcc_ufs_phy_ice_core_clk_src[] = {
813 F(37500000, P_GPLL0_OUT_EVEN, 8, 0, 0),
814 F(75000000, P_GPLL0_OUT_EVEN, 4, 0, 0),
815 F(150000000, P_GPLL0_OUT_MAIN, 4, 0, 0),
816 F(300000000, P_GPLL0_OUT_MAIN, 2, 0, 0),
820 static struct clk_rcg2 gcc_ufs_phy_ice_core_clk_src = {
824 .parent_map = gcc_parent_map_0,
825 .freq_tbl = ftbl_gcc_ufs_phy_ice_core_clk_src,
826 .clkr.hw.init = &(struct clk_init_data){
827 .name = "gcc_ufs_phy_ice_core_clk_src",
828 .parent_data = gcc_parent_data_0,
829 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
830 .ops = &clk_rcg2_ops,
834 static struct clk_rcg2 gcc_ufs_phy_phy_aux_clk_src = {
838 .parent_map = gcc_parent_map_4,
839 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
840 .clkr.hw.init = &(struct clk_init_data){
841 .name = "gcc_ufs_phy_phy_aux_clk_src",
842 .parent_data = gcc_parent_data_4,
843 .num_parents = ARRAY_SIZE(gcc_parent_data_4),
844 .ops = &clk_rcg2_ops,
848 static const struct freq_tbl ftbl_gcc_ufs_phy_unipro_core_clk_src[] = {
849 F(37500000, P_GPLL0_OUT_EVEN, 8, 0, 0),
850 F(75000000, P_GPLL0_OUT_MAIN, 8, 0, 0),
851 F(150000000, P_GPLL0_OUT_MAIN, 4, 0, 0),
855 static struct clk_rcg2 gcc_ufs_phy_unipro_core_clk_src = {
859 .parent_map = gcc_parent_map_0,
860 .freq_tbl = ftbl_gcc_ufs_phy_unipro_core_clk_src,
861 .clkr.hw.init = &(struct clk_init_data){
862 .name = "gcc_ufs_phy_unipro_core_clk_src",
863 .parent_data = gcc_parent_data_0,
864 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
865 .ops = &clk_rcg2_ops,
869 static const struct freq_tbl ftbl_gcc_usb30_prim_master_clk_src[] = {
870 F(66666667, P_GPLL0_OUT_EVEN, 4.5, 0, 0),
871 F(133333333, P_GPLL0_OUT_MAIN, 4.5, 0, 0),
872 F(200000000, P_GPLL0_OUT_MAIN, 3, 0, 0),
873 F(240000000, P_GPLL0_OUT_MAIN, 2.5, 0, 0),
877 static struct clk_rcg2 gcc_usb30_prim_master_clk_src = {
881 .parent_map = gcc_parent_map_0,
882 .freq_tbl = ftbl_gcc_usb30_prim_master_clk_src,
883 .clkr.hw.init = &(struct clk_init_data){
884 .name = "gcc_usb30_prim_master_clk_src",
885 .parent_data = gcc_parent_data_0,
886 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
887 .ops = &clk_rcg2_ops,
891 static const struct freq_tbl ftbl_gcc_usb30_prim_mock_utmi_clk_src[] = {
892 F(19200000, P_BI_TCXO, 1, 0, 0),
893 F(20000000, P_GPLL0_OUT_EVEN, 15, 0, 0),
894 F(40000000, P_GPLL0_OUT_EVEN, 7.5, 0, 0),
895 F(60000000, P_GPLL0_OUT_MAIN, 10, 0, 0),
899 static struct clk_rcg2 gcc_usb30_prim_mock_utmi_clk_src = {
903 .parent_map = gcc_parent_map_0,
904 .freq_tbl = ftbl_gcc_usb30_prim_mock_utmi_clk_src,
905 .clkr.hw.init = &(struct clk_init_data){
906 .name = "gcc_usb30_prim_mock_utmi_clk_src",
907 .parent_data = gcc_parent_data_0,
908 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
909 .ops = &clk_rcg2_ops,
913 static const struct freq_tbl ftbl_gcc_usb3_prim_phy_aux_clk_src[] = {
914 F(19200000, P_BI_TCXO, 1, 0, 0),
918 static struct clk_rcg2 gcc_usb3_prim_phy_aux_clk_src = {
922 .parent_map = gcc_parent_map_3,
923 .freq_tbl = ftbl_gcc_usb3_prim_phy_aux_clk_src,
924 .clkr.hw.init = &(struct clk_init_data){
925 .name = "gcc_usb3_prim_phy_aux_clk_src",
926 .parent_data = gcc_parent_data_3,
927 .num_parents = ARRAY_SIZE(gcc_parent_data_3),
928 .ops = &clk_rcg2_ops,
932 static struct clk_rcg2 gcc_vs_ctrl_clk_src = {
936 .parent_map = gcc_parent_map_2,
937 .freq_tbl = ftbl_gcc_usb3_prim_phy_aux_clk_src,
938 .clkr.hw.init = &(struct clk_init_data){
939 .name = "gcc_vs_ctrl_clk_src",
940 .parent_data = gcc_parent_data_2,
941 .num_parents = ARRAY_SIZE(gcc_parent_data_2),
942 .ops = &clk_rcg2_ops,
946 static const struct freq_tbl ftbl_gcc_vsensor_clk_src[] = {
947 F(19200000, P_BI_TCXO, 1, 0, 0),
948 F(300000000, P_GPLL0_OUT_MAIN, 2, 0, 0),
949 F(600000000, P_GPLL0_OUT_MAIN, 1, 0, 0),
953 static struct clk_rcg2 gcc_vsensor_clk_src = {
957 .parent_map = gcc_parent_map_8,
958 .freq_tbl = ftbl_gcc_vsensor_clk_src,
959 .clkr.hw.init = &(struct clk_init_data){
960 .name = "gcc_vsensor_clk_src",
961 .parent_data = gcc_parent_data_8,
962 .num_parents = ARRAY_SIZE(gcc_parent_data_8),
963 .ops = &clk_rcg2_ops,
967 static struct clk_branch gcc_aggre_noc_pcie_tbu_clk = {
969 .halt_check = BRANCH_HALT,
971 .enable_reg = 0x2800c,
972 .enable_mask = BIT(0),
973 .hw.init = &(struct clk_init_data){
974 .name = "gcc_aggre_noc_pcie_tbu_clk",
975 .ops = &clk_branch2_ops,
980 static struct clk_branch gcc_aggre_ufs_phy_axi_clk = {
982 .halt_check = BRANCH_HALT,
986 .enable_reg = 0x82024,
987 .enable_mask = BIT(0),
988 .hw.init = &(struct clk_init_data){
989 .name = "gcc_aggre_ufs_phy_axi_clk",
990 .parent_hws = (const struct clk_hw*[]){
991 &gcc_ufs_phy_axi_clk_src.clkr.hw,
994 .flags = CLK_SET_RATE_PARENT,
995 .ops = &clk_branch2_ops,
1000 static struct clk_branch gcc_aggre_ufs_phy_axi_hw_ctl_clk = {
1001 .halt_reg = 0x82024,
1002 .halt_check = BRANCH_HALT,
1003 .hwcg_reg = 0x82024,
1006 .enable_reg = 0x82024,
1007 .enable_mask = BIT(1),
1008 .hw.init = &(struct clk_init_data){
1009 .name = "gcc_aggre_ufs_phy_axi_hw_ctl_clk",
1010 .parent_hws = (const struct clk_hw*[]){
1011 &gcc_aggre_ufs_phy_axi_clk.clkr.hw,
1014 .flags = CLK_SET_RATE_PARENT,
1015 .ops = &clk_branch_simple_ops,
1020 static struct clk_branch gcc_aggre_usb3_prim_axi_clk = {
1021 .halt_reg = 0x8201c,
1022 .halt_check = BRANCH_HALT,
1024 .enable_reg = 0x8201c,
1025 .enable_mask = BIT(0),
1026 .hw.init = &(struct clk_init_data){
1027 .name = "gcc_aggre_usb3_prim_axi_clk",
1028 .parent_hws = (const struct clk_hw*[]){
1029 &gcc_usb30_prim_master_clk_src.clkr.hw,
1032 .flags = CLK_SET_RATE_PARENT,
1033 .ops = &clk_branch2_ops,
1038 static struct clk_branch gcc_apc_vs_clk = {
1039 .halt_reg = 0x7a050,
1040 .halt_check = BRANCH_HALT,
1042 .enable_reg = 0x7a050,
1043 .enable_mask = BIT(0),
1044 .hw.init = &(struct clk_init_data){
1045 .name = "gcc_apc_vs_clk",
1046 .parent_hws = (const struct clk_hw*[]){
1047 &gcc_vsensor_clk_src.clkr.hw,
1050 .flags = CLK_SET_RATE_PARENT,
1051 .ops = &clk_branch2_ops,
1056 static struct clk_branch gcc_boot_rom_ahb_clk = {
1057 .halt_reg = 0x38004,
1058 .halt_check = BRANCH_HALT_VOTED,
1059 .hwcg_reg = 0x38004,
1062 .enable_reg = 0x52004,
1063 .enable_mask = BIT(10),
1064 .hw.init = &(struct clk_init_data){
1065 .name = "gcc_boot_rom_ahb_clk",
1066 .ops = &clk_branch2_ops,
1071 static struct clk_branch gcc_camera_hf_axi_clk = {
1073 .halt_check = BRANCH_HALT,
1075 .enable_reg = 0xb020,
1076 .enable_mask = BIT(0),
1077 .hw.init = &(struct clk_init_data){
1078 .name = "gcc_camera_hf_axi_clk",
1079 .ops = &clk_branch2_ops,
1084 static struct clk_branch gcc_camera_sf_axi_clk = {
1086 .halt_check = BRANCH_HALT,
1088 .enable_reg = 0xb06c,
1089 .enable_mask = BIT(0),
1090 .hw.init = &(struct clk_init_data){
1091 .name = "gcc_camera_sf_axi_clk",
1092 .ops = &clk_branch2_ops,
1097 static struct clk_branch gcc_ce1_ahb_clk = {
1098 .halt_reg = 0x4100c,
1099 .halt_check = BRANCH_HALT_VOTED,
1100 .hwcg_reg = 0x4100c,
1103 .enable_reg = 0x52004,
1104 .enable_mask = BIT(3),
1105 .hw.init = &(struct clk_init_data){
1106 .name = "gcc_ce1_ahb_clk",
1107 .ops = &clk_branch2_ops,
1112 static struct clk_branch gcc_ce1_axi_clk = {
1113 .halt_reg = 0x41008,
1114 .halt_check = BRANCH_HALT_VOTED,
1116 .enable_reg = 0x52004,
1117 .enable_mask = BIT(4),
1118 .hw.init = &(struct clk_init_data){
1119 .name = "gcc_ce1_axi_clk",
1120 .ops = &clk_branch2_ops,
1125 static struct clk_branch gcc_ce1_clk = {
1126 .halt_reg = 0x41004,
1127 .halt_check = BRANCH_HALT_VOTED,
1129 .enable_reg = 0x52004,
1130 .enable_mask = BIT(5),
1131 .hw.init = &(struct clk_init_data){
1132 .name = "gcc_ce1_clk",
1133 .ops = &clk_branch2_ops,
1138 static struct clk_branch gcc_cfg_noc_usb3_prim_axi_clk = {
1140 .halt_check = BRANCH_HALT,
1142 .enable_reg = 0x502c,
1143 .enable_mask = BIT(0),
1144 .hw.init = &(struct clk_init_data){
1145 .name = "gcc_cfg_noc_usb3_prim_axi_clk",
1146 .parent_hws = (const struct clk_hw*[]){
1147 &gcc_usb30_prim_master_clk_src.clkr.hw,
1150 .flags = CLK_SET_RATE_PARENT,
1151 .ops = &clk_branch2_ops,
1156 static struct clk_branch gcc_cpuss_ahb_clk = {
1157 .halt_reg = 0x48000,
1158 .halt_check = BRANCH_HALT_VOTED,
1160 .enable_reg = 0x52004,
1161 .enable_mask = BIT(21),
1162 .hw.init = &(struct clk_init_data){
1163 .name = "gcc_cpuss_ahb_clk",
1164 .parent_hws = (const struct clk_hw*[]){
1165 &gcc_cpuss_ahb_clk_src.clkr.hw,
1168 .flags = CLK_IS_CRITICAL | CLK_SET_RATE_PARENT,
1169 .ops = &clk_branch2_ops,
1174 static struct clk_branch gcc_cpuss_rbcpr_clk = {
1175 .halt_reg = 0x48008,
1176 .halt_check = BRANCH_HALT,
1178 .enable_reg = 0x48008,
1179 .enable_mask = BIT(0),
1180 .hw.init = &(struct clk_init_data){
1181 .name = "gcc_cpuss_rbcpr_clk",
1182 .parent_hws = (const struct clk_hw*[]){
1183 &gcc_cpuss_rbcpr_clk_src.clkr.hw,
1186 .flags = CLK_SET_RATE_PARENT,
1187 .ops = &clk_branch2_ops,
1192 static struct clk_branch gcc_ddrss_gpu_axi_clk = {
1193 .halt_reg = 0x4452c,
1194 .halt_check = BRANCH_VOTED,
1196 .enable_reg = 0x4452c,
1197 .enable_mask = BIT(0),
1198 .hw.init = &(struct clk_init_data){
1199 .name = "gcc_ddrss_gpu_axi_clk",
1200 .ops = &clk_branch2_ops,
1206 static struct clk_branch gcc_disp_gpll0_clk_src = {
1207 .halt_check = BRANCH_HALT_DELAY,
1209 .enable_reg = 0x52004,
1210 .enable_mask = BIT(18),
1211 .hw.init = &(struct clk_init_data){
1212 .name = "gcc_disp_gpll0_clk_src",
1213 .parent_hws = (const struct clk_hw*[]){
1217 .ops = &clk_branch2_aon_ops,
1222 static struct clk_branch gcc_disp_gpll0_div_clk_src = {
1223 .halt_check = BRANCH_HALT_DELAY,
1225 .enable_reg = 0x52004,
1226 .enable_mask = BIT(19),
1227 .hw.init = &(struct clk_init_data){
1228 .name = "gcc_disp_gpll0_div_clk_src",
1229 .parent_hws = (const struct clk_hw*[]){
1230 &gcc_pll0_main_div_cdiv.hw,
1233 .ops = &clk_branch2_ops,
1238 static struct clk_branch gcc_disp_hf_axi_clk = {
1240 .halt_check = BRANCH_HALT,
1242 .enable_reg = 0xb024,
1243 .enable_mask = BIT(0),
1244 .hw.init = &(struct clk_init_data){
1245 .name = "gcc_disp_hf_axi_clk",
1246 .ops = &clk_branch2_ops,
1251 static struct clk_branch gcc_disp_sf_axi_clk = {
1253 .halt_check = BRANCH_HALT,
1255 .enable_reg = 0xb070,
1256 .enable_mask = BIT(0),
1257 .hw.init = &(struct clk_init_data){
1258 .name = "gcc_disp_sf_axi_clk",
1259 .ops = &clk_branch2_ops,
1265 static struct clk_branch gcc_gp1_clk = {
1266 .halt_reg = 0x64000,
1267 .halt_check = BRANCH_HALT,
1269 .enable_reg = 0x64000,
1270 .enable_mask = BIT(0),
1271 .hw.init = &(struct clk_init_data){
1272 .name = "gcc_gp1_clk",
1273 .parent_hws = (const struct clk_hw*[]){
1274 &gcc_gp1_clk_src.clkr.hw,
1277 .flags = CLK_SET_RATE_PARENT,
1278 .ops = &clk_branch2_ops,
1283 static struct clk_branch gcc_gp2_clk = {
1284 .halt_reg = 0x65000,
1285 .halt_check = BRANCH_HALT,
1287 .enable_reg = 0x65000,
1288 .enable_mask = BIT(0),
1289 .hw.init = &(struct clk_init_data){
1290 .name = "gcc_gp2_clk",
1291 .parent_hws = (const struct clk_hw*[]){
1292 &gcc_gp2_clk_src.clkr.hw,
1295 .flags = CLK_SET_RATE_PARENT,
1296 .ops = &clk_branch2_ops,
1301 static struct clk_branch gcc_gp3_clk = {
1302 .halt_reg = 0x66000,
1303 .halt_check = BRANCH_HALT,
1305 .enable_reg = 0x66000,
1306 .enable_mask = BIT(0),
1307 .hw.init = &(struct clk_init_data){
1308 .name = "gcc_gp3_clk",
1309 .parent_hws = (const struct clk_hw*[]){
1310 &gcc_gp3_clk_src.clkr.hw,
1313 .flags = CLK_SET_RATE_PARENT,
1314 .ops = &clk_branch2_ops,
1319 static struct clk_branch gcc_gpu_gpll0_clk_src = {
1320 .halt_check = BRANCH_HALT_DELAY,
1322 .enable_reg = 0x52004,
1323 .enable_mask = BIT(15),
1324 .hw.init = &(struct clk_init_data){
1325 .name = "gcc_gpu_gpll0_clk_src",
1326 .parent_hws = (const struct clk_hw*[]){
1330 .ops = &clk_branch2_ops,
1335 static struct clk_branch gcc_gpu_gpll0_div_clk_src = {
1336 .halt_check = BRANCH_HALT_DELAY,
1338 .enable_reg = 0x52004,
1339 .enable_mask = BIT(16),
1340 .hw.init = &(struct clk_init_data){
1341 .name = "gcc_gpu_gpll0_div_clk_src",
1342 .parent_hws = (const struct clk_hw*[]){
1343 &gcc_pll0_main_div_cdiv.hw,
1346 .ops = &clk_branch2_ops,
1351 static struct clk_branch gcc_gpu_memnoc_gfx_clk = {
1352 .halt_reg = 0x7100c,
1353 .halt_check = BRANCH_VOTED,
1355 .enable_reg = 0x7100c,
1356 .enable_mask = BIT(0),
1357 .hw.init = &(struct clk_init_data){
1358 .name = "gcc_gpu_memnoc_gfx_clk",
1359 .ops = &clk_branch2_ops,
1364 static struct clk_branch gcc_gpu_snoc_dvm_gfx_clk = {
1365 .halt_reg = 0x71018,
1366 .halt_check = BRANCH_HALT,
1368 .enable_reg = 0x71018,
1369 .enable_mask = BIT(0),
1370 .hw.init = &(struct clk_init_data){
1371 .name = "gcc_gpu_snoc_dvm_gfx_clk",
1372 .ops = &clk_branch2_ops,
1377 static struct clk_branch gcc_gpu_vs_clk = {
1378 .halt_reg = 0x7a04c,
1379 .halt_check = BRANCH_HALT,
1381 .enable_reg = 0x7a04c,
1382 .enable_mask = BIT(0),
1383 .hw.init = &(struct clk_init_data){
1384 .name = "gcc_gpu_vs_clk",
1385 .parent_hws = (const struct clk_hw*[]){
1386 &gcc_vsensor_clk_src.clkr.hw,
1389 .flags = CLK_SET_RATE_PARENT,
1390 .ops = &clk_branch2_ops,
1395 static struct clk_branch gcc_npu_axi_clk = {
1396 .halt_reg = 0x4d008,
1397 .halt_check = BRANCH_HALT,
1399 .enable_reg = 0x4d008,
1400 .enable_mask = BIT(0),
1401 .hw.init = &(struct clk_init_data){
1402 .name = "gcc_npu_axi_clk",
1403 .ops = &clk_branch2_ops,
1408 static struct clk_branch gcc_npu_cfg_ahb_clk = {
1409 .halt_reg = 0x4d004,
1410 .halt_check = BRANCH_HALT,
1411 .hwcg_reg = 0x4d004,
1414 .enable_reg = 0x4d004,
1415 .enable_mask = BIT(0),
1416 .hw.init = &(struct clk_init_data){
1417 .name = "gcc_npu_cfg_ahb_clk",
1418 .flags = CLK_IS_CRITICAL,
1419 .ops = &clk_branch2_ops,
1424 static struct clk_branch gcc_npu_gpll0_clk_src = {
1425 .halt_check = BRANCH_HALT_DELAY,
1427 .enable_reg = 0x52004,
1428 .enable_mask = BIT(25),
1429 .hw.init = &(struct clk_init_data){
1430 .name = "gcc_npu_gpll0_clk_src",
1431 .parent_hws = (const struct clk_hw*[]){
1435 .ops = &clk_branch2_ops,
1440 static struct clk_branch gcc_npu_gpll0_div_clk_src = {
1441 .halt_check = BRANCH_HALT_DELAY,
1443 .enable_reg = 0x52004,
1444 .enable_mask = BIT(26),
1445 .hw.init = &(struct clk_init_data){
1446 .name = "gcc_npu_gpll0_div_clk_src",
1447 .parent_hws = (const struct clk_hw*[]){
1448 &gcc_pll0_main_div_cdiv.hw,
1451 .flags = CLK_SET_RATE_PARENT,
1452 .ops = &clk_branch2_ops,
1457 static struct clk_branch gcc_pcie_0_aux_clk = {
1458 .halt_reg = 0x6b01c,
1459 .halt_check = BRANCH_HALT_VOTED,
1461 .enable_reg = 0x5200c,
1462 .enable_mask = BIT(3),
1463 .hw.init = &(struct clk_init_data){
1464 .name = "gcc_pcie_0_aux_clk",
1465 .parent_hws = (const struct clk_hw*[]){
1466 &gcc_pcie_0_aux_clk_src.clkr.hw,
1469 .flags = CLK_SET_RATE_PARENT,
1470 .ops = &clk_branch2_ops,
1475 static struct clk_branch gcc_pcie_0_cfg_ahb_clk = {
1476 .halt_reg = 0x6b018,
1477 .halt_check = BRANCH_HALT_VOTED,
1478 .hwcg_reg = 0x6b018,
1481 .enable_reg = 0x5200c,
1482 .enable_mask = BIT(2),
1483 .hw.init = &(struct clk_init_data){
1484 .name = "gcc_pcie_0_cfg_ahb_clk",
1485 .ops = &clk_branch2_ops,
1490 static struct clk_branch gcc_pcie_0_clkref_clk = {
1491 .halt_reg = 0x8c008,
1492 .halt_check = BRANCH_HALT,
1494 .enable_reg = 0x8c008,
1495 .enable_mask = BIT(0),
1496 .hw.init = &(struct clk_init_data){
1497 .name = "gcc_pcie_0_clkref_clk",
1498 .ops = &clk_branch2_ops,
1503 static struct clk_branch gcc_pcie_0_mstr_axi_clk = {
1504 .halt_reg = 0x6b014,
1505 .halt_check = BRANCH_HALT_VOTED,
1507 .enable_reg = 0x5200c,
1508 .enable_mask = BIT(1),
1509 .hw.init = &(struct clk_init_data){
1510 .name = "gcc_pcie_0_mstr_axi_clk",
1511 .ops = &clk_branch2_ops,
1516 static struct clk_branch gcc_pcie_0_pipe_clk = {
1517 .halt_reg = 0x6b020,
1518 .halt_check = BRANCH_HALT_SKIP,
1520 .enable_reg = 0x5200c,
1521 .enable_mask = BIT(4),
1522 .hw.init = &(struct clk_init_data){
1523 .name = "gcc_pcie_0_pipe_clk",
1524 .ops = &clk_branch2_ops,
1529 static struct clk_branch gcc_pcie_0_slv_axi_clk = {
1530 .halt_reg = 0x6b010,
1531 .halt_check = BRANCH_HALT_VOTED,
1532 .hwcg_reg = 0x6b010,
1535 .enable_reg = 0x5200c,
1536 .enable_mask = BIT(0),
1537 .hw.init = &(struct clk_init_data){
1538 .name = "gcc_pcie_0_slv_axi_clk",
1539 .ops = &clk_branch2_ops,
1544 static struct clk_branch gcc_pcie_0_slv_q2a_axi_clk = {
1545 .halt_reg = 0x6b00c,
1546 .halt_check = BRANCH_HALT_VOTED,
1548 .enable_reg = 0x5200c,
1549 .enable_mask = BIT(5),
1550 .hw.init = &(struct clk_init_data){
1551 .name = "gcc_pcie_0_slv_q2a_axi_clk",
1552 .ops = &clk_branch2_ops,
1557 static struct clk_branch gcc_pcie_phy_aux_clk = {
1558 .halt_reg = 0x6f004,
1559 .halt_check = BRANCH_HALT,
1561 .enable_reg = 0x6f004,
1562 .enable_mask = BIT(0),
1563 .hw.init = &(struct clk_init_data){
1564 .name = "gcc_pcie_phy_aux_clk",
1565 .parent_hws = (const struct clk_hw*[]){
1566 &gcc_pcie_0_aux_clk_src.clkr.hw,
1569 .flags = CLK_SET_RATE_PARENT,
1570 .ops = &clk_branch2_ops,
1575 static struct clk_branch gcc_pcie_phy_refgen_clk = {
1576 .halt_reg = 0x6f02c,
1577 .halt_check = BRANCH_HALT,
1579 .enable_reg = 0x6f02c,
1580 .enable_mask = BIT(0),
1581 .hw.init = &(struct clk_init_data){
1582 .name = "gcc_pcie_phy_refgen_clk",
1583 .parent_hws = (const struct clk_hw*[]){
1584 &gcc_pcie_phy_refgen_clk_src.clkr.hw,
1587 .flags = CLK_SET_RATE_PARENT,
1588 .ops = &clk_branch2_ops,
1593 static struct clk_branch gcc_pdm2_clk = {
1594 .halt_reg = 0x3300c,
1595 .halt_check = BRANCH_HALT,
1597 .enable_reg = 0x3300c,
1598 .enable_mask = BIT(0),
1599 .hw.init = &(struct clk_init_data){
1600 .name = "gcc_pdm2_clk",
1601 .parent_hws = (const struct clk_hw*[]){
1602 &gcc_pdm2_clk_src.clkr.hw,
1605 .flags = CLK_SET_RATE_PARENT,
1606 .ops = &clk_branch2_ops,
1611 static struct clk_branch gcc_pdm_ahb_clk = {
1612 .halt_reg = 0x33004,
1613 .halt_check = BRANCH_HALT,
1614 .hwcg_reg = 0x33004,
1617 .enable_reg = 0x33004,
1618 .enable_mask = BIT(0),
1619 .hw.init = &(struct clk_init_data){
1620 .name = "gcc_pdm_ahb_clk",
1621 .ops = &clk_branch2_ops,
1626 static struct clk_branch gcc_pdm_xo4_clk = {
1627 .halt_reg = 0x33008,
1628 .halt_check = BRANCH_HALT,
1630 .enable_reg = 0x33008,
1631 .enable_mask = BIT(0),
1632 .hw.init = &(struct clk_init_data){
1633 .name = "gcc_pdm_xo4_clk",
1634 .ops = &clk_branch2_ops,
1639 static struct clk_branch gcc_prng_ahb_clk = {
1640 .halt_reg = 0x34004,
1641 .halt_check = BRANCH_HALT_VOTED,
1642 .hwcg_reg = 0x34004,
1645 .enable_reg = 0x52004,
1646 .enable_mask = BIT(13),
1647 .hw.init = &(struct clk_init_data){
1648 .name = "gcc_prng_ahb_clk",
1649 .ops = &clk_branch2_ops,
1654 static struct clk_branch gcc_qupv3_wrap0_core_2x_clk = {
1655 .halt_reg = 0x17014,
1656 .halt_check = BRANCH_HALT_VOTED,
1658 .enable_reg = 0x5200c,
1659 .enable_mask = BIT(9),
1660 .hw.init = &(struct clk_init_data){
1661 .name = "gcc_qupv3_wrap0_core_2x_clk",
1662 .ops = &clk_branch2_ops,
1667 static struct clk_branch gcc_qupv3_wrap0_core_clk = {
1668 .halt_reg = 0x1700c,
1669 .halt_check = BRANCH_HALT_VOTED,
1671 .enable_reg = 0x5200c,
1672 .enable_mask = BIT(8),
1673 .hw.init = &(struct clk_init_data){
1674 .name = "gcc_qupv3_wrap0_core_clk",
1675 .ops = &clk_branch2_ops,
1680 static struct clk_branch gcc_qupv3_wrap0_s0_clk = {
1681 .halt_reg = 0x17030,
1682 .halt_check = BRANCH_HALT_VOTED,
1684 .enable_reg = 0x5200c,
1685 .enable_mask = BIT(10),
1686 .hw.init = &(struct clk_init_data){
1687 .name = "gcc_qupv3_wrap0_s0_clk",
1688 .parent_hws = (const struct clk_hw*[]){
1689 &gcc_qupv3_wrap0_s0_clk_src.clkr.hw,
1692 .flags = CLK_SET_RATE_PARENT,
1693 .ops = &clk_branch2_ops,
1698 static struct clk_branch gcc_qupv3_wrap0_s1_clk = {
1699 .halt_reg = 0x17160,
1700 .halt_check = BRANCH_HALT_VOTED,
1702 .enable_reg = 0x5200c,
1703 .enable_mask = BIT(11),
1704 .hw.init = &(struct clk_init_data){
1705 .name = "gcc_qupv3_wrap0_s1_clk",
1706 .parent_hws = (const struct clk_hw*[]){
1707 &gcc_qupv3_wrap0_s1_clk_src.clkr.hw,
1710 .flags = CLK_SET_RATE_PARENT,
1711 .ops = &clk_branch2_ops,
1716 static struct clk_branch gcc_qupv3_wrap0_s2_clk = {
1717 .halt_reg = 0x17290,
1718 .halt_check = BRANCH_HALT_VOTED,
1720 .enable_reg = 0x5200c,
1721 .enable_mask = BIT(12),
1722 .hw.init = &(struct clk_init_data){
1723 .name = "gcc_qupv3_wrap0_s2_clk",
1724 .parent_hws = (const struct clk_hw*[]){
1725 &gcc_qupv3_wrap0_s2_clk_src.clkr.hw,
1728 .flags = CLK_SET_RATE_PARENT,
1729 .ops = &clk_branch2_ops,
1734 static struct clk_branch gcc_qupv3_wrap0_s3_clk = {
1735 .halt_reg = 0x173c0,
1736 .halt_check = BRANCH_HALT_VOTED,
1738 .enable_reg = 0x5200c,
1739 .enable_mask = BIT(13),
1740 .hw.init = &(struct clk_init_data){
1741 .name = "gcc_qupv3_wrap0_s3_clk",
1742 .parent_hws = (const struct clk_hw*[]){
1743 &gcc_qupv3_wrap0_s3_clk_src.clkr.hw,
1746 .flags = CLK_SET_RATE_PARENT,
1747 .ops = &clk_branch2_ops,
1752 static struct clk_branch gcc_qupv3_wrap0_s4_clk = {
1753 .halt_reg = 0x174f0,
1754 .halt_check = BRANCH_HALT_VOTED,
1756 .enable_reg = 0x5200c,
1757 .enable_mask = BIT(14),
1758 .hw.init = &(struct clk_init_data){
1759 .name = "gcc_qupv3_wrap0_s4_clk",
1760 .parent_hws = (const struct clk_hw*[]){
1761 &gcc_qupv3_wrap0_s4_clk_src.clkr.hw,
1764 .flags = CLK_SET_RATE_PARENT,
1765 .ops = &clk_branch2_ops,
1770 static struct clk_branch gcc_qupv3_wrap0_s5_clk = {
1771 .halt_reg = 0x17620,
1772 .halt_check = BRANCH_HALT_VOTED,
1774 .enable_reg = 0x5200c,
1775 .enable_mask = BIT(15),
1776 .hw.init = &(struct clk_init_data){
1777 .name = "gcc_qupv3_wrap0_s5_clk",
1778 .parent_hws = (const struct clk_hw*[]){
1779 &gcc_qupv3_wrap0_s5_clk_src.clkr.hw,
1782 .flags = CLK_SET_RATE_PARENT,
1783 .ops = &clk_branch2_ops,
1788 static struct clk_branch gcc_qupv3_wrap0_s6_clk = {
1789 .halt_reg = 0x17750,
1790 .halt_check = BRANCH_HALT_VOTED,
1792 .enable_reg = 0x5200c,
1793 .enable_mask = BIT(16),
1794 .hw.init = &(struct clk_init_data){
1795 .name = "gcc_qupv3_wrap0_s6_clk",
1796 .parent_hws = (const struct clk_hw*[]){
1797 &gcc_qupv3_wrap0_s6_clk_src.clkr.hw,
1800 .flags = CLK_SET_RATE_PARENT,
1801 .ops = &clk_branch2_ops,
1806 static struct clk_branch gcc_qupv3_wrap0_s7_clk = {
1807 .halt_reg = 0x17880,
1808 .halt_check = BRANCH_HALT_VOTED,
1810 .enable_reg = 0x5200c,
1811 .enable_mask = BIT(17),
1812 .hw.init = &(struct clk_init_data){
1813 .name = "gcc_qupv3_wrap0_s7_clk",
1814 .parent_hws = (const struct clk_hw*[]){
1815 &gcc_qupv3_wrap0_s7_clk_src.clkr.hw,
1818 .flags = CLK_SET_RATE_PARENT,
1819 .ops = &clk_branch2_ops,
1824 static struct clk_branch gcc_qupv3_wrap1_core_2x_clk = {
1825 .halt_reg = 0x18004,
1826 .halt_check = BRANCH_HALT_VOTED,
1828 .enable_reg = 0x5200c,
1829 .enable_mask = BIT(18),
1830 .hw.init = &(struct clk_init_data){
1831 .name = "gcc_qupv3_wrap1_core_2x_clk",
1832 .ops = &clk_branch2_ops,
1837 static struct clk_branch gcc_qupv3_wrap1_core_clk = {
1838 .halt_reg = 0x18008,
1839 .halt_check = BRANCH_HALT_VOTED,
1841 .enable_reg = 0x5200c,
1842 .enable_mask = BIT(19),
1843 .hw.init = &(struct clk_init_data){
1844 .name = "gcc_qupv3_wrap1_core_clk",
1845 .ops = &clk_branch2_ops,
1850 static struct clk_branch gcc_qupv3_wrap1_s0_clk = {
1851 .halt_reg = 0x18014,
1852 .halt_check = BRANCH_HALT_VOTED,
1854 .enable_reg = 0x5200c,
1855 .enable_mask = BIT(22),
1856 .hw.init = &(struct clk_init_data){
1857 .name = "gcc_qupv3_wrap1_s0_clk",
1858 .parent_hws = (const struct clk_hw*[]){
1859 &gcc_qupv3_wrap1_s0_clk_src.clkr.hw,
1862 .flags = CLK_SET_RATE_PARENT,
1863 .ops = &clk_branch2_ops,
1868 static struct clk_branch gcc_qupv3_wrap1_s1_clk = {
1869 .halt_reg = 0x18144,
1870 .halt_check = BRANCH_HALT_VOTED,
1872 .enable_reg = 0x5200c,
1873 .enable_mask = BIT(23),
1874 .hw.init = &(struct clk_init_data){
1875 .name = "gcc_qupv3_wrap1_s1_clk",
1876 .parent_hws = (const struct clk_hw*[]){
1877 &gcc_qupv3_wrap1_s1_clk_src.clkr.hw,
1880 .flags = CLK_SET_RATE_PARENT,
1881 .ops = &clk_branch2_ops,
1886 static struct clk_branch gcc_qupv3_wrap1_s2_clk = {
1887 .halt_reg = 0x18274,
1888 .halt_check = BRANCH_HALT_VOTED,
1890 .enable_reg = 0x5200c,
1891 .enable_mask = BIT(24),
1892 .hw.init = &(struct clk_init_data){
1893 .name = "gcc_qupv3_wrap1_s2_clk",
1894 .parent_hws = (const struct clk_hw*[]){
1895 &gcc_qupv3_wrap1_s2_clk_src.clkr.hw,
1898 .flags = CLK_SET_RATE_PARENT,
1899 .ops = &clk_branch2_ops,
1904 static struct clk_branch gcc_qupv3_wrap1_s3_clk = {
1905 .halt_reg = 0x183a4,
1906 .halt_check = BRANCH_HALT_VOTED,
1908 .enable_reg = 0x5200c,
1909 .enable_mask = BIT(25),
1910 .hw.init = &(struct clk_init_data){
1911 .name = "gcc_qupv3_wrap1_s3_clk",
1912 .parent_hws = (const struct clk_hw*[]){
1913 &gcc_qupv3_wrap1_s3_clk_src.clkr.hw,
1916 .flags = CLK_SET_RATE_PARENT,
1917 .ops = &clk_branch2_ops,
1922 static struct clk_branch gcc_qupv3_wrap1_s4_clk = {
1923 .halt_reg = 0x184d4,
1924 .halt_check = BRANCH_HALT_VOTED,
1926 .enable_reg = 0x5200c,
1927 .enable_mask = BIT(26),
1928 .hw.init = &(struct clk_init_data){
1929 .name = "gcc_qupv3_wrap1_s4_clk",
1930 .parent_hws = (const struct clk_hw*[]){
1931 &gcc_qupv3_wrap1_s4_clk_src.clkr.hw,
1934 .flags = CLK_SET_RATE_PARENT,
1935 .ops = &clk_branch2_ops,
1940 static struct clk_branch gcc_qupv3_wrap1_s5_clk = {
1941 .halt_reg = 0x18604,
1942 .halt_check = BRANCH_HALT_VOTED,
1944 .enable_reg = 0x5200c,
1945 .enable_mask = BIT(27),
1946 .hw.init = &(struct clk_init_data){
1947 .name = "gcc_qupv3_wrap1_s5_clk",
1948 .parent_hws = (const struct clk_hw*[]){
1949 &gcc_qupv3_wrap1_s5_clk_src.clkr.hw,
1952 .flags = CLK_SET_RATE_PARENT,
1953 .ops = &clk_branch2_ops,
1958 static struct clk_branch gcc_qupv3_wrap1_s6_clk = {
1959 .halt_reg = 0x18734,
1960 .halt_check = BRANCH_HALT_VOTED,
1962 .enable_reg = 0x5200c,
1963 .enable_mask = BIT(28),
1964 .hw.init = &(struct clk_init_data){
1965 .name = "gcc_qupv3_wrap1_s6_clk",
1966 .parent_hws = (const struct clk_hw*[]){
1967 &gcc_qupv3_wrap1_s6_clk_src.clkr.hw,
1970 .flags = CLK_SET_RATE_PARENT,
1971 .ops = &clk_branch2_ops,
1976 static struct clk_branch gcc_qupv3_wrap1_s7_clk = {
1977 .halt_reg = 0x18864,
1978 .halt_check = BRANCH_HALT_VOTED,
1980 .enable_reg = 0x5200c,
1981 .enable_mask = BIT(29),
1982 .hw.init = &(struct clk_init_data){
1983 .name = "gcc_qupv3_wrap1_s7_clk",
1984 .parent_hws = (const struct clk_hw*[]){
1985 &gcc_qupv3_wrap1_s7_clk_src.clkr.hw,
1988 .flags = CLK_SET_RATE_PARENT,
1989 .ops = &clk_branch2_ops,
1994 static struct clk_branch gcc_qupv3_wrap_0_m_ahb_clk = {
1995 .halt_reg = 0x17004,
1996 .halt_check = BRANCH_HALT_VOTED,
1998 .enable_reg = 0x5200c,
1999 .enable_mask = BIT(6),
2000 .hw.init = &(struct clk_init_data){
2001 .name = "gcc_qupv3_wrap_0_m_ahb_clk",
2002 .ops = &clk_branch2_ops,
2007 static struct clk_branch gcc_qupv3_wrap_0_s_ahb_clk = {
2008 .halt_reg = 0x17008,
2009 .halt_check = BRANCH_HALT_VOTED,
2010 .hwcg_reg = 0x17008,
2013 .enable_reg = 0x5200c,
2014 .enable_mask = BIT(7),
2015 .hw.init = &(struct clk_init_data){
2016 .name = "gcc_qupv3_wrap_0_s_ahb_clk",
2017 .ops = &clk_branch2_ops,
2022 static struct clk_branch gcc_qupv3_wrap_1_m_ahb_clk = {
2023 .halt_reg = 0x1800c,
2024 .halt_check = BRANCH_HALT_VOTED,
2026 .enable_reg = 0x5200c,
2027 .enable_mask = BIT(20),
2028 .hw.init = &(struct clk_init_data){
2029 .name = "gcc_qupv3_wrap_1_m_ahb_clk",
2030 .ops = &clk_branch2_ops,
2035 static struct clk_branch gcc_qupv3_wrap_1_s_ahb_clk = {
2036 .halt_reg = 0x18010,
2037 .halt_check = BRANCH_HALT_VOTED,
2038 .hwcg_reg = 0x18010,
2041 .enable_reg = 0x5200c,
2042 .enable_mask = BIT(21),
2043 .hw.init = &(struct clk_init_data){
2044 .name = "gcc_qupv3_wrap_1_s_ahb_clk",
2045 .ops = &clk_branch2_ops,
2050 static struct clk_branch gcc_sdcc1_ahb_clk = {
2051 .halt_reg = 0x12008,
2052 .halt_check = BRANCH_HALT,
2054 .enable_reg = 0x12008,
2055 .enable_mask = BIT(0),
2056 .hw.init = &(struct clk_init_data){
2057 .name = "gcc_sdcc1_ahb_clk",
2058 .ops = &clk_branch2_ops,
2063 static struct clk_branch gcc_sdcc1_apps_clk = {
2064 .halt_reg = 0x1200c,
2065 .halt_check = BRANCH_HALT,
2067 .enable_reg = 0x1200c,
2068 .enable_mask = BIT(0),
2069 .hw.init = &(struct clk_init_data){
2070 .name = "gcc_sdcc1_apps_clk",
2071 .parent_hws = (const struct clk_hw*[]){
2072 &gcc_sdcc1_apps_clk_src.clkr.hw,
2075 .flags = CLK_SET_RATE_PARENT,
2076 .ops = &clk_branch2_ops,
2081 static struct clk_branch gcc_sdcc1_ice_core_clk = {
2082 .halt_reg = 0x12040,
2083 .halt_check = BRANCH_HALT,
2085 .enable_reg = 0x12040,
2086 .enable_mask = BIT(0),
2087 .hw.init = &(struct clk_init_data){
2088 .name = "gcc_sdcc1_ice_core_clk",
2089 .parent_hws = (const struct clk_hw*[]){
2090 &gcc_sdcc1_ice_core_clk_src.clkr.hw,
2093 .flags = CLK_SET_RATE_PARENT,
2094 .ops = &clk_branch2_ops,
2099 static struct clk_branch gcc_sdcc2_ahb_clk = {
2100 .halt_reg = 0x14008,
2101 .halt_check = BRANCH_HALT,
2103 .enable_reg = 0x14008,
2104 .enable_mask = BIT(0),
2105 .hw.init = &(struct clk_init_data){
2106 .name = "gcc_sdcc2_ahb_clk",
2107 .ops = &clk_branch2_ops,
2112 static struct clk_branch gcc_sdcc2_apps_clk = {
2113 .halt_reg = 0x14004,
2114 .halt_check = BRANCH_HALT,
2116 .enable_reg = 0x14004,
2117 .enable_mask = BIT(0),
2118 .hw.init = &(struct clk_init_data){
2119 .name = "gcc_sdcc2_apps_clk",
2120 .parent_hws = (const struct clk_hw*[]){
2121 &gcc_sdcc2_apps_clk_src.clkr.hw,
2124 .flags = CLK_SET_RATE_PARENT,
2125 .ops = &clk_branch2_ops,
2130 static struct clk_branch gcc_sdcc4_ahb_clk = {
2131 .halt_reg = 0x16008,
2132 .halt_check = BRANCH_HALT,
2134 .enable_reg = 0x16008,
2135 .enable_mask = BIT(0),
2136 .hw.init = &(struct clk_init_data){
2137 .name = "gcc_sdcc4_ahb_clk",
2138 .ops = &clk_branch2_ops,
2143 static struct clk_branch gcc_sdcc4_apps_clk = {
2144 .halt_reg = 0x16004,
2145 .halt_check = BRANCH_HALT,
2147 .enable_reg = 0x16004,
2148 .enable_mask = BIT(0),
2149 .hw.init = &(struct clk_init_data){
2150 .name = "gcc_sdcc4_apps_clk",
2151 .parent_hws = (const struct clk_hw*[]){
2152 &gcc_sdcc4_apps_clk_src.clkr.hw,
2155 .flags = CLK_SET_RATE_PARENT,
2156 .ops = &clk_branch2_ops,
2161 static struct clk_branch gcc_sys_noc_cpuss_ahb_clk = {
2163 .halt_check = BRANCH_HALT_VOTED,
2165 .enable_reg = 0x52004,
2166 .enable_mask = BIT(0),
2167 .hw.init = &(struct clk_init_data){
2168 .name = "gcc_sys_noc_cpuss_ahb_clk",
2169 .parent_hws = (const struct clk_hw*[]){
2170 &gcc_cpuss_ahb_clk_src.clkr.hw,
2173 .flags = CLK_IS_CRITICAL | CLK_SET_RATE_PARENT,
2174 .ops = &clk_branch2_ops,
2179 static struct clk_branch gcc_tsif_ahb_clk = {
2180 .halt_reg = 0x36004,
2181 .halt_check = BRANCH_HALT,
2183 .enable_reg = 0x36004,
2184 .enable_mask = BIT(0),
2185 .hw.init = &(struct clk_init_data){
2186 .name = "gcc_tsif_ahb_clk",
2187 .ops = &clk_branch2_ops,
2192 static struct clk_branch gcc_tsif_inactivity_timers_clk = {
2193 .halt_reg = 0x3600c,
2194 .halt_check = BRANCH_HALT,
2196 .enable_reg = 0x3600c,
2197 .enable_mask = BIT(0),
2198 .hw.init = &(struct clk_init_data){
2199 .name = "gcc_tsif_inactivity_timers_clk",
2200 .ops = &clk_branch2_ops,
2205 static struct clk_branch gcc_tsif_ref_clk = {
2206 .halt_reg = 0x36008,
2207 .halt_check = BRANCH_HALT,
2209 .enable_reg = 0x36008,
2210 .enable_mask = BIT(0),
2211 .hw.init = &(struct clk_init_data){
2212 .name = "gcc_tsif_ref_clk",
2213 .parent_hws = (const struct clk_hw*[]){
2214 &gcc_tsif_ref_clk_src.clkr.hw,
2217 .flags = CLK_SET_RATE_PARENT,
2218 .ops = &clk_branch2_ops,
2223 static struct clk_branch gcc_ufs_mem_clkref_clk = {
2224 .halt_reg = 0x8c000,
2225 .halt_check = BRANCH_HALT,
2227 .enable_reg = 0x8c000,
2228 .enable_mask = BIT(0),
2229 .hw.init = &(struct clk_init_data){
2230 .name = "gcc_ufs_mem_clkref_clk",
2231 .ops = &clk_branch2_ops,
2236 static struct clk_branch gcc_ufs_phy_ahb_clk = {
2237 .halt_reg = 0x77014,
2238 .halt_check = BRANCH_HALT,
2239 .hwcg_reg = 0x77014,
2242 .enable_reg = 0x77014,
2243 .enable_mask = BIT(0),
2244 .hw.init = &(struct clk_init_data){
2245 .name = "gcc_ufs_phy_ahb_clk",
2246 .ops = &clk_branch2_ops,
2251 static struct clk_branch gcc_ufs_phy_axi_clk = {
2252 .halt_reg = 0x77038,
2253 .halt_check = BRANCH_HALT,
2254 .hwcg_reg = 0x77038,
2257 .enable_reg = 0x77038,
2258 .enable_mask = BIT(0),
2259 .hw.init = &(struct clk_init_data){
2260 .name = "gcc_ufs_phy_axi_clk",
2261 .parent_hws = (const struct clk_hw*[]){
2262 &gcc_ufs_phy_axi_clk_src.clkr.hw,
2265 .flags = CLK_SET_RATE_PARENT,
2266 .ops = &clk_branch2_ops,
2271 static struct clk_branch gcc_ufs_phy_axi_hw_ctl_clk = {
2272 .halt_reg = 0x77038,
2273 .halt_check = BRANCH_HALT,
2274 .hwcg_reg = 0x77038,
2277 .enable_reg = 0x77038,
2278 .enable_mask = BIT(1),
2279 .hw.init = &(struct clk_init_data){
2280 .name = "gcc_ufs_phy_axi_hw_ctl_clk",
2281 .parent_hws = (const struct clk_hw*[]){
2282 &gcc_ufs_phy_axi_clk.clkr.hw,
2285 .flags = CLK_SET_RATE_PARENT,
2286 .ops = &clk_branch_simple_ops,
2291 static struct clk_branch gcc_ufs_phy_ice_core_clk = {
2292 .halt_reg = 0x77090,
2293 .halt_check = BRANCH_HALT,
2294 .hwcg_reg = 0x77090,
2297 .enable_reg = 0x77090,
2298 .enable_mask = BIT(0),
2299 .hw.init = &(struct clk_init_data){
2300 .name = "gcc_ufs_phy_ice_core_clk",
2301 .parent_hws = (const struct clk_hw*[]){
2302 &gcc_ufs_phy_ice_core_clk_src.clkr.hw,
2305 .flags = CLK_SET_RATE_PARENT,
2306 .ops = &clk_branch2_ops,
2311 static struct clk_branch gcc_ufs_phy_ice_core_hw_ctl_clk = {
2312 .halt_reg = 0x77090,
2313 .halt_check = BRANCH_HALT,
2314 .hwcg_reg = 0x77090,
2317 .enable_reg = 0x77090,
2318 .enable_mask = BIT(1),
2319 .hw.init = &(struct clk_init_data){
2320 .name = "gcc_ufs_phy_ice_core_hw_ctl_clk",
2321 .parent_hws = (const struct clk_hw*[]){
2322 &gcc_ufs_phy_ice_core_clk.clkr.hw,
2325 .flags = CLK_SET_RATE_PARENT,
2326 .ops = &clk_branch_simple_ops,
2331 static struct clk_branch gcc_ufs_phy_phy_aux_clk = {
2332 .halt_reg = 0x77094,
2333 .halt_check = BRANCH_HALT,
2334 .hwcg_reg = 0x77094,
2337 .enable_reg = 0x77094,
2338 .enable_mask = BIT(0),
2339 .hw.init = &(struct clk_init_data){
2340 .name = "gcc_ufs_phy_phy_aux_clk",
2341 .parent_hws = (const struct clk_hw*[]){
2342 &gcc_ufs_phy_phy_aux_clk_src.clkr.hw,
2345 .flags = CLK_SET_RATE_PARENT,
2346 .ops = &clk_branch2_ops,
2351 static struct clk_branch gcc_ufs_phy_phy_aux_hw_ctl_clk = {
2352 .halt_reg = 0x77094,
2353 .halt_check = BRANCH_HALT,
2354 .hwcg_reg = 0x77094,
2357 .enable_reg = 0x77094,
2358 .enable_mask = BIT(1),
2359 .hw.init = &(struct clk_init_data){
2360 .name = "gcc_ufs_phy_phy_aux_hw_ctl_clk",
2361 .parent_hws = (const struct clk_hw*[]){
2362 &gcc_ufs_phy_phy_aux_clk.clkr.hw,
2365 .flags = CLK_SET_RATE_PARENT,
2366 .ops = &clk_branch_simple_ops,
2371 static struct clk_branch gcc_ufs_phy_rx_symbol_0_clk = {
2372 .halt_reg = 0x7701c,
2373 .halt_check = BRANCH_HALT_SKIP,
2375 .enable_reg = 0x7701c,
2376 .enable_mask = BIT(0),
2377 .hw.init = &(struct clk_init_data){
2378 .name = "gcc_ufs_phy_rx_symbol_0_clk",
2379 .ops = &clk_branch2_ops,
2384 static struct clk_branch gcc_ufs_phy_tx_symbol_0_clk = {
2385 .halt_reg = 0x77018,
2386 .halt_check = BRANCH_HALT_SKIP,
2388 .enable_reg = 0x77018,
2389 .enable_mask = BIT(0),
2390 .hw.init = &(struct clk_init_data){
2391 .name = "gcc_ufs_phy_tx_symbol_0_clk",
2392 .ops = &clk_branch2_ops,
2397 static struct clk_branch gcc_ufs_phy_unipro_core_clk = {
2398 .halt_reg = 0x7708c,
2399 .halt_check = BRANCH_HALT,
2400 .hwcg_reg = 0x7708c,
2403 .enable_reg = 0x7708c,
2404 .enable_mask = BIT(0),
2405 .hw.init = &(struct clk_init_data){
2406 .name = "gcc_ufs_phy_unipro_core_clk",
2407 .parent_hws = (const struct clk_hw*[]){
2408 &gcc_ufs_phy_unipro_core_clk_src.clkr.hw,
2411 .flags = CLK_SET_RATE_PARENT,
2412 .ops = &clk_branch2_ops,
2417 static struct clk_branch gcc_ufs_phy_unipro_core_hw_ctl_clk = {
2418 .halt_reg = 0x7708c,
2419 .halt_check = BRANCH_HALT,
2420 .hwcg_reg = 0x7708c,
2423 .enable_reg = 0x7708c,
2424 .enable_mask = BIT(1),
2425 .hw.init = &(struct clk_init_data){
2426 .name = "gcc_ufs_phy_unipro_core_hw_ctl_clk",
2427 .parent_hws = (const struct clk_hw*[]){
2428 &gcc_ufs_phy_unipro_core_clk.clkr.hw,
2431 .flags = CLK_SET_RATE_PARENT,
2432 .ops = &clk_branch_simple_ops,
2437 static struct clk_branch gcc_usb30_prim_master_clk = {
2439 .halt_check = BRANCH_HALT,
2441 .enable_reg = 0xf010,
2442 .enable_mask = BIT(0),
2443 .hw.init = &(struct clk_init_data){
2444 .name = "gcc_usb30_prim_master_clk",
2445 .parent_hws = (const struct clk_hw*[]){
2446 &gcc_usb30_prim_master_clk_src.clkr.hw,
2449 .flags = CLK_SET_RATE_PARENT,
2450 .ops = &clk_branch2_ops,
2455 static struct clk_branch gcc_usb30_prim_mock_utmi_clk = {
2457 .halt_check = BRANCH_HALT,
2459 .enable_reg = 0xf018,
2460 .enable_mask = BIT(0),
2461 .hw.init = &(struct clk_init_data){
2462 .name = "gcc_usb30_prim_mock_utmi_clk",
2463 .parent_hws = (const struct clk_hw*[]){
2464 &gcc_usb30_prim_mock_utmi_clk_src.clkr.hw,
2467 .flags = CLK_SET_RATE_PARENT,
2468 .ops = &clk_branch2_ops,
2473 static struct clk_branch gcc_usb30_prim_sleep_clk = {
2475 .halt_check = BRANCH_HALT,
2477 .enable_reg = 0xf014,
2478 .enable_mask = BIT(0),
2479 .hw.init = &(struct clk_init_data){
2480 .name = "gcc_usb30_prim_sleep_clk",
2481 .ops = &clk_branch2_ops,
2486 static struct clk_branch gcc_usb3_prim_clkref_clk = {
2487 .halt_reg = 0x8c010,
2488 .halt_check = BRANCH_HALT,
2490 .enable_reg = 0x8c010,
2491 .enable_mask = BIT(0),
2492 .hw.init = &(struct clk_init_data){
2493 .name = "gcc_usb3_prim_clkref_clk",
2494 .ops = &clk_branch2_ops,
2499 static struct clk_branch gcc_usb3_prim_phy_aux_clk = {
2501 .halt_check = BRANCH_HALT,
2503 .enable_reg = 0xf050,
2504 .enable_mask = BIT(0),
2505 .hw.init = &(struct clk_init_data){
2506 .name = "gcc_usb3_prim_phy_aux_clk",
2507 .parent_hws = (const struct clk_hw*[]){
2508 &gcc_usb3_prim_phy_aux_clk_src.clkr.hw,
2511 .flags = CLK_SET_RATE_PARENT,
2512 .ops = &clk_branch2_ops,
2517 static struct clk_branch gcc_usb3_prim_phy_com_aux_clk = {
2519 .halt_check = BRANCH_HALT,
2521 .enable_reg = 0xf054,
2522 .enable_mask = BIT(0),
2523 .hw.init = &(struct clk_init_data){
2524 .name = "gcc_usb3_prim_phy_com_aux_clk",
2525 .parent_hws = (const struct clk_hw*[]){
2526 &gcc_usb3_prim_phy_aux_clk_src.clkr.hw,
2529 .flags = CLK_SET_RATE_PARENT,
2530 .ops = &clk_branch2_ops,
2535 static struct clk_branch gcc_usb3_prim_phy_pipe_clk = {
2536 .halt_check = BRANCH_HALT_SKIP,
2538 .enable_reg = 0xf058,
2539 .enable_mask = BIT(0),
2540 .hw.init = &(struct clk_init_data){
2541 .name = "gcc_usb3_prim_phy_pipe_clk",
2542 .ops = &clk_branch2_ops,
2547 static struct clk_branch gcc_usb_phy_cfg_ahb2phy_clk = {
2548 .halt_reg = 0x6a004,
2549 .halt_check = BRANCH_HALT,
2550 .hwcg_reg = 0x6a004,
2553 .enable_reg = 0x6a004,
2554 .enable_mask = BIT(0),
2555 .hw.init = &(struct clk_init_data){
2556 .name = "gcc_usb_phy_cfg_ahb2phy_clk",
2557 .ops = &clk_branch2_ops,
2562 static struct clk_branch gcc_vdda_vs_clk = {
2563 .halt_reg = 0x7a00c,
2564 .halt_check = BRANCH_HALT,
2566 .enable_reg = 0x7a00c,
2567 .enable_mask = BIT(0),
2568 .hw.init = &(struct clk_init_data){
2569 .name = "gcc_vdda_vs_clk",
2570 .parent_hws = (const struct clk_hw*[]){
2571 &gcc_vsensor_clk_src.clkr.hw,
2574 .flags = CLK_SET_RATE_PARENT,
2575 .ops = &clk_branch2_ops,
2580 static struct clk_branch gcc_vddcx_vs_clk = {
2581 .halt_reg = 0x7a004,
2582 .halt_check = BRANCH_HALT,
2584 .enable_reg = 0x7a004,
2585 .enable_mask = BIT(0),
2586 .hw.init = &(struct clk_init_data){
2587 .name = "gcc_vddcx_vs_clk",
2588 .parent_hws = (const struct clk_hw*[]){
2589 &gcc_vsensor_clk_src.clkr.hw,
2592 .flags = CLK_SET_RATE_PARENT,
2593 .ops = &clk_branch2_ops,
2598 static struct clk_branch gcc_vddmx_vs_clk = {
2599 .halt_reg = 0x7a008,
2600 .halt_check = BRANCH_HALT,
2602 .enable_reg = 0x7a008,
2603 .enable_mask = BIT(0),
2604 .hw.init = &(struct clk_init_data){
2605 .name = "gcc_vddmx_vs_clk",
2606 .parent_hws = (const struct clk_hw*[]){
2607 &gcc_vsensor_clk_src.clkr.hw,
2610 .flags = CLK_SET_RATE_PARENT,
2611 .ops = &clk_branch2_ops,
2617 static struct clk_branch gcc_video_axi_clk = {
2619 .halt_check = BRANCH_HALT,
2621 .enable_reg = 0xb01c,
2622 .enable_mask = BIT(0),
2623 .hw.init = &(struct clk_init_data){
2624 .name = "gcc_video_axi_clk",
2625 .ops = &clk_branch2_ops,
2630 static struct clk_branch gcc_vs_ctrl_ahb_clk = {
2631 .halt_reg = 0x7a014,
2632 .halt_check = BRANCH_HALT,
2633 .hwcg_reg = 0x7a014,
2636 .enable_reg = 0x7a014,
2637 .enable_mask = BIT(0),
2638 .hw.init = &(struct clk_init_data){
2639 .name = "gcc_vs_ctrl_ahb_clk",
2640 .ops = &clk_branch2_ops,
2645 static struct clk_branch gcc_vs_ctrl_clk = {
2646 .halt_reg = 0x7a010,
2647 .halt_check = BRANCH_HALT,
2649 .enable_reg = 0x7a010,
2650 .enable_mask = BIT(0),
2651 .hw.init = &(struct clk_init_data){
2652 .name = "gcc_vs_ctrl_clk",
2653 .parent_hws = (const struct clk_hw*[]){
2654 &gcc_vs_ctrl_clk_src.clkr.hw,
2657 .flags = CLK_SET_RATE_PARENT,
2658 .ops = &clk_branch2_ops,
2663 static struct gdsc pcie_0_gdsc = {
2666 .name = "pcie_0_gdsc",
2668 .pwrsts = PWRSTS_OFF_ON,
2671 static struct gdsc ufs_phy_gdsc = {
2674 .name = "ufs_phy_gdsc",
2676 .pwrsts = PWRSTS_OFF_ON,
2679 static struct gdsc usb30_prim_gdsc = {
2682 .name = "usb30_prim_gdsc",
2684 .pwrsts = PWRSTS_OFF_ON,
2687 static struct gdsc hlos1_vote_aggre_noc_mmu_audio_tbu_gdsc = {
2690 .name = "hlos1_vote_aggre_noc_mmu_audio_tbu_gdsc",
2692 .pwrsts = PWRSTS_OFF_ON,
2696 static struct gdsc hlos1_vote_aggre_noc_mmu_pcie_tbu_gdsc = {
2699 .name = "hlos1_vote_aggre_noc_mmu_pcie_tbu_gdsc",
2701 .pwrsts = PWRSTS_OFF_ON,
2705 static struct gdsc hlos1_vote_aggre_noc_mmu_tbu1_gdsc = {
2708 .name = "hlos1_vote_aggre_noc_mmu_tbu1_gdsc",
2710 .pwrsts = PWRSTS_OFF_ON,
2714 static struct gdsc hlos1_vote_aggre_noc_mmu_tbu2_gdsc = {
2717 .name = "hlos1_vote_aggre_noc_mmu_tbu2_gdsc",
2719 .pwrsts = PWRSTS_OFF_ON,
2723 static struct gdsc hlos1_vote_mmnoc_mmu_tbu_hf0_gdsc = {
2726 .name = "hlos1_vote_mmnoc_mmu_tbu_hf0_gdsc",
2728 .pwrsts = PWRSTS_OFF_ON,
2732 static struct gdsc hlos1_vote_mmnoc_mmu_tbu_hf1_gdsc = {
2735 .name = "hlos1_vote_mmnoc_mmu_tbu_hf1_gdsc",
2737 .pwrsts = PWRSTS_OFF_ON,
2741 static struct gdsc hlos1_vote_mmnoc_mmu_tbu_sf_gdsc = {
2744 .name = "hlos1_vote_mmnoc_mmu_tbu_sf_gdsc",
2746 .pwrsts = PWRSTS_OFF_ON,
2750 static struct clk_hw *gcc_sm7150_hws[] = {
2751 [GCC_GPLL0_MAIN_DIV_CDIV] = &gcc_pll0_main_div_cdiv.hw,
2754 static struct clk_regmap *gcc_sm7150_clocks[] = {
2755 [GCC_AGGRE_NOC_PCIE_TBU_CLK] = &gcc_aggre_noc_pcie_tbu_clk.clkr,
2756 [GCC_AGGRE_UFS_PHY_AXI_CLK] = &gcc_aggre_ufs_phy_axi_clk.clkr,
2757 [GCC_AGGRE_UFS_PHY_AXI_HW_CTL_CLK] =
2758 &gcc_aggre_ufs_phy_axi_hw_ctl_clk.clkr,
2759 [GCC_AGGRE_USB3_PRIM_AXI_CLK] = &gcc_aggre_usb3_prim_axi_clk.clkr,
2760 [GCC_APC_VS_CLK] = &gcc_apc_vs_clk.clkr,
2761 [GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr,
2762 [GCC_CAMERA_HF_AXI_CLK] = &gcc_camera_hf_axi_clk.clkr,
2763 [GCC_CAMERA_SF_AXI_CLK] = &gcc_camera_sf_axi_clk.clkr,
2764 [GCC_CE1_AHB_CLK] = &gcc_ce1_ahb_clk.clkr,
2765 [GCC_CE1_AXI_CLK] = &gcc_ce1_axi_clk.clkr,
2766 [GCC_CE1_CLK] = &gcc_ce1_clk.clkr,
2767 [GCC_CFG_NOC_USB3_PRIM_AXI_CLK] = &gcc_cfg_noc_usb3_prim_axi_clk.clkr,
2768 [GCC_CPUSS_AHB_CLK] = &gcc_cpuss_ahb_clk.clkr,
2769 [GCC_CPUSS_AHB_CLK_SRC] = &gcc_cpuss_ahb_clk_src.clkr,
2770 [GCC_CPUSS_RBCPR_CLK] = &gcc_cpuss_rbcpr_clk.clkr,
2771 [GCC_CPUSS_RBCPR_CLK_SRC] = &gcc_cpuss_rbcpr_clk_src.clkr,
2772 [GCC_DDRSS_GPU_AXI_CLK] = &gcc_ddrss_gpu_axi_clk.clkr,
2773 [GCC_DISP_GPLL0_CLK_SRC] = &gcc_disp_gpll0_clk_src.clkr,
2774 [GCC_DISP_GPLL0_DIV_CLK_SRC] = &gcc_disp_gpll0_div_clk_src.clkr,
2775 [GCC_DISP_HF_AXI_CLK] = &gcc_disp_hf_axi_clk.clkr,
2776 [GCC_DISP_SF_AXI_CLK] = &gcc_disp_sf_axi_clk.clkr,
2777 [GCC_GP1_CLK] = &gcc_gp1_clk.clkr,
2778 [GCC_GP1_CLK_SRC] = &gcc_gp1_clk_src.clkr,
2779 [GCC_GP2_CLK] = &gcc_gp2_clk.clkr,
2780 [GCC_GP2_CLK_SRC] = &gcc_gp2_clk_src.clkr,
2781 [GCC_GP3_CLK] = &gcc_gp3_clk.clkr,
2782 [GCC_GP3_CLK_SRC] = &gcc_gp3_clk_src.clkr,
2783 [GCC_GPU_GPLL0_CLK_SRC] = &gcc_gpu_gpll0_clk_src.clkr,
2784 [GCC_GPU_GPLL0_DIV_CLK_SRC] = &gcc_gpu_gpll0_div_clk_src.clkr,
2785 [GCC_GPU_MEMNOC_GFX_CLK] = &gcc_gpu_memnoc_gfx_clk.clkr,
2786 [GCC_GPU_SNOC_DVM_GFX_CLK] = &gcc_gpu_snoc_dvm_gfx_clk.clkr,
2787 [GCC_GPU_VS_CLK] = &gcc_gpu_vs_clk.clkr,
2788 [GCC_NPU_AXI_CLK] = &gcc_npu_axi_clk.clkr,
2789 [GCC_NPU_CFG_AHB_CLK] = &gcc_npu_cfg_ahb_clk.clkr,
2790 [GCC_NPU_GPLL0_CLK_SRC] = &gcc_npu_gpll0_clk_src.clkr,
2791 [GCC_NPU_GPLL0_DIV_CLK_SRC] = &gcc_npu_gpll0_div_clk_src.clkr,
2792 [GCC_PCIE_0_AUX_CLK] = &gcc_pcie_0_aux_clk.clkr,
2793 [GCC_PCIE_0_AUX_CLK_SRC] = &gcc_pcie_0_aux_clk_src.clkr,
2794 [GCC_PCIE_0_CFG_AHB_CLK] = &gcc_pcie_0_cfg_ahb_clk.clkr,
2795 [GCC_PCIE_0_CLKREF_CLK] = &gcc_pcie_0_clkref_clk.clkr,
2796 [GCC_PCIE_0_MSTR_AXI_CLK] = &gcc_pcie_0_mstr_axi_clk.clkr,
2797 [GCC_PCIE_0_PIPE_CLK] = &gcc_pcie_0_pipe_clk.clkr,
2798 [GCC_PCIE_0_SLV_AXI_CLK] = &gcc_pcie_0_slv_axi_clk.clkr,
2799 [GCC_PCIE_0_SLV_Q2A_AXI_CLK] = &gcc_pcie_0_slv_q2a_axi_clk.clkr,
2800 [GCC_PCIE_PHY_AUX_CLK] = &gcc_pcie_phy_aux_clk.clkr,
2801 [GCC_PCIE_PHY_REFGEN_CLK] = &gcc_pcie_phy_refgen_clk.clkr,
2802 [GCC_PCIE_PHY_REFGEN_CLK_SRC] = &gcc_pcie_phy_refgen_clk_src.clkr,
2803 [GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr,
2804 [GCC_PDM2_CLK_SRC] = &gcc_pdm2_clk_src.clkr,
2805 [GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr,
2806 [GCC_PDM_XO4_CLK] = &gcc_pdm_xo4_clk.clkr,
2807 [GCC_PRNG_AHB_CLK] = &gcc_prng_ahb_clk.clkr,
2808 [GCC_QUPV3_WRAP0_CORE_2X_CLK] = &gcc_qupv3_wrap0_core_2x_clk.clkr,
2809 [GCC_QUPV3_WRAP0_CORE_CLK] = &gcc_qupv3_wrap0_core_clk.clkr,
2810 [GCC_QUPV3_WRAP0_S0_CLK] = &gcc_qupv3_wrap0_s0_clk.clkr,
2811 [GCC_QUPV3_WRAP0_S0_CLK_SRC] = &gcc_qupv3_wrap0_s0_clk_src.clkr,
2812 [GCC_QUPV3_WRAP0_S1_CLK] = &gcc_qupv3_wrap0_s1_clk.clkr,
2813 [GCC_QUPV3_WRAP0_S1_CLK_SRC] = &gcc_qupv3_wrap0_s1_clk_src.clkr,
2814 [GCC_QUPV3_WRAP0_S2_CLK] = &gcc_qupv3_wrap0_s2_clk.clkr,
2815 [GCC_QUPV3_WRAP0_S2_CLK_SRC] = &gcc_qupv3_wrap0_s2_clk_src.clkr,
2816 [GCC_QUPV3_WRAP0_S3_CLK] = &gcc_qupv3_wrap0_s3_clk.clkr,
2817 [GCC_QUPV3_WRAP0_S3_CLK_SRC] = &gcc_qupv3_wrap0_s3_clk_src.clkr,
2818 [GCC_QUPV3_WRAP0_S4_CLK] = &gcc_qupv3_wrap0_s4_clk.clkr,
2819 [GCC_QUPV3_WRAP0_S4_CLK_SRC] = &gcc_qupv3_wrap0_s4_clk_src.clkr,
2820 [GCC_QUPV3_WRAP0_S5_CLK] = &gcc_qupv3_wrap0_s5_clk.clkr,
2821 [GCC_QUPV3_WRAP0_S5_CLK_SRC] = &gcc_qupv3_wrap0_s5_clk_src.clkr,
2822 [GCC_QUPV3_WRAP0_S6_CLK] = &gcc_qupv3_wrap0_s6_clk.clkr,
2823 [GCC_QUPV3_WRAP0_S6_CLK_SRC] = &gcc_qupv3_wrap0_s6_clk_src.clkr,
2824 [GCC_QUPV3_WRAP0_S7_CLK] = &gcc_qupv3_wrap0_s7_clk.clkr,
2825 [GCC_QUPV3_WRAP0_S7_CLK_SRC] = &gcc_qupv3_wrap0_s7_clk_src.clkr,
2826 [GCC_QUPV3_WRAP1_CORE_2X_CLK] = &gcc_qupv3_wrap1_core_2x_clk.clkr,
2827 [GCC_QUPV3_WRAP1_CORE_CLK] = &gcc_qupv3_wrap1_core_clk.clkr,
2828 [GCC_QUPV3_WRAP1_S0_CLK] = &gcc_qupv3_wrap1_s0_clk.clkr,
2829 [GCC_QUPV3_WRAP1_S0_CLK_SRC] = &gcc_qupv3_wrap1_s0_clk_src.clkr,
2830 [GCC_QUPV3_WRAP1_S1_CLK] = &gcc_qupv3_wrap1_s1_clk.clkr,
2831 [GCC_QUPV3_WRAP1_S1_CLK_SRC] = &gcc_qupv3_wrap1_s1_clk_src.clkr,
2832 [GCC_QUPV3_WRAP1_S2_CLK] = &gcc_qupv3_wrap1_s2_clk.clkr,
2833 [GCC_QUPV3_WRAP1_S2_CLK_SRC] = &gcc_qupv3_wrap1_s2_clk_src.clkr,
2834 [GCC_QUPV3_WRAP1_S3_CLK] = &gcc_qupv3_wrap1_s3_clk.clkr,
2835 [GCC_QUPV3_WRAP1_S3_CLK_SRC] = &gcc_qupv3_wrap1_s3_clk_src.clkr,
2836 [GCC_QUPV3_WRAP1_S4_CLK] = &gcc_qupv3_wrap1_s4_clk.clkr,
2837 [GCC_QUPV3_WRAP1_S4_CLK_SRC] = &gcc_qupv3_wrap1_s4_clk_src.clkr,
2838 [GCC_QUPV3_WRAP1_S5_CLK] = &gcc_qupv3_wrap1_s5_clk.clkr,
2839 [GCC_QUPV3_WRAP1_S5_CLK_SRC] = &gcc_qupv3_wrap1_s5_clk_src.clkr,
2840 [GCC_QUPV3_WRAP1_S6_CLK] = &gcc_qupv3_wrap1_s6_clk.clkr,
2841 [GCC_QUPV3_WRAP1_S6_CLK_SRC] = &gcc_qupv3_wrap1_s6_clk_src.clkr,
2842 [GCC_QUPV3_WRAP1_S7_CLK] = &gcc_qupv3_wrap1_s7_clk.clkr,
2843 [GCC_QUPV3_WRAP1_S7_CLK_SRC] = &gcc_qupv3_wrap1_s7_clk_src.clkr,
2844 [GCC_QUPV3_WRAP_0_M_AHB_CLK] = &gcc_qupv3_wrap_0_m_ahb_clk.clkr,
2845 [GCC_QUPV3_WRAP_0_S_AHB_CLK] = &gcc_qupv3_wrap_0_s_ahb_clk.clkr,
2846 [GCC_QUPV3_WRAP_1_M_AHB_CLK] = &gcc_qupv3_wrap_1_m_ahb_clk.clkr,
2847 [GCC_QUPV3_WRAP_1_S_AHB_CLK] = &gcc_qupv3_wrap_1_s_ahb_clk.clkr,
2848 [GCC_SDCC1_AHB_CLK] = &gcc_sdcc1_ahb_clk.clkr,
2849 [GCC_SDCC1_APPS_CLK] = &gcc_sdcc1_apps_clk.clkr,
2850 [GCC_SDCC1_APPS_CLK_SRC] = &gcc_sdcc1_apps_clk_src.clkr,
2851 [GCC_SDCC1_ICE_CORE_CLK] = &gcc_sdcc1_ice_core_clk.clkr,
2852 [GCC_SDCC1_ICE_CORE_CLK_SRC] = &gcc_sdcc1_ice_core_clk_src.clkr,
2853 [GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr,
2854 [GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr,
2855 [GCC_SDCC2_APPS_CLK_SRC] = &gcc_sdcc2_apps_clk_src.clkr,
2856 [GCC_SDCC4_AHB_CLK] = &gcc_sdcc4_ahb_clk.clkr,
2857 [GCC_SDCC4_APPS_CLK] = &gcc_sdcc4_apps_clk.clkr,
2858 [GCC_SDCC4_APPS_CLK_SRC] = &gcc_sdcc4_apps_clk_src.clkr,
2859 [GCC_SYS_NOC_CPUSS_AHB_CLK] = &gcc_sys_noc_cpuss_ahb_clk.clkr,
2860 [GCC_TSIF_AHB_CLK] = &gcc_tsif_ahb_clk.clkr,
2861 [GCC_TSIF_INACTIVITY_TIMERS_CLK] = &gcc_tsif_inactivity_timers_clk.clkr,
2862 [GCC_TSIF_REF_CLK] = &gcc_tsif_ref_clk.clkr,
2863 [GCC_TSIF_REF_CLK_SRC] = &gcc_tsif_ref_clk_src.clkr,
2864 [GCC_UFS_MEM_CLKREF_CLK] = &gcc_ufs_mem_clkref_clk.clkr,
2865 [GCC_UFS_PHY_AHB_CLK] = &gcc_ufs_phy_ahb_clk.clkr,
2866 [GCC_UFS_PHY_AXI_CLK] = &gcc_ufs_phy_axi_clk.clkr,
2867 [GCC_UFS_PHY_AXI_CLK_SRC] = &gcc_ufs_phy_axi_clk_src.clkr,
2868 [GCC_UFS_PHY_AXI_HW_CTL_CLK] = &gcc_ufs_phy_axi_hw_ctl_clk.clkr,
2869 [GCC_UFS_PHY_ICE_CORE_CLK] = &gcc_ufs_phy_ice_core_clk.clkr,
2870 [GCC_UFS_PHY_ICE_CORE_CLK_SRC] = &gcc_ufs_phy_ice_core_clk_src.clkr,
2871 [GCC_UFS_PHY_ICE_CORE_HW_CTL_CLK] =
2872 &gcc_ufs_phy_ice_core_hw_ctl_clk.clkr,
2873 [GCC_UFS_PHY_PHY_AUX_CLK] = &gcc_ufs_phy_phy_aux_clk.clkr,
2874 [GCC_UFS_PHY_PHY_AUX_CLK_SRC] = &gcc_ufs_phy_phy_aux_clk_src.clkr,
2875 [GCC_UFS_PHY_PHY_AUX_HW_CTL_CLK] = &gcc_ufs_phy_phy_aux_hw_ctl_clk.clkr,
2876 [GCC_UFS_PHY_RX_SYMBOL_0_CLK] = &gcc_ufs_phy_rx_symbol_0_clk.clkr,
2877 [GCC_UFS_PHY_TX_SYMBOL_0_CLK] = &gcc_ufs_phy_tx_symbol_0_clk.clkr,
2878 [GCC_UFS_PHY_UNIPRO_CORE_CLK] = &gcc_ufs_phy_unipro_core_clk.clkr,
2879 [GCC_UFS_PHY_UNIPRO_CORE_CLK_SRC] =
2880 &gcc_ufs_phy_unipro_core_clk_src.clkr,
2881 [GCC_UFS_PHY_UNIPRO_CORE_HW_CTL_CLK] =
2882 &gcc_ufs_phy_unipro_core_hw_ctl_clk.clkr,
2883 [GCC_USB30_PRIM_MASTER_CLK] = &gcc_usb30_prim_master_clk.clkr,
2884 [GCC_USB30_PRIM_MASTER_CLK_SRC] = &gcc_usb30_prim_master_clk_src.clkr,
2885 [GCC_USB30_PRIM_MOCK_UTMI_CLK] = &gcc_usb30_prim_mock_utmi_clk.clkr,
2886 [GCC_USB30_PRIM_MOCK_UTMI_CLK_SRC] =
2887 &gcc_usb30_prim_mock_utmi_clk_src.clkr,
2888 [GCC_USB30_PRIM_SLEEP_CLK] = &gcc_usb30_prim_sleep_clk.clkr,
2889 [GCC_USB3_PRIM_CLKREF_CLK] = &gcc_usb3_prim_clkref_clk.clkr,
2890 [GCC_USB3_PRIM_PHY_AUX_CLK] = &gcc_usb3_prim_phy_aux_clk.clkr,
2891 [GCC_USB3_PRIM_PHY_AUX_CLK_SRC] = &gcc_usb3_prim_phy_aux_clk_src.clkr,
2892 [GCC_USB3_PRIM_PHY_COM_AUX_CLK] = &gcc_usb3_prim_phy_com_aux_clk.clkr,
2893 [GCC_USB3_PRIM_PHY_PIPE_CLK] = &gcc_usb3_prim_phy_pipe_clk.clkr,
2894 [GCC_USB_PHY_CFG_AHB2PHY_CLK] = &gcc_usb_phy_cfg_ahb2phy_clk.clkr,
2895 [GCC_VDDA_VS_CLK] = &gcc_vdda_vs_clk.clkr,
2896 [GCC_VDDCX_VS_CLK] = &gcc_vddcx_vs_clk.clkr,
2897 [GCC_VDDMX_VS_CLK] = &gcc_vddmx_vs_clk.clkr,
2898 [GCC_VIDEO_AXI_CLK] = &gcc_video_axi_clk.clkr,
2899 [GCC_VS_CTRL_AHB_CLK] = &gcc_vs_ctrl_ahb_clk.clkr,
2900 [GCC_VS_CTRL_CLK] = &gcc_vs_ctrl_clk.clkr,
2901 [GCC_VS_CTRL_CLK_SRC] = &gcc_vs_ctrl_clk_src.clkr,
2902 [GCC_VSENSOR_CLK_SRC] = &gcc_vsensor_clk_src.clkr,
2903 [GPLL0] = &gpll0.clkr,
2904 [GPLL0_OUT_EVEN] = &gpll0_out_even.clkr,
2905 [GPLL6] = &gpll6.clkr,
2906 [GPLL7] = &gpll7.clkr,
2909 static const struct qcom_reset_map gcc_sm7150_resets[] = {
2910 [GCC_PCIE_0_BCR] = { 0x6b000 },
2911 [GCC_PCIE_PHY_BCR] = { 0x6f000 },
2912 [GCC_PCIE_PHY_COM_BCR] = { 0x6f010 },
2913 [GCC_UFS_PHY_BCR] = { 0x77000 },
2914 [GCC_USB30_PRIM_BCR] = { 0xf000 },
2915 [GCC_USB3_DP_PHY_PRIM_BCR] = { 0x50008 },
2916 [GCC_USB3_DP_PHY_SEC_BCR] = { 0x50014 },
2917 [GCC_USB3_PHY_PRIM_BCR] = { 0x50000 },
2918 [GCC_USB3_PHY_SEC_BCR] = { 0x5000c },
2919 [GCC_QUSB2PHY_PRIM_BCR] = { 0x26000 },
2920 [GCC_VIDEO_AXI_CLK_BCR] = { 0xb01c, 2 },
2923 static const struct clk_rcg_dfs_data gcc_sm7150_dfs_desc[] = {
2924 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s0_clk_src),
2925 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s1_clk_src),
2926 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s2_clk_src),
2927 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s3_clk_src),
2928 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s4_clk_src),
2929 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s5_clk_src),
2930 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s6_clk_src),
2931 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s7_clk_src),
2932 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s0_clk_src),
2933 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s1_clk_src),
2934 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s2_clk_src),
2935 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s3_clk_src),
2936 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s4_clk_src),
2937 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s5_clk_src),
2938 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s6_clk_src),
2939 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s7_clk_src),
2942 static struct gdsc *gcc_sm7150_gdscs[] = {
2943 [PCIE_0_GDSC] = &pcie_0_gdsc,
2944 [UFS_PHY_GDSC] = &ufs_phy_gdsc,
2945 [USB30_PRIM_GDSC] = &usb30_prim_gdsc,
2946 [HLOS1_VOTE_AGGRE_NOC_MMU_AUDIO_TBU_GDSC] =
2947 &hlos1_vote_aggre_noc_mmu_audio_tbu_gdsc,
2948 [HLOS1_VOTE_AGGRE_NOC_MMU_PCIE_TBU_GDSC] =
2949 &hlos1_vote_aggre_noc_mmu_pcie_tbu_gdsc,
2950 [HLOS1_VOTE_AGGRE_NOC_MMU_TBU1_GDSC] =
2951 &hlos1_vote_aggre_noc_mmu_tbu1_gdsc,
2952 [HLOS1_VOTE_AGGRE_NOC_MMU_TBU2_GDSC] =
2953 &hlos1_vote_aggre_noc_mmu_tbu2_gdsc,
2954 [HLOS1_VOTE_MMNOC_MMU_TBU_HF0_GDSC] =
2955 &hlos1_vote_mmnoc_mmu_tbu_hf0_gdsc,
2956 [HLOS1_VOTE_MMNOC_MMU_TBU_HF1_GDSC] =
2957 &hlos1_vote_mmnoc_mmu_tbu_hf1_gdsc,
2958 [HLOS1_VOTE_MMNOC_MMU_TBU_SF_GDSC] = &hlos1_vote_mmnoc_mmu_tbu_sf_gdsc,
2961 static const struct regmap_config gcc_sm7150_regmap_config = {
2965 .max_register = 0x1820b0,
2969 static const struct qcom_cc_desc gcc_sm7150_desc = {
2970 .config = &gcc_sm7150_regmap_config,
2971 .clk_hws = gcc_sm7150_hws,
2972 .num_clk_hws = ARRAY_SIZE(gcc_sm7150_hws),
2973 .clks = gcc_sm7150_clocks,
2974 .num_clks = ARRAY_SIZE(gcc_sm7150_clocks),
2975 .resets = gcc_sm7150_resets,
2976 .num_resets = ARRAY_SIZE(gcc_sm7150_resets),
2977 .gdscs = gcc_sm7150_gdscs,
2978 .num_gdscs = ARRAY_SIZE(gcc_sm7150_gdscs),
2981 static const struct of_device_id gcc_sm7150_match_table[] = {
2982 { .compatible = "qcom,sm7150-gcc" },
2985 MODULE_DEVICE_TABLE(of, gcc_sm7150_match_table);
2987 static int gcc_sm7150_probe(struct platform_device *pdev)
2989 struct regmap *regmap;
2992 regmap = qcom_cc_map(pdev, &gcc_sm7150_desc);
2994 return PTR_ERR(regmap);
2997 * Disable the GPLL0 active input to MM blocks, NPU
2998 * and GPU via MISC registers.
3000 regmap_update_bits(regmap, 0x09ffc, 0x3, 0x3);
3001 regmap_update_bits(regmap, 0x4d110, 0x3, 0x3);
3002 regmap_update_bits(regmap, 0x71028, 0x3, 0x3);
3005 * Keep the critical clocks always-ON
3006 * GCC_CPUSS_GNOC_CLK, GCC_VIDEO_AHB_CLK, GCC_CAMERA_AHB_CLK,
3007 * GCC_DISP_AHB_CLK, GCC_CAMERA_XO_CLK, GCC_VIDEO_XO_CLK,
3008 * GCC_DISP_XO_CLK, GCC_GPU_CFG_AHB_CLK
3010 regmap_update_bits(regmap, 0x48004, BIT(0), BIT(0));
3011 regmap_update_bits(regmap, 0x0b004, BIT(0), BIT(0));
3012 regmap_update_bits(regmap, 0x0b008, BIT(0), BIT(0));
3013 regmap_update_bits(regmap, 0x0b00c, BIT(0), BIT(0));
3014 regmap_update_bits(regmap, 0x0b02c, BIT(0), BIT(0));
3015 regmap_update_bits(regmap, 0x0b028, BIT(0), BIT(0));
3016 regmap_update_bits(regmap, 0x0b030, BIT(0), BIT(0));
3017 regmap_update_bits(regmap, 0x71004, BIT(0), BIT(0));
3019 ret = qcom_cc_register_rcg_dfs(regmap, gcc_sm7150_dfs_desc,
3020 ARRAY_SIZE(gcc_sm7150_dfs_desc));
3024 return qcom_cc_really_probe(pdev, &gcc_sm7150_desc, regmap);
3027 static struct platform_driver gcc_sm7150_driver = {
3028 .probe = gcc_sm7150_probe,
3030 .name = "gcc-sm7150",
3031 .of_match_table = gcc_sm7150_match_table,
3035 static int __init gcc_sm7150_init(void)
3037 return platform_driver_register(&gcc_sm7150_driver);
3039 subsys_initcall(gcc_sm7150_init);
3041 static void __exit gcc_sm7150_exit(void)
3043 platform_driver_unregister(&gcc_sm7150_driver);
3045 module_exit(gcc_sm7150_exit);
3047 MODULE_DESCRIPTION("Qualcomm SM7150 Global Clock Controller");
3048 MODULE_LICENSE("GPL");