1 // SPDX-License-Identifier: GPL-2.0-only
3 * Copyright (c) 2022, Qualcomm Innovation Center, Inc. All rights reserved.
6 #include <linux/clk-provider.h>
7 #include <linux/module.h>
8 #include <linux/of_device.h>
9 #include <linux/regmap.h>
11 #include <dt-bindings/clock/qcom,qdu1000-gcc.h>
13 #include "clk-alpha-pll.h"
14 #include "clk-branch.h"
16 #include "clk-regmap.h"
17 #include "clk-regmap-divider.h"
18 #include "clk-regmap-mux.h"
19 #include "clk-regmap-phy-mux.h"
37 P_USB3_PHY_WRAPPER_GCC_USB30_PIPE_CLK,
43 DT_PCIE_0_PIPE_CLK_IDX,
44 DT_PCIE_0_PHY_AUX_CLK_IDX,
45 DT_USB3_PHY_WRAPPER_PIPE_CLK_IDX,
48 static struct clk_alpha_pll gcc_gpll0 = {
50 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
52 .enable_reg = 0x62018,
53 .enable_mask = BIT(0),
54 .hw.init = &(const struct clk_init_data) {
56 .parent_data = &(const struct clk_parent_data) {
60 .ops = &clk_alpha_pll_fixed_lucid_evo_ops,
65 static const struct clk_div_table post_div_table_gcc_gpll0_out_even[] = {
69 static struct clk_alpha_pll_postdiv gcc_gpll0_out_even = {
72 .post_div_table = post_div_table_gcc_gpll0_out_even,
73 .num_post_div = ARRAY_SIZE(post_div_table_gcc_gpll0_out_even),
75 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
76 .clkr.hw.init = &(const struct clk_init_data) {
77 .name = "gcc_gpll0_out_even",
78 .parent_hws = (const struct clk_hw*[]) {
82 .ops = &clk_alpha_pll_postdiv_lucid_evo_ops,
86 static struct clk_alpha_pll gcc_gpll1 = {
88 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
90 .enable_reg = 0x62018,
91 .enable_mask = BIT(1),
92 .hw.init = &(const struct clk_init_data) {
94 .parent_data = &(const struct clk_parent_data) {
98 .ops = &clk_alpha_pll_fixed_lucid_evo_ops,
103 static struct clk_alpha_pll_postdiv gcc_gpll1_out_even = {
105 .post_div_shift = 10,
106 .post_div_table = post_div_table_gcc_gpll0_out_even,
107 .num_post_div = ARRAY_SIZE(post_div_table_gcc_gpll0_out_even),
109 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
110 .clkr.hw.init = &(const struct clk_init_data) {
111 .name = "gcc_gpll1_out_even",
112 .parent_hws = (const struct clk_hw*[]) {
116 .ops = &clk_alpha_pll_postdiv_lucid_evo_ops,
120 static struct clk_alpha_pll gcc_gpll2 = {
122 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
124 .enable_reg = 0x62018,
125 .enable_mask = BIT(2),
126 .hw.init = &(const struct clk_init_data) {
128 .parent_data = &(const struct clk_parent_data) {
129 .index = DT_TCXO_IDX,
132 .ops = &clk_alpha_pll_fixed_lucid_evo_ops,
137 static struct clk_alpha_pll_postdiv gcc_gpll2_out_even = {
139 .post_div_shift = 10,
140 .post_div_table = post_div_table_gcc_gpll0_out_even,
141 .num_post_div = ARRAY_SIZE(post_div_table_gcc_gpll0_out_even),
143 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
144 .clkr.hw.init = &(const struct clk_init_data) {
145 .name = "gcc_gpll2_out_even",
146 .parent_hws = (const struct clk_hw*[]) {
150 .ops = &clk_alpha_pll_postdiv_lucid_evo_ops,
154 static struct clk_alpha_pll gcc_gpll3 = {
156 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
158 .enable_reg = 0x62018,
159 .enable_mask = BIT(3),
160 .hw.init = &(const struct clk_init_data) {
162 .parent_data = &(const struct clk_parent_data) {
163 .index = DT_TCXO_IDX,
166 .ops = &clk_alpha_pll_fixed_lucid_evo_ops,
171 static struct clk_alpha_pll gcc_gpll4 = {
173 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
175 .enable_reg = 0x62018,
176 .enable_mask = BIT(4),
177 .hw.init = &(const struct clk_init_data) {
179 .parent_data = &(const struct clk_parent_data) {
180 .index = DT_TCXO_IDX,
183 .ops = &clk_alpha_pll_fixed_lucid_evo_ops,
188 static struct clk_alpha_pll gcc_gpll5 = {
190 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
192 .enable_reg = 0x62018,
193 .enable_mask = BIT(5),
194 .hw.init = &(const struct clk_init_data) {
196 .parent_data = &(const struct clk_parent_data) {
197 .index = DT_TCXO_IDX,
200 .ops = &clk_alpha_pll_fixed_lucid_evo_ops,
205 static struct clk_alpha_pll_postdiv gcc_gpll5_out_even = {
207 .post_div_shift = 10,
208 .post_div_table = post_div_table_gcc_gpll0_out_even,
209 .num_post_div = ARRAY_SIZE(post_div_table_gcc_gpll0_out_even),
211 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
212 .clkr.hw.init = &(const struct clk_init_data) {
213 .name = "gcc_gpll5_out_even",
214 .parent_hws = (const struct clk_hw*[]) {
218 .ops = &clk_alpha_pll_postdiv_lucid_evo_ops,
222 static struct clk_alpha_pll gcc_gpll6 = {
224 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
226 .enable_reg = 0x62018,
227 .enable_mask = BIT(6),
228 .hw.init = &(const struct clk_init_data) {
230 .parent_data = &(const struct clk_parent_data) {
231 .index = DT_TCXO_IDX,
234 .ops = &clk_alpha_pll_fixed_lucid_evo_ops,
239 static struct clk_alpha_pll gcc_gpll7 = {
241 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
243 .enable_reg = 0x62018,
244 .enable_mask = BIT(7),
245 .hw.init = &(const struct clk_init_data) {
247 .parent_data = &(const struct clk_parent_data) {
248 .index = DT_TCXO_IDX,
251 .ops = &clk_alpha_pll_fixed_lucid_evo_ops,
256 static struct clk_alpha_pll gcc_gpll8 = {
258 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
260 .enable_reg = 0x62018,
261 .enable_mask = BIT(8),
262 .hw.init = &(const struct clk_init_data) {
264 .parent_data = &(const struct clk_parent_data) {
265 .index = DT_TCXO_IDX,
268 .ops = &clk_alpha_pll_fixed_lucid_evo_ops,
273 static const struct parent_map gcc_parent_map_0[] = {
275 { P_GCC_GPLL0_OUT_MAIN, 1 },
276 { P_GCC_GPLL0_OUT_EVEN, 6 },
279 static const struct clk_parent_data gcc_parent_data_0[] = {
280 { .index = DT_TCXO_IDX },
281 { .hw = &gcc_gpll0.clkr.hw },
282 { .hw = &gcc_gpll0_out_even.clkr.hw },
285 static const struct parent_map gcc_parent_map_1[] = {
287 { P_GCC_GPLL0_OUT_MAIN, 1 },
289 { P_GCC_GPLL0_OUT_EVEN, 6 },
292 static const struct clk_parent_data gcc_parent_data_1[] = {
293 { .index = DT_TCXO_IDX },
294 { .hw = &gcc_gpll0.clkr.hw },
295 { .index = DT_SLEEP_CLK_IDX },
296 { .hw = &gcc_gpll0_out_even.clkr.hw },
299 static const struct parent_map gcc_parent_map_2[] = {
301 { P_GCC_GPLL0_OUT_MAIN, 1 },
302 { P_GCC_GPLL5_OUT_MAIN, 3 },
303 { P_GCC_GPLL4_OUT_MAIN, 5 },
306 static const struct clk_parent_data gcc_parent_data_2[] = {
307 { .index = DT_TCXO_IDX },
308 { .hw = &gcc_gpll0.clkr.hw },
309 { .hw = &gcc_gpll5.clkr.hw },
310 { .hw = &gcc_gpll4.clkr.hw },
313 static const struct parent_map gcc_parent_map_3[] = {
318 static const struct clk_parent_data gcc_parent_data_3[] = {
319 { .index = DT_TCXO_IDX },
320 { .index = DT_SLEEP_CLK_IDX },
323 static const struct parent_map gcc_parent_map_4[] = {
325 { P_GCC_GPLL0_OUT_MAIN, 1 },
326 { P_GCC_GPLL2_OUT_MAIN, 2 },
327 { P_GCC_GPLL5_OUT_MAIN, 3 },
328 { P_GCC_GPLL1_OUT_MAIN, 4 },
329 { P_GCC_GPLL4_OUT_MAIN, 5 },
330 { P_GCC_GPLL3_OUT_MAIN, 6 },
333 static const struct clk_parent_data gcc_parent_data_4[] = {
334 { .index = DT_TCXO_IDX },
335 { .hw = &gcc_gpll0.clkr.hw },
336 { .hw = &gcc_gpll2.clkr.hw },
337 { .hw = &gcc_gpll5.clkr.hw },
338 { .hw = &gcc_gpll1.clkr.hw },
339 { .hw = &gcc_gpll4.clkr.hw },
340 { .hw = &gcc_gpll3.clkr.hw },
343 static const struct parent_map gcc_parent_map_5[] = {
345 { P_GCC_GPLL0_OUT_MAIN, 1 },
346 { P_GCC_GPLL2_OUT_MAIN, 2 },
347 { P_GCC_GPLL6_OUT_MAIN, 3 },
348 { P_GCC_GPLL1_OUT_MAIN, 4 },
349 { P_GCC_GPLL4_OUT_MAIN, 5 },
350 { P_GCC_GPLL3_OUT_MAIN, 6 },
353 static const struct clk_parent_data gcc_parent_data_5[] = {
354 { .index = DT_TCXO_IDX },
355 { .hw = &gcc_gpll0.clkr.hw },
356 { .hw = &gcc_gpll2.clkr.hw },
357 { .hw = &gcc_gpll6.clkr.hw },
358 { .hw = &gcc_gpll1.clkr.hw },
359 { .hw = &gcc_gpll4.clkr.hw },
360 { .hw = &gcc_gpll3.clkr.hw },
363 static const struct parent_map gcc_parent_map_6[] = {
364 { P_PCIE_0_PHY_AUX_CLK, 0 },
368 static const struct clk_parent_data gcc_parent_data_6[] = {
369 { .index = DT_PCIE_0_PHY_AUX_CLK_IDX },
370 { .index = DT_TCXO_IDX },
373 static const struct parent_map gcc_parent_map_7[] = {
374 { P_PCIE_0_PIPE_CLK, 0 },
378 static const struct clk_parent_data gcc_parent_data_7[] = {
379 { .index = DT_PCIE_0_PIPE_CLK_IDX },
380 { .index = DT_TCXO_IDX },
383 static const struct parent_map gcc_parent_map_8[] = {
385 { P_GCC_GPLL0_OUT_MAIN, 1 },
386 { P_GCC_GPLL8_OUT_MAIN, 2 },
387 { P_GCC_GPLL5_OUT_MAIN, 3 },
388 { P_GCC_GPLL4_OUT_MAIN, 5 },
391 static const struct clk_parent_data gcc_parent_data_8[] = {
392 { .index = DT_TCXO_IDX },
393 { .hw = &gcc_gpll0.clkr.hw },
394 { .hw = &gcc_gpll8.clkr.hw },
395 { .hw = &gcc_gpll5.clkr.hw },
396 { .hw = &gcc_gpll4.clkr.hw },
399 static const struct parent_map gcc_parent_map_9[] = {
401 { P_GCC_GPLL0_OUT_MAIN, 1 },
402 { P_GCC_GPLL2_OUT_MAIN, 2 },
403 { P_GCC_GPLL5_OUT_MAIN, 3 },
404 { P_GCC_GPLL7_OUT_MAIN, 4 },
405 { P_GCC_GPLL4_OUT_MAIN, 5 },
408 static const struct clk_parent_data gcc_parent_data_9[] = {
409 { .index = DT_TCXO_IDX },
410 { .hw = &gcc_gpll0.clkr.hw },
411 { .hw = &gcc_gpll2.clkr.hw },
412 { .hw = &gcc_gpll5.clkr.hw },
413 { .hw = &gcc_gpll7.clkr.hw },
414 { .hw = &gcc_gpll4.clkr.hw },
417 static const struct parent_map gcc_parent_map_10[] = {
418 { P_USB3_PHY_WRAPPER_GCC_USB30_PIPE_CLK, 0 },
422 static const struct clk_parent_data gcc_parent_data_10[] = {
423 { .index = DT_USB3_PHY_WRAPPER_PIPE_CLK_IDX },
424 { .index = DT_TCXO_IDX },
427 static struct clk_regmap_mux gcc_pcie_0_phy_aux_clk_src = {
431 .parent_map = gcc_parent_map_6,
433 .hw.init = &(const struct clk_init_data) {
434 .name = "gcc_pcie_0_phy_aux_clk_src",
435 .parent_data = gcc_parent_data_6,
436 .num_parents = ARRAY_SIZE(gcc_parent_data_6),
437 .ops = &clk_regmap_mux_closest_ops,
442 static struct clk_regmap_mux gcc_pcie_0_pipe_clk_src = {
446 .parent_map = gcc_parent_map_7,
448 .hw.init = &(const struct clk_init_data) {
449 .name = "gcc_pcie_0_pipe_clk_src",
450 .parent_data = gcc_parent_data_7,
451 .num_parents = ARRAY_SIZE(gcc_parent_data_7),
452 .ops = &clk_regmap_phy_mux_ops,
457 static struct clk_regmap_mux gcc_usb3_prim_phy_pipe_clk_src = {
461 .parent_map = gcc_parent_map_10,
463 .hw.init = &(const struct clk_init_data) {
464 .name = "gcc_usb3_prim_phy_pipe_clk_src",
465 .parent_data = gcc_parent_data_10,
466 .num_parents = ARRAY_SIZE(gcc_parent_data_10),
467 .ops = &clk_regmap_mux_closest_ops,
472 static const struct freq_tbl ftbl_gcc_aggre_noc_ecpri_dma_clk_src[] = {
473 F(466500000, P_GCC_GPLL5_OUT_MAIN, 2, 0, 0),
474 F(500000000, P_GCC_GPLL2_OUT_MAIN, 2, 0, 0),
478 static struct clk_rcg2 gcc_aggre_noc_ecpri_dma_clk_src = {
482 .parent_map = gcc_parent_map_4,
483 .freq_tbl = ftbl_gcc_aggre_noc_ecpri_dma_clk_src,
484 .clkr.hw.init = &(const struct clk_init_data) {
485 .name = "gcc_aggre_noc_ecpri_dma_clk_src",
486 .parent_data = gcc_parent_data_4,
487 .num_parents = ARRAY_SIZE(gcc_parent_data_4),
488 .ops = &clk_rcg2_ops,
492 static const struct freq_tbl ftbl_gcc_aggre_noc_ecpri_gsi_clk_src[] = {
493 F(250000000, P_GCC_GPLL2_OUT_MAIN, 4, 0, 0),
494 F(300000000, P_GCC_GPLL0_OUT_MAIN, 2, 0, 0),
498 static struct clk_rcg2 gcc_aggre_noc_ecpri_gsi_clk_src = {
502 .parent_map = gcc_parent_map_5,
503 .freq_tbl = ftbl_gcc_aggre_noc_ecpri_gsi_clk_src,
504 .clkr.hw.init = &(const struct clk_init_data) {
505 .name = "gcc_aggre_noc_ecpri_gsi_clk_src",
506 .parent_data = gcc_parent_data_5,
507 .num_parents = ARRAY_SIZE(gcc_parent_data_5),
508 .ops = &clk_rcg2_ops,
512 static const struct freq_tbl ftbl_gcc_gp1_clk_src[] = {
513 F(200000000, P_GCC_GPLL0_OUT_MAIN, 3, 0, 0),
517 static struct clk_rcg2 gcc_gp1_clk_src = {
521 .parent_map = gcc_parent_map_1,
522 .freq_tbl = ftbl_gcc_gp1_clk_src,
523 .clkr.hw.init = &(const struct clk_init_data) {
524 .name = "gcc_gp1_clk_src",
525 .parent_data = gcc_parent_data_1,
526 .num_parents = ARRAY_SIZE(gcc_parent_data_1),
527 .ops = &clk_rcg2_ops,
531 static struct clk_rcg2 gcc_gp2_clk_src = {
535 .parent_map = gcc_parent_map_1,
536 .freq_tbl = ftbl_gcc_gp1_clk_src,
537 .clkr.hw.init = &(const struct clk_init_data) {
538 .name = "gcc_gp2_clk_src",
539 .parent_data = gcc_parent_data_1,
540 .num_parents = ARRAY_SIZE(gcc_parent_data_1),
541 .ops = &clk_rcg2_ops,
545 static struct clk_rcg2 gcc_gp3_clk_src = {
549 .parent_map = gcc_parent_map_1,
550 .freq_tbl = ftbl_gcc_gp1_clk_src,
551 .clkr.hw.init = &(const struct clk_init_data) {
552 .name = "gcc_gp3_clk_src",
553 .parent_data = gcc_parent_data_1,
554 .num_parents = ARRAY_SIZE(gcc_parent_data_1),
555 .ops = &clk_rcg2_ops,
559 static const struct freq_tbl ftbl_gcc_pcie_0_aux_clk_src[] = {
560 F(19200000, P_BI_TCXO, 1, 0, 0),
564 static struct clk_rcg2 gcc_pcie_0_aux_clk_src = {
568 .parent_map = gcc_parent_map_3,
569 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
570 .clkr.hw.init = &(const struct clk_init_data) {
571 .name = "gcc_pcie_0_aux_clk_src",
572 .parent_data = gcc_parent_data_3,
573 .num_parents = ARRAY_SIZE(gcc_parent_data_3),
574 .ops = &clk_rcg2_ops,
578 static const struct freq_tbl ftbl_gcc_pcie_0_phy_rchng_clk_src[] = {
579 F(19200000, P_BI_TCXO, 1, 0, 0),
580 F(100000000, P_GCC_GPLL0_OUT_EVEN, 3, 0, 0),
584 static struct clk_rcg2 gcc_pcie_0_phy_rchng_clk_src = {
588 .parent_map = gcc_parent_map_0,
589 .freq_tbl = ftbl_gcc_pcie_0_phy_rchng_clk_src,
590 .clkr.hw.init = &(const struct clk_init_data) {
591 .name = "gcc_pcie_0_phy_rchng_clk_src",
592 .parent_data = gcc_parent_data_0,
593 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
594 .ops = &clk_rcg2_ops,
598 static const struct freq_tbl ftbl_gcc_pdm2_clk_src[] = {
599 F(60000000, P_GCC_GPLL0_OUT_MAIN, 10, 0, 0),
603 static struct clk_rcg2 gcc_pdm2_clk_src = {
607 .parent_map = gcc_parent_map_0,
608 .freq_tbl = ftbl_gcc_pdm2_clk_src,
609 .clkr.hw.init = &(const struct clk_init_data) {
610 .name = "gcc_pdm2_clk_src",
611 .parent_data = gcc_parent_data_0,
612 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
613 .ops = &clk_rcg2_ops,
617 static const struct freq_tbl ftbl_gcc_qupv3_wrap0_s0_clk_src[] = {
618 F(7372800, P_GCC_GPLL0_OUT_EVEN, 1, 384, 15625),
619 F(14745600, P_GCC_GPLL0_OUT_EVEN, 1, 768, 15625),
620 F(19200000, P_BI_TCXO, 1, 0, 0),
621 F(29491200, P_GCC_GPLL0_OUT_EVEN, 1, 1536, 15625),
622 F(32000000, P_GCC_GPLL0_OUT_EVEN, 1, 8, 75),
623 F(48000000, P_GCC_GPLL0_OUT_EVEN, 1, 4, 25),
624 F(64000000, P_GCC_GPLL0_OUT_EVEN, 1, 16, 75),
625 F(80000000, P_GCC_GPLL0_OUT_EVEN, 1, 4, 15),
626 F(96000000, P_GCC_GPLL0_OUT_EVEN, 1, 8, 25),
627 F(100000000, P_GCC_GPLL0_OUT_MAIN, 6, 0, 0),
631 static struct clk_init_data gcc_qupv3_wrap0_s0_clk_src_init = {
632 .name = "gcc_qupv3_wrap0_s0_clk_src",
633 .parent_data = gcc_parent_data_0,
634 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
635 .ops = &clk_rcg2_ops,
638 static struct clk_rcg2 gcc_qupv3_wrap0_s0_clk_src = {
642 .parent_map = gcc_parent_map_0,
643 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
644 .clkr.hw.init = &gcc_qupv3_wrap0_s0_clk_src_init,
647 static struct clk_init_data gcc_qupv3_wrap0_s1_clk_src_init = {
648 .name = "gcc_qupv3_wrap0_s1_clk_src",
649 .parent_data = gcc_parent_data_0,
650 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
651 .ops = &clk_rcg2_ops,
654 static struct clk_rcg2 gcc_qupv3_wrap0_s1_clk_src = {
658 .parent_map = gcc_parent_map_0,
659 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
660 .clkr.hw.init = &gcc_qupv3_wrap0_s1_clk_src_init,
663 static struct clk_init_data gcc_qupv3_wrap0_s2_clk_src_init = {
664 .name = "gcc_qupv3_wrap0_s2_clk_src",
665 .parent_data = gcc_parent_data_0,
666 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
667 .ops = &clk_rcg2_ops,
670 static struct clk_rcg2 gcc_qupv3_wrap0_s2_clk_src = {
674 .parent_map = gcc_parent_map_0,
675 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
676 .clkr.hw.init = &gcc_qupv3_wrap0_s2_clk_src_init,
679 static struct clk_init_data gcc_qupv3_wrap0_s3_clk_src_init = {
680 .name = "gcc_qupv3_wrap0_s3_clk_src",
681 .parent_data = gcc_parent_data_0,
682 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
683 .ops = &clk_rcg2_ops,
686 static struct clk_rcg2 gcc_qupv3_wrap0_s3_clk_src = {
690 .parent_map = gcc_parent_map_0,
691 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
692 .clkr.hw.init = &gcc_qupv3_wrap0_s3_clk_src_init,
695 static struct clk_init_data gcc_qupv3_wrap0_s4_clk_src_init = {
696 .name = "gcc_qupv3_wrap0_s4_clk_src",
697 .parent_data = gcc_parent_data_0,
698 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
699 .ops = &clk_rcg2_ops,
702 static struct clk_rcg2 gcc_qupv3_wrap0_s4_clk_src = {
706 .parent_map = gcc_parent_map_0,
707 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
708 .clkr.hw.init = &gcc_qupv3_wrap0_s4_clk_src_init,
711 static const struct freq_tbl ftbl_gcc_qupv3_wrap0_s5_clk_src[] = {
712 F(100000000, P_GCC_GPLL0_OUT_MAIN, 6, 0, 0),
716 static struct clk_init_data gcc_qupv3_wrap0_s5_clk_src_init = {
717 .name = "gcc_qupv3_wrap0_s5_clk_src",
718 .parent_data = gcc_parent_data_0,
719 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
720 .ops = &clk_rcg2_ops,
723 static struct clk_rcg2 gcc_qupv3_wrap0_s5_clk_src = {
727 .parent_map = gcc_parent_map_0,
728 .freq_tbl = ftbl_gcc_qupv3_wrap0_s5_clk_src,
729 .clkr.hw.init = &gcc_qupv3_wrap0_s5_clk_src_init,
732 static struct clk_init_data gcc_qupv3_wrap0_s6_clk_src_init = {
733 .name = "gcc_qupv3_wrap0_s6_clk_src",
734 .parent_data = gcc_parent_data_0,
735 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
736 .ops = &clk_rcg2_ops,
739 static struct clk_rcg2 gcc_qupv3_wrap0_s6_clk_src = {
743 .parent_map = gcc_parent_map_0,
744 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
745 .clkr.hw.init = &gcc_qupv3_wrap0_s6_clk_src_init,
748 static struct clk_init_data gcc_qupv3_wrap0_s7_clk_src_init = {
749 .name = "gcc_qupv3_wrap0_s7_clk_src",
750 .parent_data = gcc_parent_data_0,
751 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
752 .ops = &clk_rcg2_ops,
755 static struct clk_rcg2 gcc_qupv3_wrap0_s7_clk_src = {
759 .parent_map = gcc_parent_map_0,
760 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
761 .clkr.hw.init = &gcc_qupv3_wrap0_s7_clk_src_init,
764 static struct clk_init_data gcc_qupv3_wrap1_s0_clk_src_init = {
765 .name = "gcc_qupv3_wrap1_s0_clk_src",
766 .parent_data = gcc_parent_data_0,
767 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
768 .ops = &clk_rcg2_ops,
771 static struct clk_rcg2 gcc_qupv3_wrap1_s0_clk_src = {
775 .parent_map = gcc_parent_map_0,
776 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
777 .clkr.hw.init = &gcc_qupv3_wrap1_s0_clk_src_init,
780 static struct clk_init_data gcc_qupv3_wrap1_s1_clk_src_init = {
781 .name = "gcc_qupv3_wrap1_s1_clk_src",
782 .parent_data = gcc_parent_data_0,
783 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
784 .ops = &clk_rcg2_ops,
787 static struct clk_rcg2 gcc_qupv3_wrap1_s1_clk_src = {
791 .parent_map = gcc_parent_map_0,
792 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
793 .clkr.hw.init = &gcc_qupv3_wrap1_s1_clk_src_init,
796 static struct clk_init_data gcc_qupv3_wrap1_s2_clk_src_init = {
797 .name = "gcc_qupv3_wrap1_s2_clk_src",
798 .parent_data = gcc_parent_data_0,
799 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
800 .ops = &clk_rcg2_ops,
803 static struct clk_rcg2 gcc_qupv3_wrap1_s2_clk_src = {
807 .parent_map = gcc_parent_map_0,
808 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
809 .clkr.hw.init = &gcc_qupv3_wrap1_s2_clk_src_init,
812 static struct clk_init_data gcc_qupv3_wrap1_s3_clk_src_init = {
813 .name = "gcc_qupv3_wrap1_s3_clk_src",
814 .parent_data = gcc_parent_data_0,
815 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
816 .ops = &clk_rcg2_ops,
819 static struct clk_rcg2 gcc_qupv3_wrap1_s3_clk_src = {
823 .parent_map = gcc_parent_map_0,
824 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
825 .clkr.hw.init = &gcc_qupv3_wrap1_s3_clk_src_init,
828 static struct clk_init_data gcc_qupv3_wrap1_s4_clk_src_init = {
829 .name = "gcc_qupv3_wrap1_s4_clk_src",
830 .parent_data = gcc_parent_data_0,
831 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
832 .ops = &clk_rcg2_ops,
835 static struct clk_rcg2 gcc_qupv3_wrap1_s4_clk_src = {
839 .parent_map = gcc_parent_map_0,
840 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
841 .clkr.hw.init = &gcc_qupv3_wrap1_s4_clk_src_init,
844 static struct clk_init_data gcc_qupv3_wrap1_s5_clk_src_init = {
845 .name = "gcc_qupv3_wrap1_s5_clk_src",
846 .parent_data = gcc_parent_data_0,
847 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
848 .ops = &clk_rcg2_ops,
851 static struct clk_rcg2 gcc_qupv3_wrap1_s5_clk_src = {
855 .parent_map = gcc_parent_map_0,
856 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
857 .clkr.hw.init = &gcc_qupv3_wrap1_s5_clk_src_init,
860 static struct clk_init_data gcc_qupv3_wrap1_s6_clk_src_init = {
861 .name = "gcc_qupv3_wrap1_s6_clk_src",
862 .parent_data = gcc_parent_data_0,
863 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
864 .ops = &clk_rcg2_ops,
867 static struct clk_rcg2 gcc_qupv3_wrap1_s6_clk_src = {
871 .parent_map = gcc_parent_map_0,
872 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
873 .clkr.hw.init = &gcc_qupv3_wrap1_s6_clk_src_init,
876 static struct clk_init_data gcc_qupv3_wrap1_s7_clk_src_init = {
877 .name = "gcc_qupv3_wrap1_s7_clk_src",
878 .parent_data = gcc_parent_data_0,
879 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
880 .ops = &clk_rcg2_ops,
883 static struct clk_rcg2 gcc_qupv3_wrap1_s7_clk_src = {
887 .parent_map = gcc_parent_map_0,
888 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
889 .clkr.hw.init = &gcc_qupv3_wrap1_s7_clk_src_init,
892 static const struct freq_tbl ftbl_gcc_sdcc5_apps_clk_src[] = {
893 F(144000, P_BI_TCXO, 16, 3, 25),
894 F(400000, P_BI_TCXO, 12, 1, 4),
895 F(19200000, P_BI_TCXO, 1, 0, 0),
896 F(20000000, P_GCC_GPLL0_OUT_MAIN, 10, 1, 3),
897 F(25000000, P_GCC_GPLL0_OUT_MAIN, 12, 1, 2),
898 F(50000000, P_GCC_GPLL0_OUT_MAIN, 12, 0, 0),
899 F(100000000, P_GCC_GPLL0_OUT_MAIN, 6, 0, 0),
900 F(192000000, P_GCC_GPLL8_OUT_MAIN, 4, 0, 0),
901 F(300000000, P_GCC_GPLL0_OUT_MAIN, 2, 0, 0),
902 F(384000000, P_GCC_GPLL8_OUT_MAIN, 2, 0, 0),
906 static struct clk_rcg2 gcc_sdcc5_apps_clk_src = {
910 .parent_map = gcc_parent_map_8,
911 .freq_tbl = ftbl_gcc_sdcc5_apps_clk_src,
912 .clkr.hw.init = &(const struct clk_init_data) {
913 .name = "gcc_sdcc5_apps_clk_src",
914 .parent_data = gcc_parent_data_8,
915 .num_parents = ARRAY_SIZE(gcc_parent_data_8),
916 .ops = &clk_rcg2_ops,
920 static const struct freq_tbl ftbl_gcc_sdcc5_ice_core_clk_src[] = {
921 F(300000000, P_GCC_GPLL0_OUT_MAIN, 2, 0, 0),
925 static struct clk_rcg2 gcc_sdcc5_ice_core_clk_src = {
929 .parent_map = gcc_parent_map_2,
930 .freq_tbl = ftbl_gcc_sdcc5_ice_core_clk_src,
931 .clkr.hw.init = &(const struct clk_init_data) {
932 .name = "gcc_sdcc5_ice_core_clk_src",
933 .parent_data = gcc_parent_data_2,
934 .num_parents = ARRAY_SIZE(gcc_parent_data_2),
935 .ops = &clk_rcg2_ops,
939 static struct clk_rcg2 gcc_sm_bus_xo_clk_src = {
943 .parent_map = gcc_parent_map_2,
944 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
945 .clkr.hw.init = &(const struct clk_init_data) {
946 .name = "gcc_sm_bus_xo_clk_src",
947 .parent_data = gcc_parent_data_2,
948 .num_parents = ARRAY_SIZE(gcc_parent_data_2),
949 .ops = &clk_rcg2_ops,
953 static const struct freq_tbl ftbl_gcc_tsc_clk_src[] = {
954 F(500000000, P_GCC_GPLL7_OUT_MAIN, 2, 0, 0),
958 static struct clk_rcg2 gcc_tsc_clk_src = {
962 .parent_map = gcc_parent_map_9,
963 .freq_tbl = ftbl_gcc_tsc_clk_src,
964 .clkr.hw.init = &(const struct clk_init_data) {
965 .name = "gcc_tsc_clk_src",
966 .parent_data = gcc_parent_data_9,
967 .num_parents = ARRAY_SIZE(gcc_parent_data_9),
968 .ops = &clk_rcg2_ops,
972 static const struct freq_tbl ftbl_gcc_usb30_prim_master_clk_src[] = {
973 F(200000000, P_GCC_GPLL0_OUT_MAIN, 3, 0, 0),
974 F(240000000, P_GCC_GPLL0_OUT_MAIN, 2.5, 0, 0),
978 static struct clk_rcg2 gcc_usb30_prim_master_clk_src = {
982 .parent_map = gcc_parent_map_0,
983 .freq_tbl = ftbl_gcc_usb30_prim_master_clk_src,
984 .clkr.hw.init = &(const struct clk_init_data) {
985 .name = "gcc_usb30_prim_master_clk_src",
986 .parent_data = gcc_parent_data_0,
987 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
988 .ops = &clk_rcg2_ops,
992 static struct clk_rcg2 gcc_usb30_prim_mock_utmi_clk_src = {
996 .parent_map = gcc_parent_map_0,
997 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
998 .clkr.hw.init = &(const struct clk_init_data) {
999 .name = "gcc_usb30_prim_mock_utmi_clk_src",
1000 .parent_data = gcc_parent_data_0,
1001 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
1002 .ops = &clk_rcg2_ops,
1006 static struct clk_rcg2 gcc_usb3_prim_phy_aux_clk_src = {
1007 .cmd_rcgr = 0x49070,
1010 .parent_map = gcc_parent_map_3,
1011 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
1012 .clkr.hw.init = &(const struct clk_init_data) {
1013 .name = "gcc_usb3_prim_phy_aux_clk_src",
1014 .parent_data = gcc_parent_data_3,
1015 .num_parents = ARRAY_SIZE(gcc_parent_data_3),
1016 .ops = &clk_rcg2_ops,
1020 static struct clk_regmap_div gcc_usb30_prim_mock_utmi_postdiv_clk_src = {
1024 .clkr.hw.init = &(const struct clk_init_data) {
1025 .name = "gcc_usb30_prim_mock_utmi_postdiv_clk_src",
1026 .parent_hws = (const struct clk_hw*[]) {
1027 &gcc_usb30_prim_mock_utmi_clk_src.clkr.hw,
1030 .flags = CLK_SET_RATE_PARENT,
1031 .ops = &clk_regmap_div_ro_ops,
1035 static struct clk_branch gcc_aggre_noc_ecpri_dma_clk = {
1036 .halt_reg = 0x92008,
1037 .halt_check = BRANCH_HALT_VOTED,
1038 .hwcg_reg = 0x92008,
1041 .enable_reg = 0x92008,
1042 .enable_mask = BIT(0),
1043 .hw.init = &(const struct clk_init_data) {
1044 .name = "gcc_aggre_noc_ecpri_dma_clk",
1045 .parent_hws = (const struct clk_hw*[]) {
1046 &gcc_aggre_noc_ecpri_dma_clk_src.clkr.hw,
1049 .flags = CLK_SET_RATE_PARENT,
1050 .ops = &clk_branch2_ops,
1055 static struct clk_branch gcc_aggre_noc_ecpri_gsi_clk = {
1056 .halt_reg = 0x9201c,
1057 .halt_check = BRANCH_HALT_VOTED,
1058 .hwcg_reg = 0x9201c,
1061 .enable_reg = 0x9201c,
1062 .enable_mask = BIT(0),
1063 .hw.init = &(const struct clk_init_data) {
1064 .name = "gcc_aggre_noc_ecpri_gsi_clk",
1065 .parent_hws = (const struct clk_hw*[]) {
1066 &gcc_aggre_noc_ecpri_gsi_clk_src.clkr.hw,
1069 .flags = CLK_SET_RATE_PARENT,
1070 .ops = &clk_branch2_ops,
1075 static struct clk_branch gcc_boot_rom_ahb_clk = {
1076 .halt_reg = 0x48004,
1077 .halt_check = BRANCH_HALT_VOTED,
1078 .hwcg_reg = 0x48004,
1081 .enable_reg = 0x62000,
1082 .enable_mask = BIT(10),
1083 .hw.init = &(const struct clk_init_data) {
1084 .name = "gcc_boot_rom_ahb_clk",
1085 .ops = &clk_branch2_ops,
1090 static struct clk_branch gcc_cfg_noc_ecpri_cc_ahb_clk = {
1091 .halt_reg = 0x3e004,
1092 .halt_check = BRANCH_HALT_VOTED,
1093 .hwcg_reg = 0x3e004,
1096 .enable_reg = 0x3e004,
1097 .enable_mask = BIT(0),
1098 .hw.init = &(const struct clk_init_data) {
1099 .name = "gcc_cfg_noc_ecpri_cc_ahb_clk",
1100 .ops = &clk_branch2_ops,
1105 static struct clk_branch gcc_cfg_noc_usb3_prim_axi_clk = {
1106 .halt_reg = 0x8401c,
1107 .halt_check = BRANCH_HALT_VOTED,
1108 .hwcg_reg = 0x8401c,
1111 .enable_reg = 0x8401c,
1112 .enable_mask = BIT(0),
1113 .hw.init = &(const struct clk_init_data) {
1114 .name = "gcc_cfg_noc_usb3_prim_axi_clk",
1115 .parent_hws = (const struct clk_hw*[]) {
1116 &gcc_usb30_prim_master_clk_src.clkr.hw,
1119 .flags = CLK_SET_RATE_PARENT,
1120 .ops = &clk_branch2_ops,
1125 static struct clk_branch gcc_ddrss_ecpri_dma_clk = {
1126 .halt_reg = 0x54030,
1127 .halt_check = BRANCH_HALT_VOTED,
1128 .hwcg_reg = 0x54030,
1131 .enable_reg = 0x54030,
1132 .enable_mask = BIT(0),
1133 .hw.init = &(const struct clk_init_data) {
1134 .name = "gcc_ddrss_ecpri_dma_clk",
1135 .parent_hws = (const struct clk_hw*[]) {
1136 &gcc_aggre_noc_ecpri_dma_clk_src.clkr.hw,
1139 .flags = CLK_SET_RATE_PARENT,
1140 .ops = &clk_branch2_aon_ops,
1145 static struct clk_branch gcc_ecpri_ahb_clk = {
1146 .halt_reg = 0x3a008,
1147 .halt_check = BRANCH_HALT_VOTED,
1148 .hwcg_reg = 0x3a008,
1151 .enable_reg = 0x3a008,
1152 .enable_mask = BIT(0),
1153 .hw.init = &(const struct clk_init_data) {
1154 .name = "gcc_ecpri_ahb_clk",
1155 .ops = &clk_branch2_ops,
1160 static struct clk_branch gcc_ecpri_cc_gpll0_clk_src = {
1161 .halt_check = BRANCH_HALT_DELAY,
1163 .enable_reg = 0x62010,
1164 .enable_mask = BIT(0),
1165 .hw.init = &(const struct clk_init_data) {
1166 .name = "gcc_ecpri_cc_gpll0_clk_src",
1167 .parent_hws = (const struct clk_hw*[]) {
1171 .flags = CLK_SET_RATE_PARENT,
1172 .ops = &clk_branch2_ops,
1177 static struct clk_branch gcc_ecpri_cc_gpll1_even_clk_src = {
1178 .halt_check = BRANCH_HALT_DELAY,
1180 .enable_reg = 0x62010,
1181 .enable_mask = BIT(1),
1182 .hw.init = &(const struct clk_init_data) {
1183 .name = "gcc_ecpri_cc_gpll1_even_clk_src",
1184 .parent_hws = (const struct clk_hw*[]) {
1185 &gcc_gpll1_out_even.clkr.hw,
1188 .flags = CLK_SET_RATE_PARENT,
1189 .ops = &clk_branch2_ops,
1194 static struct clk_branch gcc_ecpri_cc_gpll2_even_clk_src = {
1195 .halt_check = BRANCH_HALT_DELAY,
1197 .enable_reg = 0x62010,
1198 .enable_mask = BIT(2),
1199 .hw.init = &(const struct clk_init_data) {
1200 .name = "gcc_ecpri_cc_gpll2_even_clk_src",
1201 .parent_hws = (const struct clk_hw*[]) {
1202 &gcc_gpll2_out_even.clkr.hw,
1205 .flags = CLK_SET_RATE_PARENT,
1206 .ops = &clk_branch2_ops,
1211 static struct clk_branch gcc_ecpri_cc_gpll3_clk_src = {
1212 .halt_check = BRANCH_HALT_DELAY,
1214 .enable_reg = 0x62010,
1215 .enable_mask = BIT(3),
1216 .hw.init = &(const struct clk_init_data) {
1217 .name = "gcc_ecpri_cc_gpll3_clk_src",
1218 .parent_hws = (const struct clk_hw*[]) {
1222 .flags = CLK_SET_RATE_PARENT,
1223 .ops = &clk_branch2_ops,
1228 static struct clk_branch gcc_ecpri_cc_gpll4_clk_src = {
1229 .halt_check = BRANCH_HALT_DELAY,
1231 .enable_reg = 0x62010,
1232 .enable_mask = BIT(4),
1233 .hw.init = &(const struct clk_init_data) {
1234 .name = "gcc_ecpri_cc_gpll4_clk_src",
1235 .parent_hws = (const struct clk_hw*[]) {
1239 .flags = CLK_SET_RATE_PARENT,
1240 .ops = &clk_branch2_ops,
1245 static struct clk_branch gcc_ecpri_cc_gpll5_even_clk_src = {
1246 .halt_check = BRANCH_HALT_DELAY,
1248 .enable_reg = 0x62010,
1249 .enable_mask = BIT(5),
1250 .hw.init = &(const struct clk_init_data) {
1251 .name = "gcc_ecpri_cc_gpll5_even_clk_src",
1252 .parent_hws = (const struct clk_hw*[]) {
1253 &gcc_gpll5_out_even.clkr.hw,
1256 .flags = CLK_SET_RATE_PARENT,
1257 .ops = &clk_branch2_ops,
1262 static struct clk_branch gcc_ecpri_xo_clk = {
1263 .halt_reg = 0x3a004,
1264 .halt_check = BRANCH_HALT,
1266 .enable_reg = 0x3a004,
1267 .enable_mask = BIT(0),
1268 .hw.init = &(const struct clk_init_data) {
1269 .name = "gcc_ecpri_xo_clk",
1270 .ops = &clk_branch2_ops,
1275 static struct clk_branch gcc_eth_100g_c2c_hm_apb_clk = {
1276 .halt_reg = 0x39010,
1277 .halt_check = BRANCH_HALT,
1279 .enable_reg = 0x39010,
1280 .enable_mask = BIT(0),
1281 .hw.init = &(const struct clk_init_data) {
1282 .name = "gcc_eth_100g_c2c_hm_apb_clk",
1283 .ops = &clk_branch2_ops,
1288 static struct clk_branch gcc_eth_100g_fh_hm_apb_0_clk = {
1289 .halt_reg = 0x39004,
1290 .halt_check = BRANCH_HALT,
1292 .enable_reg = 0x39004,
1293 .enable_mask = BIT(0),
1294 .hw.init = &(const struct clk_init_data) {
1295 .name = "gcc_eth_100g_fh_hm_apb_0_clk",
1296 .ops = &clk_branch2_ops,
1301 static struct clk_branch gcc_eth_100g_fh_hm_apb_1_clk = {
1302 .halt_reg = 0x39008,
1303 .halt_check = BRANCH_HALT,
1305 .enable_reg = 0x39008,
1306 .enable_mask = BIT(0),
1307 .hw.init = &(const struct clk_init_data) {
1308 .name = "gcc_eth_100g_fh_hm_apb_1_clk",
1309 .ops = &clk_branch2_ops,
1314 static struct clk_branch gcc_eth_100g_fh_hm_apb_2_clk = {
1315 .halt_reg = 0x3900c,
1316 .halt_check = BRANCH_HALT,
1318 .enable_reg = 0x3900c,
1319 .enable_mask = BIT(0),
1320 .hw.init = &(const struct clk_init_data) {
1321 .name = "gcc_eth_100g_fh_hm_apb_2_clk",
1322 .ops = &clk_branch2_ops,
1327 static struct clk_branch gcc_eth_dbg_c2c_hm_apb_clk = {
1328 .halt_reg = 0x39014,
1329 .halt_check = BRANCH_HALT,
1331 .enable_reg = 0x39014,
1332 .enable_mask = BIT(0),
1333 .hw.init = &(const struct clk_init_data) {
1334 .name = "gcc_eth_dbg_c2c_hm_apb_clk",
1335 .ops = &clk_branch2_ops,
1340 static struct clk_branch gcc_eth_dbg_snoc_axi_clk = {
1341 .halt_reg = 0x3901c,
1342 .halt_check = BRANCH_HALT_VOTED,
1343 .hwcg_reg = 0x3901c,
1346 .enable_reg = 0x3901c,
1347 .enable_mask = BIT(0),
1348 .hw.init = &(const struct clk_init_data) {
1349 .name = "gcc_eth_dbg_snoc_axi_clk",
1350 .ops = &clk_branch2_ops,
1355 static struct clk_branch gcc_gemnoc_pcie_qx_clk = {
1356 .halt_reg = 0x5402c,
1357 .halt_check = BRANCH_HALT_VOTED,
1358 .hwcg_reg = 0x5402c,
1361 .enable_reg = 0x62008,
1362 .enable_mask = BIT(0),
1363 .hw.init = &(const struct clk_init_data) {
1364 .name = "gcc_gemnoc_pcie_qx_clk",
1365 .ops = &clk_branch2_aon_ops,
1370 static struct clk_branch gcc_gp1_clk = {
1371 .halt_reg = 0x74000,
1372 .halt_check = BRANCH_HALT,
1374 .enable_reg = 0x74000,
1375 .enable_mask = BIT(0),
1376 .hw.init = &(const struct clk_init_data) {
1377 .name = "gcc_gp1_clk",
1378 .parent_hws = (const struct clk_hw*[]) {
1379 &gcc_gp1_clk_src.clkr.hw,
1382 .flags = CLK_SET_RATE_PARENT,
1383 .ops = &clk_branch2_ops,
1388 static struct clk_branch gcc_gp2_clk = {
1389 .halt_reg = 0x75000,
1390 .halt_check = BRANCH_HALT,
1392 .enable_reg = 0x75000,
1393 .enable_mask = BIT(0),
1394 .hw.init = &(const struct clk_init_data) {
1395 .name = "gcc_gp2_clk",
1396 .parent_hws = (const struct clk_hw*[]) {
1397 &gcc_gp2_clk_src.clkr.hw,
1400 .flags = CLK_SET_RATE_PARENT,
1401 .ops = &clk_branch2_ops,
1406 static struct clk_branch gcc_gp3_clk = {
1407 .halt_reg = 0x76000,
1408 .halt_check = BRANCH_HALT,
1410 .enable_reg = 0x76000,
1411 .enable_mask = BIT(0),
1412 .hw.init = &(const struct clk_init_data) {
1413 .name = "gcc_gp3_clk",
1414 .parent_hws = (const struct clk_hw*[]) {
1415 &gcc_gp3_clk_src.clkr.hw,
1418 .flags = CLK_SET_RATE_PARENT,
1419 .ops = &clk_branch2_ops,
1424 static struct clk_branch gcc_pcie_0_aux_clk = {
1425 .halt_reg = 0x9d030,
1426 .halt_check = BRANCH_HALT_VOTED,
1427 .hwcg_reg = 0x9d030,
1430 .enable_reg = 0x62000,
1431 .enable_mask = BIT(29),
1432 .hw.init = &(const struct clk_init_data) {
1433 .name = "gcc_pcie_0_aux_clk",
1434 .parent_hws = (const struct clk_hw*[]) {
1435 &gcc_pcie_0_aux_clk_src.clkr.hw,
1438 .flags = CLK_SET_RATE_PARENT,
1439 .ops = &clk_branch2_ops,
1444 static struct clk_branch gcc_pcie_0_cfg_ahb_clk = {
1445 .halt_reg = 0x9d02c,
1446 .halt_check = BRANCH_HALT_VOTED,
1447 .hwcg_reg = 0x9d02c,
1450 .enable_reg = 0x62000,
1451 .enable_mask = BIT(28),
1452 .hw.init = &(const struct clk_init_data) {
1453 .name = "gcc_pcie_0_cfg_ahb_clk",
1454 .ops = &clk_branch2_ops,
1459 static struct clk_branch gcc_pcie_0_clkref_en = {
1460 .halt_reg = 0x9c004,
1462 .halt_check = BRANCH_HALT_ENABLE,
1464 .enable_reg = 0x9c004,
1465 .enable_mask = BIT(0),
1466 .hw.init = &(const struct clk_init_data) {
1467 .name = "gcc_pcie_0_clkref_en",
1468 .ops = &clk_branch_ops,
1473 static struct clk_branch gcc_pcie_0_mstr_axi_clk = {
1474 .halt_reg = 0x9d024,
1475 .halt_check = BRANCH_HALT_SKIP,
1476 .hwcg_reg = 0x9d024,
1479 .enable_reg = 0x62000,
1480 .enable_mask = BIT(27),
1481 .hw.init = &(const struct clk_init_data) {
1482 .name = "gcc_pcie_0_mstr_axi_clk",
1483 .ops = &clk_branch2_ops,
1488 static struct clk_branch gcc_pcie_0_phy_aux_clk = {
1489 .halt_reg = 0x9d038,
1490 .halt_check = BRANCH_HALT_VOTED,
1491 .hwcg_reg = 0x9d038,
1494 .enable_reg = 0x62000,
1495 .enable_mask = BIT(24),
1496 .hw.init = &(const struct clk_init_data) {
1497 .name = "gcc_pcie_0_phy_aux_clk",
1498 .parent_hws = (const struct clk_hw*[]) {
1499 &gcc_pcie_0_phy_aux_clk_src.clkr.hw,
1502 .flags = CLK_SET_RATE_PARENT,
1503 .ops = &clk_branch2_ops,
1508 static struct clk_branch gcc_pcie_0_phy_rchng_clk = {
1509 .halt_reg = 0x9d048,
1510 .halt_check = BRANCH_HALT_VOTED,
1511 .hwcg_reg = 0x9d048,
1514 .enable_reg = 0x62000,
1515 .enable_mask = BIT(23),
1516 .hw.init = &(const struct clk_init_data) {
1517 .name = "gcc_pcie_0_phy_rchng_clk",
1518 .parent_hws = (const struct clk_hw*[]) {
1519 &gcc_pcie_0_phy_rchng_clk_src.clkr.hw,
1522 .flags = CLK_SET_RATE_PARENT,
1523 .ops = &clk_branch2_ops,
1528 static struct clk_branch gcc_pcie_0_pipe_clk = {
1529 .halt_reg = 0x9d040,
1530 .halt_check = BRANCH_HALT_VOTED,
1531 .hwcg_reg = 0x9d040,
1534 .enable_reg = 0x62000,
1535 .enable_mask = BIT(30),
1536 .hw.init = &(const struct clk_init_data) {
1537 .name = "gcc_pcie_0_pipe_clk",
1538 .parent_hws = (const struct clk_hw*[]) {
1539 &gcc_pcie_0_pipe_clk_src.clkr.hw,
1542 .flags = CLK_SET_RATE_PARENT,
1543 .ops = &clk_branch2_ops,
1548 static struct clk_branch gcc_pcie_0_slv_axi_clk = {
1549 .halt_reg = 0x9d01c,
1550 .halt_check = BRANCH_HALT_VOTED,
1551 .hwcg_reg = 0x9d01c,
1554 .enable_reg = 0x62000,
1555 .enable_mask = BIT(26),
1556 .hw.init = &(const struct clk_init_data) {
1557 .name = "gcc_pcie_0_slv_axi_clk",
1558 .ops = &clk_branch2_ops,
1563 static struct clk_branch gcc_pcie_0_slv_q2a_axi_clk = {
1564 .halt_reg = 0x9d018,
1565 .halt_check = BRANCH_HALT_VOTED,
1566 .hwcg_reg = 0x9d018,
1569 .enable_reg = 0x62000,
1570 .enable_mask = BIT(25),
1571 .hw.init = &(const struct clk_init_data) {
1572 .name = "gcc_pcie_0_slv_q2a_axi_clk",
1573 .ops = &clk_branch2_ops,
1578 static struct clk_branch gcc_pdm2_clk = {
1579 .halt_reg = 0x4300c,
1580 .halt_check = BRANCH_HALT,
1582 .enable_reg = 0x4300c,
1583 .enable_mask = BIT(0),
1584 .hw.init = &(const struct clk_init_data) {
1585 .name = "gcc_pdm2_clk",
1586 .parent_hws = (const struct clk_hw*[]) {
1587 &gcc_pdm2_clk_src.clkr.hw,
1590 .flags = CLK_SET_RATE_PARENT,
1591 .ops = &clk_branch2_ops,
1596 static struct clk_branch gcc_pdm_ahb_clk = {
1597 .halt_reg = 0x43004,
1598 .halt_check = BRANCH_HALT_VOTED,
1599 .hwcg_reg = 0x43004,
1602 .enable_reg = 0x43004,
1603 .enable_mask = BIT(0),
1604 .hw.init = &(const struct clk_init_data) {
1605 .name = "gcc_pdm_ahb_clk",
1606 .ops = &clk_branch2_ops,
1611 static struct clk_branch gcc_pdm_xo4_clk = {
1612 .halt_reg = 0x43008,
1613 .halt_check = BRANCH_HALT,
1615 .enable_reg = 0x43008,
1616 .enable_mask = BIT(0),
1617 .hw.init = &(const struct clk_init_data) {
1618 .name = "gcc_pdm_xo4_clk",
1619 .ops = &clk_branch2_ops,
1624 static struct clk_branch gcc_qmip_anoc_pcie_clk = {
1625 .halt_reg = 0x84044,
1626 .halt_check = BRANCH_HALT_VOTED,
1627 .hwcg_reg = 0x84044,
1630 .enable_reg = 0x84044,
1631 .enable_mask = BIT(0),
1632 .hw.init = &(const struct clk_init_data) {
1633 .name = "gcc_qmip_anoc_pcie_clk",
1634 .ops = &clk_branch2_ops,
1639 static struct clk_branch gcc_qmip_ecpri_dma0_clk = {
1640 .halt_reg = 0x84038,
1641 .halt_check = BRANCH_HALT_VOTED,
1642 .hwcg_reg = 0x84038,
1645 .enable_reg = 0x84038,
1646 .enable_mask = BIT(0),
1647 .hw.init = &(const struct clk_init_data) {
1648 .name = "gcc_qmip_ecpri_dma0_clk",
1649 .ops = &clk_branch2_ops,
1654 static struct clk_branch gcc_qmip_ecpri_dma1_clk = {
1655 .halt_reg = 0x8403c,
1656 .halt_check = BRANCH_HALT_VOTED,
1657 .hwcg_reg = 0x8403c,
1660 .enable_reg = 0x8403c,
1661 .enable_mask = BIT(0),
1662 .hw.init = &(const struct clk_init_data) {
1663 .name = "gcc_qmip_ecpri_dma1_clk",
1664 .ops = &clk_branch2_ops,
1669 static struct clk_branch gcc_qmip_ecpri_gsi_clk = {
1670 .halt_reg = 0x84040,
1671 .halt_check = BRANCH_HALT_VOTED,
1672 .hwcg_reg = 0x84040,
1675 .enable_reg = 0x84040,
1676 .enable_mask = BIT(0),
1677 .hw.init = &(const struct clk_init_data) {
1678 .name = "gcc_qmip_ecpri_gsi_clk",
1679 .ops = &clk_branch2_ops,
1684 static struct clk_branch gcc_qupv3_wrap0_core_2x_clk = {
1685 .halt_reg = 0x27018,
1686 .halt_check = BRANCH_HALT_VOTED,
1688 .enable_reg = 0x62008,
1689 .enable_mask = BIT(9),
1690 .hw.init = &(const struct clk_init_data) {
1691 .name = "gcc_qupv3_wrap0_core_2x_clk",
1692 .ops = &clk_branch2_ops,
1697 static struct clk_branch gcc_qupv3_wrap0_core_clk = {
1698 .halt_reg = 0x2700c,
1699 .halt_check = BRANCH_HALT_VOTED,
1701 .enable_reg = 0x62008,
1702 .enable_mask = BIT(8),
1703 .hw.init = &(const struct clk_init_data) {
1704 .name = "gcc_qupv3_wrap0_core_clk",
1705 .ops = &clk_branch2_ops,
1710 static struct clk_branch gcc_qupv3_wrap0_s0_clk = {
1711 .halt_reg = 0x2714c,
1712 .halt_check = BRANCH_HALT_VOTED,
1714 .enable_reg = 0x62008,
1715 .enable_mask = BIT(10),
1716 .hw.init = &(const struct clk_init_data) {
1717 .name = "gcc_qupv3_wrap0_s0_clk",
1718 .parent_hws = (const struct clk_hw*[]) {
1719 &gcc_qupv3_wrap0_s0_clk_src.clkr.hw,
1722 .flags = CLK_SET_RATE_PARENT,
1723 .ops = &clk_branch2_ops,
1728 static struct clk_branch gcc_qupv3_wrap0_s1_clk = {
1729 .halt_reg = 0x27280,
1730 .halt_check = BRANCH_HALT_VOTED,
1732 .enable_reg = 0x62008,
1733 .enable_mask = BIT(11),
1734 .hw.init = &(const struct clk_init_data) {
1735 .name = "gcc_qupv3_wrap0_s1_clk",
1736 .parent_hws = (const struct clk_hw*[]) {
1737 &gcc_qupv3_wrap0_s1_clk_src.clkr.hw,
1740 .flags = CLK_SET_RATE_PARENT,
1741 .ops = &clk_branch2_ops,
1746 static struct clk_branch gcc_qupv3_wrap0_s2_clk = {
1747 .halt_reg = 0x273b4,
1748 .halt_check = BRANCH_HALT_VOTED,
1750 .enable_reg = 0x62008,
1751 .enable_mask = BIT(12),
1752 .hw.init = &(const struct clk_init_data) {
1753 .name = "gcc_qupv3_wrap0_s2_clk",
1754 .parent_hws = (const struct clk_hw*[]) {
1755 &gcc_qupv3_wrap0_s2_clk_src.clkr.hw,
1758 .flags = CLK_SET_RATE_PARENT,
1759 .ops = &clk_branch2_ops,
1764 static struct clk_branch gcc_qupv3_wrap0_s3_clk = {
1765 .halt_reg = 0x274e8,
1766 .halt_check = BRANCH_HALT_VOTED,
1768 .enable_reg = 0x62008,
1769 .enable_mask = BIT(13),
1770 .hw.init = &(const struct clk_init_data) {
1771 .name = "gcc_qupv3_wrap0_s3_clk",
1772 .parent_hws = (const struct clk_hw*[]) {
1773 &gcc_qupv3_wrap0_s3_clk_src.clkr.hw,
1776 .flags = CLK_SET_RATE_PARENT,
1777 .ops = &clk_branch2_ops,
1782 static struct clk_branch gcc_qupv3_wrap0_s4_clk = {
1783 .halt_reg = 0x2761c,
1784 .halt_check = BRANCH_HALT_VOTED,
1786 .enable_reg = 0x62008,
1787 .enable_mask = BIT(14),
1788 .hw.init = &(const struct clk_init_data) {
1789 .name = "gcc_qupv3_wrap0_s4_clk",
1790 .parent_hws = (const struct clk_hw*[]) {
1791 &gcc_qupv3_wrap0_s4_clk_src.clkr.hw,
1794 .flags = CLK_SET_RATE_PARENT,
1795 .ops = &clk_branch2_ops,
1800 static struct clk_branch gcc_qupv3_wrap0_s5_clk = {
1801 .halt_reg = 0x27750,
1802 .halt_check = BRANCH_HALT_VOTED,
1804 .enable_reg = 0x62008,
1805 .enable_mask = BIT(15),
1806 .hw.init = &(const struct clk_init_data) {
1807 .name = "gcc_qupv3_wrap0_s5_clk",
1808 .parent_hws = (const struct clk_hw*[]) {
1809 &gcc_qupv3_wrap0_s5_clk_src.clkr.hw,
1812 .flags = CLK_SET_RATE_PARENT,
1813 .ops = &clk_branch2_ops,
1818 static struct clk_branch gcc_qupv3_wrap0_s6_clk = {
1819 .halt_reg = 0x27884,
1820 .halt_check = BRANCH_HALT_VOTED,
1822 .enable_reg = 0x62008,
1823 .enable_mask = BIT(16),
1824 .hw.init = &(const struct clk_init_data) {
1825 .name = "gcc_qupv3_wrap0_s6_clk",
1826 .parent_hws = (const struct clk_hw*[]) {
1827 &gcc_qupv3_wrap0_s6_clk_src.clkr.hw,
1830 .flags = CLK_SET_RATE_PARENT,
1831 .ops = &clk_branch2_ops,
1836 static struct clk_branch gcc_qupv3_wrap0_s7_clk = {
1837 .halt_reg = 0x279b8,
1838 .halt_check = BRANCH_HALT_VOTED,
1840 .enable_reg = 0x62008,
1841 .enable_mask = BIT(17),
1842 .hw.init = &(const struct clk_init_data) {
1843 .name = "gcc_qupv3_wrap0_s7_clk",
1844 .parent_hws = (const struct clk_hw*[]) {
1845 &gcc_qupv3_wrap0_s7_clk_src.clkr.hw,
1848 .flags = CLK_SET_RATE_PARENT,
1849 .ops = &clk_branch2_ops,
1854 static struct clk_branch gcc_qupv3_wrap1_core_2x_clk = {
1855 .halt_reg = 0x28018,
1856 .halt_check = BRANCH_HALT_VOTED,
1858 .enable_reg = 0x62008,
1859 .enable_mask = BIT(18),
1860 .hw.init = &(const struct clk_init_data) {
1861 .name = "gcc_qupv3_wrap1_core_2x_clk",
1862 .ops = &clk_branch2_ops,
1867 static struct clk_branch gcc_qupv3_wrap1_core_clk = {
1868 .halt_reg = 0x2800c,
1869 .halt_check = BRANCH_HALT_VOTED,
1871 .enable_reg = 0x62008,
1872 .enable_mask = BIT(19),
1873 .hw.init = &(const struct clk_init_data) {
1874 .name = "gcc_qupv3_wrap1_core_clk",
1875 .ops = &clk_branch2_ops,
1880 static struct clk_branch gcc_qupv3_wrap1_s0_clk = {
1881 .halt_reg = 0x2814c,
1882 .halt_check = BRANCH_HALT_VOTED,
1884 .enable_reg = 0x62008,
1885 .enable_mask = BIT(22),
1886 .hw.init = &(const struct clk_init_data) {
1887 .name = "gcc_qupv3_wrap1_s0_clk",
1888 .parent_hws = (const struct clk_hw*[]) {
1889 &gcc_qupv3_wrap1_s0_clk_src.clkr.hw,
1892 .flags = CLK_SET_RATE_PARENT,
1893 .ops = &clk_branch2_ops,
1898 static struct clk_branch gcc_qupv3_wrap1_s1_clk = {
1899 .halt_reg = 0x28280,
1900 .halt_check = BRANCH_HALT_VOTED,
1902 .enable_reg = 0x62008,
1903 .enable_mask = BIT(23),
1904 .hw.init = &(const struct clk_init_data) {
1905 .name = "gcc_qupv3_wrap1_s1_clk",
1906 .parent_hws = (const struct clk_hw*[]) {
1907 &gcc_qupv3_wrap1_s1_clk_src.clkr.hw,
1910 .flags = CLK_SET_RATE_PARENT,
1911 .ops = &clk_branch2_ops,
1916 static struct clk_branch gcc_qupv3_wrap1_s2_clk = {
1917 .halt_reg = 0x283b4,
1918 .halt_check = BRANCH_HALT_VOTED,
1920 .enable_reg = 0x62008,
1921 .enable_mask = BIT(24),
1922 .hw.init = &(const struct clk_init_data) {
1923 .name = "gcc_qupv3_wrap1_s2_clk",
1924 .parent_hws = (const struct clk_hw*[]) {
1925 &gcc_qupv3_wrap1_s2_clk_src.clkr.hw,
1928 .flags = CLK_SET_RATE_PARENT,
1929 .ops = &clk_branch2_ops,
1934 static struct clk_branch gcc_qupv3_wrap1_s3_clk = {
1935 .halt_reg = 0x284e8,
1936 .halt_check = BRANCH_HALT_VOTED,
1938 .enable_reg = 0x62008,
1939 .enable_mask = BIT(25),
1940 .hw.init = &(const struct clk_init_data) {
1941 .name = "gcc_qupv3_wrap1_s3_clk",
1942 .parent_hws = (const struct clk_hw*[]) {
1943 &gcc_qupv3_wrap1_s3_clk_src.clkr.hw,
1946 .flags = CLK_SET_RATE_PARENT,
1947 .ops = &clk_branch2_ops,
1952 static struct clk_branch gcc_qupv3_wrap1_s4_clk = {
1953 .halt_reg = 0x2861c,
1954 .halt_check = BRANCH_HALT_VOTED,
1956 .enable_reg = 0x62008,
1957 .enable_mask = BIT(26),
1958 .hw.init = &(const struct clk_init_data) {
1959 .name = "gcc_qupv3_wrap1_s4_clk",
1960 .parent_hws = (const struct clk_hw*[]) {
1961 &gcc_qupv3_wrap1_s4_clk_src.clkr.hw,
1964 .flags = CLK_SET_RATE_PARENT,
1965 .ops = &clk_branch2_ops,
1970 static struct clk_branch gcc_qupv3_wrap1_s5_clk = {
1971 .halt_reg = 0x28750,
1972 .halt_check = BRANCH_HALT_VOTED,
1974 .enable_reg = 0x62008,
1975 .enable_mask = BIT(27),
1976 .hw.init = &(const struct clk_init_data) {
1977 .name = "gcc_qupv3_wrap1_s5_clk",
1978 .parent_hws = (const struct clk_hw*[]) {
1979 &gcc_qupv3_wrap1_s5_clk_src.clkr.hw,
1982 .flags = CLK_SET_RATE_PARENT,
1983 .ops = &clk_branch2_ops,
1988 static struct clk_branch gcc_qupv3_wrap1_s6_clk = {
1989 .halt_reg = 0x28884,
1990 .halt_check = BRANCH_HALT_VOTED,
1992 .enable_reg = 0x62008,
1993 .enable_mask = BIT(28),
1994 .hw.init = &(const struct clk_init_data) {
1995 .name = "gcc_qupv3_wrap1_s6_clk",
1996 .parent_hws = (const struct clk_hw*[]) {
1997 &gcc_qupv3_wrap1_s6_clk_src.clkr.hw,
2000 .flags = CLK_SET_RATE_PARENT,
2001 .ops = &clk_branch2_ops,
2006 static struct clk_branch gcc_qupv3_wrap1_s7_clk = {
2007 .halt_reg = 0x289b8,
2008 .halt_check = BRANCH_HALT_VOTED,
2010 .enable_reg = 0x62008,
2011 .enable_mask = BIT(29),
2012 .hw.init = &(const struct clk_init_data) {
2013 .name = "gcc_qupv3_wrap1_s7_clk",
2014 .parent_hws = (const struct clk_hw*[]) {
2015 &gcc_qupv3_wrap1_s7_clk_src.clkr.hw,
2018 .flags = CLK_SET_RATE_PARENT,
2019 .ops = &clk_branch2_ops,
2024 static struct clk_branch gcc_qupv3_wrap_0_m_ahb_clk = {
2025 .halt_reg = 0x27004,
2026 .halt_check = BRANCH_HALT_VOTED,
2027 .hwcg_reg = 0x27004,
2030 .enable_reg = 0x62008,
2031 .enable_mask = BIT(6),
2032 .hw.init = &(const struct clk_init_data) {
2033 .name = "gcc_qupv3_wrap_0_m_ahb_clk",
2034 .ops = &clk_branch2_ops,
2039 static struct clk_branch gcc_qupv3_wrap_0_s_ahb_clk = {
2040 .halt_reg = 0x27008,
2041 .halt_check = BRANCH_HALT_VOTED,
2042 .hwcg_reg = 0x27008,
2045 .enable_reg = 0x62008,
2046 .enable_mask = BIT(7),
2047 .hw.init = &(const struct clk_init_data) {
2048 .name = "gcc_qupv3_wrap_0_s_ahb_clk",
2049 .ops = &clk_branch2_ops,
2054 static struct clk_branch gcc_qupv3_wrap_1_m_ahb_clk = {
2055 .halt_reg = 0x28004,
2056 .halt_check = BRANCH_HALT_VOTED,
2057 .hwcg_reg = 0x28004,
2060 .enable_reg = 0x62008,
2061 .enable_mask = BIT(20),
2062 .hw.init = &(const struct clk_init_data) {
2063 .name = "gcc_qupv3_wrap_1_m_ahb_clk",
2064 .ops = &clk_branch2_ops,
2069 static struct clk_branch gcc_qupv3_wrap_1_s_ahb_clk = {
2070 .halt_reg = 0x28008,
2071 .halt_check = BRANCH_HALT_VOTED,
2072 .hwcg_reg = 0x28008,
2075 .enable_reg = 0x62008,
2076 .enable_mask = BIT(21),
2077 .hw.init = &(const struct clk_init_data) {
2078 .name = "gcc_qupv3_wrap_1_s_ahb_clk",
2079 .ops = &clk_branch2_ops,
2084 static struct clk_branch gcc_sdcc5_ahb_clk = {
2085 .halt_reg = 0x3b00c,
2086 .halt_check = BRANCH_HALT,
2088 .enable_reg = 0x3b00c,
2089 .enable_mask = BIT(0),
2090 .hw.init = &(const struct clk_init_data) {
2091 .name = "gcc_sdcc5_ahb_clk",
2092 .ops = &clk_branch2_ops,
2097 static struct clk_branch gcc_sdcc5_apps_clk = {
2098 .halt_reg = 0x3b004,
2099 .halt_check = BRANCH_HALT,
2101 .enable_reg = 0x3b004,
2102 .enable_mask = BIT(0),
2103 .hw.init = &(const struct clk_init_data) {
2104 .name = "gcc_sdcc5_apps_clk",
2105 .parent_hws = (const struct clk_hw*[]) {
2106 &gcc_sdcc5_apps_clk_src.clkr.hw,
2109 .flags = CLK_SET_RATE_PARENT,
2110 .ops = &clk_branch2_ops,
2115 static struct clk_branch gcc_sdcc5_ice_core_clk = {
2116 .halt_reg = 0x3b010,
2117 .halt_check = BRANCH_HALT,
2119 .enable_reg = 0x3b010,
2120 .enable_mask = BIT(0),
2121 .hw.init = &(const struct clk_init_data) {
2122 .name = "gcc_sdcc5_ice_core_clk",
2123 .parent_hws = (const struct clk_hw*[]) {
2124 &gcc_sdcc5_ice_core_clk_src.clkr.hw,
2127 .flags = CLK_SET_RATE_PARENT,
2128 .ops = &clk_branch2_ops,
2133 static struct clk_branch gcc_sm_bus_ahb_clk = {
2134 .halt_reg = 0x5b004,
2135 .halt_check = BRANCH_HALT,
2137 .enable_reg = 0x5b004,
2138 .enable_mask = BIT(0),
2139 .hw.init = &(const struct clk_init_data) {
2140 .name = "gcc_sm_bus_ahb_clk",
2141 .ops = &clk_branch2_ops,
2146 static struct clk_branch gcc_sm_bus_xo_clk = {
2147 .halt_reg = 0x5b008,
2148 .halt_check = BRANCH_HALT,
2150 .enable_reg = 0x5b008,
2151 .enable_mask = BIT(0),
2152 .hw.init = &(const struct clk_init_data) {
2153 .name = "gcc_sm_bus_xo_clk",
2154 .parent_hws = (const struct clk_hw*[]) {
2155 &gcc_sm_bus_xo_clk_src.clkr.hw,
2158 .flags = CLK_SET_RATE_PARENT,
2159 .ops = &clk_branch2_ops,
2164 static struct clk_branch gcc_snoc_cnoc_gemnoc_pcie_qx_clk = {
2165 .halt_reg = 0x9200c,
2166 .halt_check = BRANCH_HALT_SKIP,
2167 .hwcg_reg = 0x9200c,
2170 .enable_reg = 0x62000,
2171 .enable_mask = BIT(11),
2172 .hw.init = &(const struct clk_init_data) {
2173 .name = "gcc_snoc_cnoc_gemnoc_pcie_qx_clk",
2174 .ops = &clk_branch2_ops,
2179 static struct clk_branch gcc_snoc_cnoc_gemnoc_pcie_south_qx_clk = {
2180 .halt_reg = 0x92010,
2181 .halt_check = BRANCH_HALT_SKIP,
2182 .hwcg_reg = 0x92010,
2185 .enable_reg = 0x62000,
2186 .enable_mask = BIT(12),
2187 .hw.init = &(const struct clk_init_data) {
2188 .name = "gcc_snoc_cnoc_gemnoc_pcie_south_qx_clk",
2189 .ops = &clk_branch2_ops,
2194 static struct clk_branch gcc_snoc_cnoc_pcie_qx_clk = {
2195 .halt_reg = 0x84030,
2196 .halt_check = BRANCH_HALT,
2198 .enable_reg = 0x84030,
2199 .enable_mask = BIT(0),
2200 .hw.init = &(const struct clk_init_data) {
2201 .name = "gcc_snoc_cnoc_pcie_qx_clk",
2202 .ops = &clk_branch2_ops,
2207 static struct clk_branch gcc_snoc_pcie_sf_center_qx_clk = {
2208 .halt_reg = 0x92014,
2209 .halt_check = BRANCH_HALT_SKIP,
2210 .hwcg_reg = 0x92014,
2213 .enable_reg = 0x62000,
2214 .enable_mask = BIT(19),
2215 .hw.init = &(const struct clk_init_data) {
2216 .name = "gcc_snoc_pcie_sf_center_qx_clk",
2217 .ops = &clk_branch2_ops,
2222 static struct clk_branch gcc_snoc_pcie_sf_south_qx_clk = {
2223 .halt_reg = 0x92018,
2224 .halt_check = BRANCH_HALT_SKIP,
2225 .hwcg_reg = 0x92018,
2228 .enable_reg = 0x62000,
2229 .enable_mask = BIT(22),
2230 .hw.init = &(const struct clk_init_data) {
2231 .name = "gcc_snoc_pcie_sf_south_qx_clk",
2232 .ops = &clk_branch2_ops,
2237 static struct clk_branch gcc_tsc_cfg_ahb_clk = {
2238 .halt_reg = 0x5700c,
2239 .halt_check = BRANCH_HALT,
2241 .enable_reg = 0x5700c,
2242 .enable_mask = BIT(0),
2243 .hw.init = &(const struct clk_init_data) {
2244 .name = "gcc_tsc_cfg_ahb_clk",
2245 .ops = &clk_branch2_ops,
2250 static struct clk_branch gcc_tsc_cntr_clk = {
2251 .halt_reg = 0x57004,
2252 .halt_check = BRANCH_HALT,
2254 .enable_reg = 0x57004,
2255 .enable_mask = BIT(0),
2256 .hw.init = &(const struct clk_init_data) {
2257 .name = "gcc_tsc_cntr_clk",
2258 .parent_hws = (const struct clk_hw*[]) {
2259 &gcc_tsc_clk_src.clkr.hw,
2262 .flags = CLK_SET_RATE_PARENT,
2263 .ops = &clk_branch2_ops,
2268 static struct clk_branch gcc_tsc_etu_clk = {
2269 .halt_reg = 0x57008,
2270 .halt_check = BRANCH_HALT,
2272 .enable_reg = 0x57008,
2273 .enable_mask = BIT(0),
2274 .hw.init = &(const struct clk_init_data) {
2275 .name = "gcc_tsc_etu_clk",
2276 .parent_hws = (const struct clk_hw*[]) {
2277 &gcc_tsc_clk_src.clkr.hw,
2280 .flags = CLK_SET_RATE_PARENT,
2281 .ops = &clk_branch2_ops,
2286 static struct clk_branch gcc_usb2_clkref_en = {
2287 .halt_reg = 0x9c008,
2289 .halt_check = BRANCH_HALT_ENABLE,
2291 .enable_reg = 0x9c008,
2292 .enable_mask = BIT(0),
2293 .hw.init = &(const struct clk_init_data) {
2294 .name = "gcc_usb2_clkref_en",
2295 .ops = &clk_branch_ops,
2300 static struct clk_branch gcc_usb30_prim_master_clk = {
2301 .halt_reg = 0x49018,
2302 .halt_check = BRANCH_HALT,
2304 .enable_reg = 0x49018,
2305 .enable_mask = BIT(0),
2306 .hw.init = &(const struct clk_init_data) {
2307 .name = "gcc_usb30_prim_master_clk",
2308 .parent_hws = (const struct clk_hw*[]) {
2309 &gcc_usb30_prim_master_clk_src.clkr.hw,
2312 .flags = CLK_SET_RATE_PARENT,
2313 .ops = &clk_branch2_ops,
2318 static struct clk_branch gcc_usb30_prim_mock_utmi_clk = {
2319 .halt_reg = 0x49024,
2320 .halt_check = BRANCH_HALT,
2322 .enable_reg = 0x49024,
2323 .enable_mask = BIT(0),
2324 .hw.init = &(const struct clk_init_data) {
2325 .name = "gcc_usb30_prim_mock_utmi_clk",
2326 .parent_hws = (const struct clk_hw*[]) {
2327 &gcc_usb30_prim_mock_utmi_postdiv_clk_src.clkr.hw,
2330 .flags = CLK_SET_RATE_PARENT,
2331 .ops = &clk_branch2_ops,
2336 static struct clk_branch gcc_usb30_prim_sleep_clk = {
2337 .halt_reg = 0x49020,
2338 .halt_check = BRANCH_HALT,
2340 .enable_reg = 0x49020,
2341 .enable_mask = BIT(0),
2342 .hw.init = &(const struct clk_init_data) {
2343 .name = "gcc_usb30_prim_sleep_clk",
2344 .ops = &clk_branch2_ops,
2349 static struct clk_branch gcc_usb3_prim_phy_aux_clk = {
2350 .halt_reg = 0x49060,
2351 .halt_check = BRANCH_HALT,
2353 .enable_reg = 0x49060,
2354 .enable_mask = BIT(0),
2355 .hw.init = &(const struct clk_init_data) {
2356 .name = "gcc_usb3_prim_phy_aux_clk",
2357 .parent_hws = (const struct clk_hw*[]) {
2358 &gcc_usb3_prim_phy_aux_clk_src.clkr.hw,
2361 .flags = CLK_SET_RATE_PARENT,
2362 .ops = &clk_branch2_ops,
2367 static struct clk_branch gcc_usb3_prim_phy_com_aux_clk = {
2368 .halt_reg = 0x49064,
2369 .halt_check = BRANCH_HALT,
2371 .enable_reg = 0x49064,
2372 .enable_mask = BIT(0),
2373 .hw.init = &(const struct clk_init_data) {
2374 .name = "gcc_usb3_prim_phy_com_aux_clk",
2375 .parent_hws = (const struct clk_hw*[]) {
2376 &gcc_usb3_prim_phy_aux_clk_src.clkr.hw,
2379 .flags = CLK_SET_RATE_PARENT,
2380 .ops = &clk_branch2_ops,
2385 static struct clk_branch gcc_usb3_prim_phy_pipe_clk = {
2386 .halt_reg = 0x49068,
2387 .halt_check = BRANCH_HALT_DELAY,
2388 .hwcg_reg = 0x49068,
2391 .enable_reg = 0x49068,
2392 .enable_mask = BIT(0),
2393 .hw.init = &(const struct clk_init_data) {
2394 .name = "gcc_usb3_prim_phy_pipe_clk",
2395 .parent_hws = (const struct clk_hw*[]) {
2396 &gcc_usb3_prim_phy_pipe_clk_src.clkr.hw,
2399 .flags = CLK_SET_RATE_PARENT,
2400 .ops = &clk_branch2_ops,
2405 static struct clk_regmap *gcc_qdu1000_clocks[] = {
2406 [GCC_AGGRE_NOC_ECPRI_DMA_CLK] = &gcc_aggre_noc_ecpri_dma_clk.clkr,
2407 [GCC_AGGRE_NOC_ECPRI_DMA_CLK_SRC] = &gcc_aggre_noc_ecpri_dma_clk_src.clkr,
2408 [GCC_AGGRE_NOC_ECPRI_GSI_CLK_SRC] = &gcc_aggre_noc_ecpri_gsi_clk_src.clkr,
2409 [GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr,
2410 [GCC_CFG_NOC_ECPRI_CC_AHB_CLK] = &gcc_cfg_noc_ecpri_cc_ahb_clk.clkr,
2411 [GCC_CFG_NOC_USB3_PRIM_AXI_CLK] = &gcc_cfg_noc_usb3_prim_axi_clk.clkr,
2412 [GCC_DDRSS_ECPRI_DMA_CLK] = &gcc_ddrss_ecpri_dma_clk.clkr,
2413 [GCC_ECPRI_AHB_CLK] = &gcc_ecpri_ahb_clk.clkr,
2414 [GCC_ECPRI_CC_GPLL0_CLK_SRC] = &gcc_ecpri_cc_gpll0_clk_src.clkr,
2415 [GCC_ECPRI_CC_GPLL1_EVEN_CLK_SRC] = &gcc_ecpri_cc_gpll1_even_clk_src.clkr,
2416 [GCC_ECPRI_CC_GPLL2_EVEN_CLK_SRC] = &gcc_ecpri_cc_gpll2_even_clk_src.clkr,
2417 [GCC_ECPRI_CC_GPLL3_CLK_SRC] = &gcc_ecpri_cc_gpll3_clk_src.clkr,
2418 [GCC_ECPRI_CC_GPLL4_CLK_SRC] = &gcc_ecpri_cc_gpll4_clk_src.clkr,
2419 [GCC_ECPRI_CC_GPLL5_EVEN_CLK_SRC] = &gcc_ecpri_cc_gpll5_even_clk_src.clkr,
2420 [GCC_ECPRI_XO_CLK] = &gcc_ecpri_xo_clk.clkr,
2421 [GCC_ETH_DBG_SNOC_AXI_CLK] = &gcc_eth_dbg_snoc_axi_clk.clkr,
2422 [GCC_GEMNOC_PCIE_QX_CLK] = &gcc_gemnoc_pcie_qx_clk.clkr,
2423 [GCC_GP1_CLK] = &gcc_gp1_clk.clkr,
2424 [GCC_GP1_CLK_SRC] = &gcc_gp1_clk_src.clkr,
2425 [GCC_GP2_CLK] = &gcc_gp2_clk.clkr,
2426 [GCC_GP2_CLK_SRC] = &gcc_gp2_clk_src.clkr,
2427 [GCC_GP3_CLK] = &gcc_gp3_clk.clkr,
2428 [GCC_GP3_CLK_SRC] = &gcc_gp3_clk_src.clkr,
2429 [GCC_GPLL0] = &gcc_gpll0.clkr,
2430 [GCC_GPLL0_OUT_EVEN] = &gcc_gpll0_out_even.clkr,
2431 [GCC_GPLL1] = &gcc_gpll1.clkr,
2432 [GCC_GPLL2] = &gcc_gpll2.clkr,
2433 [GCC_GPLL2_OUT_EVEN] = &gcc_gpll2_out_even.clkr,
2434 [GCC_GPLL3] = &gcc_gpll3.clkr,
2435 [GCC_GPLL4] = &gcc_gpll4.clkr,
2436 [GCC_GPLL5] = &gcc_gpll5.clkr,
2437 [GCC_GPLL5_OUT_EVEN] = &gcc_gpll5_out_even.clkr,
2438 [GCC_GPLL6] = &gcc_gpll6.clkr,
2439 [GCC_GPLL7] = &gcc_gpll7.clkr,
2440 [GCC_GPLL8] = &gcc_gpll8.clkr,
2441 [GCC_PCIE_0_AUX_CLK] = &gcc_pcie_0_aux_clk.clkr,
2442 [GCC_PCIE_0_AUX_CLK_SRC] = &gcc_pcie_0_aux_clk_src.clkr,
2443 [GCC_PCIE_0_CFG_AHB_CLK] = &gcc_pcie_0_cfg_ahb_clk.clkr,
2444 [GCC_PCIE_0_CLKREF_EN] = &gcc_pcie_0_clkref_en.clkr,
2445 [GCC_PCIE_0_MSTR_AXI_CLK] = &gcc_pcie_0_mstr_axi_clk.clkr,
2446 [GCC_PCIE_0_PHY_AUX_CLK] = &gcc_pcie_0_phy_aux_clk.clkr,
2447 [GCC_PCIE_0_PHY_RCHNG_CLK] = &gcc_pcie_0_phy_rchng_clk.clkr,
2448 [GCC_PCIE_0_PHY_RCHNG_CLK_SRC] = &gcc_pcie_0_phy_rchng_clk_src.clkr,
2449 [GCC_PCIE_0_PIPE_CLK] = &gcc_pcie_0_pipe_clk.clkr,
2450 [GCC_PCIE_0_SLV_AXI_CLK] = &gcc_pcie_0_slv_axi_clk.clkr,
2451 [GCC_PCIE_0_SLV_Q2A_AXI_CLK] = &gcc_pcie_0_slv_q2a_axi_clk.clkr,
2452 [GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr,
2453 [GCC_PDM2_CLK_SRC] = &gcc_pdm2_clk_src.clkr,
2454 [GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr,
2455 [GCC_PDM_XO4_CLK] = &gcc_pdm_xo4_clk.clkr,
2456 [GCC_QMIP_ANOC_PCIE_CLK] = &gcc_qmip_anoc_pcie_clk.clkr,
2457 [GCC_QMIP_ECPRI_DMA0_CLK] = &gcc_qmip_ecpri_dma0_clk.clkr,
2458 [GCC_QMIP_ECPRI_DMA1_CLK] = &gcc_qmip_ecpri_dma1_clk.clkr,
2459 [GCC_QMIP_ECPRI_GSI_CLK] = &gcc_qmip_ecpri_gsi_clk.clkr,
2460 [GCC_QUPV3_WRAP0_CORE_2X_CLK] = &gcc_qupv3_wrap0_core_2x_clk.clkr,
2461 [GCC_QUPV3_WRAP0_CORE_CLK] = &gcc_qupv3_wrap0_core_clk.clkr,
2462 [GCC_QUPV3_WRAP0_S0_CLK] = &gcc_qupv3_wrap0_s0_clk.clkr,
2463 [GCC_QUPV3_WRAP0_S0_CLK_SRC] = &gcc_qupv3_wrap0_s0_clk_src.clkr,
2464 [GCC_QUPV3_WRAP0_S1_CLK] = &gcc_qupv3_wrap0_s1_clk.clkr,
2465 [GCC_QUPV3_WRAP0_S1_CLK_SRC] = &gcc_qupv3_wrap0_s1_clk_src.clkr,
2466 [GCC_QUPV3_WRAP0_S2_CLK] = &gcc_qupv3_wrap0_s2_clk.clkr,
2467 [GCC_QUPV3_WRAP0_S2_CLK_SRC] = &gcc_qupv3_wrap0_s2_clk_src.clkr,
2468 [GCC_QUPV3_WRAP0_S3_CLK] = &gcc_qupv3_wrap0_s3_clk.clkr,
2469 [GCC_QUPV3_WRAP0_S3_CLK_SRC] = &gcc_qupv3_wrap0_s3_clk_src.clkr,
2470 [GCC_QUPV3_WRAP0_S4_CLK] = &gcc_qupv3_wrap0_s4_clk.clkr,
2471 [GCC_QUPV3_WRAP0_S4_CLK_SRC] = &gcc_qupv3_wrap0_s4_clk_src.clkr,
2472 [GCC_QUPV3_WRAP0_S5_CLK] = &gcc_qupv3_wrap0_s5_clk.clkr,
2473 [GCC_QUPV3_WRAP0_S5_CLK_SRC] = &gcc_qupv3_wrap0_s5_clk_src.clkr,
2474 [GCC_QUPV3_WRAP0_S6_CLK] = &gcc_qupv3_wrap0_s6_clk.clkr,
2475 [GCC_QUPV3_WRAP0_S6_CLK_SRC] = &gcc_qupv3_wrap0_s6_clk_src.clkr,
2476 [GCC_QUPV3_WRAP0_S7_CLK] = &gcc_qupv3_wrap0_s7_clk.clkr,
2477 [GCC_QUPV3_WRAP0_S7_CLK_SRC] = &gcc_qupv3_wrap0_s7_clk_src.clkr,
2478 [GCC_QUPV3_WRAP1_CORE_2X_CLK] = &gcc_qupv3_wrap1_core_2x_clk.clkr,
2479 [GCC_QUPV3_WRAP1_CORE_CLK] = &gcc_qupv3_wrap1_core_clk.clkr,
2480 [GCC_QUPV3_WRAP1_S0_CLK] = &gcc_qupv3_wrap1_s0_clk.clkr,
2481 [GCC_QUPV3_WRAP1_S0_CLK_SRC] = &gcc_qupv3_wrap1_s0_clk_src.clkr,
2482 [GCC_QUPV3_WRAP1_S1_CLK] = &gcc_qupv3_wrap1_s1_clk.clkr,
2483 [GCC_QUPV3_WRAP1_S1_CLK_SRC] = &gcc_qupv3_wrap1_s1_clk_src.clkr,
2484 [GCC_QUPV3_WRAP1_S2_CLK] = &gcc_qupv3_wrap1_s2_clk.clkr,
2485 [GCC_QUPV3_WRAP1_S2_CLK_SRC] = &gcc_qupv3_wrap1_s2_clk_src.clkr,
2486 [GCC_QUPV3_WRAP1_S3_CLK] = &gcc_qupv3_wrap1_s3_clk.clkr,
2487 [GCC_QUPV3_WRAP1_S3_CLK_SRC] = &gcc_qupv3_wrap1_s3_clk_src.clkr,
2488 [GCC_QUPV3_WRAP1_S4_CLK] = &gcc_qupv3_wrap1_s4_clk.clkr,
2489 [GCC_QUPV3_WRAP1_S4_CLK_SRC] = &gcc_qupv3_wrap1_s4_clk_src.clkr,
2490 [GCC_QUPV3_WRAP1_S5_CLK] = &gcc_qupv3_wrap1_s5_clk.clkr,
2491 [GCC_QUPV3_WRAP1_S5_CLK_SRC] = &gcc_qupv3_wrap1_s5_clk_src.clkr,
2492 [GCC_QUPV3_WRAP1_S6_CLK] = &gcc_qupv3_wrap1_s6_clk.clkr,
2493 [GCC_QUPV3_WRAP1_S6_CLK_SRC] = &gcc_qupv3_wrap1_s6_clk_src.clkr,
2494 [GCC_QUPV3_WRAP1_S7_CLK] = &gcc_qupv3_wrap1_s7_clk.clkr,
2495 [GCC_QUPV3_WRAP1_S7_CLK_SRC] = &gcc_qupv3_wrap1_s7_clk_src.clkr,
2496 [GCC_QUPV3_WRAP_0_M_AHB_CLK] = &gcc_qupv3_wrap_0_m_ahb_clk.clkr,
2497 [GCC_QUPV3_WRAP_0_S_AHB_CLK] = &gcc_qupv3_wrap_0_s_ahb_clk.clkr,
2498 [GCC_QUPV3_WRAP_1_M_AHB_CLK] = &gcc_qupv3_wrap_1_m_ahb_clk.clkr,
2499 [GCC_QUPV3_WRAP_1_S_AHB_CLK] = &gcc_qupv3_wrap_1_s_ahb_clk.clkr,
2500 [GCC_SDCC5_AHB_CLK] = &gcc_sdcc5_ahb_clk.clkr,
2501 [GCC_SDCC5_APPS_CLK] = &gcc_sdcc5_apps_clk.clkr,
2502 [GCC_SDCC5_APPS_CLK_SRC] = &gcc_sdcc5_apps_clk_src.clkr,
2503 [GCC_SDCC5_ICE_CORE_CLK] = &gcc_sdcc5_ice_core_clk.clkr,
2504 [GCC_SDCC5_ICE_CORE_CLK_SRC] = &gcc_sdcc5_ice_core_clk_src.clkr,
2505 [GCC_SM_BUS_AHB_CLK] = &gcc_sm_bus_ahb_clk.clkr,
2506 [GCC_SM_BUS_XO_CLK] = &gcc_sm_bus_xo_clk.clkr,
2507 [GCC_SM_BUS_XO_CLK_SRC] = &gcc_sm_bus_xo_clk_src.clkr,
2508 [GCC_SNOC_CNOC_GEMNOC_PCIE_QX_CLK] = &gcc_snoc_cnoc_gemnoc_pcie_qx_clk.clkr,
2509 [GCC_SNOC_CNOC_GEMNOC_PCIE_SOUTH_QX_CLK] = &gcc_snoc_cnoc_gemnoc_pcie_south_qx_clk.clkr,
2510 [GCC_SNOC_CNOC_PCIE_QX_CLK] = &gcc_snoc_cnoc_pcie_qx_clk.clkr,
2511 [GCC_SNOC_PCIE_SF_CENTER_QX_CLK] = &gcc_snoc_pcie_sf_center_qx_clk.clkr,
2512 [GCC_SNOC_PCIE_SF_SOUTH_QX_CLK] = &gcc_snoc_pcie_sf_south_qx_clk.clkr,
2513 [GCC_TSC_CFG_AHB_CLK] = &gcc_tsc_cfg_ahb_clk.clkr,
2514 [GCC_TSC_CLK_SRC] = &gcc_tsc_clk_src.clkr,
2515 [GCC_TSC_CNTR_CLK] = &gcc_tsc_cntr_clk.clkr,
2516 [GCC_TSC_ETU_CLK] = &gcc_tsc_etu_clk.clkr,
2517 [GCC_USB2_CLKREF_EN] = &gcc_usb2_clkref_en.clkr,
2518 [GCC_USB30_PRIM_MASTER_CLK] = &gcc_usb30_prim_master_clk.clkr,
2519 [GCC_USB30_PRIM_MASTER_CLK_SRC] = &gcc_usb30_prim_master_clk_src.clkr,
2520 [GCC_USB30_PRIM_MOCK_UTMI_CLK] = &gcc_usb30_prim_mock_utmi_clk.clkr,
2521 [GCC_USB30_PRIM_MOCK_UTMI_CLK_SRC] = &gcc_usb30_prim_mock_utmi_clk_src.clkr,
2522 [GCC_USB30_PRIM_MOCK_UTMI_POSTDIV_CLK_SRC] = &gcc_usb30_prim_mock_utmi_postdiv_clk_src.clkr,
2523 [GCC_USB30_PRIM_SLEEP_CLK] = &gcc_usb30_prim_sleep_clk.clkr,
2524 [GCC_USB3_PRIM_PHY_AUX_CLK] = &gcc_usb3_prim_phy_aux_clk.clkr,
2525 [GCC_USB3_PRIM_PHY_AUX_CLK_SRC] = &gcc_usb3_prim_phy_aux_clk_src.clkr,
2526 [GCC_USB3_PRIM_PHY_COM_AUX_CLK] = &gcc_usb3_prim_phy_com_aux_clk.clkr,
2527 [GCC_USB3_PRIM_PHY_PIPE_CLK] = &gcc_usb3_prim_phy_pipe_clk.clkr,
2528 [GCC_USB3_PRIM_PHY_PIPE_CLK_SRC] = &gcc_usb3_prim_phy_pipe_clk_src.clkr,
2529 [GCC_ETH_100G_C2C_HM_APB_CLK] = &gcc_eth_100g_c2c_hm_apb_clk.clkr,
2530 [GCC_ETH_100G_FH_HM_APB_0_CLK] = &gcc_eth_100g_fh_hm_apb_0_clk.clkr,
2531 [GCC_ETH_100G_FH_HM_APB_1_CLK] = &gcc_eth_100g_fh_hm_apb_1_clk.clkr,
2532 [GCC_ETH_100G_FH_HM_APB_2_CLK] = &gcc_eth_100g_fh_hm_apb_2_clk.clkr,
2533 [GCC_ETH_DBG_C2C_HM_APB_CLK] = &gcc_eth_dbg_c2c_hm_apb_clk.clkr,
2534 [GCC_AGGRE_NOC_ECPRI_GSI_CLK] = &gcc_aggre_noc_ecpri_gsi_clk.clkr,
2535 [GCC_PCIE_0_PHY_AUX_CLK_SRC] = &gcc_pcie_0_phy_aux_clk_src.clkr,
2536 [GCC_PCIE_0_PIPE_CLK_SRC] = &gcc_pcie_0_pipe_clk_src.clkr,
2539 static const struct qcom_reset_map gcc_qdu1000_resets[] = {
2540 [GCC_ECPRI_CC_BCR] = { 0x3e000 },
2541 [GCC_ECPRI_SS_BCR] = { 0x3a000 },
2542 [GCC_ETH_WRAPPER_BCR] = { 0x39000 },
2543 [GCC_PCIE_0_BCR] = { 0x9d000 },
2544 [GCC_PCIE_0_LINK_DOWN_BCR] = { 0x9e014 },
2545 [GCC_PCIE_0_NOCSR_COM_PHY_BCR] = { 0x9e020 },
2546 [GCC_PCIE_0_PHY_BCR] = { 0x7c000 },
2547 [GCC_PCIE_0_PHY_NOCSR_COM_PHY_BCR] = { 0x9e000 },
2548 [GCC_PCIE_PHY_CFG_AHB_BCR] = { 0x7f00c },
2549 [GCC_PCIE_PHY_COM_BCR] = { 0x7f010 },
2550 [GCC_PDM_BCR] = { 0x43000 },
2551 [GCC_QUPV3_WRAPPER_0_BCR] = { 0x27000 },
2552 [GCC_QUPV3_WRAPPER_1_BCR] = { 0x28000 },
2553 [GCC_QUSB2PHY_PRIM_BCR] = { 0x22000 },
2554 [GCC_QUSB2PHY_SEC_BCR] = { 0x22004 },
2555 [GCC_SDCC5_BCR] = { 0x3b000 },
2556 [GCC_TSC_BCR] = { 0x57000 },
2557 [GCC_USB30_PRIM_BCR] = { 0x49000 },
2558 [GCC_USB3_DP_PHY_PRIM_BCR] = { 0x60008 },
2559 [GCC_USB3_DP_PHY_SEC_BCR] = { 0x60014 },
2560 [GCC_USB3_PHY_PRIM_BCR] = { 0x60000 },
2561 [GCC_USB3_PHY_SEC_BCR] = { 0x6000c },
2562 [GCC_USB3PHY_PHY_PRIM_BCR] = { 0x60004 },
2563 [GCC_USB3PHY_PHY_SEC_BCR] = { 0x60010 },
2564 [GCC_USB_PHY_CFG_AHB2PHY_BCR] = { 0x7a000 },
2567 static const struct clk_rcg_dfs_data gcc_dfs_clocks[] = {
2568 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s0_clk_src),
2569 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s1_clk_src),
2570 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s2_clk_src),
2571 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s3_clk_src),
2572 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s4_clk_src),
2573 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s5_clk_src),
2574 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s6_clk_src),
2575 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s7_clk_src),
2576 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s0_clk_src),
2577 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s1_clk_src),
2578 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s2_clk_src),
2579 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s3_clk_src),
2580 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s4_clk_src),
2581 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s5_clk_src),
2582 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s6_clk_src),
2583 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s7_clk_src),
2586 static const struct regmap_config gcc_qdu1000_regmap_config = {
2590 .max_register = 0x1f41f0,
2594 static const struct qcom_cc_desc gcc_qdu1000_desc = {
2595 .config = &gcc_qdu1000_regmap_config,
2596 .clks = gcc_qdu1000_clocks,
2597 .num_clks = ARRAY_SIZE(gcc_qdu1000_clocks),
2598 .resets = gcc_qdu1000_resets,
2599 .num_resets = ARRAY_SIZE(gcc_qdu1000_resets),
2602 static const struct of_device_id gcc_qdu1000_match_table[] = {
2603 { .compatible = "qcom,qdu1000-gcc" },
2606 MODULE_DEVICE_TABLE(of, gcc_qdu1000_match_table);
2608 static int gcc_qdu1000_probe(struct platform_device *pdev)
2610 struct regmap *regmap;
2613 regmap = qcom_cc_map(pdev, &gcc_qdu1000_desc);
2615 return PTR_ERR(regmap);
2617 /* Update FORCE_MEM_CORE_ON for gcc_pcie_0_mstr_axi_clk */
2618 regmap_update_bits(regmap, 0x9d024, BIT(14), BIT(14));
2620 ret = qcom_cc_register_rcg_dfs(regmap, gcc_dfs_clocks,
2621 ARRAY_SIZE(gcc_dfs_clocks));
2625 ret = qcom_cc_really_probe(pdev, &gcc_qdu1000_desc, regmap);
2627 return dev_err_probe(&pdev->dev, ret, "Failed to register GCC clocks\n");
2632 static struct platform_driver gcc_qdu1000_driver = {
2633 .probe = gcc_qdu1000_probe,
2635 .name = "gcc-qdu1000",
2636 .of_match_table = gcc_qdu1000_match_table,
2640 static int __init gcc_qdu1000_init(void)
2642 return platform_driver_register(&gcc_qdu1000_driver);
2644 subsys_initcall(gcc_qdu1000_init);
2646 static void __exit gcc_qdu1000_exit(void)
2648 platform_driver_unregister(&gcc_qdu1000_driver);
2650 module_exit(gcc_qdu1000_exit);
2652 MODULE_DESCRIPTION("QTI GCC QDU1000 Driver");
2653 MODULE_LICENSE("GPL");