1 // SPDX-License-Identifier: GPL-2.0-only
3 * Copyright (c) 2023, Qualcomm Innovation Center, Inc. All rights reserved.
6 #include <linux/clk-provider.h>
7 #include <linux/mod_devicetable.h>
8 #include <linux/module.h>
9 #include <linux/platform_device.h>
10 #include <linux/regmap.h>
12 #include <dt-bindings/clock/qcom,sm4450-gcc.h>
14 #include "clk-alpha-pll.h"
15 #include "clk-branch.h"
17 #include "clk-regmap.h"
18 #include "clk-regmap-divider.h"
19 #include "clk-regmap-mux.h"
20 #include "clk-regmap-phy-mux.h"
28 DT_UFS_PHY_RX_SYMBOL_0_CLK,
29 DT_UFS_PHY_RX_SYMBOL_1_CLK,
30 DT_UFS_PHY_TX_SYMBOL_0_CLK,
31 DT_USB3_PHY_WRAPPER_GCC_USB30_PIPE_CLK,
43 P_GCC_GPLL10_OUT_MAIN,
45 P_UFS_PHY_RX_SYMBOL_0_CLK,
46 P_UFS_PHY_RX_SYMBOL_1_CLK,
47 P_UFS_PHY_TX_SYMBOL_0_CLK,
48 P_USB3_PHY_WRAPPER_GCC_USB30_PIPE_CLK,
51 static const struct pll_vco lucid_evo_vco[] = {
52 { 249600000, 2020000000, 0 },
55 static struct clk_alpha_pll gcc_gpll0 = {
57 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
59 .enable_reg = 0x62018,
60 .enable_mask = BIT(0),
61 .hw.init = &(const struct clk_init_data) {
63 .parent_data = &(const struct clk_parent_data) {
67 .ops = &clk_alpha_pll_fixed_lucid_evo_ops,
72 static const struct clk_div_table post_div_table_gcc_gpll0_out_even[] = {
77 static struct clk_alpha_pll_postdiv gcc_gpll0_out_even = {
80 .post_div_table = post_div_table_gcc_gpll0_out_even,
81 .num_post_div = ARRAY_SIZE(post_div_table_gcc_gpll0_out_even),
83 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
84 .clkr.hw.init = &(const struct clk_init_data) {
85 .name = "gcc_gpll0_out_even",
86 .parent_hws = (const struct clk_hw*[]) {
90 .ops = &clk_alpha_pll_postdiv_lucid_evo_ops,
94 static const struct clk_div_table post_div_table_gcc_gpll0_out_odd[] = {
99 static struct clk_alpha_pll_postdiv gcc_gpll0_out_odd = {
101 .post_div_shift = 14,
102 .post_div_table = post_div_table_gcc_gpll0_out_odd,
103 .num_post_div = ARRAY_SIZE(post_div_table_gcc_gpll0_out_odd),
105 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
106 .clkr.hw.init = &(const struct clk_init_data) {
107 .name = "gcc_gpll0_out_odd",
108 .parent_hws = (const struct clk_hw*[]) {
112 .ops = &clk_alpha_pll_postdiv_lucid_evo_ops,
116 static struct clk_alpha_pll gcc_gpll1 = {
118 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
120 .enable_reg = 0x62018,
121 .enable_mask = BIT(1),
122 .hw.init = &(const struct clk_init_data) {
124 .parent_data = &(const struct clk_parent_data) {
128 .ops = &clk_alpha_pll_fixed_lucid_evo_ops,
133 static const struct alpha_pll_config gcc_gpll3_config = {
136 .config_ctl_val = 0x20485699,
137 .config_ctl_hi_val = 0x00182261,
138 .config_ctl_hi1_val = 0x32aa299c,
139 .user_ctl_val = 0x00000000,
140 .user_ctl_hi_val = 0x00000805,
143 static struct clk_alpha_pll gcc_gpll3 = {
145 .vco_table = lucid_evo_vco,
146 .num_vco = ARRAY_SIZE(lucid_evo_vco),
147 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
149 .enable_reg = 0x62018,
150 .enable_mask = BIT(3),
151 .hw.init = &(const struct clk_init_data) {
153 .parent_data = &(const struct clk_parent_data) {
157 .ops = &clk_alpha_pll_lucid_evo_ops,
162 static struct clk_alpha_pll gcc_gpll4 = {
164 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
166 .enable_reg = 0x62018,
167 .enable_mask = BIT(4),
168 .hw.init = &(const struct clk_init_data) {
170 .parent_data = &(const struct clk_parent_data) {
174 .ops = &clk_alpha_pll_fixed_lucid_evo_ops,
179 static struct clk_alpha_pll gcc_gpll9 = {
181 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
183 .enable_reg = 0x62018,
184 .enable_mask = BIT(9),
185 .hw.init = &(const struct clk_init_data) {
187 .parent_data = &(const struct clk_parent_data) {
191 .ops = &clk_alpha_pll_fixed_lucid_evo_ops,
196 static struct clk_alpha_pll gcc_gpll10 = {
198 .regs = clk_alpha_pll_regs[CLK_ALPHA_PLL_TYPE_LUCID_EVO],
200 .enable_reg = 0x62018,
201 .enable_mask = BIT(10),
202 .hw.init = &(const struct clk_init_data) {
203 .name = "gcc_gpll10",
204 .parent_data = &(const struct clk_parent_data) {
208 .ops = &clk_alpha_pll_fixed_lucid_evo_ops,
213 static const struct parent_map gcc_parent_map_0[] = {
215 { P_GCC_GPLL0_OUT_MAIN, 1 },
216 { P_GCC_GPLL0_OUT_EVEN, 6 },
219 static const struct clk_parent_data gcc_parent_data_0[] = {
220 { .index = DT_BI_TCXO },
221 { .hw = &gcc_gpll0.clkr.hw },
222 { .hw = &gcc_gpll0_out_even.clkr.hw },
225 static const struct parent_map gcc_parent_map_1[] = {
227 { P_GCC_GPLL0_OUT_MAIN, 1 },
229 { P_GCC_GPLL0_OUT_EVEN, 6 },
232 static const struct clk_parent_data gcc_parent_data_1[] = {
233 { .index = DT_BI_TCXO },
234 { .hw = &gcc_gpll0.clkr.hw },
235 { .index = DT_SLEEP_CLK },
236 { .hw = &gcc_gpll0_out_even.clkr.hw },
239 static const struct parent_map gcc_parent_map_2[] = {
241 { P_GCC_GPLL0_OUT_MAIN, 1 },
242 { P_GCC_GPLL1_OUT_MAIN, 4 },
243 { P_GCC_GPLL4_OUT_MAIN, 5 },
244 { P_GCC_GPLL0_OUT_EVEN, 6 },
247 static const struct clk_parent_data gcc_parent_data_2[] = {
248 { .index = DT_BI_TCXO },
249 { .hw = &gcc_gpll0.clkr.hw },
250 { .hw = &gcc_gpll1.clkr.hw },
251 { .hw = &gcc_gpll4.clkr.hw },
252 { .hw = &gcc_gpll0_out_even.clkr.hw },
255 static const struct parent_map gcc_parent_map_3[] = {
260 static const struct clk_parent_data gcc_parent_data_3[] = {
261 { .index = DT_BI_TCXO },
262 { .index = DT_SLEEP_CLK },
265 static const struct parent_map gcc_parent_map_4[] = {
267 { P_GCC_GPLL0_OUT_MAIN, 1 },
268 { P_GCC_GPLL0_OUT_ODD, 2 },
269 { P_GCC_GPLL10_OUT_MAIN, 3 },
270 { P_GCC_GPLL0_OUT_EVEN, 6 },
273 static const struct clk_parent_data gcc_parent_data_4[] = {
274 { .index = DT_BI_TCXO },
275 { .hw = &gcc_gpll0.clkr.hw },
276 { .hw = &gcc_gpll0_out_odd.clkr.hw },
277 { .hw = &gcc_gpll10.clkr.hw },
278 { .hw = &gcc_gpll0_out_even.clkr.hw },
281 static const struct parent_map gcc_parent_map_5[] = {
285 static const struct clk_parent_data gcc_parent_data_5[] = {
286 { .index = DT_BI_TCXO },
289 static const struct parent_map gcc_parent_map_6[] = {
291 { P_GCC_GPLL0_OUT_MAIN, 1 },
292 { P_GCC_GPLL9_OUT_MAIN, 2 },
293 { P_GCC_GPLL4_OUT_MAIN, 5 },
294 { P_GCC_GPLL0_OUT_EVEN, 6 },
297 static const struct clk_parent_data gcc_parent_data_6[] = {
298 { .index = DT_BI_TCXO },
299 { .hw = &gcc_gpll0.clkr.hw },
300 { .hw = &gcc_gpll9.clkr.hw },
301 { .hw = &gcc_gpll4.clkr.hw },
302 { .hw = &gcc_gpll0_out_even.clkr.hw },
305 static const struct parent_map gcc_parent_map_7[] = {
306 { P_UFS_PHY_RX_SYMBOL_0_CLK, 0 },
310 static const struct clk_parent_data gcc_parent_data_7[] = {
311 { .index = DT_UFS_PHY_RX_SYMBOL_0_CLK },
312 { .index = DT_BI_TCXO },
315 static const struct parent_map gcc_parent_map_8[] = {
316 { P_UFS_PHY_RX_SYMBOL_1_CLK, 0 },
320 static const struct clk_parent_data gcc_parent_data_8[] = {
321 { .index = DT_UFS_PHY_RX_SYMBOL_1_CLK },
322 { .index = DT_BI_TCXO },
325 static const struct parent_map gcc_parent_map_9[] = {
326 { P_UFS_PHY_TX_SYMBOL_0_CLK, 0 },
330 static const struct clk_parent_data gcc_parent_data_9[] = {
331 { .index = DT_UFS_PHY_TX_SYMBOL_0_CLK },
332 { .index = DT_BI_TCXO },
335 static const struct parent_map gcc_parent_map_10[] = {
336 { P_USB3_PHY_WRAPPER_GCC_USB30_PIPE_CLK, 0 },
340 static const struct clk_parent_data gcc_parent_data_10[] = {
341 { .index = DT_USB3_PHY_WRAPPER_GCC_USB30_PIPE_CLK },
342 { .index = DT_BI_TCXO },
345 static const struct parent_map gcc_parent_map_11[] = {
347 { P_GCC_GPLL0_OUT_MAIN, 1 },
348 { P_GCC_GPLL3_OUT_MAIN, 5 },
351 static const struct clk_parent_data gcc_parent_data_11[] = {
352 { .index = DT_BI_TCXO },
353 { .hw = &gcc_gpll0.clkr.hw },
354 { .hw = &gcc_gpll3.clkr.hw },
357 static struct clk_regmap_phy_mux gcc_pcie_0_pipe_clk_src = {
360 .hw.init = &(const struct clk_init_data) {
361 .name = "gcc_pcie_0_pipe_clk_src",
362 .parent_data = &(const struct clk_parent_data) {
363 .index = DT_PCIE_0_PIPE_CLK,
366 .ops = &clk_regmap_phy_mux_ops,
371 static struct clk_regmap_mux gcc_ufs_phy_rx_symbol_0_clk_src = {
375 .parent_map = gcc_parent_map_7,
377 .hw.init = &(const struct clk_init_data) {
378 .name = "gcc_ufs_phy_rx_symbol_0_clk_src",
379 .parent_data = gcc_parent_data_7,
380 .num_parents = ARRAY_SIZE(gcc_parent_data_7),
381 .ops = &clk_regmap_mux_closest_ops,
386 static struct clk_regmap_mux gcc_ufs_phy_rx_symbol_1_clk_src = {
390 .parent_map = gcc_parent_map_8,
392 .hw.init = &(const struct clk_init_data) {
393 .name = "gcc_ufs_phy_rx_symbol_1_clk_src",
394 .parent_data = gcc_parent_data_8,
395 .num_parents = ARRAY_SIZE(gcc_parent_data_8),
396 .ops = &clk_regmap_mux_closest_ops,
401 static struct clk_regmap_mux gcc_ufs_phy_tx_symbol_0_clk_src = {
405 .parent_map = gcc_parent_map_9,
407 .hw.init = &(const struct clk_init_data) {
408 .name = "gcc_ufs_phy_tx_symbol_0_clk_src",
409 .parent_data = gcc_parent_data_9,
410 .num_parents = ARRAY_SIZE(gcc_parent_data_9),
411 .ops = &clk_regmap_mux_closest_ops,
416 static struct clk_regmap_mux gcc_usb3_prim_phy_pipe_clk_src = {
420 .parent_map = gcc_parent_map_10,
422 .hw.init = &(const struct clk_init_data) {
423 .name = "gcc_usb3_prim_phy_pipe_clk_src",
424 .parent_data = gcc_parent_data_10,
425 .num_parents = ARRAY_SIZE(gcc_parent_data_10),
426 .ops = &clk_regmap_mux_closest_ops,
431 static const struct freq_tbl ftbl_gcc_gp1_clk_src[] = {
432 F(50000000, P_GCC_GPLL0_OUT_EVEN, 6, 0, 0),
433 F(100000000, P_GCC_GPLL0_OUT_MAIN, 6, 0, 0),
434 F(200000000, P_GCC_GPLL0_OUT_MAIN, 3, 0, 0),
438 static struct clk_rcg2 gcc_gp1_clk_src = {
442 .parent_map = gcc_parent_map_1,
443 .freq_tbl = ftbl_gcc_gp1_clk_src,
444 .clkr.hw.init = &(const struct clk_init_data) {
445 .name = "gcc_gp1_clk_src",
446 .parent_data = gcc_parent_data_1,
447 .num_parents = ARRAY_SIZE(gcc_parent_data_1),
448 .flags = CLK_SET_RATE_PARENT,
449 .ops = &clk_rcg2_shared_ops,
453 static struct clk_rcg2 gcc_gp2_clk_src = {
457 .parent_map = gcc_parent_map_1,
458 .freq_tbl = ftbl_gcc_gp1_clk_src,
459 .clkr.hw.init = &(const struct clk_init_data) {
460 .name = "gcc_gp2_clk_src",
461 .parent_data = gcc_parent_data_1,
462 .num_parents = ARRAY_SIZE(gcc_parent_data_1),
463 .flags = CLK_SET_RATE_PARENT,
464 .ops = &clk_rcg2_shared_ops,
468 static struct clk_rcg2 gcc_gp3_clk_src = {
472 .parent_map = gcc_parent_map_1,
473 .freq_tbl = ftbl_gcc_gp1_clk_src,
474 .clkr.hw.init = &(const struct clk_init_data) {
475 .name = "gcc_gp3_clk_src",
476 .parent_data = gcc_parent_data_1,
477 .num_parents = ARRAY_SIZE(gcc_parent_data_1),
478 .flags = CLK_SET_RATE_PARENT,
479 .ops = &clk_rcg2_shared_ops,
483 static const struct freq_tbl ftbl_gcc_pcie_0_aux_clk_src[] = {
484 F(9600000, P_BI_TCXO, 2, 0, 0),
485 F(19200000, P_BI_TCXO, 1, 0, 0),
489 static struct clk_rcg2 gcc_pcie_0_aux_clk_src = {
493 .parent_map = gcc_parent_map_3,
494 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
495 .clkr.hw.init = &(const struct clk_init_data) {
496 .name = "gcc_pcie_0_aux_clk_src",
497 .parent_data = gcc_parent_data_3,
498 .num_parents = ARRAY_SIZE(gcc_parent_data_3),
499 .flags = CLK_SET_RATE_PARENT,
500 .ops = &clk_rcg2_shared_ops,
504 static const struct freq_tbl ftbl_gcc_pcie_0_phy_rchng_clk_src[] = {
505 F(19200000, P_BI_TCXO, 1, 0, 0),
506 F(100000000, P_GCC_GPLL0_OUT_MAIN, 6, 0, 0),
510 static struct clk_rcg2 gcc_pcie_0_phy_rchng_clk_src = {
514 .parent_map = gcc_parent_map_0,
515 .freq_tbl = ftbl_gcc_pcie_0_phy_rchng_clk_src,
516 .clkr.hw.init = &(const struct clk_init_data) {
517 .name = "gcc_pcie_0_phy_rchng_clk_src",
518 .parent_data = gcc_parent_data_0,
519 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
520 .flags = CLK_SET_RATE_PARENT,
521 .ops = &clk_rcg2_shared_ops,
525 static const struct freq_tbl ftbl_gcc_pdm2_clk_src[] = {
526 F(60000000, P_GCC_GPLL0_OUT_MAIN, 10, 0, 0),
530 static struct clk_rcg2 gcc_pdm2_clk_src = {
534 .parent_map = gcc_parent_map_0,
535 .freq_tbl = ftbl_gcc_pdm2_clk_src,
536 .clkr.hw.init = &(const struct clk_init_data) {
537 .name = "gcc_pdm2_clk_src",
538 .parent_data = gcc_parent_data_0,
539 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
540 .flags = CLK_SET_RATE_PARENT,
541 .ops = &clk_rcg2_shared_ops,
545 static const struct freq_tbl ftbl_gcc_qupv3_wrap0_s0_clk_src[] = {
546 F(7372800, P_GCC_GPLL0_OUT_EVEN, 1, 384, 15625),
547 F(14745600, P_GCC_GPLL0_OUT_EVEN, 1, 768, 15625),
548 F(19200000, P_BI_TCXO, 1, 0, 0),
549 F(29491200, P_GCC_GPLL0_OUT_EVEN, 1, 1536, 15625),
550 F(32000000, P_GCC_GPLL0_OUT_EVEN, 1, 8, 75),
551 F(48000000, P_GCC_GPLL0_OUT_EVEN, 1, 4, 25),
552 F(64000000, P_GCC_GPLL0_OUT_EVEN, 1, 16, 75),
553 F(75000000, P_GCC_GPLL0_OUT_EVEN, 4, 0, 0),
554 F(80000000, P_GCC_GPLL0_OUT_EVEN, 1, 4, 15),
555 F(96000000, P_GCC_GPLL0_OUT_EVEN, 1, 8, 25),
556 F(100000000, P_GCC_GPLL0_OUT_MAIN, 6, 0, 0),
557 F(102400000, P_GCC_GPLL0_OUT_EVEN, 1, 128, 375),
558 F(112000000, P_GCC_GPLL0_OUT_EVEN, 1, 28, 75),
559 F(117964800, P_GCC_GPLL0_OUT_EVEN, 1, 6144, 15625),
560 F(120000000, P_GCC_GPLL0_OUT_EVEN, 2.5, 0, 0),
564 static struct clk_init_data gcc_qupv3_wrap0_s0_clk_src_init = {
565 .name = "gcc_qupv3_wrap0_s0_clk_src",
566 .parent_data = gcc_parent_data_0,
567 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
568 .flags = CLK_SET_RATE_PARENT,
569 .ops = &clk_rcg2_shared_ops,
572 static struct clk_rcg2 gcc_qupv3_wrap0_s0_clk_src = {
576 .parent_map = gcc_parent_map_0,
577 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
578 .clkr.hw.init = &gcc_qupv3_wrap0_s0_clk_src_init,
581 static const struct freq_tbl ftbl_gcc_qupv3_wrap0_s1_clk_src[] = {
582 F(7372800, P_GCC_GPLL0_OUT_EVEN, 1, 384, 15625),
583 F(14745600, P_GCC_GPLL0_OUT_EVEN, 1, 768, 15625),
584 F(19200000, P_BI_TCXO, 1, 0, 0),
585 F(29491200, P_GCC_GPLL0_OUT_EVEN, 1, 1536, 15625),
586 F(32000000, P_GCC_GPLL0_OUT_EVEN, 1, 8, 75),
587 F(48000000, P_GCC_GPLL0_OUT_EVEN, 1, 4, 25),
588 F(64000000, P_GCC_GPLL0_OUT_EVEN, 1, 16, 75),
589 F(75000000, P_GCC_GPLL0_OUT_EVEN, 4, 0, 0),
590 F(80000000, P_GCC_GPLL0_OUT_EVEN, 1, 4, 15),
591 F(96000000, P_GCC_GPLL0_OUT_EVEN, 1, 8, 25),
592 F(100000000, P_GCC_GPLL0_OUT_MAIN, 6, 0, 0),
596 static struct clk_init_data gcc_qupv3_wrap0_s1_clk_src_init = {
597 .name = "gcc_qupv3_wrap0_s1_clk_src",
598 .parent_data = gcc_parent_data_0,
599 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
600 .flags = CLK_SET_RATE_PARENT,
601 .ops = &clk_rcg2_shared_ops,
604 static struct clk_rcg2 gcc_qupv3_wrap0_s1_clk_src = {
608 .parent_map = gcc_parent_map_0,
609 .freq_tbl = ftbl_gcc_qupv3_wrap0_s1_clk_src,
610 .clkr.hw.init = &gcc_qupv3_wrap0_s1_clk_src_init,
613 static struct clk_init_data gcc_qupv3_wrap0_s2_clk_src_init = {
614 .name = "gcc_qupv3_wrap0_s2_clk_src",
615 .parent_data = gcc_parent_data_0,
616 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
617 .flags = CLK_SET_RATE_PARENT,
618 .ops = &clk_rcg2_shared_ops,
621 static struct clk_rcg2 gcc_qupv3_wrap0_s2_clk_src = {
625 .parent_map = gcc_parent_map_0,
626 .freq_tbl = ftbl_gcc_qupv3_wrap0_s1_clk_src,
627 .clkr.hw.init = &gcc_qupv3_wrap0_s2_clk_src_init,
630 static struct clk_init_data gcc_qupv3_wrap0_s3_clk_src_init = {
631 .name = "gcc_qupv3_wrap0_s3_clk_src",
632 .parent_data = gcc_parent_data_0,
633 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
634 .flags = CLK_SET_RATE_PARENT,
635 .ops = &clk_rcg2_shared_ops,
638 static struct clk_rcg2 gcc_qupv3_wrap0_s3_clk_src = {
642 .parent_map = gcc_parent_map_0,
643 .freq_tbl = ftbl_gcc_qupv3_wrap0_s1_clk_src,
644 .clkr.hw.init = &gcc_qupv3_wrap0_s3_clk_src_init,
647 static struct clk_init_data gcc_qupv3_wrap0_s4_clk_src_init = {
648 .name = "gcc_qupv3_wrap0_s4_clk_src",
649 .parent_data = gcc_parent_data_0,
650 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
651 .flags = CLK_SET_RATE_PARENT,
652 .ops = &clk_rcg2_shared_ops,
655 static struct clk_rcg2 gcc_qupv3_wrap0_s4_clk_src = {
659 .parent_map = gcc_parent_map_0,
660 .freq_tbl = ftbl_gcc_qupv3_wrap0_s1_clk_src,
661 .clkr.hw.init = &gcc_qupv3_wrap0_s4_clk_src_init,
664 static struct clk_init_data gcc_qupv3_wrap1_s0_clk_src_init = {
665 .name = "gcc_qupv3_wrap1_s0_clk_src",
666 .parent_data = gcc_parent_data_0,
667 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
668 .flags = CLK_SET_RATE_PARENT,
669 .ops = &clk_rcg2_shared_ops,
672 static struct clk_rcg2 gcc_qupv3_wrap1_s0_clk_src = {
676 .parent_map = gcc_parent_map_0,
677 .freq_tbl = ftbl_gcc_qupv3_wrap0_s0_clk_src,
678 .clkr.hw.init = &gcc_qupv3_wrap1_s0_clk_src_init,
681 static struct clk_init_data gcc_qupv3_wrap1_s1_clk_src_init = {
682 .name = "gcc_qupv3_wrap1_s1_clk_src",
683 .parent_data = gcc_parent_data_0,
684 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
685 .flags = CLK_SET_RATE_PARENT,
686 .ops = &clk_rcg2_shared_ops,
689 static struct clk_rcg2 gcc_qupv3_wrap1_s1_clk_src = {
693 .parent_map = gcc_parent_map_0,
694 .freq_tbl = ftbl_gcc_qupv3_wrap0_s1_clk_src,
695 .clkr.hw.init = &gcc_qupv3_wrap1_s1_clk_src_init,
698 static struct clk_init_data gcc_qupv3_wrap1_s2_clk_src_init = {
699 .name = "gcc_qupv3_wrap1_s2_clk_src",
700 .parent_data = gcc_parent_data_0,
701 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
702 .flags = CLK_SET_RATE_PARENT,
703 .ops = &clk_rcg2_shared_ops,
706 static struct clk_rcg2 gcc_qupv3_wrap1_s2_clk_src = {
710 .parent_map = gcc_parent_map_0,
711 .freq_tbl = ftbl_gcc_qupv3_wrap0_s1_clk_src,
712 .clkr.hw.init = &gcc_qupv3_wrap1_s2_clk_src_init,
715 static struct clk_init_data gcc_qupv3_wrap1_s3_clk_src_init = {
716 .name = "gcc_qupv3_wrap1_s3_clk_src",
717 .parent_data = gcc_parent_data_0,
718 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
719 .flags = CLK_SET_RATE_PARENT,
720 .ops = &clk_rcg2_shared_ops,
723 static struct clk_rcg2 gcc_qupv3_wrap1_s3_clk_src = {
727 .parent_map = gcc_parent_map_0,
728 .freq_tbl = ftbl_gcc_qupv3_wrap0_s1_clk_src,
729 .clkr.hw.init = &gcc_qupv3_wrap1_s3_clk_src_init,
732 static struct clk_init_data gcc_qupv3_wrap1_s4_clk_src_init = {
733 .name = "gcc_qupv3_wrap1_s4_clk_src",
734 .parent_data = gcc_parent_data_0,
735 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
736 .flags = CLK_SET_RATE_PARENT,
737 .ops = &clk_rcg2_shared_ops,
740 static struct clk_rcg2 gcc_qupv3_wrap1_s4_clk_src = {
744 .parent_map = gcc_parent_map_0,
745 .freq_tbl = ftbl_gcc_qupv3_wrap0_s1_clk_src,
746 .clkr.hw.init = &gcc_qupv3_wrap1_s4_clk_src_init,
749 static const struct freq_tbl ftbl_gcc_sdcc1_apps_clk_src[] = {
750 F(144000, P_BI_TCXO, 16, 3, 25),
751 F(400000, P_BI_TCXO, 12, 1, 4),
752 F(20000000, P_GCC_GPLL0_OUT_EVEN, 5, 1, 3),
753 F(25000000, P_GCC_GPLL0_OUT_EVEN, 12, 0, 0),
754 F(50000000, P_GCC_GPLL0_OUT_EVEN, 6, 0, 0),
755 F(100000000, P_GCC_GPLL0_OUT_ODD, 2, 0, 0),
756 F(192000000, P_GCC_GPLL10_OUT_MAIN, 2, 0, 0),
757 F(384000000, P_GCC_GPLL10_OUT_MAIN, 1, 0, 0),
761 static struct clk_rcg2 gcc_sdcc1_apps_clk_src = {
765 .parent_map = gcc_parent_map_4,
766 .freq_tbl = ftbl_gcc_sdcc1_apps_clk_src,
767 .clkr.hw.init = &(const struct clk_init_data) {
768 .name = "gcc_sdcc1_apps_clk_src",
769 .parent_data = gcc_parent_data_4,
770 .num_parents = ARRAY_SIZE(gcc_parent_data_4),
771 .flags = CLK_SET_RATE_PARENT,
772 .ops = &clk_rcg2_floor_ops,
776 static const struct freq_tbl ftbl_gcc_sdcc1_ice_core_clk_src[] = {
777 F(100000000, P_GCC_GPLL0_OUT_ODD, 2, 0, 0),
778 F(150000000, P_GCC_GPLL0_OUT_EVEN, 2, 0, 0),
779 F(300000000, P_GCC_GPLL0_OUT_EVEN, 1, 0, 0),
783 static struct clk_rcg2 gcc_sdcc1_ice_core_clk_src = {
787 .parent_map = gcc_parent_map_4,
788 .freq_tbl = ftbl_gcc_sdcc1_ice_core_clk_src,
789 .clkr.hw.init = &(const struct clk_init_data) {
790 .name = "gcc_sdcc1_ice_core_clk_src",
791 .parent_data = gcc_parent_data_4,
792 .num_parents = ARRAY_SIZE(gcc_parent_data_4),
793 .flags = CLK_SET_RATE_PARENT,
794 .ops = &clk_rcg2_floor_ops,
798 static const struct freq_tbl ftbl_gcc_sdcc2_apps_clk_src[] = {
799 F(400000, P_BI_TCXO, 12, 1, 4),
800 F(25000000, P_GCC_GPLL0_OUT_EVEN, 12, 0, 0),
801 F(50000000, P_GCC_GPLL0_OUT_EVEN, 6, 0, 0),
802 F(100000000, P_GCC_GPLL0_OUT_EVEN, 3, 0, 0),
803 F(202000000, P_GCC_GPLL9_OUT_MAIN, 4, 0, 0),
807 static struct clk_rcg2 gcc_sdcc2_apps_clk_src = {
811 .parent_map = gcc_parent_map_6,
812 .freq_tbl = ftbl_gcc_sdcc2_apps_clk_src,
813 .clkr.hw.init = &(const struct clk_init_data) {
814 .name = "gcc_sdcc2_apps_clk_src",
815 .parent_data = gcc_parent_data_6,
816 .num_parents = ARRAY_SIZE(gcc_parent_data_6),
817 .flags = CLK_SET_RATE_PARENT,
818 .ops = &clk_rcg2_floor_ops,
822 static const struct freq_tbl ftbl_gcc_ufs_phy_axi_clk_src[] = {
823 F(25000000, P_GCC_GPLL0_OUT_EVEN, 12, 0, 0),
824 F(75000000, P_GCC_GPLL0_OUT_EVEN, 4, 0, 0),
825 F(150000000, P_GCC_GPLL0_OUT_MAIN, 4, 0, 0),
826 F(300000000, P_GCC_GPLL0_OUT_MAIN, 2, 0, 0),
830 static struct clk_rcg2 gcc_ufs_phy_axi_clk_src = {
834 .parent_map = gcc_parent_map_0,
835 .freq_tbl = ftbl_gcc_ufs_phy_axi_clk_src,
836 .clkr.hw.init = &(const struct clk_init_data) {
837 .name = "gcc_ufs_phy_axi_clk_src",
838 .parent_data = gcc_parent_data_0,
839 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
840 .flags = CLK_SET_RATE_PARENT,
841 .ops = &clk_rcg2_shared_ops,
845 static const struct freq_tbl ftbl_gcc_ufs_phy_ice_core_clk_src[] = {
846 F(100000000, P_GCC_GPLL0_OUT_MAIN, 6, 0, 0),
847 F(200000000, P_GCC_GPLL0_OUT_MAIN, 3, 0, 0),
848 F(403000000, P_GCC_GPLL4_OUT_MAIN, 2, 0, 0),
852 static struct clk_rcg2 gcc_ufs_phy_ice_core_clk_src = {
856 .parent_map = gcc_parent_map_2,
857 .freq_tbl = ftbl_gcc_ufs_phy_ice_core_clk_src,
858 .clkr.hw.init = &(const struct clk_init_data) {
859 .name = "gcc_ufs_phy_ice_core_clk_src",
860 .parent_data = gcc_parent_data_2,
861 .num_parents = ARRAY_SIZE(gcc_parent_data_2),
862 .flags = CLK_SET_RATE_PARENT,
863 .ops = &clk_rcg2_shared_ops,
867 static struct clk_rcg2 gcc_ufs_phy_phy_aux_clk_src = {
871 .parent_map = gcc_parent_map_5,
872 .freq_tbl = ftbl_gcc_pcie_0_aux_clk_src,
873 .clkr.hw.init = &(const struct clk_init_data) {
874 .name = "gcc_ufs_phy_phy_aux_clk_src",
875 .parent_data = gcc_parent_data_5,
876 .num_parents = ARRAY_SIZE(gcc_parent_data_5),
877 .flags = CLK_SET_RATE_PARENT,
878 .ops = &clk_rcg2_shared_ops,
882 static const struct freq_tbl ftbl_gcc_ufs_phy_unipro_core_clk_src[] = {
883 F(75000000, P_GCC_GPLL0_OUT_EVEN, 4, 0, 0),
884 F(150000000, P_GCC_GPLL0_OUT_MAIN, 4, 0, 0),
885 F(300000000, P_GCC_GPLL0_OUT_MAIN, 2, 0, 0),
889 static struct clk_rcg2 gcc_ufs_phy_unipro_core_clk_src = {
893 .parent_map = gcc_parent_map_0,
894 .freq_tbl = ftbl_gcc_ufs_phy_unipro_core_clk_src,
895 .clkr.hw.init = &(const struct clk_init_data) {
896 .name = "gcc_ufs_phy_unipro_core_clk_src",
897 .parent_data = gcc_parent_data_0,
898 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
899 .flags = CLK_SET_RATE_PARENT,
900 .ops = &clk_rcg2_shared_ops,
904 static const struct freq_tbl ftbl_gcc_usb30_prim_master_clk_src[] = {
905 F(66666667, P_GCC_GPLL0_OUT_EVEN, 4.5, 0, 0),
906 F(133333333, P_GCC_GPLL0_OUT_MAIN, 4.5, 0, 0),
907 F(200000000, P_GCC_GPLL0_OUT_MAIN, 3, 0, 0),
908 F(240000000, P_GCC_GPLL0_OUT_MAIN, 2.5, 0, 0),
912 static struct clk_rcg2 gcc_usb30_prim_master_clk_src = {
916 .parent_map = gcc_parent_map_0,
917 .freq_tbl = ftbl_gcc_usb30_prim_master_clk_src,
918 .clkr.hw.init = &(const struct clk_init_data) {
919 .name = "gcc_usb30_prim_master_clk_src",
920 .parent_data = gcc_parent_data_0,
921 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
922 .flags = CLK_SET_RATE_PARENT,
923 .ops = &clk_rcg2_shared_ops,
927 static const struct freq_tbl ftbl_gcc_usb30_prim_mock_utmi_clk_src[] = {
928 F(19200000, P_BI_TCXO, 1, 0, 0),
932 static struct clk_rcg2 gcc_usb30_prim_mock_utmi_clk_src = {
936 .parent_map = gcc_parent_map_0,
937 .freq_tbl = ftbl_gcc_usb30_prim_mock_utmi_clk_src,
938 .clkr.hw.init = &(const struct clk_init_data) {
939 .name = "gcc_usb30_prim_mock_utmi_clk_src",
940 .parent_data = gcc_parent_data_0,
941 .num_parents = ARRAY_SIZE(gcc_parent_data_0),
942 .flags = CLK_SET_RATE_PARENT,
943 .ops = &clk_rcg2_shared_ops,
947 static struct clk_rcg2 gcc_usb3_prim_phy_aux_clk_src = {
951 .parent_map = gcc_parent_map_3,
952 .freq_tbl = ftbl_gcc_usb30_prim_mock_utmi_clk_src,
953 .clkr.hw.init = &(const struct clk_init_data) {
954 .name = "gcc_usb3_prim_phy_aux_clk_src",
955 .parent_data = gcc_parent_data_3,
956 .num_parents = ARRAY_SIZE(gcc_parent_data_3),
957 .flags = CLK_SET_RATE_PARENT,
958 .ops = &clk_rcg2_shared_ops,
962 static const struct freq_tbl ftbl_gcc_video_venus_clk_src[] = {
963 F(133333333, P_GCC_GPLL3_OUT_MAIN, 3, 0, 0),
964 F(240000000, P_GCC_GPLL3_OUT_MAIN, 2, 0, 0),
965 F(365000000, P_GCC_GPLL3_OUT_MAIN, 2, 0, 0),
966 F(384000000, P_GCC_GPLL3_OUT_MAIN, 2, 0, 0),
970 static struct clk_rcg2 gcc_video_venus_clk_src = {
974 .parent_map = gcc_parent_map_11,
975 .freq_tbl = ftbl_gcc_video_venus_clk_src,
976 .clkr.hw.init = &(const struct clk_init_data) {
977 .name = "gcc_video_venus_clk_src",
978 .parent_data = gcc_parent_data_11,
979 .num_parents = ARRAY_SIZE(gcc_parent_data_11),
980 .flags = CLK_SET_RATE_PARENT,
981 .ops = &clk_rcg2_shared_ops,
985 static struct clk_regmap_div gcc_pcie_0_pipe_div2_clk_src = {
989 .clkr.hw.init = &(const struct clk_init_data) {
990 .name = "gcc_pcie_0_pipe_div2_clk_src",
991 .parent_hws = (const struct clk_hw*[]) {
992 &gcc_pcie_0_pipe_clk_src.clkr.hw,
995 .flags = CLK_SET_RATE_PARENT,
996 .ops = &clk_regmap_div_ro_ops,
1000 static struct clk_regmap_div gcc_usb30_prim_mock_utmi_postdiv_clk_src = {
1004 .clkr.hw.init = &(const struct clk_init_data) {
1005 .name = "gcc_usb30_prim_mock_utmi_postdiv_clk_src",
1006 .parent_hws = (const struct clk_hw*[]) {
1007 &gcc_usb30_prim_mock_utmi_clk_src.clkr.hw,
1010 .flags = CLK_SET_RATE_PARENT,
1011 .ops = &clk_regmap_div_ro_ops,
1015 static struct clk_branch gcc_aggre_noc_pcie_0_axi_clk = {
1016 .halt_reg = 0x7b08c,
1017 .halt_check = BRANCH_HALT_SKIP,
1018 .hwcg_reg = 0x7b08c,
1021 .enable_reg = 0x62000,
1022 .enable_mask = BIT(12),
1023 .hw.init = &(const struct clk_init_data) {
1024 .name = "gcc_aggre_noc_pcie_0_axi_clk",
1025 .ops = &clk_branch2_ops,
1030 static struct clk_branch gcc_aggre_ufs_phy_axi_clk = {
1031 .halt_reg = 0x870d4,
1032 .halt_check = BRANCH_HALT_VOTED,
1033 .hwcg_reg = 0x870d4,
1036 .enable_reg = 0x870d4,
1037 .enable_mask = BIT(0),
1038 .hw.init = &(const struct clk_init_data) {
1039 .name = "gcc_aggre_ufs_phy_axi_clk",
1040 .parent_hws = (const struct clk_hw*[]) {
1041 &gcc_ufs_phy_axi_clk_src.clkr.hw,
1044 .flags = CLK_SET_RATE_PARENT,
1045 .ops = &clk_branch2_ops,
1050 static struct clk_branch gcc_aggre_ufs_phy_axi_hw_ctl_clk = {
1051 .halt_reg = 0x870d4,
1052 .halt_check = BRANCH_HALT_VOTED,
1053 .hwcg_reg = 0x870d4,
1056 .enable_reg = 0x870d4,
1057 .enable_mask = BIT(1),
1058 .hw.init = &(const struct clk_init_data) {
1059 .name = "gcc_aggre_ufs_phy_axi_hw_ctl_clk",
1060 .parent_hws = (const struct clk_hw*[]) {
1061 &gcc_ufs_phy_axi_clk_src.clkr.hw,
1064 .flags = CLK_SET_RATE_PARENT,
1065 .ops = &clk_branch2_ops,
1070 static struct clk_branch gcc_aggre_usb3_prim_axi_clk = {
1071 .halt_reg = 0x49088,
1072 .halt_check = BRANCH_HALT_VOTED,
1073 .hwcg_reg = 0x49088,
1076 .enable_reg = 0x49088,
1077 .enable_mask = BIT(0),
1078 .hw.init = &(const struct clk_init_data) {
1079 .name = "gcc_aggre_usb3_prim_axi_clk",
1080 .parent_hws = (const struct clk_hw*[]) {
1081 &gcc_usb30_prim_master_clk_src.clkr.hw,
1084 .flags = CLK_SET_RATE_PARENT,
1085 .ops = &clk_branch2_ops,
1090 static struct clk_branch gcc_boot_rom_ahb_clk = {
1091 .halt_reg = 0x48004,
1092 .halt_check = BRANCH_HALT_VOTED,
1093 .hwcg_reg = 0x48004,
1096 .enable_reg = 0x62000,
1097 .enable_mask = BIT(10),
1098 .hw.init = &(const struct clk_init_data) {
1099 .name = "gcc_boot_rom_ahb_clk",
1100 .ops = &clk_branch2_ops,
1105 static struct clk_branch gcc_camera_hf_axi_clk = {
1106 .halt_reg = 0x36010,
1107 .halt_check = BRANCH_HALT_SKIP,
1108 .hwcg_reg = 0x36010,
1111 .enable_reg = 0x36010,
1112 .enable_mask = BIT(0),
1113 .hw.init = &(const struct clk_init_data) {
1114 .name = "gcc_camera_hf_axi_clk",
1115 .ops = &clk_branch2_ops,
1120 static struct clk_branch gcc_camera_sf_axi_clk = {
1121 .halt_reg = 0x36014,
1122 .halt_check = BRANCH_HALT_SKIP,
1123 .hwcg_reg = 0x36014,
1126 .enable_reg = 0x36014,
1127 .enable_mask = BIT(0),
1128 .hw.init = &(const struct clk_init_data) {
1129 .name = "gcc_camera_sf_axi_clk",
1130 .ops = &clk_branch2_ops,
1135 static struct clk_branch gcc_cfg_noc_pcie_anoc_ahb_clk = {
1136 .halt_reg = 0x20030,
1137 .halt_check = BRANCH_HALT_VOTED,
1138 .hwcg_reg = 0x20030,
1141 .enable_reg = 0x62000,
1142 .enable_mask = BIT(20),
1143 .hw.init = &(const struct clk_init_data) {
1144 .name = "gcc_cfg_noc_pcie_anoc_ahb_clk",
1145 .ops = &clk_branch2_ops,
1150 static struct clk_branch gcc_cfg_noc_usb3_prim_axi_clk = {
1151 .halt_reg = 0x49084,
1152 .halt_check = BRANCH_HALT_VOTED,
1153 .hwcg_reg = 0x49084,
1156 .enable_reg = 0x49084,
1157 .enable_mask = BIT(0),
1158 .hw.init = &(const struct clk_init_data) {
1159 .name = "gcc_cfg_noc_usb3_prim_axi_clk",
1160 .parent_hws = (const struct clk_hw*[]) {
1161 &gcc_usb30_prim_master_clk_src.clkr.hw,
1164 .flags = CLK_SET_RATE_PARENT,
1165 .ops = &clk_branch2_ops,
1170 static struct clk_branch gcc_ddrss_gpu_axi_clk = {
1171 .halt_reg = 0x81154,
1172 .halt_check = BRANCH_HALT_SKIP,
1173 .hwcg_reg = 0x81154,
1176 .enable_reg = 0x81154,
1177 .enable_mask = BIT(0),
1178 .hw.init = &(const struct clk_init_data) {
1179 .name = "gcc_ddrss_gpu_axi_clk",
1180 .ops = &clk_branch2_aon_ops,
1185 static struct clk_branch gcc_ddrss_pcie_sf_tbu_clk = {
1186 .halt_reg = 0x7b090,
1187 .halt_check = BRANCH_HALT_SKIP,
1188 .hwcg_reg = 0x7b090,
1191 .enable_reg = 0x62000,
1192 .enable_mask = BIT(19),
1193 .hw.init = &(const struct clk_init_data) {
1194 .name = "gcc_ddrss_pcie_sf_tbu_clk",
1195 .ops = &clk_branch2_ops,
1200 static struct clk_branch gcc_disp_hf_axi_clk = {
1201 .halt_reg = 0x3700c,
1202 .halt_check = BRANCH_HALT_SKIP,
1203 .hwcg_reg = 0x3700c,
1206 .enable_reg = 0x3700c,
1207 .enable_mask = BIT(0),
1208 .hw.init = &(const struct clk_init_data) {
1209 .name = "gcc_disp_hf_axi_clk",
1210 .ops = &clk_branch2_ops,
1215 static struct clk_branch gcc_eusb3_0_clkref_en = {
1216 .halt_reg = 0x9c00c,
1217 .halt_check = BRANCH_HALT_DELAY,
1219 .enable_reg = 0x9c00c,
1220 .enable_mask = BIT(0),
1221 .hw.init = &(const struct clk_init_data) {
1222 .name = "gcc_eusb3_0_clkref_en",
1223 .ops = &clk_branch2_ops,
1228 static struct clk_branch gcc_gp1_clk = {
1229 .halt_reg = 0x74000,
1230 .halt_check = BRANCH_HALT,
1232 .enable_reg = 0x74000,
1233 .enable_mask = BIT(0),
1234 .hw.init = &(const struct clk_init_data) {
1235 .name = "gcc_gp1_clk",
1236 .parent_hws = (const struct clk_hw*[]) {
1237 &gcc_gp1_clk_src.clkr.hw,
1240 .flags = CLK_SET_RATE_PARENT,
1241 .ops = &clk_branch2_ops,
1246 static struct clk_branch gcc_gp2_clk = {
1247 .halt_reg = 0x75000,
1248 .halt_check = BRANCH_HALT,
1250 .enable_reg = 0x75000,
1251 .enable_mask = BIT(0),
1252 .hw.init = &(const struct clk_init_data) {
1253 .name = "gcc_gp2_clk",
1254 .parent_hws = (const struct clk_hw*[]) {
1255 &gcc_gp2_clk_src.clkr.hw,
1258 .flags = CLK_SET_RATE_PARENT,
1259 .ops = &clk_branch2_ops,
1264 static struct clk_branch gcc_gp3_clk = {
1265 .halt_reg = 0x76000,
1266 .halt_check = BRANCH_HALT,
1268 .enable_reg = 0x76000,
1269 .enable_mask = BIT(0),
1270 .hw.init = &(const struct clk_init_data) {
1271 .name = "gcc_gp3_clk",
1272 .parent_hws = (const struct clk_hw*[]) {
1273 &gcc_gp3_clk_src.clkr.hw,
1276 .flags = CLK_SET_RATE_PARENT,
1277 .ops = &clk_branch2_ops,
1282 static struct clk_branch gcc_gpu_gpll0_clk_src = {
1283 .halt_check = BRANCH_HALT_DELAY,
1285 .enable_reg = 0x62000,
1286 .enable_mask = BIT(15),
1287 .hw.init = &(const struct clk_init_data) {
1288 .name = "gcc_gpu_gpll0_clk_src",
1289 .parent_hws = (const struct clk_hw*[]) {
1293 .flags = CLK_SET_RATE_PARENT,
1294 .ops = &clk_branch2_ops,
1299 static struct clk_branch gcc_gpu_gpll0_div_clk_src = {
1300 .halt_check = BRANCH_HALT_DELAY,
1302 .enable_reg = 0x62000,
1303 .enable_mask = BIT(16),
1304 .hw.init = &(const struct clk_init_data) {
1305 .name = "gcc_gpu_gpll0_div_clk_src",
1306 .parent_hws = (const struct clk_hw*[]) {
1307 &gcc_gpll0_out_even.clkr.hw,
1310 .flags = CLK_SET_RATE_PARENT,
1311 .ops = &clk_branch2_ops,
1316 static struct clk_branch gcc_gpu_memnoc_gfx_clk = {
1317 .halt_reg = 0x81010,
1318 .halt_check = BRANCH_HALT_VOTED,
1319 .hwcg_reg = 0x81010,
1322 .enable_reg = 0x81010,
1323 .enable_mask = BIT(0),
1324 .hw.init = &(const struct clk_init_data) {
1325 .name = "gcc_gpu_memnoc_gfx_clk",
1326 .ops = &clk_branch2_ops,
1331 static struct clk_branch gcc_gpu_snoc_dvm_gfx_clk = {
1332 .halt_reg = 0x81018,
1333 .halt_check = BRANCH_HALT_DELAY,
1335 .enable_reg = 0x81018,
1336 .enable_mask = BIT(0),
1337 .hw.init = &(const struct clk_init_data) {
1338 .name = "gcc_gpu_snoc_dvm_gfx_clk",
1339 .ops = &clk_branch2_ops,
1344 static struct clk_branch gcc_hlos1_vote_aggre_noc_mmu_audio_tbu_clk = {
1345 .halt_reg = 0x8d004,
1346 .halt_check = BRANCH_HALT_VOTED,
1348 .enable_reg = 0x8d004,
1349 .enable_mask = BIT(0),
1350 .hw.init = &(const struct clk_init_data){
1351 .name = "gcc_hlos1_vote_aggre_noc_mmu_audio_tbu_clk",
1352 .ops = &clk_branch2_ops,
1357 static struct clk_branch gcc_hlos1_vote_aggre_noc_mmu_pcie_tbu_clk = {
1358 .halt_reg = 0x8d010,
1359 .halt_check = BRANCH_HALT_VOTED,
1361 .enable_reg = 0x8d010,
1362 .enable_mask = BIT(0),
1363 .hw.init = &(const struct clk_init_data){
1364 .name = "gcc_hlos1_vote_aggre_noc_mmu_pcie_tbu_clk",
1365 .ops = &clk_branch2_ops,
1370 static struct clk_branch gcc_hlos1_vote_aggre_noc_mmu_tbu1_clk = {
1371 .halt_reg = 0x8d008,
1372 .halt_check = BRANCH_HALT_VOTED,
1374 .enable_reg = 0x8d008,
1375 .enable_mask = BIT(0),
1376 .hw.init = &(const struct clk_init_data){
1377 .name = "gcc_hlos1_vote_aggre_noc_mmu_tbu1_clk",
1378 .ops = &clk_branch2_ops,
1383 static struct clk_branch gcc_hlos1_vote_aggre_noc_mmu_tbu2_clk = {
1384 .halt_reg = 0x8d00c,
1385 .halt_check = BRANCH_HALT_VOTED,
1387 .enable_reg = 0x8d00c,
1388 .enable_mask = BIT(0),
1389 .hw.init = &(const struct clk_init_data){
1390 .name = "gcc_hlos1_vote_aggre_noc_mmu_tbu2_clk",
1391 .ops = &clk_branch2_ops,
1396 static struct clk_branch gcc_hlos1_vote_mmnoc_mmu_tbu_hf0_clk = {
1397 .halt_reg = 0x8d018,
1398 .halt_check = BRANCH_HALT_VOTED,
1400 .enable_reg = 0x8d018,
1401 .enable_mask = BIT(0),
1402 .hw.init = &(const struct clk_init_data){
1403 .name = "gcc_hlos1_vote_mmnoc_mmu_tbu_hf0_clk",
1404 .ops = &clk_branch2_ops,
1409 static struct clk_branch gcc_hlos1_vote_mmnoc_mmu_tbu_hf1_clk = {
1410 .halt_reg = 0x8d01c,
1411 .halt_check = BRANCH_HALT_VOTED,
1413 .enable_reg = 0x8d01c,
1414 .enable_mask = BIT(0),
1415 .hw.init = &(const struct clk_init_data){
1416 .name = "gcc_hlos1_vote_mmnoc_mmu_tbu_hf1_clk",
1417 .ops = &clk_branch2_ops,
1422 static struct clk_branch gcc_hlos1_vote_mmnoc_mmu_tbu_sf0_clk = {
1423 .halt_reg = 0x8d014,
1424 .halt_check = BRANCH_HALT_VOTED,
1426 .enable_reg = 0x8d014,
1427 .enable_mask = BIT(0),
1428 .hw.init = &(const struct clk_init_data){
1429 .name = "gcc_hlos1_vote_mmnoc_mmu_tbu_sf0_clk",
1430 .ops = &clk_branch2_ops,
1435 static struct clk_branch gcc_hlos1_vote_mmu_tcu_clk = {
1436 .halt_reg = 0x8d02c,
1437 .halt_check = BRANCH_HALT_VOTED,
1439 .enable_reg = 0x8d02c,
1440 .enable_mask = BIT(0),
1441 .hw.init = &(const struct clk_init_data){
1442 .name = "gcc_hlos1_vote_mmu_tcu_clk",
1443 .ops = &clk_branch2_ops,
1448 static struct clk_branch gcc_pcie_0_aux_clk = {
1449 .halt_reg = 0x7b034,
1450 .halt_check = BRANCH_HALT_VOTED,
1452 .enable_reg = 0x62008,
1453 .enable_mask = BIT(3),
1454 .hw.init = &(const struct clk_init_data) {
1455 .name = "gcc_pcie_0_aux_clk",
1456 .parent_hws = (const struct clk_hw*[]) {
1457 &gcc_pcie_0_aux_clk_src.clkr.hw,
1460 .flags = CLK_SET_RATE_PARENT,
1461 .ops = &clk_branch2_ops,
1466 static struct clk_branch gcc_pcie_0_cfg_ahb_clk = {
1467 .halt_reg = 0x7b030,
1468 .halt_check = BRANCH_HALT_VOTED,
1469 .hwcg_reg = 0x7b030,
1472 .enable_reg = 0x62008,
1473 .enable_mask = BIT(2),
1474 .hw.init = &(const struct clk_init_data) {
1475 .name = "gcc_pcie_0_cfg_ahb_clk",
1476 .ops = &clk_branch2_ops,
1481 static struct clk_branch gcc_pcie_0_clkref_en = {
1482 .halt_reg = 0x9c004,
1483 .halt_check = BRANCH_HALT_DELAY,
1485 .enable_reg = 0x9c004,
1486 .enable_mask = BIT(0),
1487 .hw.init = &(const struct clk_init_data) {
1488 .name = "gcc_pcie_0_clkref_en",
1489 .ops = &clk_branch2_ops,
1494 static struct clk_branch gcc_pcie_0_mstr_axi_clk = {
1495 .halt_reg = 0x7b028,
1496 .halt_check = BRANCH_HALT_SKIP,
1498 .enable_reg = 0x62008,
1499 .enable_mask = BIT(1),
1500 .hw.init = &(const struct clk_init_data) {
1501 .name = "gcc_pcie_0_mstr_axi_clk",
1502 .ops = &clk_branch2_ops,
1507 static struct clk_branch gcc_pcie_0_phy_rchng_clk = {
1508 .halt_reg = 0x7b044,
1509 .halt_check = BRANCH_HALT_VOTED,
1511 .enable_reg = 0x62000,
1512 .enable_mask = BIT(22),
1513 .hw.init = &(const struct clk_init_data) {
1514 .name = "gcc_pcie_0_phy_rchng_clk",
1515 .parent_hws = (const struct clk_hw*[]) {
1516 &gcc_pcie_0_phy_rchng_clk_src.clkr.hw,
1519 .flags = CLK_SET_RATE_PARENT,
1520 .ops = &clk_branch2_ops,
1525 static struct clk_branch gcc_pcie_0_pipe_clk = {
1526 .halt_reg = 0x7b03c,
1527 .halt_check = BRANCH_HALT_SKIP,
1529 .enable_reg = 0x62008,
1530 .enable_mask = BIT(4),
1531 .hw.init = &(const struct clk_init_data) {
1532 .name = "gcc_pcie_0_pipe_clk",
1533 .parent_hws = (const struct clk_hw*[]) {
1534 &gcc_pcie_0_pipe_clk_src.clkr.hw,
1537 .flags = CLK_SET_RATE_PARENT,
1538 .ops = &clk_branch2_ops,
1543 static struct clk_branch gcc_pcie_0_pipe_div2_clk = {
1544 .halt_reg = 0x7b094,
1545 .halt_check = BRANCH_HALT_SKIP,
1547 .enable_reg = 0x62010,
1548 .enable_mask = BIT(26),
1549 .hw.init = &(const struct clk_init_data) {
1550 .name = "gcc_pcie_0_pipe_div2_clk",
1551 .parent_hws = (const struct clk_hw*[]) {
1552 &gcc_pcie_0_pipe_div2_clk_src.clkr.hw,
1555 .flags = CLK_SET_RATE_PARENT,
1556 .ops = &clk_branch2_ops,
1561 static struct clk_branch gcc_pcie_0_slv_axi_clk = {
1562 .halt_reg = 0x7b020,
1563 .halt_check = BRANCH_HALT_VOTED,
1564 .hwcg_reg = 0x7b020,
1567 .enable_reg = 0x62008,
1568 .enable_mask = BIT(0),
1569 .hw.init = &(const struct clk_init_data) {
1570 .name = "gcc_pcie_0_slv_axi_clk",
1571 .ops = &clk_branch2_ops,
1576 static struct clk_branch gcc_pcie_0_slv_q2a_axi_clk = {
1577 .halt_reg = 0x7b01c,
1578 .halt_check = BRANCH_HALT_VOTED,
1580 .enable_reg = 0x62008,
1581 .enable_mask = BIT(5),
1582 .hw.init = &(const struct clk_init_data) {
1583 .name = "gcc_pcie_0_slv_q2a_axi_clk",
1584 .ops = &clk_branch2_ops,
1589 static struct clk_branch gcc_pdm2_clk = {
1590 .halt_reg = 0x4300c,
1591 .halt_check = BRANCH_HALT,
1593 .enable_reg = 0x4300c,
1594 .enable_mask = BIT(0),
1595 .hw.init = &(const struct clk_init_data) {
1596 .name = "gcc_pdm2_clk",
1597 .parent_hws = (const struct clk_hw*[]) {
1598 &gcc_pdm2_clk_src.clkr.hw,
1601 .flags = CLK_SET_RATE_PARENT,
1602 .ops = &clk_branch2_ops,
1607 static struct clk_branch gcc_pdm_ahb_clk = {
1608 .halt_reg = 0x43004,
1609 .halt_check = BRANCH_HALT_VOTED,
1610 .hwcg_reg = 0x43004,
1613 .enable_reg = 0x43004,
1614 .enable_mask = BIT(0),
1615 .hw.init = &(const struct clk_init_data) {
1616 .name = "gcc_pdm_ahb_clk",
1617 .ops = &clk_branch2_ops,
1622 static struct clk_branch gcc_pdm_xo4_clk = {
1623 .halt_reg = 0x43008,
1624 .halt_check = BRANCH_HALT,
1626 .enable_reg = 0x43008,
1627 .enable_mask = BIT(0),
1628 .hw.init = &(const struct clk_init_data) {
1629 .name = "gcc_pdm_xo4_clk",
1630 .ops = &clk_branch2_ops,
1635 static struct clk_branch gcc_qmip_camera_nrt_ahb_clk = {
1636 .halt_reg = 0x36008,
1637 .halt_check = BRANCH_HALT_VOTED,
1638 .hwcg_reg = 0x36008,
1641 .enable_reg = 0x36008,
1642 .enable_mask = BIT(0),
1643 .hw.init = &(const struct clk_init_data) {
1644 .name = "gcc_qmip_camera_nrt_ahb_clk",
1645 .ops = &clk_branch2_ops,
1650 static struct clk_branch gcc_qmip_camera_rt_ahb_clk = {
1651 .halt_reg = 0x3600c,
1652 .halt_check = BRANCH_HALT_VOTED,
1653 .hwcg_reg = 0x3600c,
1656 .enable_reg = 0x3600c,
1657 .enable_mask = BIT(0),
1658 .hw.init = &(const struct clk_init_data) {
1659 .name = "gcc_qmip_camera_rt_ahb_clk",
1660 .ops = &clk_branch2_ops,
1665 static struct clk_branch gcc_qmip_disp_ahb_clk = {
1666 .halt_reg = 0x37008,
1667 .halt_check = BRANCH_HALT_VOTED,
1668 .hwcg_reg = 0x37008,
1671 .enable_reg = 0x37008,
1672 .enable_mask = BIT(0),
1673 .hw.init = &(const struct clk_init_data) {
1674 .name = "gcc_qmip_disp_ahb_clk",
1675 .ops = &clk_branch2_ops,
1680 static struct clk_branch gcc_qmip_gpu_ahb_clk = {
1681 .halt_reg = 0x81008,
1682 .halt_check = BRANCH_HALT_VOTED,
1683 .hwcg_reg = 0x81008,
1686 .enable_reg = 0x81008,
1687 .enable_mask = BIT(0),
1688 .hw.init = &(const struct clk_init_data) {
1689 .name = "gcc_qmip_gpu_ahb_clk",
1690 .ops = &clk_branch2_ops,
1695 static struct clk_branch gcc_qmip_pcie_ahb_clk = {
1696 .halt_reg = 0x7b018,
1697 .halt_check = BRANCH_HALT_VOTED,
1698 .hwcg_reg = 0x7b018,
1701 .enable_reg = 0x7b018,
1702 .enable_mask = BIT(0),
1703 .hw.init = &(const struct clk_init_data) {
1704 .name = "gcc_qmip_pcie_ahb_clk",
1705 .ops = &clk_branch2_ops,
1710 static struct clk_branch gcc_qmip_video_vcodec_ahb_clk = {
1711 .halt_reg = 0x42008,
1712 .halt_check = BRANCH_HALT_VOTED,
1713 .hwcg_reg = 0x42008,
1716 .enable_reg = 0x42008,
1717 .enable_mask = BIT(0),
1718 .hw.init = &(const struct clk_init_data) {
1719 .name = "gcc_qmip_video_vcodec_ahb_clk",
1720 .ops = &clk_branch2_ops,
1725 static struct clk_branch gcc_qupv3_wrap0_core_2x_clk = {
1726 .halt_reg = 0x3300c,
1727 .halt_check = BRANCH_HALT_VOTED,
1729 .enable_reg = 0x62008,
1730 .enable_mask = BIT(9),
1731 .hw.init = &(const struct clk_init_data) {
1732 .name = "gcc_qupv3_wrap0_core_2x_clk",
1733 .ops = &clk_branch2_ops,
1738 static struct clk_branch gcc_qupv3_wrap0_core_clk = {
1739 .halt_reg = 0x33000,
1740 .halt_check = BRANCH_HALT_VOTED,
1742 .enable_reg = 0x62008,
1743 .enable_mask = BIT(8),
1744 .hw.init = &(const struct clk_init_data) {
1745 .name = "gcc_qupv3_wrap0_core_clk",
1746 .ops = &clk_branch2_ops,
1751 static struct clk_branch gcc_qupv3_wrap0_s0_clk = {
1752 .halt_reg = 0x2700c,
1753 .halt_check = BRANCH_HALT_VOTED,
1755 .enable_reg = 0x62008,
1756 .enable_mask = BIT(10),
1757 .hw.init = &(const struct clk_init_data) {
1758 .name = "gcc_qupv3_wrap0_s0_clk",
1759 .parent_hws = (const struct clk_hw*[]) {
1760 &gcc_qupv3_wrap0_s0_clk_src.clkr.hw,
1763 .flags = CLK_SET_RATE_PARENT,
1764 .ops = &clk_branch2_ops,
1769 static struct clk_branch gcc_qupv3_wrap0_s1_clk = {
1770 .halt_reg = 0x27140,
1771 .halt_check = BRANCH_HALT_VOTED,
1773 .enable_reg = 0x62008,
1774 .enable_mask = BIT(11),
1775 .hw.init = &(const struct clk_init_data) {
1776 .name = "gcc_qupv3_wrap0_s1_clk",
1777 .parent_hws = (const struct clk_hw*[]) {
1778 &gcc_qupv3_wrap0_s1_clk_src.clkr.hw,
1781 .flags = CLK_SET_RATE_PARENT,
1782 .ops = &clk_branch2_ops,
1787 static struct clk_branch gcc_qupv3_wrap0_s2_clk = {
1788 .halt_reg = 0x27274,
1789 .halt_check = BRANCH_HALT_VOTED,
1791 .enable_reg = 0x62008,
1792 .enable_mask = BIT(12),
1793 .hw.init = &(const struct clk_init_data) {
1794 .name = "gcc_qupv3_wrap0_s2_clk",
1795 .parent_hws = (const struct clk_hw*[]) {
1796 &gcc_qupv3_wrap0_s2_clk_src.clkr.hw,
1799 .flags = CLK_SET_RATE_PARENT,
1800 .ops = &clk_branch2_ops,
1805 static struct clk_branch gcc_qupv3_wrap0_s3_clk = {
1806 .halt_reg = 0x273a8,
1807 .halt_check = BRANCH_HALT_VOTED,
1809 .enable_reg = 0x62008,
1810 .enable_mask = BIT(13),
1811 .hw.init = &(const struct clk_init_data) {
1812 .name = "gcc_qupv3_wrap0_s3_clk",
1813 .parent_hws = (const struct clk_hw*[]) {
1814 &gcc_qupv3_wrap0_s3_clk_src.clkr.hw,
1817 .flags = CLK_SET_RATE_PARENT,
1818 .ops = &clk_branch2_ops,
1823 static struct clk_branch gcc_qupv3_wrap0_s4_clk = {
1824 .halt_reg = 0x274dc,
1825 .halt_check = BRANCH_HALT_VOTED,
1827 .enable_reg = 0x62008,
1828 .enable_mask = BIT(14),
1829 .hw.init = &(const struct clk_init_data) {
1830 .name = "gcc_qupv3_wrap0_s4_clk",
1831 .parent_hws = (const struct clk_hw*[]) {
1832 &gcc_qupv3_wrap0_s4_clk_src.clkr.hw,
1835 .flags = CLK_SET_RATE_PARENT,
1836 .ops = &clk_branch2_ops,
1841 static struct clk_branch gcc_qupv3_wrap1_core_2x_clk = {
1842 .halt_reg = 0x3314c,
1843 .halt_check = BRANCH_HALT_VOTED,
1845 .enable_reg = 0x62008,
1846 .enable_mask = BIT(18),
1847 .hw.init = &(const struct clk_init_data) {
1848 .name = "gcc_qupv3_wrap1_core_2x_clk",
1849 .ops = &clk_branch2_ops,
1854 static struct clk_branch gcc_qupv3_wrap1_core_clk = {
1855 .halt_reg = 0x33140,
1856 .halt_check = BRANCH_HALT_VOTED,
1858 .enable_reg = 0x62008,
1859 .enable_mask = BIT(19),
1860 .hw.init = &(const struct clk_init_data) {
1861 .name = "gcc_qupv3_wrap1_core_clk",
1862 .ops = &clk_branch2_ops,
1867 static struct clk_branch gcc_qupv3_wrap1_s0_clk = {
1868 .halt_reg = 0x2800c,
1869 .halt_check = BRANCH_HALT_VOTED,
1871 .enable_reg = 0x62008,
1872 .enable_mask = BIT(22),
1873 .hw.init = &(const struct clk_init_data) {
1874 .name = "gcc_qupv3_wrap1_s0_clk",
1875 .parent_hws = (const struct clk_hw*[]) {
1876 &gcc_qupv3_wrap1_s0_clk_src.clkr.hw,
1879 .flags = CLK_SET_RATE_PARENT,
1880 .ops = &clk_branch2_ops,
1885 static struct clk_branch gcc_qupv3_wrap1_s1_clk = {
1886 .halt_reg = 0x28140,
1887 .halt_check = BRANCH_HALT_VOTED,
1889 .enable_reg = 0x62008,
1890 .enable_mask = BIT(23),
1891 .hw.init = &(const struct clk_init_data) {
1892 .name = "gcc_qupv3_wrap1_s1_clk",
1893 .parent_hws = (const struct clk_hw*[]) {
1894 &gcc_qupv3_wrap1_s1_clk_src.clkr.hw,
1897 .flags = CLK_SET_RATE_PARENT,
1898 .ops = &clk_branch2_ops,
1903 static struct clk_branch gcc_qupv3_wrap1_s2_clk = {
1904 .halt_reg = 0x28274,
1905 .halt_check = BRANCH_HALT_VOTED,
1907 .enable_reg = 0x62008,
1908 .enable_mask = BIT(24),
1909 .hw.init = &(const struct clk_init_data) {
1910 .name = "gcc_qupv3_wrap1_s2_clk",
1911 .parent_hws = (const struct clk_hw*[]) {
1912 &gcc_qupv3_wrap1_s2_clk_src.clkr.hw,
1915 .flags = CLK_SET_RATE_PARENT,
1916 .ops = &clk_branch2_ops,
1921 static struct clk_branch gcc_qupv3_wrap1_s3_clk = {
1922 .halt_reg = 0x283a8,
1923 .halt_check = BRANCH_HALT_VOTED,
1925 .enable_reg = 0x62008,
1926 .enable_mask = BIT(25),
1927 .hw.init = &(const struct clk_init_data) {
1928 .name = "gcc_qupv3_wrap1_s3_clk",
1929 .parent_hws = (const struct clk_hw*[]) {
1930 &gcc_qupv3_wrap1_s3_clk_src.clkr.hw,
1933 .flags = CLK_SET_RATE_PARENT,
1934 .ops = &clk_branch2_ops,
1939 static struct clk_branch gcc_qupv3_wrap1_s4_clk = {
1940 .halt_reg = 0x284dc,
1941 .halt_check = BRANCH_HALT_VOTED,
1943 .enable_reg = 0x62008,
1944 .enable_mask = BIT(26),
1945 .hw.init = &(const struct clk_init_data) {
1946 .name = "gcc_qupv3_wrap1_s4_clk",
1947 .parent_hws = (const struct clk_hw*[]) {
1948 &gcc_qupv3_wrap1_s4_clk_src.clkr.hw,
1951 .flags = CLK_SET_RATE_PARENT,
1952 .ops = &clk_branch2_ops,
1957 static struct clk_branch gcc_qupv3_wrap_0_m_ahb_clk = {
1958 .halt_reg = 0x27004,
1959 .halt_check = BRANCH_HALT_VOTED,
1960 .hwcg_reg = 0x27004,
1963 .enable_reg = 0x62008,
1964 .enable_mask = BIT(6),
1965 .hw.init = &(const struct clk_init_data) {
1966 .name = "gcc_qupv3_wrap_0_m_ahb_clk",
1967 .ops = &clk_branch2_ops,
1972 static struct clk_branch gcc_qupv3_wrap_0_s_ahb_clk = {
1973 .halt_reg = 0x27008,
1974 .halt_check = BRANCH_HALT_VOTED,
1975 .hwcg_reg = 0x27008,
1978 .enable_reg = 0x62008,
1979 .enable_mask = BIT(7),
1980 .hw.init = &(const struct clk_init_data) {
1981 .name = "gcc_qupv3_wrap_0_s_ahb_clk",
1982 .ops = &clk_branch2_ops,
1987 static struct clk_branch gcc_qupv3_wrap_1_m_ahb_clk = {
1988 .halt_reg = 0x28004,
1989 .halt_check = BRANCH_HALT_VOTED,
1990 .hwcg_reg = 0x28004,
1993 .enable_reg = 0x62008,
1994 .enable_mask = BIT(20),
1995 .hw.init = &(const struct clk_init_data) {
1996 .name = "gcc_qupv3_wrap_1_m_ahb_clk",
1997 .ops = &clk_branch2_ops,
2002 static struct clk_branch gcc_qupv3_wrap_1_s_ahb_clk = {
2003 .halt_reg = 0x28008,
2004 .halt_check = BRANCH_HALT_VOTED,
2005 .hwcg_reg = 0x28008,
2008 .enable_reg = 0x62008,
2009 .enable_mask = BIT(21),
2010 .hw.init = &(const struct clk_init_data) {
2011 .name = "gcc_qupv3_wrap_1_s_ahb_clk",
2012 .ops = &clk_branch2_ops,
2017 static struct clk_branch gcc_sdcc1_ahb_clk = {
2018 .halt_reg = 0xb3004,
2019 .halt_check = BRANCH_HALT,
2021 .enable_reg = 0xb3004,
2022 .enable_mask = BIT(0),
2023 .hw.init = &(const struct clk_init_data) {
2024 .name = "gcc_sdcc1_ahb_clk",
2025 .ops = &clk_branch2_ops,
2030 static struct clk_branch gcc_sdcc1_apps_clk = {
2031 .halt_reg = 0xb3008,
2032 .halt_check = BRANCH_HALT,
2034 .enable_reg = 0xb3008,
2035 .enable_mask = BIT(0),
2036 .hw.init = &(const struct clk_init_data) {
2037 .name = "gcc_sdcc1_apps_clk",
2038 .parent_hws = (const struct clk_hw*[]) {
2039 &gcc_sdcc1_apps_clk_src.clkr.hw,
2042 .flags = CLK_SET_RATE_PARENT,
2043 .ops = &clk_branch2_ops,
2048 static struct clk_branch gcc_sdcc1_ice_core_clk = {
2049 .halt_reg = 0xb3028,
2050 .halt_check = BRANCH_HALT_VOTED,
2051 .hwcg_reg = 0xb3028,
2054 .enable_reg = 0xb3028,
2055 .enable_mask = BIT(0),
2056 .hw.init = &(const struct clk_init_data) {
2057 .name = "gcc_sdcc1_ice_core_clk",
2058 .parent_hws = (const struct clk_hw*[]) {
2059 &gcc_sdcc1_ice_core_clk_src.clkr.hw,
2062 .flags = CLK_SET_RATE_PARENT,
2063 .ops = &clk_branch2_ops,
2068 static struct clk_branch gcc_sdcc2_ahb_clk = {
2069 .halt_reg = 0x2400c,
2070 .halt_check = BRANCH_HALT,
2072 .enable_reg = 0x2400c,
2073 .enable_mask = BIT(0),
2074 .hw.init = &(const struct clk_init_data) {
2075 .name = "gcc_sdcc2_ahb_clk",
2076 .ops = &clk_branch2_ops,
2081 static struct clk_branch gcc_sdcc2_apps_clk = {
2082 .halt_reg = 0x24004,
2083 .halt_check = BRANCH_HALT,
2085 .enable_reg = 0x24004,
2086 .enable_mask = BIT(0),
2087 .hw.init = &(const struct clk_init_data) {
2088 .name = "gcc_sdcc2_apps_clk",
2089 .parent_hws = (const struct clk_hw*[]) {
2090 &gcc_sdcc2_apps_clk_src.clkr.hw,
2093 .flags = CLK_SET_RATE_PARENT,
2094 .ops = &clk_branch2_ops,
2099 static struct clk_branch gcc_ufs_0_clkref_en = {
2100 .halt_reg = 0x9c000,
2101 .halt_check = BRANCH_HALT_DELAY,
2103 .enable_reg = 0x9c000,
2104 .enable_mask = BIT(0),
2105 .hw.init = &(const struct clk_init_data) {
2106 .name = "gcc_ufs_0_clkref_en",
2107 .ops = &clk_branch2_ops,
2112 static struct clk_branch gcc_ufs_pad_clkref_en = {
2113 .halt_reg = 0x9c024,
2114 .halt_check = BRANCH_HALT_DELAY,
2116 .enable_reg = 0x9c024,
2117 .enable_mask = BIT(0),
2118 .hw.init = &(const struct clk_init_data) {
2119 .name = "gcc_ufs_pad_clkref_en",
2120 .ops = &clk_branch2_ops,
2125 static struct clk_branch gcc_ufs_phy_ahb_clk = {
2126 .halt_reg = 0x87020,
2127 .halt_check = BRANCH_HALT_VOTED,
2128 .hwcg_reg = 0x87020,
2131 .enable_reg = 0x87020,
2132 .enable_mask = BIT(0),
2133 .hw.init = &(const struct clk_init_data) {
2134 .name = "gcc_ufs_phy_ahb_clk",
2135 .ops = &clk_branch2_ops,
2140 static struct clk_branch gcc_ufs_phy_axi_clk = {
2141 .halt_reg = 0x87018,
2142 .halt_check = BRANCH_HALT_VOTED,
2143 .hwcg_reg = 0x87018,
2146 .enable_reg = 0x87018,
2147 .enable_mask = BIT(0),
2148 .hw.init = &(const struct clk_init_data) {
2149 .name = "gcc_ufs_phy_axi_clk",
2150 .parent_hws = (const struct clk_hw*[]) {
2151 &gcc_ufs_phy_axi_clk_src.clkr.hw,
2154 .flags = CLK_SET_RATE_PARENT,
2155 .ops = &clk_branch2_ops,
2160 static struct clk_branch gcc_ufs_phy_axi_hw_ctl_clk = {
2161 .halt_reg = 0x87018,
2162 .halt_check = BRANCH_HALT_VOTED,
2163 .hwcg_reg = 0x87018,
2166 .enable_reg = 0x87018,
2167 .enable_mask = BIT(1),
2168 .hw.init = &(const struct clk_init_data) {
2169 .name = "gcc_ufs_phy_axi_hw_ctl_clk",
2170 .parent_hws = (const struct clk_hw*[]) {
2171 &gcc_ufs_phy_axi_clk_src.clkr.hw,
2174 .flags = CLK_SET_RATE_PARENT,
2175 .ops = &clk_branch2_ops,
2180 static struct clk_branch gcc_ufs_phy_ice_core_clk = {
2181 .halt_reg = 0x8706c,
2182 .halt_check = BRANCH_HALT_VOTED,
2183 .hwcg_reg = 0x8706c,
2186 .enable_reg = 0x8706c,
2187 .enable_mask = BIT(0),
2188 .hw.init = &(const struct clk_init_data) {
2189 .name = "gcc_ufs_phy_ice_core_clk",
2190 .parent_hws = (const struct clk_hw*[]) {
2191 &gcc_ufs_phy_ice_core_clk_src.clkr.hw,
2194 .flags = CLK_SET_RATE_PARENT,
2195 .ops = &clk_branch2_ops,
2200 static struct clk_branch gcc_ufs_phy_ice_core_hw_ctl_clk = {
2201 .halt_reg = 0x8706c,
2202 .halt_check = BRANCH_HALT_VOTED,
2203 .hwcg_reg = 0x8706c,
2206 .enable_reg = 0x8706c,
2207 .enable_mask = BIT(1),
2208 .hw.init = &(const struct clk_init_data) {
2209 .name = "gcc_ufs_phy_ice_core_hw_ctl_clk",
2210 .parent_hws = (const struct clk_hw*[]) {
2211 &gcc_ufs_phy_ice_core_clk_src.clkr.hw,
2214 .flags = CLK_SET_RATE_PARENT,
2215 .ops = &clk_branch2_ops,
2220 static struct clk_branch gcc_ufs_phy_phy_aux_clk = {
2221 .halt_reg = 0x870a4,
2222 .halt_check = BRANCH_HALT_VOTED,
2223 .hwcg_reg = 0x870a4,
2226 .enable_reg = 0x870a4,
2227 .enable_mask = BIT(0),
2228 .hw.init = &(const struct clk_init_data) {
2229 .name = "gcc_ufs_phy_phy_aux_clk",
2230 .parent_hws = (const struct clk_hw*[]) {
2231 &gcc_ufs_phy_phy_aux_clk_src.clkr.hw,
2234 .flags = CLK_SET_RATE_PARENT,
2235 .ops = &clk_branch2_ops,
2240 static struct clk_branch gcc_ufs_phy_phy_aux_hw_ctl_clk = {
2241 .halt_reg = 0x870a4,
2242 .halt_check = BRANCH_HALT_VOTED,
2243 .hwcg_reg = 0x870a4,
2246 .enable_reg = 0x870a4,
2247 .enable_mask = BIT(1),
2248 .hw.init = &(const struct clk_init_data) {
2249 .name = "gcc_ufs_phy_phy_aux_hw_ctl_clk",
2250 .parent_hws = (const struct clk_hw*[]) {
2251 &gcc_ufs_phy_phy_aux_clk_src.clkr.hw,
2254 .flags = CLK_SET_RATE_PARENT,
2255 .ops = &clk_branch2_ops,
2260 static struct clk_branch gcc_ufs_phy_rx_symbol_0_clk = {
2261 .halt_reg = 0x87028,
2262 .halt_check = BRANCH_HALT_DELAY,
2264 .enable_reg = 0x87028,
2265 .enable_mask = BIT(0),
2266 .hw.init = &(const struct clk_init_data) {
2267 .name = "gcc_ufs_phy_rx_symbol_0_clk",
2268 .parent_hws = (const struct clk_hw*[]) {
2269 &gcc_ufs_phy_rx_symbol_0_clk_src.clkr.hw,
2272 .flags = CLK_SET_RATE_PARENT,
2273 .ops = &clk_branch2_ops,
2278 static struct clk_branch gcc_ufs_phy_rx_symbol_1_clk = {
2279 .halt_reg = 0x870c0,
2280 .halt_check = BRANCH_HALT_DELAY,
2282 .enable_reg = 0x870c0,
2283 .enable_mask = BIT(0),
2284 .hw.init = &(const struct clk_init_data) {
2285 .name = "gcc_ufs_phy_rx_symbol_1_clk",
2286 .parent_hws = (const struct clk_hw*[]) {
2287 &gcc_ufs_phy_rx_symbol_1_clk_src.clkr.hw,
2290 .flags = CLK_SET_RATE_PARENT,
2291 .ops = &clk_branch2_ops,
2296 static struct clk_branch gcc_ufs_phy_tx_symbol_0_clk = {
2297 .halt_reg = 0x87024,
2298 .halt_check = BRANCH_HALT_DELAY,
2300 .enable_reg = 0x87024,
2301 .enable_mask = BIT(0),
2302 .hw.init = &(const struct clk_init_data) {
2303 .name = "gcc_ufs_phy_tx_symbol_0_clk",
2304 .parent_hws = (const struct clk_hw*[]) {
2305 &gcc_ufs_phy_tx_symbol_0_clk_src.clkr.hw,
2308 .flags = CLK_SET_RATE_PARENT,
2309 .ops = &clk_branch2_ops,
2314 static struct clk_branch gcc_ufs_phy_unipro_core_clk = {
2315 .halt_reg = 0x87064,
2316 .halt_check = BRANCH_HALT_VOTED,
2317 .hwcg_reg = 0x87064,
2320 .enable_reg = 0x87064,
2321 .enable_mask = BIT(0),
2322 .hw.init = &(const struct clk_init_data) {
2323 .name = "gcc_ufs_phy_unipro_core_clk",
2324 .parent_hws = (const struct clk_hw*[]) {
2325 &gcc_ufs_phy_unipro_core_clk_src.clkr.hw,
2328 .flags = CLK_SET_RATE_PARENT,
2329 .ops = &clk_branch2_ops,
2334 static struct clk_branch gcc_ufs_phy_unipro_core_hw_ctl_clk = {
2335 .halt_reg = 0x87064,
2336 .halt_check = BRANCH_HALT_VOTED,
2337 .hwcg_reg = 0x87064,
2340 .enable_reg = 0x87064,
2341 .enable_mask = BIT(1),
2342 .hw.init = &(const struct clk_init_data) {
2343 .name = "gcc_ufs_phy_unipro_core_hw_ctl_clk",
2344 .parent_hws = (const struct clk_hw*[]) {
2345 &gcc_ufs_phy_unipro_core_clk_src.clkr.hw,
2348 .flags = CLK_SET_RATE_PARENT,
2349 .ops = &clk_branch2_ops,
2354 static struct clk_branch gcc_usb30_prim_master_clk = {
2355 .halt_reg = 0x49018,
2356 .halt_check = BRANCH_HALT,
2358 .enable_reg = 0x49018,
2359 .enable_mask = BIT(0),
2360 .hw.init = &(const struct clk_init_data) {
2361 .name = "gcc_usb30_prim_master_clk",
2362 .parent_hws = (const struct clk_hw*[]) {
2363 &gcc_usb30_prim_master_clk_src.clkr.hw,
2366 .flags = CLK_SET_RATE_PARENT,
2367 .ops = &clk_branch2_ops,
2372 static struct clk_branch gcc_usb30_prim_mock_utmi_clk = {
2373 .halt_reg = 0x49024,
2374 .halt_check = BRANCH_HALT,
2376 .enable_reg = 0x49024,
2377 .enable_mask = BIT(0),
2378 .hw.init = &(const struct clk_init_data) {
2379 .name = "gcc_usb30_prim_mock_utmi_clk",
2380 .parent_hws = (const struct clk_hw*[]) {
2381 &gcc_usb30_prim_mock_utmi_postdiv_clk_src.clkr.hw,
2384 .flags = CLK_SET_RATE_PARENT,
2385 .ops = &clk_branch2_ops,
2390 static struct clk_branch gcc_usb30_prim_sleep_clk = {
2391 .halt_reg = 0x49020,
2392 .halt_check = BRANCH_HALT,
2394 .enable_reg = 0x49020,
2395 .enable_mask = BIT(0),
2396 .hw.init = &(const struct clk_init_data) {
2397 .name = "gcc_usb30_prim_sleep_clk",
2398 .ops = &clk_branch2_ops,
2403 static struct clk_branch gcc_usb3_0_clkref_en = {
2404 .halt_reg = 0x9c010,
2405 .halt_check = BRANCH_HALT_DELAY,
2407 .enable_reg = 0x9c010,
2408 .enable_mask = BIT(0),
2409 .hw.init = &(const struct clk_init_data) {
2410 .name = "gcc_usb3_0_clkref_en",
2411 .ops = &clk_branch2_ops,
2416 static struct clk_branch gcc_usb3_prim_phy_aux_clk = {
2417 .halt_reg = 0x4905c,
2418 .halt_check = BRANCH_HALT,
2420 .enable_reg = 0x4905c,
2421 .enable_mask = BIT(0),
2422 .hw.init = &(const struct clk_init_data) {
2423 .name = "gcc_usb3_prim_phy_aux_clk",
2424 .parent_hws = (const struct clk_hw*[]) {
2425 &gcc_usb3_prim_phy_aux_clk_src.clkr.hw,
2428 .flags = CLK_SET_RATE_PARENT,
2429 .ops = &clk_branch2_ops,
2434 static struct clk_branch gcc_usb3_prim_phy_com_aux_clk = {
2435 .halt_reg = 0x49060,
2436 .halt_check = BRANCH_HALT,
2438 .enable_reg = 0x49060,
2439 .enable_mask = BIT(0),
2440 .hw.init = &(const struct clk_init_data) {
2441 .name = "gcc_usb3_prim_phy_com_aux_clk",
2442 .parent_hws = (const struct clk_hw*[]) {
2443 &gcc_usb3_prim_phy_aux_clk_src.clkr.hw,
2446 .flags = CLK_SET_RATE_PARENT,
2447 .ops = &clk_branch2_ops,
2452 static struct clk_branch gcc_usb3_prim_phy_pipe_clk = {
2453 .halt_reg = 0x49064,
2454 .halt_check = BRANCH_HALT_DELAY,
2455 .hwcg_reg = 0x49064,
2458 .enable_reg = 0x49064,
2459 .enable_mask = BIT(0),
2460 .hw.init = &(const struct clk_init_data) {
2461 .name = "gcc_usb3_prim_phy_pipe_clk",
2462 .parent_hws = (const struct clk_hw*[]) {
2463 &gcc_usb3_prim_phy_pipe_clk_src.clkr.hw,
2466 .flags = CLK_SET_RATE_PARENT,
2467 .ops = &clk_branch2_ops,
2472 static struct clk_branch gcc_vcodec0_axi_clk = {
2473 .halt_reg = 0x42020,
2474 .halt_check = BRANCH_HALT_SKIP,
2475 .hwcg_reg = 0x42020,
2478 .enable_reg = 0x42020,
2479 .enable_mask = BIT(0),
2480 .hw.init = &(const struct clk_init_data) {
2481 .name = "gcc_vcodec0_axi_clk",
2482 .ops = &clk_branch2_ops,
2487 static struct clk_branch gcc_venus_ctl_axi_clk = {
2488 .halt_reg = 0x4201c,
2489 .halt_check = BRANCH_HALT_SKIP,
2491 .enable_reg = 0x4201c,
2492 .enable_mask = BIT(0),
2493 .hw.init = &(const struct clk_init_data) {
2494 .name = "gcc_venus_ctl_axi_clk",
2495 .ops = &clk_branch2_ops,
2500 static struct clk_branch gcc_video_throttle_core_clk = {
2501 .halt_reg = 0x42014,
2502 .halt_check = BRANCH_HALT_SKIP,
2503 .hwcg_reg = 0x42014,
2506 .enable_reg = 0x42014,
2507 .enable_mask = BIT(0),
2508 .hw.init = &(const struct clk_init_data) {
2509 .name = "gcc_video_throttle_core_clk",
2510 .ops = &clk_branch2_ops,
2515 static struct clk_branch gcc_video_vcodec0_sys_clk = {
2516 .halt_reg = 0xb6058,
2517 .halt_check = BRANCH_HALT_VOTED,
2518 .hwcg_reg = 0xb6058,
2521 .enable_reg = 0xb6058,
2522 .enable_mask = BIT(0),
2523 .hw.init = &(const struct clk_init_data) {
2524 .name = "gcc_video_vcodec0_sys_clk",
2525 .parent_hws = (const struct clk_hw*[]) {
2526 &gcc_video_venus_clk_src.clkr.hw,
2529 .flags = CLK_SET_RATE_PARENT,
2530 .ops = &clk_branch2_ops,
2535 static struct clk_branch gcc_video_venus_ctl_clk = {
2536 .halt_reg = 0xb6038,
2537 .halt_check = BRANCH_HALT,
2539 .enable_reg = 0xb6038,
2540 .enable_mask = BIT(0),
2541 .hw.init = &(const struct clk_init_data) {
2542 .name = "gcc_video_venus_ctl_clk",
2543 .parent_hws = (const struct clk_hw*[]) {
2544 &gcc_video_venus_clk_src.clkr.hw,
2547 .flags = CLK_SET_RATE_PARENT,
2548 .ops = &clk_branch2_ops,
2553 static struct gdsc gcc_pcie_0_gdsc = {
2555 .en_rest_wait_val = 0x2,
2556 .en_few_wait_val = 0x2,
2557 .clk_dis_wait_val = 0xf,
2559 .name = "gcc_pcie_0_gdsc",
2561 .pwrsts = PWRSTS_OFF_ON,
2562 .flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE | VOTABLE,
2565 static struct gdsc gcc_ufs_phy_gdsc = {
2567 .en_rest_wait_val = 0x2,
2568 .en_few_wait_val = 0x2,
2569 .clk_dis_wait_val = 0xf,
2571 .name = "gcc_ufs_phy_gdsc",
2573 .pwrsts = PWRSTS_OFF_ON,
2574 .flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE,
2577 static struct gdsc gcc_usb30_prim_gdsc = {
2579 .en_rest_wait_val = 0x2,
2580 .en_few_wait_val = 0x2,
2581 .clk_dis_wait_val = 0xf,
2583 .name = "gcc_usb30_prim_gdsc",
2585 .pwrsts = PWRSTS_OFF_ON,
2586 .flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE,
2589 static struct gdsc gcc_vcodec0_gdsc = {
2591 .en_rest_wait_val = 0x2,
2592 .en_few_wait_val = 0x2,
2593 .clk_dis_wait_val = 0xf,
2595 .name = "gcc_vcodec0_gdsc",
2597 .pwrsts = PWRSTS_OFF_ON,
2598 .flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE | HW_CTRL,
2601 static struct gdsc gcc_venus_gdsc = {
2603 .en_rest_wait_val = 0x2,
2604 .en_few_wait_val = 0x2,
2605 .clk_dis_wait_val = 0xf,
2607 .name = "gcc_venus_gdsc",
2609 .pwrsts = PWRSTS_OFF_ON,
2610 .flags = POLL_CFG_GDSCR | RETAIN_FF_ENABLE,
2613 static struct clk_regmap *gcc_sm4450_clocks[] = {
2614 [GCC_AGGRE_NOC_PCIE_0_AXI_CLK] = &gcc_aggre_noc_pcie_0_axi_clk.clkr,
2615 [GCC_AGGRE_UFS_PHY_AXI_CLK] = &gcc_aggre_ufs_phy_axi_clk.clkr,
2616 [GCC_AGGRE_UFS_PHY_AXI_HW_CTL_CLK] = &gcc_aggre_ufs_phy_axi_hw_ctl_clk.clkr,
2617 [GCC_AGGRE_USB3_PRIM_AXI_CLK] = &gcc_aggre_usb3_prim_axi_clk.clkr,
2618 [GCC_BOOT_ROM_AHB_CLK] = &gcc_boot_rom_ahb_clk.clkr,
2619 [GCC_CAMERA_HF_AXI_CLK] = &gcc_camera_hf_axi_clk.clkr,
2620 [GCC_CAMERA_SF_AXI_CLK] = &gcc_camera_sf_axi_clk.clkr,
2621 [GCC_CFG_NOC_PCIE_ANOC_AHB_CLK] = &gcc_cfg_noc_pcie_anoc_ahb_clk.clkr,
2622 [GCC_CFG_NOC_USB3_PRIM_AXI_CLK] = &gcc_cfg_noc_usb3_prim_axi_clk.clkr,
2623 [GCC_DDRSS_GPU_AXI_CLK] = &gcc_ddrss_gpu_axi_clk.clkr,
2624 [GCC_DDRSS_PCIE_SF_TBU_CLK] = &gcc_ddrss_pcie_sf_tbu_clk.clkr,
2625 [GCC_DISP_HF_AXI_CLK] = &gcc_disp_hf_axi_clk.clkr,
2626 [GCC_EUSB3_0_CLKREF_EN] = &gcc_eusb3_0_clkref_en.clkr,
2627 [GCC_GP1_CLK] = &gcc_gp1_clk.clkr,
2628 [GCC_GP1_CLK_SRC] = &gcc_gp1_clk_src.clkr,
2629 [GCC_GP2_CLK] = &gcc_gp2_clk.clkr,
2630 [GCC_GP2_CLK_SRC] = &gcc_gp2_clk_src.clkr,
2631 [GCC_GP3_CLK] = &gcc_gp3_clk.clkr,
2632 [GCC_GP3_CLK_SRC] = &gcc_gp3_clk_src.clkr,
2633 [GCC_GPLL0] = &gcc_gpll0.clkr,
2634 [GCC_GPLL0_OUT_EVEN] = &gcc_gpll0_out_even.clkr,
2635 [GCC_GPLL0_OUT_ODD] = &gcc_gpll0_out_odd.clkr,
2636 [GCC_GPLL1] = &gcc_gpll1.clkr,
2637 [GCC_GPLL3] = &gcc_gpll3.clkr,
2638 [GCC_GPLL4] = &gcc_gpll4.clkr,
2639 [GCC_GPLL9] = &gcc_gpll9.clkr,
2640 [GCC_GPLL10] = &gcc_gpll10.clkr,
2641 [GCC_GPU_GPLL0_CLK_SRC] = &gcc_gpu_gpll0_clk_src.clkr,
2642 [GCC_GPU_GPLL0_DIV_CLK_SRC] = &gcc_gpu_gpll0_div_clk_src.clkr,
2643 [GCC_GPU_MEMNOC_GFX_CLK] = &gcc_gpu_memnoc_gfx_clk.clkr,
2644 [GCC_GPU_SNOC_DVM_GFX_CLK] = &gcc_gpu_snoc_dvm_gfx_clk.clkr,
2645 [GCC_HLOS1_VOTE_AGGRE_NOC_MMU_AUDIO_TBU_CLK] =
2646 &gcc_hlos1_vote_aggre_noc_mmu_audio_tbu_clk.clkr,
2647 [GCC_HLOS1_VOTE_AGGRE_NOC_MMU_PCIE_TBU_CLK] =
2648 &gcc_hlos1_vote_aggre_noc_mmu_pcie_tbu_clk.clkr,
2649 [GCC_HLOS1_VOTE_AGGRE_NOC_MMU_TBU1_CLK] = &gcc_hlos1_vote_aggre_noc_mmu_tbu1_clk.clkr,
2650 [GCC_HLOS1_VOTE_AGGRE_NOC_MMU_TBU2_CLK] = &gcc_hlos1_vote_aggre_noc_mmu_tbu2_clk.clkr,
2651 [GCC_HLOS1_VOTE_MMNOC_MMU_TBU_HF0_CLK] = &gcc_hlos1_vote_mmnoc_mmu_tbu_hf0_clk.clkr,
2652 [GCC_HLOS1_VOTE_MMNOC_MMU_TBU_HF1_CLK] = &gcc_hlos1_vote_mmnoc_mmu_tbu_hf1_clk.clkr,
2653 [GCC_HLOS1_VOTE_MMNOC_MMU_TBU_SF0_CLK] = &gcc_hlos1_vote_mmnoc_mmu_tbu_sf0_clk.clkr,
2654 [GCC_HLOS1_VOTE_MMU_TCU_CLK] = &gcc_hlos1_vote_mmu_tcu_clk.clkr,
2655 [GCC_PCIE_0_AUX_CLK] = &gcc_pcie_0_aux_clk.clkr,
2656 [GCC_PCIE_0_AUX_CLK_SRC] = &gcc_pcie_0_aux_clk_src.clkr,
2657 [GCC_PCIE_0_CFG_AHB_CLK] = &gcc_pcie_0_cfg_ahb_clk.clkr,
2658 [GCC_PCIE_0_CLKREF_EN] = &gcc_pcie_0_clkref_en.clkr,
2659 [GCC_PCIE_0_MSTR_AXI_CLK] = &gcc_pcie_0_mstr_axi_clk.clkr,
2660 [GCC_PCIE_0_PHY_RCHNG_CLK] = &gcc_pcie_0_phy_rchng_clk.clkr,
2661 [GCC_PCIE_0_PHY_RCHNG_CLK_SRC] = &gcc_pcie_0_phy_rchng_clk_src.clkr,
2662 [GCC_PCIE_0_PIPE_CLK] = &gcc_pcie_0_pipe_clk.clkr,
2663 [GCC_PCIE_0_PIPE_CLK_SRC] = &gcc_pcie_0_pipe_clk_src.clkr,
2664 [GCC_PCIE_0_PIPE_DIV2_CLK] = &gcc_pcie_0_pipe_div2_clk.clkr,
2665 [GCC_PCIE_0_PIPE_DIV2_CLK_SRC] = &gcc_pcie_0_pipe_div2_clk_src.clkr,
2666 [GCC_PCIE_0_SLV_AXI_CLK] = &gcc_pcie_0_slv_axi_clk.clkr,
2667 [GCC_PCIE_0_SLV_Q2A_AXI_CLK] = &gcc_pcie_0_slv_q2a_axi_clk.clkr,
2668 [GCC_PDM2_CLK] = &gcc_pdm2_clk.clkr,
2669 [GCC_PDM2_CLK_SRC] = &gcc_pdm2_clk_src.clkr,
2670 [GCC_PDM_AHB_CLK] = &gcc_pdm_ahb_clk.clkr,
2671 [GCC_PDM_XO4_CLK] = &gcc_pdm_xo4_clk.clkr,
2672 [GCC_QMIP_CAMERA_NRT_AHB_CLK] = &gcc_qmip_camera_nrt_ahb_clk.clkr,
2673 [GCC_QMIP_CAMERA_RT_AHB_CLK] = &gcc_qmip_camera_rt_ahb_clk.clkr,
2674 [GCC_QMIP_DISP_AHB_CLK] = &gcc_qmip_disp_ahb_clk.clkr,
2675 [GCC_QMIP_GPU_AHB_CLK] = &gcc_qmip_gpu_ahb_clk.clkr,
2676 [GCC_QMIP_PCIE_AHB_CLK] = &gcc_qmip_pcie_ahb_clk.clkr,
2677 [GCC_QMIP_VIDEO_VCODEC_AHB_CLK] = &gcc_qmip_video_vcodec_ahb_clk.clkr,
2678 [GCC_QUPV3_WRAP0_CORE_2X_CLK] = &gcc_qupv3_wrap0_core_2x_clk.clkr,
2679 [GCC_QUPV3_WRAP0_CORE_CLK] = &gcc_qupv3_wrap0_core_clk.clkr,
2680 [GCC_QUPV3_WRAP0_S0_CLK] = &gcc_qupv3_wrap0_s0_clk.clkr,
2681 [GCC_QUPV3_WRAP0_S0_CLK_SRC] = &gcc_qupv3_wrap0_s0_clk_src.clkr,
2682 [GCC_QUPV3_WRAP0_S1_CLK] = &gcc_qupv3_wrap0_s1_clk.clkr,
2683 [GCC_QUPV3_WRAP0_S1_CLK_SRC] = &gcc_qupv3_wrap0_s1_clk_src.clkr,
2684 [GCC_QUPV3_WRAP0_S2_CLK] = &gcc_qupv3_wrap0_s2_clk.clkr,
2685 [GCC_QUPV3_WRAP0_S2_CLK_SRC] = &gcc_qupv3_wrap0_s2_clk_src.clkr,
2686 [GCC_QUPV3_WRAP0_S3_CLK] = &gcc_qupv3_wrap0_s3_clk.clkr,
2687 [GCC_QUPV3_WRAP0_S3_CLK_SRC] = &gcc_qupv3_wrap0_s3_clk_src.clkr,
2688 [GCC_QUPV3_WRAP0_S4_CLK] = &gcc_qupv3_wrap0_s4_clk.clkr,
2689 [GCC_QUPV3_WRAP0_S4_CLK_SRC] = &gcc_qupv3_wrap0_s4_clk_src.clkr,
2690 [GCC_QUPV3_WRAP1_CORE_2X_CLK] = &gcc_qupv3_wrap1_core_2x_clk.clkr,
2691 [GCC_QUPV3_WRAP1_CORE_CLK] = &gcc_qupv3_wrap1_core_clk.clkr,
2692 [GCC_QUPV3_WRAP1_S0_CLK] = &gcc_qupv3_wrap1_s0_clk.clkr,
2693 [GCC_QUPV3_WRAP1_S0_CLK_SRC] = &gcc_qupv3_wrap1_s0_clk_src.clkr,
2694 [GCC_QUPV3_WRAP1_S1_CLK] = &gcc_qupv3_wrap1_s1_clk.clkr,
2695 [GCC_QUPV3_WRAP1_S1_CLK_SRC] = &gcc_qupv3_wrap1_s1_clk_src.clkr,
2696 [GCC_QUPV3_WRAP1_S2_CLK] = &gcc_qupv3_wrap1_s2_clk.clkr,
2697 [GCC_QUPV3_WRAP1_S2_CLK_SRC] = &gcc_qupv3_wrap1_s2_clk_src.clkr,
2698 [GCC_QUPV3_WRAP1_S3_CLK] = &gcc_qupv3_wrap1_s3_clk.clkr,
2699 [GCC_QUPV3_WRAP1_S3_CLK_SRC] = &gcc_qupv3_wrap1_s3_clk_src.clkr,
2700 [GCC_QUPV3_WRAP1_S4_CLK] = &gcc_qupv3_wrap1_s4_clk.clkr,
2701 [GCC_QUPV3_WRAP1_S4_CLK_SRC] = &gcc_qupv3_wrap1_s4_clk_src.clkr,
2702 [GCC_QUPV3_WRAP_0_M_AHB_CLK] = &gcc_qupv3_wrap_0_m_ahb_clk.clkr,
2703 [GCC_QUPV3_WRAP_0_S_AHB_CLK] = &gcc_qupv3_wrap_0_s_ahb_clk.clkr,
2704 [GCC_QUPV3_WRAP_1_M_AHB_CLK] = &gcc_qupv3_wrap_1_m_ahb_clk.clkr,
2705 [GCC_QUPV3_WRAP_1_S_AHB_CLK] = &gcc_qupv3_wrap_1_s_ahb_clk.clkr,
2706 [GCC_SDCC1_AHB_CLK] = &gcc_sdcc1_ahb_clk.clkr,
2707 [GCC_SDCC1_APPS_CLK] = &gcc_sdcc1_apps_clk.clkr,
2708 [GCC_SDCC1_APPS_CLK_SRC] = &gcc_sdcc1_apps_clk_src.clkr,
2709 [GCC_SDCC1_ICE_CORE_CLK] = &gcc_sdcc1_ice_core_clk.clkr,
2710 [GCC_SDCC1_ICE_CORE_CLK_SRC] = &gcc_sdcc1_ice_core_clk_src.clkr,
2711 [GCC_SDCC2_AHB_CLK] = &gcc_sdcc2_ahb_clk.clkr,
2712 [GCC_SDCC2_APPS_CLK] = &gcc_sdcc2_apps_clk.clkr,
2713 [GCC_SDCC2_APPS_CLK_SRC] = &gcc_sdcc2_apps_clk_src.clkr,
2714 [GCC_UFS_0_CLKREF_EN] = &gcc_ufs_0_clkref_en.clkr,
2715 [GCC_UFS_PAD_CLKREF_EN] = &gcc_ufs_pad_clkref_en.clkr,
2716 [GCC_UFS_PHY_AHB_CLK] = &gcc_ufs_phy_ahb_clk.clkr,
2717 [GCC_UFS_PHY_AXI_CLK] = &gcc_ufs_phy_axi_clk.clkr,
2718 [GCC_UFS_PHY_AXI_CLK_SRC] = &gcc_ufs_phy_axi_clk_src.clkr,
2719 [GCC_UFS_PHY_AXI_HW_CTL_CLK] = &gcc_ufs_phy_axi_hw_ctl_clk.clkr,
2720 [GCC_UFS_PHY_ICE_CORE_CLK] = &gcc_ufs_phy_ice_core_clk.clkr,
2721 [GCC_UFS_PHY_ICE_CORE_CLK_SRC] = &gcc_ufs_phy_ice_core_clk_src.clkr,
2722 [GCC_UFS_PHY_ICE_CORE_HW_CTL_CLK] = &gcc_ufs_phy_ice_core_hw_ctl_clk.clkr,
2723 [GCC_UFS_PHY_PHY_AUX_CLK] = &gcc_ufs_phy_phy_aux_clk.clkr,
2724 [GCC_UFS_PHY_PHY_AUX_CLK_SRC] = &gcc_ufs_phy_phy_aux_clk_src.clkr,
2725 [GCC_UFS_PHY_PHY_AUX_HW_CTL_CLK] = &gcc_ufs_phy_phy_aux_hw_ctl_clk.clkr,
2726 [GCC_UFS_PHY_RX_SYMBOL_0_CLK] = &gcc_ufs_phy_rx_symbol_0_clk.clkr,
2727 [GCC_UFS_PHY_RX_SYMBOL_0_CLK_SRC] = &gcc_ufs_phy_rx_symbol_0_clk_src.clkr,
2728 [GCC_UFS_PHY_RX_SYMBOL_1_CLK] = &gcc_ufs_phy_rx_symbol_1_clk.clkr,
2729 [GCC_UFS_PHY_RX_SYMBOL_1_CLK_SRC] = &gcc_ufs_phy_rx_symbol_1_clk_src.clkr,
2730 [GCC_UFS_PHY_TX_SYMBOL_0_CLK] = &gcc_ufs_phy_tx_symbol_0_clk.clkr,
2731 [GCC_UFS_PHY_TX_SYMBOL_0_CLK_SRC] = &gcc_ufs_phy_tx_symbol_0_clk_src.clkr,
2732 [GCC_UFS_PHY_UNIPRO_CORE_CLK] = &gcc_ufs_phy_unipro_core_clk.clkr,
2733 [GCC_UFS_PHY_UNIPRO_CORE_CLK_SRC] = &gcc_ufs_phy_unipro_core_clk_src.clkr,
2734 [GCC_UFS_PHY_UNIPRO_CORE_HW_CTL_CLK] = &gcc_ufs_phy_unipro_core_hw_ctl_clk.clkr,
2735 [GCC_USB30_PRIM_MASTER_CLK] = &gcc_usb30_prim_master_clk.clkr,
2736 [GCC_USB30_PRIM_MASTER_CLK_SRC] = &gcc_usb30_prim_master_clk_src.clkr,
2737 [GCC_USB30_PRIM_MOCK_UTMI_CLK] = &gcc_usb30_prim_mock_utmi_clk.clkr,
2738 [GCC_USB30_PRIM_MOCK_UTMI_CLK_SRC] = &gcc_usb30_prim_mock_utmi_clk_src.clkr,
2739 [GCC_USB30_PRIM_MOCK_UTMI_POSTDIV_CLK_SRC] = &gcc_usb30_prim_mock_utmi_postdiv_clk_src.clkr,
2740 [GCC_USB30_PRIM_SLEEP_CLK] = &gcc_usb30_prim_sleep_clk.clkr,
2741 [GCC_USB3_0_CLKREF_EN] = &gcc_usb3_0_clkref_en.clkr,
2742 [GCC_USB3_PRIM_PHY_AUX_CLK] = &gcc_usb3_prim_phy_aux_clk.clkr,
2743 [GCC_USB3_PRIM_PHY_AUX_CLK_SRC] = &gcc_usb3_prim_phy_aux_clk_src.clkr,
2744 [GCC_USB3_PRIM_PHY_COM_AUX_CLK] = &gcc_usb3_prim_phy_com_aux_clk.clkr,
2745 [GCC_USB3_PRIM_PHY_PIPE_CLK] = &gcc_usb3_prim_phy_pipe_clk.clkr,
2746 [GCC_USB3_PRIM_PHY_PIPE_CLK_SRC] = &gcc_usb3_prim_phy_pipe_clk_src.clkr,
2747 [GCC_VCODEC0_AXI_CLK] = &gcc_vcodec0_axi_clk.clkr,
2748 [GCC_VENUS_CTL_AXI_CLK] = &gcc_venus_ctl_axi_clk.clkr,
2749 [GCC_VIDEO_THROTTLE_CORE_CLK] = &gcc_video_throttle_core_clk.clkr,
2750 [GCC_VIDEO_VCODEC0_SYS_CLK] = &gcc_video_vcodec0_sys_clk.clkr,
2751 [GCC_VIDEO_VENUS_CLK_SRC] = &gcc_video_venus_clk_src.clkr,
2752 [GCC_VIDEO_VENUS_CTL_CLK] = &gcc_video_venus_ctl_clk.clkr,
2755 static struct gdsc *gcc_sm4450_gdscs[] = {
2756 [GCC_PCIE_0_GDSC] = &gcc_pcie_0_gdsc,
2757 [GCC_UFS_PHY_GDSC] = &gcc_ufs_phy_gdsc,
2758 [GCC_USB30_PRIM_GDSC] = &gcc_usb30_prim_gdsc,
2759 [GCC_VCODEC0_GDSC] = &gcc_vcodec0_gdsc,
2760 [GCC_VENUS_GDSC] = &gcc_venus_gdsc,
2763 static const struct qcom_reset_map gcc_sm4450_resets[] = {
2764 [GCC_CAMERA_BCR] = { 0x36000 },
2765 [GCC_DISPLAY_BCR] = { 0x37000 },
2766 [GCC_GPU_BCR] = { 0x81000 },
2767 [GCC_PCIE_0_BCR] = { 0x7b000 },
2768 [GCC_PCIE_0_LINK_DOWN_BCR] = { 0x7c014 },
2769 [GCC_PCIE_0_NOCSR_COM_PHY_BCR] = { 0x7c020 },
2770 [GCC_PCIE_0_PHY_BCR] = { 0x7c01c },
2771 [GCC_PCIE_0_PHY_NOCSR_COM_PHY_BCR] = { 0x7c028 },
2772 [GCC_PCIE_PHY_BCR] = { 0x7f000 },
2773 [GCC_PCIE_PHY_CFG_AHB_BCR] = { 0x7f00c },
2774 [GCC_PCIE_PHY_COM_BCR] = { 0x7f010 },
2775 [GCC_PDM_BCR] = { 0x43000 },
2776 [GCC_QUPV3_WRAPPER_0_BCR] = { 0x27000 },
2777 [GCC_QUPV3_WRAPPER_1_BCR] = { 0x28000 },
2778 [GCC_QUSB2PHY_PRIM_BCR] = { 0x22000 },
2779 [GCC_QUSB2PHY_SEC_BCR] = { 0x22004 },
2780 [GCC_SDCC1_BCR] = { 0xb3000 },
2781 [GCC_SDCC2_BCR] = { 0x24000 },
2782 [GCC_UFS_PHY_BCR] = { 0x87000 },
2783 [GCC_USB30_PRIM_BCR] = { 0x49000 },
2784 [GCC_USB3_DP_PHY_PRIM_BCR] = { 0x60008 },
2785 [GCC_USB3_DP_PHY_SEC_BCR] = { 0x60014 },
2786 [GCC_USB3_PHY_PRIM_BCR] = { 0x60000 },
2787 [GCC_USB3_PHY_SEC_BCR] = { 0x6000c },
2788 [GCC_USB3PHY_PHY_PRIM_BCR] = { 0x60004 },
2789 [GCC_USB3PHY_PHY_SEC_BCR] = { 0x60010 },
2790 [GCC_VCODEC0_BCR] = { 0xb6040 },
2791 [GCC_VENUS_BCR] = { 0xb601c },
2792 [GCC_VIDEO_BCR] = { 0x42000 },
2793 [GCC_VIDEO_VENUS_BCR] = { 0xb6000 },
2794 [GCC_VENUS_CTL_AXI_CLK_ARES] = { 0x4201c, 2 },
2795 [GCC_VIDEO_VENUS_CTL_CLK_ARES] = { 0xb6038, 2 },
2798 static const struct clk_rcg_dfs_data gcc_dfs_clocks[] = {
2799 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s0_clk_src),
2800 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s1_clk_src),
2801 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s2_clk_src),
2802 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s3_clk_src),
2803 DEFINE_RCG_DFS(gcc_qupv3_wrap0_s4_clk_src),
2804 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s0_clk_src),
2805 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s1_clk_src),
2806 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s2_clk_src),
2807 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s3_clk_src),
2808 DEFINE_RCG_DFS(gcc_qupv3_wrap1_s4_clk_src),
2811 static const struct regmap_config gcc_sm4450_regmap_config = {
2815 .max_register = 0x1f41f0,
2819 static const struct qcom_cc_desc gcc_sm4450_desc = {
2820 .config = &gcc_sm4450_regmap_config,
2821 .clks = gcc_sm4450_clocks,
2822 .num_clks = ARRAY_SIZE(gcc_sm4450_clocks),
2823 .resets = gcc_sm4450_resets,
2824 .num_resets = ARRAY_SIZE(gcc_sm4450_resets),
2825 .gdscs = gcc_sm4450_gdscs,
2826 .num_gdscs = ARRAY_SIZE(gcc_sm4450_gdscs),
2829 static const struct of_device_id gcc_sm4450_match_table[] = {
2830 { .compatible = "qcom,sm4450-gcc" },
2833 MODULE_DEVICE_TABLE(of, gcc_sm4450_match_table);
2835 static int gcc_sm4450_probe(struct platform_device *pdev)
2837 struct regmap *regmap;
2840 regmap = qcom_cc_map(pdev, &gcc_sm4450_desc);
2842 return PTR_ERR(regmap);
2844 clk_lucid_evo_pll_configure(&gcc_gpll3, regmap, &gcc_gpll3_config);
2845 ret = qcom_cc_register_rcg_dfs(regmap, gcc_dfs_clocks,
2846 ARRAY_SIZE(gcc_dfs_clocks));
2850 qcom_branch_set_force_mem_core(regmap, gcc_ufs_phy_ice_core_clk, true);
2853 * Keep clocks always enabled:
2854 * gcc_camera_ahb_clk
2855 * gcc_camera_sleep_clk
2859 * gcc_gpu_cfg_ahb_clk
2863 regmap_update_bits(regmap, 0x36004, BIT(0), BIT(0));
2864 regmap_update_bits(regmap, 0x36018, BIT(0), BIT(0));
2865 regmap_update_bits(regmap, 0x3601c, BIT(0), BIT(0));
2866 regmap_update_bits(regmap, 0x37004, BIT(0), BIT(0));
2867 regmap_update_bits(regmap, 0x37014, BIT(0), BIT(0));
2868 regmap_update_bits(regmap, 0x81004, BIT(0), BIT(0));
2869 regmap_update_bits(regmap, 0x42004, BIT(0), BIT(0));
2870 regmap_update_bits(regmap, 0x42018, BIT(0), BIT(0));
2872 regmap_update_bits(regmap, 0x4201c, BIT(21), BIT(21));
2874 return qcom_cc_really_probe(pdev, &gcc_sm4450_desc, regmap);
2877 static struct platform_driver gcc_sm4450_driver = {
2878 .probe = gcc_sm4450_probe,
2880 .name = "gcc-sm4450",
2881 .of_match_table = gcc_sm4450_match_table,
2885 static int __init gcc_sm4450_init(void)
2887 return platform_driver_register(&gcc_sm4450_driver);
2889 subsys_initcall(gcc_sm4450_init);
2891 static void __exit gcc_sm4450_exit(void)
2893 platform_driver_unregister(&gcc_sm4450_driver);
2895 module_exit(gcc_sm4450_exit);
2897 MODULE_DESCRIPTION("QTI GCC SM4450 Driver");
2898 MODULE_LICENSE("GPL");